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

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

var<private> x_GLF_color : vec4<f32>;

fn x_51() {
  discard;
}

fn main_1() {
  loop {
    var x_31 : bool;
    var x_30_phi : bool;
    x_30_phi = false;
    loop {
      var x_31_phi : bool;
      let x_30 : bool = x_30_phi;
      loop {
        var x_52 : vec4<f32>;
        var x_54 : vec4<f32>;
        var x_55_phi : vec4<f32>;
        let x_36 : f32 = x_5.injectionSwitch.y;
        x_31_phi = x_30;
        if ((x_36 > 0.0)) {
        } else {
          break;
        }
        loop {
          let x_46 : f32 = x_5.injectionSwitch.x;
          if ((x_46 > 0.0)) {
            x_51();
            x_52 = vec4<f32>(0.0, 0.0, 0.0, 0.0);
            x_55_phi = x_52;
            break;
          }
          x_54 = (vec4<f32>(1.0, 0.0, 0.0, 1.0) + vec4<f32>(x_46, x_46, x_46, x_46));
          x_55_phi = x_54;
          break;
        }
        let x_55 : vec4<f32> = x_55_phi;
        x_GLF_color = x_55;
        x_31_phi = true;
        break;
      }
      x_31 = x_31_phi;
      if (x_31) {
        break;
      } else {
        continue;
      }

      continuing {
        x_30_phi = x_31;
      }
    }
    if (x_31) {
      break;
    }
    break;
  }
  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);
}
