// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::emit_subgroup_op(spirv_cross::Instruction const&)
void CompilerGLSL::emit_subgroup_op(const Instruction &i)
{
	const uint32_t *ops = stream(i);
	auto op = static_cast<Op>(i.op);

	if (!options.vulkan_semantics)
		SPIRV_CROSS_THROW("Can only use subgroup operations in Vulkan semantics.");

	switch (op)
	{
	case OpGroupNonUniformElect:
		require_extension_internal("GL_KHR_shader_subgroup_basic");
		break;

	case OpGroupNonUniformBroadcast:
	case OpGroupNonUniformBroadcastFirst:
	case OpGroupNonUniformBallot:
	case OpGroupNonUniformInverseBallot:
	case OpGroupNonUniformBallotBitExtract:
	case OpGroupNonUniformBallotBitCount:
	case OpGroupNonUniformBallotFindLSB:
	case OpGroupNonUniformBallotFindMSB:
		require_extension_internal("GL_KHR_shader_subgroup_ballot");
		break;

	case OpGroupNonUniformShuffle:
	case OpGroupNonUniformShuffleXor:
		require_extension_internal("GL_KHR_shader_subgroup_shuffle");
		break;

	case OpGroupNonUniformShuffleUp:
	case OpGroupNonUniformShuffleDown:
		require_extension_internal("GL_KHR_shader_subgroup_shuffle_relative");
		break;

	case OpGroupNonUniformAll:
	case OpGroupNonUniformAny:
	case OpGroupNonUniformAllEqual:
		require_extension_internal("GL_KHR_shader_subgroup_vote");
		break;

	case OpGroupNonUniformFAdd:
	case OpGroupNonUniformFMul:
	case OpGroupNonUniformFMin:
	case OpGroupNonUniformFMax:
	case OpGroupNonUniformIAdd:
	case OpGroupNonUniformIMul:
	case OpGroupNonUniformSMin:
	case OpGroupNonUniformSMax:
	case OpGroupNonUniformUMin:
	case OpGroupNonUniformUMax:
	case OpGroupNonUniformBitwiseAnd:
	case OpGroupNonUniformBitwiseOr:
	case OpGroupNonUniformBitwiseXor:
	{
		auto operation = static_cast<GroupOperation>(ops[3]);
		if (operation == GroupOperationClusteredReduce)
		{
			require_extension_internal("GL_KHR_shader_subgroup_clustered");
		}
		else if (operation == GroupOperationExclusiveScan || operation == GroupOperationInclusiveScan ||
		         operation == GroupOperationReduce)
		{
			require_extension_internal("GL_KHR_shader_subgroup_arithmetic");
		}
		else
			SPIRV_CROSS_THROW("Invalid group operation.");
		break;
	}

	case OpGroupNonUniformQuadSwap:
	case OpGroupNonUniformQuadBroadcast:
		require_extension_internal("GL_KHR_shader_subgroup_quad");
		break;

	default:
		SPIRV_CROSS_THROW("Invalid opcode for subgroup.");
	}

	uint32_t result_type = ops[0];
	uint32_t id = ops[1];

	auto scope = static_cast<Scope>(get<SPIRConstant>(ops[2]).scalar());
	if (scope != ScopeSubgroup)
		SPIRV_CROSS_THROW("Only subgroup scope is supported.");

	switch (op)
	{
	case OpGroupNonUniformElect:
		emit_op(result_type, id, "subgroupElect()", true);
		break;

	case OpGroupNonUniformBroadcast:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupBroadcast");
		break;

	case OpGroupNonUniformBroadcastFirst:
		emit_unary_func_op(result_type, id, ops[3], "subgroupBroadcastFirst");
		break;

	case OpGroupNonUniformBallot:
		emit_unary_func_op(result_type, id, ops[3], "subgroupBallot");
		break;

	case OpGroupNonUniformInverseBallot:
		emit_unary_func_op(result_type, id, ops[3], "subgroupInverseBallot");
		break;

	case OpGroupNonUniformBallotBitExtract:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupBallotBitExtract");
		break;

	case OpGroupNonUniformBallotFindLSB:
		emit_unary_func_op(result_type, id, ops[3], "subgroupBallotFindLSB");
		break;

	case OpGroupNonUniformBallotFindMSB:
		emit_unary_func_op(result_type, id, ops[3], "subgroupBallotFindMSB");
		break;

	case OpGroupNonUniformBallotBitCount:
	{
		auto operation = static_cast<GroupOperation>(ops[3]);
		if (operation == GroupOperationReduce)
			emit_unary_func_op(result_type, id, ops[4], "subgroupBallotBitCount");
		else if (operation == GroupOperationInclusiveScan)
			emit_unary_func_op(result_type, id, ops[4], "subgroupBallotInclusiveBitCount");
		else if (operation == GroupOperationExclusiveScan)
			emit_unary_func_op(result_type, id, ops[4], "subgroupBallotExclusiveBitCount");
		else
			SPIRV_CROSS_THROW("Invalid BitCount operation.");
		break;
	}

	case OpGroupNonUniformShuffle:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupShuffle");
		break;

	case OpGroupNonUniformShuffleXor:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupShuffleXor");
		break;

	case OpGroupNonUniformShuffleUp:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupShuffleUp");
		break;

	case OpGroupNonUniformShuffleDown:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupShuffleDown");
		break;

	case OpGroupNonUniformAll:
		emit_unary_func_op(result_type, id, ops[3], "subgroupAll");
		break;

	case OpGroupNonUniformAny:
		emit_unary_func_op(result_type, id, ops[3], "subgroupAny");
		break;

	case OpGroupNonUniformAllEqual:
		emit_unary_func_op(result_type, id, ops[3], "subgroupAllEqual");
		break;

		// clang-format off
#define GLSL_GROUP_OP(op, glsl_op) \
case OpGroupNonUniform##op: \
	{ \
		auto operation = static_cast<GroupOperation>(ops[3]); \
		if (operation == GroupOperationReduce) \
			emit_unary_func_op(result_type, id, ops[4], "subgroup" #glsl_op); \
		else if (operation == GroupOperationInclusiveScan) \
			emit_unary_func_op(result_type, id, ops[4], "subgroupInclusive" #glsl_op); \
		else if (operation == GroupOperationExclusiveScan) \
			emit_unary_func_op(result_type, id, ops[4], "subgroupExclusive" #glsl_op); \
		else if (operation == GroupOperationClusteredReduce) \
			emit_binary_func_op(result_type, id, ops[4], ops[5], "subgroupClustered" #glsl_op); \
		else \
			SPIRV_CROSS_THROW("Invalid group operation."); \
		break; \
	}
	GLSL_GROUP_OP(FAdd, Add)
	GLSL_GROUP_OP(FMul, Mul)
	GLSL_GROUP_OP(FMin, Min)
	GLSL_GROUP_OP(FMax, Max)
	GLSL_GROUP_OP(IAdd, Add)
	GLSL_GROUP_OP(IMul, Mul)
	GLSL_GROUP_OP(SMin, Min)
	GLSL_GROUP_OP(SMax, Max)
	GLSL_GROUP_OP(UMin, Min)
	GLSL_GROUP_OP(UMax, Max)
	GLSL_GROUP_OP(BitwiseAnd, And)
	GLSL_GROUP_OP(BitwiseOr, Or)
	GLSL_GROUP_OP(BitwiseXor, Xor)
#undef GLSL_GROUP_OP
		// clang-format on

	case OpGroupNonUniformQuadSwap:
	{
		uint32_t direction = get<SPIRConstant>(ops[4]).scalar();
		if (direction == 0)
			emit_unary_func_op(result_type, id, ops[3], "subgroupQuadSwapHorizontal");
		else if (direction == 1)
			emit_unary_func_op(result_type, id, ops[3], "subgroupQuadSwapVertical");
		else if (direction == 2)
			emit_unary_func_op(result_type, id, ops[3], "subgroupQuadSwapDiagonal");
		else
			SPIRV_CROSS_THROW("Invalid quad swap direction.");
		break;
	}

	case OpGroupNonUniformQuadBroadcast:
	{
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupQuadBroadcast");
		break;
	}

	default:
		SPIRV_CROSS_THROW("Invalid opcode for subgroup.");
	}

	register_control_dependent_expression(id);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x20, %rsp
movq %rsi, %r15
movq %rdi, %rbx
callq 0x1b906
cmpb $0x0, 0x43e(%rbx)
je 0x3fe2b
movzwl (%r15), %r12d
addl $0xfffffeb3, %r12d      # imm = 0xFFFFFEB3
cmpl $0x21, %r12d
ja 0x3ff5a
movq %rax, %r14
leaq 0x772a3(%rip), %rax     # 0xb697c
movslq (%rax,%r12,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movl 0xc(%r14), %eax
cmpl $0x3, %eax
jne 0x3f749
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7a364(%rip), %rsi     # 0xb9a5f
leaq 0x7a37d(%rip), %rdx     # 0xb9a7f
movq %rsp, %rdi
callq 0x7c64
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26a0a
jmp 0x3f85e
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7a2b4(%rip), %rsi     # 0xb99de
leaq 0x7a2ca(%rip), %rdx     # 0xb99fb
movq %rsp, %rdi
callq 0x7c64
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26a0a
jmp 0x3f85e
jae 0x3fef5
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7a321(%rip), %rsi     # 0xb9a80
leaq 0x7a33b(%rip), %rdx     # 0xb9aa1
movq %rsp, %rdi
callq 0x7c64
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26a0a
jmp 0x3f85e
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7a2b5(%rip), %rsi     # 0xb9a43
leaq 0x7a2c9(%rip), %rdx     # 0xb9a5e
movq %rsp, %rdi
callq 0x7c64
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26a0a
jmp 0x3f85e
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7a23f(%rip), %rsi     # 0xb99fc
leaq 0x7a256(%rip), %rdx     # 0xb9a1a
movq %rsp, %rdi
callq 0x7c64
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26a0a
jmp 0x3f85e
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7a2cf(%rip), %rsi     # 0xb9abb
leaq 0x7a2e3(%rip), %rdx     # 0xb9ad6
movq %rsp, %rdi
callq 0x7c64
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26a0a
jmp 0x3f85e
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7a203(%rip), %rsi     # 0xb9a1b
leaq 0x7a223(%rip), %rdx     # 0xb9a42
movq %rsp, %rdi
callq 0x7c64
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26a0a
jmp 0x3f85e
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7a17d(%rip), %rsi     # 0xb99c1
leaq 0x7a192(%rip), %rdx     # 0xb99dd
movq %rsp, %rdi
callq 0x7c64
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26a0a
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x3f874
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl (%r14), %r15d
movl 0x4(%r14), %ebp
movl 0x8(%r14), %esi
movq %rbx, %rdi
callq 0x1c66e
cmpl $0x3, 0x10(%rax)
jne 0x3fe90
cmpl $0x21, %r12d
ja 0x3ffbf
leaq 0x77162(%rip), %rax     # 0xb6a04
movslq (%rax,%r12,4), %rcx
addq %rax, %rcx
jmpq *%rcx
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x7a25b(%rip), %rsi     # 0xb9b16
leaq 0x7a263(%rip), %rdx     # 0xb9b25
movq %rsp, %rdi
callq 0x7c64
movq %rsp, %rcx
movq %rbx, %rdi
movl %r15d, %esi
movl %ebp, %edx
movl $0x1, %r8d
xorl %r9d, %r9d
callq 0x39bea
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x3fe14
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x3fe14
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x400ee
leaq 0x771c5(%rip), %rcx     # 0xb6adc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %ecx
leaq 0x7a278(%rip), %r8      # 0xb9ba3
jmp 0x3fe07
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x40153
leaq 0x771a7(%rip), %rcx     # 0xb6aec
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %eax
cmpl $0x2, %eax
je 0x3fd4b
cmpl $0x1, %eax
je 0x3fd3b
testl %eax, %eax
jne 0x40024
movl 0x10(%r14), %ecx
leaq 0x7a242(%rip), %r8      # 0xb9bb9
jmp 0x3fe07
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x401b8
leaq 0x771ab(%rip), %rcx     # 0xb6b3c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x7a283(%rip), %r9      # 0xb9c2c
jmp 0x3fded
movl 0xc(%r14), %ecx
leaq 0x7a1d4(%rip), %r8      # 0xb9b8d
jmp 0x3fe07
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x7a1a7(%rip), %r9      # 0xb9b74
jmp 0x3fded
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x7a25b(%rip), %r9      # 0xb9c3c
jmp 0x3fded
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x4021d
leaq 0x77151(%rip), %rcx     # 0xb6b4c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x40282
leaq 0x770b3(%rip), %rcx     # 0xb6acc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x7a21e(%rip), %r9      # 0xb9c4f
jmp 0x3fded
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x402e7
leaq 0x770c1(%rip), %rcx     # 0xb6b0c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x7a23f(%rip), %r8      # 0xb9c9e
jmp 0x3fe07
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x7a0b3(%rip), %r9      # 0xb9b26
jmp 0x3fded
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x7a1da(%rip), %r9      # 0xb9c61
jmp 0x3fded
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x4034c
leaq 0x7700b(%rip), %rcx     # 0xb6aac
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x7a315(%rip), %r8      # 0xb9dca
jmp 0x3fe07
movl 0x10(%r14), %esi
movq %rbx, %rdi
callq 0x1c66e
movl 0x10(%rax), %eax
cmpl $0x2, %eax
je 0x3fd6b
cmpl $0x1, %eax
je 0x3fd5b
testl %eax, %eax
jne 0x40089
movl 0xc(%r14), %ecx
leaq 0x7a3b9(%rip), %r8      # 0xb9ea7
jmp 0x3fe07
movl 0xc(%r14), %ecx
leaq 0x7a03a(%rip), %r8      # 0xb9b38
jmp 0x3fe07
movl 0xc(%r14), %ecx
leaq 0x7a173(%rip), %r8      # 0xb9c81
jmp 0x3fe07
movl 0xc(%r14), %ecx
leaq 0x7a040(%rip), %r8      # 0xb9b5e
jmp 0x3fe07
movl 0xc(%r14), %ecx
leaq 0x7a15f(%rip), %r8      # 0xb9c8d
jmp 0x3fe07
movl 0xc(%r14), %ecx
leaq 0x7a137(%rip), %r8      # 0xb9c75
jmp 0x3fe07
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x403b1
leaq 0x76f34(%rip), %rcx     # 0xb6a8c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x7a2f0(%rip), %r8      # 0xb9e5c
jmp 0x3fe07
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x7a391(%rip), %r9      # 0xb9f11
jmp 0x3fded
movl 0xc(%r14), %ecx
leaq 0x79fbf(%rip), %r8      # 0xb9b4f
jmp 0x3fe07
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x40416
leaq 0x76f52(%rip), %rcx     # 0xb6afc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x7a12b(%rip), %r8      # 0xb9ce9
jmp 0x3fe07
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x4047b
leaq 0x76ee4(%rip), %rcx     # 0xb6abc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x404e0
leaq 0x76f36(%rip), %rcx     # 0xb6b2c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x7a12a(%rip), %r8      # 0xb9d34
jmp 0x3fe07
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x40545
leaq 0x76e78(%rip), %rcx     # 0xb6a9c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x7a1dd(%rip), %r8      # 0xb9e15
jmp 0x3fe07
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x405a7
leaq 0x76eca(%rip), %rcx     # 0xb6b1c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x7a119(%rip), %r8      # 0xb9d7f
jmp 0x3fe07
movl 0x10(%r14), %ecx
leaq 0x7a0df(%rip), %r8      # 0xb9d55
jmp 0x3fe07
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x7a0e0(%rip), %r9      # 0xb9d6a
jmp 0x3fded
movl 0x10(%r14), %ecx
leaq 0x7a0a6(%rip), %r8      # 0xb9d40
jmp 0x3fe07
movl 0x10(%r14), %ecx
leaq 0x7a0f6(%rip), %r8      # 0xb9da0
jmp 0x3fe07
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x7a0f7(%rip), %r9      # 0xb9db5
jmp 0x3fded
movl 0x10(%r14), %ecx
leaq 0x7a0bd(%rip), %r8      # 0xb9d8b
jmp 0x3fe07
movl 0x10(%r14), %ecx
leaq 0x79fe1(%rip), %r8      # 0xb9cbf
jmp 0x3fe07
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x79fe2(%rip), %r9      # 0xb9cd4
jmp 0x3fded
movl 0x10(%r14), %ecx
leaq 0x79fa8(%rip), %r8      # 0xb9caa
jmp 0x3fe07
movl 0x10(%r14), %ecx
leaq 0x79ff8(%rip), %r8      # 0xb9d0a
jmp 0x3fe07
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x79ff9(%rip), %r9      # 0xb9d1f
jmp 0x3fded
movl 0x10(%r14), %ecx
leaq 0x79fbf(%rip), %r8      # 0xb9cf5
jmp 0x3fe07
movl 0x10(%r14), %ecx
leaq 0x79e8a(%rip), %r8      # 0xb9bd0
jmp 0x3fe07
movl 0x10(%r14), %ecx
leaq 0x79e9a(%rip), %r8      # 0xb9bf0
jmp 0x3fe07
movl 0xc(%r14), %ecx
leaq 0x7a15c(%rip), %r8      # 0xb9ec2
jmp 0x3fe07
movl 0xc(%r14), %ecx
leaq 0x7a165(%rip), %r8      # 0xb9edb
jmp 0x3fe07
movl 0x10(%r14), %ecx
leaq 0x7a065(%rip), %r8      # 0xb9deb
jmp 0x3fe07
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x7a069(%rip), %r9      # 0xb9e00
jmp 0x3fded
movl 0x10(%r14), %ecx
leaq 0x7a032(%rip), %r8      # 0xb9dd6
jmp 0x3fe07
movl 0x10(%r14), %ecx
leaq 0x7a0cc(%rip), %r8      # 0xb9e7d
jmp 0x3fe07
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x7a0d0(%rip), %r9      # 0xb9e92
jmp 0x3fded
movl 0x10(%r14), %ecx
leaq 0x7a099(%rip), %r8      # 0xb9e68
jmp 0x3fe07
movl 0x10(%r14), %ecx
leaq 0x7a058(%rip), %r8      # 0xb9e34
jmp 0x3fe07
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x7a05b(%rip), %r9      # 0xb9e48
movq %rbx, %rdi
movl %r15d, %esi
movl %ebp, %edx
callq 0x3a8a0
jmp 0x3fe14
movl 0x10(%r14), %ecx
leaq 0x7a019(%rip), %r8      # 0xb9e20
movq %rbx, %rdi
movl %r15d, %esi
movl %ebp, %edx
callq 0x3a790
movq %rbx, %rdi
movl %ebp, %esi
callq 0x3ce76
addq $0x20, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79b43(%rip), %rsi     # 0xb998b
leaq 0x79b71(%rip), %rdx     # 0xb99c0
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbcf2c(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbcf04(%rip), %rsi     # 0xfcd80
movq 0xbe155(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79c47(%rip), %rsi     # 0xb9af4
leaq 0x79c61(%rip), %rdx     # 0xb9b15
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbcec7(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbce9f(%rip), %rsi     # 0xfcd80
movq 0xbe0f0(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79b90(%rip), %rsi     # 0xb9aa2
leaq 0x79ba1(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbce62(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbce3a(%rip), %rsi     # 0xfcd80
movq 0xbe08b(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79b60(%rip), %rsi     # 0xb9ad7
leaq 0x79b75(%rip), %rdx     # 0xb9af3
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbcdfd(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbcdd5(%rip), %rsi     # 0xfcd80
movq 0xbe026(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79afb(%rip), %rsi     # 0xb9ad7
leaq 0x79b10(%rip), %rdx     # 0xb9af3
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbcd98(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbcd70(%rip), %rsi     # 0xfcd80
movq 0xbdfc1(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79bcf(%rip), %rsi     # 0xb9c10
leaq 0x79be3(%rip), %rdx     # 0xb9c2b
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbcd33(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbcd0b(%rip), %rsi     # 0xfcd80
movq 0xbdf5c(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79e4e(%rip), %rsi     # 0xb9ef4
leaq 0x79e63(%rip), %rdx     # 0xb9f10
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbccce(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbcca6(%rip), %rsi     # 0xfcd80
movq 0xbdef7(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79997(%rip), %rsi     # 0xb9aa2
leaq 0x799a8(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbcc69(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbcc41(%rip), %rsi     # 0xfcd80
movq 0xbde92(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79932(%rip), %rsi     # 0xb9aa2
leaq 0x79943(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbcc04(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbcbdc(%rip), %rsi     # 0xfcd80
movq 0xbde2d(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x798cd(%rip), %rsi     # 0xb9aa2
leaq 0x798de(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbcb9f(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbcb77(%rip), %rsi     # 0xfcd80
movq 0xbddc8(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79868(%rip), %rsi     # 0xb9aa2
leaq 0x79879(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbcb3a(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbcb12(%rip), %rsi     # 0xfcd80
movq 0xbdd63(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79803(%rip), %rsi     # 0xb9aa2
leaq 0x79814(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbcad5(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbcaad(%rip), %rsi     # 0xfcd80
movq 0xbdcfe(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7979e(%rip), %rsi     # 0xb9aa2
leaq 0x797af(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbca70(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbca48(%rip), %rsi     # 0xfcd80
movq 0xbdc99(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79739(%rip), %rsi     # 0xb9aa2
leaq 0x7974a(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbca0b(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc9e3(%rip), %rsi     # 0xfcd80
movq 0xbdc34(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x796d4(%rip), %rsi     # 0xb9aa2
leaq 0x796e5(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc9a6(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc97e(%rip), %rsi     # 0xfcd80
movq 0xbdbcf(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7966f(%rip), %rsi     # 0xb9aa2
leaq 0x79680(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc941(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc919(%rip), %rsi     # 0xfcd80
movq 0xbdb6a(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7960a(%rip), %rsi     # 0xb9aa2
leaq 0x7961b(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc8dc(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc8b4(%rip), %rsi     # 0xfcd80
movq 0xbdb05(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x795a5(%rip), %rsi     # 0xb9aa2
leaq 0x795b6(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc877(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc84f(%rip), %rsi     # 0xfcd80
movq 0xbdaa0(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79540(%rip), %rsi     # 0xb9aa2
leaq 0x79551(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc812(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc7ea(%rip), %rsi     # 0xfcd80
movq 0xbda3b(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x40607
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x794de(%rip), %rsi     # 0xb9aa2
leaq 0x794ef(%rip), %rdx     # 0xb9aba
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc7b0(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc788(%rip), %rsi     # 0xfcd80
movq 0xbd9d9(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
jmp 0x406de
jmp 0x406f9
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
jne 0x406c6
jmp 0x4070c
jmp 0x406d5
jmp 0x406ba
jmp 0x406d5
jmp 0x406ba
jmp 0x406ba
jmp 0x406ba
jmp 0x406d5
jmp 0x406d5
jmp 0x406d5
jmp 0x406ba
jmp 0x406d5
jmp 0x406de
jmp 0x406f9
jmp 0x406ba
jmp 0x406d5
jmp 0x406ba
jmp 0x406d5
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x4070c
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x4070c
movq %rax, %rbx
jmp 0x4070c
jmp 0x406de
jmp 0x406f9
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x406ff
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x406ff
movq %rax, %rbx
movb $0x1, %bpl
testb %bpl, %bpl
je 0x4070c
movq %r14, %rdi
callq 0x6200
movq %rbx, %rdi
callq 0x64a0