// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/assembler/ins.c
// Function: ins_fill_EX
void ins_fill_EX(
	ParserContext *ctx,
	Instruction *ins,
	ParserASTNode *node,
	EncoderInstruction *enc_ins
) {
	assert(ctx);
	assert(ins);
	assert(node);
	assert(enc_ins);

	int arch = ASM_PARSER_CONTEXT_DATA_GET_ARCH(ctx);

	enc_ins->mod_rm_used = true;

	if (node->type == ASM_NODE_MEM) {
		int seg = ASM_MEM_AST_NODE_GET_SEG(node);
		if (seg == INS_AM_CS) {
			enc_ins->legacy_prefix.cs = true;
		}
		if (seg == INS_AM_SS) {
			enc_ins->legacy_prefix.ss = true;
		}
		if (seg == INS_AM_DS) {
			enc_ins->legacy_prefix.ds = true;
		}
		if (seg == INS_AM_ES) {
			enc_ins->legacy_prefix.es = true;
		}
		if (seg == INS_AM_FS) {
			enc_ins->legacy_prefix.fs = true;
		}
		if (seg == INS_AM_GS) {
			enc_ins->legacy_prefix.gs = true;
		}
	} else {
		enc_ins->legacy_prefix.cs = false;
		enc_ins->legacy_prefix.ss = false;
		enc_ins->legacy_prefix.ds = false;
		enc_ins->legacy_prefix.es = false;
		enc_ins->legacy_prefix.fs = false;
		enc_ins->legacy_prefix.gs = false;
	}

	if (node->type == ASM_NODE_REG) {
		InsRegister *ins_reg = ASM_REG_AST_NODE_GET_REG(node);
		assert(ins_reg);

		enc_ins->mod_rm.mod = 3;
		enc_ins->mod_rm.rm = ins_reg->index & 0x7;	// 0x7 == 0b0111

		if (ins_reg->index & 0x08) {	// 0x8 == 0b1000
			enc_ins->rex_prefix_used = true;
			enc_ins->rex_prefix.b = true;
		}

		if (arch == ASM_ARCH_BIT16) {
			// Operand size
			if (ins_reg->type == INS_REGISTER_GENERAL_4BYTE) {
				enc_ins->legacy_prefix.operand_size_override = true;
			}
		} else if (arch == ASM_ARCH_BIT32) {
			// Operand size
			if (ins_reg->type == INS_REGISTER_GENERAL_2BYTE) {
				enc_ins->legacy_prefix.operand_size_override = true;
			}
		} else if (arch == ASM_ARCH_BIT64) {
			// Operand size
			if (ins->superscript | INS_SS_d64) {
				if (ins_reg->type == INS_REGISTER_GENERAL_2BYTE) {
					enc_ins->legacy_prefix.operand_size_override = true;
				}
			} else {
				if (ins_reg->type == INS_REGISTER_GENERAL_2BYTE) {
					enc_ins->legacy_prefix.operand_size_override = true;
				} else if (ins_reg->type == INS_REGISTER_GENERAL_8BYTE) {
					enc_ins->rex_prefix_used = true;
					enc_ins->rex_prefix.w = true;
				}
			}
		}
	} else if (node->type == ASM_NODE_MEM
					&& ASM_MEM_AST_NODE_GET_ADDR_SIZE(node) == ASM_MEM_ADDR_SIZE_16) {
		int type = ASM_MEM_AST_NODE_GET_TYPE(node);
		int mod = ASM_MEM_AST_NODE_GET_MOD(node);
		int rm = ASM_MEM_AST_NODE_GET_RM(node);
		uint32_t disp = ASM_MEM_AST_NODE_GET_DISP(node);

		if (mod == -1 && rm == -1) {
			mod = 1;
			rm = 6;
			enc_ins->disp_len = 1;
			enc_ins->disp = 0;
		} else if (mod == 0 && rm == 0x6) {
			enc_ins->disp_len = 2;
			enc_ins->disp = disp;
		} else {
			if (mod == 0) {
				enc_ins->disp_len = 0;
			} else if (mod == 1) {
				enc_ins->disp_len = 1;
			} else if (mod == 2) {
				enc_ins->disp_len = 2;
			} else {
				assert(0);
			}
			enc_ins->disp = disp;
		}

		enc_ins->mod_rm.mod = mod;
		enc_ins->mod_rm.rm = rm;

		if (arch == ASM_ARCH_BIT16) {
			// Operand size
			if (type == ASM_MEM_TYPE_DWORD) {
				enc_ins->legacy_prefix.operand_size_override = true;
			}

			// Address size
			// None
		} else if (arch == ASM_ARCH_BIT32) {
			// Operand size
			if (type == ASM_MEM_TYPE_WORD) {
				enc_ins->legacy_prefix.operand_size_override = true;
			}

			// Address size
			enc_ins->legacy_prefix.address_size_override = true;
		} else if (arch == ASM_ARCH_BIT64) {
			assert(0);
		}
	} else if (node->type == ASM_NODE_MEM
					&& ASM_MEM_AST_NODE_GET_ADDR_SIZE(node) == ASM_MEM_ADDR_SIZE_32) {
		int type = ASM_MEM_AST_NODE_GET_TYPE(node);
		int mod = ASM_MEM_AST_NODE_GET_MOD(node);
		int rm = ASM_MEM_AST_NODE_GET_RM(node);
		int sib_base = ASM_MEM_AST_NODE_GET_SIB_BASE(node);
		int sib_index = ASM_MEM_AST_NODE_GET_SIB_INDEX(node);
		int sib_ss = ASM_MEM_AST_NODE_GET_SIB_SS(node);
		uint32_t disp = ASM_MEM_AST_NODE_GET_DISP(node);

		if (mod == 0 && rm == 0x5) {
			enc_ins->disp_len = 4;
			enc_ins->disp = disp;
		} else {
			if (mod == 0) {
				enc_ins->disp_len = 0;
			} else if (mod == 1) {
				enc_ins->disp_len = 1;
			} else if (mod == 2) {
				enc_ins->disp_len = 4;
			} else {
				assert(0);
			}
			enc_ins->disp = disp;
		}

		enc_ins->mod_rm.mod = mod;
		enc_ins->mod_rm.rm = rm;

		if (sib_base != -1 && sib_index != -1 && sib_ss != -1) {
			enc_ins->sib_used = true;
			enc_ins->sib.base = sib_base;
			enc_ins->sib.index = sib_index;
			enc_ins->sib.scale = sib_ss;
		}

		if (arch == ASM_ARCH_BIT16) {
			// Operand size
			if (type == ASM_MEM_TYPE_DWORD) {
				enc_ins->legacy_prefix.operand_size_override = true;
			}

			// Address size
			enc_ins->legacy_prefix.address_size_override = true;
		} else if (arch == ASM_ARCH_BIT32) {
			// Operand size
			if (type == ASM_MEM_TYPE_WORD) {
				enc_ins->legacy_prefix.operand_size_override = true;
			}

			// Address size
			// None
		} else if (arch == ASM_ARCH_BIT64) {
			// Operand size
			if (ins->superscript & INS_SS_d64) {
				if (type == ASM_MEM_TYPE_WORD) {
					enc_ins->legacy_prefix.operand_size_override = true;
				}
			} else {
				if (type == ASM_MEM_TYPE_WORD) {
					enc_ins->legacy_prefix.operand_size_override = true;
				} else if (type == ASM_MEM_TYPE_QWORD) {
					enc_ins->rex_prefix_used = true;
					enc_ins->rex_prefix.w = true;
				}
			}

			// Address size
			enc_ins->legacy_prefix.address_size_override = true;
		}
	} else if (node->type == ASM_NODE_MEM
					&& ASM_MEM_AST_NODE_GET_ADDR_SIZE(node) == ASM_MEM_ADDR_SIZE_64) {
		int type = ASM_MEM_AST_NODE_GET_TYPE(node);
		int mod = ASM_MEM_AST_NODE_GET_MOD(node);
		int rm = ASM_MEM_AST_NODE_GET_RM(node);
		int sib_base = ASM_MEM_AST_NODE_GET_SIB_BASE(node);
		int sib_index = ASM_MEM_AST_NODE_GET_SIB_INDEX(node);
		int sib_ss = ASM_MEM_AST_NODE_GET_SIB_SS(node);
		uint64_t disp = ASM_MEM_AST_NODE_GET_DISP(node);

		if (mod == -1 && rm == -1) {
			mod = 0x0;
			rm = 0x4;

			sib_base = 0x5;
			sib_index = 0x4;
			sib_ss = 0x0;

			enc_ins->disp_len = 4;
			enc_ins->disp = disp;
		} else if (mod == 0 && rm == 0x5) {
			enc_ins->disp_len = 4;
			enc_ins->disp = disp;
		} else {
			if (mod == 0) {
				enc_ins->disp_len = 0;
			} else if (mod == 1) {
				enc_ins->disp_len = 1;
			} else if (mod == 2) {
				enc_ins->disp_len = 4;
			} else {
				assert(0);
			}
			enc_ins->disp = disp;
		}

		enc_ins->mod_rm.mod = mod;
		enc_ins->mod_rm.rm = rm & 0x7;	// 0x7 == 0b0111
		if (rm & 0x8) {	// 0x8 == 0b1000
			enc_ins->rex_prefix_used = true;
			enc_ins->rex_prefix.b = true;
		}

		if (sib_base != -1 && sib_index != -1 && sib_ss != -1) {
			enc_ins->sib_used = true;
			
			enc_ins->sib.base = sib_base & 0x7;	// 0x7 == 0b0111
			if (sib_base & 0x8) {	// 0x8 == 0b1000
				enc_ins->rex_prefix_used = true;
				enc_ins->rex_prefix.b = true;
			}

			enc_ins->sib.index = sib_index & 0x7;	// 0x7 == 0b0111
			if (sib_index & 0x8) {	// 0x8 == 0b1000
				enc_ins->rex_prefix_used = true;
				enc_ins->rex_prefix.x = true;
			}

			enc_ins->sib.scale = sib_ss;
		}

		if (arch == ASM_ARCH_BIT16) {
			assert(0);
		} else if (arch == ASM_ARCH_BIT32) {
			assert(0);
		} else if (arch == ASM_ARCH_BIT64) {
			// Operand size
			if (ins->superscript & INS_SS_d64) {
				if (type == ASM_MEM_TYPE_WORD) {
					enc_ins->legacy_prefix.operand_size_override = true;
				}
			} else {
				if (type == ASM_MEM_TYPE_WORD) {
					enc_ins->legacy_prefix.operand_size_override = true;
				} else if (type == ASM_MEM_TYPE_QWORD) {
					enc_ins->rex_prefix_used = true;
					enc_ins->rex_prefix.w = true;
				}
			}

			// Address size
			// None
		}
	} else {
		assert(0);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x1ad64
jmp 0x1ad83
leaq 0x32df6(%rip), %rdi     # 0x4db61
leaq 0x2eb8a(%rip), %rsi     # 0x498fc
movl $0x307, %edx            # imm = 0x307
leaq 0x2ee07(%rip), %rcx     # 0x49b85
callq 0xa0b0
cmpq $0x0, -0x10(%rbp)
je 0x1ad8c
jmp 0x1adab
leaq 0x2ed73(%rip), %rdi     # 0x49b06
leaq 0x2eb62(%rip), %rsi     # 0x498fc
movl $0x308, %edx            # imm = 0x308
leaq 0x2eddf(%rip), %rcx     # 0x49b85
callq 0xa0b0
cmpq $0x0, -0x18(%rbp)
je 0x1adb4
jmp 0x1add3
leaq 0x302cc(%rip), %rdi     # 0x4b087
leaq 0x2eb3a(%rip), %rsi     # 0x498fc
movl $0x309, %edx            # imm = 0x309
leaq 0x2edb7(%rip), %rcx     # 0x49b85
callq 0xa0b0
cmpq $0x0, -0x20(%rbp)
je 0x1addc
jmp 0x1adfb
leaq 0x2ed1f(%rip), %rdi     # 0x49b02
leaq 0x2eb12(%rip), %rsi     # 0x498fc
movl $0x30a, %edx            # imm = 0x30A
leaq 0x2ed8f(%rip), %rcx     # 0x49b85
callq 0xa0b0
movq -0x8(%rbp), %rax
movl 0xb0(%rax), %eax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movb $0x1, 0x16(%rax)
movq -0x18(%rbp), %rax
cmpl $0x600, (%rax)          # imm = 0x600
jne 0x1ae8e
movq -0x18(%rbp), %rax
movl 0x68(%rax), %eax
movl %eax, -0x28(%rbp)
cmpl $0x8000, -0x28(%rbp)    # imm = 0x8000
jne 0x1ae37
movq -0x20(%rbp), %rax
movb $0x1, 0x3(%rax)
cmpl $0x8100, -0x28(%rbp)    # imm = 0x8100
jne 0x1ae48
movq -0x20(%rbp), %rax
movb $0x1, 0x4(%rax)
cmpl $0x8200, -0x28(%rbp)    # imm = 0x8200
jne 0x1ae59
movq -0x20(%rbp), %rax
movb $0x1, 0x5(%rax)
cmpl $0x8300, -0x28(%rbp)    # imm = 0x8300
jne 0x1ae6a
movq -0x20(%rbp), %rax
movb $0x1, 0x6(%rax)
cmpl $0x8400, -0x28(%rbp)    # imm = 0x8400
jne 0x1ae7b
movq -0x20(%rbp), %rax
movb $0x1, 0x7(%rax)
cmpl $0x8500, -0x28(%rbp)    # imm = 0x8500
jne 0x1ae8c
movq -0x20(%rbp), %rax
movb $0x1, 0x8(%rax)
jmp 0x1aebe
movq -0x20(%rbp), %rax
movb $0x0, 0x3(%rax)
movq -0x20(%rbp), %rax
movb $0x0, 0x4(%rax)
movq -0x20(%rbp), %rax
movb $0x0, 0x5(%rax)
movq -0x20(%rbp), %rax
movb $0x0, 0x6(%rax)
movq -0x20(%rbp), %rax
movb $0x0, 0x7(%rax)
movq -0x20(%rbp), %rax
movb $0x0, 0x8(%rax)
movq -0x18(%rbp), %rax
cmpl $0x500, (%rax)          # imm = 0x500
jne 0x1afd6
movq -0x18(%rbp), %rax
movq 0x60(%rax), %rax
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x1aee3
jmp 0x1af02
leaq 0x2ec93(%rip), %rdi     # 0x49b7d
leaq 0x2ea0b(%rip), %rsi     # 0x498fc
movl $0x32f, %edx            # imm = 0x32F
leaq 0x2ec88(%rip), %rcx     # 0x49b85
callq 0xa0b0
movq -0x20(%rbp), %rax
movb $0x3, 0x17(%rax)
movq -0x30(%rbp), %rax
movl 0x10(%rax), %eax
andl $0x7, %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x19(%rax)
movq -0x30(%rbp), %rax
movl 0x10(%rax), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x1af3c
movq -0x20(%rbp), %rax
movb $0x1, 0xd(%rax)
movq -0x20(%rbp), %rax
movb $0x1, 0x11(%rax)
cmpl $0x1, -0x24(%rbp)
jne 0x1af56
movq -0x30(%rbp), %rax
cmpl $0x4, 0xc(%rax)
jne 0x1af54
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
jmp 0x1afd1
cmpl $0x2, -0x24(%rbp)
jne 0x1af70
movq -0x30(%rbp), %rax
cmpl $0x3, 0xc(%rax)
jne 0x1af6e
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
jmp 0x1afcf
cmpl $0x4, -0x24(%rbp)
jne 0x1afcd
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
orl $0x20, %eax
cmpl $0x0, %eax
je 0x1af99
movq -0x30(%rbp), %rax
cmpl $0x3, 0xc(%rax)
jne 0x1af97
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
jmp 0x1afcb
movq -0x30(%rbp), %rax
cmpl $0x3, 0xc(%rax)
jne 0x1afad
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
jmp 0x1afc9
movq -0x30(%rbp), %rax
cmpl $0x5, 0xc(%rax)
jne 0x1afc7
movq -0x20(%rbp), %rax
movb $0x1, 0xd(%rax)
movq -0x20(%rbp), %rax
movb $0x1, 0xe(%rax)
jmp 0x1afc9
jmp 0x1afcb
jmp 0x1afcd
jmp 0x1afcf
jmp 0x1afd1
jmp 0x1b5f5
movq -0x18(%rbp), %rax
cmpl $0x600, (%rax)          # imm = 0x600
jne 0x1b158
movq -0x18(%rbp), %rax
cmpl $0x1, 0x60(%rax)
jne 0x1b158
movq -0x18(%rbp), %rax
movl 0x64(%rax), %eax
movl %eax, -0x34(%rbp)
movq -0x18(%rbp), %rax
movl 0x98(%rax), %eax
movl %eax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movl 0x9c(%rax), %eax
movl %eax, -0x3c(%rbp)
movq -0x18(%rbp), %rax
movq 0x90(%rax), %rax
movl %eax, -0x40(%rbp)
cmpl $-0x1, -0x38(%rbp)
jne 0x1b059
cmpl $-0x1, -0x3c(%rbp)
jne 0x1b059
movl $0x1, -0x38(%rbp)
movl $0x6, -0x3c(%rbp)
movq -0x20(%rbp), %rax
movb $0x1, 0x1e(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x20(%rax)
jmp 0x1b0de
cmpl $0x0, -0x38(%rbp)
jne 0x1b07c
cmpl $0x6, -0x3c(%rbp)
jne 0x1b07c
movq -0x20(%rbp), %rax
movb $0x2, 0x1e(%rax)
movl -0x40(%rbp), %eax
movl %eax, %ecx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x1b0dc
cmpl $0x0, -0x38(%rbp)
jne 0x1b08c
movq -0x20(%rbp), %rax
movb $0x0, 0x1e(%rax)
jmp 0x1b0cf
cmpl $0x1, -0x38(%rbp)
jne 0x1b09c
movq -0x20(%rbp), %rax
movb $0x1, 0x1e(%rax)
jmp 0x1b0cd
cmpl $0x2, -0x38(%rbp)
jne 0x1b0ac
movq -0x20(%rbp), %rax
movb $0x2, 0x1e(%rax)
jmp 0x1b0cb
leaq 0x2c3b2(%rip), %rdi     # 0x47465
leaq 0x2e842(%rip), %rsi     # 0x498fc
movl $0x369, %edx            # imm = 0x369
leaq 0x2eabf(%rip), %rcx     # 0x49b85
callq 0xa0b0
jmp 0x1b0cd
jmp 0x1b0cf
movl -0x40(%rbp), %eax
movl %eax, %ecx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x1b0de
movl -0x38(%rbp), %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x17(%rax)
movl -0x3c(%rbp), %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x19(%rax)
cmpl $0x1, -0x24(%rbp)
jne 0x1b10c
cmpl $0x3, -0x34(%rbp)
jne 0x1b10a
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
jmp 0x1b153
cmpl $0x2, -0x24(%rbp)
jne 0x1b12a
cmpl $0x2, -0x34(%rbp)
jne 0x1b120
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
movq -0x20(%rbp), %rax
movb $0x1, 0xc(%rax)
jmp 0x1b151
cmpl $0x4, -0x24(%rbp)
jne 0x1b14f
leaq 0x2c32e(%rip), %rdi     # 0x47465
leaq 0x2e7be(%rip), %rsi     # 0x498fc
movl $0x382, %edx            # imm = 0x382
leaq 0x2ea3b(%rip), %rcx     # 0x49b85
callq 0xa0b0
jmp 0x1b151
jmp 0x1b153
jmp 0x1b5f3
movq -0x18(%rbp), %rax
cmpl $0x600, (%rax)          # imm = 0x600
jne 0x1b33c
movq -0x18(%rbp), %rax
cmpl $0x2, 0x60(%rax)
jne 0x1b33c
movq -0x18(%rbp), %rax
movl 0x64(%rax), %eax
movl %eax, -0x44(%rbp)
movq -0x18(%rbp), %rax
movl 0x98(%rax), %eax
movl %eax, -0x48(%rbp)
movq -0x18(%rbp), %rax
movl 0x9c(%rax), %eax
movl %eax, -0x4c(%rbp)
movq -0x18(%rbp), %rax
movl 0xa0(%rax), %eax
movl %eax, -0x50(%rbp)
movq -0x18(%rbp), %rax
movl 0xa4(%rax), %eax
movl %eax, -0x54(%rbp)
movq -0x18(%rbp), %rax
movl 0xa8(%rax), %eax
movl %eax, -0x58(%rbp)
movq -0x18(%rbp), %rax
movq 0x90(%rax), %rax
movl %eax, -0x5c(%rbp)
cmpl $0x0, -0x48(%rbp)
jne 0x1b1f2
cmpl $0x5, -0x4c(%rbp)
jne 0x1b1f2
movq -0x20(%rbp), %rax
movb $0x4, 0x1e(%rax)
movl -0x5c(%rbp), %eax
movl %eax, %ecx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x1b252
cmpl $0x0, -0x48(%rbp)
jne 0x1b202
movq -0x20(%rbp), %rax
movb $0x0, 0x1e(%rax)
jmp 0x1b245
cmpl $0x1, -0x48(%rbp)
jne 0x1b212
movq -0x20(%rbp), %rax
movb $0x1, 0x1e(%rax)
jmp 0x1b243
cmpl $0x2, -0x48(%rbp)
jne 0x1b222
movq -0x20(%rbp), %rax
movb $0x4, 0x1e(%rax)
jmp 0x1b241
leaq 0x2c23c(%rip), %rdi     # 0x47465
leaq 0x2e6cc(%rip), %rsi     # 0x498fc
movl $0x399, %edx            # imm = 0x399
leaq 0x2e949(%rip), %rcx     # 0x49b85
callq 0xa0b0
jmp 0x1b243
jmp 0x1b245
movl -0x5c(%rbp), %eax
movl %eax, %ecx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
movl -0x48(%rbp), %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x17(%rax)
movl -0x4c(%rbp), %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x19(%rax)
cmpl $-0x1, -0x50(%rbp)
je 0x1b2a8
cmpl $-0x1, -0x54(%rbp)
je 0x1b2a8
cmpl $-0x1, -0x58(%rbp)
je 0x1b2a8
movq -0x20(%rbp), %rax
movb $0x1, 0x1a(%rax)
movl -0x50(%rbp), %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x1d(%rax)
movl -0x54(%rbp), %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x1c(%rax)
movl -0x58(%rbp), %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x1b(%rax)
cmpl $0x1, -0x24(%rbp)
jne 0x1b2c6
cmpl $0x3, -0x44(%rbp)
jne 0x1b2bc
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
movq -0x20(%rbp), %rax
movb $0x1, 0xc(%rax)
jmp 0x1b337
cmpl $0x2, -0x24(%rbp)
jne 0x1b2dc
cmpl $0x2, -0x44(%rbp)
jne 0x1b2da
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
jmp 0x1b335
cmpl $0x4, -0x24(%rbp)
jne 0x1b333
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x1b301
cmpl $0x2, -0x44(%rbp)
jne 0x1b2ff
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
jmp 0x1b32b
cmpl $0x2, -0x44(%rbp)
jne 0x1b311
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
jmp 0x1b329
cmpl $0x4, -0x44(%rbp)
jne 0x1b327
movq -0x20(%rbp), %rax
movb $0x1, 0xd(%rax)
movq -0x20(%rbp), %rax
movb $0x1, 0xe(%rax)
jmp 0x1b329
jmp 0x1b32b
movq -0x20(%rbp), %rax
movb $0x1, 0xc(%rax)
jmp 0x1b335
jmp 0x1b337
jmp 0x1b5f1
movq -0x18(%rbp), %rax
cmpl $0x600, (%rax)          # imm = 0x600
jne 0x1b5d0
movq -0x18(%rbp), %rax
cmpl $0x3, 0x60(%rax)
jne 0x1b5d0
movq -0x18(%rbp), %rax
movl 0x64(%rax), %eax
movl %eax, -0x60(%rbp)
movq -0x18(%rbp), %rax
movl 0x98(%rax), %eax
movl %eax, -0x64(%rbp)
movq -0x18(%rbp), %rax
movl 0x9c(%rax), %eax
movl %eax, -0x68(%rbp)
movq -0x18(%rbp), %rax
movl 0xa0(%rax), %eax
movl %eax, -0x6c(%rbp)
movq -0x18(%rbp), %rax
movl 0xa4(%rax), %eax
movl %eax, -0x70(%rbp)
movq -0x18(%rbp), %rax
movl 0xa8(%rax), %eax
movl %eax, -0x74(%rbp)
movq -0x18(%rbp), %rax
movq 0x90(%rax), %rax
movq %rax, -0x80(%rbp)
cmpl $-0x1, -0x64(%rbp)
jne 0x1b3fc
cmpl $-0x1, -0x68(%rbp)
jne 0x1b3fc
movl $0x0, -0x64(%rbp)
movl $0x4, -0x68(%rbp)
movl $0x5, -0x6c(%rbp)
movl $0x4, -0x70(%rbp)
movl $0x0, -0x74(%rbp)
movq -0x20(%rbp), %rax
movb $0x4, 0x1e(%rax)
movq -0x80(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x1b47f
cmpl $0x0, -0x64(%rbp)
jne 0x1b41e
cmpl $0x5, -0x68(%rbp)
jne 0x1b41e
movq -0x20(%rbp), %rax
movb $0x4, 0x1e(%rax)
movq -0x80(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x1b47d
cmpl $0x0, -0x64(%rbp)
jne 0x1b42e
movq -0x20(%rbp), %rax
movb $0x0, 0x1e(%rax)
jmp 0x1b471
cmpl $0x1, -0x64(%rbp)
jne 0x1b43e
movq -0x20(%rbp), %rax
movb $0x1, 0x1e(%rax)
jmp 0x1b46f
cmpl $0x2, -0x64(%rbp)
jne 0x1b44e
movq -0x20(%rbp), %rax
movb $0x4, 0x1e(%rax)
jmp 0x1b46d
leaq 0x2c010(%rip), %rdi     # 0x47465
leaq 0x2e4a0(%rip), %rsi     # 0x498fc
movl $0x3e9, %edx            # imm = 0x3E9
leaq 0x2e71d(%rip), %rcx     # 0x49b85
callq 0xa0b0
jmp 0x1b46f
jmp 0x1b471
movq -0x80(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x1b47f
movl -0x64(%rbp), %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x17(%rax)
movl -0x68(%rbp), %eax
andl $0x7, %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x19(%rax)
movl -0x68(%rbp), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x1b4b5
movq -0x20(%rbp), %rax
movb $0x1, 0xd(%rax)
movq -0x20(%rbp), %rax
movb $0x1, 0x11(%rax)
cmpl $-0x1, -0x6c(%rbp)
je 0x1b52f
cmpl $-0x1, -0x70(%rbp)
je 0x1b52f
cmpl $-0x1, -0x74(%rbp)
je 0x1b52f
movq -0x20(%rbp), %rax
movb $0x1, 0x1a(%rax)
movl -0x6c(%rbp), %eax
andl $0x7, %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x1d(%rax)
movl -0x6c(%rbp), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x1b4f9
movq -0x20(%rbp), %rax
movb $0x1, 0xd(%rax)
movq -0x20(%rbp), %rax
movb $0x1, 0x11(%rax)
movl -0x70(%rbp), %eax
andl $0x7, %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x1c(%rax)
movl -0x70(%rbp), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x1b523
movq -0x20(%rbp), %rax
movb $0x1, 0xd(%rax)
movq -0x20(%rbp), %rax
movb $0x1, 0x10(%rax)
movl -0x74(%rbp), %eax
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x1b(%rax)
cmpl $0x1, -0x24(%rbp)
jne 0x1b554
leaq 0x2bf29(%rip), %rdi     # 0x47465
leaq 0x2e3b9(%rip), %rsi     # 0x498fc
movl $0x408, %edx            # imm = 0x408
leaq 0x2e636(%rip), %rcx     # 0x49b85
callq 0xa0b0
cmpl $0x2, -0x24(%rbp)
jne 0x1b579
leaq 0x2bf04(%rip), %rdi     # 0x47465
leaq 0x2e394(%rip), %rsi     # 0x498fc
movl $0x40a, %edx            # imm = 0x40A
leaq 0x2e611(%rip), %rcx     # 0x49b85
callq 0xa0b0
cmpl $0x4, -0x24(%rbp)
jne 0x1b5ca
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x1b59e
cmpl $0x2, -0x60(%rbp)
jne 0x1b59c
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
jmp 0x1b5c8
cmpl $0x2, -0x60(%rbp)
jne 0x1b5ae
movq -0x20(%rbp), %rax
movb $0x1, 0xb(%rax)
jmp 0x1b5c6
cmpl $0x4, -0x60(%rbp)
jne 0x1b5c4
movq -0x20(%rbp), %rax
movb $0x1, 0xd(%rax)
movq -0x20(%rbp), %rax
movb $0x1, 0xe(%rax)
jmp 0x1b5c6
jmp 0x1b5c8
jmp 0x1b5ca
jmp 0x1b5cc
jmp 0x1b5ce
jmp 0x1b5ef
leaq 0x2be8e(%rip), %rdi     # 0x47465
leaq 0x2e31e(%rip), %rsi     # 0x498fc
movl $0x41e, %edx            # imm = 0x41E
leaq 0x2e59b(%rip), %rcx     # 0x49b85
callq 0xa0b0
jmp 0x1b5f1
jmp 0x1b5f3
jmp 0x1b5f5
addq $0x80, %rsp
popq %rbp
retq
nop