#include <metal_stdlib>

using namespace metal;
struct tint_padded_array_element {
  /* 0x0000 */ float el;
  /* 0x0004 */ int8_t tint_pad[12];
};
struct tint_array_wrapper {
  /* 0x0000 */ tint_padded_array_element arr[4];
};
struct buf0 {
  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
};
struct tint_padded_array_element_1 {
  /* 0x0000 */ int el;
  /* 0x0004 */ int8_t tint_pad_1[12];
};
struct tint_array_wrapper_1 {
  /* 0x0000 */ tint_padded_array_element_1 arr[3];
};
struct buf1 {
  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
  float a = 0.0f;
  int i = 0;
  float b = 0.0f;
  float c = 0.0f;
  float d = 0.0f;
  bool x_67 = false;
  bool x_68_phi = false;
  float const x_37 = x_6.x_GLF_uniform_float_values.arr[0].el;
  a = x_37;
  int const x_39 = x_9.x_GLF_uniform_int_values.arr[1].el;
  i = x_39;
  while (true) {
    int const x_44 = i;
    int const x_46 = x_9.x_GLF_uniform_int_values.arr[0].el;
    if ((x_44 < x_46)) {
    } else {
      break;
    }
    float const x_49 = a;
    b = x_49;
    float const x_50 = b;
    c = x_50;
    float const x_51 = c;
    d = asin(x_51);
    float const x_54 = x_6.x_GLF_uniform_float_values.arr[1].el;
    c = x_54;
    float const x_55 = d;
    a = x_55;
    {
      int const x_56 = i;
      i = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
    }
  }
  float const x_59 = x_6.x_GLF_uniform_float_values.arr[2].el;
  float const x_60 = a;
  bool const x_61 = (x_59 < x_60);
  x_68_phi = x_61;
  if (x_61) {
    float const x_64 = a;
    float const x_66 = x_6.x_GLF_uniform_float_values.arr[3].el;
    x_67 = (x_64 < x_66);
    x_68_phi = x_67;
  }
  bool const x_68 = x_68_phi;
  if (x_68) {
    int const x_73 = x_9.x_GLF_uniform_int_values.arr[2].el;
    int const x_76 = x_9.x_GLF_uniform_int_values.arr[1].el;
    int const x_79 = x_9.x_GLF_uniform_int_values.arr[1].el;
    int const x_82 = x_9.x_GLF_uniform_int_values.arr[2].el;
    *(tint_symbol_4) = float4(float(x_73), float(x_76), float(x_79), float(x_82));
  } else {
    int const x_86 = x_9.x_GLF_uniform_int_values.arr[1].el;
    float const x_87 = float(x_86);
    *(tint_symbol_4) = float4(x_87, x_87, x_87, x_87);
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(x_6, x_9, &(tint_symbol_5));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_5};
  tint_symbol_1 const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_3;
}

