void set_float4(inout float4 vec, int idx, float val) {
  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
}

cbuffer cbuffer_x_6 : register(b1, space0) {
  uint4 x_6[4];
};
cbuffer cbuffer_x_10 : register(b0, space0) {
  uint4 x_10[1];
};
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

void main_1() {
  float4x4 m0 = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  int c = 0;
  float4x4 m1 = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  const int x_40 = asint(x_6[1].x);
  const float x_41 = float(x_40);
  m0 = float4x4(float4(x_41, 0.0f, 0.0f, 0.0f), float4(0.0f, x_41, 0.0f, 0.0f), float4(0.0f, 0.0f, x_41, 0.0f), float4(0.0f, 0.0f, 0.0f, x_41));
  const int x_48 = asint(x_6[2].x);
  c = x_48;
  while (true) {
    const int x_53 = c;
    const uint scalar_offset = ((16u * uint(0))) / 4;
    const int x_55 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
    if ((x_53 < x_55)) {
    } else {
      break;
    }
    m1 = m0;
    const int x_59 = c;
    const int x_61 = asint(x_6[3].x);
    const int x_64 = asint(x_6[2].x);
    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
    const float x_66 = asfloat(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
    set_float4(m1[(x_59 % x_61)], x_64, x_66);
    const int x_68 = c;
    const int x_70 = asint(x_6[3].x);
    const int x_73 = asint(x_6[2].x);
    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
    const float x_75 = asfloat(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
    set_float4(m0[(x_68 % x_70)], x_73, x_75);
    {
      c = (c + 1);
    }
  }
  const float4x4 x_79 = m0;
  const int x_81 = asint(x_6[1].x);
  const int x_84 = asint(x_6[2].x);
  const int x_87 = asint(x_6[1].x);
  const int x_90 = asint(x_6[1].x);
  const int x_93 = asint(x_6[1].x);
  const int x_96 = asint(x_6[2].x);
  const int x_99 = asint(x_6[1].x);
  const int x_102 = asint(x_6[1].x);
  const int x_105 = asint(x_6[1].x);
  const int x_108 = asint(x_6[2].x);
  const int x_111 = asint(x_6[1].x);
  const int x_114 = asint(x_6[1].x);
  const int x_117 = asint(x_6[1].x);
  const int x_120 = asint(x_6[2].x);
  const int x_123 = asint(x_6[1].x);
  const int x_126 = asint(x_6[1].x);
  const float4x4 x_132 = float4x4(float4(float(x_81), float(x_84), float(x_87), float(x_90)), float4(float(x_93), float(x_96), float(x_99), float(x_102)), float4(float(x_105), float(x_108), float(x_111), float(x_114)), float4(float(x_117), float(x_120), float(x_123), float(x_126)));
  bool tint_tmp_2 = all((x_79[0u] == x_132[0u]));
  if (tint_tmp_2) {
    tint_tmp_2 = all((x_79[1u] == x_132[1u]));
  }
  bool tint_tmp_1 = (tint_tmp_2);
  if (tint_tmp_1) {
    tint_tmp_1 = all((x_79[2u] == x_132[2u]));
  }
  bool tint_tmp = (tint_tmp_1);
  if (tint_tmp) {
    tint_tmp = all((x_79[3u] == x_132[3u]));
  }
  if ((tint_tmp)) {
    const int x_156 = asint(x_6[2].x);
    const int x_159 = asint(x_6[1].x);
    const int x_162 = asint(x_6[1].x);
    const int x_165 = asint(x_6[2].x);
    x_GLF_color = float4(float(x_156), float(x_159), float(x_162), float(x_165));
  } else {
    const int x_169 = asint(x_6[1].x);
    const float x_170 = float(x_169);
    x_GLF_color = float4(x_170, x_170, x_170, x_170);
  }
  return;
}

struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol {
  float4 x_GLF_color_1 : SV_Target0;
};

tint_symbol main() {
  main_1();
  const main_out tint_symbol_1 = {x_GLF_color};
  const tint_symbol tint_symbol_4 = {tint_symbol_1.x_GLF_color_1};
  return tint_symbol_4;
}
