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

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x_43 : f32;
  var x_44 : f32;
  var x_45 : f32;
  var x_46 : i32;
  var zero : i32;
  var param : vec2<f32>;
  var temp : vec2<f32>;
  let x_47 : vec4<f32> = gl_FragCoord;
  param = vec2<f32>(x_47.x, x_47.y);
  loop {
    let x_54 : f32 = param.y;
    if ((x_54 < 50.0)) {
      let x_60 : f32 = x_9.injectionSwitch.y;
      x_44 = x_60;
    } else {
      x_44 = 0.0;
    }
    let x_61 : f32 = x_44;
    x_43 = x_61;
    let x_63 : f32 = gl_FragCoord.y;
    let x_65 : f32 = select(0.0, 1.0, (x_63 < 50.0));
    x_45 = x_65;
    if (((x_61 - x_65) < 1.0)) {
      x_46 = 0;
      break;
    }
    x_46 = 1;
    break;

    continuing {
      if (false) {
      } else {
        break;
      }
    }
  }
  let x_70 : i32 = x_46;
  zero = x_70;
  if ((x_70 == 1)) {
    return;
  }
  x_GLF_color = vec4<f32>(0.0, 1.0, 1.0, 1.0);
  let x_75 : f32 = gl_FragCoord.x;
  let x_77 : f32 = x_9.injectionSwitch.x;
  if ((x_75 >= x_77)) {
    let x_82 : f32 = gl_FragCoord.y;
    if ((x_82 >= 0.0)) {
      let x_87 : f32 = x_9.injectionSwitch.y;
      x_GLF_color.x = x_87;
    }
  }
  let x_90 : f32 = gl_FragCoord.y;
  if ((x_90 >= 0.0)) {
    let x_95 : f32 = x_9.injectionSwitch.x;
    x_GLF_color.y = x_95;
  }
  let x_97 : vec4<f32> = gl_FragCoord;
  let x_98 : vec2<f32> = vec2<f32>(x_97.x, x_97.y);
  let x_101 : vec2<f32> = vec2<f32>(x_98.x, x_98.y);
  temp = x_101;
  if ((x_101.y >= 0.0)) {
    let x_107 : f32 = x_9.injectionSwitch.x;
    x_GLF_color.z = x_107;
  }
  return;
}

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

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}

fn alwaysZero_vf2_(coord : ptr<function, vec2<f32>>) -> i32 {
  var a : f32;
  var x_110 : f32;
  var b : f32;
  let x_112 : f32 = (*(coord)).y;
  if ((x_112 < 50.0)) {
    let x_118 : f32 = x_9.injectionSwitch.y;
    x_110 = x_118;
  } else {
    x_110 = 0.0;
  }
  let x_119 : f32 = x_110;
  a = x_119;
  let x_121 : f32 = gl_FragCoord.y;
  let x_123 : f32 = select(0.0, 1.0, (x_121 < 50.0));
  b = x_123;
  if (((x_119 - x_123) < 1.0)) {
    return 0;
  }
  return 1;
}
