struct QuicksortObject {
  numbers : array<i32, 10>;
};

[[block]]
struct buf0 {
  resolution : vec2<f32>;
};

var<private> obj : QuicksortObject;

[[builtin(position)]] var<in> gl_FragCoord : vec4<f32>;

[[group(0), binding(0)]] var<uniform> x_188 : buf0;

[[location(0)]] var<out> x_GLF_color : vec4<f32>;

fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
  var temp : i32;
  let x_932 : i32 = temp;
  temp = 0;
  temp = x_932;
  let x_523 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).z, vec3<f32>(1.0, 2.0, 3.0).y, vec3<f32>(1.0, 2.0, 3.0).z);
  let x_933 : i32 = *(i);
  *(i) = 0;
  *(i) = x_933;
  let x_28 : i32 = *(i);
  let x_934 : i32 = *(j);
  *(j) = 0;
  *(j) = x_934;
  let x_524 : vec3<f32> = vec3<f32>(x_523.y, x_523.x, x_523.y);
  let x_935 : i32 = temp;
  temp = 0;
  temp = x_935;
  let x_30 : ptr<private, i32> = &(obj.numbers[x_28]);
  let x_936 : i32 = *(x_30);
  *(x_30) = 0;
  *(x_30) = x_936;
  let x_31 : i32 = *(x_30);
  let x_937 : i32 = temp;
  temp = 0;
  temp = x_937;
  temp = x_31;
  let x_938 : i32 = *(j);
  *(j) = 0;
  *(j) = x_938;
  let x_525 : vec3<f32> = vec3<f32>(x_523.z, vec3<f32>(1.0, 2.0, 3.0).x, x_523.y);
  let x_939 : i32 = *(i);
  *(i) = 0;
  *(i) = x_939;
  let x_32 : i32 = *(i);
  let x_940 : i32 = *(x_30);
  *(x_30) = 0;
  *(x_30) = x_940;
  let x_33 : i32 = *(j);
  let x_941 : i32 = *(i);
  *(i) = 0;
  *(i) = x_941;
  let x_526 : vec3<f32> = vec3<f32>(x_525.x, x_525.z, x_525.z);
  let x_942 : i32 = *(x_30);
  *(x_30) = 0;
  *(x_30) = x_942;
  let x_34 : ptr<private, i32> = &(obj.numbers[x_33]);
  let x_35 : i32 = *(x_34);
  let x_943 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_943;
  let x_527 : vec2<f32> = vec2<f32>(x_526.x, x_526.x);
  let x_36 : ptr<private, i32> = &(obj.numbers[x_32]);
  let x_528 : vec3<f32> = vec3<f32>(x_524.x, x_524.z, x_524.x);
  *(x_36) = x_35;
  let x_944 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_944;
  let x_529 : vec3<f32> = vec3<f32>(x_526.y, x_526.z, x_526.x);
  let x_945 : i32 = *(i);
  *(i) = 0;
  *(i) = x_945;
  let x_37 : i32 = *(j);
  let x_946 : i32 = temp;
  temp = 0;
  temp = x_946;
  let x_530 : vec2<f32> = vec2<f32>(x_529.z, x_529.y);
  let x_947 : i32 = *(x_34);
  *(x_34) = 0;
  *(x_34) = x_947;
  let x_38 : i32 = temp;
  let x_948 : i32 = *(j);
  *(j) = 0;
  *(j) = x_948;
  let x_531 : vec3<f32> = vec3<f32>(x_527.x, x_526.y, x_526.x);
  let x_949 : i32 = *(x_36);
  *(x_36) = 0;
  *(x_36) = x_949;
  let x_950 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_950;
  let x_532 : vec3<f32> = vec3<f32>(x_528.x, x_528.y, x_528.x);
  let x_951 : i32 = *(x_34);
  *(x_34) = 0;
  *(x_34) = x_951;
  obj.numbers[x_37] = x_38;
  return;
}

fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
  var param_3 : i32;
  var i_1 : i32;
  var j_1 : i32;
  var param_2 : i32;
  var param_1 : i32;
  var param : i32;
  var pivot : i32;
  var x_537 : vec2<f32>;
  var x_538 : vec3<f32>;
  let x_952 : i32 = *(h);
  *(h) = 0;
  *(h) = x_952;
  let x_41 : i32 = *(h);
  let x_953 : i32 = *(l);
  *(l) = 0;
  *(l) = x_953;
  let x_42 : ptr<private, i32> = &(obj.numbers[x_41]);
  let x_954 : i32 = *(x_42);
  *(x_42) = 0;
  *(x_42) = x_954;
  let x_43 : i32 = *(x_42);
  let x_955 : i32 = param_3;
  param_3 = 0;
  param_3 = x_955;
  let x_534 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).z, vec3<f32>(1.0, 2.0, 3.0).x, vec3<f32>(1.0, 2.0, 3.0).z);
  let x_956 : i32 = param_1;
  param_1 = 0;
  param_1 = x_956;
  pivot = x_43;
  let x_45 : i32 = *(l);
  let x_957 : i32 = *(h);
  *(h) = 0;
  *(h) = x_957;
  let x_958 : i32 = j_1;
  j_1 = 0;
  j_1 = x_958;
  let x_535 : vec3<f32> = vec3<f32>(x_534.y, x_534.z, x_534.y);
  let x_959 : i32 = *(l);
  *(l) = 0;
  *(l) = x_959;
  i_1 = (x_45 - bitcast<i32>(1u));
  let x_49 : i32 = *(l);
  let x_536 : vec3<f32> = vec3<f32>(x_534.x, x_534.z, x_535.x);
  j_1 = 10;
  let x_960 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_960;
  loop {
    let x_961 : i32 = pivot;
    pivot = 0;
    pivot = x_961;
    let x_962 : i32 = param_1;
    param_1 = 0;
    param_1 = x_962;
    let x_55 : i32 = j_1;
    let x_963 : i32 = pivot;
    pivot = 0;
    pivot = x_963;
    x_537 = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).y, vec3<f32>(1.0, 2.0, 3.0).z);
    let x_964 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_964;
    let x_56 : i32 = *(h);
    let x_965 : i32 = *(h);
    *(h) = 0;
    *(h) = x_965;
    let x_966 : i32 = param;
    param = 0;
    param = x_966;
    let x_967 : i32 = j_1;
    j_1 = 0;
    j_1 = x_967;
    x_538 = vec3<f32>(x_534.x, x_537.y, x_534.z);
    let x_968 : i32 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= (x_56 - bitcast<i32>(1u)))) {
    } else {
      break;
    }
    let x_60 : i32 = j_1;
    let x_969 : i32 = *(x_42);
    *(x_42) = 0;
    *(x_42) = x_969;
    let x_61 : ptr<private, i32> = &(obj.numbers[x_60]);
    let x_970 : i32 = *(h);
    *(h) = 0;
    *(h) = x_970;
    let x_539 : vec3<f32> = vec3<f32>(x_537.x, x_535.z, x_537.x);
    let x_971 : i32 = param_1;
    param_1 = 0;
    param_1 = x_971;
    let x_62 : i32 = *(x_61);
    let x_972 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_972;
    let x_63 : i32 = pivot;
    let x_540 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).y, x_534.z);
    let x_973 : i32 = i_1;
    i_1 = 0;
    i_1 = x_973;
    let x_974 : i32 = *(l);
    *(l) = 0;
    *(l) = x_974;
    let x_541 : vec3<f32> = vec3<f32>(x_534.y, x_534.x, x_534.y);
    let x_975 : i32 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      let x_542 : vec3<f32> = vec3<f32>(x_541.z, x_541.x, x_541.x);
      let x_976 : i32 = param_3;
      param_3 = 0;
      param_3 = x_976;
      let x_67 : i32 = i_1;
      let x_977 : i32 = pivot;
      pivot = 0;
      pivot = x_977;
      let x_543 : vec2<f32> = vec2<f32>(x_539.x, x_541.y);
      let x_978 : i32 = i_1;
      i_1 = 0;
      i_1 = x_978;
      let x_979 : i32 = param;
      param = 0;
      param = x_979;
      i_1 = (x_67 + bitcast<i32>(1u));
      let x_980 : i32 = *(l);
      *(l) = 0;
      *(l) = x_980;
      let x_544 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).z, vec3<f32>(1.0, 2.0, 3.0).y, x_540.x);
      let x_70 : i32 = i_1;
      let x_545 : vec2<f32> = vec2<f32>(x_537.y, x_538.x);
      let x_981 : i32 = param;
      param = 0;
      param = x_981;
      param = x_70;
      let x_982 : i32 = param;
      param = 0;
      param = x_982;
      let x_546 : vec2<f32> = vec2<f32>(x_545.x, x_545.x);
      let x_983 : i32 = i_1;
      i_1 = 0;
      i_1 = x_983;
      let x_72 : i32 = j_1;
      param_1 = x_72;
      let x_984 : i32 = param_3;
      param_3 = 0;
      param_3 = x_984;
      swap_i1_i1_(&(param), &(param_1));
      let x_985 : i32 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    let x_986 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_986;

    continuing {
      let x_987 : i32 = *(h);
      *(h) = 0;
      *(h) = x_987;
      let x_74 : i32 = j_1;
      let x_988 : i32 = *(h);
      *(h) = 0;
      *(h) = x_988;
      let x_547 : vec3<f32> = vec3<f32>(x_539.x, x_541.z, x_541.z);
      let x_989 : i32 = *(x_61);
      *(x_61) = 0;
      *(x_61) = x_989;
      let x_990 : i32 = param;
      param = 0;
      param = x_990;
      j_1 = (1 + x_74);
      let x_991 : i32 = param_1;
      param_1 = 0;
      param_1 = x_991;
      let x_548 : vec3<f32> = vec3<f32>(x_541.y, x_541.z, x_541.x);
      let x_992 : i32 = *(x_61);
      *(x_61) = 0;
      *(x_61) = x_992;
    }
  }
  let x_76 : i32 = i_1;
  let x_993 : i32 = *(x_42);
  *(x_42) = 0;
  *(x_42) = x_993;
  let x_549 : vec2<f32> = vec2<f32>(x_534.x, x_534.y);
  let x_994 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_994;
  let x_995 : i32 = *(h);
  *(h) = 0;
  *(h) = x_995;
  i_1 = (1 + x_76);
  let x_996 : i32 = param_1;
  param_1 = 0;
  param_1 = x_996;
  let x_79 : i32 = i_1;
  let x_997 : i32 = j_1;
  j_1 = 0;
  j_1 = x_997;
  let x_550 : vec2<f32> = vec2<f32>(x_534.x, x_534.x);
  let x_998 : i32 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  let x_551 : vec2<f32> = vec2<f32>(x_534.y, x_536.x);
  let x_999 : i32 = pivot;
  pivot = 0;
  pivot = x_999;
  let x_81 : i32 = *(h);
  let x_552 : vec2<f32> = vec2<f32>(x_550.x, x_549.y);
  let x_1000 : i32 = *(h);
  *(h) = 0;
  *(h) = x_1000;
  param_3 = x_81;
  let x_1001 : i32 = i_1;
  i_1 = 0;
  i_1 = x_1001;
  let x_553 : vec2<f32> = vec2<f32>(x_549.y, x_552.x);
  let x_1002 : i32 = *(h);
  *(h) = 0;
  *(h) = x_1002;
  swap_i1_i1_(&(param_2), &(param_3));
  let x_1003 : i32 = *(l);
  *(l) = 0;
  *(l) = x_1003;
  let x_554 : vec2<f32> = vec2<f32>(x_536.z, vec3<f32>(1.0, 2.0, 3.0).y);
  let x_1004 : i32 = param_1;
  param_1 = 0;
  param_1 = x_1004;
  let x_83 : i32 = i_1;
  let x_1005 : i32 = param;
  param = 0;
  param = x_1005;
  let x_555 : vec2<f32> = vec2<f32>(x_534.y, x_534.x);
  let x_1006 : i32 = j_1;
  j_1 = 0;
  j_1 = x_1006;
  return x_83;
}

