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

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

var<private> obj : QuicksortObject;

var<private> x_GLF_FragCoord : vec4<f32>;

var<private> x_GLF_pos : vec4<f32>;

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

var<private> frag_color : vec4<f32>;

var<private> gl_Position : vec4<f32>;

fn main_1() {
  var x_90 : i32;
  var x_91 : i32;
  var x_92 : i32;
  var x_93 : i32;
  var x_94 : i32;
  var x_95 : i32;
  var x_96 : i32;
  var x_97 : i32;
  var x_98 : i32;
  var x_99 : i32;
  var x_100 : i32;
  var x_101 : i32;
  var x_102 : i32;
  var x_103 : array<i32, 10>;
  var x_104 : i32;
  var x_105 : i32;
  var x_106 : i32;
  var i_2 : i32;
  var uv : vec2<f32>;
  var color : vec3<f32>;
  let x_107 : vec4<f32> = x_GLF_pos;
  x_GLF_FragCoord = ((x_107 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
  i_2 = 0;
  loop {
    let x_114 : i32 = i_2;
    if ((x_114 < 10)) {
    } else {
      break;
    }
    let x_117 : i32 = i_2;
    let x_118 : i32 = i_2;
    obj.numbers[x_117] = (10 - x_118);
    let x_121 : i32 = i_2;
    let x_122 : i32 = i_2;
    let x_124 : i32 = obj.numbers[x_122];
    let x_125 : i32 = i_2;
    let x_127 : i32 = obj.numbers[x_125];
    obj.numbers[x_121] = (x_124 * x_127);

    continuing {
      let x_130 : i32 = i_2;
      i_2 = (x_130 + 1);
    }
  }
  x_100 = 0;
  x_101 = 9;
  x_102 = -1;
  let x_132 : i32 = x_102;
  let x_133 : i32 = (x_132 + 1);
  x_102 = x_133;
  let x_134 : i32 = x_100;
  x_103[x_133] = x_134;
  let x_136 : i32 = x_102;
  let x_137 : i32 = (x_136 + 1);
  x_102 = x_137;
  let x_138 : i32 = x_101;
  x_103[x_137] = x_138;
  loop {
    let x_144 : i32 = x_102;
    if ((x_144 >= 0)) {
    } else {
      break;
    }
    let x_147 : i32 = x_102;
    x_102 = (x_147 - 1);
    let x_150 : i32 = x_103[x_147];
    x_101 = x_150;
    let x_151 : i32 = x_102;
    x_102 = (x_151 - 1);
    let x_154 : i32 = x_103[x_151];
    x_100 = x_154;
    let x_155 : i32 = x_100;
    x_105 = x_155;
    let x_156 : i32 = x_101;
    x_106 = x_156;
    let x_157 : i32 = x_106;
    let x_159 : i32 = obj.numbers[x_157];
    x_92 = x_159;
    let x_160 : i32 = x_105;
    x_93 = (x_160 - 1);
    let x_162 : i32 = x_105;
    x_94 = x_162;
    loop {
      let x_167 : i32 = x_94;
      let x_168 : i32 = x_106;
      if ((x_167 <= (x_168 - 1))) {
      } else {
        break;
      }
      let x_172 : i32 = x_94;
      let x_174 : i32 = obj.numbers[x_172];
      let x_175 : i32 = x_92;
      if ((x_174 <= x_175)) {
        let x_179 : i32 = x_93;
        x_93 = (x_179 + 1);
        let x_181 : i32 = x_93;
        x_95 = x_181;
        let x_182 : i32 = x_94;
        x_96 = x_182;
        let x_183 : i32 = x_95;
        let x_185 : i32 = obj.numbers[x_183];
        x_91 = x_185;
        let x_186 : i32 = x_95;
        let x_187 : i32 = x_96;
        let x_189 : i32 = obj.numbers[x_187];
        obj.numbers[x_186] = x_189;
        let x_191 : i32 = x_96;
        let x_192 : i32 = x_91;
        obj.numbers[x_191] = x_192;
      }

      continuing {
        let x_194 : i32 = x_94;
        x_94 = (x_194 + 1);
      }
    }
    let x_196 : i32 = x_93;
    x_97 = (x_196 + 1);
    let x_198 : i32 = x_106;
    x_98 = x_198;
    let x_199 : i32 = x_97;
    let x_201 : i32 = obj.numbers[x_199];
    x_90 = x_201;
    let x_202 : i32 = x_97;
    let x_203 : i32 = x_98;
    let x_205 : i32 = obj.numbers[x_203];
    obj.numbers[x_202] = x_205;
    let x_207 : i32 = x_98;
    let x_208 : i32 = x_90;
    obj.numbers[x_207] = x_208;
    let x_210 : i32 = x_93;
    x_99 = (x_210 + 1);
    let x_212 : i32 = x_99;
    x_104 = x_212;
    let x_213 : i32 = x_104;
    let x_215 : i32 = x_100;
    if (((x_213 - 1) > x_215)) {
      let x_219 : i32 = x_102;
      let x_220 : i32 = (x_219 + 1);
      x_102 = x_220;
      let x_221 : i32 = x_100;
      x_103[x_220] = x_221;
      let x_223 : i32 = x_102;
      let x_224 : i32 = (x_223 + 1);
      x_102 = x_224;
      let x_225 : i32 = x_104;
      x_103[x_224] = (x_225 - 1);
    }
    let x_228 : i32 = x_104;
    let x_230 : i32 = x_101;
    if (((x_228 + 1) < x_230)) {
      let x_234 : i32 = x_102;
      let x_235 : i32 = (x_234 + 1);
      x_102 = x_235;
      let x_236 : i32 = x_104;
      x_103[x_235] = (x_236 + 1);
      let x_239 : i32 = x_102;
      let x_240 : i32 = (x_239 + 1);
      x_102 = x_240;
      let x_241 : i32 = x_101;
      x_103[x_240] = x_241;
    }
  }
  let x_243 : vec4<f32> = x_GLF_FragCoord;
  let x_246 : vec2<f32> = x_34.resolution;
  uv = (vec2<f32>(x_243.x, x_243.y) / x_246);
  color = vec3<f32>(1.0, 2.0, 3.0);
  let x_249 : i32 = obj.numbers[0];
  let x_252 : f32 = color.x;
  color.x = (x_252 + f32(x_249));
  let x_256 : f32 = uv.x;
  if ((x_256 > 0.25)) {
    let x_261 : i32 = obj.numbers[1];
    let x_264 : f32 = color.x;
    color.x = (x_264 + f32(x_261));
  }
  let x_268 : f32 = uv.x;
  if ((x_268 > 0.5)) {
    let x_273 : i32 = obj.numbers[2];
    let x_276 : f32 = color.y;
    color.y = (x_276 + f32(x_273));
  }
  let x_280 : f32 = uv.x;
  if ((x_280 > 0.75)) {
    let x_285 : i32 = obj.numbers[3];
    let x_288 : f32 = color.z;
    color.z = (x_288 + f32(x_285));
  }
  let x_292 : i32 = obj.numbers[4];
  let x_295 : f32 = color.y;
  color.y = (x_295 + f32(x_292));
  let x_299 : f32 = uv.y;
  if ((x_299 > 0.25)) {
    let x_304 : i32 = obj.numbers[5];
    let x_307 : f32 = color.x;
    color.x = (x_307 + f32(x_304));
  }
  let x_311 : f32 = uv.y;
  if ((x_311 > 0.5)) {
    let x_316 : i32 = obj.numbers[6];
    let x_319 : f32 = color.y;
    color.y = (x_319 + f32(x_316));
  }
  let x_323 : f32 = uv.y;
  if ((x_323 > 0.75)) {
    let x_328 : i32 = obj.numbers[7];
    let x_331 : f32 = color.z;
    color.z = (x_331 + f32(x_328));
  }
  let x_335 : i32 = obj.numbers[8];
  let x_338 : f32 = color.z;
  color.z = (x_338 + f32(x_335));
  let x_342 : f32 = uv.x;
  let x_344 : f32 = uv.y;
  if ((abs((x_342 - x_344)) < 0.25)) {
    let x_351 : i32 = obj.numbers[9];
    let x_354 : f32 = color.x;
    color.x = (x_354 + f32(x_351));
  }
  let x_357 : vec3<f32> = color;
  let x_358 : vec3<f32> = normalize(x_357);
  frag_color = vec4<f32>(x_358.x, x_358.y, x_358.z, 1.0);
  let x_363 : vec4<f32> = x_GLF_pos;
  gl_Position = x_363;
  return;
}

struct main_out {
  [[location(0)]]
  frag_color_1 : vec4<f32>;
  [[builtin(position)]]
  gl_Position : vec4<f32>;
};

[[stage(vertex)]]
fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
  x_GLF_pos = x_GLF_pos_param;
  main_1();
  return main_out(frag_color, gl_Position);
}

fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
  var temp : i32;
  let x_366 : i32 = *(i);
  let x_368 : i32 = obj.numbers[x_366];
  temp = x_368;
  let x_369 : i32 = *(i);
  let x_370 : i32 = *(j);
  let x_372 : i32 = obj.numbers[x_370];
  obj.numbers[x_369] = x_372;
  let x_374 : i32 = *(j);
  let x_375 : i32 = temp;
  obj.numbers[x_374] = x_375;
  return;
}

fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
  var pivot : i32;
  var i_1 : i32;
  var j_1 : i32;
  var param : i32;
  var param_1 : i32;
  var param_2 : i32;
  var param_3 : i32;
  let x_378 : i32 = *(h);
  let x_380 : i32 = obj.numbers[x_378];
  pivot = x_380;
  let x_381 : i32 = *(l);
  i_1 = (x_381 - 1);
  let x_383 : i32 = *(l);
  j_1 = x_383;
  loop {
    let x_388 : i32 = j_1;
    let x_389 : i32 = *(h);
    if ((x_388 <= (x_389 - 1))) {
    } else {
      break;
    }
    let x_393 : i32 = j_1;
    let x_395 : i32 = obj.numbers[x_393];
    let x_396 : i32 = pivot;
    if ((x_395 <= x_396)) {
      let x_400 : i32 = i_1;
      i_1 = (x_400 + 1);
      let x_402 : i32 = i_1;
      param = x_402;
      let x_403 : i32 = j_1;
      param_1 = x_403;
      swap_i1_i1_(&(param), &(param_1));
    }

    continuing {
      let x_405 : i32 = j_1;
      j_1 = (x_405 + 1);
    }
  }
  let x_407 : i32 = i_1;
  param_2 = (x_407 + 1);
  let x_409 : i32 = *(h);
  param_3 = x_409;
  swap_i1_i1_(&(param_2), &(param_3));
  let x_411 : i32 = i_1;
  return (x_411 + 1);
}

