// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/semantics.c
// Function: expr_assign
static void _expr_assign(
	ParserContext *ctx,
	ParserASTNode *node
) {
	assert(ctx);
	assert(node);

	#define	_CHECK	\
	{	\
		assert(node->nchilds == 2);	\
		if (!_expr_is_lvalue(ctx, node->childs[0])) {	\
			_SYNERR_NODE(ctx, node, "invalid left value.");	\
		}	\
	}

	uint32_t node_type = node->type;

	switch (node_type) {
		case FE_NODE_EXPR_ASSIGN: {
			_CHECK

			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);

			ParserASTNode *node_oprd1 = node->childs[0];
			ParserASTNode *node_oprd2 = node->childs[1];
			_expr_cond(ctx, node_oprd1);
			_expr(ctx, node_oprd2);

			_check_expr_assign_operands(
				ctx, node, node_oprd1, node_oprd2, "=", true
			);

			break;
		}
		case FE_NODE_EXPR_ADD_ASSIGN: {
			_CHECK

			ParserASTNode *node_oprd1 = node->childs[0];
			ParserASTNode *node_oprd2 = node->childs[1];
			_expr_cond(ctx, node_oprd1);
			_expr(ctx, node_oprd2);

			_check_expr_add_operands(
				ctx, node, node_oprd1, node_oprd2, "+=", false
			);

			FE_EXPR_AST_NODE_COPY(node, node_oprd1);
			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);

			break;
		}
		case FE_NODE_EXPR_SUB_ASSIGN: {
			_CHECK

			ParserASTNode *node_oprd1 = node->childs[0];
			ParserASTNode *node_oprd2 = node->childs[1];
			_expr_cond(ctx, node_oprd1);
			_expr(ctx, node_oprd2);

			_check_expr_sub_operands(
				ctx, node, node_oprd1, node_oprd2, "-=", false
			);

			FE_EXPR_AST_NODE_COPY(node, node_oprd1);
			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);

			break;
		}
		case FE_NODE_EXPR_MUL_ASSIGN:
		case FE_NODE_EXPR_DIV_ASSIGN: {
			_CHECK

			ParserASTNode *node_oprd1 = node->childs[0];
			ParserASTNode *node_oprd2 = node->childs[1];
			_expr_cond(ctx, node_oprd1);
			_expr(ctx, node_oprd2);

			const char *operator = NULL;
			if (node_type == FE_NODE_EXPR_MUL_ASSIGN) {
				operator = "*=";
			} else if (node_type == FE_NODE_EXPR_DIV_ASSIGN) {
				operator = "/=";
			} else {
				assert(0);
			}

			_check_expr_mul_operands(
				ctx, node, node_oprd1, node_oprd2, operator, false
			);

			FE_EXPR_AST_NODE_COPY(node, node_oprd1);
			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);

			break;
		}
		case FE_NODE_EXPR_MOD_ASSIGN: {
			_CHECK

			ParserASTNode *node_oprd1 = node->childs[0];
			ParserASTNode *node_oprd2 = node->childs[1];
			_expr_cond(ctx, node_oprd1);
			_expr(ctx, node_oprd2);

			const char *operator = "%";

			_check_expr_mod_operands(
				ctx, node, node_oprd1, node_oprd2, operator, false
			);

			FE_EXPR_AST_NODE_COPY(node, node_oprd1);
			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);

			break;
		}
		case FE_NODE_EXPR_BAND_ASSIGN: {
			_CHECK

			ParserASTNode *node_oprd1 = node->childs[0];
			ParserASTNode *node_oprd2 = node->childs[1];
			_expr_cond(ctx, node_oprd1);
			_expr(ctx, node_oprd2);

			const char *operator = "&=";

			_check_expr_band_operands(
				ctx, node, node_oprd1, node_oprd2, operator, false
			);

			FE_EXPR_AST_NODE_COPY(node, node_oprd1);
			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);

			break;
		}
		case FE_NODE_EXPR_BOR_ASSIGN: {
			_CHECK

			ParserASTNode *node_oprd1 = node->childs[0];
			ParserASTNode *node_oprd2 = node->childs[1];
			_expr_cond(ctx, node_oprd1);
			_expr(ctx, node_oprd2);

			const char *operator = "|=";

			_check_expr_bor_operands(
				ctx, node, node_oprd1, node_oprd2, operator, false
			);

			FE_EXPR_AST_NODE_COPY(node, node_oprd1);
			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);

			break;
		}
		case FE_NODE_EXPR_BXOR_ASSIGN: {
			_CHECK

			ParserASTNode *node_oprd1 = node->childs[0];
			ParserASTNode *node_oprd2 = node->childs[1];
			_expr_cond(ctx, node_oprd1);
			_expr(ctx, node_oprd2);

			const char *operator = "^=";

			_check_expr_bxor_operands(
				ctx, node, node_oprd1, node_oprd2, operator, false
			);

			FE_EXPR_AST_NODE_COPY(node, node_oprd1);
			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);

			break;
		}
		case FE_NODE_EXPR_SHIFT_LEFT_ASSIGN:
		case FE_NODE_EXPR_SHIFT_RIGHT_ASSIGN: {
			_CHECK

			ParserASTNode *node_oprd1 = node->childs[0];
			ParserASTNode *node_oprd2 = node->childs[1];
			_expr_cond(ctx, node_oprd1);
			_expr(ctx, node_oprd2);

			const char *operator = NULL;
			if (node_type == FE_NODE_EXPR_SHIFT_LEFT_ASSIGN) {
				operator = "<<=";
			} else if (node_type == FE_NODE_EXPR_SHIFT_RIGHT_ASSIGN) {
				operator = ">>=";
			} else {
				assert(0);
			}

			_check_expr_shift_operands(
				ctx, node, node_oprd1, node_oprd2, operator, false
			);

			FE_EXPR_AST_NODE_COPY(node, node_oprd1);
			FE_EXPR_AST_NODE_SET_CONSTANT(node, false);

			break;
		}
		default: {
			_expr_cond(ctx, node);
			break;
		}
	}

	#undef	_CHECK
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2510, %rsp           # imm = 0x2510
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x5061c
jmp 0x5063b
leaq 0x2bf33(%rip), %rdi     # 0x7c556
leaq 0x2dc20(%rip), %rsi     # 0x7e24a
movl $0x12f8, %edx           # imm = 0x12F8
leaq 0x2e239(%rip), %rcx     # 0x7e86f
callq 0x30a0
cmpq $0x0, -0x10(%rbp)
je 0x50644
jmp 0x50663
leaq 0x25988(%rip), %rdi     # 0x75fd3
leaq 0x2dbf8(%rip), %rsi     # 0x7e24a
movl $0x12f9, %edx           # imm = 0x12F9
leaq 0x2e211(%rip), %rcx     # 0x7e86f
callq 0x30a0
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
movl -0x14(%rbp), %eax
addl $0xfffff1f0, %eax       # imm = 0xFFFFF1F0
movl %eax, %ecx
movq %rcx, -0x2510(%rbp)
subl $0xa, %eax
ja 0x510aa
movq -0x2510(%rbp), %rax
leaq 0x2d198(%rip), %rcx     # 0x7d82c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x506a9
jmp 0x506c8
leaq 0x2dfc4(%rip), %rdi     # 0x7e674
leaq 0x2db93(%rip), %rsi     # 0x7e24a
movl $0x1307, %edx           # imm = 0x1307
leaq 0x2e1ac(%rip), %rcx     # 0x7e86f
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rsi
callq 0x510c0
cmpl $0x0, %eax
jne 0x5070f
leaq -0x420(%rbp), %rdi
leaq 0x2e1b4(%rip), %rsi     # 0x7e8a3
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x420(%rbp), %rdx
callq *%rax
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x428(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x430(%rbp)
movq -0x8(%rbp), %rdi
movq -0x428(%rbp), %rsi
callq 0x511b0
movq -0x8(%rbp), %rdi
movq -0x430(%rbp), %rsi
callq 0x4f4b0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x428(%rbp), %rdx
movq -0x430(%rbp), %rcx
leaq 0x2a97a(%rip), %r8      # 0x7b0f3
movl $0x1, %r9d
callq 0x514b0
jmp 0x510b7
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x50795
jmp 0x507b4
leaq 0x2ded8(%rip), %rdi     # 0x7e674
leaq 0x2daa7(%rip), %rsi     # 0x7e24a
movl $0x1317, %edx           # imm = 0x1317
leaq 0x2e0c0(%rip), %rcx     # 0x7e86f
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rsi
callq 0x510c0
cmpl $0x0, %eax
jne 0x507fb
leaq -0x830(%rbp), %rdi
leaq 0x2e0c8(%rip), %rsi     # 0x7e8a3
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x830(%rbp), %rdx
callq *%rax
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x838(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x840(%rbp)
movq -0x8(%rbp), %rdi
movq -0x838(%rbp), %rsi
callq 0x511b0
movq -0x8(%rbp), %rdi
movq -0x840(%rbp), %rsi
callq 0x4f4b0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x838(%rbp), %rdx
movq -0x840(%rbp), %rcx
leaq 0x2a4d1(%rip), %r8      # 0x7ad2e
xorl %r9d, %r9d
callq 0x51630
movq -0x10(%rbp), %rdi
addq $0x60, %rdi
movq -0x838(%rbp), %rsi
addq $0x60, %rsi
movl $0x30, %edx
callq 0x3110
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x510b7
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x5089b
jmp 0x508ba
leaq 0x2ddd2(%rip), %rdi     # 0x7e674
leaq 0x2d9a1(%rip), %rsi     # 0x7e24a
movl $0x1328, %edx           # imm = 0x1328
leaq 0x2dfba(%rip), %rcx     # 0x7e86f
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rsi
callq 0x510c0
cmpl $0x0, %eax
jne 0x50901
leaq -0xc40(%rbp), %rdi
leaq 0x2dfc2(%rip), %rsi     # 0x7e8a3
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0xc40(%rbp), %rdx
callq *%rax
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0xc48(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0xc50(%rbp)
movq -0x8(%rbp), %rdi
movq -0xc48(%rbp), %rsi
callq 0x511b0
movq -0x8(%rbp), %rdi
movq -0xc50(%rbp), %rsi
callq 0x4f4b0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0xc48(%rbp), %rdx
movq -0xc50(%rbp), %rcx
leaq 0x2a409(%rip), %r8      # 0x7ad6c
xorl %r9d, %r9d
callq 0x51840
movq -0x10(%rbp), %rdi
addq $0x60, %rdi
movq -0xc48(%rbp), %rsi
addq $0x60, %rsi
movl $0x30, %edx
callq 0x3110
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x510b7
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x509a1
jmp 0x509c0
leaq 0x2dccc(%rip), %rdi     # 0x7e674
leaq 0x2d89b(%rip), %rsi     # 0x7e24a
movl $0x133a, %edx           # imm = 0x133A
leaq 0x2deb4(%rip), %rcx     # 0x7e86f
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rsi
callq 0x510c0
cmpl $0x0, %eax
jne 0x50a07
leaq -0x1050(%rbp), %rdi
leaq 0x2debc(%rip), %rsi     # 0x7e8a3
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x1050(%rbp), %rdx
callq *%rax
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x1058(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x1060(%rbp)
movq -0x8(%rbp), %rdi
movq -0x1058(%rbp), %rsi
callq 0x511b0
movq -0x8(%rbp), %rdi
movq -0x1060(%rbp), %rsi
callq 0x4f4b0
movq $0x0, -0x1068(%rbp)
cmpl $0xe13, -0x14(%rbp)     # imm = 0xE13
jne 0x50a70
leaq 0x2a343(%rip), %rax     # 0x7adaa
movq %rax, -0x1068(%rbp)
jmp 0x50aaa
cmpl $0xe14, -0x14(%rbp)     # imm = 0xE14
jne 0x50a89
leaq 0x2a368(%rip), %rax     # 0x7ade8
movq %rax, -0x1068(%rbp)
jmp 0x50aa8
leaq 0x219cb(%rip), %rdi     # 0x7245b
leaq 0x2d7b3(%rip), %rsi     # 0x7e24a
movl $0x1347, %edx           # imm = 0x1347
leaq 0x2ddcc(%rip), %rcx     # 0x7e86f
callq 0x30a0
jmp 0x50aaa
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1058(%rbp), %rdx
movq -0x1060(%rbp), %rcx
movq -0x1068(%rbp), %r8
xorl %r9d, %r9d
callq 0x51a50
movq -0x10(%rbp), %rdi
addq $0x60, %rdi
movq -0x1058(%rbp), %rsi
addq $0x60, %rsi
movl $0x30, %edx
callq 0x3110
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x510b7
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x50b05
jmp 0x50b24
leaq 0x2db68(%rip), %rdi     # 0x7e674
leaq 0x2d737(%rip), %rsi     # 0x7e24a
movl $0x1354, %edx           # imm = 0x1354
leaq 0x2dd50(%rip), %rcx     # 0x7e86f
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rsi
callq 0x510c0
cmpl $0x0, %eax
jne 0x50b6b
leaq -0x1470(%rbp), %rdi
leaq 0x2dd58(%rip), %rsi     # 0x7e8a3
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x1470(%rbp), %rdx
callq *%rax
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x1478(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x1480(%rbp)
movq -0x8(%rbp), %rdi
movq -0x1478(%rbp), %rsi
callq 0x511b0
movq -0x8(%rbp), %rdi
movq -0x1480(%rbp), %rsi
callq 0x4f4b0
leaq 0x277ba(%rip), %rax     # 0x78371
movq %rax, -0x1488(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1478(%rbp), %rdx
movq -0x1480(%rbp), %rcx
movq -0x1488(%rbp), %r8
xorl %r9d, %r9d
callq 0x51c10
movq -0x10(%rbp), %rdi
addq $0x60, %rdi
movq -0x1478(%rbp), %rsi
addq $0x60, %rsi
movl $0x30, %edx
callq 0x3110
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x510b7
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x50c19
jmp 0x50c38
leaq 0x2da54(%rip), %rdi     # 0x7e674
leaq 0x2d623(%rip), %rsi     # 0x7e24a
movl $0x1367, %edx           # imm = 0x1367
leaq 0x2dc3c(%rip), %rcx     # 0x7e86f
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rsi
callq 0x510c0
cmpl $0x0, %eax
jne 0x50c7f
leaq -0x1890(%rbp), %rdi
leaq 0x2dc44(%rip), %rsi     # 0x7e8a3
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x1890(%rbp), %rdx
callq *%rax
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x1898(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x18a0(%rbp)
movq -0x8(%rbp), %rdi
movq -0x1898(%rbp), %rsi
callq 0x511b0
movq -0x8(%rbp), %rdi
movq -0x18a0(%rbp), %rsi
callq 0x4f4b0
leaq 0x2a19a(%rip), %rax     # 0x7ae65
movq %rax, -0x18a8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1898(%rbp), %rdx
movq -0x18a0(%rbp), %rcx
movq -0x18a8(%rbp), %r8
xorl %r9d, %r9d
callq 0x51dd0
movq -0x10(%rbp), %rdi
addq $0x60, %rdi
movq -0x1898(%rbp), %rsi
addq $0x60, %rsi
movl $0x30, %edx
callq 0x3110
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x510b7
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x50d2d
jmp 0x50d4c
leaq 0x2d940(%rip), %rdi     # 0x7e674
leaq 0x2d50f(%rip), %rsi     # 0x7e24a
movl $0x137a, %edx           # imm = 0x137A
leaq 0x2db28(%rip), %rcx     # 0x7e86f
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rsi
callq 0x510c0
cmpl $0x0, %eax
jne 0x50d93
leaq -0x1cb0(%rbp), %rdi
leaq 0x2db30(%rip), %rsi     # 0x7e8a3
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x1cb0(%rbp), %rdx
callq *%rax
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x1cb8(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x1cc0(%rbp)
movq -0x8(%rbp), %rdi
movq -0x1cb8(%rbp), %rsi
callq 0x511b0
movq -0x8(%rbp), %rdi
movq -0x1cc0(%rbp), %rsi
callq 0x4f4b0
leaq 0x2a0c4(%rip), %rax     # 0x7aea3
movq %rax, -0x1cc8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x1cb8(%rbp), %rdx
movq -0x1cc0(%rbp), %rcx
movq -0x1cc8(%rbp), %r8
xorl %r9d, %r9d
callq 0x51f90
movq -0x10(%rbp), %rdi
addq $0x60, %rdi
movq -0x1cb8(%rbp), %rsi
addq $0x60, %rsi
movl $0x30, %edx
callq 0x3110
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x510b7
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x50e41
jmp 0x50e60
leaq 0x2d82c(%rip), %rdi     # 0x7e674
leaq 0x2d3fb(%rip), %rsi     # 0x7e24a
movl $0x138d, %edx           # imm = 0x138D
leaq 0x2da14(%rip), %rcx     # 0x7e86f
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rsi
callq 0x510c0
cmpl $0x0, %eax
jne 0x50ea7
leaq -0x20d0(%rbp), %rdi
leaq 0x2da1c(%rip), %rsi     # 0x7e8a3
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x20d0(%rbp), %rdx
callq *%rax
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x20d8(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20e0(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20d8(%rbp), %rsi
callq 0x511b0
movq -0x8(%rbp), %rdi
movq -0x20e0(%rbp), %rsi
callq 0x4f4b0
leaq 0x29fef(%rip), %rax     # 0x7aee2
movq %rax, -0x20e8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20d8(%rbp), %rdx
movq -0x20e0(%rbp), %rcx
movq -0x20e8(%rbp), %r8
xorl %r9d, %r9d
callq 0x52150
movq -0x10(%rbp), %rdi
addq $0x60, %rdi
movq -0x20d8(%rbp), %rsi
addq $0x60, %rsi
movl $0x30, %edx
callq 0x3110
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x510b7
movq -0x10(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x50f55
jmp 0x50f74
leaq 0x2d718(%rip), %rdi     # 0x7e674
leaq 0x2d2e7(%rip), %rsi     # 0x7e24a
movl $0x13a1, %edx           # imm = 0x13A1
leaq 0x2d900(%rip), %rcx     # 0x7e86f
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rsi
callq 0x510c0
cmpl $0x0, %eax
jne 0x50fbb
leaq -0x24f0(%rbp), %rdi
leaq 0x2d908(%rip), %rsi     # 0x7e8a3
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x24f0(%rbp), %rdx
callq *%rax
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x24f8(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x2500(%rbp)
movq -0x8(%rbp), %rdi
movq -0x24f8(%rbp), %rsi
callq 0x511b0
movq -0x8(%rbp), %rdi
movq -0x2500(%rbp), %rsi
callq 0x4f4b0
movq $0x0, -0x2508(%rbp)
cmpl $0xe19, -0x14(%rbp)     # imm = 0xE19
jne 0x51024
leaq 0x29f0c(%rip), %rax     # 0x7af27
movq %rax, -0x2508(%rbp)
jmp 0x5105e
cmpl $0xe1a, -0x14(%rbp)     # imm = 0xE1A
jne 0x5103d
leaq 0x29f3a(%rip), %rax     # 0x7af6e
movq %rax, -0x2508(%rbp)
jmp 0x5105c
leaq 0x21417(%rip), %rdi     # 0x7245b
leaq 0x2d1ff(%rip), %rsi     # 0x7e24a
movl $0x13ae, %edx           # imm = 0x13AE
leaq 0x2d818(%rip), %rcx     # 0x7e86f
callq 0x30a0
jmp 0x5105e
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x24f8(%rbp), %rdx
movq -0x2500(%rbp), %rcx
movq -0x2508(%rbp), %r8
xorl %r9d, %r9d
callq 0x52310
movq -0x10(%rbp), %rdi
addq $0x60, %rdi
movq -0x24f8(%rbp), %rsi
addq $0x60, %rsi
movl $0x30, %edx
callq 0x3110
movq -0x10(%rbp), %rax
movb $0x0, 0x70(%rax)
jmp 0x510b7
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x511b0
addq $0x2510, %rsp           # imm = 0x2510
popq %rbp
retq