struct struct_base {
  data : i32;
  leftIndex : i32;
  rightIndex : i32;
};

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

var<private> struct_array : array<struct_base, 3>;

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var index : i32;
  struct_array = array<struct_base, 3>(struct_base(1, 1, 1), struct_base(1, 1, 1), struct_base(1, 1, 1));
  index = 1;
  struct_array[1].rightIndex = 1;
  let x_39 : i32 = struct_array[1].leftIndex;
  if ((x_39 == 1)) {
    let x_45 : f32 = x_8.injectionSwitch.x;
    let x_48 : i32 = struct_array[i32(x_45)].rightIndex;
    index = x_48;
  } else {
    let x_50 : f32 = x_8.injectionSwitch.y;
    let x_53 : i32 = struct_array[i32(x_50)].leftIndex;
    index = x_53;
  }
  let x_55 : i32 = struct_array[1].leftIndex;
  if ((x_55 == 1)) {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  } else {
    x_GLF_color = vec4<f32>(1.0, 1.0, 1.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);
}
