// File: /workspace/github_c_makefile_star2_O1/asford[P]tmalign/TMalign.cpp
// Function: main
int main(int argc, char *argv[])
{
	strcpy(version, "20120126");

    if (argc < 2) 
    {
        print_help(argv[0]);        
    } 
	
	
	clock_t t1, t2;
	t1 = clock();

    /*********************************************************************************/
	/*                                get argument                                   */ 
    /*********************************************************************************/
    char xname[MAXLEN], yname[MAXLEN],  Lnorm_ave[MAXLEN];
	bool A_opt, B_opt, h_opt=false;
	A_opt = B_opt = o_opt = a_opt = u_opt = d_opt = v_opt = false;

	for(int i = 0; i < argc; i++)
	{
		if ( !strcmp(argv[i],"-B") && i < argc ) { strcpy(xname,    argv[i+1]);      B_opt = true; }
		if ( !strcmp(argv[i],"-A") && i < argc ) { strcpy(yname,    argv[i+1]);      A_opt = true; }
		if ( !strcmp(argv[i],"-o") && i < argc ) { strcpy(out_reg,  argv[i+1]);      o_opt = true; }
		if ( !strcmp(argv[i],"-u") && i < argc ) { Lnorm_ass      = atof(argv[i+1]); u_opt = true; }
		if ( !strcmp(argv[i],"-a") && i < argc ) { strcpy(Lnorm_ave, argv[i+1]);     a_opt = true; }
		if ( !strcmp(argv[i],"-d") && i < argc ) { d0_scale        = atof(argv[i+1]); d_opt = true; }
		if ( !strcmp(argv[i],"-v") ) { v_opt = true; }
		if ( !strcmp(argv[i],"-h") ) { h_opt = true; }
	}


	if(!B_opt || !A_opt)
	{

		if( h_opt )
		{
			print_help(argv[0]);    			
		}
		
		if(v_opt)
		{
			cout <<endl;
			cout << " *****************************************************************************" << endl
				 << " * TM-align (Version "<< version <<"): A protein structural alignment algorithm     *" << endl
				 << " * Reference: Y Zhang and J Skolnick, Nucl Acids Res 33, 2302-9 (2005)       *" << endl
				 << " * Please email your comments and suggestions to Yang Zhang (zhng@umich.edu) *" << endl
				 << " *****************************************************************************" << endl;	
			exit(EXIT_FAILURE);
		}
	}

	if( !B_opt )
	{
		cout << "Please provide structure B" << endl;
		exit(EXIT_FAILURE);
	}		
	if( !A_opt )
	{
		cout << "Please provide structure A" << endl;
		exit(EXIT_FAILURE);
	}


	if( a_opt )
	{
		if(!strcmp(Lnorm_ave, "T"))
		{
		}
		else if(!strcmp(Lnorm_ave, "F"))
		{
			a_opt=false;
		}
		else
		{
			cout << "Wrong value for option -a!  It should be T or F" << endl;
			exit(EXIT_FAILURE);
		}
	}
	if( u_opt )
	{
		if(Lnorm_ass<=0)
		{
			cout << "Wrong value for option -u!  It should be >0" << endl;
			exit(EXIT_FAILURE);
		}
	}
	if( d_opt )
	{
		if(d0_scale<=0)
		{
			cout << "Wrong value for option -d!  It should be >0" << endl;
			exit(EXIT_FAILURE);
		}
	}














    /*********************************************************************************/
	/*                                load data                                      */ 
    /*********************************************************************************/
    load_PDB_allocate_memory(xname, yname);



    

    /*********************************************************************************/
	/*                                parameter set                                  */ 
    /*********************************************************************************/
	parameter_set4search(xlen, ylen);          //please set parameters in the function
    int simplify_step     = 40;               //for similified search engine
    int score_sum_method  = 8;                //for scoring method, whether only sum over pairs with dis<score_d8
        
	int i;
    int *invmap0          = new int[ylen+1]; 
    int *invmap           = new int[ylen+1]; 
    double TM, TMmax=-1;
	for(i=0; i<ylen; i++)
	{
		invmap0[i]=-1;
	}	


	double ddcc=0.4;
	if(Lnorm <= 40) ddcc=0.1;   //Lnorm was setted in parameter_set4search
      

    /*********************************************************************************/
	/*         get initial alignment with gapless threading                          */ 
    /*********************************************************************************/
    get_initial(xa, ya, xlen, ylen, invmap0);
    //find the max TMscore for this initial alignment with the simplified search_engin
    TM=detailed_search(xa, ya, xlen, ylen, invmap0, t, u, simplify_step, score_sum_method);
	if(TM>TMmax)
    {
        TMmax=TM;
    }           
    //run dynamic programing iteratively to find the best alignment
    TM=DP_iter(xa, ya, xlen, ylen, t, u, invmap, 0, 2, 30);
    if(TM>TMmax)
    {        
        TMmax=TM;
        for(int i=0; i<ylen; i++)
        {
            invmap0[i]=invmap[i];
        }
    }
	
    
	


    /*********************************************************************************/
	/*         get initial alignment based on secondary structure                    */ 
    /*********************************************************************************/	
	get_initial_ss(xa, ya, xlen, ylen, invmap);
    TM=detailed_search(xa, ya, xlen, ylen, invmap, t, u, simplify_step, score_sum_method);
    if(TM>TMmax)
    {
        TMmax=TM;
        for(int i=0; i<ylen; i++)
        {
            invmap0[i]=invmap[i];
        }
    } 
    if(TM > TMmax*0.2)
    {
        TM=DP_iter(xa, ya, xlen, ylen, t, u, invmap, 0, 2, 30);
        if(TM>TMmax)
        {
            TMmax=TM;
            for(int i=0; i<ylen; i++)
            {
                invmap0[i]=invmap[i];
            }
        }   
    }
	//output_align(invmap0, ylen);


	
    /*********************************************************************************/
	/*         get initial alignment based on local superposition                    */ 
    /*********************************************************************************/	
	//=initial5 in original TM-align
    if(get_initial_local(xa, ya, xlen, ylen, invmap))
	{		
		TM=detailed_search(xa, ya, xlen, ylen, invmap, t, u, simplify_step, score_sum_method);
		if(TM>TMmax)
		{
			TMmax=TM;
			for(int i=0; i<ylen; i++)
			{
				invmap0[i]=invmap[i];
			}
		} 
		if(TM > TMmax*ddcc)
		{
			TM=DP_iter(xa, ya, xlen, ylen, t, u, invmap, 0, 2, 2);
			if(TM>TMmax)
			{
				TMmax=TM;
				for(int i=0; i<ylen; i++)
				{
					invmap0[i]=invmap[i];
				}
			}   
		}
		//output_align(invmap0, ylen);
	}    
	else
	{
		cout << endl << endl << "Warning: initial alignment from local superposition fail!" << endl << endl <<endl;		
	}
	
	



    /*********************************************************************************/
	/*    get initial alignment based on previous alignment+secondary structure      */ 
    /*********************************************************************************/	
	//=initial3 in original TM-align
    get_initial_ssplus(xa, ya, xlen, ylen, invmap0, invmap);
    TM=detailed_search(xa, ya, xlen, ylen, invmap, t, u, simplify_step, score_sum_method);
    if(TM>TMmax)
    {
        TMmax=TM;
        for(i=0; i<ylen; i++)
        {
            invmap0[i]=invmap[i];
        }
    } 
    if(TM > TMmax*ddcc)
    {
        TM=DP_iter(xa, ya, xlen, ylen, t, u, invmap, 0, 2, 30);
        if(TM>TMmax)
        {
            TMmax=TM;
            for(i=0; i<ylen; i++)
            {
                invmap0[i]=invmap[i];
            }
        }   
    }
	//output_align(invmap0, ylen);   
      
	


	

    /*********************************************************************************/
	/*        get initial alignment based on fragment gapless threading              */ 
    /*********************************************************************************/	    
	//=initial4 in original TM-align
	get_initial_fgt(xa, ya, xlen, ylen, xresno, yresno, invmap);
    TM=detailed_search(xa, ya, xlen, ylen, invmap, t, u, simplify_step, score_sum_method);	
    if(TM>TMmax)
    {
        TMmax=TM;
        for(i=0; i<ylen; i++)
        {
            invmap0[i]=invmap[i];
        }
    } 
    if(TM > TMmax*ddcc)
    {
        TM=DP_iter(xa, ya, xlen, ylen, t, u, invmap, 1, 2, 2);
        if(TM>TMmax)
        {         
            TMmax=TM;
            for(i=0; i<ylen; i++)
            {
                invmap0[i]=invmap[i];
            }
        }   
    } 
	//output_align(invmap0, ylen); 






	
    //*********************************************************************************//
    //     The alignment will not be changed any more in the following                 //
    //*********************************************************************************//
	//check if the initial alignment is generated approately	
	bool flag=false;
	for(i=0; i<ylen; i++)
	{
		if(invmap0[i]>=0)
		{
			flag=true;
			break;			
		}			
	}		
	if(!flag) 
	{
		cout << "There is no alignment between the two proteins!" << endl;
		cout << "Program stop with no result!" << endl;
		return 1;
	}
	//cout << "final alignment" << endl;
	//output_align(invmap0, ylen);










    //*********************************************************************************//
    //       Detailed TMscore search engine  --> prepare for final TMscore             //
    //*********************************************************************************//       
    //run detailed TMscore search engine for the best alignment, and 
	//extract the best rotation matrix (t, u) for the best alginment
    simplify_step=1;
    score_sum_method=8;
    TM=detailed_search(xa, ya, xlen, ylen, invmap0, t, u, simplify_step, score_sum_method);

	//select pairs with dis<d8 for final TMscore computation and output alignment
	int n_ali8, k=0;
	int n_ali=0;
	int *m1, *m2;
	double d;
	m1=new int[xlen]; //alignd index in x
	m2=new int[ylen]; //alignd index in y
	do_rotation(xa, xt, xlen, t, u);
	k=0;
    for(int j=0; j<ylen; j++)
    {
        i=invmap0[j];
        if(i>=0)//aligned
        {
			n_ali++;        
            d=sqrt(dist(&xt[i][0], &ya[j][0]));
			if(d <= score_d8)
			{
				m1[k]=i;
				m2[k]=j;

				xtm[k][0]=xa[i][0];
                xtm[k][1]=xa[i][1];
                xtm[k][2]=xa[i][2];
                    
                ytm[k][0]=ya[j][0];
                ytm[k][1]=ya[j][1];
                ytm[k][2]=ya[j][2];								
				
				k++;
			}
		}
	}
	n_ali8=k;







    //*********************************************************************************//
    //                               Final TMscore                                     //
    //                     Please set parameters for output                            //
    //*********************************************************************************//
    double rmsd, TM1, TM2;
	double d0_out=5.0;  
    simplify_step=1;
    score_sum_method=0;

	double t0[3], u0[3][3];
	double d0_0, TM_0;
	double Lnorm_0=ylen;
	
	
	//normalized by length of structure A
	parameter_set4final(Lnorm_0);
	d0A=d0;
	d0_0=d0A;
	TM1=TMscore8_search(xtm, ytm, n_ali8, t0, u0, simplify_step, score_sum_method, &rmsd);
	TM_0=TM1;

	//normalized by length of structure B
	parameter_set4final(xlen+0.0);
	d0B=d0;
	TM2=TMscore8_search(xtm, ytm, n_ali8, t, u, simplify_step, score_sum_method, &rmsd);




	if(a_opt)
	{
		//normalized by average length of structures A, B
		Lnorm_0=(xlen+ylen)*0.5;
		parameter_set4final(Lnorm_0);
		d0a=d0;
		d0_0=d0a;
		TM3=TMscore8_search(xtm, ytm, n_ali8, t, u, simplify_step, score_sum_method, &rmsd);
		TM_0=TM3;
	}
	if(u_opt)
	{	
		//normalized by user assigned length		
		parameter_set4final(Lnorm_ass);		
		d0u=d0;		
		d0_0=d0u;
		Lnorm_0=Lnorm_ass;
		TM4=TMscore8_search(xtm, ytm, n_ali8, t, u, simplify_step, score_sum_method, &rmsd);	
		TM_0=TM4;
	}
	if(d_opt)
	{	
		//scaled by user assigned d0
		parameter_set4scale(ylen, d0_scale);
		d0_out=d0_scale;
		d0_0=d0_scale;
		//Lnorm_0=ylen;
		Lnorm_d0=Lnorm_0;
		TM5=TMscore8_search(xtm, ytm, n_ali8, t, u, simplify_step, score_sum_method, &rmsd);	
		TM_0=TM5;
	}

   
        
	output_results(xname, yname, xlen, ylen, t0, u0, TM1, TM2, rmsd, d0_out, m1, m2, n_ali8, n_ali, TM_0, Lnorm_0, d0_0);
                    
 









    //*********************************************************************************//
    //                            Done! Free memory                                    //
    //*********************************************************************************//           
    free_memory();
    delete [] invmap0;
    delete [] invmap;
	delete [] m1;
	delete [] m2;


    t2 = clock();    
    float diff = ((float)t2 - (float)t1)/CLOCKS_PER_SEC;
    printf("\nTotal running time is %5.2f seconds\n", diff);        

 	return 0;	
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x75e8, %rsp           # imm = 0x75E8
movq %rsi, %r14
movabsq $0x3632313032313032, %rax # imm = 0x3632313032313032
movq %rax, 0x1f7621(%rip)    # 0x602550
movb $0x0, 0x1f7622(%rip)    # 0x602558
cmpl $0x1, %edi
jle 0x40bfb0
movl %edi, %ebx
callq 0x540f20
movq %rax, 0x20(%rsp)
xorl %r12d, %r12d
movb %r12b, 0x1f9e97(%rip)   # 0x604dec
movb %r12b, 0x1f9e8f(%rip)   # 0x604deb
movb %r12b, 0x1f9e87(%rip)   # 0x604dea
movb %r12b, 0x1f9e7f(%rip)   # 0x604de9
movb %r12b, 0x1f9e77(%rip)   # 0x604de8
movl %ebx, %r15d
leaq 0x179d5b(%rip), %rbx    # 0x584cd6
movq $0x0, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
xorl %r13d, %r13d
movq (%r14,%r12,8), %rbp
movq %rbp, %rdi
leaq 0x179d23(%rip), %rsi    # 0x584cc1
callq 0x401050
testl %eax, %eax
jne 0x40afc0
movq 0x8(%r14,%r12,8), %rsi
leaq 0x27c0(%rsp), %rdi
callq 0x401080
movb $0x1, %al
movq %rax, 0x10(%rsp)
movq %rbp, %rdi
leaq 0x179cfa(%rip), %rsi    # 0x584cc4
callq 0x401050
testl %eax, %eax
jne 0x40afec
movq 0x8(%r14,%r12,8), %rsi
leaq 0xb0(%rsp), %rdi
callq 0x401080
movb $0x1, %al
movq %rax, 0x8(%rsp)
movq %rbp, %rdi
leaq 0x179cd1(%rip), %rsi    # 0x584cc7
callq 0x401050
testl %eax, %eax
jne 0x40b017
movq 0x8(%r14,%r12,8), %rsi
leaq 0x1f7695(%rip), %rdi    # 0x6026a0
callq 0x401080
movb $0x1, 0x1f9dd1(%rip)    # 0x604de8
movq (%r14,%r12,8), %rbp
movq %rbp, %rdi
leaq 0x179ca5(%rip), %rsi    # 0x584cca
callq 0x401050
testl %eax, %eax
jne 0x40b047
movq 0x8(%r14,%r12,8), %rdi
callq 0x4cd910
movsd %xmm0, 0x1f9d70(%rip)   # 0x604db0
movb $0x1, 0x1f9da3(%rip)    # 0x604dea
movq %rbp, %rdi
leaq 0x179c7c(%rip), %rsi    # 0x584ccd
callq 0x401050
testl %eax, %eax
jne 0x40b073
movq 0x8(%r14,%r12,8), %rsi
leaq 0x4ed0(%rsp), %rdi
callq 0x401080
movb $0x1, 0x1f9d76(%rip)    # 0x604de9
movq %rbp, %rdi
leaq 0x179c53(%rip), %rsi    # 0x584cd0
callq 0x401050
testl %eax, %eax
jne 0x40b09f
movq 0x8(%r14,%r12,8), %rdi
callq 0x4cd910
movsd %xmm0, 0x1f9d28(%rip)   # 0x604dc0
movb $0x1, 0x1f9d4c(%rip)    # 0x604deb
movq %rbp, %rdi
leaq 0x179c2a(%rip), %rsi    # 0x584cd3
callq 0x401050
testl %eax, %eax
jne 0x40b0b9
movb $0x1, 0x1f9d33(%rip)    # 0x604dec
movq %rbp, %rdi
movq %rbx, %rsi
callq 0x401050
testl %eax, %eax
movzbl %r13b, %r13d
movl $0x1, %eax
cmovel %eax, %r13d
incq %r12
cmpq %r12, %r15
jne 0x40af90
movq 0x10(%rsp), %rcx
testb $0x1, %cl
movq 0x8(%rsp), %rax
je 0x40b0f2
testb $0x1, %al
jne 0x40b109
testb $0x1, %r13b
jne 0x40bfb0
cmpb $0x1, 0x1f9ce9(%rip)    # 0x604dec
je 0x40c004
testb $0x1, %cl
je 0x40bfb8
testb $0x1, %al
je 0x40bfcb
movzwl 0x4ed0(%rsp), %eax
cmpw $0x54, %ax
setne %cl
andb 0x1f9cba(%rip), %cl     # 0x604de9
cmpb $0x1, %cl
jne 0x40b145
cmpw $0x46, %ax
jne 0x40c098
movb $0x0, 0x1f9ca4(%rip)    # 0x604de9
cmpb $0x1, 0x1f9c9e(%rip)    # 0x604dea
jne 0x40b164
movsd 0x1f9c5a(%rip), %xmm0   # 0x604db0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x40bfde
cmpb $0x1, 0x1f9c80(%rip)    # 0x604deb
jne 0x40b183
movsd 0x1f9c4b(%rip), %xmm0   # 0x604dc0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x40bff1
leaq 0x27c0(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0x4070b3
movl 0x1f7412(%rip), %edi    # 0x6025b0
movl 0x1f7410(%rip), %esi    # 0x6025b4
callq 0x40ada4
movslq 0x1f7404(%rip), %rbx    # 0x6025b4
cmpq $-0x1, %rbx
leaq 0x4(,%rbx,4), %rax
movq $-0x1, %r15
cmovgeq %rax, %r15
movq %r15, %rdi
callq 0x40d060
movq %rax, %r14
movq %r15, %rdi
callq 0x40d060
movq %rax, %r15
testq %rbx, %rbx
jle 0x40b1f7
leaq (,%rbx,4), %rdx
movq %r14, %rdi
movl $0xff, %esi
callq 0x401060
movsd 0x178ee9(%rip), %xmm0   # 0x5840e8
xorl %r13d, %r13d
ucomisd 0x1f7366(%rip), %xmm0   # 0x602570
setb %bpl
movq 0x1f73ab(%rip), %rdi    # 0x6025c0
movq 0x1f73ac(%rip), %rsi    # 0x6025c8
movl 0x1f738e(%rip), %edx    # 0x6025b0
movl %ebx, %ecx
movq %r14, %r8
callq 0x408129
movq 0x1f738d(%rip), %rdi    # 0x6025c0
movq 0x1f738e(%rip), %rsi    # 0x6025c8
movl 0x1f7374(%rip), %ecx    # 0x6025b4
subq $0x8, %rsp
leaq 0x1f7405(%rip), %r12    # 0x602650
leaq 0x1f73de(%rip), %rbx    # 0x602630
movq %r14, %r8
movq %rbx, %r9
pushq $0x8
pushq $0x28
pushq %r12
callq 0x407a5f
addq $0x20, %rsp
maxsd 0x178dc1(%rip), %xmm0   # 0x584030
movsd %xmm0, 0x8(%rsp)
movq 0x1f7344(%rip), %rdi    # 0x6025c0
movq 0x1f7345(%rip), %rsi    # 0x6025c8
movl 0x1f7327(%rip), %edx    # 0x6025b0
movl 0x1f7325(%rip), %ecx    # 0x6025b4
movq %rbx, %r8
movq %r12, %r9
pushq $0x1e
pushq $0x2
pushq $0x0
pushq %r15
callq 0x409681
movsd 0x28(%rsp), %xmm1
addq $0x20, %rsp
ucomisd %xmm1, %xmm0
jbe 0x40b2df
movslq 0x1f72fb(%rip), %rdx    # 0x6025b4
testq %rdx, %rdx
jle 0x40b2db
shlq $0x2, %rdx
movq %r14, %rdi
movq %r15, %rsi
movsd %xmm0, 0x8(%rsp)
callq 0x401118
movsd 0x8(%rsp), %xmm1
jmp 0x40b2df
movapd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movb %bpl, %r13b
movq 0x1f72d1(%rip), %rdi    # 0x6025c0
movq 0x1f72d2(%rip), %rsi    # 0x6025c8
movl 0x1f72b4(%rip), %edx    # 0x6025b0
movl 0x1f72b2(%rip), %ecx    # 0x6025b4
movq %r15, %r8
callq 0x40869f
movq 0x1f72af(%rip), %rdi    # 0x6025c0
movq 0x1f72b0(%rip), %rsi    # 0x6025c8
movl 0x1f7296(%rip), %ecx    # 0x6025b4
subq $0x8, %rsp
leaq 0x1f7307(%rip), %r9     # 0x602630
movq %r15, %r8
pushq $0x8
pushq $0x28
pushq %r12
callq 0x407a5f
movsd 0x28(%rsp), %xmm1
addq $0x20, %rsp
ucomisd %xmm1, %xmm0
jbe 0x40b372
movslq 0x1f7266(%rip), %rdx    # 0x6025b4
testq %rdx, %rdx
jle 0x40b36e
shlq $0x2, %rdx
movq %r14, %rdi
movq %r15, %rsi
movsd %xmm0, 0x8(%rsp)
callq 0x401118
movsd 0x8(%rsp), %xmm0
movapd %xmm0, %xmm1
leaq 0x178e17(%rip), %rbx    # 0x584190
movsd 0x178d6f(%rip), %xmm2   # 0x5840f0
mulsd %xmm1, %xmm2
ucomisd %xmm2, %xmm0
jbe 0x40b403
movq 0x1f722e(%rip), %rdi    # 0x6025c0
movq 0x1f722f(%rip), %rsi    # 0x6025c8
movl 0x1f7211(%rip), %edx    # 0x6025b0
movl 0x1f720f(%rip), %ecx    # 0x6025b4
leaq 0x1f7284(%rip), %r8     # 0x602630
leaq 0x1f729d(%rip), %r9     # 0x602650
pushq $0x1e
pushq $0x2
pushq $0x0
pushq %r15
movsd %xmm1, 0x28(%rsp)
callq 0x409681
movsd 0x28(%rsp), %xmm1
addq $0x20, %rsp
ucomisd %xmm1, %xmm0
jbe 0x40b403
movslq 0x1f71d7(%rip), %rdx    # 0x6025b4
testq %rdx, %rdx
jle 0x40b3ff
shlq $0x2, %rdx
movq %r14, %rdi
movq %r15, %rsi
movsd %xmm0, 0x8(%rsp)
callq 0x401118
movsd 0x8(%rsp), %xmm1
jmp 0x40b403
movapd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movsd (%rbx,%r13,8), %xmm0
movsd %xmm0, 0x10(%rsp)
movq 0x1f71a4(%rip), %rdi    # 0x6025c0
movq 0x1f71a5(%rip), %rsi    # 0x6025c8
movl 0x1f7187(%rip), %edx    # 0x6025b0
movl 0x1f7185(%rip), %ecx    # 0x6025b4
movq %r15, %r8
callq 0x4086fe
testb %al, %al
je 0x40b533
movq 0x1f717a(%rip), %rdi    # 0x6025c0
movq 0x1f717b(%rip), %rsi    # 0x6025c8
movl 0x1f7161(%rip), %ecx    # 0x6025b4
subq $0x8, %rsp
leaq 0x1f71d2(%rip), %r9     # 0x602630
movq %r15, %r8
pushq $0x8
pushq $0x28
pushq %r12
callq 0x407a5f
addq $0x20, %rsp
movsd 0x8(%rsp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x40b4a7
movslq 0x1f7131(%rip), %rdx    # 0x6025b4
testq %rdx, %rdx
jle 0x40b4a3
shlq $0x2, %rdx
movq %r14, %rdi
movq %r15, %rsi
movsd %xmm0, 0x8(%rsp)
callq 0x401118
movsd 0x8(%rsp), %xmm0
movapd %xmm0, %xmm1
movapd %xmm1, %xmm2
mulsd 0x10(%rsp), %xmm2
ucomisd %xmm2, %xmm0
movsd %xmm1, 0x8(%rsp)
jbe 0x40b61d
movq 0x1f70f8(%rip), %rdi    # 0x6025c0
movq 0x1f70f9(%rip), %rsi    # 0x6025c8
movl 0x1f70db(%rip), %edx    # 0x6025b0
movl 0x1f70d9(%rip), %ecx    # 0x6025b4
movl $0x2, %eax
leaq 0x1f7149(%rip), %r8     # 0x602630
leaq 0x1f7162(%rip), %r9     # 0x602650
pushq %rax
pushq %rax
pushq $0x0
pushq %r15
callq 0x409681
addq $0x20, %rsp
ucomisd 0x8(%rsp), %xmm0
jbe 0x40b61d
movslq 0x1f70a4(%rip), %rdx    # 0x6025b4
testq %rdx, %rdx
jle 0x40bfa5
shlq $0x2, %rdx
movq %r14, %rdi
movq %r15, %rsi
movsd %xmm0, 0x8(%rsp)
callq 0x401118
jmp 0x40b61d
movq $0x605d20, %rbx         # imm = 0x605D20
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x456f30
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4758e0
movq %rax, %rdi
callq 0x474eb0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x456f30
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4758e0
movq %rax, %rdi
callq 0x474eb0
movq %rax, %rbx
leaq 0x179802(%rip), %rsi    # 0x584d97
movl $0x39, %edx
movq %rax, %rdi
callq 0x475de0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x456f30
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4758e0
movq %rax, %rdi
callq 0x474eb0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x456f30
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4758e0
movq %rax, %rdi
callq 0x474eb0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x456f30
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4758e0
movq %rax, %rdi
callq 0x474eb0
movq 0x1f6f9c(%rip), %rdi    # 0x6025c0
movq 0x1f6f9d(%rip), %rsi    # 0x6025c8
movl 0x1f6f7f(%rip), %ebx    # 0x6025b0
movl 0x1f6f7d(%rip), %ebp    # 0x6025b4
movl %ebx, %edx
movl %ebp, %ecx
movq %r14, %r8
callq 0x408d05
movsd 0x1789e5(%rip), %xmm0   # 0x584030
movl %ebx, %edi
movl %ebp, %esi
movq %r15, %rdx
callq 0x405b3e
movq 0x1f6f62(%rip), %rdi    # 0x6025c0
movq 0x1f6f63(%rip), %rsi    # 0x6025c8
movl 0x1f6f49(%rip), %ecx    # 0x6025b4
subq $0x8, %rsp
leaq 0x1f6fba(%rip), %r9     # 0x602630
movq %r15, %r8
pushq $0x8
pushq $0x28
pushq %r12
callq 0x407a5f
addq $0x20, %rsp
movsd 0x8(%rsp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x40b6bf
movslq 0x1f6f19(%rip), %rdx    # 0x6025b4
testq %rdx, %rdx
jle 0x40b6bb
shlq $0x2, %rdx
movq %r14, %rdi
movq %r15, %rsi
movsd %xmm0, 0x8(%rsp)
callq 0x401118
movsd 0x8(%rsp), %xmm0
movapd %xmm0, %xmm1
movapd %xmm1, %xmm2
mulsd 0x10(%rsp), %xmm2
ucomisd %xmm2, %xmm0
jbe 0x40b747
movq 0x1f6eea(%rip), %rdi    # 0x6025c0
movq 0x1f6eeb(%rip), %rsi    # 0x6025c8
movl 0x1f6ecd(%rip), %edx    # 0x6025b0
movl 0x1f6ecb(%rip), %ecx    # 0x6025b4
leaq 0x1f6f40(%rip), %r8     # 0x602630
leaq 0x1f6f59(%rip), %r9     # 0x602650
pushq $0x1e
pushq $0x2
pushq $0x0
pushq %r15
movsd %xmm1, 0x28(%rsp)
callq 0x409681
movsd 0x28(%rsp), %xmm1
addq $0x20, %rsp
ucomisd %xmm1, %xmm0
jbe 0x40b747
movslq 0x1f6e93(%rip), %rdx    # 0x6025b4
testq %rdx, %rdx
jle 0x40b743
shlq $0x2, %rdx
movq %r14, %rdi
movq %r15, %rsi
movsd %xmm0, 0x8(%rsp)
callq 0x401118
movsd 0x8(%rsp), %xmm1
jmp 0x40b747
movapd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movq 0x1f6e6c(%rip), %rdi    # 0x6025c0
movq 0x1f6e6d(%rip), %rsi    # 0x6025c8
movl 0x1f6e4f(%rip), %edx    # 0x6025b0
movl 0x1f6e4d(%rip), %ecx    # 0x6025b4
movq 0x1f6e62(%rip), %r8     # 0x6025d0
movq 0x1f6e63(%rip), %r9     # 0x6025d8
subq $0x8, %rsp
pushq %r15
callq 0x409142
addq $0x10, %rsp
movq 0x1f6e35(%rip), %rdi    # 0x6025c0
movq 0x1f6e36(%rip), %rsi    # 0x6025c8
movl 0x1f6e1c(%rip), %ecx    # 0x6025b4
subq $0x8, %rsp
leaq 0x1f6e8d(%rip), %r9     # 0x602630
movq %r15, %r8
pushq $0x8
pushq $0x28
pushq %r12
callq 0x407a5f
movsd 0x28(%rsp), %xmm1
addq $0x20, %rsp
ucomisd %xmm1, %xmm0
jbe 0x40b7ec
movslq 0x1f6dec(%rip), %rdx    # 0x6025b4
testq %rdx, %rdx
jle 0x40b7e8
shlq $0x2, %rdx
movq %r14, %rdi
movq %r15, %rsi
movsd %xmm0, 0x8(%rsp)
callq 0x401118
movsd 0x8(%rsp), %xmm0
movapd %xmm0, %xmm1
movsd 0x10(%rsp), %xmm2
mulsd %xmm1, %xmm2
ucomisd %xmm2, %xmm0
jbe 0x40b861
movq 0x1f6dbd(%rip), %rdi    # 0x6025c0
movq 0x1f6dbe(%rip), %rsi    # 0x6025c8
movl 0x1f6da0(%rip), %edx    # 0x6025b0
movl 0x1f6d9e(%rip), %ecx    # 0x6025b4
movl $0x2, %eax
leaq 0x1f6e0e(%rip), %r8     # 0x602630
leaq 0x1f6e27(%rip), %r9     # 0x602650
pushq %rax
pushq %rax
pushq $0x1
pushq %r15
movsd %xmm1, 0x28(%rsp)
callq 0x409681
addq $0x20, %rsp
ucomisd 0x8(%rsp), %xmm0
jbe 0x40b861
movslq 0x1f6d67(%rip), %rdx    # 0x6025b4
testq %rdx, %rdx
jle 0x40b861
shlq $0x2, %rdx
movq %r14, %rdi
movq %r15, %rsi
callq 0x401118
movslq 0x1f6d4c(%rip), %rcx    # 0x6025b4
testq %rcx, %rcx
jle 0x40b882
xorl %eax, %eax
cmpl $0x0, (%r14,%rax,4)
jns 0x40b909
incq %rax
cmpq %rax, %rcx
jne 0x40b86f
movq $0x605d20, %rbx         # imm = 0x605D20
leaq 0x179541(%rip), %rsi    # 0x584dd1
movl $0x2f, %edx
movq %rbx, %rdi
callq 0x475de0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x456f30
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4758e0
movq %rax, %rdi
callq 0x474eb0
leaq 0x179536(%rip), %rsi    # 0x584e01
movl $0x1c, %edx
movq %rbx, %rdi
callq 0x475de0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x456f30
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4758e0
movq %rax, %rdi
callq 0x474eb0
movl $0x1, %eax
jmp 0x40bf93
movq %r15, 0x30(%rsp)
movq 0x1f6cab(%rip), %rdi    # 0x6025c0
movq 0x1f6cac(%rip), %rsi    # 0x6025c8
subq $0x8, %rsp
leaq 0x1f6d09(%rip), %r9     # 0x602630
movq %r14, 0x10(%rsp)
movq %r14, %r8
pushq $0x8
pushq $0x1
pushq %r12
callq 0x407a5f
addq $0x20, %rsp
movslq 0x1f6c6b(%rip), %r12    # 0x6025b0
leaq (,%r12,4), %rdi
testq %r12, %r12
movq $-0x1, %rbx
cmovsq %rbx, %rdi
callq 0x40d060
movq %rax, 0x10(%rsp)
movslq 0x1f6c48(%rip), %rax    # 0x6025b4
leaq (,%rax,4), %rdi
testq %rax, %rax
cmovsq %rbx, %rdi
callq 0x40d060
movq %rax, 0x18(%rsp)
testq %r12, %r12
jle 0x40b9c5
movq 0x1f6c2f(%rip), %r13    # 0x6025c0
movq 0x1f6c58(%rip), %r15    # 0x6025f0
xorl %r14d, %r14d
leaq 0x1f6c8e(%rip), %rbx    # 0x602630
leaq 0x1f6ca7(%rip), %rbp    # 0x602650
movq (%r13,%r14,8), %rdx
movq (%r15,%r14,8), %rcx
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x4058ff
incq %r14
cmpq %r14, %r12
jne 0x40b9a9
movslq 0x1f6be8(%rip), %rax    # 0x6025b4
testq %rax, %rax
jle 0x40bacc
movq 0x1f6c14(%rip), %rcx    # 0x6025f0
movq 0x1f6be5(%rip), %rdx    # 0x6025c8
movq 0x1f6bd6(%rip), %rsi    # 0x6025c0
movq 0x1f6bef(%rip), %rdi    # 0x6025e0
xorl %r8d, %r8d
movq 0x1f6bed(%rip), %r9     # 0x6025e8
xorl %r10d, %r10d
xorl %ebp, %ebp
movq 0x8(%rsp), %r15
movq 0x10(%rsp), %r12
movq 0x18(%rsp), %r13
movslq (%r15,%r8,4), %rbx
testq %rbx, %rbx
js 0x40babe
incl %r10d
movq (%rcx,%rbx,8), %r14
movq (%rdx,%r8,8), %r11
movsd (%r14), %xmm0
subsd (%r11), %xmm0
mulsd %xmm0, %xmm0
movupd 0x8(%r14), %xmm1
movupd 0x8(%r11), %xmm2
subpd %xmm2, %xmm1
mulpd %xmm1, %xmm1
addsd %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
xorps %xmm0, %xmm0
sqrtsd %xmm1, %xmm0
ucomisd 0x1f6b14(%rip), %xmm0   # 0x602578
ja 0x40babe
movslq %ebp, %rbp
movl %ebx, (%r12,%rbp,4)
movl %r8d, (%r13,%rbp,4)
movq (%rsi,%rbx,8), %rbx
movsd (%rbx), %xmm0
movq (%rdi,%rbp,8), %r14
movsd %xmm0, (%r14)
movsd 0x8(%rbx), %xmm0
movsd %xmm0, 0x8(%r14)
movsd 0x10(%rbx), %xmm0
movsd %xmm0, 0x10(%r14)
movsd (%r11), %xmm0
movq (%r9,%rbp,8), %rbx
movsd %xmm0, (%rbx)
movsd 0x8(%r11), %xmm0
movsd %xmm0, 0x8(%rbx)
movsd 0x10(%r11), %xmm0
movsd %xmm0, 0x10(%rbx)
incl %ebp
incq %r8
cmpq %r8, %rax
jne 0x40ba0f
jmp 0x40badd
xorl %ebp, %ebp
movq 0x8(%rsp), %r15
movq 0x10(%rsp), %r12
movq 0x18(%rsp), %r13
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
movabsq $0x3fe0000000000000, %rbx # imm = 0x3FE0000000000000
movq %rbx, 0x1f6a73(%rip)    # 0x602568
movsd %xmm0, 0x8(%rsp)
movsd %xmm0, 0x1f6a6d(%rip)   # 0x602570
movsd 0x17850d(%rip), %xmm1   # 0x584018
movapd %xmm1, %xmm0
cmpl $0x16, %eax
jl 0x40bb3b
addl $-0xf, %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
callq 0x4aac40
movsd 0x1784ed(%rip), %xmm1   # 0x584018
mulsd 0x178575(%rip), %xmm0   # 0x5840a8
addsd 0x178575(%rip), %xmm0   # 0x5840b0
maxsd %xmm1, %xmm0
movsd %xmm0, 0x1f6a39(%rip)   # 0x602580
movsd 0x178529(%rip), %xmm1   # 0x584078
minsd %xmm0, %xmm1
maxsd 0x178565(%rip), %xmm1   # 0x5840c0
movsd %xmm1, 0x1f6a25(%rip)   # 0x602588
movsd %xmm0, 0x18(%rsp)
movsd %xmm0, 0x1f9257(%rip)   # 0x604dc8
movq 0x1f6a68(%rip), %rdi    # 0x6025e0
movq 0x1f6a69(%rip), %rsi    # 0x6025e8
leaq 0x38(%rsp), %r14
leaq 0x40(%rsp), %rcx
leaq 0x60(%rsp), %r8
movl %ebp, %edx
movl $0x1, %r9d
pushq %r14
pushq $0x0
callq 0x4074d4
addq $0x10, %rsp
movl 0x1f6a07(%rip), %eax    # 0x6025b0
xorps %xmm1, %xmm1
cvtsi2sd %eax, %xmm1
movsd %xmm0, 0x10(%rsp)
movq %rbx, 0x1f69ab(%rip)    # 0x602568
movsd %xmm1, 0x1f69ab(%rip)   # 0x602570
movsd 0x17844b(%rip), %xmm0   # 0x584018
cmpl $0x16, %eax
jl 0x40bbf1
addl $-0xf, %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
callq 0x4aac40
mulsd 0x1784bf(%rip), %xmm0   # 0x5840a8
addsd 0x1784bf(%rip), %xmm0   # 0x5840b0
maxsd 0x17841f(%rip), %xmm0   # 0x584018
movsd %xmm0, 0x1f697f(%rip)   # 0x602580
movsd 0x17846f(%rip), %xmm1   # 0x584078
minsd %xmm0, %xmm1
maxsd 0x1784ab(%rip), %xmm1   # 0x5840c0
movsd %xmm1, 0x1f696b(%rip)   # 0x602588
movsd %xmm0, 0x1f91ab(%rip)   # 0x604dd0
movq 0x1f69b4(%rip), %rdi    # 0x6025e0
movq 0x1f69b5(%rip), %rsi    # 0x6025e8
leaq 0x1f69f6(%rip), %rcx    # 0x602630
leaq 0x1f6a0f(%rip), %r8     # 0x602650
movl %ebp, %edx
movl $0x1, %r9d
pushq %r14
pushq $0x0
callq 0x4074d4
addq $0x10, %rsp
movsd %xmm0, 0x28(%rsp)
cmpb $0x0, 0x1f9186(%rip)    # 0x604de9
movsd 0x10(%rsp), %xmm4
je 0x40bd47
movl 0x1f693f(%rip), %eax    # 0x6025b4
addl 0x1f6935(%rip), %eax    # 0x6025b0
xorps %xmm1, %xmm1
cvtsi2sd %eax, %xmm1
movsd 0x17838e(%rip), %xmm0   # 0x584018
mulsd %xmm0, %xmm1
movq %rbx, 0x1f68d3(%rip)    # 0x602568
movsd %xmm1, 0x1f68d3(%rip)   # 0x602570
movsd %xmm1, 0x8(%rsp)
ucomisd 0x17842d(%rip), %xmm1   # 0x5840d8
jbe 0x40bcd0
movsd 0x17842b(%rip), %xmm0   # 0x5840e0
addsd 0x8(%rsp), %xmm0
callq 0x4aac40
mulsd 0x1783e0(%rip), %xmm0   # 0x5840a8
addsd 0x1783e0(%rip), %xmm0   # 0x5840b0
maxsd 0x178340(%rip), %xmm0   # 0x584018
movsd %xmm0, 0x1f68a0(%rip)   # 0x602580
movsd 0x178390(%rip), %xmm1   # 0x584078
minsd %xmm0, %xmm1
maxsd 0x1783cc(%rip), %xmm1   # 0x5840c0
movsd %xmm1, 0x1f688c(%rip)   # 0x602588
movsd %xmm0, 0x18(%rsp)
movsd %xmm0, 0x1f90d6(%rip)   # 0x604de0
movq 0x1f68cf(%rip), %rdi    # 0x6025e0
movq 0x1f68d0(%rip), %rsi    # 0x6025e8
leaq 0x1f6911(%rip), %rcx    # 0x602630
leaq 0x1f692a(%rip), %r8     # 0x602650
movl %ebp, %edx
movl $0x1, %r9d
pushq %r14
pushq $0x0
callq 0x4074d4
addq $0x10, %rsp
movapd %xmm0, %xmm4
movsd %xmm0, 0x1f90a9(%rip)   # 0x604df0
cmpb $0x1, 0x1f909c(%rip)    # 0x604dea
jne 0x40be21
movsd 0x1f9054(%rip), %xmm1   # 0x604db0
movq %rbx, 0x1f6805(%rip)    # 0x602568
movsd %xmm1, 0x1f6805(%rip)   # 0x602570
movsd 0x178365(%rip), %xmm0   # 0x5840d8
ucomisd %xmm1, %xmm0
movsd %xmm1, 0x8(%rsp)
jae 0x40bda2
movsd 0x178359(%rip), %xmm0   # 0x5840e0
addsd %xmm1, %xmm0
callq 0x4aac40
mulsd 0x178310(%rip), %xmm0   # 0x5840a8
addsd 0x178310(%rip), %xmm0   # 0x5840b0
jmp 0x40bdaa
movsd 0x17826e(%rip), %xmm0   # 0x584018
maxsd 0x178266(%rip), %xmm0   # 0x584018
movsd %xmm0, 0x1f67c6(%rip)   # 0x602580
movsd 0x1782b6(%rip), %xmm1   # 0x584078
minsd %xmm0, %xmm1
maxsd 0x1782f2(%rip), %xmm1   # 0x5840c0
movsd %xmm1, 0x1f67b2(%rip)   # 0x602588
movsd %xmm0, 0x18(%rsp)
movsd %xmm0, 0x1f8ff4(%rip)   # 0x604dd8
movq 0x1f67f5(%rip), %rdi    # 0x6025e0
movq 0x1f67f6(%rip), %rsi    # 0x6025e8
leaq 0x1f6837(%rip), %rcx    # 0x602630
leaq 0x1f6850(%rip), %r8     # 0x602650
movl %ebp, %edx
movl $0x1, %r9d
pushq %r14
pushq $0x0
callq 0x4074d4
addq $0x10, %rsp
movapd %xmm0, %xmm4
movsd %xmm0, 0x1f8fd7(%rip)   # 0x604df8
cmpb $0x1, 0x1f8fc3(%rip)    # 0x604deb
jne 0x40bed4
movsd 0x1f8f8a(%rip), %xmm1   # 0x604dc0
movsd %xmm1, 0x18(%rsp)
movsd %xmm1, 0x1f673c(%rip)   # 0x602580
xorps %xmm0, %xmm0
cvtsi2sdl 0x1f6765(%rip), %xmm0 # 0x6025b4
movsd %xmm0, 0x1f6719(%rip)   # 0x602570
movsd 0x178219(%rip), %xmm0   # 0x584078
minsd %xmm1, %xmm0
maxsd 0x178255(%rip), %xmm0   # 0x5840c0
movsd %xmm0, 0x1f6715(%rip)   # 0x602588
movsd 0x8(%rsp), %xmm0
movsd %xmm0, 0x1f8f37(%rip)   # 0x604db8
movq 0x1f6758(%rip), %rdi    # 0x6025e0
movq 0x1f6759(%rip), %rsi    # 0x6025e8
leaq 0x1f679a(%rip), %rcx    # 0x602630
leaq 0x1f67b3(%rip), %r8     # 0x602650
movl %ebp, %edx
movl $0x1, %r9d
pushq %r14
pushq $0x0
callq 0x4074d4
movsd 0x28(%rsp), %xmm3
movsd 0x18(%rsp), %xmm5
addq $0x10, %rsp
movapd %xmm0, %xmm4
movsd %xmm0, 0x1f8f36(%rip)   # 0x604e00
movaps %xmm3, %xmm6
movq 0x20(%rsp), %rbx
jmp 0x40beed
movsd 0x17821c(%rip), %xmm3   # 0x5840f8
movq 0x20(%rsp), %rbx
movsd 0x8(%rsp), %xmm5
movsd 0x18(%rsp), %xmm6
movl 0x1f66bd(%rip), %edx    # 0x6025b0
movl 0x1f66bb(%rip), %ecx    # 0x6025b4
movsd 0x38(%rsp), %xmm2
subq $0x8, %rsp
leaq 0x27c8(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
leaq 0x48(%rsp), %r8
leaq 0x68(%rsp), %r9
movsd 0x18(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
pushq %rbp
pushq %r13
pushq %r12
callq 0x40a1b7
addq $0x20, %rsp
callq 0x4072ae
movq %r15, %rdi
callq 0x40c360
movq 0x30(%rsp), %rdi
callq 0x40c360
movq %r12, %rdi
callq 0x40c360
movq %r13, %rdi
callq 0x40c360
callq 0x540f20
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
xorps %xmm1, %xmm1
cvtsi2ss %rbx, %xmm1
subss %xmm1, %xmm0
mulss 0x178241(%rip), %xmm0   # 0x5841c0
cvtss2sd %xmm0, %xmm0
leaq 0x178e94(%rip), %rdi    # 0x584e1e
movb $0x1, %al
callq 0x4d9810
xorl %eax, %eax
addq $0x75e8, %rsp           # imm = 0x75E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movsd %xmm0, 0x8(%rsp)
jmp 0x40b61d
movq (%r14), %rdi
callq 0x40aa22
movq $0x605d20, %rdi         # imm = 0x605D20
leaq 0x178d13(%rip), %rsi    # 0x584cd9
jmp 0x40c0a6
movq $0x605d20, %rdi         # imm = 0x605D20
leaq 0x178d1b(%rip), %rsi    # 0x584cf4
jmp 0x40c0a6
movq $0x605d20, %rdi         # imm = 0x605D20
leaq 0x178d53(%rip), %rsi    # 0x584d3f
jmp 0x40c0a6
movq $0x605d20, %rdi         # imm = 0x605D20
leaq 0x178d6c(%rip), %rsi    # 0x584d6b
jmp 0x40c0a6
movq $0x605d20, %r14         # imm = 0x605D20
movq %r14, %rdi
callq 0x475bf0
leaq 0x17840e(%rip), %rbx    # 0x584428
movq %r14, %rdi
movq %rbx, %rsi
callq 0x476310
movq %rax, %rdi
callq 0x475bf0
leaq 0x178443(%rip), %rsi    # 0x584477
movq %rax, %rdi
callq 0x476310
leaq 0x1f650d(%rip), %rsi    # 0x602550
movq %rax, %rdi
callq 0x476310
leaq 0x17843b(%rip), %rsi    # 0x58448d
movq %rax, %rdi
callq 0x476310
movq %rax, %rdi
callq 0x475bf0
leaq 0x178456(%rip), %rsi    # 0x5844bf
movq %rax, %rdi
callq 0x476310
movq %rax, %rdi
callq 0x475bf0
leaq 0x17848e(%rip), %rsi    # 0x58450e
movq %rax, %rdi
callq 0x476310
movq %rax, %rdi
callq 0x475bf0
movq %rax, %rdi
movq %rbx, %rsi
jmp 0x40c0a6
movq $0x605d20, %rdi         # imm = 0x605D20
leaq 0x178c69(%rip), %rsi    # 0x584d0f
callq 0x476310
movq %rax, %rdi
callq 0x475bf0
movl $0x1, %edi
callq 0x4ce480