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

var<private> data : array<i32, 10>;

var<private> temp : array<i32, 10>;

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
  var k : i32;
  var i : i32;
  var j : i32;
  var i_1 : i32;
  let x_303 : i32 = *(from);
  k = x_303;
  let x_304 : i32 = *(from);
  i = x_304;
  let x_305 : i32 = *(mid);
  j = (x_305 + 1);
  loop {
    let x_311 : i32 = i;
    let x_312 : i32 = *(mid);
    let x_314 : i32 = j;
    let x_315 : i32 = *(to);
    if (((x_311 <= x_312) & (x_314 <= x_315))) {
    } else {
      break;
    }
    let x_319 : i32 = i;
    let x_321 : i32 = data[x_319];
    let x_322 : i32 = j;
    let x_324 : i32 = data[x_322];
    if ((x_321 < x_324)) {
      let x_329 : i32 = k;
      k = (x_329 + 1);
      let x_331 : i32 = i;
      i = (x_331 + 1);
      let x_334 : i32 = data[x_331];
      temp[x_329] = x_334;
    } else {
      let x_336 : i32 = k;
      k = (x_336 + 1);
      let x_338 : i32 = j;
      j = (x_338 + 1);
      let x_341 : i32 = data[x_338];
      temp[x_336] = x_341;
    }
  }
  loop {
    let x_347 : i32 = i;
    let x_349 : i32 = i;
    let x_350 : i32 = *(mid);
    if (((x_347 < 10) & (x_349 <= x_350))) {
    } else {
      break;
    }
    let x_354 : i32 = k;
    k = (x_354 + 1);
    let x_356 : i32 = i;
    i = (x_356 + 1);
    let x_359 : i32 = data[x_356];
    temp[x_354] = x_359;
  }
  let x_361 : i32 = *(from);
  i_1 = x_361;
  loop {
    let x_366 : i32 = i_1;
    let x_367 : i32 = *(to);
    if ((x_366 <= x_367)) {
    } else {
      break;
    }
    let x_370 : i32 = i_1;
    let x_371 : i32 = i_1;
    let x_373 : i32 = temp[x_371];
    data[x_370] = x_373;

    continuing {
      let x_375 : i32 = i_1;
      i_1 = (x_375 + 1);
    }
  }
  return;
}

