// File: /workspace/github_cpp_makefile_star2_O1/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 0x14(%rsp), %r15
movl $0x0, (%r15)
movq %r14, %rdi
movq %r15, %rsi
callq 0x3a18
movl 0x14(%rsp), %eax
leal 0x1(%rax), %ecx
movl %ecx, 0x14(%rsp)
cmpl $0x98967f, %eax         # imm = 0x98967F
jl 0x27fb
callq 0x1090
subq %rbx, %rax
cvtsi2sd %rax, %xmm0
divsd 0x27db(%rip), %xmm0     # 0x5008
leaq 0x283c(%rip), %rdi      # 0x5070
movb $0x1, %al
callq 0x1040
leaq 0x2841(%rip), %rdi      # 0x5083
callq 0x1120
leaq 0x2852(%rip), %rdi      # 0x50a0
movl $0x3b9aca00, %esi       # imm = 0x3B9ACA00
xorl %eax, %eax
callq 0x1040
leaq 0x283d(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x2843(%rip), %rdi      # 0x50b0
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 0x3a84
leaq 0x60(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x40(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0x18(%rsp), %rcx
movl $0x6, (%rcx)
leaq 0x50(%rsp), %rdi
callq 0x3b0a
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 0x18(%rsp), %r8
movl $0x5, (%r8)
callq 0x3ba0
movl 0x54(%rsp), %eax
testq %rax, %rax
je 0x2946
movq 0x58(%rsp), %r14
leaq (%rax,%rax,2), %rax
leaq (%r14,%rax,4), %r15
leaq 0x2a73(%rip), %rbx      # 0x539b
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 0x2928
leaq 0x2751(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x277d(%rip), %rdi      # 0x50d6
callq 0x1120
leaq 0x28(%rsp), %rdi
movl $0x5, %esi
callq 0x1484
movl 0x2c(%rsp), %r14d
testq %r14, %r14
je 0x29a1
movq 0x30(%rsp), %r15
shlq $0x2, %r14
leaq 0x2796(%rip), %rbx      # 0x511d
xorl %r12d, %r12d
movl (%r15,%r12), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r12
cmpq %r12, %r14
jne 0x298a
movl $0xa, %edi
callq 0x1100
leaq 0x60(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0x28(%rsp), %rdi
movl $0xa, %esi
callq 0x1af2
movl 0x2c(%rsp), %r14d
testq %r14, %r14
je 0x29f9
movq 0x30(%rsp), %r15
shlq $0x2, %r14
leaq 0x273e(%rip), %rbx      # 0x511d
xorl %r12d, %r12d
movl (%r15,%r12), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r12
cmpq %r12, %r14
jne 0x29e2
leaq 0x269e(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x26de(%rip), %rdi      # 0x50ea
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 0x3c76
movl 0x44(%rsp), %r14d
testq %r14, %r14
je 0x2a73
movq 0x48(%rsp), %r15
shlq $0x2, %r14
leaq 0x26c4(%rip), %rbx      # 0x511d
xorl %r12d, %r12d
movl (%r15,%r12), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r12
cmpq %r12, %r14
jne 0x2a5c
leaq 0x2624(%rip), %rbx      # 0x509e
movq %rbx, %rdi
callq 0x1120
leaq 0x2675(%rip), %rdi      # 0x50fe
callq 0x1120
movq 0x30(%rsp), %rax
movl (%rax), %esi
movl 0x2c(%rsp), %ecx
decl %ecx
movl (%rax,%rcx,4), %edx
leaq 0x2675(%rip), %rdi      # 0x511a
xorl %eax, %eax
callq 0x1040
movq %rbx, %rdi
callq 0x1120
leaq 0x2666(%rip), %rdi      # 0x5121
callq 0x1120
movl 0x2c(%rsp), %r14d
decl %r14d
movl %r14d, 0x2c(%rsp)
je 0x2af9
movq 0x30(%rsp), %r15
shlq $0x2, %r14
leaq 0x263e(%rip), %rbx      # 0x511d
xorl %r12d, %r12d
movl (%r15,%r12), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r12
cmpq %r12, %r14
jne 0x2ae2
leaq 0x259e(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x262b(%rip), %rdi      # 0x5137
callq 0x1120
movq 0x30(%rsp), %rax
movl $0x1, (%rax)
movl 0x2c(%rsp), %ebp
movl $0x0, 0x14(%rsp)
testl %ebp, %ebp
jle 0x2b57
leaq 0x25ea(%rip), %rbx      # 0x511d
xorl %eax, %eax
movq 0x30(%rsp), %rcx
movl %eax, %eax
movl (%rcx,%rax,4), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
movl 0x14(%rsp), %eax
incl %eax
movl %eax, 0x14(%rsp)
cmpl %ebp, %eax
jl 0x2b35
leaq 0x2540(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x25f2(%rip), %rdi      # 0x515c
callq 0x1120
movl $0x50, %edi
callq 0x1030
movq %rax, %r14
movdqu 0x283c(%rip), %xmm0     # 0x53c0
movdqu %xmm0, (%rax)
movl $0xe, 0x10(%rax)
leaq 0x2587(%rip), %rbx      # 0x511d
xorl %r15d, %r15d
movl (%r14,%r15), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r15
cmpq $0x14, %r15
jne 0x2b99
leaq 0x24e6(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x25b6(%rip), %rdi      # 0x517a
callq 0x1120
movl 0x2c(%rsp), %r15d
movq 0x30(%rsp), %rbp
movabsq $0x500000014, %rax      # imm = 0x500000014
movq %rax, 0x28(%rsp)
movq %r14, 0x30(%rsp)
leaq 0x252f(%rip), %rbx      # 0x511d
xorl %r12d, %r12d
movl (%r14,%r12), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r12
cmpq $0x14, %r12
jne 0x2bf1
movl $0xa, %edi
callq 0x1100
testq %r15, %r15
je 0x2c3e
shlq $0x2, %r15
leaq 0x24fa(%rip), %rbx      # 0x511d
xorl %r14d, %r14d
movl (%rbp,%r14), %esi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x1040
addq $0x4, %r14
cmpq %r14, %r15
jne 0x2c26
leaq 0x2459(%rip), %rbx      # 0x509e
movq %rbx, %rdi
callq 0x1120
leaq 0x2538(%rip), %rdi      # 0x518c
callq 0x1120
movl $0x0, 0x2c(%rsp)
movq %rbx, %rdi
callq 0x1120
leaq 0x252f(%rip), %rdi      # 0x519f
callq 0x1120
movl $0xa0, %edi
movq %rbp, 0x38(%rsp)
callq 0x1030
movq %rax, %r14
movdqa 0x2381(%rip), %xmm0     # 0x5010
movl $0x1, %eax
movdqa 0x2384(%rip), %xmm1     # 0x5020
movdqa 0x238c(%rip), %xmm2     # 0x5030
pshufd $0xf5, %xmm2, %xmm3     # xmm3 = xmm2[1,1,3,3]
movabsq $0x4000000000000000, %rcx # imm = 0x4000000000000000
movdqa 0x2385(%rip), %xmm4     # 0x5040
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 0x2ce6
movq %rcx, -0x8(%r14,%rax,8)
pextrw $0x4, %xmm5, %edx
testb $0x1, %dl
je 0x2cf4
movq %rcx, (%r14,%rax,8)
paddq %xmm4, %xmm0
addq $0x2, %rax
cmpq $0x7, %rax
jne 0x2cbb
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, (%r14)
movabsq $0x4008000000000000, %rax # imm = 0x4008000000000000
movq %rax, 0x20(%r14)
xorl %r12d, %r12d
leaq 0x2492(%rip), %rbx      # 0x51b9
movq (%r14,%r12), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r12
cmpq $0x28, %r12
jne 0x2d27
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 0x2438(%rip), %rbx      # 0x51b9
movsd (%r13,%r12), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r12
cmpq $0x28, %r12
jne 0x2d81
leaq 0x22fb(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x2411(%rip), %rdi      # 0x51c0
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 0x23f6(%rip), %rbx      # 0x51e2
movq %rax, %r15
movsd (%r15,%r12), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r12
cmpq $0x28, %r12
jne 0x2def
movq %r15, 0x98(%rsp)
movl $0xa, %edi
callq 0x1100
movq $0x14, 0x18(%rsp)
movl $0xa0, %edi
callq 0x1030
movq %rax, %rbx
movq %rax, 0x20(%rsp)
movups 0x25ab(%rip), %xmm0     # 0x53e8
movups %xmm0, 0x10(%rax)
movupd 0x258f(%rip), %xmm0     # 0x53d8
movupd %xmm0, (%rax)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x20(%rbx)
movl $0x5, 0x1c(%rsp)
xorl %r12d, %r12d
leaq 0x2375(%rip), %r15      # 0x51e2
movsd (%rbx,%r12), %xmm0
movq %r15, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r12
cmpq $0x28, %r12
jne 0x2e6d
leaq 0x2210(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x234e(%rip), %rdi      # 0x51e8
callq 0x1120
leaq 0x18(%rsp), %rdi
movq 0x8(%rdi), %rsi
addq $0x8, %rsi
movabsq $0x4004000000000000, %rax # imm = 0x4004000000000000
leaq 0x60(%rsp), %rdx
movq %rax, (%rdx)
callq 0x3cfa
movsd (%rax), %xmm0
leaq 0x232e(%rip), %rdi      # 0x51fc
movb $0x1, %al
callq 0x1040
leaq 0x18(%rsp), %rdi
movq 0x8(%rdi), %rsi
movabsq $0x4010000000000000, %rax # imm = 0x4010000000000000
leaq 0x60(%rsp), %rdx
movq %rax, (%rdx)
callq 0x3cfa
movsd (%rax), %xmm0
leaq 0x22fc(%rip), %rdi      # 0x51fc
movb $0x1, %al
callq 0x1040
movl $0x40, %edi
callq 0x1030
movapd 0x2137(%rip), %xmm0     # 0x5050
movupd %xmm0, (%rax)
leaq 0x18(%rsp), %rdi
movq 0x8(%rdi), %rsi
addq $0x8, %rsi
movq %rax, %rcx
addq $0x10, %rcx
movq %rax, 0x90(%rsp)
movq %rax, %rdx
callq 0x3d94
movsd (%rax), %xmm0
movsd 0x8(%rax), %xmm1
leaq 0x22c1(%rip), %rdi      # 0x5212
movb $0x2, %al
callq 0x1040
movl 0x1c(%rsp), %r15d
testq %r15, %r15
je 0x2f8e
movq 0x20(%rsp), %r12
shlq $0x3, %r15
xorl %r13d, %r13d
leaq 0x226d(%rip), %rbx      # 0x51e2
movsd (%r12,%r13), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r13
cmpq %r13, %r15
jne 0x2f75
leaq 0x2109(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x18(%rsp), %rdi
movl 0x4(%rdi), %esi
shlq $0x3, %rsi
addq 0x8(%rdi), %rsi
leaq 0x60(%rsp), %rcx
movq $0x0, (%rcx)
movl $0x2, %edx
callq 0x3e76
leaq 0x18(%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 0x3e76
leaq 0x18(%rsp), %rdi
movq 0x8(%rdi), %rsi
movups 0x2410(%rip), %xmm0     # 0x5410
leaq 0x60(%rsp), %rdx
movaps %xmm0, 0x10(%rdx)
movupd 0x23ef(%rip), %xmm0     # 0x5400
movapd %xmm0, (%rdx)
movabsq $0x4014000000000000, %rax # imm = 0x4014000000000000
movq %rax, 0x20(%rdx)
movl $0x5, %ecx
callq 0x3f36
leaq 0x21f9(%rip), %rdi      # 0x522d
xorl %eax, %eax
callq 0x1040
movl 0x1c(%rsp), %r15d
testq %r15, %r15
je 0x3071
movq 0x20(%rsp), %r12
shlq $0x3, %r15
xorl %r13d, %r13d
leaq 0x218a(%rip), %rbx      # 0x51e2
movsd (%r12,%r13), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r13
cmpq %r13, %r15
jne 0x3058
movl $0xa, %edi
callq 0x1100
movq $0x8, (%rsp)
movl $0x40, %edi
callq 0x1030
movq %rsp, %rdi
movq %rax, 0x8(%rdi)
movapd 0x1fc4(%rip), %xmm0     # 0x5060
movupd %xmm0, (%rax)
movl $0x2, 0x4(%rdi)
addq $0x10, %rax
movq 0x20(%rsp), %rdx
movl 0x1c(%rsp), %ecx
leaq (%rdx,%rcx,8), %rcx
movq %rax, %rsi
callq 0x3d94
movl 0x4(%rsp), %r15d
testq %r15, %r15
je 0x30f6
movq 0x8(%rsp), %r12
shlq $0x3, %r15
xorl %r13d, %r13d
leaq 0x2105(%rip), %rbx      # 0x51e2
movsd (%r12,%r13), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r13
cmpq %r13, %r15
jne 0x30dd
movl $0xa, %edi
callq 0x1100
movq %rsp, %rdi
movq 0x8(%rdi), %rsi
movupd 0x2319(%rip), %xmm0     # 0x5428
leaq 0x60(%rsp), %rdx
movapd %xmm0, (%rdx)
movabsq $0x4018000000000000, %rax # imm = 0x4018000000000000
movq %rax, 0x10(%rdx)
movl $0x3, %ecx
callq 0x3f36
movq %rsp, %rdi
movl 0x4(%rdi), %esi
shlq $0x3, %rsi
addq 0x8(%rdi), %rsi
movupd 0x22fa(%rip), %xmm0     # 0x5440
leaq 0x60(%rsp), %rdx
movapd %xmm0, (%rdx)
movabsq $-0x3ffc000000000000, %rax # imm = 0xC004000000000000
movq %rax, 0x10(%rdx)
movl $0x3, %ecx
callq 0x3f36
movl 0x4(%rsp), %r15d
testq %r15, %r15
je 0x319d
movq 0x8(%rsp), %r12
shlq $0x3, %r15
xorl %r13d, %r13d
leaq 0x205e(%rip), %rbx      # 0x51e2
movsd (%r12,%r13), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r13
cmpq %r13, %r15
jne 0x3184
leaq 0x1efa(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x2082(%rip), %rdi      # 0x5232
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
movl %eax, 0x4(%rsp)
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 0x2043(%rip), %rdi      # 0x5245
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %r15d
testq %r15, %r15
je 0x323f
movq 0x8(%rsp), %r12
shlq $0x3, %r15
xorl %r13d, %r13d
leaq 0x1fbc(%rip), %rbx      # 0x51e2
movsd (%r12,%r13), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $0x8, %r13
cmpq %r13, %r15
jne 0x3226
leaq 0x1e58(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x1ff8(%rip), %rdi      # 0x524a
callq 0x1120
movq %rsp, %rbx
movl (%rbx), %edx
movl 0x4(%rbx), %esi
leaq 0x1fff(%rip), %rdi      # 0x5265
xorl %eax, %eax
callq 0x1040
movq %rbx, %rdi
callq 0x4006
movl (%rsp), %edx
movl 0x4(%rsp), %esi
leaq 0x1ff2(%rip), %rdi      # 0x5275
xorl %eax, %eax
callq 0x1040
movl $0xa, %edi
callq 0x1100
leaq 0x1fe9(%rip), %rdi      # 0x5284
callq 0x1120
movl (%rsp), %edi
shlq $0x3, %rdi
callq 0x1030
movq %rax, %rbp
movl 0x4(%rsp), %r15d
testq %r15, %r15
je 0x32d3
movq 0x8(%rsp), %rax
xorl %ecx, %ecx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rbp,%rcx,8)
incq %rcx
cmpq %rcx, %r15
jne 0x32c0
movl 0x1c(%rsp), %eax
cmpl %r15d, %eax
jne 0x3320
testq %rax, %rax
sete %cl
je 0x3322
movq 0x20(%rsp), %rdx
decq %rax
xorl %esi, %esi
movsd (%rdx,%rsi,8), %xmm0
movsd (%rbp,%rsi,8), %xmm1
movapd %xmm0, %xmm2
cmpeqsd %xmm1, %xmm2
movq %xmm2, %rcx
andl $0x1, %ecx
ucomisd %xmm1, %xmm0
jne 0x3322
jp 0x3322
leaq 0x1(%rsi), %rdi
cmpq %rsi, %rax
movq %rdi, %rsi
jne 0x32ee
jmp 0x3322
xorl %ecx, %ecx
movzbl %cl, %esi
leaq 0x1f6f(%rip), %rdi      # 0x529b
xorl %eax, %eax
callq 0x1040
movl 0x1c(%rsp), %eax
movb $0x1, %cl
cmpl %r15d, %eax
jne 0x3380
testq %rax, %rax
setne %cl
je 0x3380
movq 0x20(%rsp), %rdx
decq %rax
xorl %esi, %esi
movsd (%rdx,%rsi,8), %xmm0
movsd (%rbp,%rsi,8), %xmm1
movapd %xmm0, %xmm2
cmpneqsd %xmm1, %xmm2
movq %xmm2, %rcx
andl $0x1, %ecx
ucomisd %xmm1, %xmm0
jne 0x3380
jp 0x3380
leaq 0x1(%rsi), %rdi
cmpq %rsi, %rax
movq %rdi, %rsi
jne 0x3350
movzbl %cl, %esi
leaq 0x1f20(%rip), %rdi      # 0x52aa
xorl %ebx, %ebx
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %eax
cmpl %r15d, %eax
jne 0x33de
testq %rax, %rax
sete %bl
je 0x33de
movq 0x8(%rsp), %rcx
decq %rax
xorl %edx, %edx
movsd (%rcx,%rdx,8), %xmm0
movsd (%rbp,%rdx,8), %xmm1
movapd %xmm0, %xmm2
cmpeqsd %xmm1, %xmm2
movq %xmm2, %rbx
andl $0x1, %ebx
ucomisd %xmm1, %xmm0
jne 0x33de
jp 0x33de
leaq 0x1(%rdx), %rsi
cmpq %rdx, %rax
movq %rsi, %rdx
jne 0x33ae
movzbl %bl, %esi
leaq 0x1ed1(%rip), %rdi      # 0x52b9
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %eax
movb $0x1, %cl
cmpl %r15d, %eax
jne 0x343c
testq %rax, %rax
setne %cl
je 0x343c
movq 0x8(%rsp), %rdx
decq %rax
xorl %esi, %esi
movsd (%rdx,%rsi,8), %xmm0
movsd (%rbp,%rsi,8), %xmm1
movapd %xmm0, %xmm2
cmpneqsd %xmm1, %xmm2
movq %xmm2, %rcx
andl $0x1, %ecx
ucomisd %xmm1, %xmm0
jne 0x343c
jp 0x343c
leaq 0x1(%rsi), %rdi
cmpq %rsi, %rax
movq %rdi, %rsi
jne 0x340c
movzbl %cl, %esi
leaq 0x1e82(%rip), %rdi      # 0x52c8
xorl %eax, %eax
callq 0x1040
movl 0x1c(%rsp), %edx
cmpl %r15d, %edx
setb %al
cmpl %r15d, %edx
cmovael %r15d, %edx
testl %edx, %edx
je 0x348f
movq 0x20(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
movsd (%rbp,%rsi,8), %xmm1
ucomisd %xmm1, %xmm0
jne 0x3488
jp 0x3488
incq %rsi
cmpq %rsi, %rdx
jne 0x346b
jmp 0x348f
ucomisd %xmm0, %xmm1
seta %al
movzbl %al, %esi
leaq 0x1e3e(%rip), %rdi      # 0x52d7
xorl %eax, %eax
callq 0x1040
movl 0x1c(%rsp), %eax
cmpl %r15d, %eax
movl %r15d, %edx
cmovbl %eax, %edx
testl %edx, %edx
je 0x34d5
movq 0x20(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
movsd (%rbp,%rsi,8), %xmm1
ucomisd %xmm1, %xmm0
jne 0x34dd
jp 0x34dd
incq %rsi
cmpq %rsi, %rdx
jne 0x34ba
cmpl %r15d, %eax
setbe %al
jmp 0x34e4
ucomisd %xmm0, %xmm1
seta %al
movzbl %al, %esi
leaq 0x1df8(%rip), %rdi      # 0x52e6
xorl %eax, %eax
callq 0x1040
movl 0x1c(%rsp), %edx
cmpl %edx, %r15d
setb %al
cmpl %edx, %r15d
cmovbl %r15d, %edx
testl %edx, %edx
je 0x3537
movq 0x20(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rbp,%rsi,8), %xmm0
movsd (%rcx,%rsi,8), %xmm1
ucomisd %xmm1, %xmm0
jne 0x3530
jp 0x3530
incq %rsi
cmpq %rsi, %rdx
jne 0x3513
jmp 0x3537
ucomisd %xmm0, %xmm1
seta %al
movzbl %al, %esi
leaq 0x1db4(%rip), %rdi      # 0x52f5
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %eax
cmpl %r15d, %eax
movl %r15d, %edx
cmovbl %eax, %edx
testl %edx, %edx
je 0x357d
movq 0x8(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
movsd (%rbp,%rsi,8), %xmm1
ucomisd %xmm1, %xmm0
jne 0x3585
jp 0x3585
incq %rsi
cmpq %rsi, %rdx
jne 0x3562
cmpl %r15d, %eax
setbe %al
jmp 0x358c
ucomisd %xmm0, %xmm1
seta %al
movzbl %al, %esi
leaq 0x1d6d(%rip), %rdi      # 0x5303
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %edx
cmpl %edx, %r15d
setb %al
cmpl %edx, %r15d
cmovbl %r15d, %edx
testl %edx, %edx
je 0x35df
movq 0x8(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rbp,%rsi,8), %xmm0
movsd (%rcx,%rsi,8), %xmm1
ucomisd %xmm1, %xmm0
jne 0x35d8
jp 0x35d8
incq %rsi
cmpq %rsi, %rdx
jne 0x35bb
jmp 0x35df
ucomisd %xmm0, %xmm1
seta %al
movzbl %al, %esi
leaq 0x1d29(%rip), %rdi      # 0x5312
xorl %eax, %eax
callq 0x1040
movl 0x1c(%rsp), %eax
cmpl %r15d, %eax
movl %r15d, %edx
cmovbl %eax, %edx
testl %edx, %edx
je 0x3621
movq 0x20(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
ucomisd (%rbp,%rsi,8), %xmm0
jne 0x3629
jp 0x3629
incq %rsi
cmpq %rsi, %rdx
jne 0x360a
cmpl %r15d, %eax
setae %al
jmp 0x362c
seta %al
movzbl %al, %esi
leaq 0x1cea(%rip), %rdi      # 0x5320
xorl %eax, %eax
callq 0x1040
movl 0x1c(%rsp), %eax
cmpl %r15d, %eax
movl %r15d, %edx
cmovbl %eax, %edx
testl %edx, %edx
je 0x366e
movq 0x20(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
ucomisd (%rbp,%rsi,8), %xmm0
jne 0x3671
jp 0x3671
incq %rsi
cmpq %rsi, %rdx
jne 0x3657
cmpl %r15d, %eax
seta %al
movzbl %al, %esi
leaq 0x1cb2(%rip), %rdi      # 0x5330
xorl %eax, %eax
callq 0x1040
movl 0x1c(%rsp), %eax
cmpl %eax, %r15d
movl %eax, %edx
cmovbl %r15d, %edx
testl %edx, %edx
je 0x36b6
movq 0x20(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rbp,%rsi,8), %xmm0
ucomisd (%rcx,%rsi,8), %xmm0
jne 0x36be
jp 0x36be
incq %rsi
cmpq %rsi, %rdx
jne 0x369f
cmpl %eax, %r15d
setae %al
jmp 0x36c1
seta %al
movzbl %al, %esi
leaq 0x1c73(%rip), %rdi      # 0x533e
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %eax
cmpl %r15d, %eax
movl %r15d, %edx
cmovbl %eax, %edx
testl %edx, %edx
je 0x3703
movq 0x8(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rcx,%rsi,8), %xmm0
ucomisd (%rbp,%rsi,8), %xmm0
jne 0x3706
jp 0x3706
incq %rsi
cmpq %rsi, %rdx
jne 0x36ec
cmpl %r15d, %eax
seta %al
movzbl %al, %esi
leaq 0x1c3a(%rip), %rdi      # 0x534d
xorl %eax, %eax
callq 0x1040
movl 0x4(%rsp), %eax
cmpl %eax, %r15d
movl %eax, %edx
cmovbl %r15d, %edx
testl %edx, %edx
je 0x374b
movq 0x8(%rsp), %rcx
movl %edx, %edx
xorl %esi, %esi
movsd (%rbp,%rsi,8), %xmm0
ucomisd (%rcx,%rsi,8), %xmm0
jne 0x3753
jp 0x3753
incq %rsi
cmpq %rsi, %rdx
jne 0x3734
cmpl %eax, %r15d
setae %al
jmp 0x3756
seta %al
movzbl %al, %esi
leaq 0x1bfb(%rip), %rdi      # 0x535b
xorl %r12d, %r12d
xorl %eax, %eax
callq 0x1040
leaq 0x192d(%rip), %rdi      # 0x509e
callq 0x1120
leaq 0x1bed(%rip), %rdi      # 0x536a
callq 0x1120
testq %r15, %r15
je 0x37a9
shlq $0x3, %r15
leaq 0x1a50(%rip), %rbx      # 0x51e2
movsd -0x8(%rbp,%r15), %xmm0
movq %rbx, %rdi
movb $0x1, %al
callq 0x1040
addq $-0x8, %r15
jne 0x3792
leaq 0x18ee(%rip), %rdi      # 0x509e
callq 0x1120
callq 0x1090
movq %rax, %r13
xorpd %xmm0, %xmm0
leaq 0x60(%rsp), %rbx
movapd %xmm0, (%rbx)
movq $0x0, 0x10(%rbx)
leaq 0x14(%rsp), %r15
movl $0x0, (%r15)
movq 0x68(%rsp), %rsi
cmpq 0x70(%rsp), %rsi
je 0x37f8
movl %r12d, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x68(%rsp)
jmp 0x3803
movq %rbx, %rdi
movq %r15, %rdx
callq 0x4062
movl 0x14(%rsp), %eax
leal 0x1(%rax), %r12d
movl %r12d, 0x14(%rsp)
cmpl $0x98967f, %eax         # imm = 0x98967F
jl 0x37de
callq 0x1090
subq %r13, %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x17d9(%rip), %xmm0     # 0x5008
leaq 0x1b52(%rip), %rdi      # 0x5388
movb $0x1, %al
callq 0x1040
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x384c
callq 0x10d0
movq %rbp, %rdi
callq 0x10f0
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
movq 0xa0(%rsp), %r15
je 0x386b
callq 0x10f0
movq 0x90(%rsp), %rdi
callq 0x10f0
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
movq 0x38(%rsp), %rbx
je 0x388c
callq 0x10f0
movq 0x98(%rsp), %rdi
callq 0x10f0
movq %r15, %rdi
callq 0x10f0
movq %r14, %rdi
callq 0x10f0
testq %rbx, %rbx
je 0x38b6
movq %rbx, %rdi
callq 0x10f0
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x38c5
callq 0x10f0
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x38d4
callq 0x10f0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x38e3
callq 0x10f0
xorl %eax, %eax
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x395f
jmp 0x395f
jmp 0x395f
jmp 0x3905
jmp 0x3905
jmp 0x3905
jmp 0x3905
movq %rax, %rbx
jmp 0x398d
jmp 0x3911
jmp 0x3911
movq %rax, %rbx
jmp 0x399a
movq %rax, %rbx
jmp 0x39a9
movq %rax, %rbx
jmp 0x39b6
movq %rax, %rbx
jmp 0x39c3
movq %rax, %rbx
jmp 0x39cb
jmp 0x393b
movq %rax, %rbx
jmp 0x39dd
jmp 0x3957
jmp 0x394d
jmp 0x394d
jmp 0x394d
jmp 0x394d
movq %rax, %rbx
jmp 0x39ec
jmp 0x3957
movq %rax, %rdi
callq 0x4056
movq %rax, %rbx
jmp 0x397e
movq %rax, %rbx
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x3976
callq 0x10d0
movq %rbp, %rdi
callq 0x10f0
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x398d
callq 0x10f0
movq 0x90(%rsp), %rdi
callq 0x10f0
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x39a9
callq 0x10f0
movq 0x98(%rsp), %rdi
callq 0x10f0
movq 0xa0(%rsp), %rdi
callq 0x10f0
movq %r14, %rdi
callq 0x10f0
cmpq $0x0, 0x38(%rsp)
je 0x39dd
movq 0x38(%rsp), %rdi
callq 0x10f0
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x39ec
callq 0x10f0
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x3a00
callq 0x10f0
jmp 0x3a00
movq %rax, %rbx
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x3a0f
callq 0x10f0
movq %rbx, %rdi
callq 0x1140
nop