// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/irgen_llvmir.c
// Function: ir_expr_comparison
static bool _ir_expr_comparison(
	IRGeneratorLlvmirContext *ctx,
	ResizableString *rstr,
	_ExprResult *expr_result,
	ParserASTNode *node
) {
	assert(ctx);
	assert(rstr);
	assert(expr_result);
	assert(node);

	switch (node->type) {
		case FE_NODE_EXPR_LT:
		case FE_NODE_EXPR_LE:
		case FE_NODE_EXPR_GT:
		case FE_NODE_EXPR_GE:
		case FE_NODE_EXPR_EQ:
		case FE_NODE_EXPR_NEQ: {
			assert(node->nchilds == 2);

			ParserSymbol *func_symbol = ctx->func_symbol;
			assert(func_symbol);

			ParserASTNode *node_lhs = node->childs[0];
			ParserASTNode *node_rhs = node->childs[1];

			ParserASTNode *node_type = FE_EXPR_AST_NODE_GET_TYPE_NODE(node);

			ParserASTNode *node_lhs_type = FE_EXPR_AST_NODE_GET_TYPE_NODE(node_lhs);
			ParserASTNode *node_rhs_type = FE_EXPR_AST_NODE_GET_TYPE_NODE(node_rhs);
			
			uint8_t lhs_type = FE_EXPR_AST_NODE_GET_TYPE(node_lhs);
			uint8_t rhs_type = FE_EXPR_AST_NODE_GET_TYPE(node_rhs);
			
			ParserASTNode *node_target_type = NULL;
			uint8_t target_type;
			if (lhs_type == FE_TYPE_POINTER) {
				node_target_type = node_lhs_type;
				target_type = lhs_type;
			} else if (rhs_type == FE_TYPE_POINTER) {
				node_target_type = node_rhs_type;
				target_type = rhs_type;
			} else {
				int32_t lhs_type_weight = fe_sem_get_primitive_type_weight(lhs_type);
				int32_t rhs_type_weight = fe_sem_get_primitive_type_weight(rhs_type); 
				if (lhs_type_weight > rhs_type_weight) {
					node_target_type = node_lhs_type;
				} else {
					node_target_type = node_rhs_type;
				}
				target_type = fe_sem_get_type_by_type_node(ctx->psrctx, node_target_type);
			}

			ResizableString rstr_type;
			rstr_init(&rstr_type);

			_ir_type(ctx, &rstr_type, node_type);

			_ExprResult result_lhs;
			_ExprResult result_rhs;
			_ExprResult result_lhs_casted;
			_ExprResult result_rhs_casted;

			_expr_result_init(&result_lhs);
			_expr_result_init(&result_rhs);
			_expr_result_init(&result_lhs_casted);
			_expr_result_init(&result_rhs_casted);

			_ir_expr(ctx, rstr, &result_lhs, node_lhs);
			rstr_append_with_rstr(rstr, &(result_lhs.rstr_for_result_ptr));
			rstr_append_with_rstr(rstr, &(result_lhs.rstr_for_result));

			_ir_expr(ctx, rstr, &result_rhs, node_rhs);
			rstr_append_with_rstr(rstr, &(result_rhs.rstr_for_result_ptr));
			rstr_append_with_rstr(rstr, &(result_rhs.rstr_for_result));

			_expr_result_cast(
				ctx,
				&result_lhs_casted,
				node_target_type,
				&result_lhs,
				node_lhs_type
			);
			rstr_append_with_rstr(rstr, &(result_lhs_casted.rstr_for_result_ptr));
			rstr_append_with_rstr(rstr, &(result_lhs_casted.rstr_for_result));

			_expr_result_cast(
				ctx,
				&result_rhs_casted,
				node_target_type,
				&result_rhs,
				node_rhs_type
			);
			rstr_append_with_rstr(rstr, &(result_rhs_casted.rstr_for_result_ptr));
			rstr_append_with_rstr(rstr, &(result_rhs_casted.rstr_for_result));

			ResizableString rstr_tmp_label_val;
			rstr_init(&rstr_tmp_label_val);
			_generate_func_tmp(ctx, func_symbol, &rstr_tmp_label_val);

			ResizableString rstr_tmp_label_val1;
			rstr_init(&rstr_tmp_label_val1);
			_generate_func_tmp(ctx, func_symbol, &rstr_tmp_label_val1);

			#define	_A(cmd)	\
				rstr_appendf(	\
					&(expr_result->rstr_for_result),	\
					"%s = "cmd" %s, %s\n",	\
					RSTR_CSTR(&rstr_tmp_label_val),	\
					RSTR_CSTR(&(result_lhs_casted.rstr_result)),	\
					RSTR_CSTR(&(result_rhs_casted.rstr_result_val))	\
				);

			switch (node->type) {
				case FE_NODE_EXPR_LT: {
					if (fe_sem_is_signed_type(target_type)) {
						_A("icmp slt")
					} else if (fe_sem_is_unsigned_type(target_type)) {
						_A("icmp ult")
					} else if (fe_sem_is_float_type(target_type)) {
						_A("fcmp olt")
					} else {
						assert(0);
					}
					break;
				}
				case FE_NODE_EXPR_LE: {
					if (fe_sem_is_signed_type(target_type)) {
						_A("icmp sle")
					} else if (fe_sem_is_unsigned_type(target_type)) {
						_A("icmp ule")
					} else if (fe_sem_is_float_type(target_type)) {
						_A("fcmp ole")
					} else {
						assert(0);
					}
					break;
				}
				case FE_NODE_EXPR_GT: {
					if (fe_sem_is_signed_type(target_type)) {
						_A("icmp sgt")
					} else if (fe_sem_is_unsigned_type(target_type)) {
						_A("icmp ugt")
					} else if (fe_sem_is_float_type(target_type)) {
						_A("fcmp ogt")
					} else {
						assert(0);
					}
					break;
				}
				case FE_NODE_EXPR_GE: {
					if (fe_sem_is_signed_type(target_type)) {
						_A("icmp sge")
					} else if (fe_sem_is_unsigned_type(target_type)) {
						_A("icmp uge")
					} else if (fe_sem_is_float_type(target_type)) {
						_A("fcmp oge")
					} else {
						assert(0);
					}
					break;
				}
				case FE_NODE_EXPR_EQ: {
					if (fe_sem_is_integer_type(target_type)
							|| fe_sem_is_pointer_type(target_type)) {
						_A("icmp eq")
					} else if (fe_sem_is_float_type(target_type)) {
						_A("fcmp oeq")
					} else {
						assert(0);
					}
					break;
				}
				case FE_NODE_EXPR_NEQ: {
					if (fe_sem_is_integer_type(target_type)
							|| fe_sem_is_pointer_type(target_type)) {
						_A("icmp ne")
					} else if (fe_sem_is_float_type(target_type)) {
						_A("fcmp one")
					} else {
						assert(0);
					}
					break;
				}
				default: {
					assert(0);
					break;
				}
			}

			#undef	_A

			rstr_appendf(
				&(expr_result->rstr_for_result),
				"%s = zext i1 %s to %s\n",
				RSTR_CSTR(&rstr_tmp_label_val1),
				RSTR_CSTR(&rstr_tmp_label_val),
				RSTR_CSTR(&rstr_type)
			);
			_expr_result_set_result(
				expr_result,
				RSTR_CSTR(&rstr_type),
				RSTR_CSTR(&rstr_tmp_label_val1)
			);

			rstr_free(&rstr_type);
			_expr_result_free(&result_lhs);
			_expr_result_free(&result_rhs);
			_expr_result_free(&result_lhs_casted);
			_expr_result_free(&result_rhs_casted);
			rstr_free(&rstr_tmp_label_val);
			rstr_free(&rstr_tmp_label_val1);

			return true;
		}
		default: {
			return false;
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x640, %rsp            # imm = 0x640
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x31994
jmp 0x319b3
leaq 0x4abbb(%rip), %rdi     # 0x7c556
leaq 0x4672e(%rip), %rsi     # 0x780d0
movl $0xefd, %edx            # imm = 0xEFD
leaq 0x47961(%rip), %rcx     # 0x7930f
callq 0x30a0
cmpq $0x0, -0x18(%rbp)
je 0x319bc
jmp 0x319db
leaq 0x4114b(%rip), %rdi     # 0x72b0e
leaq 0x46706(%rip), %rsi     # 0x780d0
movl $0xefe, %edx            # imm = 0xEFE
leaq 0x47939(%rip), %rcx     # 0x7930f
callq 0x30a0
cmpq $0x0, -0x20(%rbp)
je 0x319e4
jmp 0x31a03
leaq 0x43228(%rip), %rdi     # 0x74c13
leaq 0x466de(%rip), %rsi     # 0x780d0
movl $0xeff, %edx            # imm = 0xEFF
leaq 0x47911(%rip), %rcx     # 0x7930f
callq 0x30a0
cmpq $0x0, -0x28(%rbp)
je 0x31a0c
jmp 0x31a2b
leaq 0x445c0(%rip), %rdi     # 0x75fd3
leaq 0x466b6(%rip), %rsi     # 0x780d0
movl $0xf00, %edx            # imm = 0xF00
leaq 0x478e9(%rip), %rcx     # 0x7930f
callq 0x30a0
movq -0x28(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x2ac(%rbp)
addl $0xfffff190, %eax       # imm = 0xFFFFF190
subl $0x2, %eax
jb 0x31a59
jmp 0x31a43
movl -0x2ac(%rbp), %eax
addl $0xfffff180, %eax       # imm = 0xFFFFF180
subl $0x3, %eax
ja 0x32e1d
jmp 0x31a59
movq -0x28(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x31a65
jmp 0x31a84
leaq 0x4cc08(%rip), %rdi     # 0x7e674
leaq 0x4665d(%rip), %rsi     # 0x780d0
movl $0xf09, %edx            # imm = 0xF09
leaq 0x47890(%rip), %rcx     # 0x7930f
callq 0x30a0
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x31a99
jmp 0x31ab8
leaq 0x446d3(%rip), %rdi     # 0x76173
leaq 0x46629(%rip), %rsi     # 0x780d0
movl $0xf0c, %edx            # imm = 0xF0C
leaq 0x4785c(%rip), %rcx     # 0x7930f
callq 0x30a0
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x40(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0x58(%rbp)
movq -0x38(%rbp), %rax
movb 0x60(%rax), %al
movb %al, -0x59(%rbp)
movq -0x40(%rbp), %rax
movb 0x60(%rax), %al
movb %al, -0x5a(%rbp)
movq $0x0, -0x68(%rbp)
movzbl -0x59(%rbp), %eax
cmpl $0x10, %eax
jne 0x31b30
movq -0x50(%rbp), %rax
movq %rax, -0x68(%rbp)
movb -0x59(%rbp), %al
movb %al, -0x69(%rbp)
jmp 0x31b90
movzbl -0x5a(%rbp), %eax
cmpl $0x10, %eax
jne 0x31b49
movq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movb -0x5a(%rbp), %al
movb %al, -0x69(%rbp)
jmp 0x31b8e
movzbl -0x59(%rbp), %edi
callq 0x4d130
movl %eax, -0x70(%rbp)
movzbl -0x5a(%rbp), %edi
callq 0x4d130
movl %eax, -0x74(%rbp)
movl -0x70(%rbp), %eax
cmpl -0x74(%rbp), %eax
jle 0x31b73
movq -0x50(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x31b7b
movq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x68(%rbp), %rsi
callq 0x4d720
movb %al, -0x69(%rbp)
jmp 0x31b90
leaq -0x88(%rbp), %rdi
movq %rdi, -0x2f0(%rbp)
callq 0x8c90
movq -0x2f0(%rbp), %rsi
movq -0x10(%rbp), %rdi
movq -0x48(%rbp), %rdx
callq 0x299e0
leaq -0x108(%rbp), %rdi
movq %rdi, -0x2e8(%rbp)
callq 0x2a260
leaq -0x188(%rbp), %rdi
movq %rdi, -0x2d8(%rbp)
callq 0x2a260
leaq -0x208(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
callq 0x2a260
leaq -0x288(%rbp), %rdi
movq %rdi, -0x2d0(%rbp)
callq 0x2a260
movq -0x2e8(%rbp), %rdx
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x38(%rbp), %rcx
callq 0x2d590
movq -0x18(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x9100
movq -0x2e8(%rbp), %rsi
movq -0x18(%rbp), %rdi
callq 0x9100
movq -0x2d8(%rbp), %rdx
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x40(%rbp), %rcx
callq 0x2d590
movq -0x18(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x9100
movq -0x2d8(%rbp), %rsi
movq -0x18(%rbp), %rdi
callq 0x9100
movq -0x2e8(%rbp), %rcx
movq -0x2e0(%rbp), %rsi
movq -0x10(%rbp), %rdi
movq -0x68(%rbp), %rdx
movq -0x50(%rbp), %r8
callq 0x2a360
movq -0x18(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
callq 0x9100
movq -0x2e0(%rbp), %rsi
movq -0x18(%rbp), %rdi
callq 0x9100
movq -0x2d8(%rbp), %rcx
movq -0x2d0(%rbp), %rsi
movq -0x10(%rbp), %rdi
movq -0x68(%rbp), %rdx
movq -0x58(%rbp), %r8
callq 0x2a360
movq -0x18(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0x9100
movq -0x2d0(%rbp), %rsi
movq -0x18(%rbp), %rdi
callq 0x9100
leaq -0x298(%rbp), %rdi
movq %rdi, -0x2c8(%rbp)
callq 0x8c90
movq -0x2c8(%rbp), %rdx
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0x35980
leaq -0x2a8(%rbp), %rdi
movq %rdi, -0x2c0(%rbp)
callq 0x8c90
movq -0x2c0(%rbp), %rdx
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0x35980
movq -0x28(%rbp), %rax
movl (%rax), %eax
addl $0xfffff190, %eax       # imm = 0xFFFFF190
movl %eax, %ecx
movq %rcx, -0x2b8(%rbp)
subl $0x13, %eax
ja 0x32c64
movq -0x2b8(%rbp), %rax
leaq 0x462ea(%rip), %rcx     # 0x78054
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movzbl -0x69(%rbp), %edi
callq 0x4d310
testb $0x1, %al
jne 0x31d85
jmp 0x31e53
movq -0x20(%rbp), %rax
movq %rax, -0x2f8(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x31daa
leaq 0x45b14(%rip), %rax     # 0x778b5
movq %rax, -0x300(%rbp)
jmp 0x31db8
movq -0x290(%rbp), %rax
movq %rax, -0x300(%rbp)
movq -0x300(%rbp), %rax
movq %rax, -0x308(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x31de0
leaq 0x45ade(%rip), %rax     # 0x778b5
movq %rax, -0x310(%rbp)
jmp 0x31dee
movq -0x1e0(%rbp), %rax
movq %rax, -0x310(%rbp)
movq -0x310(%rbp), %rax
movq %rax, -0x318(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x31e16
leaq 0x45aa8(%rip), %rax     # 0x778b5
movq %rax, -0x320(%rbp)
jmp 0x31e24
movq -0x240(%rbp), %rax
movq %rax, -0x320(%rbp)
movq -0x318(%rbp), %rcx
movq -0x308(%rbp), %rdx
movq -0x2f8(%rbp), %rdi
movq -0x320(%rbp), %r8
leaq 0x47531(%rip), %rsi     # 0x79378
movb $0x0, %al
callq 0x94d0
jmp 0x32033
movzbl -0x69(%rbp), %edi
callq 0x4d360
testb $0x1, %al
jne 0x31e65
jmp 0x31f33
movq -0x20(%rbp), %rax
movq %rax, -0x328(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x31e8a
leaq 0x45a34(%rip), %rax     # 0x778b5
movq %rax, -0x330(%rbp)
jmp 0x31e98
movq -0x290(%rbp), %rax
movq %rax, -0x330(%rbp)
movq -0x330(%rbp), %rax
movq %rax, -0x338(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x31ec0
leaq 0x459fe(%rip), %rax     # 0x778b5
movq %rax, -0x340(%rbp)
jmp 0x31ece
movq -0x1e0(%rbp), %rax
movq %rax, -0x340(%rbp)
movq -0x340(%rbp), %rax
movq %rax, -0x348(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x31ef6
leaq 0x459c8(%rip), %rax     # 0x778b5
movq %rax, -0x350(%rbp)
jmp 0x31f04
movq -0x240(%rbp), %rax
movq %rax, -0x350(%rbp)
movq -0x348(%rbp), %rcx
movq -0x338(%rbp), %rdx
movq -0x328(%rbp), %rdi
movq -0x350(%rbp), %r8
leaq 0x47467(%rip), %rsi     # 0x7938e
movb $0x0, %al
callq 0x94d0
jmp 0x32031
movzbl -0x69(%rbp), %edi
callq 0x4d400
testb $0x1, %al
jne 0x31f45
jmp 0x32010
movq -0x20(%rbp), %rax
movq %rax, -0x358(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x31f6a
leaq 0x45954(%rip), %rax     # 0x778b5
movq %rax, -0x360(%rbp)
jmp 0x31f78
movq -0x290(%rbp), %rax
movq %rax, -0x360(%rbp)
movq -0x360(%rbp), %rax
movq %rax, -0x368(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x31fa0
leaq 0x4591e(%rip), %rax     # 0x778b5
movq %rax, -0x370(%rbp)
jmp 0x31fae
movq -0x1e0(%rbp), %rax
movq %rax, -0x370(%rbp)
movq -0x370(%rbp), %rax
movq %rax, -0x378(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x31fd6
leaq 0x458e8(%rip), %rax     # 0x778b5
movq %rax, -0x380(%rbp)
jmp 0x31fe4
movq -0x240(%rbp), %rax
movq %rax, -0x380(%rbp)
movq -0x378(%rbp), %rcx
movq -0x368(%rbp), %rdx
movq -0x358(%rbp), %rdi
movq -0x380(%rbp), %r8
leaq 0x4739d(%rip), %rsi     # 0x793a4
movb $0x0, %al
callq 0x94d0
jmp 0x3202f
leaq 0x40444(%rip), %rdi     # 0x7245b
leaq 0x460b2(%rip), %rsi     # 0x780d0
movl $0xf71, %edx            # imm = 0xF71
leaq 0x472e5(%rip), %rcx     # 0x7930f
callq 0x30a0
jmp 0x32031
jmp 0x32033
jmp 0x32c83
movzbl -0x69(%rbp), %edi
callq 0x4d310
testb $0x1, %al
jne 0x3204a
jmp 0x32118
movq -0x20(%rbp), %rax
movq %rax, -0x388(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x3206f
leaq 0x4584f(%rip), %rax     # 0x778b5
movq %rax, -0x390(%rbp)
jmp 0x3207d
movq -0x290(%rbp), %rax
movq %rax, -0x390(%rbp)
movq -0x390(%rbp), %rax
movq %rax, -0x398(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x320a5
leaq 0x45819(%rip), %rax     # 0x778b5
movq %rax, -0x3a0(%rbp)
jmp 0x320b3
movq -0x1e0(%rbp), %rax
movq %rax, -0x3a0(%rbp)
movq -0x3a0(%rbp), %rax
movq %rax, -0x3a8(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x320db
leaq 0x457e3(%rip), %rax     # 0x778b5
movq %rax, -0x3b0(%rbp)
jmp 0x320e9
movq -0x240(%rbp), %rax
movq %rax, -0x3b0(%rbp)
movq -0x3a8(%rbp), %rcx
movq -0x398(%rbp), %rdx
movq -0x388(%rbp), %rdi
movq -0x3b0(%rbp), %r8
leaq 0x472ae(%rip), %rsi     # 0x793ba
movb $0x0, %al
callq 0x94d0
jmp 0x322f8
movzbl -0x69(%rbp), %edi
callq 0x4d360
testb $0x1, %al
jne 0x3212a
jmp 0x321f8
movq -0x20(%rbp), %rax
movq %rax, -0x3b8(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x3214f
leaq 0x4576f(%rip), %rax     # 0x778b5
movq %rax, -0x3c0(%rbp)
jmp 0x3215d
movq -0x290(%rbp), %rax
movq %rax, -0x3c0(%rbp)
movq -0x3c0(%rbp), %rax
movq %rax, -0x3c8(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x32185
leaq 0x45739(%rip), %rax     # 0x778b5
movq %rax, -0x3d0(%rbp)
jmp 0x32193
movq -0x1e0(%rbp), %rax
movq %rax, -0x3d0(%rbp)
movq -0x3d0(%rbp), %rax
movq %rax, -0x3d8(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x321bb
leaq 0x45703(%rip), %rax     # 0x778b5
movq %rax, -0x3e0(%rbp)
jmp 0x321c9
movq -0x240(%rbp), %rax
movq %rax, -0x3e0(%rbp)
movq -0x3d8(%rbp), %rcx
movq -0x3c8(%rbp), %rdx
movq -0x3b8(%rbp), %rdi
movq -0x3e0(%rbp), %r8
leaq 0x471e4(%rip), %rsi     # 0x793d0
movb $0x0, %al
callq 0x94d0
jmp 0x322f6
movzbl -0x69(%rbp), %edi
callq 0x4d400
testb $0x1, %al
jne 0x3220a
jmp 0x322d5
movq -0x20(%rbp), %rax
movq %rax, -0x3e8(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x3222f
leaq 0x4568f(%rip), %rax     # 0x778b5
movq %rax, -0x3f0(%rbp)
jmp 0x3223d
movq -0x290(%rbp), %rax
movq %rax, -0x3f0(%rbp)
movq -0x3f0(%rbp), %rax
movq %rax, -0x3f8(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x32265
leaq 0x45659(%rip), %rax     # 0x778b5
movq %rax, -0x400(%rbp)
jmp 0x32273
movq -0x1e0(%rbp), %rax
movq %rax, -0x400(%rbp)
movq -0x400(%rbp), %rax
movq %rax, -0x408(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x3229b
leaq 0x45623(%rip), %rax     # 0x778b5
movq %rax, -0x410(%rbp)
jmp 0x322a9
movq -0x240(%rbp), %rax
movq %rax, -0x410(%rbp)
movq -0x408(%rbp), %rcx
movq -0x3f8(%rbp), %rdx
movq -0x3e8(%rbp), %rdi
movq -0x410(%rbp), %r8
leaq 0x4711a(%rip), %rsi     # 0x793e6
movb $0x0, %al
callq 0x94d0
jmp 0x322f4
leaq 0x4017f(%rip), %rdi     # 0x7245b
leaq 0x45ded(%rip), %rsi     # 0x780d0
movl $0xf7d, %edx            # imm = 0xF7D
leaq 0x47020(%rip), %rcx     # 0x7930f
callq 0x30a0
jmp 0x322f6
jmp 0x322f8
jmp 0x32c83
movzbl -0x69(%rbp), %edi
callq 0x4d310
testb $0x1, %al
jne 0x3230f
jmp 0x323dd
movq -0x20(%rbp), %rax
movq %rax, -0x418(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x32334
leaq 0x4558a(%rip), %rax     # 0x778b5
movq %rax, -0x420(%rbp)
jmp 0x32342
movq -0x290(%rbp), %rax
movq %rax, -0x420(%rbp)
movq -0x420(%rbp), %rax
movq %rax, -0x428(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x3236a
leaq 0x45554(%rip), %rax     # 0x778b5
movq %rax, -0x430(%rbp)
jmp 0x32378
movq -0x1e0(%rbp), %rax
movq %rax, -0x430(%rbp)
movq -0x430(%rbp), %rax
movq %rax, -0x438(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x323a0
leaq 0x4551e(%rip), %rax     # 0x778b5
movq %rax, -0x440(%rbp)
jmp 0x323ae
movq -0x240(%rbp), %rax
movq %rax, -0x440(%rbp)
movq -0x438(%rbp), %rcx
movq -0x428(%rbp), %rdx
movq -0x418(%rbp), %rdi
movq -0x440(%rbp), %r8
leaq 0x4702b(%rip), %rsi     # 0x793fc
movb $0x0, %al
callq 0x94d0
jmp 0x325bd
movzbl -0x69(%rbp), %edi
callq 0x4d360
testb $0x1, %al
jne 0x323ef
jmp 0x324bd
movq -0x20(%rbp), %rax
movq %rax, -0x448(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x32414
leaq 0x454aa(%rip), %rax     # 0x778b5
movq %rax, -0x450(%rbp)
jmp 0x32422
movq -0x290(%rbp), %rax
movq %rax, -0x450(%rbp)
movq -0x450(%rbp), %rax
movq %rax, -0x458(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x3244a
leaq 0x45474(%rip), %rax     # 0x778b5
movq %rax, -0x460(%rbp)
jmp 0x32458
movq -0x1e0(%rbp), %rax
movq %rax, -0x460(%rbp)
movq -0x460(%rbp), %rax
movq %rax, -0x468(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x32480
leaq 0x4543e(%rip), %rax     # 0x778b5
movq %rax, -0x470(%rbp)
jmp 0x3248e
movq -0x240(%rbp), %rax
movq %rax, -0x470(%rbp)
movq -0x468(%rbp), %rcx
movq -0x458(%rbp), %rdx
movq -0x448(%rbp), %rdi
movq -0x470(%rbp), %r8
leaq 0x46f61(%rip), %rsi     # 0x79412
movb $0x0, %al
callq 0x94d0
jmp 0x325bb
movzbl -0x69(%rbp), %edi
callq 0x4d400
testb $0x1, %al
jne 0x324cf
jmp 0x3259a
movq -0x20(%rbp), %rax
movq %rax, -0x478(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x324f4
leaq 0x453ca(%rip), %rax     # 0x778b5
movq %rax, -0x480(%rbp)
jmp 0x32502
movq -0x290(%rbp), %rax
movq %rax, -0x480(%rbp)
movq -0x480(%rbp), %rax
movq %rax, -0x488(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x3252a
leaq 0x45394(%rip), %rax     # 0x778b5
movq %rax, -0x490(%rbp)
jmp 0x32538
movq -0x1e0(%rbp), %rax
movq %rax, -0x490(%rbp)
movq -0x490(%rbp), %rax
movq %rax, -0x498(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x32560
leaq 0x4535e(%rip), %rax     # 0x778b5
movq %rax, -0x4a0(%rbp)
jmp 0x3256e
movq -0x240(%rbp), %rax
movq %rax, -0x4a0(%rbp)
movq -0x498(%rbp), %rcx
movq -0x488(%rbp), %rdx
movq -0x478(%rbp), %rdi
movq -0x4a0(%rbp), %r8
leaq 0x46e97(%rip), %rsi     # 0x79428
movb $0x0, %al
callq 0x94d0
jmp 0x325b9
leaq 0x3feba(%rip), %rdi     # 0x7245b
leaq 0x45b28(%rip), %rsi     # 0x780d0
movl $0xf89, %edx            # imm = 0xF89
leaq 0x46d5b(%rip), %rcx     # 0x7930f
callq 0x30a0
jmp 0x325bb
jmp 0x325bd
jmp 0x32c83
movzbl -0x69(%rbp), %edi
callq 0x4d310
testb $0x1, %al
jne 0x325d4
jmp 0x326a2
movq -0x20(%rbp), %rax
movq %rax, -0x4a8(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x325f9
leaq 0x452c5(%rip), %rax     # 0x778b5
movq %rax, -0x4b0(%rbp)
jmp 0x32607
movq -0x290(%rbp), %rax
movq %rax, -0x4b0(%rbp)
movq -0x4b0(%rbp), %rax
movq %rax, -0x4b8(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x3262f
leaq 0x4528f(%rip), %rax     # 0x778b5
movq %rax, -0x4c0(%rbp)
jmp 0x3263d
movq -0x1e0(%rbp), %rax
movq %rax, -0x4c0(%rbp)
movq -0x4c0(%rbp), %rax
movq %rax, -0x4c8(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x32665
leaq 0x45259(%rip), %rax     # 0x778b5
movq %rax, -0x4d0(%rbp)
jmp 0x32673
movq -0x240(%rbp), %rax
movq %rax, -0x4d0(%rbp)
movq -0x4c8(%rbp), %rcx
movq -0x4b8(%rbp), %rdx
movq -0x4a8(%rbp), %rdi
movq -0x4d0(%rbp), %r8
leaq 0x46da8(%rip), %rsi     # 0x7943e
movb $0x0, %al
callq 0x94d0
jmp 0x32882
movzbl -0x69(%rbp), %edi
callq 0x4d360
testb $0x1, %al
jne 0x326b4
jmp 0x32782
movq -0x20(%rbp), %rax
movq %rax, -0x4d8(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x326d9
leaq 0x451e5(%rip), %rax     # 0x778b5
movq %rax, -0x4e0(%rbp)
jmp 0x326e7
movq -0x290(%rbp), %rax
movq %rax, -0x4e0(%rbp)
movq -0x4e0(%rbp), %rax
movq %rax, -0x4e8(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x3270f
leaq 0x451af(%rip), %rax     # 0x778b5
movq %rax, -0x4f0(%rbp)
jmp 0x3271d
movq -0x1e0(%rbp), %rax
movq %rax, -0x4f0(%rbp)
movq -0x4f0(%rbp), %rax
movq %rax, -0x4f8(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x32745
leaq 0x45179(%rip), %rax     # 0x778b5
movq %rax, -0x500(%rbp)
jmp 0x32753
movq -0x240(%rbp), %rax
movq %rax, -0x500(%rbp)
movq -0x4f8(%rbp), %rcx
movq -0x4e8(%rbp), %rdx
movq -0x4d8(%rbp), %rdi
movq -0x500(%rbp), %r8
leaq 0x46cde(%rip), %rsi     # 0x79454
movb $0x0, %al
callq 0x94d0
jmp 0x32880
movzbl -0x69(%rbp), %edi
callq 0x4d400
testb $0x1, %al
jne 0x32794
jmp 0x3285f
movq -0x20(%rbp), %rax
movq %rax, -0x508(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x327b9
leaq 0x45105(%rip), %rax     # 0x778b5
movq %rax, -0x510(%rbp)
jmp 0x327c7
movq -0x290(%rbp), %rax
movq %rax, -0x510(%rbp)
movq -0x510(%rbp), %rax
movq %rax, -0x518(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x327ef
leaq 0x450cf(%rip), %rax     # 0x778b5
movq %rax, -0x520(%rbp)
jmp 0x327fd
movq -0x1e0(%rbp), %rax
movq %rax, -0x520(%rbp)
movq -0x520(%rbp), %rax
movq %rax, -0x528(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x32825
leaq 0x45099(%rip), %rax     # 0x778b5
movq %rax, -0x530(%rbp)
jmp 0x32833
movq -0x240(%rbp), %rax
movq %rax, -0x530(%rbp)
movq -0x528(%rbp), %rcx
movq -0x518(%rbp), %rdx
movq -0x508(%rbp), %rdi
movq -0x530(%rbp), %r8
leaq 0x46c14(%rip), %rsi     # 0x7946a
movb $0x0, %al
callq 0x94d0
jmp 0x3287e
leaq 0x3fbf5(%rip), %rdi     # 0x7245b
leaq 0x45863(%rip), %rsi     # 0x780d0
movl $0xf95, %edx            # imm = 0xF95
leaq 0x46a96(%rip), %rcx     # 0x7930f
callq 0x30a0
jmp 0x32880
jmp 0x32882
jmp 0x32c83
movzbl -0x69(%rbp), %edi
callq 0x4d3b0
testb $0x1, %al
jne 0x328a6
movzbl -0x69(%rbp), %edi
callq 0x4d4a0
testb $0x1, %al
jne 0x328a6
jmp 0x32974
movq -0x20(%rbp), %rax
movq %rax, -0x538(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x328cb
leaq 0x44ff3(%rip), %rax     # 0x778b5
movq %rax, -0x540(%rbp)
jmp 0x328d9
movq -0x290(%rbp), %rax
movq %rax, -0x540(%rbp)
movq -0x540(%rbp), %rax
movq %rax, -0x548(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x32901
leaq 0x44fbd(%rip), %rax     # 0x778b5
movq %rax, -0x550(%rbp)
jmp 0x3290f
movq -0x1e0(%rbp), %rax
movq %rax, -0x550(%rbp)
movq -0x550(%rbp), %rax
movq %rax, -0x558(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x32937
leaq 0x44f87(%rip), %rax     # 0x778b5
movq %rax, -0x560(%rbp)
jmp 0x32945
movq -0x240(%rbp), %rax
movq %rax, -0x560(%rbp)
movq -0x558(%rbp), %rcx
movq -0x548(%rbp), %rdx
movq -0x538(%rbp), %rdi
movq -0x560(%rbp), %r8
leaq 0x46b18(%rip), %rsi     # 0x79480
movb $0x0, %al
callq 0x94d0
jmp 0x32a72
movzbl -0x69(%rbp), %edi
callq 0x4d400
testb $0x1, %al
jne 0x32986
jmp 0x32a51
movq -0x20(%rbp), %rax
movq %rax, -0x568(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x329ab
leaq 0x44f13(%rip), %rax     # 0x778b5
movq %rax, -0x570(%rbp)
jmp 0x329b9
movq -0x290(%rbp), %rax
movq %rax, -0x570(%rbp)
movq -0x570(%rbp), %rax
movq %rax, -0x578(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x329e1
leaq 0x44edd(%rip), %rax     # 0x778b5
movq %rax, -0x580(%rbp)
jmp 0x329ef
movq -0x1e0(%rbp), %rax
movq %rax, -0x580(%rbp)
movq -0x580(%rbp), %rax
movq %rax, -0x588(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x32a17
leaq 0x44ea7(%rip), %rax     # 0x778b5
movq %rax, -0x590(%rbp)
jmp 0x32a25
movq -0x240(%rbp), %rax
movq %rax, -0x590(%rbp)
movq -0x588(%rbp), %rcx
movq -0x578(%rbp), %rdx
movq -0x568(%rbp), %rdi
movq -0x590(%rbp), %r8
leaq 0x46a4d(%rip), %rsi     # 0x79495
movb $0x0, %al
callq 0x94d0
jmp 0x32a70
leaq 0x3fa03(%rip), %rdi     # 0x7245b
leaq 0x45671(%rip), %rsi     # 0x780d0
movl $0xfa0, %edx            # imm = 0xFA0
leaq 0x468a4(%rip), %rcx     # 0x7930f
callq 0x30a0
jmp 0x32a72
jmp 0x32c83
movzbl -0x69(%rbp), %edi
callq 0x4d3b0
testb $0x1, %al
jne 0x32a96
movzbl -0x69(%rbp), %edi
callq 0x4d4a0
testb $0x1, %al
jne 0x32a96
jmp 0x32b64
movq -0x20(%rbp), %rax
movq %rax, -0x598(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x32abb
leaq 0x44e03(%rip), %rax     # 0x778b5
movq %rax, -0x5a0(%rbp)
jmp 0x32ac9
movq -0x290(%rbp), %rax
movq %rax, -0x5a0(%rbp)
movq -0x5a0(%rbp), %rax
movq %rax, -0x5a8(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x32af1
leaq 0x44dcd(%rip), %rax     # 0x778b5
movq %rax, -0x5b0(%rbp)
jmp 0x32aff
movq -0x1e0(%rbp), %rax
movq %rax, -0x5b0(%rbp)
movq -0x5b0(%rbp), %rax
movq %rax, -0x5b8(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x32b27
leaq 0x44d97(%rip), %rax     # 0x778b5
movq %rax, -0x5c0(%rbp)
jmp 0x32b35
movq -0x240(%rbp), %rax
movq %rax, -0x5c0(%rbp)
movq -0x5b8(%rbp), %rcx
movq -0x5a8(%rbp), %rdx
movq -0x598(%rbp), %rdi
movq -0x5c0(%rbp), %r8
leaq 0x46953(%rip), %rsi     # 0x794ab
movb $0x0, %al
callq 0x94d0
jmp 0x32c62
movzbl -0x69(%rbp), %edi
callq 0x4d400
testb $0x1, %al
jne 0x32b76
jmp 0x32c41
movq -0x20(%rbp), %rax
movq %rax, -0x5c8(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x32b9b
leaq 0x44d23(%rip), %rax     # 0x778b5
movq %rax, -0x5d0(%rbp)
jmp 0x32ba9
movq -0x290(%rbp), %rax
movq %rax, -0x5d0(%rbp)
movq -0x5d0(%rbp), %rax
movq %rax, -0x5d8(%rbp)
cmpq $0x0, -0x1e0(%rbp)
jne 0x32bd1
leaq 0x44ced(%rip), %rax     # 0x778b5
movq %rax, -0x5e0(%rbp)
jmp 0x32bdf
movq -0x1e0(%rbp), %rax
movq %rax, -0x5e0(%rbp)
movq -0x5e0(%rbp), %rax
movq %rax, -0x5e8(%rbp)
cmpq $0x0, -0x240(%rbp)
jne 0x32c07
leaq 0x44cb7(%rip), %rax     # 0x778b5
movq %rax, -0x5f0(%rbp)
jmp 0x32c15
movq -0x240(%rbp), %rax
movq %rax, -0x5f0(%rbp)
movq -0x5e8(%rbp), %rcx
movq -0x5d8(%rbp), %rdx
movq -0x5c8(%rbp), %rdi
movq -0x5f0(%rbp), %r8
leaq 0x46888(%rip), %rsi     # 0x794c0
movb $0x0, %al
callq 0x94d0
jmp 0x32c60
leaq 0x3f813(%rip), %rdi     # 0x7245b
leaq 0x45481(%rip), %rsi     # 0x780d0
movl $0xfab, %edx            # imm = 0xFAB
leaq 0x466b4(%rip), %rcx     # 0x7930f
callq 0x30a0
jmp 0x32c62
jmp 0x32c83
leaq 0x3f7f0(%rip), %rdi     # 0x7245b
leaq 0x4545e(%rip), %rsi     # 0x780d0
movl $0xfb0, %edx            # imm = 0xFB0
leaq 0x46691(%rip), %rcx     # 0x7930f
callq 0x30a0
movq -0x20(%rbp), %rax
movq %rax, -0x5f8(%rbp)
cmpq $0x0, -0x2a0(%rbp)
jne 0x32ca8
leaq 0x44c16(%rip), %rax     # 0x778b5
movq %rax, -0x600(%rbp)
jmp 0x32cb6
movq -0x2a0(%rbp), %rax
movq %rax, -0x600(%rbp)
movq -0x600(%rbp), %rax
movq %rax, -0x608(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x32cde
leaq 0x44be0(%rip), %rax     # 0x778b5
movq %rax, -0x610(%rbp)
jmp 0x32cec
movq -0x290(%rbp), %rax
movq %rax, -0x610(%rbp)
movq -0x610(%rbp), %rax
movq %rax, -0x618(%rbp)
cmpq $0x0, -0x80(%rbp)
jne 0x32d11
leaq 0x44bad(%rip), %rax     # 0x778b5
movq %rax, -0x620(%rbp)
jmp 0x32d1c
movq -0x80(%rbp), %rax
movq %rax, -0x620(%rbp)
movq -0x618(%rbp), %rcx
movq -0x608(%rbp), %rdx
movq -0x5f8(%rbp), %rdi
movq -0x620(%rbp), %r8
leaq 0x45ed1(%rip), %rsi     # 0x78c10
movb $0x0, %al
callq 0x94d0
movq -0x20(%rbp), %rax
movq %rax, -0x628(%rbp)
cmpq $0x0, -0x80(%rbp)
jne 0x32d68
leaq 0x44b56(%rip), %rax     # 0x778b5
movq %rax, -0x630(%rbp)
jmp 0x32d73
movq -0x80(%rbp), %rax
movq %rax, -0x630(%rbp)
movq -0x630(%rbp), %rax
movq %rax, -0x638(%rbp)
cmpq $0x0, -0x2a0(%rbp)
jne 0x32d9b
leaq 0x44b23(%rip), %rax     # 0x778b5
movq %rax, -0x640(%rbp)
jmp 0x32da9
movq -0x2a0(%rbp), %rax
movq %rax, -0x640(%rbp)
movq -0x638(%rbp), %rsi
movq -0x628(%rbp), %rdi
movq -0x640(%rbp), %rdx
callq 0x358a0
leaq -0x88(%rbp), %rdi
callq 0x9310
leaq -0x108(%rbp), %rdi
callq 0x2c6a0
leaq -0x188(%rbp), %rdi
callq 0x2c6a0
leaq -0x208(%rbp), %rdi
callq 0x2c6a0
leaq -0x288(%rbp), %rdi
callq 0x2c6a0
leaq -0x298(%rbp), %rdi
callq 0x9310
leaq -0x2a8(%rbp), %rdi
callq 0x9310
movb $0x1, -0x1(%rbp)
jmp 0x32e21
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x640, %rsp            # imm = 0x640
popq %rbp
retq
nop