[[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;
}
