// File: /workspace/github_cpp_makefile_star2_O3/0asa[P]TTree-source/main.cpp
// Function: main
int main (int argc, char * const argv[]) {
	clock_t clock_start = clock();
	
	int option_char;
	char* jdb;
	char* block;
	bool blocked = false;
	bool snp = false;
	int seed = -1;
	int method = -1;
	bool log = false;
	int nbTree = 1;
	int k = 1;
	int inc = 0;
	int nmin = 1;
	int intc = 1;
	bool startend = true;
	bool startendlsts = true;
	std::string acfile = "";
	std::string lsfile = "";
	std::string tsfile = "";
	std::string gcfile = "";
	while ((option_char = getopt(argc, argv, "x?m:j:b:r:sl:t:k:i:a:g:v:fn:c:e")) != -1) {
		switch (option_char) {
			case 'e':	startend = false; break;
			case 'x':	startendlsts = false; break;
			case 'b':	block	= optarg; blocked = true; break;
			case 'a':	acfile	= optarg; break;
			case 'v':	tsfile	= optarg; break;
			case 'l':	lsfile	= optarg; break;
			case 'g':	gcfile	= optarg; break;
			case 'j':	jdb		= optarg; break;
			case 's':	snp		= true; break;
			case 'r':	seed	= atoi(optarg); break;
			case 'm':	method	= atoi(optarg); break;
			case 't':	nbTree	= atoi(optarg); break;
			case 'k':	k		= atoi(optarg); break;
			case 'i':	inc		= atoi(optarg); break;
			case 'n':	nmin	= atoi(optarg); break;
			case 'c':	intc	= atoi(optarg); break;
			case 'f':	log		= true; break;
			case '?':	printHelp(); return -1 ; break;
			default:	printHelp(); return -1 ; break;
		}
	}
	
	//return 0;
	
	if (seed>-1)
		srand(seed);
	else
		srand((unsigned int) time(NULL));
	
	// OUTPUT FILES 
	char prefix[256];
	sprintf(prefix, "%s_k%d_m%d_t%d_ic%d_nmin%d",jdb,k,method,nbTree,intc,nmin);
	Logs l(prefix,inc);
		
	// DATABASE INPUT
	JavaDB db(jdb);
	if (blocked) {
		if (startend)
			db.readBlockStartEnd(block);
		else
			db.readBlock(block);
		l.main("BLOCK FILE:"); l.main(block); l.main("\n");
	}
	if (snp) {
		db.setType(SNP);
		l.main("SNP DB MODE : ON\n");
	}
	if (log)
		db.print(l.main());
	
	// LEARNING, TEST SETS AND CANDIDATE ATTRIBUTES SETTINGS
	std::vector<SETREP> ls;
	if (lsfile == "") 
		ls = db.selectAll();
	else {
		if (startendlsts)
			ls = Sampler::readStartEndSet(lsfile);
		else 
			ls = Sampler::readSet(lsfile);
		l.main("LEARNING SET FILE:"); l.main(lsfile.c_str()); l.main("\n");
	}
	
	std::vector<SETREP> ts;
	if (tsfile == "")
		ts = db.selectAll();
	else {
		if (startendlsts)
			ts = Sampler::readStartEndSet(tsfile);
		else
			ts = Sampler::readSet(tsfile);
		l.main("TEST SET FILE:"); l.main(tsfile.c_str()); l.main("\n");
	}
	
	std::vector<unsigned int> attcand;
	if (acfile == "")
		attcand = db.selectAllAtt();
	else {
		attcand = Sampler::readStartEndSet(acfile);
		l.main("CANDIDATE ATT. FILE:"); l.main(acfile.c_str()); l.main("\n");
	}
	
	std::vector<unsigned int> groupcand;
	if (blocked) {
		if (gcfile == "")
			groupcand = db.selectAllGroup();
		else {
			groupcand = Sampler::readStartEndSet(gcfile);
			l.main("CANDIDATE ATT. FILE:"); l.main(gcfile.c_str()); l.main("\n");
		}
	}
	
	Result result(&db);

	std::vector<float> vim(db.getNbAtt(),0.0);
	
	switch (method) {
		case 0: {
			fprintf(stderr,"CLASSIC TREE\n");
			ClassicTree ct(&db,nmin);
			ct.setLS(&ls);
			ct.setTS(&ts);
			ct.setAttCand(&attcand);
			ct.print(l.main());
			fprintf(l.main(),"Learning Time : %f sec\n",	ct.learn()/CLOCKS_PER_SEC);
			result = ct.test();
			fprintf(l.main(),"Error rate : %f %%\n", result.getErrorRate());
			fprintf(stderr,"Error rate : %f %%\n", result.getErrorRate());
			result.printProb(l.roc());
			//ct.computeVimp();
			//ct.printVimp(l.varimp());
			
			ct.computeVimp(vim,ls);
			ct.printVimp(vim,l.varimp());
			
			fprintf(l.dot(),"digraph G {\n");
			ct.dotit(l.dot());
			fprintf(l.dot(),"}\n");
			
			l.flush();
			break; 
		} case 1: {
			fprintf(stderr,"RANDOM FOREST\n");
			RandomForest rf(&db,nbTree,k,nmin);
			rf.setLS(&ls);
			rf.setTS(&ts);
			rf.setAttCand(&attcand);
			rf.print(l.main());
			rf.setTreeInfo(l.tree());
			fprintf(l.main(),"Learning Time : %f sec\n",	rf.learn()/CLOCKS_PER_SEC);
			result = rf.test();
			fprintf(l.main(),"Error rate : %f %%\n", result.getErrorRate());	
			fprintf(stderr,"Error rate : %f %%\n", result.getErrorRate());
			result.printProb(l.roc());
			
			rf.computeVimp(vim,ls);
			rf.printVimp(vim,l.varimp());
			rf.dotit(l.dot(),10);
			
			l.flush();
			break; 
		} case 2: {
			fprintf(stderr,"EXTRATREES\n");
			ExtraTrees et(&db,nbTree,k,nmin);
			et.setLS(&ls);
			et.setTS(&ts);
			et.setAttCand(&attcand);
			et.print(l.main());
			et.setTreeInfo(l.tree());
			fprintf(l.main(),"Learning Time : %f sec\n",	et.learn()/CLOCKS_PER_SEC);
			result = et.test();
			fprintf(l.main(),"Error rate : %f %%\n", result.getErrorRate());	
			fprintf(stderr,"Error rate : %f %%\n", result.getErrorRate());
			result.printProb(l.roc());
			
			et.computeVimp(vim,ls);
			et.printVimp(vim,l.varimp());
			et.dotit(l.dot(),10);
					
			l.flush();
			break;
		} case 3: {
			fprintf(stderr,"RANDOM TT FOREST\n");
			RandomTTForest rttf(&db,nbTree,k,nmin);
			rttf.setKint(0);
			rttf.setLS(&ls);
			rttf.setTS(&ts);
			rttf.setAttCand(&attcand);
			rttf.setGroupCand(groupcand);
			rttf.setInternalComp(intc);
			rttf.print(l.main());
			rttf.setTreeInfo(l.tree());
			fprintf(l.main(),"Learning Time : %f sec\n",	rttf.learn()/CLOCKS_PER_SEC);
			result = rttf.test();
			fprintf(l.main(),"Error rate : %f %%\n", result.getErrorRate());
			fprintf(stderr,"Error rate : %f %%\n", result.getErrorRate());
			result.printProb(l.roc());
			
			
			std::vector<float> gim(db.getNbGroup(),0.0);
			rttf.computeGroupVimp(gim,ls);
			rttf.printGroupVimp(gim,l.groupimp());
			
			rttf.computeVimp(vim,ls);
			rttf.printVimp(vim, l.varimp());
			rttf.dotit(l.dot(),10);
			
			
			l.flush();
			break;
		} case 4: {
			fprintf(stderr,"EXTRATTREES\n");
			ExtraTTrees ett(&db,nbTree,k,nmin);
			ett.setKint(0);
			ett.setLS(&ls);
			ett.setTS(&ts);
			ett.setAttCand(&attcand);
			ett.setGroupCand(groupcand);
			ett.setInternalComp(intc);
			ett.print(l.main());
			fprintf(l.main(),"Learning Time : %f sec\n",	ett.learn()/CLOCKS_PER_SEC);
			result = ett.test();
			fprintf(l.main(),"Error rate : %f %%\n", result.getErrorRate());
			fprintf(stderr,"Error rate : %f %%\n", result.getErrorRate());
			result.printProb(l.roc());
			
			std::vector<float> gim(db.getNbGroup(),0.0);
			ett.computeGroupVimp(gim,ls);
			ett.printGroupVimp(gim,l.groupimp());	
			
			ett.computeVimp(vim,ls);
			ett.printVimp(vim,l.varimp());
			
			l.flush();
			break;
		} case 5: { // WIP...
			fprintf(stderr,"RANDOM TT STUMP\n");
			RandomTTForest rttf(&db,nbTree,k,nmin);
			rttf.setKint(0);
			rttf.setLS(&ls);
			rttf.setTS(&ts);
			rttf.setTreeType(RANDOMTTSTUMP);
			rttf.setAttCand(&attcand);
			rttf.setGroupCand(groupcand);
			rttf.setInternalComp(intc);
			rttf.print(l.main());
			fprintf(l.main(),"Learning Time : %f sec\n",	rttf.learn()/CLOCKS_PER_SEC);
			result = rttf.test();
			fprintf(l.main(),"Error rate : %f %%\n", result.getErrorRate());
			fprintf(stderr,"Error rate : %f %%\n", result.getErrorRate());
			result.printProb(l.roc());
			rttf.computeVimp();
			rttf.printVimp(l.varimp());
			rttf.computeGroupVimp();
			rttf.printGroupVimp(l.groupimp());
			l.flush();
			break;
		} case 6: { // WIP...
			fprintf(stderr,"EXTRATTSTUMP\n");
			ExtraTTrees ett(&db,nbTree,k,nmin);
			ett.setKint(0);
			ett.setLS(&ls);
			ett.setTS(&ts);
			ett.setTreeType(EXTRATTSTUMP);
			ett.setAttCand(&attcand);
			ett.setGroupCand(groupcand);
			ett.setInternalComp(intc);
			ett.print(l.main());
			fprintf(l.main(),"Learning Time : %f sec\n",	ett.learn()/CLOCKS_PER_SEC);
			result = ett.test();
			fprintf(l.main(),"Error rate : %f %%\n", result.getErrorRate());
			fprintf(stderr,"Error rate : %f %%\n", result.getErrorRate());
			result.printProb(l.roc());
			ett.computeVimp();
			ett.printVimp(l.varimp());
			ett.computeGroupVimp();
			ett.printGroupVimp(l.groupimp());	
			l.flush();			
			break;
		} default: break;
	}

	
	fprintf(l.main(),"Overall Time : %f sec\n",(clock()-clock_start) / (double) CLOCKS_PER_SEC);
	fprintf(l.main(),"Program terminated...\n");
	fprintf(stdout,"Program terminated...\n");

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x698, %rsp            # imm = 0x698
movq %rsi, %r14
movl %edi, %r12d
callq 0x3130
movq %rax, -0x400(%rbp)
leaq -0x360(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x12539(%rip), %rbx     # 0x16816
leaq -0x370(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
movq %rbx, %rdx
callq 0x7834
leaq -0x1b0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq -0x1c0(%rbp), %rdi
movq %rbx, %rsi
movq %rbx, %rdx
callq 0x7834
leaq -0x190(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x124f5(%rip), %rdx     # 0x16816
leaq -0x1a0(%rbp), %rdi
movq %rdx, %rsi
callq 0x7834
leaq -0x340(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x124d4(%rip), %rdx     # 0x16816
leaq -0x350(%rbp), %rdi
movq %rdx, %rsi
callq 0x7834
movb $0x1, %al
movq $0x0, -0x398(%rbp)
movl $0x1, -0x30(%rbp)
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq %rcx, -0x390(%rbp)
movq $0x0, -0x380(%rbp)
movl $0xffffffff, -0x74(%rbp) # imm = 0xFFFFFFFF
movq $0x0, -0x388(%rbp)
movl $0x1, -0x2c(%rbp)
movl $0x0, -0x108(%rbp)
movl $0x1, %ecx
movq %rcx, -0x58(%rbp)
movl $0x1, %ecx
movq %rcx, -0x3a0(%rbp)
movb $0x1, %cl
movl %ecx, -0x104(%rbp)
movl %eax, %r13d
movl %r12d, %edi
movq %r14, %rsi
leaq 0x11f26(%rip), %rdx     # 0x162f2
callq 0x3080
leal -0x61(%rax), %ecx
cmpl $0x17, %ecx
ja 0x457b
xorl %eax, %eax
leaq 0x11c32(%rip), %rdx     # 0x16018
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
movq %r15, %rbx
jmpq *%rcx
movq 0x1bbc7(%rip), %rax     # 0x1ffc0
movq (%rax), %rax
movq %rax, -0x378(%rbp)
movb $0x1, %al
movq %rax, -0x398(%rbp)
movl %r13d, %eax
jmp 0x43bc
movl $0x0, -0x104(%rbp)
movl %r13d, %eax
jmp 0x43bc
movb $0x1, %al
movq %rax, -0x380(%rbp)
movl %r13d, %eax
jmp 0x43bc
movq 0x1bb8b(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movl %eax, -0x108(%rbp)
movl %r13d, %eax
jmp 0x43bc
leaq -0x1c0(%rbp), %rbx
jmp 0x447e
leaq -0x350(%rbp), %rbx
jmp 0x447e
movq 0x1bb5c(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movl %eax, -0x74(%rbp)
movl %r13d, %eax
jmp 0x43bc
leaq -0x1a0(%rbp), %rbx
movb %r13b, -0x31(%rbp)
movq 0x1bb37(%rip), %rax     # 0x1ffc0
movq (%rax), %r13
movl %r12d, %r15d
movq %r14, %r12
movq 0x8(%rbx), %r14
movq %r13, %rdi
callq 0x3100
movq %rbx, %rdi
xorl %esi, %esi
movq %r14, %rdx
movq %r12, %r14
movl %r15d, %r12d
leaq -0x370(%rbp), %r15
movq %r13, %rcx
movq %rax, %r8
callq 0x32c0
movb -0x31(%rbp), %al
jmp 0x43bc
movb $0x1, %al
movq %rax, -0x388(%rbp)
movl %r13d, %eax
jmp 0x43bc
movq 0x1bae2(%rip), %rax     # 0x1ffc0
movq (%rax), %rax
movq %rax, -0x408(%rbp)
movl %r13d, %eax
jmp 0x43bc
movq 0x1bac9(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movq %rax, -0x3a0(%rbp)
movl %r13d, %eax
jmp 0x43bc
movq 0x1baab(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movq %rax, -0x390(%rbp)
movl %r13d, %eax
jmp 0x43bc
movq 0x1ba8d(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movl %eax, -0x2c(%rbp)
movl %r13d, %eax
jmp 0x43bc
movq 0x1ba73(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movl %eax, -0x30(%rbp)
movl %r13d, %eax
jmp 0x43bc
movq 0x1ba59(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movq %rax, -0x58(%rbp)
movl %r13d, %eax
jmp 0x43bc
cmpl $-0x1, %eax
je 0x4596
cmpl $0x3f, %eax
jne 0x4587
jmp 0x4587
callq 0x403c
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
jmp 0x4fe4
movq -0x390(%rbp), %rdi
testl %edi, %edi
jns 0x45ab
xorl %edi, %edi
callq 0x31b0
movq %rax, %rdi
callq 0x31d0
leaq 0x11d5b(%rip), %rsi     # 0x16312
leaq -0x6c0(%rbp), %rbx
movq %rbx, %rdi
movq -0x408(%rbp), %r14
movq %r14, %rdx
movl -0x2c(%rbp), %ecx
movl -0x74(%rbp), %r8d
movl -0x30(%rbp), %r9d
xorl %eax, %eax
pushq -0x58(%rbp)
movq -0x3a0(%rbp), %r12
pushq %r12
callq 0x3060
addq $0x10, %rsp
leaq -0xe8(%rbp), %rdi
movq %rbx, %rsi
movl -0x108(%rbp), %edx
callq 0x63c2
leaq -0x528(%rbp), %rdi
leaq -0x330(%rbp), %rdx
movq %r14, %rsi
callq 0x6384
movq -0x398(%rbp), %rbx
leaq -0x5c0(%rbp), %rdi
leaq -0x528(%rbp), %rsi
callq 0xf494
leaq -0x518(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x4651
movq -0x518(%rbp), %rsi
incq %rsi
callq 0x3210
testb $0x1, %bl
je 0x472d
testb $0x1, %r13b
je 0x46a9
leaq -0x508(%rbp), %rdi
leaq -0x330(%rbp), %rdx
movq -0x378(%rbp), %r14
movq %r14, %rsi
callq 0x6384
leaq -0x5c0(%rbp), %rdi
leaq -0x508(%rbp), %rsi
callq 0xf8ce
leaq -0x4f8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x46f8
movq -0x4f8(%rbp), %rsi
jmp 0x46f0
leaq -0x4e8(%rbp), %rdi
leaq -0x330(%rbp), %rdx
movq -0x378(%rbp), %r14
movq %r14, %rsi
callq 0x6384
leaq -0x5c0(%rbp), %rdi
leaq -0x4e8(%rbp), %rsi
callq 0xfb02
leaq -0x4d8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x46f8
movq -0x4d8(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0xe8(%rbp), %rsi
leaq 0x11c27(%rip), %rdi     # 0x1632d
callq 0x3220
movq -0xe8(%rbp), %rsi
movq %r14, %rdi
callq 0x3220
movq -0xe8(%rbp), %rsi
leaq 0x11e64(%rip), %rdi     # 0x1658c
callq 0x3220
testb $0x1, -0x380(%rbp)
je 0x4753
movl $0x1, -0x5a0(%rbp)
movq -0xe8(%rbp), %rsi
leaq 0x11beb(%rip), %rdi     # 0x16339
callq 0x3220
testb $0x1, -0x388(%rbp)
movl -0x104(%rbp), %r15d
je 0x4778
movq -0xe8(%rbp), %rsi
leaq -0x5c0(%rbp), %rdi
xorl %edx, %edx
callq 0x8096
xorpd %xmm0, %xmm0
movapd %xmm0, -0x50(%rbp)
movq $0x0, -0x40(%rbp)
leaq 0x12086(%rip), %rsi     # 0x16816
leaq -0x1c0(%rbp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x4864
testb $0x1, %r15b
je 0x48e5
leaq -0x4b8(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x1c0(%rbp), %rsi
movq -0x1b8(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4c8(%rbp), %rdi
callq 0x7796
leaq -0x330(%rbp), %rdi
leaq -0x4c8(%rbp), %rsi
callq 0x646e
movq -0x50(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x330(%rbp), %rax
movq %rax, -0x50(%rbp)
movupd -0x328(%rbp), %xmm0
movupd %xmm0, -0x48(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x330(%rbp)
movq $0x0, -0x320(%rbp)
testq %rdi, %rdi
je 0x4848
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4848
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x4c8(%rbp), %rdi
cmpq %r14, %rdi
je 0x499a
movq -0x4b8(%rbp), %rsi
jmp 0x4992
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
xorl %edx, %edx
callq 0xd3fc
movq -0x50(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x330(%rbp), %rax
movq %rax, -0x50(%rbp)
movupd -0x328(%rbp), %xmm0
movupd %xmm0, -0x48(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x330(%rbp)
movq $0x0, -0x320(%rbp)
testq %rdi, %rdi
je 0x49d3
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x49d3
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x49d3
leaq -0x498(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x1c0(%rbp), %rsi
movq -0x1b8(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4a8(%rbp), %rdi
callq 0x7796
leaq -0x330(%rbp), %rdi
leaq -0x4a8(%rbp), %rsi
callq 0x665a
movq -0x50(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x330(%rbp), %rax
movq %rax, -0x50(%rbp)
movupd -0x328(%rbp), %xmm0
movupd %xmm0, -0x48(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x330(%rbp)
movq $0x0, -0x320(%rbp)
testq %rdi, %rdi
je 0x497f
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x497f
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x4a8(%rbp), %rdi
cmpq %r14, %rdi
je 0x499a
movq -0x498(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0xe8(%rbp), %rsi
leaq 0x119a3(%rip), %rdi     # 0x1634b
callq 0x3220
movq -0x1c0(%rbp), %rdi
movq -0xe8(%rbp), %rsi
callq 0x3220
movq -0xe8(%rbp), %rsi
leaq 0x11bbe(%rip), %rdi     # 0x1658c
callq 0x3220
xorpd %xmm0, %xmm0
movapd %xmm0, -0x70(%rbp)
movq $0x0, -0x60(%rbp)
leaq 0x11e2b(%rip), %rsi     # 0x16816
leaq -0x1a0(%rbp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x4abf
testb $0x1, %r15b
je 0x4b40
leaq -0x478(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x1a0(%rbp), %rsi
movq -0x198(%rbp), %rdx
addq %rsi, %rdx
leaq -0x488(%rbp), %rdi
callq 0x7796
leaq -0x330(%rbp), %rdi
leaq -0x488(%rbp), %rsi
callq 0x646e
movq -0x70(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq -0x330(%rbp), %rax
movq %rax, -0x70(%rbp)
movupd -0x328(%rbp), %xmm0
movupd %xmm0, -0x68(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x330(%rbp)
movq $0x0, -0x320(%rbp)
testq %rdi, %rdi
je 0x4aa3
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4aa3
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x488(%rbp), %rdi
cmpq %r14, %rdi
je 0x4bf5
movq -0x478(%rbp), %rsi
jmp 0x4bed
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
xorl %edx, %edx
callq 0xd3fc
movq -0x70(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq -0x330(%rbp), %rax
movq %rax, -0x70(%rbp)
movupd -0x328(%rbp), %xmm0
movupd %xmm0, -0x68(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x330(%rbp)
movq $0x0, -0x320(%rbp)
testq %rdi, %rdi
je 0x4c2e
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4c2e
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x4c2e
leaq -0x458(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x1a0(%rbp), %rsi
movq -0x198(%rbp), %rdx
addq %rsi, %rdx
leaq -0x468(%rbp), %rdi
callq 0x7796
leaq -0x330(%rbp), %rdi
leaq -0x468(%rbp), %rsi
callq 0x665a
movq -0x70(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq -0x330(%rbp), %rax
movq %rax, -0x70(%rbp)
movupd -0x328(%rbp), %xmm0
movupd %xmm0, -0x68(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x330(%rbp)
movq $0x0, -0x320(%rbp)
testq %rdi, %rdi
je 0x4bda
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4bda
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x468(%rbp), %rdi
cmpq %r14, %rdi
je 0x4bf5
movq -0x458(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0xe8(%rbp), %rsi
leaq 0x1175b(%rip), %rdi     # 0x1635e
callq 0x3220
movq -0x1a0(%rbp), %rdi
movq -0xe8(%rbp), %rsi
callq 0x3220
movq -0xe8(%rbp), %rsi
leaq 0x11963(%rip), %rdi     # 0x1658c
callq 0x3220
xorpd %xmm0, %xmm0
movapd %xmm0, -0x90(%rbp)
movq $0x0, -0x80(%rbp)
leaq 0x11bcd(%rip), %rsi     # 0x16816
leaq -0x370(%rbp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x5080
leaq -0x438(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x370(%rbp), %rsi
movq -0x368(%rbp), %rdx
addq %rsi, %rdx
leaq -0x448(%rbp), %rdi
callq 0x7796
leaq -0x330(%rbp), %rdi
leaq -0x448(%rbp), %rsi
callq 0x646e
movq -0x90(%rbp), %rdi
movq -0x80(%rbp), %rsi
movq -0x330(%rbp), %rax
movq %rax, -0x90(%rbp)
movupd -0x328(%rbp), %xmm0
movupd %xmm0, -0x88(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x330(%rbp)
movq $0x0, -0x320(%rbp)
testq %rdi, %rdi
je 0x4d00
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4d00
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x448(%rbp), %rdi
cmpq %r14, %rdi
je 0x4d1b
movq -0x438(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0xe8(%rbp), %rsi
leaq 0x11644(%rip), %rdi     # 0x1636d
callq 0x3220
movq -0x370(%rbp), %rdi
movq -0xe8(%rbp), %rsi
callq 0x3220
movq -0xe8(%rbp), %rsi
leaq 0x1183d(%rip), %rdi     # 0x1658c
callq 0x3220
xorpd %xmm0, %xmm0
movapd %xmm0, -0x100(%rbp)
movq $0x0, -0xf0(%rbp)
testb $0x1, %bl
je 0x4e89
leaq 0x11a9b(%rip), %rsi     # 0x16816
leaq -0x350(%rbp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x5303
leaq -0x418(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x350(%rbp), %rsi
movq -0x348(%rbp), %rdx
addq %rsi, %rdx
leaq -0x428(%rbp), %rdi
callq 0x7796
leaq -0x330(%rbp), %rdi
leaq -0x428(%rbp), %rsi
callq 0x646e
movq -0x100(%rbp), %rdi
movq -0xf0(%rbp), %rsi
movq -0x330(%rbp), %rax
movq %rax, -0x100(%rbp)
movupd -0x328(%rbp), %xmm0
movupd %xmm0, -0xf8(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x330(%rbp)
movq $0x0, -0x320(%rbp)
testq %rdi, %rdi
je 0x4e35
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4e35
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x428(%rbp), %rdi
cmpq %r14, %rdi
je 0x4e50
movq -0x418(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0xe8(%rbp), %rsi
leaq 0x1150f(%rip), %rdi     # 0x1636d
callq 0x3220
movq -0x350(%rbp), %rdi
movq -0xe8(%rbp), %rsi
callq 0x3220
movq -0xe8(%rbp), %rsi
leaq 0x11708(%rip), %rdi     # 0x1658c
callq 0x3220
leaq -0x3f8(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
callq 0x12808
leaq -0x5c0(%rbp), %rdi
callq 0xd632
movl %eax, %esi
leaq -0x330(%rbp), %rdx
movl $0x0, (%rdx)
leaq -0x120(%rbp), %rdi
leaq -0x180(%rbp), %rcx
callq 0x6840
movl -0x74(%rbp), %eax
cmpl $0x6, %eax
jbe 0x5108
movq -0xe8(%rbp), %rbx
callq 0x3130
subq -0x400(%rbp), %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x1110f(%rip), %xmm0    # 0x16008
leaq 0x11525(%rip), %rsi     # 0x16425
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe8(%rbp), %rcx
leaq 0x11524(%rip), %rbx     # 0x1643c
movl $0x16, %esi
movl $0x1, %edx
movq %rbx, %rdi
callq 0x3360
movq 0x1b07f(%rip), %rax     # 0x1ffb0
movq (%rax), %rcx
movl $0x16, %esi
movl $0x1, %edx
movq %rbx, %rdi
callq 0x3360
movq -0x120(%rbp), %rdi
testq %rdi, %rdi
je 0x4f61
movq -0x110(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
leaq -0x3f8(%rbp), %rdi
callq 0x12826
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x4f88
movq -0xf0(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x4fa0
movq -0x80(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x4fb5
movq -0x60(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x50(%rbp), %rdi
testq %rdi, %rdi
je 0x4fca
movq -0x40(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
leaq -0x5c0(%rbp), %rdi
callq 0x10032
leaq -0xe8(%rbp), %rdi
callq 0x6cca
xorl %ebx, %ebx
movq -0x350(%rbp), %rdi
leaq -0x340(%rbp), %rax
cmpq %rax, %rdi
je 0x5006
movq -0x340(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x1a0(%rbp), %rdi
leaq -0x190(%rbp), %rax
cmpq %rax, %rdi
je 0x5028
movq -0x190(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x1c0(%rbp), %rdi
leaq -0x1b0(%rbp), %rax
cmpq %rax, %rdi
je 0x504a
movq -0x1b0(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x370(%rbp), %rdi
leaq -0x360(%rbp), %rax
cmpq %rax, %rdi
je 0x506c
movq -0x360(%rbp), %rsi
incq %rsi
callq 0x3210
movl %ebx, %eax
addq $0x698, %rsp            # imm = 0x698
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
callq 0xd51e
movq -0x90(%rbp), %rdi
movq -0x80(%rbp), %rsi
movq -0x330(%rbp), %rax
movq %rax, -0x90(%rbp)
movupd -0x328(%rbp), %xmm0
movupd %xmm0, -0x88(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x330(%rbp)
movq $0x0, -0x320(%rbp)
testq %rdi, %rdi
je 0x4d54
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4d54
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x4d54
movl %eax, %eax
leaq 0x10f67(%rip), %rcx     # 0x16078
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x1aeb7(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x11257(%rip), %rdi     # 0x16382
movl $0xd, %esi
movl $0x1, %edx
callq 0x3360
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
movq -0x58(%rbp), %rdx
xorl %ecx, %ecx
callq 0xa068
leaq -0x330(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x1057c
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x10582
leaq -0x330(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x10588
movq -0xe8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0xc20e
movq -0xe8(%rbp), %rbx
leaq -0x330(%rbp), %rdi
callq 0xa0d2
divsd 0x10e54(%rip), %xmm0    # 0x16008
leaq 0x111d5(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x330(%rbp), %rsi
movq (%rsi), %rax
movq 0x28(%rsi), %rdx
leaq -0x180(%rbp), %rdi
callq *0x20(%rax)
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x68cc
leaq -0x180(%rbp), %rdi
callq 0x12826
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10dfe(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x1118a(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10dd6(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x11162(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12830
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xbd10
movq -0xd8(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x2, %ecx
callq 0x10890
movq -0xc8(%rbp), %rcx
leaq 0x11115(%rip), %rdi     # 0x163bc
movl $0xc, %esi
movl $0x1, %edx
callq 0x3360
movq -0xc8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0x6918
leaq -0xe8(%rbp), %rbx
movq 0x20(%rbx), %rcx
leaq 0x110ee(%rip), %rdi     # 0x163c9
movl $0x2, %esi
movl $0x1, %edx
callq 0x3360
movq %rbx, %rdi
callq 0x694a
leaq -0x330(%rbp), %rdi
callq 0xa0cc
jmp 0x4ed6
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
callq 0x8014
movq -0x100(%rbp), %rdi
movq -0xf0(%rbp), %rsi
movq -0x330(%rbp), %rax
movq %rax, -0x100(%rbp)
movupd -0x328(%rbp), %xmm0
movupd %xmm0, -0xf8(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x330(%rbp)
movq $0x0, -0x320(%rbp)
testq %rdi, %rdi
je 0x4e89
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4e89
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x4e89
movq 0x1ac43(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x1105a(%rip), %rdi     # 0x163f9
movl $0xc, %esi
movl $0x1, %edx
callq 0x3360
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
movl -0x30(%rbp), %edx
movl -0x2c(%rbp), %ecx
movq -0x58(%rbp), %r8
callq 0xd9c0
leaq -0x330(%rbp), %rdi
movl $0x0, 0x5c(%rdi)
leaq -0x50(%rbp), %rsi
callq 0x1057c
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x10582
leaq -0x330(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x10588
leaq -0x330(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xf460
leaq -0x330(%rbp), %rdi
movl %r12d, 0x58(%rdi)
movq -0xe8(%rbp), %rsi
callq 0x6c82
movq -0xe8(%rbp), %rbx
leaq -0x330(%rbp), %rdi
callq 0xda84
divsd 0x10bbe(%rip), %xmm0    # 0x16008
leaq 0x10f3f(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0xdbce
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x68cc
leaq -0x180(%rbp), %rdi
callq 0x12826
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10b6d(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x10ef9(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10b45(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x10ed1(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12830
leaq -0x5c0(%rbp), %rdi
callq 0x7fe8
movl %eax, %esi
leaq -0x124(%rbp), %rdx
movl $0x0, (%rdx)
leaq -0x180(%rbp), %rdi
leaq -0x32(%rbp), %rcx
callq 0x6840
leaq -0x330(%rbp), %rdi
leaq -0x180(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xdede
movq -0xd0(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x180(%rbp), %rsi
movl $0x2, %ecx
callq 0xf2c4
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xdde6
movq -0xd8(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x2, %ecx
callq 0x10890
leaq -0xe8(%rbp), %rdi
callq 0x694a
movq -0x180(%rbp), %rdi
testq %rdi, %rdi
je 0x55b2
movq -0x170(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x5f15
movq 0x1aa1a(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x10e13(%rip), %rdi     # 0x163db
movl $0xb, %esi
movl $0x1, %edx
callq 0x3360
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
movl -0x30(%rbp), %edx
movl -0x2c(%rbp), %ecx
movq -0x58(%rbp), %r8
callq 0xe3b8
leaq -0x330(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x1057c
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x10582
leaq -0x330(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x10588
movq -0xe8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0x6a8e
movq -0xe8(%rbp), %rbx
movq -0xc0(%rbp), %rax
leaq -0x330(%rbp), %rdi
movq %rax, 0x68(%rdi)
callq 0xe46a
divsd 0x109a8(%rip), %xmm0    # 0x16008
leaq 0x10d29(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0xe764
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x68cc
leaq -0x180(%rbp), %rdi
callq 0x12826
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10957(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x10ce3(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x1092f(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x10cbb(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12830
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xea3e
movq -0xd8(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x2, %ecx
callq 0x10890
movq -0xc8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0xa, %edx
callq 0x6ae8
leaq -0xe8(%rbp), %rdi
callq 0x694a
leaq -0x330(%rbp), %rdi
callq 0xe414
jmp 0x4ed6
movq 0x1a85c(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x10c61(%rip), %rdi     # 0x163e7
movl $0x11, %esi
movl $0x1, %edx
callq 0x3360
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
movl -0x30(%rbp), %edx
movl -0x2c(%rbp), %ecx
movq -0x58(%rbp), %r8
callq 0x11f70
leaq -0x330(%rbp), %rdi
movl $0x0, 0x5c(%rdi)
leaq -0x50(%rbp), %rsi
callq 0x1057c
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x10582
leaq -0x330(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x10588
leaq -0x330(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xf460
leaq -0x330(%rbp), %rdi
movl %r12d, 0x58(%rdi)
movq -0xe8(%rbp), %rsi
callq 0x6b8e
movq -0xe8(%rbp), %rbx
movq -0xc0(%rbp), %rax
leaq -0x330(%rbp), %rdi
movq %rax, 0xb0(%rdi)
callq 0x12034
divsd 0x107c9(%rip), %xmm0    # 0x16008
leaq 0x10b4a(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x123c6
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x68cc
leaq -0x180(%rbp), %rdi
callq 0x12826
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10778(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x10b04(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10750(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x10adc(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12830
leaq -0x5c0(%rbp), %rdi
callq 0x7fe8
movl %eax, %esi
leaq -0x124(%rbp), %rdx
movl $0x0, (%rdx)
leaq -0x180(%rbp), %rdi
leaq -0x32(%rbp), %rcx
callq 0x6840
leaq -0x330(%rbp), %rdi
leaq -0x180(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0x127b8
movq -0xd0(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x180(%rbp), %rsi
movl $0x2, %ecx
callq 0xf2c4
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0x126c0
movq -0xd8(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x2, %ecx
callq 0x10890
movq -0xc8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0xa, %edx
callq 0x6bd6
leaq -0xe8(%rbp), %rdi
callq 0x694a
movq -0x180(%rbp), %rdi
testq %rdi, %rdi
je 0x59bf
movq -0x170(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x5d43
movq 0x1a60d(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x109f7(%rip), %rdi     # 0x163cc
movl $0xe, %esi
movl $0x1, %edx
callq 0x3360
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
movl -0x30(%rbp), %edx
movl -0x2c(%rbp), %ecx
movq -0x58(%rbp), %r8
callq 0x1171c
leaq -0x330(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x1057c
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x10582
leaq -0x330(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x10588
movq -0xe8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0x698e
movq -0xe8(%rbp), %rbx
movq -0xc0(%rbp), %rax
leaq -0x330(%rbp), %rdi
movq %rax, 0x68(%rdi)
callq 0x117ce
divsd 0x1059b(%rip), %xmm0    # 0x16008
leaq 0x1091c(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x11b1c
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x68cc
leaq -0x180(%rbp), %rdi
callq 0x12826
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x1054a(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x108d6(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10522(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x108ae(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12830
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0x11df6
movq -0xd8(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x2, %ecx
callq 0x10890
movq -0xc8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0xa, %edx
callq 0x69e8
leaq -0xe8(%rbp), %rdi
callq 0x694a
leaq -0x330(%rbp), %rdi
callq 0x11778
jmp 0x4ed6
movq 0x1a44f(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x10873(%rip), %rdi     # 0x16406
movl $0x10, %esi
movl $0x1, %edx
callq 0x3360
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
movl -0x30(%rbp), %edx
movl -0x2c(%rbp), %ecx
movq -0x58(%rbp), %r8
callq 0x11f70
leaq -0x330(%rbp), %rdi
movl $0x0, 0x5c(%rdi)
leaq -0x50(%rbp), %rsi
callq 0x1057c
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x10582
leaq -0x330(%rbp), %rdi
movl $0x5, 0x60(%rdi)
leaq -0x90(%rbp), %rsi
callq 0x10588
leaq -0x330(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xf460
leaq -0x330(%rbp), %rdi
movl %r12d, 0x58(%rdi)
movq -0xe8(%rbp), %rsi
callq 0x6b8e
movq -0xe8(%rbp), %rbx
leaq -0x330(%rbp), %rdi
callq 0x12034
divsd 0x103c3(%rip), %xmm0    # 0x16008
leaq 0x10744(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x123c6
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x68cc
leaq -0x180(%rbp), %rdi
callq 0x12826
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10372(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x106fe(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x1034a(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x106d6(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12830
leaq -0x330(%rbp), %rdi
callq 0x1260c
movq -0xd8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0x1, %edx
callq 0x107fa
leaq -0x330(%rbp), %rdi
callq 0x12710
movq -0xd0(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0x1, %edx
callq 0xf232
leaq -0xe8(%rbp), %rdi
callq 0x694a
leaq -0x330(%rbp), %rdi
callq 0x11fd6
jmp 0x4ed6
movq 0x1a27d(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x106b2(%rip), %rdi     # 0x16417
movl $0xd, %esi
movl $0x1, %edx
callq 0x3360
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
movl -0x30(%rbp), %edx
movl -0x2c(%rbp), %ecx
movq -0x58(%rbp), %r8
callq 0xd9c0
leaq -0x330(%rbp), %rdi
movl $0x0, 0x5c(%rdi)
leaq -0x50(%rbp), %rsi
callq 0x1057c
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x10582
leaq -0x330(%rbp), %rdi
movl $0x6, 0x60(%rdi)
leaq -0x90(%rbp), %rsi
callq 0x10588
leaq -0x330(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xf460
leaq -0x330(%rbp), %rdi
movl %r12d, 0x58(%rdi)
movq -0xe8(%rbp), %rsi
callq 0x6c82
movq -0xe8(%rbp), %rbx
leaq -0x330(%rbp), %rdi
callq 0xda84
divsd 0x101f1(%rip), %xmm0    # 0x16008
leaq 0x10572(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0xdbce
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x68cc
leaq -0x180(%rbp), %rdi
callq 0x12826
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x101a0(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x1052c(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10178(%rip), %xmm0    # 0x16010
callq 0x12848
leaq 0x10504(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12830
leaq -0x330(%rbp), %rdi
callq 0xdd32
movq -0xd8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0x1, %edx
callq 0x107fa
leaq -0x330(%rbp), %rdi
callq 0xde36
movq -0xd0(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0x1, %edx
callq 0xf232
leaq -0xe8(%rbp), %rdi
callq 0x694a
leaq -0x330(%rbp), %rdi
callq 0xda26
jmp 0x4ed6
jmp 0x6229
jmp 0x622e
jmp 0x6229
jmp 0x622e
jmp 0x619e
movq %rax, %rbx
movq -0x180(%rbp), %rdi
testq %rdi, %rdi
je 0x6231
movq -0x170(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x6231
movq %rax, %rbx
leaq -0x4d8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x62d7
movq -0x4d8(%rbp), %rsi
jmp 0x5fa4
movq %rax, %rbx
leaq -0x4f8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x62d7
movq -0x4f8(%rbp), %rsi
incq %rsi
jmp 0x62d2
jmp 0x609f
jmp 0x609f
movq %rax, %rbx
movq -0x180(%rbp), %rdi
testq %rdi, %rdi
je 0x622c
movq -0x170(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x622c
movq %rax, %rbx
movq -0x428(%rbp), %rdi
cmpq %r14, %rdi
je 0x627a
movq -0x418(%rbp), %rsi
incq %rsi
callq 0x3210
jmp 0x627a
jmp 0x619e
movq %rax, %rbx
movq -0x468(%rbp), %rdi
cmpq %r14, %rdi
je 0x62ad
movq -0x458(%rbp), %rsi
jmp 0x603f
movq %rax, %rbx
movq -0x488(%rbp), %rdi
cmpq %r14, %rdi
je 0x62ad
movq -0x478(%rbp), %rsi
incq %rsi
jmp 0x62a8
jmp 0x608f
jmp 0x608f
movq %rax, %rbx
movq -0x4a8(%rbp), %rdi
cmpq %r14, %rdi
je 0x62c2
movq -0x498(%rbp), %rsi
jmp 0x6081
movq %rax, %rbx
movq -0x4c8(%rbp), %rdi
cmpq %r14, %rdi
je 0x62c2
movq -0x4b8(%rbp), %rsi
incq %rsi
jmp 0x62bd
jmp 0x6097
jmp 0x6097
jmp 0x60c9
movq %rax, %rbx
jmp 0x62ad
movq %rax, %rbx
jmp 0x62c2
movq %rax, %rbx
jmp 0x62d7
movq %rax, %rbx
movq -0x448(%rbp), %rdi
cmpq %r14, %rdi
je 0x6295
movq -0x438(%rbp), %rsi
incq %rsi
jmp 0x6290
movq %rax, %rbx
jmp 0x6295
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x12826
jmp 0x6236
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x12826
jmp 0x6247
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x12826
jmp 0x622c
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x12826
jmp 0x6231
jmp 0x6233
jmp 0x6244
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x12826
jmp 0x61f9
jmp 0x6229
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x12826
jmp 0x620a
jmp 0x622e
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x12826
jmp 0x621b
jmp 0x61f6
jmp 0x6207
jmp 0x6218
jmp 0x618c
jmp 0x618c
jmp 0x618c
jmp 0x618c
jmp 0x618c
jmp 0x618c
movq %rax, %rbx
jmp 0x6253
jmp 0x6196
movq %rax, %rbx
jmp 0x626e
movq %rax, %rbx
jmp 0x627a
movq %rax, %rbx
leaq -0x518(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x62e3
movq -0x518(%rbp), %rsi
incq %rsi
callq 0x3210
jmp 0x62e3
movq %rax, %rbx
jmp 0x62e3
jmp 0x62f1
movq %rax, %rbx
jmp 0x6316
movq %rax, %rbx
jmp 0x6338
movq %rax, %rbx
jmp 0x635a
movq %rax, %rbx
leaq -0x330(%rbp), %rdi
callq 0x11778
jmp 0x6253
movq %rax, %rbx
leaq -0x330(%rbp), %rdi
callq 0xe414
jmp 0x6253
movq %rax, %rbx
leaq -0x330(%rbp), %rdi
callq 0xa0cc
jmp 0x6253
movq %rax, %rbx
jmp 0x6247
movq %rax, %rbx
jmp 0x6236
movq %rax, %rbx
leaq -0x330(%rbp), %rdi
callq 0xda26
jmp 0x6253
movq %rax, %rbx
leaq -0x330(%rbp), %rdi
callq 0x11fd6
movq -0x120(%rbp), %rdi
testq %rdi, %rdi
je 0x626e
movq -0x110(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
leaq -0x3f8(%rbp), %rdi
callq 0x12826
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x6295
movq -0xf0(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x62ad
movq -0x80(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x62c2
movq -0x60(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x50(%rbp), %rdi
testq %rdi, %rdi
je 0x62d7
movq -0x40(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
leaq -0x5c0(%rbp), %rdi
callq 0x10032
leaq -0xe8(%rbp), %rdi
callq 0x6cca
jmp 0x62f4
movq %rax, %rbx
movq -0x350(%rbp), %rdi
leaq -0x340(%rbp), %rax
cmpq %rax, %rdi
je 0x6316
movq -0x340(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x1a0(%rbp), %rdi
leaq -0x190(%rbp), %rax
cmpq %rax, %rdi
je 0x6338
movq -0x190(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x1c0(%rbp), %rdi
leaq -0x1b0(%rbp), %rax
cmpq %rax, %rdi
je 0x635a
movq -0x1b0(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x370(%rbp), %rdi
leaq -0x360(%rbp), %rax
cmpq %rax, %rdi
je 0x637c
movq -0x360(%rbp), %rsi
incq %rsi
callq 0x3210
movq %rbx, %rdi
callq 0x3320