// File: YSRKEN[P]Shioi/I401/main.cpp
// Function: Board::NegaMax(Stone, unsigned long, int, int)
int NegaMax(const Stone turn, const size_t depth, int /*alpha*/, int beta) {
		if (FindGorenMove(turn).second) return beta;
		int max_score = -kScoreInf2;
		if (depth == 0) {
			// Find enemy's Shioi(Pre-search)
			if (turn == Stone::Black) {
				auto range = GetRange();
				for (size_t y : rep(range[1], range[3])) {
					for (size_t x : rep(range[0], range[2])) {
						size_t p = ToPosition(x, y);
						if (board_[p] != Stone::None) continue;
						// Judge valid move
						bool cho_ren_flg = false;
						size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
						for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
							auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
							if (Board_helper::IsChorenB(move_pattern)) {
								cho_ren_flg = true;
								break;
							}
							size_t s4s, s4n, s3;
							std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
							sum_4_strong += s4s;
							sum_4_normal += s4n;
							sum_3 += s3;
						}
						if (cho_ren_flg || sum_4_strong + sum_4_normal >= 2 || sum_3 >= 2) continue;
						if (sum_4_strong == 1) return beta;
						int score;
						/* // Find enemy's Shioi
						board_[p] = turn;
						auto result = FindShioiMove(EnemyTurn(turn), kShioiDepth3);
						board_[p] = Stone::None;
						if (result.second) {
							// Don't block Shioi
							score = -kScoreInf;
						}
						else {*/
							// Normal Score
							score = CalcScore(p, turn);
						//}
						if (max_score < score) {
							max_score = score;
							if (max_score >= beta) {
								return beta;
							}
						}
					}
				}
			}
			else {
				auto range = GetRange();
				for (size_t y : rep(range[1], range[3])) {
					for (size_t x : rep(range[0], range[2])) {
						size_t p = ToPosition(x, y);
						if (board_[p] != Stone::None) continue;
						size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
						for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
							auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
							if (Board_helper::IsChorenB(move_pattern)) return beta;
							size_t s4s, s4n, s3;
							std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
							sum_4_strong += s4s;
							sum_4_normal += s4n;
							sum_3 += s3;
						}
						if (sum_4_strong >= 1 || sum_4_normal >= 2) return beta;
						int score;
						/*// Find enemy's Shioi
						board_[p] = turn;
						auto result = FindShioiMove(EnemyTurn(turn), kShioiDepth3);
						board_[p] = Stone::None;
						if (result.second) {
							// Don't block Shioi
							score = -kScoreInf;
						}
						else {*/
							// Normal Score
							score = CalcScore(p, turn);
						//}
						if (max_score < score) {
							max_score = score;
							if (max_score >= beta) {
								return beta;
							}
						}
					}
				}
			}
			return max_score;
		}
		else {
			vector<Score> next_move2;
			auto range = GetRange();
			if (turn == Stone::Black) {
				for (size_t y : rep(range[1], range[3])) {
					for (size_t x : rep(range[0], range[2])) {
						size_t p = ToPosition(x, y);
						if (board_[p] != Stone::None) continue;
						// Judge valid move
						bool cho_ren_flg = false;
						size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
						for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
							auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
							if (Board_helper::IsChorenB(move_pattern)) {
								cho_ren_flg = true;
								break;
							}
							size_t s4s, s4n, s3;
							std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
							sum_4_strong += s4s;
							sum_4_normal += s4n;
							sum_3 += s3;
						}
						if (cho_ren_flg || sum_4_strong + sum_4_normal >= 2 || sum_3 >= 2) continue;
						if (sum_4_strong == 1) return kScoreInf;
						/*// Find enemy's Shioi
						board_[p] = Stone::Black;
						auto result = FindShioiMove(Stone::White, kShioiDepth3);
						board_[p] = Stone::None;
						if (result.second) {
							// Don't block Shioi
							next_move2.emplace_back(p, -kScoreInf);
						}
						else {*/
							// Normal Score
							next_move2.emplace_back(p, kTenGenDist[p]);
						//}
					}
				}
			}
			else {
				for (size_t y : rep(range[1], range[3])) {
					for (size_t x : rep(range[0], range[2])) {
						size_t p = ToPosition(x, y);
						if (board_[p] != Stone::None) continue;
						size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
						for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
							auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
							if (Board_helper::IsChorenB(move_pattern)) return kScoreInf;
							size_t s4s, s4n, s3;
							std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
							sum_4_strong += s4s;
							sum_4_normal += s4n;
							sum_3 += s3;
						}
						if (sum_4_strong >= 1 || sum_4_normal >= 2) return kScoreInf;
						/*// Find enemy's Shioi
						board_[p] = Stone::White;
						auto result = FindShioiMove(Stone::Black, kShioiDepth3);
						board_[p] = Stone::None;
						if (result.second) {
							// Don't block Shioi
							next_move2.emplace_back(p, -kScoreInf);
						}
						else {*/
							// Normal Score
							next_move2.emplace_back(p, kTenGenDist[p]);
						//}
					}
				}
			}
			std::sort(next_move2.begin(), next_move2.end(), [](const Score &a, const Score &b) {return a.second > b.second; });
			for (auto &it : next_move2) {
				board_[it.first] = turn;
				auto score = -NegaMax(EnemyTurn(turn), depth - 1, -kScoreInf2, kScoreInf2) + CalcScore(it.first, turn);
				board_[it.first] = Stone::None;
				if (max_score < score) {
					max_score = score;
					if (max_score >= beta) {
						return beta;
					}
				}
			}
			return max_score;
		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x770, %rsp            # imm = 0x770
