// File: richardposner[P]BioNetFit2/src/code/Swarm.cpp
// Function: Swarm::runSDE()
void Swarm::runSDE() {
	if (options.verbosity >= 3) {
		cout << "Running a synchronous DE fit" << endl;
	}

	// Create an output directory for each island
	if (!checkIfFileExists(options.jobOutputDir + toString(1))) {
		string createDirCmd = "mkdir " + options.jobOutputDir + toString(1);
		runCommand(createDirCmd);
	}

	if (options.verbosity >= 3) {
		cout << "Generating island topology" << endl;
	}
	vector<vector<unsigned int> > islandTopology;
	if (!resumingSavedSwarm) {
		// Generate all particles that will be present in the swarm
		islandTopology = generateTopology(options.numIslands);
		// Map all particles and islands
		unsigned int particlesPerIsland = options.swarmSize / options.numIslands;
		unsigned int currParticle = 1;
		for (unsigned int i = 1; i <= options.numIslands; ++i) {
			for (unsigned int p = 0; p < particlesPerIsland; ++p) {
				particleToIsland_[currParticle] = i;
				islandToParticle_[i][p] = currParticle;
				if (options.verbosity >= 4) {
					cout << i << " " << p << " " << islandToParticle_[i][p] << endl;
				}
				if(options.verbosity >= 3){
					cout << "Particle to island " << particleToIsland_[currParticle] << endl;
					cout << "currPar " << currParticle << endl;
				}
				++currParticle;
			}
		}
	}

	saveSwarmState();

	//if (options.verbosity >= 3) {
	//	cout << "Launching first generation" << endl;
	//}

	unordered_map<unsigned int, vector<double> > finishedParticles;
	bool stopCriteria = false;
	vector<unsigned int> islandFinishedParticles(options.numIslands + 1, 0);

	map<unsigned int, vector<vector<double> > > migrationSets;

	bool trialLoop = false;




	//saveSwarmState();
	string path; //Raquel added
	//vector<unsigned int> finishedParticles;
	//vector<unsigned int> particlestoProcess;


	//int numFinishedParticles = 0;

	//unsigned int p = 1;
	//int mid; //Raquel added
	int sp = 0; //Raquel added
	//int nModels = options.models.size(); //Raquel added




	while(!stopCriteria) {


		//numFinishedParticles = options.swarmSize;
		string currentDirectory = options.jobOutputDir + toString(currentGeneration);
		if (options.deleteOldFiles) {
			//cout << "RAQUEL: starting cleanupFiles" << endl;

			cleanupFiles(currentDirectory.c_str());
			//cout << "RAQUEL: finished cleanupFiles" << endl;

		}


		//cout << "RAQUEL: starting runGeneration" << endl;
		runGeneration();
		//usleep(250000);

		// Create the output directory for the next generation
		if (!checkIfFileExists(options.jobOutputDir + toString(currentGeneration))) {
			string createDirCmd = "mkdir " + options.jobOutputDir + toString(currentGeneration);
			int retryCounter = 0;
			while (runCommand(createDirCmd) != 0 && !checkIfFileExists(options.jobOutputDir + toString(currentGeneration))) {
				if(++retryCounter >= 100) {
					outputError("Error: Couldn't create " + options.jobOutputDir + toString(currentGeneration) + " to hold next generation's output.");
				}
				//sleep(1);
				if(options.verbosity>=3){

					cout << "Trying again to create dir" << endl;
				}
			}
		}

		saveSwarmState();
		//cout << "RAQUEL: finished saveSwarmState" << endl;

		string outputPath = options.jobOutputDir + toString(currentGeneration - 1 ) + "_summary.txt";

		cout << "Generation: " << toString(currentGeneration - 1 ) << endl;

		outputRunSummary(outputPath);

		unordered_map<unsigned int, vector<double> > finished;


		for (int i = 1; i <= options.swarmSize; i++){
			//for (int mid=0; mid < options.models.size(); mid++){
				finished.insert(make_pair(i, subparticleCurrParamSets_[i][0]));


			//}

		}

		if(options.verbosity >= 4){
			cout << "RAQUEL FINISHED SIZE " << finished.size() << endl;
			cout << "vector size " << islandFinishedParticles.size() << endl;
		}
		if (finished.size()) {
			finishedParticles.insert(finished.begin(), finished.end());
			//numFinishedParticles = finished.size();
		}
		int counter = 0;


//		for(auto index = particleToIsland_.begin(); index != particleToIsland_.end(); )

		for (auto particle = finishedParticles.begin(); particle != finishedParticles.end(); ++particle) {
			// Increment the counter that tracks the number of particles finished
			// for a given island
			counter++;
			if(options.verbosity >= 4){
				cout << "counter" << counter << endl;
				cout << "Particle first " << particle->first  << endl;
				cout << "Particle to island " << particleToIsland_[particle->first] << endl;
				cout << "Particle to isalnd size " << particleToIsland_.size() << endl;
			}
			islandFinishedParticles[particleToIsland_[particle->first]] += 1;
		}

		finishedParticles.clear();
		//numFinishedParticles = 0;

		// Done processing params. Now we need to...
		// Check each island to see if it has completed its generation
		for (unsigned int island = 1; island <= options.numIslands; ++island) {
			// If the number finished in this island is equal to the total size of the island
			if (islandFinishedParticles.at(island) == (options.swarmSize / options.numIslands)) {
				if(options.verbosity >= 3){
					cout << "Island " << island << " finished" << endl;
				}
				// Loop through the particles in the island
				for (auto particle = islandToParticle_.at(island).begin(); particle != islandToParticle_.at(island).end(); ++particle) {

					// Will hold mutated and crossed over parameter sets
					vector<double> newParamSet;
					// If we're not in a trial loop, we should mutate and crossover
					if (trialLoop == false) {
						// Create a mutation set for the particle
						newParamSet = mutateParticleDE(*particle);

						// Run crossover for the particle
						newParamSet = crossoverParticleDE(*particle, newParamSet);
					}
					// If we're in a main loop, we just send the current parameter
					// set back to the particle
					else {
						newParamSet = particleCurrParamSets_.at(*particle);
					}

					// Convert our param set to string for sending
					vector<string> paramVecStr;
					for (auto param = newParamSet.begin(); param != newParamSet.end(); ++param) {
						paramVecStr.push_back(toString(*param));
					}

					// Send new param sets to particles for next generation
//					swarmComm->sendToSwarm(0, *particle, SEND_FINAL_PARAMS_TO_PARTICLE, false, paramVecStr);

					//Raquel updated the interprocess communication, added the loop bellow
					for(unsigned int mid = 0; mid < options.models.size(); mid++){
						sp = fcalcsubParID(*particle, mid, options.models.size());
						swarmComm->sendToSwarm(0, sp, SEND_FINAL_PARAMS_TO_PARTICLE, false, paramVecStr);
					}


					// Empty our finished particle counter for the next loop
					islandFinishedParticles[island] = 0;
				}
			}
		}


			// Check for stop criteria
			stopCriteria = checkStopCriteria();
			if(options.verbosity >= 3){
				cout << "Stop Criteria value: " << stopCriteria << endl;
			}
			if (!stopCriteria) {
				// Send/receive migration sets
				if ((options.migrationFrequency != 0) && (currentGeneration % options.migrationFrequency == 0)) {

					for (unsigned int island = 1; island <= options.numIslands; ++island) {
						sendMigrationSetDE(island, islandTopology, migrationSets);
					}

					for (unsigned int island = 1; island <= options.numIslands; ++island) {
						recvMigrationSetDE(island, migrationSets);
					}
				}

//				string outputPath = options.jobOutputDir + toString(currentGeneration) + "_summary.txt";
	//			outputRunSummary(outputPath);
				//++currentGeneration;
				//cout << "Switching to main loop" << endl;
				//trialLoop = false;

			}
		//}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x7d0, %rsp            # imm = 0x7D0
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x5d8(%rbp)
cmpl $0x3, 0x1614(%rax)
jb 0xf0f65
movq 0x1e4006(%rip), %rdi    # 0x2d4f50
leaq 0xf24af(%rip), %rsi     # 0x1e3400
callq 0x2ff50
movq %rax, %rdi
movq 0x1e4068(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
movq -0x5d8(%rbp), %rax
addq $0x1520, %rax           # imm = 0x1520
movq %rax, -0x5e8(%rbp)
leaq -0x48(%rbp), %rdi
movq %rdi, -0x5e0(%rbp)
movl $0x1, %esi
callq 0x17ce40
movq -0x5e8(%rbp), %rsi
movq -0x5e0(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0xb3380
jmp 0xf0fa7
leaq -0x28(%rbp), %rdi
callq 0x17d410
movl %eax, -0x5ec(%rbp)
jmp 0xf0fb8
movl -0x5ec(%rbp), %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x5ed(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x311e8
leaq -0x48(%rbp), %rdi
callq 0x311e8
movb -0x5ed(%rbp), %al
testb $0x1, %al
jne 0xf0fed
jmp 0xf1128
movq -0x5d8(%rbp), %rdx
addq $0x1520, %rdx           # imm = 0x1520
leaq 0xe9795(%rip), %rsi     # 0x1da797
leaq -0x98(%rbp), %rdi
callq 0x44240
leaq -0xb8(%rbp), %rdi
movl $0x1, %esi
callq 0x17ce40
jmp 0xf1021
leaq -0x78(%rbp), %rdi
leaq -0x98(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
callq 0x9c7d0
jmp 0xf103a
leaq -0xb8(%rbp), %rdi
callq 0x311e8
leaq -0x98(%rbp), %rdi
callq 0x311e8
leaq -0xd8(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x2f300
jmp 0xf1064
leaq -0xd8(%rbp), %rdi
callq 0x17e3f0
jmp 0xf1072
leaq -0xd8(%rbp), %rdi
callq 0x311e8
leaq -0x78(%rbp), %rdi
callq 0x311e8
jmp 0xf1128
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf10af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x311e8
leaq -0x48(%rbp), %rdi
callq 0x311e8
jmp 0xf28b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf10e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x311e8
leaq -0x98(%rbp), %rdi
callq 0x311e8
jmp 0xf28b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf111a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x311e8
leaq -0x78(%rbp), %rdi
callq 0x311e8
jmp 0xf28b2
movq -0x5d8(%rbp), %rax
cmpl $0x3, 0x1614(%rax)
jb 0xf115a
movq 0x1e3e11(%rip), %rdi    # 0x2d4f50
leaq 0xf22d7(%rip), %rsi     # 0x1e341d
callq 0x2ff50
movq %rax, %rdi
movq 0x1e3e73(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
leaq -0xf0(%rbp), %rdi
callq 0x120e30
movq -0x5d8(%rbp), %rax
testb $0x1, 0x13f0(%rax)
jne 0xf1475
movq -0x5d8(%rbp), %rsi
movl 0x16fc(%rsi), %edx
leaq -0x108(%rbp), %rdi
callq 0xfa3e0
jmp 0xf1195
leaq -0xf0(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x124320
leaq -0x108(%rbp), %rdi
callq 0x121030
movq -0x5d8(%rbp), %rcx
movl 0x1620(%rcx), %eax
xorl %edx, %edx
divl 0x16fc(%rcx)
movl %eax, -0x10c(%rbp)
movl $0x1, -0x110(%rbp)
movl $0x1, -0x114(%rbp)
movq -0x5d8(%rbp), %rcx
movl -0x114(%rbp), %eax
cmpl 0x16fc(%rcx), %eax
ja 0xf1473
movl $0x0, -0x118(%rbp)
movl -0x118(%rbp), %eax
cmpl -0x10c(%rbp), %eax
jae 0xf145d
movq -0x5d8(%rbp), %rdi
movl -0x114(%rbp), %eax
movl %eax, -0x5f8(%rbp)
addq $0x1d20, %rdi           # imm = 0x1D20
movl -0x110(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movl -0x5f8(%rbp), %ecx
movq -0x5d8(%rbp), %rdi
movl %ecx, (%rax)
movl -0x110(%rbp), %eax
movl %eax, -0x5f4(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x114(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movl -0x118(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movl -0x5f4(%rbp), %edx
movq %rax, %rcx
movq -0x5d8(%rbp), %rax
movl %edx, (%rcx)
cmpl $0x4, 0x1614(%rax)
jb 0xf1375
movl -0x114(%rbp), %esi
movq 0x1e3ca6(%rip), %rdi    # 0x2d4f50
callq 0x30640
movq %rax, -0x600(%rbp)
jmp 0xf12b8
movq -0x600(%rbp), %rdi
leaq 0xf2e09(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0x608(%rbp)
jmp 0xf12d4
movq -0x608(%rbp), %rdi
movl -0x118(%rbp), %esi
callq 0x30640
movq %rax, -0x610(%rbp)
jmp 0xf12ef
movq -0x610(%rbp), %rdi
leaq 0xf2dd2(%rip), %rsi     # 0x1e40cf
callq 0x2ff50
movq %rax, -0x618(%rbp)
jmp 0xf130b
movq -0x5d8(%rbp), %rdi
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x114(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movl -0x118(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq -0x618(%rbp), %rdi
movl (%rax), %esi
callq 0x30640
movq %rax, -0x620(%rbp)
jmp 0xf134d
movq -0x620(%rbp), %rdi
movq 0x1e3c6d(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf1362
jmp 0xf1375
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf28a6
movq -0x5d8(%rbp), %rax
cmpl $0x3, 0x1614(%rax)
jb 0xf143a
movq 0x1e3bc0(%rip), %rdi    # 0x2d4f50
leaq 0xf20a1(%rip), %rsi     # 0x1e3438
callq 0x2ff50
movq %rax, -0x628(%rbp)
jmp 0xf13a5
movq -0x5d8(%rbp), %rdi
addq $0x1d20, %rdi           # imm = 0x1D20
movl -0x110(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq -0x628(%rbp), %rdi
movl (%rax), %esi
callq 0x30640
movq %rax, -0x630(%rbp)
jmp 0xf13d7
movq -0x630(%rbp), %rdi
movq 0x1e3be3(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf13ec
movq 0x1e3b5d(%rip), %rdi    # 0x2d4f50
leaq 0xf2052(%rip), %rsi     # 0x1e344c
callq 0x2ff50
movq %rax, -0x638(%rbp)
jmp 0xf1408
movq -0x638(%rbp), %rdi
movl -0x110(%rbp), %esi
callq 0x30640
movq %rax, -0x640(%rbp)
jmp 0xf1423
movq -0x640(%rbp), %rdi
movq 0x1e3b97(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf1438
jmp 0xf143a
movl -0x110(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x110(%rbp)
movl -0x118(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x118(%rbp)
jmp 0xf1206
jmp 0xf145f
movl -0x114(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x114(%rbp)
jmp 0xf11e3
jmp 0xf1475
movq -0x5d8(%rbp), %rdi
callq 0x10f2c0
jmp 0xf1483
leaq -0x150(%rbp), %rdi
callq 0x123840
movq -0x5d8(%rbp), %rax
movb $0x0, -0x151(%rbp)
movl 0x16fc(%rax), %eax
incl %eax
movq %rax, -0x650(%rbp)
movl $0x0, -0x174(%rbp)
leaq -0x175(%rbp), %rdi
movq %rdi, -0x648(%rbp)
callq 0xb4e90
movq -0x650(%rbp), %rsi
movq -0x648(%rbp), %rcx
leaq -0x170(%rbp), %rdi
leaq -0x174(%rbp), %rdx
callq 0x122290
jmp 0xf14ec
leaq -0x175(%rbp), %rdi
callq 0xb8c40
leaq -0x1a8(%rbp), %rdi
callq 0x124350
movb $0x0, -0x1a9(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x2f880
movl $0x0, -0x1d4(%rbp)
movb -0x151(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0xf1532
jmp 0xf2831
movq -0x5d8(%rbp), %rax
movq %rax, %rcx
addq $0x1520, %rcx           # imm = 0x1520
movq %rcx, -0x658(%rbp)
movl 0x13e8(%rax), %esi
leaq -0x218(%rbp), %rdi
callq 0x17e460
jmp 0xf155e
movq -0x658(%rbp), %rsi
leaq -0x1f8(%rbp), %rdi
leaq -0x218(%rbp), %rdx
callq 0xb3380
jmp 0xf157a
leaq -0x218(%rbp), %rdi
callq 0x311e8
movq -0x5d8(%rbp), %rax
testb $0x1, 0x1646(%rax)
je 0xf1611
leaq -0x1f8(%rbp), %rdi
callq 0x2f290
movq -0x5d8(%rbp), %rdi
movq %rax, %rsi
callq 0x105080
jmp 0xf15b3
jmp 0xf1611
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x175(%rbp), %rdi
callq 0xb8c40
jmp 0xf289a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf2876
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x311e8
jmp 0xf2876
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf2823
movq -0x5d8(%rbp), %rdi
callq 0x100a10
jmp 0xf161f
movq -0x5d8(%rbp), %rax
movq %rax, %rcx
addq $0x1520, %rcx           # imm = 0x1520
movq %rcx, -0x660(%rbp)
movl 0x13e8(%rax), %esi
leaq -0x258(%rbp), %rdi
callq 0x17e460
jmp 0xf164b
movq -0x660(%rbp), %rsi
leaq -0x238(%rbp), %rdi
leaq -0x258(%rbp), %rdx
callq 0xb3380
jmp 0xf1667
leaq -0x238(%rbp), %rdi
callq 0x17d410
movl %eax, -0x664(%rbp)
jmp 0xf167b
movl -0x664(%rbp), %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x665(%rbp)
leaq -0x238(%rbp), %rdi
callq 0x311e8
leaq -0x258(%rbp), %rdi
callq 0x311e8
movb -0x665(%rbp), %al
testb $0x1, %al
jne 0xf16b6
jmp 0xf1ae0
movq -0x5d8(%rbp), %rdx
addq $0x1520, %rdx           # imm = 0x1520
leaq 0xe90cc(%rip), %rsi     # 0x1da797
leaq -0x298(%rbp), %rdi
callq 0x44240
jmp 0xf16d9
movq -0x5d8(%rbp), %rax
movl 0x13e8(%rax), %esi
leaq -0x2b8(%rbp), %rdi
callq 0x17e460
jmp 0xf16f4
leaq -0x278(%rbp), %rdi
leaq -0x298(%rbp), %rsi
leaq -0x2b8(%rbp), %rdx
callq 0x9c7d0
jmp 0xf1710
leaq -0x2b8(%rbp), %rdi
callq 0x311e8
leaq -0x298(%rbp), %rdi
callq 0x311e8
movl $0x0, -0x2bc(%rbp)
movb $0x0, -0x321(%rbp)
movb $0x0, -0x322(%rbp)
leaq -0x2e0(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0x2f300
jmp 0xf1755
leaq -0x2e0(%rbp), %rdi
callq 0x17e3f0
movl %eax, -0x66c(%rbp)
jmp 0xf1769
movl -0x66c(%rbp), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x66d(%rbp)
je 0xf17fa
movq -0x5d8(%rbp), %rax
movq %rax, %rcx
addq $0x1520, %rcx           # imm = 0x1520
movq %rcx, -0x678(%rbp)
movl 0x13e8(%rax), %esi
leaq -0x320(%rbp), %rdi
callq 0x17e460
jmp 0xf17a8
movq -0x678(%rbp), %rsi
movb $0x1, -0x321(%rbp)
leaq -0x300(%rbp), %rdi
leaq -0x320(%rbp), %rdx
callq 0xb3380
jmp 0xf17cb
movb $0x1, -0x322(%rbp)
leaq -0x300(%rbp), %rdi
callq 0x17d410
movl %eax, -0x67c(%rbp)
jmp 0xf17e6
movl -0x67c(%rbp), %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x66d(%rbp)
movb -0x66d(%rbp), %al
movb %al, -0x67d(%rbp)
testb $0x1, -0x322(%rbp)
jne 0xf1811
jmp 0xf181d
leaq -0x300(%rbp), %rdi
callq 0x311e8
testb $0x1, -0x321(%rbp)
jne 0xf1828
jmp 0xf1834
leaq -0x320(%rbp), %rdi
callq 0x311e8
leaq -0x2e0(%rbp), %rdi
callq 0x311e8
movb -0x67d(%rbp), %al
testb $0x1, %al
jne 0xf184f
jmp 0xf1ac1
movl -0x2bc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2bc(%rbp)
cmpl $0x64, %eax
jl 0xf1a79
movq -0x5d8(%rbp), %rdx
addq $0x1520, %rdx           # imm = 0x1520
leaq 0xf011a(%rip), %rsi     # 0x1e1996
leaq -0x388(%rbp), %rdi
callq 0x44240
jmp 0xf188a
movq -0x5d8(%rbp), %rax
movl 0x13e8(%rax), %esi
leaq -0x3a8(%rbp), %rdi
callq 0x17e460
jmp 0xf18a5
leaq -0x368(%rbp), %rdi
leaq -0x388(%rbp), %rsi
leaq -0x3a8(%rbp), %rdx
callq 0x9c7d0
jmp 0xf18c1
leaq 0xf00e6(%rip), %rdx     # 0x1e19ae
leaq -0x348(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x441f0
jmp 0xf18dd
movq -0x5d8(%rbp), %rdi
leaq -0x348(%rbp), %rsi
callq 0xeada0
jmp 0xf18f2
leaq -0x348(%rbp), %rdi
callq 0x311e8
leaq -0x368(%rbp), %rdi
callq 0x311e8
leaq -0x3a8(%rbp), %rdi
callq 0x311e8
leaq -0x388(%rbp), %rdi
callq 0x311e8
jmp 0xf1a79
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf194d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x238(%rbp), %rdi
callq 0x311e8
leaq -0x258(%rbp), %rdi
callq 0x311e8
jmp 0xf2823
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf1984
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x2b8(%rbp), %rdi
callq 0x311e8
leaq -0x298(%rbp), %rdi
callq 0x311e8
jmp 0xf2823
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf1acf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf1a00
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf19e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
testb $0x1, -0x322(%rbp)
jne 0xf19d9
jmp 0xf19e5
leaq -0x300(%rbp), %rdi
callq 0x311e8
jmp 0xf19e7
testb $0x1, -0x321(%rbp)
jne 0xf19f2
jmp 0xf19fe
leaq -0x320(%rbp), %rdi
callq 0x311e8
jmp 0xf1a00
leaq -0x2e0(%rbp), %rdi
callq 0x311e8
jmp 0xf1acf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf1a6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf1a5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf1a53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x311e8
leaq -0x368(%rbp), %rdi
callq 0x311e8
leaq -0x3a8(%rbp), %rdi
callq 0x311e8
leaq -0x388(%rbp), %rdi
callq 0x311e8
jmp 0xf1acf
movq -0x5d8(%rbp), %rax
cmpl $0x3, 0x1614(%rax)
jb 0xf1abc
movq 0x1e34c0(%rip), %rdi    # 0x2d4f50
leaq 0xeff3a(%rip), %rsi     # 0x1e19d1
callq 0x2ff50
movq %rax, -0x688(%rbp)
jmp 0xf1aa5
movq -0x688(%rbp), %rdi
movq 0x1e3515(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf1aba
jmp 0xf1abc
jmp 0xf1732
leaq -0x278(%rbp), %rdi
callq 0x311e8
jmp 0xf1ae0
leaq -0x278(%rbp), %rdi
callq 0x311e8
jmp 0xf2823
movq -0x5d8(%rbp), %rdi
callq 0x10f2c0
jmp 0xf1aee
movq -0x5d8(%rbp), %rax
movq %rax, %rcx
addq $0x1520, %rcx           # imm = 0x1520
movq %rcx, -0x690(%rbp)
movl 0x13e8(%rax), %esi
decl %esi
leaq -0x408(%rbp), %rdi
callq 0x17e460
jmp 0xf1b1c
movq -0x690(%rbp), %rsi
leaq -0x3e8(%rbp), %rdi
leaq -0x408(%rbp), %rdx
callq 0xb3380
jmp 0xf1b38
leaq 0xf1816(%rip), %rdx     # 0x1e3355
leaq -0x3c8(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0x441f0
jmp 0xf1b54
leaq -0x3e8(%rbp), %rdi
callq 0x311e8
leaq -0x408(%rbp), %rdi
callq 0x311e8
movq 0x1e33dd(%rip), %rdi    # 0x2d4f50
leaq 0xf02b8(%rip), %rsi     # 0x1e1e32
callq 0x2ff50
movq %rax, -0x698(%rbp)
jmp 0xf1b88
movq -0x5d8(%rbp), %rax
movl 0x13e8(%rax), %esi
decl %esi
leaq -0x428(%rbp), %rdi
callq 0x17e460
jmp 0xf1ba5
movq -0x698(%rbp), %rdi
leaq -0x428(%rbp), %rsi
callq 0x2f780
movq %rax, -0x6a0(%rbp)
jmp 0xf1bc1
movq -0x6a0(%rbp), %rdi
movq 0x1e33f9(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf1bd6
leaq -0x428(%rbp), %rdi
callq 0x311e8
leaq -0x448(%rbp), %rdi
leaq -0x3c8(%rbp), %rsi
callq 0x2f300
jmp 0xf1bf7
movq -0x5d8(%rbp), %rdi
leaq -0x448(%rbp), %rsi
callq 0x105530
jmp 0xf1c0c
leaq -0x448(%rbp), %rdi
callq 0x311e8
leaq -0x480(%rbp), %rdi
callq 0x123840
movl $0x1, -0x484(%rbp)
movq -0x5d8(%rbp), %rcx
movl -0x484(%rbp), %eax
cmpl 0x1620(%rcx), %eax
jg 0xf1dc4
movq -0x5d8(%rbp), %rdi
addq $0x1460, %rdi           # imm = 0x1460
movl -0x484(%rbp), %eax
movl %eax, -0x4ac(%rbp)
leaq -0x4ac(%rbp), %rsi
callq 0xd0d50
movq %rax, -0x6a8(%rbp)
jmp 0xf1c76
movq -0x6a8(%rbp), %rdi
movl $0x0, -0x4b0(%rbp)
leaq -0x4b0(%rbp), %rsi
callq 0xd0e30
movq %rax, -0x6b0(%rbp)
jmp 0xf1c9c
movq -0x6b0(%rbp), %rdx
leaq -0x4a8(%rbp), %rdi
leaq -0x484(%rbp), %rsi
callq 0x1243b0
jmp 0xf1cb8
leaq -0x480(%rbp), %rdi
leaq -0x4a8(%rbp), %rsi
callq 0x124370
movb %dl, -0x6b9(%rbp)
movq %rax, -0x6b8(%rbp)
jmp 0xf1cda
movb -0x6b9(%rbp), %al
movq -0x6b8(%rbp), %rcx
movq %rcx, -0x4c0(%rbp)
movb %al, -0x4b8(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0x121ba0
movl -0x484(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x484(%rbp)
jmp 0xf1c2e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf1d3a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x3e8(%rbp), %rdi
callq 0x311e8
leaq -0x408(%rbp), %rdi
callq 0x311e8
jmp 0xf2823
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf2817
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x428(%rbp), %rdi
callq 0x311e8
jmp 0xf2817
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x448(%rbp), %rdi
callq 0x311e8
jmp 0xf2817
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf280b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0x121ba0
jmp 0xf280b
movq -0x5d8(%rbp), %rax
cmpl $0x4, 0x1614(%rax)
jb 0xf1e84
movq 0x1e3171(%rip), %rdi    # 0x2d4f50
leaq 0xf166f(%rip), %rsi     # 0x1e3455
callq 0x2ff50
movq %rax, -0x6c8(%rbp)
jmp 0xf1df4
leaq -0x480(%rbp), %rdi
callq 0x1243f0
movq -0x6c8(%rbp), %rdi
movq %rax, %rsi
callq 0x30cf0
movq %rax, -0x6d0(%rbp)
jmp 0xf1e18
movq -0x6d0(%rbp), %rdi
movq 0x1e31a2(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf1e2d
movq 0x1e311c(%rip), %rdi    # 0x2d4f50
leaq 0xf1630(%rip), %rsi     # 0x1e346b
callq 0x2ff50
movq %rax, -0x6d8(%rbp)
jmp 0xf1e49
leaq -0x170(%rbp), %rdi
callq 0xb46f0
movq -0x6d8(%rbp), %rdi
movq %rax, %rsi
callq 0x30cf0
movq %rax, -0x6e0(%rbp)
jmp 0xf1e6d
movq -0x6e0(%rbp), %rdi
movq 0x1e314d(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf1e82
jmp 0xf1e84
leaq -0x480(%rbp), %rdi
callq 0x1243f0
cmpq $0x0, %rax
je 0xf1ee1
leaq -0x480(%rbp), %rdi
movq %rdi, -0x6e8(%rbp)
callq 0x124450
movq -0x6e8(%rbp), %rdi
movq %rax, -0x4c8(%rbp)
callq 0x124480
movq %rax, -0x4d0(%rbp)
movq -0x4c8(%rbp), %rsi
movq -0x4d0(%rbp), %rdx
leaq -0x150(%rbp), %rdi
callq 0x124410
jmp 0xf1edf
jmp 0xf1ee1
movl $0x0, -0x4d4(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x124450
movq %rax, -0x4e0(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x124480
movq %rax, -0x4e8(%rbp)
leaq -0x4e0(%rbp), %rdi
leaq -0x4e8(%rbp), %rsi
callq 0x1244b0
testb $0x1, %al
jne 0xf1f2d
jmp 0xf211e
movq -0x5d8(%rbp), %rax
movl -0x4d4(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, -0x4d4(%rbp)
cmpl $0x4, 0x1614(%rax)
jb 0xf20c6
movq 0x1e2ff9(%rip), %rdi    # 0x2d4f50
leaq 0xef817(%rip), %rsi     # 0x1e1775
callq 0x2ff50
movq %rax, -0x6f0(%rbp)
jmp 0xf1f6c
movq -0x6f0(%rbp), %rdi
movl -0x4d4(%rbp), %esi
callq 0x2f800
movq %rax, -0x6f8(%rbp)
jmp 0xf1f87
movq -0x6f8(%rbp), %rdi
movq 0x1e3033(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf1f9c
movq 0x1e2fad(%rip), %rdi    # 0x2d4f50
leaq 0xf14ce(%rip), %rsi     # 0x1e3478
callq 0x2ff50
movq %rax, -0x700(%rbp)
jmp 0xf1fb8
leaq -0x4e0(%rbp), %rdi
callq 0x1244e0
movq -0x700(%rbp), %rdi
movl (%rax), %esi
callq 0x30640
movq %rax, -0x708(%rbp)
jmp 0xf1fdb
movq -0x708(%rbp), %rdi
movq 0x1e2fdf(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf1ff0
movq 0x1e2f59(%rip), %rdi    # 0x2d4f50
leaq 0xf143a(%rip), %rsi     # 0x1e3438
callq 0x2ff50
movq %rax, -0x710(%rbp)
jmp 0xf200c
movq -0x5d8(%rbp), %rax
addq $0x1d20, %rax           # imm = 0x1D20
movq %rax, -0x720(%rbp)
leaq -0x4e0(%rbp), %rdi
callq 0x1244e0
movq -0x720(%rbp), %rdi
movl (%rax), %eax
movl %eax, %esi
callq 0xccc10
movq -0x710(%rbp), %rdi
movl (%rax), %esi
callq 0x30640
movq %rax, -0x718(%rbp)
jmp 0xf2053
movq -0x718(%rbp), %rdi
movq 0x1e2f67(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf2068
movq 0x1e2ee1(%rip), %rdi    # 0x2d4f50
leaq 0xf1412(%rip), %rsi     # 0x1e3488
callq 0x2ff50
movq %rax, -0x728(%rbp)
jmp 0xf2084
movq -0x5d8(%rbp), %rdi
addq $0x1d20, %rdi           # imm = 0x1D20
callq 0xb46f0
movq -0x728(%rbp), %rdi
movq %rax, %rsi
callq 0x30cf0
movq %rax, -0x730(%rbp)
jmp 0xf20af
movq -0x730(%rbp), %rdi
movq 0x1e2f0b(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf20c4
jmp 0xf20c6
movq -0x5d8(%rbp), %rax
addq $0x1d20, %rax           # imm = 0x1D20
movq %rax, -0x738(%rbp)
leaq -0x4e0(%rbp), %rdi
callq 0x1244e0
movq -0x738(%rbp), %rdi
movl (%rax), %eax
movl %eax, %esi
callq 0xccc10
movl (%rax), %eax
movl %eax, %esi
leaq -0x170(%rbp), %rdi
callq 0xccc10
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
leaq -0x4e0(%rbp), %rdi
callq 0x124510
jmp 0xf1efe
leaq -0x150(%rbp), %rdi
callq 0x124540
movl $0x1, -0x4ec(%rbp)
movq -0x5d8(%rbp), %rcx
movl -0x4ec(%rbp), %eax
cmpl 0x16fc(%rcx), %eax
ja 0xf2634
movl -0x4ec(%rbp), %eax
movl %eax, %esi
leaq -0x170(%rbp), %rdi
callq 0xb4710
movq %rax, -0x740(%rbp)
jmp 0xf216a
movq -0x5d8(%rbp), %rcx
movq -0x740(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x744(%rbp)
movl 0x1620(%rcx), %eax
xorl %edx, %edx
divl 0x16fc(%rcx)
movl %eax, %ecx
movl -0x744(%rbp), %eax
cmpl %ecx, %eax
jne 0xf261e
movq -0x5d8(%rbp), %rax
cmpl $0x3, 0x1614(%rax)
jb 0xf2218
movq 0x1e2d9b(%rip), %rdi    # 0x2d4f50
leaq 0xf12e5(%rip), %rsi     # 0x1e34a1
callq 0x2ff50
movq %rax, -0x750(%rbp)
jmp 0xf21ca
movq -0x750(%rbp), %rdi
movl -0x4ec(%rbp), %esi
callq 0x30640
movq %rax, -0x758(%rbp)
jmp 0xf21e5
movq -0x758(%rbp), %rdi
leaq 0xe9e89(%rip), %rsi     # 0x1dc07c
callq 0x2ff50
movq %rax, -0x760(%rbp)
jmp 0xf2201
movq -0x760(%rbp), %rdi
movq 0x1e2db9(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf2216
jmp 0xf2218
movq -0x5d8(%rbp), %rdi
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x4ec(%rbp), %eax
movl %eax, %esi
callq 0x124560
movq %rax, -0x768(%rbp)
jmp 0xf223c
movq -0x768(%rbp), %rdi
callq 0xcc840
movq %rax, -0x4f8(%rbp)
movq -0x5d8(%rbp), %rdi
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x4ec(%rbp), %eax
movl %eax, %esi
callq 0x124560
movq %rax, -0x770(%rbp)
jmp 0xf2273
movq -0x770(%rbp), %rdi
callq 0xcc6d0
movq %rax, -0x500(%rbp)
leaq -0x4f8(%rbp), %rdi
leaq -0x500(%rbp), %rsi
callq 0xd0cd0
testb $0x1, %al
jne 0xf22a2
jmp 0xf261c
leaq -0x518(%rbp), %rdi
callq 0xb2580
movb -0x1a9(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0xf23c1
leaq -0x4f8(%rbp), %rdi
callq 0xd0d10
movq -0x5d8(%rbp), %rsi
movl (%rax), %edx
leaq -0x530(%rbp), %rdi
xorps %xmm0, %xmm0
callq 0x114120
jmp 0xf22e8
leaq -0x518(%rbp), %rdi
movq %rdi, -0x780(%rbp)
leaq -0x530(%rbp), %rsi
movq %rsi, -0x788(%rbp)
callq 0x122d70
movq -0x788(%rbp), %rdi
callq 0xb2660
leaq -0x4f8(%rbp), %rdi
callq 0xd0d10
movq -0x780(%rbp), %rsi
movl (%rax), %eax
movl %eax, -0x774(%rbp)
leaq -0x560(%rbp), %rdi
callq 0xb2bc0
jmp 0xf233e
movl -0x774(%rbp), %edx
movq -0x5d8(%rbp), %rsi
leaq -0x548(%rbp), %rdi
leaq -0x560(%rbp), %rcx
xorps %xmm0, %xmm0
xorl %r8d, %r8d
callq 0x115e50
jmp 0xf2366
leaq -0x518(%rbp), %rdi
leaq -0x548(%rbp), %rsi
callq 0x122d70
leaq -0x548(%rbp), %rdi
callq 0xb2660
leaq -0x560(%rbp), %rdi
callq 0xb2660
jmp 0xf2410
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf260b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x560(%rbp), %rdi
callq 0xb2660
jmp 0xf260b
movq -0x5d8(%rbp), %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x798(%rbp)
leaq -0x4f8(%rbp), %rdi
callq 0xd0d10
movq -0x798(%rbp), %rdi
movq %rax, %rsi
callq 0x122470
movq %rax, -0x790(%rbp)
jmp 0xf23f9
movq -0x790(%rbp), %rsi
leaq -0x518(%rbp), %rdi
callq 0x121d70
jmp 0xf240e
jmp 0xf2410
leaq -0x578(%rbp), %rdi
callq 0x448b0
leaq -0x518(%rbp), %rdi
callq 0xb2ea0
movq %rax, -0x580(%rbp)
leaq -0x518(%rbp), %rdi
callq 0xbdfd0
movq %rax, -0x588(%rbp)
leaq -0x580(%rbp), %rdi
leaq -0x588(%rbp), %rsi
callq 0x122510
testb $0x1, %al
jne 0xf245b
jmp 0xf24d6
leaq -0x580(%rbp), %rdi
callq 0xb2ed0
movsd (%rax), %xmm0
leaq -0x5a8(%rbp), %rdi
callq 0x17e490
jmp 0xf2479
leaq -0x578(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
callq 0xb39c0
jmp 0xf248e
leaq -0x5a8(%rbp), %rdi
callq 0x311e8
leaq -0x580(%rbp), %rdi
callq 0xb2ef0
jmp 0xf242f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0xf25ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x5a8(%rbp), %rdi
callq 0x311e8
jmp 0xf25ff
movl $0x0, -0x5ac(%rbp)
movq -0x5d8(%rbp), %rdi
movl -0x5ac(%rbp), %eax
movq %rax, -0x7a0(%rbp)
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x100, %rdi            # imm = 0x100
callq 0x45170
movq %rax, %rcx
movq -0x7a0(%rbp), %rax
cmpq %rcx, %rax
jae 0xf25bc
leaq -0x4f8(%rbp), %rdi
callq 0xd0d10
movq -0x5d8(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x7ac(%rbp)
movl -0x5ac(%rbp), %eax
movl %eax, -0x7a8(%rbp)
addq $0x15c0, %rdi           # imm = 0x15C0
callq 0x45170
movl -0x7ac(%rbp), %edi
movl -0x7a8(%rbp), %esi
movl %eax, %edx
callq 0x17d3a0
movl %eax, -0x7a4(%rbp)
jmp 0xf2568
movq -0x5d8(%rbp), %rax
movl -0x7a4(%rbp), %ecx
movl %ecx, -0x1d4(%rbp)
movq (%rax), %rdi
movl -0x1d4(%rbp), %edx
movq %rsp, %rax
movl $0xffffffff, (%rax)     # imm = 0xFFFFFFFF
movl $0x15, %ecx
xorl %r8d, %r8d
leaq -0x578(%rbp), %r9
movl %r8d, %esi
callq 0xcd520
jmp 0xf25a6
jmp 0xf25a8
movl -0x5ac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5ac(%rbp)
jmp 0xf24e0
movl -0x4ec(%rbp), %eax
movl %eax, %esi
leaq -0x170(%rbp), %rdi
callq 0xccc10
movl $0x0, (%rax)
leaq -0x578(%rbp), %rdi
callq 0x448d0
leaq -0x518(%rbp), %rdi
callq 0xb2660
leaq -0x4f8(%rbp), %rdi
callq 0xd0f50
jmp 0xf224f
leaq -0x578(%rbp), %rdi
callq 0x448d0
leaq -0x518(%rbp), %rdi
callq 0xb2660
jmp 0xf280b
jmp 0xf261e
jmp 0xf2620
movl -0x4ec(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4ec(%rbp)
jmp 0xf2134
movq -0x5d8(%rbp), %rdi
callq 0xf99b0
movb %al, -0x7ad(%rbp)
jmp 0xf2648
movq -0x5d8(%rbp), %rax
movb -0x7ad(%rbp), %cl
andb $0x1, %cl
movb %cl, -0x151(%rbp)
cmpl $0x3, 0x1614(%rax)
jb 0xf26b9
movq 0x1e28e2(%rip), %rdi    # 0x2d4f50
leaq 0xf0d75(%rip), %rsi     # 0x1e33ea
callq 0x2ff50
movq %rax, -0x7b8(%rbp)
jmp 0xf2683
movq -0x7b8(%rbp), %rdi
movzbl -0x151(%rbp), %esi
andl $0x1, %esi
callq 0x2f690
movq %rax, -0x7c0(%rbp)
jmp 0xf26a2
movq -0x7c0(%rbp), %rdi
movq 0x1e2918(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0xf26b7
jmp 0xf26b9
testb $0x1, -0x151(%rbp)
jne 0xf27e2
movq -0x5d8(%rbp), %rax
cmpl $0x0, 0x1708(%rax)
je 0xf27e0
movq -0x5d8(%rbp), %rcx
movl 0x13e8(%rcx), %eax
xorl %edx, %edx
divl 0x1708(%rcx)
cmpl $0x0, %edx
jne 0xf27e0
movl $0x1, -0x5b0(%rbp)
movq -0x5d8(%rbp), %rcx
movl -0x5b0(%rbp), %eax
cmpl 0x16fc(%rcx), %eax
ja 0xf2791
movl -0x5b0(%rbp), %eax
movl %eax, -0x7c4(%rbp)
leaq -0x5c8(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x1245a0
jmp 0xf2738
movl -0x7c4(%rbp), %esi
movq -0x5d8(%rbp), %rdi
leaq -0x5c8(%rbp), %rdx
leaq -0x1a8(%rbp), %rcx
callq 0x10f600
jmp 0xf275a
leaq -0x5c8(%rbp), %rdi
callq 0x121030
movl -0x5b0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5b0(%rbp)
jmp 0xf2702
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x5c8(%rbp), %rdi
callq 0x121030
jmp 0xf280b
movl $0x1, -0x5cc(%rbp)
movq -0x5d8(%rbp), %rcx
movl -0x5cc(%rbp), %eax
cmpl 0x16fc(%rcx), %eax
ja 0xf27de
movq -0x5d8(%rbp), %rdi
movl -0x5cc(%rbp), %esi
leaq -0x1a8(%rbp), %rdx
callq 0x10fbc0
jmp 0xf27cb
jmp 0xf27cd
movl -0x5cc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5cc(%rbp)
jmp 0xf279b
jmp 0xf27e0
jmp 0xf27e2
leaq -0x480(%rbp), %rdi
callq 0x123920
leaq -0x3c8(%rbp), %rdi
callq 0x311e8
leaq -0x1f8(%rbp), %rdi
callq 0x311e8
jmp 0xf1521
leaq -0x480(%rbp), %rdi
callq 0x123920
leaq -0x3c8(%rbp), %rdi
callq 0x311e8
leaq -0x1f8(%rbp), %rdi
callq 0x311e8
jmp 0xf2876
leaq -0x1d0(%rbp), %rdi
callq 0x311e8
leaq -0x1a8(%rbp), %rdi
callq 0x124690
leaq -0x170(%rbp), %rdi
callq 0xb2400
leaq -0x150(%rbp), %rdi
callq 0x123920
leaq -0xf0(%rbp), %rdi
callq 0x121030
addq $0x7d0, %rsp            # imm = 0x7D0
popq %rbp
retq
leaq -0x1d0(%rbp), %rdi
callq 0x311e8
leaq -0x1a8(%rbp), %rdi
callq 0x124690
leaq -0x170(%rbp), %rdi
callq 0xb2400
leaq -0x150(%rbp), %rdi
callq 0x123920
leaq -0xf0(%rbp), %rdi
callq 0x121030
movq -0x50(%rbp), %rdi
callq 0x30170
nopl (%rax,%rax)