#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct tint_array_wrapper {
  float arr[9];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

float3 drawShape_vf2_(constant buf0& x_25, thread float2* const pos) {
  bool c2 = false;
  bool c3 = false;
  bool c4 = false;
  bool c5 = false;
  bool c6 = false;
  int GLF_live4i = 0;
  int GLF_live4_looplimiter5 = 0;
  float4x2 GLF_live7m42 = float4x2(0.0f);
  float3x3 GLF_live7m33 = float3x3(0.0f);
  int GLF_live7cols = 0;
  int GLF_live7_looplimiter3 = 0;
  int GLF_live7rows = 0;
  int GLF_live7_looplimiter2 = 0;
  int GLF_live7_looplimiter1 = 0;
  int GLF_live7c = 0;
  int GLF_live7r = 0;
  int GLF_live7_looplimiter0 = 0;
  int GLF_live7sum_index = 0;
  int GLF_live7_looplimiter7 = 0;
  int GLF_live7cols_1 = 0;
  int GLF_live7rows_1 = 0;
  tint_array_wrapper GLF_live7sums = {};
  int GLF_live7c_1 = 0;
  int GLF_live7r_1 = 0;
  int x_180 = 0;
  float3x3 indexable = float3x3(0.0f);
  float const x_182 = (*(pos)).x;
  c2 = (x_182 > 1.0f);
  bool const x_184 = c2;
  if (x_184) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  float const x_188 = (*(pos)).y;
  c3 = (x_188 < 1.0f);
  bool const x_190 = c3;
  if (x_190) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  float const x_194 = (*(pos)).y;
  c4 = (x_194 > 1.0f);
  bool const x_196 = c4;
  if (x_196) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  float const x_200 = (*(pos)).x;
  c5 = (x_200 < 1.0f);
  bool const x_202 = c5;
  if (x_202) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  float const x_206 = (*(pos)).x;
  c6 = ((x_206 + 1.0f) > 1.0f);
  bool const x_209 = c6;
  if (x_209) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  GLF_live4i = 0;
  while (true) {
    int const x_39 = GLF_live4i;
    if ((x_39 < 4)) {
    } else {
      break;
    }
    int const x_40 = GLF_live4_looplimiter5;
    if ((x_40 >= 7)) {
      break;
    }
    int const x_41 = GLF_live4_looplimiter5;
    GLF_live4_looplimiter5 = as_type<int>((as_type<uint>(x_41) + as_type<uint>(1)));
    GLF_live7m42 = float4x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f), float2(0.0f, 0.0f), float2(1.0f, 0.0f));
    GLF_live7m33 = float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f));
    GLF_live7cols = 2;
    while (true) {
      int const x_43 = GLF_live7cols;
      if ((x_43 < 4)) {
      } else {
        break;
      }
      int const x_44 = GLF_live7_looplimiter3;
      if ((x_44 >= 7)) {
        break;
      }
      int const x_45 = GLF_live7_looplimiter3;
      GLF_live7_looplimiter3 = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
      GLF_live7rows = 2;
      while (true) {
        int const x_47 = GLF_live7rows;
        if ((x_47 < 4)) {
        } else {
          break;
        }
        int const x_48 = GLF_live7_looplimiter2;
        if ((x_48 >= 7)) {
          break;
        }
        int const x_49 = GLF_live7_looplimiter2;
        GLF_live7_looplimiter2 = as_type<int>((as_type<uint>(x_49) + as_type<uint>(1)));
        GLF_live7_looplimiter1 = 0;
        GLF_live7c = 0;
        while (true) {
          int const x_51 = GLF_live7c;
          if ((x_51 < 3)) {
          } else {
            break;
          }
          int const x_52 = GLF_live7_looplimiter1;
          if ((x_52 >= 7)) {
            break;
          }
          int const x_53 = GLF_live7_looplimiter1;
          GLF_live7_looplimiter1 = as_type<int>((as_type<uint>(x_53) + as_type<uint>(1)));
          GLF_live7r = 0;
          while (true) {
            int const x_55 = GLF_live7r;
            if ((x_55 < 2)) {
            } else {
              break;
            }
            int const x_56 = GLF_live7_looplimiter0;
            if ((x_56 >= 7)) {
              break;
            }
            int const x_57 = GLF_live7_looplimiter0;
            GLF_live7_looplimiter0 = as_type<int>((as_type<uint>(x_57) + as_type<uint>(1)));
            int const x_59 = GLF_live7c;
            int const x_60 = GLF_live7c;
            int const x_61 = GLF_live7c;
            int const x_62 = GLF_live7r;
            int const x_63 = GLF_live7r;
            int const x_64 = GLF_live7r;
            GLF_live7m33[select(0, x_61, ((x_59 >= 0) & (x_60 < 3)))][select(0, x_64, ((x_62 >= 0) & (x_63 < 3)))] = 1.0f;
            float const x_267 = x_25.injectionSwitch.y;
            if ((0.0f > x_267)) {
            } else {
              int const x_65 = GLF_live7c;
              int const x_66 = GLF_live7c;
              int const x_67 = GLF_live7c;
              int const x_68 = GLF_live7r;
              int const x_69 = GLF_live7r;
              int const x_70 = GLF_live7r;
              GLF_live7m42[select(0, x_67, ((x_65 >= 0) & (x_66 < 4)))][select(0, x_70, ((x_68 >= 0) & (x_69 < 2)))] = 1.0f;
            }
            {
              int const x_71 = GLF_live7r;
              GLF_live7r = as_type<int>((as_type<uint>(x_71) + as_type<uint>(1)));
            }
          }
          {
            int const x_73 = GLF_live7c;
            GLF_live7c = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
          }
        }
        {
          int const x_75 = GLF_live7rows;
          GLF_live7rows = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
        }
      }
      {
        int const x_77 = GLF_live7cols;
        GLF_live7cols = as_type<int>((as_type<uint>(x_77) + as_type<uint>(1)));
      }
    }
    GLF_live7sum_index = 0;
    GLF_live7_looplimiter7 = 0;
    GLF_live7cols_1 = 2;
    while (true) {
      int const x_79 = GLF_live7cols_1;
      if ((x_79 < 4)) {
      } else {
        break;
      }
      int const x_80 = GLF_live7_looplimiter7;
      if ((x_80 >= 7)) {
        break;
      }
      int const x_81 = GLF_live7_looplimiter7;
      GLF_live7_looplimiter7 = as_type<int>((as_type<uint>(x_81) + as_type<uint>(1)));
      GLF_live7rows_1 = 2;
      int const x_83 = GLF_live7sum_index;
      int const x_84 = GLF_live7sum_index;
      int const x_85 = GLF_live7sum_index;
      GLF_live7sums.arr[select(0, x_85, ((x_83 >= 0) & (x_84 < 9)))] = 0.0f;
      GLF_live7c_1 = 0;
      while (true) {
        int const x_86 = GLF_live7c_1;
        if ((x_86 < 1)) {
        } else {
          break;
        }
        GLF_live7r_1 = 0;
        while (true) {
          int const x_87 = GLF_live7r_1;
          int const x_88 = GLF_live7rows_1;
          if ((x_87 < x_88)) {
          } else {
            break;
          }
          int const x_89 = GLF_live7sum_index;
          int const x_90 = GLF_live7sum_index;
          int const x_91 = GLF_live7sum_index;
          int const x_310 = select(0, x_91, ((x_89 >= 0) & (x_90 < 9)));
          float3x3 const x_311 = GLF_live7m33;
          float3x3 const x_312 = transpose(x_311);
          int const x_92 = GLF_live7c_1;
          if ((x_92 < 3)) {
            x_180 = 1;
          } else {
            float const x_318 = x_25.injectionSwitch.x;
            x_180 = int(x_318);
          }
          int const x_320 = x_180;
          int const x_93 = GLF_live7r_1;
          indexable = x_312;
          float const x_324 = indexable[x_320][select(0, 1, (x_93 < 3))];
          float const x_326 = GLF_live7sums.arr[x_310];
          GLF_live7sums.arr[x_310] = (x_326 + x_324);
          int const x_94 = GLF_live7sum_index;
          int const x_95 = GLF_live7sum_index;
          int const x_96 = GLF_live7sum_index;
          int const x_332 = select(0, x_96, ((x_94 >= 0) & (x_95 < 9)));
          int const x_97 = GLF_live7r_1;
          float const x_334 = GLF_live7m42[1][x_97];
          float const x_336 = GLF_live7sums.arr[x_332];
          GLF_live7sums.arr[x_332] = (x_336 + x_334);
          {
            int const x_98 = GLF_live7r_1;
            GLF_live7r_1 = as_type<int>((as_type<uint>(x_98) + as_type<uint>(1)));
          }
        }
        {
          int const x_100 = GLF_live7c_1;
          GLF_live7c_1 = as_type<int>((as_type<uint>(x_100) + as_type<uint>(1)));
        }
      }
      int const x_102 = GLF_live7sum_index;
      GLF_live7sum_index = as_type<int>((as_type<uint>(x_102) + as_type<uint>(1)));
      {
        int const x_104 = GLF_live7cols_1;
        GLF_live7cols_1 = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
      }
    }
    {
      int const x_106 = GLF_live4i;
      GLF_live4i = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
    }
  }
  return float3(1.0f, 1.0f, 1.0f);
}

void main_1(constant buf0& x_25, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float2 position = 0.0f;
  float2 param = 0.0f;
  float2 param_1 = 0.0f;
  int i = 0;
  float2 param_2 = 0.0f;
  float const x_161 = x_25.injectionSwitch.x;
  if ((x_161 >= 2.0f)) {
    float4 const x_165 = *(tint_symbol_5);
    position = float2(x_165.x, x_165.y);
    float2 const x_167 = position;
    param = x_167;
    float3 const x_168 = drawShape_vf2_(x_25, &(param));
    float2 const x_169 = position;
    param_1 = x_169;
    float3 const x_170 = drawShape_vf2_(x_25, &(param_1));
    i = 25;
    while (true) {
      int const x_108 = i;
      if ((x_108 > 0)) {
      } else {
        break;
      }
      float2 const x_177 = position;
      param_2 = x_177;
      float3 const x_178 = drawShape_vf2_(x_25, &(param_2));
      {
        int const x_109 = i;
        i = as_type<int>((as_type<uint>(x_109) - as_type<uint>(1)));
      }
    }
  }
  *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_25 [[buffer(0)]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(x_25, &(tint_symbol_7), &(tint_symbol_8));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_8};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

