// File: BenLangmead[P]bowtie/./blockwise_sa.h
// Function: KarkkainenBlockwiseSA<SString<char>>::buildSamples()
void KarkkainenBlockwiseSA<TStr>::buildSamples() {
	const TStr& t = this->text();
	TIndexOffU bsz = this->bucketSz()-1; // subtract 1 to leave room for sample
	size_t len = this->text().length();
	// Prepare _sampleSuffs array
	_sampleSuffs.clear();
	TIndexOffU numSamples = (TIndexOffU)((len/bsz)+1)<<1; // ~len/bsz x 2
	assert_gt(numSamples, 0);
	VMSG_NL("Reserving space for " << numSamples << " sample suffixes");
	if(this->_passMemExc) {
		// reserve(_sampleSuffs, numSamples, Exact());
		_sampleSuffs.resize(numSamples);
		// Randomly generate samples.  Allow duplicates for now.
		VMSG_NL("Generating random suffixes");
		for(size_t i = 0; i < numSamples; i++) {
#ifdef BOWTIE_64BIT_INDEX
			_sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU64() % len);
#else
			_sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU32() % len);
#endif
		}
	} else {
		try {
			_sampleSuffs.resize(numSamples);
			// Randomly generate samples.  Allow duplicates for now.
			VMSG_NL("Generating random suffixes");
			for(size_t i = 0; i < numSamples; i++) {
#ifdef BOWTIE_64BIT_INDEX
				_sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU64() % len);
#else
				_sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU32() % len);
#endif
			}
		} catch(bad_alloc &e) {
			if(this->_passMemExc) {
				throw e; // rethrow immediately
			} else {
				cerr << "Could not allocate sample suffix container of " << (numSamples * OFF_SIZE) << " bytes." << endl
				     << "Please try using a smaller number of blocks by specifying a larger --bmax or" << endl
				     << "a smaller --bmaxdivn" << endl;
				throw 1;
			}
		}
	}
	// Remove duplicates; very important to do this before the call to
	// mkeyQSortSuf so that it doesn't try to calculate lexicographical
	// relationships between very long, identical strings, which takes
	// an extremely long time in general, and causes the stack to grow
	// linearly with the size of the input
	{
		Timer timer(cout, "QSorting sample offsets, eliminating duplicates time: ", this->verbose());
		VMSG_NL("QSorting " << _sampleSuffs.size() << " sample offsets, eliminating duplicates");
		_sampleSuffs.sort();
		size_t sslen = _sampleSuffs.size();
		for (size_t i = 0; i < sslen-1; i++) {
			if (_sampleSuffs[i] == _sampleSuffs[i+1]) {
				_sampleSuffs.erase(i--);
				sslen--;
			}
		}
		// Multikey quicksort the samples
		{
			Timer timer(cout, "  Multikey QSorting samples time: ", this->verbose());
			VMSG_NL("Multikey QSorting " << _sampleSuffs.size() << " samples");
			this->qsort(_sampleSuffs);
		}
	}
	// Calculate bucket sizes
	VMSG_NL("Calculating bucket sizes");
	int limit = 5;
	// Iterate until all buckets are less than
	while(--limit >= 0) {
		TIndexOffU numBuckets = (TIndexOffU)_sampleSuffs.size()+1;
#if (__cplusplus >= 201103l)
		AutoArray<std::thread*> threads(this->_nthreads);
#else
		AutoArray<tthread::thread*> threads(this->_nthreads);
#endif
		EList<BinarySortingParam<TStr> > tparams;
		tparams.resize(this->_nthreads);
		for(int tid = 0; tid < this->_nthreads; tid++) {
			// Calculate bucket sizes by doing a binary search for each
			// suffix and noting where it lands
			try {
				// Allocate and initialize containers for holding bucket
				// sizes and representatives.
				tparams[tid].bucketSzs.resize(numBuckets);
				tparams[tid].bucketReps.resize(numBuckets);
				for (size_t i = 0; i < tparams[tid].bucketSzs.size(); i++) {
					tparams[tid].bucketSzs[i] = 0;
					tparams[tid].bucketReps[i] = OFF_MASK;
				}
			} catch(bad_alloc &e) {
				if(this->_passMemExc) {
					throw e; // rethrow immediately
				} else {
					cerr << "Could not allocate sizes, representatives (" << ((numBuckets*8)>>10) << " KB) for blocks." << endl
					     << "Please try using a smaller number of blocks by specifying a larger --bmax or a" << endl
					     << "smaller --bmaxdivn." << endl;
					throw 1;
				}
			}
			tparams[tid].t = &t;
			tparams[tid].sampleSuffs = &_sampleSuffs;
			tparams[tid].begin = (tid == 0 ? 0 : len / this->_nthreads * tid);
			tparams[tid].end = (tid + 1 == this->_nthreads ? len : len / this->_nthreads * (tid + 1));
			if(this->_nthreads == 1) {
				BinarySorting_worker<TStr>((void*)&tparams[tid]);
			} else {
#if (__cplusplus >= 201103l)
				threads[tid] = new std::thread(BinarySorting_worker<TStr>, (void*)&tparams[tid]);
#else
				threads[tid] = new tthread::thread(BinarySorting_worker<TStr>, (void*)&tparams[tid]);
#endif
			}
		}
		if(this->_nthreads > 1) {
			for (int tid = 0; tid < this->_nthreads; tid++) {
				threads[tid]->join();
			}
		}


		EList<TIndexOffU>& bucketSzs = tparams[0].bucketSzs;
		EList<TIndexOffU>& bucketReps = tparams[0].bucketReps;
		for(int tid = 1; tid < this->_nthreads; tid++) {
			for(size_t j = 0; j < numBuckets; j++) {
				bucketSzs[j] += tparams[tid].bucketSzs[j];
				if(bucketReps[j] == OFF_MASK) {
					bucketReps[j] = tparams[tid].bucketReps[j];
				}
			}
		}

		// Check for large buckets and mergeable pairs of small buckets
		// and split/merge as necessary
		TIndexOff added = 0;
		TIndexOff merged = 0;
		assert_eq(bucketSzs.size(), numBuckets);
		assert_eq(bucketReps.size(), numBuckets);
		{
			Timer timer(cout, "  Splitting and merging time: ", this->verbose());
			VMSG_NL("Splitting and merging");
			for(TIndexOffU i = 0; i < numBuckets; i++) {
				TIndexOffU mergedSz = bsz + 1;
				assert(bucketSzs[i] == 0 || bucketReps[i] != OFF_MASK);
				if(i < (TIndexOffU)numBuckets-1) {
					mergedSz = bucketSzs[(size_t)i] + bucketSzs[(size_t)i+1] + 1;
				}
				// Merge?
				if(mergedSz <= bsz) {
					bucketSzs[i+1] += (bucketSzs[i]+1);
					// The following may look strange, but it's necessary
					// to ensure that the merged bucket has a representative
					bucketReps[i+1] = _sampleSuffs[i+added];
					erase(_sampleSuffs, i+added);
					erase(bucketSzs, i);
					erase(bucketReps, i);
					i--; // might go to -1 but ++ will overflow back to 0
					numBuckets--;
					merged++;
					assert_eq(numBuckets, _sampleSuffs.size()+1-added);
					assert_eq(numBuckets, bucketSzs.size());
				}
				// Split?
				else if(bucketSzs[i] > bsz) {
					// Add an additional sample from the bucketReps[]
					// set accumulated in the binarySASearch loop; this
					// effectively splits the bucket
					_sampleSuffs.insert(bucketReps[(size_t)i], (TIndexOffU)(i + (added++)));
				}
			}
		}
		if(added == 0) {
			//if(this->verbose()) {
			//	cout << "Final bucket sizes:" << endl;
			//	cout << "  (begin): " << bucketSzs[0] << " (" << (int)(bsz - bucketSzs[0]) << ")" << endl;
			//	for(uint32_t i = 1; i < numBuckets; i++) {
			//		cout << "  " << bucketSzs[i] << " (" << (int)(bsz - bucketSzs[i]) << ")" << endl;
			//	}
			//}
			break;
		}
		// Otherwise, continue until no more buckets need to be
		// split
		VMSG_NL("Split " << added << ", merged " << merged << "; iterating...");
	}
