#include <metal_stdlib>

using namespace metal;
struct main_out {
  int expect_1;
};
struct tint_symbol_1 {
  int expect_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_3, thread int* const tint_symbol_4) {
  bool inbounds = false;
  bool x_31 = false;
  bool x_32_phi = false;
  float const x_24 = (*(tint_symbol_3)).x;
  bool const x_25 = (x_24 < 128.0f);
  x_32_phi = x_25;
  if (!(x_25)) {
    float const x_30 = (*(tint_symbol_3)).y;
    x_31 = (x_30 < 128.0f);
    x_32_phi = x_31;
  }
  bool const x_32 = x_32_phi;
  inbounds = x_32;
  bool const x_33 = inbounds;
  *(tint_symbol_4) = select(-1, 1, x_33);
  return;
}

main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread int* const tint_symbol_6) {
  *(tint_symbol_5) = gl_FragCoord_param;
  main_1(tint_symbol_5, tint_symbol_6);
  main_out const tint_symbol_2 = {.expect_1=*(tint_symbol_6)};
  return tint_symbol_2;
}

fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread int tint_symbol_8 = 0;
  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.expect_1 = inner_result.expect_1;
  return wrapper_result;
}

