// File: melop[P]admixem/config.cpp
// Function: NaturalSelectionConfigurations::LoadFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void NaturalSelectionConfigurations::LoadFromFile(string szConfigFile)
{
	//FILE *pConfigFile;
	ifstream fsConfigFile;
	string sBuffer;
	char szPopName[MAXLINE];
	char szFormula[MAXLINE];
	
	#ifdef _OPENMP
		int nTotalCPUCore =  omp_get_max_threads();//omp_get_num_threads();
		//printf("OpenMP enabled\n");
	#else
		int nTotalCPUCore = 1;
		//printf("OpenMP disabled \n");
	#endif

	
	
	printf("Start loading natural selection file %s ...\n", szConfigFile.c_str());

	_szConfigFilename = szConfigFile; // save name of config file

	fsConfigFile.open(szConfigFile.c_str() );
	//pConfigFile = fopen(szConfigFile.c_str(), "r");
	

	if (!fsConfigFile.is_open()) {
		printf("%s\n", "Cannot open natural selection file ...");
		throw "Cannot open natural selection file!";
	}

	getline(fsConfigFile,sBuffer);
	if (sBuffer == "") { // skip the header line
		throw "Cannot read natural selection file!";
	}

	string sPopName="";
	string sFormula="";
	string sPrevPopName="";
	string sPrevFormula="";

	while(fsConfigFile.good()) 
	{
		getline(fsConfigFile,sBuffer);
		
		int nGen;
		sBuffer.erase(sBuffer.find_last_not_of(" \n\r\t")+1);//trim
                if (sBuffer == "") {
                        continue;
                }

		sscanf(sBuffer.c_str(), "%[^\t\n]	%d	%[^\t\n]", szPopName, &nGen, szFormula);
		sPrevPopName = sPopName;
		sPrevFormula = sFormula;
		sPopName = szPopName; //make it string so that it saves lots of trouble of fuddling with c strings... i hate c strings.
		sFormula = szFormula;
		if (sPopName==sPrevPopName && sFormula == sPrevFormula) {
			printf("Warning: %s already loaded for pop %s, skipping...\n", sFormula.c_str(), sPopName.c_str());
			continue;
		}

		printf("Parsing natural rule for Pop %s : %s\n", sPopName.c_str(), sFormula.c_str());
		if (sPopName.length() != 0 && sFormula.length() !=0) {
			
			

			if (this->_mpRules.find(sPopName) == this->_mpRules.end()) { // if this pop is not in the map yet
				list< string > vsFormulae;
				list< string > vsFreqDependentFormulae;
				list< pair< Parser * , int> > vpFormulae;
				list< pair< Parser * , int> > vpFreqDependentFormulae;
				list< vector<string> > vvsSymbols;
				list< vector<string> > vvsSymbols2;
				list< vector<string> > vvsSymbols3;
				list< vector<string> > vvsSymbols4;
				list< vector<string> > vvsSymbols5;
				list< vector<string> > vvsSymbols6;
				
				this->_mpRules[sPopName] = vsFormulae;
				this->_mpFreqDependentRules[sPopName] = vsFreqDependentFormulae;
				for(int nCPU=0;nCPU<nTotalCPUCore;nCPU++) { // the formula object needs to be duplicated such that it will parallelize
					printf("%d CPU cores found, putting natural selection parser on CPU %d\n",nTotalCPUCore, nCPU );
					if (this->_mpmpRuleFormulae.find(nCPU) == this->_mpmpRuleFormulae.end()) {
						 map<string , list< pair<Parser *, int> > > mpRuleFormulae, _mpFreqDependentRuleFormulae;
						this->_mpmpRuleFormulae[nCPU] =  mpRuleFormulae;
						this->_mpmpFreqDependentRuleFormulae[nCPU] = _mpFreqDependentRuleFormulae;
					}

					this->_mpmpRuleFormulae[nCPU][sPopName] = vpFormulae;
					this->_mpmpFreqDependentRuleFormulae[nCPU][sPopName] = vpFreqDependentFormulae;
				}
				this->_mpRuleFormulaSymbolStrings[sPopName] = vvsSymbols;
				this->_mpRuleFormulaSymbolStringsCourter[sPopName] = vvsSymbols2;
				this->_mpRuleFormulaSymbolStringsSelf[sPopName] = vvsSymbols3;
				this->_mpRuleFormulaSymbolStringsPopWide[sPopName] = vvsSymbols4;
				this->_mpRuleFormulaSymbolStringsPopWideChooser[sPopName] = vvsSymbols5;
				this->_mpRuleFormulaSymbolStringsPopWideCourter[sPopName] = vvsSymbols6;

			}

			
			
			Parser * pF = new Parser("");
			//Parser * pDummyFormula = new Parser("1"); // dummy formula that always return 1.

			try {
				pF->Evaluate(sFormula);
			}
			catch(std::runtime_error e) {
				
				if ( string(e.what()) == "Divide by zero" ) {
					
					printf("Warning in formula: %s \nErrMsg:%s\nThis could simply be caused by uninitialized values", sFormula.c_str(), e.what());
					
					
				}
				else {
					printf("Error occured when trying to parse formula: %s \nErrMsg:%s\nPlease check formulae grammar!", sFormula.c_str(), e.what());
					exit(100);
				}
			}

		
			vector<string> vSymbolStrings; // all symbols
			vector<string> vSymbolStringsCourter; // only symbols referring to an individual courter's trait prefixed with Courter_
			vector<string> vSymbolStringsPopWideCourter; // symbols referring to population-level variables prefixed with PopCourter_
			vector<string> vSymbolStringsSelf; //symbols referring to individual chooser trait prefixed with My_
			vector<string> vSymbolStringsPopWideChooser;//symbols referring to population-level variables prefixed with PopChooser_
			vector<string> vSymbolStringsPopWide; // symbols referring to population-level variables prefixed with Pop_
			//list all the symbols used in this formula

			bool bFreqDependent = false; // does this formula contain frequency dependent symbols?

			for(map<string,double>::iterator it = pF->symbols_.begin(); it != pF->symbols_.end(); ++it) 
			{	
				//Parse chromosome number and position from the symbol
				//cout << (it->first) << "\n"; //list all keys

				
				if (strlen(it->first.c_str()) < 3) { // no need to add symbol
					continue;
				}

				vSymbolStrings.push_back(it->first); // save label too

				//Look at prefixes:
				string sSymbol = it->first;
				
				if (sSymbol.find("Courter_") == 0) {
					throw(new Exception("Courter_ not yet implemented in natural selection."));
					sSymbol.replace(0, 8, "");
					vSymbolStringsCourter.push_back(sSymbol);
				}
				else if (sSymbol.find("PopCourter_") == 0) {
					//throw(new Exception("PopCourter_ not yet implemented in natural selection."));
					sSymbol.replace(0, 11, "");
					vSymbolStringsPopWideCourter.push_back(sSymbol );
					bFreqDependent = true;
				}
				else if (sSymbol.find("My_") == 0) {
					sSymbol.replace(0, 3, "");
					vSymbolStringsSelf.push_back(sSymbol);
				}
				else if (sSymbol.find("PopChooser_") == 0) {
					//throw(new Exception("PopChooser_ not yet implemented in natural selection."));
					sSymbol.replace(0, 11, "");
					vSymbolStringsPopWideChooser.push_back(sSymbol);
					bFreqDependent = true;
				}
				else if (sSymbol.find("Pop_") == 0) {
					//throw(new Exception("Pop_ not yet implemented in natural selection."));
					sSymbol.replace(0, 4, "");
					vSymbolStringsPopWide.push_back(sSymbol);
					bFreqDependent = true;
				}
				else { //default to be self
					vSymbolStringsSelf.push_back(sSymbol);
				}
			}

			delete pF;
			
			if (bFreqDependent) {
				this->_mpFreqDependentRules[sPopName].push_back(sFormula); // save the formula string for further reference.
				
				
				
				this->_mpRules[sPopName].push_back("1"); // 
				

				for(int nCPU=0;nCPU<nTotalCPUCore;nCPU++) { // the formula object needs to be duplicated such that it will parallelize

					this->_mpmpFreqDependentRuleFormulae[nCPU][sPopName].push_back(pair< Parser *, int >( new Parser(sFormula) , nGen )); // literally duplicate the parser object so that it can parallelize
					this->_mpmpRuleFormulae[nCPU][sPopName].push_back(pair< Parser *, int >( new Parser("1") , nGen )); // set dummy formula which always return 1. 
				}
				
			}
			else {

				this->_mpRules[sPopName].push_back(sFormula); // save the formula string for further reference.			

				this->_mpFreqDependentRules[sPopName].push_back("1"); 
				

				for(int nCPU=0;nCPU<nTotalCPUCore;nCPU++) { // the formula object needs to be duplicated such that it will parallelize
					this->_mpmpRuleFormulae[nCPU][sPopName].push_back(pair< Parser *, int >( new Parser(sFormula) , nGen ));
					this->_mpmpFreqDependentRuleFormulae[nCPU][sPopName].push_back(pair< Parser *, int >( new Parser("1") , nGen ));// set dummy formula which always return 1.
					
				}

			}
			this->_mpRuleFormulaSymbolStrings[sPopName].push_back(vSymbolStrings);
			this->_mpRuleFormulaSymbolStringsCourter[sPopName].push_back(vSymbolStringsCourter);
			this->_mpRuleFormulaSymbolStringsSelf[sPopName].push_back(vSymbolStringsSelf);
			this->_mpRuleFormulaSymbolStringsPopWide[sPopName].push_back(vSymbolStringsPopWide);
			this->_mpRuleFormulaSymbolStringsPopWideChooser[sPopName].push_back(vSymbolStringsPopWideChooser);
			this->_mpRuleFormulaSymbolStringsPopWideCourter[sPopName].push_back(vSymbolStringsPopWideCourter);

			if (nGen > -1) {
				this->_vSpecialGens.insert(nGen);
			}
		}
	}

	printf("Selection rules for %d populations loaded. \n", this->_mpRules.size());

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x7aa00, %rsp          # imm = 0x7AA00
movq %rsi, -0x7a7d8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x7a7e0(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x8580
leaq -0x238(%rbp), %rdi
callq 0x86b0
movq -0x7a7d8(%rbp), %rdi
movl $0x1, -0x7a364(%rbp)
callq 0x81d0
movq %rax, %rsi
leaq 0x55411(%rip), %rdi     # 0x7721e
xorl %eax, %eax
callq 0x8080
jmp 0x21e16
movq -0x7a7d8(%rbp), %rsi
movq -0x7a7e0(%rbp), %rdi
callq 0x8070
jmp 0x21e2b
movq -0x7a7d8(%rbp), %rdi
callq 0x81d0
movq %rax, %rsi
leaq -0x218(%rbp), %rdi
movl $0x8, %edx
callq 0x82f0
jmp 0x21e4d
leaq -0x218(%rbp), %rdi
callq 0x8780
movb %al, -0x7a7e1(%rbp)
jmp 0x21e61
movb -0x7a7e1(%rbp), %al
testb $0x1, %al
jne 0x21ec7
jmp 0x21e6d
leaq 0x554b2(%rip), %rdi     # 0x77326
leaq 0x553d0(%rip), %rsi     # 0x7724b
xorl %eax, %eax
callq 0x8080
jmp 0x21e84
movl $0x8, %edi
callq 0x8230
movq %rax, %rdi
leaq 0x553da(%rip), %rax     # 0x77272
movq %rax, (%rdi)
movq 0x880a6(%rip), %rsi     # 0xa9f48
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x2390a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x238de
leaq -0x218(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0x80f0
jmp 0x21edc
leaq 0x553db(%rip), %rsi     # 0x772be
leaq -0x238(%rbp), %rdi
callq 0xcbe0
movb %al, -0x7a7e2(%rbp)
jmp 0x21ef7
movb -0x7a7e2(%rbp), %al
testb $0x1, %al
jne 0x21f03
jmp 0x21f2f
movl $0x8, %edi
callq 0x8230
movq %rax, %rdi
leaq 0x5537f(%rip), %rax     # 0x77296
movq %rax, (%rdi)
movq 0x88027(%rip), %rsi     # 0xa9f48
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x2390a
leaq -0x7a399(%rbp), %rdi
movq %rdi, -0x7a7f0(%rbp)
callq 0x8870
movq -0x7a7f0(%rbp), %rdx
leaq 0x5536e(%rip), %rsi     # 0x772be
leaq -0x7a398(%rbp), %rdi
callq 0xcb30
jmp 0x21f5e
leaq -0x7a399(%rbp), %rdi
callq 0x8540
leaq -0x7a3c1(%rbp), %rdi
movq %rdi, -0x7a7f8(%rbp)
callq 0x8870
movq -0x7a7f8(%rbp), %rdx
leaq 0x55333(%rip), %rsi     # 0x772be
leaq -0x7a3c0(%rbp), %rdi
callq 0xcb30
jmp 0x21f99
leaq -0x7a3c1(%rbp), %rdi
callq 0x8540
leaq -0x7a3e9(%rbp), %rdi
movq %rdi, -0x7a800(%rbp)
callq 0x8870
movq -0x7a800(%rbp), %rdx
leaq 0x552f8(%rip), %rsi     # 0x772be
leaq -0x7a3e8(%rbp), %rdi
callq 0xcb30
jmp 0x21fd4
leaq -0x7a3e9(%rbp), %rdi
callq 0x8540
leaq -0x7a411(%rbp), %rdi
movq %rdi, -0x7a808(%rbp)
callq 0x8870
movq -0x7a808(%rbp), %rdx
leaq 0x552bd(%rip), %rsi     # 0x772be
leaq -0x7a410(%rbp), %rdi
callq 0xcb30
jmp 0x2200f
leaq -0x7a411(%rbp), %rdi
callq 0x8540
movq -0x218(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x218(%rbp,%rax), %rdi
callq 0x8800
movb %al, -0x7a809(%rbp)
jmp 0x2203b
movb -0x7a809(%rbp), %al
testb $0x1, %al
jne 0x2204a
jmp 0x2383a
leaq -0x218(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0x80f0
jmp 0x2205f
leaq 0x55254(%rip), %rsi     # 0x772ba
leaq -0x238(%rbp), %rdi
movq %rdi, -0x7a820(%rbp)
movq $-0x1, %rdx
movq %rdx, -0x7a818(%rbp)
callq 0x8890
movq -0x7a820(%rbp), %rdi
movq -0x7a818(%rbp), %rdx
movq %rax, %rsi
incq %rsi
callq 0x8100
jmp 0x220a2
leaq 0x55215(%rip), %rsi     # 0x772be
leaq -0x238(%rbp), %rdi
callq 0xcbe0
movb %al, -0x7a821(%rbp)
jmp 0x220bd
movb -0x7a821(%rbp), %al
testb $0x1, %al
jne 0x220cc
jmp 0x22174
jmp 0x2201b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a399(%rbp), %rdi
callq 0x8540
jmp 0x238de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a3c1(%rbp), %rdi
callq 0x8540
jmp 0x238d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a3e9(%rbp), %rdi
callq 0x8540
jmp 0x238c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a411(%rbp), %rdi
callq 0x8540
jmp 0x238ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x238ae
leaq -0x238(%rbp), %rdi
callq 0x81d0
movq %rax, %rdi
leaq 0x55135(%rip), %rsi     # 0x772bf
xorl %eax, %eax
leaq -0x3d2d0(%rbp), %rdx
leaq -0x7a418(%rbp), %rcx
leaq -0x7a360(%rbp), %r8
callq 0x8480
leaq -0x7a3e8(%rbp), %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x8070
jmp 0x221bb
leaq -0x7a410(%rbp), %rdi
leaq -0x7a3c0(%rbp), %rsi
callq 0x8070
jmp 0x221d0
leaq -0x7a398(%rbp), %rdi
leaq -0x3d2d0(%rbp), %rsi
callq 0x8690
jmp 0x221e5
leaq -0x7a3c0(%rbp), %rdi
leaq -0x7a360(%rbp), %rsi
callq 0x8690
jmp 0x221fa
leaq -0x7a398(%rbp), %rdi
leaq -0x7a3e8(%rbp), %rsi
callq 0x2c210
testb $0x1, %al
jne 0x22213
jmp 0x2226a
leaq -0x7a3c0(%rbp), %rdi
leaq -0x7a410(%rbp), %rsi
callq 0x2c210
testb $0x1, %al
jne 0x2222c
jmp 0x2226a
leaq -0x7a3c0(%rbp), %rdi
callq 0x81d0
movq %rax, -0x7a830(%rbp)
leaq -0x7a398(%rbp), %rdi
callq 0x81d0
movq -0x7a830(%rbp), %rsi
movq %rax, %rdx
leaq 0x55074(%rip), %rdi     # 0x772d0
xorl %eax, %eax
callq 0x8080
jmp 0x22265
jmp 0x2201b
leaq -0x7a398(%rbp), %rdi
callq 0x81d0
movq %rax, -0x7a838(%rbp)
leaq -0x7a3c0(%rbp), %rdi
callq 0x81d0
movq -0x7a838(%rbp), %rsi
movq %rax, %rdx
leaq 0x5506a(%rip), %rdi     # 0x77304
xorl %eax, %eax
callq 0x8080
jmp 0x222a3
leaq -0x7a398(%rbp), %rdi
callq 0x8710
cmpq $0x0, %rax
je 0x23835
leaq -0x7a3c0(%rbp), %rdi
callq 0x8710
cmpq $0x0, %rax
je 0x23835
movq -0x7a7e0(%rbp), %rdi
addq $0x28, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c2d0
movq %rax, -0x7a840(%rbp)
jmp 0x222ef
movq -0x7a7e0(%rbp), %rdi
movq -0x7a840(%rbp), %rax
movq %rax, -0x7a420(%rbp)
addq $0x28, %rdi
callq 0x2c300
movq %rax, -0x7a428(%rbp)
leaq -0x7a420(%rbp), %rdi
leaq -0x7a428(%rbp), %rsi
callq 0x2c2a0
testb $0x1, %al
jne 0x22330
jmp 0x2289e
leaq -0x7a440(%rbp), %rdi
callq 0x2c330
leaq -0x7a458(%rbp), %rdi
callq 0x2c330
leaq -0x7a470(%rbp), %rdi
callq 0x2c350
leaq -0x7a488(%rbp), %rdi
callq 0x2c350
leaq -0x7a4a0(%rbp), %rdi
callq 0x2c370
leaq -0x7a4b8(%rbp), %rdi
callq 0x2c370
leaq -0x7a4d0(%rbp), %rdi
callq 0x2c370
leaq -0x7a4e8(%rbp), %rdi
callq 0x2c370
leaq -0x7a500(%rbp), %rdi
callq 0x2c370
leaq -0x7a518(%rbp), %rdi
callq 0x2c370
movq -0x7a7e0(%rbp), %rdi
addq $0x28, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c390
movq %rax, -0x7a848(%rbp)
jmp 0x223c8
movq -0x7a848(%rbp), %rdi
leaq -0x7a440(%rbp), %rsi
callq 0x2c470
jmp 0x223dd
movq -0x7a7e0(%rbp), %rdi
addq $0x58, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c390
movq %rax, -0x7a850(%rbp)
jmp 0x223fd
movq -0x7a850(%rbp), %rdi
leaq -0x7a458(%rbp), %rsi
callq 0x2c470
jmp 0x22412
movl $0x0, -0x7a51c(%rbp)
movl -0x7a51c(%rbp), %eax
cmpl -0x7a364(%rbp), %eax
jge 0x22657
movl -0x7a364(%rbp), %esi
movl -0x7a51c(%rbp), %edx
leaq 0x54ee9(%rip), %rdi     # 0x7732a
xorl %eax, %eax
callq 0x8080
jmp 0x2244a
movq -0x7a7e0(%rbp), %rdi
addq $0x88, %rdi
leaq -0x7a51c(%rbp), %rsi
callq 0x2c500
movq %rax, -0x7a858(%rbp)
jmp 0x2246d
movq -0x7a7e0(%rbp), %rdi
movq -0x7a858(%rbp), %rax
movq %rax, -0x7a528(%rbp)
addq $0x88, %rdi
callq 0x2c530
movq %rax, -0x7a530(%rbp)
leaq -0x7a528(%rbp), %rdi
leaq -0x7a530(%rbp), %rsi
callq 0x2c4d0
testb $0x1, %al
jne 0x224b1
jmp 0x22599
leaq -0x7a560(%rbp), %rdi
callq 0x2c560
leaq -0x7a590(%rbp), %rdi
callq 0x2c560
movq -0x7a7e0(%rbp), %rdi
addq $0x88, %rdi
leaq -0x7a51c(%rbp), %rsi
callq 0x2c580
movq %rax, -0x7a860(%rbp)
jmp 0x224ec
movq -0x7a860(%rbp), %rdi
leaq -0x7a560(%rbp), %rsi
callq 0x2c660
jmp 0x22501
movq -0x7a7e0(%rbp), %rdi
addq $0xb8, %rdi
leaq -0x7a51c(%rbp), %rsi
callq 0x2c580
movq %rax, -0x7a868(%rbp)
jmp 0x22524
movq -0x7a868(%rbp), %rdi
leaq -0x7a590(%rbp), %rsi
callq 0x2c660
jmp 0x22539
leaq -0x7a590(%rbp), %rdi
callq 0x2c690
leaq -0x7a560(%rbp), %rdi
callq 0x2c690
jmp 0x22599
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x22821
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a590(%rbp), %rdi
callq 0x2c690
leaq -0x7a560(%rbp), %rdi
callq 0x2c690
jmp 0x22821
movq -0x7a7e0(%rbp), %rdi
addq $0x88, %rdi
leaq -0x7a51c(%rbp), %rsi
callq 0x2c580
movq %rax, -0x7a870(%rbp)
jmp 0x225bc
movq -0x7a870(%rbp), %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c6b0
movq %rax, -0x7a878(%rbp)
jmp 0x225d8
movq -0x7a878(%rbp), %rdi
leaq -0x7a470(%rbp), %rsi
callq 0x2c790
jmp 0x225ed
movq -0x7a7e0(%rbp), %rdi
addq $0xb8, %rdi
leaq -0x7a51c(%rbp), %rsi
callq 0x2c580
movq %rax, -0x7a880(%rbp)
jmp 0x22610
movq -0x7a880(%rbp), %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c6b0
movq %rax, -0x7a888(%rbp)
jmp 0x2262c
movq -0x7a888(%rbp), %rdi
leaq -0x7a488(%rbp), %rsi
callq 0x2c790
jmp 0x22641
jmp 0x22643
movl -0x7a51c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7a51c(%rbp)
jmp 0x2241c
movq -0x7a7e0(%rbp), %rdi
addq $0xe8, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a890(%rbp)
jmp 0x2267a
movq -0x7a890(%rbp), %rdi
leaq -0x7a4a0(%rbp), %rsi
callq 0x2c8d0
jmp 0x2268f
movq -0x7a7e0(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a898(%rbp)
jmp 0x226b2
movq -0x7a898(%rbp), %rdi
leaq -0x7a4b8(%rbp), %rsi
callq 0x2c8d0
jmp 0x226c7
movq -0x7a7e0(%rbp), %rdi
addq $0x148, %rdi            # imm = 0x148
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a8a0(%rbp)
jmp 0x226ea
movq -0x7a8a0(%rbp), %rdi
leaq -0x7a4d0(%rbp), %rsi
callq 0x2c8d0
jmp 0x226ff
movq -0x7a7e0(%rbp), %rdi
addq $0x178, %rdi            # imm = 0x178
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a8a8(%rbp)
jmp 0x22722
movq -0x7a8a8(%rbp), %rdi
leaq -0x7a4e8(%rbp), %rsi
callq 0x2c8d0
jmp 0x22737
movq -0x7a7e0(%rbp), %rdi
addq $0x1d8, %rdi            # imm = 0x1D8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a8b0(%rbp)
jmp 0x2275a
movq -0x7a8b0(%rbp), %rdi
leaq -0x7a500(%rbp), %rsi
callq 0x2c8d0
jmp 0x2276f
movq -0x7a7e0(%rbp), %rdi
addq $0x1a8, %rdi            # imm = 0x1A8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a8b8(%rbp)
jmp 0x22792
movq -0x7a8b8(%rbp), %rdi
leaq -0x7a518(%rbp), %rsi
callq 0x2c8d0
jmp 0x227a7
leaq -0x7a518(%rbp), %rdi
callq 0x2c930
leaq -0x7a500(%rbp), %rdi
callq 0x2c930
leaq -0x7a4e8(%rbp), %rdi
callq 0x2c930
leaq -0x7a4d0(%rbp), %rdi
callq 0x2c930
leaq -0x7a4b8(%rbp), %rdi
callq 0x2c930
leaq -0x7a4a0(%rbp), %rdi
callq 0x2c930
leaq -0x7a488(%rbp), %rdi
callq 0x2c950
leaq -0x7a470(%rbp), %rdi
callq 0x2c950
leaq -0x7a458(%rbp), %rdi
callq 0x2c970
leaq -0x7a440(%rbp), %rdi
callq 0x2c970
jmp 0x2289e
leaq -0x7a518(%rbp), %rdi
callq 0x2c930
leaq -0x7a500(%rbp), %rdi
callq 0x2c930
leaq -0x7a4e8(%rbp), %rdi
callq 0x2c930
leaq -0x7a4d0(%rbp), %rdi
callq 0x2c930
leaq -0x7a4b8(%rbp), %rdi
callq 0x2c930
leaq -0x7a4a0(%rbp), %rdi
callq 0x2c930
leaq -0x7a488(%rbp), %rdi
callq 0x2c950
leaq -0x7a470(%rbp), %rdi
callq 0x2c950
leaq -0x7a458(%rbp), %rdi
callq 0x2c970
leaq -0x7a440(%rbp), %rdi
callq 0x2c970
jmp 0x238ae
movl $0x98, %edi
callq 0x84c0
movq %rax, -0x7a8c0(%rbp)
jmp 0x228b1
movb $0x1, -0x7a5ba(%rbp)
leaq -0x7a5b9(%rbp), %rdi
movq %rdi, -0x7a8c8(%rbp)
callq 0x8870
movq -0x7a8c8(%rbp), %rdx
leaq 0x549e5(%rip), %rsi     # 0x772be
leaq -0x7a5b8(%rbp), %rdi
callq 0xcb30
jmp 0x228e7
movq -0x7a8c0(%rbp), %rdi
leaq -0x7a5b8(%rbp), %rsi
callq 0x2b2c0
jmp 0x228fc
movb $0x0, -0x7a5ba(%rbp)
leaq -0x7a5b8(%rbp), %rdi
callq 0x82e0
leaq -0x7a5b9(%rbp), %rdi
callq 0x8540
movq -0x7a8c0(%rbp), %rax
movq %rax, -0x7a598(%rbp)
movq -0x7a598(%rbp), %rdi
leaq -0x7a3c0(%rbp), %rsi
callq 0xc2c0
jmp 0x2293e
jmp 0x22b70
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x22975
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a5b8(%rbp), %rdi
callq 0x82e0
leaq -0x7a5b9(%rbp), %rdi
callq 0x8540
testb $0x1, -0x7a5ba(%rbp)
jne 0x2298c
jmp 0x2299d
movq -0x7a8c0(%rbp), %rdi
movl $0x98, %esi
callq 0x84d0
jmp 0x238ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
movl -0x7a374(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x238ae
movq -0x7a370(%rbp), %rdi
movq %rdi, -0x7a8e8(%rbp)
callq 0x8620
movq %rax, %rsi
leaq -0x7a5d0(%rbp), %rdi
movq %rdi, -0x7a8e0(%rbp)
callq 0x81e0
movq -0x7a8e8(%rbp), %rdi
callq 0x81c0
movq -0x7a8e0(%rbp), %rdi
callq 0x86a0
movq %rax, -0x7a8d8(%rbp)
leaq -0x7a5f1(%rbp), %rdi
movq %rdi, -0x7a8d0(%rbp)
callq 0x8870
movq -0x7a8d8(%rbp), %rsi
movq -0x7a8d0(%rbp), %rdx
leaq -0x7a5f0(%rbp), %rdi
callq 0xcb30
jmp 0x22a3e
leaq 0x5396d(%rip), %rsi     # 0x763b2
leaq -0x7a5f0(%rbp), %rdi
callq 0xcbe0
movb %al, -0x7a8e9(%rbp)
jmp 0x22a59
leaq -0x7a5f0(%rbp), %rdi
callq 0x82e0
leaq -0x7a5f1(%rbp), %rdi
callq 0x8540
movb -0x7a8e9(%rbp), %al
testb $0x1, %al
jne 0x22a80
jmp 0x22b18
leaq -0x7a3c0(%rbp), %rdi
callq 0x81d0
movq %rax, -0x7a8f8(%rbp)
leaq -0x7a5d0(%rbp), %rdi
callq 0x86a0
movq -0x7a8f8(%rbp), %rsi
movq %rax, %rdx
leaq 0x54687(%rip), %rdi     # 0x77137
xorl %eax, %eax
callq 0x8080
jmp 0x22ab9
jmp 0x22b5b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x22af0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a5f0(%rbp), %rdi
callq 0x82e0
leaq -0x7a5f1(%rbp), %rdi
callq 0x8540
jmp 0x22c30
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x22c30
leaq -0x7a3c0(%rbp), %rdi
callq 0x81d0
movq %rax, -0x7a900(%rbp)
leaq -0x7a5d0(%rbp), %rdi
callq 0x86a0
movq -0x7a900(%rbp), %rsi
movq %rax, %rdx
leaq 0x54645(%rip), %rdi     # 0x7718d
xorl %eax, %eax
callq 0x8080
jmp 0x22b51
movl $0x64, %edi
callq 0x85f0
leaq -0x7a5d0(%rbp), %rdi
callq 0x8948
callq 0x87d0
jmp 0x22b6e
jmp 0x22b70
leaq -0x7a610(%rbp), %rdi
callq 0x2b520
leaq -0x7a628(%rbp), %rdi
callq 0x2b520
leaq -0x7a640(%rbp), %rdi
callq 0x2b520
leaq -0x7a658(%rbp), %rdi
callq 0x2b520
leaq -0x7a670(%rbp), %rdi
callq 0x2b520
leaq -0x7a688(%rbp), %rdi
callq 0x2b520
movb $0x0, -0x7a689(%rbp)
movq -0x7a598(%rbp), %rdi
addq $0x68, %rdi
callq 0x2b540
movq %rax, -0x7a698(%rbp)
movq -0x7a598(%rbp), %rdi
addq $0x68, %rdi
callq 0x107a0
movq %rax, -0x7a6a0(%rbp)
leaq -0x7a698(%rbp), %rdi
leaq -0x7a6a0(%rbp), %rsi
callq 0x2b570
testb $0x1, %al
jne 0x22c09
jmp 0x22f28
leaq -0x7a698(%rbp), %rdi
callq 0x2b5a0
movq %rax, %rdi
callq 0x81d0
movq %rax, %rdi
callq 0x8200
cmpq $0x3, %rax
jae 0x22c48
jmp 0x22f06
leaq -0x7a5d0(%rbp), %rdi
callq 0x8948
callq 0x87d0
jmp 0x22c43
jmp 0x238ae
leaq -0x7a698(%rbp), %rdi
callq 0x2b5a0
movq %rax, %rsi
leaq -0x7a610(%rbp), %rdi
callq 0x2b5c0
jmp 0x22c65
leaq -0x7a698(%rbp), %rdi
callq 0x2b5a0
movq %rax, %rsi
leaq -0x7a6c0(%rbp), %rdi
callq 0x81f0
jmp 0x22c82
leaq -0x7a6c0(%rbp), %rdi
leaq 0x54840(%rip), %rsi     # 0x774d0
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x22d78
movl $0x8, %edi
callq 0x8230
movq %rax, -0x7a910(%rbp)
movl $0x1, %edi
callq 0x84c0
movq %rax, -0x7a908(%rbp)
jmp 0x22cc7
movq -0x7a908(%rbp), %rdi
leaq 0x54695(%rip), %rsi     # 0x7736a
callq 0x129a0
jmp 0x22cdc
movq -0x7a910(%rbp), %rdi
movq -0x7a908(%rbp), %rax
movq %rax, (%rdi)
leaq 0x86fd4(%rip), %rsi     # 0xa9cc8
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x2390a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x237eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x22d50
movq -0x7a908(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
movl $0x1, %esi
callq 0x84d0
movq -0x7a910(%rbp), %rdi
callq 0x8370
jmp 0x22f17
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x22f17
leaq -0x7a6c0(%rbp), %rdi
leaq 0x54747(%rip), %rsi     # 0x774cd
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x22dd4
leaq 0x54522(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a6c0(%rbp), %rdi
movl $0xb, %edx
callq 0x82c0
jmp 0x22db3
leaq -0x7a640(%rbp), %rdi
leaq -0x7a6c0(%rbp), %rsi
callq 0x2b5c0
jmp 0x22dc8
movb $0x1, -0x7a689(%rbp)
jmp 0x22ef8
leaq -0x7a6c0(%rbp), %rdi
leaq 0x545bb(%rip), %rsi     # 0x7739d
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x22e29
leaq 0x544c6(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a6c0(%rbp), %rdi
movl $0x3, %edx
callq 0x82c0
jmp 0x22e0f
leaq -0x7a658(%rbp), %rdi
leaq -0x7a6c0(%rbp), %rsi
callq 0x2b5c0
jmp 0x22e24
jmp 0x22ef6
leaq -0x7a6c0(%rbp), %rdi
leaq 0x546ad(%rip), %rsi     # 0x774e4
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x22e82
leaq 0x54471(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a6c0(%rbp), %rdi
movl $0xb, %edx
callq 0x82c0
jmp 0x22e64
leaq -0x7a670(%rbp), %rdi
leaq -0x7a6c0(%rbp), %rsi
callq 0x2b5c0
jmp 0x22e79
movb $0x1, -0x7a689(%rbp)
jmp 0x22ef4
leaq -0x7a6c0(%rbp), %rdi
leaq 0x5462d(%rip), %rsi     # 0x774bd
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x22edb
leaq 0x54418(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a6c0(%rbp), %rdi
movl $0x4, %edx
callq 0x82c0
jmp 0x22ebd
leaq -0x7a688(%rbp), %rdi
leaq -0x7a6c0(%rbp), %rsi
callq 0x2b5c0
jmp 0x22ed2
movb $0x1, -0x7a689(%rbp)
jmp 0x22ef2
leaq -0x7a658(%rbp), %rdi
leaq -0x7a6c0(%rbp), %rsi
callq 0x2b5c0
jmp 0x22ef0
jmp 0x22ef2
jmp 0x22ef4
jmp 0x22ef6
jmp 0x22ef8
jmp 0x22efa
leaq -0x7a6c0(%rbp), %rdi
callq 0x82e0
leaq -0x7a698(%rbp), %rdi
callq 0x11700
jmp 0x22bd6
leaq -0x7a6c0(%rbp), %rdi
callq 0x82e0
jmp 0x237eb
movq -0x7a598(%rbp), %rax
movq %rax, -0x7a918(%rbp)
cmpq $0x0, %rax
je 0x22f59
movq -0x7a918(%rbp), %rdi
callq 0x2c990
movq -0x7a918(%rbp), %rdi
movl $0x98, %esi
callq 0x84d0
testb $0x1, -0x7a689(%rbp)
je 0x232b7
movq -0x7a7e0(%rbp), %rdi
addq $0x58, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c390
movq %rax, -0x7a920(%rbp)
jmp 0x22f86
movq -0x7a920(%rbp), %rdi
leaq -0x7a3c0(%rbp), %rsi
callq 0x2c9d0
jmp 0x22f9b
movq -0x7a7e0(%rbp), %rdi
addq $0x28, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c390
movq %rax, -0x7a928(%rbp)
jmp 0x22fbb
leaq -0x7a6e1(%rbp), %rdi
movq %rdi, -0x7a930(%rbp)
callq 0x8870
movq -0x7a930(%rbp), %rdx
leaq 0x56661(%rip), %rsi     # 0x7963d
leaq -0x7a6e0(%rbp), %rdi
callq 0xcb30
jmp 0x22fea
movq -0x7a928(%rbp), %rdi
leaq -0x7a6e0(%rbp), %rsi
callq 0x2ca10
jmp 0x22fff
leaq -0x7a6e0(%rbp), %rdi
callq 0x82e0
leaq -0x7a6e1(%rbp), %rdi
callq 0x8540
movl $0x0, -0x7a6e8(%rbp)
movl -0x7a6e8(%rbp), %eax
cmpl -0x7a364(%rbp), %eax
jge 0x232b2
movq -0x7a7e0(%rbp), %rdi
addq $0xb8, %rdi
leaq -0x7a6e8(%rbp), %rsi
callq 0x2c580
movq %rax, -0x7a938(%rbp)
jmp 0x23056
movq -0x7a938(%rbp), %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c6b0
movq %rax, -0x7a940(%rbp)
jmp 0x23072
movl $0x98, %edi
callq 0x84c0
movq %rax, -0x7a948(%rbp)
jmp 0x23085
movq -0x7a948(%rbp), %rdi
leaq -0x7a3c0(%rbp), %rsi
callq 0x2b2c0
jmp 0x2309a
movq -0x7a948(%rbp), %rax
movq %rax, -0x7a700(%rbp)
leaq -0x7a6f8(%rbp), %rdi
leaq -0x7a700(%rbp), %rsi
leaq -0x7a418(%rbp), %rdx
callq 0x2ca90
jmp 0x230c4
movq -0x7a940(%rbp), %rdi
leaq -0x7a6f8(%rbp), %rsi
callq 0x2ca50
jmp 0x230d9
movq -0x7a7e0(%rbp), %rdi
addq $0x88, %rdi
leaq -0x7a6e8(%rbp), %rsi
callq 0x2c580
movq %rax, -0x7a950(%rbp)
jmp 0x230fc
movq -0x7a950(%rbp), %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c6b0
movq %rax, -0x7a958(%rbp)
jmp 0x23118
movl $0x98, %edi
callq 0x84c0
movq %rax, -0x7a960(%rbp)
jmp 0x2312b
movb $0x1, -0x7a73a(%rbp)
leaq -0x7a739(%rbp), %rdi
movq %rdi, -0x7a968(%rbp)
callq 0x8870
movq -0x7a968(%rbp), %rdx
leaq 0x564ea(%rip), %rsi     # 0x7963d
leaq -0x7a738(%rbp), %rdi
callq 0xcb30
jmp 0x23161
movq -0x7a960(%rbp), %rdi
leaq -0x7a738(%rbp), %rsi
callq 0x2b2c0
jmp 0x23176
movq -0x7a960(%rbp), %rax
movb $0x0, -0x7a73a(%rbp)
movq %rax, -0x7a718(%rbp)
leaq -0x7a710(%rbp), %rdi
leaq -0x7a718(%rbp), %rsi
leaq -0x7a418(%rbp), %rdx
callq 0x2ca90
jmp 0x231a7
movq -0x7a958(%rbp), %rdi
leaq -0x7a710(%rbp), %rsi
callq 0x2ca50
jmp 0x231bc
leaq -0x7a738(%rbp), %rdi
callq 0x82e0
leaq -0x7a739(%rbp), %rdi
callq 0x8540
movl -0x7a6e8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7a6e8(%rbp)
jmp 0x23021
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x2321a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a6e0(%rbp), %rdi
callq 0x82e0
leaq -0x7a6e1(%rbp), %rdi
callq 0x8540
jmp 0x237eb
movq -0x7a948(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
movl $0x98, %esi
callq 0x84d0
jmp 0x237eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x23285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a738(%rbp), %rdi
callq 0x82e0
leaq -0x7a739(%rbp), %rdi
callq 0x8540
testb $0x1, -0x7a73a(%rbp)
jne 0x2329c
jmp 0x232ad
movq -0x7a960(%rbp), %rdi
movl $0x98, %esi
callq 0x84d0
jmp 0x237eb
jmp 0x23605
movq -0x7a7e0(%rbp), %rdi
addq $0x28, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c390
movq %rax, -0x7a970(%rbp)
jmp 0x232d7
movq -0x7a970(%rbp), %rdi
leaq -0x7a3c0(%rbp), %rsi
callq 0x2c9d0
jmp 0x232ec
movq -0x7a7e0(%rbp), %rdi
addq $0x58, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c390
movq %rax, -0x7a978(%rbp)
jmp 0x2330c
leaq -0x7a761(%rbp), %rdi
movq %rdi, -0x7a980(%rbp)
callq 0x8870
movq -0x7a980(%rbp), %rdx
leaq 0x56310(%rip), %rsi     # 0x7963d
leaq -0x7a760(%rbp), %rdi
callq 0xcb30
jmp 0x2333b
movq -0x7a978(%rbp), %rdi
leaq -0x7a760(%rbp), %rsi
callq 0x2ca10
jmp 0x23350
leaq -0x7a760(%rbp), %rdi
callq 0x82e0
leaq -0x7a761(%rbp), %rdi
callq 0x8540
movl $0x0, -0x7a768(%rbp)
movl -0x7a768(%rbp), %eax
cmpl -0x7a364(%rbp), %eax
jge 0x23603
movq -0x7a7e0(%rbp), %rdi
addq $0x88, %rdi
leaq -0x7a768(%rbp), %rsi
callq 0x2c580
movq %rax, -0x7a988(%rbp)
jmp 0x233a7
movq -0x7a988(%rbp), %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c6b0
movq %rax, -0x7a990(%rbp)
jmp 0x233c3
movl $0x98, %edi
callq 0x84c0
movq %rax, -0x7a998(%rbp)
jmp 0x233d6
movq -0x7a998(%rbp), %rdi
leaq -0x7a3c0(%rbp), %rsi
callq 0x2b2c0
jmp 0x233eb
movq -0x7a998(%rbp), %rax
movq %rax, -0x7a780(%rbp)
leaq -0x7a778(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
leaq -0x7a418(%rbp), %rdx
callq 0x2ca90
jmp 0x23415
movq -0x7a990(%rbp), %rdi
leaq -0x7a778(%rbp), %rsi
callq 0x2ca50
jmp 0x2342a
movq -0x7a7e0(%rbp), %rdi
addq $0xb8, %rdi
leaq -0x7a768(%rbp), %rsi
callq 0x2c580
movq %rax, -0x7a9a0(%rbp)
jmp 0x2344d
movq -0x7a9a0(%rbp), %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c6b0
movq %rax, -0x7a9a8(%rbp)
jmp 0x23469
movl $0x98, %edi
callq 0x84c0
movq %rax, -0x7a9b0(%rbp)
jmp 0x2347c
movb $0x1, -0x7a7ba(%rbp)
leaq -0x7a7b9(%rbp), %rdi
movq %rdi, -0x7a9b8(%rbp)
callq 0x8870
movq -0x7a9b8(%rbp), %rdx
leaq 0x56199(%rip), %rsi     # 0x7963d
leaq -0x7a7b8(%rbp), %rdi
callq 0xcb30
jmp 0x234b2
movq -0x7a9b0(%rbp), %rdi
leaq -0x7a7b8(%rbp), %rsi
callq 0x2b2c0
jmp 0x234c7
movq -0x7a9b0(%rbp), %rax
movb $0x0, -0x7a7ba(%rbp)
movq %rax, -0x7a798(%rbp)
leaq -0x7a790(%rbp), %rdi
leaq -0x7a798(%rbp), %rsi
leaq -0x7a418(%rbp), %rdx
callq 0x2ca90
jmp 0x234f8
movq -0x7a9a8(%rbp), %rdi
leaq -0x7a790(%rbp), %rsi
callq 0x2ca50
jmp 0x2350d
leaq -0x7a7b8(%rbp), %rdi
callq 0x82e0
leaq -0x7a7b9(%rbp), %rdi
callq 0x8540
movl -0x7a768(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7a768(%rbp)
jmp 0x23372
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x2356b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a760(%rbp), %rdi
callq 0x82e0
leaq -0x7a761(%rbp), %rdi
callq 0x8540
jmp 0x237eb
movq -0x7a998(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
movl $0x98, %esi
callq 0x84d0
jmp 0x237eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x235d6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a7b8(%rbp), %rdi
callq 0x82e0
leaq -0x7a7b9(%rbp), %rdi
callq 0x8540
testb $0x1, -0x7a7ba(%rbp)
jne 0x235ed
jmp 0x235fe
movq -0x7a9b0(%rbp), %rdi
movl $0x98, %esi
callq 0x84d0
jmp 0x237eb
jmp 0x23605
movq -0x7a7e0(%rbp), %rdi
addq $0xe8, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a9c0(%rbp)
jmp 0x23628
movq -0x7a9c0(%rbp), %rdi
leaq -0x7a610(%rbp), %rsi
callq 0x2cac0
jmp 0x2363d
movq -0x7a7e0(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a9c8(%rbp)
jmp 0x23660
movq -0x7a9c8(%rbp), %rdi
leaq -0x7a628(%rbp), %rsi
callq 0x2cac0
jmp 0x23675
movq -0x7a7e0(%rbp), %rdi
addq $0x148, %rdi            # imm = 0x148
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a9d0(%rbp)
jmp 0x23698
movq -0x7a9d0(%rbp), %rdi
leaq -0x7a658(%rbp), %rsi
callq 0x2cac0
jmp 0x236ad
movq -0x7a7e0(%rbp), %rdi
addq $0x178, %rdi            # imm = 0x178
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a9d8(%rbp)
jmp 0x236d0
movq -0x7a9d8(%rbp), %rdi
leaq -0x7a688(%rbp), %rsi
callq 0x2cac0
jmp 0x236e5
movq -0x7a7e0(%rbp), %rdi
addq $0x1d8, %rdi            # imm = 0x1D8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a9e0(%rbp)
jmp 0x23708
movq -0x7a9e0(%rbp), %rdi
leaq -0x7a670(%rbp), %rsi
callq 0x2cac0
jmp 0x2371d
movq -0x7a7e0(%rbp), %rdi
addq $0x1a8, %rdi            # imm = 0x1A8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a9e8(%rbp)
jmp 0x23740
movq -0x7a9e8(%rbp), %rdi
leaq -0x7a640(%rbp), %rsi
callq 0x2cac0
jmp 0x23755
cmpl $-0x1, -0x7a418(%rbp)
jle 0x237a1
movq -0x7a7e0(%rbp), %rdi
addq $0x208, %rdi            # imm = 0x208
leaq -0x7a418(%rbp), %rsi
callq 0x2cb00
movb %dl, -0x7a9f1(%rbp)
movq %rax, -0x7a9f0(%rbp)
jmp 0x23787
movb -0x7a9f1(%rbp), %al
movq -0x7a9f0(%rbp), %rcx
movq %rcx, -0x7a7d0(%rbp)
movb %al, -0x7a7c8(%rbp)
leaq -0x7a688(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a670(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a658(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a640(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a628(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a610(%rbp), %rdi
callq 0x2bfd0
jmp 0x23835
leaq -0x7a688(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a670(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a658(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a640(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a628(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a610(%rbp), %rdi
callq 0x2bfd0
jmp 0x238ae
jmp 0x2201b
movq -0x7a7e0(%rbp), %rdi
addq $0x28, %rdi
callq 0x2cb50
movq %rax, %rsi
leaq 0x53d22(%rip), %rdi     # 0x77576
xorl %eax, %eax
callq 0x8080
jmp 0x2385d
leaq -0x7a410(%rbp), %rdi
callq 0x82e0
leaq -0x7a3e8(%rbp), %rdi
callq 0x82e0
leaq -0x7a3c0(%rbp), %rdi
callq 0x82e0
leaq -0x7a398(%rbp), %rdi
callq 0x82e0
leaq -0x238(%rbp), %rdi
callq 0x82e0
leaq -0x218(%rbp), %rdi
callq 0x8140
addq $0x7aa00, %rsp          # imm = 0x7AA00
popq %rbp
retq
leaq -0x7a410(%rbp), %rdi
callq 0x82e0
leaq -0x7a3e8(%rbp), %rdi
callq 0x82e0
leaq -0x7a3c0(%rbp), %rdi
callq 0x82e0
leaq -0x7a398(%rbp), %rdi
callq 0x82e0
leaq -0x238(%rbp), %rdi
callq 0x82e0
leaq -0x218(%rbp), %rdi
callq 0x8140
movq -0x7a370(%rbp), %rdi
callq 0x8860
movq %rax, %rdi
callq 0xcd10
nopw (%rax,%rax)