struct buf0 {
  injectionSwitch : vec2<f32>;
};

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var temp : array<i32, 10>;
  var data : array<i32, 10>;
  var x_189 : f32;
  var x_261 : f32;
  var x_63_phi : i32;
  var x_102_phi : i32;
  var x_111_phi : i32;
  var x_262_phi : f32;
  let x_60 : f32 = x_8.injectionSwitch.x;
  let x_61 : i32 = i32(x_60);
  x_63_phi = x_61;
  loop {
    var x_99 : i32;
    var x_97 : i32;
    var x_95 : i32;
    var x_93 : i32;
    var x_91 : i32;
    var x_89 : i32;
    var x_87 : i32;
    var x_85 : i32;
    var x_83 : i32;
    var x_81 : i32;
    var x_64_phi : i32;
    let x_63 : i32 = x_63_phi;
    let x_68 : i32 = (x_63 + 1);
    x_64_phi = x_68;
    switch(x_63) {
      case 9: {
        data[x_63] = -5;
        x_99 = (x_63 + 1);
        x_64_phi = x_99;
      }
      case 8: {
        data[x_63] = -4;
        x_97 = (x_63 + 1);
        x_64_phi = x_97;
      }
      case 7: {
        data[x_63] = -3;
        x_95 = (x_63 + 1);
        x_64_phi = x_95;
      }
      case 6: {
        data[x_63] = -2;
        x_93 = (x_63 + 1);
        x_64_phi = x_93;
      }
      case 5: {
        data[x_63] = -1;
        x_91 = (x_63 + 1);
        x_64_phi = x_91;
      }
      case 4: {
        data[x_63] = 0;
        x_89 = (x_63 + 1);
        x_64_phi = x_89;
      }
      case 3: {
        data[x_63] = 1;
        x_87 = (x_63 + 1);
        x_64_phi = x_87;
      }
      case 2: {
        data[x_63] = 2;
        x_85 = (x_63 + 1);
        x_64_phi = x_85;
      }
      case 1: {
        data[x_63] = 3;
        x_83 = (x_63 + 1);
        x_64_phi = x_83;
      }
      case 0: {
        data[x_63] = 4;
        x_81 = (x_63 + 1);
        x_64_phi = x_81;
      }
      default: {
      }
    }
    let x_64 : i32 = x_64_phi;

    continuing {
      x_63_phi = x_64;
      if ((x_64 < 10)) {
      } else {
        break;
      }
    }
  }
  x_102_phi = 0;
  loop {
    var x_103 : i32;
    let x_102 : i32 = x_102_phi;
    if ((x_102 < 10)) {
    } else {
      break;
    }

    continuing {
      let x_108 : i32 = data[x_102];
      temp[x_102] = x_108;
      x_103 = (x_102 + 1);
      x_102_phi = x_103;
    }
  }
  x_111_phi = 1;
  loop {
    var x_112 : i32;
    var x_118_phi : i32;
    let x_111 : i32 = x_111_phi;
    if ((x_111 <= 9)) {
    } else {
      break;
    }
    x_118_phi = 0;
    loop {
      var x_130 : i32;
      var x_135 : i32;
      var x_130_phi : i32;
      var x_133_phi : i32;
      var x_135_phi : i32;
      var x_157_phi : i32;
      var x_160_phi : i32;
      var x_170_phi : i32;
      let x_118 : i32 = x_118_phi;
      if ((x_118 < 9)) {
      } else {
        break;
      }
      let x_124 : i32 = (x_118 + x_111);
      let x_125 : i32 = (x_124 - 1);
      let x_119 : i32 = (x_118 + (2 * x_111));
      let x_128 : i32 = min((x_119 - 1), 9);
      x_130_phi = x_118;
      x_133_phi = x_124;
      x_135_phi = x_118;
      loop {
        var x_150 : i32;
        var x_153 : i32;
        var x_134_phi : i32;
        var x_136_phi : i32;
        x_130 = x_130_phi;
        let x_133 : i32 = x_133_phi;
        x_135 = x_135_phi;
        if (((x_135 <= x_125) && (x_133 <= x_128))) {
        } else {
          break;
        }
        let x_142 : ptr<function, i32> = &(data[x_135]);
        let x_143 : i32 = *(x_142);
        let x_144 : ptr<function, i32> = &(data[x_133]);
        let x_145 : i32 = *(x_144);
        let x_131 : i32 = bitcast<i32>((x_130 + bitcast<i32>(1)));
        if ((x_143 < x_145)) {
          x_150 = bitcast<i32>((x_135 + bitcast<i32>(1)));
          let x_151 : i32 = *(x_142);
          temp[x_130] = x_151;
          x_134_phi = x_133;
          x_136_phi = x_150;
        } else {
          x_153 = (x_133 + 1);
          let x_154 : i32 = *(x_144);
          temp[x_130] = x_154;
          x_134_phi = x_153;
          x_136_phi = x_135;
        }
        let x_134 : i32 = x_134_phi;
        let x_136 : i32 = x_136_phi;

        continuing {
          x_130_phi = x_131;
          x_133_phi = x_134;
          x_135_phi = x_136;
        }
      }
      x_157_phi = x_130;
      x_160_phi = x_135;
      loop {
        var x_158 : i32;
        var x_161 : i32;
        let x_157 : i32 = x_157_phi;
        let x_160 : i32 = x_160_phi;
        if (((x_160 < 10) && (x_160 <= x_125))) {
        } else {
          break;
        }

        continuing {
          x_158 = (x_157 + 1);
          x_161 = (x_160 + 1);
          let x_167 : i32 = data[x_160];
          temp[x_157] = x_167;
          x_157_phi = x_158;
          x_160_phi = x_161;
        }
      }
      x_170_phi = x_118;
      loop {
        var x_171 : i32;
        let x_170 : i32 = x_170_phi;
        if ((x_170 <= x_128)) {
        } else {
          break;
        }

        continuing {
          let x_176 : i32 = temp[x_170];
          data[x_170] = x_176;
          x_171 = (x_170 + 1);
          x_170_phi = x_171;
        }
      }

      continuing {
        x_118_phi = x_119;
      }
    }

    continuing {
      x_112 = (2 * x_111);
      x_111_phi = x_112;
    }
  }
  var x_180 : i32;
  var x_198 : f32;
  var x_260 : f32;
  var x_261_phi : f32;
  let x_179 : f32 = gl_FragCoord.y;
  x_180 = i32(x_179);
  if ((x_180 < 30)) {
    let x_186 : i32 = data[0];
    x_189 = (0.5 + (f32(x_186) * 0.100000001));
    x_262_phi = x_189;
  } else {
    var x_207 : f32;
    var x_259 : f32;
    var x_260_phi : f32;
    if ((x_180 < 60)) {
      let x_195 : i32 = data[1];
      x_198 = (0.5 + (f32(x_195) * 0.100000001));
      x_261_phi = x_198;
    } else {
      var x_216 : f32;
      var x_258 : f32;
      var x_259_phi : f32;
      if ((x_180 < 90)) {
        let x_204 : i32 = data[2];
        x_207 = (0.5 + (f32(x_204) * 0.100000001));
        x_260_phi = x_207;
      } else {
        if ((x_180 < 120)) {
          let x_213 : i32 = data[3];
          x_216 = (0.5 + (f32(x_213) * 0.100000001));
          x_259_phi = x_216;
        } else {
          var x_229 : f32;
          var x_257 : f32;
          var x_258_phi : f32;
          if ((x_180 < 150)) {
            discard;
          } else {
            var x_238 : f32;
            var x_256 : f32;
            var x_257_phi : f32;
            if ((x_180 < 180)) {
              let x_226 : i32 = data[5];
              x_229 = (0.5 + (f32(x_226) * 0.100000001));
              x_258_phi = x_229;
            } else {
              var x_247 : f32;
              var x_255 : f32;
              var x_256_phi : f32;
              if ((x_180 < 210)) {
                let x_235 : i32 = data[6];
                x_238 = (0.5 + (f32(x_235) * 0.100000001));
                x_257_phi = x_238;
              } else {
                if ((x_180 < 240)) {
                  let x_244 : i32 = data[7];
                  x_247 = (0.5 + (f32(x_244) * 0.100000001));
                  x_256_phi = x_247;
                } else {
                  if ((x_180 < 270)) {
                  } else {
                    discard;
                  }
                  let x_252 : i32 = data[8];
                  x_255 = (0.5 + (f32(x_252) * 0.100000001));
                  x_256_phi = x_255;
                }
                x_256 = x_256_phi;
                x_257_phi = x_256;
              }
              x_257 = x_257_phi;
              x_258_phi = x_257;
            }
            x_258 = x_258_phi;
          }
          x_259_phi = x_258;
        }
        x_259 = x_259_phi;
        x_260_phi = x_259;
      }
      x_260 = x_260_phi;
      x_261_phi = x_260;
    }
    x_261 = x_261_phi;
    x_262_phi = x_261;
  }
  let x_262 : f32 = x_262_phi;
  x_GLF_color = vec4<f32>(x_262, x_262, x_262, 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);
}
