#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float x_30 = 0.0f;
  uint foo = 0u;
  *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  float const x_32 = (*(tint_symbol_6)).x;
  if ((x_32 > -1.0f)) {
    float const x_38 = (*(tint_symbol_5)).x;
    x_30 = x_38;
  } else {
    uint const x_6 = foo;
    uint const x_7 = (x_6 - as_type<uint>(1));
    foo = x_7;
    x_30 = float((178493u + x_7));
  }
  float const x_40 = x_30;
  (*(tint_symbol_5)).x = x_40;
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(&(tint_symbol_8), &(tint_symbol_7));
  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;
}

