#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct buf1 {
  /* 0x0000 */ packed_float2 resolution;
};
struct tint_array_wrapper {
  int arr[10];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  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_5, thread tint_array_wrapper* const tint_symbol_6) {
  int k = 0;
  int i = 0;
  int j = 0;
  int i_1 = 0;
  int const x_256 = *(from);
  k = x_256;
  int const x_257 = *(from);
  i = x_257;
  int const x_258 = *(mid);
  j = as_type<int>((as_type<uint>(x_258) + as_type<uint>(1)));
  while (true) {
    int const x_264 = i;
    int const x_265 = *(mid);
    int const x_267 = j;
    int const x_268 = *(to);
    if (((x_264 <= x_265) && (x_267 <= x_268))) {
    } else {
      break;
    }
    int const x_272 = i;
    int const x_274 = (*(tint_symbol_5)).arr[x_272];
    int const x_275 = j;
    int const x_277 = (*(tint_symbol_5)).arr[x_275];
    if ((x_274 < x_277)) {
      int const x_282 = k;
      k = as_type<int>((as_type<uint>(x_282) + as_type<uint>(1)));
      int const x_284 = i;
      i = as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
      int const x_287 = (*(tint_symbol_5)).arr[x_284];
      (*(tint_symbol_6)).arr[x_282] = x_287;
    } else {
      int const x_289 = k;
      k = as_type<int>((as_type<uint>(x_289) + as_type<uint>(1)));
      int const x_291 = j;
      j = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
      int const x_294 = (*(tint_symbol_5)).arr[x_291];
      (*(tint_symbol_6)).arr[x_289] = x_294;
    }
  }
  while (true) {
    if (!((256.0f < 1.0f))) {
    } else {
      continue;
    }
    int const x_301 = i;
    int const x_303 = i;
    int const x_304 = *(mid);
    if (((x_301 < 10) && (x_303 <= x_304))) {
    } else {
      break;
    }
    int const x_309 = k;
    k = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
    int const x_311 = i;
    i = as_type<int>((as_type<uint>(x_311) + as_type<uint>(1)));
    int const x_314 = (*(tint_symbol_5)).arr[x_311];
    (*(tint_symbol_6)).arr[x_309] = x_314;
  }
  int const x_316 = *(from);
  i_1 = x_316;
  while (true) {
    int const x_321 = i_1;
    int const x_322 = *(to);
    if ((x_321 <= x_322)) {
    } else {
      break;
    }
    int const x_325 = i_1;
    int const x_326 = i_1;
    int const x_328 = (*(tint_symbol_6)).arr[x_326];
    (*(tint_symbol_5)).arr[x_325] = x_328;
    {
      int const x_330 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_330) + as_type<uint>(1)));
    }
  }
  return;
}

void mergeSort_(thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8) {
  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_337 = m;
    int const x_338 = high;
    if ((x_337 <= x_338)) {
    } else {
      break;
    }
    int const x_341 = low;
    i_2 = x_341;
    while (true) {
      int const x_346 = i_2;
      int const x_347 = high;
      if ((x_346 < x_347)) {
      } else {
        break;
      }
      int const x_350 = i_2;
      from_1 = x_350;
      int const x_351 = i_2;
      int const x_352 = m;
      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_351) + as_type<uint>(x_352)))) - as_type<uint>(1)));
      int const x_355 = i_2;
      int const x_356 = m;
      int const x_360 = high;
      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_355) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_356))))))) - as_type<uint>(1))), x_360);
      int const x_362 = from_1;
      param = x_362;
      int const x_363 = mid_1;
      param_1 = x_363;
      int const x_364 = to_1;
      param_2 = x_364;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_7, tint_symbol_8);
      {
        int const x_366 = m;
        int const x_368 = i_2;
        i_2 = as_type<int>((as_type<uint>(x_368) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_366))))));
      }
    }
    {
      int const x_370 = m;
      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_370)));
    }
  }
  return;
}

