// File: /workspace/github_cpp_makefile_star2_O1/richardposner[P]BioNetFit2/src/code/Particle.cpp
// Function: Particle::doParticle(unsigned int)
void Particle::doParticle(unsigned int mid) {
	int subParID = calcsubParID(mid);
	int id = subParID;

	if (swarm_->options.verbosity >= 3) {cout << "In doParticle(), waiting for message from master. subParticle:["<<subParID <<":"<< id_  <<"-"<<mid <<"]  model id:"<< mid<< endl; mypause();}

// razi: this is to run the program in slave mode without using master-slave configuration
// this should be commented later on.
#ifdef STANDALONE_STANDALONE_PARTICLE_TEST_ACTIVE

	if (swarm_->options.verbosity >= 3){ cout << "doParticle. Generate random parameters instead of waiting for master to send the parameters. Results are not valid !!!" << endl; mypause();}
	currentGeneration_ =1; int rnd; srand(subParID); //razi random seed

	//razi generate random values for free parameters only for test purpose
	for (auto frp = swarm_->options.models.at(mid)->freeParams_.begin(); frp != swarm_->options.models.at(mid)->freeParams_.end(); ++frp) {
		rnd=rand()%100; simParams_.at(mid).insert(pair<string, double>(frp->first, rnd));
		//cout<<"virtual free param:"<<frp->first<<" is set to "<<rnd<<"."<<endl;
	}

#else //STANDALONE_STANDALONE_PARTICLE_TEST_ACTIVE
	if (swarm_->resumingSavedSwarm) {
		if (swarm_->options.verbosity >= 3)  cout << "Waiting for flight count from master" << endl;
		swarm_->swarmComm->recvMessage(0, id, SEND_NUMFLIGHTS_TO_PARTICLE, true, swarm_->swarmComm->univMessageReceiver);
		currentGeneration_ = stoi(*(swarm_->swarmComm->univMessageReceiver.find(SEND_NUMFLIGHTS_TO_PARTICLE)->second.message.begin()));

		swarm_->swarmComm->univMessageReceiver.clear();
		if (swarm_->options.verbosity >= 3) cout << "Received flight count from master. Waiting for param set from master...." << endl;
		swarm_->swarmComm->recvMessage(0, id, SEND_FINAL_PARAMS_TO_PARTICLE, true, swarm_->swarmComm->univMessageReceiver);

		auto freeParam = swarm_->options.models.at(mid)->getFreeParams_().begin();
		for (auto paramVal = swarm_->swarmComm->univMessageReceiver.find(SEND_FINAL_PARAMS_TO_PARTICLE)->second.message.begin(); paramVal != swarm_->swarmComm->univMessageReceiver.find(SEND_FINAL_PARAMS_TO_PARTICLE)->second.message.end(); ++paramVal) {
			if (swarm_->options.verbosity >= 3) cout << "updating " << freeParam->first << " to " << *paramVal << endl;
			simParams_.at(mid).insert(pair<string, double>(freeParam->first, stod(*paramVal)));
			++freeParam;
		}
		swarm_->swarmComm->univMessageReceiver.clear();
	}
#endif //STANDALONE_STANDALONE_PARTICLE_TEST_ACTIVE


	if (swarm_->options.fitType == "de") {
		// Need to figure out which island I'm on
		for (unsigned int island = 1; island <= swarm_->options.numIslands; ++island) {
			for (unsigned int particle = 1; particle <= (swarm_->options.swarmSize / swarm_->options.numIslands) * island; ++particle) {
				if (particle == id_) {
					island_ = island;
					goto theEnd;
				}
			}
		}
		theEnd:;
	}


#ifndef STANDALONE_PARTICLE_TEST_ACTIVE

//cout << "Particle " << id_ << " waiting to begin" << endl;
//	swarm_->swarmComm->recvMessage(0, id_, NEXT_GENERATION, true, swarm_->swarmComm->univMessageReceiver);
	if (swarm_->options.verbosity >= 3) {
		cout << "subParticle " << id << " waiting to begin" << endl;
	}
	swarm_->swarmComm->recvMessage(0, id, NEXT_GENERATION, true, swarm_->swarmComm->univMessageReceiver); //Master should send message with subParID
	swarm_->swarmComm->univMessageReceiver.clear();
#endif //STANDALONE_PARTICLE_TEST_ACTIVE
	if (swarm_->options.verbosity >= 3) {
		cout << "Particle " << id_ << " starting" << endl;
	}
	if (swarm_->options.verbosity >= 3) {
		cout << "In doParticle(), entering main run loop" << endl;
	}

	bool doContinue = true;
	bool doRunModel = true;
	while(doContinue) {
		if (swarm_->bootstrapCounter > 0 && currentGeneration_ == 1) {
			swarm_->swarmComm->recvMessage(0, id, NEXT_GENERATION, true, swarm_->swarmComm->univMessageReceiver);
			swarm_->swarmComm->univMessageReceiver.clear();
		}
		if (swarm_->options.verbosity >= 3) {
			cout << "DoParticle: Generation is " << currentGeneration_ << endl;
		}
		if (doRunModel) {
			for (unsigned int i = 1; i <= swarm_->options.smoothing; ++i) {
				if (swarm_->options.verbosity >= 3) cout<<"doParticle-1x try to run model for i:"<<i<<endl;

				if (swarm_->isMaster){
						for (unsigned int j=0; j<=swarm_->getNumModels(); j++){   //razi:run all subparticles
						if (getSubParticle(j)){
							getSubParticle(j)->runModel(i, false);   //razi: check later due to false
							if (swarm_->options.verbosity >= 3) {
								cout<<"Particle::doParticle. Running subParticle:["<<calcsubParID(j) <<":"<< id_  <<"-"<<j <<"] for iteration:"<<i << " is completed...\n";
							}
						}
					}
				}else{
					if (getSubParticle(mid)){
						if (swarm_->options.verbosity >= 3) {
							cout<<"Particle::doParticle. Running subParticle:["<<subParID <<":"<< id_  <<"-"<<mid <<"] for iteration:"<<i << " is started...\n";
						}
						getSubParticle(mid)->runModel(i, false);   //razi: check later due to false
						if (swarm_->options.verbosity >= 3) {
							cout<<"Particle::doParticle. Running subParticle:"<< mid <<" for iteration:"<<i << " is completed...\n";
						}
					}else outputError("SubParticle number error subParticle:["+ toString(subParID)+":"+ toString(id_) + "-:"+ toString(mid)+"] particleID:"+ toString(id_)+ " model id:" + toString(mid) + "  subParID:" + toString(subParID));
				}
				if (swarm_->options.verbosity >= 3) cout<<"doParticle-1 ran model for i:"<<i<<endl;
			}

			if (swarm_->isMaster){
				for (unsigned int j=0; j<=swarm_->getNumModels(); j++){
					if (getSubParticle(j)) {
						if (swarm_->options.smoothing > 1) {
							smoothRuns(j);
						}
						finalizeSim(j);
					}
				}
			}else{
				if (getSubParticle(mid)) {
					smoothRuns(mid);
				}
				finalizeSim(mid);
			}
		}
		else{
			//cout<<"do Runmodel was not active\n";
			doRunModel = true;
		}

if (swarm_->options.verbosity >= 3) cout<<"doParticle-4 now lets check messages..."<<endl;
		if (swarm_->options.verbosity >= 5) {
			cout << "RAQUEL before if" << endl;
		}
		if (swarm_->options.fitType == "ga") {
			if (swarm_->options.verbosity >= 3) {
				cout << "RAQUEL Entering check messages GA" << endl;
			}
			//checkMessagesGenetic(); //Raquel: changed this function to fix the problem of not proceeding to the next generation
			checkMessagesGenetic(mid);
			if (swarm_->options.verbosity >= 3) {
				cout << "RAQUEL done check messages" << endl;
			}
		}
		else if (swarm_->options.fitType == "pso") {
			if (swarm_->options.verbosity >= 3) {
				cout << "RAQUEL Entering check messages PSO" << endl;
			}
			checkMessagesPSO(mid);
			if (swarm_->options.verbosity >= 3) {
				cout << "RAQUEL Done check messages PSO" << endl;
			}

		}
		else if (swarm_->options.fitType == "de") {

			if (swarm_->options.verbosity >= 3) {
				cout << "RAQUEL Entering check messages DE" << endl;
			}

			checkMessagesDE(mid);

			if (swarm_->options.verbosity >= 3) {
				cout << "RAQUEL Done check messages DE" << endl;
			}

		}
		else if (swarm_->options.fitType == "sa") {
			doRunModel = checkMessagesDE();
		}
if (swarm_->options.verbosity >= 3) cout<<"doParticle-4 check messages done..."<<endl;

		if (doRunModel == true) {
			// Next generation
			++currentGeneration_;
		}
	}
	if (swarm_->options.verbosity >= 3) {
		cout << "In doParticle(), finished ...." << endl;
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x268, %rsp            # imm = 0x268
movq %rdi, %r15
movl 0x40(%rdi), %eax
decl %eax
movq 0xa8(%rdi), %rcx
movq 0x15c8(%rcx), %rdx
subq 0x15c0(%rcx), %rdx
shrq $0x3, %rdx
imull %eax, %edx
leal (%rsi,%rdx), %eax
incl %eax
movl %eax, 0xc(%rsp)
cmpl $0x3, 0x1614(%rcx)
movq %rsi, 0x10(%rsp)
movl %esi, %r13d
jb 0x5cbe6
movq 0x119460(%rip), %rbx    # 0x175f90
leaq 0x9ba41(%rip), %rsi     # 0xf8578
movl $0x3f, %edx
movq %rbx, %rdi
callq 0x22ab0
movq %rbx, %rdi
movl 0xc(%rsp), %esi
callq 0x231e0
movq %rax, %rbx
leaq 0xa1a06(%rip), %rsi     # 0xfe560
movl $0x1, %edx
movq %rax, %rdi
callq 0x22ab0
movl 0x40(%r15), %esi
movq %rbx, %rdi
callq 0x22650
movq %rax, %rbx
leaq 0xa4b1d(%rip), %rsi     # 0x10169a
movl $0x1, %edx
movq %rax, %rdi
callq 0x22ab0
movq %rbx, %rdi
movq %r13, %rsi
callq 0x22650
movq %rax, %rbx
leaq 0x9ba19(%rip), %rsi     # 0xf85b8
movl $0xc, %edx
movq %rax, %rdi
callq 0x22ab0
movq %rbx, %rdi
movq %r13, %rsi
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
callq 0xbe420
movq 0xa8(%r15), %rax
cmpb $0x1, 0x13f0(%rax)
movq %r13, 0x20(%rsp)
jne 0x5cff0
cmpl $0x3, 0x1614(%rax)
jb 0x5cc4a
movq 0x119381(%rip), %rbx    # 0x175f90
leaq 0x9b9af(%rip), %rsi     # 0xf85c5
movl $0x24, %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 0xa8(%r15), %rax
movq (%rax), %rdi
leaq 0x18(%rdi), %r9
xorl %esi, %esi
movl 0xc(%rsp), %edx
movl $0x17, %ecx
movl $0x1, %r8d
pushq $-0x1
pushq $0x1
callq 0x6da7e
addq $0x10, %rsp
movq 0xa8(%r15), %rax
movq (%rax), %rcx
movl $0x17, %eax
xorl %edx, %edx
divq 0x20(%rcx)
movq 0x18(%rcx), %rax
movl %edx, %ecx
movq (%rax,%rcx,8), %rax
movq (%rax), %rcx
cmpl $0x17, 0x8(%rcx)
je 0x5cca6
movq %rcx, %rax
movq (%rcx), %rcx
jmp 0x5cc98
movq (%rax), %rax
movq 0x38(%rax), %rax
movq (%rax), %rbx
callq 0x22070
movq %rax, %r14
movl (%rax), %ebp
movl $0x0, (%rax)
leaq 0x38(%rsp), %r12
movq %rbx, %rdi
movq %r12, %rsi
movl $0xa, %edx
callq 0x22d80
cmpq %rbx, (%r12)
movq %r14, 0x28(%rsp)
jne 0x5ccec
leaq 0x95a6a(%rip), %rdi     # 0xf2751
callq 0x225a0
movl (%r14), %ecx
cmpl $0x22, %ecx
setne %dl
movslq %eax, %rsi
cmpq %rax, %rsi
sete %sil
testb %dl, %sil
jne 0x5cd10
leaq 0x95a46(%rip), %rdi     # 0xf2751
callq 0x22e40
testl %ecx, %ecx
jne 0x5cd1b
movq 0x28(%rsp), %rcx
movl %ebp, (%rcx)
movl %eax, 0xb0(%r15)
movq 0xa8(%r15), %rax
movq (%rax), %rdi
addq $0x18, %rdi
callq 0x68e70
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5cd87
movq 0x119244(%rip), %rbx    # 0x175f90
leaq 0x9b897(%rip), %rsi     # 0xf85ea
movl $0x48, %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 0xa8(%r15), %rax
movq (%rax), %rdi
leaq 0x18(%rdi), %r9
xorl %esi, %esi
movl 0xc(%rsp), %edx
movl $0x15, %ecx
movl $0x1, %r8d
pushq $-0x1
pushq $0x1
callq 0x6da7e
addq $0x10, %rsp
movq 0xa8(%r15), %rax
movq 0x15c0(%rax), %rcx
movq 0x15c8(%rax), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r13, %rdx
jbe 0x5ce01
movq (%rcx,%r13,8), %rcx
movq (%rax), %rsi
movl $0x15, %eax
xorl %edx, %edx
divq 0x20(%rsi)
movq 0x18(%rsi), %rax
movl %edx, %edx
movq (%rax,%rdx,8), %rax
movq (%rax), %rdx
cmpl $0x15, 0x8(%rdx)
je 0x5ce10
movq %rdx, %rax
movq (%rdx), %rdx
jmp 0x5cdf3
leaq 0x968bd(%rip), %rdi     # 0xf36c5
movq %r13, %rsi
jmp 0x5e367
movq 0x48(%rcx), %rbp
movq (%rax), %rax
movq 0x38(%rax), %r13
leaq 0x48(%rsp), %r14
movq 0x20(%rsp), %rax
leaq (%rax,%rax,2), %rax
shlq $0x4, %rax
movq %rax, 0x240(%rsp)
movq 0xa8(%r15), %rcx
movq (%rcx), %rdi
movl $0x15, %eax
xorl %edx, %edx
divq 0x20(%rdi)
movq 0x18(%rdi), %rax
movl %edx, %edx
movq (%rax,%rdx,8), %rax
movq (%rax), %rdx
cmpl $0x15, 0x8(%rdx)
je 0x5ce65
movq %rdx, %rax
movq (%rdx), %rdx
jmp 0x5ce57
movq (%rax), %rax
cmpq 0x40(%rax), %r13
je 0x5cfe2
cmpl $0x3, 0x1614(%rcx)
jb 0x5cef7
movl $0x9, %edx
movq 0x119109(%rip), %rbx    # 0x175f90
movq %rbx, %rdi
leaq 0x9b7a2(%rip), %rsi     # 0xf8633
callq 0x22ab0
movq 0x20(%rbp), %rsi
movq 0x28(%rbp), %rdx
movq %rbx, %rdi
callq 0x22ab0
movq %rax, %r12
movl $0x4, %edx
movq %rax, %rdi
leaq 0xa3ded(%rip), %rsi     # 0x100ca5
callq 0x22ab0
movq (%r13), %rsi
movq 0x8(%r13), %rdx
movq %r12, %rdi
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
movq (%r15), %r12
movq 0x8(%r15), %rdx
subq %r12, %rdx
sarq $0x4, %rdx
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rdx
movq 0x20(%rsp), %rsi
cmpq %rsi, %rdx
jbe 0x5e370
movq %rbp, %rbx
movq %r13, 0x18(%rsp)
movq (%r13), %r13
movq 0x28(%rsp), %rbp
movl (%rbp), %eax
movl %eax, 0x30(%rsp)
movl $0x0, (%rbp)
movq %r13, %rdi
leaq 0x60(%rsp), %rsi
callq 0x22760
cmpq %r13, 0x60(%rsp)
je 0x5e379
movl (%rbp), %eax
testl %eax, %eax
je 0x5cf69
cmpl $0x22, %eax
jne 0x5cf70
jmp 0x5e38f
movl 0x30(%rsp), %eax
movl %eax, (%rbp)
addq 0x240(%rsp), %r12
movq %r14, 0x38(%rsp)
movq 0x20(%rbx), %rsi
movq 0x28(%rbx), %rdx
addq %rsi, %rdx
leaq 0x38(%rsp), %rbp
movq %rbp, %rdi
movsd %xmm0, 0x30(%rsp)
callq 0x32180
movsd 0x30(%rsp), %xmm0
movsd %xmm0, 0x58(%rsp)
movq %r12, %rdi
movq %rbp, %rsi
callq 0x4d33e
movq 0x38(%rsp), %rdi
cmpq %r14, %rdi
je 0x5cfc9
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x229c0
movq %rbx, %rdi
callq 0x22ad0
movq %rax, %rbp
movq 0x18(%rsp), %r13
addq $0x20, %r13
jmp 0x5ce35
addq $0x18, %rdi
callq 0x68e70
movq 0x20(%rsp), %r13
movl $0x14e0, %edi           # imm = 0x14E0
addq 0xa8(%r15), %rdi
leaq 0xd0f18(%rip), %rsi     # 0x12df1b
callq 0x22250
testl %eax, %eax
jne 0x5d05b
movq 0xa8(%r15), %rax
movl 0x16fc(%rax), %ecx
testl %ecx, %ecx
je 0x5d05b
movl 0x1620(%rax), %eax
xorl %edx, %edx
divl %ecx
movl 0x40(%r15), %esi
movl $0x1, %edx
movl %eax, %edi
imull %edx, %edi
testl %edi, %edi
je 0x5d04c
movl $0x1, %r8d
cmpl %r8d, %esi
je 0x5d054
incl %r8d
cmpl %edi, %r8d
jbe 0x5d03f
incl %edx
cmpl %ecx, %edx
jbe 0x5d030
jmp 0x5d05b
movl %edx, 0xb4(%r15)
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5d0d0
movq 0x118f1e(%rip), %rbx    # 0x175f90
leaq 0xa2b4e(%rip), %rsi     # 0xffbc7
movl $0xc, %edx
movq %rbx, %rdi
callq 0x22ab0
movq %rbx, %rdi
movl 0xc(%rsp), %esi
callq 0x231e0
movq %rax, %rbx
leaq 0x9b5a1(%rip), %rsi     # 0xf863d
movl $0x11, %edx
movq %rax, %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 0xa8(%r15), %rax
movq (%rax), %rdi
leaq 0x18(%rdi), %r9
xorl %esi, %esi
movl 0xc(%rsp), %edx
movl $0x12, %ecx
movl $0x1, %r8d
pushq $-0x1
pushq $0x1
callq 0x6da7e
addq $0x10, %rsp
movq 0xa8(%r15), %rax
movq (%rax), %rdi
addq $0x18, %rdi
callq 0x68e70
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5d184
movq 0x118e6a(%rip), %rbx    # 0x175f90
leaq 0xa2d88(%rip), %rsi     # 0xffeb5
movl $0x9, %edx
movq %rbx, %rdi
callq 0x22ab0
movl 0x40(%r15), %esi
movq %rbx, %rdi
callq 0x22650
movq %rax, %rbx
leaq 0x9b4ff(%rip), %rsi     # 0xf864f
movl $0x9, %edx
movq %rax, %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 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5d1d6
movq 0x118df5(%rip), %rbx    # 0x175f90
leaq 0x9b4b7(%rip), %rsi     # 0xf8659
movl $0x27, %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
movb $0x1, %bl
movq 0x118db1(%rip), %r12    # 0x175f90
movl $0x14e0, %r14d          # imm = 0x14E0
leaq 0x94dbd(%rip), %rbp     # 0xf1fa9
movq 0xa8(%r15), %rax
cmpl $0x0, 0x13ec(%rax)
je 0x5d23e
cmpl $0x1, 0xb0(%r15)
jne 0x5d23e
movq (%rax), %rdi
leaq 0x18(%rdi), %r9
xorl %esi, %esi
movl 0xc(%rsp), %edx
movl $0x12, %ecx
movl $0x1, %r8d
pushq $-0x1
pushq $0x1
callq 0x6da7e
addq $0x10, %rsp
movq 0xa8(%r15), %rax
movq (%rax), %rdi
addq $0x18, %rdi
callq 0x68e70
movb %bl, 0x18(%rsp)
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5d29f
movl $0x1a, %edx
movq %r12, %rdi
leaq 0x9b420(%rip), %rsi     # 0xf8681
callq 0x22ab0
movl 0xb0(%r15), %esi
movq %r12, %rdi
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
movb $0x1, %bl
testb $0x1, 0x18(%rsp)
je 0x5e048
movq 0xa8(%r15), %rax
cmpl $0x0, 0x1658(%rax)
je 0x5df84
movl $0x1, %ebp
cmpl $0x3, 0x1614(%rax)
jb 0x5d316
movl $0x25, %edx
movq %r12, %rdi
leaq 0x9b3bf(%rip), %rsi     # 0xf869c
callq 0x22ab0
movl %ebp, %esi
movq %r12, %rdi
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 0xa8(%r15), %rax
cmpb $0x1, 0x50(%rax)
jne 0x5d456
movl %ebp, %r13d
xorl %ebx, %ebx
movl %ebx, %ebx
movq 0x48(%r15), %rax
movq 0x50(%r15), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %rbx, %rdx
jbe 0x5e35d
movq (%rax,%rbx,8), %rdi
testq %rdi, %rdi
je 0x5d42e
movl %ebp, %esi
xorl %edx, %edx
callq 0x562a0
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5d42e
movl $0x2b, %edx
movq %r12, %rdi
leaq 0x9b343(%rip), %rsi     # 0xf86c2
callq 0x22ab0
movl 0x40(%r15), %eax
movq 0xa8(%r15), %rcx
movq 0x15c8(%rcx), %rdx
subq 0x15c0(%rcx), %rdx
decl %eax
shrq $0x3, %rdx
imull %eax, %edx
leal (%rbx,%rdx), %esi
incl %esi
movq %r12, %rdi
callq 0x22650
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
leaq 0xa119b(%rip), %rsi     # 0xfe560
callq 0x22ab0
movl 0x40(%r15), %esi
movq %r14, %rdi
callq 0x22650
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
leaq 0xa42b2(%rip), %rsi     # 0x10169a
callq 0x22ab0
movq %r14, %rdi
movq %rbx, %rsi
callq 0x22650
movq %rax, %r14
movl $0x10, %edx
movq %rax, %rdi
leaq 0x9b2e4(%rip), %rsi     # 0xf86ee
callq 0x22ab0
movq %r14, %rdi
movq %r13, %rsi
callq 0x22650
movl $0x11, %edx
movq %rax, %rdi
leaq 0x9b2d6(%rip), %rsi     # 0xf86ff
callq 0x22ab0
incl %ebx
movq 0xa8(%r15), %rax
movq 0x15c8(%rax), %rcx
subq 0x15c0(%rax), %rcx
shrq $0x3, %rcx
cmpl %ecx, %ebx
jbe 0x5d32c
jmp 0x5df12
movq 0x48(%r15), %rcx
movq 0x50(%r15), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r13, %rdx
jbe 0x5e385
cmpq $0x0, (%rcx,%r13,8)
je 0x5d5b4
cmpl $0x3, 0x1614(%rax)
jb 0x5d520
movl $0x2b, %edx
movq %r12, %rdi
leaq 0x9b22d(%rip), %rsi     # 0xf86c2
callq 0x22ab0
movq %r12, %rdi
movl 0xc(%rsp), %esi
callq 0x231e0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0xa10a8(%rip), %rsi     # 0xfe560
callq 0x22ab0
movl 0x40(%r15), %esi
movq %rbx, %rdi
callq 0x22650
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0xa41bf(%rip), %rsi     # 0x10169a
callq 0x22ab0
movq %rbx, %rdi
movq %r13, %rsi
callq 0x22650
movq %rax, %rbx
movl $0x10, %edx
movq %rax, %rdi
leaq 0x9b1f1(%rip), %rsi     # 0xf86ee
callq 0x22ab0
movl %ebp, %esi
movq %rbx, %rdi
callq 0x22650
movl $0xf, %edx
movq %rax, %rdi
leaq 0x9b1f6(%rip), %rsi     # 0xf8711
callq 0x22ab0
movq 0x48(%r15), %rax
movq 0x50(%r15), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %r13, %rdx
jbe 0x5e38a
movq (%rax,%r13,8), %rdi
movl %ebp, %esi
xorl %edx, %edx
callq 0x562a0
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5df12
movl $0x2a, %edx
movq %r12, %rdi
leaq 0x9b1b9(%rip), %rsi     # 0xf8721
callq 0x22ab0
movq %r12, %rdi
movq 0x20(%rsp), %rsi
callq 0x22650
movq %rax, %rbx
movl $0xf, %edx
movq %rax, %rdi
leaq 0x9b163(%rip), %rsi     # 0xf86ef
callq 0x22ab0
movl %ebp, %esi
movq %rbx, %rdi
callq 0x22650
movl $0x11, %edx
movq %rax, %rdi
leaq 0x9b155(%rip), %rsi     # 0xf86ff
callq 0x22ab0
jmp 0x5df12
leaq 0x248(%rsp), %rbx
movq %rbx, %rdi
movl 0xc(%rsp), %esi
callq 0xbee9e
movl $0x26, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x9b170(%rip), %rcx     # 0xf874c
callq 0x22a80
leaq 0x230(%rsp), %r14
movq %r14, 0x220(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x5d615
movq %rdx, 0x220(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x230(%rsp)
jmp 0x5d61c
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x10(%rsp), %rbx
leaq 0x150(%rsp), %r13
movq 0x8(%rax), %rdx
movq %rdx, 0x228(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x220(%rsp), %rdi
leaq 0xa0f0d(%rip), %rsi     # 0xfe560
callq 0x233b0
movq %r13, 0x140(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x5d684
movq %rdx, 0x140(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x150(%rsp)
jmp 0x5d68c
movups (%rcx), %xmm0
movups %xmm0, (%r13)
movq 0x8(%rax), %rdx
movq %rdx, 0x148(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl 0x40(%r15), %esi
leaq 0x200(%rsp), %rdi
callq 0xc03b8
movq 0x140(%rsp), %rcx
movl $0xf, %esi
cmpq %r13, %rcx
je 0x5d6d2
movq 0x150(%rsp), %rsi
movq 0x148(%rsp), %r8
movq 0x208(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x5d70f
movl $0xf, %esi
leaq 0x210(%rsp), %rdi
cmpq %rdi, 0x200(%rsp)
je 0x5d70a
movq 0x210(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x5d726
movq 0x200(%rsp), %rsi
leaq 0x140(%rsp), %rdi
callq 0x222b0
jmp 0x5d737
leaq 0x200(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x90(%rsp), %rsi
movq %rsi, 0x80(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x5d768
movq %rdx, 0x80(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x90(%rsp)
jmp 0x5d76e
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x88(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x80(%rsp), %rdi
leaq 0x9afd6(%rip), %rsi     # 0xf8773
callq 0x233b0
leaq 0xf0(%rsp), %rsi
movq %rsi, 0xe0(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x5d7d6
movq %rdx, 0xe0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xf0(%rsp)
jmp 0x5d7dc
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0xe8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1e0(%rsp), %rdi
movl %ebx, %esi
callq 0xc03b8
movq 0xe0(%rsp), %rcx
movl $0xf, %esi
leaq 0xf0(%rsp), %rax
cmpq %rax, %rcx
je 0x5d828
movq 0xf0(%rsp), %rsi
movq 0xe8(%rsp), %r8
movq 0x1e8(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x5d865
movl $0xf, %esi
leaq 0x1f0(%rsp), %rdi
cmpq %rdi, 0x1e0(%rsp)
je 0x5d860
movq 0x1f0(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x5d87c
movq 0x1e0(%rsp), %rsi
leaq 0xe0(%rsp), %rdi
callq 0x222b0
jmp 0x5d88d
leaq 0x1e0(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0xb0(%rsp), %rsi
movq %rsi, 0xa0(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x5d8be
movq %rdx, 0xa0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xb0(%rsp)
jmp 0x5d8c4
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0xa8(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0xa0(%rsp), %rdi
leaq 0x9ae83(%rip), %rsi     # 0xf8776
callq 0x233b0
leaq 0x110(%rsp), %rsi
movq %rsi, 0x100(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x5d92c
movq %rdx, 0x100(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x110(%rsp)
jmp 0x5d932
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x108(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl 0x40(%r15), %esi
leaq 0x1c0(%rsp), %rdi
callq 0xc03b8
movq 0x100(%rsp), %rcx
movl $0xf, %esi
leaq 0x110(%rsp), %rax
cmpq %rax, %rcx
je 0x5d980
movq 0x110(%rsp), %rsi
movq 0x108(%rsp), %r8
movq 0x1c8(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x5d9bd
movl $0xf, %esi
leaq 0x1d0(%rsp), %rdi
cmpq %rdi, 0x1c0(%rsp)
je 0x5d9b8
movq 0x1d0(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x5d9d4
movq 0x1c0(%rsp), %rsi
leaq 0x100(%rsp), %rdi
callq 0x222b0
jmp 0x5d9e5
leaq 0x1c0(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0xd0(%rsp), %rsi
movq %rsi, 0xc0(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x5da16
movq %rdx, 0xc0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xd0(%rsp)
jmp 0x5da1c
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0xc8(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0xc0(%rsp), %rdi
leaq 0x9b28d(%rip), %rsi     # 0xf8cd8
callq 0x233b0
leaq 0x130(%rsp), %rsi
movq %rsi, 0x120(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x5da84
movq %rdx, 0x120(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x130(%rsp)
jmp 0x5da8a
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x128(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1a0(%rsp), %rdi
movl %ebx, %esi
callq 0xc03b8
movq 0x120(%rsp), %rcx
movl $0xf, %esi
leaq 0x130(%rsp), %rax
cmpq %rax, %rcx
je 0x5dad6
movq 0x130(%rsp), %rsi
movq 0x128(%rsp), %r8
movq 0x1a8(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
leaq 0x170(%rsp), %rbx
jbe 0x5db1b
movl $0xf, %esi
leaq 0x1b0(%rsp), %rdi
cmpq %rdi, 0x1a0(%rsp)
je 0x5db16
movq 0x1b0(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x5db32
movq 0x1a0(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x222b0
jmp 0x5db43
leaq 0x1a0(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x70(%rsp), %rsi
movq %rsi, 0x60(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x5db68
movq %rdx, 0x60(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x70(%rsp)
jmp 0x5db6e
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x68(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x60(%rsp), %rdi
leaq 0x9abed(%rip), %rsi     # 0xf8784
callq 0x233b0
leaq 0x48(%rsp), %rsi
movq %rsi, 0x38(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x5dbc4
movq %rdx, 0x38(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x48(%rsp)
jmp 0x5dbca
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x40(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x180(%rsp), %rdi
movl 0xc(%rsp), %esi
callq 0xbee9e
movq 0x38(%rsp), %rcx
movl $0xf, %esi
leaq 0x48(%rsp), %rax
cmpq %rax, %rcx
je 0x5dc0c
movq 0x48(%rsp), %rsi
movq 0x40(%rsp), %r8
movq 0x188(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x5dc46
movl $0xf, %esi
leaq 0x190(%rsp), %rdi
cmpq %rdi, 0x180(%rsp)
je 0x5dc41
movq 0x190(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x5dc5a
movq 0x180(%rsp), %rsi
leaq 0x38(%rsp), %rdi
callq 0x222b0
jmp 0x5dc6b
leaq 0x180(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
movq %rbx, 0x160(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x5dc94
movq %rdx, 0x160(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x170(%rsp)
jmp 0x5dc9a
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x168(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x160(%rsp), %rdi
callq 0xc0396
movq 0x160(%rsp), %rdi
cmpq %rbx, %rdi
je 0x5dce4
movq 0x170(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x180(%rsp), %rdi
leaq 0x190(%rsp), %rax
cmpq %rax, %rdi
je 0x5dd09
movq 0x190(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x5dd25
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x5dd41
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x1a0(%rsp), %rdi
leaq 0x1b0(%rsp), %rax
cmpq %rax, %rdi
je 0x5dd66
movq 0x1b0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x120(%rsp), %rdi
leaq 0x130(%rsp), %rax
cmpq %rax, %rdi
je 0x5dd8b
movq 0x130(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xc0(%rsp), %rdi
leaq 0xd0(%rsp), %rax
cmpq %rax, %rdi
je 0x5ddb0
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x1c0(%rsp), %rdi
leaq 0x1d0(%rsp), %rax
cmpq %rax, %rdi
je 0x5ddd5
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x100(%rsp), %rdi
leaq 0x110(%rsp), %rax
cmpq %rax, %rdi
je 0x5ddfa
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xa0(%rsp), %rdi
leaq 0xb0(%rsp), %rax
cmpq %rax, %rdi
je 0x5de1f
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x1e0(%rsp), %rdi
leaq 0x1f0(%rsp), %rax
cmpq %rax, %rdi
je 0x5de44
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xe0(%rsp), %rdi
leaq 0xf0(%rsp), %rax
cmpq %rax, %rdi
je 0x5de69
movq 0xf0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
je 0x5de8e
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x200(%rsp), %rdi
leaq 0x210(%rsp), %rax
cmpq %rax, %rdi
je 0x5deb3
movq 0x210(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x140(%rsp), %rdi
cmpq %r13, %rdi
je 0x5ded0
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x220(%rsp), %rdi
cmpq %r14, %rdi
je 0x5deed
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x248(%rsp), %rdi
leaq 0x258(%rsp), %rax
cmpq %rax, %rdi
je 0x5df12
movq 0x258(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5df6a
movl $0x1d, %edx
movq %r12, %rdi
leaq 0x9a85f(%rip), %rsi     # 0xf8790
callq 0x22ab0
movl %ebp, %esi
movq %r12, %rdi
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
incl %ebp
movq 0xa8(%r15), %rax
cmpl 0x1658(%rax), %ebp
movq 0x20(%rsp), %r13
jbe 0x5d2c5
cmpb $0x1, 0x50(%rax)
jne 0x5dfff
movq 0xa8(%r15), %rax
xorl %ebx, %ebx
movl $0x14e0, %r14d          # imm = 0x14E0
leaq 0x94009(%rip), %rbp     # 0xf1fa9
movl %ebx, %ebx
movq 0x48(%r15), %rcx
movq 0x50(%r15), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %rbx, %rdx
jbe 0x5e36e
cmpq $0x0, (%rcx,%rbx,8)
je 0x5dfde
cmpl $0x2, 0x1658(%rax)
jb 0x5dfd4
movq %r15, %rdi
movl %ebx, %esi
callq 0x5a290
movq %r15, %rdi
movl %ebx, %esi
callq 0x5e6c0
incl %ebx
movq 0xa8(%r15), %rax
movq 0x15c8(%rax), %rcx
subq 0x15c0(%rax), %rcx
shrq $0x3, %rcx
cmpl %ecx, %ebx
jbe 0x5dfa0
jmp 0x5e044
movq 0x48(%r15), %rax
movq 0x50(%r15), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %r13, %rdx
movl $0x14e0, %r14d          # imm = 0x14E0
leaq 0x93f8b(%rip), %rbp     # 0xf1fa9
jbe 0x5e39b
cmpq $0x0, (%rax,%r13,8)
movq 0x10(%rsp), %rbx
je 0x5e03a
movq %r15, %rdi
movl %ebx, %esi
callq 0x5a290
movq %r15, %rdi
movl %ebx, %esi
callq 0x5e6c0
movb 0x18(%rsp), %bl
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5e094
movl $0x27, %edx
movq %r12, %rdi
leaq 0x9a747(%rip), %rsi     # 0xf87ae
callq 0x22ab0
movq (%r12), %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
movq 0xa8(%r15), %rax
cmpl $0x5, 0x1614(%rax)
jb 0x5e0e0
movl $0x10, %edx
movq %r12, %rdi
leaq 0x9a723(%rip), %rsi     # 0xf87d6
callq 0x22ab0
movq (%r12), %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
movq 0xa8(%r15), %rdi
addq %r14, %rdi
movq %rbp, %rsi
callq 0x22250
movq 0xa8(%r15), %rdi
testl %eax, %eax
je 0x5e16d
addq $0x14e0, %rdi           # imm = 0x14E0
leaq 0xa0df7(%rip), %rsi     # 0xfef02
callq 0x22250
movq 0xa8(%r15), %rdi
testl %eax, %eax
je 0x5e1e7
addq $0x14e0, %rdi           # imm = 0x14E0
leaq 0xcfdee(%rip), %rsi     # 0x12df1b
callq 0x22250
movq 0xa8(%r15), %rdi
testl %eax, %eax
je 0x5e25e
addq $0x14e0, %rdi           # imm = 0x14E0
leaq 0x93e5d(%rip), %rsi     # 0xf1fac
callq 0x22250
testl %eax, %eax
jne 0x5e2fc
movq %r15, %rdi
xorl %esi, %esi
callq 0x6339e
movl %eax, %ebx
jmp 0x5e2fc
cmpl $0x3, 0x1614(%rdi)
jb 0x5e1b2
movl $0x21, %edx
movq %r12, %rdi
leaq 0x9a662(%rip), %rsi     # 0xf87e7
callq 0x22ab0
movq (%r12), %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
movq %r15, %rdi
movq 0x10(%rsp), %rsi
callq 0x5f046
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5e2fc
movl $0x1a, %edx
movq %r12, %rdi
leaq 0x9a627(%rip), %rsi     # 0xf8809
jmp 0x5e2cf
cmpl $0x3, 0x1614(%rdi)
jb 0x5e22c
movl $0x22, %edx
movq %r12, %rdi
leaq 0x9a625(%rip), %rsi     # 0xf8824
callq 0x22ab0
movq (%r12), %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
movq %r15, %rdi
movq 0x10(%rsp), %rsi
callq 0x61264
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5e2fc
movl $0x1e, %edx
movq %r12, %rdi
leaq 0x9a5eb(%rip), %rsi     # 0xf8847
jmp 0x5e2cf
cmpl $0x3, 0x1614(%rdi)
jb 0x5e2a3
movl $0x21, %edx
movq %r12, %rdi
leaq 0x9a5f0(%rip), %rsi     # 0xf8866
callq 0x22ab0
movq (%r12), %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
movq %r15, %rdi
movq 0x10(%rsp), %rsi
callq 0x6339e
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5e2fc
movl $0x1d, %edx
movq %r12, %rdi
leaq 0x9a5b9(%rip), %rsi     # 0xf8888
callq 0x22ab0
movq (%r12), %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
movq 0xa8(%r15), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x5e348
movl $0x23, %edx
movq %r12, %rdi
leaq 0x9a58b(%rip), %rsi     # 0xf88a6
callq 0x22ab0
movq (%r12), %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
testb $0x1, %bl
je 0x5d1ec
incl 0xb0(%r15)
jmp 0x5d1ec
leaq 0x95361(%rip), %rdi     # 0xf36c5
movq %rbx, %rsi
xorl %eax, %eax
callq 0x22f40
jmp 0x5e35d
leaq 0x9534e(%rip), %rdi     # 0xf36c5
jmp 0x5e367
leaq 0x943db(%rip), %rdi     # 0xf275b
callq 0x225a0
jmp 0x5ce01
jmp 0x5ce01
leaq 0x943c5(%rip), %rdi     # 0xf275b
callq 0x22e40
jmp 0x5ce01
movq %rax, %r15
jmp 0x5e55b
movq %rax, %r15
jmp 0x5e580
movq %rax, %r15
jmp 0x5e5a5
movq %rax, %r15
jmp 0x5e5ca
movq %rax, %r15
jmp 0x5e5ef
movq %rax, %r15
movq 0x160(%rsp), %rdi
cmpq %rbx, %rdi
je 0x5e3f5
movq 0x170(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x5e3f5
movq %rax, %r15
jmp 0x5e60c
movq %rax, %r15
movq 0x180(%rsp), %rdi
leaq 0x190(%rsp), %rax
cmpq %rax, %rdi
je 0x5e427
movq 0x190(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x5e427
movq %rax, %r15
jmp 0x5e629
movq %rax, %r15
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x5e448
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x5e448
movq %rax, %r15
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x5e469
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x5e469
movq %rax, %r15
movq 0x1a0(%rsp), %rdi
leaq 0x1b0(%rsp), %rax
cmpq %rax, %rdi
je 0x5e493
movq 0x1b0(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x5e493
movq %rax, %r15
movq 0x120(%rsp), %rdi
leaq 0x130(%rsp), %rax
cmpq %rax, %rdi
je 0x5e4bd
movq 0x130(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x5e4bd
movq %rax, %r15
movq 0xc0(%rsp), %rdi
leaq 0xd0(%rsp), %rax
cmpq %rax, %rdi
je 0x5e4e7
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x5e4e7
movq %rax, %r15
movq 0x1c0(%rsp), %rdi
leaq 0x1d0(%rsp), %rax
cmpq %rax, %rdi
je 0x5e511
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x5e511
movq %rax, %r15
movq 0x100(%rsp), %rdi
leaq 0x110(%rsp), %rax
cmpq %rax, %rdi
je 0x5e536
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xa0(%rsp), %rdi
leaq 0xb0(%rsp), %rax
cmpq %rax, %rdi
je 0x5e55b
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x1e0(%rsp), %rdi
leaq 0x1f0(%rsp), %rax
cmpq %rax, %rdi
je 0x5e580
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xe0(%rsp), %rdi
leaq 0xf0(%rsp), %rax
cmpq %rax, %rdi
je 0x5e5a5
movq 0xf0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
je 0x5e5ca
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x200(%rsp), %rdi
leaq 0x210(%rsp), %rax
cmpq %rax, %rdi
je 0x5e5ef
movq 0x210(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x140(%rsp), %rdi
cmpq %r13, %rdi
je 0x5e60c
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x220(%rsp), %rdi
cmpq %r14, %rdi
je 0x5e629
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x248(%rsp), %rdi
leaq 0x258(%rsp), %rax
cmpq %rax, %rdi
je 0x5e690
movq 0x258(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x5e690
movq %rax, %r15
jmp 0x5e536
movq %rax, %r15
movq 0x38(%rsp), %rdi
cmpq %r14, %rdi
je 0x5e690
movq 0x48(%rsp), %rsi
jmp 0x5e646
movq %rax, %r15
movq 0x28(%rsp), %rax
cmpl $0x0, (%rax)
jne 0x5e690
movl 0x30(%rsp), %ecx
movl %ecx, (%rax)
jmp 0x5e690
movq %rax, %r15
movq 0x28(%rsp), %rax
cmpl $0x0, (%rax)
jne 0x5e690
movl %ebp, (%rax)
movq %r15, %rdi
callq 0x23240