[[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_262 : i32 = *(from);
  k = x_262;
  let x_263 : i32 = *(from);
  i = x_263;
  let x_264 : i32 = *(mid);
  j = (x_264 + 1);
  loop {
    let x_270 : i32 = i;
    let x_271 : i32 = *(mid);
    let x_273 : i32 = j;
    let x_274 : i32 = *(to);
    if (((x_270 <= x_271) & (x_273 <= x_274))) {
    } else {
      break;
    }
    let x_278 : i32 = i;
    let x_280 : i32 = data[x_278];
    let x_281 : i32 = j;
    let x_283 : i32 = data[x_281];
    if ((x_280 < x_283)) {
      let x_288 : i32 = k;
      k = (x_288 + 1);
      let x_290 : i32 = i;
      i = (x_290 + 1);
      let x_293 : i32 = data[x_290];
      temp[x_288] = x_293;
    } else {
      let x_295 : i32 = k;
      k = (x_295 + 1);
      let x_297 : i32 = j;
      j = (x_297 + 1);
      let x_300 : i32 = data[x_297];
      temp[x_295] = x_300;
    }
  }
  loop {
    let x_306 : i32 = i;
    let x_308 : i32 = i;
    let x_309 : i32 = *(mid);
    if (((x_306 < 10) & (x_308 <= x_309))) {
    } else {
      break;
    }
    let x_313 : i32 = k;
    k = (x_313 + 1);
    let x_315 : i32 = i;
    i = (x_315 + 1);
    let x_318 : i32 = data[x_315];
    temp[x_313] = x_318;
  }
  let x_320 : i32 = *(from);
  i_1 = x_320;
  loop {
    let x_325 : i32 = i_1;
    let x_326 : i32 = *(to);
    if ((x_325 <= x_326)) {
    } else {
      break;
    }
    let x_329 : i32 = i_1;
    let x_330 : i32 = i_1;
    let x_332 : i32 = temp[x_330];
    data[x_329] = x_332;

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

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_341 : i32 = m;
    let x_342 : i32 = high;
    if ((x_341 <= x_342)) {
    } else {
      break;
    }
    let x_345 : i32 = low;
    i_2 = x_345;
    loop {
      let x_350 : i32 = i_2;
      let x_351 : i32 = high;
      if ((x_350 < x_351)) {
      } else {
        break;
      }
      let x_354 : i32 = i_2;
      from_1 = x_354;
      let x_355 : i32 = i_2;
      let x_356 : i32 = m;
      mid_1 = ((x_355 + x_356) - 1);
      let x_359 : i32 = i_2;
      let x_360 : i32 = m;
      let x_364 : i32 = high;
      to_1 = min(((x_359 + (2 * x_360)) - 1), x_364);
      let x_366 : i32 = from_1;
      param = x_366;
      let x_367 : i32 = mid_1;
      param_1 = x_367;
      let x_368 : i32 = to_1;
      param_2 = x_368;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));

      continuing {
        let x_370 : i32 = m;
        let x_372 : i32 = i_2;
        i_2 = (x_372 + (2 * x_370));
      }
    }

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

fn main_1() {
  var i_3 : i32;
  var j_1 : i32;
  var grey : f32;
  var int_i : i32;
  let x_85 : f32 = x_28.injectionSwitch.x;
  i_3 = i32(x_85);
  loop {
    let x_91 : i32 = i_3;
    switch(x_91) {
      case 9: {
        let x_121 : i32 = i_3;
        data[x_121] = -5;
      }
      case 8: {
        let x_119 : i32 = i_3;
        data[x_119] = -4;
      }
      case 7: {
        let x_117 : i32 = i_3;
        data[x_117] = -3;
      }
      case 6: {
        let x_115 : i32 = i_3;
        data[x_115] = -2;
      }
      case 5: {
        let x_113 : i32 = i_3;
        data[x_113] = -1;
      }
      case 4: {
        let x_111 : i32 = i_3;
        data[x_111] = 0;
      }
      case 3: {
        let x_109 : i32 = i_3;
        data[x_109] = 1;
      }
      case 2: {
        let x_107 : i32 = i_3;
        data[x_107] = 2;
      }
      case 1: {
        let x_105 : i32 = i_3;
        data[x_105] = 3;
      }
      case 0: {
        let x_103 : i32 = i_3;
        data[x_103] = 4;
      }
      default: {
      }
    }
    let x_123 : i32 = i_3;
    i_3 = (x_123 + 1);

    continuing {
      let x_125 : i32 = i_3;
      if ((x_125 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  loop {
    let x_131 : i32 = j_1;
    if ((x_131 < 10)) {
    } else {
      break;
    }
    let x_134 : i32 = j_1;
    let x_135 : i32 = j_1;
    let x_137 : i32 = data[x_135];
    temp[x_134] = x_137;

    continuing {
      let x_139 : i32 = j_1;
      j_1 = (x_139 + 1);
    }
  }
  mergeSort_();
  let x_143 : f32 = gl_FragCoord.y;
  if ((i32(x_143) < 30)) {
    let x_150 : i32 = data[0];
    grey = (0.5 + (f32(x_150) / 10.0));
  } else {
    let x_155 : f32 = gl_FragCoord.y;
    if ((i32(x_155) < 60)) {
      let x_162 : i32 = data[1];
      grey = (0.5 + (f32(x_162) / 10.0));
    } else {
      let x_167 : f32 = gl_FragCoord.y;
      if ((i32(x_167) < 90)) {
        let x_174 : i32 = data[2];
        grey = (0.5 + (f32(x_174) / 10.0));
      } else {
        let x_179 : f32 = gl_FragCoord.y;
        if ((i32(x_179) < 120)) {
          let x_186 : i32 = data[3];
          grey = (0.5 + (f32(x_186) / 10.0));
        } else {
          let x_191 : f32 = gl_FragCoord.y;
          if ((i32(x_191) < 150)) {
            int_i = 1;
            loop {
              let x_201 : i32 = int_i;
              let x_203 : f32 = x_28.injectionSwitch.x;
              if ((x_201 > i32(x_203))) {
              } else {
                break;
              }
              discard;
            }
          } else {
            let x_208 : f32 = gl_FragCoord.y;
            if ((i32(x_208) < 180)) {
              let x_215 : i32 = data[5];
              grey = (0.5 + (f32(x_215) / 10.0));
            } else {
              let x_220 : f32 = gl_FragCoord.y;
              if ((i32(x_220) < 210)) {
                let x_227 : i32 = data[6];
                grey = (0.5 + (f32(x_227) / 10.0));
              } else {
                let x_232 : f32 = gl_FragCoord.y;
                if ((i32(x_232) < 240)) {
                  let x_239 : i32 = data[7];
                  grey = (0.5 + (f32(x_239) / 10.0));
                } else {
                  let x_244 : f32 = gl_FragCoord.y;
                  if ((i32(x_244) < 270)) {
                    let x_251 : i32 = data[8];
                    grey = (0.5 + (f32(x_251) / 10.0));
                  } else {
                    discard;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  let x_255 : f32 = grey;
  let x_256 : vec3<f32> = vec3<f32>(x_255, x_255, x_255);
  x_GLF_color = vec4<f32>(x_256.x, x_256.y, x_256.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);
}