fn main_1() {
  var x_85 : i32;
  var x_86 : i32;
  var x_87 : i32;
  var x_88 : i32;
  var x_89 : i32;
  var x_90 : i32;
  var x_91 : i32;
  var x_92 : i32;
  var x_93 : i32;
  var x_94 : i32;
  var i_3 : i32;
  var j_1 : i32;
  var grey : f32;
  let x_96 : f32 = x_28.injectionSwitch.x;
  i_3 = i32(x_96);
  loop {
    let x_102 : i32 = i_3;
    switch(x_102) {
      case 9: {
        let x_132 : i32 = i_3;
        data[x_132] = -5;
      }
      case 8: {
        let x_130 : i32 = i_3;
        data[x_130] = -4;
      }
      case 7: {
        let x_128 : i32 = i_3;
        data[x_128] = -3;
      }
      case 6: {
        let x_126 : i32 = i_3;
        data[x_126] = -2;
      }
      case 5: {
        let x_124 : i32 = i_3;
        data[x_124] = -1;
      }
      case 4: {
        let x_122 : i32 = i_3;
        data[x_122] = 0;
      }
      case 3: {
        let x_120 : i32 = i_3;
        data[x_120] = 1;
      }
      case 2: {
        let x_118 : i32 = i_3;
        data[x_118] = 2;
      }
      case 1: {
        let x_116 : i32 = i_3;
        data[x_116] = 3;
      }
      case 0: {
        let x_114 : i32 = i_3;
        data[x_114] = 4;
      }
      default: {
      }
    }
    let x_134 : i32 = i_3;
    i_3 = (x_134 + 1);

    continuing {
      let x_136 : i32 = i_3;
      if ((x_136 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  loop {
    let x_142 : i32 = j_1;
    if ((x_142 < 10)) {
    } else {
      break;
    }
    let x_145 : i32 = j_1;
    let x_146 : i32 = j_1;
    let x_148 : i32 = data[x_146];
    temp[x_145] = x_148;

    continuing {
      let x_150 : i32 = j_1;
      j_1 = (x_150 + 1);
    }
  }
  x_94 = 0;
  x_93 = 9;
  x_92 = 1;
  loop {
    let x_156 : i32 = x_92;
    let x_157 : i32 = x_93;
    if ((x_156 <= x_157)) {
    } else {
      break;
    }
    let x_160 : i32 = x_94;
    x_91 = x_160;
    loop {
      let x_165 : i32 = x_91;
      let x_166 : i32 = x_93;
      if ((x_165 < x_166)) {
      } else {
        break;
      }
      let x_169 : i32 = x_91;
      x_90 = x_169;
      let x_170 : i32 = x_91;
      let x_171 : i32 = x_92;
      let x_173 : array<i32, 10> = data;
      data = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
      data = x_173;
      x_89 = ((x_170 + x_171) - 1);
      let x_175 : i32 = x_91;
      let x_176 : i32 = x_92;
      let x_180 : i32 = x_93;
      x_88 = min(((x_175 + (2 * x_176)) - 1), x_180);
      let x_182 : i32 = x_90;
      x_87 = x_182;
      let x_183 : i32 = x_89;
      x_86 = x_183;
      let x_184 : i32 = x_88;
      x_85 = x_184;
      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85));

      continuing {
        let x_186 : i32 = x_92;
        let x_188 : i32 = x_91;
        x_91 = (x_188 + (2 * x_186));
      }
    }

    continuing {
      let x_190 : i32 = x_92;
      x_92 = (2 * x_190);
    }
  }
  let x_194 : f32 = gl_FragCoord.y;
  if ((i32(x_194) < 30)) {
    let x_201 : i32 = data[0];
    grey = (0.5 + (f32(x_201) / 10.0));
  } else {
    let x_206 : f32 = gl_FragCoord.y;
    if ((i32(x_206) < 60)) {
      let x_213 : i32 = data[1];
      grey = (0.5 + (f32(x_213) / 10.0));
    } else {
      let x_218 : f32 = gl_FragCoord.y;
      if ((i32(x_218) < 90)) {
        let x_225 : i32 = data[2];
        grey = (0.5 + (f32(x_225) / 10.0));
      } else {
        let x_230 : f32 = gl_FragCoord.y;
        if ((i32(x_230) < 120)) {
          let x_237 : i32 = data[3];
          grey = (0.5 + (f32(x_237) / 10.0));
        } else {
          let x_242 : f32 = gl_FragCoord.y;
          if ((i32(x_242) < 150)) {
            discard;
          } else {
            let x_249 : f32 = gl_FragCoord.y;
            if ((i32(x_249) < 180)) {
              let x_256 : i32 = data[5];
              grey = (0.5 + (f32(x_256) / 10.0));
            } else {
              let x_261 : f32 = gl_FragCoord.y;
              if ((i32(x_261) < 210)) {
                let x_268 : i32 = data[6];
                grey = (0.5 + (f32(x_268) / 10.0));
              } else {
                let x_273 : f32 = gl_FragCoord.y;
                if ((i32(x_273) < 240)) {
                  let x_280 : i32 = data[7];
                  grey = (0.5 + (f32(x_280) / 10.0));
                } else {
                  let x_285 : f32 = gl_FragCoord.y;
                  if ((i32(x_285) < 270)) {
                    let x_292 : i32 = data[8];
                    grey = (0.5 + (f32(x_292) / 10.0));
                  } else {
                    discard;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  let x_296 : f32 = grey;
  let x_297 : vec3<f32> = vec3<f32>(x_296, x_296, x_296);
  x_GLF_color = vec4<f32>(x_297.x, x_297.y, x_297.z, 1.0);
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}

fn mergeSort_() {
  var low : i32;
  var high : i32;
  var m : i32;
  var i_2 : i32;
  var from_1 : i32;
  var mid_1 : i32;
  var to_1 : i32;
  var param : i32;
  var param_1 : i32;
  var param_2 : i32;
  low = 0;
  high = 9;
  m = 1;
  loop {
    let x_382 : i32 = m;
    let x_383 : i32 = high;
    if ((x_382 <= x_383)) {
    } else {
      break;
    }
    let x_386 : i32 = low;
    i_2 = x_386;
    loop {
      let x_391 : i32 = i_2;
      let x_392 : i32 = high;
      if ((x_391 < x_392)) {
      } else {
        break;
      }
      let x_395 : i32 = i_2;
      from_1 = x_395;
      let x_396 : i32 = i_2;
      let x_397 : i32 = m;
      mid_1 = ((x_396 + x_397) - 1);
      let x_400 : i32 = i_2;
      let x_401 : i32 = m;
      let x_405 : i32 = high;
      to_1 = min(((x_400 + (2 * x_401)) - 1), x_405);
      let x_407 : i32 = from_1;
      param = x_407;
      let x_408 : i32 = mid_1;
      param_1 = x_408;
      let x_409 : i32 = to_1;
      param_2 = x_409;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));

      continuing {
        let x_411 : i32 = m;
        let x_413 : i32 = i_2;
        i_2 = (x_413 + (2 * x_411));
      }
    }

    continuing {
      let x_415 : i32 = m;
      m = (2 * x_415);
    }
  }
  return;
}
