#include <metal_stdlib>

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

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_81) {
  int temp = 0;
  int const x_932 = temp;
  temp = 0;
  temp = x_932;
  float3 const x_523 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
  int const x_933 = *(i);
  *(i) = 0;
  *(i) = x_933;
  int const x_28 = *(i);
  int const x_934 = *(j);
  *(j) = 0;
  *(j) = x_934;
  float3 const x_524 = float3(x_523[1], x_523[0], x_523[1]);
  int const x_935 = temp;
  temp = 0;
  temp = x_935;
  int const x_30_save = x_28;
  int const x_936 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_936;
  int const x_31 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  int const x_937 = temp;
  temp = 0;
  temp = x_937;
  temp = x_31;
  int const x_938 = *(j);
  *(j) = 0;
  *(j) = x_938;
  float3 const x_525 = float3(x_523[2], float3(1.0f, 2.0f, 3.0f)[0], x_523[1]);
  int const x_939 = *(i);
  *(i) = 0;
  *(i) = x_939;
  int const x_32 = *(i);
  int const x_940 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_940;
  int const x_33 = *(j);
  int const x_941 = *(i);
  *(i) = 0;
  *(i) = x_941;
  float3 const x_526 = float3(x_525[0], x_525[2], x_525[2]);
  int const x_942 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_942;
  int const x_34_save = x_33;
  int const x_35 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  QuicksortObject const x_943 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_3 = {.numbers=tint_symbol_2};
  *(tint_symbol_81) = tint_symbol_3;
  *(tint_symbol_81) = x_943;
  float2 const x_527 = float2(x_526[0], x_526[0]);
  int const x_36_save = x_32;
  float3 const x_528 = float3(x_524[0], x_524[2], x_524[0]);
  (*(tint_symbol_81)).numbers.arr[x_36_save] = x_35;
  QuicksortObject const x_944 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_5 = {.numbers=tint_symbol_4};
  *(tint_symbol_81) = tint_symbol_5;
  *(tint_symbol_81) = x_944;
  float3 const x_529 = float3(x_526[1], x_526[2], x_526[0]);
  int const x_945 = *(i);
  *(i) = 0;
  *(i) = x_945;
  int const x_37 = *(j);
  int const x_946 = temp;
  temp = 0;
  temp = x_946;
  float2 const x_530 = float2(x_529[2], x_529[1]);
  int const x_947 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  (*(tint_symbol_81)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_34_save] = x_947;
  int const x_38 = temp;
  int const x_948 = *(j);
  *(j) = 0;
  *(j) = x_948;
  float3 const x_531 = float3(x_527[0], x_526[1], x_526[0]);
  int const x_949 = (*(tint_symbol_81)).numbers.arr[x_36_save];
  (*(tint_symbol_81)).numbers.arr[x_36_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_36_save] = x_949;
  QuicksortObject const x_950 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_6 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_7 = {.numbers=tint_symbol_6};
  *(tint_symbol_81) = tint_symbol_7;
  *(tint_symbol_81) = x_950;
  float3 const x_532 = float3(x_528[0], x_528[1], x_528[0]);
  int const x_951 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  (*(tint_symbol_81)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_34_save] = x_951;
  (*(tint_symbol_81)).numbers.arr[x_37] = x_38;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_82) {
  int param_3 = 0;
  int i_1 = 0;
  int j_1 = 0;
  int param_2 = 0;
  int param_1 = 0;
  int param = 0;
  int pivot = 0;
  float2 x_537 = 0.0f;
  float3 x_538 = 0.0f;
  int const x_952 = *(h);
  *(h) = 0;
  *(h) = x_952;
  int const x_41 = *(h);
  int const x_953 = *(l);
  *(l) = 0;
  *(l) = x_953;
  int const x_42_save = x_41;
  int const x_954 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_82)).numbers.arr[x_42_save] = x_954;
  int const x_43 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  int const x_955 = param_3;
  param_3 = 0;
  param_3 = x_955;
  float3 const x_534 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[2]);
  int const x_956 = param_1;
  param_1 = 0;
  param_1 = x_956;
  pivot = x_43;
  int const x_45 = *(l);
  int const x_957 = *(h);
  *(h) = 0;
  *(h) = x_957;
  int const x_958 = j_1;
  j_1 = 0;
  j_1 = x_958;
  float3 const x_535 = float3(x_534[1], x_534[2], x_534[1]);
  int const x_959 = *(l);
  *(l) = 0;
  *(l) = x_959;
  i_1 = as_type<int>((as_type<uint>(x_45) - as_type<uint>(as_type<int>(1u))));
  int const x_49 = *(l);
  float3 const x_536 = float3(x_534[0], x_534[2], x_535[0]);
  j_1 = 10;
  QuicksortObject const x_960 = *(tint_symbol_82);
  tint_array_wrapper const tint_symbol_8 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_9 = {.numbers=tint_symbol_8};
  *(tint_symbol_82) = tint_symbol_9;
  *(tint_symbol_82) = x_960;
  while (true) {
    int const x_961 = pivot;
    pivot = 0;
    pivot = x_961;
    int const x_962 = param_1;
    param_1 = 0;
    param_1 = x_962;
    int const x_55 = j_1;
    int const x_963 = pivot;
    pivot = 0;
    pivot = x_963;
    x_537 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
    QuicksortObject const x_964 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_10 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_11 = {.numbers=tint_symbol_10};
    *(tint_symbol_82) = tint_symbol_11;
    *(tint_symbol_82) = x_964;
    int const x_56 = *(h);
    int const x_965 = *(h);
    *(h) = 0;
    *(h) = x_965;
    int const x_966 = param;
    param = 0;
    param = x_966;
    int const x_967 = j_1;
    j_1 = 0;
    j_1 = x_967;
    x_538 = float3(x_534[0], x_537[1], x_534[2]);
    int const x_968 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= as_type<int>((as_type<uint>(x_56) - as_type<uint>(as_type<int>(1u)))))) {
    } else {
      break;
    }
    int const x_60 = j_1;
    int const x_969 = (*(tint_symbol_82)).numbers.arr[x_42_save];
    (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
    (*(tint_symbol_82)).numbers.arr[x_42_save] = x_969;
    int const x_61_save = x_60;
    int const x_970 = *(h);
    *(h) = 0;
    *(h) = x_970;
    float3 const x_539 = float3(x_537[0], x_535[2], x_537[0]);
    int const x_971 = param_1;
    param_1 = 0;
    param_1 = x_971;
    int const x_62 = (*(tint_symbol_82)).numbers.arr[x_61_save];
    QuicksortObject const x_972 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_12 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_13 = {.numbers=tint_symbol_12};
    *(tint_symbol_82) = tint_symbol_13;
    *(tint_symbol_82) = x_972;
    int const x_63 = pivot;
    float2 const x_540 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_534[2]);
    int const x_973 = i_1;
    i_1 = 0;
    i_1 = x_973;
    int const x_974 = *(l);
    *(l) = 0;
    *(l) = x_974;
    float3 const x_541 = float3(x_534[1], x_534[0], x_534[1]);
    int const x_975 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      float3 const x_542 = float3(x_541[2], x_541[0], x_541[0]);
      int const x_976 = param_3;
      param_3 = 0;
      param_3 = x_976;
      int const x_67 = i_1;
      int const x_977 = pivot;
      pivot = 0;
      pivot = x_977;
      float2 const x_543 = float2(x_539[0], x_541[1]);
      int const x_978 = i_1;
      i_1 = 0;
      i_1 = x_978;
      int const x_979 = param;
      param = 0;
      param = x_979;
      i_1 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(as_type<int>(1u))));
      int const x_980 = *(l);
      *(l) = 0;
      *(l) = x_980;
      float3 const x_544 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], x_540[0]);
      int const x_70 = i_1;
      float2 const x_545 = float2(x_537[1], x_538[0]);
      int const x_981 = param;
      param = 0;
      param = x_981;
      param = x_70;
      int const x_982 = param;
      param = 0;
      param = x_982;
      float2 const x_546 = float2(x_545[0], x_545[0]);
      int const x_983 = i_1;
      i_1 = 0;
      i_1 = x_983;
      int const x_72 = j_1;
      param_1 = x_72;
      int const x_984 = param_3;
      param_3 = 0;
      param_3 = x_984;
      swap_i1_i1_(&(param), &(param_1), tint_symbol_82);
      int const x_985 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    QuicksortObject const x_986 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_14 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_15 = {.numbers=tint_symbol_14};
    *(tint_symbol_82) = tint_symbol_15;
    *(tint_symbol_82) = x_986;
    {
      int const x_987 = *(h);
      *(h) = 0;
      *(h) = x_987;
      int const x_74 = j_1;
      int const x_988 = *(h);
      *(h) = 0;
      *(h) = x_988;
      float3 const x_547 = float3(x_539[0], x_541[2], x_541[2]);
      int const x_989 = (*(tint_symbol_82)).numbers.arr[x_61_save];
      (*(tint_symbol_82)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_82)).numbers.arr[x_61_save] = x_989;
      int const x_990 = param;
      param = 0;
      param = x_990;
      j_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_74)));
      int const x_991 = param_1;
      param_1 = 0;
      param_1 = x_991;
      float3 const x_548 = float3(x_541[1], x_541[2], x_541[0]);
      int const x_992 = (*(tint_symbol_82)).numbers.arr[x_61_save];
      (*(tint_symbol_82)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_82)).numbers.arr[x_61_save] = x_992;
    }
  }
  int const x_76 = i_1;
  int const x_993 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_82)).numbers.arr[x_42_save] = x_993;
  float2 const x_549 = float2(x_534[0], x_534[1]);
  QuicksortObject const x_994 = *(tint_symbol_82);
  tint_array_wrapper const tint_symbol_16 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_17 = {.numbers=tint_symbol_16};
  *(tint_symbol_82) = tint_symbol_17;
  *(tint_symbol_82) = x_994;
  int const x_995 = *(h);
  *(h) = 0;
  *(h) = x_995;
  i_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_76)));
  int const x_996 = param_1;
  param_1 = 0;
  param_1 = x_996;
  int const x_79 = i_1;
  int const x_997 = j_1;
  j_1 = 0;
  j_1 = x_997;
  float2 const x_550 = float2(x_534[0], x_534[0]);
  int const x_998 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  float2 const x_551 = float2(x_534[1], x_536[0]);
  int const x_999 = pivot;
  pivot = 0;
  pivot = x_999;
  int const x_81 = *(h);
  float2 const x_552 = float2(x_550[0], x_549[1]);
  int const x_1000 = *(h);
  *(h) = 0;
  *(h) = x_1000;
  param_3 = x_81;
  int const x_1001 = i_1;
  i_1 = 0;
  i_1 = x_1001;
  float2 const x_553 = float2(x_549[1], x_552[0]);
  int const x_1002 = *(h);
  *(h) = 0;
  *(h) = x_1002;
  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_82);
  int const x_1003 = *(l);
  *(l) = 0;
  *(l) = x_1003;
  float2 const x_554 = float2(x_536[2], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1004 = param_1;
  param_1 = 0;
  param_1 = x_1004;
  int const x_83 = i_1;
  int const x_1005 = param;
  param = 0;
  param = x_1005;
  float2 const x_555 = float2(x_534[1], x_534[0]);
  int const x_1006 = j_1;
  j_1 = 0;
  j_1 = x_1006;
  return x_83;
}

