// File: Laakeri[P]maxpre/src/cardinalityconstraint.cpp
// Function: maxPreprocessor::CardinalityConstraint::SMerge(std::vector<int, std::allocator<int>> const&, std::vector<int, std::allocator<int>> const&, maxPreprocessor::CardinalityConstraint::Formula&, bool, bool)
vector<int> CardinalityConstraint::SMerge(const vector<int>& A, const vector<int>& B, Formula& F, bool d1, bool d2) {
	// use the bit reversal trick to do SMerge without recursion
	assert(A.size() == B.size());
	int n = A.size();
	vector<int> c(2*n);
	for (int i = 0; i < n; i++) {
		c[2*i] = F.freeVar++;
		if (i < n/2) c[2*i+1] = F.freeVar++;
		if (d1) {
			if (i < n/2) F.clauses.push_back({-A[i], -B[i], c[2*i+1]});
			F.clauses.push_back({-A[i], c[2*i]});
			F.clauses.push_back({-B[i], c[2*i]});
		}
		if (d2) {
			F.clauses.push_back({A[i], B[i], -c[2*i]});
			if (i < n/2) F.clauses.push_back({A[i], -c[2*i+1]});
			if (i < n/2) F.clauses.push_back({B[i], -c[2*i+1]});
		}
	}
	for (int i = 0; i < n; i++) {
		int u = 0;
		for (int j = 1; j < n; j *= 2) {
			u *= 2;
			if (i & j) u++;
		}
		if (i < u) {
			swap(c[2*i], c[2*u]);
			swap(c[2*i+1], c[2*u+1]);
		}
	}
	int oc = 0;
	for (int le = 4; le <= 2*n; le *= 2) {
		for (int i = 0; i < 2*n; i+=le) {
			if (le == 2*n) oc = 1;
			for (int j = 0; j < le/4; j++) {
				if (d1) {
					if (j+1 < le/4 || !oc) F.clauses.push_back({-c[i+j+1], -c[i+j+le/2], F.freeVar+2*j+1});
					F.clauses.push_back({-c[i+j+1], F.freeVar+2*j});
					F.clauses.push_back({-c[i+j+le/2], F.freeVar+2*j});
				}
				if (d2) {
					F.clauses.push_back({c[i+j+1], c[i+j+le/2], -(F.freeVar+2*j)});
					if (j+1 < le/4 || !oc) F.clauses.push_back({c[i+j+1], -(F.freeVar+2*j+1)});
					if (j+1 < le/4 || !oc) F.clauses.push_back({c[i+j+le/2], -(F.freeVar+2*j+1)});
				}
			}
			for (int j = 1; j < le/2; j++) c[i+j] = F.freeVar++;
			if (!oc) c[i+le/2] = F.freeVar++;
			oc ^= 1;
		}
	}
	c.resize(n);
	return c;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x460, %rsp            # imm = 0x460
movl %r9d, %eax
movq %rcx, -0x330(%rbp)
movq %rdx, %rcx
movq -0x330(%rbp), %rdx
movq %rcx, -0x328(%rbp)
movq %rsi, %rcx
movq -0x328(%rbp), %rsi
movq %rcx, -0x320(%rbp)
movq %rdi, %r9
movq -0x320(%rbp), %rdi
movq %r9, -0x318(%rbp)
movb %al, %cl
movq %r9, %rax
movq %rax, -0x310(%rbp)
movb 0x10(%rbp), %al
movq %r9, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
andb $0x1, %cl
movb %cl, -0x29(%rbp)
andb $0x1, %al
movb %al, -0x2a(%rbp)
movq -0x18(%rbp), %rdi
callq 0xf940
movq %rax, -0x308(%rbp)
movq -0x20(%rbp), %rdi
callq 0xf940
movq %rax, %rcx
movq -0x308(%rbp), %rax
cmpq %rcx, %rax
jne 0x7c860
jmp 0x7c87f
leaq 0xb938(%rip), %rdi      # 0x8819f
leaq 0xb84e(%rip), %rsi      # 0x880bc
movl $0x4a, %edx
leaq 0xb9b6(%rip), %rcx      # 0x88230
callq 0x4260
movq -0x18(%rbp), %rdi
callq 0xf940
movl %eax, -0x30(%rbp)
movb $0x0, -0x31(%rbp)
movl -0x30(%rbp), %eax
addl %eax, %eax
cltq
movq %rax, -0x340(%rbp)
leaq -0x32(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0xa710
movq -0x318(%rbp), %rdi
movq -0x340(%rbp), %rsi
movq -0x338(%rbp), %rdx
callq 0xa730
jmp 0x7c8c9
leaq -0x32(%rbp), %rdi
callq 0xa7a0
movl $0x0, -0x48(%rbp)
movl -0x48(%rbp), %eax
cmpl -0x30(%rbp), %eax
jge 0x7cfcd
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movl 0x18(%rax), %ecx
movl %ecx, -0x348(%rbp)
addl $0x1, %ecx
movl %ecx, 0x18(%rax)
movl -0x48(%rbp), %eax
shll %eax
movslq %eax, %rsi
callq 0xa7c0
movl -0x348(%rbp), %ecx
movl %ecx, (%rax)
movl -0x48(%rbp), %eax
movl %eax, -0x344(%rbp)
movl -0x30(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x344(%rbp), %eax
cmpl %ecx, %eax
jge 0x7c982
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movl 0x18(%rax), %ecx
movl %ecx, -0x34c(%rbp)
addl $0x1, %ecx
movl %ecx, 0x18(%rax)
movl -0x48(%rbp), %eax
shll %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0xa7c0
movl -0x34c(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x7c982
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x32(%rbp), %rdi
callq 0xa7a0
jmp 0x7da62
testb $0x1, -0x29(%rbp)
je 0x7cc75
movl -0x48(%rbp), %eax
movl %eax, -0x350(%rbp)
movl -0x30(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x350(%rbp), %eax
cmpl %ecx, %eax
jge 0x7ca91
movq -0x28(%rbp), %rax
movq %rax, -0x360(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movl (%rax), %eax
negl %eax
movl %eax, -0x7c(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
negl %eax
movl %eax, -0x78(%rbp)
movl -0x48(%rbp), %ecx
movl %ecx, %eax
leal 0x1(%rax,%rax), %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0x74(%rbp)
leaq -0x7c(%rbp), %rax
movq %rax, -0x70(%rbp)
movq $0x3, -0x68(%rbp)
leaq -0x7d(%rbp), %rdi
movq %rdi, -0x358(%rbp)
callq 0xa710
movq -0x358(%rbp), %rcx
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
leaq -0x60(%rbp), %rdi
callq 0x3c9b0
jmp 0x7ca3a
movq -0x360(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x3e200
jmp 0x7ca4c
leaq -0x60(%rbp), %rdi
callq 0xab00
leaq -0x7d(%rbp), %rdi
callq 0xa7a0
jmp 0x7ca91
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7ca83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x60(%rbp), %rdi
callq 0xab00
leaq -0x7d(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
movq -0x28(%rbp), %rax
movq %rax, -0x370(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
negl %eax
movl %eax, -0xb0(%rbp)
movl -0x48(%rbp), %eax
addl %eax, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0xac(%rbp)
leaq -0xb0(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq $0x2, -0xa0(%rbp)
leaq -0xb1(%rbp), %rdi
movq %rdi, -0x368(%rbp)
callq 0xa710
movq -0x368(%rbp), %rcx
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
leaq -0x98(%rbp), %rdi
callq 0x3c9b0
jmp 0x7cb1e
movq -0x370(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x3e200
jmp 0x7cb33
leaq -0x98(%rbp), %rdi
callq 0xab00
leaq -0xb1(%rbp), %rdi
callq 0xa7a0
movq -0x28(%rbp), %rax
movq %rax, -0x380(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
negl %eax
movl %eax, -0xe8(%rbp)
movl -0x48(%rbp), %eax
addl %eax, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0xe4(%rbp)
leaq -0xe8(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq $0x2, -0xd8(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x378(%rbp)
callq 0xa710
movq -0x378(%rbp), %rcx
movq -0xe0(%rbp), %rsi
movq -0xd8(%rbp), %rdx
leaq -0xd0(%rbp), %rdi
callq 0x3c9b0
jmp 0x7cbd8
movq -0x380(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x3e200
jmp 0x7cbed
leaq -0xd0(%rbp), %rdi
callq 0xab00
leaq -0xe9(%rbp), %rdi
callq 0xa7a0
jmp 0x7cc75
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7cc2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x98(%rbp), %rdi
callq 0xab00
leaq -0xb1(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7cc64
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0xab00
leaq -0xe9(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
testb $0x1, -0x2a(%rbp)
je 0x7cfbd
movq -0x28(%rbp), %rax
movq %rax, -0x390(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movl (%rax), %eax
movl %eax, -0x124(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x120(%rbp)
movl -0x48(%rbp), %eax
addl %eax, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x11c(%rbp)
leaq -0x124(%rbp), %rax
movq %rax, -0x118(%rbp)
movq $0x3, -0x110(%rbp)
leaq -0x125(%rbp), %rdi
movq %rdi, -0x388(%rbp)
callq 0xa710
movq -0x388(%rbp), %rcx
movq -0x118(%rbp), %rsi
movq -0x110(%rbp), %rdx
leaq -0x108(%rbp), %rdi
callq 0x3c9b0
jmp 0x7cd21
movq -0x390(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x3e200
jmp 0x7cd36
leaq -0x108(%rbp), %rdi
callq 0xab00
leaq -0x125(%rbp), %rdi
callq 0xa7a0
movl -0x48(%rbp), %eax
movl %eax, -0x394(%rbp)
movl -0x30(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x394(%rbp), %eax
cmpl %ecx, %eax
jge 0x7cea0
movq -0x28(%rbp), %rax
movq %rax, -0x3a8(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x158(%rbp)
movl -0x48(%rbp), %ecx
movl %ecx, %eax
leal 0x1(%rax,%rax), %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x154(%rbp)
leaq -0x158(%rbp), %rax
movq %rax, -0x150(%rbp)
movq $0x2, -0x148(%rbp)
leaq -0x159(%rbp), %rdi
movq %rdi, -0x3a0(%rbp)
callq 0xa710
movq -0x3a0(%rbp), %rcx
movq -0x150(%rbp), %rsi
movq -0x148(%rbp), %rdx
leaq -0x140(%rbp), %rdi
callq 0x3c9b0
jmp 0x7ce03
movq -0x3a8(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x3e200
jmp 0x7ce18
leaq -0x140(%rbp), %rdi
callq 0xab00
leaq -0x159(%rbp), %rdi
callq 0xa7a0
jmp 0x7cea0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7ce58
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x108(%rbp), %rdi
callq 0xab00
leaq -0x125(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7ce8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x140(%rbp), %rdi
callq 0xab00
leaq -0x159(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
movl -0x48(%rbp), %eax
movl %eax, -0x3ac(%rbp)
movl -0x30(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x3ac(%rbp), %eax
cmpl %ecx, %eax
jge 0x7cfbb
movq -0x28(%rbp), %rax
movq %rax, -0x3c0(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x48(%rbp), %rsi
callq 0x3c5b0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x190(%rbp)
movl -0x48(%rbp), %ecx
movl %ecx, %eax
leal 0x1(%rax,%rax), %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x18c(%rbp)
leaq -0x190(%rbp), %rax
movq %rax, -0x188(%rbp)
movq $0x2, -0x180(%rbp)
leaq -0x191(%rbp), %rdi
movq %rdi, -0x3b8(%rbp)
callq 0xa710
movq -0x3b8(%rbp), %rcx
movq -0x188(%rbp), %rsi
movq -0x180(%rbp), %rdx
leaq -0x178(%rbp), %rdi
callq 0x3c9b0
jmp 0x7cf55
movq -0x3c0(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x3e200
jmp 0x7cf6a
leaq -0x178(%rbp), %rdi
callq 0xab00
leaq -0x191(%rbp), %rdi
callq 0xa7a0
jmp 0x7cfbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7cfaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x178(%rbp), %rdi
callq 0xab00
leaq -0x191(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
jmp 0x7cfbd
jmp 0x7cfbf
movl -0x48(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
jmp 0x7c8d9
movl $0x0, -0x198(%rbp)
movl -0x198(%rbp), %eax
cmpl -0x30(%rbp), %eax
jge 0x7d0fb
movl $0x0, -0x19c(%rbp)
movl $0x1, -0x1a0(%rbp)
movl -0x1a0(%rbp), %eax
cmpl -0x30(%rbp), %eax
jge 0x7d045
movl -0x19c(%rbp), %eax
shll %eax
movl %eax, -0x19c(%rbp)
movl -0x198(%rbp), %eax
andl -0x1a0(%rbp), %eax
cmpl $0x0, %eax
je 0x7d033
movl -0x19c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x19c(%rbp)
jmp 0x7d035
movl -0x1a0(%rbp), %eax
shll %eax
movl %eax, -0x1a0(%rbp)
jmp 0x7cffa
movl -0x198(%rbp), %eax
cmpl -0x19c(%rbp), %eax
jge 0x7d0e5
movq -0x318(%rbp), %rdi
movl -0x198(%rbp), %eax
shll %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x318(%rbp), %rdi
movq %rax, -0x3d0(%rbp)
movl -0x19c(%rbp), %eax
shll %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x3d0(%rbp), %rdi
movq %rax, %rsi
callq 0x3d2c0
movq -0x318(%rbp), %rdi
movl -0x198(%rbp), %eax
shll %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x318(%rbp), %rdi
movq %rax, -0x3c8(%rbp)
movl -0x19c(%rbp), %eax
shll %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x3c8(%rbp), %rdi
movq %rax, %rsi
callq 0x3d2c0
jmp 0x7d0e7
movl -0x198(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x198(%rbp)
jmp 0x7cfd7
movl $0x0, -0x1a4(%rbp)
movl $0x4, -0x1a8(%rbp)
movl -0x1a8(%rbp), %eax
movl -0x30(%rbp), %ecx
shll %ecx
cmpl %ecx, %eax
jg 0x7da0e
movl $0x0, -0x1ac(%rbp)
movl -0x1ac(%rbp), %eax
movl -0x30(%rbp), %ecx
shll %ecx
cmpl %ecx, %eax
jge 0x7d9f9
movl -0x1a8(%rbp), %eax
movl -0x30(%rbp), %ecx
shll %ecx
cmpl %ecx, %eax
jne 0x7d158
movl $0x1, -0x1a4(%rbp)
movl $0x0, -0x1b0(%rbp)
movl -0x1b0(%rbp), %eax
movl %eax, -0x3d4(%rbp)
movl -0x1a8(%rbp), %eax
movl $0x4, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x3d4(%rbp), %eax
cmpl %ecx, %eax
jge 0x7d905
testb $0x1, -0x29(%rbp)
je 0x7d523
movl -0x1b0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3d8(%rbp)
movl -0x1a8(%rbp), %eax
movl $0x4, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x3d8(%rbp), %eax
cmpl %ecx, %eax
jl 0x7d1cc
cmpl $0x0, -0x1a4(%rbp)
jne 0x7d30c
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x3e8(%rbp)
movl -0x1ac(%rbp), %edx
movl -0x1b0(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal 0x1(%rax,%rcx), %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
negl %eax
movl %eax, -0x1e4(%rbp)
movl -0x1ac(%rbp), %eax
movl -0x1b0(%rbp), %ecx
addl %ecx, %eax
movl -0x1a8(%rbp), %ecx
movl %ecx, %edx
shrl $0x1f, %edx
addl %edx, %ecx
sarl %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x1e0(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1b0(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal 0x1(%rax,%rcx,2), %eax
movl %eax, -0x1dc(%rbp)
leaq -0x1e4(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq $0x3, -0x1d0(%rbp)
leaq -0x1e5(%rbp), %rdi
movq %rdi, -0x3e0(%rbp)
callq 0xa710
movq -0x3e0(%rbp), %rcx
movq -0x1d8(%rbp), %rsi
movq -0x1d0(%rbp), %rdx
leaq -0x1c8(%rbp), %rdi
callq 0x3c9b0
jmp 0x7d2a6
movq -0x3e8(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x3e200
jmp 0x7d2bb
leaq -0x1c8(%rbp), %rdi
callq 0xab00
leaq -0x1e5(%rbp), %rdi
callq 0xa7a0
jmp 0x7d30c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7d2fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0xab00
leaq -0x1e5(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x3f8(%rbp)
movl -0x1ac(%rbp), %edx
movl -0x1b0(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal 0x1(%rax,%rcx), %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x218(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1b0(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal (%rax,%rcx,2), %eax
movl %eax, -0x214(%rbp)
leaq -0x218(%rbp), %rax
movq %rax, -0x210(%rbp)
movq $0x2, -0x208(%rbp)
leaq -0x219(%rbp), %rdi
movq %rdi, -0x3f0(%rbp)
callq 0xa710
movq -0x3f0(%rbp), %rcx
movq -0x210(%rbp), %rsi
movq -0x208(%rbp), %rdx
leaq -0x200(%rbp), %rdi
callq 0x3c9b0
jmp 0x7d3ad
movq -0x3f8(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x3e200
jmp 0x7d3c2
leaq -0x200(%rbp), %rdi
callq 0xab00
leaq -0x219(%rbp), %rdi
callq 0xa7a0
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x408(%rbp)
movl -0x1ac(%rbp), %eax
movl -0x1b0(%rbp), %ecx
addl %ecx, %eax
movl -0x1a8(%rbp), %ecx
movl %ecx, %edx
shrl $0x1f, %edx
addl %edx, %ecx
sarl %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
negl %eax
movl %eax, -0x250(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1b0(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal (%rax,%rcx,2), %eax
movl %eax, -0x24c(%rbp)
leaq -0x250(%rbp), %rax
movq %rax, -0x248(%rbp)
movq $0x2, -0x240(%rbp)
leaq -0x251(%rbp), %rdi
movq %rdi, -0x400(%rbp)
callq 0xa710
movq -0x400(%rbp), %rcx
movq -0x248(%rbp), %rsi
movq -0x240(%rbp), %rdx
leaq -0x238(%rbp), %rdi
callq 0x3c9b0
jmp 0x7d486
movq -0x408(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0x3e200
jmp 0x7d49b
leaq -0x238(%rbp), %rdi
callq 0xab00
leaq -0x251(%rbp), %rdi
callq 0xa7a0
jmp 0x7d523
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7d4db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x200(%rbp), %rdi
callq 0xab00
leaq -0x219(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7d512
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x238(%rbp), %rdi
callq 0xab00
leaq -0x251(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
testb $0x1, -0x2a(%rbp)
je 0x7d8ef
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x418(%rbp)
movl -0x1ac(%rbp), %edx
movl -0x1b0(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal 0x1(%rax,%rcx), %eax
movslq %eax, %rsi
callq 0xa7c0
movq -0x318(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x28c(%rbp)
movl -0x1ac(%rbp), %eax
movl -0x1b0(%rbp), %ecx
addl %ecx, %eax
movl -0x1a8(%rbp), %ecx
movl %ecx, %edx
shrl $0x1f, %edx
addl %edx, %ecx
sarl %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0x288(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1b0(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal (%rax,%rcx,2), %eax
negl %eax
movl %eax, -0x284(%rbp)
leaq -0x28c(%rbp), %rax
movq %rax, -0x280(%rbp)
movq $0x3, -0x278(%rbp)
leaq -0x28d(%rbp), %rdi
movq %rdi, -0x410(%rbp)
callq 0xa710
movq -0x410(%rbp), %rcx
movq -0x280(%rbp), %rsi
movq -0x278(%rbp), %rdx
leaq -0x270(%rbp), %rdi
callq 0x3c9b0
jmp 0x7d604
movq -0x418(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x3e200
jmp 0x7d619
leaq -0x270(%rbp), %rdi
callq 0xab00
leaq -0x28d(%rbp), %rdi
callq 0xa7a0
movl -0x1b0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x41c(%rbp)
movl -0x1a8(%rbp), %eax
movl $0x4, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x41c(%rbp), %eax
cmpl %ecx, %eax
jl 0x7d667
cmpl $0x0, -0x1a4(%rbp)
jne 0x7d7a5
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x430(%rbp)
movl -0x1ac(%rbp), %edx
movl -0x1b0(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal 0x1(%rax,%rcx), %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0x2c0(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1b0(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal (%rax,%rcx,2), %eax
notl %eax
movl %eax, -0x2bc(%rbp)
leaq -0x2c0(%rbp), %rax
movq %rax, -0x2b8(%rbp)
movq $0x2, -0x2b0(%rbp)
leaq -0x2c1(%rbp), %rdi
movq %rdi, -0x428(%rbp)
callq 0xa710
movq -0x428(%rbp), %rcx
movq -0x2b8(%rbp), %rsi
movq -0x2b0(%rbp), %rdx
leaq -0x2a8(%rbp), %rdi
callq 0x3c9b0
jmp 0x7d708
movq -0x430(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0x3e200
jmp 0x7d71d
leaq -0x2a8(%rbp), %rdi
callq 0xab00
leaq -0x2c1(%rbp), %rdi
callq 0xa7a0
jmp 0x7d7a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7d75d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x270(%rbp), %rdi
callq 0xab00
leaq -0x28d(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7d794
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0xab00
leaq -0x2c1(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
movl -0x1b0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x434(%rbp)
movl -0x1a8(%rbp), %eax
movl $0x4, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x434(%rbp), %eax
cmpl %ecx, %eax
jl 0x7d7db
cmpl $0x0, -0x1a4(%rbp)
jne 0x7d8ed
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x448(%rbp)
movl -0x1ac(%rbp), %eax
movl -0x1b0(%rbp), %ecx
addl %ecx, %eax
movl -0x1a8(%rbp), %ecx
movl %ecx, %edx
shrl $0x1f, %edx
addl %edx, %ecx
sarl %ecx
addl %ecx, %eax
movslq %eax, %rsi
callq 0xa7c0
movl (%rax), %eax
movl %eax, -0x2f8(%rbp)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %edx
movl -0x1b0(%rbp), %eax
movl %eax, %ecx
movl %edx, %eax
leal (%rax,%rcx,2), %eax
notl %eax
movl %eax, -0x2f4(%rbp)
leaq -0x2f8(%rbp), %rax
movq %rax, -0x2f0(%rbp)
movq $0x2, -0x2e8(%rbp)
leaq -0x2f9(%rbp), %rdi
movq %rdi, -0x440(%rbp)
callq 0xa710
movq -0x440(%rbp), %rcx
movq -0x2f0(%rbp), %rsi
movq -0x2e8(%rbp), %rdx
leaq -0x2e0(%rbp), %rdi
callq 0x3c9b0
jmp 0x7d887
movq -0x448(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
callq 0x3e200
jmp 0x7d89c
leaq -0x2e0(%rbp), %rdi
callq 0xab00
leaq -0x2f9(%rbp), %rdi
callq 0xa7a0
jmp 0x7d8ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7d8dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0xab00
leaq -0x2f9(%rbp), %rdi
callq 0xa7a0
jmp 0x7da56
jmp 0x7d8ef
jmp 0x7d8f1
movl -0x1b0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1b0(%rbp)
jmp 0x7d162
movl $0x1, -0x300(%rbp)
movl -0x300(%rbp), %eax
movl %eax, -0x44c(%rbp)
movl -0x1a8(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x44c(%rbp), %eax
cmpl %ecx, %eax
jge 0x7d97c
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movl 0x18(%rax), %ecx
movl %ecx, -0x450(%rbp)
addl $0x1, %ecx
movl %ecx, 0x18(%rax)
movl -0x1ac(%rbp), %eax
addl -0x300(%rbp), %eax
movslq %eax, %rsi
callq 0xa7c0
movl -0x450(%rbp), %ecx
movl %ecx, (%rax)
movl -0x300(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x300(%rbp)
jmp 0x7d90f
cmpl $0x0, -0x1a4(%rbp)
jne 0x7d9d3
movq -0x318(%rbp), %rdi
movq -0x28(%rbp), %rax
movl 0x18(%rax), %ecx
movl %ecx, -0x454(%rbp)
addl $0x1, %ecx
movl %ecx, 0x18(%rax)
movl -0x1ac(%rbp), %eax
movl %eax, -0x458(%rbp)
movl -0x1a8(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x458(%rbp), %eax
addl %ecx, %eax
movslq %eax, %rsi
callq 0xa7c0
movl -0x454(%rbp), %ecx
movl %ecx, (%rax)
movl -0x1a4(%rbp), %eax
xorl $0x1, %eax
movl %eax, -0x1a4(%rbp)
movl -0x1a8(%rbp), %eax
addl -0x1ac(%rbp), %eax
movl %eax, -0x1ac(%rbp)
jmp 0x7d12c
jmp 0x7d9fb
movl -0x1a8(%rbp), %eax
shll %eax
movl %eax, -0x1a8(%rbp)
jmp 0x7d10f
movq -0x318(%rbp), %rdi
movslq -0x30(%rbp), %rsi
callq 0xa990
jmp 0x7da20
movb $0x1, -0x31(%rbp)
testb $0x1, -0x31(%rbp)
jne 0x7da46
jmp 0x7da3a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7da56
movq -0x318(%rbp), %rdi
callq 0xab00
movq -0x310(%rbp), %rax
addq $0x460, %rsp            # imm = 0x460
popq %rbp
retq
movq -0x318(%rbp), %rdi
callq 0xab00
movq -0x40(%rbp), %rdi
callq 0x4610
nopl (%rax,%rax)