#include <metal_stdlib>
using namespace metal;

[[max_total_threads_per_threadgroup(1)]]
kernel void v() {
  {
    uint2 tint_loop_idx = uint2(4294967295u);
    int i = 0;
    while(true) {
      if (all((tint_loop_idx == uint2(0u)))) {
        break;
      }
      if ((i < 2)) {
      } else {
        break;
      }
      bool tint_continue = false;
      switch(i) {
        case 0:
        {
          {
            uint2 tint_loop_idx_1 = uint2(4294967295u);
            int j = 0;
            while(true) {
              if (all((tint_loop_idx_1 == uint2(0u)))) {
                break;
              }
              if ((j < 2)) {
              } else {
                break;
              }
              bool tint_continue_1 = false;
              switch(j) {
                case 0:
                {
                  tint_continue_1 = true;
                  break;
                }
                default:
                {
                  break;
                }
              }
              if (tint_continue_1) {
                {
                  uint const tint_low_inc_1 = (tint_loop_idx_1.x - 1u);
                  tint_loop_idx_1.x = tint_low_inc_1;
                  uint const tint_carry_1 = uint((tint_low_inc_1 == 4294967295u));
                  tint_loop_idx_1.y = (tint_loop_idx_1.y - tint_carry_1);
                  j = as_type<int>((as_type<uint>(j) + 2u));
                }
                continue;
              }
              {
                uint const tint_low_inc_1 = (tint_loop_idx_1.x - 1u);
                tint_loop_idx_1.x = tint_low_inc_1;
                uint const tint_carry_1 = uint((tint_low_inc_1 == 4294967295u));
                tint_loop_idx_1.y = (tint_loop_idx_1.y - tint_carry_1);
                j = as_type<int>((as_type<uint>(j) + 2u));
              }
            }
          }
          tint_continue = true;
          break;
        }
        default:
        {
          break;
        }
      }
      if (tint_continue) {
        {
          uint const tint_low_inc = (tint_loop_idx.x - 1u);
          tint_loop_idx.x = tint_low_inc;
          uint const tint_carry = uint((tint_low_inc == 4294967295u));
          tint_loop_idx.y = (tint_loop_idx.y - tint_carry);
          i = as_type<int>((as_type<uint>(i) + 2u));
        }
        continue;
      }
      {
        uint const tint_low_inc = (tint_loop_idx.x - 1u);
        tint_loop_idx.x = tint_low_inc;
        uint const tint_carry = uint((tint_low_inc == 4294967295u));
        tint_loop_idx.y = (tint_loop_idx.y - tint_carry);
        i = as_type<int>((as_type<uint>(i) + 2u));
      }
    }
  }
}
