// File: gioannides[P]Language_Processors/src/../include/ast/ast_Expressions.cpp
// Function: PrimaryExpression::render_asm(std::basic_ofstream<char, std::char_traits<char>>&, Context&)
inline void PrimaryExpression::render_asm(std::ofstream& file,Context& contxt)  
{
	/*if(IDENTIFIER!=NULL)
	{
		file << "# id" << *IDENTIFIER << "- f_call" << contxt.is_function_call << "- reading" << contxt.reading << "- function" << contxt.function << "- SizeOf:" << contxt.sizeof_ << "- lhs_of_assignment:" << contxt.lhs_of_assignment << "\n";
	}*/
	if( AssignmentExpressionPtr != NULL && !contxt.reading ) 
	{
		AssignmentExpressionPtr->render_asm(file,contxt);		
	}



	if(CONSTANT != NULL && contxt.reading && contxt.LocalArray){

		contxt.ArraySize.push_back(std::stoi(*CONSTANT));
		
	}


	else if( IDENTIFIER != NULL && !contxt.reading && contxt.function)			//this identifier is involved in expressions
	{
		if(contxt.sizeof_){
			findSize(contxt,*IDENTIFIER);
		}


		if(contxt.Regs>=24 && !contxt.sizeof_)
		{
			std::cout << std::endl << "buy more registers!" << std::endl; 
		}
		int found_0nothing_1local_2globl = 0;	
		int good_index=0;			//this will determine whether the variable wanted is a global or a local
		int i(0), j;				//must initialize the index i outside so it is accessible throughout here
		if(contxt.is_function_call && !contxt.sizeof_)
		{
			for (int i=0; i<contxt.functions_declared.size(); i++)
			{
			//std::cout << "\n\n\n merge!\n\n";
			 	if(contxt.functions_declared[i].name==*IDENTIFIER)
			 	{	//std::cout << "aici;";
				 	contxt.Scopes.push_back(*IDENTIFIER);
				}
			}
			contxt.is_function_call=false;
		}
		else
		{ 
			if(contxt.Variables.size()&&contxt.Scopes.size() && !contxt.sizeof_ && !contxt.enum_constant)
			{
			for(i=contxt.Variables.size()-1; i>=0; i--) {
				for (j=contxt.Scopes.size()-1; j>=0; j--)
				{
					if(contxt.Variables[i].scope == contxt.Scopes[j] && *IDENTIFIER == contxt.Variables[i].id) 
					{
						found_0nothing_1local_2globl = 1;	//means that we found a local variable in the function of that name					
						good_index=i;
						contxt.good_i = good_index;
						i = -1;
						j = -1;
					}
					if(contxt.Variables[good_index].DataType == "unsigned") { //[0] this might cause problems
						contxt.is_unsigned = true;
					}
					if(contxt.Variables[good_index].DataType == "float") {
						contxt.float_ = true;
					}										
				}
			  }
			}
			if(!found_0nothing_1local_2globl && !contxt.sizeof_ && !contxt.enum_constant) {
				for(i=0; i<contxt.Variables.size(); i++) {
					if(contxt.Variables[i].scope == "global" && *IDENTIFIER == contxt.Variables[i].id) {
						found_0nothing_1local_2globl=2;
						good_index = i;
						contxt.good_i = good_index;
						i = contxt.Variables.size();
						if(contxt.Variables[good_index].DataType == "unsigned") {
							contxt.is_unsigned = true;
						}
						if(contxt.Variables[good_index].DataType == "float") {
							contxt.float_ = true;
						}
					}	
				}
		  	} 
			if(found_0nothing_1local_2globl && contxt.nested_arrays)
			{
				
					file << std::endl << "\tli $24, " << contxt.Variables[good_index].word_size;
				
				
				file << std::endl << "\tmul $25,$24,$25";
			}	  		
			if(contxt.lhs_of_assignment && !contxt.sizeof_ && !contxt.enum_constant )
			{
				//file << "# lhs_of_assignment is set\n";
				if(found_0nothing_1local_2globl)
				{
					
					if(contxt.AssignmentOperator != "df" && contxt.AssignmentOperator != "=")
					{
						AssignmentOperator(file,good_index,contxt,found_0nothing_1local_2globl);				
					}
				}
				if(found_0nothing_1local_2globl==1){
					if(!contxt.Variables[good_index].Pointer){
						
						contxt.DataType = contxt.Variables[good_index].DataType;
						
						store_locals(contxt, file, good_index);
						
					}
					else{
						contxt.PointerNotStored = true;
						//std::cout << contxt.Variables[contxt.good_i].PointerLevelsTemp << " " <<  contxt.Variables[contxt.good_i].id << std::endl;
						
					}
				}					
				else if(found_0nothing_1local_2globl==2){
					if(!contxt.Variables[good_index].Pointer){
						
						contxt.DataType = contxt.Variables[good_index].DataType;
						
						store_globals(contxt, file, good_index);
						
					}
					else{
						contxt.PointerNotStored = true;
					}
				}			
				else
				{
						
					//else{
						//file << std::endl << "#VARIABLE : " << *IDENTIFIER << "NOT DECLARED!!!\n";
					//}
				}
			}
			else
			{

			 	if(found_0nothing_1local_2globl==1 && !contxt.sizeof_ && !contxt.enum_constant) 
			 	{
					
					contxt.DataType = contxt.Variables[good_index].DataType;
					
			 		load_locals(contxt, file, good_index);
					
					if(contxt.Cast){
						CastToType(file,contxt,*IDENTIFIER);
					}			
			  	}
     		   		 else if(found_0nothing_1local_2globl==2 && !contxt.sizeof_ && !contxt.enum_constant) 
				{
					
					contxt.DataType = contxt.Variables[good_index].DataType;
					
					load_globals(contxt, file, good_index);
					
					if(contxt.Cast){
						CastToType(file,contxt,*IDENTIFIER);
					}
			
				}		
				else
					
				{	if(!contxt.enum_constant){	
						bool found = false;
						for( int i(0); i < contxt.Enum.size(); i++){
							//std::cout <<  contxt.Enum[i].ScopeID << " " <<  contxt.Enum[i].IDENTIFIER << " " <<  contxt.Enum[i].value << std::endl;
							if(contxt.Enum[i].IDENTIFIER == *IDENTIFIER && contxt.Enum[i].ScopeID == contxt.funct_id){
								file <<  std::endl << "\tli\t$" << contxt.Regs+1 << ", " << contxt.Enum[i].value;
								contxt.regType[contxt.Regs+1]='i';
								found = true;
								break;
							}
						}
						if(!found){
							for( int i(0); i < contxt.Enum.size(); i++){
								if(contxt.Enum[i].IDENTIFIER == *IDENTIFIER && contxt.Enum[i].ScopeID == "global"){
									file <<  std::endl << "\tli\t$" << contxt.Regs+1 << ", " << contxt.Enum[i].value;
									contxt.regType[contxt.Regs+1]='i';
									found = true;
									break;
								}
							}
						}
					}

				}

			}
					
					//}    
						

						if(!contxt.sizeof_){
							//file << std::endl << "#VARIABLE : " << *IDENTIFIER << "NOT DECLARED!!!\n";
						}
				}		
		}	
		
	
	else if( CONSTANT != NULL && !contxt.reading ) 
	{	

	
		
		char tmp2;
		int64_t temp;
		float temp_f;
		bool is_char = false;

		if((*CONSTANT) == "'\\n'"){
			tmp2 = '\n';
			is_char = true;
		}
		else if((*CONSTANT) == "'\\r'"){
			tmp2 = '\r';
			is_char = true;
		}
		else if((*CONSTANT) == "'\\v'"){
			tmp2 = '\v';
			is_char = true;
		}
		else if((*CONSTANT) == "'\\t'"){
			tmp2 = '\t';
			is_char = true;
		}
		else if((*CONSTANT) == "'\\f'"){
			tmp2 = '\f';
			is_char = true;
		}
		else if((*CONSTANT) == "'\\b'"){
			tmp2 = '\b';
			is_char = true;
		}
		else if((*CONSTANT) == "'\\a'"){
			tmp2 = '\a';
			is_char = true;
		}
			
		if(is_char){
			temp = (int)tmp2;
			temp_f = (int)tmp2;
			if(contxt.sizeof_){
				if(contxt.SizeOf < 8){
					contxt.SizeOf = 4;
					return;
				}
			}
		}
			

		if( (*CONSTANT).find_first_of("'")==0 /*&& contxt.variable.word_size == 1*/ && !is_char)
		{
			tmp2 = (*CONSTANT)[1];
			temp = (int)tmp2;
			temp_f = (int)tmp2;
			is_char = true;
			if(contxt.sizeof_){
				contxt.SizeOf = 4;
				return;
			}

		}
		else if(!is_char){
			
			temp_f = (std::stod(*CONSTANT));
		 	temp = (std::stod(*CONSTANT));
			if(contxt.sizeof_){
				if((std::floor(std::stod(*CONSTANT))) != std::stod(*CONSTANT)){
					contxt.SizeOf = 8;
					return;
				}
				else{
					if(contxt.SizeOf < 8){
						contxt.SizeOf = 4;
						return;
					}
				}
			}
		}
		
		if(contxt.function && contxt.UnaryOperators.size() != 0 && contxt.variable.DataType != "float")
		{
			if(contxt.UnaryOperators[contxt.UnaryOperators.size()-1] == '-' && !contxt.function) 
			{			
				temp = (-1) * temp;
				contxt.UnaryOperators.pop_back();
							
			}
			else if(contxt.UnaryOperators[contxt.UnaryOperators.size()-1] == '~'  && !contxt.function) 
			{				
				temp = ~temp;
				contxt.UnaryOperators.pop_back();
							
			}
			else if(contxt.UnaryOperators[contxt.UnaryOperators.size()-1] == '!'  && !contxt.function) 
			{	
				temp = !temp;
				contxt.UnaryOperators.pop_back();									
			}
		}
		if(contxt.enum_constant){
			
			contxt.EnumOperands.push_back(temp);	
			
		}
		
		if(contxt.variable.DataType != "float" && !contxt.enum_constant){			
			contxt.variable.value = temp;
		}
		else if(contxt.variable.DataType == "float" && !contxt.enum_constant){
			contxt.variable.value = temp_f;
		}
		
		if(is_char && contxt.function){		
			file <<  std::endl << "\tli\t$" << contxt.Regs+1 << ", " << temp;
			contxt.regType[contxt.Regs+1]='i';
		}
					

		if(!contxt.reading && contxt.function && !is_char && !contxt.enum_constant) 
		{	if(contxt.is_array) { contxt.DataType = "int"; }
			if(contxt.DataType == "float" || (std::floor(std::stod(*CONSTANT))) != std::stod(*CONSTANT)){
				
				if(contxt.lhs_of_assignment &&!contxt.LocalArray){
					file <<  std::endl << "\tli.s\t$f" << contxt.Regs+2 << ", " << temp_f;
					for(int i(0); i < 2; i++){
						file << std::endl << "\taddu\t$" << contxt.Regs+2 << ",$" << contxt.Regs+2 << ",$" << contxt.Regs+2; //TODO: NEW THING
					}
					file << std::endl << "\tmtc1\t$" << contxt.Regs+2 << ",$f" << contxt.Regs+2;
					contxt.regType[contxt.Regs+2]='f';
				}
				else{

					file <<  std::endl << "\tli.s\t$f" << contxt.Regs+1 << ", " << temp_f; 
					contxt.regType[contxt.Regs+1]='f';
				}
				
			}
			else if(contxt.DataType != "float" || (std::floor(std::stod(*CONSTANT))) == std::stod(*CONSTANT)){
				if(contxt.lhs_of_assignment && !contxt.LocalArray){						//TODO: NEW THING
					int j = 0;
					file <<  std::endl << "\tli\t$" << contxt.Regs+2 << ", " << temp;
					if(contxt.variable.DataType == "char") { j = 0; }
					else if(contxt.variable.DataType == "short") { j = 1; }
					else { j = 2; }
					for(int i(0); i < j; i++){
						file << std::endl << "\taddu\t$" << contxt.Regs+2 << ",$" << contxt.Regs+2 << ",$" << contxt.Regs+2;
					}
					contxt.regType[contxt.Regs+2]='i';
				}
				else{
					file <<  std::endl << "\tli\t$" << contxt.Regs+1 << ", " << temp;
					contxt.regType[contxt.Regs+1]='i';
				}
				
			}
			
		}
		if ((!contxt.reading && !contxt.function && !contxt.enum_constant))
		{
			//file << std::endl << "# this is where you start evaluating " << temp ;
			contxt.eval[contxt.Regs+1]=temp;
			contxt.eval_f[contxt.Regs+1] = temp_f;
		}
		
	}
				
	else if( IDENTIFIER != NULL && contxt.reading && contxt.function && !contxt.sizeof_)
	{	for (int i=0; i<contxt.functions_declared.size(); i++)
		{
			//std::cout << "\n\n\n merge!\n\n";
			 if(contxt.functions_declared[i].name==*IDENTIFIER)
			 {	//std::cout << "aici;";
			 	//contxt.Scopes.push_back(*IDENTIFIER);
			 	if(contxt.max_offset<contxt.functions_declared[i].paramters_size){
					//std::cout <<"\n update max_offset: " << contxt.functions_declared[i].paramters_size << "\n";
					contxt.max_offset=contxt.functions_declared[i].paramters_size;
					break;
				} 	
			//	std::cout << "\n" <<  contxt.functions_declared[i].paramters_size << " " <<  contxt.functions_declared[i].name << "\n"; 
			//	for(int j=0; j<contxt.Scopes.size(); j++)
			//	{
			//		std::cout << contxt.Scopes[j] << " ";
			// 	}
			// 	std::cout << "\n";
			 }
		}
	}

	else if(IDENTIFIER != NULL && !contxt.function && !contxt.function_dec && !contxt.lhs_of_assignment){
			
			contxt.GlobalPointerValue = *IDENTIFIER;

	}

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1c0, %rsp            # imm = 0x1C0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xe0(%rbp)
cmpq $0x0, 0x20(%rax)
je 0x1f92e
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
jne 0x1f92e
movq -0xe0(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x13a40
movq -0xe0(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x1f993
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
je 0x1f993
movq -0x18(%rbp), %rax
testb $0x1, 0x74(%rax)
je 0x1f993
movq -0xe0(%rbp), %rax
movq -0x18(%rbp), %rcx
addq $0x78, %rcx
movq %rcx, -0xe8(%rbp)
movq 0x10(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0xa, %edx
callq 0x22990
movq -0xe8(%rbp), %rdi
movl %eax, -0x1c(%rbp)
leaq -0x1c(%rbp), %rsi
callq 0x1f820
jmp 0x212a8
movq -0xe0(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2053f
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
jne 0x2053f
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
je 0x2053f
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
je 0x1fa34
movq -0xe0(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, -0xf8(%rbp)
movq 0x8(%rax), %rsi
leaq -0x40(%rbp), %rdi
movq %rdi, -0xf0(%rbp)
callq 0x81a0
movq -0xf8(%rbp), %rdi
movq -0xf0(%rbp), %rsi
callq 0x229d0
jmp 0x1fa0f
leaq -0x40(%rbp), %rdi
callq 0x8280
jmp 0x1fa34
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x8280
jmp 0x212b1
movq -0x18(%rbp), %rax
cmpl $0x18, 0x310(%rax)
jl 0x1fa7f
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
jne 0x1fa7f
movq 0x68553(%rip), %rdi     # 0x87fa8
movq 0x68514(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x44dc4(%rip), %rsi     # 0x6482f
callq 0x8400
movq %rax, %rdi
movq 0x684f6(%rip), %rsi     # 0x87f70
callq 0x8450
movl $0x0, -0x50(%rbp)
movl $0x0, -0x54(%rbp)
movl $0x0, -0x58(%rbp)
movq -0x18(%rbp), %rax
testb $0x1, 0x4b0(%rax)
je 0x1fb53
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
jne 0x1fb53
movl $0x0, -0x60(%rbp)
movslq -0x60(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x18(%rbp), %rdi
addq $0x400, %rdi            # imm = 0x400
callq 0x1f7d0
movq %rax, %rcx
movq -0x100(%rbp), %rax
cmpq %rcx, %rax
jae 0x1fb43
movq -0x18(%rbp), %rdi
addq $0x400, %rdi            # imm = 0x400
movslq -0x60(%rbp), %rsi
callq 0x1f800
movq %rax, %rdi
movq -0xe0(%rbp), %rax
addq $0x8, %rdi
movq 0x8(%rax), %rsi
callq 0xfd50
testb $0x1, %al
jne 0x1fb18
jmp 0x1fb33
movq -0xe0(%rbp), %rax
movq -0x18(%rbp), %rdi
addq $0x460, %rdi            # imm = 0x460
movq 0x8(%rax), %rsi
callq 0xc2e0
jmp 0x1fb35
movl -0x60(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x60(%rbp)
jmp 0x1fabd
movq -0x18(%rbp), %rax
movb $0x0, 0x4b0(%rax)
jmp 0x2053a
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
callq 0xfd20
cmpq $0x0, %rax
je 0x1fd2c
movq -0x18(%rbp), %rdi
addq $0x460, %rdi            # imm = 0x460
callq 0xbef0
cmpq $0x0, %rax
je 0x1fd2c
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
jne 0x1fd2c
movq -0x18(%rbp), %rax
testb $0x1, 0x14d(%rax)
jne 0x1fd2c
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
callq 0xfd20
subq $0x1, %rax
movl %eax, -0x58(%rbp)
cmpl $0x0, -0x58(%rbp)
jl 0x1fd2a
movq -0x18(%rbp), %rdi
addq $0x460, %rdi            # imm = 0x460
callq 0xbef0
subq $0x1, %rax
movl %eax, -0x5c(%rbp)
cmpl $0x0, -0x5c(%rbp)
jl 0x1fd1a
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x58(%rbp), %rsi
callq 0xfde0
addq $0x30, %rax
movq %rax, -0x108(%rbp)
movq -0x18(%rbp), %rdi
addq $0x460, %rdi            # imm = 0x460
movslq -0x5c(%rbp), %rsi
callq 0xbf10
movq -0x108(%rbp), %rdi
movq %rax, %rsi
callq 0xfd50
testb $0x1, %al
jne 0x1fc33
jmp 0x1fc9a
movq -0xe0(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x110(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x58(%rbp), %rsi
callq 0xfde0
movq -0x110(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0xfd50
testb $0x1, %al
jne 0x1fc72
jmp 0x1fc9a
movl $0x1, -0x50(%rbp)
movl -0x58(%rbp), %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x5b4(%rax)
movl $0xffffffff, -0x58(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x5c(%rbp) # imm = 0xFFFFFFFF
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x54(%rbp), %rsi
callq 0xfde0
movq %rax, %rdi
addq $0x58, %rdi
leaq 0x44753(%rip), %rsi     # 0x6440f
callq 0x9e30
testb $0x1, %al
jne 0x1fcc7
jmp 0x1fcd2
movq -0x18(%rbp), %rax
movb $0x1, 0x219(%rax)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x54(%rbp), %rsi
callq 0xfde0
movq %rax, %rdi
addq $0x58, %rdi
leaq 0x44650(%rip), %rsi     # 0x64344
callq 0x9e30
testb $0x1, %al
jne 0x1fcff
jmp 0x1fd0a
movq -0x18(%rbp), %rax
movb $0x1, 0x340(%rax)
jmp 0x1fd0c
movl -0x5c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x5c(%rbp)
jmp 0x1fbe1
jmp 0x1fd1c
movl -0x58(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x58(%rbp)
jmp 0x1fbc0
jmp 0x1fd2c
cmpl $0x0, -0x50(%rbp)
jne 0x1feb0
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
jne 0x1feb0
movq -0x18(%rbp), %rax
testb $0x1, 0x14d(%rax)
jne 0x1feb0
movl $0x0, -0x58(%rbp)
movslq -0x58(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
callq 0xfd20
movq %rax, %rcx
movq -0x118(%rbp), %rax
cmpq %rcx, %rax
jae 0x1feae
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x58(%rbp), %rsi
callq 0xfde0
movq %rax, %rdi
addq $0x30, %rdi
leaq 0x4466e(%rip), %rsi     # 0x6441d
callq 0x9e30
testb $0x1, %al
jne 0x1fdbd
jmp 0x1fe9e
movq -0xe0(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x120(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x58(%rbp), %rsi
callq 0xfde0
movq -0x120(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0xfd50
testb $0x1, %al
jne 0x1fdff
jmp 0x1fe9e
movl $0x2, -0x50(%rbp)
movl -0x58(%rbp), %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x5b4(%rax)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
callq 0xfd20
movl %eax, -0x58(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x54(%rbp), %rsi
callq 0xfde0
movq %rax, %rdi
addq $0x58, %rdi
leaq 0x445c1(%rip), %rsi     # 0x6440f
callq 0x9e30
testb $0x1, %al
jne 0x1fe59
jmp 0x1fe64
movq -0x18(%rbp), %rax
movb $0x1, 0x219(%rax)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x54(%rbp), %rsi
callq 0xfde0
movq %rax, %rdi
addq $0x58, %rdi
leaq 0x444be(%rip), %rsi     # 0x64344
callq 0x9e30
testb $0x1, %al
jne 0x1fe91
jmp 0x1fe9c
movq -0x18(%rbp), %rax
movb $0x1, 0x340(%rax)
jmp 0x1fe9e
jmp 0x1fea0
movl -0x58(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x58(%rbp)
jmp 0x1fd5f
jmp 0x1feb0
cmpl $0x0, -0x50(%rbp)
je 0x1ff2a
movq -0x18(%rbp), %rax
cmpl $0x0, 0x13e90(%rax)
je 0x1ff2a
movq -0x10(%rbp), %rdi
movq 0x680a2(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x44966(%rip), %rsi     # 0x64843
callq 0x8400
movq %rax, -0x128(%rbp)
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x54(%rbp), %rsi
callq 0xfde0
movq -0x128(%rbp), %rdi
movl (%rax), %esi
callq 0x8730
movq -0x10(%rbp), %rdi
movq 0x6805a(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x44928(%rip), %rsi     # 0x6484d
callq 0x8400
movq -0x18(%rbp), %rax
testb $0x1, 0x1d2(%rax)
je 0x20089
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
jne 0x20089
movq -0x18(%rbp), %rax
testb $0x1, 0x14d(%rax)
jne 0x20089
cmpl $0x0, -0x50(%rbp)
je 0x1ffba
movq -0x18(%rbp), %rdi
addq $0x318, %rdi            # imm = 0x318
leaq 0x4425a(%rip), %rsi     # 0x641cf
callq 0x1f7a0
testb $0x1, %al
jne 0x1ff80
jmp 0x1ffb8
movq -0x18(%rbp), %rdi
addq $0x318, %rdi            # imm = 0x318
leaq 0x44580(%rip), %rsi     # 0x64512
callq 0x1f7a0
testb $0x1, %al
jne 0x1ff9d
jmp 0x1ffb8
movq -0xe0(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x54(%rbp), %edx
movq -0x18(%rbp), %rcx
movl -0x50(%rbp), %r8d
callq 0x23170
jmp 0x1ffba
cmpl $0x1, -0x50(%rbp)
jne 0x2001d
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x54(%rbp), %rsi
callq 0xfde0
testb $0x1, 0x9c(%rax)
jne 0x20013
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x54(%rbp), %rsi
callq 0xfde0
movq %rax, %rsi
addq $0x58, %rsi
movq -0x18(%rbp), %rdi
callq 0x8060
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x54(%rbp), %edx
callq 0x247d0
jmp 0x2001b
movq -0x18(%rbp), %rax
movb $0x1, 0x48(%rax)
jmp 0x20084
cmpl $0x2, -0x50(%rbp)
jne 0x20080
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x54(%rbp), %rsi
callq 0xfde0
testb $0x1, 0x9c(%rax)
jne 0x20076
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x54(%rbp), %rsi
callq 0xfde0
movq %rax, %rsi
addq $0x58, %rsi
movq -0x18(%rbp), %rdi
callq 0x8060
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x54(%rbp), %edx
callq 0x256b0
jmp 0x2007e
movq -0x18(%rbp), %rax
movb $0x1, 0x48(%rax)
jmp 0x20082
jmp 0x20082
jmp 0x20084
jmp 0x20529
cmpl $0x1, -0x50(%rbp)
jne 0x2016d
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
jne 0x2016d
movq -0x18(%rbp), %rax
testb $0x1, 0x14d(%rax)
jne 0x2016d
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x54(%rbp), %rsi
callq 0xfde0
movq %rax, %rsi
addq $0x58, %rsi
movq -0x18(%rbp), %rdi
callq 0x8060
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x54(%rbp), %edx
callq 0x26360
movq -0x18(%rbp), %rax
testb $0x1, 0x90(%rax)
je 0x20168
movq -0xe0(%rbp), %rax
movq -0x10(%rbp), %rcx
movq %rcx, -0x140(%rbp)
movq -0x18(%rbp), %rcx
movq %rcx, -0x138(%rbp)
movq 0x8(%rax), %rsi
leaq -0x80(%rbp), %rdi
movq %rdi, -0x130(%rbp)
callq 0x81a0
movq -0x140(%rbp), %rdi
movq -0x138(%rbp), %rsi
movq -0x130(%rbp), %rdx
callq 0x26b70
jmp 0x20143
leaq -0x80(%rbp), %rdi
callq 0x8280
jmp 0x20168
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x8280
jmp 0x212b1
jmp 0x20527
cmpl $0x2, -0x50(%rbp)
jne 0x2025a
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
jne 0x2025a
movq -0x18(%rbp), %rax
testb $0x1, 0x14d(%rax)
jne 0x2025a
movq -0x18(%rbp), %rdi
addq $0x240, %rdi            # imm = 0x240
movslq -0x54(%rbp), %rsi
callq 0xfde0
movq %rax, %rsi
addq $0x58, %rsi
movq -0x18(%rbp), %rdi
callq 0x8060
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x54(%rbp), %edx
callq 0x27c40
movq -0x18(%rbp), %rax
testb $0x1, 0x90(%rax)
je 0x20255
movq -0xe0(%rbp), %rax
movq -0x10(%rbp), %rcx
movq %rcx, -0x158(%rbp)
movq -0x18(%rbp), %rcx
movq %rcx, -0x150(%rbp)
movq 0x8(%rax), %rsi
leaq -0xa0(%rbp), %rdi
movq %rdi, -0x148(%rbp)
callq 0x81a0
movq -0x158(%rbp), %rdi
movq -0x150(%rbp), %rsi
movq -0x148(%rbp), %rdx
callq 0x26b70
jmp 0x2022a
leaq -0xa0(%rbp), %rdi
callq 0x8280
jmp 0x20255
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x8280
jmp 0x212b1
jmp 0x20525
movq -0x18(%rbp), %rax
testb $0x1, 0x14d(%rax)
jne 0x20523
movb $0x0, -0xa1(%rbp)
movl $0x0, -0xa8(%rbp)
movslq -0xa8(%rbp), %rax
movq %rax, -0x160(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
callq 0x28620
movq %rax, %rcx
movq -0x160(%rbp), %rax
cmpq %rcx, %rax
jae 0x203c4
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0xa8(%rbp), %rsi
callq 0x28650
movq %rax, %rdi
movq -0xe0(%rbp), %rax
addq $0x20, %rdi
movq 0x8(%rax), %rsi
callq 0xfd50
testb $0x1, %al
jne 0x202e4
jmp 0x203ae
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0xa8(%rbp), %rsi
callq 0x28650
movq %rax, %rdi
movq -0x18(%rbp), %rsi
addq $0x220, %rsi            # imm = 0x220
callq 0xfd50
testb $0x1, %al
jne 0x20317
jmp 0x203ae
movq -0x10(%rbp), %rdi
movq 0x67c4e(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x443c8(%rip), %rsi     # 0x646f9
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x1, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x44667(%rip), %rsi     # 0x649bc
callq 0x8400
movq %rax, -0x168(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0xa8(%rbp), %rsi
callq 0x28650
movq -0x168(%rbp), %rdi
movsd 0x40(%rax), %xmm0
callq 0x8800
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x310(%rcx), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movb $0x69, 0x341(%rax,%rcx)
movb $0x1, -0xa1(%rbp)
jmp 0x203c4
jmp 0x203b0
movl -0xa8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa8(%rbp)
jmp 0x2027c
testb $0x1, -0xa1(%rbp)
jne 0x20521
movl $0x0, -0xac(%rbp)
movslq -0xac(%rbp), %rax
movq %rax, -0x170(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
callq 0x28620
movq %rax, %rcx
movq -0x170(%rbp), %rax
cmpq %rcx, %rax
jae 0x2051f
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0xac(%rbp), %rsi
callq 0x28650
movq %rax, %rdi
movq -0xe0(%rbp), %rax
addq $0x20, %rdi
movq 0x8(%rax), %rsi
callq 0xfd50
testb $0x1, %al
jne 0x20443
jmp 0x20509
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0xac(%rbp), %rsi
callq 0x28650
movq %rax, %rdi
leaq 0x43fb9(%rip), %rsi     # 0x6441d
callq 0x9e30
testb $0x1, %al
jne 0x20472
jmp 0x20509
movq -0x10(%rbp), %rdi
movq 0x67af3(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x4426d(%rip), %rsi     # 0x646f9
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x1, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x4450c(%rip), %rsi     # 0x649bc
callq 0x8400
movq %rax, -0x178(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc0, %rdi
movslq -0xac(%rbp), %rsi
callq 0x28650
movq -0x178(%rbp), %rdi
movsd 0x40(%rax), %xmm0
callq 0x8800
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x310(%rcx), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movb $0x69, 0x341(%rax,%rcx)
movb $0x1, -0xa1(%rbp)
jmp 0x2051f
jmp 0x2050b
movl -0xac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xac(%rbp)
jmp 0x203db
jmp 0x20521
jmp 0x20523
jmp 0x20525
jmp 0x20527
jmp 0x20529
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
jne 0x20538
jmp 0x20538
jmp 0x2053a
jmp 0x212a6
movq -0xe0(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x2112c
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
jne 0x2112c
movq -0xe0(%rbp), %rax
movb $0x0, -0xbd(%rbp)
movq 0x10(%rax), %rdi
leaq 0x442e3(%rip), %rsi     # 0x6485e
callq 0x9e30
testb $0x1, %al
jne 0x20586
jmp 0x20599
movb $0xa, -0xad(%rbp)
movb $0x1, -0xbd(%rbp)
jmp 0x206ba
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0x442b8(%rip), %rsi     # 0x64863
callq 0x9e30
testb $0x1, %al
jne 0x205b6
jmp 0x205c9
movb $0xd, -0xad(%rbp)
movb $0x1, -0xbd(%rbp)
jmp 0x206b8
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0x4428d(%rip), %rsi     # 0x64868
callq 0x9e30
testb $0x1, %al
jne 0x205e6
jmp 0x205f9
movb $0xb, -0xad(%rbp)
movb $0x1, -0xbd(%rbp)
jmp 0x206b6
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0x44262(%rip), %rsi     # 0x6486d
callq 0x9e30
testb $0x1, %al
jne 0x20616
jmp 0x20629
movb $0x9, -0xad(%rbp)
movb $0x1, -0xbd(%rbp)
jmp 0x206b4
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0x44237(%rip), %rsi     # 0x64872
callq 0x9e30
testb $0x1, %al
jne 0x20646
jmp 0x20656
movb $0xc, -0xad(%rbp)
movb $0x1, -0xbd(%rbp)
jmp 0x206b2
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0x4420f(%rip), %rsi     # 0x64877
callq 0x9e30
testb $0x1, %al
jne 0x20673
jmp 0x20683
movb $0x8, -0xad(%rbp)
movb $0x1, -0xbd(%rbp)
jmp 0x206b0
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0x441e7(%rip), %rsi     # 0x6487c
callq 0x9e30
testb $0x1, %al
jne 0x206a0
jmp 0x206ae
movb $0x7, -0xad(%rbp)
movb $0x1, -0xbd(%rbp)
jmp 0x206b0
jmp 0x206b2
jmp 0x206b4
jmp 0x206b6
jmp 0x206b8
jmp 0x206ba
testb $0x1, -0xbd(%rbp)
je 0x20717
movsbl -0xad(%rbp), %eax
cltq
movq %rax, -0xb8(%rbp)
movsbl -0xad(%rbp), %eax
cvtsi2ss %eax, %xmm0
movss %xmm0, -0xbc(%rbp)
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
je 0x20715
movq -0x18(%rbp), %rax
cmpl $0x8, 0x1fc(%rax)
jge 0x20713
movq -0x18(%rbp), %rax
movl $0x4, 0x1fc(%rax)
jmp 0x212a8
jmp 0x20715
jmp 0x20717
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0x44156(%rip), %rsi     # 0x6487f
xorl %eax, %eax
movl %eax, %edx
callq 0x81f0
cmpq $0x0, %rax
jne 0x207ad
testb $0x1, -0xbd(%rbp)
jne 0x207ad
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
movl $0x1, %esi
callq 0x8860
movb (%rax), %al
movb %al, -0xad(%rbp)
movsbl -0xad(%rbp), %eax
cltq
movq %rax, -0xb8(%rbp)
movsbl -0xad(%rbp), %eax
cvtsi2ss %eax, %xmm0
movss %xmm0, -0xbc(%rbp)
movb $0x1, -0xbd(%rbp)
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
je 0x207a8
movq -0x18(%rbp), %rax
movl $0x4, 0x1fc(%rax)
jmp 0x212a8
jmp 0x20890
testb $0x1, -0xbd(%rbp)
jne 0x2088e
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x28670
movq -0xe0(%rbp), %rax
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xbc(%rbp)
movq 0x10(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x28670
cvttsd2si %xmm0, %rax
movq %rax, -0xb8(%rbp)
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
je 0x2088c
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x28670
callq 0x86e0
movq -0xe0(%rbp), %rax
movsd %xmm0, -0x180(%rbp)
movq 0x10(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x28670
movaps %xmm0, %xmm1
movsd -0x180(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jne 0x20855
jp 0x20855
jmp 0x20868
movq -0x18(%rbp), %rax
movl $0x8, 0x1fc(%rax)
jmp 0x212a8
movq -0x18(%rbp), %rax
cmpl $0x8, 0x1fc(%rax)
jge 0x20888
movq -0x18(%rbp), %rax
movl $0x4, 0x1fc(%rax)
jmp 0x212a8
jmp 0x2088a
jmp 0x2088c
jmp 0x2088e
jmp 0x20890
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
je 0x20a31
movq -0x18(%rbp), %rdi
addq $0x4d0, %rdi            # imm = 0x4D0
callq 0x286b0
cmpq $0x0, %rax
je 0x20a31
movq -0x18(%rbp), %rdi
addq $0x258, %rdi            # imm = 0x258
addq $0x58, %rdi
leaq 0x43a73(%rip), %rsi     # 0x64344
callq 0x1f7a0
testb $0x1, %al
jne 0x208df
jmp 0x20a31
movq -0x18(%rbp), %rax
addq $0x4d0, %rax            # imm = 0x4D0
movq %rax, -0x188(%rbp)
movq -0x18(%rbp), %rdi
addq $0x4d0, %rdi            # imm = 0x4D0
callq 0x286b0
movq -0x188(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0x286d0
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x2094c
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
jne 0x2094c
imulq $-0x1, -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x18(%rbp), %rdi
addq $0x4d0, %rdi            # imm = 0x4D0
callq 0x286f0
jmp 0x20a2f
movq -0x18(%rbp), %rax
addq $0x4d0, %rax            # imm = 0x4D0
movq %rax, -0x190(%rbp)
movq -0x18(%rbp), %rdi
addq $0x4d0, %rdi            # imm = 0x4D0
callq 0x286b0
movq -0x190(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0x286d0
movsbl (%rax), %eax
cmpl $0x7e, %eax
jne 0x209b9
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
jne 0x209b9
movq -0xb8(%rbp), %rax
xorq $-0x1, %rax
movq %rax, -0xb8(%rbp)
movq -0x18(%rbp), %rdi
addq $0x4d0, %rdi            # imm = 0x4D0
callq 0x286f0
jmp 0x20a2d
movq -0x18(%rbp), %rax
addq $0x4d0, %rax            # imm = 0x4D0
movq %rax, -0x198(%rbp)
movq -0x18(%rbp), %rdi
addq $0x4d0, %rdi            # imm = 0x4D0
callq 0x286b0
movq -0x198(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0x286d0
movsbl (%rax), %eax
cmpl $0x21, %eax
jne 0x20a2b
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
jne 0x20a2b
cmpq $0x0, -0xb8(%rbp)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movq %rax, -0xb8(%rbp)
movq -0x18(%rbp), %rdi
addq $0x4d0, %rdi            # imm = 0x4D0
callq 0x286f0
jmp 0x20a2d
jmp 0x20a2f
jmp 0x20a31
movq -0x18(%rbp), %rax
testb $0x1, 0x14d(%rax)
je 0x20a62
movq -0x18(%rbp), %rdi
addq $0x150, %rdi            # imm = 0x150
movq -0xb8(%rbp), %rax
movl %eax, -0xc4(%rbp)
leaq -0xc4(%rbp), %rsi
callq 0x1f820
movq -0x18(%rbp), %rdi
addq $0x258, %rdi            # imm = 0x258
addq $0x58, %rdi
leaq 0x438cc(%rip), %rsi     # 0x64344
callq 0x1f7a0
testb $0x1, %al
jne 0x20a83
jmp 0x20aa7
movq -0x18(%rbp), %rax
testb $0x1, 0x14d(%rax)
jne 0x20aa7
cvtsi2sdq -0xb8(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, 0x280(%rax)
jmp 0x20aef
movq -0x18(%rbp), %rdi
addq $0x258, %rdi            # imm = 0x258
addq $0x58, %rdi
leaq 0x43887(%rip), %rsi     # 0x64344
callq 0x9e30
testb $0x1, %al
jne 0x20ac8
jmp 0x20aed
movq -0x18(%rbp), %rax
testb $0x1, 0x14d(%rax)
jne 0x20aed
movss -0xbc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, 0x280(%rax)
jmp 0x20aef
testb $0x1, -0xbd(%rbp)
je 0x20b73
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
je 0x20b73
movq -0x10(%rbp), %rdi
movq 0x67460(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x43bda(%rip), %rsi     # 0x646f9
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x1, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x43e79(%rip), %rsi     # 0x649bc
callq 0x8400
movq %rax, %rdi
movq -0xb8(%rbp), %rsi
callq 0x87b0
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x310(%rcx), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movb $0x69, 0x341(%rax,%rcx)
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
jne 0x210b7
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
je 0x210b7
testb $0x1, -0xbd(%rbp)
jne 0x210b7
movq -0x18(%rbp), %rax
testb $0x1, 0x14d(%rax)
jne 0x210b7
movq -0x18(%rbp), %rax
testb $0x1, 0x13e94(%rax)
je 0x20bd0
movq -0x18(%rbp), %rdi
leaq 0x44380(%rip), %rsi     # 0x64f4b
callq 0x8590
movq -0x18(%rbp), %rdi
leaq 0x43769(%rip), %rsi     # 0x64344
callq 0x9e30
testb $0x1, %al
jne 0x20c31
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x28670
callq 0x86e0
movq -0xe0(%rbp), %rax
movsd %xmm0, -0x1a0(%rbp)
movq 0x10(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x28670
movaps %xmm0, %xmm1
movsd -0x1a0(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jne 0x20c31
jp 0x20c31
jmp 0x20e34
movq -0x18(%rbp), %rax
testb $0x1, 0x1d2(%rax)
je 0x20dc0
movq -0x18(%rbp), %rax
testb $0x1, 0x74(%rax)
jne 0x20dc0
movq -0x10(%rbp), %rdi
movq 0x67315(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x438b9(%rip), %rsi     # 0x64523
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x2, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x43d2e(%rip), %rsi     # 0x649bc
callq 0x8400
movq %rax, %rdi
movss -0xbc(%rbp), %xmm0
callq 0x8340
movl $0x0, -0xc8(%rbp)
cmpl $0x2, -0xc8(%rbp)
jge 0x20d4a
movq -0x10(%rbp), %rdi
movq 0x672ab(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x43928(%rip), %rsi     # 0x645fc
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x2, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x437f8(%rip), %rsi     # 0x644f0
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x2, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x437d4(%rip), %rsi     # 0x644f0
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x2, %esi
callq 0x8730
movl -0xc8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc8(%rbp)
jmp 0x20cad
movq -0x10(%rbp), %rdi
movq 0x6721b(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x43b1d(%rip), %rsi     # 0x64881
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x2, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x437ac(%rip), %rsi     # 0x64534
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x2, %esi
callq 0x8730
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x310(%rcx), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movb $0x66, 0x341(%rax,%rcx)
jmp 0x20e2f
movq -0x10(%rbp), %rdi
movq 0x671a5(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x43749(%rip), %rsi     # 0x64523
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x1, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x43bbe(%rip), %rsi     # 0x649bc
callq 0x8400
movq %rax, %rdi
movss -0xbc(%rbp), %xmm0
callq 0x8340
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x310(%rcx), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movb $0x66, 0x341(%rax,%rcx)
jmp 0x210b5
movq -0x18(%rbp), %rdi
leaq 0x43505(%rip), %rsi     # 0x64344
callq 0x1f7a0
testb $0x1, %al
jne 0x20e98
movq -0xe0(%rbp), %rax
movq 0x10(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x28670
callq 0x86e0
movq -0xe0(%rbp), %rax
movsd %xmm0, -0x1a8(%rbp)
movq 0x10(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x28670
movaps %xmm0, %xmm1
movsd -0x1a8(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jne 0x210b3
jp 0x210b3
movq -0x18(%rbp), %rax
testb $0x1, 0x1d2(%rax)
je 0x21043
movq -0x18(%rbp), %rax
testb $0x1, 0x74(%rax)
jne 0x21043
movl $0x0, -0xcc(%rbp)
movq -0x10(%rbp), %rdi
movq 0x670a4(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x4381e(%rip), %rsi     # 0x646f9
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x2, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x43abd(%rip), %rsi     # 0x649bc
callq 0x8400
movq %rax, %rdi
movq -0xb8(%rbp), %rsi
callq 0x87b0
movq -0x18(%rbp), %rdi
addq $0x258, %rdi            # imm = 0x258
addq $0x58, %rdi
leaq 0x4343a(%rip), %rsi     # 0x64363
callq 0x9e30
testb $0x1, %al
jne 0x20f34
jmp 0x20f40
movl $0x0, -0xcc(%rbp)
jmp 0x20f79
movq -0x18(%rbp), %rdi
addq $0x258, %rdi            # imm = 0x258
addq $0x58, %rdi
leaq 0x43418(%rip), %rsi     # 0x6436e
callq 0x9e30
testb $0x1, %al
jne 0x20f61
jmp 0x20f6d
movl $0x1, -0xcc(%rbp)
jmp 0x20f77
movl $0x2, -0xcc(%rbp)
jmp 0x20f79
movl $0x0, -0xd0(%rbp)
movl -0xd0(%rbp), %eax
cmpl -0xcc(%rbp), %eax
jge 0x21025
movq -0x10(%rbp), %rdi
movq 0x66fd0(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x4364d(%rip), %rsi     # 0x645fc
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x2, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x4351d(%rip), %rsi     # 0x644f0
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x2, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x434f9(%rip), %rsi     # 0x644f0
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x2, %esi
callq 0x8730
movl -0xd0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xd0(%rbp)
jmp 0x20f83
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x310(%rcx), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movb $0x69, 0x341(%rax,%rcx)
jmp 0x210b1
movq -0x10(%rbp), %rdi
movq 0x66f22(%rip), %rsi     # 0x87f70
callq 0x8450
movq %rax, %rdi
leaq 0x4369c(%rip), %rsi     # 0x646f9
callq 0x8400
movq %rax, %rdi
movq -0x18(%rbp), %rax
movl 0x310(%rax), %esi
addl $0x1, %esi
callq 0x8730
movq %rax, %rdi
leaq 0x4393b(%rip), %rsi     # 0x649bc
callq 0x8400
movq %rax, %rdi
movq -0xb8(%rbp), %rsi
callq 0x87b0
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x310(%rcx), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movb $0x69, 0x341(%rax,%rcx)
jmp 0x210b3
jmp 0x210b5
jmp 0x210b7
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
jne 0x21127
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
jne 0x21127
movq -0x18(%rbp), %rax
testb $0x1, 0x14d(%rax)
jne 0x21127
movq -0xb8(%rbp), %rax
movl %eax, %edx
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x310(%rcx), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movl %edx, 0x5f8(%rax,%rcx,4)
movss -0xbc(%rbp), %xmm0
movq -0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x310(%rcx), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movss %xmm0, 0xa238(%rax,%rcx,4)
jmp 0x212a4
movq -0xe0(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x21253
movq -0x18(%rbp), %rax
testb $0x1, 0x21b(%rax)
je 0x21253
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
je 0x21253
movq -0x18(%rbp), %rax
testb $0x1, 0x1f8(%rax)
jne 0x21253
movl $0x0, -0xd4(%rbp)
movslq -0xd4(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq -0x18(%rbp), %rdi
addq $0x400, %rdi            # imm = 0x400
callq 0x1f7d0
movq %rax, %rcx
movq -0x1b0(%rbp), %rax
cmpq %rcx, %rax
jae 0x21251
movq -0x18(%rbp), %rdi
addq $0x400, %rdi            # imm = 0x400
movslq -0xd4(%rbp), %rsi
callq 0x1f800
movq %rax, %rdi
movq -0xe0(%rbp), %rax
addq $0x8, %rdi
movq 0x8(%rax), %rsi
callq 0xfd50
testb $0x1, %al
jne 0x211e0
jmp 0x2123b
movq -0x18(%rbp), %rax
movl 0x4ac(%rax), %eax
movl %eax, -0x1b4(%rbp)
movq -0x18(%rbp), %rdi
addq $0x400, %rdi            # imm = 0x400
movslq -0xd4(%rbp), %rsi
callq 0x1f800
movq %rax, %rcx
movl -0x1b4(%rbp), %eax
cmpl (%rcx), %eax
jge 0x21239
movq -0x18(%rbp), %rdi
addq $0x400, %rdi            # imm = 0x400
movslq -0xd4(%rbp), %rsi
callq 0x1f800
movl (%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x4ac(%rax)
jmp 0x21251
jmp 0x2123b
jmp 0x2123d
movl -0xd4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xd4(%rbp)
jmp 0x2117b
jmp 0x212a2
movq -0xe0(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x212a0
movq -0x18(%rbp), %rax
testb $0x1, 0x218(%rax)
jne 0x212a0
movq -0x18(%rbp), %rax
testb $0x1, 0x13e7c(%rax)
jne 0x212a0
movq -0x18(%rbp), %rax
testb $0x1, 0x1d2(%rax)
jne 0x212a0
movq -0xe0(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x18(%rbp), %rdi
addq $0x50, %rdi
callq 0x8060
jmp 0x212a2
jmp 0x212a4
jmp 0x212a6
jmp 0x212a8
addq $0x1c0, %rsp            # imm = 0x1C0
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0x8760
nopw (%rax,%rax)