[[block]]
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 : vec4<f32> = indexable[x_119];
  x_GLF_color = x_124;
  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);
}
