struct buf0 {
  resolution : vec2<f32>;
}

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var c : vec3<f32>;
  var x_51 : f32;
  var x_55 : f32;
  var x_56 : f32;
  var x_81 : f32;
  var x_82 : f32;
  var x_118 : f32;
  var x_119 : f32;
  var x_55_phi : f32;
  var x_58_phi : i32;
  var x_81_phi : f32;
  var x_82_phi : f32;
  var x_83_phi : bool;
  var x_85_phi : f32;
  var x_122_phi : f32;
  var x_129_phi : i32;
  c = vec3<f32>(7.0, 8.0, 9.0);
  let x_47 : f32 = x_7.resolution.x;
  let x_49 : f32 = round((x_47 * 0.125));
  x_51 = gl_FragCoord.x;
  switch(0u) {
    default: {
      x_55_phi = -0.5;
      x_58_phi = 1;
      loop {
        var x_68 : f32;
        var x_76 : f32;
        var x_59 : i32;
        var x_56_phi : f32;
        x_55 = x_55_phi;
        let x_58 : i32 = x_58_phi;
        x_81_phi = 0.0;
        x_82_phi = x_55;
        x_83_phi = false;
        if ((x_58 < 800)) {
        } else {
          break;
        }
        var x_75 : f32;
        var x_76_phi : f32;
        if (((x_58 % 32) == 0)) {
          x_68 = (x_55 + 0.400000006);
          x_56_phi = x_68;
        } else {
          x_76_phi = x_55;
          if (((f32(x_58) - (round(x_49) * floor((f32(x_58) / round(x_49))))) <= 0.01)) {
            x_75 = (x_55 + 100.0);
            x_76_phi = x_75;
          }
          x_76 = x_76_phi;
          x_56_phi = x_76;
        }
        x_56 = x_56_phi;
        if ((f32(x_58) >= x_51)) {
          x_81_phi = x_56;
          x_82_phi = x_56;
          x_83_phi = true;
          break;
        }

        continuing {
          x_59 = (x_58 + 1);
          x_55_phi = x_56;
          x_58_phi = x_59;
        }
      }
      x_81 = x_81_phi;
      x_82 = x_82_phi;
      let x_83 : bool = x_83_phi;
      x_85_phi = x_81;
      if (x_83) {
        break;
      }
      x_85_phi = x_82;
    }
  }
  var x_88 : f32;
  var x_92 : f32;
  var x_93 : f32;
  var x_92_phi : f32;
  var x_95_phi : i32;
  var x_118_phi : f32;
  var x_119_phi : f32;
  var x_120_phi : bool;
  let x_85 : f32 = x_85_phi;
  c.x = x_85;
  x_88 = gl_FragCoord.y;
  switch(0u) {
    default: {
      x_92_phi = -0.5;
      x_95_phi = 1;
      loop {
        var x_113 : f32;
        var x_112 : f32;
        var x_96 : i32;
        var x_93_phi : f32;
        x_92 = x_92_phi;
        let x_95 : i32 = x_95_phi;
        x_118_phi = 0.0;
        x_119_phi = x_92;
        x_120_phi = false;
        if ((x_95 < 800)) {
        } else {
          break;
        }
        var x_111 : f32;
        var x_112_phi : f32;
        if (((x_95 % 32) == 0)) {
          x_113 = (x_92 + 0.400000006);
          x_93_phi = x_113;
        } else {
          x_112_phi = x_92;
          if (((f32(x_95) - (round(x_49) * floor((f32(x_95) / round(x_49))))) <= 0.01)) {
            x_111 = (x_92 + 100.0);
            x_112_phi = x_111;
          }
          x_112 = x_112_phi;
          x_93_phi = x_112;
        }
        x_93 = x_93_phi;
        if ((f32(x_95) >= x_88)) {
          x_118_phi = x_93;
          x_119_phi = x_93;
          x_120_phi = true;
          break;
        }

        continuing {
          x_96 = (x_95 + 1);
          x_92_phi = x_93;
          x_95_phi = x_96;
        }
      }
      x_118 = x_118_phi;
      x_119 = x_119_phi;
      let x_120 : bool = x_120_phi;
      x_122_phi = x_118;
      if (x_120) {
        break;
      }
      x_122_phi = x_119;
    }
  }
  let x_122 : f32 = x_122_phi;
  c.y = x_122;
  let x_124 : f32 = c.x;
  let x_125 : f32 = c.y;
  c.z = (x_124 + x_125);
  x_129_phi = 0;
  loop {
    var x_130 : i32;
    let x_129 : i32 = x_129_phi;
    if ((x_129 < 3)) {
    } else {
      break;
    }
    let x_136 : f32 = c[x_129];
    if ((x_136 >= 1.0)) {
      let x_140 : f32 = c[x_129];
      let x_141 : f32 = c[x_129];
      c[x_129] = (x_140 * x_141);
    }

    continuing {
      x_130 = (x_129 + 1);
      x_129_phi = x_130;
    }
  }
  let x_143 : vec3<f32> = c;
  let x_145 : vec3<f32> = normalize(abs(x_143));
  x_GLF_color = vec4<f32>(x_145.x, x_145.y, x_145.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);
}
