// File: /workspace/github_cpp_makefile_star2_O3/pritpal20[P]vector/tester.cpp
// Function: main
int main() {
	int i;
	time_t st;

	st = clock();
	lni::vector<int> v1;
	for (i = 0; i < 10000000; ++i)
		v1.push_back(i);
	printf("lni::vector %.3fs\n", (double)(clock() - st) / CLOCKS_PER_SEC);
	
#ifdef DEBUG
	
	puts("\n=== Debugging Messages ===\n");

	printf("max_size() = %u", v1.max_size());
	puts("\n");
	
	puts("Testing emplace and emplace_back ... ");
	lni::vector<test> vt;
	vt.push_back( test(1, 2, 3) );
	vt.emplace_back(2, 4, 6);
	vt.emplace(vt.begin() + 1, 1, 3, 5);
	for (auto &vti: vt)
		vti.print();
	puts("\n");

	puts("Testing resize ... ");
	v1.resize(5);
	for (auto &n: v1)
	 	printf(" %d", n);
	puts("");
	v1.resize(10, 10);
	for (auto &n: v1)
		printf(" %d", n);
	puts("\n");
	
	puts("Testing assign ... ");
	lni::vector<int> v1_a;
	v1_a.assign(v1.begin() + 1, v1.begin() + 3);
	for (auto &n: v1_a)
		printf(" %d", n);
	puts("\n");

	puts("Testing front and back ... ");
	printf(" %d %d", v1.front(), v1.back());
	puts("\n");

	puts("Testing pop_back ... ");
	v1.pop_back();
	for (auto &n: v1)
		printf(" %d", n);
	puts("\n");

	puts("Testing [] operator overloading ... ");
	v1[0] = 1;
	int sz = v1.size();
	for (i = 0; i < sz; i++)
		printf(" %d", v1[i]);
	puts("\n");

	puts("Testing initializer list ... ");
	lni::vector<int> v2 = {10, 11, 12, 13, 14};
	for (auto &n: v2)
		printf(" %d", n);
	puts("\n");

	puts("Testing swap ... ");
	v1.swap(v2);
	for (auto &n: v1)
		printf(" %d", n);
	puts("");
	for (auto &n: v2)
		printf(" %d", n);
	puts("\n");

	puts("Testing clear ... ");
	v1.clear();
	for (auto &n: v1)
		printf(" %d", n);
	puts("\n");


	puts("Testing constructors ... ");
	lni::vector<double> v3(5, 2.0);
	v3[0] = 1.0; v3[4] = 3.0;
	for (auto &f: v3)
		printf(" %.3f ", f);
	puts("");
	lni::vector<double> v4(v3);
	for (auto &f: v4)
		printf(" %.3f ", f);
	puts("\n");

	puts("Testing assignment operators ... ");
	lni::vector<double> v5 = v3;
	for (auto &f: v5)
		printf(" %.3f", f);
	puts("");
	lni::vector<double> v6 = {3.0, 2.0, 2.0, 2.0, 1.0};
	for (auto &f: v6)
		printf(" %.3f", f);
	puts("\n");

	puts("Testing insert ... ");
	auto it = v6.insert(v6.begin() + 1, 2.5);
	printf(" Just inserted: %.3f\n", *it);
	it = v6.insert(v6.begin(), 4.0);
	printf(" Just inserted: %.3f\n", *it);
	lni::vector<double> vins{-2.0, -3.0};
	it = v6.insert(v6.begin() + 1, vins.begin(), vins.end());
	printf(" Just inserted: %.3f %.3f\n", *it, *(it + 1));
	for (auto &f: v6)
		printf(" %.3f", f);
	puts("\n");

	it = v6.insert(v6.end(), 2, 0.0);
	it = v6.insert(v6.end() - 2, 3, 0.5);
	it = v6.insert(v6.begin(), {1.0, 2.0, 3.0, 4.0, 5.0});
	printf(" v6:");
	for (auto &f: v6)
		printf(" %.3f", f);
	puts("");


	lni::vector<double> v7(2, 5.0);
	v7.insert(v7.end(), v6.begin(), v6.end());
	for (auto &f: v7)
		printf(" %.3f", f);
	puts("");

	v7.insert(v7.begin(), {8.0, 7.0, 6.0});
	v7.insert(v7.end(), {-1.0, -2.0, -2.5});
	for (auto &f: v7)
		printf(" %.3f", f);
	puts("\n");

	puts("Testing erase ... ");
	v7.erase(v7.begin());
	v7.erase(v7.begin() + 2, v7.begin() + 4);
	printf(" v7:");
	for (auto &f: v7)
		printf(" %.3f", f);
	puts("\n");

	puts("Testing shrink_to_fit ... ");
	printf("Before: %u, %u\n", v7.size(), v7.capacity());
	v7.shrink_to_fit();
	printf("After: %u, %u\n", v7.size(), v7.capacity());
	puts("");

	puts("Testing operators ... ");
	lni::vector<double> v8(v7);
	printf(" v6 == v8: %d\n", v6 == v8);
	printf(" v6 != v8: %d\n", v6 != v8);
	printf(" v7 == v8: %d\n", v7 == v8);
	printf(" v7 != v8: %d\n", v7 != v8);
	
	printf("\n v6 < v8: %d\n", v6 < v8);
	printf(" v6 <= v8: %d\n", v6 <= v8);
	printf(" v8 < v6: %d\n", v8 < v6);
	printf(" v7 <= v8: %d\n", v7 <= v8);
	printf(" v8 < v7: %d\n", v8 < v7);
	
	printf("\n v6 >= v8: %d\n", v6 >= v8);
	printf(" v6 > v8: %d\n", v6 > v8);
	printf(" v8 >= v6: %d\n", v8 >= v6);
	printf(" v7 > v8: %d\n", v7 > v8);
	printf(" v8 >= v7: %d\n", v8 >= v7);	
	puts("\n");

	puts("Testing reverse_iterator ... ");
	for (auto it = v8.rbegin(); it != v8.rend(); ++it)
		printf(" %.3f", *it);
	puts("\n");

#endif
	
	st = clock();
	std::vector<int> std_v1;
	for (i = 0; i < 10000000; ++i)
		std_v1.push_back(i);
	printf("std::vector %.3fs\n", (double)(clock() - st) / CLOCKS_PER_SEC);

	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
callq 0x1090
movq %rax, %rbx
movq $0x4, 0x28(%rsp)
movl $0x10, %edi
callq 0x1030
leaq 0x28(%rsp), %r14
movq %rax, 0x8(%r14)
leaq 0x24(%rsp), %r15
movl $0x0, (%r15)
movq %r14, %rdi
movq %r15, %rsi
callq 0x4a7c
movl 0x24(%rsp), %eax
leal 0x1(%rax), %ecx
movl %ecx, 0x24(%rsp)
cmpl $0x98967f, %eax         # imm = 0x98967F
jl 0x386b
callq 0x1090
subq %rbx, %rax
cvtsi2sd %rax, %xmm0
divsd 0x2843(%rip), %xmm0     # 0x60e0
leaq 0x2844(%rip), %rdi      # 0x60e8
movb $0x1, %al
callq 0x1040
leaq 0x2849(%rip), %rdi      # 0x60fb
callq 0x1120
leaq 0x285a(%rip), %rdi      # 0x6118
movl $0x3b9aca00, %esi       # imm = 0x3B9ACA00
xorl %eax, %eax
callq 0x1040
leaq 0x2845(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x284b(%rip), %rdi      # 0x6128
callq 0x1120
movq $0x4, 0x50(%rsp)
movl $0x30, %edi
callq 0x1030
leaq 0x50(%rsp), %rdi
movq %rax, 0x8(%rdi)
movabsq $0x200000001, %rax      # imm = 0x200000001
leaq 0x60(%rsp), %rsi
movq %rax, (%rsi)
movl $0x3, 0x8(%rsi)
callq 0x4af4
leaq 0x60(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x40(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0x10(%rsp), %rcx
movl $0x6, (%rcx)
leaq 0x50(%rsp), %rdi
callq 0x4b80
leaq 0x50(%rsp), %rdi
movq 0x8(%rdi), %rsi
addq $0xc, %rsi
leaq 0x60(%rsp), %rdx
movl $0x1, (%rdx)
leaq 0x40(%rsp), %rcx
movl $0x3, (%rcx)
leaq 0x10(%rsp), %r8
movl $0x5, (%r8)
callq 0x4c26
movl 0x54(%rsp), %eax
testq %rax, %rax
je 0x39b6
movq 0x58(%rsp), %r14
leaq (%rax,%rax,2), %rax
leaq (%r14,%rax,4), %r15
leaq 0x2a7b(%rip), %rbx      # 0x6413
movl (%r14), %esi
movl 0x4(%r14), %edx
movl 0x8(%r14), %ecx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0xc, %r14
cmpq %r15, %r14
jne 0x3998
leaq 0x2759(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x2785(%rip), %rdi      # 0x614e
callq 0x1120
leaq 0x28(%rsp), %rdi
movl $0x5, %esi
callq 0x1484
movl 0x2c(%rsp), %r14d
testq %r14, %r14
je 0x3a11
movq 0x30(%rsp), %r15
shlq $0x2, %r14
leaq 0x279e(%rip), %rbx      # 0x6195
xorl %r12d, %r12d
movl (%r15,%r12), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r12
cmpq %r12, %r14
jne 0x39fa
movl $0xa, %edi
callq 0x1100
leaq 0x60(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0x28(%rsp), %rdi
movl $0xa, %esi
callq 0x2588
movl 0x2c(%rsp), %r14d
testq %r14, %r14
je 0x3a69
movq 0x30(%rsp), %r15
shlq $0x2, %r14
leaq 0x2746(%rip), %rbx      # 0x6195
xorl %r12d, %r12d
movl (%r15,%r12), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r12
cmpq %r12, %r14
jne 0x3a52
leaq 0x26a6(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x26e6(%rip), %rdi      # 0x6162
callq 0x1120
movq $0x4, 0x40(%rsp)
movl $0x10, %edi
callq 0x1030
leaq 0x40(%rsp), %rdi
movq %rax, 0x8(%rdi)
movq 0x30(%rsp), %rdx
leaq 0x4(%rdx), %rsi
addq $0xc, %rdx
callq 0x4d02
movl 0x44(%rsp), %r14d
testq %r14, %r14
je 0x3ae3
movq 0x48(%rsp), %r15
shlq $0x2, %r14
leaq 0x26cc(%rip), %rbx      # 0x6195
xorl %r12d, %r12d
movl (%r15,%r12), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r12
cmpq %r12, %r14
jne 0x3acc
leaq 0x262c(%rip), %rbx      # 0x6116
movq %rbx, %rdi
callq 0x1120
leaq 0x267d(%rip), %rdi      # 0x6176
callq 0x1120
movq 0x30(%rsp), %rax
movl (%rax), %esi
movl 0x2c(%rsp), %ecx
decl %ecx
movl (%rax,%rcx,4), %edx
leaq 0x267d(%rip), %rdi      # 0x6192
xorl %eax, %eax
callq 0x1040
movq %rbx, %rdi
callq 0x1120
leaq 0x266e(%rip), %rdi      # 0x6199
callq 0x1120
movl 0x2c(%rsp), %r14d
decl %r14d
movl %r14d, 0x2c(%rsp)
je 0x3b69
movq 0x30(%rsp), %r15
shlq $0x2, %r14
leaq 0x2646(%rip), %rbx      # 0x6195
xorl %r12d, %r12d
movl (%r15,%r12), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r12
cmpq %r12, %r14
jne 0x3b52
leaq 0x25a6(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x2633(%rip), %rdi      # 0x61af
callq 0x1120
movq 0x30(%rsp), %rax
movl $0x1, (%rax)
movl 0x2c(%rsp), %ebp
movl $0x0, 0x24(%rsp)
testl %ebp, %ebp
jle 0x3bc7
leaq 0x25f2(%rip), %rbx      # 0x6195
xorl %eax, %eax
movq 0x30(%rsp), %rcx
movl %eax, %eax
movl (%rcx,%rax,4), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
movl 0x24(%rsp), %eax
incl %eax
movl %eax, 0x24(%rsp)
cmpl %ebp, %eax
jl 0x3ba5
leaq 0x2548(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x25fa(%rip), %rdi      # 0x61d4
callq 0x1120
movl $0x50, %edi
callq 0x1030
movq %rax, %r14
movdqu 0x2844(%rip), %xmm0     # 0x6438
movdqu %xmm0, (%rax)
movl $0xe, 0x10(%rax)
leaq 0x258f(%rip), %rbx      # 0x6195
xorl %r15d, %r15d
movl (%r14,%r15), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r15
cmpq $0x14, %r15
jne 0x3c09
leaq 0x24ee(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x25be(%rip), %rdi      # 0x61f2
callq 0x1120
movl 0x2c(%rsp), %r15d
movq 0x30(%rsp), %rbp
movabsq $0x500000014, %rax      # imm = 0x500000014
movq %rax, 0x28(%rsp)
movq %r14, 0x30(%rsp)
leaq 0x2537(%rip), %rbx      # 0x6195
xorl %r12d, %r12d
movl (%r14,%r12), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r12
cmpq $0x14, %r12
jne 0x3c61
movl $0xa, %edi
callq 0x1100
testq %r15, %r15
je 0x3cae
shlq $0x2, %r15
leaq 0x2502(%rip), %rbx      # 0x6195
xorl %r14d, %r14d
movl (%rbp,%r14), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r14
cmpq %r14, %r15
jne 0x3c96
leaq 0x2461(%rip), %rbx      # 0x6116
movq %rbx, %rdi
callq 0x1120
leaq 0x2540(%rip), %rdi      # 0x6204
callq 0x1120
movl $0x0, 0x2c(%rsp)
movq %rbx, %rdi
callq 0x1120
leaq 0x2537(%rip), %rdi      # 0x6217
callq 0x1120
movl $0xa0, %edi
movq %rbp, 0x38(%rsp)
callq 0x1030
movq %rax, %r14
movdqa 0x2381(%rip), %xmm0     # 0x6080
movl $0x1, %eax
movdqa 0x2384(%rip), %xmm1     # 0x6090
movdqa 0x238c(%rip), %xmm2     # 0x60a0
pshufd $0xf5, %xmm2, %xmm3     # xmm3 = xmm2[1,1,3,3]
movabsq $0x4000000000000000, %rcx # imm = 0x4000000000000000
movdqa 0x2385(%rip), %xmm4     # 0x60b0
movdqa %xmm0, %xmm5
pxor %xmm1, %xmm5
movdqa %xmm2, %xmm6
pcmpgtd %xmm5, %xmm6
pshufd $0xf5, %xmm5, %xmm5     # xmm5 = xmm5[1,1,3,3]
pcmpeqd %xmm3, %xmm5
pand %xmm6, %xmm5
movd %xmm5, %edx
testb $0x1, %dl
je 0x3d56
movq %rcx, -0x8(%r14,%rax,8)
pextrw $0x4, %xmm5, %edx
testb $0x1, %dl
je 0x3d64
movq %rcx, (%r14,%rax,8)
paddq %xmm4, %xmm0
addq $0x2, %rax
cmpq $0x7, %rax
jne 0x3d2b
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, (%r14)
movabsq $0x4008000000000000, %rax # imm = 0x4008000000000000
movq %rax, 0x20(%r14)
xorl %r12d, %r12d
leaq 0x249a(%rip), %rbx      # 0x6231
movq (%r14,%r12), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r12
cmpq $0x28, %r12
jne 0x3d97
movl $0xa, %edi
callq 0x1100
movl $0xa0, %edi
callq 0x1030
movq %rax, %r13
movq 0x20(%r14), %rax
movq %rax, 0x20(%r13)
movupd (%r14), %xmm0
movupd 0x10(%r14), %xmm1
movupd %xmm1, 0x10(%r13)
movupd %xmm0, (%r13)
xorl %r12d, %r12d
leaq 0x2440(%rip), %rbx      # 0x6231
movsd (%r13,%r12), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r12
cmpq $0x28, %r12
jne 0x3df1
leaq 0x2303(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x2419(%rip), %rdi      # 0x6238
callq 0x1120
movl $0xa0, %edi
movq %r13, 0xa0(%rsp)
callq 0x1030
movq 0x20(%r14), %rcx
movq %rcx, 0x20(%rax)
movupd (%r14), %xmm0
movupd 0x10(%r14), %xmm1
movupd %xmm1, 0x10(%rax)
movupd %xmm0, (%rax)
xorl %r12d, %r12d
leaq 0x23fe(%rip), %rbx      # 0x625a
movq %rax, %r15
movsd (%r15,%r12), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r12
cmpq $0x28, %r12
jne 0x3e5f
movq %r15, 0x98(%rsp)
movl $0xa, %edi
callq 0x1100
movl $0x14, 0x10(%rsp)
movl $0xa0, %edi
callq 0x1030
movq %rax, %rbx
movq %rax, 0x18(%rsp)
movups 0x25b4(%rip), %xmm0     # 0x6460
movups %xmm0, 0x10(%rax)
movupd 0x2598(%rip), %xmm0     # 0x6450
movupd %xmm0, (%rax)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x20(%rbx)
movl $0x5, 0x14(%rsp)
xorl %r12d, %r12d
leaq 0x237e(%rip), %r15      # 0x625a
movsd (%rbx,%r12), %xmm0
movq %r15, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r12
cmpq $0x28, %r12
jne 0x3edc
leaq 0x2219(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x2357(%rip), %rdi      # 0x6260
callq 0x1120
leaq 0x10(%rsp), %rdi
movq 0x8(%rdi), %rsi
addq $0x8, %rsi
movabsq $0x4004000000000000, %rax # imm = 0x4004000000000000
leaq 0x60(%rsp), %rdx
movq %rax, (%rdx)
callq 0x4d88
movsd (%rax), %xmm0
leaq 0x2337(%rip), %rdi      # 0x6274
movb $0x1, %al
callq 0x1040
leaq 0x10(%rsp), %rdi
movq 0x8(%rdi), %rsi
movabsq $0x4010000000000000, %rax # imm = 0x4010000000000000
leaq 0x60(%rsp), %rdx
movq %rax, (%rdx)
callq 0x4d88
movsd (%rax), %xmm0
leaq 0x2305(%rip), %rdi      # 0x6274
movb $0x1, %al
callq 0x1040
movl $0x40, %edi
callq 0x1030
movapd 0x2138(%rip), %xmm0     # 0x60c0
movupd %xmm0, (%rax)
leaq 0x10(%rsp), %rdi
movq 0x8(%rdi), %rsi
addq $0x8, %rsi
movq %rax, %rcx
addq $0x10, %rcx
movq %rax, 0x90(%rsp)
movq %rax, %rdx
callq 0x4e28
movsd (%rax), %xmm0
movsd 0x8(%rax), %xmm1
leaq 0x22ca(%rip), %rdi      # 0x628a
movb $0x2, %al
callq 0x1040
movl 0x14(%rsp), %r15d
testq %r15, %r15
je 0x3ffd
movq 0x18(%rsp), %r12
shlq $0x3, %r15
xorl %r13d, %r13d
leaq 0x2276(%rip), %rbx      # 0x625a
movsd (%r12,%r13), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r13
cmpq %r13, %r15
jne 0x3fe4
leaq 0x2112(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x10(%rsp), %rdi
movl 0x4(%rdi), %esi
shlq $0x3, %rsi
addq 0x8(%rdi), %rsi
leaq 0x60(%rsp), %rcx
movq $0x0, (%rcx)
movl $0x2, %edx
callq 0x4f0c
leaq 0x10(%rsp), %rdi
movq 0x8(%rdi), %rax
movl 0x4(%rdi), %ecx
leaq (%rax,%rcx,8), %rsi
addq $-0x10, %rsi
movabsq $0x3fe0000000000000, %rax # imm = 0x3FE0000000000000
leaq 0x60(%rsp), %rcx
movq %rax, (%rcx)
movl $0x3, %edx
callq 0x4f0c
leaq 0x10(%rsp), %rdi
movq 0x8(%rdi), %rsi
movups 0x2419(%rip), %xmm0     # 0x6488
leaq 0x60(%rsp), %rdx
movaps %xmm0, 0x10(%rdx)
movupd 0x23f8(%rip), %xmm0     # 0x6478
movapd %xmm0, (%rdx)
movabsq $0x4014000000000000, %rax # imm = 0x4014000000000000
movq %rax, 0x20(%rdx)
movl $0x5, %ecx
callq 0x5064
leaq 0x2202(%rip), %rdi      # 0x62a5
xorl %eax, %eax
callq 0x1040
movl 0x14(%rsp), %r15d
testq %r15, %r15
je 0x40e0
movq 0x18(%rsp), %r12
shlq $0x3, %r15
xorl %r13d, %r13d
leaq 0x2193(%rip), %rbx      # 0x625a
movsd (%r12,%r13), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r13
cmpq %r13, %r15
jne 0x40c7
movl $0xa, %edi
callq 0x1100
movl $0x8, (%rsp)
movl $0x40, %edi
callq 0x1030
movq %rsp, %rdi
movq %rax, 0x8(%rdi)
movapd 0x1fc6(%rip), %xmm0     # 0x60d0
movupd %xmm0, (%rax)
movl $0x2, 0x4(%rdi)
addq $0x10, %rax
movq 0x18(%rsp), %rdx
movl 0x14(%rsp), %ecx
leaq (%rdx,%rcx,8), %rcx
movq %rax, %rsi
callq 0x4e28
movl 0x4(%rsp), %r15d
testq %r15, %r15
je 0x4164
movq 0x8(%rsp), %r12
shlq $0x3, %r15
xorl %r13d, %r13d
leaq 0x210f(%rip), %rbx      # 0x625a
movsd (%r12,%r13), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r13
cmpq %r13, %r15
jne 0x414b
movl $0xa, %edi
callq 0x1100
movq %rsp, %rdi
movq 0x8(%rdi), %rsi
movupd 0x2323(%rip), %xmm0     # 0x64a0
leaq 0x60(%rsp), %rdx
movapd %xmm0, (%rdx)
movabsq $0x4018000000000000, %rax # imm = 0x4018000000000000
movq %rax, 0x10(%rdx)
movl $0x3, %ecx
callq 0x5064
movq %rsp, %rdi
movl 0x4(%rdi), %esi
shlq $0x3, %rsi
addq 0x8(%rdi), %rsi
movupd 0x2304(%rip), %xmm0     # 0x64b8
leaq 0x60(%rsp), %rdx
movapd %xmm0, (%rdx)
movabsq $-0x3ffc000000000000, %rax # imm = 0xC004000000000000
movq %rax, 0x10(%rdx)
movl $0x3, %ecx
callq 0x5064
movl 0x4(%rsp), %r15d
testq %r15, %r15
je 0x420b
movq 0x8(%rsp), %r12
shlq $0x3, %r15
xorl %r13d, %r13d
leaq 0x2068(%rip), %rbx      # 0x625a
movsd (%r12,%r13), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r13
cmpq %r13, %r15
jne 0x41f2
leaq 0x1f04(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x208c(%rip), %rdi      # 0x62aa
callq 0x1120
movq 0x8(%rsp), %rdi
leaq 0x8(%rdi), %rsi
movl 0x4(%rsp), %eax
leaq -0x8(,%rax,8), %rdx
callq 0x1130
movl 0x4(%rsp), %ebx
leal -0x1(%rbx), %eax
movq 0x8(%rsp), %rsi
leaq 0x10(%rsi), %rdi
addq $0x20, %rsi
leaq -0x20(,%rax,8), %rdx
callq 0x1130
addl $-0x3, %ebx
movl %ebx, 0x4(%rsp)
leaq 0x2051(%rip), %rdi      # 0x62bd
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %r15d
testq %r15, %r15
je 0x42a9
movq 0x8(%rsp), %r12
shlq $0x3, %r15
xorl %r13d, %r13d
leaq 0x1fca(%rip), %rbx      # 0x625a
movsd (%r12,%r13), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r13
cmpq %r13, %r15
jne 0x4290
leaq 0x1e66(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x2006(%rip), %rdi      # 0x62c2
callq 0x1120
movq %rsp, %rbx
movl (%rbx), %edx
movl 0x4(%rbx), %esi
leaq 0x200d(%rip), %rdi      # 0x62dd
xorl %eax, %eax
callq 0x1040
movq %rbx, %rdi
callq 0x5144
movl (%rsp), %edx
movl 0x4(%rsp), %esi
leaq 0x2000(%rip), %rdi      # 0x62ed
xorl %eax, %eax
callq 0x1040
movl $0xa, %edi
callq 0x1100
leaq 0x1ff7(%rip), %rdi      # 0x62fc
callq 0x1120
movl (%rsp), %edi
shlq $0x3, %rdi
callq 0x1030
movq %rax, %rbp
movl 0x4(%rsp), %r15d
testq %r15, %r15
je 0x438f
movq 0x8(%rsp), %rax
xorl %ecx, %ecx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rbp,%rcx,8)
incq %rcx
cmpq %rcx, %r15
jne 0x432a
testq %r15, %r15
sete %cl
cmpl %r15d, 0x14(%rsp)
sete %al
setne %dl
orb %cl, %dl
jne 0x4397
movq 0x18(%rsp), %rcx
leaq -0x1(%r15), %rdx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
movsd (%rbp,%rsi,8), %xmm1
movapd %xmm0, %xmm2
cmpeqsd %xmm1, %xmm2
movq %xmm2, %rax
andl $0x1, %eax
ucomisd %xmm1, %xmm0
jne 0x4397
jp 0x4397
leaq 0x1(%rsi), %rdi
cmpq %rsi, %rdx
movq %rdi, %rsi
jne 0x435d
jmp 0x4397
cmpl %r15d, 0x14(%rsp)
sete %al
movzbl %al, %esi
leaq 0x1f72(%rip), %rdi      # 0x6313
xorl %eax, %eax
callq 0x1040
movl $0x1, %esi
cmpl %r15d, 0x14(%rsp)
jne 0x43dd
testq %r15, %r15
je 0x443d
movq 0x18(%rsp), %rax
xorl %ecx, %ecx
movsd (%rax,%rcx,8), %xmm0
ucomisd (%rbp,%rcx,8), %xmm0
jne 0x43dd
jp 0x43dd
incq %rcx
cmpq %rcx, %r15
jne 0x43c4
xorl %esi, %esi
testq %r15, %r15
sete %bl
leaq 0x1f38(%rip), %rdi      # 0x6322
xorl %eax, %eax
callq 0x1040
cmpl %r15d, 0x4(%rsp)
sete %al
setne %cl
orb %bl, %cl
jne 0x4455
movq 0x8(%rsp), %rcx
leaq -0x1(%r15), %rdx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
movsd (%rbp,%rsi,8), %xmm1
movapd %xmm0, %xmm2
cmpeqsd %xmm1, %xmm2
movq %xmm2, %rax
andl $0x1, %eax
ucomisd %xmm1, %xmm0
jne 0x4455
jp 0x4455
leaq 0x1(%rsi), %rdi
cmpq %rsi, %rdx
movq %rdi, %rsi
jne 0x440b
jmp 0x4455
leaq 0x1ede(%rip), %rdi      # 0x6322
xorl %esi, %esi
xorl %eax, %eax
callq 0x1040
cmpl %r15d, 0x4(%rsp)
sete %al
testq %r15, %r15
sete %bl
movzbl %al, %esi
leaq 0x1ecc(%rip), %rdi      # 0x6331
xorl %eax, %eax
callq 0x1040
xorl %esi, %esi
cmpl %r15d, 0x4(%rsp)
setne %al
orb %al, %bl
je 0x447f
movb %al, %sil
jmp 0x44a6
movq 0x8(%rsp), %rax
xorl %ecx, %ecx
movsd (%rax,%rcx,8), %xmm0
ucomisd (%rbp,%rcx,8), %xmm0
jne 0x44a1
jp 0x44a1
incq %rcx
cmpq %rcx, %r15
jne 0x4486
xorl %esi, %esi
jmp 0x44a6
movl $0x1, %esi
leaq 0x1e93(%rip), %rdi      # 0x6340
xorl %eax, %eax
callq 0x1040
movl 0x14(%rsp), %edx
cmpl %r15d, %edx
setb %al
cmpl %r15d, %edx
cmovael %r15d, %edx
testl %edx, %edx
je 0x44f6
movq 0x18(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
movsd (%rbp,%rsi,8), %xmm1
ucomisd %xmm1, %xmm0
jne 0x44ef
jp 0x44ef
incq %rsi
cmpq %rsi, %rdx
jne 0x44d2
jmp 0x44f6
ucomisd %xmm0, %xmm1
seta %al
movzbl %al, %esi
leaq 0x1e4f(%rip), %rdi      # 0x634f
xorl %eax, %eax
callq 0x1040
movl 0x14(%rsp), %eax
cmpl %r15d, %eax
movl %r15d, %edx
cmovbl %eax, %edx
testl %edx, %edx
je 0x453c
movq 0x18(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
movsd (%rbp,%rsi,8), %xmm1
ucomisd %xmm1, %xmm0
jne 0x4544
jp 0x4544
incq %rsi
cmpq %rsi, %rdx
jne 0x4521
cmpl %r15d, %eax
setbe %al
jmp 0x454b
ucomisd %xmm0, %xmm1
seta %al
movzbl %al, %esi
leaq 0x1e09(%rip), %rdi      # 0x635e
xorl %eax, %eax
callq 0x1040
movl 0x14(%rsp), %edx
cmpl %edx, %r15d
setb %al
cmpl %edx, %r15d
cmovbl %r15d, %edx
testl %edx, %edx
je 0x459e
movq 0x18(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rbp,%rsi,8), %xmm0
movsd (%rcx,%rsi,8), %xmm1
ucomisd %xmm1, %xmm0
jne 0x4597
jp 0x4597
incq %rsi
cmpq %rsi, %rdx
jne 0x457a
jmp 0x459e
ucomisd %xmm0, %xmm1
seta %al
movzbl %al, %esi
leaq 0x1dc5(%rip), %rdi      # 0x636d
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %eax
cmpl %r15d, %eax
movl %r15d, %edx
cmovbl %eax, %edx
testl %edx, %edx
je 0x45e4
movq 0x8(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
movsd (%rbp,%rsi,8), %xmm1
ucomisd %xmm1, %xmm0
jne 0x45ec
jp 0x45ec
incq %rsi
cmpq %rsi, %rdx
jne 0x45c9
cmpl %r15d, %eax
setbe %al
jmp 0x45f3
ucomisd %xmm0, %xmm1
seta %al
movzbl %al, %esi
leaq 0x1d7e(%rip), %rdi      # 0x637b
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %edx
cmpl %edx, %r15d
setb %al
cmovbl %r15d, %edx
testl %edx, %edx
je 0x4643
movq 0x8(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rbp,%rsi,8), %xmm0
movsd (%rcx,%rsi,8), %xmm1
ucomisd %xmm1, %xmm0
jne 0x463c
jp 0x463c
incq %rsi
cmpq %rsi, %rdx
jne 0x461f
jmp 0x4643
ucomisd %xmm0, %xmm1
seta %al
movzbl %al, %esi
leaq 0x1d3d(%rip), %rdi      # 0x638a
xorl %eax, %eax
callq 0x1040
movl 0x14(%rsp), %eax
cmpl %r15d, %eax
movl %r15d, %edx
cmovbl %eax, %edx
testl %edx, %edx
je 0x4685
movq 0x18(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
ucomisd (%rbp,%rsi,8), %xmm0
jne 0x468d
jp 0x468d
incq %rsi
cmpq %rsi, %rdx
jne 0x466e
cmpl %r15d, %eax
setae %al
jmp 0x4690
seta %al
movzbl %al, %esi
leaq 0x1cfe(%rip), %rdi      # 0x6398
xorl %eax, %eax
callq 0x1040
movl 0x14(%rsp), %eax
cmpl %r15d, %eax
movl %r15d, %edx
cmovbl %eax, %edx
testl %edx, %edx
je 0x46d2
movq 0x18(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
ucomisd (%rbp,%rsi,8), %xmm0
jne 0x46d5
jp 0x46d5
incq %rsi
cmpq %rsi, %rdx
jne 0x46bb
cmpl %r15d, %eax
seta %al
movzbl %al, %esi
leaq 0x1cc6(%rip), %rdi      # 0x63a8
xorl %eax, %eax
callq 0x1040
movl 0x14(%rsp), %eax
cmpl %eax, %r15d
movl %eax, %edx
cmovbl %r15d, %edx
testl %edx, %edx
je 0x471a
movq 0x18(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rbp,%rsi,8), %xmm0
ucomisd (%rcx,%rsi,8), %xmm0
jne 0x4722
jp 0x4722
incq %rsi
cmpq %rsi, %rdx
jne 0x4703
cmpl %eax, %r15d
setae %al
jmp 0x4725
seta %al
movzbl %al, %esi
leaq 0x1c87(%rip), %rdi      # 0x63b6
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %eax
cmpl %r15d, %eax
movl %r15d, %edx
cmovbl %eax, %edx
testl %edx, %edx
je 0x4767
movq 0x8(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
ucomisd (%rbp,%rsi,8), %xmm0
jne 0x476a
jp 0x476a
incq %rsi
cmpq %rsi, %rdx
jne 0x4750
cmpl %r15d, %eax
seta %al
movzbl %al, %esi
leaq 0x1c4e(%rip), %rdi      # 0x63c5
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %eax
cmpl %eax, %r15d
movl %eax, %edx
cmovbl %r15d, %edx
testl %edx, %edx
je 0x47af
movq 0x8(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rbp,%rsi,8), %xmm0
ucomisd (%rcx,%rsi,8), %xmm0
jne 0x47b7
jp 0x47b7
incq %rsi
cmpq %rsi, %rdx
jne 0x4798
cmpl %eax, %r15d
setae %al
jmp 0x47ba
seta %al
movzbl %al, %esi
leaq 0x1c0f(%rip), %rdi      # 0x63d3
xorl %r12d, %r12d
xorl %eax, %eax
callq 0x1040
leaq 0x1941(%rip), %rdi      # 0x6116
callq 0x1120
leaq 0x1c01(%rip), %rdi      # 0x63e2
callq 0x1120
testq %r15, %r15
je 0x480d
shlq $0x3, %r15
leaq 0x1a64(%rip), %rbx      # 0x625a
movsd -0x8(%rbp,%r15), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $-0x8, %r15
jne 0x47f6
leaq 0x1902(%rip), %rdi      # 0x6116
callq 0x1120
callq 0x1090
movq %rax, %r13
xorpd %xmm0, %xmm0
leaq 0x60(%rsp), %rbx
movapd %xmm0, (%rbx)
movq $0x0, 0x10(%rbx)
leaq 0x24(%rsp), %r15
movl $0x0, (%r15)
movq 0x68(%rsp), %rsi
cmpq 0x70(%rsp), %rsi
je 0x485c
movl %r12d, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x68(%rsp)
jmp 0x4867
movq %rbx, %rdi
movq %r15, %rdx
callq 0x51a0
movl 0x24(%rsp), %eax
leal 0x1(%rax), %r12d
movl %r12d, 0x24(%rsp)
cmpl $0x98967f, %eax         # imm = 0x98967F
jl 0x4842
callq 0x1090
subq %r13, %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x184d(%rip), %xmm0     # 0x60e0
leaq 0x1b66(%rip), %rdi      # 0x6400
movb $0x1, %al
callq 0x1040
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x48b0
callq 0x10d0
movq %rbp, %rdi
callq 0x10f0
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
movq 0xa0(%rsp), %r15
je 0x48cf
callq 0x10f0
movq 0x90(%rsp), %rdi
callq 0x10f0
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
movq 0x38(%rsp), %rbx
je 0x48f0
callq 0x10f0
movq 0x98(%rsp), %rdi
callq 0x10f0
movq %r15, %rdi
callq 0x10f0
movq %r14, %rdi
callq 0x10f0
testq %rbx, %rbx
je 0x491a
movq %rbx, %rdi
callq 0x10f0
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x4929
callq 0x10f0
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x4938
callq 0x10f0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x4947
callq 0x10f0
xorl %eax, %eax
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x49c3
jmp 0x49c3
jmp 0x49c3
jmp 0x4969
jmp 0x4969
jmp 0x4969
jmp 0x4969
movq %rax, %rbx
jmp 0x49f1
jmp 0x4975
jmp 0x4975
movq %rax, %rbx
jmp 0x49fe
movq %rax, %rbx
jmp 0x4a0d
movq %rax, %rbx
jmp 0x4a1a
movq %rax, %rbx
jmp 0x4a27
movq %rax, %rbx
jmp 0x4a2f
jmp 0x499f
movq %rax, %rbx
jmp 0x4a41
jmp 0x49bb
jmp 0x49b1
jmp 0x49b1
jmp 0x49b1
jmp 0x49b1
movq %rax, %rbx
jmp 0x4a50
jmp 0x49bb
movq %rax, %rdi
callq 0x5194
movq %rax, %rbx
jmp 0x49e2
movq %rax, %rbx
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x49da
callq 0x10d0
movq %rbp, %rdi
callq 0x10f0
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x49f1
callq 0x10f0
movq 0x90(%rsp), %rdi
callq 0x10f0
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x4a0d
callq 0x10f0
movq 0x98(%rsp), %rdi
callq 0x10f0
movq 0xa0(%rsp), %rdi
callq 0x10f0
movq %r14, %rdi
callq 0x10f0
cmpq $0x0, 0x38(%rsp)
je 0x4a41
movq 0x38(%rsp), %rdi
callq 0x10f0
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x4a50
callq 0x10f0
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x4a64
callq 0x10f0
jmp 0x4a64
movq %rax, %rbx
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x4a73
callq 0x10f0
movq %rbx, %rdi
callq 0x1140
nop