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

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

fn collision_vf2_vf4_(pos : ptr<function, vec2<f32>>, quad : ptr<function, vec4<f32>>) -> bool {
  let x_110 : f32 = (*(pos)).x;
  let x_112 : f32 = (*(quad)).x;
  if ((x_110 < x_112)) {
    return false;
  }
  let x_117 : f32 = (*(pos)).y;
  let x_119 : f32 = (*(quad)).y;
  if ((x_117 < x_119)) {
    return false;
  }
  let x_124 : f32 = (*(pos)).x;
  let x_126 : f32 = (*(quad)).x;
  let x_128 : f32 = (*(quad)).z;
  if ((x_124 > (x_126 + x_128))) {
    return false;
  }
  let x_134 : f32 = (*(pos)).y;
  let x_136 : f32 = (*(quad)).y;
  let x_138 : f32 = (*(quad)).w;
  if ((x_134 > (x_136 + x_138))) {
    return false;
  }
  return true;
}

fn match_vf2_(pos_1 : ptr<function, vec2<f32>>) -> vec4<f32> {
  var res : vec4<f32>;
  var x_144 : f32;
  var x_145 : f32;
  var i : i32;
  var param : vec2<f32>;
  var param_1 : vec4<f32>;
  var indexable : array<vec4<f32>, 8>;
  var indexable_1 : array<vec4<f32>, 8>;
  var indexable_2 : array<vec4<f32>, 8>;
  var indexable_3 : array<vec4<f32>, 16>;
  let x_147 : f32 = gl_FragCoord.x;
  if ((x_147 < 0.0)) {
    x_144 = -1.0;
  } else {
    let x_153 : f32 = gl_FragCoord.x;
    if ((x_153 >= 0.0)) {
      let x_159 : f32 = gl_FragCoord.x;
      x_145 = select(1.0, 0.5, (x_159 >= 0.0));
    } else {
      x_145 = 1.0;
    }
    let x_162 : f32 = x_145;
    x_144 = min(x_162, 0.5);
  }
  let x_164 : f32 = x_144;
  res = vec4<f32>(clamp(0.5, 0.5, x_164), 0.5, 1.0, 1.0);
  i = 0;
  loop {
    let x_171 : i32 = i;
    if ((x_171 < 8)) {
    } else {
      break;
    }
    let x_174 : i32 = i;
    let x_175 : vec2<f32> = *(pos_1);
    param = x_175;
    indexable = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
    let x_177 : vec4<f32> = indexable[x_174];
    param_1 = x_177;
    let x_178 : bool = collision_vf2_vf4_(&(param), &(param_1));
    if (x_178) {
      let x_181 : i32 = i;
      indexable_1 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
      let x_183 : f32 = indexable_1[x_181].x;
      let x_185 : i32 = i;
      indexable_2 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
      let x_187 : f32 = indexable_2[x_185].y;
      let x_190 : i32 = i;
      indexable_3 = 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_196 : vec4<f32> = indexable_3[((((i32(x_183) * i32(x_187)) + (x_190 * 9)) + 11) % 16)];
      res = x_196;
    }

    continuing {
      let x_197 : i32 = i;
      i = (x_197 + 1);
    }
  }
  let x_199 : vec4<f32> = res;
  return x_199;
}

fn main_1() {
  var lin : vec2<f32>;
  var param_2 : vec2<f32>;
  let x_98 : vec4<f32> = gl_FragCoord;
  let x_101 : vec2<f32> = x_20.resolution;
  lin = (vec2<f32>(x_98.x, x_98.y) / x_101);
  let x_103 : vec2<f32> = lin;
  lin = floor((x_103 * 32.0));
  let x_106 : vec2<f32> = lin;
  param_2 = x_106;
  let x_107 : vec4<f32> = match_vf2_(&(param_2));
  x_GLF_color = 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);
}