fn quicksort_() {
  var l_1 : i32;
  var h_1 : i32;
  var top : i32;
  var stack : array<i32, 10>;
  var p : i32;
  var param_4 : i32;
  var param_5 : i32;
  l_1 = 0;
  h_1 = 9;
  top = -1;
  let x_414 : i32 = top;
  let x_415 : i32 = (x_414 + 1);
  top = x_415;
  let x_416 : i32 = l_1;
  stack[x_415] = x_416;
  let x_418 : i32 = top;
  let x_419 : i32 = (x_418 + 1);
  top = x_419;
  let x_420 : i32 = h_1;
  stack[x_419] = x_420;
  loop {
    let x_426 : i32 = top;
    if ((x_426 >= 0)) {
    } else {
      break;
    }
    let x_429 : i32 = top;
    top = (x_429 - 1);
    let x_432 : i32 = stack[x_429];
    h_1 = x_432;
    let x_433 : i32 = top;
    top = (x_433 - 1);
    let x_436 : i32 = stack[x_433];
    l_1 = x_436;
    let x_437 : i32 = l_1;
    param_4 = x_437;
    let x_438 : i32 = h_1;
    param_5 = x_438;
    let x_439 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
    p = x_439;
    let x_440 : i32 = p;
    let x_442 : i32 = l_1;
    if (((x_440 - 1) > x_442)) {
      let x_446 : i32 = top;
      let x_447 : i32 = (x_446 + 1);
      top = x_447;
      let x_448 : i32 = l_1;
      stack[x_447] = x_448;
      let x_450 : i32 = top;
      let x_451 : i32 = (x_450 + 1);
      top = x_451;
      let x_452 : i32 = p;
      stack[x_451] = (x_452 - 1);
    }
    let x_455 : i32 = p;
    let x_457 : i32 = h_1;
    if (((x_455 + 1) < x_457)) {
      let x_461 : i32 = top;
      let x_462 : i32 = (x_461 + 1);
      top = x_462;
      let x_463 : i32 = p;
      stack[x_462] = (x_463 + 1);
      let x_466 : i32 = top;
      let x_467 : i32 = (x_466 + 1);
      top = x_467;
      let x_468 : i32 = h_1;
      stack[x_467] = x_468;
    }
  }
  return;
}
