#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 merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
  int k = 0;
  int i = 0;
  int j = 0;
  int i_1 = 0;
  int const x_302 = *(from);
  k = x_302;
  int const x_303 = *(from);
  i = x_303;
  int const x_304 = *(mid);
  j = as_type<int>((as_type<uint>(x_304) + as_type<uint>(1)));
  while (true) {
    int const x_310 = i;
    int const x_311 = *(mid);
    int const x_313 = j;
    int const x_314 = *(to);
    if (((x_310 <= x_311) && (x_313 <= x_314))) {
    } else {
      break;
    }
    int const x_318 = i;
    int const x_320 = (*(tint_symbol_3)).arr[x_318];
    int const x_321 = j;
    int const x_323 = (*(tint_symbol_3)).arr[x_321];
    if ((x_320 < x_323)) {
      int const x_328 = k;
      k = as_type<int>((as_type<uint>(x_328) + as_type<uint>(1)));
      int const x_330 = i;
      i = as_type<int>((as_type<uint>(x_330) + as_type<uint>(1)));
      int const x_333 = (*(tint_symbol_3)).arr[x_330];
      (*(tint_symbol_4)).arr[x_328] = x_333;
    } else {
      int const x_335 = k;
      k = as_type<int>((as_type<uint>(x_335) + as_type<uint>(1)));
      int const x_337 = j;
      j = as_type<int>((as_type<uint>(x_337) + as_type<uint>(1)));
      int const x_340 = (*(tint_symbol_3)).arr[x_337];
      (*(tint_symbol_4)).arr[x_335] = x_340;
    }
  }
  while (true) {
    int const x_346 = i;
    int const x_348 = i;
    int const x_349 = *(mid);
    if (((x_346 < 10) && (x_348 <= x_349))) {
    } else {
      break;
    }
    int const x_353 = k;
    k = as_type<int>((as_type<uint>(x_353) + as_type<uint>(1)));
    int const x_355 = i;
    i = as_type<int>((as_type<uint>(x_355) + as_type<uint>(1)));
    int const x_358 = (*(tint_symbol_3)).arr[x_355];
    (*(tint_symbol_4)).arr[x_353] = x_358;
  }
  int const x_360 = *(from);
  i_1 = x_360;
  while (true) {
    int const x_365 = i_1;
    int const x_366 = *(to);
    if ((x_365 <= x_366)) {
    } else {
      break;
    }
    int const x_369 = i_1;
    int const x_370 = i_1;
    int const x_372 = (*(tint_symbol_4)).arr[x_370];
    (*(tint_symbol_3)).arr[x_369] = x_372;
    {
      int const x_374 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_374) + as_type<uint>(1)));
    }
  }
  return;
}

