// File: /workspace/github_cpp_makefile_star2_O1/richardposner[P]BioNetFit2/src/code/Swarm.cpp
// Function: Swarm::checkMasterMessagesDE()
unordered_map<unsigned int, vector<double> > Swarm::checkMasterMessagesDE() {

	unsigned int pID, subParID, mid=0; //Removed newlyFinishedParticles
	if (options.verbosity >= 3) { //razi: TODO test for multiple models
		//cout << "Checking messages DE, may need some modifications/test to support sbParticle" << endl;
	}

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

	// First let's check interswarm communication
	int numMessages = swarmComm->recvMessage(-1, 0, -1, false, swarmComm->univMessageReceiver);

	if (numMessages >= 1) {
		if (options.verbosity >= 3) {
			//cout << "Found " << numMessages << " messages" << endl;
		}

		pair <Pheromones::swarmMsgHolderIt, Pheromones::swarmMsgHolderIt> smhRange;

		smhRange = swarmComm->univMessageReceiver.equal_range(SIMULATION_END);
		for (Pheromones::swarmMsgHolderIt sm = smhRange.first; sm != smhRange.second; ++sm) {
			subParID = sm->second.sender;
			pID = fcalcParID(subParID, options.models.size());
			mid= fcalcMID(subParID, options.models.size());

			if (options.verbosity >= 3) {
				//cout << "Particle " << pID << " finished simulation" << endl;
			}

			// Get an iterator to the particle in our list of running particles
			runningSubParticlesIterator_ = runningSubParticles_.find(subParID);
			// Then remove it
			if (runningSubParticlesIterator_ == runningSubParticles_.end()) {
				string errMsg = "Error: Couldn't remove subParticle " + toString(subParID) + " from runningParticle list.";
				cout << "Size of runningSubParticles_(2): " << runningSubParticles_.size() << endl;
				cout << "Subparticles in running list are: " << endl;
				for(auto myIt = runningSubParticles_.begin(); myIt != runningSubParticles_.end(); myIt++){
					cout << "first: " << *myIt << endl;

				}
				cout << "Done listing running particles. " << endl;
				outputError(errMsg);
			}
			runningSubParticles_.erase(runningSubParticlesIterator_);

			++particleIterationCounter_[pID][mid];
			update_finished_running_particles();

			/*
			// Only increment flight counter if we're finishing a trial set
			if (trial == true) {
				++flightCounter_;
			}
			 */

			/*
			unsigned int gen = currentGeneration;
			string paramsString;
			// Only output a run summary after a trial set has finished
			if (options.synchronicity == 1 && trial == true) {
				paramsString = "gen" + toString(static_cast<long long int>(gen)) + "perm" + toString(static_cast<long long int>(pID)) + " ";
			}
			else if (options.synchronicity == 0 && trial == true) {
				// TODO: This run summary contains 1 less particle than it should.
				// Output a run summary every outputEvery flights
				if (flightCounter_ % options.outputEvery == 0) {
					string outputPath = options.jobOutputDir + toString(static_cast<long long int>(flightCounter_)) + "_summary.txt";
					outputRunSummary(outputPath);
				}

				paramsString = toString(static_cast<long long int>(flightCounter_)) + " ";
			}
			 */

			double fitCalc = stod(sm->second.message[0]);

			/*
			bool replaceParams = false;
			if (trial == false) {
				particleBestFits_[pID] = fitCalc;
				insertKeyByValue(particleBestFitsByFit_, fitCalc, pID);
				replaceParams = true;
			}
			else if (trial == true && fitCalc < particleBestFits_.at(pID)) {
				cout << "replacing" << endl;
				particleBestFits_[pID] = fitCalc;
				insertKeyByValue(particleBestFitsByFit_, fitCalc, pID);
				replaceParams = true;
			}
			 */

			// Store the parameters given to us by the particle
			vector<double> paramsVec;
			paramsVec.push_back(fitCalc);
			//int i = 0;
			for (vector<string>::iterator m = sm->second.message.begin() + 1; m != sm->second.message.end(); ++m) {

				paramsVec.push_back(stod(*m));

				/*
				if (replaceParams) {
					//cout << "stored " << stod(*m) << " for particle " << pID << " as " << particleCurrParamSets_[pID][i] << endl;
					particleCurrParamSets_[pID][i] = stod(*m);
					paramsString += *m + " ";
				}
				else if (trial) {
					paramsString += toString(static_cast<long double>(particleCurrParamSets_[pID][i])) + " ";
				}
				 */

				//++i;
			}

			/*
			if (trial == true) {
				allGenFits.insert(pair<double, string>(particleBestFits_[pID], paramsString));
				swarmBestFits_.insert(pair<double, unsigned int>(fitCalc, pID));
			}
			 */

			subParticleParams.insert(pair<unsigned int, vector<double> >(subParID, paramsVec)); //razi: params for subparticle, then translate to particle params
			//cout << "done processing particle " << pID << endl;
		}

		// TODO: When sending NEXT_GENERATION, make sure failed particles have actually run again. If not, they need re-launched.
		smhRange = swarmComm->univMessageReceiver.equal_range(SIMULATION_FAIL);
		for (Pheromones::swarmMsgHolderIt sm = smhRange.first; sm != smhRange.second; ++sm) {

			subParID = sm->second.sender;
			pID = fcalcParID(subParID, options.models.size());
			mid= fcalcMID(subParID, options.models.size());

			// Get an iterator to the particle in our list of running particles
			runningSubParticlesIterator_ = runningSubParticles_.find(subParID);



			// Get an iterator to the particle in our list of running particles
			runningSubParticlesIterator_ = runningSubParticles_.find(subParID);
			if (runningSubParticlesIterator_ == runningSubParticles_.end()) {
				string errMsg = "Error: Couldn't remove particle " + toString(pID) +  "  SubParticle " + toString(subParID) + " from runningParticle list.";
				outputError(errMsg);
			}else
				runningSubParticles_.erase(runningSubParticlesIterator_);

			runningSubParticlesIterator_ = failedSubParticles_.find(subParID);
			if (runningSubParticlesIterator_== failedSubParticles_.end())  //add to the list of failed subparticles
				failedParticles_.insert(subParID);
			else{
				string errMsg = "Error: subParticle failed, but failure was already reported for particle " + toString(pID) +  "  SubParticle " + toString(subParID);
				outputError(errMsg);
			}
			update_finished_running_particles();



			// Increment our finished counter
			//finishedParticles.push_back(pID);
			subParticleParams.insert(pair<unsigned int, vector<double> >(subParID, vector<double>()));  //razi: params for subparticle, then translate to particle params
		}

		swarmComm->univMessageReceiver.clear();

	}

	return subParticleParams;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x198, %rsp            # imm = 0x198
movq %rsi, %r14
movl $0x0, 0x5c(%rsp)
leaq 0x30(%rdi), %rax
movq %rax, (%rdi)
movq $0x1, 0x8(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rdi)
movl $0x3f800000, 0x20(%rdi) # imm = 0x3F800000
movq %rdi, 0x80(%rsp)
movups %xmm0, 0x28(%rdi)
movq (%rsi), %rdi
leaq 0x18(%rdi), %r9
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
xorl %edx, %edx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
xorl %r8d, %r8d
pushq $-0x1
pushq $0x1
callq 0x6da7e
addq $0x10, %rsp
testl %eax, %eax
jle 0x96eee
movq (%r14), %rdi
addq $0x18, %rdi
leaq 0x38(%rsp), %rsi
movl $0xd, (%rsi)
callq 0x696ce
movq %rax, %r15
movq %rdx, %r13
cmpq %rdx, %rax
movq %r14, 0x8(%rsp)
je 0x96caa
leaq 0x1820(%r14), %rax
movq %rax, 0xa8(%rsp)
leaq 0x1828(%r14), %r12
leaq 0x1950(%r14), %rax
movq %rax, 0x100(%rsp)
leaq 0x38(%rsp), %rbx
movq %r12, 0xf8(%rsp)
movq %r13, 0xf0(%rsp)
movl 0x34(%r15), %edi
movl %edi, 0x4(%rsp)
movq 0x15c8(%r14), %rsi
subq 0x15c0(%r14), %rsi
shrq $0x3, %rsi
callq 0xbf2b8
movl %eax, 0x58(%rsp)
movl 0x4(%rsp), %edi
movq 0x15c8(%r14), %rsi
subq 0x15c0(%r14), %rsi
shrq $0x3, %rsi
callq 0xbf2ae
movl %eax, 0x5c(%rsp)
movq 0x1830(%r14), %rcx
movq %r12, %rax
testq %rcx, %rcx
je 0x96aa8
movl 0x4(%rsp), %edx
movq %r12, %rax
xorl %esi, %esi
cmpl %edx, 0x20(%rcx)
setb %sil
cmovaeq %rcx, %rax
movq 0x10(%rcx,%rsi,8), %rcx
testq %rcx, %rcx
jne 0x96a91
movq %r12, %rcx
cmpq %r12, %rax
je 0x96abe
movl 0x4(%rsp), %ecx
cmpl 0x20(%rax), %ecx
cmovbq %r12, %rax
movq %rax, %rcx
movq %rcx, 0x1850(%r14)
cmpq %r12, %rcx
je 0x96fcf
movq 0x1850(%r14), %rsi
movq 0xa8(%rsp), %rdi
callq 0xb0368
movq 0x100(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0xa8802
movq %rax, %rdi
leaq 0x5c(%rsp), %rsi
callq 0xa8866
incl (%rax)
leaq 0x180(%rsp), %rdi
movq %r14, %rsi
callq 0x96206
movq 0x180(%rsp), %rdi
testq %rdi, %rdi
je 0x96b30
movq 0x190(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x38(%r15), %rax
movq (%rax), %r14
callq 0x22070
movq %rax, %r12
movl (%rax), %ebp
movl $0x0, (%rax)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x22760
cmpq %r14, 0x38(%rsp)
je 0x97022
movl (%r12), %eax
testl %eax, %eax
je 0x96b6f
cmpl $0x22, %eax
jne 0x96b73
jmp 0x9702e
movl %ebp, (%r12)
movsd %xmm0, 0x60(%rsp)
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
movq 0x18(%rsp), %rsi
testq %rsi, %rsi
je 0x96ba3
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x18(%rsp)
jmp 0x96bb2
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x68992
movq 0x38(%r15), %rbp
addq $0x20, %rbp
cmpq 0x40(%r15), %rbp
je 0x96c34
movq (%rbp), %r14
movl (%r12), %r13d
movl $0x0, (%r12)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x22760
cmpq %r14, 0x38(%rsp)
je 0x96f08
movl (%r12), %eax
testl %eax, %eax
je 0x96bf8
cmpl $0x22, %eax
jne 0x96bfc
jmp 0x96f14
movl %r13d, (%r12)
movsd %xmm0, 0xb0(%rsp)
movq 0x18(%rsp), %rsi
cmpq 0x20(%rsp), %rsi
je 0x96c20
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x18(%rsp)
jmp 0x96bb6
leaq 0x10(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
callq 0x68326
jmp 0x96bb6
movl 0x4(%rsp), %eax
movl %eax, 0x38(%rsp)
leaq 0x40(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x66228
movq 0x80(%rsp), %rdi
movq %rbx, %rsi
callq 0xb061a
movq 0x8(%rsp), %r14
movq 0xf8(%rsp), %r12
movq 0xf0(%rsp), %r13
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x96c87
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x96c9e
movq 0x20(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq (%r15), %r15
cmpq %r13, %r15
jne 0x96a39
movq (%r14), %rdi
addq $0x18, %rdi
leaq 0x38(%rsp), %rsi
movl $0xe, (%rsi)
callq 0x696ce
movq %rax, %rbx
movq %rdx, %r15
cmpq %rdx, %rax
je 0x96edd
movq 0x8(%rsp), %rax
leaq 0x1820(%rax), %rcx
movq %rcx, 0xa8(%rsp)
leaq 0x1828(%rax), %r14
leaq 0x1860(%rax), %rbp
leaq 0x19d0(%rax), %r13
movq 0x8(%rsp), %r12
movl 0x34(%rbx), %edi
movl %edi, 0x4(%rsp)
movq 0x15c8(%r12), %rsi
subq 0x15c0(%r12), %rsi
shrq $0x3, %rsi
callq 0xbf2b8
movl %eax, 0x58(%rsp)
movl 0x4(%rsp), %edi
movq 0x15c8(%r12), %rsi
subq 0x15c0(%r12), %rsi
shrq $0x3, %rsi
callq 0xbf2ae
movl %eax, 0x5c(%rsp)
movq 0x1830(%r12), %rax
movq %r14, %rcx
testq %rax, %rax
je 0x96d74
movl 0x4(%rsp), %edx
movq %rax, %rsi
movq %r14, %rcx
xorl %edi, %edi
cmpl %edx, 0x20(%rsi)
setb %dil
cmovaeq %rsi, %rcx
movq 0x10(%rsi,%rdi,8), %rsi
testq %rsi, %rsi
jne 0x96d5d
movq %r14, %rdx
cmpq %r14, %rcx
je 0x96d8a
movl 0x4(%rsp), %edx
cmpl 0x20(%rcx), %edx
cmovbq %r14, %rcx
movq %rcx, %rdx
movq 0x8(%rsp), %rcx
movq %rdx, 0x1850(%rcx)
movq %r14, %rcx
testq %rax, %rax
je 0x96dbc
movl 0x4(%rsp), %edx
movq %r14, %rcx
xorl %esi, %esi
cmpl %edx, 0x20(%rax)
setb %sil
cmovaeq %rax, %rcx
movq 0x10(%rax,%rsi,8), %rax
testq %rax, %rax
jne 0x96da5
movq %r14, %rsi
cmpq %r14, %rcx
je 0x96dd2
movl 0x4(%rsp), %eax
cmpl 0x20(%rcx), %eax
cmovbq %r14, %rcx
movq %rcx, %rsi
movq 0x8(%rsp), %rax
movq %rsi, 0x1850(%rax)
cmpq %r14, %rsi
je 0x96f20
movq 0xa8(%rsp), %rdi
callq 0xb0368
movq 0x8(%rsp), %rax
movq 0x1868(%rax), %rcx
movq %rbp, %rax
testq %rcx, %rcx
je 0x96e26
movl 0x4(%rsp), %edx
movq %rbp, %rax
xorl %esi, %esi
cmpl %edx, 0x20(%rcx)
setb %sil
cmovaeq %rcx, %rax
movq 0x10(%rcx,%rsi,8), %rcx
testq %rcx, %rcx
jne 0x96e0f
movq %rbp, %rcx
cmpq %rbp, %rax
je 0x96e3c
movl 0x4(%rsp), %ecx
cmpl 0x20(%rax), %ecx
cmovbq %rbp, %rax
movq %rax, %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x1850(%rax)
cmpq %rbp, %rcx
jne 0x96f79
movq %r13, %rdi
leaq 0x4(%rsp), %rsi
callq 0xb01ce
movq 0x8(%rsp), %rsi
leaq 0x168(%rsp), %rdi
callq 0x96206
movq 0x168(%rsp), %rdi
testq %rdi, %rdi
je 0x96e8d
movq 0x178(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movl 0x4(%rsp), %eax
movl %eax, 0x38(%rsp)
leaq 0x40(%rsp), %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movq $0x0, 0x10(%rax)
movq 0x80(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0xb061a
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x96ed1
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq (%rbx), %rbx
cmpq %r15, %rbx
jne 0x96cfe
movq 0x8(%rsp), %rax
movq (%rax), %rdi
addq $0x18, %rdi
callq 0x68e70
movq 0x80(%rsp), %rax
addq $0x198, %rsp            # imm = 0x198
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x5b84c(%rip), %rdi     # 0xf275b
callq 0x225a0
leaq 0x5b840(%rip), %rdi     # 0xf275b
callq 0x22e40
movl 0x58(%rsp), %esi
leaq 0x88(%rsp), %rdi
callq 0xc03b8
leaq 0x68f57(%rip), %rcx     # 0xffe8f
leaq 0x88(%rsp), %rdi
movl $0x20, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0xc0(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x9703a
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
jmp 0x9704d
movl 0x58(%rsp), %esi
leaq 0xb0(%rsp), %rdi
callq 0xc03b8
leaq 0x69158(%rip), %rcx     # 0x1000e9
leaq 0xb0(%rsp), %rdi
movl $0x49, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x70(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x970a0
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
jmp 0x970ad
movq %r12, %r14
movl 0x4(%rsp), %esi
leaq 0x60(%rsp), %rdi
callq 0xc03b8
leaq 0x68bc9(%rip), %rcx     # 0xffbb0
leaq 0x60(%rsp), %rdi
movl $0x23, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x20(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x970fd
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
jmp 0x9710a
leaq 0x5b732(%rip), %rdi     # 0xf275b
callq 0x225a0
leaq 0x5b726(%rip), %rdi     # 0xf275b
callq 0x22e40
movq %rdx, 0xb0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xc0(%rsp)
movq 0x8(%rax), %rdx
leaq 0xb0(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x68e3d(%rip), %rsi     # 0xffeb0
callq 0x233b0
leaq 0x70(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x9715a
movups (%rcx), %xmm0
movups %xmm0, (%r15)
jmp 0x97167
movq %rdx, 0x60(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x70(%rsp)
movq 0x8(%rax), %rdx
leaq 0x60(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x68de0(%rip), %rsi     # 0xffeb0
callq 0x233b0
leaq 0x20(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x971f9
movups (%rcx), %xmm0
movups %xmm0, (%r15)
jmp 0x97206
movq %rdx, 0x10(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x20(%rsp)
movq 0x8(%rax), %rdx
leaq 0x10(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x68aa7(%rip), %rsi     # 0xffbd4
callq 0x233b0
leaq 0x48(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x97298
movups (%rcx), %xmm0
movups %xmm0, (%rbp)
jmp 0x972a5
movq %rdx, 0x60(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x70(%rsp)
movq 0x8(%rax), %rdx
movq %rdx, 0x68(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl 0x4(%rsp), %esi
leaq 0xd0(%rsp), %rdi
callq 0xc03b8
movq 0x60(%rsp), %rcx
movq 0x68(%rsp), %r8
movq 0xd8(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %esi
cmpq %r15, %rcx
je 0x971b5
movq 0x70(%rsp), %rsi
leaq 0xe0(%rsp), %r12
cmpq %rsi, %rax
jbe 0x971e2
movl $0xf, %esi
cmpq %r12, 0xd0(%rsp)
je 0x971d9
movq 0xe0(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x97422
movq 0xd0(%rsp), %rsi
leaq 0x60(%rsp), %rdi
callq 0x222b0
jmp 0x97433
movq %rdx, 0x10(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x20(%rsp)
movq 0x8(%rax), %rdx
movq %rdx, 0x18(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl 0x4(%rsp), %esi
leaq 0x88(%rsp), %rdi
callq 0xc03b8
movq 0x10(%rsp), %rcx
movq 0x18(%rsp), %r8
movq 0x90(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %esi
cmpq %r15, %rcx
je 0x97254
movq 0x20(%rsp), %rsi
leaq 0x98(%rsp), %r12
cmpq %rsi, %rax
jbe 0x97281
movl $0xf, %esi
cmpq %r12, 0x88(%rsp)
je 0x97278
movq 0x98(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x974b4
movq 0x88(%rsp), %rsi
leaq 0x10(%rsp), %rdi
callq 0x222b0
jmp 0x974c5
movq %rdx, 0x38(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x48(%rsp)
movq 0x8(%rax), %rdx
movq %rdx, 0x40(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x972d4
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x972ef
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xdec9a(%rip), %rdi     # 0x175f90
leaq 0x68dca(%rip), %rsi     # 0x1000c7
movl $0x21, %edx
callq 0x22ab0
movq 0x8(%rsp), %rax
movq 0x1848(%rax), %rsi
movq 0xdec76(%rip), %rdi     # 0x175f90
callq 0x22650
movq %rax, %rbx
movq (%rax), %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 0xdec40(%rip), %rbx     # 0x175f90
leaq 0x688b8(%rip), %rsi     # 0xffc0f
movl $0x22, %edx
movq %rbx, %rdi
callq 0x22ab0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq 0xdec0e(%rip), %rdi     # 0x175f90
callq 0x22050
movq %rax, %rdi
callq 0x22660
movq 0x8(%rsp), %rax
movq 0x1838(%rax), %rbx
cmpq %r14, %rbx
jne 0x9769a
movq 0xdebe5(%rip), %rbx     # 0x175f90
leaq 0x68880(%rip), %rsi     # 0xffc32
movl $0x20, %edx
movq %rbx, %rdi
callq 0x22ab0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq 0xdebb3(%rip), %rdi     # 0x175f90
callq 0x22050
movq %rax, %rdi
callq 0x22660
leaq 0x158(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x38(%rsp), %rsi
movq 0x40(%rsp), %rdx
addq %rsi, %rdx
leaq 0x148(%rsp), %rdi
callq 0x32180
leaq 0x148(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x78b66
leaq 0xd0(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x20(%rsp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
jne 0x97450
movups (%rcx), %xmm0
movups %xmm0, (%rdx)
jmp 0x9745d
movq %rsi, 0x10(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x20(%rsp)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x18(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x68753(%rip), %rsi     # 0xffbd4
leaq 0x10(%rsp), %rdi
callq 0x233b0
leaq 0x48(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x975b0
movups (%rcx), %xmm0
movups %xmm0, (%r13)
jmp 0x975bd
leaq 0x88(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x48(%rsp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
jne 0x974e2
movups (%rcx), %xmm0
movups %xmm0, (%rdx)
jmp 0x974ef
movq %rsi, 0x38(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x48(%rsp)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x40(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq 0x88(%rsp), %rdi
cmpq %r12, %rdi
je 0x97529
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x10(%rsp), %rdi
cmpq %r15, %rdi
je 0x97540
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x60(%rsp), %rdi
cmpq %rbx, %rdi
je 0x97557
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x97578
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x118(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x38(%rsp), %rsi
movq 0x40(%rsp), %rdx
addq %rsi, %rdx
leaq 0x108(%rsp), %rdi
callq 0x32180
leaq 0x108(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x78b66
movq %rdx, 0x38(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x48(%rsp)
movq 0x8(%rax), %rdx
movq %rdx, 0x40(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x975f0
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xd0(%rsp), %rdi
cmpq %r12, %rdi
je 0x9760d
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x60(%rsp), %rdi
cmpq %r15, %rdi
je 0x97624
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xb0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x97641
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x98(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x97662
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x138(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x38(%rsp), %rsi
movq 0x40(%rsp), %rdx
addq %rsi, %rdx
leaq 0x128(%rsp), %rdi
callq 0x32180
leaq 0x128(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x78b66
movq 0xde8ef(%rip), %r15     # 0x175f90
leaq 0x61f79(%rip), %r12     # 0xf9621
movl $0x7, %edx
movq %r15, %rdi
movq %r12, %rsi
callq 0x22ab0
movl 0x20(%rbx), %esi
movq %r15, %rdi
callq 0x22650
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %r13, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
movq %rbx, %rdi
callq 0x22ad0
movq %rax, %rbx
cmpq %r14, %rax
jne 0x976a8
jmp 0x973a4
movq %rax, %r14
movq 0x148(%rsp), %rdi
cmpq %rbx, %rdi
je 0x97852
movq 0x158(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x97852
jmp 0x9784f
movq %rax, %r14
movq 0x128(%rsp), %rdi
cmpq %rbx, %rdi
je 0x97755
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x97755
movq %rax, %r14
movq 0x38(%rsp), %rdi
cmpq %r13, %rdi
jne 0x97860
jmp 0x979a2
movq %rax, %r14
movq 0x108(%rsp), %rdi
cmpq %rbx, %rdi
je 0x9778d
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x9778d
movq %rax, %r14
leaq 0x48(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x97860
jmp 0x979a2
movq %rax, %r14
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x977e9
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x977e9
movq %rax, %r14
movq 0x88(%rsp), %rdi
cmpq %r12, %rdi
je 0x97815
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x97815
movq %rax, %r14
movq 0xd0(%rsp), %rdi
cmpq %r12, %rdi
je 0x97831
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x97831
jmp 0x97973
jmp 0x97973
movq %rax, %r14
movq 0x10(%rsp), %rdi
cmpq %r15, %rdi
je 0x97889
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x97889
movq %rax, %r14
movq 0x60(%rsp), %rdi
cmpq %r15, %rdi
je 0x978a5
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x978a5
jmp 0x97973
movq %rax, %r14
movq 0x38(%rsp), %rdi
cmpq %rbp, %rdi
je 0x979a2
movq 0x48(%rsp), %rsi
jmp 0x97922
movq %rax, %r14
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x978c7
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x978c7
movq %rax, %r14
movq 0x60(%rsp), %rdi
cmpq %rbx, %rdi
je 0x978e3
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x978e3
movq %rax, %r14
movq 0xb0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x97905
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x97905
movq %rax, %r14
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x979a2
movq 0x70(%rsp), %rsi
jmp 0x97922
movq %rax, %r14
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x979a2
movq 0xc0(%rsp), %rsi
jmp 0x97922
movq %rax, %r14
leaq 0x98(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x979a2
movq 0x98(%rsp), %rsi
incq %rsi
jmp 0x9799d
jmp 0x97978
jmp 0x97973
jmp 0x97973
jmp 0x97973
jmp 0x97978
movq %rax, %r14
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x9798b
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
jmp 0x9798b
movq %rax, %r14
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x979a2
movq 0x50(%rsp), %rsi
jmp 0x9799a
movq %rax, %r14
cmpl $0x0, (%r12)
jne 0x979a2
movl %ebp, (%r12)
jmp 0x979a2
jmp 0x97973
movq %rax, %r14
jmp 0x979a2
movq %rax, %r14
jmp 0x9798b
movq %rax, %r14
cmpl $0x0, (%r12)
jne 0x9798b
movl %r13d, (%r12)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x979a2
movq 0x20(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x80(%rsp), %rdi
callq 0xad720
movq %r14, %rdi
callq 0x23240
nop