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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var a : vec2<f32>;
  var b : vec2<f32>;
  var x_46 : bool;
  var x_47_phi : bool;
  let x_32 : vec2<f32> = x_6.twoandthree;
  a = x_32;
  let x_34 : f32 = a.x;
  let x_35 : vec2<f32> = a;
  b = vec2<f32>(x_34, clamp(x_35, vec2<f32>(1.0, 1.0), vec2<f32>(1.0, 1.0)).y);
  let x_40 : f32 = b.x;
  let x_41 : bool = (x_40 == 2.0);
  x_47_phi = x_41;
  if (x_41) {
    let x_45 : f32 = b.y;
    x_46 = (x_45 == 1.0);
    x_47_phi = x_46;
  }
  let x_47 : bool = x_47_phi;
  if (x_47) {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  } else {
    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.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);
}
