struct QuicksortObject {
  int numbers[10];
};

static QuicksortObject obj = (QuicksortObject)0;
static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
cbuffer cbuffer_x_188 : register(b0, space0) {
  uint4 x_188[1];
};
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

void swap_i1_i1_(inout int i, inout int j) {
  int temp = 0;
  const int x_932 = temp;
  temp = 0;
  temp = x_932;
  const float3 x_523 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
  const int x_933 = i;
  i = 0;
  i = x_933;
  const int x_28 = i;
  const int x_934 = j;
  j = 0;
  j = x_934;
  const float3 x_524 = float3(x_523.y, x_523.x, x_523.y);
  const int x_935 = temp;
  temp = 0;
  temp = x_935;
  const int x_30_save = x_28;
  const int x_936 = obj.numbers[x_30_save];
  {
    int tint_symbol_1[10] = obj.numbers;
    tint_symbol_1[x_30_save] = 0;
    obj.numbers = tint_symbol_1;
  }
  {
    int tint_symbol_3[10] = obj.numbers;
    tint_symbol_3[x_30_save] = x_936;
    obj.numbers = tint_symbol_3;
  }
  const int x_31 = obj.numbers[x_30_save];
  const int x_937 = temp;
  temp = 0;
  temp = x_937;
  temp = x_31;
  const int x_938 = j;
  j = 0;
  j = x_938;
  const float3 x_525 = float3(x_523.z, float3(1.0f, 2.0f, 3.0f).x, x_523.y);
  const int x_939 = i;
  i = 0;
  i = x_939;
  const int x_32 = i;
  const int x_940 = obj.numbers[x_30_save];
  {
    int tint_symbol_5[10] = obj.numbers;
    tint_symbol_5[x_30_save] = 0;
    obj.numbers = tint_symbol_5;
  }
  {
    int tint_symbol_7[10] = obj.numbers;
    tint_symbol_7[x_30_save] = x_940;
    obj.numbers = tint_symbol_7;
  }
  const int x_33 = j;
  const int x_941 = i;
  i = 0;
  i = x_941;
  const float3 x_526 = float3(x_525.x, x_525.z, x_525.z);
  const int x_942 = obj.numbers[x_30_save];
  {
    int tint_symbol_9[10] = obj.numbers;
    tint_symbol_9[x_30_save] = 0;
    obj.numbers = tint_symbol_9;
  }
  {
    int tint_symbol_11[10] = obj.numbers;
    tint_symbol_11[x_30_save] = x_942;
    obj.numbers = tint_symbol_11;
  }
  const int x_34_save = x_33;
  const int x_35 = obj.numbers[x_34_save];
  const QuicksortObject x_943 = obj;
  const int tint_symbol_52[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_53 = {tint_symbol_52};
  obj = tint_symbol_53;
  obj = x_943;
  const float2 x_527 = float2(x_526.x, x_526.x);
  const int x_36_save = x_32;
  const float3 x_528 = float3(x_524.x, x_524.z, x_524.x);
  {
    int tint_symbol_13[10] = obj.numbers;
    tint_symbol_13[x_36_save] = x_35;
    obj.numbers = tint_symbol_13;
  }
  const QuicksortObject x_944 = obj;
  const int tint_symbol_54[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_55 = {tint_symbol_54};
  obj = tint_symbol_55;
  obj = x_944;
  const float3 x_529 = float3(x_526.y, x_526.z, x_526.x);
  const int x_945 = i;
  i = 0;
  i = x_945;
  const int x_37 = j;
  const int x_946 = temp;
  temp = 0;
  temp = x_946;
  const float2 x_530 = float2(x_529.z, x_529.y);
  const int x_947 = obj.numbers[x_34_save];
  {
    int tint_symbol_15[10] = obj.numbers;
    tint_symbol_15[x_34_save] = 0;
    obj.numbers = tint_symbol_15;
  }
  {
    int tint_symbol_17[10] = obj.numbers;
    tint_symbol_17[x_34_save] = x_947;
    obj.numbers = tint_symbol_17;
  }
  const int x_38 = temp;
  const int x_948 = j;
  j = 0;
  j = x_948;
  const float3 x_531 = float3(x_527.x, x_526.y, x_526.x);
  const int x_949 = obj.numbers[x_36_save];
  {
    int tint_symbol_19[10] = obj.numbers;
    tint_symbol_19[x_36_save] = 0;
    obj.numbers = tint_symbol_19;
  }
  {
    int tint_symbol_21[10] = obj.numbers;
    tint_symbol_21[x_36_save] = x_949;
    obj.numbers = tint_symbol_21;
  }
  const QuicksortObject x_950 = obj;
  const int tint_symbol_56[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_57 = {tint_symbol_56};
  obj = tint_symbol_57;
  obj = x_950;
  const float3 x_532 = float3(x_528.x, x_528.y, x_528.x);
  const int x_951 = obj.numbers[x_34_save];
  {
    int tint_symbol_23[10] = obj.numbers;
    tint_symbol_23[x_34_save] = 0;
    obj.numbers = tint_symbol_23;
  }
  {
    int tint_symbol_25[10] = obj.numbers;
    tint_symbol_25[x_34_save] = x_951;
    obj.numbers = tint_symbol_25;
  }
  {
    int tint_symbol_27[10] = obj.numbers;
    tint_symbol_27[x_37] = x_38;
    obj.numbers = tint_symbol_27;
  }
  return;
}

int performPartition_i1_i1_(inout int l, inout int h) {
  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 = float2(0.0f, 0.0f);
  float3 x_538 = float3(0.0f, 0.0f, 0.0f);
  const int x_952 = h;
  h = 0;
  h = x_952;
  const int x_41 = h;
  const int x_953 = l;
  l = 0;
  l = x_953;
  const int x_42_save = x_41;
  const int x_954 = obj.numbers[x_42_save];
  {
    int tint_symbol_29[10] = obj.numbers;
    tint_symbol_29[x_42_save] = 0;
    obj.numbers = tint_symbol_29;
  }
  {
    int tint_symbol_31[10] = obj.numbers;
    tint_symbol_31[x_42_save] = x_954;
    obj.numbers = tint_symbol_31;
  }
  const int x_43 = obj.numbers[x_42_save];
  const int x_955 = param_3;
  param_3 = 0;
  param_3 = x_955;
  const float3 x_534 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
  const int x_956 = param_1;
  param_1 = 0;
  param_1 = x_956;
  pivot = x_43;
  const int x_45 = l;
  const int x_957 = h;
  h = 0;
  h = x_957;
  const int x_958 = j_1;
  j_1 = 0;
  j_1 = x_958;
  const float3 x_535 = float3(x_534.y, x_534.z, x_534.y);
  const int x_959 = l;
  l = 0;
  l = x_959;
  i_1 = (x_45 - asint(1u));
  const int x_49 = l;
  const float3 x_536 = float3(x_534.x, x_534.z, x_535.x);
  j_1 = 10;
  const QuicksortObject x_960 = obj;
  const int tint_symbol_58[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_59 = {tint_symbol_58};
  obj = tint_symbol_59;
  obj = x_960;
  [loop] while (true) {
    const int x_961 = pivot;
    pivot = 0;
    pivot = x_961;
    const int x_962 = param_1;
    param_1 = 0;
    param_1 = x_962;
    const int x_55 = j_1;
    const int x_963 = pivot;
    pivot = 0;
    pivot = x_963;
    x_537 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
    const QuicksortObject x_964 = obj;
    const int tint_symbol_60[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_61 = {tint_symbol_60};
    obj = tint_symbol_61;
    obj = x_964;
    const int x_56 = h;
    const int x_965 = h;
    h = 0;
    h = x_965;
    const int x_966 = param;
    param = 0;
    param = x_966;
    const int x_967 = j_1;
    j_1 = 0;
    j_1 = x_967;
    x_538 = float3(x_534.x, x_537.y, x_534.z);
    const int x_968 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= (x_56 - asint(1u)))) {
    } else {
      break;
    }
    const int x_60 = j_1;
    const int x_969 = obj.numbers[x_42_save];
    {
      int tint_symbol_33[10] = obj.numbers;
      tint_symbol_33[x_42_save] = 0;
      obj.numbers = tint_symbol_33;
    }
    {
      int tint_symbol_35[10] = obj.numbers;
      tint_symbol_35[x_42_save] = x_969;
      obj.numbers = tint_symbol_35;
    }
    const int x_61_save = x_60;
    const int x_970 = h;
    h = 0;
    h = x_970;
    const float3 x_539 = float3(x_537.x, x_535.z, x_537.x);
    const int x_971 = param_1;
    param_1 = 0;
    param_1 = x_971;
    const int x_62 = obj.numbers[x_61_save];
    const QuicksortObject x_972 = obj;
    const int tint_symbol_62[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_63 = {tint_symbol_62};
    obj = tint_symbol_63;
    obj = x_972;
    const int x_63 = pivot;
    const float2 x_540 = float2(float3(1.0f, 2.0f, 3.0f).y, x_534.z);
    const int x_973 = i_1;
    i_1 = 0;
    i_1 = x_973;
    const int x_974 = l;
    l = 0;
    l = x_974;
    const float3 x_541 = float3(x_534.y, x_534.x, x_534.y);
    const int x_975 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      const float3 x_542 = float3(x_541.z, x_541.x, x_541.x);
      const int x_976 = param_3;
      param_3 = 0;
      param_3 = x_976;
      const int x_67 = i_1;
      const int x_977 = pivot;
      pivot = 0;
      pivot = x_977;
      const float2 x_543 = float2(x_539.x, x_541.y);
      const int x_978 = i_1;
      i_1 = 0;
      i_1 = x_978;
      const int x_979 = param;
      param = 0;
      param = x_979;
      i_1 = (x_67 + asint(1u));
      const int x_980 = l;
      l = 0;
      l = x_980;
      const float3 x_544 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, x_540.x);
      const int x_70 = i_1;
      const float2 x_545 = float2(x_537.y, x_538.x);
      const int x_981 = param;
      param = 0;
      param = x_981;
      param = x_70;
      const int x_982 = param;
      param = 0;
      param = x_982;
      const float2 x_546 = float2(x_545.x, x_545.x);
      const int x_983 = i_1;
      i_1 = 0;
      i_1 = x_983;
      param_1 = j_1;
      const int x_984 = param_3;
      param_3 = 0;
      param_3 = x_984;
      swap_i1_i1_(param, param_1);
      const int x_985 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    const QuicksortObject x_986 = obj;
    const int tint_symbol_64[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_65 = {tint_symbol_64};
    obj = tint_symbol_65;
    obj = x_986;
    {
      const int x_987 = h;
      h = 0;
      h = x_987;
      const int x_74 = j_1;
      const int x_988 = h;
      h = 0;
      h = x_988;
      const float3 x_547 = float3(x_539.x, x_541.z, x_541.z);
      const int x_989 = obj.numbers[x_61_save];
      {
        int tint_symbol_37[10] = obj.numbers;
        tint_symbol_37[x_61_save] = 0;
        obj.numbers = tint_symbol_37;
      }
      {
        int tint_symbol_39[10] = obj.numbers;
        tint_symbol_39[x_61_save] = x_989;
        obj.numbers = tint_symbol_39;
      }
      const int x_990 = param;
      param = 0;
      param = x_990;
      j_1 = (1 + x_74);
      const int x_991 = param_1;
      param_1 = 0;
      param_1 = x_991;
      const float3 x_548 = float3(x_541.y, x_541.z, x_541.x);
      const int x_992 = obj.numbers[x_61_save];
      {
        int tint_symbol_41[10] = obj.numbers;
        tint_symbol_41[x_61_save] = 0;
        obj.numbers = tint_symbol_41;
      }
      {
        int tint_symbol_43[10] = obj.numbers;
        tint_symbol_43[x_61_save] = x_992;
        obj.numbers = tint_symbol_43;
      }
    }
  }
  const int x_76 = i_1;
  const int x_993 = obj.numbers[x_42_save];
  {
    int tint_symbol_45[10] = obj.numbers;
    tint_symbol_45[x_42_save] = 0;
    obj.numbers = tint_symbol_45;
  }
  {
    int tint_symbol_47[10] = obj.numbers;
    tint_symbol_47[x_42_save] = x_993;
    obj.numbers = tint_symbol_47;
  }
  const float2 x_549 = float2(x_534.x, x_534.y);
  const QuicksortObject x_994 = obj;
  const int tint_symbol_66[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_67 = {tint_symbol_66};
  obj = tint_symbol_67;
  obj = x_994;
  const int x_995 = h;
  h = 0;
  h = x_995;
  i_1 = (1 + x_76);
  const int x_996 = param_1;
  param_1 = 0;
  param_1 = x_996;
  const int x_79 = i_1;
  const int x_997 = j_1;
  j_1 = 0;
  j_1 = x_997;
  const float2 x_550 = float2(x_534.x, x_534.x);
  const int x_998 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  const float2 x_551 = float2(x_534.y, x_536.x);
  const int x_999 = pivot;
  pivot = 0;
  pivot = x_999;
  const int x_81 = h;
  const float2 x_552 = float2(x_550.x, x_549.y);
  const int x_1000 = h;
  h = 0;
  h = x_1000;
  param_3 = x_81;
  const int x_1001 = i_1;
  i_1 = 0;
  i_1 = x_1001;
  const float2 x_553 = float2(x_549.y, x_552.x);
  const int x_1002 = h;
  h = 0;
  h = x_1002;
  swap_i1_i1_(param_2, param_3);
  const int x_1003 = l;
  l = 0;
  l = x_1003;
  const float2 x_554 = float2(x_536.z, float3(1.0f, 2.0f, 3.0f).y);
  const int x_1004 = param_1;
  param_1 = 0;
  param_1 = x_1004;
  const int x_83 = i_1;
  const int x_1005 = param;
  param = 0;
  param = x_1005;
  const float2 x_555 = float2(x_534.y, x_534.x);
  const int x_1006 = j_1;
  j_1 = 0;
  j_1 = x_1006;
  return x_83;
}

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

void main_1() {
  float3 color = float3(0.0f, 0.0f, 0.0f);
  int i_2 = 0;
  float2 uv = float2(0.0f, 0.0f);
  const float2 x_717 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_717;
  i_2 = 0;
  const QuicksortObject x_721 = obj;
  const int tint_symbol_86[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_87 = {tint_symbol_86};
  obj = tint_symbol_87;
  obj = x_721;
  if (true) {
    const QuicksortObject x_722 = obj;
    const int tint_symbol_88[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_89 = {tint_symbol_88};
    obj = tint_symbol_89;
    obj = x_722;
    const float2 x_431 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
    const int x_158 = i_2;
    const float2 x_723 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_723;
    const float3 x_725 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_725;
    const float2 x_432 = float2(x_431.y, x_431.y);
    const QuicksortObject x_726 = obj;
    const int tint_symbol_90[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_91 = {tint_symbol_90};
    obj = tint_symbol_91;
    obj = x_726;
  }
  const QuicksortObject x_756 = obj;
  const int tint_symbol_92[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_93 = {tint_symbol_92};
  obj = tint_symbol_93;
  obj = x_756;
  const float2 x_446 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x);
  const int x_757 = i_2;
  i_2 = 0;
  i_2 = x_757;
  quicksort_();
  const QuicksortObject x_758 = obj;
  const int tint_symbol_94[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_95 = {tint_symbol_94};
  obj = tint_symbol_95;
  obj = x_758;
  const float4 x_184 = gl_FragCoord;
  const float2 x_759 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_759;
  const float2 x_447 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
  const float2 x_760 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_760;
  const float2 x_185 = float2(x_184.x, x_184.y);
  const float3 x_448 = float3(x_185.y, x_446.y, x_446.y);
  const QuicksortObject x_761 = obj;
  const int tint_symbol_96[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_97 = {tint_symbol_96};
  obj = tint_symbol_97;
  obj = x_761;
  const float2 x_762 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_762;
  const float2 x_191 = asfloat(x_188[0].xy);
  const QuicksortObject x_763 = obj;
  const int tint_symbol_98[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_99 = {tint_symbol_98};
  obj = tint_symbol_99;
  obj = x_763;
  const float3 x_449 = float3(x_184.y, float3(1.0f, 2.0f, 3.0f).z, x_184.w);
  const float3 x_764 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_764;
  const float2 x_192 = (x_185 / x_191);
  const QuicksortObject x_765 = obj;
  const int tint_symbol_100[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_101 = {tint_symbol_100};
  obj = tint_symbol_101;
  obj = x_765;
  const float2 x_450 = float2(x_447.x, x_185.y);
  const float3 x_766 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  const float3 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);
  const float3 x_768 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_768;
  const float3 x_451 = float3(x_185.x, x_185.y, x_446.y);
  const QuicksortObject x_769 = obj;
  const int tint_symbol_102[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_103 = {tint_symbol_102};
  obj = tint_symbol_103;
  obj = x_769;
  const int x_770 = obj.numbers[0u];
  obj.numbers[0u] = 0;
  obj.numbers[0u] = x_770;
  const int x_201 = obj.numbers[0u];
  const QuicksortObject x_771 = obj;
  const int tint_symbol_104[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_105 = {tint_symbol_104};
  obj = tint_symbol_105;
  obj = x_771;
  const int x_772 = obj.numbers[0u];
  obj.numbers[0u] = 0;
  obj.numbers[0u] = x_772;
  const float x_206 = color.x;
  const float x_773 = color.x;
  color.x = 0.0f;
  color.x = x_773;
  const float2 x_452 = float2(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y);
  const int x_774 = i_2;
  i_2 = 0;
  i_2 = x_774;
  const QuicksortObject x_775 = obj;
  const int tint_symbol_106[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_107 = {tint_symbol_106};
  obj = tint_symbol_107;
  obj = x_775;
  const float3 x_453 = float3(x_451.x, x_450.x, x_450.y);
  color.x = (x_206 + float(x_201));
  const float2 x_776 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_776;
  const float2 x_777 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_777;
  const float2 x_454 = float2(x_184.y, x_184.y);
  const float x_210 = uv.x;
  const float2 x_455 = float2(x_192.y, x_192.x);
  const float x_778 = uv.x;
  uv.x = 0.0f;
  uv.x = x_778;
  const QuicksortObject x_779 = obj;
  const int tint_symbol_108[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_109 = {tint_symbol_108};
  obj = tint_symbol_109;
  obj = x_779;
  if ((x_210 > 0.25f)) {
    const int x_780 = i_2;
    i_2 = 0;
    i_2 = x_780;
    const int x_781 = obj.numbers[0u];
    obj.numbers[0u] = 0;
    obj.numbers[0u] = x_781;
    const float3 x_456 = float3(float2(0.0f, 0.0f).y, x_448.y, x_448.y);
    const float x_782 = uv.x;
    uv.x = 0.0f;
    uv.x = x_782;
    const int x_216 = obj.numbers[1];
    const QuicksortObject x_783 = obj;
    const int tint_symbol_110[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_111 = {tint_symbol_110};
    obj = tint_symbol_111;
    obj = x_783;
    const float2 x_457 = float2(x_454.x, x_454.x);
    const float2 x_784 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_784;
    const QuicksortObject x_785 = obj;
    const int tint_symbol_112[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_113 = {tint_symbol_112};
    obj = tint_symbol_113;
    obj = x_785;
    const float2 x_458 = float2(float3(1.0f, 2.0f, 3.0f).z, float2(0.0f, 0.0f).y);
    const int x_786 = i_2;
    i_2 = 0;
    i_2 = x_786;
    const float x_219 = color[0];
    const float x_787 = color[0];
    color[0] = 0.0f;
    color[0] = x_787;
    const float3 x_788 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_788;
    const float3 x_789 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_789;
    const float3 x_459 = float3(x_454.y, x_454.y, x_447.y);
    const float x_790 = color[0];
    color[0] = 0.0f;
    color[0] = x_790;
    color.x = (float(x_216) + x_219);
    const int x_791 = obj.numbers[0u];
    obj.numbers[0u] = 0;
    obj.numbers[0u] = x_791;
  }
  const float x_792 = uv.x;
  uv.x = 0.0f;
  uv.x = x_792;
  const float x_793 = uv.x;
  uv.x = 0.0f;
  uv.x = x_793;
  const float x_223 = uv.x;
  const float x_794 = uv.x;
  uv.x = 0.0f;
  uv.x = x_794;
  const float3 x_460 = float3(x_453.z, x_453.y, x_453.y);
  const float2 x_795 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_795;
  const float x_796 = uv.x;
  uv.x = 0.0f;
  uv.x = x_796;
  const float2 x_461 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
  const float x_797 = uv.x;
  uv.x = 0.0f;
  uv.x = x_797;
  if ((x_223 > 0.5f)) {
    const float x_798 = uv.x;
    uv.x = 0.0f;
    uv.x = x_798;
    const float2 x_462 = float2(x_446.x, x_446.x);
    const float x_799 = color.x;
    color.x = 0.0f;
    color.x = x_799;
    const float x_800 = color.x;
    color.x = 0.0f;
    color.x = x_800;
    const float3 x_463 = float3(x_453.x, x_453.z, x_461.y);
    const float x_801 = color.x;
    color.x = 0.0f;
    color.x = x_801;
    const int x_230 = obj.numbers[2u];
    const float x_802 = uv.x;
    uv.x = 0.0f;
    uv.x = x_802;
    const float x_803 = color.x;
    color.x = 0.0f;
    color.x = x_803;
    const int x_804 = obj.numbers[2u];
    obj.numbers[2u] = 0;
    obj.numbers[2u] = x_804;
    const float2 x_464 = float2(x_450.y, x_191.x);
    const float x_805 = color.y;
    color.y = 0.0f;
    color.y = x_805;
    const float x_234 = color.y;
    const int x_806 = obj.numbers[2u];
    obj.numbers[2u] = 0;
    obj.numbers[2u] = x_806;
    const float2 x_465 = float2(x_463.x, x_185.x);
    const float x_807 = color.x;
    color.x = 0.0f;
    color.x = x_807;
    const int x_808 = i_2;
    i_2 = 0;
    i_2 = x_808;
    const float2 x_466 = float2(x_455.y, float2(0.0f, 0.0f).y);
    const int x_809 = i_2;
    i_2 = 0;
    i_2 = x_809;
    color.y = (float(x_230) + x_234);
    const float x_810 = uv.x;
    uv.x = 0.0f;
    uv.x = x_810;
  }
  const int x_811 = i_2;
  i_2 = 0;
  i_2 = x_811;
  const float2 x_467 = float2(x_191.x, x_191.x);
  const float x_812 = uv.x;
  uv.x = 0.0f;
  uv.x = x_812;
  const float x_238 = uv[0];
  const float3 x_813 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_813;
  const float x_814 = color.x;
  color.x = 0.0f;
  color.x = x_814;
  if ((x_238 > 0.75f)) {
    const float x_815 = color.x;
    color.x = 0.0f;
    color.x = x_815;
    const int x_245 = obj.numbers[3];
    const float x_816 = color.x;
    color.x = 0.0f;
    color.x = x_816;
    const QuicksortObject x_817 = obj;
    const int tint_symbol_114[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_115 = {tint_symbol_114};
    obj = tint_symbol_115;
    obj = x_817;
    const float3 x_468 = float3(x_467.x, x_467.x, x_467.x);
    const float x_818 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_818;
    const float x_819 = uv.x;
    uv.x = 0.0f;
    uv.x = x_819;
    const float x_249 = color.z;
    const float3 x_820 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_820;
    const float3 x_469 = float3(x_467.x, x_191.y, x_467.y);
    const float x_821 = color.z;
    color.z = 0.0f;
    color.z = x_821;
    const int x_822 = obj.numbers[0u];
    obj.numbers[0u] = 0;
    obj.numbers[0u] = x_822;
    const float2 x_470 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
    const float x_823 = color.z;
    color.z = 0.0f;
    color.z = x_823;
    color.z = (x_249 + float(x_245));
    const float2 x_824 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_824;
    const float2 x_471 = float2(x_470.y, x_470.y);
  }
  const float x_825 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_825;
  const float3 x_472 = float3(x_454.x, x_454.y, x_454.y);
  const int x_254 = obj.numbers[4];
  const float x_826 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_826;
  const float3 x_827 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_827;
  const float3 x_473 = float3(x_446.y, x_453.x, x_453.x);
  const int x_828 = obj.numbers[4];
  obj.numbers[4] = 0;
  obj.numbers[4] = x_828;
  const float2 x_474 = float2(x_191.x, x_184.z);
  const float x_829 = uv.x;
  uv.x = 0.0f;
  uv.x = x_829;
  const float x_257 = color.y;
  const float x_830 = color.y;
  color.y = 0.0f;
  color.y = x_830;
  const float2 x_475 = float2(x_467.x, x_450.x);
  const float x_831 = uv.x;
  uv.x = 0.0f;
  uv.x = x_831;
  const float x_832 = color.x;
  color.x = 0.0f;
  color.x = x_832;
  const float2 x_476 = float2(x_451.z, x_460.y);
  color.y = (x_257 + float(x_254));
  const float3 x_477 = float3(float2(0.0f, 0.0f).x, x_472.x, float2(0.0f, 0.0f).y);
  const float x_833 = uv.x;
  uv.x = 0.0f;
  uv.x = x_833;
  const float x_834 = color.x;
  color.x = 0.0f;
  color.x = x_834;
  const float2 x_478 = float2(x_472.x, x_472.y);
  const float x_835 = uv.y;
  uv.y = 0.0f;
  uv.y = x_835;
  const float x_261 = uv.y;
  const int x_836 = i_2;
  i_2 = 0;
  i_2 = x_836;
  const float3 x_479 = float3(float2(0.0f, 0.0f).y, x_454.y, float2(0.0f, 0.0f).x);
  const int x_837 = obj.numbers[0u];
  obj.numbers[0u] = 0;
  obj.numbers[0u] = x_837;
  const float x_838 = color.y;
  color.y = 0.0f;
  color.y = x_838;
  const float3 x_480 = float3(x_446.x, x_446.x, float2(0.0f, 0.0f).y);
  const float x_839 = uv.x;
  uv.x = 0.0f;
  uv.x = x_839;
  if ((x_261 > 0.25f)) {
    const float2 x_481 = float2(x_447.x, x_480.z);
    const float3 x_840 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_840;
    const int x_267 = obj.numbers[5u];
    const float x_841 = color.x;
    color.x = 0.0f;
    color.x = x_841;
    const int x_842 = i_2;
    i_2 = 0;
    i_2 = x_842;
    const int x_843 = i_2;
    i_2 = 0;
    i_2 = x_843;
    const float x_270 = color.x;
    const float x_844 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_844;
    const float3 x_482 = float3(x_455.x, x_475.y, x_455.y);
    const QuicksortObject x_845 = obj;
    const int tint_symbol_116[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_117 = {tint_symbol_116};
    obj = tint_symbol_117;
    obj = x_845;
    const float x_846 = uv.y;
    uv.y = 0.0f;
    uv.y = x_846;
    const int x_847 = i_2;
    i_2 = 0;
    i_2 = x_847;
    const float3 x_483 = float3(x_184.w, x_184.w, x_192.x);
    const float x_848 = uv.x;
    uv.x = 0.0f;
    uv.x = x_848;
    color.x = (float(x_267) + x_270);
    const float3 x_484 = float3(x_454.y, x_450.x, x_454.y);
    const float x_849 = uv.x;
    uv.x = 0.0f;
    uv.x = x_849;
  }
  const float x_850 = color.x;
  color.x = 0.0f;
  color.x = x_850;
  const float3 x_485 = float3(x_467.x, x_450.y, x_450.x);
  const float x_851 = uv.y;
  uv.y = 0.0f;
  uv.y = x_851;
  const int x_852 = obj.numbers[4];
  obj.numbers[4] = 0;
  obj.numbers[4] = x_852;
  const float x_274 = uv.y;
  const int x_853 = obj.numbers[0u];
  obj.numbers[0u] = 0;
  obj.numbers[0u] = x_853;
  if ((x_274 > 0.5f)) {
    const float x_854 = uv.x;
    uv.x = 0.0f;
    uv.x = x_854;
    const float2 x_486 = float2(x_480.y, x_455.y);
    const float x_855 = color.y;
    color.y = 0.0f;
    color.y = x_855;
    const float2 x_487 = float2(x_449.z, x_449.y);
    const float x_856 = uv.y;
    uv.y = 0.0f;
    uv.y = x_856;
    const int x_280 = obj.numbers[6u];
    const float x_857 = uv.y;
    uv.y = 0.0f;
    uv.y = x_857;
    const int x_858 = i_2;
    i_2 = 0;
    i_2 = x_858;
    const int x_859 = obj.numbers[4];
    obj.numbers[4] = 0;
    obj.numbers[4] = x_859;
    const float2 x_488 = float2(x_473.z, x_473.y);
    const float x_283 = color.y;
    const float2 x_860 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_860;
    const float x_861 = color.x;
    color.x = 0.0f;
    color.x = x_861;
    const float2 x_489 = float2(x_475.y, x_475.x);
    const int x_862 = obj.numbers[6u];
    obj.numbers[6u] = 0;
    obj.numbers[6u] = x_862;
    const int x_863 = obj.numbers[6u];
    obj.numbers[6u] = 0;
    obj.numbers[6u] = x_863;
    const float2 x_490 = float2(x_480.z, x_480.z);
    const QuicksortObject x_864 = obj;
    const int tint_symbol_118[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_119 = {tint_symbol_118};
    obj = tint_symbol_119;
    obj = x_864;
    color.y = (float(x_280) + x_283);
    const float x_865 = color.x;
    color.x = 0.0f;
    color.x = x_865;
    const float2 x_491 = float2(float3(1.0f, 2.0f, 3.0f).y, x_454.x);
    const float x_866 = color.y;
    color.y = 0.0f;
    color.y = x_866;
  }
  const float2 x_492 = float2(x_455.y, x_455.y);
  const float x_867 = color.x;
  color.x = 0.0f;
  color.x = x_867;
  const float x_287 = uv.y;
  const QuicksortObject x_868 = obj;
  const int tint_symbol_120[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_121 = {tint_symbol_120};
  obj = tint_symbol_121;
  obj = x_868;
  const float2 x_493 = float2(x_475.x, x_475.y);
  const float x_869 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_869;
  const float x_870 = color.y;
  color.y = 0.0f;
  color.y = x_870;
  const float3 x_494 = float3(x_191.x, x_191.y, x_191.y);
  const int x_871 = obj.numbers[4];
  obj.numbers[4] = 0;
  obj.numbers[4] = x_871;
  if ((x_287 > 0.75f)) {
    const float3 x_872 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_872;
    const float x_873 = color.x;
    color.x = 0.0f;
    color.x = x_873;
    const float3 x_495 = float3(x_192.y, x_192.x, x_192.y);
    const float3 x_874 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_874;
    const int x_293 = obj.numbers[7];
    const float x_875 = uv.x;
    uv.x = 0.0f;
    uv.x = x_875;
    const float3 x_496 = float3(x_475.x, x_467.y, x_467.x);
    const float x_876 = color.y;
    color.y = 0.0f;
    color.y = x_876;
    const float2 x_497 = float2(x_477.x, x_461.y);
    const int x_877 = obj.numbers[0u];
    obj.numbers[0u] = 0;
    obj.numbers[0u] = x_877;
    const float x_878 = color.y;
    color.y = 0.0f;
    color.y = x_878;
    const float3 x_498 = float3(x_478.x, x_478.y, x_478.x);
    const float x_879 = color.x;
    color.x = 0.0f;
    color.x = x_879;
    const float x_296 = color.z;
    const float x_880 = uv.y;
    uv.y = 0.0f;
    uv.y = x_880;
    const float2 x_499 = float2(x_184.x, x_184.y);
    const float x_881 = uv.x;
    uv.x = 0.0f;
    uv.x = x_881;
    const float x_882 = uv.y;
    uv.y = 0.0f;
    uv.y = x_882;
    const float x_883 = uv.y;
    uv.y = 0.0f;
    uv.y = x_883;
    const float3 x_500 = float3(x_499.y, x_499.y, x_494.z);
    const float x_884 = color.z;
    color.z = 0.0f;
    color.z = x_884;
    color.z = (float(x_293) + x_296);
    const float x_885 = color.y;
    color.y = 0.0f;
    color.y = x_885;
    const float2 x_501 = float2(x_453.x, x_453.z);
    const float x_886 = color.x;
    color.x = 0.0f;
    color.x = x_886;
  }
  const int x_887 = i_2;
  i_2 = 0;
  i_2 = x_887;
  const float2 x_502 = float2(x_451.y, x_192.y);
  const float2 x_888 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_888;
  const int x_301 = obj.numbers[8];
  const int x_889 = i_2;
  i_2 = 0;
  i_2 = x_889;
  const float2 x_503 = float2(x_185.x, x_451.z);
  const int x_890 = obj.numbers[8];
  obj.numbers[8] = 0;
  obj.numbers[8] = x_890;
  const float x_891 = color.y;
  color.y = 0.0f;
  color.y = x_891;
  const float2 x_504 = float2(x_453.y, float2(0.0f, 0.0f).x);
  const float x_892 = color.x;
  color.x = 0.0f;
  color.x = x_892;
  const float3 x_505 = float3(x_504.x, x_504.y, x_504.x);
  const float x_893 = color.z;
  color.z = 0.0f;
  color.z = x_893;
  const float x_304 = color.z;
  const float x_894 = color.x;
  color.x = 0.0f;
  color.x = x_894;
  const float2 x_506 = float2(x_493.x, x_492.x);
  const int x_895 = obj.numbers[4];
  obj.numbers[4] = 0;
  obj.numbers[4] = x_895;
  const float x_896 = uv.y;
  uv.y = 0.0f;
  uv.y = x_896;
  const float2 x_507 = float2(x_461.x, x_447.x);
  const float x_897 = color.y;
  color.y = 0.0f;
  color.y = x_897;
  color.z = (x_304 + float(x_301));
  const float2 x_898 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_898;
  const float x_899 = uv.x;
  uv.x = 0.0f;
  uv.x = x_899;
  const float3 x_508 = float3(x_461.y, x_461.x, x_506.y);
  const float x_900 = uv.x;
  uv.x = 0.0f;
  uv.x = x_900;
  const float x_308 = uv.x;
  const float x_901 = color.y;
  color.y = 0.0f;
  color.y = x_901;
  const float3 x_509 = float3(x_503.y, x_503.x, x_448.z);
  const float x_902 = uv.y;
  uv.y = 0.0f;
  uv.y = x_902;
  const float x_310 = uv.y;
  const float x_903 = uv.y;
  uv.y = 0.0f;
  uv.y = x_903;
  const float x_904 = color.z;
  color.z = 0.0f;
  color.z = x_904;
  const float3 x_510 = float3(float3(1.0f, 2.0f, 3.0f).y, x_485.y, x_485.z);
  const float x_905 = color.z;
  color.z = 0.0f;
  color.z = x_905;
  const int x_906 = i_2;
  i_2 = 0;
  i_2 = x_906;
  const float2 x_511 = float2(x_485.z, x_485.y);
  const float3 x_907 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_907;
  const float x_908 = uv.y;
  uv.y = 0.0f;
  uv.y = x_908;
  const float3 x_512 = float3(x_455.y, x_455.y, x_455.y);
  const int x_909 = obj.numbers[4];
  obj.numbers[4] = 0;
  obj.numbers[4] = x_909;
  if ((abs((x_308 - x_310)) < 0.25f)) {
    const float x_910 = uv.x;
    uv.x = 0.0f;
    uv.x = x_910;
    const QuicksortObject x_911 = obj;
    const int tint_symbol_122[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    const QuicksortObject tint_symbol_123 = {tint_symbol_122};
    obj = tint_symbol_123;
    obj = x_911;
    const float3 x_513 = float3(x_505.z, x_505.x, x_448.x);
    const int x_912 = obj.numbers[8];
    obj.numbers[8] = 0;
    obj.numbers[8] = x_912;
    const int x_317 = obj.numbers[9u];
    const float3 x_514 = float3(x_474.y, x_474.y, x_474.y);
    const float x_913 = uv.y;
    uv.y = 0.0f;
    uv.y = x_913;
    const float x_320 = color.x;
    const float x_914 = uv.y;
    uv.y = 0.0f;
    uv.y = x_914;
    const float2 x_515 = float2(x_502.x, x_502.y);
    const float x_915 = color.x;
    color.x = 0.0f;
    color.x = x_915;
    const float3 x_916 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_916;
    const float2 x_516 = float2(x_452.x, x_452.x);
    const float2 x_917 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_917;
    const float x_918 = uv.x;
    uv.x = 0.0f;
    uv.x = x_918;
    const float3 x_517 = float3(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
    color.x = (float(x_317) + x_320);
    const float x_919 = color.x;
    color.x = 0.0f;
    color.x = x_919;
    const float3 x_518 = float3(x_480.y, x_508.x, x_480.x);
    const float x_920 = color.x;
    color.x = 0.0f;
    color.x = x_920;
  }
  const float x_921 = uv.y;
  uv.y = 0.0f;
  uv.y = x_921;
  const float3 x_325 = color;
  const float x_922 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_922;
  const float3 x_519 = float3(x_447.x, x_446.x, x_446.y);
  const float3 x_326 = normalize(x_325);
  const float x_923 = uv.x;
  uv.x = 0.0f;
  uv.x = x_923;
  const QuicksortObject x_924 = obj;
  const int tint_symbol_124[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_125 = {tint_symbol_124};
  obj = tint_symbol_125;
  obj = x_924;
  const QuicksortObject x_925 = obj;
  const int tint_symbol_126[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_127 = {tint_symbol_126};
  obj = tint_symbol_127;
  obj = x_925;
  const float x_926 = color.y;
  color.y = 0.0f;
  color.y = x_926;
  const float2 x_520 = float2(x_506.y, x_519.y);
  const float x_927 = color.y;
  color.y = 0.0f;
  color.y = x_927;
  const float4 x_330 = float4(x_326.x, x_326.y, x_326.z, 1.0f);
  const float x_928 = uv.y;
  uv.y = 0.0f;
  uv.y = x_928;
  const float3 x_521 = float3(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y, x_520.y);
  const float x_929 = uv.x;
  uv.x = 0.0f;
  uv.x = x_929;
  x_GLF_color = x_330;
  const QuicksortObject x_930 = obj;
  const int tint_symbol_128[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  const QuicksortObject tint_symbol_129 = {tint_symbol_128};
  obj = tint_symbol_129;
  obj = x_930;
  const float3 x_522 = float3(x_330.w, x_330.y, x_493.x);
  const float x_931 = color.x;
  color.x = 0.0f;
  color.x = x_931;
  return;
}

struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_49 {
  float4 gl_FragCoord_param : SV_Position;
};
struct tint_symbol_50 {
  float4 x_GLF_color_1 : SV_Target0;
};

main_out main_inner(float4 gl_FragCoord_param) {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  const main_out tint_symbol_130 = {x_GLF_color};
  return tint_symbol_130;
}

tint_symbol_50 main(tint_symbol_49 tint_symbol_48) {
  const main_out inner_result = main_inner(tint_symbol_48.gl_FragCoord_param);
  tint_symbol_50 wrapper_result = (tint_symbol_50)0;
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}