fn quicksort_() {
  var param_4 : i32;
  var h_1 : i32;
  var p : i32;
  var l_1 : i32;
  var top : i32;
  var stack : array<i32, 10>;
  var param_5 : i32;
  l_1 = 0;
  let x_1007 : i32 = param_5;
  param_5 = 0;
  param_5 = x_1007;
  h_1 = 9;
  let x_1008 : array<i32, 10> = stack;
  stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  stack = x_1008;
  let x_556 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).y, vec3<f32>(1.0, 2.0, 3.0).y);
  let x_1009 : i32 = param_5;
  param_5 = 0;
  param_5 = x_1009;
  top = -1;
  let x_1010 : i32 = p;
  p = 0;
  p = x_1010;
  let x_93 : i32 = top;
  let x_557 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).x, vec3<f32>(1.0, 2.0, 3.0).x);
  let x_1011 : i32 = p;
  p = 0;
  p = x_1011;
  let x_94 : i32 = (x_93 + bitcast<i32>(1u));
  let x_1012 : i32 = top;
  top = 0;
  top = x_1012;
  let x_558 : vec2<f32> = vec2<f32>(x_556.y, x_557.y);
  let x_1013 : i32 = param_4;
  param_4 = 0;
  param_4 = x_1013;
  top = x_94;
  let x_1014 : i32 = h_1;
  h_1 = 0;
  h_1 = x_1014;
  let x_559 : vec3<f32> = vec3<f32>(x_557.y, x_557.x, x_557.x);
  let x_1015 : i32 = param_4;
  param_4 = 0;
  param_4 = x_1015;
  let x_95 : i32 = l_1;
  let x_1016 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_1016;
  let x_560 : vec3<f32> = vec3<f32>(x_559.y, x_559.x, x_557.x);
  let x_96 : ptr<function, i32> = &(stack[x_94]);
  let x_1017 : array<i32, 10> = stack;
  stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  stack = x_1017;
  let x_561 : vec3<f32> = vec3<f32>(x_556.y, x_556.y, x_556.y);
  let x_1018 : i32 = l_1;
  l_1 = 0;
  l_1 = 0;
  *(x_96) = x_95;
  let x_1019 : i32 = param_5;
  param_5 = 0;
  param_5 = x_1019;
  let x_97 : i32 = top;
  let x_1020 : i32 = param_4;
  param_4 = 0;
  param_4 = x_1020;
  let x_562 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).z, x_558.y, vec3<f32>(1.0, 2.0, 3.0).y);
  let x_1021 : i32 = *(x_96);
  *(x_96) = 0;
  *(x_96) = x_1021;
  let x_98 : i32 = (x_97 + 1);
  let x_1022 : i32 = *(x_96);
  *(x_96) = 0;
  *(x_96) = x_1022;
  let x_563 : vec3<f32> = vec3<f32>(x_559.x, x_559.z, x_556.y);
  top = x_98;
  let x_1023 : i32 = param_4;
  param_4 = 0;
  param_4 = x_1023;
  let x_99 : i32 = h_1;
  let x_1024 : i32 = param_4;
  param_4 = 0;
  param_4 = x_1024;
  let x_564 : vec3<f32> = vec3<f32>(x_558.x, x_561.x, x_558.y);
  let x_1025 : i32 = l_1;
  l_1 = 0;
  l_1 = x_1025;
  let x_100 : ptr<function, i32> = &(stack[x_98]);
  let x_1026 : i32 = param_5;
  param_5 = 0;
  param_5 = x_1026;
  let x_565 : vec2<f32> = vec2<f32>(x_564.z, x_564.z);
  let x_1027 : i32 = p;
  p = 0;
  p = x_1027;
  *(x_100) = x_99;
  loop {
    let x_566 : vec3<f32> = vec3<f32>(x_563.x, x_563.x, x_563.x);
    let x_1028 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1028;
    let x_1029 : array<i32, 10> = stack;
    stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = x_1029;
    let x_106 : i32 = top;
    let x_1030 : array<i32, 10> = stack;
    stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = x_1030;
    let x_567 : vec2<f32> = vec2<f32>(x_558.x, x_564.z);
    let x_1031 : i32 = param_4;
    param_4 = 0;
    param_4 = x_1031;
    if ((x_106 >= bitcast<i32>(0u))) {
    } else {
      break;
    }
    let x_1032 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_1032;
    let x_568 : vec3<f32> = vec3<f32>(x_559.y, x_559.x, x_563.y);
    let x_1033 : i32 = param_4;
    param_4 = 0;
    param_4 = x_1033;
    let x_108 : i32 = top;
    let x_569 : vec3<f32> = vec3<f32>(x_565.x, x_567.y, x_565.x);
    let x_1034 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1034;
    let x_570 : vec2<f32> = vec2<f32>(x_556.x, x_556.x);
    let x_1035 : i32 = p;
    p = 0;
    p = x_1035;
    top = (x_108 - bitcast<i32>(1u));
    let x_1036 : i32 = p;
    p = 0;
    p = x_1036;
    let x_110 : ptr<function, i32> = &(stack[x_108]);
    let x_1037 : i32 = *(x_96);
    *(x_96) = 0;
    *(x_96) = x_1037;
    let x_111 : i32 = *(x_110);
    let x_1038 : array<i32, 10> = stack;
    stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = x_1038;
    let x_571 : vec3<f32> = vec3<f32>(x_559.y, x_559.x, x_564.y);
    let x_1039 : i32 = l_1;
    l_1 = 0;
    l_1 = x_1039;
    h_1 = x_111;
    let x_1040 : array<i32, 10> = stack;
    stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    stack = x_1040;
    let x_572 : vec2<f32> = vec2<f32>(x_562.y, x_561.y);
    let x_1041 : i32 = p;
    p = 0;
    p = x_1041;
    let x_112 : i32 = top;
    let x_1042 : i32 = param_4;
    param_4 = 0;
    param_4 = x_1042;
    let x_1043 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1043;
    let x_573 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).y, vec3<f32>(1.0, 2.0, 3.0).z);
    top = (x_112 - 1);
    let x_1044 : i32 = param_5;
    param_5 = 0;
    param_5 = x_1044;
    let x_574 : vec3<f32> = vec3<f32>(x_570.y, x_565.x, x_570.y);
    let x_1045 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1045;
    let x_114 : ptr<function, i32> = &(stack[x_112]);
    let x_575 : vec2<f32> = vec2<f32>(x_564.y, x_564.z);
    let x_1046 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1046;
    let x_115 : i32 = *(x_114);
    let x_1047 : i32 = p;
    p = 0;
    p = x_1047;
    let x_576 : vec3<f32> = vec3<f32>(x_573.y, x_573.y, x_565.x);
    let x_1048 : i32 = param_5;
    param_5 = 0;
    param_5 = x_1048;
    l_1 = x_115;
    let x_1049 : i32 = top;
    top = 0;
    top = x_1049;
    let x_118 : i32 = l_1;
    param_4 = x_118;
    let x_1050 : i32 = *(x_110);
    *(x_110) = 0;
    *(x_110) = x_1050;
    let x_577 : vec2<f32> = vec2<f32>(x_569.y, x_569.z);
    let x_120 : i32 = h_1;
    let x_578 : vec2<f32> = vec2<f32>(x_558.x, vec3<f32>(1.0, 2.0, 3.0).y);
    param_5 = x_120;
    let x_1051 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1051;
    let x_121 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
    let x_579 : vec2<f32> = vec2<f32>(x_567.x, x_568.x);
    let x_1052 : i32 = param_5;
    param_5 = 0;
    param_5 = x_1052;
    p = x_121;
    let x_1053 : i32 = param_4;
    param_4 = 0;
    param_4 = x_1053;
    let x_122 : i32 = p;
    let x_1054 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1054;
    let x_580 : vec2<f32> = vec2<f32>(x_568.y, x_568.y);
    let x_1055 : i32 = l_1;
    l_1 = 0;
    l_1 = x_1055;
    let x_1056 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1056;
    let x_124 : i32 = l_1;
    let x_1057 : i32 = *(x_110);
    *(x_110) = 0;
    *(x_110) = x_1057;
    let x_1058 : i32 = h_1;
    h_1 = 0;
    h_1 = x_1058;
    let x_582 : vec2<f32> = vec2<f32>(x_567.y, x_573.x);
    let x_1059 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1059;
    if (((x_122 - bitcast<i32>(1u)) > x_124)) {
      let x_1060 : i32 = param_4;
      param_4 = 0;
      param_4 = x_1060;
      let x_128 : i32 = top;
      let x_583 : vec2<f32> = vec2<f32>(x_571.y, x_556.y);
      let x_1061 : i32 = *(x_100);
      *(x_100) = 0;
      *(x_100) = x_1061;
      let x_1062 : array<i32, 10> = stack;
      stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = x_1062;
      let x_584 : vec2<f32> = vec2<f32>(x_569.z, x_569.y);
      let x_585 : vec3<f32> = vec3<f32>(x_580.y, x_577.x, x_577.x);
      let x_130 : i32 = l_1;
      let x_1063 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1063;
      let x_586 : vec2<f32> = vec2<f32>(x_564.x, x_585.x);
      let x_1064 : i32 = param_5;
      param_5 = 0;
      param_5 = x_1064;
      let x_131 : ptr<function, i32> = &(stack[(1 + x_128)]);
      let x_1065 : i32 = *(x_110);
      *(x_110) = 0;
      *(x_110) = x_1065;
      let x_587 : vec3<f32> = vec3<f32>(x_566.y, x_566.y, x_563.x);
      let x_1066 : i32 = param_5;
      param_5 = 0;
      param_5 = x_1066;
      *(x_131) = x_130;
      let x_132 : i32 = top;
      let x_1067 : i32 = *(x_100);
      *(x_100) = 0;
      *(x_100) = x_1067;
      let x_588 : vec2<f32> = vec2<f32>(x_575.y, x_575.x);
      let x_1068 : i32 = *(x_131);
      *(x_131) = 0;
      *(x_131) = x_1068;
      let x_133 : i32 = bitcast<i32>((1u + bitcast<u32>(x_132)));
      let x_1069 : i32 = *(x_100);
      *(x_100) = 0;
      *(x_100) = x_1069;
      let x_589 : vec3<f32> = vec3<f32>(x_576.z, x_588.y, x_576.z);
      let x_1070 : i32 = h_1;
      h_1 = 0;
      h_1 = x_1070;
      top = x_133;
      let x_1071 : array<i32, 10> = stack;
      stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = x_1071;
      let x_134 : i32 = p;
      let x_590 : vec2<f32> = vec2<f32>(x_576.x, x_573.y);
      let x_1072 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1072;
      let x_136 : ptr<function, i32> = &(stack[x_133]);
      let x_1073 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1073;
      *(x_136) = (x_134 - bitcast<i32>(1u));
      let x_1074 : i32 = *(x_96);
      *(x_96) = 0;
      *(x_96) = x_1074;
      let x_591 : vec2<f32> = vec2<f32>(x_569.z, x_569.y);
      let x_1075 : i32 = *(x_136);
      *(x_136) = 0;
      *(x_136) = x_1075;
    }
    let x_1076 : i32 = *(x_96);
    *(x_96) = 0;
    *(x_96) = x_1076;
    let x_592 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).x, vec3<f32>(1.0, 2.0, 3.0).y);
    let x_1077 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_1077;
    let x_137 : i32 = p;
    let x_1078 : i32 = *(x_114);
    *(x_114) = 0;
    *(x_114) = x_1078;
    let x_593 : vec3<f32> = vec3<f32>(x_571.z, x_556.x, x_556.y);
    let x_1079 : i32 = p;
    p = 0;
    p = x_1079;
    let x_594 : vec3<f32> = vec3<f32>(x_563.z, x_563.x, x_575.x);
    let x_1080 : i32 = *(x_114);
    *(x_114) = 0;
    *(x_114) = x_1080;
    let x_139 : i32 = h_1;
    let x_1081 : i32 = top;
    top = 0;
    top = x_1081;
    let x_595 : vec3<f32> = vec3<f32>(x_560.z, x_568.x, x_560.x);
    let x_1082 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1082;
    let x_1083 : i32 = p;
    p = 0;
    p = x_1083;
    if ((bitcast<i32>((1u + bitcast<u32>(x_137))) < x_139)) {
      let x_1084 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1084;
      let x_596 : vec2<f32> = vec2<f32>(x_592.y, x_582.x);
      let x_1085 : i32 = l_1;
      l_1 = 0;
      l_1 = x_1085;
      let x_143 : i32 = top;
      let x_1086 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1086;
      let x_597 : vec3<f32> = vec3<f32>(x_562.y, x_560.y, x_560.y);
      let x_144 : i32 = (x_143 + 1);
      let x_1087 : i32 = param_5;
      param_5 = 0;
      param_5 = x_1087;
      top = x_144;
      let x_1088 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1088;
      let x_145 : i32 = p;
      let x_1089 : i32 = param_5;
      param_5 = 0;
      param_5 = x_1089;
      let x_599 : vec3<f32> = vec3<f32>(x_560.z, x_560.x, x_568.x);
      let x_1090 : i32 = p;
      p = 0;
      p = x_1090;
      let x_600 : vec3<f32> = vec3<f32>(x_556.x, x_580.x, x_580.x);
      let x_1091 : i32 = *(x_100);
      *(x_100) = 0;
      *(x_100) = x_1091;
      let x_147 : ptr<function, i32> = &(stack[x_144]);
      let x_1092 : i32 = *(x_110);
      *(x_110) = 0;
      *(x_110) = x_1092;
      let x_601 : vec2<f32> = vec2<f32>(x_563.x, x_563.y);
      *(x_147) = bitcast<i32>((1u + bitcast<u32>(x_145)));
      let x_1093 : array<i32, 10> = stack;
      stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = x_1093;
      let x_148 : i32 = top;
      let x_1094 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1094;
      let x_602 : vec2<f32> = vec2<f32>(x_565.y, x_599.y);
      let x_1095 : array<i32, 10> = stack;
      stack = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      stack = x_1095;
      let x_149 : i32 = (x_148 + bitcast<i32>(1u));
      let x_1096 : i32 = *(x_147);
      *(x_147) = 0;
      *(x_147) = x_1096;
      top = x_149;
      let x_1097 : i32 = param_4;
      param_4 = 0;
      param_4 = x_1097;
      let x_150 : i32 = h_1;
      let x_1098 : i32 = *(x_100);
      *(x_100) = 0;
      *(x_100) = x_1098;
      let x_1099 : i32 = *(x_96);
      *(x_96) = 0;
      *(x_96) = x_1099;
      stack[x_149] = x_150;
      let x_1100 : i32 = *(x_114);
      *(x_114) = 0;
      *(x_114) = x_1100;
      let x_603 : vec3<f32> = vec3<f32>(x_568.y, x_564.x, x_564.x);
      let x_1101 : i32 = l_1;
      l_1 = 0;
      l_1 = x_1101;
    }
    let x_1102 : i32 = *(x_100);
    *(x_100) = 0;
    *(x_100) = x_1102;

    continuing {
      let x_1103 : i32 = l_1;
      l_1 = 0;
      l_1 = x_1103;
      let x_604 : vec2<f32> = vec2<f32>(x_563.z, x_564.x);
      let x_1104 : QuicksortObject = obj;
      obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
      obj = x_1104;
    }
  }
  let x_1105 : i32 = h_1;
  h_1 = 0;
  h_1 = x_1105;
  return;
}

