// File: /workspace/github_cpp_makefile_star2_O1/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 0x12559(%rip), %rbx     # 0x16816
leaq -0x370(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
movq %rbx, %rdx
callq 0x77bc
leaq -0x1b0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq -0x1c0(%rbp), %rdi
movq %rbx, %rsi
movq %rbx, %rdx
callq 0x77bc
leaq -0x190(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x12515(%rip), %rdx     # 0x16816
leaq -0x1a0(%rbp), %rdi
movq %rdx, %rsi
callq 0x77bc
leaq -0x340(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x124f4(%rip), %rdx     # 0x16816
leaq -0x350(%rbp), %rdi
movq %rdx, %rsi
callq 0x77bc
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 0x11f46(%rip), %rdx     # 0x162f2
callq 0x3080
leal -0x61(%rax), %ecx
cmpl $0x17, %ecx
ja 0x455b
xorl %eax, %eax
leaq 0x11c52(%rip), %rdx     # 0x16018
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
movq %r15, %rbx
jmpq *%rcx
movq 0x1bbe7(%rip), %rax     # 0x1ffc0
movq (%rax), %rax
movq %rax, -0x378(%rbp)
movb $0x1, %al
movq %rax, -0x398(%rbp)
movl %r13d, %eax
jmp 0x439c
movl $0x0, -0x104(%rbp)
movl %r13d, %eax
jmp 0x439c
movb $0x1, %al
movq %rax, -0x380(%rbp)
movl %r13d, %eax
jmp 0x439c
movq 0x1bbab(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movl %eax, -0x108(%rbp)
movl %r13d, %eax
jmp 0x439c
leaq -0x1c0(%rbp), %rbx
jmp 0x445e
leaq -0x350(%rbp), %rbx
jmp 0x445e
movq 0x1bb7c(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movl %eax, -0x74(%rbp)
movl %r13d, %eax
jmp 0x439c
leaq -0x1a0(%rbp), %rbx
movb %r13b, -0x31(%rbp)
movq 0x1bb57(%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 0x439c
movb $0x1, %al
movq %rax, -0x388(%rbp)
movl %r13d, %eax
jmp 0x439c
movq 0x1bb02(%rip), %rax     # 0x1ffc0
movq (%rax), %rax
movq %rax, -0x408(%rbp)
movl %r13d, %eax
jmp 0x439c
movq 0x1bae9(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movq %rax, -0x3a0(%rbp)
movl %r13d, %eax
jmp 0x439c
movq 0x1bacb(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movq %rax, -0x390(%rbp)
movl %r13d, %eax
jmp 0x439c
movq 0x1baad(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movl %eax, -0x2c(%rbp)
movl %r13d, %eax
jmp 0x439c
movq 0x1ba93(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movl %eax, -0x30(%rbp)
movl %r13d, %eax
jmp 0x439c
movq 0x1ba79(%rip), %rax     # 0x1ffc0
movq (%rax), %rdi
callq 0x32d0
movq %rax, -0x58(%rbp)
movl %r13d, %eax
jmp 0x439c
cmpl $-0x1, %eax
je 0x4576
cmpl $0x3f, %eax
jne 0x4567
jmp 0x4567
callq 0x401c
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
jmp 0x50b9
movq -0x390(%rbp), %rdi
testl %edi, %edi
jns 0x458b
xorl %edi, %edi
callq 0x31b0
movq %rax, %rdi
callq 0x31d0
leaq 0x11d7b(%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 0x6384
leaq -0x528(%rbp), %rdi
leaq -0x330(%rbp), %rdx
movq %r14, %rsi
callq 0x6346
movq -0x398(%rbp), %rbx
leaq -0x5c0(%rbp), %rdi
leaq -0x528(%rbp), %rsi
callq 0xf4c4
leaq -0x518(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x4631
movq -0x518(%rbp), %rsi
incq %rsi
callq 0x3210
testb $0x1, %bl
je 0x470d
testb $0x1, %r13b
je 0x4689
leaq -0x508(%rbp), %rdi
leaq -0x330(%rbp), %rdx
movq -0x378(%rbp), %r14
movq %r14, %rsi
callq 0x6346
leaq -0x5c0(%rbp), %rdi
leaq -0x508(%rbp), %rsi
callq 0xf8fe
leaq -0x4f8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x46d8
movq -0x4f8(%rbp), %rsi
jmp 0x46d0
leaq -0x4e8(%rbp), %rdi
leaq -0x330(%rbp), %rdx
movq -0x378(%rbp), %r14
movq %r14, %rsi
callq 0x6346
leaq -0x5c0(%rbp), %rdi
leaq -0x4e8(%rbp), %rsi
callq 0xfb32
leaq -0x4d8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x46d8
movq -0x4d8(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0xe8(%rbp), %rsi
leaq 0x11c47(%rip), %rdi     # 0x1632d
callq 0x3220
movq -0xe8(%rbp), %rsi
movq %r14, %rdi
callq 0x3220
movq -0xe8(%rbp), %rsi
leaq 0x11e84(%rip), %rdi     # 0x1658c
callq 0x3220
testb $0x1, -0x380(%rbp)
je 0x4733
movl $0x1, -0x5a0(%rbp)
movq -0xe8(%rbp), %rsi
leaq 0x11c0b(%rip), %rdi     # 0x16339
callq 0x3220
testb $0x1, -0x388(%rbp)
movl -0x104(%rbp), %r15d
je 0x4758
movq -0xe8(%rbp), %rsi
leaq -0x5c0(%rbp), %rdi
xorl %edx, %edx
callq 0x802e
xorpd %xmm0, %xmm0
movapd %xmm0, -0x50(%rbp)
movq $0x0, -0x40(%rbp)
leaq 0x120a6(%rip), %rsi     # 0x16816
leaq -0x1c0(%rbp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x4844
testb $0x1, %r15b
je 0x48c1
leaq -0x4b8(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x1c0(%rbp), %rsi
movq -0x1b8(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4c8(%rbp), %rdi
callq 0x7722
leaq -0x330(%rbp), %rdi
leaq -0x4c8(%rbp), %rsi
callq 0x6434
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 0x480d
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4828
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x4c8(%rbp), %rdi
cmpq %r14, %rdi
je 0x4976
movq -0x4b8(%rbp), %rsi
jmp 0x496e
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
xorl %edx, %edx
callq 0xd3dc
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 0x489d
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x49af
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x49af
leaq -0x498(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x1c0(%rbp), %rsi
movq -0x1b8(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4a8(%rbp), %rdi
callq 0x7722
leaq -0x330(%rbp), %rdi
leaq -0x4a8(%rbp), %rsi
callq 0x660e
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 0x4940
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x495b
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x4a8(%rbp), %rdi
cmpq %r14, %rdi
je 0x4976
movq -0x498(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0xe8(%rbp), %rsi
leaq 0x119c7(%rip), %rdi     # 0x1634b
callq 0x3220
movq -0x1c0(%rbp), %rdi
movq -0xe8(%rbp), %rsi
callq 0x3220
movq -0xe8(%rbp), %rsi
leaq 0x11be2(%rip), %rdi     # 0x1658c
callq 0x3220
xorpd %xmm0, %xmm0
movapd %xmm0, -0x70(%rbp)
movq $0x0, -0x60(%rbp)
leaq 0x11e4f(%rip), %rsi     # 0x16816
leaq -0x1a0(%rbp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x4a9b
testb $0x1, %r15b
je 0x4b18
leaq -0x478(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x1a0(%rbp), %rsi
movq -0x198(%rbp), %rdx
addq %rsi, %rdx
leaq -0x488(%rbp), %rdi
callq 0x7722
leaq -0x330(%rbp), %rdi
leaq -0x488(%rbp), %rsi
callq 0x6434
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 0x4a64
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4a7f
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x488(%rbp), %rdi
cmpq %r14, %rdi
je 0x4bcd
movq -0x478(%rbp), %rsi
jmp 0x4bc5
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
xorl %edx, %edx
callq 0xd3dc
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 0x4af4
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4c06
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x4c06
leaq -0x458(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x1a0(%rbp), %rsi
movq -0x198(%rbp), %rdx
addq %rsi, %rdx
leaq -0x468(%rbp), %rdi
callq 0x7722
leaq -0x330(%rbp), %rdi
leaq -0x468(%rbp), %rsi
callq 0x660e
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 0x4b97
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4bb2
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x468(%rbp), %rdi
cmpq %r14, %rdi
je 0x4bcd
movq -0x458(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0xe8(%rbp), %rsi
leaq 0x11783(%rip), %rdi     # 0x1635e
callq 0x3220
movq -0x1a0(%rbp), %rdi
movq -0xe8(%rbp), %rsi
callq 0x3220
movq -0xe8(%rbp), %rsi
leaq 0x1198b(%rip), %rdi     # 0x1658c
callq 0x3220
xorpd %xmm0, %xmm0
movapd %xmm0, -0x90(%rbp)
movq $0x0, -0x80(%rbp)
leaq 0x11bf5(%rip), %rsi     # 0x16816
leaq -0x370(%rbp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x4d2e
leaq -0x438(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x370(%rbp), %rsi
movq -0x368(%rbp), %rdx
addq %rsi, %rdx
leaq -0x448(%rbp), %rdi
callq 0x7722
leaq -0x330(%rbp), %rdi
leaq -0x448(%rbp), %rsi
callq 0x6434
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 0x4cbd
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4cd8
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x448(%rbp), %rdi
cmpq %r14, %rdi
je 0x4cf3
movq -0x438(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0xe8(%rbp), %rsi
leaq 0x1166c(%rip), %rdi     # 0x1636d
callq 0x3220
movq -0x370(%rbp), %rdi
movq -0xe8(%rbp), %rsi
callq 0x3220
movq -0xe8(%rbp), %rsi
leaq 0x11865(%rip), %rdi     # 0x1658c
callq 0x3220
jmp 0x4da9
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
callq 0xd4fe
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 0x4d8e
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4da9
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
xorpd %xmm0, %xmm0
movapd %xmm0, -0x100(%rbp)
movq $0x0, -0xf0(%rbp)
testb $0x1, %bl
je 0x4f5e
leaq 0x11a46(%rip), %rsi     # 0x16816
leaq -0x350(%rbp), %rdi
callq 0x30c0
testl %eax, %eax
je 0x4ee0
leaq -0x418(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0x350(%rbp), %rsi
movq -0x348(%rbp), %rdx
addq %rsi, %rdx
leaq -0x428(%rbp), %rdi
callq 0x7722
leaq -0x330(%rbp), %rdi
leaq -0x428(%rbp), %rsi
callq 0x6434
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 0x4e6f
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4e8a
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x428(%rbp), %rdi
cmpq %r14, %rdi
je 0x4ea5
movq -0x418(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0xe8(%rbp), %rsi
leaq 0x114ba(%rip), %rdi     # 0x1636d
callq 0x3220
movq -0x350(%rbp), %rdi
movq -0xe8(%rbp), %rsi
callq 0x3220
movq -0xe8(%rbp), %rsi
leaq 0x116b3(%rip), %rdi     # 0x1658c
callq 0x3220
jmp 0x4f5e
leaq -0x330(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
callq 0x7fac
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 0x4f43
subq %rdi, %rsi
callq 0x3210
movq -0x330(%rbp), %rdi
testq %rdi, %rdi
je 0x4f5e
movq -0x320(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
leaq -0x3f8(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
callq 0x12870
leaq -0x5c0(%rbp), %rdi
callq 0xd612
movl %eax, %esi
leaq -0x330(%rbp), %rdx
movl $0x0, (%rdx)
leaq -0x120(%rbp), %rdi
leaq -0x180(%rbp), %rcx
callq 0x6802
movl -0x74(%rbp), %eax
cmpl $0x6, %eax
jbe 0x5155
movq -0xe8(%rbp), %rbx
callq 0x3130
subq -0x400(%rbp), %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x1103a(%rip), %xmm0    # 0x16008
leaq 0x11450(%rip), %rsi     # 0x16425
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe8(%rbp), %rcx
leaq 0x1144f(%rip), %rbx     # 0x1643c
movl $0x16, %esi
movl $0x1, %edx
movq %rbx, %rdi
callq 0x3360
movq 0x1afaa(%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 0x5036
movq -0x110(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
leaq -0x3f8(%rbp), %rdi
callq 0x1288e
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x505d
movq -0xf0(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x5075
movq -0x80(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x508a
movq -0x60(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x50(%rbp), %rdi
testq %rdi, %rdi
je 0x509f
movq -0x40(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
leaq -0x5c0(%rbp), %rdi
callq 0x10044
leaq -0xe8(%rbp), %rdi
callq 0x6c8c
xorl %ebx, %ebx
movq -0x350(%rbp), %rdi
leaq -0x340(%rbp), %rax
cmpq %rax, %rdi
je 0x50db
movq -0x340(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x1a0(%rbp), %rdi
leaq -0x190(%rbp), %rax
cmpq %rax, %rdi
je 0x50fd
movq -0x190(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x1c0(%rbp), %rdi
leaq -0x1b0(%rbp), %rax
cmpq %rax, %rdi
je 0x511f
movq -0x1b0(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x370(%rbp), %rdi
leaq -0x360(%rbp), %rax
cmpq %rax, %rdi
je 0x5141
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
movl %eax, %eax
leaq 0x10f1a(%rip), %rcx     # 0x16078
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x1ae6a(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x1120a(%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 0xa058
leaq -0x330(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x105a8
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x105ae
leaq -0x330(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x105b4
movq -0xe8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0xc206
movq -0xe8(%rbp), %rbx
leaq -0x330(%rbp), %rdi
callq 0xa0c2
divsd 0x10e07(%rip), %xmm0    # 0x16008
leaq 0x11188(%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 0x688e
leaq -0x180(%rbp), %rdi
callq 0x1288e
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10db1(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x1113d(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10d89(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x11115(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12898
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xbd08
movq -0xd8(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x2, %ecx
callq 0x108ac
movq -0xc8(%rbp), %rcx
leaq 0x110c8(%rip), %rdi     # 0x163bc
movl $0xc, %esi
movl $0x1, %edx
callq 0x3360
movq -0xc8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0x68da
leaq -0xe8(%rbp), %rbx
movq 0x20(%rbx), %rcx
leaq 0x110a1(%rip), %rdi     # 0x163c9
movl $0x2, %esi
movl $0x1, %edx
callq 0x3360
movq %rbx, %rdi
callq 0x690c
leaq -0x330(%rbp), %rdi
callq 0xa0bc
jmp 0x4fab
movq 0x1ac81(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x11098(%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 0xd998
leaq -0x330(%rbp), %rdi
movl $0x0, 0x5c(%rdi)
leaq -0x50(%rbp), %rsi
callq 0x105a8
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x105ae
leaq -0x330(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x105b4
leaq -0x330(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xf490
leaq -0x330(%rbp), %rdi
movl %r12d, 0x58(%rdi)
movq -0xe8(%rbp), %rsi
callq 0x6c44
movq -0xe8(%rbp), %rbx
leaq -0x330(%rbp), %rdi
callq 0xda5c
divsd 0x10bfc(%rip), %xmm0    # 0x16008
leaq 0x10f7d(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0xdba6
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x688e
leaq -0x180(%rbp), %rdi
callq 0x1288e
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10bab(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x10f37(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10b83(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x10f0f(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12898
leaq -0x5c0(%rbp), %rdi
callq 0x7f80
movl %eax, %esi
leaq -0x124(%rbp), %rdx
movl $0x0, (%rdx)
leaq -0x180(%rbp), %rdi
leaq -0x32(%rbp), %rcx
callq 0x6802
leaq -0x330(%rbp), %rdi
leaq -0x180(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xded4
movq -0xd0(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x180(%rbp), %rsi
movl $0x2, %ecx
callq 0xf2ec
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xdddc
movq -0xd8(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x2, %ecx
callq 0x108ac
leaq -0xe8(%rbp), %rdi
callq 0x690c
movq -0x180(%rbp), %rdi
testq %rdi, %rdi
je 0x5574
movq -0x170(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x5ed7
movq 0x1aa58(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x10e51(%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 0xe38c
leaq -0x330(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x105a8
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x105ae
leaq -0x330(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x105b4
movq -0xe8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0x6a50
movq -0xe8(%rbp), %rbx
movq -0xc0(%rbp), %rax
leaq -0x330(%rbp), %rdi
movq %rax, 0x68(%rdi)
callq 0xe43e
divsd 0x109e6(%rip), %xmm0    # 0x16008
leaq 0x10d67(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0xe738
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x688e
leaq -0x180(%rbp), %rdi
callq 0x1288e
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10995(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x10d21(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x1096d(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x10cf9(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12898
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xea2e
movq -0xd8(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x2, %ecx
callq 0x108ac
movq -0xc8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0xa, %edx
callq 0x6aaa
leaq -0xe8(%rbp), %rdi
callq 0x690c
leaq -0x330(%rbp), %rdi
callq 0xe3e8
jmp 0x4fab
movq 0x1a89a(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x10c9f(%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 0x11fb4
leaq -0x330(%rbp), %rdi
movl $0x0, 0x5c(%rdi)
leaq -0x50(%rbp), %rsi
callq 0x105a8
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x105ae
leaq -0x330(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x105b4
leaq -0x330(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xf490
leaq -0x330(%rbp), %rdi
movl %r12d, 0x58(%rdi)
movq -0xe8(%rbp), %rsi
callq 0x6b50
movq -0xe8(%rbp), %rbx
movq -0xc0(%rbp), %rax
leaq -0x330(%rbp), %rdi
movq %rax, 0xb0(%rdi)
callq 0x12078
divsd 0x10807(%rip), %xmm0    # 0x16008
leaq 0x10b88(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x12410
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x688e
leaq -0x180(%rbp), %rdi
callq 0x1288e
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x107b6(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x10b42(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x1078e(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x10b1a(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12898
leaq -0x5c0(%rbp), %rdi
callq 0x7f80
movl %eax, %esi
leaq -0x124(%rbp), %rdx
movl $0x0, (%rdx)
leaq -0x180(%rbp), %rdi
leaq -0x32(%rbp), %rcx
callq 0x6802
leaq -0x330(%rbp), %rdi
leaq -0x180(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0x12820
movq -0xd0(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x180(%rbp), %rsi
movl $0x2, %ecx
callq 0xf2ec
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0x12728
movq -0xd8(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x2, %ecx
callq 0x108ac
movq -0xc8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0xa, %edx
callq 0x6b98
leaq -0xe8(%rbp), %rdi
callq 0x690c
movq -0x180(%rbp), %rdi
testq %rdi, %rdi
je 0x5981
movq -0x170(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x5d05
movq 0x1a64b(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x10a35(%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 0x11744
leaq -0x330(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x105a8
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x105ae
leaq -0x330(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x105b4
movq -0xe8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0x6950
movq -0xe8(%rbp), %rbx
movq -0xc0(%rbp), %rax
leaq -0x330(%rbp), %rdi
movq %rax, 0x68(%rdi)
callq 0x117f6
divsd 0x105d9(%rip), %xmm0    # 0x16008
leaq 0x1095a(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x11b44
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x688e
leaq -0x180(%rbp), %rdi
callq 0x1288e
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10588(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x10914(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10560(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x108ec(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12898
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0x11e3a
movq -0xd8(%rbp), %rdx
leaq -0x330(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x2, %ecx
callq 0x108ac
movq -0xc8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0xa, %edx
callq 0x69aa
leaq -0xe8(%rbp), %rdi
callq 0x690c
leaq -0x330(%rbp), %rdi
callq 0x117a0
jmp 0x4fab
movq 0x1a48d(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x108b1(%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 0x11fb4
leaq -0x330(%rbp), %rdi
movl $0x0, 0x5c(%rdi)
leaq -0x50(%rbp), %rsi
callq 0x105a8
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x105ae
leaq -0x330(%rbp), %rdi
movl $0x5, 0x60(%rdi)
leaq -0x90(%rbp), %rsi
callq 0x105b4
leaq -0x330(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xf490
leaq -0x330(%rbp), %rdi
movl %r12d, 0x58(%rdi)
movq -0xe8(%rbp), %rsi
callq 0x6b50
movq -0xe8(%rbp), %rbx
leaq -0x330(%rbp), %rdi
callq 0x12078
divsd 0x10401(%rip), %xmm0    # 0x16008
leaq 0x10782(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x12410
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x688e
leaq -0x180(%rbp), %rdi
callq 0x1288e
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x103b0(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x1073c(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x10388(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x10714(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12898
leaq -0x330(%rbp), %rdi
callq 0x12674
movq -0xd8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0x1, %edx
callq 0x1080c
leaq -0x330(%rbp), %rdi
callq 0x12778
movq -0xd0(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0x1, %edx
callq 0xf250
leaq -0xe8(%rbp), %rdi
callq 0x690c
leaq -0x330(%rbp), %rdi
callq 0x1201a
jmp 0x4fab
movq 0x1a2bb(%rip), %r14     # 0x1ffd8
movq (%r14), %rcx
leaq 0x106f0(%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 0xd998
leaq -0x330(%rbp), %rdi
movl $0x0, 0x5c(%rdi)
leaq -0x50(%rbp), %rsi
callq 0x105a8
leaq -0x330(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x105ae
leaq -0x330(%rbp), %rdi
movl $0x6, 0x60(%rdi)
leaq -0x90(%rbp), %rsi
callq 0x105b4
leaq -0x330(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xf490
leaq -0x330(%rbp), %rdi
movl %r12d, 0x58(%rdi)
movq -0xe8(%rbp), %rsi
callq 0x6c44
movq -0xe8(%rbp), %rbx
leaq -0x330(%rbp), %rdi
callq 0xda5c
divsd 0x1022f(%rip), %xmm0    # 0x16008
leaq 0x105b0(%rip), %rsi     # 0x16390
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
leaq -0x180(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0xdba6
leaq -0x3f8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x688e
leaq -0x180(%rbp), %rdi
callq 0x1288e
movq -0xe8(%rbp), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x101de(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x1056a(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq (%r14), %rbx
leaq -0x3f8(%rbp), %rdi
movsd 0x101b6(%rip), %xmm0    # 0x16010
callq 0x128b0
leaq 0x10542(%rip), %rsi     # 0x163a8
movq %rbx, %rdi
movb $0x1, %al
callq 0x3290
movq -0xe0(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0x12898
leaq -0x330(%rbp), %rdi
callq 0xdd28
movq -0xd8(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0x1, %edx
callq 0x1080c
leaq -0x330(%rbp), %rdi
callq 0xde2c
movq -0xd0(%rbp), %rsi
leaq -0x330(%rbp), %rdi
movl $0x1, %edx
callq 0xf250
leaq -0xe8(%rbp), %rdi
callq 0x690c
leaq -0x330(%rbp), %rdi
callq 0xd9fe
jmp 0x4fab
jmp 0x61eb
jmp 0x61f0
jmp 0x61eb
jmp 0x61f0
jmp 0x6160
movq %rax, %rbx
movq -0x180(%rbp), %rdi
testq %rdi, %rdi
je 0x61f3
movq -0x170(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x61f3
movq %rax, %rbx
leaq -0x4d8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x6299
movq -0x4d8(%rbp), %rsi
jmp 0x5f66
movq %rax, %rbx
leaq -0x4f8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x6299
movq -0x4f8(%rbp), %rsi
incq %rsi
jmp 0x6294
jmp 0x6061
jmp 0x6061
movq %rax, %rbx
movq -0x180(%rbp), %rdi
testq %rdi, %rdi
je 0x61ee
movq -0x170(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
jmp 0x61ee
movq %rax, %rbx
movq -0x428(%rbp), %rdi
cmpq %r14, %rdi
je 0x623c
movq -0x418(%rbp), %rsi
incq %rsi
callq 0x3210
jmp 0x623c
jmp 0x6160
movq %rax, %rbx
movq -0x468(%rbp), %rdi
cmpq %r14, %rdi
je 0x626f
movq -0x458(%rbp), %rsi
jmp 0x6001
movq %rax, %rbx
movq -0x488(%rbp), %rdi
cmpq %r14, %rdi
je 0x626f
movq -0x478(%rbp), %rsi
incq %rsi
jmp 0x626a
jmp 0x6051
jmp 0x6051
movq %rax, %rbx
movq -0x4a8(%rbp), %rdi
cmpq %r14, %rdi
je 0x6284
movq -0x498(%rbp), %rsi
jmp 0x6043
movq %rax, %rbx
movq -0x4c8(%rbp), %rdi
cmpq %r14, %rdi
je 0x6284
movq -0x4b8(%rbp), %rsi
incq %rsi
jmp 0x627f
jmp 0x6059
jmp 0x6059
jmp 0x608b
movq %rax, %rbx
jmp 0x626f
movq %rax, %rbx
jmp 0x6284
movq %rax, %rbx
jmp 0x6299
movq %rax, %rbx
movq -0x448(%rbp), %rdi
cmpq %r14, %rdi
je 0x6257
movq -0x438(%rbp), %rsi
incq %rsi
jmp 0x6252
movq %rax, %rbx
jmp 0x6257
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x1288e
jmp 0x61f8
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x1288e
jmp 0x6209
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x1288e
jmp 0x61ee
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x1288e
jmp 0x61f3
jmp 0x61f5
jmp 0x6206
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x1288e
jmp 0x61bb
jmp 0x61eb
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x1288e
jmp 0x61cc
jmp 0x61f0
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x1288e
jmp 0x61dd
jmp 0x61b8
jmp 0x61c9
jmp 0x61da
jmp 0x614e
jmp 0x614e
jmp 0x614e
jmp 0x614e
jmp 0x614e
jmp 0x614e
movq %rax, %rbx
jmp 0x6215
jmp 0x6158
movq %rax, %rbx
jmp 0x6230
movq %rax, %rbx
jmp 0x623c
movq %rax, %rbx
leaq -0x518(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x62a5
movq -0x518(%rbp), %rsi
incq %rsi
callq 0x3210
jmp 0x62a5
movq %rax, %rbx
jmp 0x62a5
jmp 0x62b3
movq %rax, %rbx
jmp 0x62d8
movq %rax, %rbx
jmp 0x62fa
movq %rax, %rbx
jmp 0x631c
movq %rax, %rbx
leaq -0x330(%rbp), %rdi
callq 0x117a0
jmp 0x6215
movq %rax, %rbx
leaq -0x330(%rbp), %rdi
callq 0xe3e8
jmp 0x6215
movq %rax, %rbx
leaq -0x330(%rbp), %rdi
callq 0xa0bc
jmp 0x6215
movq %rax, %rbx
jmp 0x6209
movq %rax, %rbx
jmp 0x61f8
movq %rax, %rbx
leaq -0x330(%rbp), %rdi
callq 0xd9fe
jmp 0x6215
movq %rax, %rbx
leaq -0x330(%rbp), %rdi
callq 0x1201a
movq -0x120(%rbp), %rdi
testq %rdi, %rdi
je 0x6230
movq -0x110(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
leaq -0x3f8(%rbp), %rdi
callq 0x1288e
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x6257
movq -0xf0(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x626f
movq -0x80(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x6284
movq -0x60(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
movq -0x50(%rbp), %rdi
testq %rdi, %rdi
je 0x6299
movq -0x40(%rbp), %rsi
subq %rdi, %rsi
callq 0x3210
leaq -0x5c0(%rbp), %rdi
callq 0x10044
leaq -0xe8(%rbp), %rdi
callq 0x6c8c
jmp 0x62b6
movq %rax, %rbx
movq -0x350(%rbp), %rdi
leaq -0x340(%rbp), %rax
cmpq %rax, %rdi
je 0x62d8
movq -0x340(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x1a0(%rbp), %rdi
leaq -0x190(%rbp), %rax
cmpq %rax, %rdi
je 0x62fa
movq -0x190(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x1c0(%rbp), %rdi
leaq -0x1b0(%rbp), %rax
cmpq %rax, %rdi
je 0x631c
movq -0x1b0(%rbp), %rsi
incq %rsi
callq 0x3210
movq -0x370(%rbp), %rdi
leaq -0x360(%rbp), %rax
cmpq %rax, %rdi
je 0x633e
movq -0x360(%rbp), %rsi
incq %rsi
callq 0x3210
movq %rbx, %rdi
callq 0x3320