#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 color_out_1;
};
struct tint_symbol_2 {
  float4 color_in_param [[user(locn0)]];
};
struct tint_symbol_3 {
  float4 color_out_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float4 const x_12 = *(tint_symbol_5);
  *(tint_symbol_6) = x_12;
  return;
}

main_out tint_symbol_inner(float4 color_in_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
  *(tint_symbol_7) = color_in_param;
  main_1(tint_symbol_7, tint_symbol_8);
  main_out const tint_symbol_4 = {.color_out_1=*(tint_symbol_8)};
  return tint_symbol_4;
}

fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread float4 tint_symbol_9 = 0.0f;
  thread float4 tint_symbol_10 = 0.0f;
  main_out const inner_result = tint_symbol_inner(tint_symbol_1.color_in_param, &(tint_symbol_9), &(tint_symbol_10));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.color_out_1 = inner_result.color_out_1;
  return wrapper_result;
}

