// File: /workspace/github_cpp_makefile_star2_O3/Eba-M[P]E3DC-Control/RscpExampleMain.cpp
// Function: iModbusTCP()
int iModbusTCP()
{
// jede Minute wird die Temperatur abgefragt, innerhalb 10sec muss die Antwort da sein, ansonsten wird die Verbindug geschlossen.
    static time_t tlast = 0;
    time_t now;
    time(&now);
    static time_t t_OeK;

    Modbus_send Msend;
    printf("ÖK%i",now-t_OeK);
    if ((now-t_OeK)>40)
    {
        if (t_OeK>0&&(now-t_OeK)>300)
            e3dc_config.stop = 100;
        t_OeK = now;
        if (isocket>0)
        {
            SocketClose(isocket);
            isocket = -1;
        }
    }
    if (e3dc_config.debug) printf("ÖKa%i",now-tlast);
    if (brequest||(not brequest&&(now-tlast)>10)) // 10 Sekunden auf die Antwoert warten
    {
        if (isocket <= 0)
        {
            if (e3dc_config.debug) printf("ÖKb%i",now-t_OeK);
            sprintf(server_ip,e3dc_config.heizung_ip);
            if (e3dc_config.debug)
                printf("BSC");
            
            isocket = SocketConnect(server_ip, 502);
            if (e3dc_config.debug)
                printf("ASC");
            iLength = 0;

        }
        if (e3dc_config.debug) printf("ÖKc%i",now-t_OeK);
        if (isocket > 0&&not brequest&&(now-tlast)>10) // Nur alle 10sec Anfrage starten
        {
            tlast = now;
            if (e3dc_config.debug) printf("ÖKd%i",now-t_OeK);
            send.resize(12);
            if (e3dc_config.debug)
                printf("RV");
            receive.resize(1024);
            if (e3dc_config.debug)
                printf("ARV");

// Heizkreise schalten in Abhängigkeit vom EVU und Status des jeweiligen heizkreis
// Wenn WP und oekofen aus sind, dann heizkreise ausschalten
// Wenn WP oder oekofen laufen Heizkreise einschalten
            
            if (temp[13] > 0 && not brequest && (now-t_OeK<20))
// Temperatur Puffer gesetzt?
            {
//  Kessel in Abhängigleit zu Aussentemperatur zu- und abschalten
//  Regelgröße ist die Zulufttemperatur der LWWP
//  daneben die aktuelle Temperatur vom Wetterportal
// und anstatt die Mitteltemperatur die aktuelle Temperatur zur Verifizierung
                if (wolf.size()>0)
                {
                    if (
                        (
                         (now - wolf[wpzl].t < 300)&&wolf[wpzl].wert>-90)
                        &&
                        //                        ((now - wolf[wpal].t < 300)&&wolf[wpal].wert<wolf[wpzl].wert)
                        //                        &&
                        ((now - wolf[wphl].t < 300)&&wolf[wphl].wert>0)
                        
                        )
                        isttemp = wolf[wpzl].wert;
                    if (wetter.size() > 0)
                    {
                        isttemp  = (isttemp  + wetter[0].temp)/2;
                        if (
                            (now - wolf[wpzl].t > 300)||wolf[wpzl].wert<-90
                            )
                            isttemp = wetter[0].temp;
                    }
                    // Wenn die Wolf läuft, dann die Berechnung isttemp mit zulufttemperatur bei Abtaubetrieb aussetzen
                    if (
                        (((now - wolf[wppw].t < 300)&&wolf[wppw].wert>0)
                         ||
                         ((now - wolf[wpalv].t < 300)&&wolf[wpalv].wert>0))
                        &&
                        ((now - wolf[wphl].t < 300)&&wolf[wphl].wert>0)
                        &&
                        ((now - wolf[wpzl].t < 300)&&wolf[wpzl].wert>-90)
                        )
                        isttemp = (wolf[wpzl].wert + wetter[0].temp)/2 + 1;
                    // wenn die WP läuft wird die isttemp um 1° hochgesetzt ???? überprüfen
                    if (isttemp>-99)
                    {
                        if ((isttemp<(e3dc_config.WPZWE))&&temp[17]==0)
                            //                if (temp[0]<(e3dc_config.WPZWE)*10&&temp[17]==0)
                        {
                            iLength  = iModbusTCP_Set(101,1,101); //Heizkessel register 101
                            iLength  = iModbusTCP_Get(101,0,101); //Heizkessel
                            //                    brequest = true;
                        }
                        // Pellets wird nur ausgeschaltet, wenn die WP-Anforderung für die WP da ist
                        if (isttemp>(e3dc_config.WPZWE+2)&&temp[17]==1)
                        {
                            iLength  = iModbusTCP_Set(101,0,101); //Heizkessel
                            iLength  = iModbusTCP_Get(101,0,101); //Heizkessel
                            //                    brequest = true;
                        }
                    }
                }
// Heizkreise schalten nur beim Abtauen nicht oder wenn WP aus
                if (temp[1]==0&&
                    (
//                     ((now - wolf[wphl].t < 300)&&wolf[wphl].wert>0)||
//                     (now - wolf[wphl].t > 300)||
//                     (now - wolf[wppw].t > 300)||
                     (wolf[wpeevk].wert==0)
                     ||
                      (now - wolf[wpbhg].t < 100&&wolf[wpbhg].wert!=6&&temp[17]==0)
//                     ||
//                     ((now - wolf[wppw].t < 300)&&wolf[wppw].wert==0)
                     )
                    &&

                    (
                        ((tasmota_status[0]==0||temp[14]>300)&&bHK1off==0)
                     ||
                        temp[17]>0)
                    )
// EVU Aus und Heizkreis Aus und fbh Anforderung ein -> einschalten
                {
                    iLength  = iModbusTCP_Set(11,1,11); //FBH? register 11
                    iLength  = iModbusTCP_Get(11,1,11); //FBH?
  //                  brequest = true;
                }
                if (temp[7]==0&&
                    (
//                     ((now - wolf[wphl].t < 300)&&wolf[wphl].wert>3)||
//                     (now - wolf[wphl].t > 300)||
//                     (now - wolf[wppw].t > 300)||
                     (wolf[wpeevk].wert==0)
                     ||
                      (now - wolf[wpbhg].t < 100&&wolf[wpbhg].wert!=6&&temp[17]==0)
//                     ||
//                     ((now - wolf[wppw].t < 300)&&wolf[wppw].wert==0)
                     )
                    &&
                    (
                     (
                      (tasmota_status[0]==0||temp[14]>300)&&bHK2off==0
                      )
                     ||temp[17]>0)
                    )
//                if ((tasmota_status[0]==0||temp[17]>0)&&temp[7]==0&&bHK2off==0)
                    // EVU Aus und Heizkreis Aus und WW Anforderung aus -> einschalten
                {
                    iLength  = iModbusTCP_Set(31,1,31); //HZK? register 31
                    iLength  = iModbusTCP_Get(31,1,31); //HZK?
//                    brequest = true;
                } // HK werden nur beim Abtauen abgeschaltet, wenn der pellets nicht läuft
                if (temp[1]==1&&
                    (
                     (tasmota_status[0]==1&&temp[17]==0&&temp[14]<300)
// wenn der Puffer > 30° läuft die FBH nach
                    ||
                     (bHK1off>0)
                    ||
                     ((now - wolf[wphl].t < 300)&&wolf[wphl].wert<0
//                      &&(now - wolf[wppw].t < 300)&&wolf[wppw].wert>0&&temp[17]==0
                      )
                    ||
                     (now - wolf[wpeevk].t < 300&&wolf[wpeevk].wert>0&&temp[17]==0)
                    ||
                     (now - wolf[wpbhg].t < 100&&wolf[wpbhg].wert==6&&temp[17]==0)

                    )
                    )
// EVU aus und Kessel aus ODER fbh Anforderung aus aber  Heizkreis aktiv -> HK ausschalten
                {
                    iLength  = iModbusTCP_Set(11,0,11); //FBH?
                    iLength  = iModbusTCP_Get(11,1,11); //FBH?
//                    brequest = true;
                }
                if (temp[7]==1&&
                    (
                     (tasmota_status[0]==1&&temp[17]==0&&temp[14]<300)
                    ||
                     (bHK2off>0)
                     ||
                      (
                       (now - wolf[wphl].t < 300)&&wolf[wphl].wert<0
//                       &&(now - wolf[wppw].t < 300)&&wolf[wppw].wert>0&&temp[17]==0
                       )
                     ||
                      (now - wolf[wpeevk].t < 300&&wolf[wpeevk].wert>0&&temp[17]==0)
                     ||
                      (now - wolf[wpbhg].t < 100&&wolf[wpbhg].wert==6&&temp[17]==0)
                     )
                    )
// wenn Puffer > 30° läuft die HKZ nach
// EVU aus und Kessel aus ODER WW Anforderung + Heizkreis aktiv -> HK ausschalten
                {
                    iLength  = iModbusTCP_Set(31,0,31); //HZK?
                    iLength  = iModbusTCP_Get(31,1,31); //HZK?
//                    brequest = true;

                }
            }
            {
                if (not brequest||t-t_OeK>30)
                {
                    brequest = false;
                    if (e3dc_config.debug)
                        printf("BGE");
                    iLength = iModbusTCP_Get(2,105,2); // Alle Register auf einmal abfragen
                    if (e3dc_config.debug)
                        printf("AGE");
                    myiLength = iLength;
                }
            }
        }
        else
            if (brequest)
            {
                if (e3dc_config.debug) printf("ÖKd%i",now-t_OeK);
                if (isocket > 0&&iLength < 0)
                    iLength = SocketRecvData(isocket,&receive[0],receive.size());
                if (e3dc_config.debug) printf("ÖKe%i",receive.size());
                if (iLength > 0)
                {
                    if (iLength > 100)
                        t_OeK = now;
                    int x2 = 9;
                    int x3 = 0;
                    x1 = receive[0]; // Startregister tan
                    iRegister = receive[0]; // Startregister tan
//                    x3 = x1;
                    for (x3=0;x3<oekofen.size()&&oekofen[x3] != x1;x3++);
                    
                    if (receive[7]==3)
                        while (x2 < iLength&&x3<oekofen.size())
                        {
//                            if (e3dc_config.debug) printf("ÖKe%i",x3);

                            if (oekofen[x3] == x1) // suchen der gewünschten register
                            {
                                temp[x3] = (receive[x2]*256+receive[x2+1]);
                                x3++;
                            }
                            WWTemp = float(receive[x2]*256+receive[x2+1])/10;
                            x1++;x2++;x2++;
                        }
                    else
                        WWTemp = float(receive[10]*256+receive[11])/10;
                    
                    //                SocketClose(isocket);
                    if (e3dc_config.debug) printf("ÖKf%i",x1);
                    SocketClose(isocket);
                    isocket = -1;
                    brequest = false;
                } else
//                    if (iLength <= 0)
                    {
                        SocketClose(isocket);
                        isocket = -1;
                        brequest = false;
                    }

            }}
    return iLength;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movq %rsp, %rbx
movq %rbx, %rdi
callq 0x2250
movq (%rbx), %rsi
subq 0x352c3(%rip), %rsi     # 0x3ad58
leaq 0x2b0a6(%rip), %rdi     # 0x30b42
xorl %eax, %eax
callq 0x2040
movq (%rbx), %rax
movq 0x352ab(%rip), %rdx     # 0x3ad58
movq %rax, %rcx
subq %rdx, %rcx
cmpq $0x29, %rcx
jl 0x5af4
testq %rdx, %rdx
setle %dl
cmpq $0x12d, %rcx            # imm = 0x12D
setb %cl
orb %dl, %cl
jne 0x5ad4
movb $0x64, 0x34366(%rip)    # 0x39e3a
movq %rax, 0x3527d(%rip)     # 0x3ad58
movl 0x35267(%rip), %edi     # 0x3ad48
testl %edi, %edi
jle 0x5af4
callq 0x2090a
movl $0xffffffff, 0x35254(%rip) # imm = 0xFFFFFFFF
cmpb $0x1, 0x3432a(%rip)     # 0x39e25
jne 0x5b16
movq (%rsp), %rsi
subq 0x35248(%rip), %rsi     # 0x3ad50
leaq 0x2b039(%rip), %rdi     # 0x30b48
xorl %eax, %eax
callq 0x2040
cmpb $0x0, 0x3522f(%rip)     # 0x3ad4c
jne 0x5b34
movq (%rsp), %rax
subq 0x35226(%rip), %rax     # 0x3ad50
cmpq $0xb, %rax
jl 0x601a
cmpl $0x0, 0x3520d(%rip)     # 0x3ad48
movb 0x342e4(%rip), %al      # 0x39e25
jg 0x5bd0
testb $0x1, %al
je 0x5b64
movq (%rsp), %rsi
subq 0x35202(%rip), %rsi     # 0x3ad58
leaq 0x2aff2(%rip), %rdi     # 0x30b4f
xorl %eax, %eax
callq 0x2040
leaq 0x35115(%rip), %rdi     # 0x3ac80
leaq 0x33dae(%rip), %rsi     # 0x39920
xorl %eax, %eax
callq 0x2050
cmpb $0x1, 0x342a5(%rip)     # 0x39e25
jne 0x5b90
leaq 0x2af86(%rip), %rdi     # 0x30b0f
xorl %eax, %eax
callq 0x2040
leaq 0x350e9(%rip), %rdi     # 0x3ac80
movl $0x1f6, %esi            # imm = 0x1F6
callq 0x20617
movl %eax, 0x351a1(%rip)     # 0x3ad48
movb 0x34278(%rip), %al      # 0x39e25
cmpb $0x1, %al
jne 0x5bc5
leaq 0x2af5b(%rip), %rdi     # 0x30b13
xorl %eax, %eax
callq 0x2040
movb 0x34260(%rip), %al      # 0x39e25
movq $0x0, 0x35050(%rip) # 0x3ac20
testb $0x1, %al
je 0x5bed
movq (%rsp), %rsi
subq 0x35179(%rip), %rsi     # 0x3ad58
leaq 0x2af70(%rip), %rdi     # 0x30b56
xorl %eax, %eax
callq 0x2040
movl 0x35155(%rip), %edi     # 0x3ad48
movb 0x35153(%rip), %al      # 0x3ad4c
testl %edi, %edi
jle 0x5e5e
testb $0x1, %al
jne 0x5e66
movq (%rsp), %rsi
movq %rsi, %rax
subq 0x35139(%rip), %rax     # 0x3ad50
cmpq $0xb, %rax
jl 0x601a
movq %rsi, 0x35128(%rip)     # 0x3ad50
cmpb $0x1, 0x341f6(%rip)     # 0x39e25
jne 0x5c46
subq 0x35120(%rip), %rsi     # 0x3ad58
leaq 0x2af1e(%rip), %rdi     # 0x30b5d
xorl %eax, %eax
callq 0x2040
leaq 0x34ff3(%rip), %rdi     # 0x3ac40
movl $0xc, %esi
callq 0x151b2
cmpb $0x1, 0x341c7(%rip)     # 0x39e25
jne 0x5c6e
leaq 0x2aefe(%rip), %rdi     # 0x30b65
xorl %eax, %eax
callq 0x2040
leaq 0x34fe3(%rip), %rdi     # 0x3ac58
movl $0x400, %esi            # imm = 0x400
callq 0x151b2
cmpb $0x1, 0x3419f(%rip)     # 0x39e25
jne 0x5c96
leaq 0x2aed5(%rip), %rdi     # 0x30b64
xorl %eax, %eax
callq 0x2040
cmpw $0x0, 0x350dc(%rip)     # 0x3ad7a
jle 0x6339
movq 0x350ad(%rip), %rax     # 0x3ad58
cmpb $0x0, 0x3509a(%rip)     # 0x3ad4c
jne 0x6349
movq (%rsp), %rdx
movq %rdx, %rcx
subq %rax, %rcx
cmpq $0x13, %rcx
jg 0x6339
movq 0x33725(%rip), %rax     # 0x393f8
cmpq %rax, 0x33726(%rip)     # 0x39400
je 0x60e1
movslq 0x34f01(%rip), %rcx     # 0x3abe8
imulq $0x70, %rcx, %rdi
leaq (%rax,%rdi), %rcx
movq %rdx, %rsi
subq (%rax,%rdi), %rsi
cmpq $0x12b, %rsi            # imm = 0x12B
jg 0x5d40
movss 0x68(%rcx), %xmm0
ucomiss 0x2a6e5(%rip), %xmm0    # 0x303f0
jbe 0x5d40
movslq 0x34ebc(%rip), %rdi     # 0x3abd0
imulq $0x70, %rdi, %rdi
movq %rdx, %r8
subq (%rax,%rdi), %r8
cmpq $0x12b, %r8             # imm = 0x12B
jg 0x5d40
addq %rax, %rdi
movss 0x68(%rdi), %xmm1
xorps %xmm2, %xmm2
ucomiss %xmm2, %xmm1
jbe 0x5d40
movss %xmm0, 0x335c8(%rip)    # 0x39308
movq 0x33699(%rip), %rdi     # 0x393e0
cmpq %rdi, 0x3369a(%rip)     # 0x393e8
je 0x5d90
movss 0x8(%rdi), %xmm0
movss 0x335ab(%rip), %xmm1    # 0x39308
addss %xmm0, %xmm1
mulss 0x2a68b(%rip), %xmm1    # 0x303f4
movss %xmm1, 0x33597(%rip)    # 0x39308
cmpq $0x12c, %rsi            # imm = 0x12C
jg 0x5d88
movss 0x2a66e(%rip), %xmm1    # 0x303f0
ucomiss 0x68(%rcx), %xmm1
jbe 0x5d90
movss %xmm0, 0x33578(%rip)    # 0x39308
movslq 0x34e3d(%rip), %r8      # 0x3abd4
imulq $0x70, %r8, %r8
movq %rdx, %r9
subq (%rax,%r8), %r9
cmpq $0x12b, %r9             # imm = 0x12B
jg 0x5dbc
addq %rax, %r8
movss 0x68(%r8), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
ja 0x5df0
movslq 0x34e29(%rip), %r8      # 0x3abec
imulq $0x70, %r8, %r8
movq %rdx, %r9
subq (%rax,%r8), %r9
cmpq $0x12b, %r9             # imm = 0x12B
jg 0x6027
addq %rax, %r8
movss 0x68(%r8), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x6027
movslq 0x34dd9(%rip), %r8      # 0x3abd0
imulq $0x70, %r8, %r8
subq (%rax,%r8), %rdx
cmpq $0x12b, %rdx            # imm = 0x12B
jg 0x6027
cmpq $0x12b, %rsi            # imm = 0x12B
jg 0x6027
addq %r8, %rax
movss 0x68(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x6027
movss 0x68(%rcx), %xmm0
ucomiss 0x2a5ba(%rip), %xmm0    # 0x303f0
jbe 0x6027
addss 0x8(%rdi), %xmm0
mulss 0x2a5ab(%rip), %xmm0    # 0x303f4
addss 0x2a59b(%rip), %xmm0    # 0x303ec
movss %xmm0, 0x334af(%rip)    # 0x39308
jmp 0x602f
testb $0x1, %al
je 0x601a
cmpb $0x1, 0x33fb8(%rip)     # 0x39e25
jne 0x5e8e
movq (%rsp), %rsi
subq 0x34ede(%rip), %rsi     # 0x3ad58
leaq 0x2acdc(%rip), %rdi     # 0x30b5d
xorl %eax, %eax
callq 0x2040
movl 0x34eba(%rip), %edi     # 0x3ad48
testl %edi, %edi
setg %cl
movq 0x34d86(%rip), %rax     # 0x3ac20
testq %rax, %rax
sets %dl
andb %cl, %dl
cmpb $0x1, %dl
jne 0x5ec4
movq 0x34daa(%rip), %rsi     # 0x3ac58
movl 0x34dac(%rip), %edx     # 0x3ac60
subl %esi, %edx
callq 0x2096d
cltq
movq %rax, 0x34d5c(%rip)     # 0x3ac20
cmpb $0x1, 0x33f5a(%rip)     # 0x39e25
jne 0x5ef0
movq 0x34d8c(%rip), %rsi     # 0x3ac60
subq 0x34d7d(%rip), %rsi     # 0x3ac58
leaq 0x2ac8e(%rip), %rdi     # 0x30b70
xorl %eax, %eax
callq 0x2040
movq 0x34d30(%rip), %rax     # 0x3ac20
testq %rax, %rax
jle 0x5ffe
cmpq $0x65, %rax
jb 0x5f0a
movq (%rsp), %rcx
movq %rcx, 0x34e4e(%rip)     # 0x3ad58
movq 0x34d47(%rip), %rcx     # 0x3ac58
movzbl (%rcx), %esi
movl %esi, 0x34d16(%rip)     # 0x3ac30
leaq 0x33393(%rip), %rdi     # 0x392b4
xorl %edx, %edx
cmpl %esi, (%rdi)
je 0x5f39
incq %rdx
addq $0x4, %rdi
cmpq $0x14, %rdx
jne 0x5f23
movl $0x14, %edx
cmpb $0x3, 0x7(%rcx)
jne 0x5fc8
cmpq $0xa, %rax
jl 0x5fe7
movl $0x9, %edi
leaq 0x3335b(%rip), %r8      # 0x392b4
leaq 0x34e00(%rip), %r9      # 0x3ad60
movss 0x2a49c(%rip), %xmm0    # 0x30404
cmpl $0x13, %edx
ja 0x5fe7
movslq %edx, %rbx
movzbl (%rcx,%rdi), %r10d
movzwl %r10w, %r10d
cmpl (%r8,%rbx,4), %esi
jne 0x5f97
movl %r10d, %ebp
shll $0x8, %ebp
movzbl 0x1(%rcx,%rdi), %r11d
orl %r11d, %ebp
movw %bp, (%r9,%rbx,2)
incl %edx
jmp 0x5f9c
movb 0x1(%rcx,%rdi), %r11b
shll $0x8, %r10d
movzbl %r11b, %r11d
orl %r10d, %r11d
xorps %xmm1, %xmm1
cvtsi2ss %r11d, %xmm1
divss %xmm0, %xmm1
movss %xmm1, 0x33889(%rip)    # 0x39844
incl %esi
addq $0x2, %rdi
cmpq %rdi, %rax
jg 0x5f68
jmp 0x5fe7
movzwl 0xa(%rcx), %eax
rolw $0x8, %ax
movzwl %ax, %eax
cvtsi2ss %eax, %xmm0
divss 0x2a425(%rip), %xmm0    # 0x30404
movss %xmm0, 0x3385d(%rip)    # 0x39844
cmpb $0x1, 0x33e37(%rip)     # 0x39e25
jne 0x5ffe
leaq 0x2ab80(%rip), %rdi     # 0x30b77
xorl %eax, %eax
callq 0x2040
movl 0x34d44(%rip), %edi     # 0x3ad48
callq 0x2090a
movl $0xffffffff, 0x34d35(%rip) # imm = 0xFFFFFFFF
movb $0x0, 0x34d32(%rip)     # 0x3ad4c
movl 0x34c00(%rip), %eax     # 0x3ac20
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
movss 0x332d9(%rip), %xmm0    # 0x39308
ucomiss 0x2a3c2(%rip), %xmm0    # 0x303f8
jbe 0x60e1
movss 0x33ed4(%rip), %xmm1    # 0x39f18
ucomiss %xmm0, %xmm1
seta %cl
movzwl 0x34d31(%rip), %eax     # 0x3ad82
testw %ax, %ax
sete %dl
andb %cl, %dl
cmpb $0x1, %dl
jne 0x60a3
movl $0x65, %edi
movl $0x1, %esi
callq 0x5728
movq %rax, 0x34bac(%rip)     # 0x3ac20
movl $0x65, %edi
xorl %esi, %esi
movl $0x65, %edx
callq 0x590d
movq %rax, 0x34b94(%rip)     # 0x3ac20
movss 0x33274(%rip), %xmm0    # 0x39308
movss 0x33e7c(%rip), %xmm1    # 0x39f18
movzwl 0x34cdf(%rip), %eax     # 0x3ad82
addss 0x2a351(%rip), %xmm1    # 0x303fc
ucomiss %xmm1, %xmm0
jbe 0x60e1
cmpw $0x1, %ax
jne 0x60e1
movl $0x65, %edi
xorl %esi, %esi
callq 0x5728
movq %rax, 0x34b57(%rip)     # 0x3ac20
movl $0x65, %edi
xorl %esi, %esi
movl $0x65, %edx
callq 0x590d
movq %rax, 0x34b3f(%rip)     # 0x3ac20
cmpw $0x0, 0x34c79(%rip)     # 0x3ad62
je 0x63c0
cmpw $0x0, 0x34c77(%rip)     # 0x3ad6e
je 0x645c
cmpw $0x1, 0x34c5d(%rip)     # 0x3ad62
jne 0x621b
cmpl $0x1, 0x331fe(%rip)     # 0x39310
sete %cl
movzwl 0x34c66(%rip), %eax     # 0x3ad82
testw %ax, %ax
sete %dl
andb %cl, %dl
movswl 0x34c51(%rip), %ecx     # 0x3ad7c
cmpl $0x12c, %ecx            # imm = 0x12C
setl %cl
testb %cl, %dl
jne 0x61ed
testb $0x1, 0x34c45(%rip)     # 0x3ad88
jne 0x61ed
movq (%rsp), %rdx
movslq 0x34a7c(%rip), %rsi     # 0x3abd0
movq 0x3329d(%rip), %rcx     # 0x393f8
imulq $0x70, %rsi, %rsi
movq %rdx, %rdi
subq (%rcx,%rsi), %rdi
cmpq $0x12b, %rdi            # imm = 0x12B
jg 0x617b
addq %rcx, %rsi
xorps %xmm0, %xmm0
ucomiss 0x68(%rsi), %xmm0
ja 0x61ed
movslq 0x34a72(%rip), %rsi     # 0x3abf4
imulq $0x70, %rsi, %rsi
movq %rdx, %rdi
subq (%rcx,%rsi), %rdi
cmpq $0x12b, %rdi            # imm = 0x12B
jg 0x61b4
addq %rcx, %rsi
testw %ax, %ax
sete %dil
movss 0x68(%rsi), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
seta %sil
testb %dil, %sil
jne 0x61ed
movslq 0x34a3d(%rip), %rsi     # 0x3abf8
imulq $0x70, %rsi, %rsi
subq (%rcx,%rsi), %rdx
cmpq $0x63, %rdx
jg 0x621b
addq %rsi, %rcx
testw %ax, %ax
sete %al
movss 0x68(%rcx), %xmm0
ucomiss 0x2a222(%rip), %xmm0    # 0x30400
setnp %cl
sete %dl
andb %cl, %dl
andb %al, %dl
cmpb $0x1, %dl
jne 0x621b
movl $0xb, %edi
xorl %esi, %esi
callq 0x5728
movq %rax, 0x34a20(%rip)     # 0x3ac20
movl $0xb, %edi
movl $0x1, %esi
movl $0xb, %edx
callq 0x590d
movq %rax, 0x34a05(%rip)     # 0x3ac20
cmpw $0x1, 0x34b4b(%rip)     # 0x3ad6e
jne 0x6339
cmpl $0x1, 0x330e0(%rip)     # 0x39310
sete %cl
movzwl 0x34b48(%rip), %eax     # 0x3ad82
testw %ax, %ax
sete %dl
andb %cl, %dl
movswl 0x34b33(%rip), %ecx     # 0x3ad7c
cmpl $0x12c, %ecx            # imm = 0x12C
setl %cl
testb %cl, %dl
jne 0x630b
testb $0x1, 0x34b2b(%rip)     # 0x3ad8c
jne 0x630b
movq (%rsp), %rdx
movslq 0x3495e(%rip), %rsi     # 0x3abd0
movq 0x3317f(%rip), %rcx     # 0x393f8
imulq $0x70, %rsi, %rsi
movq %rdx, %rdi
subq (%rcx,%rsi), %rdi
cmpq $0x12b, %rdi            # imm = 0x12B
jg 0x6299
addq %rcx, %rsi
xorps %xmm0, %xmm0
ucomiss 0x68(%rsi), %xmm0
ja 0x630b
movslq 0x34954(%rip), %rsi     # 0x3abf4
imulq $0x70, %rsi, %rsi
movq %rdx, %rdi
subq (%rcx,%rsi), %rdi
cmpq $0x12b, %rdi            # imm = 0x12B
jg 0x62d2
addq %rcx, %rsi
testw %ax, %ax
sete %dil
movss 0x68(%rsi), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
seta %sil
testb %dil, %sil
jne 0x630b
movslq 0x3491f(%rip), %rsi     # 0x3abf8
imulq $0x70, %rsi, %rsi
subq (%rcx,%rsi), %rdx
cmpq $0x63, %rdx
jg 0x6339
addq %rsi, %rcx
testw %ax, %ax
sete %al
movss 0x68(%rcx), %xmm0
ucomiss 0x2a104(%rip), %xmm0    # 0x30400
setnp %cl
sete %dl
andb %cl, %dl
andb %al, %dl
cmpb $0x1, %dl
jne 0x6339
movl $0x1f, %edi
xorl %esi, %esi
callq 0x5728
movq %rax, 0x34902(%rip)     # 0x3ac20
movl $0x1f, %edi
movl $0x1, %esi
movl $0x1f, %edx
callq 0x590d
movq %rax, 0x348e7(%rip)     # 0x3ac20
cmpb $0x1, 0x34a0c(%rip)     # 0x3ad4c
jne 0x635d
movq 0x34a0f(%rip), %rax     # 0x3ad58
movq 0x34868(%rip), %rcx     # 0x3abb8
subq %rax, %rcx
cmpq $0x1f, %rcx
jl 0x601a
movb $0x0, 0x349e8(%rip)     # 0x3ad4c
cmpb $0x1, 0x33aba(%rip)     # 0x39e25
jne 0x637b
leaq 0x2a7f4(%rip), %rdi     # 0x30b68
xorl %eax, %eax
callq 0x2040
movl $0x2, %edi
movl $0x69, %esi
movl $0x2, %edx
callq 0x590d
movq %rax, 0x3488a(%rip)     # 0x3ac20
cmpb $0x1, 0x33a88(%rip)     # 0x39e25
jne 0x63b4
leaq 0x2a7c6(%rip), %rdi     # 0x30b6c
xorl %eax, %eax
callq 0x2040
movq 0x3486c(%rip), %rax     # 0x3ac20
movq %rax, 0x3486d(%rip)     # 0x3ac28
jmp 0x601a
movslq 0x3482d(%rip), %rcx     # 0x3abf4
movq 0x3302a(%rip), %rax     # 0x393f8
imulq $0x70, %rcx, %rcx
movss 0x68(%rax,%rcx), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x64f8
jp 0x64f8
cmpw $0x0, 0x34990(%rip)     # 0x3ad82
setg %al
cmpl $0x0, 0x32f14(%rip)     # 0x39310
sete %cl
movswl 0x34976(%rip), %edx     # 0x3ad7c
cmpl $0x12d, %edx            # imm = 0x12D
setge %dl
orb %cl, %dl
movb 0x34971(%rip), %cl      # 0x3ad88
xorb $0x1, %cl
testb %cl, %dl
jne 0x6426
testb %al, %al
je 0x60ef
movl $0xb, %edi
movl $0x1, %esi
callq 0x5728
movq %rax, 0x347e4(%rip)     # 0x3ac20
movl $0xb, %edi
movl $0x1, %esi
movl $0xb, %edx
callq 0x590d
movq %rax, 0x347c9(%rip)     # 0x3ac20
jmp 0x60ef
movslq 0x34791(%rip), %rcx     # 0x3abf4
movq 0x32f8e(%rip), %rax     # 0x393f8
imulq $0x70, %rcx, %rcx
movss 0x68(%rax,%rcx), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x6541
jp 0x6541
cmpw $0x0, 0x348f4(%rip)     # 0x3ad82
setg %al
cmpl $0x0, 0x32e78(%rip)     # 0x39310
sete %cl
movswl 0x348da(%rip), %edx     # 0x3ad7c
cmpl $0x12d, %edx            # imm = 0x12D
setge %dl
orb %cl, %dl
movb 0x348d9(%rip), %cl      # 0x3ad8c
xorb $0x1, %cl
testb %cl, %dl
jne 0x64c2
testb %al, %al
je 0x60fd
movl $0x1f, %edi
movl $0x1, %esi
callq 0x5728
movq %rax, 0x34748(%rip)     # 0x3ac20
movl $0x1f, %edi
movl $0x1, %esi
movl $0x1f, %edx
callq 0x590d
movq %rax, 0x3472d(%rip)     # 0x3ac20
jmp 0x60fd
movq (%rsp), %rdx
movslq 0x346f5(%rip), %rcx     # 0x3abf8
imulq $0x70, %rcx, %rcx
subq (%rax,%rcx), %rdx
cmpq $0x63, %rdx
jg 0x60ef
addq %rcx, %rax
movss 0x68(%rax), %xmm0
ucomiss 0x29edc(%rip), %xmm0    # 0x30400
jne 0x652c
jnp 0x60ef
cmpw $0x0, 0x3484e(%rip)     # 0x3ad82
jne 0x60ef
xorl %eax, %eax
jmp 0x63f5
movq (%rsp), %rdx
movslq 0x346ac(%rip), %rcx     # 0x3abf8
imulq $0x70, %rcx, %rcx
subq (%rax,%rcx), %rdx
cmpq $0x63, %rdx
jg 0x60fd
addq %rcx, %rax
movss 0x68(%rax), %xmm0
ucomiss 0x29e93(%rip), %xmm0    # 0x30400
jne 0x6575
jnp 0x60fd
cmpw $0x0, 0x34805(%rip)     # 0x3ad82
jne 0x60fd
xorl %eax, %eax
jmp 0x6491