void quicksort_(thread QuicksortObject* const tint_symbol_83) {
  int param_4 = 0;
  int h_1 = 0;
  int p = 0;
  int l_1 = 0;
  int top = 0;
  tint_array_wrapper stack = {};
  int param_5 = 0;
  l_1 = 0;
  int const x_1007 = param_5;
  param_5 = 0;
  param_5 = x_1007;
  h_1 = 9;
  tint_array_wrapper const x_1008 = stack;
  tint_array_wrapper const tint_symbol_18 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_18;
  stack = x_1008;
  float2 const x_556 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1009 = param_5;
  param_5 = 0;
  param_5 = x_1009;
  top = -1;
  int const x_1010 = p;
  p = 0;
  p = x_1010;
  int const x_93 = top;
  float2 const x_557 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
  int const x_1011 = p;
  p = 0;
  p = x_1011;
  int const x_94 = as_type<int>((as_type<uint>(x_93) + as_type<uint>(as_type<int>(1u))));
  int const x_1012 = top;
  top = 0;
  top = x_1012;
  float2 const x_558 = float2(x_556[1], x_557[1]);
  int const x_1013 = param_4;
  param_4 = 0;
  param_4 = x_1013;
  top = x_94;
  int const x_1014 = h_1;
  h_1 = 0;
  h_1 = x_1014;
  float3 const x_559 = float3(x_557[1], x_557[0], x_557[0]);
  int const x_1015 = param_4;
  param_4 = 0;
  param_4 = x_1015;
  int const x_95 = l_1;
  QuicksortObject const x_1016 = *(tint_symbol_83);
  tint_array_wrapper const tint_symbol_19 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_20 = {.numbers=tint_symbol_19};
  *(tint_symbol_83) = tint_symbol_20;
  *(tint_symbol_83) = x_1016;
  float3 const x_560 = float3(x_559[1], x_559[0], x_557[0]);
  int const x_96_save = x_94;
  tint_array_wrapper const x_1017 = stack;
  tint_array_wrapper const tint_symbol_21 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_21;
  stack = x_1017;
  float3 const x_561 = float3(x_556[1], x_556[1], x_556[1]);
  int const x_1018 = l_1;
  l_1 = 0;
  l_1 = 0;
  stack.arr[x_96_save] = x_95;
  int const x_1019 = param_5;
  param_5 = 0;
  param_5 = x_1019;
  int const x_97 = top;
  int const x_1020 = param_4;
  param_4 = 0;
  param_4 = x_1020;
  float3 const x_562 = float3(float3(1.0f, 2.0f, 3.0f)[2], x_558[1], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1021 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1021;
  int const x_98 = as_type<int>((as_type<uint>(x_97) + as_type<uint>(1)));
  int const x_1022 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1022;
  float3 const x_563 = float3(x_559[0], x_559[2], x_556[1]);
  top = x_98;
  int const x_1023 = param_4;
  param_4 = 0;
  param_4 = x_1023;
  int const x_99 = h_1;
  int const x_1024 = param_4;
  param_4 = 0;
  param_4 = x_1024;
  float3 const x_564 = float3(x_558[0], x_561[0], x_558[1]);
  int const x_1025 = l_1;
  l_1 = 0;
  l_1 = x_1025;
  int const x_100_save = x_98;
  int const x_1026 = param_5;
  param_5 = 0;
  param_5 = x_1026;
  float2 const x_565 = float2(x_564[2], x_564[2]);
  int const x_1027 = p;
  p = 0;
  p = x_1027;
  stack.arr[x_100_save] = x_99;
  while (true) {
    float3 const x_566 = float3(x_563[0], x_563[0], x_563[0]);
    int const x_1028 = h_1;
    h_1 = 0;
    h_1 = x_1028;
    tint_array_wrapper const x_1029 = stack;
    tint_array_wrapper const tint_symbol_22 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_22;
    stack = x_1029;
    int const x_106 = top;
    tint_array_wrapper const x_1030 = stack;
    tint_array_wrapper const tint_symbol_23 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_23;
    stack = x_1030;
    float2 const x_567 = float2(x_558[0], x_564[2]);
    int const x_1031 = param_4;
    param_4 = 0;
    param_4 = x_1031;
    if ((x_106 >= as_type<int>(0u))) {
    } else {
      break;
    }
    QuicksortObject const x_1032 = *(tint_symbol_83);
    tint_array_wrapper const tint_symbol_24 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_25 = {.numbers=tint_symbol_24};
    *(tint_symbol_83) = tint_symbol_25;
    *(tint_symbol_83) = x_1032;
    float3 const x_568 = float3(x_559[1], x_559[0], x_563[1]);
    int const x_1033 = param_4;
    param_4 = 0;
    param_4 = x_1033;
    int const x_108 = top;
    float3 const x_569 = float3(x_565[0], x_567[1], x_565[0]);
    int const x_1034 = h_1;
    h_1 = 0;
    h_1 = x_1034;
    float2 const x_570 = float2(x_556[0], x_556[0]);
    int const x_1035 = p;
    p = 0;
    p = x_1035;
    top = as_type<int>((as_type<uint>(x_108) - as_type<uint>(as_type<int>(1u))));
    int const x_1036 = p;
    p = 0;
    p = x_1036;
    int const x_110_save = x_108;
    int const x_1037 = stack.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1037;
    int const x_111 = stack.arr[x_110_save];
    tint_array_wrapper const x_1038 = stack;
    tint_array_wrapper const tint_symbol_26 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_26;
    stack = x_1038;
    float3 const x_571 = float3(x_559[1], x_559[0], x_564[1]);
    int const x_1039 = l_1;
    l_1 = 0;
    l_1 = x_1039;
    h_1 = x_111;
    tint_array_wrapper const x_1040 = stack;
    tint_array_wrapper const tint_symbol_27 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_27;
    stack = x_1040;
    float2 const x_572 = float2(x_562[1], x_561[1]);
    int const x_1041 = p;
    p = 0;
    p = x_1041;
    int const x_112 = top;
    int const x_1042 = param_4;
    param_4 = 0;
    param_4 = x_1042;
    int const x_1043 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1043;
    float2 const x_573 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
    top = as_type<int>((as_type<uint>(x_112) - as_type<uint>(1)));
    int const x_1044 = param_5;
    param_5 = 0;
    param_5 = x_1044;
    float3 const x_574 = float3(x_570[1], x_565[0], x_570[1]);
    int const x_1045 = h_1;
    h_1 = 0;
    h_1 = x_1045;
    int const x_114_save = x_112;
    float2 const x_575 = float2(x_564[1], x_564[2]);
    int const x_1046 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1046;
    int const x_115 = stack.arr[x_114_save];
    int const x_1047 = p;
    p = 0;
    p = x_1047;
    float3 const x_576 = float3(x_573[1], x_573[1], x_565[0]);
    int const x_1048 = param_5;
    param_5 = 0;
    param_5 = x_1048;
    l_1 = x_115;
    int const x_1049 = top;
    top = 0;
    top = x_1049;
    int const x_118 = l_1;
    param_4 = x_118;
    int const x_1050 = stack.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[x_110_save] = x_1050;
    float2 const x_577 = float2(x_569[1], x_569[2]);
    int const x_120 = h_1;
    float2 const x_578 = float2(x_558[0], float3(1.0f, 2.0f, 3.0f)[1]);
    param_5 = x_120;
    int const x_1051 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1051;
    int const x_121 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_83);
    float2 const x_579 = float2(x_567[0], x_568[0]);
    int const x_1052 = param_5;
    param_5 = 0;
    param_5 = x_1052;
    p = x_121;
    int const x_1053 = param_4;
    param_4 = 0;
    param_4 = x_1053;
    int const x_122 = p;
    int const x_1054 = h_1;
    h_1 = 0;
    h_1 = x_1054;
    float2 const x_580 = float2(x_568[1], x_568[1]);
    int const x_1055 = l_1;
    l_1 = 0;
    l_1 = x_1055;
    int const x_1056 = h_1;
    h_1 = 0;
    h_1 = x_1056;
    int const x_124 = l_1;
    int const x_1057 = stack.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[x_110_save] = x_1057;
    int const x_1058 = h_1;
    h_1 = 0;
    h_1 = x_1058;
    float2 const x_582 = float2(x_567[1], x_573[0]);
    int const x_1059 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1059;
    if ((as_type<int>((as_type<uint>(x_122) - as_type<uint>(as_type<int>(1u)))) > x_124)) {
      int const x_1060 = param_4;
      param_4 = 0;
      param_4 = x_1060;
      int const x_128 = top;
      float2 const x_583 = float2(x_571[1], x_556[1]);
      int const x_1061 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1061;
      tint_array_wrapper const x_1062 = stack;
      tint_array_wrapper const tint_symbol_28 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_28;
      stack = x_1062;
      float2 const x_584 = float2(x_569[2], x_569[1]);
      float3 const x_585 = float3(x_580[1], x_577[0], x_577[0]);
      int const x_130 = l_1;
      int const x_1063 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1063;
      float2 const x_586 = float2(x_564[0], x_585[0]);
      int const x_1064 = param_5;
      param_5 = 0;
      param_5 = x_1064;
      int const x_131_save = as_type<int>((as_type<uint>(1) + as_type<uint>(x_128)));
      int const x_1065 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1065;
      float3 const x_587 = float3(x_566[1], x_566[1], x_563[0]);
      int const x_1066 = param_5;
      param_5 = 0;
      param_5 = x_1066;
      stack.arr[x_131_save] = x_130;
      int const x_132 = top;
      int const x_1067 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1067;
      float2 const x_588 = float2(x_575[1], x_575[0]);
      int const x_1068 = stack.arr[x_131_save];
      stack.arr[x_131_save] = 0;
      stack.arr[x_131_save] = x_1068;
      int const x_133 = as_type<int>((1u + as_type<uint>(x_132)));
      int const x_1069 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1069;
      float3 const x_589 = float3(x_576[2], x_588[1], x_576[2]);
      int const x_1070 = h_1;
      h_1 = 0;
      h_1 = x_1070;
      top = x_133;
      tint_array_wrapper const x_1071 = stack;
      tint_array_wrapper const tint_symbol_29 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_29;
      stack = x_1071;
      int const x_134 = p;
      float2 const x_590 = float2(x_576[0], x_573[1]);
      int const x_1072 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1072;
      int const x_136_save = x_133;
      int const x_1073 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1073;
      stack.arr[x_136_save] = as_type<int>((as_type<uint>(x_134) - as_type<uint>(as_type<int>(1u))));
      int const x_1074 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1074;
      float2 const x_591 = float2(x_569[2], x_569[1]);
      int const x_1075 = stack.arr[x_136_save];
      stack.arr[x_136_save] = 0;
      stack.arr[x_136_save] = x_1075;
    }
    int const x_1076 = stack.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1076;
    float2 const x_592 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[1]);
    QuicksortObject const x_1077 = *(tint_symbol_83);
    tint_array_wrapper const tint_symbol_30 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_31 = {.numbers=tint_symbol_30};
    *(tint_symbol_83) = tint_symbol_31;
    *(tint_symbol_83) = x_1077;
    int const x_137 = p;
    int const x_1078 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[x_114_save] = x_1078;
    float3 const x_593 = float3(x_571[2], x_556[0], x_556[1]);
    int const x_1079 = p;
    p = 0;
    p = x_1079;
    float3 const x_594 = float3(x_563[2], x_563[0], x_575[0]);
    int const x_1080 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[x_114_save] = x_1080;
    int const x_139 = h_1;
    int const x_1081 = top;
    top = 0;
    top = x_1081;
    float3 const x_595 = float3(x_560[2], x_568[0], x_560[0]);
    int const x_1082 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1082;
    int const x_1083 = p;
    p = 0;
    p = x_1083;
    if ((as_type<int>((1u + as_type<uint>(x_137))) < x_139)) {
      int const x_1084 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1084;
      float2 const x_596 = float2(x_592[1], x_582[0]);
      int const x_1085 = l_1;
      l_1 = 0;
      l_1 = x_1085;
      int const x_143 = top;
      int const x_1086 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1086;
      float3 const x_597 = float3(x_562[1], x_560[1], x_560[1]);
      int const x_144 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
      int const x_1087 = param_5;
      param_5 = 0;
      param_5 = x_1087;
      top = x_144;
      int const x_1088 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1088;
      int const x_145 = p;
      int const x_1089 = param_5;
      param_5 = 0;
      param_5 = x_1089;
      float3 const x_599 = float3(x_560[2], x_560[0], x_568[0]);
      int const x_1090 = p;
      p = 0;
      p = x_1090;
      float3 const x_600 = float3(x_556[0], x_580[0], x_580[0]);
      int const x_1091 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1091;
      int const x_147_save = x_144;
      int const x_1092 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1092;
      float2 const x_601 = float2(x_563[0], x_563[1]);
      stack.arr[x_147_save] = as_type<int>((1u + as_type<uint>(x_145)));
      tint_array_wrapper const x_1093 = stack;
      tint_array_wrapper const tint_symbol_32 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_32;
      stack = x_1093;
      int const x_148 = top;
      int const x_1094 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1094;
      float2 const x_602 = float2(x_565[1], x_599[1]);
      tint_array_wrapper const x_1095 = stack;
      tint_array_wrapper const tint_symbol_33 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_33;
      stack = x_1095;
      int const x_149 = as_type<int>((as_type<uint>(x_148) + as_type<uint>(as_type<int>(1u))));
      int const x_1096 = stack.arr[x_147_save];
      stack.arr[x_147_save] = 0;
      stack.arr[x_147_save] = x_1096;
      top = x_149;
      int const x_1097 = param_4;
      param_4 = 0;
      param_4 = x_1097;
      int const x_150 = h_1;
      int const x_1098 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1098;
      int const x_1099 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1099;
      stack.arr[x_149] = x_150;
      int const x_1100 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1100;
      float3 const x_603 = float3(x_568[1], x_564[0], x_564[0]);
      int const x_1101 = l_1;
      l_1 = 0;
      l_1 = x_1101;
    }
    int const x_1102 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1102;
    {
      int const x_1103 = l_1;
      l_1 = 0;
      l_1 = x_1103;
      float2 const x_604 = float2(x_563[2], x_564[0]);
      QuicksortObject const x_1104 = *(tint_symbol_83);
      tint_array_wrapper const tint_symbol_34 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      QuicksortObject const tint_symbol_35 = {.numbers=tint_symbol_34};
      *(tint_symbol_83) = tint_symbol_35;
      *(tint_symbol_83) = x_1104;
    }
  }
  int const x_1105 = h_1;
  h_1 = 0;
  h_1 = x_1105;
  return;
}

