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

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

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

[[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 c : vec3<f32>;
  var x_54 : f32;
  var x_58 : f32;
  var x_59 : f32;
  var x_91 : f32;
  var x_92 : f32;
  var x_135 : f32;
  var x_136 : f32;
  var x_58_phi : f32;
  var x_61_phi : i32;
  var x_91_phi : f32;
  var x_92_phi : f32;
  var x_93_phi : bool;
  var x_95_phi : f32;
  var x_139_phi : f32;
  var x_146_phi : i32;
  c = vec3<f32>(7.0, 8.0, 9.0);
  let x_50 : f32 = x_9.resolution.x;
  let x_52 : f32 = round((x_50 * 0.125));
  x_54 = gl_FragCoord.x;
  switch(0u) {
    default: {
      x_58_phi = -0.5;
      x_61_phi = 1;
      loop {
        var x_71 : f32;
        var x_79 : f32;
        var x_62 : i32;
        var x_59_phi : f32;
        x_58 = x_58_phi;
        let x_61 : i32 = x_61_phi;
        x_91_phi = 0.0;
        x_92_phi = x_58;
        x_93_phi = false;
        if ((x_61 < 800)) {
        } else {
          break;
        }
        var x_78 : f32;
        var x_79_phi : f32;
        if (((x_61 % 32) == 0)) {
          x_71 = (x_58 + 0.400000006);
          x_59_phi = x_71;
        } else {
          x_79_phi = x_58;
          if (((f32(x_61) - (round(x_52) * floor((f32(x_61) / round(x_52))))) <= 0.01)) {
            x_78 = (x_58 + 100.0);
            x_79_phi = x_78;
          }
          x_79 = x_79_phi;
          let x_81 : f32 = x_6.injectionSwitch.x;
          let x_83 : f32 = x_6.injectionSwitch.y;
          if ((x_81 > x_83)) {
            discard;
          }
          x_59_phi = x_79;
        }
        x_59 = x_59_phi;
        if ((f32(x_61) >= x_54)) {
          x_91_phi = x_59;
          x_92_phi = x_59;
          x_93_phi = true;
          break;
        }

        continuing {
          x_62 = (x_61 + 1);
          x_58_phi = x_59;
          x_61_phi = x_62;
        }
      }
      x_91 = x_91_phi;
      x_92 = x_92_phi;
      let x_93 : bool = x_93_phi;
      x_95_phi = x_91;
      if (x_93) {
        break;
      }
      x_95_phi = x_92;
    }
  }
  var x_98 : f32;
  var x_102 : f32;
  var x_103 : f32;
  var x_102_phi : f32;
  var x_105_phi : i32;
  var x_135_phi : f32;
  var x_136_phi : f32;
  var x_137_phi : bool;
  let x_95 : f32 = x_95_phi;
  c.x = x_95;
  x_98 = gl_FragCoord.y;
  switch(0u) {
    default: {
      x_102_phi = -0.5;
      x_105_phi = 1;
      loop {
        var x_115 : f32;
        var x_123 : f32;
        var x_106 : i32;
        var x_103_phi : f32;
        x_102 = x_102_phi;
        let x_105 : i32 = x_105_phi;
        x_135_phi = 0.0;
        x_136_phi = x_102;
        x_137_phi = false;
        if ((x_105 < 800)) {
        } else {
          break;
        }
        var x_122 : f32;
        var x_123_phi : f32;
        if (((x_105 % 32) == 0)) {
          x_115 = (x_102 + 0.400000006);
          x_103_phi = x_115;
        } else {
          x_123_phi = x_102;
          if (((f32(x_105) - (round(x_52) * floor((f32(x_105) / round(x_52))))) <= 0.01)) {
            x_122 = (x_102 + 100.0);
            x_123_phi = x_122;
          }
          x_123 = x_123_phi;
          let x_125 : f32 = x_6.injectionSwitch.x;
          let x_127 : f32 = x_6.injectionSwitch.y;
          if ((x_125 > x_127)) {
            discard;
          }
          x_103_phi = x_123;
        }
        x_103 = x_103_phi;
        if ((f32(x_105) >= x_98)) {
          x_135_phi = x_103;
          x_136_phi = x_103;
          x_137_phi = true;
          break;
        }

        continuing {
          x_106 = (x_105 + 1);
          x_102_phi = x_103;
          x_105_phi = x_106;
        }
      }
      x_135 = x_135_phi;
      x_136 = x_136_phi;
      let x_137 : bool = x_137_phi;
      x_139_phi = x_135;
      if (x_137) {
        break;
      }
      x_139_phi = x_136;
    }
  }
  let x_139 : f32 = x_139_phi;
  c.y = x_139;
  let x_141 : f32 = c.x;
  let x_142 : f32 = c.y;
  c.z = (x_141 + x_142);
  x_146_phi = 0;
  loop {
    var x_147 : i32;
    let x_146 : i32 = x_146_phi;
    if ((x_146 < 3)) {
    } else {
      break;
    }
    let x_153 : f32 = c[x_146];
    if ((x_153 >= 1.0)) {
      let x_157 : f32 = c[x_146];
      let x_158 : f32 = c[x_146];
      c[x_146] = (x_157 * x_158);
      let x_161 : f32 = x_6.injectionSwitch.x;
      let x_163 : f32 = x_6.injectionSwitch.y;
      if ((x_161 > x_163)) {
        discard;
      }
    }

    continuing {
      x_147 = (x_146 + 1);
      x_146_phi = x_147;
    }
  }
  let x_167 : vec3<f32> = c;
  let x_169 : vec3<f32> = normalize(abs(x_167));
  x_GLF_color = vec4<f32>(x_169.x, x_169.y, x_169.z, 1.0);
  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);
}
