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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var i : i32;
  var GLF_dead5cols : i32;
  var GLF_dead5rows : i32;
  var GLF_dead5c : i32;
  var GLF_dead5r : i32;
  var msb10 : i32;
  var donor_replacementGLF_dead5sums : array<f32, 9>;
  i = 0;
  loop {
    let x_45 : i32 = i;
    let x_47 : f32 = x_6.injectionSwitch.x;
    if ((x_45 >= i32(x_47))) {
      break;
    }
    let x_53 : f32 = x_6.injectionSwitch.y;
    if ((0.0 > x_53)) {
      GLF_dead5cols = 2;
      loop {
        let x_61 : i32 = GLF_dead5cols;
        if ((x_61 <= 4)) {
        } else {
          break;
        }
        GLF_dead5rows = 2;
        loop {
          let x_68 : i32 = GLF_dead5rows;
          if ((x_68 <= 4)) {
          } else {
            break;
          }
          GLF_dead5c = 0;
          loop {
            let x_75 : i32 = GLF_dead5c;
            let x_76 : i32 = GLF_dead5cols;
            if ((x_75 < x_76)) {
            } else {
              break;
            }
            GLF_dead5r = 0;
            loop {
              let x_83 : i32 = GLF_dead5r;
              let x_84 : i32 = GLF_dead5rows;
              if ((x_83 < x_84)) {
              } else {
                break;
              }
              let x_87 : i32 = msb10;
              switch(x_87) {
                case 1, 8: {
                  let x_90 : i32 = msb10;
                  let x_92 : i32 = msb10;
                  let x_95 : i32 = msb10;
                  let x_96 : i32 = select(0, x_95, ((x_90 >= 0) & (x_92 < 9)));
                  let x_98 : f32 = donor_replacementGLF_dead5sums[x_96];
                  donor_replacementGLF_dead5sums[x_96] = (x_98 + 1.0);
                }
                default: {
                }
              }

              continuing {
                let x_101 : i32 = GLF_dead5r;
                GLF_dead5r = (x_101 + 1);
              }
            }

            continuing {
              let x_103 : i32 = GLF_dead5c;
              GLF_dead5c = (x_103 + 1);
            }
          }
          let x_105 : i32 = msb10;
          msb10 = (x_105 + 1);

          continuing {
            let x_107 : i32 = GLF_dead5rows;
            GLF_dead5rows = (x_107 + 1);
          }
        }

        continuing {
          let x_109 : i32 = GLF_dead5cols;
          GLF_dead5cols = (x_109 + 1);
        }
      }
    }
    let x_111 : i32 = i;
    i = (x_111 + 1);

    continuing {
      let x_113 : i32 = i;
      if ((x_113 < 200)) {
      } else {
        break;
      }
    }
  }
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  return;
}

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

[[stage(fragment)]]
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
