// File: /workspace/github_cpp_makefile_star2_O3/richardposner[P]BioNetFit2/src/code/Swarm.cpp
// Function: Swarm::initFit()
void Swarm::initFit () {  //razi: modified version
	int i, nModels=options.models.size();
	if (resumingSavedSwarm) {
		//razi: TODO modify this part
		cout << "Resuming fitting run. May need some modifcation to support multiple files. Enter a number..." << endl; cin>>i;

		/*
		for (auto particle = particleIterationCounter_.begin(); particle != particleIterationCounter_.end(); ++particle) {
			swarmComm->univMessageSender.push_back(toString(currentGeneration - 1));

			cout<<"Init fit, modify this line ...\n";
			for (unsigned int mid = 0; mid < options.models.size(); ++mid)
				swarmComm->sendToSwarm(0, particle->first, SEND_NUMFLIGHTS_TO_PARTICLE, false, swarmComm->univMessageSender);
			swarmComm->univMessageSender.clear();

			for (auto param = particleCurrParamSets_.at(particle->first).begin(); param != particleCurrParamSets_.at(particle->first).end(); ++param) {
				//cout << "Sending " << *param << " to " << particle->first << endl;
				swarmComm->univMessageSender.push_back(toString(*param));
			}
			swarmComm->sendToSwarm(0, particle->first, SEND_FINAL_PARAMS_TO_PARTICLE, false, swarmComm->univMessageSender);
			swarmComm->univMessageSender.clear();
		}

		// We need to set current generation to the iteration counter because the saved swarm
		// currentGeneration may not be accurate due to it changed between runGeneration() and
		// breedGenerationGA()
		if (options.fitType == "ga") {
			currentGeneration = currentGeneration - 1;
		}

		*/
	}
	else {
		if (options.verbosity >= 3) {
			cout << "Initializing fitting run" << endl;
		}

		// If we are running ODE, we want to generate a network and network reader.
		// The network file has parameters that are replaced in every generation,
		// and the network reader is used to read those network files

		//razi, generate subparticles, set particle id to 1;
		unsigned int ParID = 1; unsigned int subParId;

		Particle p = Particle(this, 1); bool genNetworkFlag = false;
		vector<subParticle *> sp(nModels);
		for (int mid=0; mid <nModels; mid++){
			if (options.models.at(mid)->getHasGenerateNetwork() && bootstrapCounter == 0) {

				genNetworkFlag = true;
				if (options.verbosity >= 3) {
					cout << "Creating dummy .bngl, running to get a .net file" << endl;
				}

				// First create a particle which will generate the network
				// and fill it with dummy params
				p.setModel(options.models[mid], mid);

				subParId= fcalcsubParID(ParID, mid, nModels); //razi: calc subparticle id from model index
				sp[mid] = new subParticle(&p, mid, subParId); //razi: generate subparticles
				//sp[mid]->setModel(mid);

			}
		}
		if (genNetworkFlag){
			p.generateParams();

			// Output model file with dummy parameters. This file will be used to generate
			// our initial network
			//razi, was options.model->outputModelWithParams(p.getParams(), options.jobOutputDir, "base.bngl", "", false, false, false, false, false);
			for (unsigned int mid = 0; mid < options.models.size(); ++mid){
				options.models[mid]->outputModelWithParams(p.getParams(mid), options.jobOutputDir, p.swarm_->getModelName(mid, false)+"_base.bngl", "", false, false, false, false, false);

				// Construct our simulation command and run the network generator

				string modelPath;
				if (options.jobOutputDir.substr(options.jobOutputDir.size()-1,1)=="/")   //razi added to avoid "//" in windows
					modelPath = options.jobOutputDir + p.swarm_->getModelName(mid, false)+"_base.bngl";
				else
					modelPath = options.jobOutputDir + "/" + p.swarm_->getModelName(mid, false)+"_base.bngl";

				string command = options.bngCommand + " --outdir " + options.jobOutputDir + " " + modelPath + " > " + options.jobOutputDir + "netgen_output 2>&1";
				if(options.verbosity>=1){
					cout << "Generating initial .net file with command: " << command << endl;
				}
				if (options.useCluster) {
					if(options.clusterSoftware == "slurm"){
						command = generateSlurmCommand(command, false, 1);
					}

				}

				int ret; ret= runCommand(command);
				if (ret != 0){
#ifdef PC_VER  //This is only for debugging in windows, the return value is 0 due to some error in BNG2.pl, later to be checked
					cout<<"Warning: Net file may not be generated properly: " <<command<<endl;
#else
					outputError("Error(32): Couldn't generate initial .net file with command: " + command + ". Quitting.");
#endif
				}else{
						// Now that we have a .net file, replace the full .bngl with a .bngl
					// containing ONLY action commands and a .net file loader. This is
					// used later to run our .net files.
					options.models[mid]->outputModelWithParams(p.getParams(mid), options.jobOutputDir, p.swarm_->getModelName(mid, false)+"_base.bngl", "", false, true, false, false, false);

					// Now store our .net file for later use
					//razi, was string netPath = options.jobOutputDir + "/base.net";
					string netPath = options.jobOutputDir + "/"  + p.swarm_->getModelName(mid, false)+"_base.net";
					//netPath=removeLastSlash(netPath);  //razi added for windows, already taken care of
					options.models[mid]->parseNet(netPath);
				}
			}
		}


/*
#if(defined(PC_VER))  //This is only for debugging in windows, the return value is 0 due to some error in BNG2.pl, later to be checked
		// random simulation is requested, just copy the exp file plus some noise into gdat files
		if (options.bngCommand.find("random")!=std::string::npos){
			ret=0;

		}
#endif
*/


		vector<double> params;
		int subPar = 0; //Raquel added to support subparticles
		for (unsigned int param = 0; param < getNumFreeParams(); ++param) {  //Razi: All free params tat appear in some models
			params.push_back(0);
		}

		for (int particle = 1; particle <= options.swarmSize; ++particle) {
			particleCurrParamSets_.insert(pair<int, vector<double> >(particle, params));

			//razi: init for each subparticle
			map<unsigned int, vector<double> > zmap;
			for (unsigned int mid = 0; mid < options.models.size(); ++mid){
				vector<double> zvec(options.models[mid]->getNumFreeParams());	//razi: dummy vector t contain free parameter values
				zmap.insert(make_pair(mid, zvec));
			}
			subparticleCurrParamSets_.insert(make_pair(particle, zmap));

		}


		if (options.fitType == "pso") {
			for (int particle = 1; particle <= options.swarmSize; ++particle) {
				particleParamVelocities_[particle] = params;
				particleBestParamSets_[particle] = params;
				particleWeights_[particle] = 0;
				for (int mid=0; mid<nModels; mid++)
					particleIterationCounter_[particle][mid] = 0;
			}
		}
		if (options.fitType == "pso" || "de") {
			int subPar = 0;

			for (int particle = 1; particle <= options.swarmSize; ++particle) {
				particleBestFits_[particle] = 0;

				//Raquel: added support for subparticles
				for(int mid = 0; (unsigned) mid < options.models.size(); mid++){
					subPar = fcalcsubParID(particle, mid, options.models.size());
					subparticleBestFits_[subPar] = 0;
				}//Raquel: added support for subparticles

			}
		}
		if(options.fitType == "de") {
			for (unsigned int island = 0; island <= options.numIslands; ++island) {
				islandToParticle_.push_back(vector<unsigned int>(options.swarmSize / options.numIslands,0));
			}
			for (int particle = 1; particle <= options.swarmSize; ++particle) {
				particleToIsland_.push_back(0);
				particleBestFitsByFit_.insert(pair<double, unsigned int>(0, particle));

				//Raquel added this loop to support subparticles
				for(unsigned int mid = 0; mid < options.models.size(); mid++){
					subPar = fcalcsubParID(particle, mid, options.models.size());
					subparticleBestFitsByFit_.insert(pair<double, unsigned int>(0, subPar));

				}//Raquel added this loop to support subparticles

			}
		}
		if (options.fitType == "sa") {
			for (int particle = 1; particle <= options.swarmSize; ++particle) {
				particleBestFitsByFit_.insert(pair<double, unsigned int>(0, particle));

				//Raquel added this loop to support subparticles
				for(unsigned int mid = 0; mid < options.models.size(); mid++){
					subPar = fcalcsubParID(particle, mid, options.models.size());
					subparticleBestFitsByFit_.insert(pair<double, unsigned int>(0, subPar));
					currentsubparticleBestFitsByFit_.insert(pair<double, unsigned int>(0, subPar));

				}//Raquel added this loop to support subparticles


			}


		}



	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3d8, %rsp            # imm = 0x3D8
cmpb $0x1, 0x13f0(%rdi)
jne 0x7a133
movq 0xfbec9(%rip), %rbx     # 0x175fa8
leaq 0x846d0(%rip), %rsi     # 0xfe7b6
movl $0x5c, %edx
movq %rbx, %rdi
callq 0x22ab0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %rbx, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
movq 0xfbeb7(%rip), %rdi     # 0x175fd8
leaq 0x274(%rsp), %rsi
callq 0x225b0
jmp 0x7b91f
movq %rdi, %r14
movq 0x15c8(%rdi), %r15
subq 0x15c0(%rdi), %r15
shrq $0x3, %r15
cmpl $0x3, 0x1614(%rdi)
jb 0x7a193
movq 0xfbe50(%rip), %rbx     # 0x175fa8
leaq 0x846b4(%rip), %rsi     # 0xfe813
movl $0x18, %edx
movq %rbx, %rdi
callq 0x22ab0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %rbx, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
leaq 0x2b8(%rsp), %rdi
movq %r14, %rsi
movl $0x1, %edx
callq 0x53ad8
movslq %r15d, %rsi
leaq 0x258(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0xa7534
movq %r15, 0xa0(%rsp)
testl %r15d, %r15d
movq %r14, 0x20(%rsp)
jle 0x7b1f0
movq 0xa0(%rsp), %rbx
andl $0x7fffffff, %ebx       # imm = 0x7FFFFFFF
negq %rbx
xorl %r13d, %r13d
xorl %eax, %eax
movq 0x15c8(%r14), %rdx
movq 0x15c0(%r14), %rcx
subq %rcx, %rdx
sarq $0x3, %rdx
movl 0x13ec(%r14), %edi
incq %r13
leaq -0x1(%r13), %rbp
cmpq %rbp, %rdx
jbe 0x7b931
movq -0x8(%rcx,%r13,8), %rsi
cmpb $0x1, 0xb8(%rsi)
jne 0x7a227
testl %edi, %edi
je 0x7a23c
leaq (%rbx,%r13), %rsi
incq %rsi
incq %r13
cmpq $0x1, %rsi
jne 0x7a208
jmp 0x7a301
cmpl $0x3, 0x1614(%r14)
jb 0x7a29c
movl $0x30, %edx
movq 0xfbd56(%rip), %rdi     # 0x175fa8
leaq 0x845d3(%rip), %rsi     # 0xfe82c
callq 0x22ab0
movq 0xfbd43(%rip), %rcx     # 0x175fa8
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq 0xfbd25(%rip), %rdi     # 0x175fa8
callq 0x22050
movq %rax, %rdi
callq 0x22660
movq 0x15c0(%r14), %rax
movq -0x8(%rax,%r13,8), %rsi
leaq 0x2b8(%rsp), %rdi
movl %ebp, %edx
callq 0x650ea
movl $0x1, %edi
movl %ebp, %esi
movq 0xa0(%rsp), %rdx
callq 0xbe989
movl %eax, %r15d
movl $0x20, %edi
callq 0x22980
movq %rax, %r12
movq %rax, %rdi
leaq 0x2b8(%rsp), %rsi
movl %ebp, %edx
movl %r15d, %ecx
callq 0x652c8
movq 0x258(%rsp), %rax
movq %r12, -0x8(%rax,%r13,8)
movb $0x1, %al
movq %rbx, %rcx
addq %r13, %rcx
jne 0x7a1e9
jmp 0x7a309
testb $0x1, %al
je 0x7b1f0
leaq 0x2b8(%rsp), %rdi
callq 0x54080
movq 0x15c0(%r14), %rax
cmpq %rax, 0x15c8(%r14)
je 0x7b1f0
leaq 0x1520(%r14), %rcx
movq %rcx, 0xe0(%rsp)
leaq 0x248(%rsp), %rbx
leaq 0x1730(%r14), %rcx
movq %rcx, 0x110(%rsp)
xorl %edx, %edx
xorl %r15d, %r15d
movq (%rax,%rdx,8), %r12
movq %rdx, 0xd8(%rsp)
leaq (%rdx,%rdx,2), %rbp
shlq $0x4, %rbp
movq 0x2b8(%rsp), %rsi
addq %rbp, %rsi
leaq 0x3a8(%rsp), %rdi
callq 0x51772
leaq 0x1c8(%rsp), %rax
movq %rax, 0x1b8(%rsp)
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
addq %rsi, %rdx
leaq 0x1b8(%rsp), %rdi
callq 0x3213c
movq 0x360(%rsp), %rsi
leaq 0x68(%rsp), %r13
movq %r13, %rdi
movl %r15d, %edx
xorl %ecx, %ecx
callq 0x79f68
movq %r13, %rdi
leaq 0x8448a(%rip), %rsi     # 0xfe85d
callq 0x233b0
leaq 0x188(%rsp), %rsi
movq %rsi, 0x178(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7a40c
movq %rdx, 0x178(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x188(%rsp)
jmp 0x7a412
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x180(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %rbx, 0x238(%rsp)
leaq 0x238(%rsp), %r13
movq %r13, %rdi
leaq 0x7c82a(%rip), %rdx     # 0xf6c71
movq %rdx, %rsi
callq 0x321d2
movq %r12, %rdi
leaq 0x3a8(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
leaq 0x178(%rsp), %rcx
movq %r13, %r8
xorl %r9d, %r9d
xorl %eax, %eax
pushq %rax
pushq %rax
pushq %rax
pushq %rax
callq 0x4ebec
addq $0x20, %rsp
movq 0x238(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7a49c
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x178(%rsp), %rdi
leaq 0x188(%rsp), %rax
cmpq %rax, %rdi
je 0x7a4c1
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x7a4dd
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x1b8(%rsp), %rdi
leaq 0x1c8(%rsp), %rax
cmpq %rax, %rdi
je 0x7a502
movq 0x1c8(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x3a8(%rsp), %rdi
callq 0x4a472
leaq 0x78(%rsp), %rax
movq %rax, 0x68(%rsp)
movq $0x0, 0x70(%rsp)
movb $0x0, 0x78(%rsp)
movq 0x1528(%r14), %rdx
decq %rdx
movl $0x1, %ecx
leaq 0xa8(%rsp), %rbx
movq %rbx, %rdi
movq 0xe0(%rsp), %rsi
callq 0x22a00
movq %rbx, %rdi
leaq 0x852ff(%rip), %rsi     # 0xff857
callq 0x22250
movl %eax, %ebx
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x7a584
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x229c0
testl %ebx, %ebx
je 0x7a630
leaq 0x38(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
addq %rsi, %rdx
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
callq 0x3213c
movq %rbx, %rdi
leaq 0x85299(%rip), %rsi     # 0xff857
callq 0x233b0
movq 0x360(%rsp), %rsi
leaq 0x48(%rsp), %rdi
movl %r15d, %edx
xorl %ecx, %ecx
callq 0x79f68
movq 0x28(%rsp), %rcx
movl $0xf, %edi
leaq 0x38(%rsp), %rax
cmpq %rax, %rcx
je 0x7a5f3
movq 0x38(%rsp), %rdi
movq 0x30(%rsp), %r8
movq 0x48(%rsp), %rsi
movq 0x50(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
jbe 0x7a624
movl $0xf, %edi
leaq 0x58(%rsp), %r9
cmpq %r9, %rsi
je 0x7a61f
movq 0x58(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x7a691
leaq 0x28(%rsp), %rdi
callq 0x222b0
jmp 0x7a69f
movq 0x360(%rsp), %rsi
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
movl %r15d, %edx
xorl %ecx, %ecx
callq 0x79f68
movq 0x1520(%r14), %rcx
movq 0x1528(%r14), %r8
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x10(%rsp), %rsi
movq %rsi, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7a7b0
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x7a7b6
leaq 0x48(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x10(%rsp), %rsi
movq %rsi, (%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x7a6c2
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x7a6c8
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq %rsp, %rdi
leaq 0x8416e(%rip), %rsi     # 0xfe85d
callq 0x233b0
leaq 0xb8(%rsp), %rbx
movq %rbx, 0xa8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x68(%rsp), %rdi
je 0x7a72d
movq %rdx, 0xa8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xb8(%rsp)
jmp 0x7a733
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0xb0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xa8(%rsp), %rsi
callq 0x22bb0
movq 0xa8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7a778
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7a793
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7a87c
movq 0x58(%rsp), %rsi
jmp 0x7a874
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %rsp, %rdi
leaq 0x84085(%rip), %rsi     # 0xfe85d
callq 0x233b0
leaq 0xb8(%rsp), %rbx
movq %rbx, 0xa8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x68(%rsp), %rdi
je 0x7a816
movq %rdx, 0xa8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xb8(%rsp)
jmp 0x7a81c
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0xb0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xa8(%rsp), %rsi
callq 0x22bb0
movq 0xa8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7a861
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7a87c
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7a898
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x148(%rsp), %rax
movq %rax, 0x138(%rsp)
movq 0x1540(%r14), %rsi
movq 0x1548(%r14), %rdx
addq %rsi, %rdx
leaq 0x138(%rsp), %rbx
movq %rbx, %rdi
callq 0x3213c
movq %rbx, %rdi
leaq 0x7e2ed(%rip), %rsi     # 0xf8bc0
callq 0x233b0
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
movq %rbx, %rdi
callq 0x222b0
leaq 0x168(%rsp), %rsi
movq %rsi, 0x158(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x218(%rsp), %rbx
je 0x7a92a
movq %rdx, 0x158(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x168(%rsp)
jmp 0x7a930
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x160(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x158(%rsp), %rdi
leaq 0x86aca(%rip), %rsi     # 0x101424
callq 0x233b0
leaq 0xf8(%rsp), %rsi
movq %rsi, 0xe8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7a993
movq %rdx, 0xe8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xf8(%rsp)
jmp 0x7a999
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0xf0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x68(%rsp), %rsi
movq 0x70(%rsp), %rdx
leaq 0xe8(%rsp), %rdi
callq 0x222b0
leaq 0x58(%rsp), %rsi
movq %rsi, 0x48(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7a9f3
movq %rdx, 0x48(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x58(%rsp)
jmp 0x7a9f9
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x50(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x48(%rsp), %rdi
leaq 0x83e4b(%rip), %rsi     # 0xfe868
callq 0x233b0
leaq 0x38(%rsp), %rsi
movq %rsi, 0x28(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7aa4a
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x7aa50
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x30(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
leaq 0x28(%rsp), %rdi
callq 0x222b0
leaq 0x10(%rsp), %rsi
movq %rsi, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7aaa6
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x7aaac
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %rsp, %rdi
leaq 0x83d9e(%rip), %rsi     # 0xfe86c
callq 0x233b0
leaq 0xb8(%rsp), %rsi
movq %rsi, 0xa8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7ab07
movq %rdx, 0xa8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xb8(%rsp)
jmp 0x7ab0d
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0xb0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7ab43
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7ab5f
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7ab7b
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xe8(%rsp), %rdi
leaq 0xf8(%rsp), %rax
cmpq %rax, %rdi
je 0x7aba0
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x158(%rsp), %rdi
leaq 0x168(%rsp), %rax
cmpq %rax, %rdi
je 0x7abc5
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x138(%rsp), %rdi
leaq 0x148(%rsp), %rax
cmpq %rax, %rdi
je 0x7abea
movq 0x148(%rsp), %rsi
incq %rsi
callq 0x229c0
cmpl $0x0, 0x1614(%r14)
je 0x7ac52
movl $0x2b, %edx
movq 0xfb3a8(%rip), %rdi     # 0x175fa8
leaq 0x83c78(%rip), %rsi     # 0xfe87f
callq 0x22ab0
movq 0xa8(%rsp), %rsi
movq 0xb0(%rsp), %rdx
movq 0xfb385(%rip), %rdi     # 0x175fa8
callq 0x22ab0
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %r12, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
cmpb $0x1, 0x1631(%r14)
jne 0x7ad10
movq 0x110(%rsp), %rdi
leaq 0x77730(%rip), %rsi     # 0xf239f
callq 0x22250
testl %eax, %eax
jne 0x7ad10
leaq 0x228(%rsp), %rax
movq %rax, 0x218(%rsp)
movq 0xa8(%rsp), %rsi
movq 0xb0(%rsp), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0x3213c
movq %rbx, %rdx
movq %rsp, %rbx
movq %rbx, %rdi
movq %r14, %rsi
xorl %ecx, %ecx
movl $0x1, %r8d
callq 0x7bf86
leaq 0xa8(%rsp), %rdi
movq %rbx, %rsi
callq 0x22bb0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7aceb
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x218(%rsp), %rdi
leaq 0x228(%rsp), %rax
cmpq %rax, %rdi
je 0x7ad10
movq 0x228(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x208(%rsp), %rax
movq %rax, 0x1f8(%rsp)
movq 0xa8(%rsp), %rsi
movq 0xb0(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1f8(%rsp), %rbx
movq %rbx, %rdi
callq 0x3213c
movq %rbx, %rdi
callq 0xbfa1f
movl %eax, %r12d
movq 0x1f8(%rsp), %rdi
leaq 0x208(%rsp), %rax
cmpq %rax, %rdi
je 0x7ad73
movq 0x208(%rsp), %rsi
incq %rsi
callq 0x229c0
testl %r12d, %r12d
jne 0x7b942
movq 0x15c0(%r14), %rax
movq 0xd8(%rsp), %rcx
movq (%rax,%rcx,8), %r12
addq 0x2b8(%rsp), %rbp
leaq 0x378(%rsp), %rdi
movq %rbp, %rsi
callq 0x51772
leaq 0x1a8(%rsp), %rax
movq %rax, 0x198(%rsp)
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
addq %rsi, %rdx
leaq 0x198(%rsp), %rdi
callq 0x3213c
movq 0x360(%rsp), %rsi
movq %rsp, %rbx
movq %rbx, %rdi
movl %r15d, %edx
xorl %ecx, %ecx
callq 0x79f68
movq %rbx, %rdi
leaq 0x83a66(%rip), %rsi     # 0xfe85d
callq 0x233b0
leaq 0x128(%rsp), %rsi
movq %rsi, 0x118(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7ae30
movq %rdx, 0x118(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x128(%rsp)
jmp 0x7ae36
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x120(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1e8(%rsp), %rax
movq %rax, 0x1d8(%rsp)
leaq 0x1d8(%rsp), %rbx
movq %rbx, %rdi
leaq 0x7bdfe(%rip), %rdx     # 0xf6c71
movq %rdx, %rsi
callq 0x321d2
movq %r12, %rdi
leaq 0x378(%rsp), %rsi
leaq 0x198(%rsp), %rdx
leaq 0x118(%rsp), %rcx
movq %rbx, %r8
xorl %r9d, %r9d
xorl %eax, %eax
pushq %rax
pushq %rax
pushq %rax
pushq $0x1
callq 0x4ebec
addq $0x20, %rsp
movq 0x1d8(%rsp), %rdi
leaq 0x1e8(%rsp), %rax
cmpq %rax, %rdi
je 0x7aed1
movq 0x1e8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x7aef6
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7af11
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x198(%rsp), %rdi
leaq 0x1a8(%rsp), %rax
cmpq %rax, %rdi
je 0x7af36
movq 0x1a8(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x378(%rsp), %rdi
callq 0x4a472
leaq 0x58(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
addq %rsi, %rdx
leaq 0x48(%rsp), %rbx
movq %rbx, %rdi
callq 0x3213c
movq %rbx, %rdi
leaq 0x848e2(%rip), %rsi     # 0xff857
callq 0x233b0
movq 0x360(%rsp), %rsi
leaq 0xe8(%rsp), %rdi
movl %r15d, %edx
xorl %ecx, %ecx
callq 0x79f68
movq 0x48(%rsp), %rcx
movl $0xf, %edi
leaq 0x58(%rsp), %rax
cmpq %rax, %rcx
je 0x7afad
movq 0x58(%rsp), %rdi
movq 0x50(%rsp), %r8
movq 0xe8(%rsp), %rsi
movq 0xf0(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
jbe 0x7afea
movl $0xf, %edi
leaq 0xf8(%rsp), %r9
cmpq %r9, %rsi
je 0x7afe5
movq 0xf8(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x7aff6
leaq 0x48(%rsp), %rdi
callq 0x222b0
jmp 0x7b007
leaq 0xe8(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x38(%rsp), %rsi
movq %rsi, 0x28(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x7b02c
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x7b032
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x30(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x28(%rsp), %rdi
leaq 0x7d9c5(%rip), %rsi     # 0xf8a20
callq 0x233b0
leaq 0x10(%rsp), %rsi
movq %rsi, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7b086
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x7b08c
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7b0c0
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xe8(%rsp), %rdi
leaq 0xf8(%rsp), %rax
cmpq %rax, %rdi
je 0x7b0e5
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7b101
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x15c0(%r14), %rax
movq 0xd8(%rsp), %rcx
movq (%rax,%rcx,8), %r12
leaq 0x288(%rsp), %r13
movq %r13, 0x278(%rsp)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
addq %rsi, %rdx
leaq 0x278(%rsp), %rbx
movq %rbx, %rdi
callq 0x3213c
movq %r12, %rdi
movq %rbx, %rsi
leaq 0x10(%rsp), %rbx
callq 0x4e91a
movq 0x278(%rsp), %rdi
cmpq %r13, %rdi
je 0x7b16d
movq 0x288(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
cmpq %rbx, %rdi
je 0x7b183
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
leaq 0x248(%rsp), %rbx
je 0x7b1b0
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x7b1cc
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x229c0
incl %r15d
movq 0x15c0(%r14), %rax
movq 0x15c8(%r14), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movq %r15, %rdx
cmpq %r15, %rcx
ja 0x7a355
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
movl 0x15b8(%r14), %eax
testq %rax, %rax
je 0x7b255
xorl %ebx, %ebx
movq %rsp, %r15
leaq 0x68(%rsp), %r12
movq $0x0, 0x68(%rsp)
movq 0x8(%rsp), %rsi
cmpq 0x10(%rsp), %rsi
je 0x7b23d
movq $0x0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rsp)
jmp 0x7b24f
movq %r15, %rdi
movq %r12, %rdx
callq 0x67e5a
movq 0x15b8(%r14), %rax
incl %ebx
cmpl %eax, %ebx
jb 0x7b216
cmpl $0x0, 0x1620(%r14)
jle 0x7b3ee
leaq 0x1400(%r14), %rax
movq %rax, 0xd8(%rsp)
leaq 0x70(%rsp), %rbp
leaq 0x1460(%r14), %rax
movq %rax, 0xe0(%rsp)
movl $0x1, %ebx
leaq 0x68(%rsp), %r15
leaq 0xa8(%rsp), %r13
leaq 0x28(%rsp), %r12
movl %ebx, 0x68(%rsp)
leaq 0x70(%rsp), %rdi
movq %rsp, %rsi
callq 0x65d5c
movq 0xd8(%rsp), %rdi
movq %r15, %rsi
callq 0xae540
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x7b2d8
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movl $0x0, 0xb0(%rsp)
xorl %ecx, %ecx
movq %rcx, 0xb8(%rsp)
leaq 0xb0(%rsp), %rax
movq %rax, 0xc0(%rsp)
movq %rax, 0xc8(%rsp)
movq %rcx, 0xd0(%rsp)
movq 0x15c0(%r14), %rax
cmpq %rax, 0x15c8(%r14)
je 0x7b3a4
xorl %r14d, %r14d
movq (%rax,%r14,8), %rax
movl 0x58(%rax), %esi
movq %r12, %rdi
movq %r15, %rdx
callq 0xa75c2
movl %r14d, 0x68(%rsp)
movq %rbp, %rdi
movq %r12, %rsi
callq 0x65d5c
movq %r13, %rdi
movq %r15, %rsi
callq 0xae5f2
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x7b36b
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x7b382
movq 0x38(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
incl %r14d
movq 0x20(%rsp), %rcx
movq 0x15c0(%rcx), %rax
movq 0x15c8(%rcx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r14, %rcx
ja 0x7b324
movl %ebx, 0x68(%rsp)
leaq 0x70(%rsp), %rdi
movq %r13, %rsi
callq 0xac7c2
movq 0xe0(%rsp), %rdi
movq %r15, %rsi
callq 0xae6a4
movq 0x20(%rsp), %r14
leaq 0x70(%rsp), %rdi
callq 0x7260c
movq %r13, %rdi
callq 0x7260c
leal 0x1(%rbx), %eax
cmpl 0x1620(%r14), %ebx
movl %eax, %ebx
jl 0x7b29d
leaq 0x14e0(%r14), %rdi
leaq 0x83b76(%rip), %rsi     # 0xfef72
movq %rdi, 0x108(%rsp)
callq 0x22250
testl %eax, %eax
jne 0x7b51a
cmpl $0x0, 0x1620(%r14)
jle 0x7b51a
leaq 0x1c90(%r14), %rax
movq %rax, 0xd8(%rsp)
leaq 0x1cc0(%r14), %rax
movq %rax, 0xe0(%rsp)
leaq 0x1cf0(%r14), %rax
movq %rax, 0x110(%rsp)
leaq 0x1950(%r14), %r15
movl $0x1, %ebx
leaq 0x68(%rsp), %r12
movq %rsp, %r13
leaq 0xa8(%rsp), %rbp
movl %ebx, 0x68(%rsp)
movq 0xd8(%rsp), %rdi
movq %r12, %rsi
callq 0x6ec8a
movq %rax, %rdi
movq %r13, %rsi
callq 0xa7650
movl %ebx, 0x68(%rsp)
movq 0xe0(%rsp), %rdi
movq %r12, %rsi
callq 0x6ec8a
movq %rax, %rdi
movq %r13, %rsi
callq 0xa7650
movl %ebx, 0x68(%rsp)
movq 0x110(%rsp), %rdi
movq %r12, %rsi
callq 0xa7734
movq $0x0, (%rax)
cmpl $0x0, 0xa0(%rsp)
jle 0x7b503
xorl %r14d, %r14d
movl %ebx, 0x68(%rsp)
movq %r15, %rdi
movq %r12, %rsi
callq 0xa779a
movl %r14d, 0xa8(%rsp)
movq %rax, %rdi
movq %rbp, %rsi
callq 0xa7800
movl $0x0, (%rax)
incl %r14d
cmpl %r14d, 0xa0(%rsp)
jne 0x7b4ce
leal 0x1(%rbx), %eax
movq 0x20(%rsp), %r14
cmpl 0x1620(%r14), %ebx
movl %eax, %ebx
jl 0x7b468
leaq 0x83a51(%rip), %rsi     # 0xfef72
movq 0x108(%rsp), %rdi
callq 0x22250
cmpl $0x0, 0x1620(%r14)
jle 0x7b5e4
movq 0x20(%rsp), %rax
leaq 0x1a20(%rax), %r14
leaq 0x1a50(%rax), %r15
movl $0x1, %r13d
leaq 0x68(%rsp), %r12
movl %r13d, 0x68(%rsp)
movq %r14, %rdi
movq %r12, %rsi
callq 0xa7734
movq $0x0, (%rax)
movq 0x20(%rsp), %rax
movq 0x15c8(%rax), %rdx
subq 0x15c0(%rax), %rdx
je 0x7b5cb
sarq $0x3, %rdx
xorl %ebp, %ebp
movl %r13d, %edi
movl %ebp, %esi
callq 0xbe989
movl %eax, 0x68(%rsp)
movq %r15, %rdi
movq %r12, %rsi
callq 0xa7734
movq $0x0, (%rax)
incq %rbp
movq 0x20(%rsp), %rax
movq 0x15c8(%rax), %rdx
subq 0x15c0(%rax), %rdx
sarq $0x3, %rdx
cmpq %rbp, %rdx
ja 0x7b58c
leal 0x1(%r13), %eax
movq 0x20(%rsp), %rcx
cmpl 0x1620(%rcx), %r13d
movl %eax, %r13d
jl 0x7b55a
leaq 0xb2910(%rip), %rsi     # 0x12defb
movq 0x108(%rsp), %rdi
callq 0x22250
testl %eax, %eax
movq 0x20(%rsp), %rbx
jne 0x7b77a
movl 0x16fc(%rbx), %ecx
movq %rbx, %rax
leaq 0x1d38(%rbx), %r14
xorl %ebx, %ebx
leaq 0x68(%rsp), %r15
leaq 0xa8(%rsp), %r12
leaq 0x28(%rsp), %r13
movl 0x1620(%rax), %eax
xorl %edx, %edx
divl %ecx
movl $0x0, 0xa8(%rsp)
movq %r15, %rdi
movq %rax, %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0xa7866
movq %r14, %rdi
movq %r15, %rsi
callq 0xaecf8
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x7b671
movq 0x78(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
incl %ebx
movq 0x20(%rsp), %rax
movl 0x16fc(%rax), %ecx
cmpl %ecx, %ebx
jbe 0x7b629
cmpl $0x0, 0x1620(%rax)
movq %rax, %rbx
jle 0x7b77a
leaq 0x1d20(%rbx), %rax
movq %rax, 0xa0(%rsp)
leaq 0x1ab0(%rbx), %r15
leaq 0x1b10(%rbx), %r12
movl $0x1, %ebp
leaq 0x68(%rsp), %r13
movl $0x0, 0x68(%rsp)
movq 0x1d28(%rbx), %rsi
cmpq 0x1d30(%rbx), %rsi
je 0x7b6e4
movl $0x0, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x1d28(%rbx)
jmp 0x7b6f4
movq 0xa0(%rsp), %rdi
movq %r13, %rdx
callq 0xaeef8
movq $0x0, 0x68(%rsp)
movl %ebp, 0x70(%rsp)
movq %r15, %rdi
movq %r13, %rsi
callq 0xaefd4
movq 0x15c8(%rbx), %rdx
subq 0x15c0(%rbx), %rdx
je 0x7b764
sarq $0x3, %rdx
xorl %r14d, %r14d
movl %ebp, %edi
movl %r14d, %esi
callq 0xbe989
movq $0x0, 0x68(%rsp)
movl %eax, 0x70(%rsp)
movq %r12, %rdi
movq %r13, %rsi
callq 0xaefd4
incl %r14d
movq 0x20(%rsp), %rax
movq 0x15c8(%rax), %rdx
subq 0x15c0(%rax), %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
ja 0x7b723
leal 0x1(%rbp), %eax
movq 0x20(%rsp), %rbx
cmpl 0x1620(%rbx), %ebp
movl %eax, %ebp
jl 0x7b6b9
leaq 0x7680b(%rip), %rsi     # 0xf1f8c
movq 0x108(%rsp), %rdi
callq 0x22250
testl %eax, %eax
jne 0x7b86f
cmpl $0x0, 0x1620(%rbx)
jle 0x7b86f
leaq 0x1ab0(%rbx), %rax
movq %rax, 0xa0(%rsp)
leaq 0x1b10(%rbx), %r15
leaq 0x1b70(%rbx), %r12
movl $0x1, %ebp
leaq 0x68(%rsp), %r13
movq $0x0, 0x68(%rsp)
movl %ebp, 0x70(%rsp)
movq 0xa0(%rsp), %rdi
movq %r13, %rsi
callq 0xaefd4
movq 0x15c8(%rbx), %rdx
subq 0x15c0(%rbx), %rdx
je 0x7b859
sarq $0x3, %rdx
xorl %r14d, %r14d
movl %ebp, %edi
movl %r14d, %esi
callq 0xbe989
movl %eax, %ebx
movq $0x0, 0x68(%rsp)
movl %eax, 0x70(%rsp)
movq %r15, %rdi
movq %r13, %rsi
callq 0xaefd4
movq $0x0, 0x68(%rsp)
movl %ebx, 0x70(%rsp)
movq %r12, %rdi
movq %r13, %rsi
callq 0xaefd4
incl %r14d
movq 0x20(%rsp), %rax
movq 0x15c8(%rax), %rdx
subq 0x15c0(%rax), %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
ja 0x7b7fe
leal 0x1(%rbp), %eax
movq 0x20(%rsp), %rbx
cmpl 0x1620(%rbx), %ebp
movl %eax, %ebp
jl 0x7b7ca
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x7b885
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x258(%rsp), %rdi
testq %rdi, %rdi
je 0x7b8a2
movq 0x268(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
leaq 0x348(%rsp), %rbx
movq %rbx, %rdi
callq 0x65c0a
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x7b8cb
movq 0x340(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x318(%rsp), %rdi
testq %rdi, %rdi
je 0x7b8e8
movq 0x328(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x300(%rsp), %rdi
testq %rdi, %rdi
je 0x7b905
movq 0x310(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
leaq 0x2d0(%rsp), %rdi
callq 0x65c52
leaq 0x2b8(%rsp), %rdi
callq 0x65c9a
addq $0x3d8, %rsp            # imm = 0x3D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x77d41(%rip), %rdi     # 0xf3679
movq %rbp, %rsi
xorl %eax, %eax
callq 0x22f40
leaq 0x82f62(%rip), %rsi     # 0xfe8ab
movq %rsp, %rdi
leaq 0xa8(%rsp), %rdx
callq 0x31944
leaq 0x86059(%rip), %rsi     # 0x1019b9
movq %rsp, %rdi
callq 0x233b0
leaq 0x2a8(%rsp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x7b98c
movups (%rcx), %xmm0
movups %xmm0, (%r14)
jmp 0x7b99f
movq %rdx, 0x298(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x2a8(%rsp)
movq 0x8(%rax), %rdx
leaq 0x298(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
callq 0x784c2
jmp 0x7be8c
movq %rax, %rbx
movl $0x20, %esi
movq %r12, %rdi
jmp 0x7bf4e
movq %rax, %rbx
jmp 0x7bf70
movq %rax, %rbx
movq 0x218(%rsp), %rdi
leaq 0x228(%rsp), %rax
cmpq %rax, %rdi
je 0x7be97
movq 0x228(%rsp), %rsi
jmp 0x7bcc2
jmp 0x7be94
movq %rax, %rbx
movq 0x298(%rsp), %rdi
cmpq %r14, %rdi
je 0x7bcab
movq 0x2a8(%rsp), %rsi
jmp 0x7bca3
jmp 0x7bc86
jmp 0x7be0a
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7bab2
movq 0x10(%rsp), %rsi
jmp 0x7baa0
jmp 0x7baaf
jmp 0x7beed
jmp 0x7be8c
jmp 0x7be94
jmp 0x7baaf
movq %rax, %rbx
jmp 0x7ba8c
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7ba8c
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7bab2
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x7bab2
jmp 0x7be0a
movq %rax, %rbx
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7bebc
movq 0x38(%rsp), %rsi
jmp 0x7beb4
movq %rax, %rbx
jmp 0x7bb13
movq %rax, %rbx
jmp 0x7baf7
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7baf7
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7bb13
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7bce3
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x7bce3
movq %rax, %rbx
movq 0x1f8(%rsp), %rdi
leaq 0x208(%rsp), %rax
cmpq %rax, %rdi
je 0x7be97
movq 0x208(%rsp), %rsi
jmp 0x7bcc2
movq %rax, %rbx
jmp 0x7bc05
movq %rax, %rbx
jmp 0x7bbe0
movq %rax, %rbx
jmp 0x7bbc5
movq %rax, %rbx
jmp 0x7bba0
movq %rax, %rbx
movq 0x1d8(%rsp), %rdi
leaq 0x1e8(%rsp), %rax
cmpq %rax, %rdi
je 0x7bba0
movq 0x1e8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x7bbc5
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7bbe0
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x198(%rsp), %rdi
leaq 0x1a8(%rsp), %rax
cmpq %rax, %rdi
je 0x7bc05
movq 0x1a8(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x378(%rsp), %rdi
callq 0x4a472
jmp 0x7be97
jmp 0x7be94
jmp 0x7bc1e
movq %rax, %rbx
jmp 0x7bc6c
movq %rax, %rbx
jmp 0x7bc47
movq %rax, %rbx
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7bc47
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xe8(%rsp), %rdi
leaq 0xf8(%rsp), %rax
cmpq %rax, %rdi
je 0x7bc6c
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7be97
movq 0x58(%rsp), %rsi
jmp 0x7bcc2
movq %rax, %rbx
jmp 0x7bcab
movq %rax, %rbx
movq 0x278(%rsp), %rdi
cmpq %r13, %rdi
je 0x7bcab
movq 0x288(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7be97
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x7be97
jmp 0x7be0a
jmp 0x7bcd6
movq %rax, %rbx
jmp 0x7bd2d
movq %rax, %rbx
jmp 0x7bd08
movq %rax, %rbx
movq 0xe8(%rsp), %rdi
leaq 0xf8(%rsp), %rax
cmpq %rax, %rdi
je 0x7bd08
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x158(%rsp), %rdi
leaq 0x168(%rsp), %rax
cmpq %rax, %rdi
je 0x7bd2d
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x138(%rsp), %rdi
leaq 0x148(%rsp), %rax
cmpq %rax, %rdi
je 0x7bebc
movq 0x148(%rsp), %rsi
jmp 0x7beb4
jmp 0x7be8c
movq %rax, %rbx
jmp 0x7bdf8
movq %rax, %rbx
jmp 0x7bdd3
movq %rax, %rbx
jmp 0x7bdb7
movq %rax, %rbx
jmp 0x7bd92
movq %rbx, %rcx
movq %rax, %rbx
movq 0x238(%rsp), %rdi
cmpq %rcx, %rdi
je 0x7bd92
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x178(%rsp), %rdi
leaq 0x188(%rsp), %rax
cmpq %rax, %rdi
je 0x7bdb7
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x7bdd3
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x1b8(%rsp), %rdi
leaq 0x1c8(%rsp), %rax
cmpq %rax, %rdi
je 0x7bdf8
movq 0x1c8(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x3a8(%rsp), %rdi
callq 0x4a472
jmp 0x7bf53
movq %rax, %rbx
jmp 0x7bebc
jmp 0x7beed
jmp 0x7beed
jmp 0x7beed
movq %rax, %rbx
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x7bf3d
movq 0x78(%rsp), %rsi
jmp 0x7be7f
jmp 0x7be94
jmp 0x7beed
jmp 0x7beed
jmp 0x7beed
jmp 0x7bef7
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x7260c
jmp 0x7bf30
jmp 0x7beed
movq %rax, %rbx
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x7bf3d
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
jmp 0x7bf3d
movq %rax, %rbx
jmp 0x7bf53
movq %rax, %rbx
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x7bebc
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x7bf53
movq 0x78(%rsp), %rsi
incq %rsi
jmp 0x7bf4e
jmp 0x7beed
jmp 0x7beed
jmp 0x7beed
jmp 0x7beed
jmp 0x7beed
jmp 0x7beed
jmp 0x7beed
jmp 0x7beed
jmp 0x7beed
jmp 0x7beed
movq %rax, %rbx
jmp 0x7bf3d
movq %rax, %rbx
jmp 0x7bf19
movq %rax, %rbx
jmp 0x7bf30
movq %rax, %rbx
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x7bf19
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x7bf30
movq 0x38(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
leaq 0xa8(%rsp), %rdi
callq 0x7260c
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x7bf53
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x258(%rsp), %rdi
testq %rdi, %rdi
je 0x7bf70
movq 0x268(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
leaq 0x2b8(%rsp), %rdi
callq 0xa79e2
movq %rbx, %rdi
callq 0x23240
nop