#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[10];
};
struct QuicksortObject {
  tint_array_wrapper numbers;
};
struct buf0 {
  /* 0x0000 */ packed_float2 resolution;
};
struct main_out {
  float4 frag_color_1;
  float4 gl_Position;
};
struct tint_symbol_2 {
  float4 x_GLF_pos_param [[attribute(0)]];
};
struct tint_symbol_3 {
  float4 frag_color_1 [[user(locn0)]];
  float4 gl_Position [[position]];
};

void main_1(constant buf0& x_34, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7, thread QuicksortObject* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
  int x_90 = 0;
  int x_91 = 0;
  int x_92 = 0;
  int x_93 = 0;
  int x_94 = 0;
  int x_95 = 0;
  int x_96 = 0;
  int x_97 = 0;
  int x_98 = 0;
  int x_99 = 0;
  int x_100 = 0;
  int x_101 = 0;
  int x_102 = 0;
  tint_array_wrapper x_103 = {};
  int x_104 = 0;
  int x_105 = 0;
  int x_106 = 0;
  int i_2 = 0;
  float2 uv = 0.0f;
  float3 color = 0.0f;
  float4 const x_107 = *(tint_symbol_6);
  *(tint_symbol_7) = ((x_107 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
  i_2 = 0;
  while (true) {
    int const x_114 = i_2;
    if ((x_114 < 10)) {
    } else {
      break;
    }
    int const x_117 = i_2;
    int const x_118 = i_2;
    (*(tint_symbol_8)).numbers.arr[x_117] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_118)));
    int const x_121 = i_2;
    int const x_122 = i_2;
    int const x_124 = (*(tint_symbol_8)).numbers.arr[x_122];
    int const x_125 = i_2;
    int const x_127 = (*(tint_symbol_8)).numbers.arr[x_125];
    (*(tint_symbol_8)).numbers.arr[x_121] = as_type<int>((as_type<uint>(x_124) * as_type<uint>(x_127)));
    {
      int const x_130 = i_2;
      i_2 = as_type<int>((as_type<uint>(x_130) + as_type<uint>(1)));
    }
  }
  x_100 = 0;
  x_101 = 9;
  x_102 = -1;
  int const x_132 = x_102;
  int const x_133 = as_type<int>((as_type<uint>(x_132) + as_type<uint>(1)));
  x_102 = x_133;
  int const x_134 = x_100;
  x_103.arr[x_133] = x_134;
  int const x_136 = x_102;
  int const x_137 = as_type<int>((as_type<uint>(x_136) + as_type<uint>(1)));
  x_102 = x_137;
  int const x_138 = x_101;
  x_103.arr[x_137] = x_138;
  while (true) {
    int const x_144 = x_102;
    if ((x_144 >= 0)) {
    } else {
      break;
    }
    int const x_147 = x_102;
    x_102 = as_type<int>((as_type<uint>(x_147) - as_type<uint>(1)));
    int const x_150 = x_103.arr[x_147];
    x_101 = x_150;
    int const x_151 = x_102;
    x_102 = as_type<int>((as_type<uint>(x_151) - as_type<uint>(1)));
    int const x_154 = x_103.arr[x_151];
    x_100 = x_154;
    int const x_155 = x_100;
    x_105 = x_155;
    int const x_156 = x_101;
    x_106 = x_156;
    int const x_157 = x_106;
    int const x_159 = (*(tint_symbol_8)).numbers.arr[x_157];
    x_92 = x_159;
    int const x_160 = x_105;
    x_93 = as_type<int>((as_type<uint>(x_160) - as_type<uint>(1)));
    int const x_162 = x_105;
    x_94 = x_162;
    while (true) {
      int const x_167 = x_94;
      int const x_168 = x_106;
      if ((x_167 <= as_type<int>((as_type<uint>(x_168) - as_type<uint>(1))))) {
      } else {
        break;
      }
      int const x_172 = x_94;
      int const x_174 = (*(tint_symbol_8)).numbers.arr[x_172];
      int const x_175 = x_92;
      if ((x_174 <= x_175)) {
        int const x_179 = x_93;
        x_93 = as_type<int>((as_type<uint>(x_179) + as_type<uint>(1)));
        int const x_181 = x_93;
        x_95 = x_181;
        int const x_182 = x_94;
        x_96 = x_182;
        int const x_183 = x_95;
        int const x_185 = (*(tint_symbol_8)).numbers.arr[x_183];
        x_91 = x_185;
        int const x_186 = x_95;
        int const x_187 = x_96;
        int const x_189 = (*(tint_symbol_8)).numbers.arr[x_187];
        (*(tint_symbol_8)).numbers.arr[x_186] = x_189;
        int const x_191 = x_96;
        int const x_192 = x_91;
        (*(tint_symbol_8)).numbers.arr[x_191] = x_192;
      }
      {
        int const x_194 = x_94;
        x_94 = as_type<int>((as_type<uint>(x_194) + as_type<uint>(1)));
      }
    }
    int const x_196 = x_93;
    x_97 = as_type<int>((as_type<uint>(x_196) + as_type<uint>(1)));
    int const x_198 = x_106;
    x_98 = x_198;
    int const x_199 = x_97;
    int const x_201 = (*(tint_symbol_8)).numbers.arr[x_199];
    x_90 = x_201;
    int const x_202 = x_97;
    int const x_203 = x_98;
    int const x_205 = (*(tint_symbol_8)).numbers.arr[x_203];
    (*(tint_symbol_8)).numbers.arr[x_202] = x_205;
    int const x_207 = x_98;
    int const x_208 = x_90;
    (*(tint_symbol_8)).numbers.arr[x_207] = x_208;
    int const x_210 = x_93;
    x_99 = as_type<int>((as_type<uint>(x_210) + as_type<uint>(1)));
    int const x_212 = x_99;
    x_104 = x_212;
    int const x_213 = x_104;
    int const x_215 = x_100;
    if ((as_type<int>((as_type<uint>(x_213) - as_type<uint>(1))) > x_215)) {
      int const x_219 = x_102;
      int const x_220 = as_type<int>((as_type<uint>(x_219) + as_type<uint>(1)));
      x_102 = x_220;
      int const x_221 = x_100;
      x_103.arr[x_220] = x_221;
      int const x_223 = x_102;
      int const x_224 = as_type<int>((as_type<uint>(x_223) + as_type<uint>(1)));
      x_102 = x_224;
      int const x_225 = x_104;
      x_103.arr[x_224] = as_type<int>((as_type<uint>(x_225) - as_type<uint>(1)));
    }
    int const x_228 = x_104;
    int const x_230 = x_101;
    if ((as_type<int>((as_type<uint>(x_228) + as_type<uint>(1))) < x_230)) {
      int const x_234 = x_102;
      int const x_235 = as_type<int>((as_type<uint>(x_234) + as_type<uint>(1)));
      x_102 = x_235;
      int const x_236 = x_104;
      x_103.arr[x_235] = as_type<int>((as_type<uint>(x_236) + as_type<uint>(1)));
      int const x_239 = x_102;
      int const x_240 = as_type<int>((as_type<uint>(x_239) + as_type<uint>(1)));
      x_102 = x_240;
      int const x_241 = x_101;
      x_103.arr[x_240] = x_241;
    }
  }
  float4 const x_243 = *(tint_symbol_7);
  float2 const x_246 = x_34.resolution;
  uv = (float2(x_243.x, x_243.y) / x_246);
  color = float3(1.0f, 2.0f, 3.0f);
  int const x_249 = (*(tint_symbol_8)).numbers.arr[0];
  float const x_252 = color.x;
  color.x = (x_252 + float(x_249));
  float const x_256 = uv.x;
  if ((x_256 > 0.25f)) {
    int const x_261 = (*(tint_symbol_8)).numbers.arr[1];
    float const x_264 = color.x;
    color.x = (x_264 + float(x_261));
  }
  float const x_268 = uv.x;
  if ((x_268 > 0.5f)) {
    int const x_273 = (*(tint_symbol_8)).numbers.arr[2];
    float const x_276 = color.y;
    color.y = (x_276 + float(x_273));
  }
  float const x_280 = uv.x;
  if ((x_280 > 0.75f)) {
    int const x_285 = (*(tint_symbol_8)).numbers.arr[3];
    float const x_288 = color.z;
    color.z = (x_288 + float(x_285));
  }
  int const x_292 = (*(tint_symbol_8)).numbers.arr[4];
  float const x_295 = color.y;
  color.y = (x_295 + float(x_292));
  float const x_299 = uv.y;
  if ((x_299 > 0.25f)) {
    int const x_304 = (*(tint_symbol_8)).numbers.arr[5];
    float const x_307 = color.x;
    color.x = (x_307 + float(x_304));
  }
  float const x_311 = uv.y;
  if ((x_311 > 0.5f)) {
    int const x_316 = (*(tint_symbol_8)).numbers.arr[6];
    float const x_319 = color.y;
    color.y = (x_319 + float(x_316));
  }
  float const x_323 = uv.y;
  if ((x_323 > 0.75f)) {
    int const x_328 = (*(tint_symbol_8)).numbers.arr[7];
    float const x_331 = color.z;
    color.z = (x_331 + float(x_328));
  }
  int const x_335 = (*(tint_symbol_8)).numbers.arr[8];
  float const x_338 = color.z;
  color.z = (x_338 + float(x_335));
  float const x_342 = uv.x;
  float const x_344 = uv.y;
  if ((fabs((x_342 - x_344)) < 0.25f)) {
    int const x_351 = (*(tint_symbol_8)).numbers.arr[9];
    float const x_354 = color.x;
    color.x = (x_354 + float(x_351));
  }
  float3 const x_357 = color;
  float3 const x_358 = normalize(x_357);
  *(tint_symbol_9) = float4(x_358.x, x_358.y, x_358.z, 1.0f);
  float4 const x_363 = *(tint_symbol_6);
  *(tint_symbol_10) = x_363;
  return;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf0& x_34 [[buffer(0)]]) {
  thread float4 tint_symbol_11 = 0.0f;
  thread float4 tint_symbol_12 = 0.0f;
  thread QuicksortObject tint_symbol_13 = {};
  thread float4 tint_symbol_14 = 0.0f;
  thread float4 tint_symbol_15 = 0.0f;
  float4 const x_GLF_pos_param = tint_symbol_1.x_GLF_pos_param;
  tint_symbol_11 = x_GLF_pos_param;
  main_1(x_34, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15));
  main_out const tint_symbol_4 = {.frag_color_1=tint_symbol_14, .gl_Position=tint_symbol_15};
  tint_symbol_3 const tint_symbol_5 = {.frag_color_1=tint_symbol_4.frag_color_1, .gl_Position=tint_symbol_4.gl_Position};
  return tint_symbol_5;
}

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_16) {
  int temp = 0;
  int const x_366 = *(i);
  int const x_368 = (*(tint_symbol_16)).numbers.arr[x_366];
  temp = x_368;
  int const x_369 = *(i);
  int const x_370 = *(j);
  int const x_372 = (*(tint_symbol_16)).numbers.arr[x_370];
  (*(tint_symbol_16)).numbers.arr[x_369] = x_372;
  int const x_374 = *(j);
  int const x_375 = temp;
  (*(tint_symbol_16)).numbers.arr[x_374] = x_375;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_17) {
  int pivot = 0;
  int i_1 = 0;
  int j_1 = 0;
  int param = 0;
  int param_1 = 0;
  int param_2 = 0;
  int param_3 = 0;
  int const x_378 = *(h);
  int const x_380 = (*(tint_symbol_17)).numbers.arr[x_378];
  pivot = x_380;
  int const x_381 = *(l);
  i_1 = as_type<int>((as_type<uint>(x_381) - as_type<uint>(1)));
  int const x_383 = *(l);
  j_1 = x_383;
  while (true) {
    int const x_388 = j_1;
    int const x_389 = *(h);
    if ((x_388 <= as_type<int>((as_type<uint>(x_389) - as_type<uint>(1))))) {
    } else {
      break;
    }
    int const x_393 = j_1;
    int const x_395 = (*(tint_symbol_17)).numbers.arr[x_393];
    int const x_396 = pivot;
    if ((x_395 <= x_396)) {
      int const x_400 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_400) + as_type<uint>(1)));
      int const x_402 = i_1;
      param = x_402;
      int const x_403 = j_1;
      param_1 = x_403;
      swap_i1_i1_(&(param), &(param_1), tint_symbol_17);
    }
    {
      int const x_405 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_405) + as_type<uint>(1)));
    }
  }
  int const x_407 = i_1;
  param_2 = as_type<int>((as_type<uint>(x_407) + as_type<uint>(1)));
  int const x_409 = *(h);
  param_3 = x_409;
  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_17);
  int const x_411 = i_1;
  return as_type<int>((as_type<uint>(x_411) + as_type<uint>(1)));
}

