// File: /workspace/github_cpp_makefile_star2_O3/BenLangmead[P]bowtie/./aligner.h
// Function: PairedBWAlignerV1<EbwtRangeSource>::advanceOrientation(bool)
void advanceOrientation(bool pairFw) {
		assert(!this->done);
		assert(!*donePair_);
		assert(!*chaseL_ || !*chaseR_);
		if(*chaseL_) {
			assert(!rangeMode_);
			assert(!*delayedchaseL_);
			assert(drL_->foundRange);
			assert(rchase_->foundOff() || rchase_->done);
			if(rchase_->foundOff()) {
				// Resolve this against the reference loci
				// determined for the other mate
				const bool overThresh = (*offsLsz_ + *offsRsz_) > mixedThresh_;
				if(!this->done && (overThresh || dontReconcile_)) {
					// Because the total size of both ranges exceeds
					// our threshold, we're now operating in "mixed
					// mode"
					const Range& r = drL_->range();
					assert(r.repOk());
					if(verbose_) cout << "Making an attempt to find the outstanding mate" << endl;
					this->done = resolveOutstandingInRef(
							pairFw, rchase_->off(),
					        r.ebwt->_plen[rchase_->off().first], r);
					if(++mixedAttempts_ > mixedAttemptLim_) {
						// Give up on this pair
						*donePair_ = true;
						return;
					}
				}
				rchase_->reset();
			} else {
				assert(rchase_->done);
				// Forget this range; keep looking for ranges
				*chaseL_ = false;
				drL_->foundRange = false;
				if(verbose_) cout << "Done with chase for first mate" << endl;
				if(*delayedchaseR_) {
					// Start chasing the delayed range
					if(verbose_) cout << "Resuming delayed chase for second mate" << endl;
					assert(drR_->foundRange);
					const Range& r = drR_->range();
					assert(r.repOk());
					TIndexOffU top = r.top;
					TIndexOffU bot = r.bot;
					uint32_t qlen = doneFw_? qlen1_ : qlen2_;
					rchase_->setTopBot(top, bot, qlen, rand_, r.ebwt);
					*chaseR_ = true;
					*delayedchaseR_ = false;
				}
			}
		} else if(*chaseR_) {
			assert(!rangeMode_);
			assert(!*delayedchaseR_);
			assert(drR_->foundRange);
			assert(rchase_->foundOff() || rchase_->done);
			if(rchase_->foundOff()) {
				// Resolve this against the reference loci
				// determined for the other mate
				const bool overThresh = (*offsLsz_ + *offsRsz_) > mixedThresh_;
				if(!this->done && (overThresh || dontReconcile_)) {
					// Because the total size of both ranges exceeds
					// our threshold, we're now operating in "mixed
					// mode"
					const Range& r = drR_->range();
					if(verbose_) cout << "Making an attempt to find the outstanding mate" << endl;
					this->done = resolveOutstandingInRef(
							!pairFw, rchase_->off(),
					        r.ebwt->_plen[rchase_->off().first], r);
					if(++mixedAttempts_ > mixedAttemptLim_) {
						// Give up on this pair
						*donePair_ = true;
						return;
					}
				}
				rchase_->reset();
			} else {
				assert(rchase_->done);
				// Forget this range; keep looking for ranges
				*chaseR_ = false;
				drR_->foundRange = false;
				if(verbose_) cout << "Done with chase for second mate" << endl;
				if(*delayedchaseL_) {
					// Start chasing the delayed range
					if(verbose_) cout << "Resuming delayed chase for first mate" << endl;
					assert(drL_->foundRange);
					const Range& r = drL_->range();
					assert(r.repOk());
					TIndexOffU top = r.top;
					TIndexOffU bot = r.bot;
					uint32_t qlen = doneFw_? qlen2_ : qlen1_;
					rchase_->setTopBot(top, bot, qlen, rand_, r.ebwt);
					*chaseL_ = true;
					*delayedchaseL_ = false;
				}
			}
		}
		if(!this->done && !*donePair_ && !*chaseL_ && !*chaseR_) {
			// Search for more ranges for whichever mate currently has
			// fewer candidate alignments
			if((*offsLsz_ < *offsRsz_ || drR_->done) && !drL_->done) {
				// If there are no more ranges for the other mate and
				// there are no candidate alignments either, then we're
				// not going to find a paired alignment in this
				// orientation.
				if(drR_->done && *offsRsz_ == 0) {
					// Give up on this orientation
					if(verbose_) cout << "Giving up on paired orientation " << (pairFw? "fw" : "rc") << " in mate 1" << endl;
					*donePair_ = true;
					if(verbose2_) cout << *offsLsz_ << " " << *offsRsz_ << endl;
					return;
				}
				assert(!*delayedchaseL_);
				if(!drL_->foundRange) drL_->advance(ADV_FOUND_RANGE);
				if(drL_->foundRange) {
#ifndef NDEBUG
					{
						std::set<int64_t>& s = (pairFw ? allTopsL_fw_ : allTopsL_rc_);
						int64_t t = drL_->range().top + 1; // add 1 to avoid 0
						if(!drL_->range().ebwt->fw()) t = -t; // invert for bw index
						assert(s.find(t) == s.end());
						s.insert(t);
					}
#endif
					// Add the size of this range to the total for this mate
					*offsLsz_ += (drL_->range().bot - drL_->range().top);
					if(*offsRsz_ == 0 && (!dontReconcile_ || *offsLsz_ > 3)) {
						// Delay chasing this range; we delay to avoid
						// needlessly chasing rows in this range when
						// the other mate doesn't end up aligning
						// anywhere
						if(verbose_) cout << "Delaying a chase for first mate" << endl;
						*delayedchaseL_ = true;
					} else {
						// Start chasing this range
						if(verbose2_) cout << *offsLsz_ << " " << *offsRsz_ << " " << drL_->range().top << endl;
						if(verbose_) cout << "Chasing a range for first mate" << endl;
						if(*offsLsz_ > symCeiling_ && *offsRsz_ > symCeiling_) {
							// Too many candidates for both mates; abort
							// without any more searching
							*donePair_ = true;
							return;
						}
						// If this is the first range for both mates,
						// choose the smaller range to chase down first
						if(*delayedchaseR_ && (*offsRsz_ < *offsLsz_)) {
							assert(drR_->foundRange);
							*delayedchaseR_ = false;
							*delayedchaseL_ = true;
							*chaseR_ = true;
							const Range& r = drR_->range();
							assert(r.repOk());
							uint32_t qlen = doneFw_? qlen1_ : qlen2_;
							rchase_->setTopBot(r.top, r.bot, qlen, rand_, r.ebwt);
						} else {
							// Use Burrows-Wheeler for this pair (as
							// usual)
							*chaseL_ = true;
							const Range& r = drL_->range();
							uint32_t qlen = doneFw_? qlen2_ : qlen1_;
							rchase_->setTopBot(r.top, r.bot, qlen, rand_, r.ebwt);
						}
					}
				}
			} else if(!drR_->done) {
				// If there are no more ranges for the other mate and
				// there are no candidate alignments either, then we're
				// not going to find a paired alignment in this
				// orientation.
				if(drL_->done && *offsLsz_ == 0) {
					// Give up on this orientation
					if(verbose_) cout << "Giving up on paired orientation " << (pairFw? "fw" : "rc") << " in mate 2" << endl;
					if(verbose2_) cout << *offsLsz_ << " " << *offsRsz_ << endl;
					*donePair_ = true;
					return;
				}
				assert(!*delayedchaseR_);
				if(!drR_->foundRange) drR_->advance(ADV_FOUND_RANGE);
				if(drR_->foundRange) {
#ifndef NDEBUG
					{
						std::set<int64_t>& s = (pairFw ? allTopsR_fw_ : allTopsR_rc_);
						int64_t t = drR_->range().top + 1; // add 1 to avoid 0
						if(!drR_->range().ebwt->fw()) t = -t; // invert for bw index
						assert(s.find(t) == s.end());
						s.insert(t);
					}
#endif
					// Add the size of this range to the total for this mate
					*offsRsz_ += (drR_->range().bot - drR_->range().top);
					if(*offsLsz_ == 0 && (!dontReconcile_ || *offsRsz_ > 3)) {
						// Delay chasing this range; we delay to avoid
						// needlessly chasing rows in this range when
						// the other mate doesn't end up aligning
						// anywhere
						if(verbose_) cout << "Delaying a chase for second mate" << endl;
						*delayedchaseR_ = true;
					} else {
						// Start chasing this range
						if(verbose2_) cout << *offsLsz_ << " " << *offsRsz_ << " " << drR_->range().top << endl;
						if(verbose_) cout << "Chasing a range for second mate" << endl;
						if(*offsLsz_ > symCeiling_ && *offsRsz_ > symCeiling_) {
							// Too many candidates for both mates; abort
							// without any more searching
							*donePair_ = true;
							return;
						}
						// If this is the first range for both mates,
						// choose the smaller range to chase down first
						if(*delayedchaseL_ && *offsLsz_ < *offsRsz_) {
							assert(drL_->foundRange);
							*delayedchaseL_ = false;
							*delayedchaseR_ = true;
							*chaseL_ = true;
							const Range& r = drL_->range();
							assert(r.repOk());
							uint32_t qlen = doneFw_? qlen2_ : qlen1_;
							rchase_->setTopBot(r.top, r.bot, qlen, rand_, r.ebwt);
						} else {
							// Use Burrows-Wheeler for this pair (as
							// usual)
							*chaseR_ = true;
							const Range& r = drR_->range();
							assert(r.repOk());
							uint32_t qlen = doneFw_? qlen1_ : qlen2_;
							rchase_->setTopBot(r.top, r.bot, qlen, rand_, r.ebwt);
						}
					}
				}
			} else {
				// Finished processing ranges for both mates
				assert(drL_->done && drR_->done);
				*donePair_ = true;
			}
		}
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
movq 0x21d8(%rdi), %rcx
cmpb $0x1, (%rcx)
jne 0x3bc53
movq 0xb8(%rbx), %rax
cmpl $-0x1, 0x28(%rax)
je 0x3bd5f
cmpb $0x0, 0x8(%rbx)
jne 0x3bf59
movq 0x2228(%rbx), %rcx
movq 0x2230(%rbx), %rdx
movl (%rdx), %edx
addl (%rcx), %edx
cmpl 0xa8(%rbx), %edx
ja 0x3bbce
cmpb $0x1, 0xa0(%rbx)
jne 0x3bf59
movq 0x21f8(%rbx), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %r14
cmpb $0x1, 0xc0(%rbx)
jne 0x3bc29
movq 0x2e3c2(%rip), %r15     # 0x69fb0
leaq 0x1a0c9(%rip), %rsi     # 0x55cbe
movl $0x2e, %edx
movq %r15, %rdi
callq 0x9560
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x9480
movsbl %al, %esi
movq %r15, %rdi
callq 0x9050
movq %rax, %rdi
callq 0x92f0
movq 0xb8(%rbx), %rax
movq 0x28(%rax), %rax
movq %rsp, %rdx
movq %rax, (%rdx)
movq 0x58(%r14), %rcx
movq 0x80(%rcx), %rcx
movl %eax, %eax
movl (%rcx,%rax,4), %ecx
movzbl %bpl, %esi
jmp 0x3bd28
movq 0x21e0(%rbx), %rcx
cmpb $0x1, (%rcx)
jne 0x3bf60
movq 0xb8(%rbx), %rax
cmpl $-0x1, 0x28(%rax)
je 0x3be5a
cmpb $0x0, 0x8(%rbx)
jne 0x3bf59
movq 0x2228(%rbx), %rcx
movq 0x2230(%rbx), %rdx
movl (%rdx), %edx
addl (%rcx), %edx
cmpl 0xa8(%rbx), %edx
ja 0x3bca5
cmpb $0x1, 0xa0(%rbx)
jne 0x3bf59
movq 0x2200(%rbx), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movq %rax, %r14
cmpb $0x1, 0xc0(%rbx)
jne 0x3bd00
movq 0x2e2eb(%rip), %r15     # 0x69fb0
leaq 0x19ff2(%rip), %rsi     # 0x55cbe
movl $0x2e, %edx
movq %r15, %rdi
callq 0x9560
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x9480
movsbl %al, %esi
movq %r15, %rdi
callq 0x9050
movq %rax, %rdi
callq 0x92f0
movl %ebp, %eax
xorb $0x1, %al
movq 0xb8(%rbx), %rcx
movq 0x28(%rcx), %rcx
movq %rsp, %rdx
movq %rcx, (%rdx)
movq 0x58(%r14), %rsi
movq 0x80(%rsi), %rsi
movl %ecx, %ecx
movl (%rsi,%rcx,4), %ecx
movzbl %al, %esi
movq %rbx, %rdi
movq %r14, %r8
callq 0x3c54e
movb %al, 0x8(%rbx)
movl 0xb0(%rbx), %eax
incl %eax
movl %eax, 0xb0(%rbx)
cmpl 0xac(%rbx), %eax
jbe 0x3bf52
movq 0x2238(%rbx), %rax
movb $0x1, (%rax)
jmp 0x3c4f2
xorl %eax, %eax
movb %al, (%rcx)
movq 0x21f8(%rbx), %rcx
movb %al, 0x8(%rcx)
cmpb $0x1, 0xc0(%rbx)
jne 0x3bdb8
movq 0x2e233(%rip), %r14     # 0x69fb0
leaq 0x19f69(%rip), %rsi     # 0x55ced
movl $0x1e, %edx
movq %r14, %rdi
callq 0x9560
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x9480
movsbl %al, %esi
movq %r14, %rdi
callq 0x9050
movq %rax, %rdi
callq 0x92f0
movq 0x21f0(%rbx), %rax
cmpb $0x1, (%rax)
jne 0x3bf60
cmpb $0x1, 0xc0(%rbx)
jne 0x3be13
movq 0x2e1d8(%rip), %r14     # 0x69fb0
leaq 0x19f2d(%rip), %rsi     # 0x55d0c
movl $0x26, %edx
movq %r14, %rdi
callq 0x9560
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x9480
movsbl %al, %esi
movq %r14, %rdi
callq 0x9050
movq %rax, %rdi
callq 0x92f0
movq 0x2200(%rbx), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movl (%rax), %esi
movl 0x4(%rax), %edx
movzbl 0x68(%rbx), %ecx
xorl $0x1, %ecx
movl 0x60(%rbx,%rcx,4), %ecx
movq 0xb8(%rbx), %rdi
leaq 0x38(%rbx), %r8
movq 0x58(%rax), %r9
callq 0x3112c
movq 0x21e0(%rbx), %rax
movb $0x1, (%rax)
movq 0x21f0(%rbx), %rax
jmp 0x3bf4d
xorl %eax, %eax
movb %al, (%rcx)
movq 0x2200(%rbx), %rcx
movb %al, 0x8(%rcx)
cmpb $0x1, 0xc0(%rbx)
jne 0x3beb3
movq 0x2e138(%rip), %r14     # 0x69fb0
leaq 0x19eb4(%rip), %rsi     # 0x55d33
movl $0x1f, %edx
movq %r14, %rdi
callq 0x9560
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x9480
movsbl %al, %esi
movq %r14, %rdi
callq 0x9050
movq %rax, %rdi
callq 0x92f0
movq 0x21e8(%rbx), %rax
cmpb $0x1, (%rax)
jne 0x3bf60
cmpb $0x1, 0xc0(%rbx)
jne 0x3bf0e
movq 0x2e0dd(%rip), %r14     # 0x69fb0
leaq 0x19e79(%rip), %rsi     # 0x55d53
movl $0x25, %edx
movq %r14, %rdi
callq 0x9560
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x9480
movsbl %al, %esi
movq %r14, %rdi
callq 0x9050
movq %rax, %rdi
callq 0x92f0
movq 0x21f8(%rbx), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movl (%rax), %esi
movl 0x4(%rax), %edx
movzbl 0x68(%rbx), %ecx
movl 0x60(%rbx,%rcx,4), %ecx
movq 0xb8(%rbx), %rdi
leaq 0x38(%rbx), %r8
movq 0x58(%rax), %r9
callq 0x3112c
movq 0x21d8(%rbx), %rax
movb $0x1, (%rax)
movq 0x21e8(%rbx), %rax
movb $0x0, (%rax)
jmp 0x3bf60
movq 0xb8(%rbx), %rax
movl $0xffffffff, 0x28(%rax) # imm = 0xFFFFFFFF
cmpb $0x0, 0x8(%rbx)
jne 0x3c4f2
movq 0x2238(%rbx), %rcx
cmpb $0x0, (%rcx)
jne 0x3c4f2
movq 0x21d8(%rbx), %rax
cmpb $0x0, (%rax)
jne 0x3c4f2
movq 0x21e0(%rbx), %rax
cmpb $0x0, (%rax)
jne 0x3c4f2
movq 0x2228(%rbx), %rax
movq 0x2230(%rbx), %rsi
movl (%rax), %edx
movl (%rsi), %r8d
cmpl %r8d, %edx
jb 0x3bfc3
movq 0x2200(%rbx), %rdi
movb 0x9(%rdi), %sil
cmpb $0x1, %sil
jne 0x3bfdb
movq 0x21f8(%rbx), %rax
movq 0x2200(%rbx), %rdi
movb 0x9(%rdi), %sil
cmpb $0x0, 0x9(%rax)
je 0x3bfed
testb $0x1, %sil
je 0x3c0c5
movb $0x1, (%rcx)
jmp 0x3c4f2
notb %sil
testl %r8d, %r8d
setne %dl
orb %sil, %dl
testb $0x1, %dl
jne 0x3c197
cmpb $0x1, 0xc0(%rbx)
jne 0x3c06b
movq 0x2df9e(%rip), %r14     # 0x69fb0
leaq 0x19d60(%rip), %rsi     # 0x55d79
movl $0x20, %edx
movq %r14, %rdi
callq 0x9560
leaq 0x17b64(%rip), %rax     # 0x53b91
leaq 0x17b62(%rip), %rsi     # 0x53b96
testb %bpl, %bpl
cmovneq %rax, %rsi
movl $0x2, %edx
movq %r14, %rdi
callq 0x9560
leaq 0x19d4b(%rip), %rsi     # 0x55d9a
movl $0xa, %edx
movq %r14, %rdi
callq 0x9560
movq %r14, %rdi
callq 0x91f0
movq 0x2238(%rbx), %rcx
movb $0x1, (%rcx)
cmpb $0x1, 0x22a8(%rbx)
jne 0x3c4f2
movq 0x2228(%rbx), %rax
movl (%rax), %esi
movq 0x2df25(%rip), %rdi     # 0x69fb0
callq 0x92e0
movq %rax, %r14
leaq 0x19e03(%rip), %rsi     # 0x55e9d
movl $0x1, %edx
movq %rax, %rdi
callq 0x9560
movq 0x2230(%rbx), %rax
movl (%rax), %esi
movq %r14, %rdi
callq 0x92e0
movq %rax, %rdi
callq 0x91f0
jmp 0x3c4f2
testl %edx, %edx
jne 0x3c2f7
movq 0x21f8(%rbx), %rax
cmpb $0x0, 0x9(%rax)
je 0x3c2f7
cmpb $0x1, 0xc0(%rbx)
jne 0x3c140
movq 0x2dec2(%rip), %r14     # 0x69fb0
leaq 0x19c84(%rip), %rsi     # 0x55d79
movl $0x20, %edx
movq %r14, %rdi
callq 0x9560
leaq 0x17a88(%rip), %rax     # 0x53b91
leaq 0x17a86(%rip), %rsi     # 0x53b96
testb %bpl, %bpl
cmovneq %rax, %rsi
movl $0x2, %edx
movq %r14, %rdi
callq 0x9560
leaq 0x19cb9(%rip), %rsi     # 0x55de4
movl $0xa, %edx
movq %r14, %rdi
callq 0x9560
movq %r14, %rdi
callq 0x91f0
cmpb $0x1, 0x22a8(%rbx)
jne 0x3bd50
movq 0x2228(%rbx), %rax
movl (%rax), %esi
movq 0x2de53(%rip), %rdi     # 0x69fb0
callq 0x92e0
movq %rax, %r14
leaq 0x19d31(%rip), %rsi     # 0x55e9d
movl $0x1, %edx
movq %rax, %rdi
callq 0x9560
movq 0x2230(%rbx), %rax
movl (%rax), %esi
movq %r14, %rdi
callq 0x92e0
movq %rax, %rdi
callq 0x91f0
jmp 0x3bd50
movb 0x8(%rax), %cl
testb %cl, %cl
jne 0x3c1b6
movq (%rax), %rcx
movq %rax, %rdi
movl $0x1, %esi
callq *0x20(%rcx)
movq 0x21f8(%rbx), %rax
movb 0x8(%rax), %cl
testb $0x1, %cl
je 0x3c4f2
movq (%rax), %rcx
movq %rax, %rdi
callq *0x30(%rcx)
movl 0x4(%rax), %ebp
movq 0x21f8(%rbx), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
subl (%rax), %ebp
movq 0x2228(%rbx), %rax
addl %ebp, (%rax)
movq 0x2230(%rbx), %rax
cmpl $0x0, (%rax)
je 0x3c463
cmpb $0x1, 0x22a8(%rbx)
jne 0x3c26e
movq 0x2228(%rbx), %rax
movl (%rax), %esi
movq 0x2dda4(%rip), %rdi     # 0x69fb0
callq 0x92e0
movq %rax, %r14
leaq 0x19c82(%rip), %r15     # 0x55e9d
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x9560
movq 0x2230(%rbx), %rax
movl (%rax), %esi
movq %r14, %rdi
callq 0x92e0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x9560
movq 0x21f8(%rbx), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movl (%rax), %esi
movq %r14, %rdi
callq 0x92e0
movq %rax, %rdi
callq 0x91f0
cmpb $0x1, 0xc0(%rbx)
jne 0x3c29a
movq 0x2dd32(%rip), %r14     # 0x69fb0
leaq 0x19b40(%rip), %rsi     # 0x55dc5
movl $0x1e, %edx
movq %r14, %rdi
callq 0x9560
movq %r14, %rdi
callq 0x91f0
movq 0x2228(%rbx), %rax
movl (%rax), %eax
movl 0xa4(%rbx), %ecx
cmpl %ecx, %eax
jbe 0x3c2bc
movq 0x2230(%rbx), %rdx
cmpl %ecx, (%rdx)
ja 0x3bd50
movq 0x21f0(%rbx), %rcx
cmpb $0x1, (%rcx)
jne 0x3c446
movq 0x2230(%rbx), %rdx
cmpl %eax, (%rdx)
jae 0x3c446
movb $0x0, (%rcx)
movq 0x21e8(%rbx), %rax
movb $0x1, %cl
movb %cl, (%rax)
movq 0x21e0(%rbx), %rax
movb %cl, (%rax)
jmp 0x3c4be
movb 0x8(%rdi), %al
testb %al, %al
jne 0x3c313
movq (%rdi), %rax
movl $0x1, %esi
callq *0x20(%rax)
movq 0x2200(%rbx), %rdi
movb 0x8(%rdi), %al
testb $0x1, %al
je 0x3c4f2
movq (%rdi), %rax
callq *0x30(%rax)
movl 0x4(%rax), %ebp
movq 0x2200(%rbx), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
subl (%rax), %ebp
movq 0x2230(%rbx), %rax
addl %ebp, (%rax)
movq 0x2228(%rbx), %rax
movl (%rax), %esi
testq %rsi, %rsi
je 0x3c4fd
cmpb $0x1, 0x22a8(%rbx)
jne 0x3c3c0
movq 0x2dc52(%rip), %rdi     # 0x69fb0
callq 0x92e0
movq %rax, %r14
leaq 0x19b30(%rip), %r15     # 0x55e9d
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x9560
movq 0x2230(%rbx), %rax
movl (%rax), %esi
movq %r14, %rdi
callq 0x92e0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x9560
movq 0x2200(%rbx), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movl (%rax), %esi
movq %r14, %rdi
callq 0x92e0
movq %rax, %rdi
callq 0x91f0
cmpb $0x1, 0xc0(%rbx)
jne 0x3c3ec
movq 0x2dbe0(%rip), %r14     # 0x69fb0
leaq 0x19a39(%rip), %rsi     # 0x55e10
movl $0x1f, %edx
movq %r14, %rdi
callq 0x9560
movq %r14, %rdi
callq 0x91f0
movq 0x2228(%rbx), %rax
movl (%rax), %eax
movl 0xa4(%rbx), %ecx
cmpl %ecx, %eax
jbe 0x3c40e
movq 0x2230(%rbx), %rdx
cmpl %ecx, (%rdx)
ja 0x3bd50
movq 0x21e8(%rbx), %rcx
cmpb $0x1, (%rcx)
jne 0x3c4b4
movq 0x2230(%rbx), %rdx
cmpl (%rdx), %eax
jae 0x3c4b4
movb $0x0, (%rcx)
movq 0x21f0(%rbx), %rax
movb $0x1, %cl
movb %cl, (%rax)
movq 0x21d8(%rbx), %rax
movb %cl, (%rax)
jmp 0x3c450
movq 0x21d8(%rbx), %rax
movb $0x1, (%rax)
movq 0x21f8(%rbx), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movzbl 0x68(%rbx), %ecx
jmp 0x3c4d2
cmpb $0x1, 0xa0(%rbx)
jne 0x3c47c
movq 0x2228(%rbx), %rax
cmpl $0x4, (%rax)
jb 0x3c1f3
cmpb $0x1, 0xc0(%rbx)
jne 0x3c4a8
movq 0x2db24(%rip), %r14     # 0x69fb0
leaq 0x19912(%rip), %rsi     # 0x55da5
movl $0x1f, %edx
movq %r14, %rdi
callq 0x9560
movq %r14, %rdi
callq 0x91f0
movq 0x21e8(%rbx), %rax
jmp 0x3bd57
movq 0x21e0(%rbx), %rax
movb $0x1, (%rax)
movq 0x2200(%rbx), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movzbl 0x68(%rbx), %ecx
xorl $0x1, %ecx
movl 0x60(%rbx,%rcx,4), %ecx
movq 0xb8(%rbx), %rdi
movl (%rax), %esi
movl 0x4(%rax), %edx
addq $0x38, %rbx
movq 0x58(%rax), %r9
movq %rbx, %r8
callq 0x3112c
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
cmpb $0x1, 0xa0(%rbx)
jne 0x3c516
movq 0x2230(%rbx), %rax
cmpl $0x4, (%rax)
jb 0x3c34e
cmpb $0x1, 0xc0(%rbx)
jne 0x3c542
movq 0x2da8a(%rip), %r14     # 0x69fb0
leaq 0x198c2(%rip), %rsi     # 0x55def
movl $0x20, %edx
movq %r14, %rdi
callq 0x9560
movq %r14, %rdi
callq 0x91f0
movq 0x21f0(%rbx), %rax
jmp 0x3bd57