#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  float arr[3];
};
struct main_out {
  float x_1_1;
  float x_1_2;
  float x_1_3;
  float4 x_2_1;
};
struct tint_symbol_1 {
  float x_1_1 [[user(locn4)]];
  float x_1_2 [[user(locn5)]];
  float x_1_3 [[user(locn6)]];
  float4 x_2_1 [[position]];
};

void main_1() {
  return;
}

main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_3, thread float4* const tint_symbol_4) {
  main_1();
  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_3)).arr[0], .x_1_2=(*(tint_symbol_3)).arr[1], .x_1_3=(*(tint_symbol_3)).arr[2], .x_2_1=*(tint_symbol_4)};
  return tint_symbol_2;
}

vertex tint_symbol_1 tint_symbol() {
  thread tint_array_wrapper tint_symbol_5 = {};
  thread float4 tint_symbol_6 = 0.0f;
  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5), &(tint_symbol_6));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_1_1 = inner_result.x_1_1;
  wrapper_result.x_1_2 = inner_result.x_1_2;
  wrapper_result.x_1_3 = inner_result.x_1_3;
  wrapper_result.x_2_1 = inner_result.x_2_1;
  return wrapper_result;
}

