// File: /workspace/github_cpp_makefile_star2_O3/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::layout_for_variable[abi:cxx11](spirv_cross::SPIRVariable const&)
string CompilerGLSL::layout_for_variable(const SPIRVariable &var)
{
	// FIXME: Come up with a better solution for when to disable layouts.
	// Having layouts depend on extensions as well as which types
	// of layouts are used. For now, the simple solution is to just disable
	// layouts for legacy versions.
	if (is_legacy())
		return "";

	vector<string> attr;

	auto &dec = ir.meta[var.self].decoration;
	auto &type = get<SPIRType>(var.basetype);
	auto flags = dec.decoration_flags;
	auto typeflags = ir.meta[type.self].decoration.decoration_flags;

	if (options.vulkan_semantics && var.storage == StorageClassPushConstant)
		attr.push_back("push_constant");

	if (flags.get(DecorationRowMajor))
		attr.push_back("row_major");
	if (flags.get(DecorationColMajor))
		attr.push_back("column_major");

	if (options.vulkan_semantics)
	{
		if (flags.get(DecorationInputAttachmentIndex))
			attr.push_back(join("input_attachment_index = ", dec.input_attachment));
	}

	bool is_block = has_decoration(type.self, DecorationBlock);
	if (flags.get(DecorationLocation) && can_use_io_location(var.storage, is_block))
	{
		Bitset combined_decoration;
		for (uint32_t i = 0; i < ir.meta[type.self].members.size(); i++)
			combined_decoration.merge_or(combined_decoration_for_member(type, i));

		// If our members have location decorations, we don't need to
		// emit location decorations at the top as well (looks weird).
		if (!combined_decoration.get(DecorationLocation))
			attr.push_back(join("location = ", dec.location));
	}

	// Can only declare Component if we can declare location.
	if (flags.get(DecorationComponent) && can_use_io_location(var.storage, is_block))
	{
		if (!options.es)
		{
			if (options.version < 440 && options.version >= 140)
				require_extension_internal("GL_ARB_enhanced_layouts");
			else if (options.version < 140)
				SPIRV_CROSS_THROW("Component decoration is not supported in targets below GLSL 1.40.");
			attr.push_back(join("component = ", dec.component));
		}
		else
			SPIRV_CROSS_THROW("Component decoration is not supported in ES targets.");
	}

	if (flags.get(DecorationIndex))
		attr.push_back(join("index = ", dec.index));

	// Do not emit set = decoration in regular GLSL output, but
	// we need to preserve it in Vulkan GLSL mode.
	if (var.storage != StorageClassPushConstant)
	{
		if (flags.get(DecorationDescriptorSet) && options.vulkan_semantics)
			attr.push_back(join("set = ", dec.set));
	}

	// GL 3.0/GLSL 1.30 is not considered legacy, but it doesn't have UBOs ...
	bool can_use_buffer_blocks = (options.es && options.version >= 300) || (!options.es && options.version >= 140);

	bool can_use_binding;
	if (options.es)
		can_use_binding = options.version >= 310;
	else
		can_use_binding = options.enable_420pack_extension || (options.version >= 420);

	// Make sure we don't emit binding layout for a classic uniform on GLSL 1.30.
	if (!can_use_buffer_blocks && var.storage == StorageClassUniform)
		can_use_binding = false;

	if (can_use_binding && flags.get(DecorationBinding))
		attr.push_back(join("binding = ", dec.binding));

	if (flags.get(DecorationOffset))
		attr.push_back(join("offset = ", dec.offset));

	bool push_constant_block = options.vulkan_semantics && var.storage == StorageClassPushConstant;
	bool ssbo_block = var.storage == StorageClassStorageBuffer ||
	                  (var.storage == StorageClassUniform && typeflags.get(DecorationBufferBlock));

	// Instead of adding explicit offsets for every element here, just assume we're using std140 or std430.
	// If SPIR-V does not comply with either layout, we cannot really work around it.
	if (can_use_buffer_blocks && var.storage == StorageClassUniform && typeflags.get(DecorationBlock))
	{
		if (buffer_is_packing_standard(type, BufferPackingStd140))
			attr.push_back("std140");
		else if (buffer_is_packing_standard(type, BufferPackingStd140EnhancedLayout))
		{
			attr.push_back("std140");
			// Fallback time. We might be able to use the ARB_enhanced_layouts to deal with this difference,
			// however, we can only use layout(offset) on the block itself, not any substructs, so the substructs better be the appropriate layout.
			// Enhanced layouts seem to always work in Vulkan GLSL, so no need for extensions there.
			if (options.es && !options.vulkan_semantics)
				SPIRV_CROSS_THROW("Push constant block cannot be expressed as neither std430 nor std140. ES-targets do "
				                  "not support GL_ARB_enhanced_layouts.");
			if (!options.es && !options.vulkan_semantics && options.version < 440)
				require_extension_internal("GL_ARB_enhanced_layouts");

			// This is a very last minute to check for this, but use this unused decoration to mark that we should emit
			// explicit offsets for this block type.
			// layout_for_variable() will be called before the actual buffer emit.
			// The alternative is a full pass before codegen where we deduce this decoration,
			// but then we are just doing the exact same work twice, and more complexity.
			set_decoration(type.self, DecorationCPacked);
		}
		else
		{
			SPIRV_CROSS_THROW("Uniform buffer cannot be expressed as std140, even with enhanced layouts. You can try "
			                  "flattening this block to "
			                  "support a more flexible layout.");
		}
	}
	else if (can_use_buffer_blocks && (push_constant_block || ssbo_block))
	{
		if (buffer_is_packing_standard(type, BufferPackingStd430))
			attr.push_back("std430");
		else if (buffer_is_packing_standard(type, BufferPackingStd140))
			attr.push_back("std140");
		else if (buffer_is_packing_standard(type, BufferPackingStd140EnhancedLayout))
		{
			attr.push_back("std140");

			// Fallback time. We might be able to use the ARB_enhanced_layouts to deal with this difference,
			// however, we can only use layout(offset) on the block itself, not any substructs, so the substructs better be the appropriate layout.
			// Enhanced layouts seem to always work in Vulkan GLSL, so no need for extensions there.
			if (options.es && !options.vulkan_semantics)
				SPIRV_CROSS_THROW("Push constant block cannot be expressed as neither std430 nor std140. ES-targets do "
				                  "not support GL_ARB_enhanced_layouts.");
			if (!options.es && !options.vulkan_semantics && options.version < 440)
				require_extension_internal("GL_ARB_enhanced_layouts");

			set_decoration(type.self, DecorationCPacked);
		}
		else if (buffer_is_packing_standard(type, BufferPackingStd430EnhancedLayout))
		{
			attr.push_back("std430");
			if (options.es && !options.vulkan_semantics)
				SPIRV_CROSS_THROW("Push constant block cannot be expressed as neither std430 nor std140. ES-targets do "
				                  "not support GL_ARB_enhanced_layouts.");
			if (!options.es && !options.vulkan_semantics && options.version < 440)
				require_extension_internal("GL_ARB_enhanced_layouts");

			set_decoration(type.self, DecorationCPacked);
		}
		else
		{
			SPIRV_CROSS_THROW("Buffer block cannot be expressed as neither std430 nor std140, even with enhanced "
			                  "layouts. You can try flattening this block to support a more flexible layout.");
		}
	}

	// For images, the type itself adds a layout qualifer.
	// Only emit the format for storage images.
	if (type.basetype == SPIRType::Image && type.image.sampled == 2)
	{
		const char *fmt = format_to_glsl(type.image.format);
		if (fmt)
			attr.push_back(fmt);
	}

	if (attr.empty())
		return "";

	string res = "layout(";
	res += merge(attr);
	res += ") ";
	return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x158, %rsp            # imm = 0x158
movq %rdi, %rbp
cmpb $0x0, 0x43c(%rsi)
movl $0x12b, %eax            # imm = 0x12B
movl $0x81, %ecx
cmovnel %eax, %ecx
cmpl %ecx, 0x438(%rsi)
jbe 0x29b03
movq %rdx, %rbx
movq %rsi, %r15
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rsp)
movq $0x0, 0x60(%rsp)
movl 0x8(%rdx), %eax
movl 0xc(%rdx), %esi
imulq $0x148, %rax, %r13      # imm = 0x148
addq 0x38(%r15), %r13
movq %r15, %rdi
callq 0xa3ea
movq %rax, %r14
movq 0x60(%r13), %rax
leaq 0xa0(%rsp), %r12
movq %rax, -0x8(%r12)
leaq 0x68(%r13), %rsi
xorl %eax, %eax
movq %rax, (%r12)
movq 0x70(%r13), %rcx
movq %rcx, 0x8(%r12)
movq %rax, 0x10(%r12)
movq 0x80(%r13), %rcx
movq %rcx, 0x18(%r12)
movq %r13, 0x70(%rsp)
movups 0x88(%r13), %xmm0
movups %xmm0, 0x20(%r12)
movq %rax, 0x30(%r12)
leaq 0x118(%rsp), %rdx
movq %r12, (%rdx)
movq %r12, %rdi
callq 0xd3c2
movl 0x8(%r14), %eax
movq 0x38(%r15), %rcx
imulq $0x148, %rax, %rax      # imm = 0x148
leaq (%rcx,%rax), %rsi
addq $0x68, %rsi
movq -0x8(%rsi), %rax
leaq 0x120(%rsp), %r13
movq %rax, -0x8(%r13)
xorl %eax, %eax
movq %rax, (%r13)
movq 0x8(%rsi), %rcx
movq %rcx, 0x8(%r13)
movq %rax, 0x10(%r13)
movq 0x18(%rsi), %rcx
movq %rcx, 0x18(%r13)
movups 0x20(%rsi), %xmm0
movups %xmm0, 0x20(%r13)
movq %rax, 0x30(%r13)
leaq 0x10(%rsp), %rdx
movq %r13, (%rdx)
movq %r13, %rdi
callq 0xd3c2
cmpb $0x1, 0x43e(%r15)
movq %rbx, 0x78(%rsp)
jne 0x29784
cmpl $0x9, 0x10(%rbx)
jne 0x29784
leaq 0x20(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8d694(%rip), %rsi     # 0xb6ddc
leaq 0x8d69a(%rip), %rdx     # 0xb6de9
leaq 0x10(%rsp), %rdi
callq 0x7be0
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2977f
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x78(%rsp), %rbx
movq 0x98(%rsp), %rax
testb $0x10, %al
je 0x297e4
leaq 0x20(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8d326(%rip), %rsi     # 0xb6ac6
leaq 0x8d328(%rip), %rdx     # 0xb6acf
leaq 0x10(%rsp), %rdi
callq 0x7be0
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x297d7
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x98(%rsp), %rax
movq 0x78(%rsp), %rbx
testb $0x20, %al
je 0x29834
leaq 0x20(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8d5f2(%rip), %rsi     # 0xb6dea
leaq 0x8d5f7(%rip), %rdx     # 0xb6df6
leaq 0x10(%rsp), %rdi
callq 0x7be0
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2982f
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x78(%rsp), %rbx
cmpb $0x1, 0x43e(%r15)
jne 0x2988f
testb $0x8, 0x9d(%rsp)
je 0x2988f
movq 0x70(%rsp), %rax
leaq 0xc0(%rax), %rdx
leaq 0x8d59c(%rip), %rsi     # 0xb6df7
leaq 0x10(%rsp), %rdi
callq 0x51924
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2988f
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x8(%r14), %esi
movq %r15, %rdi
movl $0x2, %edx
callq 0x12974
movl %eax, %ecx
testb $0x40, 0x9b(%rsp)
movq %r14, 0x88(%rsp)
je 0x29a70
movl 0x10(%rbx), %esi
movzbl %cl, %edx
movq %r15, %rdi
movb %cl, 0xf(%rsp)
callq 0x28994
movb 0xf(%rsp), %cl
testb %al, %al
je 0x29a70
movq %r14, %rcx
leaq 0x18(%rsp), %r14
movq $0x0, -0x8(%r14)
leaq 0x48(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
movl 0x8(%rcx), %eax
movq 0x38(%r15), %rcx
imulq $0x148, %rax, %rax      # imm = 0x148
movq 0xd8(%rcx,%rax), %rdx
cmpq 0xd0(%rcx,%rax), %rdx
je 0x29a09
movq %rbp, 0x80(%rsp)
xorl %ebp, %ebp
movabsq $0x4ec4ec4ec4ec4ec5, %r12 # imm = 0x4EC4EC4EC4EC4EC5
leaq 0x90(%rsp), %rbx
movq 0x88(%rsp), %rdx
leaq 0xd8(%rsp), %rdi
movq %r15, %r13
movq %r15, %rsi
movl %ebp, %ecx
callq 0x1af9a
movq 0xd8(%rsp), %rax
movq 0xf0(%rsp), %r15
orq %rax, 0x10(%rsp)
testq %r15, %r15
je 0x2999c
leaq 0x8(%r15), %rsi
movq %r14, 0x90(%rsp)
movq %r14, %rdi
movq %rbx, %rdx
callq 0x1f510
movq (%r15), %r15
jmp 0x2997b
leaq 0xe0(%rsp), %rdi
callq 0xd570
movq 0x88(%rsp), %rdx
movl 0x8(%rdx), %eax
movq %r13, %r15
movq 0x38(%r13), %rcx
imulq $0x148, %rax, %rax      # imm = 0x148
movq 0xd8(%rcx,%rax), %rsi
subq 0xd0(%rcx,%rax), %rsi
incl %ebp
sarq $0x4, %rsi
imulq %r12, %rsi
cmpq %rbp, %rsi
ja 0x29951
testb $0x40, 0x13(%rsp)
leaq 0xa0(%rsp), %r12
leaq 0x120(%rsp), %r13
movq 0x80(%rsp), %rbp
movq 0x78(%rsp), %rbx
jne 0x29a5c
movq 0x70(%rsp), %rax
leaq 0xa4(%rax), %rdx
leaq 0x8d0b4(%rip), %rsi     # 0xb6ad0
leaq 0xd8(%rsp), %rdi
callq 0x5106e
leaq 0x50(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0xebc2
leaq 0xe8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29a5c
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x6260
movq %r14, %rdi
callq 0xd570
movq 0x88(%rsp), %r14
movb 0xf(%rsp), %cl
testb $-0x80, 0x9b(%rsp)
je 0x29b74
movl 0x10(%rbx), %esi
movzbl %cl, %edx
movq %r15, %rdi
callq 0x28994
testb %al, %al
je 0x29b74
cmpb $0x0, 0x43c(%r15)
jne 0x2a3ce
movl 0x438(%r15), %eax
leal -0x8c(%rax), %ecx
cmpl $0x12b, %ecx            # imm = 0x12B
ja 0x29b22
leaq 0x20(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8d015(%rip), %rsi     # 0xb6adc
leaq 0x8d025(%rip), %rdx     # 0xb6af3
leaq 0x10(%rsp), %rdi
callq 0x7be0
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x26356
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x29afc
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x78(%rsp), %rbx
jmp 0x29b2d
leaq 0x10(%rbp), %rax
movq %rax, (%rbp)
leaq 0x8ad9d(%rip), %rdx     # 0xb48af
movq %rbp, %rdi
movq %rdx, %rsi
callq 0x7be0
jmp 0x2a3b9
cmpl $0x8b, %eax
jbe 0x2a437
movq 0x70(%rsp), %rax
leaq 0xa8(%rax), %rdx
leaq 0x8cff6(%rip), %rsi     # 0xb6b36
leaq 0x10(%rsp), %rdi
callq 0x517c4
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29b74
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x1, 0x9c(%rsp)
je 0x29bc5
movq 0x70(%rsp), %rax
leaq 0xc8(%rax), %rdx
leaq 0x8d277(%rip), %rsi     # 0xb6e08
leaq 0x10(%rsp), %rdi
callq 0x519b0
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29bc5
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
cmpl $0x9, 0x10(%rbx)
je 0x29c26
testb $0x4, 0x9c(%rsp)
je 0x29c26
cmpb $0x1, 0x43e(%r15)
jne 0x29c26
movq 0x70(%rsp), %rax
leaq 0xac(%rax), %rdx
leaq 0x8cf89(%rip), %rsi     # 0xb6b7b
leaq 0x10(%rsp), %rdi
callq 0x51a3c
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29c26
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x438(%r15), %eax
cmpb $0x1, 0x43c(%r15)
jne 0x29c49
cmpl $0x12c, %eax            # imm = 0x12C
setae %bl
cmpl $0x136, %eax            # imm = 0x136
setae %al
jmp 0x29c60
cmpl $0x8c, %eax
setae %bl
cmpl $0x1a4, %eax            # imm = 0x1A4
setae %al
orb 0x441(%r15), %al
movq 0x78(%rsp), %rcx
cmpl $0x2, 0x10(%rcx)
setne %dl
orb %bl, %dl
movq 0x98(%rsp), %rcx
movq %rcx, %rsi
shrq $0x21, %rsi
andl $0x1, %esi
andb %dl, %sil
andb %al, %sil
cmpb $0x1, %sil
jne 0x29cdb
movq 0x70(%rsp), %rax
leaq 0xb0(%rax), %rdx
leaq 0x8d172(%rip), %rsi     # 0xb6e11
leaq 0x10(%rsp), %rdi
callq 0x51ac8
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29cd3
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x98(%rsp), %rcx
btq $0x23, %rcx
jae 0x29d29
movq 0x70(%rsp), %rdx
addq $0xb4, %rdx
leaq 0x8ce83(%rip), %rsi     # 0xb6b78
leaq 0x10(%rsp), %rdi
callq 0x51850
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29d29
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x78(%rsp), %rax
movl 0x10(%rax), %edx
cmpl $0x9, %edx
sete %al
andb 0x43e(%r15), %al
cmpl $0x2, %edx
je 0x29d4e
movb $0x1, %cl
cmpl $0xc, %edx
je 0x29d6d
xorl %ecx, %ecx
jmp 0x29d6d
testb %bl, %bl
je 0x2a228
movq 0x118(%rsp), %rcx
testb $0x4, %cl
jne 0x29f00
andl $0x8, %ecx
shrl $0x3, %ecx
orb %cl, %al
andb %al, %bl
cmpb $0x1, %bl
jne 0x2a228
movq %r15, %rdi
movq %r14, %rsi
movl $0x1, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29318
testb %al, %al
je 0x29dcb
leaq 0x20(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8d185(%rip), %rsi     # 0xb6f2b
leaq 0x8d184(%rip), %rdx     # 0xb6f31
leaq 0x10(%rsp), %rdi
callq 0x7be0
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
jmp 0x29f4d
movq %r15, %rdi
movq %r14, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29318
testb %al, %al
je 0x29e19
leaq 0x20(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8d028(%rip), %rsi     # 0xb6e1c
leaq 0x8d027(%rip), %rdx     # 0xb6e22
leaq 0x10(%rsp), %rdi
callq 0x7be0
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
jmp 0x29f4d
movq %r15, %rdi
movq %r14, %rsi
movl $0x2, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29318
testb %al, %al
je 0x29f6d
leaq 0x20(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8cfd3(%rip), %rsi     # 0xb6e1c
leaq 0x8cfd2(%rip), %rdx     # 0xb6e22
leaq 0x10(%rsp), %rdi
callq 0x7be0
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
movq 0x10(%rsp), %rdi
cmpq %r14, %rdi
je 0x29e80
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movb 0x43e(%r15), %al
cmpb $0x1, 0x43c(%r15)
jne 0x2a13b
testb %al, %al
jne 0x2a20d
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8cf6a(%rip), %rsi     # 0xb6e23
leaq 0x8cfdb(%rip), %rdx     # 0xb6e9b
callq 0x7be0
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd1eec(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd1ec4(%rip), %rsi     # 0xfbdb0
movq 0xd30e5(%rip), %rdx     # 0xfcfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2a56a
movq %r15, %rdi
movq %r14, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29318
testb %al, %al
je 0x2a054
leaq 0x20(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8ceef(%rip), %rsi     # 0xb6e1c
leaq 0x8ceee(%rip), %rdx     # 0xb6e22
leaq 0x10(%rsp), %rdi
callq 0x7be0
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2a228
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2a228
movq %r15, %rdi
movq %r14, %rsi
movl $0x3, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29318
testb %al, %al
je 0x2a4a0
leaq 0x20(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8cf8e(%rip), %rsi     # 0xb6f2b
leaq 0x8cf8d(%rip), %rdx     # 0xb6f31
leaq 0x10(%rsp), %rdi
callq 0x7be0
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
movq 0x10(%rsp), %rdi
cmpq %r14, %rdi
je 0x29fd4
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movb 0x43e(%r15), %al
cmpb $0x1, 0x43c(%r15)
jne 0x2a17e
testb %al, %al
jne 0x2a20d
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8ce16(%rip), %rsi     # 0xb6e23
leaq 0x8ce87(%rip), %rdx     # 0xb6e9b
callq 0x7be0
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd1d98(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd1d70(%rip), %rsi     # 0xfbdb0
movq 0xd2f91(%rip), %rdx     # 0xfcfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2a56a
movq %r15, %rdi
movq %r14, %rsi
movl $0x2, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29318
testb %al, %al
je 0x2a506
leaq 0x20(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8cd98(%rip), %rsi     # 0xb6e1c
leaq 0x8cd97(%rip), %rdx     # 0xb6e22
leaq 0x10(%rsp), %rdi
callq 0x7be0
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
movq 0x10(%rsp), %rdi
cmpq %r14, %rdi
je 0x2a0bb
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movb 0x43e(%r15), %al
cmpb $0x1, 0x43c(%r15)
jne 0x2a1bd
testb %al, %al
jne 0x2a20d
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8cd2f(%rip), %rsi     # 0xb6e23
leaq 0x8cda0(%rip), %rdx     # 0xb6e9b
callq 0x7be0
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd1cb1(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd1c89(%rip), %rsi     # 0xfbdb0
movq 0xd2eaa(%rip), %rdx     # 0xfcfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2a56a
testb %al, %al
jne 0x2a20d
cmpl $0x1b7, 0x438(%r15) # imm = 0x1B7
ja 0x2a20d
leaq 0x10(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8c979(%rip), %rsi     # 0xb6adc
leaq 0x8c989(%rip), %rdx     # 0xb6af3
callq 0x7be0
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x26356
jmp 0x2a1f6
testb %al, %al
jne 0x2a20d
cmpl $0x1b7, 0x438(%r15) # imm = 0x1B7
ja 0x2a20d
leaq 0x10(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8c93a(%rip), %rsi     # 0xb6adc
leaq 0x8c94a(%rip), %rdx     # 0xb6af3
callq 0x7be0
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x26356
jmp 0x2a1f6
testb %al, %al
jne 0x2a20d
cmpl $0x1b7, 0x438(%r15) # imm = 0x1B7
ja 0x2a20d
leaq 0x10(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8c8ff(%rip), %rsi     # 0xb6adc
leaq 0x8c90f(%rip), %rdx     # 0xb6af3
callq 0x7be0
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x26356
movq 0x10(%rsp), %rdi
cmpq %r14, %rdi
je 0x2a20d
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x88(%rsp), %r14
movl 0x8(%r14), %esi
movq %r15, %rdi
movl $0xa, %edx
xorl %ecx, %ecx
callq 0x14d16
cmpl $0xd, 0xc(%r14)
jne 0x2a29a
cmpl $0x2, 0x8c(%r14)
jne 0x2a29a
movl 0x90(%r14), %esi
movq %r15, %rdi
callq 0x28a6e
movq %rax, %rbx
testq %rax, %rax
je 0x2a29a
leaq 0x20(%rsp), %r14
movq %r14, -0x10(%r14)
movq %rbx, %rdi
callq 0x6120
movq %rbx, %rdx
addq %rax, %rdx
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
callq 0x7be0
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xebc2
movq 0x10(%rsp), %rdi
cmpq %r14, %rdi
je 0x2a29a
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x50(%rsp), %rax
leaq 0x10(%rbp), %r15
movq %r15, (%rbp)
cmpq 0x58(%rsp), %rax
je 0x2a340
leaq 0x8c789(%rip), %rsi     # 0xb6a42
leaq 0x8c789(%rip), %rdx     # 0xb6a49
movq %rbp, 0x80(%rsp)
movq %rbp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %r13
movq %r13, -0x10(%r13)
movq $0x0, -0x8(%r13)
movb $0x0, (%r13)
movq 0x50(%rsp), %r12
movq 0x58(%rsp), %rbp
cmpq %rbp, %r12
je 0x2a354
leaq 0x10(%rsp), %rbx
leaq 0x8fdaa(%rip), %r14     # 0xba0ab
movq (%r12), %rsi
movq 0x8(%r12), %rdx
movq %rbx, %rdi
callq 0x60b0
movq 0x58(%rsp), %rax
addq $-0x20, %rax
cmpq %rax, %r12
je 0x2a32b
movq %rbx, %rdi
movq %r14, %rsi
callq 0x64e0
addq $0x20, %r12
cmpq %rbp, %r12
jne 0x2a301
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rdx
jmp 0x2a359
leaq 0x8a568(%rip), %rdx     # 0xb48af
movq %rbp, %rdi
movq %rdx, %rsi
callq 0x7be0
jmp 0x2a39f
xorl %edx, %edx
movq %r13, %rsi
movq 0x80(%rsp), %rbp
movq %rbp, %rdi
callq 0x60b0
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x2a380
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x90a66(%rip), %rsi     # 0xbaded
movq %rbp, %rdi
leaq 0xa0(%rsp), %r12
leaq 0x120(%rsp), %r13
callq 0x64e0
movq %r13, %rdi
callq 0xd570
movq %r12, %rdi
callq 0xd570
leaq 0x50(%rsp), %rdi
callq 0xda2c
movq %rbp, %rax
addq $0x158, %rsp            # imm = 0x158
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x20(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8c758(%rip), %rsi     # 0xb6b43
leaq 0x8c785(%rip), %rdx     # 0xb6b77
leaq 0x10(%rsp), %rdi
callq 0x7be0
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd19b5(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd198d(%rip), %rsi     # 0xfbdb0
movq 0xd2bae(%rip), %rdx     # 0xfcfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2a56a
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x20(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8c6a0(%rip), %rsi     # 0xb6af4
leaq 0x8c6da(%rip), %rdx     # 0xb6b35
leaq 0x10(%rsp), %rdi
callq 0x7be0
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd194c(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd1924(%rip), %rsi     # 0xfbdb0
movq 0xd2b45(%rip), %rdx     # 0xfcfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2a56a
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x20(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8ca75(%rip), %rsi     # 0xb6f32
leaq 0x8cb0d(%rip), %rdx     # 0xb6fd1
leaq 0x10(%rsp), %rdi
callq 0x7be0
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd18e3(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd18bb(%rip), %rsi     # 0xfbdb0
movq 0xd2adc(%rip), %rdx     # 0xfcfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2a56a
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x20(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8c979(%rip), %rsi     # 0xb6e9c
leaq 0x8ca00(%rip), %rdx     # 0xb6f2a
leaq 0x10(%rsp), %rdi
callq 0x7be0
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd187d(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd1855(%rip), %rsi     # 0xfbdb0
movq 0xd2a76(%rip), %rdx     # 0xfcfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2a65b
jmp 0x2a6c8
jmp 0x2a5ec
jmp 0x2a610
jmp 0x2a65b
jmp 0x2a6c8
jmp 0x2a5ec
jmp 0x2a610
jmp 0x2a65b
jmp 0x2a6c8
jmp 0x2a5ec
jmp 0x2a610
jmp 0x2a5ec
jmp 0x2a610
jmp 0x2a5ec
jmp 0x2a610
jmp 0x2a65b
jmp 0x2a6c8
jmp 0x2a699
jmp 0x2a6c8
jmp 0x2a65b
jmp 0x2a6c8
jmp 0x2a65b
jmp 0x2a6c8
jmp 0x2a5ec
jmp 0x2a610
jmp 0x2a699
jmp 0x2a6c8
jmp 0x2a67b
jmp 0x2a699
jmp 0x2a6c8
jmp 0x2a6c8
movq %rax, %r12
movq 0x10(%rsp), %rdi
cmpq %r14, %rdi
je 0x2a606
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
testb %bpl, %bpl
jne 0x2a613
jmp 0x2a721
movq %rax, %r12
movq %rbx, %rdi
callq 0x6200
jmp 0x2a721
movq %rax, %r12
leaq 0xe8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a719
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2a719
jmp 0x2a6cd
jmp 0x2a699
jmp 0x2a6c8
jmp 0x2a67b
jmp 0x2a6c8
jmp 0x2a67b
jmp 0x2a6c8
movq %rax, %r12
movq 0x10(%rsp), %rdi
cmpq %r14, %rdi
jne 0x2a6a6
jmp 0x2a721
jmp 0x2a6c8
jmp 0x2a6c8
jmp 0x2a6c8
jmp 0x2a67b
jmp 0x2a6c8
jmp 0x2a67b
jmp 0x2a6c8
movq %rax, %r12
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x2a6a6
jmp 0x2a721
jmp 0x2a6c8
jmp 0x2a699
jmp 0x2a6c8
jmp 0x2a699
movq %rax, %r12
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2a721
movq 0x20(%rsp), %rsi
jmp 0x2a6ff
jmp 0x2a6c8
jmp 0x2a6c8
movq %rax, %r12
jmp 0x2a6ec
jmp 0x2a6d2
jmp 0x2a6c8
jmp 0x2a6c8
movq %rax, %r12
jmp 0x2a72e
jmp 0x2a6c3
movq %rax, %r12
jmp 0x2a73b
movq %rax, %r12
jmp 0x2a721
movq %rax, %r12
jmp 0x2a719
movq %rax, %r12
movq 0x10(%rsp), %rdi
cmpq %r13, %rdi
je 0x2a6ec
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x80(%rsp), %rax
movq (%rax), %rdi
cmpq %r15, %rdi
je 0x2a721
movq (%r15), %rsi
incq %rsi
callq 0x6260
jmp 0x2a721
movq %rax, %r12
leaq 0xe0(%rsp), %rdi
callq 0xd570
movq %r14, %rdi
callq 0xd570
leaq 0x120(%rsp), %rdi
callq 0xd570
leaq 0xa0(%rsp), %rdi
callq 0xd570
leaq 0x50(%rsp), %rdi
callq 0xda2c
movq %r12, %rdi
callq 0x64a0
nop