// File: /workspace/github_cpp_makefile_star2_O3/BenLangmead[P]bowtie/./blockwise_sa.h
// Function: KarkkainenBlockwiseSA<SString<char>>::nextBlock(int, int)
void KarkkainenBlockwiseSA<TStr>::nextBlock(int cur_block, int tid) {
#ifndef NDEBUG
	if(this->_nthreads > 1) {
		assert_lt((size_t)tid, this->_itrBuckets.size());
	}
#endif
	EList<TIndexOffU>& bucket = (this->_nthreads > 1 ? this->_itrBuckets[tid] : this->_itrBucket);
	{
		ThreadSafe ts(&_mutex);
		VMSG_NL("Getting block " << (cur_block+1) << " of " << _sampleSuffs.size()+1);
	}
	assert(_built);
	assert_gt(_dcV, 3);
	assert_leq((size_t)cur_block, _sampleSuffs.size());
	const TStr& t = this->text();
	TIndexOffU len = (TIndexOffU)t.length();
	// Set up the bucket
	bucket.clear();
	TIndexOffU lo = OFF_MASK, hi = OFF_MASK;
	if(_sampleSuffs.size() == 0) {
		// Special case: if _sampleSuffs is 0, then multikey-quicksort
		// everything
		{
			ThreadSafe ts(&_mutex);
			VMSG_NL("  No samples; assembling all-inclusive block");
		}
		assert_eq(0, cur_block);
		try {
			if(bucket.capacity() < this->bucketSz()) {
				bucket.reserveExact(len+1);
			}
			bucket.resize(len);
			for(TIndexOffU i = 0; i < len; i++) {
				bucket[i] = i;
			}
		} catch(bad_alloc &e) {
			if(this->_passMemExc) {
				throw e; // rethrow immediately
			} else {
				cerr << "Could not allocate a master suffix-array block of " << ((len+1) * 4) << " bytes" << endl
				     << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
				     << "a larger --bmaxdivn" << endl;
				throw 1;
			}
		}
	} else {
		try {
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  Reserving size (" << this->bucketSz() << ") for bucket " << (cur_block+1));
			}
			// BTL: Add a +100 fudge factor; there seem to be instances
			// where a bucket ends up having one more elt than bucketSz()
			if(bucket.size() < this->bucketSz()+100) {
				bucket.reserveExact(this->bucketSz()+100);
			}
		} catch(bad_alloc &e) {
			if(this->_passMemExc) {
				throw e; // rethrow immediately
			} else {
				cerr << "Could not allocate a suffix-array block of " << ((this->bucketSz()+1) * 4) << " bytes" << endl;
				cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
				     << "a larger --bmaxdivn" << endl;
				throw 1;
			}
		}
		// Select upper and lower bounds from _sampleSuffs[] and
		// calculate the Z array up to the difference-cover periodicity
		// for both.  Be careful about first/last buckets.

		//String<TIndexOffU> zLo(EBWTB_CAT), zHi(EBWTB_CAT);
		EList<TIndexOffU> zLo, zHi;
		assert_geq(cur_block, 0);
		assert_leq((size_t)cur_block, _sampleSuffs.size());
		bool first = (cur_block == 0);
		bool last  = ((size_t)cur_block == _sampleSuffs.size());
		try {
			// Timer timer(cout, "  Calculating Z arrays time: ", this->verbose());
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  Calculating Z arrays for bucket " << (cur_block+1));
			}
			if(!last) {
				// Not the last bucket
				assert_lt((size_t)cur_block, _sampleSuffs.size());
				hi = _sampleSuffs[cur_block];
				zHi.resizeExact(_dcV);
				zHi.fillZero();
				assert_eq(zHi[0], 0);
				calcZ(t, hi, zHi, this->verbose(), this->sanityCheck());
			}
			if(!first) {
				// Not the first bucket
				assert_gt(cur_block, 0);
				assert_leq((size_t)cur_block, _sampleSuffs.size());
				lo = _sampleSuffs[cur_block-1];
				zLo.resizeExact(_dcV);
				zLo.fillZero();
				assert_gt(_dcV, 3);
				assert_eq(zLo[0], 0);
				calcZ(t, lo, zLo, this->verbose(), this->sanityCheck());
			}
		} catch(bad_alloc &e) {
			if(this->_passMemExc) {
				throw e; // rethrow immediately
			} else {
				cerr << "Could not allocate a z-array of " << (_dcV * 4) << " bytes" << endl;
				cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
				     << "a larger --bmaxdivn" << endl;
				throw 1;
			}
		}

		// This is the most critical loop in the algorithm; this is where
		// we iterate over all suffixes in the text and pick out those that
		// fall into the current bucket.
		//
		// This loop is based on the SMALLERSUFFIXES function outlined on
		// p7 of the "Fast BWT" paper
		//
		int64_t kHi = -1, kLo = -1;
		int64_t jHi = -1, jLo = -1;
		bool kHiSoft = false, kLoSoft = false;
		assert_eq(0, bucket.size());
		{
			// Timer timer(cout, "  Block accumulator loop time: ", this->verbose());
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  Entering block accumulator loop for bucket " << (cur_block+1) << ":");
			}
			TIndexOffU lenDiv10 = (len + 9) / 10;
			for(TIndexOffU iten = 0, ten = 0; iten < len; iten += lenDiv10, ten++) {
				TIndexOffU itenNext = iten + lenDiv10;
				{
					ThreadSafe ts(&_mutex);
					if(ten > 0) VMSG_NL("  bucket " << (cur_block+1) << ": " << (ten * 10) << "%");
				}
				for(TIndexOffU i = iten; i < itenNext && i < len; i++) {
					assert_lt(jLo, (TIndexOff)i); assert_lt(jHi, (TIndexOff)i);
					// Advance the upper-bound comparison by one character
					if(i == hi || i == lo) continue; // equal to one of the bookends
					if(hi != OFF_MASK && !suffixCmp(hi, i, jHi, kHi, kHiSoft, zHi)) {
						continue; // not in the bucket
					}
					if(lo != OFF_MASK && suffixCmp(lo, i, jLo, kLo, kLoSoft, zLo)) {
						continue; // not in the bucket
					}
					// In the bucket! - add it
					assert_lt(i, len);
					try {
						bucket.push_back(i);
					} catch(bad_alloc &e) {
						cerr << "Could not append element to block of " << ((bucket.size()) * OFF_SIZE) << " bytes" << endl;
						if(this->_passMemExc) {
							throw e; // rethrow immediately
						} else {
							cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl
							     << "a larger --bmaxdivn" << endl;
							throw 1;
						}
					}
					// Not necessarily true; we allow overflowing buckets
					// since we can't guarantee that a good set of sample
					// suffixes can be found in a reasonable amount of time
					//assert_lt(bucket.size(), this->bucketSz());
				}
			} // end loop over all suffixes of t
			{
				ThreadSafe ts(&_mutex);
				VMSG_NL("  bucket " << (cur_block+1) << ": 100%");
			}
		}
	} // end else clause of if(_sampleSuffs.size() == 0)
	// Sort the bucket
	if(bucket.size() > 0) {
		Timer timer(cout, "  Sorting block time: ", this->verbose());
		{
			ThreadSafe ts(&_mutex);
			VMSG_NL("  Sorting block of length " << bucket.size() << " for bucket " << (cur_block+1));
		}
		this->qsort(bucket);
	}
	if(hi != OFF_MASK) {
		// Not the final bucket; throw in the sample on the RHS
		bucket.push_back(hi);
	} else {
		// Final bucket; throw in $ suffix
		bucket.push_back(len);
	}
	{
		ThreadSafe ts(&_mutex);
		VMSG_NL("Returning block of " << bucket.size() << " for bucket " << (cur_block+1));
	}

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x258, %rsp            # imm = 0x258
movl %esi, %r13d
movq %rdi, %r12
movslq %edx, %rax
shlq $0x5, %rax
addq 0x110(%rdi), %rax
cmpl $0x2, 0x68(%rdi)
leaq 0x18(%rdi), %r15
cmovgeq %rax, %r15
leaq 0x98(%rdi), %r14
movq %r14, %rdi
callq 0x2cb70
cmpb $0x1, 0x16(%r12)
jne 0x180c3
leaq 0xd0(%rsp), %rdi
callq 0x5200
leaq 0xe0(%rsp), %rbx
leaq 0x18aaf(%rip), %rsi     # 0x30aad
movl $0xe, %edx
movq %rbx, %rdi
callq 0x53f0
leal 0x1(%r13), %esi
movq %rbx, %rdi
callq 0x5660
movq %rax, %rbx
leaq 0x1809e(%rip), %rsi     # 0x300bf
movl $0x4, %edx
movq %rax, %rdi
callq 0x53f0
movq 0x60(%r12), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x51e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5330
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xe8(%rsp), %rsi
leaq 0x18(%rsp), %rdi
callq 0x5580
leaq 0x18(%rsp), %rsi
movq %r12, %rdi
callq 0x1b716
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x180a2
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x5370
movq 0x22eaf(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
movq 0x8(%r12), %rbp
movq 0x18(%rbp), %rax
movq %rax, 0x40(%rsp)
movl %eax, 0x74(%rsp)
movq $0x0, 0x18(%r15)
movl $0xffffffff, 0x70(%rsp) # imm = 0xFFFFFFFF
cmpq $0x0, 0x60(%r12)
movq %r12, 0x8(%rsp)
movq %r15, 0x48(%rsp)
je 0x188e0
movq %r14, %rdi
callq 0x2cb70
cmpb $0x1, 0x16(%r12)
jne 0x181f5
leaq 0xd0(%rsp), %rdi
callq 0x5200
leaq 0xe0(%rsp), %rbx
leaq 0x18a3d(%rip), %rsi     # 0x30b70
movl $0x12, %edx
movq %rbx, %rdi
callq 0x53f0
movl 0x10(%r12), %esi
movq %rbx, %rdi
callq 0x51e0
movq %rax, %rbx
leaq 0x18a2c(%rip), %rsi     # 0x30b83
movl $0xd, %edx
movq %rax, %rdi
callq 0x53f0
leal 0x1(%r13), %esi
movq %rbx, %rdi
callq 0x5660
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5330
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xe8(%rsp), %rsi
leaq 0x18(%rsp), %rdi
callq 0x5580
leaq 0x18(%rsp), %rsi
movq %r12, %rdi
callq 0x1b716
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x181d4
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x5370
movq 0x22d7d(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
movq %r14, 0x38(%rsp)
movl 0x10(%r12), %ebx
addl $0x64, %ebx
cmpq %rbx, 0x18(%r15)
jae 0x1823e
cmpq $0x0, 0x8(%r15)
jne 0x18233
movq %rbx, 0x10(%r15)
leaq (,%rbx,4), %rdi
callq 0x5030
movl (%r15), %ecx
movl %ecx, 0x4(%r15)
movq %rax, 0x8(%r15)
movq %r15, %rdi
movq %rbx, %rsi
callq 0x178d2
movabsq $-0x100000000, %rax     # imm = 0xFFFFFFFF00000000
movq %rax, 0x18(%rsp)
xorl %ecx, %ecx
movq %rcx, 0x20(%rsp)
movl $0x80, %edx
movq %rdx, 0x28(%rsp)
movq %rcx, 0x30(%rsp)
movq %rax, 0x90(%rsp)
movq %rcx, 0x98(%rsp)
movq %rdx, 0xa0(%rsp)
movq %rcx, 0xa8(%rsp)
movq 0x60(%r12), %r14
movq 0x38(%rsp), %rdi
callq 0x2cb70
cmpb $0x1, 0x16(%r12)
jne 0x18358
leaq 0xd0(%rsp), %rdi
callq 0x5200
leaq 0xe0(%rsp), %rbx
leaq 0x18903(%rip), %rsi     # 0x30bbd
movl $0x22, %edx
movq %rbx, %rdi
callq 0x53f0
leal 0x1(%r13), %esi
movq %rbx, %rdi
callq 0x5660
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5330
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xe8(%rsp), %rsi
leaq 0x50(%rsp), %rdi
callq 0x5580
leaq 0x50(%rsp), %rsi
movq %r12, %rdi
callq 0x1b716
leaq 0x60(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x18337
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5370
movq 0x22c1a(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %rbp, 0x80(%rsp)
movq 0x38(%rsp), %rdi
callq 0x2cbac
movq %r13, 0x78(%rsp)
movslq %r13d, %r12
movl $0xffffffff, %r13d      # imm = 0xFFFFFFFF
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
cmpq %r12, %r14
movq 0x38(%rsp), %r14
je 0x183e0
movq 0x8(%rsp), %r15
movq 0x50(%r15), %rax
movl (%rax,%r12,4), %ebp
movl %ebp, 0x70(%rsp)
movl 0x74(%r15), %esi
leaq 0x90(%rsp), %rdi
callq 0x1ca80
leaq 0x90(%rsp), %rbx
movq 0x8(%rbx), %rdi
movq 0x18(%rbx), %rdx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x51b0
movzbl 0x16(%r15), %ecx
movzbl 0x14(%r15), %r8d
movq 0x80(%rsp), %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0x1f2bb
cmpl $0x0, 0x78(%rsp)
je 0x18438
movq 0x8(%rsp), %r15
movq 0x50(%r15), %rax
movl -0x4(%rax,%r12,4), %r13d
movl 0x74(%r15), %esi
leaq 0x18(%rsp), %rdi
callq 0x1ca80
leaq 0x18(%rsp), %rbx
movq 0x8(%rbx), %rdi
movq 0x18(%rbx), %rdx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x51b0
movzbl 0x16(%r15), %ecx
movzbl 0x14(%r15), %r8d
movq 0x80(%rsp), %rdi
movl %r13d, %esi
movq %rbx, %rdx
callq 0x1f2bb
movq $-0x1, %rax
movq %rax, 0xc8(%rsp)
movq %rax, 0xc0(%rsp)
movq %rax, 0xb8(%rsp)
movq %rax, 0xb0(%rsp)
xorl %eax, %eax
movb %al, 0x17(%rsp)
movb %al, 0x16(%rsp)
movq %r14, %rdi
callq 0x2cb70
movq 0x8(%rsp), %rax
cmpb $0x1, 0x16(%rax)
jne 0x18554
leaq 0xd0(%rsp), %rdi
callq 0x5200
leaq 0xe0(%rsp), %rbx
leaq 0x18765(%rip), %rsi     # 0x30c01
movl $0x2d, %edx
movq %rbx, %rdi
callq 0x53f0
movq 0x78(%rsp), %rax
leal 0x1(%rax), %esi
movq %rbx, %rdi
callq 0x5660
movq %rax, %rbx
leaq 0x16a8f(%rip), %rsi     # 0x2ef52
movl $0x1, %edx
movq %rax, %rdi
callq 0x53f0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5330
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xe8(%rsp), %rsi
leaq 0x50(%rsp), %rdi
callq 0x5580
leaq 0x50(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x1b716
leaq 0x60(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x18533
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5370
movq 0x22a1e(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
cmpl $0x0, 0x40(%rsp)
je 0x187bf
movq 0x40(%rsp), %rax
addl $0x9, %eax
movl $0xcccccccd, %ecx       # imm = 0xCCCCCCCD
imulq %rax, %rcx
shrq $0x23, %rcx
movq %rcx, 0x80(%rsp)
movq 0x78(%rsp), %rax
incl %eax
movl %eax, 0x8c(%rsp)
xorl %r12d, %r12d
xorl %r15d, %r15d
movq %r14, %rdi
callq 0x2cb70
testl %r12d, %r12d
je 0x186b5
movq 0x8(%rsp), %rax
cmpb $0x1, 0x16(%rax)
jne 0x186b5
leaq 0xd0(%rsp), %rdi
callq 0x5200
movl $0x9, %edx
leaq 0xe0(%rsp), %rdi
leaq 0x18656(%rip), %rsi     # 0x30c2f
callq 0x53f0
leaq 0xe0(%rsp), %rdi
movl 0x8c(%rsp), %esi
callq 0x5660
movq %rax, %rbx
movl $0x2, %edx
movq %rax, %rdi
leaq 0x161c4(%rip), %rsi     # 0x2e7c8
callq 0x53f0
leal (%r12,%r12), %eax
leal (%rax,%rax,4), %esi
movq %rbx, %rdi
callq 0x51e0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x1863a(%rip), %rsi     # 0x30c64
callq 0x53f0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5330
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0x50(%rsp), %rbx
movq %rbx, %rdi
leaq 0xe8(%rsp), %rsi
callq 0x5580
movq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x1b716
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x18694
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5370
leaq 0xd0(%rsp), %rdi
movq 0x228b5(%rip), %rsi     # 0x3af58
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
movq 0x80(%rsp), %rax
leal (%r15,%rax), %ebx
movl %r15d, 0xd0(%rsp)
cmpl %ebx, %r15d
setae %al
cmpl 0x40(%rsp), %r15d
setae %cl
orb %al, %cl
jne 0x187aa
movq 0x40(%rsp), %rax
cmpl %eax, %ebx
movl %eax, %r14d
cmovbl %ebx, %r14d
cmpl %ebp, %r15d
je 0x1878e
cmpl %r13d, %r15d
je 0x1878e
cmpl $-0x1, %ebp
je 0x18740
leaq 0x90(%rsp), %rax
movq %rax, (%rsp)
movq 0x8(%rsp), %rdi
movl %ebp, %esi
movl %r15d, %edx
leaq 0xb8(%rsp), %rcx
leaq 0xc8(%rsp), %r8
leaq 0x17(%rsp), %r9
callq 0x1f434
testb %al, %al
je 0x1878e
cmpl $-0x1, %r13d
je 0x1877c
movl 0xd0(%rsp), %edx
leaq 0x18(%rsp), %rax
movq %rax, (%rsp)
movq 0x8(%rsp), %rdi
movl %r13d, %esi
leaq 0xb0(%rsp), %rcx
leaq 0xc0(%rsp), %r8
leaq 0x16(%rsp), %r9
callq 0x1f434
testb %al, %al
jne 0x1878e
movq 0x48(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0x172a6
movl 0xd0(%rsp), %r15d
incl %r15d
movl %r15d, 0xd0(%rsp)
cmpl %r14d, %r15d
jb 0x186f5
incl %r12d
movl %ebx, %r15d
cmpl 0x40(%rsp), %ebx
movq 0x38(%rsp), %r14
jb 0x18598
movq %r14, %rdi
callq 0x2cb70
movq 0x8(%rsp), %rax
cmpb $0x1, 0x16(%rax)
movq 0x78(%rsp), %r13
jne 0x188ab
leaq 0xd0(%rsp), %rdi
callq 0x5200
leaq 0xe0(%rsp), %rbx
leaq 0x18438(%rip), %rsi     # 0x30c2f
movl $0x9, %edx
movq %rbx, %rdi
callq 0x53f0
leal 0x1(%r13), %esi
movq %rbx, %rdi
callq 0x5660
movq %rax, %rbx
leaq 0x18445(%rip), %rsi     # 0x30c5f
movl $0x6, %edx
movq %rax, %rdi
callq 0x53f0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5330
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xe8(%rsp), %rsi
leaq 0x50(%rsp), %rdi
callq 0x5580
leaq 0x50(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x1b716
leaq 0x60(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1888a
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5370
movq 0x226c7(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x188c5
callq 0x5440
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x188d4
callq 0x5440
cmpl $-0x1, %ebp
sete %bpl
jmp 0x18a1c
movq %r14, %rdi
callq 0x2cb70
cmpb $0x1, 0x16(%r12)
jne 0x189a4
leaq 0xd0(%rsp), %rdi
callq 0x5200
leaq 0xe0(%rsp), %rbx
leaq 0x181ac(%rip), %rsi     # 0x30abc
movl $0x2c, %edx
movq %rbx, %rdi
callq 0x53f0
movq 0xe0(%rsp), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5330
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xe8(%rsp), %rsi
leaq 0x18(%rsp), %rdi
callq 0x5580
leaq 0x18(%rsp), %rsi
movq %r12, %rdi
callq 0x1b716
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x18983
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x5370
movq 0x225ce(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
movl 0x10(%r12), %eax
cmpq %rax, 0x10(%r15)
jae 0x189ed
movq 0x40(%rsp), %rax
leal 0x1(%rax), %ebx
cmpq $0x0, 0x8(%r15)
jne 0x189e2
movq %rbx, 0x10(%r15)
leaq (,%rbx,4), %rdi
callq 0x5030
movl (%r15), %ecx
movl %ecx, 0x4(%r15)
movq %rax, 0x8(%r15)
movq %r15, %rdi
movq %rbx, %rsi
callq 0x178d2
movl 0x40(%rsp), %ebx
movq %r15, %rdi
movq %rbx, %rsi
callq 0x19fa4
movb $0x1, %bpl
cmpl $0x0, 0x40(%rsp)
je 0x18a1c
xorl %eax, %eax
movq 0x48(%rsp), %rdx
movq 0x8(%rdx), %rcx
movl %eax, (%rcx,%rax,4)
incq %rax
cmpq %rbx, %rax
jb 0x18a0d
movq 0x48(%rsp), %rax
cmpq $0x0, 0x18(%rax)
je 0x18b82
movq 0x8(%rsp), %r15
movb 0x16(%r15), %bl
xorl %edi, %edi
callq 0x52f0
movq %rax, 0x18(%rsp)
movq 0x22558(%rip), %rax     # 0x3afa0
movq %rax, 0x20(%rsp)
leaq 0x18212(%rip), %rax     # 0x30c66
movq %rax, 0x28(%rsp)
movb %bl, 0x30(%rsp)
movq %r14, %rdi
callq 0x2cb70
cmpb $0x1, 0x16(%r15)
jne 0x18b60
leaq 0xd0(%rsp), %rdi
callq 0x5200
leaq 0xe0(%rsp), %rbx
leaq 0x181f1(%rip), %rsi     # 0x30c7d
movl $0x1a, %edx
movq %rbx, %rdi
callq 0x53f0
movq 0x48(%rsp), %rax
movq 0x18(%rax), %rsi
movq %rbx, %rdi
callq 0x51e0
movq %rax, %rbx
leaq 0x180d0(%rip), %rsi     # 0x30b84
movl $0xc, %edx
movq %rax, %rdi
callq 0x53f0
leal 0x1(%r13), %esi
movq %rbx, %rdi
callq 0x5660
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5330
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xe8(%rsp), %rsi
leaq 0x90(%rsp), %rdi
callq 0x5580
leaq 0x90(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x1b716
leaq 0xa0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x18b3f
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5370
movq 0x22412(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
movq 0x8(%rsp), %rdi
movq (%rdi), %rax
movq 0x48(%rsp), %rsi
callq *0x38(%rax)
leaq 0x18(%rsp), %rdi
callq 0xfe36
testb %bpl, %bpl
leaq 0x74(%rsp), %rax
leaq 0x70(%rsp), %rsi
cmovneq %rax, %rsi
movq 0x48(%rsp), %r12
movq %r12, %rdi
callq 0x172a6
movq %r14, %rdi
callq 0x2cb70
movq 0x8(%rsp), %r15
cmpb $0x1, 0x16(%r15)
jne 0x18c98
leaq 0xd0(%rsp), %rdi
callq 0x5200
leaq 0xe0(%rsp), %rbx
leaq 0x180c4(%rip), %rsi     # 0x30c98
movl $0x13, %edx
movq %rbx, %rdi
callq 0x53f0
movq 0x18(%r12), %rsi
movq %rbx, %rdi
callq 0x51e0
movq %rax, %rbx
leaq 0x17f8c(%rip), %rsi     # 0x30b84
movl $0xc, %edx
movq %rax, %rdi
callq 0x53f0
incl %r13d
movq %rbx, %rdi
movl %r13d, %esi
callq 0x5660
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x5330
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5040
movq %rax, %rdi
callq 0x51f0
leaq 0xe8(%rsp), %rsi
leaq 0x18(%rsp), %rdi
callq 0x5580
leaq 0x18(%rsp), %rsi
movq %r15, %rdi
callq 0x1b716
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x18c77
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x5370
movq 0x222da(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
addq $0x258, %rsp            # imm = 0x258
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r13
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x18fc7
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x5370
jmp 0x18fc7
jmp 0x18fc4
movq %rax, %r13
jmp 0x18fe8
movq %rax, %r13
leaq 0x60(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x19150
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5370
jmp 0x19150
jmp 0x1914d
movq %rax, %r13
jmp 0x19171
movq %rax, %r13
leaq 0xa0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x191c0
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x5370
jmp 0x191c0
jmp 0x191bd
movq %rax, %r13
jmp 0x191e1
movq %rax, %r13
leaq 0x60(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x19188
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5370
jmp 0x19188
jmp 0x19185
movq %rax, %r13
jmp 0x191a9
movq %rdx, %rbx
movq %rax, %r13
leaq 0x60(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1900a
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5370
jmp 0x1900a
jmp 0x19004
movq %rdx, %rbx
movq %rax, %r13
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x19203
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x5370
jmp 0x19203
jmp 0x191fd
movq %rdx, %rbx
movq %rax, %r13
jmp 0x1902b
movq %rdx, %rbx
movq %rax, %r13
jmp 0x19224
jmp 0x1952b
jmp 0x18ea0
movq %rax, %r13
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1934b
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x5370
jmp 0x1934b
jmp 0x19348
movq %rax, %r13
jmp 0x1936c
movq %rax, %r13
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x19381
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x5370
jmp 0x19381
jmp 0x1937e
movq %rax, %r13
jmp 0x193a2
jmp 0x1952b
jmp 0x19533
jmp 0x18e7f
jmp 0x1952b
movq %rax, %r13
jmp 0x191e9
jmp 0x1952b
jmp 0x19533
jmp 0x1952b
jmp 0x18fbc
jmp 0x1952b
movq %rdx, %rbx
movq %rax, %r13
jmp 0x1922c
movq %rax, %r13
cmpl $0x2, %edx
jne 0x19557
movq %r13, %rdi
callq 0x5140
movq 0x8(%rsp), %rax
cmpb $0x1, 0x15(%rax)
jne 0x18efd
movl $0x8, %edi
callq 0x5180
movq 0x220b5(%rip), %rcx     # 0x3af90
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x220bf(%rip), %rsi     # 0x3afa8
movq 0x22088(%rip), %rdx     # 0x3af78
movq %rax, %rdi
callq 0x5630
jmp 0x19521
movq 0x220ec(%rip), %rdi     # 0x3aff0
leaq 0x17bde(%rip), %rsi     # 0x30ae9
movl $0x32, %edx
callq 0x53f0
movl 0x74(%rsp), %eax
leal 0x4(,%rax,4), %esi
movq 0x220c9(%rip), %rdi     # 0x3aff0
callq 0x51e0
movq %rax, %rbx
leaq 0x17be6(%rip), %rsi     # 0x30b1c
movl $0x6, %edx
movq %rax, %rdi
callq 0x53f0
movq %rbx, %rdi
callq 0x5170
movq %rax, %rbx
leaq 0x17bce(%rip), %rsi     # 0x30b23
movl $0x4c, %edx
movq %rax, %rdi
callq 0x53f0
movq %rbx, %rdi
callq 0x5170
movq %rax, %rbx
leaq 0x1757d(%rip), %rsi     # 0x304f1
movl $0x13, %edx
movq %rax, %rdi
callq 0x53f0
movq %rbx, %rdi
callq 0x5170
movl $0x4, %edi
callq 0x5180
movl $0x1, (%rax)
movq 0x21fa8(%rip), %rsi     # 0x3af48
movq %rax, %rdi
xorl %edx, %edx
callq 0x5630
jmp 0x19521
movq %rax, %r13
callq 0x55b0
jmp 0x19557
movq %rdx, %rbx
movq %rax, %r13
jmp 0x19035
movq %rax, %r13
movq 0x21f8a(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
jmp 0x19557
jmp 0x1952b
jmp 0x1952b
jmp 0x1952b
movq %rdx, %rbx
movq %rax, %r13
movq 0x21f47(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq 0x38(%rsp), %rdi
callq 0x2cbac
cmpl $0x2, %ebx
jne 0x19536
movq %r13, %rdi
callq 0x5140
movq 0x8(%rsp), %rax
cmpb $0x1, 0x15(%rax)
jne 0x19084
movl $0x8, %edi
callq 0x5180
movq 0x21f2e(%rip), %rcx     # 0x3af90
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x21f38(%rip), %rsi     # 0x3afa8
movq 0x21f01(%rip), %rdx     # 0x3af78
movq %rax, %rdi
callq 0x5630
jmp 0x19521
movq 0x21f65(%rip), %rdi     # 0x3aff0
leaq 0x17b4e(%rip), %rsi     # 0x30be0
movl $0x20, %edx
callq 0x53f0
movq 0x8(%rsp), %rax
movl 0x74(%rax), %esi
shll $0x2, %esi
movq 0x21f42(%rip), %rdi     # 0x3aff0
callq 0x51e0
movq %rax, %rbx
leaq 0x17a5f(%rip), %rsi     # 0x30b1c
movl $0x6, %edx
movq %rax, %rdi
callq 0x53f0
movq %rbx, %rdi
callq 0x5170
movq 0x21f17(%rip), %rdi     # 0x3aff0
leaq 0x17a43(%rip), %rsi     # 0x30b23
movl $0x4c, %edx
callq 0x53f0
movq 0x21eff(%rip), %rdi     # 0x3aff0
callq 0x5170
movq %rax, %rbx
leaq 0x173f1(%rip), %rsi     # 0x304f1
movl $0x13, %edx
movq %rax, %rdi
callq 0x53f0
movq %rbx, %rdi
callq 0x5170
movl $0x4, %edi
callq 0x5180
movl $0x1, (%rax)
movq 0x21e1c(%rip), %rsi     # 0x3af48
movq %rax, %rdi
xorl %edx, %edx
callq 0x5630
jmp 0x19521
jmp 0x1952b
movq %rax, %r13
callq 0x55b0
jmp 0x19536
movq %rax, %r13
movq 0x21e01(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq 0x38(%rsp), %rdi
callq 0x2cbac
jmp 0x19536
jmp 0x1952b
movq %rax, %r13
movq 0x21dc9(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq 0x38(%rsp), %rdi
callq 0x2cbac
jmp 0x19536
jmp 0x1952b
movq %rax, %r13
movq 0x21d91(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
leaq 0x18(%rsp), %rdi
callq 0xfe36
jmp 0x19557
jmp 0x1952b
movq %rdx, %rbx
movq %rax, %r13
movq 0x21d4e(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
cmpl $0x2, %ebx
jne 0x19557
movq %r13, %rdi
callq 0x5140
movq 0x8(%rsp), %rax
cmpb $0x1, 0x15(%rax)
jne 0x1927b
movl $0x8, %edi
callq 0x5180
movq 0x21d37(%rip), %rcx     # 0x3af90
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x21d41(%rip), %rsi     # 0x3afa8
movq 0x21d0a(%rip), %rdx     # 0x3af78
movq %rax, %rdi
callq 0x5630
jmp 0x19521
movq 0x21d6e(%rip), %rdi     # 0x3aff0
leaq 0x17908(%rip), %rsi     # 0x30b91
movl $0x2b, %edx
callq 0x53f0
movq 0x8(%rsp), %rax
movl 0x10(%rax), %eax
leal 0x4(,%rax,4), %esi
movq 0x21d47(%rip), %rdi     # 0x3aff0
callq 0x51e0
movq %rax, %rbx
leaq 0x17864(%rip), %rsi     # 0x30b1c
movl $0x6, %edx
movq %rax, %rdi
callq 0x53f0
movq %rbx, %rdi
callq 0x5170
movq 0x21d1c(%rip), %rdi     # 0x3aff0
leaq 0x17848(%rip), %rsi     # 0x30b23
movl $0x4c, %edx
callq 0x53f0
movq 0x21d04(%rip), %rdi     # 0x3aff0
callq 0x5170
movq %rax, %rbx
leaq 0x171f6(%rip), %rsi     # 0x304f1
movl $0x13, %edx
movq %rax, %rdi
callq 0x53f0
movq %rbx, %rdi
callq 0x5170
movl $0x4, %edi
callq 0x5180
movl $0x1, (%rax)
movq 0x21c21(%rip), %rsi     # 0x3af48
movq %rax, %rdi
xorl %edx, %edx
callq 0x5630
jmp 0x19521
movq %rax, %r13
callq 0x55b0
jmp 0x19557
jmp 0x1952b
movq %rax, %r13
movq 0x21c06(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
jmp 0x19557
jmp 0x1952b
movq %rax, %r13
movq 0x21bd0(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq %r14, %rdi
callq 0x2cbac
jmp 0x19557
jmp 0x1952b
movq %rax, %r13
jmp 0x1940a
movq %rax, %r13
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x193e9
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x5370
jmp 0x193e9
jmp 0x193e6
jmp 0x19533
jmp 0x1952b
movq %rax, %r13
movq 0x21b68(%rip), %rsi     # 0x3af58
leaq 0xd0(%rsp), %rdi
callq 0x5230
leaq 0x150(%rsp), %rdi
callq 0x5130
movq 0x38(%rsp), %rdi
callq 0x2cbac
jmp 0x19536
jmp 0x1952b
movq %rax, %r13
cmpl $0x2, %edx
jne 0x19536
movq %r13, %rdi
callq 0x5140
movq 0x21bb7(%rip), %rdi     # 0x3aff0
leaq 0x177f9(%rip), %rsi     # 0x30c39
movl $0x25, %edx
callq 0x53f0
movq 0x48(%rsp), %rax
movq 0x18(%rax), %rsi
shlq $0x2, %rsi
movq 0x21b92(%rip), %rdi     # 0x3aff0
callq 0x51e0
movq %rax, %rbx
leaq 0x176af(%rip), %rsi     # 0x30b1c
movl $0x6, %edx
movq %rax, %rdi
callq 0x53f0
movq %rbx, %rdi
callq 0x5170
movq 0x8(%rsp), %rax
cmpb $0x1, 0x15(%rax)
jne 0x194bd
movl $0x8, %edi
callq 0x5180
movq 0x21af2(%rip), %rcx     # 0x3af90
addq $0x10, %rcx
movq %rcx, (%rax)
movq 0x21afc(%rip), %rsi     # 0x3afa8
movq 0x21ac5(%rip), %rdx     # 0x3af78
movq %rax, %rdi
callq 0x5630
jmp 0x19521
movq 0x21b2c(%rip), %rdi     # 0x3aff0
leaq 0x17658(%rip), %rsi     # 0x30b23
movl $0x4c, %edx
callq 0x53f0
movq 0x21b14(%rip), %rdi     # 0x3aff0
callq 0x5170
movq %rax, %rbx
leaq 0x17006(%rip), %rsi     # 0x304f1
movl $0x13, %edx
movq %rax, %rdi
callq 0x53f0
movq %rbx, %rdi
callq 0x5170
movl $0x4, %edi
callq 0x5180
movl $0x1, (%rax)
movq 0x21a31(%rip), %rsi     # 0x3af48
movq %rax, %rdi
xorl %edx, %edx
callq 0x5630
movq %rax, %r13
callq 0x55b0
jmp 0x19536
movq %rax, %rdi
callq 0xdbdd
movq %rax, %r13
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x19548
callq 0x5440
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x19557
callq 0x5440
movq %r13, %rdi
callq 0x5680
nop