[[stage(fragment)]]
fn main() {
  var color : vec3<f32>;
  var i_2 : i32;
  var uv : vec2<f32>;
  let x_717 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_717;
  i_2 = 0;
  let x_721 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_721;
  if (true) {
    let x_722 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_722;
    let x_431 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).x, vec3<f32>(1.0, 2.0, 3.0).x);
    let x_158 : i32 = i_2;
    let x_723 : vec2<f32> = uv;
    uv = vec2<f32>(0.0, 0.0);
    uv = x_723;
    let x_725 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_725;
    let x_432 : vec2<f32> = vec2<f32>(x_431.y, x_431.y);
    let x_726 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_726;
  }
  let x_756 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_756;
  let x_446 : vec2<f32> = vec2<f32>(vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).x);
  let x_757 : i32 = i_2;
  i_2 = 0;
  i_2 = x_757;
  quicksort_();
  let x_758 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_758;
  let x_184 : vec4<f32> = gl_FragCoord;
  let x_759 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_759;
  let x_447 : vec2<f32> = vec2<f32>(vec2<f32>(0.0, 0.0).y, vec2<f32>(0.0, 0.0).y);
  let x_760 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_760;
  let x_185 : vec2<f32> = vec2<f32>(x_184.x, x_184.y);
  let x_448 : vec3<f32> = vec3<f32>(x_185.y, x_446.y, x_446.y);
  let x_761 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_761;
  let x_762 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_762;
  let x_191 : vec2<f32> = x_188.resolution;
  let x_763 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_763;
  let x_449 : vec3<f32> = vec3<f32>(x_184.y, vec3<f32>(1.0, 2.0, 3.0).z, x_184.w);
  let x_764 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_764;
  let x_192 : vec2<f32> = (x_185 / x_191);
  let x_765 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_765;
  let x_450 : vec2<f32> = vec2<f32>(x_447.x, x_185.y);
  let x_766 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  let x_767 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_767;
  color = x_766;
  uv = x_192;
  color = vec3<f32>(1.0, 2.0, 3.0);
  let x_768 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_768;
  let x_451 : vec3<f32> = vec3<f32>(x_185.x, x_185.y, x_446.y);
  let x_769 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_769;
  let x_200 : ptr<private, i32> = &(obj.numbers[0u]);
  let x_770 : i32 = *(x_200);
  *(x_200) = 0;
  *(x_200) = x_770;
  let x_201 : i32 = *(x_200);
  let x_771 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_771;
  let x_205 : ptr<function, f32> = &(color.x);
  let x_772 : i32 = *(x_200);
  *(x_200) = 0;
  *(x_200) = x_772;
  let x_206 : f32 = *(x_205);
  let x_773 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_773;
  let x_452 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).z, vec3<f32>(1.0, 2.0, 3.0).y);
  let x_774 : i32 = i_2;
  i_2 = 0;
  i_2 = x_774;
  let x_775 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_775;
  let x_208 : ptr<function, f32> = &(color.x);
  let x_453 : vec3<f32> = vec3<f32>(x_451.x, x_450.x, x_450.y);
  *(x_208) = (x_206 + f32(x_201));
  let x_776 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_776;
  let x_209 : ptr<function, f32> = &(uv.x);
  let x_777 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_777;
  let x_454 : vec2<f32> = vec2<f32>(x_184.y, x_184.y);
  let x_210 : f32 = *(x_209);
  let x_455 : vec2<f32> = vec2<f32>(x_192.y, x_192.x);
  let x_778 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_778;
  let x_779 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_779;
  if ((x_210 > 0.25)) {
    let x_780 : i32 = i_2;
    i_2 = 0;
    i_2 = x_780;
    let x_781 : i32 = *(x_200);
    *(x_200) = 0;
    *(x_200) = x_781;
    let x_456 : vec3<f32> = vec3<f32>(vec2<f32>(0.0, 0.0).y, x_448.y, x_448.y);
    let x_782 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_782;
    let x_216 : i32 = obj.numbers[1];
    let x_783 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_783;
    let x_457 : vec2<f32> = vec2<f32>(x_454.x, x_454.x);
    let x_784 : vec2<f32> = uv;
    uv = vec2<f32>(0.0, 0.0);
    uv = x_784;
    let x_218 : ptr<function, f32> = &(color[0]);
    let x_785 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_785;
    let x_458 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).z, vec2<f32>(0.0, 0.0).y);
    let x_786 : i32 = i_2;
    i_2 = 0;
    i_2 = x_786;
    let x_219 : f32 = *(x_218);
    let x_787 : f32 = *(x_218);
    *(x_218) = 0.0;
    *(x_218) = x_787;
    let x_788 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_788;
    let x_789 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_789;
    let x_459 : vec3<f32> = vec3<f32>(x_454.y, x_454.y, x_447.y);
    let x_790 : f32 = *(x_218);
    *(x_218) = 0.0;
    *(x_218) = x_790;
    color.x = (f32(x_216) + x_219);
    let x_791 : i32 = *(x_200);
    *(x_200) = 0;
    *(x_200) = x_791;
  }
  let x_792 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_792;
  let x_222 : ptr<function, f32> = &(uv.x);
  let x_793 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_793;
  let x_223 : f32 = *(x_222);
  let x_794 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_794;
  let x_460 : vec3<f32> = vec3<f32>(x_453.z, x_453.y, x_453.y);
  let x_795 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_795;
  let x_796 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_796;
  let x_461 : vec2<f32> = vec2<f32>(vec2<f32>(0.0, 0.0).y, vec2<f32>(0.0, 0.0).y);
  let x_797 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_797;
  if ((x_223 > 0.5)) {
    let x_798 : f32 = *(x_222);
    *(x_222) = 0.0;
    *(x_222) = x_798;
    let x_462 : vec2<f32> = vec2<f32>(x_446.x, x_446.x);
    let x_799 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_799;
    let x_229 : ptr<private, i32> = &(obj.numbers[2u]);
    let x_800 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_800;
    let x_463 : vec3<f32> = vec3<f32>(x_453.x, x_453.z, x_461.y);
    let x_801 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_801;
    let x_230 : i32 = *(x_229);
    let x_802 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_802;
    let x_803 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_803;
    let x_233 : ptr<function, f32> = &(color.y);
    let x_804 : i32 = *(x_229);
    *(x_229) = 0;
    *(x_229) = x_804;
    let x_464 : vec2<f32> = vec2<f32>(x_450.y, x_191.x);
    let x_805 : f32 = *(x_233);
    *(x_233) = 0.0;
    *(x_233) = x_805;
    let x_234 : f32 = *(x_233);
    let x_806 : i32 = *(x_229);
    *(x_229) = 0;
    *(x_229) = x_806;
    let x_465 : vec2<f32> = vec2<f32>(x_463.x, x_185.x);
    let x_807 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_807;
    let x_808 : i32 = i_2;
    i_2 = 0;
    i_2 = x_808;
    let x_466 : vec2<f32> = vec2<f32>(x_455.y, vec2<f32>(0.0, 0.0).y);
    let x_809 : i32 = i_2;
    i_2 = 0;
    i_2 = x_809;
    color.y = (f32(x_230) + x_234);
    let x_810 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_810;
  }
  let x_237 : ptr<function, f32> = &(uv[0]);
  let x_811 : i32 = i_2;
  i_2 = 0;
  i_2 = x_811;
  let x_467 : vec2<f32> = vec2<f32>(x_191.x, x_191.x);
  let x_812 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_812;
  let x_238 : f32 = *(x_237);
  let x_813 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_813;
  let x_814 : f32 = *(x_208);
  *(x_208) = 0.0;
  *(x_208) = x_814;
  if ((x_238 > 0.75)) {
    let x_815 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_815;
    let x_245 : i32 = obj.numbers[3];
    let x_816 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_816;
    let x_817 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_817;
    let x_468 : vec3<f32> = vec3<f32>(x_467.x, x_467.x, x_467.x);
    let x_818 : f32 = *(x_237);
    *(x_237) = 0.0;
    *(x_237) = x_818;
    let x_248 : ptr<function, f32> = &(color.z);
    let x_819 : f32 = *(x_222);
    *(x_222) = 0.0;
    *(x_222) = x_819;
    let x_249 : f32 = *(x_248);
    let x_820 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_820;
    let x_469 : vec3<f32> = vec3<f32>(x_467.x, x_191.y, x_467.y);
    let x_821 : f32 = *(x_248);
    *(x_248) = 0.0;
    *(x_248) = x_821;
    let x_822 : i32 = *(x_200);
    *(x_200) = 0;
    *(x_200) = x_822;
    let x_470 : vec2<f32> = vec2<f32>(vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).y);
    let x_823 : f32 = *(x_248);
    *(x_248) = 0.0;
    *(x_248) = x_823;
    color.z = (x_249 + f32(x_245));
    let x_824 : vec2<f32> = uv;
    uv = vec2<f32>(0.0, 0.0);
    uv = x_824;
    let x_471 : vec2<f32> = vec2<f32>(x_470.y, x_470.y);
  }
  let x_825 : f32 = *(x_237);
  *(x_237) = 0.0;
  *(x_237) = x_825;
  let x_472 : vec3<f32> = vec3<f32>(x_454.x, x_454.y, x_454.y);
  let x_253 : ptr<private, i32> = &(obj.numbers[4]);
  let x_254 : i32 = *(x_253);
  let x_826 : f32 = *(x_237);
  *(x_237) = 0.0;
  *(x_237) = x_826;
  let x_827 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_827;
  let x_473 : vec3<f32> = vec3<f32>(x_446.y, x_453.x, x_453.x);
  let x_828 : i32 = *(x_253);
  *(x_253) = 0;
  *(x_253) = x_828;
  let x_256 : ptr<function, f32> = &(color.y);
  let x_474 : vec2<f32> = vec2<f32>(x_191.x, x_184.z);
  let x_829 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_829;
  let x_257 : f32 = *(x_256);
  let x_830 : f32 = *(x_256);
  *(x_256) = 0.0;
  *(x_256) = x_830;
  let x_475 : vec2<f32> = vec2<f32>(x_467.x, x_450.x);
  let x_831 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_831;
  let x_259 : ptr<function, f32> = &(color.y);
  let x_832 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_832;
  let x_476 : vec2<f32> = vec2<f32>(x_451.z, x_460.y);
  *(x_259) = (x_257 + f32(x_254));
  let x_477 : vec3<f32> = vec3<f32>(vec2<f32>(0.0, 0.0).x, x_472.x, vec2<f32>(0.0, 0.0).y);
  let x_833 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_833;
  let x_260 : ptr<function, f32> = &(uv.y);
  let x_834 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_834;
  let x_478 : vec2<f32> = vec2<f32>(x_472.x, x_472.y);
  let x_835 : f32 = *(x_260);
  *(x_260) = 0.0;
  *(x_260) = x_835;
  let x_261 : f32 = *(x_260);
  let x_836 : i32 = i_2;
  i_2 = 0;
  i_2 = x_836;
  let x_479 : vec3<f32> = vec3<f32>(vec2<f32>(0.0, 0.0).y, x_454.y, vec2<f32>(0.0, 0.0).x);
  let x_837 : i32 = *(x_200);
  *(x_200) = 0;
  *(x_200) = x_837;
  let x_838 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_838;
  let x_480 : vec3<f32> = vec3<f32>(x_446.x, x_446.x, vec2<f32>(0.0, 0.0).y);
  let x_839 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_839;
  if ((x_261 > 0.25)) {
    let x_481 : vec2<f32> = vec2<f32>(x_447.x, x_480.z);
    let x_840 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_840;
    let x_267 : i32 = obj.numbers[5u];
    let x_841 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_841;
    let x_842 : i32 = i_2;
    i_2 = 0;
    i_2 = x_842;
    let x_843 : i32 = i_2;
    i_2 = 0;
    i_2 = x_843;
    let x_270 : f32 = color.x;
    let x_844 : f32 = *(x_237);
    *(x_237) = 0.0;
    *(x_237) = x_844;
    let x_482 : vec3<f32> = vec3<f32>(x_455.x, x_475.y, x_455.y);
    let x_845 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_845;
    let x_846 : f32 = *(x_260);
    *(x_260) = 0.0;
    *(x_260) = x_846;
    let x_847 : i32 = i_2;
    i_2 = 0;
    i_2 = x_847;
    let x_483 : vec3<f32> = vec3<f32>(x_184.w, x_184.w, x_192.x);
    let x_848 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_848;
    color.x = (f32(x_267) + x_270);
    let x_484 : vec3<f32> = vec3<f32>(x_454.y, x_450.x, x_454.y);
    let x_849 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_849;
  }
  let x_850 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_850;
  let x_485 : vec3<f32> = vec3<f32>(x_467.x, x_450.y, x_450.x);
  let x_851 : f32 = *(x_260);
  *(x_260) = 0.0;
  *(x_260) = x_851;
  let x_273 : ptr<function, f32> = &(uv.y);
  let x_852 : i32 = *(x_253);
  *(x_253) = 0;
  *(x_253) = x_852;
  let x_274 : f32 = *(x_273);
  let x_853 : i32 = *(x_200);
  *(x_200) = 0;
  *(x_200) = x_853;
  if ((x_274 > 0.5)) {
    let x_854 : f32 = *(x_222);
    *(x_222) = 0.0;
    *(x_222) = x_854;
    let x_486 : vec2<f32> = vec2<f32>(x_480.y, x_455.y);
    let x_279 : ptr<private, i32> = &(obj.numbers[6u]);
    let x_855 : f32 = *(x_256);
    *(x_256) = 0.0;
    *(x_256) = x_855;
    let x_487 : vec2<f32> = vec2<f32>(x_449.z, x_449.y);
    let x_856 : f32 = *(x_273);
    *(x_273) = 0.0;
    *(x_273) = x_856;
    let x_280 : i32 = *(x_279);
    let x_857 : f32 = *(x_260);
    *(x_260) = 0.0;
    *(x_260) = x_857;
    let x_858 : i32 = i_2;
    i_2 = 0;
    i_2 = x_858;
    let x_859 : i32 = *(x_253);
    *(x_253) = 0;
    *(x_253) = x_859;
    let x_488 : vec2<f32> = vec2<f32>(x_473.z, x_473.y);
    let x_283 : f32 = color.y;
    let x_860 : vec2<f32> = uv;
    uv = vec2<f32>(0.0, 0.0);
    uv = x_860;
    let x_861 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_861;
    let x_489 : vec2<f32> = vec2<f32>(x_475.y, x_475.x);
    let x_862 : i32 = *(x_279);
    *(x_279) = 0;
    *(x_279) = x_862;
    let x_863 : i32 = *(x_279);
    *(x_279) = 0;
    *(x_279) = x_863;
    let x_490 : vec2<f32> = vec2<f32>(x_480.z, x_480.z);
    let x_864 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_864;
    color.y = (f32(x_280) + x_283);
    let x_865 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_865;
    let x_491 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).y, x_454.x);
    let x_866 : f32 = *(x_259);
    *(x_259) = 0.0;
    *(x_259) = x_866;
  }
  let x_492 : vec2<f32> = vec2<f32>(x_455.y, x_455.y);
  let x_867 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_867;
  let x_286 : ptr<function, f32> = &(uv.y);
  let x_287 : f32 = *(x_286);
  let x_868 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_868;
  let x_493 : vec2<f32> = vec2<f32>(x_475.x, x_475.y);
  let x_869 : f32 = *(x_237);
  *(x_237) = 0.0;
  *(x_237) = x_869;
  let x_870 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_870;
  let x_494 : vec3<f32> = vec3<f32>(x_191.x, x_191.y, x_191.y);
  let x_871 : i32 = *(x_253);
  *(x_253) = 0;
  *(x_253) = x_871;
  if ((x_287 > 0.75)) {
    let x_872 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_872;
    let x_873 : f32 = *(x_208);
    *(x_208) = 0.0;
    *(x_208) = x_873;
    let x_495 : vec3<f32> = vec3<f32>(x_192.y, x_192.x, x_192.y);
    let x_874 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_874;
    let x_293 : i32 = obj.numbers[7];
    let x_875 : f32 = *(x_222);
    *(x_222) = 0.0;
    *(x_222) = x_875;
    let x_496 : vec3<f32> = vec3<f32>(x_475.x, x_467.y, x_467.x);
    let x_876 : f32 = *(x_259);
    *(x_259) = 0.0;
    *(x_259) = x_876;
    let x_497 : vec2<f32> = vec2<f32>(x_477.x, x_461.y);
    let x_877 : i32 = *(x_200);
    *(x_200) = 0;
    *(x_200) = x_877;
    let x_878 : f32 = *(x_259);
    *(x_259) = 0.0;
    *(x_259) = x_878;
    let x_498 : vec3<f32> = vec3<f32>(x_478.x, x_478.y, x_478.x);
    let x_879 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_879;
    let x_296 : f32 = color.z;
    let x_880 : f32 = *(x_273);
    *(x_273) = 0.0;
    *(x_273) = x_880;
    let x_499 : vec2<f32> = vec2<f32>(x_184.x, x_184.y);
    let x_881 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_881;
    let x_882 : f32 = *(x_286);
    *(x_286) = 0.0;
    *(x_286) = x_882;
    let x_298 : ptr<function, f32> = &(color.z);
    let x_883 : f32 = *(x_273);
    *(x_273) = 0.0;
    *(x_273) = x_883;
    let x_500 : vec3<f32> = vec3<f32>(x_499.y, x_499.y, x_494.z);
    let x_884 : f32 = *(x_298);
    *(x_298) = 0.0;
    *(x_298) = x_884;
    *(x_298) = (f32(x_293) + x_296);
    let x_885 : f32 = *(x_256);
    *(x_256) = 0.0;
    *(x_256) = x_885;
    let x_501 : vec2<f32> = vec2<f32>(x_453.x, x_453.z);
    let x_886 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_886;
  }
  let x_887 : i32 = i_2;
  i_2 = 0;
  i_2 = x_887;
  let x_502 : vec2<f32> = vec2<f32>(x_451.y, x_192.y);
  let x_888 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_888;
  let x_300 : ptr<private, i32> = &(obj.numbers[8]);
  let x_301 : i32 = *(x_300);
  let x_889 : i32 = i_2;
  i_2 = 0;
  i_2 = x_889;
  let x_503 : vec2<f32> = vec2<f32>(x_185.x, x_451.z);
  let x_890 : i32 = *(x_300);
  *(x_300) = 0;
  *(x_300) = x_890;
  let x_891 : f32 = *(x_256);
  *(x_256) = 0.0;
  *(x_256) = x_891;
  let x_504 : vec2<f32> = vec2<f32>(x_453.y, vec2<f32>(0.0, 0.0).x);
  let x_892 : f32 = *(x_205);
  *(x_205) = 0.0;
  *(x_205) = x_892;
  let x_303 : ptr<function, f32> = &(color.z);
  let x_505 : vec3<f32> = vec3<f32>(x_504.x, x_504.y, x_504.x);
  let x_893 : f32 = *(x_303);
  *(x_303) = 0.0;
  *(x_303) = x_893;
  let x_304 : f32 = *(x_303);
  let x_894 : f32 = *(x_208);
  *(x_208) = 0.0;
  *(x_208) = x_894;
  let x_506 : vec2<f32> = vec2<f32>(x_493.x, x_492.x);
  let x_895 : i32 = *(x_253);
  *(x_253) = 0;
  *(x_253) = x_895;
  let x_896 : f32 = *(x_286);
  *(x_286) = 0.0;
  *(x_286) = x_896;
  let x_507 : vec2<f32> = vec2<f32>(x_461.x, x_447.x);
  let x_897 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_897;
  let x_306 : ptr<function, f32> = &(color.z);
  *(x_306) = (x_304 + f32(x_301));
  let x_898 : vec2<f32> = uv;
  uv = vec2<f32>(0.0, 0.0);
  uv = x_898;
  let x_899 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_899;
  let x_508 : vec3<f32> = vec3<f32>(x_461.y, x_461.x, x_506.y);
  let x_900 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_900;
  let x_308 : f32 = uv.x;
  let x_901 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_901;
  let x_309 : ptr<function, f32> = &(uv.y);
  let x_509 : vec3<f32> = vec3<f32>(x_503.y, x_503.x, x_448.z);
  let x_902 : f32 = *(x_260);
  *(x_260) = 0.0;
  *(x_260) = x_902;
  let x_310 : f32 = *(x_309);
  let x_903 : f32 = *(x_260);
  *(x_260) = 0.0;
  *(x_260) = x_903;
  let x_904 : f32 = *(x_306);
  *(x_306) = 0.0;
  *(x_306) = x_904;
  let x_510 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).y, x_485.y, x_485.z);
  let x_905 : f32 = *(x_306);
  *(x_306) = 0.0;
  *(x_306) = x_905;
  let x_906 : i32 = i_2;
  i_2 = 0;
  i_2 = x_906;
  let x_511 : vec2<f32> = vec2<f32>(x_485.z, x_485.y);
  let x_907 : vec3<f32> = color;
  color = vec3<f32>(0.0, 0.0, 0.0);
  color = x_907;
  let x_908 : f32 = *(x_260);
  *(x_260) = 0.0;
  *(x_260) = x_908;
  let x_512 : vec3<f32> = vec3<f32>(x_455.y, x_455.y, x_455.y);
  let x_909 : i32 = *(x_253);
  *(x_253) = 0;
  *(x_253) = x_909;
  if ((abs((x_308 - x_310)) < 0.25)) {
    let x_910 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_910;
    let x_911 : QuicksortObject = obj;
    obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    obj = x_911;
    let x_513 : vec3<f32> = vec3<f32>(x_505.z, x_505.x, x_448.x);
    let x_912 : i32 = *(x_300);
    *(x_300) = 0;
    *(x_300) = x_912;
    let x_317 : i32 = obj.numbers[9u];
    let x_514 : vec3<f32> = vec3<f32>(x_474.y, x_474.y, x_474.y);
    let x_913 : f32 = *(x_260);
    *(x_260) = 0.0;
    *(x_260) = x_913;
    let x_320 : f32 = color.x;
    let x_914 : f32 = *(x_286);
    *(x_286) = 0.0;
    *(x_286) = x_914;
    let x_515 : vec2<f32> = vec2<f32>(x_502.x, x_502.y);
    let x_915 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_915;
    let x_916 : vec3<f32> = color;
    color = vec3<f32>(0.0, 0.0, 0.0);
    color = x_916;
    let x_516 : vec2<f32> = vec2<f32>(x_452.x, x_452.x);
    let x_917 : vec2<f32> = uv;
    uv = vec2<f32>(0.0, 0.0);
    uv = x_917;
    let x_322 : ptr<function, f32> = &(color.x);
    let x_918 : f32 = *(x_209);
    *(x_209) = 0.0;
    *(x_209) = x_918;
    let x_517 : vec3<f32> = vec3<f32>(vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).y);
    *(x_322) = (f32(x_317) + x_320);
    let x_919 : f32 = *(x_322);
    *(x_322) = 0.0;
    *(x_322) = x_919;
    let x_518 : vec3<f32> = vec3<f32>(x_480.y, x_508.x, x_480.x);
    let x_920 : f32 = *(x_205);
    *(x_205) = 0.0;
    *(x_205) = x_920;
  }
  let x_921 : f32 = *(x_309);
  *(x_309) = 0.0;
  *(x_309) = x_921;
  let x_325 : vec3<f32> = color;
  let x_922 : f32 = *(x_237);
  *(x_237) = 0.0;
  *(x_237) = x_922;
  let x_519 : vec3<f32> = vec3<f32>(x_447.x, x_446.x, x_446.y);
  let x_326 : vec3<f32> = normalize(x_325);
  let x_923 : f32 = *(x_209);
  *(x_209) = 0.0;
  *(x_209) = x_923;
  let x_924 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_924;
  let x_925 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_925;
  let x_926 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_926;
  let x_520 : vec2<f32> = vec2<f32>(x_506.y, x_519.y);
  let x_927 : f32 = *(x_259);
  *(x_259) = 0.0;
  *(x_259) = x_927;
  let x_330 : vec4<f32> = vec4<f32>(x_326.x, x_326.y, x_326.z, 1.0);
  let x_928 : f32 = *(x_309);
  *(x_309) = 0.0;
  *(x_309) = x_928;
  let x_521 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).y, vec3<f32>(1.0, 2.0, 3.0).y, x_520.y);
  let x_929 : f32 = *(x_222);
  *(x_222) = 0.0;
  *(x_222) = x_929;
  x_GLF_color = x_330;
  let x_930 : QuicksortObject = obj;
  obj = QuicksortObject(array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
  obj = x_930;
  let x_522 : vec3<f32> = vec3<f32>(x_330.w, x_330.y, x_493.x);
  let x_931 : f32 = *(x_208);
  *(x_208) = 0.0;
  *(x_208) = x_931;
  return;
}