movb %sil, %al
movq %rdi, -0x10(%rbp)
movb %al, -0x11(%rbp)
movq %rdx, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movl %r8d, -0x28(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x708(%rbp)
movzbl -0x11(%rbp), %esi
callq 0x9ae0
movb %dl, -0x40(%rbp)
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x38(%rbp)
movb -0x40(%rbp), %al
movb %al, -0x30(%rbp)
testb $0x1, -0x30(%rbp)
je 0x194da
movl -0x28(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x1a495
movl $0xfffffc17, -0x4c(%rbp) # imm = 0xFFFFFC17
cmpq $0x0, -0x20(%rbp)
jne 0x19bbf
movzbl -0x11(%rbp), %eax
cmpl $0x1, %eax
jne 0x1985e
movq -0x708(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x126b0
leaq -0x70(%rbp), %rdi
movl $0x1, %esi
callq 0x12a70
movq %rax, -0x710(%rbp)
leaq -0x70(%rbp), %rdi
movl $0x3, %esi
callq 0x12a70
movq -0x710(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0x88(%rbp)
movq %rdx, -0x80(%rbp)
leaq -0x88(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rdi
callq 0x54e0
movq %rax, -0x90(%rbp)
movq -0x78(%rbp), %rdi
callq 0x5510
movq %rax, -0x98(%rbp)
leaq -0x90(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0x1958d
jmp 0x19859
leaq -0x90(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0xa0(%rbp)
leaq -0x70(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x12a70
movq %rax, -0x718(%rbp)
leaq -0x70(%rbp), %rdi
movl $0x2, %esi
callq 0x12a70
movq -0x718(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0xb8(%rbp)
movq %rdx, -0xb0(%rbp)
leaq -0xb8(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rdi
callq 0x54e0
movq %rax, -0xc0(%rbp)
movq -0xa8(%rbp), %rdi
callq 0x5510
movq %rax, -0xc8(%rbp)
leaq -0xc0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0x19632
jmp 0x19846
leaq -0xc0(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
movq -0xa0(%rbp), %rsi
callq 0x3100
movq -0x708(%rbp), %rdi
movq %rax, -0xd8(%rbp)
movq -0xd8(%rbp), %rsi
callq 0x5590
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0x19682
jmp 0x19835
movb $0x0, -0xd9(%rbp)
movq $0x0, -0xe8(%rbp)
movq $0x0, -0xf0(%rbp)
movq $0x0, -0xf8(%rbp)
movb $0x0, -0xf9(%rbp)
movzbl -0xf9(%rbp), %eax
cmpl $0x4, %eax
jge 0x197af
movq -0x708(%rbp), %rsi
movq -0xd8(%rbp), %rdx
leaq -0x1a0(%rbp), %rdi
movzbl -0xf9(%rbp), %ecx
callq 0xed20
leaq -0x1a0(%rbp), %rdi
callq 0xef70
testb $0x1, %al
jne 0x196f4
jmp 0x19700
movb $0x1, -0xd9(%rbp)
jmp 0x197af
movq -0x708(%rbp), %rsi
movq -0xd8(%rbp), %rcx
leaq -0x1d0(%rbp), %rdi
leaq -0x1a0(%rbp), %rdx
movzbl -0xf9(%rbp), %r8d
callq 0xf430
leaq -0x1e8(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
leaq -0x1b0(%rbp), %rdx
leaq -0x1b8(%rbp), %rcx
callq 0x11390
leaq -0x1e8(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x113d0
movq -0x1a8(%rbp), %rax
addq -0xe8(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0x1b0(%rbp), %rax
addq -0xf0(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq -0x1b8(%rbp), %rax
addq -0xf8(%rbp), %rax
movq %rax, -0xf8(%rbp)
movb -0xf9(%rbp), %al
addb $0x1, %al
movb %al, -0xf9(%rbp)
jmp 0x196b1
testb $0x1, -0xd9(%rbp)
jne 0x197d6
movq -0xe8(%rbp), %rax
addq -0xf0(%rbp), %rax
cmpq $0x2, %rax
jae 0x197d6
cmpq $0x2, -0xf8(%rbp)
jb 0x197d8
jmp 0x19835
cmpq $0x1, -0xe8(%rbp)
jne 0x197ed
movl -0x28(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x1a495
movq -0x708(%rbp), %rdi
movq -0xd8(%rbp), %rsi
movzbl -0x11(%rbp), %edx
callq 0x18d30
movl %eax, -0x1ec(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x1ec(%rbp), %eax
jge 0x19833
movl -0x1ec(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x28(%rbp), %eax
jl 0x19831
movl -0x28(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x1a495
jmp 0x19833
jmp 0x19835
leaq -0xc0(%rbp), %rdi
callq 0x55c0
jmp 0x19616
jmp 0x19848
leaq -0x90(%rbp), %rdi
callq 0x55c0
jmp 0x19571
jmp 0x19bb4
movq -0x708(%rbp), %rsi
leaq -0x210(%rbp), %rdi
callq 0x126b0
leaq -0x210(%rbp), %rdi
movl $0x1, %esi
callq 0x12a70
movq %rax, -0x720(%rbp)
leaq -0x210(%rbp), %rdi
movl $0x3, %esi
callq 0x12a70
movq -0x720(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0x228(%rbp)
movq %rdx, -0x220(%rbp)
leaq -0x228(%rbp), %rax
movq %rax, -0x218(%rbp)
movq -0x218(%rbp), %rdi
callq 0x54e0
movq %rax, -0x230(%rbp)
movq -0x218(%rbp), %rdi
callq 0x5510
movq %rax, -0x238(%rbp)
leaq -0x230(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0x19907
jmp 0x19bb2
leaq -0x230(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0x240(%rbp)
leaq -0x210(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x12a70
movq %rax, -0x728(%rbp)
leaq -0x210(%rbp), %rdi
movl $0x2, %esi
callq 0x12a70
movq -0x728(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0x258(%rbp)
movq %rdx, -0x250(%rbp)
leaq -0x258(%rbp), %rax
movq %rax, -0x248(%rbp)
movq -0x248(%rbp), %rdi
callq 0x54e0
movq %rax, -0x260(%rbp)
movq -0x248(%rbp), %rdi
callq 0x5510
movq %rax, -0x268(%rbp)
leaq -0x260(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0x199b2
jmp 0x19b9f
leaq -0x260(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0x270(%rbp)
movq -0x270(%rbp), %rdi
movq -0x240(%rbp), %rsi
callq 0x3100
movq -0x708(%rbp), %rdi
movq %rax, -0x278(%rbp)
movq -0x278(%rbp), %rsi
callq 0x5590
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0x19a02
jmp 0x19b8e
movq $0x0, -0x280(%rbp)
movq $0x0, -0x288(%rbp)
movq $0x0, -0x290(%rbp)
movb $0x0, -0x291(%rbp)
movzbl -0x291(%rbp), %eax
cmpl $0x4, %eax
jge 0x19b27
movq -0x708(%rbp), %rsi
movq -0x278(%rbp), %rdx
leaq -0x338(%rbp), %rdi
movzbl -0x291(%rbp), %ecx
callq 0xed20
leaq -0x338(%rbp), %rdi
callq 0xef70
testb $0x1, %al
jne 0x19a6d
jmp 0x19a78
movl -0x28(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x1a495
movq -0x708(%rbp), %rsi
movq -0x278(%rbp), %rcx
leaq -0x368(%rbp), %rdi
leaq -0x338(%rbp), %rdx
movzbl -0x291(%rbp), %r8d
callq 0xf430
leaq -0x380(%rbp), %rdi
leaq -0x340(%rbp), %rsi
leaq -0x348(%rbp), %rdx
leaq -0x350(%rbp), %rcx
callq 0x11390
leaq -0x380(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x113d0
movq -0x340(%rbp), %rax
addq -0x280(%rbp), %rax
movq %rax, -0x280(%rbp)
movq -0x348(%rbp), %rax
addq -0x288(%rbp), %rax
movq %rax, -0x288(%rbp)
movq -0x350(%rbp), %rax
addq -0x290(%rbp), %rax
movq %rax, -0x290(%rbp)
movb -0x291(%rbp), %al
addb $0x1, %al
movb %al, -0x291(%rbp)
jmp 0x19a2a
cmpq $0x1, -0x280(%rbp)
jae 0x19b3b
cmpq $0x2, -0x288(%rbp)
jb 0x19b46
movl -0x28(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x1a495
movq -0x708(%rbp), %rdi
movq -0x278(%rbp), %rsi
movzbl -0x11(%rbp), %edx
callq 0x18d30
movl %eax, -0x384(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x384(%rbp), %eax
jge 0x19b8c
movl -0x384(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x28(%rbp), %eax
jl 0x19b8a
movl -0x28(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x1a495
jmp 0x19b8c
jmp 0x19b8e
leaq -0x260(%rbp), %rdi
callq 0x55c0
jmp 0x19996
jmp 0x19ba1
leaq -0x230(%rbp), %rdi
callq 0x55c0
jmp 0x198eb
jmp 0x19bb4
movl -0x4c(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x1a495
leaq -0x3a0(%rbp), %rdi
callq 0x19260
movq -0x708(%rbp), %rsi
leaq -0x3c0(%rbp), %rdi
callq 0x126b0
movzbl -0x11(%rbp), %eax
cmpl $0x1, %eax
jne 0x19f84
leaq -0x3c0(%rbp), %rdi
movl $0x1, %esi
callq 0x12a70
movq %rax, -0x730(%rbp)
leaq -0x3c0(%rbp), %rdi
movl $0x3, %esi
callq 0x12a70
movq -0x730(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0x3d8(%rbp)
movq %rdx, -0x3d0(%rbp)
leaq -0x3d8(%rbp), %rax
movq %rax, -0x3c8(%rbp)
movq -0x3c8(%rbp), %rdi
callq 0x54e0
movq %rax, -0x3e0(%rbp)
movq -0x3c8(%rbp), %rdi
callq 0x5510
movq %rax, -0x3e8(%rbp)
leaq -0x3e0(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0x19c81
jmp 0x19f7f
leaq -0x3e0(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0x3f0(%rbp)
leaq -0x3c0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x12a70
movq %rax, -0x738(%rbp)
leaq -0x3c0(%rbp), %rdi
movl $0x2, %esi
callq 0x12a70
movq -0x738(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0x408(%rbp)
movq %rdx, -0x400(%rbp)
leaq -0x408(%rbp), %rax
movq %rax, -0x3f8(%rbp)
movq -0x3f8(%rbp), %rdi
callq 0x54e0
movq %rax, -0x410(%rbp)
movq -0x3f8(%rbp), %rdi
callq 0x5510
movq %rax, -0x418(%rbp)
leaq -0x410(%rbp), %rdi
leaq -0x418(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0x19d2c
jmp 0x19f6c
leaq -0x410(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0x420(%rbp)
movq -0x420(%rbp), %rdi
movq -0x3f0(%rbp), %rsi
callq 0x3100
movq -0x708(%rbp), %rdi
movq %rax, -0x428(%rbp)
movq -0x428(%rbp), %rsi
callq 0x5590
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0x19d7c
jmp 0x19f5b
movb $0x0, -0x429(%rbp)
movq $0x0, -0x438(%rbp)
movq $0x0, -0x440(%rbp)
movq $0x0, -0x448(%rbp)
movb $0x0, -0x449(%rbp)
movzbl -0x449(%rbp), %eax
cmpl $0x4, %eax
jge 0x19ede
movq -0x708(%rbp), %rsi
movq -0x428(%rbp), %rdx
movzbl -0x449(%rbp), %ecx
leaq -0x4f0(%rbp), %rdi
callq 0xed20
jmp 0x19dde
leaq -0x4f0(%rbp), %rdi
callq 0xef70
movb %al, -0x739(%rbp)
jmp 0x19df2
movb -0x739(%rbp), %al
testb $0x1, %al
jne 0x19dfe
jmp 0x19e2d
movb $0x1, -0x429(%rbp)
jmp 0x19ede
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4f8(%rbp)
movl %eax, -0x4fc(%rbp)
leaq -0x3a0(%rbp), %rdi
callq 0x1a4d0
jmp 0x1a4a1
movq -0x708(%rbp), %rsi
movq -0x428(%rbp), %rcx
movzbl -0x449(%rbp), %r8d
leaq -0x530(%rbp), %rdi
leaq -0x4f0(%rbp), %rdx
callq 0xf430
jmp 0x19e58
leaq -0x548(%rbp), %rdi
leaq -0x508(%rbp), %rsi
leaq -0x510(%rbp), %rdx
leaq -0x518(%rbp), %rcx
callq 0x11390
leaq -0x548(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0x113d0
movq -0x508(%rbp), %rax
addq -0x438(%rbp), %rax
movq %rax, -0x438(%rbp)
movq -0x510(%rbp), %rax
addq -0x440(%rbp), %rax
movq %rax, -0x440(%rbp)
movq -0x518(%rbp), %rax
addq -0x448(%rbp), %rax
movq %rax, -0x448(%rbp)
movb -0x449(%rbp), %al
addb $0x1, %al
movb %al, -0x449(%rbp)
jmp 0x19dab
testb $0x1, -0x429(%rbp)
jne 0x19f05
movq -0x438(%rbp), %rax
addq -0x440(%rbp), %rax
cmpq $0x2, %rax
jae 0x19f05
cmpq $0x2, -0x448(%rbp)
jb 0x19f07
jmp 0x19f5b
cmpq $0x1, -0x438(%rbp)
jne 0x19f27
movl $0x3e8, -0x4(%rbp)      # imm = 0x3E8
movl $0x1, -0x54c(%rbp)
jmp 0x1a489
movq -0x708(%rbp), %rdi
addq $0x3928, %rdi           # imm = 0x3928
movq -0x428(%rbp), %rsi
callq 0x5670
movq %rax, %rdx
leaq -0x3a0(%rbp), %rdi
leaq -0x428(%rbp), %rsi
callq 0x19300
jmp 0x19f59
jmp 0x19f5b
leaq -0x410(%rbp), %rdi
callq 0x55c0
jmp 0x19d10
jmp 0x19f6e
leaq -0x3e0(%rbp), %rdi
callq 0x55c0
jmp 0x19c65
jmp 0x1a2db
leaq -0x3c0(%rbp), %rdi
movl $0x1, %esi
callq 0x12a70
movq %rax, -0x748(%rbp)
leaq -0x3c0(%rbp), %rdi
movl $0x3, %esi
callq 0x12a70
movq -0x748(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0x568(%rbp)
movq %rdx, -0x560(%rbp)
leaq -0x568(%rbp), %rax
movq %rax, -0x558(%rbp)
movq -0x558(%rbp), %rdi
callq 0x54e0
movq %rax, -0x570(%rbp)
movq -0x558(%rbp), %rdi
callq 0x5510
movq %rax, -0x578(%rbp)
leaq -0x570(%rbp), %rdi
leaq -0x578(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0x1a01a
jmp 0x1a2d9
leaq -0x570(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0x580(%rbp)
leaq -0x3c0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x12a70
movq %rax, -0x750(%rbp)
leaq -0x3c0(%rbp), %rdi
movl $0x2, %esi
callq 0x12a70
movq -0x750(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0x598(%rbp)
movq %rdx, -0x590(%rbp)
leaq -0x598(%rbp), %rax
movq %rax, -0x588(%rbp)
movq -0x588(%rbp), %rdi
callq 0x54e0
movq %rax, -0x5a0(%rbp)
movq -0x588(%rbp), %rdi
callq 0x5510
movq %rax, -0x5a8(%rbp)
leaq -0x5a0(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0x1a0c5
jmp 0x1a2c6
leaq -0x5a0(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0x5b0(%rbp)
movq -0x5b0(%rbp), %rdi
movq -0x580(%rbp), %rsi
callq 0x3100
movq -0x708(%rbp), %rdi
movq %rax, -0x5b8(%rbp)
movq -0x5b8(%rbp), %rsi
callq 0x5590
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0x1a115
jmp 0x1a2b5
movq $0x0, -0x5c0(%rbp)
movq $0x0, -0x5c8(%rbp)
movq $0x0, -0x5d0(%rbp)
movb $0x0, -0x5d1(%rbp)
movzbl -0x5d1(%rbp), %eax
cmpl $0x4, %eax
jge 0x1a257
movq -0x708(%rbp), %rsi
movq -0x5b8(%rbp), %rdx
movzbl -0x5d1(%rbp), %ecx
leaq -0x678(%rbp), %rdi
callq 0xed20
jmp 0x1a170
leaq -0x678(%rbp), %rdi
callq 0xef70
movb %al, -0x751(%rbp)
jmp 0x1a184
movb -0x751(%rbp), %al
testb $0x1, %al
jne 0x1a190
jmp 0x1a1a6
movl $0x3e8, -0x4(%rbp)      # imm = 0x3E8
movl $0x1, -0x54c(%rbp)
jmp 0x1a489
movq -0x708(%rbp), %rsi
movq -0x5b8(%rbp), %rcx
movzbl -0x5d1(%rbp), %r8d
leaq -0x6a8(%rbp), %rdi
leaq -0x678(%rbp), %rdx
callq 0xf430
jmp 0x1a1d1
leaq -0x6c0(%rbp), %rdi
leaq -0x680(%rbp), %rsi
leaq -0x688(%rbp), %rdx
leaq -0x690(%rbp), %rcx
callq 0x11390
leaq -0x6c0(%rbp), %rdi
leaq -0x6a8(%rbp), %rsi
callq 0x113d0
movq -0x680(%rbp), %rax
addq -0x5c0(%rbp), %rax
movq %rax, -0x5c0(%rbp)
movq -0x688(%rbp), %rax
addq -0x5c8(%rbp), %rax
movq %rax, -0x5c8(%rbp)
movq -0x690(%rbp), %rax
addq -0x5d0(%rbp), %rax
movq %rax, -0x5d0(%rbp)
movb -0x5d1(%rbp), %al
addb $0x1, %al
movb %al, -0x5d1(%rbp)
jmp 0x1a13d
cmpq $0x1, -0x5c0(%rbp)
jae 0x1a26b
cmpq $0x2, -0x5c8(%rbp)
jb 0x1a281
movl $0x3e8, -0x4(%rbp)      # imm = 0x3E8
movl $0x1, -0x54c(%rbp)
jmp 0x1a489
movq -0x708(%rbp), %rdi
addq $0x3928, %rdi           # imm = 0x3928
movq -0x5b8(%rbp), %rsi
callq 0x5670
movq %rax, %rdx
leaq -0x3a0(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
callq 0x19300
jmp 0x1a2b3
jmp 0x1a2b5
leaq -0x5a0(%rbp), %rdi
callq 0x55c0
jmp 0x1a0a9
jmp 0x1a2c8
leaq -0x570(%rbp), %rdi
callq 0x55c0
jmp 0x19ffe
jmp 0x1a2db
leaq -0x3a0(%rbp), %rdi
movq %rdi, -0x760(%rbp)
callq 0x193c0
movq -0x760(%rbp), %rdi
movq %rax, -0x6c8(%rbp)
callq 0x193f0
movq %rax, -0x6d0(%rbp)
movq -0x6c8(%rbp), %rdi
movq -0x6d0(%rbp), %rsi
callq 0x1cab0
jmp 0x1a31d
leaq -0x3a0(%rbp), %rax
movq %rax, -0x6e0(%rbp)
movq -0x6e0(%rbp), %rdi
callq 0x193c0
movq %rax, -0x6e8(%rbp)
movq -0x6e0(%rbp), %rdi
callq 0x193f0
movq %rax, -0x6f0(%rbp)
leaq -0x6e8(%rbp), %rdi
leaq -0x6f0(%rbp), %rsi
callq 0x19420
testb $0x1, %al
jne 0x1a36d
jmp 0x1a479
leaq -0x6e8(%rbp), %rdi
callq 0x19460
movq -0x708(%rbp), %rdi
movq %rax, -0x6f8(%rbp)
movb -0x11(%rbp), %al
movb %al, -0x765(%rbp)
movq -0x6f8(%rbp), %rax
movq (%rax), %rsi
callq 0x5590
movb -0x765(%rbp), %cl
movb %cl, (%rax)
movzbl -0x11(%rbp), %edi
callq 0x68d0
movq -0x708(%rbp), %rdi
movq -0x20(%rbp), %rdx
decq %rdx
movzbl %al, %esi
movl $0xfffffc17, %ecx       # imm = 0xFFFFFC17
movl $0x3e9, %r8d            # imm = 0x3E9
callq 0x19480
movl %eax, -0x764(%rbp)
jmp 0x1a3d9
movq -0x708(%rbp), %rdi
movl -0x764(%rbp), %eax
negl %eax
movl %eax, -0x770(%rbp)
movq -0x6f8(%rbp), %rax
movq (%rax), %rsi
movzbl -0x11(%rbp), %edx
callq 0x18d30
movl %eax, -0x76c(%rbp)
jmp 0x1a409
movq -0x708(%rbp), %rdi
movl -0x76c(%rbp), %ecx
movl -0x770(%rbp), %eax
addl %ecx, %eax
movl %eax, -0x6fc(%rbp)
movq -0x6f8(%rbp), %rax
movq (%rax), %rsi
callq 0x5590
movb $0x0, (%rax)
movl -0x4c(%rbp), %eax
cmpl -0x6fc(%rbp), %eax
jge 0x1a466
movl -0x6fc(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x28(%rbp), %eax
jl 0x1a464
movl -0x28(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x54c(%rbp)
jmp 0x1a489
jmp 0x1a466
jmp 0x1a468
leaq -0x6e8(%rbp), %rdi
callq 0x1a4b0
jmp 0x1a351
movl -0x4c(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x54c(%rbp)
leaq -0x3a0(%rbp), %rdi
callq 0x1a4d0
movl -0x4(%rbp), %eax
addq $0x770, %rsp            # imm = 0x770
popq %rbp
retq
movq -0x4f8(%rbp), %rdi
callq 0x2370
nopl (%rax)