// File: melop[P]admixem/simulation.cpp
// Function: PerformSimulation()
void PerformSimulation() {
	int nGenerations = (int)SimulConfig.GetNumericConfig("generations");
	vector< Population * > vPops;

	double nRandSeed = SimulConfig.GetNumericConfig("RandomSeed");
	if (nRandSeed != -1 && nRandSeed>0.0 && nRandSeed<1.0) {
		Random::Set(nRandSeed); //initialize random number generator
		#ifndef SRANDCALLED		
		srand((int) (nRandSeed * (double)RAND_MAX));
		#define SRANDCALLED
		#endif

		printf("User-specified random seed is %f \n" , nRandSeed);
	}
	else {
		#ifndef SRANDCALLED
		srand(time(NULL)); // set seed with time.
		#define SRANDCALLED
		#endif
		nRandSeed = (double)rand()/(double)RAND_MAX;
		if (nRandSeed == 0.0) {
			nRandSeed = 0.0001;
		}

		if (nRandSeed == 1.0) {
			nRandSeed = 0.9999;
		}

		Random::Set(nRandSeed); //initialize random number generator
		//srand((int) (nRandSeed * (double)RAND_MAX));
		printf("System chosen random seed is %f \n" , nRandSeed);
		SimulConfig.SetNumericConfig("RandomSeed" , nRandSeed);
	}

	#ifdef _OPENMP
		nTotalCPUCore =  omp_get_max_threads();//omp_get_num_threads();
		//printf("OpenMP enabled\n");
	#else
		nTotalCPUCore = 1;
		//printf("OpenMP disabled \n");
	#endif

	fnInitBinom(vBinomGen);
	fnInitNom(vNomGen);
	fnInitUniform(vUniformGen);

	string sOutFolder = SimulConfig.GetConfig("OutputFolder");
	
	if (!fnFileExists(sOutFolder.c_str())) {
		fnMakeDir(sOutFolder.c_str()); // make output folder
	}
	else { //output folder already exists, try another name
		int nTryFolder=1;
		while(true) {
			string sCurrFolderNum = fnIntToString(nTryFolder);
			sOutFolder = SimulConfig.GetConfig("OutputFolder") + "_" + sCurrFolderNum;
				if (!fnFileExists(sOutFolder.c_str())) {
					fnMakeDir(sOutFolder.c_str()); // make output folder
					SimulConfig.SetConfig("OutputFolder" , sOutFolder);
					break;
				}

			nTryFolder++;
		}

	}

	string sOutFileBase = sOutFolder + "/" + "Gen";

	int nPopId = 1;//start from 1
	while(true) { // now try to parse in populations.

		string sPopString = PopId2PopString(nPopId);
		Population * pNewPop = new Population();
		printf((sPopString+"_size_limit\n").c_str());
		if (SimulConfig.GetNumericConfig(sPopString+"_size_limit")==-1) {
			printf("%d populations defined in configuration.\n", (nPopId-1));
			break;
		}

		if (nPopId==1 || nPopId==2) { // parental pops
				printf(string("Initializing Parental " + sPopString + "...\n").c_str());
				pNewPop->Init(
					SimulConfig.GetConfig(sPopString+"_name"),nPopId, 
					SimulConfig.GetConfig(sPopString+"_ancestry_label").c_str()[0],
					(int)SimulConfig.GetNumericConfig(sPopString+"_init_size"),
					(int)SimulConfig.GetNumericConfig(sPopString+"_size_limit"),
					SimulConfig.GetNumericConfig(sPopString+"_male_ratio")
				);
		}
		else {
				printf(string("Initializing Hybrid pop " + sPopString + "...\n").c_str());
				pNewPop->Init(
					SimulConfig.GetConfig(sPopString+"_name"),nPopId, 
					NULL,
					0,
					(int)SimulConfig.GetNumericConfig(sPopString+"_size_limit"),
					0
				);
		}

		vPops.push_back(pNewPop);

		nPopId++;
	}




	// Now start simulation:


	// Do migration:
	int nSampleFreq = (int)SimulConfig.GetNumericConfig("samplefreq");

	for (int nCurrGen=0; nCurrGen <= nGenerations; nCurrGen++) {

		clock_t t;
		t = clock();
		
		
		printf("\n----------------------------------------\nGeneration: %d\n", nCurrGen);
		SimulConfig.SetCurrGen(nCurrGen);

		//Summarize phenotypes
		printf("Calculating phenotype distributions...\n");
		for (vector< Population * >::iterator itpPop = vPops.begin() ; itpPop != vPops.end(); ++itpPop)
		{
			(*itpPop)->SummarizePhenotype(true); // set previous
		}
	
		bool bAllOutputOff = (SimulConfig.GetConfig("AllOutput")=="Off");

		if (bAllOutputOff) {
			printf("Warning: AllOutput is set to Off, no output will be written. \n");
		}

		if ( (!bAllOutputOff) && ((nSampleFreq > 0  && (nCurrGen % nSampleFreq == 0)) || ( SimulConfig.IsOutputFirst3Gens() && (nCurrGen==0 || nCurrGen==1 || nCurrGen==2 ) ) || SimulConfig.IsInUserSpecifiedSamplingRange(nCurrGen))) {

		
			printf("Writing to disk...\n");
			/*
			char szCurrGen[100];
			_itoa(nCurrGen , szCurrGen, 10);
			*/
			string szCurrGen = fnIntToString(nCurrGen);
			//FILE * pOutFile = fopen( (sOutFileBase + szCurrGen + ".txt").c_str(), "w" );
			ofstream fMarkerOutFile, fGeneOutFile, fPhenotypeOutFile, fPhenoSumFile, fOffSpringNatSelProb;
			fMarkerOutFile.open((sOutFileBase + szCurrGen + "_markers.txt").c_str());// output file stream
			fGeneOutFile.open((sOutFileBase + szCurrGen + "_genes.txt").c_str());// output file stream
			fPhenotypeOutFile.open((sOutFileBase + szCurrGen + "_phenotypes.txt").c_str());// output file stream
			fPhenoSumFile.open((sOutFileBase + szCurrGen + "_phenostats.txt").c_str());// output file stream
			fOffSpringNatSelProb.open((sOutFileBase + szCurrGen + "_natselprobdump.txt").c_str());// output file stream

			fMarkerOutFile.setf(std::ios_base::fixed);
			fGeneOutFile.setf(std::ios_base::fixed);
			fPhenotypeOutFile.setf(std::ios_base::fixed);
			fOffSpringNatSelProb.setf(std::ios_base::fixed);

			//dump everything to disk:
			for (vector< Population * >::iterator itpPop = vPops.begin() ; itpPop != vPops.end(); ++itpPop)
			{
				(*itpPop)->Sample(fMarkerOutFile, fGeneOutFile, fPhenotypeOutFile, fPhenoSumFile, fOffSpringNatSelProb);
			}
		
			fMarkerOutFile.close();
			fGeneOutFile.close();
			fPhenotypeOutFile.close();
		}
		// do frequency-dependent selection

		for (vector< Population * >::iterator itpPop = vPops.begin() ; itpPop != vPops.end(); ++itpPop)
		{
				printf(string("FreqDependent Selection " + (*itpPop)->GetPopName() + "...\n").c_str());
				(*itpPop)->FreqDependentNaturalSelection();
				
		}



		//do migration:
		//try to do all pairwise migration, if the parameter is not specified, then it's deemed 0
		bool bMigrateOnlyFirstGen = SimulConfig.GetConfig("migration_only_first_gen") == "yes";

		if (bMigrateOnlyFirstGen && nCurrGen!=0) {//no migration then.

		}
		else {
			string szCurrGen = fnIntToString(nCurrGen);
			string sMigrationParamLabelPrefix = "gen" + szCurrGen + "_"; //generation specific rule prefix
			for (vector< Population * >::iterator itpPop1 = vPops.begin() ; itpPop1 != vPops.end(); ++itpPop1)
			{
				for (vector< Population * >::iterator itpPop2 = vPops.begin() ; itpPop2 != vPops.end(); ++itpPop2) {

					if ((*itpPop1)->GetPopId() == (*itpPop2)->GetPopId()) {
						continue; // same pops, no migration needed
					}
					string sMigrationParamLabel = sMigrationParamLabelPrefix + PopId2PopString((*itpPop1)->GetPopId()) + "_to_" + PopId2PopString((*itpPop2)->GetPopId()); 
					string sMigrationParamLabelGeneral = PopId2PopString((*itpPop1)->GetPopId()) + "_to_" + PopId2PopString((*itpPop2)->GetPopId()); 
					if (SimulConfig.GetNumericConfig(sMigrationParamLabel)==-1 && SimulConfig.GetNumericConfig(sMigrationParamLabelGeneral)==-1) {
						continue; // didn't find the configuration for this migration, move on
					}
					else {
						double nNumberMigrants = SimulConfig.GetNumericConfig(sMigrationParamLabel);
						double nNumberMigrantsGeneral = SimulConfig.GetNumericConfig(sMigrationParamLabelGeneral);
						if (nNumberMigrants == -1 && nNumberMigrantsGeneral!=-1) { // IF generation specific rule not available, use general rule
							nNumberMigrants = nNumberMigrantsGeneral;
						}
						else if (nNumberMigrants == -1 && nNumberMigrantsGeneral==-1) {
							continue;
						}

						if (SimulConfig.GetConfig("UseBinomMigrateRate") == "yes" && nNumberMigrants!=0 && (*itpPop1)->GetPopSize(4)>0) {
							if (nNumberMigrants <=0 || nNumberMigrants > 1) {
								printf("ERROR: When UseBinomMigrateRate is turned on, migrational rates must be 0-1.\n");
								Throw(Out_of_range("ERROR: When UseBinomMigrateRate is turned on, migrational rates must be 0-1."));
								
							}
							Binomial oBinom((*itpPop1)->GetPopSize(4) ,  nNumberMigrants);
							//std::binomial_distribution<int> oBinomDist((*itpPop1)->GetPopSize(4) ,  nNumberMigrants);
							printf("Migrant number drawn from Binom(n=%d , p=%f)\n", (*itpPop1)->GetPopSize(4) , nNumberMigrants);
							nNumberMigrants = round( oBinom.Next() );//oBinomDist(RandEngine) );
							
						}
						printf("Migration %s : %d migrants...\n", sMigrationParamLabel.c_str(), (int)nNumberMigrants);
						for (int i=0; i<nNumberMigrants; i++) {
							if ((*itpPop1)->GetPopSize(4) == 0) {
								printf("Population size of %s is now 0, only migrated %d individuals.\n", (*itpPop1)->GetPopName().c_str(), i);
								break;							
							}
							(*itpPop2)->Immigrate( (*itpPop1)->Emigrate() );
						}

					}
				}
				
			}

			//confirm immigrants for every pop
			for (vector< Population * >::iterator itpPop = vPops.begin() ; itpPop != vPops.end(); ++itpPop)
			{
				(*itpPop)->ImmigrateConfirm(true);
				cout << "Update trait summary stats after migration for pop " << (*itpPop)->GetPopName() << "\n";
				(*itpPop)->SummarizePhenotype(false); //do not reset previous
			}
		}

		//breed and kill
		
		bool bAtLeastOneBred = false;

		for (vector< Population * >::iterator itpPop = vPops.begin() ; itpPop != vPops.end(); ++itpPop)
		{
				
				if ((*itpPop)->Breed())
				{
					
					bAtLeastOneBred = true;
				}

				(*itpPop)->KillOldGen();
				
		}


		if (!bAtLeastOneBred ) {
			printf("All populations went extinct because all of them failed to breed.");
			exit(200);
		}

		ostringstream sPopSizeReport;
		sPopSizeReport<< "Population size: ";
		for (vector< Population * >::iterator itpPop = vPops.begin() ; itpPop != vPops.end(); ++itpPop)
		{
			sPopSizeReport <<  (*itpPop)->GetPopName() << "  ";
			sPopSizeReport << ((*itpPop)->GetPopSize(4));
			sPopSizeReport << " (m:f=" ;
			sPopSizeReport << ((double)(*itpPop)->GetPopSize(1) / (double)(*itpPop)->GetPopSize(0));
			sPopSizeReport << ") ";
		}
		sPopSizeReport << "\n";
		 
		printf(sPopSizeReport.str().c_str());

		t = clock() - t;
		printf ("Execution time for generation : %f seconds.\n",((float)t)/CLOCKS_PER_SEC);

	}
	
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x17c0, %rsp           # imm = 0x17C0
leaq -0x29(%rbp), %rdi
movq %rdi, -0x15f8(%rbp)
callq 0x8870
movq -0x15f8(%rbp), %rdx
leaq 0xac32(%rip), %rsi      # 0x78edb
leaq -0x28(%rbp), %rdi
callq 0xcb30
jmp 0x6e2b4
leaq 0x3c79d(%rip), %rdi     # 0xaaa58
leaq -0x28(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x1600(%rbp)
jmp 0x6e2ce
movsd -0x1600(%rbp), %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0x160c(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x82e0
leaq -0x29(%rbp), %rdi
callq 0x8540
movl -0x160c(%rbp), %eax
movl %eax, -0x4(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x72330
leaq -0x81(%rbp), %rdi
movq %rdi, -0x1608(%rbp)
callq 0x8870
movq -0x1608(%rbp), %rdx
leaq 0xabc2(%rip), %rsi      # 0x78ee7
leaq -0x80(%rbp), %rdi
callq 0xcb30
jmp 0x6e330
leaq 0x3c721(%rip), %rdi     # 0xaaa58
leaq -0x80(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x1618(%rbp)
jmp 0x6e34a
leaq -0x80(%rbp), %rdi
callq 0x82e0
leaq -0x81(%rbp), %rdi
callq 0x8540
movsd -0x1618(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x60(%rbp), %xmm0
movsd 0x831f(%rip), %xmm1     # 0x76698
ucomisd %xmm1, %xmm0
jne 0x6e386
jp 0x6e386
jmp 0x6e461
movsd -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x6e461
movsd 0x7c70(%rip), %xmm0     # 0x76010
ucomisd -0x60(%rbp), %xmm0
jbe 0x6e461
movsd -0x60(%rbp), %xmm0
callq 0x132f0
jmp 0x6e3b7
movsd -0x60(%rbp), %xmm0
movsd 0xaad4(%rip), %xmm1     # 0x78e98
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %edi
callq 0x8470
movsd -0x60(%rbp), %xmm0
leaq 0xab15(%rip), %rdi      # 0x78ef2
movb $0x1, %al
callq 0x8080
jmp 0x6e3e6
jmp 0x6e575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6e40e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x82e0
leaq -0x29(%rbp), %rdi
callq 0x8540
jmp 0x70c2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6e43f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x82e0
leaq -0x81(%rbp), %rdi
callq 0x8540
jmp 0x70c22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x70c22
callq 0x8150
cvtsi2sd %eax, %xmm0
movsd 0xaa26(%rip), %xmm1     # 0x78e98
divsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x6e498
jp 0x6e498
movsd 0xaa0d(%rip), %xmm0     # 0x78ea0
movsd %xmm0, -0x60(%rbp)
movsd -0x60(%rbp), %xmm0
movsd 0x7b6b(%rip), %xmm1     # 0x76010
ucomisd %xmm1, %xmm0
jne 0x6e4ba
jp 0x6e4ba
movsd 0xa9f3(%rip), %xmm0     # 0x78ea8
movsd %xmm0, -0x60(%rbp)
movsd -0x60(%rbp), %xmm0
callq 0x132f0
jmp 0x6e4c6
movsd -0x60(%rbp), %xmm0
leaq 0xaa43(%rip), %rdi      # 0x78f15
movb $0x1, %al
callq 0x8080
jmp 0x6e4db
leaq -0xa9(%rbp), %rdi
movq %rdi, -0x1620(%rbp)
callq 0x8870
movq -0x1620(%rbp), %rdx
leaq 0xa9eb(%rip), %rsi      # 0x78ee7
leaq -0xa8(%rbp), %rdi
callq 0xcb30
jmp 0x6e50a
movsd -0x60(%rbp), %xmm0
leaq 0x3c542(%rip), %rdi     # 0xaaa58
leaq -0xa8(%rbp), %rsi
callq 0x282b0
jmp 0x6e524
leaq -0xa8(%rbp), %rdi
callq 0x82e0
leaq -0xa9(%rbp), %rdi
callq 0x8540
jmp 0x6e575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6e564
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x82e0
leaq -0xa9(%rbp), %rdi
callq 0x8540
jmp 0x70c22
movl $0x1, 0x3bf7d(%rip)     # 0xaa4fc
leaq 0x3c62a(%rip), %rdi     # 0xaabb0
callq 0x6df30
jmp 0x6e58d
leaq 0x3c634(%rip), %rdi     # 0xaabc8
callq 0x6dfd0
jmp 0x6e59b
leaq 0x3c63e(%rip), %rdi     # 0xaabe0
callq 0x6e060
jmp 0x6e5a9
leaq -0xf1(%rbp), %rdi
movq %rdi, -0x1628(%rbp)
callq 0x8870
movq -0x1628(%rbp), %rdx
leaq 0xa96d(%rip), %rsi      # 0x78f37
leaq -0xf0(%rbp), %rdi
callq 0xcb30
jmp 0x6e5d8
leaq 0x3c479(%rip), %rsi     # 0xaaa58
leaq -0xd0(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
callq 0x1c190
jmp 0x6e5f4
leaq -0xf0(%rbp), %rdi
callq 0x82e0
leaq -0xf1(%rbp), %rdi
callq 0x8540
leaq -0xd0(%rbp), %rdi
callq 0x81d0
movq %rax, %rdi
callq 0x70d60
movb %al, -0x1629(%rbp)
jmp 0x6e628
movb -0x1629(%rbp), %al
testb $0x1, %al
jne 0x6e697
jmp 0x6e634
leaq -0xd0(%rbp), %rdi
callq 0x81d0
movq %rax, %rdi
callq 0x70df0
jmp 0x6e64a
jmp 0x6e981
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6e675
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x82e0
leaq -0xf1(%rbp), %rdi
callq 0x8540
jmp 0x70c22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x70c16
movl $0x1, -0xf8(%rbp)
jmp 0x6e6a3
movl -0xf8(%rbp), %esi
leaq -0x118(%rbp), %rdi
callq 0x65f20
jmp 0x6e6b7
leaq -0x199(%rbp), %rdi
movq %rdi, -0x1638(%rbp)
callq 0x8870
movq -0x1638(%rbp), %rdx
leaq 0xa85f(%rip), %rsi      # 0x78f37
leaq -0x198(%rbp), %rdi
callq 0xcb30
jmp 0x6e6e6
leaq 0x3c36b(%rip), %rsi     # 0xaaa58
leaq -0x178(%rbp), %rdi
leaq -0x198(%rbp), %rdx
callq 0x1c190
jmp 0x6e702
leaq 0x8da2(%rip), %rdx      # 0x774ab
leaq -0x158(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x5bbc0
jmp 0x6e71e
leaq -0x138(%rbp), %rdi
leaq -0x158(%rbp), %rsi
leaq -0x118(%rbp), %rdx
callq 0x5c2d0
jmp 0x6e73a
leaq -0xd0(%rbp), %rdi
movq %rdi, -0x1648(%rbp)
leaq -0x138(%rbp), %rsi
movq %rsi, -0x1650(%rbp)
callq 0x8600
movq -0x1650(%rbp), %rdi
callq 0x82e0
leaq -0x158(%rbp), %rdi
callq 0x82e0
leaq -0x178(%rbp), %rdi
callq 0x82e0
leaq -0x198(%rbp), %rdi
callq 0x82e0
leaq -0x199(%rbp), %rdi
callq 0x8540
movq -0x1648(%rbp), %rdi
callq 0x81d0
movq %rax, %rdi
callq 0x70d60
movb %al, -0x1639(%rbp)
jmp 0x6e7b3
movb -0x1639(%rbp), %al
testb $0x1, %al
jne 0x6e936
jmp 0x6e7c3
leaq -0xd0(%rbp), %rdi
callq 0x81d0
movq %rax, %rdi
callq 0x70df0
jmp 0x6e7d9
leaq -0x1c1(%rbp), %rdi
movq %rdi, -0x1658(%rbp)
callq 0x8870
movq -0x1658(%rbp), %rdx
leaq 0xa73d(%rip), %rsi      # 0x78f37
leaq -0x1c0(%rbp), %rdi
callq 0xcb30
jmp 0x6e808
leaq -0x1e8(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x81f0
jmp 0x6e81d
leaq 0x3c234(%rip), %rdi     # 0xaaa58
leaq -0x1c0(%rbp), %rsi
leaq -0x1e8(%rbp), %rdx
callq 0x28270
jmp 0x6e839
leaq -0x1e8(%rbp), %rdi
callq 0x82e0
leaq -0x1c0(%rbp), %rdi
callq 0x82e0
leaq -0x1c1(%rbp), %rdi
callq 0x8540
movl $0x3, -0x1ec(%rbp)
jmp 0x6e94f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6e8c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6e8ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6e8ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x82e0
leaq -0x178(%rbp), %rdi
callq 0x82e0
leaq -0x198(%rbp), %rdi
callq 0x82e0
leaq -0x199(%rbp), %rdi
callq 0x8540
jmp 0x6e96e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6e96e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6e928
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6e91c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x82e0
leaq -0x1c0(%rbp), %rdi
callq 0x82e0
leaq -0x1c1(%rbp), %rdi
callq 0x8540
jmp 0x6e96e
movl -0xf8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf8(%rbp)
movl $0x0, -0x1ec(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x82e0
movl -0x1ec(%rbp), %eax
testl %eax, %eax
je 0x6e969
jmp 0x6e967
jmp 0x6e97f
jmp 0x6e6a1
leaq -0x118(%rbp), %rdi
callq 0x82e0
jmp 0x70c16
jmp 0x6e981
leaq 0xa5bc(%rip), %rdx      # 0x78f44
leaq -0x230(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x5bbc0
jmp 0x6e99d
leaq 0xaaa8(%rip), %rdx      # 0x7944c
leaq -0x210(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0xca00
jmp 0x6e9b9
leaq -0x230(%rbp), %rdi
callq 0x82e0
movl $0x1, -0x234(%rbp)
jmp 0x6e9d1
movl -0x234(%rbp), %esi
leaq -0x258(%rbp), %rdi
callq 0x70c40
jmp 0x6e9e5
movl $0x1f0, %edi            # imm = 0x1F0
callq 0x84c0
movq %rax, -0x1660(%rbp)
jmp 0x6e9f8
movq -0x1660(%rbp), %rdi
callq 0x65fc0
jmp 0x6ea06
movq -0x1660(%rbp), %rax
movq %rax, -0x260(%rbp)
leaq 0xa52b(%rip), %rdx      # 0x78f46
leaq -0x280(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x5bbc0
jmp 0x6ea30
leaq -0x280(%rbp), %rdi
callq 0x81d0
movq %rax, %rdi
xorl %eax, %eax
callq 0x8080
jmp 0x6ea48
leaq -0x280(%rbp), %rdi
callq 0x82e0
leaq 0xa4f8(%rip), %rdx      # 0x78f53
leaq -0x2a0(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x5bbc0
jmp 0x6ea70
leaq 0x3bfe1(%rip), %rdi     # 0xaaa58
leaq -0x2a0(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x1668(%rbp)
jmp 0x6ea8d
leaq -0x2a0(%rbp), %rdi
callq 0x82e0
movsd -0x1668(%rbp), %xmm0
movsd 0x7bef(%rip), %xmm1     # 0x76698
ucomisd %xmm1, %xmm0
jne 0x6eb7b
jp 0x6eb7b
movl -0x234(%rbp), %esi
decl %esi
leaq 0xa497(%rip), %rdi      # 0x78f5f
xorl %eax, %eax
callq 0x8080
jmp 0x6ead1
movl $0x5, -0x1ec(%rbp)
jmp 0x6f0ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x82e0
jmp 0x70c16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x70c0a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f10b
movq -0x1660(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
movl $0x1f0, %esi            # imm = 0x1F0
callq 0x84d0
jmp 0x6f10b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x82e0
jmp 0x6f10b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0x82e0
jmp 0x6f10b
cmpl $0x1, -0x234(%rbp)
je 0x6eb91
cmpl $0x2, -0x234(%rbp)
jne 0x6eeef
leaq 0xa3f1(%rip), %rsi      # 0x78f89
leaq -0x2e0(%rbp), %rdi
leaq -0x258(%rbp), %rdx
callq 0xc3f0
jmp 0x6ebad
leaq 0x8200(%rip), %rdx      # 0x76db4
leaq -0x2c0(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
callq 0xca00
jmp 0x6ebc9
leaq -0x2c0(%rbp), %rdi
callq 0x81d0
movq %rax, %rdi
xorl %eax, %eax
callq 0x8080
jmp 0x6ebe1
leaq -0x2c0(%rbp), %rdi
callq 0x82e0
leaq -0x2e0(%rbp), %rdi
callq 0x82e0
movq -0x260(%rbp), %rax
movq %rax, -0x1670(%rbp)
leaq 0xa392(%rip), %rdx      # 0x78fa0
leaq -0x320(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x5bbc0
jmp 0x6ec23
leaq 0x3be2e(%rip), %rsi     # 0xaaa58
leaq -0x300(%rbp), %rdi
leaq -0x320(%rbp), %rdx
callq 0x1c190
jmp 0x6ec3f
movl -0x234(%rbp), %eax
movl %eax, -0x1674(%rbp)
leaq 0xa354(%rip), %rdx      # 0x78fa6
leaq -0x360(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x5bbc0
jmp 0x6ec67
leaq 0x3bdea(%rip), %rsi     # 0xaaa58
leaq -0x340(%rbp), %rdi
leaq -0x360(%rbp), %rdx
callq 0x1c190
jmp 0x6ec83
leaq -0x340(%rbp), %rdi
callq 0x81d0
movb (%rax), %al
movb %al, -0x1675(%rbp)
leaq 0x8c39(%rip), %rdx      # 0x778d7
leaq -0x380(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x5bbc0
jmp 0x6ecb3
leaq 0x3bd9e(%rip), %rdi     # 0xaaa58
leaq -0x380(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x1680(%rbp)
jmp 0x6ecd0
movsd -0x1680(%rbp), %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0x1684(%rbp)
leaq 0xa26a(%rip), %rdx      # 0x78f53
leaq -0x3a0(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x5bbc0
jmp 0x6ecfe
leaq 0x3bd53(%rip), %rdi     # 0xaaa58
leaq -0x3a0(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x1690(%rbp)
jmp 0x6ed1b
movsd -0x1690(%rbp), %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0x1694(%rbp)
leaq 0xa282(%rip), %rdx      # 0x78fb6
leaq -0x3c0(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x5bbc0
jmp 0x6ed49
leaq 0x3bd08(%rip), %rdi     # 0xaaa58
leaq -0x3c0(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x16a0(%rbp)
jmp 0x6ed66
movsd -0x16a0(%rbp), %xmm0
movl -0x1694(%rbp), %r9d
movl -0x1684(%rbp), %r8d
movl -0x1674(%rbp), %edx
movq -0x1670(%rbp), %rdi
movb -0x1675(%rbp), %al
movsbl %al, %ecx
leaq -0x300(%rbp), %rsi
callq 0x66320
jmp 0x6eda0
leaq -0x3c0(%rbp), %rdi
callq 0x82e0
leaq -0x3a0(%rbp), %rdi
callq 0x82e0
leaq -0x380(%rbp), %rdi
callq 0x82e0
leaq -0x340(%rbp), %rdi
callq 0x82e0
leaq -0x360(%rbp), %rdi
callq 0x82e0
leaq -0x300(%rbp), %rdi
callq 0x82e0
leaq -0x320(%rbp), %rdi
callq 0x82e0
jmp 0x6f0c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6ee1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x82e0
leaq -0x2e0(%rbp), %rdi
callq 0x82e0
jmp 0x6f10b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6eede
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6eed2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6eec6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6eeba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6eeae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6eea2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x3c0(%rbp), %rdi
callq 0x82e0
leaq -0x3a0(%rbp), %rdi
callq 0x82e0
leaq -0x380(%rbp), %rdi
callq 0x82e0
leaq -0x340(%rbp), %rdi
callq 0x82e0
leaq -0x360(%rbp), %rdi
callq 0x82e0
leaq -0x300(%rbp), %rdi
callq 0x82e0
leaq -0x320(%rbp), %rdi
callq 0x82e0
jmp 0x6f10b
leaq 0xa0cc(%rip), %rsi      # 0x78fc2
leaq -0x400(%rbp), %rdi
leaq -0x258(%rbp), %rdx
callq 0xc3f0
jmp 0x6ef0b
leaq 0x7ea2(%rip), %rdx      # 0x76db4
leaq -0x3e0(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0xca00
jmp 0x6ef27
leaq -0x3e0(%rbp), %rdi
callq 0x81d0
movq %rax, %rdi
xorl %eax, %eax
callq 0x8080
jmp 0x6ef3f
leaq -0x3e0(%rbp), %rdi
callq 0x82e0
leaq -0x400(%rbp), %rdi
callq 0x82e0
movq -0x260(%rbp), %rax
movq %rax, -0x16a8(%rbp)
leaq 0xa034(%rip), %rdx      # 0x78fa0
leaq -0x440(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x5bbc0
jmp 0x6ef81
leaq 0x3bad0(%rip), %rsi     # 0xaaa58
leaq -0x420(%rbp), %rdi
leaq -0x440(%rbp), %rdx
callq 0x1c190
jmp 0x6ef9d
movl -0x234(%rbp), %eax
movl %eax, -0x16ac(%rbp)
leaq 0x9fa3(%rip), %rdx      # 0x78f53
leaq -0x460(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x5bbc0
jmp 0x6efc5
leaq 0x3ba8c(%rip), %rdi     # 0xaaa58
leaq -0x460(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x16b8(%rbp)
jmp 0x6efe2
movl -0x16ac(%rbp), %edx
movq -0x16a8(%rbp), %rdi
movsd -0x16b8(%rbp), %xmm0
cvttsd2si %xmm0, %r9d
leaq -0x420(%rbp), %rsi
xorl %r8d, %r8d
xorps %xmm0, %xmm0
movl %r8d, %ecx
callq 0x66320
jmp 0x6f013
leaq -0x460(%rbp), %rdi
callq 0x82e0
leaq -0x420(%rbp), %rdi
callq 0x82e0
leaq -0x440(%rbp), %rdi
callq 0x82e0
jmp 0x6f0c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f062
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x3e0(%rbp), %rdi
callq 0x82e0
leaq -0x400(%rbp), %rdi
callq 0x82e0
jmp 0x6f10b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f0b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f0a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x460(%rbp), %rdi
callq 0x82e0
leaq -0x420(%rbp), %rdi
callq 0x82e0
leaq -0x440(%rbp), %rdi
callq 0x82e0
jmp 0x6f10b
leaq -0x58(%rbp), %rdi
leaq -0x260(%rbp), %rsi
callq 0x72350
jmp 0x6f0d3
movl -0x234(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x234(%rbp)
movl $0x0, -0x1ec(%rbp)
leaq -0x258(%rbp), %rdi
callq 0x82e0
movl -0x1ec(%rbp), %eax
testl %eax, %eax
je 0x6f106
jmp 0x6f104
jmp 0x6f11c
jmp 0x6e9cf
leaq -0x258(%rbp), %rdi
callq 0x82e0
jmp 0x70c0a
leaq -0x489(%rbp), %rdi
movq %rdi, -0x16c0(%rbp)
callq 0x8870
movq -0x16c0(%rbp), %rdx
leaq 0x9e9e(%rip), %rsi      # 0x78fdb
leaq -0x488(%rbp), %rdi
callq 0xcb30
jmp 0x6f14b
leaq 0x3b906(%rip), %rdi     # 0xaaa58
leaq -0x488(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x16c8(%rbp)
jmp 0x6f168
movsd -0x16c8(%rbp), %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0x16cc(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x82e0
leaq -0x489(%rbp), %rdi
callq 0x8540
movl -0x16cc(%rbp), %eax
movl %eax, -0x464(%rbp)
movl $0x0, -0x490(%rbp)
movl -0x490(%rbp), %eax
cmpl -0x4(%rbp), %eax
jg 0x70be0
callq 0x8310
movq %rax, -0x498(%rbp)
movl -0x490(%rbp), %esi
leaq 0x9e16(%rip), %rdi      # 0x78fe6
xorl %eax, %eax
callq 0x8080
jmp 0x6f1d9
movl -0x490(%rbp), %esi
leaq 0x3b872(%rip), %rdi     # 0xaaa58
callq 0x28310
jmp 0x6f1ed
leaq 0x9e2c(%rip), %rdi      # 0x79020
xorl %eax, %eax
callq 0x8080
jmp 0x6f1fd
leaq -0x58(%rbp), %rdi
callq 0x723c0
movq %rax, -0x4a0(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x72430
movq %rax, -0x4a8(%rbp)
leaq -0x4a0(%rbp), %rdi
leaq -0x4a8(%rbp), %rsi
callq 0x723f0
testb $0x1, %al
jne 0x6f236
jmp 0x6f298
leaq -0x4a0(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
movl $0x1, %esi
callq 0x666c0
jmp 0x6f251
jmp 0x6f253
leaq -0x4a0(%rbp), %rdi
callq 0x72480
jmp 0x6f20d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f287
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x82e0
leaq -0x489(%rbp), %rdi
callq 0x8540
jmp 0x70c0a
leaq -0x4f1(%rbp), %rdi
movq %rdi, -0x16d8(%rbp)
callq 0x8870
movq -0x16d8(%rbp), %rdx
leaq 0x9d8f(%rip), %rsi      # 0x79048
leaq -0x4f0(%rbp), %rdi
callq 0xcb30
jmp 0x6f2c7
leaq 0x3b78a(%rip), %rsi     # 0xaaa58
leaq -0x4d0(%rbp), %rdi
leaq -0x4f0(%rbp), %rdx
callq 0x1c190
jmp 0x6f2e3
leaq 0x9b46(%rip), %rsi      # 0x78e30
leaq -0x4d0(%rbp), %rdi
callq 0xcbe0
movb %al, -0x16d9(%rbp)
jmp 0x6f2fe
leaq -0x4d0(%rbp), %rdi
callq 0x82e0
leaq -0x4f0(%rbp), %rdi
callq 0x82e0
leaq -0x4f1(%rbp), %rdi
callq 0x8540
movb -0x16d9(%rbp), %al
andb $0x1, %al
movb %al, -0x4a9(%rbp)
testb $0x1, -0x4a9(%rbp)
je 0x6f39c
leaq 0x9d12(%rip), %rdi      # 0x79052
xorl %eax, %eax
callq 0x8080
jmp 0x6f349
jmp 0x6f39c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f38b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f37f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x4d0(%rbp), %rdi
callq 0x82e0
leaq -0x4f0(%rbp), %rdi
callq 0x82e0
leaq -0x4f1(%rbp), %rdi
callq 0x8540
jmp 0x70c0a
testb $0x1, -0x4a9(%rbp)
jne 0x6fa04
cmpl $0x0, -0x464(%rbp)
jle 0x6f3c4
movl -0x490(%rbp), %eax
cltd
idivl -0x464(%rbp)
cmpl $0x0, %edx
je 0x6f428
leaq 0x3b68d(%rip), %rdi     # 0xaaa58
callq 0x28160
movb %al, -0x16da(%rbp)
jmp 0x6f3d8
movb -0x16da(%rbp), %al
testb $0x1, %al
jne 0x6f3e4
jmp 0x6f3ff
cmpl $0x0, -0x490(%rbp)
je 0x6f428
cmpl $0x1, -0x490(%rbp)
je 0x6f428
cmpl $0x2, -0x490(%rbp)
je 0x6f428
movl -0x490(%rbp), %esi
leaq 0x3b64c(%rip), %rdi     # 0xaaa58
callq 0x281b0
movb %al, -0x16db(%rbp)
jmp 0x6f419
movb -0x16db(%rbp), %al
testb $0x1, %al
jne 0x6f428
jmp 0x6fa04
leaq 0x9c62(%rip), %rdi      # 0x79091
xorl %eax, %eax
callq 0x8080
jmp 0x6f438
movl -0x490(%rbp), %esi
leaq -0x518(%rbp), %rdi
callq 0x65f20
jmp 0x6f44c
leaq -0x718(%rbp), %rdi
callq 0x8810
jmp 0x6f45a
leaq -0x918(%rbp), %rdi
callq 0x8810
jmp 0x6f468
leaq -0xb18(%rbp), %rdi
callq 0x8810
jmp 0x6f476
leaq -0xd18(%rbp), %rdi
callq 0x8810
jmp 0x6f484
leaq -0xf18(%rbp), %rdi
callq 0x8810
jmp 0x6f492
leaq -0xf58(%rbp), %rdi
leaq -0x210(%rbp), %rsi
leaq -0x518(%rbp), %rdx
callq 0x5bd60
jmp 0x6f4ae
leaq 0x9bf0(%rip), %rdx      # 0x790a5
leaq -0xf38(%rbp), %rdi
leaq -0xf58(%rbp), %rsi
callq 0xca00
jmp 0x6f4ca
leaq -0xf38(%rbp), %rdi
callq 0x81d0
movq %rax, %rsi
leaq -0x718(%rbp), %rdi
movl $0x10, %edx
callq 0x8090
jmp 0x6f4ec
leaq -0xf38(%rbp), %rdi
callq 0x82e0
leaq -0xf58(%rbp), %rdi
callq 0x82e0
leaq -0xf98(%rbp), %rdi
leaq -0x210(%rbp), %rsi
leaq -0x518(%rbp), %rdx
callq 0x5bd60
jmp 0x6f520
leaq 0x9b8b(%rip), %rdx      # 0x790b2
leaq -0xf78(%rbp), %rdi
leaq -0xf98(%rbp), %rsi
callq 0xca00
jmp 0x6f53c
leaq -0xf78(%rbp), %rdi
callq 0x81d0
movq %rax, %rsi
leaq -0x918(%rbp), %rdi
movl $0x10, %edx
callq 0x8090
jmp 0x6f55e
leaq -0xf78(%rbp), %rdi
callq 0x82e0
leaq -0xf98(%rbp), %rdi
callq 0x82e0
leaq -0xfd8(%rbp), %rdi
leaq -0x210(%rbp), %rsi
leaq -0x518(%rbp), %rdx
callq 0x5bd60
jmp 0x6f592
leaq 0x9b24(%rip), %rdx      # 0x790bd
leaq -0xfb8(%rbp), %rdi
leaq -0xfd8(%rbp), %rsi
callq 0xca00
jmp 0x6f5ae
leaq -0xfb8(%rbp), %rdi
callq 0x81d0
movq %rax, %rsi
leaq -0xb18(%rbp), %rdi
movl $0x10, %edx
callq 0x8090
jmp 0x6f5d0
leaq -0xfb8(%rbp), %rdi
callq 0x82e0
leaq -0xfd8(%rbp), %rdi
callq 0x82e0
leaq -0x1018(%rbp), %rdi
leaq -0x210(%rbp), %rsi
leaq -0x518(%rbp), %rdx
callq 0x5bd60
jmp 0x6f604
leaq 0x9ac2(%rip), %rdx      # 0x790cd
leaq -0xff8(%rbp), %rdi
leaq -0x1018(%rbp), %rsi
callq 0xca00
jmp 0x6f620
leaq -0xff8(%rbp), %rdi
callq 0x81d0
movq %rax, %rsi
leaq -0xd18(%rbp), %rdi
movl $0x10, %edx
callq 0x8090
jmp 0x6f642
leaq -0xff8(%rbp), %rdi
callq 0x82e0
leaq -0x1018(%rbp), %rdi
callq 0x82e0
leaq -0x1058(%rbp), %rdi
leaq -0x210(%rbp), %rsi
leaq -0x518(%rbp), %rdx
callq 0x5bd60
jmp 0x6f676
leaq 0x9a60(%rip), %rdx      # 0x790dd
leaq -0x1038(%rbp), %rdi
leaq -0x1058(%rbp), %rsi
callq 0xca00
jmp 0x6f692
leaq -0x1038(%rbp), %rdi
callq 0x81d0
movq %rax, %rsi
leaq -0xf18(%rbp), %rdi
movl $0x10, %edx
callq 0x8090
jmp 0x6f6b4
leaq -0x1038(%rbp), %rdi
callq 0x82e0
leaq -0x1058(%rbp), %rdi
callq 0x82e0
movq -0x718(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x718(%rbp,%rax), %rdi
movl $0x4, %esi
callq 0x724a0
jmp 0x6f6eb
movq -0x918(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x918(%rbp,%rax), %rdi
movl $0x4, %esi
callq 0x724a0
jmp 0x6f70a
movq -0xb18(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0xb18(%rbp,%rax), %rdi
movl $0x4, %esi
callq 0x724a0
jmp 0x6f729
movq -0xf18(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0xf18(%rbp,%rax), %rdi
movl $0x4, %esi
callq 0x724a0
jmp 0x6f748
leaq -0x58(%rbp), %rdi
callq 0x723c0
movq %rax, -0x1060(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x72430
movq %rax, -0x1068(%rbp)
leaq -0x1060(%rbp), %rdi
leaq -0x1068(%rbp), %rsi
callq 0x723f0
testb $0x1, %al
jne 0x6f784
jmp 0x6f943
leaq -0x1060(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
leaq -0x718(%rbp), %rsi
leaq -0x918(%rbp), %rdx
leaq -0xb18(%rbp), %rcx
leaq -0xd18(%rbp), %r8
leaq -0xf18(%rbp), %r9
callq 0x6a200
jmp 0x6f7bd
jmp 0x6f7bf
leaq -0x1060(%rbp), %rdi
callq 0x72480
jmp 0x6f758
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f9f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f9e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f9db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f9cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f9c3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f9b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f859
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xf38(%rbp), %rdi
callq 0x82e0
leaq -0xf58(%rbp), %rdi
callq 0x82e0
jmp 0x6f9b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f890
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xf78(%rbp), %rdi
callq 0x82e0
leaq -0xf98(%rbp), %rdi
callq 0x82e0
jmp 0x6f9b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f8c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xfb8(%rbp), %rdi
callq 0x82e0
leaq -0xfd8(%rbp), %rdi
callq 0x82e0
jmp 0x6f9b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f8fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xff8(%rbp), %rdi
callq 0x82e0
leaq -0x1018(%rbp), %rdi
callq 0x82e0
jmp 0x6f9b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6f935
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1038(%rbp), %rdi
callq 0x82e0
leaq -0x1058(%rbp), %rdi
callq 0x82e0
jmp 0x6f9b7
leaq -0x718(%rbp), %rdi
callq 0x86d0
jmp 0x6f951
leaq -0x918(%rbp), %rdi
callq 0x86d0
jmp 0x6f95f
leaq -0xb18(%rbp), %rdi
callq 0x86d0
jmp 0x6f96d
leaq -0xf18(%rbp), %rdi
callq 0x8700
leaq -0xd18(%rbp), %rdi
callq 0x8700
leaq -0xb18(%rbp), %rdi
callq 0x8700
leaq -0x918(%rbp), %rdi
callq 0x8700
leaq -0x718(%rbp), %rdi
callq 0x8700
leaq -0x518(%rbp), %rdi
callq 0x82e0
jmp 0x6fa04
leaq -0xf18(%rbp), %rdi
callq 0x8700
leaq -0xd18(%rbp), %rdi
callq 0x8700
leaq -0xb18(%rbp), %rdi
callq 0x8700
leaq -0x918(%rbp), %rdi
callq 0x8700
leaq -0x718(%rbp), %rdi
callq 0x8700
leaq -0x518(%rbp), %rdi
callq 0x82e0
jmp 0x70c0a
leaq -0x58(%rbp), %rdi
callq 0x723c0
movq %rax, -0x1070(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x72430
movq %rax, -0x1078(%rbp)
leaq -0x1070(%rbp), %rdi
leaq -0x1078(%rbp), %rsi
callq 0x723f0
testb $0x1, %al
jne 0x6fa40
jmp 0x6fb4b
leaq -0x1070(%rbp), %rdi
callq 0x72460
movq (%rax), %rsi
leaq -0x10d8(%rbp), %rdi
callq 0x69750
jmp 0x6fa5d
leaq 0x968d(%rip), %rsi      # 0x790f1
leaq -0x10b8(%rbp), %rdi
leaq -0x10d8(%rbp), %rdx
callq 0xc500
jmp 0x6fa79
leaq 0x7334(%rip), %rdx      # 0x76db4
leaq -0x1098(%rbp), %rdi
leaq -0x10b8(%rbp), %rsi
callq 0xca00
jmp 0x6fa95
leaq -0x1098(%rbp), %rdi
callq 0x81d0
movq %rax, %rdi
xorl %eax, %eax
callq 0x8080
jmp 0x6faad
leaq -0x1098(%rbp), %rdi
callq 0x82e0
leaq -0x10b8(%rbp), %rdi
callq 0x82e0
leaq -0x10d8(%rbp), %rdi
callq 0x82e0
leaq -0x1070(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
callq 0x6a860
jmp 0x6fae7
jmp 0x6fae9
leaq -0x1070(%rbp), %rdi
callq 0x72480
jmp 0x6fa14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6fb3a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6fb2e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1098(%rbp), %rdi
callq 0x82e0
leaq -0x10b8(%rbp), %rdi
callq 0x82e0
leaq -0x10d8(%rbp), %rdi
callq 0x82e0
jmp 0x70c0a
leaq -0x1121(%rbp), %rdi
movq %rdi, -0x16e8(%rbp)
callq 0x8870
movq -0x16e8(%rbp), %rdx
leaq 0x959e(%rip), %rsi      # 0x7910a
leaq -0x1120(%rbp), %rdi
callq 0xcb30
jmp 0x6fb7a
leaq 0x3aed7(%rip), %rsi     # 0xaaa58
leaq -0x1100(%rbp), %rdi
leaq -0x1120(%rbp), %rdx
callq 0x1c190
jmp 0x6fb96
leaq 0x8d27(%rip), %rsi      # 0x788c4
leaq -0x1100(%rbp), %rdi
callq 0xcbe0
movb %al, -0x16e9(%rbp)
jmp 0x6fbb1
leaq -0x1100(%rbp), %rdi
callq 0x82e0
leaq -0x1120(%rbp), %rdi
callq 0x82e0
leaq -0x1121(%rbp), %rdi
callq 0x8540
movb -0x16e9(%rbp), %al
andb $0x1, %al
movb %al, -0x10d9(%rbp)
testb $0x1, -0x10d9(%rbp)
je 0x6fc4b
cmpl $0x0, -0x490(%rbp)
je 0x6fc4b
jmp 0x70887
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6fc3a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x6fc2e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1100(%rbp), %rdi
callq 0x82e0
leaq -0x1120(%rbp), %rdi
callq 0x82e0
leaq -0x1121(%rbp), %rdi
callq 0x8540
jmp 0x70c0a
movl -0x490(%rbp), %esi
leaq -0x1148(%rbp), %rdi
callq 0x65f20
jmp 0x6fc5f
leaq 0x94b9(%rip), %rsi      # 0x7911f
leaq -0x1188(%rbp), %rdi
leaq -0x1148(%rbp), %rdx
callq 0xc3f0
jmp 0x6fc7b
leaq 0x7829(%rip), %rdx      # 0x774ab
leaq -0x1168(%rbp), %rdi
leaq -0x1188(%rbp), %rsi
callq 0xca00
jmp 0x6fc97
leaq -0x1188(%rbp), %rdi
callq 0x82e0
leaq -0x58(%rbp), %rdi
callq 0x723c0
movq %rax, -0x1190(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x72430
movq %rax, -0x1198(%rbp)
leaq -0x1190(%rbp), %rdi
leaq -0x1198(%rbp), %rsi
callq 0x723f0
testb $0x1, %al
jne 0x6fcdf
jmp 0x7073e
leaq -0x58(%rbp), %rdi
callq 0x723c0
movq %rax, -0x11a0(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x72430
movq %rax, -0x11a8(%rbp)
leaq -0x11a0(%rbp), %rdi
leaq -0x11a8(%rbp), %rsi
callq 0x723f0
testb $0x1, %al
jne 0x6fd1b
jmp 0x7072b
leaq -0x1190(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
callq 0x6c530
movl %eax, -0x16f0(%rbp)
jmp 0x6fd37
leaq -0x11a0(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
callq 0x6c530
movl %eax, -0x16f4(%rbp)
jmp 0x6fd53
movl -0x16f0(%rbp), %eax
movl -0x16f4(%rbp), %ecx
cmpl %ecx, %eax
jne 0x6fda7
jmp 0x706fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x70876
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1188(%rbp), %rdi
callq 0x82e0
jmp 0x70876
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x7086a
leaq -0x1190(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
callq 0x6c530
movl %eax, -0x16f8(%rbp)
jmp 0x6fdc3
movl -0x16f8(%rbp), %esi
leaq -0x1228(%rbp), %rdi
callq 0x70c40
jmp 0x6fdd7
leaq -0x1208(%rbp), %rdi
leaq -0x1168(%rbp), %rsi
leaq -0x1228(%rbp), %rdx
callq 0x725a0
jmp 0x6fdf3
leaq 0x9329(%rip), %rdx      # 0x79123
leaq -0x11e8(%rbp), %rdi
leaq -0x1208(%rbp), %rsi
callq 0xca00
jmp 0x6fe0f
leaq -0x11a0(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
callq 0x6c530
movl %eax, -0x16fc(%rbp)
jmp 0x6fe2b
movl -0x16fc(%rbp), %esi
leaq -0x1248(%rbp), %rdi
callq 0x70c40
jmp 0x6fe3f
leaq -0x11c8(%rbp), %rdi
leaq -0x11e8(%rbp), %rsi
leaq -0x1248(%rbp), %rdx
callq 0x724d0
jmp 0x6fe5b
leaq -0x1248(%rbp), %rdi
callq 0x82e0
leaq -0x11e8(%rbp), %rdi
callq 0x82e0
leaq -0x1208(%rbp), %rdi
callq 0x82e0
leaq -0x1228(%rbp), %rdi
callq 0x82e0
leaq -0x1190(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
callq 0x6c530
movl %eax, -0x1700(%rbp)
jmp 0x6fea7
movl -0x1700(%rbp), %esi
leaq -0x12a8(%rbp), %rdi
callq 0x70c40
jmp 0x6febb
leaq 0x9261(%rip), %rdx      # 0x79123
leaq -0x1288(%rbp), %rdi
leaq -0x12a8(%rbp), %rsi
callq 0xca00
jmp 0x6fed7
leaq -0x11a0(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
callq 0x6c530
movl %eax, -0x1704(%rbp)
jmp 0x6fef3
movl -0x1704(%rbp), %esi
leaq -0x12c8(%rbp), %rdi
callq 0x70c40
jmp 0x6ff07
leaq -0x1268(%rbp), %rdi
leaq -0x1288(%rbp), %rsi
leaq -0x12c8(%rbp), %rdx
callq 0x724d0
jmp 0x6ff23
leaq -0x12c8(%rbp), %rdi
callq 0x82e0
leaq -0x1288(%rbp), %rdi
callq 0x82e0
leaq -0x12a8(%rbp), %rdi
callq 0x82e0
movb $0x0, -0x1309(%rbp)
leaq -0x12e8(%rbp), %rdi
leaq -0x11c8(%rbp), %rsi
callq 0x81f0
jmp 0x6ff63
leaq 0x3aaee(%rip), %rdi     # 0xaaa58
leaq -0x12e8(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x1710(%rbp)
jmp 0x6ff80
movsd -0x1710(%rbp), %xmm0
xorl %eax, %eax
movsd 0x6706(%rip), %xmm1     # 0x76698
ucomisd %xmm1, %xmm0
movb %al, -0x1711(%rbp)
jne 0x6fffb
jp 0x6fffb
leaq -0x1308(%rbp), %rdi
leaq -0x1268(%rbp), %rsi
callq 0x81f0
jmp 0x6ffb5
movb $0x1, -0x1309(%rbp)
leaq 0x3aa95(%rip), %rdi     # 0xaaa58
leaq -0x1308(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x1720(%rbp)
jmp 0x6ffd9
movsd -0x1720(%rbp), %xmm0
movsd 0x66af(%rip), %xmm1     # 0x76698
ucomisd %xmm1, %xmm0
sete %al
setnp %cl
andb %cl, %al
movb %al, -0x1711(%rbp)
movb -0x1711(%rbp), %al
movb %al, -0x1721(%rbp)
testb $0x1, -0x1309(%rbp)
jne 0x70012
jmp 0x7001e
leaq -0x1308(%rbp), %rdi
callq 0x82e0
leaq -0x12e8(%rbp), %rdi
callq 0x82e0
movb -0x1721(%rbp), %al
testb $0x1, %al
jne 0x70039
jmp 0x7016a
movl $0x17, -0x1ec(%rbp)
jmp 0x706d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x700a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x70096
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x7008a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1248(%rbp), %rdi
callq 0x82e0
leaq -0x11e8(%rbp), %rdi
callq 0x82e0
leaq -0x1208(%rbp), %rdi
callq 0x82e0
leaq -0x1228(%rbp), %rdi
callq 0x82e0
jmp 0x7086a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x7071a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x70104
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x700f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x12c8(%rbp), %rdi
callq 0x82e0
leaq -0x1288(%rbp), %rdi
callq 0x82e0
leaq -0x12a8(%rbp), %rdi
callq 0x82e0
jmp 0x7071a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x7070e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x70159
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
testb $0x1, -0x1309(%rbp)
jne 0x7014b
jmp 0x70157
leaq -0x1308(%rbp), %rdi
callq 0x82e0
jmp 0x70159
leaq -0x12e8(%rbp), %rdi
callq 0x82e0
jmp 0x7070e
leaq -0x1338(%rbp), %rdi
leaq -0x11c8(%rbp), %rsi
callq 0x81f0
jmp 0x7017f
leaq 0x3a8d2(%rip), %rdi     # 0xaaa58
leaq -0x1338(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x1730(%rbp)
jmp 0x7019c
leaq -0x1338(%rbp), %rdi
callq 0x82e0
movsd -0x1730(%rbp), %xmm0
movsd %xmm0, -0x1318(%rbp)
leaq -0x1360(%rbp), %rdi
leaq -0x1268(%rbp), %rsi
callq 0x81f0
jmp 0x701cd
leaq 0x3a884(%rip), %rdi     # 0xaaa58
leaq -0x1360(%rbp), %rsi
callq 0x27e40
movsd %xmm0, -0x1738(%rbp)
jmp 0x701ea
leaq -0x1360(%rbp), %rdi
callq 0x82e0
movsd -0x1738(%rbp), %xmm0
movsd %xmm0, -0x1340(%rbp)
movsd -0x1318(%rbp), %xmm0
movsd 0x6482(%rip), %xmm1     # 0x76698
ucomisd %xmm1, %xmm0
jne 0x70284
jp 0x70284
movsd -0x1340(%rbp), %xmm0
movsd 0x646a(%rip), %xmm1     # 0x76698
ucomisd %xmm1, %xmm0
jne 0x70238
jp 0x70238
jmp 0x70284
movsd -0x1340(%rbp), %xmm0
movsd %xmm0, -0x1318(%rbp)
jmp 0x702c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1338(%rbp), %rdi
callq 0x82e0
jmp 0x7070e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1360(%rbp), %rdi
callq 0x82e0
jmp 0x7070e
movsd -0x1318(%rbp), %xmm0
movsd 0x6404(%rip), %xmm1     # 0x76698
ucomisd %xmm1, %xmm0
jne 0x702c3
jp 0x702c3
movsd -0x1340(%rbp), %xmm0
movsd 0x63ec(%rip), %xmm1     # 0x76698
ucomisd %xmm1, %xmm0
jne 0x702c3
jp 0x702c3
movl $0x17, -0x1ec(%rbp)
jmp 0x706d5
jmp 0x702c5
leaq -0x13a1(%rbp), %rdi
movq %rdi, -0x1740(%rbp)
callq 0x8870
movq -0x1740(%rbp), %rdx
leaq 0x8e42(%rip), %rsi      # 0x79128
leaq -0x13a0(%rbp), %rdi
callq 0xcb30
jmp 0x702f4
leaq 0x3a75d(%rip), %rsi     # 0xaaa58
leaq -0x1380(%rbp), %rdi
leaq -0x13a0(%rbp), %rdx
callq 0x1c190
jmp 0x70310
leaq 0x85ad(%rip), %rsi      # 0x788c4
leaq -0x1380(%rbp), %rdi
callq 0xcbe0
movb %al, -0x1741(%rbp)
jmp 0x7032b
movb -0x1741(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x1742(%rbp)
jne 0x70340
jmp 0x70390
movsd -0x1318(%rbp), %xmm0
xorl %eax, %eax
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
movb %al, -0x1742(%rbp)
jne 0x7035d
jp 0x7035d
jmp 0x70390
leaq -0x1190(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
movl $0x4, %esi
callq 0x69aa0
movl %eax, -0x1748(%rbp)
jmp 0x7037e
movl -0x1748(%rbp), %eax
cmpl $0x0, %eax
setg %al
movb %al, -0x1742(%rbp)
movb -0x1742(%rbp), %al
movb %al, -0x1749(%rbp)
leaq -0x1380(%rbp), %rdi
callq 0x82e0
leaq -0x13a0(%rbp), %rdi
callq 0x82e0
leaq -0x13a1(%rbp), %rdi
callq 0x8540
movb -0x1749(%rbp), %al
testb $0x1, %al
jne 0x703cf
jmp 0x70587
xorps %xmm0, %xmm0
ucomisd -0x1318(%rbp), %xmm0
jae 0x703f6
movsd -0x1318(%rbp), %xmm0
movsd 0x5c24(%rip), %xmm1     # 0x76010
ucomisd %xmm1, %xmm0
jbe 0x704b5
leaq 0x8d3f(%rip), %rdi      # 0x7913c
xorl %eax, %eax
callq 0x8080
jmp 0x70406
movl $0x1, %edi
callq 0x8230
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x1758(%rbp)
leaq 0x8d66(%rip), %rsi      # 0x7918a
callq 0x12f70
jmp 0x7042b
movq -0x1758(%rbp), %rdi
leaq 0x398af(%rip), %rsi     # 0xa9ce8
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x70c34
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x70487
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x7047b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1380(%rbp), %rdi
callq 0x82e0
leaq -0x13a0(%rbp), %rdi
callq 0x82e0
leaq -0x13a1(%rbp), %rdi
callq 0x8540
jmp 0x7070e
movq -0x1758(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
callq 0x8370
jmp 0x7070e
leaq -0x1190(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
movl $0x4, %esi
callq 0x69aa0
movl %eax, -0x175c(%rbp)
jmp 0x704d6
movl -0x175c(%rbp), %esi
movsd -0x1318(%rbp), %xmm0
leaq -0x13b8(%rbp), %rdi
callq 0x156d0
jmp 0x704f2
leaq -0x1190(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
movl $0x4, %esi
callq 0x69aa0
movl %eax, -0x1760(%rbp)
jmp 0x70513
movl -0x1760(%rbp), %esi
movsd -0x1318(%rbp), %xmm0
leaq 0x8caf(%rip), %rdi      # 0x791d7
movb $0x1, %al
callq 0x8080
jmp 0x70531
leaq -0x13b8(%rbp), %rdi
callq 0x1a370
movsd %xmm0, -0x1768(%rbp)
jmp 0x70547
movsd -0x1768(%rbp), %xmm0
callq 0x65ec0
movsd %xmm0, -0x1318(%rbp)
leaq -0x13b8(%rbp), %rdi
callq 0x1a390
jmp 0x70587
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x13b8(%rbp), %rdi
callq 0x1a390
jmp 0x7070e
leaq -0x11c8(%rbp), %rdi
callq 0x81d0
movq %rax, %rsi
cvttsd2si -0x1318(%rbp), %edx
leaq 0x8c60(%rip), %rdi      # 0x79205
xorl %eax, %eax
callq 0x8080
jmp 0x705ae
movl $0x0, -0x13bc(%rbp)
cvtsi2sdl -0x13bc(%rbp), %xmm1
movsd -0x1318(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x706c9
leaq -0x1190(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
movl $0x4, %esi
callq 0x69aa0
movl %eax, -0x176c(%rbp)
jmp 0x705f3
movl -0x176c(%rbp), %eax
cmpl $0x0, %eax
jne 0x7066b
leaq -0x1190(%rbp), %rdi
callq 0x72460
movq (%rax), %rsi
leaq -0x13e0(%rbp), %rdi
callq 0x69750
jmp 0x7061b
leaq -0x13e0(%rbp), %rdi
callq 0x81d0
movq %rax, %rsi
movl -0x13bc(%rbp), %edx
leaq 0x8bed(%rip), %rdi      # 0x79224
xorl %eax, %eax
callq 0x8080
jmp 0x70640
leaq -0x13e0(%rbp), %rdi
callq 0x82e0
jmp 0x706c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x13e0(%rbp), %rdi
callq 0x82e0
jmp 0x7070e
leaq -0x11a0(%rbp), %rdi
callq 0x72460
movq (%rax), %rax
movq %rax, -0x1780(%rbp)
leaq -0x1190(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
callq 0x69c80
movq %rax, -0x1778(%rbp)
jmp 0x7069e
movq -0x1778(%rbp), %rsi
movq -0x1780(%rbp), %rdi
callq 0x69db0
jmp 0x706b3
jmp 0x706b5
movl -0x13bc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x13bc(%rbp)
jmp 0x705b8
jmp 0x706cb
movl $0x0, -0x1ec(%rbp)
leaq -0x1268(%rbp), %rdi
callq 0x82e0
leaq -0x11c8(%rbp), %rdi
callq 0x82e0
movl -0x1ec(%rbp), %eax
testl %eax, %eax
je 0x706fb
jmp 0x706f9
jmp 0x706fd
jmp 0x706fd
leaq -0x11a0(%rbp), %rdi
callq 0x72480
jmp 0x6fcef
leaq -0x1268(%rbp), %rdi
callq 0x82e0
leaq -0x11c8(%rbp), %rdi
callq 0x82e0
jmp 0x7086a
jmp 0x7072d
leaq -0x1190(%rbp), %rdi
callq 0x72480
jmp 0x6fcb3
leaq -0x58(%rbp), %rdi
callq 0x723c0
movq %rax, -0x13e8(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x72430
movq %rax, -0x13f0(%rbp)
leaq -0x13e8(%rbp), %rdi
leaq -0x13f0(%rbp), %rsi
callq 0x723f0
testb $0x1, %al
jne 0x7077a
jmp 0x70850
leaq -0x13e8(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
movl $0x1, %esi
callq 0x69e50
jmp 0x70795
movq 0x397ec(%rip), %rdi     # 0xa9f88
leaq 0x8ac0(%rip), %rsi      # 0x79263
callq 0x84a0
movq %rax, -0x1788(%rbp)
jmp 0x707b1
leaq -0x13e8(%rbp), %rdi
callq 0x72460
movq (%rax), %rsi
leaq -0x1410(%rbp), %rdi
callq 0x69750
jmp 0x707ce
movq -0x1788(%rbp), %rdi
leaq -0x1410(%rbp), %rsi
callq 0x8410
movq %rax, -0x1790(%rbp)
jmp 0x707ea
movq -0x1790(%rbp), %rdi
leaq 0x6a24(%rip), %rsi      # 0x7721c
callq 0x84a0
jmp 0x707ff
leaq -0x1410(%rbp), %rdi
callq 0x82e0
leaq -0x13e8(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
xorl %esi, %esi
callq 0x666c0
jmp 0x70823
jmp 0x70825
leaq -0x13e8(%rbp), %rdi
callq 0x72480
jmp 0x7074e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1410(%rbp), %rdi
callq 0x82e0
jmp 0x7086a
leaq -0x1168(%rbp), %rdi
callq 0x82e0
leaq -0x1148(%rbp), %rdi
callq 0x82e0
jmp 0x70887
leaq -0x1168(%rbp), %rdi
callq 0x82e0
leaq -0x1148(%rbp), %rdi
callq 0x82e0
jmp 0x70c0a
movb $0x0, -0x1411(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x723c0
movq %rax, -0x1420(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x72430
movq %rax, -0x1428(%rbp)
leaq -0x1420(%rbp), %rdi
leaq -0x1428(%rbp), %rsi
callq 0x723f0
testb $0x1, %al
jne 0x708c7
jmp 0x7091c
leaq -0x1420(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
callq 0x672b0
movb %al, -0x1791(%rbp)
jmp 0x708e3
movb -0x1791(%rbp), %al
testb $0x1, %al
jne 0x708ef
jmp 0x708f6
movb $0x1, -0x1411(%rbp)
leaq -0x1420(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
callq 0x69780
jmp 0x7090c
jmp 0x7090e
leaq -0x1420(%rbp), %rdi
callq 0x72480
jmp 0x7089e
testb $0x1, -0x1411(%rbp)
jne 0x7093f
leaq 0x896b(%rip), %rdi      # 0x79297
xorl %eax, %eax
callq 0x8080
jmp 0x70935
movl $0xc8, %edi
callq 0x85f0
leaq -0x15a0(%rbp), %rdi
callq 0x8680
jmp 0x7094d
leaq 0x8985(%rip), %rsi      # 0x792d9
leaq -0x15a0(%rbp), %rdi
callq 0x84a0
jmp 0x70962
leaq -0x58(%rbp), %rdi
callq 0x723c0
movq %rax, -0x15a8(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x72430
movq %rax, -0x15b0(%rbp)
leaq -0x15a8(%rbp), %rdi
leaq -0x15b0(%rbp), %rsi
callq 0x723f0
testb $0x1, %al
jne 0x7099e
jmp 0x70b0d
leaq -0x15a8(%rbp), %rdi
callq 0x72460
movq (%rax), %rsi
leaq -0x15d0(%rbp), %rdi
callq 0x69750
jmp 0x709bb
leaq -0x15a0(%rbp), %rdi
leaq -0x15d0(%rbp), %rsi
callq 0x8410
movq %rax, -0x17a0(%rbp)
jmp 0x709d7
movq -0x17a0(%rbp), %rdi
leaq 0x8906(%rip), %rsi      # 0x792eb
callq 0x84a0
jmp 0x709ec
leaq -0x15d0(%rbp), %rdi
callq 0x82e0
leaq -0x15a8(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
movl $0x4, %esi
callq 0x69aa0
movl %eax, -0x17a4(%rbp)
jmp 0x70a19
movl -0x17a4(%rbp), %esi
leaq -0x15a0(%rbp), %rdi
callq 0x8840
jmp 0x70a2d
leaq 0x88ba(%rip), %rsi      # 0x792ee
leaq -0x15a0(%rbp), %rdi
callq 0x84a0
jmp 0x70a42
leaq -0x15a8(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
movl $0x1, %esi
callq 0x69aa0
movl %eax, -0x17a8(%rbp)
jmp 0x70a63
movl -0x17a8(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0x17b8(%rbp)
leaq -0x15a8(%rbp), %rdi
callq 0x72460
movq (%rax), %rdi
xorl %esi, %esi
callq 0x69aa0
movl %eax, -0x17ac(%rbp)
jmp 0x70a93
movsd -0x17b8(%rbp), %xmm0
movl -0x17ac(%rbp), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
leaq -0x15a0(%rbp), %rdi
callq 0x88c0
jmp 0x70ab7
leaq 0x8837(%rip), %rsi      # 0x792f5
leaq -0x15a0(%rbp), %rdi
callq 0x84a0
jmp 0x70acc
jmp 0x70ace
leaq -0x15a8(%rbp), %rdi
callq 0x72480
jmp 0x70972
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x70bd2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x15d0(%rbp), %rdi
callq 0x82e0
jmp 0x70bd2
leaq 0x6708(%rip), %rsi      # 0x7721c
leaq -0x15a0(%rbp), %rdi
callq 0x84a0
jmp 0x70b22
leaq -0x15f0(%rbp), %rdi
leaq -0x15a0(%rbp), %rsi
callq 0x84e0
jmp 0x70b37
leaq -0x15f0(%rbp), %rdi
callq 0x81d0
movq %rax, %rdi
xorl %eax, %eax
callq 0x8080
jmp 0x70b4f
leaq -0x15f0(%rbp), %rdi
callq 0x82e0
callq 0x8310
movq -0x498(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x498(%rbp)
cvtsi2ssq -0x498(%rbp), %xmm0
movss 0x832e(%rip), %xmm1     # 0x78eb0
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x8767(%rip), %rdi      # 0x792f8
movb $0x1, %al
callq 0x8080
jmp 0x70b9a
leaq -0x15a0(%rbp), %rdi
callq 0x8120
movl -0x490(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x490(%rbp)
jmp 0x6f1a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x15f0(%rbp), %rdi
callq 0x82e0
leaq -0x15a0(%rbp), %rdi
callq 0x8120
jmp 0x70c0a
leaq -0x210(%rbp), %rdi
callq 0x82e0
leaq -0xd0(%rbp), %rdi
callq 0x82e0
leaq -0x58(%rbp), %rdi
callq 0x725f0
addq $0x17c0, %rsp           # imm = 0x17C0
popq %rbp
retq
leaq -0x210(%rbp), %rdi
callq 0x82e0
leaq -0xd0(%rbp), %rdi
callq 0x82e0
leaq -0x58(%rbp), %rdi
callq 0x725f0
movq -0x38(%rbp), %rdi
callq 0x8860
nopw %cs:(%rax,%rax)