void quicksort_(thread QuicksortObject* const tint_symbol_18) {
  int l_1 = 0;
  int h_1 = 0;
  int top = 0;
  tint_array_wrapper stack = {};
  int p = 0;
  int param_4 = 0;
  int param_5 = 0;
  l_1 = 0;
  h_1 = 9;
  top = -1;
  int const x_414 = top;
  int const x_415 = as_type<int>((as_type<uint>(x_414) + as_type<uint>(1)));
  top = x_415;
  int const x_416 = l_1;
  stack.arr[x_415] = x_416;
  int const x_418 = top;
  int const x_419 = as_type<int>((as_type<uint>(x_418) + as_type<uint>(1)));
  top = x_419;
  int const x_420 = h_1;
  stack.arr[x_419] = x_420;
  while (true) {
    int const x_426 = top;
    if ((x_426 >= 0)) {
    } else {
      break;
    }
    int const x_429 = top;
    top = as_type<int>((as_type<uint>(x_429) - as_type<uint>(1)));
    int const x_432 = stack.arr[x_429];
    h_1 = x_432;
    int const x_433 = top;
    top = as_type<int>((as_type<uint>(x_433) - as_type<uint>(1)));
    int const x_436 = stack.arr[x_433];
    l_1 = x_436;
    int const x_437 = l_1;
    param_4 = x_437;
    int const x_438 = h_1;
    param_5 = x_438;
    int const x_439 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_18);
    p = x_439;
    int const x_440 = p;
    int const x_442 = l_1;
    if ((as_type<int>((as_type<uint>(x_440) - as_type<uint>(1))) > x_442)) {
      int const x_446 = top;
      int const x_447 = as_type<int>((as_type<uint>(x_446) + as_type<uint>(1)));
      top = x_447;
      int const x_448 = l_1;
      stack.arr[x_447] = x_448;
      int const x_450 = top;
      int const x_451 = as_type<int>((as_type<uint>(x_450) + as_type<uint>(1)));
      top = x_451;
      int const x_452 = p;
      stack.arr[x_451] = as_type<int>((as_type<uint>(x_452) - as_type<uint>(1)));
    }
    int const x_455 = p;
    int const x_457 = h_1;
    if ((as_type<int>((as_type<uint>(x_455) + as_type<uint>(1))) < x_457)) {
      int const x_461 = top;
      int const x_462 = as_type<int>((as_type<uint>(x_461) + as_type<uint>(1)));
      top = x_462;
      int const x_463 = p;
      stack.arr[x_462] = as_type<int>((as_type<uint>(x_463) + as_type<uint>(1)));
      int const x_466 = top;
      int const x_467 = as_type<int>((as_type<uint>(x_466) + as_type<uint>(1)));
      top = x_467;
      int const x_468 = h_1;
      stack.arr[x_467] = x_468;
    }
  }
  return;
}