// Do *not* force a do-over
//	if(limit == 0) {
//		VMSG_NL("Iterated too many times; trying again...");
//		buildSamples();
//	}
	VMSG_NL("Avg bucket size: " << ((double)(len-_sampleSuffs.size()) / (_sampleSuffs.size()+1)) << " (target: " << bsz << ")");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x12d0, %rsp           # imm = 0x12D0
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x1050(%rbp)
callq 0x271c0
movq -0x1050(%rbp), %rdi
movq %rax, -0x10(%rbp)
callq 0x28910
movq -0x1050(%rbp), %rdi
subl $0x1, %eax
movl %eax, -0x14(%rbp)
callq 0x271c0
movq %rax, %rdi
callq 0x14c10
movq -0x1050(%rbp), %rdi
movq %rax, -0x20(%rbp)
addq $0x48, %rdi
callq 0x266f0
movq -0x1050(%rbp), %rdi
movq -0x20(%rbp), %rax
movl -0x14(%rbp), %ecx
xorl %edx, %edx
divq %rcx
addq $0x1, %rax
shll %eax
movl %eax, -0x24(%rbp)
callq 0x271e0
testb $0x1, %al
jne 0x28a17
jmp 0x28b0f
leaq -0x1b0(%rbp), %rdi
callq 0x6280
leaq -0x1a0(%rbp), %rdi
leaq 0x1dd15(%rip), %rsi     # 0x46746
callq 0x6410
movq %rax, -0x1058(%rbp)
jmp 0x28a3f
movq -0x1058(%rbp), %rdi
movl -0x24(%rbp), %esi
callq 0x65f0
movq %rax, -0x1060(%rbp)
jmp 0x28a57
movq -0x1060(%rbp), %rdi
leaq 0x1dcf6(%rip), %rsi     # 0x4675b
callq 0x6410
movq %rax, -0x1068(%rbp)
jmp 0x28a73
movq -0x1068(%rbp), %rdi
movq 0x294e7(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0x28a88
leaq -0x1e0(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x6400
jmp 0x28a9d
movq -0x1050(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x28930
jmp 0x28ab2
leaq -0x1e0(%rbp), %rdi
callq 0x69a8
leaq -0x1b0(%rbp), %rdi
callq 0x62c0
jmp 0x28b0f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x28afe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x69a8
leaq -0x1b0(%rbp), %rdi
callq 0x62c0
jmp 0x2a3aa
movq -0x1050(%rbp), %rax
testb $0x1, 0x15(%rax)
je 0x28c85
movq -0x1050(%rbp), %rdi
addq $0x48, %rdi
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x25d50
movq -0x1050(%rbp), %rdi
callq 0x271e0
testb $0x1, %al
jne 0x28b4a
jmp 0x28c0e
leaq -0x368(%rbp), %rdi
callq 0x6280
leaq -0x358(%rbp), %rdi
leaq 0x1dc08(%rip), %rsi     # 0x4676c
callq 0x6410
movq %rax, -0x1070(%rbp)
jmp 0x28b72
movq -0x1070(%rbp), %rdi
movq 0x293e8(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0x28b87
leaq -0x388(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x6400
jmp 0x28b9c
movq -0x1050(%rbp), %rdi
leaq -0x388(%rbp), %rsi
callq 0x28930
jmp 0x28bb1
leaq -0x388(%rbp), %rdi
callq 0x69a8
leaq -0x368(%rbp), %rdi
callq 0x62c0
jmp 0x28c0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x28bfd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
leaq -0x388(%rbp), %rdi
callq 0x69a8
leaq -0x368(%rbp), %rdi
callq 0x62c0
jmp 0x2a3aa
movq $0x0, -0x390(%rbp)
movq -0x390(%rbp), %rax
movl -0x24(%rbp), %ecx
cmpq %rcx, %rax
jae 0x28c80
movq -0x1050(%rbp), %rdi
addq $0x84, %rdi
callq 0x2e0e0
movq -0x1050(%rbp), %rdi
movl %eax, %eax
xorl %ecx, %ecx
movl %ecx, %edx
divq -0x20(%rbp)
movl %edx, %eax
movl %eax, -0x1074(%rbp)
addq $0x48, %rdi
movq -0x390(%rbp), %rsi
callq 0x14410
movl -0x1074(%rbp), %ecx
movl %ecx, (%rax)
movq -0x390(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x390(%rbp)
jmp 0x28c19
jmp 0x28faa
movq -0x1050(%rbp), %rdi
addq $0x48, %rdi
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x25d50
jmp 0x28c9c
movq -0x1050(%rbp), %rdi
callq 0x271e0
testb $0x1, %al
jne 0x28cb1
jmp 0x28e02
leaq -0x518(%rbp), %rdi
callq 0x6280
jmp 0x28cbf
leaq -0x508(%rbp), %rdi
leaq 0x1da9f(%rip), %rsi     # 0x4676c
callq 0x6410
movq %rax, -0x1080(%rbp)
jmp 0x28cdb
movq -0x1080(%rbp), %rdi
movq 0x2927f(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0x28cf0
leaq -0x538(%rbp), %rdi
leaq -0x518(%rbp), %rsi
callq 0x6400
jmp 0x28d05
movq -0x1050(%rbp), %rdi
leaq -0x538(%rbp), %rsi
callq 0x28930
jmp 0x28d1a
leaq -0x538(%rbp), %rdi
callq 0x69a8
leaq -0x518(%rbp), %rdi
callq 0x62c0
jmp 0x28e02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x28d89
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x28d7d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
leaq -0x538(%rbp), %rdi
callq 0x69a8
leaq -0x518(%rbp), %rdi
callq 0x62c0
movl -0x1bc(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x2a3aa
movq -0x1b8(%rbp), %rdi
callq 0x61a0
movq %rax, %rcx
movq -0x1050(%rbp), %rax
movq %rcx, -0x548(%rbp)
testb $0x1, 0x15(%rax)
je 0x28ea3
movl $0x8, %edi
callq 0x61f0
movq %rax, %rdi
movq %rdi, -0x1088(%rbp)
movq -0x548(%rbp), %rsi
callq 0x147a0
movq -0x1088(%rbp), %rdi
movq 0x291bf(%rip), %rsi     # 0x51fb0
movq 0x29190(%rip), %rdx     # 0x51f88
callq 0x67f0
jmp 0x2a3be
movq $0x0, -0x540(%rbp)
movq -0x540(%rbp), %rax
movl -0x24(%rbp), %ecx
cmpq %rcx, %rax
jae 0x28e82
movq -0x1050(%rbp), %rdi
addq $0x84, %rdi
callq 0x2e0e0
movl %eax, -0x108c(%rbp)
jmp 0x28e37
movq -0x1050(%rbp), %rdi
movl -0x108c(%rbp), %eax
movl %eax, %eax
xorl %ecx, %ecx
movl %ecx, %edx
divq -0x20(%rbp)
movl %edx, %eax
movl %eax, -0x1090(%rbp)
addq $0x48, %rdi
movq -0x540(%rbp), %rsi
callq 0x14410
movl -0x1090(%rbp), %ecx
movl %ecx, (%rax)
movq -0x540(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x540(%rbp)
jmp 0x28e0d
jmp 0x28fa8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
callq 0x6770
jmp 0x28fa3
movq 0x29146(%rip), %rdi     # 0x51ff0
leaq 0x1d8d6(%rip), %rsi     # 0x46787
callq 0x6410
movq %rax, -0x1098(%rbp)
jmp 0x28ebf
movq -0x1098(%rbp), %rdi
movl -0x24(%rbp), %esi
shll $0x2, %esi
callq 0x65f0
movq %rax, -0x10a0(%rbp)
jmp 0x28eda
movq -0x10a0(%rbp), %rdi
leaq 0x1d8ce(%rip), %rsi     # 0x467b6
callq 0x6410
movq %rax, -0x10a8(%rbp)
jmp 0x28ef6
movq -0x10a8(%rbp), %rdi
movq 0x29064(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x10b0(%rbp)
jmp 0x28f12
movq -0x10b0(%rbp), %rdi
leaq 0x1d89e(%rip), %rsi     # 0x467be
callq 0x6410
movq %rax, -0x10b8(%rbp)
jmp 0x28f2e
movq -0x10b8(%rbp), %rdi
movq 0x2902c(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x10c0(%rbp)
jmp 0x28f4a
movq -0x10c0(%rbp), %rdi
leaq 0x1d8b3(%rip), %rsi     # 0x4680b
callq 0x6410
movq %rax, -0x10c8(%rbp)
jmp 0x28f66
movq -0x10c8(%rbp), %rdi
movq 0x28ff4(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0x28f7b
movl $0x4, %edi
callq 0x61f0
movq %rax, %rdi
movl $0x1, (%rdi)
movq 0x28fbb(%rip), %rsi     # 0x51f50
xorl %eax, %eax
movl %eax, %edx
callq 0x67f0
jmp 0x2a3be
jmp 0x2a3aa
jmp 0x28faa
movq -0x1050(%rbp), %rdi
callq 0x271e0
movzbl %al, %ecx
andl $0x1, %ecx
movq 0x28fe5(%rip), %rsi     # 0x51fa8
leaq 0x1d856(%rip), %rdx     # 0x46820
leaq -0x568(%rbp), %rdi
callq 0x16ee0
movq -0x1050(%rbp), %rdi
callq 0x271e0
testb $0x1, %al
jne 0x28feb
jmp 0x2910c
leaq -0x6f0(%rbp), %rdi
callq 0x6280
jmp 0x28ff9
leaq -0x6e0(%rbp), %rdi
leaq 0x1d8a4(%rip), %rsi     # 0x468ab
callq 0x6410
movq %rax, -0x10d0(%rbp)
jmp 0x29015
movq -0x1050(%rbp), %rdi
addq $0x48, %rdi
callq 0x14440
movq -0x10d0(%rbp), %rdi
movq %rax, %rsi
callq 0x6100
movq %rax, -0x10d8(%rbp)
jmp 0x2903d
movq -0x10d8(%rbp), %rdi
leaq 0x1d80c(%rip), %rsi     # 0x46857
callq 0x6410
movq %rax, -0x10e0(%rbp)
jmp 0x29059
movq -0x10e0(%rbp), %rdi
movq 0x28f01(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0x2906e
leaq -0x710(%rbp), %rdi
leaq -0x6f0(%rbp), %rsi
callq 0x6400
jmp 0x29083
movq -0x1050(%rbp), %rdi
leaq -0x710(%rbp), %rsi
callq 0x28930
jmp 0x29098
leaq -0x710(%rbp), %rdi
callq 0x69a8
leaq -0x6f0(%rbp), %rdi
callq 0x62c0
jmp 0x2910c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x29427
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x290fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
leaq -0x710(%rbp), %rdi
callq 0x69a8
leaq -0x6f0(%rbp), %rdi
callq 0x62c0
jmp 0x29427
movq -0x1050(%rbp), %rdi
addq $0x48, %rdi
callq 0x2e130
jmp 0x2911e
movq -0x1050(%rbp), %rdi
addq $0x48, %rdi
callq 0x14440
movq %rax, -0x718(%rbp)
movq $0x0, -0x720(%rbp)
movq -0x720(%rbp), %rax
movq -0x718(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jae 0x291f3
movq -0x1050(%rbp), %rdi
addq $0x48, %rdi
movq -0x720(%rbp), %rsi
callq 0x14410
movq -0x1050(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x10e4(%rbp)
addq $0x48, %rdi
movq -0x720(%rbp), %rsi
addq $0x1, %rsi
callq 0x14410
movq %rax, %rcx
movl -0x10e4(%rbp), %eax
cmpl (%rcx), %eax
jne 0x291da
movq -0x1050(%rbp), %rdi
addq $0x48, %rdi
movq -0x720(%rbp), %rsi
movq %rsi, %rax
decq %rax
movq %rax, -0x720(%rbp)
callq 0x2e160
jmp 0x291c8
movq -0x718(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x718(%rbp)
jmp 0x291dc
movq -0x720(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x720(%rbp)
jmp 0x29140
movq -0x1050(%rbp), %rdi
callq 0x271e0
movzbl %al, %ecx
movq 0x28d9f(%rip), %rsi     # 0x51fa8
leaq 0x1d66f(%rip), %rdx     # 0x4687f
leaq -0x740(%rbp), %rdi
callq 0x16ee0
jmp 0x2921e
movq -0x1050(%rbp), %rdi
callq 0x271e0
testb $0x1, %al
jne 0x29233
jmp 0x29354
leaq -0x8c8(%rbp), %rdi
callq 0x6280
jmp 0x29241
leaq -0x8b8(%rbp), %rdi
leaq 0x1d653(%rip), %rsi     # 0x468a2
callq 0x6410
movq %rax, -0x10f0(%rbp)
jmp 0x2925d
movq -0x1050(%rbp), %rdi
addq $0x48, %rdi
callq 0x14440
movq -0x10f0(%rbp), %rdi
movq %rax, %rsi
callq 0x6100
movq %rax, -0x10f8(%rbp)
jmp 0x29285
movq -0x10f8(%rbp), %rdi
leaq 0x1d315(%rip), %rsi     # 0x465a8
callq 0x6410
movq %rax, -0x1100(%rbp)
jmp 0x292a1
movq -0x1100(%rbp), %rdi
movq 0x28cb9(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0x292b6
leaq -0x8e8(%rbp), %rdi
leaq -0x8c8(%rbp), %rsi
callq 0x6400
jmp 0x292cb
movq -0x1050(%rbp), %rdi
leaq -0x8e8(%rbp), %rsi
callq 0x28930
jmp 0x292e0
leaq -0x8e8(%rbp), %rdi
callq 0x69a8
leaq -0x8c8(%rbp), %rdi
callq 0x62c0
jmp 0x29354
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x2941b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x29343
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
leaq -0x8e8(%rbp), %rdi
callq 0x69a8
leaq -0x8c8(%rbp), %rdi
callq 0x62c0
jmp 0x2941b
movq -0x1050(%rbp), %rdi
movq %rdi, %rsi
addq $0x48, %rsi
movq (%rdi), %rax
movq 0x38(%rax), %rax
callq *%rax
jmp 0x2936d
leaq -0x740(%rbp), %rdi
callq 0x16f40
leaq -0x568(%rbp), %rdi
callq 0x16f40
movq -0x1050(%rbp), %rdi
callq 0x271e0
testb $0x1, %al
jne 0x2939a
jmp 0x2947b
leaq -0xa70(%rbp), %rdi
callq 0x6280
leaq -0xa60(%rbp), %rdi
leaq 0x1d501(%rip), %rsi     # 0x468b5
callq 0x6410
movq %rax, -0x1108(%rbp)
jmp 0x293c2
movq -0x1108(%rbp), %rdi
movq 0x28b98(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0x293d7
leaq -0xa90(%rbp), %rdi
leaq -0xa70(%rbp), %rsi
callq 0x6400
jmp 0x293ec
movq -0x1050(%rbp), %rdi
leaq -0xa90(%rbp), %rsi
callq 0x28930
jmp 0x29401
leaq -0xa90(%rbp), %rdi
callq 0x69a8
leaq -0xa70(%rbp), %rdi
callq 0x62c0
jmp 0x2947b
leaq -0x740(%rbp), %rdi
callq 0x16f40
leaq -0x568(%rbp), %rdi
callq 0x16f40
jmp 0x2a3aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x2946a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
leaq -0xa90(%rbp), %rdi
callq 0x69a8
leaq -0xa70(%rbp), %rdi
callq 0x62c0
jmp 0x2a3aa
movl $0x5, -0xa94(%rbp)
movl -0xa94(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0xa94(%rbp)
cmpl $0x0, %eax
jl 0x2a1b9
movq -0x1050(%rbp), %rdi
addq $0x48, %rdi
callq 0x14440
movq %rax, %rcx
movq -0x1050(%rbp), %rax
incl %ecx
movl %ecx, -0xa98(%rbp)
movslq 0x68(%rax), %rsi
leaq -0xab0(%rbp), %rdi
xorl %edx, %edx
callq 0x2a990
leaq -0xad0(%rbp), %rdi
callq 0x2e1d0
jmp 0x294df
movq -0x1050(%rbp), %rax
movslq 0x68(%rax), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e210
jmp 0x294f8
movl $0x0, -0xad4(%rbp)
movq -0x1050(%rbp), %rcx
movl -0xad4(%rbp), %eax
cmpl 0x68(%rcx), %eax
jge 0x29ab2
movslq -0xad4(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x1110(%rbp)
jmp 0x29534
movq -0x1110(%rbp), %rdi
addq $0x10, %rdi
movl -0xa98(%rbp), %eax
movl %eax, %esi
callq 0x25d50
jmp 0x2954e
movslq -0xad4(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x1118(%rbp)
jmp 0x2956a
movq -0x1118(%rbp), %rdi
addq $0x30, %rdi
movl -0xa98(%rbp), %eax
movl %eax, %esi
callq 0x25d50
jmp 0x29584
movq $0x0, -0xae0(%rbp)
movq -0xae0(%rbp), %rax
movq %rax, -0x1128(%rbp)
movslq -0xad4(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x1120(%rbp)
jmp 0x295b9
movq -0x1120(%rbp), %rdi
addq $0x10, %rdi
callq 0x14440
movq %rax, %rcx
movq -0x1128(%rbp), %rax
cmpq %rcx, %rax
jae 0x2971a
movslq -0xad4(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x1130(%rbp)
jmp 0x295f8
movq -0x1130(%rbp), %rdi
addq $0x10, %rdi
movq -0xae0(%rbp), %rsi
callq 0x14410
movl $0x0, (%rax)
movslq -0xad4(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x1138(%rbp)
jmp 0x29631
movq -0x1138(%rbp), %rdi
addq $0x30, %rdi
movq -0xae0(%rbp), %rsi
callq 0x14410
movl $0xffffffff, (%rax)     # imm = 0xFFFFFFFF
movq -0xae0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xae0(%rbp)
jmp 0x2958f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x2a1a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x2a19c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
movl -0x1bc(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x2a19c
movq -0x1b8(%rbp), %rdi
callq 0x61a0
movq %rax, %rcx
movq -0x1050(%rbp), %rax
movq %rcx, -0xae8(%rbp)
testb $0x1, 0x15(%rax)
je 0x2973b
movl $0x8, %edi
callq 0x61f0
movq %rax, %rdi
movq %rdi, -0x1140(%rbp)
movq -0xae8(%rbp), %rsi
callq 0x147a0
movq -0x1140(%rbp), %rdi
movq 0x288a7(%rip), %rsi     # 0x51fb0
movq 0x28878(%rip), %rdx     # 0x51f88
callq 0x67f0
jmp 0x2a3be
jmp 0x29849
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
callq 0x6770
jmp 0x29844
movq 0x288ae(%rip), %rdi     # 0x51ff0
leaq 0x1d185(%rip), %rsi     # 0x468ce
callq 0x6410
movq %rax, -0x1148(%rbp)
jmp 0x29757
movq -0x1148(%rbp), %rdi
movl -0xa98(%rbp), %esi
shrl $0x7, %esi
andl $0x3fffff, %esi         # imm = 0x3FFFFF
callq 0x65f0
movq %rax, -0x1150(%rbp)
jmp 0x2977b
movq -0x1150(%rbp), %rdi
leaq 0x1d171(%rip), %rsi     # 0x468fa
callq 0x6410
movq %rax, -0x1158(%rbp)
jmp 0x29797
movq -0x1158(%rbp), %rdi
movq 0x287c3(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x1160(%rbp)
jmp 0x297b3
movq -0x1160(%rbp), %rdi
leaq 0x1d14a(%rip), %rsi     # 0x4690b
callq 0x6410
movq %rax, -0x1168(%rbp)
jmp 0x297cf
movq -0x1168(%rbp), %rdi
movq 0x2878b(%rip), %rsi     # 0x51f68
callq 0x6470
movq %rax, -0x1170(%rbp)
jmp 0x297eb
movq -0x1170(%rbp), %rdi
leaq 0x1d161(%rip), %rsi     # 0x4695a
callq 0x6410
movq %rax, -0x1178(%rbp)
jmp 0x29807
movq -0x1178(%rbp), %rdi
movq 0x28753(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0x2981c
movl $0x4, %edi
callq 0x61f0
movq %rax, %rdi
movl $0x1, (%rdi)
movq 0x2871a(%rip), %rsi     # 0x51f50
xorl %eax, %eax
movl %eax, %edx
callq 0x67f0
jmp 0x2a3be
jmp 0x2a19c
movq -0x10(%rbp), %rax
movq %rax, -0x1188(%rbp)
movslq -0xad4(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x1180(%rbp)
jmp 0x29870
movq -0x1050(%rbp), %rax
movq -0x1180(%rbp), %rcx
movq -0x1188(%rbp), %rdx
movq %rdx, (%rcx)
addq $0x48, %rax
movq %rax, -0x1198(%rbp)
movslq -0xad4(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x1190(%rbp)
jmp 0x298af
movq -0x1190(%rbp), %rax
movq -0x1198(%rbp), %rcx
movq %rcx, 0x8(%rax)
cmpl $0x0, -0xad4(%rbp)
jne 0x298d5
xorl %eax, %eax
movq %rax, -0x11a0(%rbp)
jmp 0x298fb
movq -0x1050(%rbp), %rcx
movq -0x20(%rbp), %rax
movslq 0x68(%rcx), %rcx
xorl %edx, %edx
divq %rcx
movslq -0xad4(%rbp), %rcx
imulq %rcx, %rax
movq %rax, -0x11a0(%rbp)
movq -0x11a0(%rbp), %rax
movq %rax, -0x11b0(%rbp)
movslq -0xad4(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x11a8(%rbp)
jmp 0x29925
movq -0x1050(%rbp), %rcx
movq -0x11a8(%rbp), %rax
movq -0x11b0(%rbp), %rdx
movq %rdx, 0x50(%rax)
movl -0xad4(%rbp), %eax
addl $0x1, %eax
cmpl 0x68(%rcx), %eax
jne 0x29959
movq -0x20(%rbp), %rax
movq %rax, -0x11b8(%rbp)
jmp 0x29984
movq -0x1050(%rbp), %rcx
movq -0x20(%rbp), %rax
movslq 0x68(%rcx), %rcx
xorl %edx, %edx
divq %rcx
movl -0xad4(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq %rcx, %rax
movq %rax, -0x11b8(%rbp)
movq -0x11b8(%rbp), %rax
movq %rax, -0x11c8(%rbp)
movslq -0xad4(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x11c0(%rbp)
jmp 0x299ae
movq -0x1050(%rbp), %rax
movq -0x11c0(%rbp), %rcx
movq -0x11c8(%rbp), %rdx
movq %rdx, 0x58(%rcx)
cmpl $0x1, 0x68(%rax)
jne 0x299fc
movslq -0xad4(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x11d0(%rbp)
jmp 0x299e9
movq -0x11d0(%rbp), %rdi
callq 0x129d0
jmp 0x299f7
jmp 0x29a9c
movl $0x8, %edi
callq 0x6430
movq %rax, -0x11d8(%rbp)
jmp 0x29a0f
movslq -0xad4(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x11e0(%rbp)
jmp 0x29a2b
movq -0x11d8(%rbp), %rdi
movq -0x11e0(%rbp), %rax
movq %rax, -0xaf0(%rbp)
leaq -0x17077(%rip), %rsi    # 0x129d0
leaq -0xaf0(%rbp), %rdx
callq 0x25bc0
jmp 0x29a55
movslq -0xad4(%rbp), %rsi
leaq -0xab0(%rbp), %rdi
callq 0x2ab00
movq -0x11d8(%rbp), %rcx
movq %rcx, (%rax)
jmp 0x29a9c
movq -0x11d8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
movl $0x8, %esi
callq 0x6440
jmp 0x2a19c
jmp 0x29a9e
movl -0xad4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xad4(%rbp)
jmp 0x29502
movq -0x1050(%rbp), %rax
cmpl $0x1, 0x68(%rax)
jle 0x29b0d
movl $0x0, -0xaf4(%rbp)
movq -0x1050(%rbp), %rcx
movl -0xaf4(%rbp), %eax
cmpl 0x68(%rcx), %eax
jge 0x29b0b
movslq -0xaf4(%rbp), %rsi
leaq -0xab0(%rbp), %rdi
callq 0x2ab00
movq (%rax), %rdi
callq 0x67e0
jmp 0x29af8
jmp 0x29afa
movl -0xaf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xaf4(%rbp)
jmp 0x29ac9
jmp 0x29b0d
xorl %eax, %eax
movl %eax, %esi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x11e8(%rbp)
jmp 0x29b26
movq -0x11e8(%rbp), %rax
addq $0x10, %rax
movq %rax, -0xb00(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x11f0(%rbp)
jmp 0x29b51
movq -0x11f0(%rbp), %rax
addq $0x30, %rax
movq %rax, -0xb08(%rbp)
movl $0x1, -0xb0c(%rbp)
movq -0x1050(%rbp), %rcx
movl -0xb0c(%rbp), %eax
cmpl 0x68(%rcx), %eax
jge 0x29c99
movq $0x0, -0xb18(%rbp)
movq -0xb18(%rbp), %rax
movl -0xa98(%rbp), %ecx
cmpq %rcx, %rax
jae 0x29c83
movslq -0xb0c(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x11f8(%rbp)
jmp 0x29bc0
movq -0x11f8(%rbp), %rdi
addq $0x10, %rdi
movq -0xb18(%rbp), %rsi
callq 0x14410
movl (%rax), %eax
movl %eax, -0x11fc(%rbp)
movq -0xb00(%rbp), %rdi
movq -0xb18(%rbp), %rsi
callq 0x14410
movl -0x11fc(%rbp), %ecx
addl (%rax), %ecx
movl %ecx, (%rax)
movq -0xb08(%rbp), %rdi
movq -0xb18(%rbp), %rsi
callq 0x14410
cmpl $-0x1, (%rax)
jne 0x29c6a
movslq -0xb0c(%rbp), %rsi
leaq -0xad0(%rbp), %rdi
callq 0x2e290
movq %rax, -0x1208(%rbp)
jmp 0x29c30
movq -0x1208(%rbp), %rdi
addq $0x30, %rdi
movq -0xb18(%rbp), %rsi
callq 0x14410
movl (%rax), %eax
movl %eax, -0x120c(%rbp)
movq -0xb08(%rbp), %rdi
movq -0xb18(%rbp), %rsi
callq 0x14410
movl -0x120c(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x29c6c
movq -0xb18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xb18(%rbp)
jmp 0x29b8e
jmp 0x29c85
movl -0xb0c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb0c(%rbp)
jmp 0x29b6d
movq -0x1050(%rbp), %rdi
movl $0x0, -0xb1c(%rbp)
movl $0x0, -0xb20(%rbp)
callq 0x271e0
movzbl %al, %ecx
movq 0x282e5(%rip), %rsi     # 0x51fa8
leaq 0x1cca4(%rip), %rdx     # 0x4696e
leaq -0xb40(%rbp), %rdi
callq 0x16ee0
jmp 0x29cd8
movq -0x1050(%rbp), %rdi
callq 0x271e0
testb $0x1, %al
jne 0x29ced
jmp 0x29dca
leaq -0xcc8(%rbp), %rdi
callq 0x6280
jmp 0x29cfb
leaq -0xcb8(%rbp), %rdi
leaq 0x1cc84(%rip), %rsi     # 0x4698d
callq 0x6410
movq %rax, -0x1218(%rbp)
jmp 0x29d17
movq -0x1218(%rbp), %rdi
movq 0x28243(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0x29d2c
leaq -0xce8(%rbp), %rdi
leaq -0xcc8(%rbp), %rsi
callq 0x6400
jmp 0x29d41
movq -0x1050(%rbp), %rdi
leaq -0xce8(%rbp), %rsi
callq 0x28930
jmp 0x29d56
leaq -0xce8(%rbp), %rdi
callq 0x69a8
leaq -0xcc8(%rbp), %rdi
callq 0x62c0
jmp 0x29dca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x2a010
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x29db9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
leaq -0xce8(%rbp), %rdi
callq 0x69a8
leaq -0xcc8(%rbp), %rdi
callq 0x62c0
jmp 0x2a010
movl $0x0, -0xcec(%rbp)
movl -0xcec(%rbp), %eax
cmpl -0xa98(%rbp), %eax
jae 0x29fec
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xcf0(%rbp)
movl -0xcec(%rbp), %eax
movl -0xa98(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jae 0x29e4d
movq -0xb00(%rbp), %rdi
movl -0xcec(%rbp), %eax
movl %eax, %esi
callq 0x14410
movl (%rax), %eax
movl %eax, -0x121c(%rbp)
movq -0xb00(%rbp), %rdi
movl -0xcec(%rbp), %eax
movl %eax, %esi
addq $0x1, %rsi
callq 0x14410
movq %rax, %rcx
movl -0x121c(%rbp), %eax
addl (%rcx), %eax
addl $0x1, %eax
movl %eax, -0xcf0(%rbp)
movl -0xcf0(%rbp), %eax
cmpl -0x14(%rbp), %eax
ja 0x29f66
movq -0xb00(%rbp), %rdi
movl -0xcec(%rbp), %eax
movl %eax, %esi
callq 0x14410
movl (%rax), %eax
movl %eax, -0x1230(%rbp)
movq -0xb00(%rbp), %rdi
movl -0xcec(%rbp), %eax
incl %eax
movl %eax, %esi
callq 0x14410
movl -0x1230(%rbp), %edx
movq -0x1050(%rbp), %rdi
movl (%rax), %esi
movl %edx, %ecx
movl %esi, %edx
leal 0x1(%rcx,%rdx), %ecx
movl %ecx, (%rax)
addq $0x48, %rdi
movq %rdi, -0x1228(%rbp)
movl -0xcec(%rbp), %eax
movl -0xb1c(%rbp), %ecx
addl %ecx, %eax
movl %eax, %esi
callq 0x14410
movl (%rax), %eax
movl %eax, -0x122c(%rbp)
movq -0xb08(%rbp), %rdi
movl -0xcec(%rbp), %eax
incl %eax
movl %eax, %esi
callq 0x14410
movl -0x122c(%rbp), %ecx
movq -0x1228(%rbp), %rdi
movl %ecx, (%rax)
movl -0xcec(%rbp), %eax
movl -0xb1c(%rbp), %ecx
addl %ecx, %eax
movl %eax, %esi
callq 0x2e2b0
jmp 0x29f0b
movq -0xb00(%rbp), %rdi
movl -0xcec(%rbp), %eax
movl %eax, %esi
callq 0x2e2b0
jmp 0x29f21
movq -0xb08(%rbp), %rdi
movl -0xcec(%rbp), %eax
movl %eax, %esi
callq 0x2e2b0
jmp 0x29f37
movl -0xcec(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0xcec(%rbp)
movl -0xa98(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0xa98(%rbp)
movl -0xb20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb20(%rbp)
jmp 0x29fd6
movq -0xb00(%rbp), %rdi
movl -0xcec(%rbp), %eax
movl %eax, %esi
callq 0x14410
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
jbe 0x29fd4
movq -0x1050(%rbp), %rax
addq $0x48, %rax
movq %rax, -0x1238(%rbp)
movq -0xb08(%rbp), %rdi
movl -0xcec(%rbp), %eax
movl %eax, %esi
callq 0x14410
movq -0x1238(%rbp), %rdi
movq %rax, %rsi
movl -0xcec(%rbp), %eax
movl -0xb1c(%rbp), %ecx
movl %ecx, %edx
incl %edx
movl %edx, -0xb1c(%rbp)
addl %ecx, %eax
movl %eax, %edx
callq 0x22760
jmp 0x29fd2
jmp 0x29fd4
jmp 0x29fd6
jmp 0x29fd8
movl -0xcec(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xcec(%rbp)
jmp 0x29dd4
leaq -0xb40(%rbp), %rdi
callq 0x16f40
cmpl $0x0, -0xb1c(%rbp)
jne 0x2a021
movl $0xc, -0xcf4(%rbp)
jmp 0x2a171
leaq -0xb40(%rbp), %rdi
callq 0x16f40
jmp 0x2a19c
movq -0x1050(%rbp), %rdi
callq 0x271e0
testb $0x1, %al
jne 0x2a036
jmp 0x2a167
leaq -0xe80(%rbp), %rdi
callq 0x6280
jmp 0x2a044
leaq -0xe70(%rbp), %rdi
leaq 0x1c951(%rip), %rsi     # 0x469a3
callq 0x6410
movq %rax, -0x1240(%rbp)
jmp 0x2a060
movq -0x1240(%rbp), %rdi
movl -0xb1c(%rbp), %esi
callq 0x6830
movq %rax, -0x1248(%rbp)
jmp 0x2a07b
movq -0x1248(%rbp), %rdi
leaq 0x1c921(%rip), %rsi     # 0x469aa
callq 0x6410
movq %rax, -0x1250(%rbp)
jmp 0x2a097
movq -0x1250(%rbp), %rdi
movl -0xb20(%rbp), %esi
callq 0x6830
movq %rax, -0x1258(%rbp)
jmp 0x2a0b2
movq -0x1258(%rbp), %rdi
leaq 0x1c8f4(%rip), %rsi     # 0x469b4
callq 0x6410
movq %rax, -0x1260(%rbp)
jmp 0x2a0ce
movq -0x1260(%rbp), %rdi
movq 0x27e8c(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0x2a0e3
leaq -0xea0(%rbp), %rdi
leaq -0xe80(%rbp), %rsi
callq 0x6400
jmp 0x2a0f8
movq -0x1050(%rbp), %rdi
leaq -0xea0(%rbp), %rsi
callq 0x28930
jmp 0x2a10d
leaq -0xea0(%rbp), %rdi
callq 0x69a8
leaq -0xe80(%rbp), %rdi
callq 0x62c0
jmp 0x2a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x2a159
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
leaq -0xea0(%rbp), %rdi
callq 0x69a8
leaq -0xe80(%rbp), %rdi
callq 0x62c0
jmp 0x2a19c
movl $0x0, -0xcf4(%rbp)
leaq -0xad0(%rbp), %rdi
callq 0x2e330
leaq -0xab0(%rbp), %rdi
callq 0x2ab50
movl -0xcf4(%rbp), %eax
testl %eax, %eax
je 0x2a197
jmp 0x2a195
jmp 0x2a1b9
jmp 0x29485
leaq -0xad0(%rbp), %rdi
callq 0x2e330
leaq -0xab0(%rbp), %rdi
callq 0x2ab50
jmp 0x2a3aa
movq -0x1050(%rbp), %rdi
callq 0x271e0
testb $0x1, %al
jne 0x2a1ce
jmp 0x2a3a1
leaq -0x1028(%rbp), %rdi
callq 0x6280
leaq -0x1018(%rbp), %rdi
leaq 0x1c7db(%rip), %rsi     # 0x469c3
callq 0x6410
movq %rax, -0x1268(%rbp)
jmp 0x2a1f6
movq -0x1050(%rbp), %rdi
movq -0x20(%rbp), %rax
movq %rax, -0x12a8(%rbp)
addq $0x48, %rdi
movq %rdi, -0x12b0(%rbp)
callq 0x14440
movq -0x12b0(%rbp), %rdi
movq %rax, %rcx
movq -0x12a8(%rbp), %rax
subq %rcx, %rax
movq %rax, %xmm0
movaps 0x19dd8(%rip), %xmm1    # 0x44010
movaps %xmm1, -0x12a0(%rbp)
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x19dd5(%rip), %xmm1    # 0x44020
movaps %xmm1, -0x1290(%rbp)
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd %xmm0, -0x1278(%rbp)
callq 0x14440
movaps -0x12a0(%rbp), %xmm3
movaps -0x1290(%rbp), %xmm2
movsd -0x1278(%rbp), %xmm0
movq -0x1268(%rbp), %rdi
incq %rax
movq %rax, %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
callq 0x6910
movq %rax, -0x1270(%rbp)
jmp 0x2a2b8
movq -0x1270(%rbp), %rdi
leaq 0x1c70f(%rip), %rsi     # 0x469d5
callq 0x6410
movq %rax, -0x12b8(%rbp)
jmp 0x2a2d4
movq -0x12b8(%rbp), %rdi
movl -0x14(%rbp), %esi
callq 0x65f0
movq %rax, -0x12c0(%rbp)
jmp 0x2a2ec
movq -0x12c0(%rbp), %rdi
leaq 0x1a0cb(%rip), %rsi     # 0x443c5
callq 0x6410
movq %rax, -0x12c8(%rbp)
jmp 0x2a308
movq -0x12c8(%rbp), %rdi
movq 0x27c52(%rip), %rsi     # 0x51f68
callq 0x6470
jmp 0x2a31d
leaq -0x1048(%rbp), %rdi
leaq -0x1028(%rbp), %rsi
callq 0x6400
jmp 0x2a332
movq -0x1050(%rbp), %rdi
leaq -0x1048(%rbp), %rsi
callq 0x28930
jmp 0x2a347
leaq -0x1048(%rbp), %rdi
callq 0x69a8
leaq -0x1028(%rbp), %rdi
callq 0x62c0
jmp 0x2a3a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
jmp 0x2a393
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1b8(%rbp)
movl %eax, -0x1bc(%rbp)
leaq -0x1048(%rbp), %rdi
callq 0x69a8
leaq -0x1028(%rbp), %rdi
callq 0x62c0
jmp 0x2a3aa
addq $0x12d0, %rsp           # imm = 0x12D0
popq %rbp
retq
movq -0x1b8(%rbp), %rdi
callq 0x6850
movq %rax, %rdi
callq 0x147e0
nop