void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
  int x_85 = 0;
  int x_86 = 0;
  int x_87 = 0;
  int x_88 = 0;
  int x_89 = 0;
  int x_90 = 0;
  int x_91 = 0;
  int x_92 = 0;
  int x_93 = 0;
  int x_94 = 0;
  int i_3 = 0;
  int j_1 = 0;
  float grey = 0.0f;
  float const x_96 = x_28.injectionSwitch.x;
  i_3 = int(x_96);
  while (true) {
    int const x_102 = i_3;
    switch(x_102) {
      case 9: {
        int const x_132 = i_3;
        (*(tint_symbol_5)).arr[x_132] = -5;
        break;
      }
      case 8: {
        int const x_130 = i_3;
        (*(tint_symbol_5)).arr[x_130] = -4;
        break;
      }
      case 7: {
        int const x_128 = i_3;
        (*(tint_symbol_5)).arr[x_128] = -3;
        break;
      }
      case 6: {
        int const x_126 = i_3;
        (*(tint_symbol_5)).arr[x_126] = -2;
        break;
      }
      case 5: {
        int const x_124 = i_3;
        (*(tint_symbol_5)).arr[x_124] = -1;
        break;
      }
      case 4: {
        int const x_122 = i_3;
        (*(tint_symbol_5)).arr[x_122] = 0;
        break;
      }
      case 3: {
        int const x_120 = i_3;
        (*(tint_symbol_5)).arr[x_120] = 1;
        break;
      }
      case 2: {
        int const x_118 = i_3;
        (*(tint_symbol_5)).arr[x_118] = 2;
        break;
      }
      case 1: {
        int const x_116 = i_3;
        (*(tint_symbol_5)).arr[x_116] = 3;
        break;
      }
      case 0: {
        int const x_114 = i_3;
        (*(tint_symbol_5)).arr[x_114] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_134 = i_3;
    i_3 = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
    {
      int const x_136 = i_3;
      if ((x_136 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  while (true) {
    int const x_142 = j_1;
    if ((x_142 < 10)) {
    } else {
      break;
    }
    int const x_145 = j_1;
    int const x_146 = j_1;
    int const x_148 = (*(tint_symbol_5)).arr[x_146];
    (*(tint_symbol_6)).arr[x_145] = x_148;
    {
      int const x_150 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
    }
  }
  x_94 = 0;
  x_93 = 9;
  x_92 = 1;
  while (true) {
    int const x_156 = x_92;
    int const x_157 = x_93;
    if ((x_156 <= x_157)) {
    } else {
      break;
    }
    int const x_160 = x_94;
    x_91 = x_160;
    while (true) {
      int const x_165 = x_91;
      int const x_166 = x_93;
      if ((x_165 < x_166)) {
      } else {
        break;
      }
      int const x_169 = x_91;
      x_90 = x_169;
      int const x_170 = x_91;
      int const x_171 = x_92;
      x_89 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_170) + as_type<uint>(x_171)))) - as_type<uint>(1)));
      int const x_174 = x_91;
      int const x_175 = x_92;
      int const x_179 = x_93;
      x_88 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_174) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_175))))))) - as_type<uint>(1))), x_179);
      int const x_181 = x_90;
      x_87 = x_181;
      int const x_182 = x_89;
      x_86 = x_182;
      int const x_183 = x_88;
      x_85 = x_183;
      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85), tint_symbol_5, tint_symbol_6);
      {
        int const x_185 = x_92;
        int const x_187 = x_91;
        x_91 = as_type<int>((as_type<uint>(x_187) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_185))))));
      }
    }
    {
      int const x_189 = x_92;
      x_92 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_189)));
    }
  }
  float const x_193 = (*(tint_symbol_7)).y;
  if ((int(x_193) < 30)) {
    int const x_200 = (*(tint_symbol_5)).arr[0];
    grey = (0.5f + (float(x_200) / 10.0f));
  } else {
    float const x_205 = (*(tint_symbol_7)).y;
    if ((int(x_205) < 60)) {
      int const x_212 = (*(tint_symbol_5)).arr[1];
      grey = (0.5f + (float(x_212) / 10.0f));
    } else {
      float const x_217 = (*(tint_symbol_7)).y;
      if ((int(x_217) < 90)) {
        int const x_224 = (*(tint_symbol_5)).arr[2];
        grey = (0.5f + (float(x_224) / 10.0f));
      } else {
        float const x_229 = (*(tint_symbol_7)).y;
        if ((int(x_229) < 120)) {
          int const x_236 = (*(tint_symbol_5)).arr[3];
          grey = (0.5f + (float(x_236) / 10.0f));
        } else {
          float const x_241 = (*(tint_symbol_7)).y;
          if ((int(x_241) < 150)) {
            discard_fragment();
          } else {
            float const x_248 = (*(tint_symbol_7)).y;
            if ((int(x_248) < 180)) {
              int const x_255 = (*(tint_symbol_5)).arr[5];
              grey = (0.5f + (float(x_255) / 10.0f));
            } else {
              float const x_260 = (*(tint_symbol_7)).y;
              if ((int(x_260) < 210)) {
                int const x_267 = (*(tint_symbol_5)).arr[6];
                grey = (0.5f + (float(x_267) / 10.0f));
              } else {
                float const x_272 = (*(tint_symbol_7)).y;
                if ((int(x_272) < 240)) {
                  int const x_279 = (*(tint_symbol_5)).arr[7];
                  grey = (0.5f + (float(x_279) / 10.0f));
                } else {
                  float const x_284 = (*(tint_symbol_7)).y;
                  if ((int(x_284) < 270)) {
                    int const x_291 = (*(tint_symbol_5)).arr[8];
                    grey = (0.5f + (float(x_291) / 10.0f));
                  } else {
                    discard_fragment();
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float const x_295 = grey;
  float3 const x_296 = float3(x_295, x_295, x_295);
  *(tint_symbol_8) = float4(x_296.x, x_296.y, x_296.z, 1.0f);
  return;
}

main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread tint_array_wrapper* const tint_symbol_10, thread tint_array_wrapper* const tint_symbol_11, thread float4* const tint_symbol_12) {
  *(tint_symbol_9) = gl_FragCoord_param;
  main_1(x_28, tint_symbol_10, tint_symbol_11, tint_symbol_9, tint_symbol_12);
  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_12)};
  return tint_symbol_2;
}

fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
  thread float4 tint_symbol_13 = 0.0f;
  thread tint_array_wrapper tint_symbol_14 = {};
  thread tint_array_wrapper tint_symbol_15 = {};
  thread float4 tint_symbol_16 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

void mergeSort_(thread tint_array_wrapper* const tint_symbol_17, thread tint_array_wrapper* const tint_symbol_18) {
  int low = 0;
  int high = 0;
  int m = 0;
  int i_2 = 0;
  int from_1 = 0;
  int mid_1 = 0;
  int to_1 = 0;
  int param = 0;
  int param_1 = 0;
  int param_2 = 0;
  low = 0;
  high = 9;
  m = 1;
  while (true) {
    int const x_381 = m;
    int const x_382 = high;
    if ((x_381 <= x_382)) {
    } else {
      break;
    }
    int const x_385 = low;
    i_2 = x_385;
    while (true) {
      int const x_390 = i_2;
      int const x_391 = high;
      if ((x_390 < x_391)) {
      } else {
        break;
      }
      int const x_394 = i_2;
      from_1 = x_394;
      int const x_395 = i_2;
      int const x_396 = m;
      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_395) + as_type<uint>(x_396)))) - as_type<uint>(1)));
      int const x_399 = i_2;
      int const x_400 = m;
      int const x_404 = high;
      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_399) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_400))))))) - as_type<uint>(1))), x_404);
      int const x_406 = from_1;
      param = x_406;
      int const x_407 = mid_1;
      param_1 = x_407;
      int const x_408 = to_1;
      param_2 = x_408;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_17, tint_symbol_18);
      {
        int const x_410 = m;
        int const x_412 = i_2;
        i_2 = as_type<int>((as_type<uint>(x_412) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_410))))));
      }
    }
    {
      int const x_414 = m;
      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_414)));
    }
  }
  return;
}

