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

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var indexable : array<vec4<f32>, 16>;
  var x_80 : vec2<i32>;
  var x_113 : vec2<i32>;
  var x_119 : i32;
  var x_80_phi : vec2<i32>;
  var x_83_phi : i32;
  var x_114_phi : vec2<i32>;
  var x_116_phi : vec2<i32>;
  let x_58 : vec4<f32> = gl_FragCoord;
  let x_61 : vec2<f32> = x_6.resolution;
  let x_62 : vec2<f32> = (vec2<f32>(x_58.x, x_58.y) / x_61);
  let x_65 : i32 = i32((x_62.x * 8.0));
  let x_66 : ptr<function, array<vec4<f32>, 16>> = &(indexable);
  let x_69 : i32 = i32((x_62.y * 8.0));
  let x_78 : vec2<i32> = vec2<i32>(((((x_65 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_65 & 10))), 0);
  x_80_phi = x_78;
  x_83_phi = 0;
  loop {
    var x_94 : vec2<i32>;
    var x_102 : vec2<i32>;
    var x_84 : i32;
    var x_95_phi : vec2<i32>;
    var x_103_phi : vec2<i32>;
    x_80 = x_80_phi;
    let x_83 : i32 = x_83_phi;
    if ((x_83 < 100)) {
    } else {
      break;
    }
    x_95_phi = x_80;
    if ((x_80.x > 0)) {
      x_94 = x_80;
      x_94.y = (x_80.y - 1);
      x_95_phi = x_94;
    }
    let x_95 : vec2<i32> = x_95_phi;
    x_103_phi = x_95;
    if ((x_95.x < 0)) {
      x_102 = x_95;
      x_102.y = (x_95.y + 1);
      x_103_phi = x_102;
    }
    let x_103 : vec2<i32> = x_103_phi;
    var x_81_1 : vec2<i32> = x_103;
    x_81_1.x = (x_103.x + (x_103.y / 2));
    let x_81 : vec2<i32> = x_81_1;

    continuing {
      x_84 = (x_83 + 1);
      x_80_phi = x_81;
      x_83_phi = x_84;
    }
  }
  let x_108 : i32 = x_80.x;
  x_114_phi = x_80;
  if ((x_108 < 0)) {
    x_113 = x_80;
    x_113.x = -(x_108);
    x_114_phi = x_113;
  }
  let x_114 : vec2<i32> = x_114_phi;
  x_116_phi = x_114;
  loop {
    var x_117 : vec2<i32>;
    let x_116 : vec2<i32> = x_116_phi;
    x_119 = x_116.x;
    if ((x_119 > 15)) {
    } else {
      break;
    }

    continuing {
      x_117 = x_116;
      x_117.x = bitcast<i32>((x_119 - bitcast<i32>(16)));
      x_116_phi = x_117;
    }
  }
  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
  let x_124 : array<vec4<f32>, 16> = *(x_66);
  *(x_66) = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
  *(x_66) = x_124;
  let x_125 : vec4<f32> = indexable[x_119];
  x_GLF_color = x_125;
  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);
}
