#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct tint_array_wrapper {
  int arr[10];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
  tint_array_wrapper data = {};
  int x_40 = 0;
  int x_40_phi = 0;
  int x_11_phi = 0;
  int const x_7 = data.arr[1];
  int const x_10 = select(1, 2, (1 < x_7));
  x_40_phi = 1;
  x_11_phi = x_10;
  while (true) {
    int x_54 = 0;
    int x_41 = 0;
    int x_41_phi = 0;
    x_40 = x_40_phi;
    int const x_11 = x_11_phi;
    if ((x_11 < 3)) {
    } else {
      break;
    }
    int x_54_phi = 0;
    int const x_8 = as_type<int>((as_type<uint>(x_11) + as_type<uint>(1)));
    float const x_47 = x_6.injectionSwitch.x;
    x_54_phi = x_40;
    switch(int(x_47)) {
      case 78: {
        *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
        /* fallthrough */
      }
      case 19: {
        x_54_phi = as_type<int>(as_type<int>((as_type<uint>(x_40) + as_type<uint>(as_type<int>(1)))));
        /* fallthrough */
      }
      case 23:
      case 38: {
        x_54 = x_54_phi;
        x_41_phi = x_54;
        {
          x_41 = x_41_phi;
          x_40_phi = x_41;
          x_11_phi = x_8;
        }
        continue;
        break;
      }
      default: {
        x_41_phi = x_40;
        {
          x_41 = x_41_phi;
          x_40_phi = x_41;
          x_11_phi = x_8;
        }
        continue;
        break;
      }
    }
    x_41_phi = 0;
    {
      x_41 = x_41_phi;
      x_40_phi = x_41;
      x_11_phi = x_8;
    }
  }
  data.arr[x_40] = 1;
  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(x_6, &(tint_symbol_5));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_5};
  tint_symbol_1 const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_3;
}

