struct buf0 {
  one : i32,
}

struct buf1 {
  zero : i32,
}

var<private> x_GLF_color : vec4<f32>;

@group(0) @binding(0) var<uniform> x_6 : buf0;

@group(0) @binding(1) var<uniform> x_9 : buf1;

fn main_1() {
  var i : i32;
  var v : vec4<f32>;
  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  i = 0;
  loop {
    let x_38 : i32 = i;
    let x_40 : i32 = x_6.one;
    if ((x_38 < x_40)) {
    } else {
      break;
    }
    loop {
      let x_48 : i32 = x_6.one;
      if ((x_48 == 1)) {
        x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
      }

      continuing {
        if (false) {
        } else {
          break;
        }
      }
    }

    continuing {
      let x_52 : i32 = i;
      i = (x_52 + 1);
    }
  }
  let x_55 : i32 = x_9.zero;
  v.y = f32(x_55);
  let x_59 : f32 = v.y;
  x_GLF_color.y = x_59;
  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);
}