void main_1(thread QuicksortObject* const tint_symbol_84, thread float4* const tint_symbol_85, const constant buf0* const tint_symbol_86, thread float4* const tint_symbol_87) {
  float3 color = 0.0f;
  int i_2 = 0;
  float2 uv = 0.0f;
  float2 const x_717 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_717;
  i_2 = 0;
  QuicksortObject const x_721 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_36 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_37 = {.numbers=tint_symbol_36};
  *(tint_symbol_84) = tint_symbol_37;
  *(tint_symbol_84) = x_721;
  if (true) {
    QuicksortObject const x_722 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_38 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_39 = {.numbers=tint_symbol_38};
    *(tint_symbol_84) = tint_symbol_39;
    *(tint_symbol_84) = x_722;
    float2 const x_431 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
    int const x_158 = i_2;
    float2 const x_723 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_723;
    float3 const x_725 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_725;
    float2 const x_432 = float2(x_431[1], x_431[1]);
    QuicksortObject const x_726 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_40 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_41 = {.numbers=tint_symbol_40};
    *(tint_symbol_84) = tint_symbol_41;
    *(tint_symbol_84) = x_726;
  }
  QuicksortObject const x_756 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_42 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_43 = {.numbers=tint_symbol_42};
  *(tint_symbol_84) = tint_symbol_43;
  *(tint_symbol_84) = x_756;
  float2 const x_446 = float2(float2()[0], float2()[0]);
  int const x_757 = i_2;
  i_2 = 0;
  i_2 = x_757;
  quicksort_(tint_symbol_84);
  QuicksortObject const x_758 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_44 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_45 = {.numbers=tint_symbol_44};
  *(tint_symbol_84) = tint_symbol_45;
  *(tint_symbol_84) = x_758;
  float4 const x_184 = *(tint_symbol_85);
  float2 const x_759 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_759;
  float2 const x_447 = float2(float2()[1], float2()[1]);
  float2 const x_760 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_760;
  float2 const x_185 = float2(x_184[0], x_184[1]);
  float3 const x_448 = float3(x_185[1], x_446[1], x_446[1]);
  QuicksortObject const x_761 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_46 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_47 = {.numbers=tint_symbol_46};
  *(tint_symbol_84) = tint_symbol_47;
  *(tint_symbol_84) = x_761;
  float2 const x_762 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_762;
  float2 const x_191 = (*(tint_symbol_86)).resolution;
  QuicksortObject const x_763 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_48 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_49 = {.numbers=tint_symbol_48};
  *(tint_symbol_84) = tint_symbol_49;
  *(tint_symbol_84) = x_763;
  float3 const x_449 = float3(x_184[1], float3(1.0f, 2.0f, 3.0f)[2], x_184[3]);
  float3 const x_764 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_764;
  float2 const x_192 = (x_185 / x_191);
  QuicksortObject const x_765 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_50 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_51 = {.numbers=tint_symbol_50};
  *(tint_symbol_84) = tint_symbol_51;
  *(tint_symbol_84) = x_765;
  float2 const x_450 = float2(x_447[0], x_185[1]);
  float3 const x_766 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  float3 const x_767 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_767;
  color = x_766;
  uv = x_192;
  color = float3(1.0f, 2.0f, 3.0f);
  float3 const x_768 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_768;
  float3 const x_451 = float3(x_185[0], x_185[1], x_446[1]);
  QuicksortObject const x_769 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_52 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_53 = {.numbers=tint_symbol_52};
  *(tint_symbol_84) = tint_symbol_53;
  *(tint_symbol_84) = x_769;
  int const x_770 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_770;
  int const x_201 = (*(tint_symbol_84)).numbers.arr[0u];
  QuicksortObject const x_771 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_54 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_55 = {.numbers=tint_symbol_54};
  *(tint_symbol_84) = tint_symbol_55;
  *(tint_symbol_84) = x_771;
  int const x_772 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_772;
  float const x_206 = color[0];
  float const x_773 = color[0];
  color[0] = 0.0f;
  color[0] = x_773;
  float2 const x_452 = float2(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_774 = i_2;
  i_2 = 0;
  i_2 = x_774;
  QuicksortObject const x_775 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_56 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_57 = {.numbers=tint_symbol_56};
  *(tint_symbol_84) = tint_symbol_57;
  *(tint_symbol_84) = x_775;
  float3 const x_453 = float3(x_451[0], x_450[0], x_450[1]);
  color[0] = (x_206 + float(x_201));
  float2 const x_776 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_776;
  float2 const x_777 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_777;
  float2 const x_454 = float2(x_184[1], x_184[1]);
  float const x_210 = uv[0];
  float2 const x_455 = float2(x_192[1], x_192[0]);
  float const x_778 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_778;
  QuicksortObject const x_779 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_58 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_59 = {.numbers=tint_symbol_58};
  *(tint_symbol_84) = tint_symbol_59;
  *(tint_symbol_84) = x_779;
  if ((x_210 > 0.25f)) {
    int const x_780 = i_2;
    i_2 = 0;
    i_2 = x_780;
    int const x_781 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_781;
    float3 const x_456 = float3(float2()[1], x_448[1], x_448[1]);
    float const x_782 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_782;
    int const x_216 = (*(tint_symbol_84)).numbers.arr[1];
    QuicksortObject const x_783 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_60 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_61 = {.numbers=tint_symbol_60};
    *(tint_symbol_84) = tint_symbol_61;
    *(tint_symbol_84) = x_783;
    float2 const x_457 = float2(x_454[0], x_454[0]);
    float2 const x_784 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_784;
    QuicksortObject const x_785 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_62 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_63 = {.numbers=tint_symbol_62};
    *(tint_symbol_84) = tint_symbol_63;
    *(tint_symbol_84) = x_785;
    float2 const x_458 = float2(float3(1.0f, 2.0f, 3.0f)[2], float2()[1]);
    int const x_786 = i_2;
    i_2 = 0;
    i_2 = x_786;
    float const x_219 = color[0];
    float const x_787 = color[0];
    color[0] = 0.0f;
    color[0] = x_787;
    float3 const x_788 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_788;
    float3 const x_789 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_789;
    float3 const x_459 = float3(x_454[1], x_454[1], x_447[1]);
    float const x_790 = color[0];
    color[0] = 0.0f;
    color[0] = x_790;
    color[0] = (float(x_216) + x_219);
    int const x_791 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_791;
  }
  float const x_792 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_792;
  float const x_793 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_793;
  float const x_223 = uv[0];
  float const x_794 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_794;
  float3 const x_460 = float3(x_453[2], x_453[1], x_453[1]);
  float2 const x_795 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_795;
  float const x_796 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_796;
  float2 const x_461 = float2(float2()[1], float2()[1]);
  float const x_797 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_797;
  if ((x_223 > 0.5f)) {
    float const x_798 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_798;
    float2 const x_462 = float2(x_446[0], x_446[0]);
    float const x_799 = color[0];
    color[0] = 0.0f;
    color[0] = x_799;
    float const x_800 = color[0];
    color[0] = 0.0f;
    color[0] = x_800;
    float3 const x_463 = float3(x_453[0], x_453[2], x_461[1]);
    float const x_801 = color[0];
    color[0] = 0.0f;
    color[0] = x_801;
    int const x_230 = (*(tint_symbol_84)).numbers.arr[2u];
    float const x_802 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_802;
    float const x_803 = color[0];
    color[0] = 0.0f;
    color[0] = x_803;
    int const x_804 = (*(tint_symbol_84)).numbers.arr[2u];
    (*(tint_symbol_84)).numbers.arr[2u] = 0;
    (*(tint_symbol_84)).numbers.arr[2u] = x_804;
    float2 const x_464 = float2(x_450[1], x_191[0]);
    float const x_805 = color[1];
    color[1] = 0.0f;
    color[1] = x_805;
    float const x_234 = color[1];
    int const x_806 = (*(tint_symbol_84)).numbers.arr[2u];
    (*(tint_symbol_84)).numbers.arr[2u] = 0;
    (*(tint_symbol_84)).numbers.arr[2u] = x_806;
    float2 const x_465 = float2(x_463[0], x_185[0]);
    float const x_807 = color[0];
    color[0] = 0.0f;
    color[0] = x_807;
    int const x_808 = i_2;
    i_2 = 0;
    i_2 = x_808;
    float2 const x_466 = float2(x_455[1], float2()[1]);
    int const x_809 = i_2;
    i_2 = 0;
    i_2 = x_809;
    color[1] = (float(x_230) + x_234);
    float const x_810 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_810;
  }
  int const x_811 = i_2;
  i_2 = 0;
  i_2 = x_811;
  float2 const x_467 = float2(x_191[0], x_191[0]);
  float const x_812 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_812;
  float const x_238 = uv[0];
  float3 const x_813 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_813;
  float const x_814 = color[0];
  color[0] = 0.0f;
  color[0] = x_814;
  if ((x_238 > 0.75f)) {
    float const x_815 = color[0];
    color[0] = 0.0f;
    color[0] = x_815;
    int const x_245 = (*(tint_symbol_84)).numbers.arr[3];
    float const x_816 = color[0];
    color[0] = 0.0f;
    color[0] = x_816;
    QuicksortObject const x_817 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_64 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_65 = {.numbers=tint_symbol_64};
    *(tint_symbol_84) = tint_symbol_65;
    *(tint_symbol_84) = x_817;
    float3 const x_468 = float3(x_467[0], x_467[0], x_467[0]);
    float const x_818 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_818;
    float const x_819 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_819;
    float const x_249 = color[2];
    float3 const x_820 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_820;
    float3 const x_469 = float3(x_467[0], x_191[1], x_467[1]);
    float const x_821 = color[2];
    color[2] = 0.0f;
    color[2] = x_821;
    int const x_822 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_822;
    float2 const x_470 = float2(float2()[0], float2()[1]);
    float const x_823 = color[2];
    color[2] = 0.0f;
    color[2] = x_823;
    color[2] = (x_249 + float(x_245));
    float2 const x_824 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_824;
    float2 const x_471 = float2(x_470[1], x_470[1]);
  }
  float const x_825 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_825;
  float3 const x_472 = float3(x_454[0], x_454[1], x_454[1]);
  int const x_254 = (*(tint_symbol_84)).numbers.arr[4];
  float const x_826 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_826;
  float3 const x_827 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_827;
  float3 const x_473 = float3(x_446[1], x_453[0], x_453[0]);
  int const x_828 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_828;
  float2 const x_474 = float2(x_191[0], x_184[2]);
  float const x_829 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_829;
  float const x_257 = color[1];
  float const x_830 = color[1];
  color[1] = 0.0f;
  color[1] = x_830;
  float2 const x_475 = float2(x_467[0], x_450[0]);
  float const x_831 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_831;
  float const x_832 = color[0];
  color[0] = 0.0f;
  color[0] = x_832;
  float2 const x_476 = float2(x_451[2], x_460[1]);
  color[1] = (x_257 + float(x_254));
  float3 const x_477 = float3(float2()[0], x_472[0], float2()[1]);
  float const x_833 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_833;
  float const x_834 = color[0];
  color[0] = 0.0f;
  color[0] = x_834;
  float2 const x_478 = float2(x_472[0], x_472[1]);
  float const x_835 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_835;
  float const x_261 = uv[1];
  int const x_836 = i_2;
  i_2 = 0;
  i_2 = x_836;
  float3 const x_479 = float3(float2()[1], x_454[1], float2()[0]);
  int const x_837 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_837;
  float const x_838 = color[1];
  color[1] = 0.0f;
  color[1] = x_838;
  float3 const x_480 = float3(x_446[0], x_446[0], float2()[1]);
  float const x_839 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_839;
  if ((x_261 > 0.25f)) {
    float2 const x_481 = float2(x_447[0], x_480[2]);
    float3 const x_840 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_840;
    int const x_267 = (*(tint_symbol_84)).numbers.arr[5u];
    float const x_841 = color[0];
    color[0] = 0.0f;
    color[0] = x_841;
    int const x_842 = i_2;
    i_2 = 0;
    i_2 = x_842;
    int const x_843 = i_2;
    i_2 = 0;
    i_2 = x_843;
    float const x_270 = color[0];
    float const x_844 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_844;
    float3 const x_482 = float3(x_455[0], x_475[1], x_455[1]);
    QuicksortObject const x_845 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_66 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_67 = {.numbers=tint_symbol_66};
    *(tint_symbol_84) = tint_symbol_67;
    *(tint_symbol_84) = x_845;
    float const x_846 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_846;
    int const x_847 = i_2;
    i_2 = 0;
    i_2 = x_847;
    float3 const x_483 = float3(x_184[3], x_184[3], x_192[0]);
    float const x_848 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_848;
    color[0] = (float(x_267) + x_270);
    float3 const x_484 = float3(x_454[1], x_450[0], x_454[1]);
    float const x_849 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_849;
  }
  float const x_850 = color[0];
  color[0] = 0.0f;
  color[0] = x_850;
  float3 const x_485 = float3(x_467[0], x_450[1], x_450[0]);
  float const x_851 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_851;
  int const x_852 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_852;
  float const x_274 = uv[1];
  int const x_853 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_853;
  if ((x_274 > 0.5f)) {
    float const x_854 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_854;
    float2 const x_486 = float2(x_480[1], x_455[1]);
    float const x_855 = color[1];
    color[1] = 0.0f;
    color[1] = x_855;
    float2 const x_487 = float2(x_449[2], x_449[1]);
    float const x_856 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_856;
    int const x_280 = (*(tint_symbol_84)).numbers.arr[6u];
    float const x_857 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_857;
    int const x_858 = i_2;
    i_2 = 0;
    i_2 = x_858;
    int const x_859 = (*(tint_symbol_84)).numbers.arr[4];
    (*(tint_symbol_84)).numbers.arr[4] = 0;
    (*(tint_symbol_84)).numbers.arr[4] = x_859;
    float2 const x_488 = float2(x_473[2], x_473[1]);
    float const x_283 = color[1];
    float2 const x_860 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_860;
    float const x_861 = color[0];
    color[0] = 0.0f;
    color[0] = x_861;
    float2 const x_489 = float2(x_475[1], x_475[0]);
    int const x_862 = (*(tint_symbol_84)).numbers.arr[6u];
    (*(tint_symbol_84)).numbers.arr[6u] = 0;
    (*(tint_symbol_84)).numbers.arr[6u] = x_862;
    int const x_863 = (*(tint_symbol_84)).numbers.arr[6u];
    (*(tint_symbol_84)).numbers.arr[6u] = 0;
    (*(tint_symbol_84)).numbers.arr[6u] = x_863;
    float2 const x_490 = float2(x_480[2], x_480[2]);
    QuicksortObject const x_864 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_68 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_69 = {.numbers=tint_symbol_68};
    *(tint_symbol_84) = tint_symbol_69;
    *(tint_symbol_84) = x_864;
    color[1] = (float(x_280) + x_283);
    float const x_865 = color[0];
    color[0] = 0.0f;
    color[0] = x_865;
    float2 const x_491 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_454[0]);
    float const x_866 = color[1];
    color[1] = 0.0f;
    color[1] = x_866;
  }
  float2 const x_492 = float2(x_455[1], x_455[1]);
  float const x_867 = color[0];
  color[0] = 0.0f;
  color[0] = x_867;
  float const x_287 = uv[1];
  QuicksortObject const x_868 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_70 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_71 = {.numbers=tint_symbol_70};
  *(tint_symbol_84) = tint_symbol_71;
  *(tint_symbol_84) = x_868;
  float2 const x_493 = float2(x_475[0], x_475[1]);
  float const x_869 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_869;
  float const x_870 = color[1];
  color[1] = 0.0f;
  color[1] = x_870;
  float3 const x_494 = float3(x_191[0], x_191[1], x_191[1]);
  int const x_871 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_871;
  if ((x_287 > 0.75f)) {
    float3 const x_872 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_872;
    float const x_873 = color[0];
    color[0] = 0.0f;
    color[0] = x_873;
    float3 const x_495 = float3(x_192[1], x_192[0], x_192[1]);
    float3 const x_874 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_874;
    int const x_293 = (*(tint_symbol_84)).numbers.arr[7];
    float const x_875 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_875;
    float3 const x_496 = float3(x_475[0], x_467[1], x_467[0]);
    float const x_876 = color[1];
    color[1] = 0.0f;
    color[1] = x_876;
    float2 const x_497 = float2(x_477[0], x_461[1]);
    int const x_877 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_877;
    float const x_878 = color[1];
    color[1] = 0.0f;
    color[1] = x_878;
    float3 const x_498 = float3(x_478[0], x_478[1], x_478[0]);
    float const x_879 = color[0];
    color[0] = 0.0f;
    color[0] = x_879;
    float const x_296 = color[2];
    float const x_880 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_880;
    float2 const x_499 = float2(x_184[0], x_184[1]);
    float const x_881 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_881;
    float const x_882 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_882;
    float const x_883 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_883;
    float3 const x_500 = float3(x_499[1], x_499[1], x_494[2]);
    float const x_884 = color[2];
    color[2] = 0.0f;
    color[2] = x_884;
    color[2] = (float(x_293) + x_296);
    float const x_885 = color[1];
    color[1] = 0.0f;
    color[1] = x_885;
    float2 const x_501 = float2(x_453[0], x_453[2]);
    float const x_886 = color[0];
    color[0] = 0.0f;
    color[0] = x_886;
  }
  int const x_887 = i_2;
  i_2 = 0;
  i_2 = x_887;
  float2 const x_502 = float2(x_451[1], x_192[1]);
  float2 const x_888 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_888;
  int const x_301 = (*(tint_symbol_84)).numbers.arr[8];
  int const x_889 = i_2;
  i_2 = 0;
  i_2 = x_889;
  float2 const x_503 = float2(x_185[0], x_451[2]);
  int const x_890 = (*(tint_symbol_84)).numbers.arr[8];
  (*(tint_symbol_84)).numbers.arr[8] = 0;
  (*(tint_symbol_84)).numbers.arr[8] = x_890;
  float const x_891 = color[1];
  color[1] = 0.0f;
  color[1] = x_891;
  float2 const x_504 = float2(x_453[1], float2()[0]);
  float const x_892 = color[0];
  color[0] = 0.0f;
  color[0] = x_892;
  float3 const x_505 = float3(x_504[0], x_504[1], x_504[0]);
  float const x_893 = color[2];
  color[2] = 0.0f;
  color[2] = x_893;
  float const x_304 = color[2];
  float const x_894 = color[0];
  color[0] = 0.0f;
  color[0] = x_894;
  float2 const x_506 = float2(x_493[0], x_492[0]);
  int const x_895 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_895;
  float const x_896 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_896;
  float2 const x_507 = float2(x_461[0], x_447[0]);
  float const x_897 = color[1];
  color[1] = 0.0f;
  color[1] = x_897;
  color[2] = (x_304 + float(x_301));
  float2 const x_898 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_898;
  float const x_899 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_899;
  float3 const x_508 = float3(x_461[1], x_461[0], x_506[1]);
  float const x_900 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_900;
  float const x_308 = uv[0];
  float const x_901 = color[1];
  color[1] = 0.0f;
  color[1] = x_901;
  float3 const x_509 = float3(x_503[1], x_503[0], x_448[2]);
  float const x_902 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_902;
  float const x_310 = uv[1];
  float const x_903 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_903;
  float const x_904 = color[2];
  color[2] = 0.0f;
  color[2] = x_904;
  float3 const x_510 = float3(float3(1.0f, 2.0f, 3.0f)[1], x_485[1], x_485[2]);
  float const x_905 = color[2];
  color[2] = 0.0f;
  color[2] = x_905;
  int const x_906 = i_2;
  i_2 = 0;
  i_2 = x_906;
  float2 const x_511 = float2(x_485[2], x_485[1]);
  float3 const x_907 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_907;
  float const x_908 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_908;
  float3 const x_512 = float3(x_455[1], x_455[1], x_455[1]);
  int const x_909 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_909;
  if ((fabs((x_308 - x_310)) < 0.25f)) {
    float const x_910 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_910;
    QuicksortObject const x_911 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_72 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_73 = {.numbers=tint_symbol_72};
    *(tint_symbol_84) = tint_symbol_73;
    *(tint_symbol_84) = x_911;
    float3 const x_513 = float3(x_505[2], x_505[0], x_448[0]);
    int const x_912 = (*(tint_symbol_84)).numbers.arr[8];
    (*(tint_symbol_84)).numbers.arr[8] = 0;
    (*(tint_symbol_84)).numbers.arr[8] = x_912;
    int const x_317 = (*(tint_symbol_84)).numbers.arr[9u];
    float3 const x_514 = float3(x_474[1], x_474[1], x_474[1]);
    float const x_913 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_913;
    float const x_320 = color[0];
    float const x_914 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_914;
    float2 const x_515 = float2(x_502[0], x_502[1]);
    float const x_915 = color[0];
    color[0] = 0.0f;
    color[0] = x_915;
    float3 const x_916 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_916;
    float2 const x_516 = float2(x_452[0], x_452[0]);
    float2 const x_917 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_917;
    float const x_918 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_918;
    float3 const x_517 = float3(float2()[0], float2()[0], float2()[1]);
    color[0] = (float(x_317) + x_320);
    float const x_919 = color[0];
    color[0] = 0.0f;
    color[0] = x_919;
    float3 const x_518 = float3(x_480[1], x_508[0], x_480[0]);
    float const x_920 = color[0];
    color[0] = 0.0f;
    color[0] = x_920;
  }
  float const x_921 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_921;
  float3 const x_325 = color;
  float const x_922 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_922;
  float3 const x_519 = float3(x_447[0], x_446[0], x_446[1]);
  float3 const x_326 = normalize(x_325);
  float const x_923 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_923;
  QuicksortObject const x_924 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_74 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_75 = {.numbers=tint_symbol_74};
  *(tint_symbol_84) = tint_symbol_75;
  *(tint_symbol_84) = x_924;
  QuicksortObject const x_925 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_76 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_77 = {.numbers=tint_symbol_76};
  *(tint_symbol_84) = tint_symbol_77;
  *(tint_symbol_84) = x_925;
  float const x_926 = color[1];
  color[1] = 0.0f;
  color[1] = x_926;
  float2 const x_520 = float2(x_506[1], x_519[1]);
  float const x_927 = color[1];
  color[1] = 0.0f;
  color[1] = x_927;
  float4 const x_330 = float4(x_326[0], x_326[1], x_326[2], 1.0f);
  float const x_928 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_928;
  float3 const x_521 = float3(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1], x_520[1]);
  float const x_929 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_929;
  *(tint_symbol_87) = x_330;
  QuicksortObject const x_930 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_78 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_79 = {.numbers=tint_symbol_78};
  *(tint_symbol_84) = tint_symbol_79;
  *(tint_symbol_84) = x_930;
  float3 const x_522 = float3(x_330[3], x_330[1], x_493[0]);
  float const x_931 = color[0];
  color[0] = 0.0f;
  color[0] = x_931;
  return;
}

main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_88, thread QuicksortObject* const tint_symbol_89, const constant buf0* const tint_symbol_90, thread float4* const tint_symbol_91) {
  *(tint_symbol_88) = gl_FragCoord_param;
  main_1(tint_symbol_89, tint_symbol_88, tint_symbol_90, tint_symbol_91);
  main_out const tint_symbol_80 = {.x_GLF_color_1=*(tint_symbol_91)};
  return tint_symbol_80;
}

fragment tint_symbol_1 tint_symbol(const constant buf0* tint_symbol_94 [[buffer(0)]], float4 gl_FragCoord_param [[position]]) {
  thread float4 tint_symbol_92 = 0.0f;
  thread QuicksortObject tint_symbol_93 = {};
  thread float4 tint_symbol_95 = 0.0f;
  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_92), &(tint_symbol_93), tint_symbol_94, &(tint_symbol_95));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

