#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 resolution;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
  float result = 0.0f;
  int i = 0;
  result = -0.5f;
  i = 1;
  while (true) {
    int const x_136 = i;
    if ((x_136 < 800)) {
    } else {
      break;
    }
    int const x_139 = i;
    if (((x_139 % 32) == 0)) {
      float const x_145 = result;
      result = (x_145 + 0.400000006f);
    } else {
      int const x_147 = i;
      float const x_149 = *(thirty_two);
      if (((float(x_147) - (rint(x_149) * floor((float(x_147) / rint(x_149))))) <= 0.01f)) {
        float const x_155 = result;
        result = (x_155 + 100.0f);
      }
    }
    int const x_157 = i;
    float const x_159 = *(limit);
    if ((float(x_157) >= x_159)) {
      float const x_163 = result;
      return x_163;
    }
    {
      int const x_164 = i;
      i = (x_164 + 1);
    }
  }
  float const x_166 = result;
  return x_166;
}

void main_1(constant buf0& x_13, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float3 c = 0.0f;
  float thirty_two_1 = 0.0f;
  float param = 0.0f;
  float param_1 = 0.0f;
  float param_2 = 0.0f;
  float param_3 = 0.0f;
  int i_1 = 0;
  c = float3(7.0f, 8.0f, 9.0f);
  float const x_63 = x_13.resolution.x;
  thirty_two_1 = rint((x_63 / 8.0f));
  float const x_67 = (*(tint_symbol_5)).x;
  param = x_67;
  float const x_68 = thirty_two_1;
  param_1 = x_68;
  float const x_69 = compute_value_f1_f1_(&(param), &(param_1));
  c.x = x_69;
  float const x_72 = (*(tint_symbol_5)).y;
  param_2 = x_72;
  float const x_73 = thirty_two_1;
  param_3 = x_73;
  float const x_74 = compute_value_f1_f1_(&(param_2), &(param_3));
  c.y = x_74;
  float3 const x_76 = c;
  float3 const x_79 = c;
  float4x2 const x_87 = float4x2(float2(x_79.x, x_79.y), float2(x_79.z, 1.0f), float2(1.0f, 0.0f), float2(1.0f, 0.0f));
  c.z = (((x_76 * float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f)))).x + float3(x_87[0u].x, x_87[0u].y, x_87[1u].x).y);
  i_1 = 0;
  while (true) {
    int const x_99 = i_1;
    if ((x_99 < 3)) {
    } else {
      break;
    }
    int const x_102 = i_1;
    float const x_104 = c[x_102];
    if ((x_104 >= 1.0f)) {
      int const x_108 = i_1;
      int const x_109 = i_1;
      float const x_111 = c[x_109];
      int const x_112 = i_1;
      float const x_114 = c[x_112];
      c[x_108] = (x_111 * x_114);
      float const x_118 = (*(tint_symbol_5)).y;
      if ((x_118 < 0.0f)) {
        break;
      }
    }
    {
      int const x_122 = i_1;
      i_1 = (x_122 + 1);
    }
  }
  float3 const x_124 = c;
  float3 const x_126 = normalize(fabs(x_124));
  *(tint_symbol_6) = float4(x_126.x, x_126.y, x_126.z, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[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_13, &(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;
}

