// File: /workspace/github_cpp_makefile_star2_O3/kelwinfc[P]ci4721-Fernandez-Gyomrey/src/AST/constant_folding.cpp
// Function: AST_op::constant_folding()
AST_expression* AST_op::constant_folding(){
    
    if (    !left->is_constant
         || !right->is_constant 
         || (typeid(*left) != typeid(*right))
       )
    {
        return this;
    }
    
    bool equals = false;
    
    switch( oper_type ){
        
        case MOD:
            if ( typeid(*left) == typeid(AST_int) ){
                tokenInt* tk = new tokenInt( left->line, left->column,
                                             (char*)"0");
                AST_int* sol = new AST_int(tk);
                sol->value = ((AST_int*)left)->value % ((AST_int*)right)->value;
                
                return sol;
            }
            break;
            
        /* Operadores aritmeticos: suma, resta, multiplicacion y division */
        case PLUS:
        case MINUS:
        case PROD:
        case DIV:
            
            if ( typeid(*left) == typeid(AST_int) ){
                tokenInt* tk = new tokenInt( left->line, left->column,
                                             (char*)"0");
                AST_int* sol = new AST_int(tk);
                switch( oper_type ){
                    case PLUS:
                        sol->value = 
                            ((AST_int*)left)->value + ((AST_int*)right)->value;
                        break;
                    case MINUS:
                        sol->value = 
                            ((AST_int*)left)->value - ((AST_int*)right)->value;
                        break;
                    case PROD:
                        sol->value = 
                            ((AST_int*)left)->value * ((AST_int*)right)->value;
                        break;
                    case DIV:
                        sol->value = 
                            ((AST_int*)left)->value / ((AST_int*)right)->value;
                        break;
                    default:
                        break;
                }
                return sol;
                
            } else if ( typeid(*left) == typeid(AST_float) ){
                tokenFloat* tk = new tokenFloat( left->line, left->column,
                                                 (char*)"0.0");
                AST_float* sol = new AST_float(tk);
                sol->value = ((AST_float*)left)->value + 
                                ((AST_float*)right)->value;
                                
                switch( oper_type ){
                    case PLUS:
                        sol->value = ((AST_float*)left)->value 
                                        + ((AST_float*)right)->value;
                        break;
                    case MINUS:
                        sol->value = ((AST_float*)left)->value 
                                        - ((AST_float*)right)->value;
                        break;
                    case PROD:
                        sol->value = ((AST_float*)left)->value 
                                        * ((AST_float*)right)->value;
                        break;
                    case DIV:
                        sol->value = ((AST_float*)left)->value 
                                        / ((AST_float*)right)->value;
                        break;
                    default:
                        break;
                }
                
                return sol;
            }
            
            break;
        
        /* Operadores logicos: y, o, implica, consecuencia */
        case AND:
        case OR:
        case IMP:
        case CONSEQ:
            
            if ( typeid(*left) == typeid(AST_boolean) ){
                tokenBoolean* tk = new tokenBoolean( left->line, left->column,
                                             (char*)"true");
                AST_boolean* sol = new AST_boolean(tk);
                switch( oper_type ){
                    case AND:
                        sol->value = ((AST_boolean*)left)->value 
                                        && ((AST_boolean*)right)->value;
                        break;
                    case OR:
                        sol->value = ((AST_boolean*)left)->value 
                                        || ((AST_boolean*)right)->value;
                        break;
                    case IMP:
                        sol->value = !((AST_boolean*)left)->value 
                                        || ((AST_boolean*)right)->value;
                        break;
                    case CONSEQ:
                        sol->value = ((AST_boolean*)left)->value 
                                        || !((AST_boolean*)right)->value;
                        break;
                    default:
                        break;
                }
                
                return sol;
            }
        
        /* Operadores de comparación de igualdad: ==, != */
        case EQ:
            equals = true;
        case UNEQ:
            
            {
            tokenBoolean* tk = 
                new tokenBoolean(left->line,left->column,(char*)"true");
            AST_boolean* sol = new AST_boolean(tk);
            
            if ( typeid(*left) == typeid(AST_int) ){
                sol->value = equals == ( ((AST_int*)left)->value 
                                            == ((AST_int*)right)->value );
            } else if ( typeid(*left) == typeid(AST_float) ){
                sol->value = equals == ( ((AST_float*)left)->value 
                                            == ((AST_float*)right)->value );
            } else if ( typeid(*left) == typeid(AST_char) ){
                sol->value = equals == ( ((AST_char*)left)->value 
                                            == ((AST_char*)right)->value );
            } else if ( typeid(*left) == typeid(AST_boolean) ){
                sol->value = equals == ( ((AST_boolean*)left)->value 
                                            == ((AST_boolean*)right)->value );
            } else {
                delete sol;
                return this;
            }
            
            return sol;
            }
            
        /* Operadores de relación de orden: <, <=, >, >= */
        case LESS:
            
            {
            tokenBoolean* tk = 
                new tokenBoolean(left->line,left->column,(char*)"true");
            AST_boolean* sol = new AST_boolean(tk);
            
            if ( typeid(*left) == typeid(AST_int) ){
                sol->value = ((AST_int*)left)->value 
                                            < ((AST_int*)right)->value;
            } else if ( typeid(*left) == typeid(AST_float) ){
                sol->value = ((AST_float*)left)->value 
                                            < ((AST_float*)right)->value;
            } else if ( typeid(*left) == typeid(AST_char) ){
                sol->value = ((AST_char*)left)->value 
                                            < ((AST_char*)right)->value;
            } else {
                delete sol;
                return this;
            }
            
            return sol;
            }
            
        case LESS_EQ:
            
            {
            tokenBoolean* tk = 
                new tokenBoolean(left->line,left->column,(char*)"true");
            AST_boolean* sol = new AST_boolean(tk);
            
            if ( typeid(*left) == typeid(AST_int) ){
                sol->value = ((AST_int*)left)->value 
                                            <= ((AST_int*)right)->value;
            } else if ( typeid(*left) == typeid(AST_float) ){
                sol->value = ((AST_float*)left)->value 
                                            <= ((AST_float*)right)->value;
            } else if ( typeid(*left) == typeid(AST_char) ){
                sol->value = ((AST_char*)left)->value 
                                            <= ((AST_char*)right)->value;
            } else {
                delete sol;
                return this;
            }
            
            return sol;
            }
            
        case GREAT:
            
            {
            tokenBoolean* tk = 
                new tokenBoolean(left->line,left->column,(char*)"true");
            AST_boolean* sol = new AST_boolean(tk);
            
            if ( typeid(*left) == typeid(AST_int) ){
                sol->value = ((AST_int*)left)->value 
                                            > ((AST_int*)right)->value;
            } else if ( typeid(*left) == typeid(AST_float) ){
                sol->value = ((AST_float*)left)->value 
                                            > ((AST_float*)right)->value;
            } else if ( typeid(*left) == typeid(AST_char) ){
                sol->value = ((AST_char*)left)->value 
                                            > ((AST_char*)right)->value;
            } else {
                delete sol;
                return this;
            }
            
            return sol;
            }
            
        case GREAT_EQ:
            
            {
            tokenBoolean* tk = 
                new tokenBoolean(left->line,left->column,(char*)"true");
            AST_boolean* sol = new AST_boolean(tk);
            
            if ( typeid(*left) == typeid(AST_int) ){
                sol->value = ((AST_int*)left)->value 
                                            >= ((AST_int*)right)->value;
            } else if ( typeid(*left) == typeid(AST_float) ){
                sol->value = ((AST_float*)left)->value 
                                            >= ((AST_float*)right)->value;
            } else if ( typeid(*left) == typeid(AST_char) ){
                sol->value = ((AST_char*)left)->value 
                                            >= ((AST_char*)right)->value;
            } else {
                delete sol;
                return this;
            }
            
            return sol;
            }
            
            break;
    }
    
    return this;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
movq 0x58(%rdi), %r12
cmpb $0x1, 0x14(%r12)
jne 0xdbef
movq 0x60(%rbx), %rax
cmpb $0x1, 0x14(%rax)
jne 0xdbef
movq (%r12), %rcx
movq -0x8(%rcx), %rcx
movq (%rax), %rax
movq -0x8(%rax), %rax
movq 0x8(%rcx), %r14
movq 0x8(%rax), %rsi
cmpq %rsi, %r14
je 0xdbfe
cmpb $0x2a, (%r14)
je 0xdbef
movq %r14, %rdi
callq 0x6410
testl %eax, %eax
je 0xdbfe
movq %rbx, %r14
movq %r14, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movl 0x68(%rbx), %eax
cmpq $0xe, %rax
ja 0xdbef
leaq 0x1f532(%rip), %rcx     # 0x2d140
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x1f62b(%rip), %rax     # 0x2d249
cmpq %rax, %r14
je 0xdda4
cmpb $0x2a, (%r14)
jne 0xdce8
leaq 0x1f62b(%rip), %rax     # 0x2d263
cmpq %rax, %r14
jne 0xdbef
jmp 0xdd22
leaq 0x1f625(%rip), %rax     # 0x2d26e
cmpq %rax, %r14
je 0xdc71
cmpb $0x2a, (%r14)
je 0xdc67
leaq 0x1f613(%rip), %rsi     # 0x2d26e
movq %r14, %rdi
callq 0x6410
testl %eax, %eax
je 0xdc71
movl $0x1, %ebp
jmp 0xde14
movl $0xc, %edi
callq 0x62f0
movq %rax, %r15
movl 0x8(%r12), %esi
movl 0xc(%r12), %edx
leaq 0x1f375(%rip), %rcx     # 0x2d004
movq %rax, %rdi
callq 0x6c40
movl $0x50, %edi
callq 0x62f0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x14984
movl 0x68(%rbx), %eax
addl $-0x5, %eax
cmpl $0x3, %eax
ja 0xdbf2
leaq 0x1f4b7(%rip), %rcx     # 0x2d17c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x58(%rbx), %rax
cmpb $0x1, 0x48(%rax)
jne 0xe5a0
movq 0x60(%rbx), %rax
movb 0x48(%rax), %al
jmp 0xe5a2
leaq 0x1f55a(%rip), %rsi     # 0x2d249
movq %r14, %rdi
callq 0x6410
testl %eax, %eax
je 0xdda4
leaq 0x1f55d(%rip), %rax     # 0x2d263
cmpq %rax, %r14
je 0xdd22
leaq 0x1f551(%rip), %rsi     # 0x2d263
movq %r14, %rdi
callq 0x6410
testl %eax, %eax
jne 0xdbef
movl $0xc, %edi
callq 0x62f0
movq %rax, %r15
movl 0x8(%r12), %esi
movl 0xc(%r12), %edx
leaq 0x20219(%rip), %rcx     # 0x2df59
movq %rax, %rdi
callq 0x6c24
movl $0x50, %edi
callq 0x62f0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x1492c
movq 0x58(%rbx), %rcx
movq 0x60(%rbx), %rax
movss 0x48(%rcx), %xmm0
addss 0x48(%rax), %xmm0
movss %xmm0, 0x48(%r14)
movl 0x68(%rbx), %edx
cmpq $0x3, %rdx
ja 0xdbf2
leaq 0x1f400(%rip), %rsi     # 0x2d18c
movslq (%rsi,%rdx,4), %rdx
addq %rsi, %rdx
jmpq *%rdx
movss 0x48(%rcx), %xmm0
addss 0x48(%rax), %xmm0
jmp 0xe5cd
movl $0xc, %edi
callq 0x62f0
movq %rax, %r15
movl 0x8(%r12), %esi
movl 0xc(%r12), %edx
leaq 0x20199(%rip), %rcx     # 0x2df5b
movq %rax, %rdi
callq 0x6cea
movl $0x50, %edi
callq 0x62f0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x148d8
movl 0x68(%rbx), %eax
cmpq $0x3, %rax
ja 0xdbf2
leaq 0x1f3a6(%rip), %rcx     # 0x2d19c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x58(%rbx), %rax
movq 0x60(%rbx), %rcx
movl 0x48(%rcx), %ecx
addl 0x48(%rax), %ecx
jmp 0xe2ef
xorl %ebp, %ebp
movl $0xc, %edi
callq 0x62f0
movq %rax, %r15
movl 0x8(%r12), %esi
movl 0xc(%r12), %edx
leaq 0x1f1d2(%rip), %rcx     # 0x2d004
movq %rax, %rdi
callq 0x6c40
movl $0x50, %edi
callq 0x62f0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x14984
movq 0x58(%rbx), %r15
testq %r15, %r15
je 0xe5d8
movq (%r15), %rax
movq -0x8(%rax), %rax
movq 0x8(%rax), %r12
leaq 0x1f3d8(%rip), %rax     # 0x2d249
cmpq %rax, %r12
je 0xdf52
movb (%r12), %al
cmpb $0x2a, %al
jne 0xdebb
leaq 0x1f3da(%rip), %rcx     # 0x2d263
cmpq %rcx, %r12
je 0xe259
leaq 0x1f3e3(%rip), %rcx     # 0x2d27c
cmpq %rcx, %r12
je 0xe272
leaq 0x1f3c5(%rip), %rcx     # 0x2d26e
cmpq %rcx, %r12
je 0xdf43
cmpb $0x2a, %al
jne 0xdf2c
jmp 0xe23f
leaq 0x1f387(%rip), %rsi     # 0x2d249
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
je 0xdf52
leaq 0x1f38a(%rip), %rax     # 0x2d263
cmpq %rax, %r12
je 0xe259
leaq 0x1f37a(%rip), %rsi     # 0x2d263
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
je 0xe259
leaq 0x1f37c(%rip), %rax     # 0x2d27c
cmpq %rax, %r12
je 0xe272
leaq 0x1f36c(%rip), %rsi     # 0x2d27c
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
je 0xe272
leaq 0x1f347(%rip), %rax     # 0x2d26e
cmpq %rax, %r12
je 0xdf43
leaq 0x1f33b(%rip), %rsi     # 0x2d26e
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
jne 0xe23f
movb 0x48(%r15), %al
movq 0x60(%rbx), %rcx
xorl %edx, %edx
cmpb 0x48(%rcx), %al
jmp 0xdf5f
movl 0x48(%r15), %eax
movq 0x60(%rbx), %rcx
xorl %edx, %edx
cmpl 0x48(%rcx), %eax
sete %dl
cmpl %edx, %ebp
jmp 0xe28b
movl $0xc, %edi
callq 0x62f0
movq %rax, %r15
movl 0x8(%r12), %esi
movl 0xc(%r12), %edx
leaq 0x1f07d(%rip), %rcx     # 0x2d004
movq %rax, %rdi
callq 0x6c40
movl $0x50, %edi
callq 0x62f0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x14984
movq 0x58(%rbx), %r15
testq %r15, %r15
je 0xe5d8
movq (%r15), %rax
movq -0x8(%rax), %rax
movq 0x8(%rax), %r12
leaq 0x1f283(%rip), %rax     # 0x2d249
cmpq %rax, %r12
je 0xe396
cmpb $0x2a, (%r12)
jne 0xe320
leaq 0x1f282(%rip), %rax     # 0x2d263
cmpq %rax, %r12
je 0xe550
leaq 0x1f28b(%rip), %rax     # 0x2d27c
cmpq %rax, %r12
jne 0xe23f
jmp 0xe37d
leaq 0x1f243(%rip), %rax     # 0x2d249
cmpq %rax, %r14
je 0xe02c
cmpb $0x2a, (%r14)
je 0xdbef
leaq 0x1f22d(%rip), %rsi     # 0x2d249
movq %r14, %rdi
callq 0x6410
testl %eax, %eax
jne 0xdbef
movl $0xc, %edi
callq 0x62f0
movq %rax, %r15
movl 0x8(%r12), %esi
movl 0xc(%r12), %edx
leaq 0x1ff11(%rip), %rcx     # 0x2df5b
movq %rax, %rdi
callq 0x6cea
movl $0x50, %edi
callq 0x62f0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x148d8
movq 0x58(%rbx), %rax
movq 0x60(%rbx), %rcx
movl 0x48(%rax), %eax
cltd
idivl 0x48(%rcx)
movl %edx, 0x48(%r14)
jmp 0xdbf2
movl $0xc, %edi
callq 0x62f0
movq %rax, %r15
movl 0x8(%r12), %esi
movl 0xc(%r12), %edx
leaq 0x1ef64(%rip), %rcx     # 0x2d004
movq %rax, %rdi
callq 0x6c40
movl $0x50, %edi
callq 0x62f0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x14984
movq 0x58(%rbx), %r15
testq %r15, %r15
je 0xe5d8
movq (%r15), %rax
movq -0x8(%rax), %rax
movq 0x8(%rax), %r12
leaq 0x1f16a(%rip), %rax     # 0x2d249
cmpq %rax, %r12
je 0xe421
cmpb $0x2a, (%r12)
jne 0xe3ab
leaq 0x1f169(%rip), %rax     # 0x2d263
cmpq %rax, %r12
je 0xe560
leaq 0x1f172(%rip), %rax     # 0x2d27c
cmpq %rax, %r12
jne 0xe23f
jmp 0xe408
movl $0xc, %edi
callq 0x62f0
movq %rax, %r15
movl 0x8(%r12), %esi
movl 0xc(%r12), %edx
leaq 0x1eece(%rip), %rcx     # 0x2d004
movq %rax, %rdi
callq 0x6c40
movl $0x50, %edi
callq 0x62f0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x14984
movq 0x58(%rbx), %r15
testq %r15, %r15
je 0xe5d8
movq (%r15), %rax
movq -0x8(%rax), %rax
movq 0x8(%rax), %r12
leaq 0x1f0d4(%rip), %rax     # 0x2d249
cmpq %rax, %r12
je 0xe4ac
cmpb $0x2a, (%r12)
jne 0xe436
leaq 0x1f0d3(%rip), %rax     # 0x2d263
cmpq %rax, %r12
je 0xe570
leaq 0x1f0dc(%rip), %rax     # 0x2d27c
cmpq %rax, %r12
jne 0xe23f
jmp 0xe493
movl $0xc, %edi
callq 0x62f0
movq %rax, %r15
movl 0x8(%r12), %esi
movl 0xc(%r12), %edx
leaq 0x1ee38(%rip), %rcx     # 0x2d004
movq %rax, %rdi
callq 0x6c40
movl $0x50, %edi
callq 0x62f0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x14984
movq 0x58(%rbx), %r15
testq %r15, %r15
je 0xe5d8
movq (%r15), %rax
movq -0x8(%rax), %rax
movq 0x8(%rax), %r12
leaq 0x1f03e(%rip), %rax     # 0x2d249
cmpq %rax, %r12
je 0xe53b
cmpb $0x2a, (%r12)
jne 0xe4c1
leaq 0x1f03d(%rip), %rax     # 0x2d263
cmpq %rax, %r12
je 0xe588
leaq 0x1f046(%rip), %rax     # 0x2d27c
cmpq %rax, %r12
je 0xe51e
movq %r14, %rdi
callq 0x16940
movl $0x50, %esi
movq %r14, %rdi
callq 0x6300
jmp 0xdbef
movq 0x60(%rbx), %rax
movss 0x48(%rax), %xmm0
cmpeqss 0x48(%r15), %xmm0
movd %xmm0, %eax
andl $0x1, %eax
jmp 0xe289
addq $0x48, %r15
movq 0x60(%rbx), %rsi
addq $0x48, %rsi
movq %r15, %rdi
callq 0x16804
movzbl %al, %eax
cmpl %eax, %ebp
sete 0x48(%r14)
jmp 0xdbf2
movq 0x58(%rbx), %rcx
movb $0x1, %al
cmpb $0x1, 0x48(%rcx)
je 0xe2d4
jmp 0xe532
movq 0x58(%rbx), %rcx
movb $0x1, %al
cmpb $0x0, 0x48(%rcx)
jne 0xe532
movq 0x60(%rbx), %rax
movb 0x48(%rax), %al
xorb $0x1, %al
jmp 0xe532
movq 0x58(%rbx), %rcx
movb $0x1, %al
cmpb $0x0, 0x48(%rcx)
jne 0xe532
movq 0x60(%rbx), %rax
movb 0x48(%rax), %al
jmp 0xe532
movq 0x58(%rbx), %rax
movq 0x60(%rbx), %rcx
movl 0x48(%rcx), %ecx
imull 0x48(%rax), %ecx
movl %ecx, 0x48(%r14)
jmp 0xdbf2
movq 0x58(%rbx), %rax
movq 0x60(%rbx), %rcx
movl 0x48(%rax), %eax
cltd
idivl 0x48(%rcx)
jmp 0xe317
movq 0x58(%rbx), %rax
movq 0x60(%rbx), %rcx
movl 0x48(%rax), %eax
subl 0x48(%rcx), %eax
movl %eax, 0x48(%r14)
jmp 0xdbf2
leaq 0x1ef22(%rip), %rsi     # 0x2d249
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
je 0xe396
leaq 0x1ef29(%rip), %rax     # 0x2d263
cmpq %rax, %r12
je 0xe550
leaq 0x1ef19(%rip), %rsi     # 0x2d263
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
je 0xe550
leaq 0x1ef1b(%rip), %rax     # 0x2d27c
cmpq %rax, %r12
je 0xe37d
leaq 0x1ef0f(%rip), %rsi     # 0x2d27c
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
jne 0xe23f
addq $0x48, %r15
movq 0x60(%rbx), %rsi
addq $0x48, %rsi
movq %r15, %rdi
callq 0x1686c
jmp 0xe532
movl 0x48(%r15), %eax
movq 0x60(%rbx), %rcx
cmpl 0x48(%rcx), %eax
setge 0x48(%r14)
jmp 0xdbf2
leaq 0x1ee97(%rip), %rsi     # 0x2d249
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
je 0xe421
leaq 0x1ee9e(%rip), %rax     # 0x2d263
cmpq %rax, %r12
je 0xe560
leaq 0x1ee8e(%rip), %rsi     # 0x2d263
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
je 0xe560
leaq 0x1ee90(%rip), %rax     # 0x2d27c
cmpq %rax, %r12
je 0xe408
leaq 0x1ee84(%rip), %rsi     # 0x2d27c
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
jne 0xe23f
addq $0x48, %r15
movq 0x60(%rbx), %rsi
addq $0x48, %rsi
movq %r15, %rdi
callq 0x1682f
jmp 0xe532
movl 0x48(%r15), %eax
movq 0x60(%rbx), %rcx
cmpl 0x48(%rcx), %eax
setl 0x48(%r14)
jmp 0xdbf2
leaq 0x1ee0c(%rip), %rsi     # 0x2d249
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
je 0xe4ac
leaq 0x1ee13(%rip), %rax     # 0x2d263
cmpq %rax, %r12
je 0xe570
leaq 0x1ee03(%rip), %rsi     # 0x2d263
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
je 0xe570
leaq 0x1ee05(%rip), %rax     # 0x2d27c
cmpq %rax, %r12
je 0xe493
leaq 0x1edf9(%rip), %rsi     # 0x2d27c
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
jne 0xe23f
addq $0x48, %r15
movq 0x60(%rbx), %rsi
addq $0x48, %rsi
movq %r15, %rdi
callq 0x16842
jmp 0xe532
movl 0x48(%r15), %eax
movq 0x60(%rbx), %rcx
cmpl 0x48(%rcx), %eax
setle 0x48(%r14)
jmp 0xdbf2
leaq 0x1ed81(%rip), %rsi     # 0x2d249
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
je 0xe53b
leaq 0x1ed88(%rip), %rax     # 0x2d263
cmpq %rax, %r12
je 0xe588
leaq 0x1ed78(%rip), %rsi     # 0x2d263
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
je 0xe588
leaq 0x1ed7a(%rip), %rax     # 0x2d27c
cmpq %rax, %r12
je 0xe51e
leaq 0x1ed6e(%rip), %rsi     # 0x2d27c
movq %r12, %rdi
callq 0x6410
testl %eax, %eax
jne 0xe23f
addq $0x48, %r15
movq 0x60(%rbx), %rsi
addq $0x48, %rsi
movq %r15, %rdi
callq 0x16857
movb %al, 0x48(%r14)
jmp 0xdbf2
movl 0x48(%r15), %eax
movq 0x60(%rbx), %rcx
cmpl 0x48(%rcx), %eax
setg 0x48(%r14)
jmp 0xdbf2
movss 0x48(%r15), %xmm0
movq 0x60(%rbx), %rax
ucomiss 0x48(%rax), %xmm0
jmp 0xe57e
movq 0x60(%rbx), %rax
movss 0x48(%rax), %xmm0
ucomiss 0x48(%r15), %xmm0
jmp 0xe596
movq 0x60(%rbx), %rax
movss 0x48(%rax), %xmm0
ucomiss 0x48(%r15), %xmm0
setae 0x48(%r14)
jmp 0xdbf2
movss 0x48(%r15), %xmm0
movq 0x60(%rbx), %rax
ucomiss 0x48(%rax), %xmm0
seta 0x48(%r14)
jmp 0xdbf2
xorl %eax, %eax
movb %al, 0x48(%r14)
jmp 0xdbf2
movss 0x48(%rcx), %xmm0
mulss 0x48(%rax), %xmm0
jmp 0xe5cd
movss 0x48(%rcx), %xmm0
divss 0x48(%rax), %xmm0
jmp 0xe5cd
movss 0x48(%rcx), %xmm0
subss 0x48(%rax), %xmm0
movss %xmm0, 0x48(%r14)
jmp 0xdbf2
callq 0x6350
jmp 0xe5ed
jmp 0xe5ed
jmp 0xe5ed
jmp 0xe5ed
jmp 0xe5ed
jmp 0xe5ed
jmp 0xe5ed
jmp 0xe5ed
movq %rax, %rbx
movl $0xc, %esi
movq %r15, %rdi
callq 0x6300
movq %rbx, %rdi
callq 0x6560
nop