void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_9, thread tint_array_wrapper* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
  int i_3 = 0;
  int j_1 = 0;
  float grey = 0.0f;
  float const x_89 = x_28.injectionSwitch.x;
  i_3 = int(x_89);
  while (true) {
    int const x_95 = i_3;
    switch(x_95) {
      case 9: {
        int const x_125 = i_3;
        (*(tint_symbol_9)).arr[x_125] = -5;
        break;
      }
      case 8: {
        int const x_123 = i_3;
        (*(tint_symbol_9)).arr[x_123] = -4;
        break;
      }
      case 7: {
        int const x_121 = i_3;
        (*(tint_symbol_9)).arr[x_121] = -3;
        break;
      }
      case 6: {
        int const x_119 = i_3;
        (*(tint_symbol_9)).arr[x_119] = -2;
        break;
      }
      case 5: {
        int const x_117 = i_3;
        (*(tint_symbol_9)).arr[x_117] = -1;
        break;
      }
      case 4: {
        int const x_115 = i_3;
        (*(tint_symbol_9)).arr[x_115] = 0;
        break;
      }
      case 3: {
        int const x_113 = i_3;
        (*(tint_symbol_9)).arr[x_113] = 1;
        break;
      }
      case 2: {
        int const x_111 = i_3;
        (*(tint_symbol_9)).arr[x_111] = 2;
        break;
      }
      case 1: {
        int const x_109 = i_3;
        (*(tint_symbol_9)).arr[x_109] = 3;
        break;
      }
      case 0: {
        int const x_107 = i_3;
        (*(tint_symbol_9)).arr[x_107] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_127 = i_3;
    i_3 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
    {
      int const x_129 = i_3;
      if ((x_129 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  while (true) {
    int const x_135 = j_1;
    if ((x_135 < 10)) {
    } else {
      break;
    }
    int const x_138 = j_1;
    int const x_139 = j_1;
    int const x_141 = (*(tint_symbol_9)).arr[x_139];
    (*(tint_symbol_10)).arr[x_138] = x_141;
    {
      int const x_143 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
    }
  }
  mergeSort_(tint_symbol_9, tint_symbol_10);
  float const x_147 = (*(tint_symbol_11)).y;
  if ((int(x_147) < 30)) {
    int const x_154 = (*(tint_symbol_9)).arr[0];
    grey = (0.5f + (float(x_154) / 10.0f));
  } else {
    float const x_159 = (*(tint_symbol_11)).y;
    if ((int(x_159) < 60)) {
      int const x_166 = (*(tint_symbol_9)).arr[1];
      grey = (0.5f + (float(x_166) / 10.0f));
    } else {
      float const x_171 = (*(tint_symbol_11)).y;
      if ((int(x_171) < 90)) {
        int const x_178 = (*(tint_symbol_9)).arr[2];
        grey = (0.5f + (float(x_178) / 10.0f));
      } else {
        float const x_183 = (*(tint_symbol_11)).y;
        if ((int(x_183) < 120)) {
          int const x_190 = (*(tint_symbol_9)).arr[3];
          grey = (0.5f + (float(x_190) / 10.0f));
        } else {
          float const x_195 = (*(tint_symbol_11)).y;
          if ((int(x_195) < 150)) {
            discard_fragment();
          } else {
            float const x_202 = (*(tint_symbol_11)).y;
            if ((int(x_202) < 180)) {
              int const x_209 = (*(tint_symbol_9)).arr[5];
              grey = (0.5f + (float(x_209) / 10.0f));
            } else {
              float const x_214 = (*(tint_symbol_11)).y;
              if ((int(x_214) < 210)) {
                int const x_221 = (*(tint_symbol_9)).arr[6];
                grey = (0.5f + (float(x_221) / 10.0f));
              } else {
                float const x_226 = (*(tint_symbol_11)).y;
                if ((int(x_226) < 240)) {
                  int const x_233 = (*(tint_symbol_9)).arr[7];
                  grey = (0.5f + (float(x_233) / 10.0f));
                } else {
                  float const x_238 = (*(tint_symbol_11)).y;
                  if ((int(x_238) < 270)) {
                    int const x_245 = (*(tint_symbol_9)).arr[8];
                    grey = (0.5f + (float(x_245) / 10.0f));
                  } else {
                    discard_fragment();
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float const x_249 = grey;
  float3 const x_250 = float3(x_249, x_249, x_249);
  *(tint_symbol_12) = float4(x_250.x, x_250.y, x_250.z, 1.0f);
  return;
}

fragment tint_symbol_2 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;
  tint_symbol_13 = gl_FragCoord_param;
  main_1(x_28, &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_13), &(tint_symbol_16));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_16};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

