// File: /workspace/github_cpp_makefile_star2_O2/Laakeri[P]maxpre/src/./BVA.cpp
// Function: maxPreprocessor::Preprocessor::tryBVA(int, std::unordered_map<unsigned long, int, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, int>>>&)
int Preprocessor::tryBVA(int lit, unordered_map<uint64_t, int>& hashes) {
	const bool noLabels = false;
	if (noLabels && pi.isLabel[litVariable(lit)]) return 0;
	removeDuplicateClauses();
	vector<int> mLit = {lit};
	vector<int> mCls = pi.litClauses[lit];
	int redu = 0;
	int taut = 0;
	while (1) {
		vector<pair<int, int> > P;
		for (int c : mCls) {
			if (pi.clauses[c].lit.size() == 1) continue;
			int lMin = pi.clauses[c].lit[0];
			if (lMin == lit) lMin = pi.clauses[c].lit[1];
			if (hashes.size() > 0) {
				uint64_t hash = 0;
				for (int l : pi.clauses[c].lit) {
					if (l != lit) {
						hash *= polyHashMul;
						hash += (uint64_t)l;
					}
				}
				int asd = hashes[hash];
				assert(asd > 0);
				if (asd == 1) continue;
			}
			for (unsigned i = 1; i < pi.clauses[c].lit.size(); i++) {
				if (pi.litClauses[pi.clauses[c].lit[i]].size() < pi.litClauses[lMin].size() && pi.clauses[c].lit[i] != lit) {
					lMin = pi.clauses[c].lit[i];
				}
			}
			for (int d : pi.litClauses[lMin]) {
				int hd = canBVA(c, d, lit);
				if (hd != -1) {
					assert(hd != lit);
					if (!(pi.isLabel[litVariable(hd)] && noLabels)) P.push_back({hd, c});
				}
			}
		}
		if (P.size() == 0) break;
		sort(P.begin(), P.end());
		P.erase(unique(P.begin(), P.end()), P.end());
		for (auto p : P) {
			if (p.F == litNegation(lit)) {
				int rClause = -1;
				for (int d : pi.litClauses[p.F]) {
					int hd = canBVA(p.S, d, lit);
					if (hd == p.F) {
						rClause = d;
						break;
					}
				}
				assert(rClause != -1);
				pi.removeClause(rClause);
				pi.removeLiteralFromClause(lit, p.S);
				if (hashes.size() > 0) addBVAHash(pi.clauses[p.S].lit, hashes);
				return 1;
			}
		}
		sort(mLit.begin(), mLit.end());
		int fq = 0;
		int lMax = -1;
		int fMax = 0;
		unsigned i2 = 0;
		for (unsigned i = 0; i < P.size(); i++) {
			if (i > 0 && P[i].F != P[i - 1].F) {
				fq = 0;
			}
			fq++;
			while (i2 < mLit.size() && mLit[i2] < P[i].F) {
				i2++;
			}
			if (i2 == mLit.size() || mLit[i2] != P[i].F) {
				if (fq > fMax) {
					fMax = fq;
					lMax = P[i].F;
				}
			}
		}
		if (lMax == -1) break;
		int nRedu = ((int)mLit.size() + 1) * fMax - ((int)mLit.size() + 1) - fMax - taut;
		if (nRedu <= redu) {
			// Try allowing tautologies in resolvents to find more
			fq = 0;
			int tMax = 0;
			fMax = -1;
			lMax = -1;
			int ft = 0;
			i2 = 0;
			for (unsigned i = 0; i < P.size(); i++) {
				if (i == 0 || P[i].F != P[i - 1].F) {
					fq = 0;
					ft = 0;
					for (int c : mCls) {
						if (binary_search(pi.clauses[c].lit.begin(), pi.clauses[c].lit.end(), litNegation(P[i].F))) {
							fq++;
							ft++;
						}
					}
				}
				fq++;
				while (i2 < mLit.size() && mLit[i2] < P[i].F) {
					i2++;
				}
				if (i2 == mLit.size() || mLit[i2] != P[i].F) {
					int nR = ((int)mLit.size() + 1) * fq - ((int)mLit.size() + 1) - fq - taut - ft;
					if (nR > nRedu) {
						nRedu = nR;
						lMax = P[i].F;
						fMax = fq;
						tMax = ft;
					}
				}
			}
			if (nRedu > redu) {
				redu = nRedu;
				mLit.push_back(lMax);
				vector<int> tmCls;
				for (int c : mCls) {
					if (binary_search(pi.clauses[c].lit.begin(), pi.clauses[c].lit.end(), litNegation(lMax))) {
						tmCls.push_back(c);
					}
				}
				mCls = tmCls;
				taut += tMax;
				for (unsigned i = 0; i < P.size(); i++) {
					if (P[i].F == lMax) {
						mCls.push_back(P[i].S);
					}
				}
				assert((int)mCls.size() == fMax);
			}
			else {
				break;
			}
		}
		else {
			redu = nRedu;
			mLit.push_back(lMax);
			mCls.clear();
			for (unsigned i = 0; i < P.size(); i++) {
				if (P[i].F == lMax) {
					mCls.push_back(P[i].S);
				}
			}
			assert((int)mCls.size() == fMax);
		}
	}
	if (redu == 0) return 0;
	assert(redu == (int)mLit.size() * (int)mCls.size() - (int)mLit.size() - (int)mCls.size() - taut);
	sort(mLit.begin(), mLit.end());
	vector<int> rmClauses;
	for (int c : mCls) {
		rmClauses.push_back(c);
		assert(pi.clauses[c].lit.size() > 1);
		int lMin = pi.clauses[c].lit[0];
		if (lMin == lit) lMin = pi.clauses[c].lit[1];
		for (unsigned i = 1; i < pi.clauses[c].lit.size(); i++) {
			if (pi.litClauses[pi.clauses[c].lit[i]].size() < pi.litClauses[lMin].size() && pi.clauses[c].lit[i] != lit) {
				lMin = pi.clauses[c].lit[i];
			}
		}
		for (int d : pi.litClauses[lMin]) {
			int hd = canBVA(c, d, lit);
			if (hd != -1 && binary_search(mLit.begin(), mLit.end(), hd)) {
				rmClauses.push_back(d);
			}
		}
	}
	sort(rmClauses.begin(), rmClauses.end());
	rmClauses.erase(unique(rmClauses.begin(), rmClauses.end()), rmClauses.end());
	assert((int)rmClauses.size() >= (int)mLit.size() * (int)mCls.size() - taut);
	assert((int)rmClauses.size() <= (int)mLit.size() * (int)mCls.size());
	int nVar = pi.addVar();
	int realRedu = 0;
	for (int l : mLit) {
		vector<int> newClause = {l, posLit(nVar)};
		pi.addClause(newClause);
		realRedu--;
		if (hashes.size() > 0) addBVAHash(newClause, hashes);
	}
	for (int c : mCls) {
		vector<int> newClause;
		for (int l : pi.clauses[c].lit) {
			if (!binary_search(mLit.begin(), mLit.end(), l)) {
				newClause.push_back(l);
			}
		}
		newClause.push_back(negLit(nVar));
		pi.addClause(newClause);
		realRedu--;
		if (hashes.size() > 0) addBVAHash(newClause, hashes);
	}
	for (int c : rmClauses) {
		pi.removeClause(c);
		realRedu++;
	}
	assert(realRedu >= redu);
	assert(realRedu <= redu + taut);
	rLog.removeClause(realRedu);
	rLog.removeVariable(-1);
	return realRedu;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb8, %rsp
movq %rdx, 0x58(%rsp)
movl %esi, %ebx
movq %rdi, %rbp
callq 0x8cf6
leaq 0x40(%rsp), %rsi
movl %ebx, (%rsi)
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rdx
leaq 0x10(%rsp), %rcx
callq 0x18af6
movl %ebx, (%rsp)
movslq %ebx, %rax
imulq $0x18, %rax, %rsi
addq 0x18(%rbp), %rsi
leaq 0x40(%rsp), %rdi
callq 0x19284
xorps %xmm0, %xmm0
movq $0x0, 0x80(%rsp)
movl $0x0, 0xc(%rsp)
movq %rbp, 0xa8(%rsp)
andq $0x0, 0x20(%rsp)
movaps %xmm0, 0x10(%rsp)
movq 0x40(%rsp), %r14
movq 0x48(%rsp), %rax
movq %rax, 0x30(%rsp)
cmpq 0x30(%rsp), %r14
je 0x11d4e
movl (%r14), %r12d
movslq %r12d, %rax
movq (%rbp), %rcx
imulq $0x28, %rax, %r15
movq (%rcx,%r15), %rax
movq 0x8(%rcx,%r15), %rdx
movq %rdx, %rcx
subq %rax, %rcx
cmpq $0x4, %rcx
je 0x11c9e
movl (%rax), %r13d
cmpl (%rsp), %r13d
jne 0x11c46
movl 0x4(%rax), %r13d
movq 0x58(%rsp), %rsi
cmpq $0x0, 0x18(%rsi)
je 0x11cb7
andq $0x0, 0x60(%rsp)
movq 0x328(%rbp), %rcx
xorl %esi, %esi
cmpq %rdx, %rax
je 0x11c80
movslq (%rax), %rdi
cmpl (%rsp), %edi
je 0x11c7a
imulq %rcx, %rsi
addq %rdi, %rsi
movq %rsi, 0x60(%rsp)
addq $0x4, %rax
jmp 0x11c61
movq 0x58(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1dd6a
movl (%rax), %eax
testl %eax, %eax
jle 0x1268a
cmpl $0x1, %eax
jne 0x11ca7
addq $0x4, %r14
jmp 0x11c0b
movq (%rbp), %rcx
movq (%rcx,%r15), %rax
movq 0x8(%rcx,%r15), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
movq 0x18(%rbp), %rdx
pushq $0x1
popq %rsi
movl %esi, %esi
movslq %r13d, %r8
cmpq %rsi, %rcx
jbe 0x11d00
movslq (%rax,%rsi,4), %rdi
imulq $0x18, %rdi, %r9
movq 0x8(%rdx,%r9), %r10
subq (%rdx,%r9), %r10
imulq $0x18, %r8, %r8
movq 0x8(%rdx,%r8), %r9
subq (%rdx,%r8), %r9
movl %r13d, %r8d
cmpq %r9, %r10
jae 0x11cf5
movl %edi, %r8d
cmpl (%rsp), %edi
cmovnel %r8d, %r13d
incl %esi
jmp 0x11cc2
imulq $0x18, %r8, %rax
movq (%rdx,%rax), %rbx
movq 0x8(%rdx,%rax), %r15
cmpq %r15, %rbx
je 0x11c9e
movl (%rbx), %edx
movq %rbp, %rdi
movl %r12d, %esi
movl (%rsp), %ecx
callq 0x11ab8
cmpl $-0x1, %eax
je 0x11d48
cmpl (%rsp), %eax
je 0x12654
movl %eax, 0x60(%rsp)
movl %r12d, 0x64(%rsp)
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1d392
addq $0x4, %rbx
jmp 0x11d0d
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %rsi
cmpq %rdi, %rsi
je 0x12262
callq 0x1d596
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x1db29
movq 0x18(%rsp), %rdx
leaq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x19380
movq 0x10(%rsp), %rax
movq 0x18(%rsp), %rcx
cmpq %rcx, %rax
je 0x11dad
movslq (%rax), %rbx
movl %ebx, %edx
xorl (%rsp), %edx
cmpl $0x1, %edx
je 0x121a7
addq $0x8, %rax
jmp 0x11d91
movq 0x88(%rsp), %rdi
movq 0x90(%rsp), %rsi
callq 0x1c706
orl $-0x1, 0x4(%rsp)
movq 0x10(%rsp), %rax
movq 0x18(%rsp), %rsi
movq %rsi, %rdi
subq %rax, %rdi
sarq $0x3, %rdi
movq 0x88(%rsp), %rcx
movq 0x90(%rsp), %rdx
movq %rdx, %r8
subq %rcx, %r8
movq %r8, %r13
sarq $0x2, %r8
xorl %r9d, %r9d
pushq $-0x1
popq %r11
xorl %r10d, %r10d
xorl %r14d, %r14d
xorl %r15d, %r15d
movl %r9d, %r9d
cmpq %r9, %rdi
jbe 0x11e7e
testq %r9, %r9
je 0x11e2a
movl (%rax,%r9,8), %ebx
leal -0x1(%r9), %r12d
cmpl (%rax,%r12,8), %ebx
movl $0x0, %ebx
cmovnel %ebx, %r15d
movl %r15d, %ebx
leal 0x1(%rbx), %r15d
movl %r10d, %r12d
cmpq %r12, %r8
jbe 0x11e48
movl (%rcx,%r12,4), %ebp
cmpl (%rax,%r9,8), %ebp
jge 0x11e48
incl %r10d
jmp 0x11e31
cmpq %r12, %r8
jne 0x11e58
cmpl %r14d, %ebx
jl 0x11e71
movl (%rax,%r9,8), %ebp
jmp 0x11e67
movl (%rax,%r9,8), %ebp
cmpl %ebp, (%rcx,%r12,4)
je 0x11e71
cmpl %r14d, %ebx
jl 0x11e71
movl %ebp, 0x4(%rsp)
movl %ebp, %r11d
movl %r15d, %r14d
incl %r9d
movq 0xa8(%rsp), %rbp
jmp 0x11e08
cmpl $-0x1, %r11d
je 0x12262
shrq $0x2, %r13
leal 0x1(%r13), %edi
imull %r14d, %edi
notl %r13d
movq 0x80(%rsp), %r8
addl %r14d, %r8d
subl %r8d, %r13d
addl %edi, %r13d
movq %r13, 0x30(%rsp)
cmpl 0xc(%rsp), %r13d
jle 0x11f14
leaq 0x88(%rsp), %rdi
leaq 0x4(%rsp), %rsi
callq 0x68a4
movq 0x40(%rsp), %rax
cmpq %rax, 0x48(%rsp)
je 0x11ed7
movq %rax, 0x48(%rsp)
xorl %ebx, %ebx
movl %ebx, %ebx
movq 0x10(%rsp), %rax
movq 0x18(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %rbx, %rcx
jbe 0x1205f
movl (%rax,%rbx,8), %ecx
cmpl 0x4(%rsp), %ecx
jne 0x11f10
leaq (%rax,%rbx,8), %rsi
addq $0x4, %rsi
leaq 0x40(%rsp), %rdi
callq 0x68a4
incl %ebx
jmp 0x11ed9
orl $-0x1, 0x4(%rsp)
xorl %r14d, %r14d
xorl %r15d, %r15d
movl $0x0, 0xa4(%rsp)
xorl %r12d, %r12d
pushq $-0x1
popq %rdi
movl %edi, 0xa0(%rsp)
xorl %r13d, %r13d
movl %r14d, %r14d
subq %rax, %rsi
sarq $0x3, %rsi
cmpq %r14, %rsi
jbe 0x1207b
testq %r14, %r14
je 0x11f5f
movl (%rax,%r14,8), %esi
leal -0x1(%r14), %edi
cmpl (%rax,%rdi,8), %esi
je 0x11fd5
movq 0x40(%rsp), %rbx
movq 0x48(%rsp), %rbp
xorl %r15d, %r15d
xorl %r13d, %r13d
cmpq %rbp, %rbx
je 0x11fb8
movslq (%rbx), %rax
movq 0xa8(%rsp), %rcx
movq (%rcx), %rcx
imulq $0x28, %rax, %rax
movq (%rcx,%rax), %rdi
movq 0x8(%rcx,%rax), %rsi
movq 0x10(%rsp), %rax
movl (%rax,%r14,8), %eax
xorl $0x1, %eax
movl %eax, 0x60(%rsp)
leaq 0x60(%rsp), %rdx
callq 0x18f6e
movzbl %al, %eax
addl %eax, %r15d
addl %eax, %r13d
addq $0x4, %rbx
jmp 0x11f6f
movq 0x88(%rsp), %rcx
movq 0x90(%rsp), %rdx
movq 0x10(%rsp), %rax
movq 0xa8(%rsp), %rbp
movl %r13d, %esi
leal 0x1(%rsi), %r13d
movq %rdx, %rdi
subq %rcx, %rdi
sarq $0x2, %rdi
movl %r12d, %r8d
cmpq %r8, %rdi
jbe 0x11ffd
movl (%rcx,%r8,4), %r9d
cmpl (%rax,%r14,8), %r9d
jge 0x11ffd
incl %r12d
jmp 0x11fe6
cmpq %r8, %rdi
je 0x1200c
movl (%rcx,%r8,4), %r8d
cmpl (%rax,%r14,8), %r8d
je 0x12052
leal 0x1(%rdi), %r8d
imull %r13d, %r8d
movq 0x80(%rsp), %r9
addl %r15d, %r9d
addl %edi, %esi
addl %r9d, %esi
subl %esi, %r8d
addl $-0x2, %r8d
cmpl 0x30(%rsp), %r8d
jle 0x12052
movl (%rax,%r14,8), %esi
movl %esi, 0x4(%rsp)
movl %r15d, 0xa4(%rsp)
movl %r8d, %esi
movq %rsi, 0x30(%rsp)
movl %r13d, 0xa0(%rsp)
incl %r14d
movq 0x18(%rsp), %rsi
jmp 0x11f3a
movq 0x48(%rsp), %rax
subq 0x40(%rsp), %rax
shrq $0x2, %rax
cmpl %eax, %r14d
je 0x1218c
jmp 0x126c2
movl 0xc(%rsp), %ebx
cmpl %ebx, 0x30(%rsp)
jle 0x12645
leaq 0x88(%rsp), %rdi
leaq 0x4(%rsp), %rsi
callq 0x68a4
andq $0x0, 0x70(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movq 0x40(%rsp), %r14
movq 0x48(%rsp), %r15
cmpq %r15, %r14
je 0x12104
movslq (%r14), %rax
movl %eax, 0x3c(%rsp)
movq (%rbp), %rcx
imulq $0x28, %rax, %rax
movq (%rcx,%rax), %rdi
movq 0x8(%rcx,%rax), %rsi
movl 0x4(%rsp), %eax
xorl $0x1, %eax
movl %eax, 0xb4(%rsp)
leaq 0xb4(%rsp), %rdx
callq 0x18f6e
testb %al, %al
je 0x120fe
leaq 0x60(%rsp), %rdi
leaq 0x3c(%rsp), %rsi
callq 0x68a4
addq $0x4, %r14
jmp 0x120b3
leaq 0x40(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x18ea4
movl 0xa4(%rsp), %r14d
addl 0x80(%rsp), %r14d
xorl %ebx, %ebx
movl %ebx, %ebx
movq 0x10(%rsp), %rax
movq 0x18(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %rbx, %rcx
jbe 0x1215c
movl (%rax,%rbx,8), %ecx
cmpl 0x4(%rsp), %ecx
jne 0x12158
leaq (%rax,%rbx,8), %rsi
addq $0x4, %rsi
leaq 0x40(%rsp), %rdi
callq 0x68a4
incl %ebx
jmp 0x12125
movq 0x48(%rsp), %rax
subq 0x40(%rsp), %rax
shrq $0x2, %rax
cmpl %eax, 0xa0(%rsp)
jne 0x126e1
leaq 0x60(%rsp), %rdi
callq 0x7512
movl %r14d, %eax
movq %rax, 0x80(%rsp)
leaq 0x10(%rsp), %rdi
callq 0x1d322
movq 0x30(%rsp), %rax
movl %eax, 0xc(%rsp)
xorps %xmm0, %xmm0
jmp 0x11bf1
movslq 0x4(%rax), %r12
movq 0x18(%rbp), %rax
imulq $0x18, %rbx, %rcx
movq (%rax,%rcx), %r14
movq 0x8(%rax,%rcx), %r13
cmpq %r13, %r14
je 0x12671
movl (%r14), %r15d
movq %rbp, %rdi
movl %r12d, %esi
movl %r15d, %edx
movl (%rsp), %ecx
callq 0x11ab8
addq $0x4, %r14
cmpl %ebx, %eax
jne 0x121bc
cmpl $-0x1, %r15d
je 0x12671
movq %rbp, %rdi
movl %r15d, %esi
callq 0x21490
pushq $0x1
popq %r15
movq %rbp, %rdi
movl (%rsp), %esi
movl %r12d, %edx
movl %r15d, %ecx
callq 0x216d0
movq 0x58(%rsp), %rax
cmpq $0x0, 0x18(%rax)
je 0x1222c
imulq $0x28, %r12, %rsi
addq (%rbp), %rsi
movq %rbp, %rdi
movq 0x58(%rsp), %rdx
callq 0x11940
leaq 0x10(%rsp), %rdi
callq 0x1d322
leaq 0x40(%rsp), %rdi
callq 0x7512
leaq 0x88(%rsp), %rdi
callq 0x7512
movl %r15d, %eax
addq $0xb8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x10(%rsp), %rdi
callq 0x1d322
movl 0xc(%rsp), %ebx
testl %ebx, %ebx
je 0x1263d
movq 0x88(%rsp), %rdi
movq 0x90(%rsp), %rsi
movq %rsi, %rax
subq %rdi, %rax
movq 0x48(%rsp), %rcx
subq 0x40(%rsp), %rcx
shrq $0x2, %rax
shrq $0x2, %rcx
movl %ecx, %edx
imull %eax, %edx
addl 0x80(%rsp), %eax
addl %ecx, %eax
subl %eax, %edx
cmpl %edx, %ebx
jne 0x12700
callq 0x1c706
leaq 0x10(%rsp), %r15
andq $0x0, 0x10(%r15)
xorps %xmm0, %xmm0
movaps %xmm0, (%r15)
movq 0x40(%rsp), %rbx
movq 0x48(%rsp), %rax
movq %rax, 0x30(%rsp)
leaq 0x3c(%rsp), %r13
cmpq 0x30(%rsp), %rbx
je 0x123e0
movl (%rbx), %eax
movl %eax, 0x60(%rsp)
movq %r15, %rdi
leaq 0x60(%rsp), %rsi
callq 0x68a4
movslq 0x60(%rsp), %rax
movq (%rbp), %rcx
imulq $0x28, %rax, %rdx
movq (%rcx,%rdx), %rax
movq 0x8(%rcx,%rdx), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq $0x1, %rcx
jbe 0x126a3
movl (%rax), %edx
cmpl (%rsp), %edx
jne 0x12331
movl 0x4(%rax), %edx
movq 0x18(%rbp), %rsi
pushq $0x1
popq %rdi
movl %edi, %edi
movslq %edx, %r9
cmpq %rdi, %rcx
jbe 0x12377
movslq (%rax,%rdi,4), %r8
imulq $0x18, %r8, %r10
movq 0x8(%rsi,%r10), %r11
subq (%rsi,%r10), %r11
imulq $0x18, %r9, %r9
movq 0x8(%rsi,%r9), %r10
subq (%rsi,%r9), %r10
movl %edx, %r9d
cmpq %r10, %r11
jae 0x1236b
movl %r8d, %r9d
cmpl (%rsp), %r8d
cmovnel %r9d, %edx
incl %edi
jmp 0x12338
imulq $0x18, %r9, %rax
movq (%rsi,%rax), %r14
movq 0x8(%rsi,%rax), %r12
cmpq %r12, %r14
je 0x123d7
movl (%r14), %edx
movl %edx, 0x4(%rsp)
movl 0x60(%rsp), %esi
movq %rbp, %rdi
movl (%rsp), %ecx
callq 0x11ab8
movl %eax, 0x3c(%rsp)
cmpl $-0x1, %eax
je 0x123d1
movq 0x88(%rsp), %rdi
movq 0x90(%rsp), %rsi
movq %r13, %rdx
callq 0x18f6e
testb %al, %al
je 0x123d1
movq %r15, %rdi
leaq 0x4(%rsp), %rsi
callq 0x68a4
addq $0x4, %r14
jmp 0x12384
addq $0x4, %rbx
jmp 0x122e2
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x1c706
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x1cd6f
leaq 0x10(%rsp), %rdi
movq 0x8(%rdi), %rdx
movq %rax, %rsi
callq 0x1902e
movq 0x18(%rsp), %rax
subq 0x10(%rsp), %rax
shrq $0x2, %rax
movq 0x90(%rsp), %rdx
subq 0x88(%rsp), %rdx
shrq $0x2, %rdx
movq 0x48(%rsp), %rcx
subq 0x40(%rsp), %rcx
shrq $0x2, %rcx
imull %edx, %ecx
movl %ecx, %edx
subl 0x80(%rsp), %edx
cmpl %eax, %edx
jg 0x1271f
cmpl %eax, %ecx
jl 0x1273e
movq %rbp, %rdi
callq 0x215a4
movl %eax, %ebx
movq 0x88(%rsp), %r14
movq 0x90(%rsp), %r13
addl %eax, %ebx
xorl %r15d, %r15d
leaq 0x60(%rsp), %r12
cmpq %r13, %r14
je 0x124e6
movl (%r14), %eax
movl %eax, 0x4(%rsp)
movl %ebx, 0x8(%rsp)
movq %r12, %rdi
leaq 0x4(%rsp), %rsi
pushq $0x2
popq %rdx
leaq 0x3c(%rsp), %rcx
callq 0x18af6
movq %rbp, %rdi
movq %r12, %rsi
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
callq 0x214e8
movq 0x58(%rsp), %rax
cmpq $0x0, 0x18(%rax)
je 0x124d5
movq %rbp, %rdi
movq %r12, %rsi
movq 0x58(%rsp), %rdx
callq 0x11940
movq %r12, %rdi
callq 0x7512
addq $0x4, %r14
decl %r15d
jmp 0x1247f
movq 0x40(%rsp), %r14
movq 0x48(%rsp), %rax
movq %rax, 0x30(%rsp)
orl $0x1, %ebx
leaq 0x60(%rsp), %r12
leaq 0x4(%rsp), %r13
cmpq 0x30(%rsp), %r14
je 0x125d2
movl %r15d, (%rsp)
movl %ebx, %r15d
movslq (%r14), %rax
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
andq $0x0, 0x70(%rsp)
movq (%rbp), %rcx
imulq $0x28, %rax, %rax
movq (%rcx,%rax), %rbx
movq 0x8(%rcx,%rax), %rbp
cmpq %rbp, %rbx
je 0x1256e
movl (%rbx), %eax
movl %eax, 0x4(%rsp)
movq 0x88(%rsp), %rdi
movq 0x90(%rsp), %rsi
movq %r13, %rdx
callq 0x18f6e
testb %al, %al
jne 0x12568
movq %r12, %rdi
movq %r13, %rsi
callq 0x68a4
addq $0x4, %rbx
jmp 0x12536
movl %r15d, %ebx
movl %r15d, 0x4(%rsp)
movq %r12, %rdi
movq %r13, %rsi
callq 0x19ed4
movq 0xa8(%rsp), %rbp
movq %rbp, %rdi
movq %r12, %rsi
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
callq 0x214e8
movl (%rsp), %r15d
movq 0x58(%rsp), %rax
cmpq $0x0, 0x18(%rax)
je 0x125be
movq %rbp, %rdi
movq %r12, %rsi
movq 0x58(%rsp), %rdx
callq 0x11940
decl %r15d
movq %r12, %rdi
callq 0x7512
addq $0x4, %r14
jmp 0x12502
movq 0x10(%rsp), %rbx
movq 0x18(%rsp), %r14
cmpq %r14, %rbx
je 0x125f4
movl (%rbx), %esi
movq %rbp, %rdi
callq 0x21490
incl %r15d
addq $0x4, %rbx
jmp 0x125dc
movl 0xc(%rsp), %eax
cmpl %eax, %r15d
jl 0x1275d
addl 0x80(%rsp), %eax
cmpl %eax, %r15d
jg 0x1277c
addq $0x218, %rbp            # imm = 0x218
movq %rbp, %rdi
movl %r15d, %esi
callq 0x21e84
pushq $-0x1
popq %rsi
movq %rbp, %rdi
callq 0x21ebe
leaq 0x10(%rsp), %rdi
callq 0x7512
jmp 0x12236
xorl %r15d, %r15d
jmp 0x12236
leaq 0x10(%rsp), %rdi
callq 0x1d322
jmp 0x12270
leaq 0x1d707(%rip), %rdi     # 0x2fd62
leaq 0x1d6a7(%rip), %rsi     # 0x2fd09
leaq 0x1d6aa(%rip), %rcx     # 0x2fd13
pushq $0x5a
popq %rdx
callq 0x31c0
leaq 0x1d6f4(%rip), %rdi     # 0x2fd6c
leaq 0x1d68a(%rip), %rsi     # 0x2fd09
leaq 0x1d68d(%rip), %rcx     # 0x2fd13
pushq $0x6c
jmp 0x1266b
leaq 0x1d670(%rip), %rdi     # 0x2fd01
leaq 0x1d671(%rip), %rsi     # 0x2fd09
leaq 0x1d674(%rip), %rcx     # 0x2fd13
pushq $0x4f
jmp 0x1266b
leaq 0x1d742(%rip), %rdi     # 0x2fdec
leaq 0x1d658(%rip), %rsi     # 0x2fd09
leaq 0x1d65b(%rip), %rcx     # 0x2fd13
movl $0xd2, %edx
callq 0x31c0
leaq 0x1d6b1(%rip), %rdi     # 0x2fd7a
leaq 0x1d639(%rip), %rsi     # 0x2fd09
leaq 0x1d63c(%rip), %rcx     # 0x2fd13
movl $0xc9, %edx
callq 0x31c0
leaq 0x1d692(%rip), %rdi     # 0x2fd7a
leaq 0x1d61a(%rip), %rsi     # 0x2fd09
leaq 0x1d61d(%rip), %rcx     # 0x2fd13
movl $0xba, %edx
callq 0x31c0
leaq 0x1d68c(%rip), %rdi     # 0x2fd93
leaq 0x1d5fb(%rip), %rsi     # 0x2fd09
leaq 0x1d5fe(%rip), %rcx     # 0x2fd13
movl $0xcd, %edx
callq 0x31c0
leaq 0x1d6e3(%rip), %rdi     # 0x2fe09
leaq 0x1d5dc(%rip), %rsi     # 0x2fd09
leaq 0x1d5df(%rip), %rcx     # 0x2fd13
movl $0xe3, %edx
callq 0x31c0
leaq 0x1d708(%rip), %rdi     # 0x2fe4d
leaq 0x1d5bd(%rip), %rsi     # 0x2fd09
leaq 0x1d5c0(%rip), %rcx     # 0x2fd13
movl $0xe4, %edx
callq 0x31c0
leaq 0x1d726(%rip), %rdi     # 0x2fe8a
leaq 0x1d59e(%rip), %rsi     # 0x2fd09
leaq 0x1d5a1(%rip), %rcx     # 0x2fd13
movl $0xfd, %edx
callq 0x31c0
leaq 0x1d718(%rip), %rdi     # 0x2fe9b
leaq 0x1d57f(%rip), %rsi     # 0x2fd09
leaq 0x1d582(%rip), %rcx     # 0x2fd13
movl $0xfe, %edx
callq 0x31c0
jmp 0x127e0
jmp 0x127e0
jmp 0x127e0
jmp 0x127e0
movq %rax, %rbx
jmp 0x1280d
jmp 0x127e0
jmp 0x127cf
jmp 0x12800
jmp 0x12800
movq %rax, %rbx
jmp 0x12817
jmp 0x12800
jmp 0x12800
jmp 0x127e5
jmp 0x127e0
jmp 0x127e0
jmp 0x127e0
jmp 0x12800
jmp 0x12800
jmp 0x127e5
jmp 0x127e5
jmp 0x127cf
jmp 0x127cf
jmp 0x12800
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x7512
jmp 0x12803
jmp 0x12800
movq %rax, %rbx
jmp 0x127f2
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x7512
leaq 0x10(%rsp), %rdi
callq 0x7512
jmp 0x1280d
jmp 0x12800
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x1d322
leaq 0x40(%rsp), %rdi
callq 0x7512
leaq 0x88(%rsp), %rdi
callq 0x7512
movq %rbx, %rdi
callq 0x3490