struct S {
  data : i32;
};

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

type Arr = [[stride(16)]] array<i32, 5>;

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

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

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

var<private> x_GLF_color : vec4<f32>;

fn func_struct_S_i11_(s : ptr<function, S>) {
  loop {
    let x_174 : f32 = x_8.v1.x;
    let x_176 : f32 = x_8.v1.y;
    if ((x_174 > x_176)) {
    } else {
      break;
    }
    return;
  }
  let x_180 : i32 = x_10.x_GLF_uniform_int_values[0];
  (*(s)).data = x_180;
  return;
}

fn main_1() {
  var i : i32;
  var arr : array<S, 3>;
  var i_1 : i32;
  var param : S;
  var j : i32;
  var x_136 : bool;
  var x_146 : bool;
  var x_137_phi : bool;
  var x_147_phi : bool;
  let x_46 : i32 = x_10.x_GLF_uniform_int_values[2];
  i = x_46;
  loop {
    let x_51 : i32 = i;
    let x_53 : i32 = x_10.x_GLF_uniform_int_values[1];
    if ((x_51 < x_53)) {
    } else {
      break;
    }
    let x_56 : i32 = i;
    let x_57 : i32 = i;
    arr[x_56].data = x_57;

    continuing {
      let x_59 : i32 = i;
      i = (x_59 + 1);
    }
  }
  let x_62 : i32 = x_10.x_GLF_uniform_int_values[2];
  i_1 = x_62;
  loop {
    let x_67 : i32 = i_1;
    let x_69 : i32 = x_10.x_GLF_uniform_int_values[1];
    if ((x_67 < x_69)) {
    } else {
      break;
    }
    let x_73 : f32 = x_8.v1.x;
    let x_75 : f32 = x_8.v1.y;
    if ((x_73 > x_75)) {
      break;
    }
    let x_79 : i32 = i_1;
    let x_81 : i32 = arr[x_79].data;
    let x_83 : i32 = x_10.x_GLF_uniform_int_values[0];
    if ((x_81 == x_83)) {
      let x_88 : i32 = i_1;
      let x_91 : i32 = x_10.x_GLF_uniform_int_values[3];
      arr[clamp(x_88, 0, 3)].data = x_91;
      let x_94 : S = arr[2];
      param = x_94;
      func_struct_S_i11_(&(param));
      let x_96 : S = param;
      arr[2] = x_96;
    } else {
      let x_99 : i32 = x_10.x_GLF_uniform_int_values[2];
      j = x_99;
      loop {
        let x_104 : i32 = j;
        let x_106 : i32 = x_10.x_GLF_uniform_int_values[1];
        if ((x_104 < x_106)) {
        } else {
          break;
        }
        let x_109 : i32 = j;
        let x_111 : i32 = arr[x_109].data;
        let x_113 : i32 = x_10.x_GLF_uniform_int_values[4];
        if ((x_111 > x_113)) {
          discard;
        }

        continuing {
          let x_117 : i32 = j;
          j = (x_117 + 1);
        }
      }
    }

    continuing {
      let x_119 : i32 = i_1;
      i_1 = (x_119 + 1);
    }
  }
  let x_122 : i32 = x_10.x_GLF_uniform_int_values[2];
  let x_124 : i32 = arr[x_122].data;
  let x_126 : i32 = x_10.x_GLF_uniform_int_values[2];
  let x_127 : bool = (x_124 == x_126);
  x_137_phi = x_127;
  if (x_127) {
    let x_131 : i32 = x_10.x_GLF_uniform_int_values[0];
    let x_133 : i32 = arr[x_131].data;
    let x_135 : i32 = x_10.x_GLF_uniform_int_values[3];
    x_136 = (x_133 == x_135);
    x_137_phi = x_136;
  }
  let x_137 : bool = x_137_phi;
  x_147_phi = x_137;
  if (x_137) {
    let x_141 : i32 = x_10.x_GLF_uniform_int_values[3];
    let x_143 : i32 = arr[x_141].data;
    let x_145 : i32 = x_10.x_GLF_uniform_int_values[0];
    x_146 = (x_143 == x_145);
    x_147_phi = x_146;
  }
  let x_147 : bool = x_147_phi;
  if (x_147) {
    let x_152 : i32 = x_10.x_GLF_uniform_int_values[0];
    let x_155 : i32 = x_10.x_GLF_uniform_int_values[2];
    let x_158 : i32 = x_10.x_GLF_uniform_int_values[2];
    let x_161 : i32 = x_10.x_GLF_uniform_int_values[0];
    x_GLF_color = vec4<f32>(f32(x_152), f32(x_155), f32(x_158), f32(x_161));
  } else {
    let x_165 : i32 = x_10.x_GLF_uniform_int_values[2];
    let x_166 : f32 = f32(x_165);
    x_GLF_color = vec4<f32>(x_166, x_166, x_166, x_166);
  }
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
