// File: /workspace/github_cpp_makefile_star2_O3/ShootMe[P]Klondike-Solver/KlondikeSolver.cpp
// Function: main
int main(int argc, char * argv[]) {
	Solitaire s;
	s.Initialize();

	bool commandLoaded = false;
	int outputMethod = 0;
	int multiThreaded = 1;
	int maxClosedCount = 0;
	bool fastMode = false;
	string fileContents;
	bool replay = false;
	bool showMoves = false;

	for (int i = 1; i < argc; i++) {
		if (_stricmp(argv[i], "-draw") == 0 || _stricmp(argv[i], "/draw") == 0 || _stricmp(argv[i], "-dc") == 0 || _stricmp(argv[i], "/dc") == 0) {
			if (i + 1 >= argc) { cout << "You must specify draw count."; return 0; }
			int drawCount = atoi(argv[i + 1]);
			if (drawCount < 1 || drawCount > 12) { cout << "Please specify a valid draw count from 1 to 12."; return 0; }
			s.SetDrawCount(drawCount);
			i++;
		} else if (_stricmp(argv[i], "-deck") == 0 || _stricmp(argv[i], "/deck") == 0 || _stricmp(argv[i], "-d") == 0 || _stricmp(argv[i], "/d") == 0) {
			if (i + 1 >= argc) { cout << "You must specify deck to load."; return 0; }
			if (commandLoaded) { cout << "Only one method can be specified (deck/game/file)."; return 0; }
			if (!s.LoadSolitaire(argv[i + 1])) { cout << "Specified deck is invalid."; return 0; }
			commandLoaded = true;
			i++;
		} else if (_stricmp(argv[i], "-game") == 0 || _stricmp(argv[i], "/game") == 0 || _stricmp(argv[i], "-g") == 0 || _stricmp(argv[i], "/g") == 0) {
			if (i + 1 >= argc) { cout << "You must specify a game number to load. Any integeral number."; return 0; }
			if (commandLoaded) { cout << "Only one method can be specified (deck/game/file)."; return 0; }
			commandLoaded = true;
			s.Shuffle1(atoi(argv[i + 1]));
			i++;
		} else if (_stricmp(argv[i], "-out") == 0 || _stricmp(argv[i], "/out") == 0 || _stricmp(argv[i], "-o") == 0 || _stricmp(argv[i], "/o") == 0) {
			if (i + 1 >= argc) { cout << "You must specify a valid output method. 0 or 1."; return 0; }
			outputMethod = atoi(argv[i + 1]);
			if (outputMethod < 0 || outputMethod > 2) { cout << "You must specify a valid output method. 0, 1, or 2."; return 0; }
			i++;
		} else if (_stricmp(argv[i], "-states") == 0 || _stricmp(argv[i], "/states") == 0 || _stricmp(argv[i], "-s") == 0 || _stricmp(argv[i], "/s") == 0) {
			if (i + 1 >= argc) { cout << "You must specify max states."; return 0; }
			maxClosedCount = atoi(argv[i + 1]);
			if (maxClosedCount < 0) { cout << "You must specify a valid max number of states."; return 0; }
			i++;
		} else if (_stricmp(argv[i], "-fast") == 0 || _stricmp(argv[i], "/fast") == 0 || _stricmp(argv[i], "-f") == 0 || _stricmp(argv[i], "/f") == 0) {
			fastMode = true;
			if (maxClosedCount == 0) { maxClosedCount = 200000; }
		} else if (_stricmp(argv[i], "-m") == 0 || _stricmp(argv[i], "/m") == 0 || _stricmp(argv[i], "-multi") == 0 || _stricmp(argv[i], "/multi") == 0) {
			if (i + 1 >= argc) { cout << "You must specify number of threads."; return 0; }
			multiThreaded = atoi(argv[i + 1]);
			if (multiThreaded < 2 || multiThreaded > 99) { cout << "You must specify a valid number of threads."; return 0; }
			i++;
		} else if (_stricmp(argv[i], "-mvs") == 0 || _stricmp(argv[i], "/mvs") == 0 || _stricmp(argv[i], "-moves") == 0 || _stricmp(argv[i], "/moves") == 0) {
			showMoves = true;
		} else if (_stricmp(argv[i], "-r") == 0 || _stricmp(argv[i], "/r") == 0) {
			replay = true;
		} else if (_stricmp(argv[i], "-?") == 0 || _stricmp(argv[i], "/?") == 0 || _stricmp(argv[i], "?") == 0 || _stricmp(argv[i], "/help") == 0 || _stricmp(argv[i], "-help") == 0) {
			cout << "Klondike Solver V2.0\nSolves games of Klondike (Patience) solitaire minimally or a faster best try.\n\n";
			cout << "KlondikeSolver [/DC] [/D] [/G] [/O] [/M] [/S] [/F] [/R] [/MVS] [Path]\n\n";
			cout << "  /DRAW # [/DC #]       Sets the draw count to use when solving. Defaults to 1.\n\n";
			cout << "  /DECK str [/D str]    Loads the deck specified by the string.\n\n";
			cout << "  /GAME # [/G #]        Loads a random game with seed #.\n\n";
			cout << "  Path                  Solves deals specified in the file.\n\n";
			cout << "  /R                    Replays solution to output if one is found.\n\n";
			cout << "  /MULTI # [/M #]       Uses # threads to solve deals.\n";
			cout << "                        Only works when solving minimally.\n\n";
			cout << "  /OUT # [/O #]         Sets the output method of the solver.\n";
			cout << "                        Defaults to 0, 1 for Pysol, and 2 for minimal output.\n";
			cout << "  /MOVES [/MVS]         Will also output a compact list of moves made when a\n";
			cout << "                        solution is found.";
			cout << "  /STATES # [/S #]      Sets the maximum number of game states to evaluate\n";
			cout << "                        before terminating. Defaults to 5,000,000.\n\n";
			cout << "  /FAST [/F]            Run the solver in a best attempt mode, which is\n";
			cout << "                        faster, but not guaranteed to give minimal solution.\n";
			return 0;
		} else {
			if (commandLoaded) { cout << "Only one method can be specified (deck/game/file)."; return 0; }
			commandLoaded = true;
			ifstream file(argv[i], ios::in | ios::binary);
			if (!file) { cout << "You must specify a valid and accessible file."; return 0; }
			file.seekg(0, ios::end);
			fileContents.resize((unsigned int)file.tellg());
			file.seekg(0, ios::beg);
			file.read(&fileContents[0], fileContents.size());
			file.close();
		}
	}

	if (maxClosedCount == 0) { maxClosedCount = 5000000; }

	unsigned int fileIndex = 0;
	do {
		if (fileContents.size() > fileIndex) {
			if (!LoadGame(fileContents, s, fileIndex)) {
				continue;
			}
		}
		s.ResetGame();

		if (outputMethod == 0) {
			cout << s.GameDiagram() << "\n\n";
		} else if (outputMethod == 1) {
			cout << s.GameDiagramPysol() << "\n\n";
		}

		clock_t total = clock();
		SolveResult result = CouldNotComplete;
		if (fastMode) {
			int bestCount = 512;
			int bestFoundation = 0;
			result = s.SolveFast(maxClosedCount, 0, 0);
			if (result == SolvedMinimal || result == SolvedMayNotBeMinimal) {
				bestCount = s.MovesMadeNormalizedCount();
			}
			bestFoundation = s.FoundationCount();
			Solitaire best = s;
			s.ResetGame();
			result = s.SolveFast(maxClosedCount, 0, 4);
			if ((result == SolvedMinimal || result == SolvedMayNotBeMinimal) && s.MovesMadeNormalizedCount() < bestCount) {
				best = s; bestCount = s.MovesMadeNormalizedCount(); bestFoundation = s.FoundationCount();
			}
			if (s.FoundationCount() > bestFoundation) {
				best = s; bestFoundation = s.FoundationCount();
			}
			s.ResetGame();
			result = s.SolveFast(maxClosedCount, 1, 4);
			if ((result == SolvedMinimal || result == SolvedMayNotBeMinimal) && s.MovesMadeNormalizedCount() < bestCount) {
				best = s; bestCount = s.MovesMadeNormalizedCount(); bestFoundation = s.FoundationCount();
			}
			if (s.FoundationCount() > bestFoundation) {
				best = s; bestFoundation = s.FoundationCount();
			}
			s = best;
			if (bestFoundation == 52) { result = SolvedMayNotBeMinimal; }
		} else if (multiThreaded > 1) {
			result = s.SolveMinimalMultithreaded(multiThreaded, maxClosedCount);
		} else {
			result = s.SolveMinimal(maxClosedCount);
		}

		bool canReplay = false;
		if (result == SolvedMinimal) {
			cout << "Minimal solution in " << s.MovesMadeNormalizedCount() << " moves.";
			canReplay = true;
		} else if (result == SolvedMayNotBeMinimal) {
			cout << "Solved in " << s.MovesMadeNormalizedCount() << " moves.";
			canReplay = true;
		} else if (result == Impossible) {
			cout << "Impossible. Max cards in foundation " << s.FoundationCount() << " at " << s.MovesMadeNormalizedCount() << " moves.";
		} else if (result == CouldNotComplete) {
			cout << "Unknown. Max cards in foundation " << s.FoundationCount() << " at " << s.MovesMadeNormalizedCount() << " moves.";
		}
		cout << " Took " << (clock() - total) << " ms.\n";

		if (outputMethod < 2 && replay && canReplay) {
			int movesToMake = s.MovesMadeCount();
			s.ResetGame();
			for (int i = 0; i < movesToMake; i++) {
				cout << "----------------------------------------\n";
				cout << s.GetMoveInfo(s[i]) << "\n\n";
				s.MakeMove(s[i]);

				if (outputMethod == 0) {
					cout << s.GameDiagram() << "\n\n";
				} else {
					cout << s.GameDiagramPysol() << "\n\n";
				}
			}
			cout << "----------------------------------------\n";
		}
		if (showMoves && canReplay) {
			cout << s.MovesMade() << "\n\n";
		} else if (showMoves) {
			cout << "\n";
		}
	} while (fileContents.size() > fileIndex);

	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3288, %rsp           # imm = 0x3288
movq %rsi, %r15
movl %edi, %r14d
xorl %ebx, %ebx
leaq (%rsp,%rbx), %rdi
addq $0x1970, %rdi           # imm = 0x1970
callq 0x3704
addq $0x4, %rbx
cmpq $0x800, %rbx            # imm = 0x800
jne 0x262e
movl $0x1874, %ebx           # imm = 0x1874
leaq (%rsp,%rbx), %rdi
addq $0x1970, %rdi           # imm = 0x1970
callq 0x3704
addq $0x4, %rbx
cmpq $0x18f4, %rbx           # imm = 0x18F4
jne 0x2650
leaq 0x3264(%rsp), %rdi
callq 0x9b1a
leaq 0x1970(%rsp), %rdi
callq 0x73c6
leaq 0x40(%rsp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
xorl %ebx, %ebx
cmpl $0x2, %r14d
jl 0x2cbb
movl $0x1, %r13d
movq $0x0, (%rsp)
movl $0x0, 0xc(%rsp)
movl $0x0, 0x8(%rsp)
movl $0x1, %r12d
movq $0x0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
movq $0x0, 0x28(%rsp)
movslq %r12d, %rax
movq %r15, %rbp
movq (%r15,%rax,8), %r15
movq %r15, %rdi
leaq 0x791a(%rip), %rsi      # 0xa014
callq 0x21f0
testl %eax, %eax
je 0x2b0b
movq %r15, %rdi
leaq 0x7909(%rip), %rsi      # 0xa01a
callq 0x21f0
testl %eax, %eax
je 0x2b0b
movq %r15, %rdi
leaq 0x78f8(%rip), %rsi      # 0xa020
callq 0x21f0
testl %eax, %eax
je 0x2b0b
movq %r15, %rdi
leaq 0x78e5(%rip), %rsi      # 0xa024
callq 0x21f0
testl %eax, %eax
je 0x2b0b
movq %r15, %rdi
leaq 0x791f(%rip), %rsi      # 0xa075
callq 0x21f0
testl %eax, %eax
je 0x2b53
movq %r15, %rdi
leaq 0x790e(%rip), %rsi      # 0xa07b
callq 0x21f0
testl %eax, %eax
je 0x2b53
movq %r15, %rdi
leaq 0x78fd(%rip), %rsi      # 0xa081
callq 0x21f0
testl %eax, %eax
je 0x2b53
movq %r15, %rdi
leaq 0x78e9(%rip), %rsi      # 0xa084
callq 0x21f0
testl %eax, %eax
je 0x2b53
movq %r15, %rdi
leaq 0x7942(%rip), %rsi      # 0xa0f4
callq 0x21f0
testl %eax, %eax
je 0x2bc4
movq %r15, %rdi
leaq 0x7931(%rip), %rsi      # 0xa0fa
callq 0x21f0
testl %eax, %eax
je 0x2bc4
movq %r15, %rdi
leaq 0x7920(%rip), %rsi      # 0xa100
callq 0x21f0
testl %eax, %eax
je 0x2bc4
movq %r15, %rdi
leaq 0x790c(%rip), %rsi      # 0xa103
callq 0x21f0
testl %eax, %eax
je 0x2bc4
movq %r15, %rdi
leaq 0x7936(%rip), %rsi      # 0xa144
callq 0x21f0
testl %eax, %eax
je 0x2c04
movq %r15, %rdi
leaq 0x7924(%rip), %rsi      # 0xa149
callq 0x21f0
testl %eax, %eax
je 0x2c04
movq %r15, %rdi
leaq 0x7912(%rip), %rsi      # 0xa14e
callq 0x21f0
testl %eax, %eax
je 0x2c04
movq %r15, %rdi
leaq 0x78fe(%rip), %rsi      # 0xa151
callq 0x21f0
testl %eax, %eax
je 0x2c04
movq %r15, %rdi
leaq 0x794e(%rip), %rsi      # 0xa1b8
callq 0x21f0
testl %eax, %eax
je 0x2c32
movq %r15, %rdi
leaq 0x793f(%rip), %rsi      # 0xa1c0
callq 0x21f0
testl %eax, %eax
je 0x2c32
movq %r15, %rdi
leaq 0x7930(%rip), %rsi      # 0xa1c8
callq 0x21f0
testl %eax, %eax
je 0x2c32
movq %r15, %rdi
leaq 0x791c(%rip), %rsi      # 0xa1cb
callq 0x21f0
testl %eax, %eax
je 0x2c32
movq %r15, %rdi
leaq 0x7954(%rip), %rsi      # 0xa21a
callq 0x21f0
testl %eax, %eax
je 0x2c5f
movq %r15, %rdi
leaq 0x7943(%rip), %rsi      # 0xa220
callq 0x21f0
testl %eax, %eax
je 0x2c5f
movq %r15, %rdi
leaq 0x7932(%rip), %rsi      # 0xa226
callq 0x21f0
testl %eax, %eax
je 0x2c5f
movq %r15, %rdi
leaq 0x791e(%rip), %rsi      # 0xa229
callq 0x21f0
testl %eax, %eax
je 0x2c5f
movq %r15, %rdi
leaq 0x790a(%rip), %rsi      # 0xa22c
callq 0x21f0
testl %eax, %eax
je 0x2c80
movq %r15, %rdi
leaq 0x78f6(%rip), %rsi      # 0xa22f
callq 0x21f0
testl %eax, %eax
je 0x2c80
movq %r15, %rdi
leaq 0x78e2(%rip), %rsi      # 0xa232
callq 0x21f0
testl %eax, %eax
je 0x2c80
movq %r15, %rdi
leaq 0x78d2(%rip), %rsi      # 0xa239
callq 0x21f0
testl %eax, %eax
je 0x2c80
movq %r15, %rdi
leaq 0x7912(%rip), %rsi      # 0xa290
callq 0x21f0
testl %eax, %eax
je 0x2ca9
movq %r15, %rdi
leaq 0x7900(%rip), %rsi      # 0xa295
callq 0x21f0
testl %eax, %eax
je 0x2ca9
movq %r15, %rdi
leaq 0x78ee(%rip), %rsi      # 0xa29a
callq 0x21f0
testl %eax, %eax
je 0x2ca9
movq %r15, %rdi
leaq 0x78de(%rip), %rsi      # 0xa2a1
callq 0x21f0
testl %eax, %eax
je 0x2ca9
movq %r15, %rdi
leaq 0x78ce(%rip), %rsi      # 0xa2a8
callq 0x21f0
testl %eax, %eax
je 0x2cb2
movq %r15, %rdi
leaq 0x78ba(%rip), %rsi      # 0xa2ab
callq 0x21f0
testl %eax, %eax
je 0x2cb2
movq %r15, %rdi
leaq 0x78a6(%rip), %rsi      # 0xa2ae
callq 0x21f0
testl %eax, %eax
je 0x33ec
movq %r15, %rdi
leaq 0x7892(%rip), %rsi      # 0xa2b1
callq 0x21f0
testl %eax, %eax
je 0x33ec
movq %r15, %rdi
leaq 0x7879(%rip), %rsi      # 0xa2af
callq 0x21f0
testl %eax, %eax
je 0x33ec
movq %r15, %rdi
leaq 0x7867(%rip), %rsi      # 0xa2b4
callq 0x21f0
testl %eax, %eax
je 0x33ec
movq %r15, %rdi
leaq 0x7856(%rip), %rsi      # 0xa2ba
callq 0x21f0
testl %eax, %eax
je 0x33ec
testb $0x1, (%rsp)
jne 0x334b
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
movl $0xc, %edx
callq 0x2300
movq 0x58(%rsp), %rax
movq -0x18(%rax), %rax
testb $0x5, 0x78(%rsp,%rax)
jne 0x357d
leaq 0x58(%rsp), %rdi
xorl %esi, %esi
movl $0x2, %edx
callq 0x2220
leaq 0x58(%rsp), %rdi
callq 0x22d0
movl %eax, %esi
leaq 0x30(%rsp), %rdi
xorl %edx, %edx
callq 0x2090
leaq 0x58(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2220
movq 0x30(%rsp), %rsi
movq 0x38(%rsp), %rdx
leaq 0x58(%rsp), %rdi
callq 0x2210
leaq 0x58(%rsp), %rdi
callq 0x2050
leaq 0x58(%rsp), %rdi
callq 0x2060
movb $0x1, %al
movq %rax, (%rsp)
jmp 0x2c78
incl %r12d
cmpl %r14d, %r12d
jge 0x32e9
movslq %r12d, %rax
movq %rbp, %r15
movq (%rbp,%rax,8), %rdi
callq 0x2270
leal -0x1(%rax), %ecx
cmpl $0xc, %ecx
jae 0x3303
leaq 0x1970(%rsp), %rdi
movl %eax, %esi
callq 0x7afe
incl %r12d
cmpl %r14d, %r12d
jl 0x26e6
jmp 0x2cea
incl %r12d
cmpl %r14d, %r12d
jge 0x3359
testb $0x1, (%rsp)
jne 0x334b
movslq %r12d, %rax
movq %rbp, %r15
movq (%rbp,%rax,8), %rsi
leaq 0x58(%rsp), %rbp
movq %rbp, %rdi
leaq 0x1c(%rsp), %rdx
callq 0x3630
leaq 0x1970(%rsp), %rdi
movq %rbp, %rsi
callq 0x7424
movl %eax, %ebp
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x2bb4
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x21d0
movb $0x1, %al
movq %rax, (%rsp)
testb %bpl, %bpl
jne 0x2b42
jmp 0x3367
incl %r12d
cmpl %r14d, %r12d
jge 0x3375
testb $0x1, (%rsp)
jne 0x334b
movq %rbp, %r15
movslq %r12d, %rax
movq (%rbp,%rax,8), %rdi
callq 0x2270
movb $0x1, %cl
movq %rcx, (%rsp)
leaq 0x1970(%rsp), %rdi
movl %eax, %esi
callq 0x7158
jmp 0x2b42
incl %r12d
cmpl %r14d, %r12d
jge 0x3386
movslq %r12d, %rax
movq %rbp, %r15
movq (%rbp,%rax,8), %rdi
callq 0x2270
movl %eax, 0xc(%rsp)
cmpl $0x2, %eax
jbe 0x2b42
jmp 0x3397
incl %r12d
cmpl %r14d, %r12d
jge 0x33a8
movslq %r12d, %rax
movq %rbp, %r15
movq (%rbp,%rax,8), %rdi
callq 0x2270
movl %eax, 0x8(%rsp)
testl %eax, %eax
jns 0x2b42
jmp 0x33b9
movl 0x8(%rsp), %ecx
testl %ecx, %ecx
movl $0x30d40, %eax          # imm = 0x30D40
cmovel %eax, %ecx
movl %ecx, 0x8(%rsp)
movb $0x1, %al
movq %rax, 0x28(%rsp)
movq %rbp, %r15
jmp 0x2b42
incl %r12d
cmpl %r14d, %r12d
jge 0x33ca
movslq %r12d, %rax
movq (%rbp,%rax,8), %rdi
callq 0x2270
movq %rax, %r13
addl $-0x64, %eax
cmpl $-0x62, %eax
jae 0x2c78
jmp 0x33db
movb $0x1, %al
movq %rax, 0x10(%rsp)
jmp 0x2c78
movb $0x1, %al
movq %rax, 0x20(%rsp)
jmp 0x2c78
movl $0x4c4b40, (%rsp)       # imm = 0x4C4B40
movb $0x1, %al
movq %rax, 0x20(%rsp)
movl $0x1, %eax
movq %rax, 0x50(%rsp)
movl $0x0, 0xc(%rsp)
xorl %ecx, %ecx
movq $0x0, 0x28(%rsp)
xorl %eax, %eax
jmp 0x2d17
movq %r13, 0x50(%rsp)
movq 0x38(%rsp), %rax
movq 0x20(%rsp), %rcx
xorb $0x1, %cl
movq %rcx, 0x20(%rsp)
movl 0x8(%rsp), %edx
testl %edx, %edx
movl $0x4c4b40, %ecx         # imm = 0x4C4B40
cmovnel %edx, %ecx
movl %ecx, (%rsp)
movq 0x10(%rsp), %rcx
leaq 0x1c(%rsp), %rdx
movl $0x0, (%rdx)
movq %rcx, 0x10(%rsp)
xorb $0x1, %cl
movb %cl, 0x8(%rsp)
leaq 0x1970(%rsp), %r13
movq 0xb29b(%rip), %r15      # 0xdfd8
movl %ebx, %ecx
cmpq %rcx, %rax
jbe 0x2d5e
leaq 0x30(%rsp), %rdi
movq %r13, %rsi
leaq 0x1c(%rsp), %rdx
callq 0x245c
testb %al, %al
je 0x32d5
movq %r13, %rdi
callq 0x4226
movl 0xc(%rsp), %eax
testl %eax, %eax
je 0x2dac
cmpl $0x1, %eax
jne 0x2dfb
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
callq 0x83f2
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rdx
movq %r15, %rdi
callq 0x2200
movl $0x2, %edx
movq %rax, %rdi
leaq 0x7694(%rip), %rsi      # 0xa439
callq 0x2200
jmp 0x2ddf
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
callq 0x816a
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rdx
movq %r15, %rdi
callq 0x2200
movl $0x2, %edx
movq %rax, %rdi
leaq 0x765f(%rip), %rsi      # 0xa439
callq 0x2200
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x2dfb
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x21d0
callq 0x2110
movq %rax, %r12
testb $0x1, 0x28(%rsp)
je 0x2f81
movq %r13, %rdi
movl (%rsp), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x5aa8
cmpl $0x1, %eax
je 0x2e2d
movl $0x200, %r14d           # imm = 0x200
cmpl $-0x1, %eax
jne 0x2e38
movq %r13, %rdi
callq 0x4a7e
movl %eax, %r14d
movq %r13, %rdi
callq 0x4b1e
movl %eax, %ebp
movl $0x1918, %edx           # imm = 0x1918
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
callq 0x2180
movq %r13, %rdi
callq 0x4226
movq %r13, %rdi
movl (%rsp), %esi
xorl %edx, %edx
movl $0x4, %ecx
callq 0x5aa8
cmpl $0x1, %eax
je 0x2e78
cmpl $-0x1, %eax
jne 0x2eac
movq %r13, %rdi
callq 0x4a7e
cmpl %r14d, %eax
jge 0x2eac
movl $0x1918, %edx           # imm = 0x1918
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
callq 0x2180
movq %r13, %rdi
callq 0x4a7e
movl %eax, %r14d
movq %r13, %rdi
callq 0x4b1e
movl %eax, %ebp
movq %r13, %rdi
callq 0x4b1e
cmpl %ebp, %eax
jle 0x2ed4
movl $0x1918, %edx           # imm = 0x1918
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
callq 0x2180
movq %r13, %rdi
callq 0x4b1e
movl %eax, %ebp
movq %r13, %rdi
callq 0x4226
movq %r13, %rdi
movl (%rsp), %esi
movl $0x1, %edx
movl $0x4, %ecx
callq 0x5aa8
movl %eax, %ebx
cmpl $0x1, %eax
je 0x2efd
cmpl $-0x1, %ebx
jne 0x2f2e
movq %r13, %rdi
callq 0x4a7e
cmpl %r14d, %eax
jge 0x2f2e
movl $0x1918, %edx           # imm = 0x1918
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
callq 0x2180
movq %r13, %rdi
callq 0x4a7e
movq %r13, %rdi
callq 0x4b1e
movl %eax, %ebp
movq %r13, %rdi
callq 0x4b1e
cmpl %ebp, %eax
jle 0x2f56
movl $0x1918, %edx           # imm = 0x1918
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
callq 0x2180
movq %r13, %rdi
callq 0x4b1e
movl %eax, %ebp
movq %r12, %r14
movl $0x1918, %edx           # imm = 0x1918
movq %r13, %rdi
leaq 0x58(%rsp), %rsi
callq 0x2180
movl $0xa, %edx
leaq 0x7838(%rip), %rsi      # 0xa7af
cmpl $0x34, %ebp
jne 0x2fa8
jmp 0x308d
movq 0x50(%rsp), %rsi
cmpl $0x2, %esi
jl 0x2f98
movq %r13, %rdi
movl (%rsp), %edx
callq 0x6650
jmp 0x2fa3
movq %r13, %rdi
movl (%rsp), %esi
callq 0x66c0
movl %eax, %ebx
movq %r12, %r14
movb $0x1, %r12b
addl $0x2, %ebx
cmpl $0x3, %ebx
ja 0x30be
leaq 0x7046(%rip), %rcx      # 0xa004
movslq (%rcx,%rbx,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x21, %edx
movq %r15, %rdi
leaq 0x780e(%rip), %rsi      # 0xa7e4
callq 0x2200
movq %r13, %rdi
callq 0x4b1e
movq %r15, %rdi
movl %eax, %esi
callq 0x22c0
movq %rax, %rbx
movl $0x4, %edx
movq %rax, %rdi
leaq 0x77e0(%rip), %rsi      # 0xa7df
callq 0x2200
movq %r13, %rdi
callq 0x4a7e
jmp 0x3053
movl $0x24, %edx
movq %r15, %rdi
leaq 0x779d(%rip), %rsi      # 0xa7ba
callq 0x2200
movq %r13, %rdi
callq 0x4b1e
movq %r15, %rdi
movl %eax, %esi
callq 0x22c0
movq %rax, %rbx
movl $0x4, %edx
movq %rax, %rdi
leaq 0x7799(%rip), %rsi      # 0xa7df
callq 0x2200
movq %r13, %rdi
callq 0x4a7e
movq %rbx, %rdi
movl %eax, %esi
callq 0x22c0
movl $0x7, %edx
movq %rax, %rdi
leaq 0x773b(%rip), %rsi      # 0xa7a7
callq 0x2200
jmp 0x30be
movl $0x14, %edx
leaq 0x7713(%rip), %rsi      # 0xa792
jmp 0x308d
movl $0xa, %edx
leaq 0x7722(%rip), %rsi      # 0xa7af
movq %r15, %rdi
callq 0x2200
movq %r13, %rdi
callq 0x4a7e
movq %r15, %rdi
movl %eax, %esi
callq 0x22c0
movl $0x7, %edx
movq %rax, %rdi
leaq 0x76f1(%rip), %rsi      # 0xa7a7
callq 0x2200
xorl %r12d, %r12d
movl $0x6, %edx
movq %r15, %rdi
leaq 0x7739(%rip), %rsi      # 0xa806
callq 0x2200
callq 0x2110
subq %r14, %rax
movq %r15, %rdi
movq %rax, %rsi
callq 0x21b0
movl $0x5, %edx
movq %rax, %rdi
leaq 0x7719(%rip), %rsi      # 0xa80d
callq 0x2200
cmpl $0x2, 0xc(%rsp)
setge %al
movl %r12d, %ecx
orb 0x20(%rsp), %cl
orb %al, %cl
testb $0x1, %cl
jne 0x325e
movq %r13, %rdi
callq 0x4b26
movl %eax, %r14d
movq %r13, %rdi
callq 0x4226
testl %r14d, %r14d
jle 0x324a
xorl %ebp, %ebp
movl $0x29, %edx
movq %r15, %rdi
leaq 0x76d3(%rip), %rsi      # 0xa813
callq 0x2200
movq %r13, %rdi
movl %ebp, %esi
callq 0x4b2e
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
movl %eax, %edx
callq 0x7b06
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rdx
movq %r15, %rdi
callq 0x2200
movl $0x2, %edx
movq %rax, %rdi
leaq 0x72ba(%rip), %rsi      # 0xa439
callq 0x2200
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x31a0
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x21d0
movq %r13, %rdi
movl %ebp, %esi
callq 0x4b2e
movq %r13, %rdi
movl %eax, %esi
callq 0x4232
cmpl $0x0, 0xc(%rsp)
je 0x31f0
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
callq 0x83f2
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rdx
movq %r15, %rdi
callq 0x2200
movl $0x2, %edx
movq %rax, %rdi
leaq 0x7250(%rip), %rsi      # 0xa439
callq 0x2200
jmp 0x3223
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
callq 0x816a
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rdx
movq %r15, %rdi
callq 0x2200
movl $0x2, %edx
movq %rax, %rdi
leaq 0x721b(%rip), %rsi      # 0xa439
callq 0x2200
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x323f
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x21d0
incl %ebp
cmpl %ebp, %r14d
jne 0x3131
movl $0x29, %edx
movq %r15, %rdi
leaq 0x75ba(%rip), %rsi      # 0xa813
callq 0x2200
orb 0x8(%rsp), %r12b
testb $0x1, %r12b
je 0x3286
testb $0x1, 0x10(%rsp)
je 0x32d5
movl $0x1, %edx
movq %r15, %rdi
leaq 0x71bb(%rip), %rsi      # 0xa43a
callq 0x2200
jmp 0x32d5
leaq 0x58(%rsp), %rdi
movq %r13, %rsi
callq 0x8f3e
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rdx
movq %r15, %rdi
callq 0x2200
movl $0x2, %edx
movq %rax, %rdi
leaq 0x7185(%rip), %rsi      # 0xa439
callq 0x2200
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x32d5
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x21d0
movq 0x38(%rsp), %rax
movl 0x1c(%rsp), %ebx
cmpq %rbx, %rax
ja 0x2d3d
jmp 0x331b
movl $0x1c, %edx
leaq 0x6d33(%rip), %rsi      # 0xa028
movq 0xacdc(%rip), %rdi      # 0xdfd8
callq 0x2200
jmp 0x331b
movq 0xacce(%rip), %rdi      # 0xdfd8
leaq 0x6d34(%rip), %rsi      # 0xa045
movl $0x2f, %edx
callq 0x2200
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x3337
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x21d0
xorl %eax, %eax
addq $0x3288, %rsp           # imm = 0x3288
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x32, %edx
leaq 0x6d4f(%rip), %rsi      # 0xa0a6
jmp 0x32f5
movl $0x1e, %edx
leaq 0x6d22(%rip), %rsi      # 0xa087
jmp 0x32f5
movl $0x1a, %edx
leaq 0x6d66(%rip), %rsi      # 0xa0d9
jmp 0x32f5
movl $0x3d, %edx
leaq 0x6d85(%rip), %rsi      # 0xa106
jmp 0x32f5
movl $0x2f, %edx
leaq 0x6dc2(%rip), %rsi      # 0xa154
jmp 0x32f5
movl $0x33, %edx
leaq 0x6de1(%rip), %rsi      # 0xa184
jmp 0x32f5
movl $0x1c, %edx
leaq 0x6e1a(%rip), %rsi      # 0xa1ce
jmp 0x32f5
movl $0x2e, %edx
leaq 0x6e26(%rip), %rsi      # 0xa1eb
jmp 0x32f5
movl $0x23, %edx
leaq 0x6e6a(%rip), %rsi      # 0xa240
jmp 0x32f5
movl $0x2b, %edx
leaq 0x6e7d(%rip), %rsi      # 0xa264
jmp 0x32f5
movq 0xabe5(%rip), %rdi      # 0xdfd8
leaq 0x6ec6(%rip), %rsi      # 0xa2c0
movl $0x64, %edx
callq 0x2200
movq 0xabcd(%rip), %rdi      # 0xdfd8
leaq 0x6f13(%rip), %rsi      # 0xa325
movl $0x47, %edx
callq 0x2200
movq 0xabb5(%rip), %rdi      # 0xdfd8
leaq 0x6f43(%rip), %rsi      # 0xa36d
movl $0x51, %edx
callq 0x2200
movq 0xab9d(%rip), %rdi      # 0xdfd8
leaq 0x6f7d(%rip), %rsi      # 0xa3bf
movl $0x41, %edx
callq 0x2200
movq 0xab85(%rip), %rdi      # 0xdfd8
leaq 0x6fa7(%rip), %rsi      # 0xa401
movl $0x3a, %edx
callq 0x2200
movq 0xab6d(%rip), %rdi      # 0xdfd8
leaq 0x6fca(%rip), %rsi      # 0xa43c
movl $0x3d, %edx
callq 0x2200
movq 0xab55(%rip), %rdi      # 0xdfd8
leaq 0x6ff0(%rip), %rsi      # 0xa47a
movl $0x45, %edx
callq 0x2200
movq 0xab3d(%rip), %rdi      # 0xdfd8
leaq 0x701e(%rip), %rsi      # 0xa4c0
movl $0x37, %edx
callq 0x2200
movq 0xab25(%rip), %rdi      # 0xdfd8
leaq 0x703e(%rip), %rsi      # 0xa4f8
movl $0x3c, %edx
callq 0x2200
movq 0xab0d(%rip), %rdi      # 0xdfd8
leaq 0x7063(%rip), %rsi      # 0xa535
movl $0x3e, %edx
callq 0x2200
movq 0xaaf5(%rip), %rdi      # 0xdfd8
leaq 0x708a(%rip), %rsi      # 0xa574
movl $0x4e, %edx
callq 0x2200
movq 0xaadd(%rip), %rdi      # 0xdfd8
leaq 0x70c1(%rip), %rsi      # 0xa5c3
movl $0x4d, %edx
callq 0x2200
movq 0xaac5(%rip), %rdi      # 0xdfd8
leaq 0x70f7(%rip), %rsi      # 0xa611
movl $0x2a, %edx
callq 0x2200
movq 0xaaad(%rip), %rdi      # 0xdfd8
leaq 0x710a(%rip), %rsi      # 0xa63c
movl $0x4b, %edx
callq 0x2200
movq 0xaa95(%rip), %rdi      # 0xdfd8
leaq 0x713e(%rip), %rsi      # 0xa688
movl $0x44, %edx
callq 0x2200
movq 0xaa7d(%rip), %rdi      # 0xdfd8
leaq 0x716b(%rip), %rsi      # 0xa6cd
movl $0x48, %edx
callq 0x2200
movl $0x4d, %edx
leaq 0x719e(%rip), %rsi      # 0xa716
jmp 0x32f5
movq 0xaa54(%rip), %rdi      # 0xdfd8
leaq 0x71d9(%rip), %rsi      # 0xa764
movl $0x2d, %edx
callq 0x2200
leaq 0x58(%rsp), %rdi
callq 0x2060
jmp 0x331b
jmp 0x35a8
jmp 0x35a8
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x2060
jmp 0x360b
jmp 0x3608
jmp 0x3608
jmp 0x3608
jmp 0x3608
jmp 0x35e7
jmp 0x3608
jmp 0x3608
jmp 0x3608
jmp 0x3608
jmp 0x3608
jmp 0x3608
jmp 0x35e7
jmp 0x35e7
jmp 0x35e7
jmp 0x3608
jmp 0x3608
jmp 0x3608
jmp 0x3608
jmp 0x3608
jmp 0x3608
jmp 0x35e7
jmp 0x3608
jmp 0x35e7
jmp 0x3608
movq %rax, %rbx
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x360b
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x21d0
jmp 0x360b
movq %rax, %rbx
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x3627
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x21d0
movq %rbx, %rdi
callq 0x22e0
nop