// File: /workspace/github_cpp_makefile_star2_O1/bummelbaerchen[P]e3dc/RscpExampleMain.cpp
// Function: LoadDataProcess(SRscpFrameBuffer*)
int LoadDataProcess(SRscpFrameBuffer * frameBuffer) {
//    const int cLadezeitende1 = 12.5*3600;  // Sommerzeit -2h da GMT = MEZ - 2
    printf("\n");
    tm *ts;
    ts = gmtime(&tE3DC);
    if (tE3DC % (24*3600)<t) {fSavedyesderday=fSavedtoday; fSavedtoday=0;}
    t = tE3DC % (24*3600);
    float fLadeende = e3dc_config.ladeende;
    int cLadezeitende1 = (e3dc_config.winterminimum+(e3dc_config.sommermaximum-e3dc_config.winterminimum)/2)*3600;
    int cLadezeitende2 = (e3dc_config.winterminimum+(e3dc_config.sommerladeende-e3dc_config.winterminimum)/2)*3600;

    time_t tLadezeitende,tLadezeitende2;  // dynamische Ladezeitberechnung aus dem Cosinus des lfd Tages. 23 Dez = Minimum, 23 Juni = Maximum
    int32_t tZeitgleichung;
    tLadezeitende = cLadezeitende1+cos((ts->tm_yday+9)*2*3.14/365)*-((e3dc_config.sommermaximum-e3dc_config.winterminimum)/2)*3600;
    tLadezeitende2 = cLadezeitende2+cos((ts->tm_yday+9)*2*3.14/365)*-((e3dc_config.sommerladeende-e3dc_config.winterminimum)/2)*3600;

    
//    float fht = e3dc_config.ht * cos((ts->tm_yday+9)*2*3.14/365);
    float fht = e3dc_config.htsockel + (e3dc_config.ht-e3dc_config.htsockel) * cos((ts->tm_yday+9)*2*3.14/365);

    // HT Endeladeleistung freigeben
    // Mo-Fr wird während der Hochtarif der Speicher zwischen hton und htoff endladen
    // Samstag und Sonntag nur wenn htsat und htsun auf true gesetzt sind.
    // Damit kann gleich eine intelligente Notstromreserve realisiert werden.
    // Die in ht eingestellte Reserve wird zwischen diesem Wert und 0% zur Tag-Nachtgleiche gesetzt
    // Die Notstromreserve im System ist davon unberührt
    if (iLMStatus == 1) {
    
    if ((((ts->tm_wday>0&&ts->tm_wday<6) ||
          ((ts->tm_wday==0)&&e3dc_config.htsun)
          ||
          ((ts->tm_wday==6)&&e3dc_config.htsat)          )&&
            (e3dc_config.hton < t && e3dc_config.htoff > t ))
        ||(fht<fBatt_SOC)
        ||(iNotstrom==1)  //Notstrom
        ||(iNotstrom==4)  //Inselbetrieb
        ){
            // ENdladen einschalten)
        if (iDischarge < e3dc_config.maximumLadeleistung) {
            
        Control_MAX_DISCHARGE(frameBuffer,e3dc_config.maximumLadeleistung);
        iBattPowerStatus = 0;
        iLMStatus = 5;
        }

    } else {
            // Endladen ausschalten
        if (iDischarge != 0)
            // Ausschalten nur wenn nicht im Notstrom/Inselbetrieb
            { Control_MAX_DISCHARGE(frameBuffer,0);
            iBattPowerStatus = 0;
            iLMStatus = 5;
;}
    }}
    
    // HT Endeladeleistung freigeben  ENDE
    
    
    
    // Berechnung freie Ladekapazität bis 90% bzw. Ladeende
    
    tZeitgleichung = (-0.171*sin(0.0337 * ts->tm_yday + 0.465) - 0.1299*sin(0.01787 * ts->tm_yday - 0.168))*3600;
    tLadezeitende = tLadezeitende - tZeitgleichung;

// Überwachungszeitraum für das Überschussladen übschritten und Speicher > Ladeende
// Dann wird langsam bis Abends der Speicher bis 93% geladen und spätestens dann zum Vollladen freigegeben.
    if ((t >= tLadezeitende)&&(fBatt_SOC>=fLadeende)) {
        tLadezeitende = tLadezeitende2 - tZeitgleichung;
        fLadeende = 93;
    };
    
    if ((t < (tLadezeitende))&&(fBatt_SOC<fLadeende))
    {
      if ((fBatt_SOC!=fBatt_SOC_alt)||(t-tLadezeit_alt>300)||(iFc == 0))
      {
        fBatt_SOC_alt=fBatt_SOC; // bei Änderung SOC neu berechnen
        tLadezeit_alt=t; // alle 300sec Berechnen
        iFc = (fLadeende - fBatt_SOC)*e3dc_config.speichergroesse*10*3600;
        iFc = iFc / (tLadezeitende-t);
        iMinLade = iFc;
//        iFc = (iFc-900)*5;
          iFc = (iFc-e3dc_config.untererLadekorridor);
          iFc = iFc*(e3dc_config.maximumLadeleistung/(e3dc_config.obererLadekorridor-e3dc_config.untererLadekorridor));
          if (iFc > e3dc_config.maximumLadeleistung) iFc = e3dc_config.maximumLadeleistung;
        if (iFc < e3dc_config.minimumLadeleistung) iFc = 0;
      }
        printf("MinLoad: %u %u ",iMinLade, iFc);
    } else
        if (t > tLadezeitende) iFc = e3dc_config.maximumLadeleistung;
           else iFc = 0;
//  Laden auf 100% nach 15:30
    
    printf("GMT %ld:%ld ZG %d ",tLadezeitende/3600,tLadezeitende%3600/60,tZeitgleichung);
    

    
    
    printf("E3DC Zeit: %s", asctime(ts));


    
    int iPower = 0;
    if (iLMStatus == 0){
        iLMStatus = 5;
        tLadezeit_alt = 0;
//        iBattLoad = e3dc_config.maximumLadeleistung;
        iBattLoad = 100;
//        fAvBatterie = e3dc_config.untererLadekorridor;

        
//        ControlLoadData2(frameBuffer,iBattLoad);
    }
    if (iAvBatt_Count < 120) iAvBatt_Count++;
    fAvBatterie = fAvBatterie*(iAvBatt_Count-1)/iAvBatt_Count;
    fAvBatterie = fAvBatterie + (float(iPower_Bat)/iAvBatt_Count);

    // Überschussleistung=iPower ermitteln

    iPower = (-iPower_Bat + int32_t(fPower_Grid) - e3dc_config.einspeiselimit*-1000)*-1;
    
    // die PV-leistung kann die WR-Leistung überschreiten. Überschuss in den Speicher laden;
    
    if ((iPower_PV_E3DC - e3dc_config.wrleistung) > iPower)
        iPower = (iPower_PV_E3DC - e3dc_config.wrleistung);
    
    if (iPower < 50) iPower = 0;
    else
    if (iPower > e3dc_config.maximumLadeleistung) iPower = e3dc_config.maximumLadeleistung;
    else
    if (iPower <100) iPower = 100;
    
    fSavedtoday = fSavedtoday + iPower;

        
        if (((fBatt_SOC > e3dc_config.ladeschwelle)&&(t<tLadezeitende))||(fBatt_SOC > e3dc_config.ladeende))
        {
            
        
            if (iFc > iPower)
            {   iPower = iFc;
                if (iPower > fAvBatterie) iPower = iPower + pow((iPower-fAvBatterie),2)/20;
                if (iPower > e3dc_config.maximumLadeleistung) iPower = e3dc_config.maximumLadeleistung;
                
            }
            } else
//            if (fBatt_SOC < cLadeende) iPower = 3000;
//            else iPower = 0;
              iPower = e3dc_config.maximumLadeleistung;
        
        if (e3dc_config.wallbox&&(WBchar6[1]==5))     // Wenn Wallbox vorhanden und Laden ausgeschaltet
            iPower = e3dc_config.maximumLadeleistung; // mit voller Leistung E3DC Speicher laden
        
//        if (((abs( int(iPower - iPower_Bat)) > 30)||(t%3600==0))&&(iLMStatus == 1))
//            if (((abs( int(iPower - iBattLoad)) > 30)||(abs(t-tE3DC_alt)>3600*3))&&(iLMStatus == 1))
    if (iLMStatus == 1)
    {
        
            {
            if (iBattLoad > (iPower_Bat-iDiffLadeleistung))
            iDiffLadeleistung = iBattLoad-iPower_Bat+iDiffLadeleistung;
            if ((iDiffLadeleistung < 0 )||(iBattLoad<=100)) iDiffLadeleistung = 0;
            if (iDiffLadeleistung > 100 )iDiffLadeleistung = 100; //Maximal 100W vorhalten
            if ((iPower+iDiffLadeleistung) > e3dc_config.maximumLadeleistung) iDiffLadeleistung = 0;
/*            if (iLMStatus == 1) {
                iBattLoad = iPower;
                tE3DC_alt = t;
            ControlLoadData2(frameBuffer,(iBattLoad+iDiffLadeleistung));
            iLMStatus = 7;
            }
*/
// Steuerung direkt über vorgabe der Batterieladeleistung
// -iPower_Bat + int32_t(fPower_Grid)
                if (iLMStatus == 1) {
                 iBattLoad = iPower;
                 tE3DC_alt = t;
//                    if (iPower_Bat > iPower)
// die aktuelle Batterieladeleistung liegt über der angeforderten Grenze, einbremsen
                        //                 ControlLoadData(frameBuffer,(iBattLoad+iDiffLadeleistung),3);
                        
                        if ((iPower < e3dc_config.maximumLadeleistung)&&(iPower<(iPower_Bat - int32_t(fPower_Grid))))
                        {
//                        if (iPower < iPower_Bat - int32_t(fPower_Grid))
//                            iPower = iPower_Bat - int32_t(fPower_Grid);
//                        if (iPower >0)
                        ControlLoadData(frameBuffer,(iPower+iDiffLadeleistung),3);
                        iLMStatus = 10;}
/*                    else if (fPower_Grid>50){
// Zurück in den Automatikmodus
                        ControlLoadData(frameBuffer,0,0);
                        iLMStatus = 7;}
*/
                }

          }
    }
    
    printf("AVBatt   %0.1f ",fAvBatterie);
    printf("Discharge %i ",iDischarge);
    printf("BattLoad %i ",iBattLoad);
    printf("iLMStatus %i ",iLMStatus);
    printf("Reserve %0.1f%%\n",fht);
   printf("Saved today %0.0004fkWh yesterday  %0.0004fkWh\n",(fSavedtoday/3600000),(fSavedyesderday/3600000));
    if (iLMStatus>1) iLMStatus--;
    if (e3dc_config.openWB)
    {
    char buffer [50];
    sprintf(buffer,"echo %0.1f > /var/www/html/openWB/ramdisk/wattbezug",fPower_Grid);
    system(buffer);

    sprintf(buffer,"echo %i > /var/www/html/openWB/ramdisk/pvwatt",iPower_PV*-1);
    system(buffer);

    sprintf(buffer,"echo %0.1f > /var/www/html/openWB/ramdisk/llaktuell",fPower_WB);
    system(buffer);

    sprintf(buffer,"echo %i > /var/www/html/openWB/ramdisk/speicherleistung",iPower_Bat);
    system(buffer);

    sprintf(buffer,"echo %i > /var/www/html/openWB/ramdisk/hausleistung",iPowerHome);
    system(buffer);
    }
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x70, %rsp
movq %rdi, %rbx
movl $0xa, %edi
callq 0x2210
leaq 0x14cc3(%rip), %rdi     # 0x177b0
callq 0x2150
movq %rax, %r14
movq 0x14cb4(%rip), %rcx     # 0x177b0
movabsq $0x1845c8a0ce512957, %rdx # imm = 0x1845C8A0CE512957
movq %rcx, %rax
imulq %rdx
movq %rdx, %rax
shrq $0x3f, %rax
sarq $0xd, %rdx
addq %rax, %rdx
imulq $0x15180, %rdx, %rax    # imm = 0x15180
subq %rax, %rcx
cmpq 0x14c8d(%rip), %rcx     # 0x177b8
jge 0x2b47
movss 0x14c8b(%rip), %xmm0    # 0x177c0
movss %xmm0, 0x14c87(%rip)    # 0x177c4
movl $0x0, 0x14c79(%rip)     # 0x177c0
movq %rcx, 0x14c6a(%rip)     # 0x177b8
movzbl 0x14c16(%rip), %eax     # 0x1776b
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
movss %xmm0, 0x1c(%rsp)
movss 0x14c1e(%rip), %xmm0    # 0x17788
movss 0x14c1a(%rip), %xmm1    # 0x1778c
subss %xmm0, %xmm1
movss 0x10486(%rip), %xmm2    # 0x13004
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss 0x1047a(%rip), %xmm3    # 0x13008
mulss %xmm3, %xmm1
movss 0x14bf6(%rip), %xmm4    # 0x17790
subss %xmm0, %xmm4
mulss %xmm2, %xmm4
addss %xmm0, %xmm4
mulss %xmm3, %xmm4
movaps %xmm4, (%rsp)
cvttps2dq %xmm1, %xmm0
cvtdq2pd %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
movl 0x1c(%r14), %eax
leal 0x12(%rax,%rax), %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
mulsd 0x104be(%rip), %xmm0    # 0x13090
divsd 0x104be(%rip), %xmm0    # 0x13098
callq 0x22c0
movss 0x14ba5(%rip), %xmm1    # 0x1778c
subss 0x14b99(%rip), %xmm1    # 0x17788
mulss 0x10415(%rip), %xmm1    # 0x1300c
cvtss2sd %xmm1, %xmm1
mulsd %xmm0, %xmm1
mulsd 0x10499(%rip), %xmm1    # 0x130a0
addsd 0x20(%rsp), %xmm1
cvttsd2si %xmm1, %r12
cvttps2dq (%rsp), %xmm0
cvtdq2pd %xmm0, %xmm0
movaps %xmm0, (%rsp)
movl 0x1c(%r14), %eax
leal 0x12(%rax,%rax), %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
mulsd 0x1045a(%rip), %xmm0    # 0x13090
divsd 0x1045a(%rip), %xmm0    # 0x13098
callq 0x22c0
movss 0x14b45(%rip), %xmm1    # 0x17790
subss 0x14b35(%rip), %xmm1    # 0x17788
mulss 0x103b1(%rip), %xmm1    # 0x1300c
cvtss2sd %xmm1, %xmm1
mulsd %xmm0, %xmm1
mulsd 0x10435(%rip), %xmm1    # 0x130a0
addsd (%rsp), %xmm1
cvttsd2si %xmm1, %r15
movss 0x14b23(%rip), %xmm0    # 0x177a0
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movsd %xmm1, (%rsp)
xorps %xmm1, %xmm1
cvtsi2ssl 0x14ad8(%rip), %xmm1 # 0x1776c
subss %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
movsd %xmm0, 0x20(%rsp)
movl 0x1c(%r14), %eax
leal 0x12(%rax,%rax), %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
mulsd 0x103d4(%rip), %xmm0    # 0x13090
divsd 0x103d4(%rip), %xmm0    # 0x13098
callq 0x22c0
mulsd 0x20(%rsp), %xmm0
addsd (%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, (%rsp)
cmpl $0x1, 0x14ae4(%rip)     # 0x177c8
jne 0x2d84
movl 0x18(%r14), %eax
leal -0x1(%rax), %ecx
cmpl $0x5, %ecx
jae 0x2d1a
xorps %xmm0, %xmm0
cvtsi2ssq 0x14ab6(%rip), %xmm0 # 0x177b8
ucomiss 0x14a8f(%rip), %xmm0    # 0x17798
jbe 0x2d3a
movss 0x14a89(%rip), %xmm1    # 0x1779c
ucomiss %xmm0, %xmm1
ja 0x2d5d
jmp 0x2d3a
cmpl $0x6, %eax
je 0x2d31
testl %eax, %eax
jne 0x2d3a
cmpb $0x0, 0x14a3d(%rip)     # 0x17767
jne 0x2cf6
cmpl $0x6, %eax
jne 0x2d3a
cmpb $0x1, 0x14a2e(%rip)     # 0x17766
je 0x2cf6
movss 0x14a8a(%rip), %xmm0    # 0x177cc
ucomiss (%rsp), %xmm0
ja 0x2d5d
movzbl 0x14a81(%rip), %eax     # 0x177d0
cmpl $0x4, %eax
je 0x2d5d
cmpl $0x1, %eax
jne 0x3357
movl 0x14a19(%rip), %esi     # 0x1777c
cmpl %esi, 0x1441f(%rip)     # 0x17188
jge 0x2d84
movq %rbx, %rdi
callq 0x2755
movb $0x0, 0x14a5a(%rip)     # 0x177d4
movl $0x5, 0x14a44(%rip)     # 0x177c8
xorps %xmm0, %xmm0
cvtsi2sdl 0x1c(%r14), %xmm0
mulsd 0x10313(%rip), %xmm0    # 0x130a8
addsd 0x10313(%rip), %xmm0    # 0x130b0
callq 0x2060
movsd %xmm0, 0x20(%rsp)
xorps %xmm0, %xmm0
cvtsi2sdl 0x1c(%r14), %xmm0
mulsd 0x102ff(%rip), %xmm0    # 0x130b8
addsd 0x102ff(%rip), %xmm0    # 0x130c0
callq 0x2060
mulsd 0x102fa(%rip), %xmm0    # 0x130c8
movsd 0x20(%rsp), %xmm1
mulsd 0x102f4(%rip), %xmm1    # 0x130d0
addsd %xmm0, %xmm1
mulsd 0x102b8(%rip), %xmm1    # 0x130a0
cvttsd2si %xmm1, %ebp
movslq %ebp, %rcx
subq %rcx, %r12
movq 0x149bf(%rip), %rax     # 0x177b8
cmpq %r12, %rax
setl %dl
movss 0x149c5(%rip), %xmm0    # 0x177cc
movss 0x1c(%rsp), %xmm1
ucomiss %xmm1, %xmm0
setb %sil
orb %dl, %sil
subq %rcx, %r15
testb %sil, %sil
cmovneq %r12, %r15
jne 0x2e2b
movss 0x101e5(%rip), %xmm1    # 0x13010
movq %r15, %rcx
subq %rax, %rcx
jle 0x2edf
ucomiss %xmm0, %xmm1
jbe 0x2edf
ucomiss 0x14991(%rip), %xmm0    # 0x177d8
jne 0x2e4f
jnp 0x332e
movss %xmm0, 0x14981(%rip)    # 0x177d8
subss %xmm0, %xmm1
mulss 0x14921(%rip), %xmm1    # 0x17784
mulss 0x101a9(%rip), %xmm1    # 0x13014
mulss 0x10195(%rip), %xmm1    # 0x13008
cvttss2si %xmm1, %edx
movq %rax, 0x14962(%rip)     # 0x177e0
movslq %edx, %rax
cqto
idivq %rcx
movq %rax, %rcx
movl %ecx, 0x1495d(%rip)     # 0x177ec
movl 0x148db(%rip), %eax     # 0x17770
subl %eax, %ecx
movl 0x148df(%rip), %esi     # 0x1777c
movl 0x148d1(%rip), %edi     # 0x17774
subl %eax, %edi
movl %esi, %eax
cltd
idivl %edi
imull %ecx, %eax
cmpl %esi, %eax
cmovgel %esi, %eax
xorl %ecx, %ecx
cmpl 0x148be(%rip), %eax     # 0x17778
cmovgel %eax, %ecx
movl %ecx, 0x14925(%rip)     # 0x177e8
movl 0x14923(%rip), %esi     # 0x177ec
movl 0x14919(%rip), %edx     # 0x177e8
leaq 0x1038b(%rip), %rdi     # 0x13261
xorl %eax, %eax
callq 0x2040
jmp 0x2efc
cmpq %rax, %r15
jge 0x2ef2
movl 0x14892(%rip), %eax     # 0x1777c
movl %eax, 0x148f8(%rip)     # 0x177e8
jmp 0x2efc
movl $0x0, 0x148ec(%rip)     # 0x177e8
movabsq $0x48d159e26af37c05, %rcx # imm = 0x48D159E26AF37C05
movq %r15, %rax
imulq %rcx
movq %rdx, %rsi
shrq $0x3f, %rsi
sarq $0xa, %rdx
addq %rdx, %rsi
imulq $0xe10, %rsi, %rax      # imm = 0xE10
movq %r15, %rcx
subq %rax, %rcx
movabsq $-0x7777777777777777, %rdx # imm = 0x8888888888888889
movq %rcx, %rax
imulq %rdx
addq %rcx, %rdx
movq %rdx, %rax
shrq $0x3f, %rax
sarq $0x5, %rdx
addq %rax, %rdx
leaq 0x10322(%rip), %rdi     # 0x13271
movl %ebp, %ecx
xorl %eax, %eax
callq 0x2040
movq %r14, %rdi
callq 0x20a0
leaq 0x1031d(%rip), %rdi     # 0x13284
movq %rax, %rsi
xorl %eax, %eax
callq 0x2040
cmpl $0x0, 0x14850(%rip)     # 0x177c8
jne 0x2f99
movl $0x5, 0x14844(%rip)     # 0x177c8
movq $0x0, 0x14851(%rip) # 0x177e0
movl $0x64, 0x14857(%rip)    # 0x177f0
movl 0x14855(%rip), %eax     # 0x177f4
cmpl $0x77, %eax
jg 0x2fac
incl %eax
movl %eax, 0x14848(%rip)     # 0x177f4
movl 0x14842(%rip), %eax     # 0x177f4
leal -0x1(%rax), %ecx
xorps %xmm1, %xmm1
cvtsi2ss %ecx, %xmm1
mulss 0x14834(%rip), %xmm1    # 0x177f8
cvtsi2ss %eax, %xmm2
movl 0x1482e(%rip), %eax     # 0x177fc
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
divss %xmm2, %xmm1
divss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x1480f(%rip)    # 0x177f8
cvttss2si 0x1480f(%rip), %ecx # 0x17800
subl %eax, %ecx
xorps %xmm1, %xmm1
cvtsi2ss %ecx, %xmm1
movss 0x14792(%rip), %xmm2    # 0x17794
mulss 0x1000e(%rip), %xmm2    # 0x13018
addss %xmm1, %xmm2
xorps 0x100db(%rip), %xmm2    # 0x130f0
cvttss2si %xmm2, %eax
movl 0x147e5(%rip), %ecx     # 0x17804
subl 0x1475b(%rip), %ecx     # 0x17780
cmpl %eax, %ecx
cmovlel %eax, %ecx
xorl %eax, %eax
cmpl $0x32, %ecx
jl 0x3046
movl 0x14745(%rip), %eax     # 0x1777c
cmpl %eax, %ecx
jg 0x3046
cmpl $0x65, %ecx
movl $0x64, %eax
cmovgel %ecx, %eax
xorps %xmm1, %xmm1
cvtsi2ss %eax, %xmm1
addss 0x1476b(%rip), %xmm1    # 0x177c0
movzbl 0x1470e(%rip), %ecx     # 0x1776a
xorps %xmm2, %xmm2
cvtsi2ss %ecx, %xmm2
movss %xmm1, 0x14755(%rip)    # 0x177c0
movss 0x14759(%rip), %xmm1    # 0x177cc
ucomiss %xmm2, %xmm1
jbe 0x3081
cmpq %r15, 0x14739(%rip)     # 0x177b8
jl 0x3094
movzbl 0x146e3(%rip), %ecx     # 0x1776b
xorps %xmm2, %xmm2
cvtsi2ss %ecx, %xmm2
ucomiss %xmm2, %xmm1
jbe 0x30dd
movl 0x1474e(%rip), %ecx     # 0x177e8
cmpl %eax, %ecx
jle 0x30e3
xorps %xmm1, %xmm1
cvtsi2ss %ecx, %xmm1
ucomiss %xmm0, %xmm1
jbe 0x30d0
xorps %xmm2, %xmm2
cvtsi2sd %ecx, %xmm2
subss %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
mulsd %xmm0, %xmm0
divsd 0x10010(%rip), %xmm0    # 0x130d8
addsd %xmm2, %xmm0
cvttsd2si %xmm0, %ecx
movl 0x146a6(%rip), %eax     # 0x1777c
cmpl %eax, %ecx
cmovll %ecx, %eax
jmp 0x30e3
movl 0x14699(%rip), %eax     # 0x1777c
cmpb $0x5, 0x146bf(%rip)     # 0x177a9
movl 0x1468c(%rip), %ecx     # 0x1777c
movl %eax, %esi
cmovel %ecx, %esi
cmpb $0x0, 0x14664(%rip)     # 0x17760
cmovel %eax, %esi
cmpl $0x1, 0x146c2(%rip)     # 0x177c8
jne 0x31af
movl 0x146de(%rip), %edx     # 0x177f0
movl 0x146e4(%rip), %eax     # 0x177fc
movl 0x146ea(%rip), %edi     # 0x17808
movl %eax, %r8d
subl %edi, %r8d
cmpl %r8d, %edx
jle 0x3139
movl %edx, %r8d
subl %eax, %r8d
addl %edi, %r8d
movl %r8d, 0x146cf(%rip)     # 0x17808
cmpl $0x65, %edx
jl 0x3147
cmpl $0x0, 0x146c3(%rip)     # 0x17808
jns 0x3151
movl $0x0, 0x146b7(%rip)     # 0x17808
cmpl $0x65, 0x146b0(%rip)    # 0x17808
jl 0x3164
movl $0x64, 0x146a4(%rip)    # 0x17808
movl 0x1469e(%rip), %edx     # 0x17808
addl %esi, %edx
cmpl %ecx, %edx
jle 0x317a
movl $0x0, 0x1468e(%rip)     # 0x17808
movl %esi, 0x14670(%rip)     # 0x177f0
cmpl %ecx, %esi
jge 0x31af
cvttss2si 0x14674(%rip), %ecx # 0x17800
subl %ecx, %eax
cmpl %eax, %esi
jge 0x31af
addl 0x14670(%rip), %esi     # 0x17808
movq %rbx, %rdi
movl $0x3, %edx
callq 0x246c
movl $0xa, 0x14619(%rip)     # 0x177c8
xorps %xmm0, %xmm0
cvtss2sd 0x1463e(%rip), %xmm0    # 0x177f8
leaq 0x100d1(%rip), %rdi     # 0x13292
movb $0x1, %al
callq 0x2040
movl 0x13fba(%rip), %esi     # 0x17188
leaq 0x100cd(%rip), %rdi     # 0x132a2
xorl %eax, %eax
callq 0x2040
movl 0x1460e(%rip), %esi     # 0x177f0
leaq 0x100c7(%rip), %rdi     # 0x132b0
xorl %eax, %eax
callq 0x2040
movl 0x145d2(%rip), %esi     # 0x177c8
leaq 0x100c0(%rip), %rdi     # 0x132bd
xorl %eax, %eax
callq 0x2040
xorps %xmm0, %xmm0
cvtss2sd (%rsp), %xmm0
leaq 0x100b8(%rip), %rdi     # 0x132cb
movb $0x1, %al
callq 0x2040
movss 0x1459e(%rip), %xmm0    # 0x177c0
movss 0xfdf2(%rip), %xmm1     # 0x1301c
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movss 0x1458a(%rip), %xmm2    # 0x177c4
divss %xmm1, %xmm2
xorps %xmm1, %xmm1
cvtss2sd %xmm2, %xmm1
leaq 0x10090(%rip), %rdi     # 0x132dc
movb $0x2, %al
callq 0x2040
movl 0x1456f(%rip), %eax     # 0x177c8
cmpl $0x2, %eax
jl 0x3266
decl %eax
movl %eax, 0x14562(%rip)     # 0x177c8
cmpb $0x1, 0x144fb(%rip)     # 0x17768
jne 0x331f
xorps %xmm0, %xmm0
cvtss2sd 0x14582(%rip), %xmm0    # 0x17800
leaq 0x10087(%rip), %rsi     # 0x1330c
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
movb $0x1, %al
callq 0x2050
movq %rbx, %rdi
callq 0x2140
xorl %edx, %edx
subl 0x14568(%rip), %edx     # 0x1780c
leaq 0x10095(%rip), %rsi     # 0x13340
movq %rbx, %rdi
xorl %eax, %eax
callq 0x2050
movq %rbx, %rdi
callq 0x2140
xorps %xmm0, %xmm0
cvtss2sd 0x14548(%rip), %xmm0    # 0x17810
leaq 0x1009f(%rip), %rsi     # 0x1336e
movq %rbx, %rdi
movb $0x1, %al
callq 0x2050
movq %rbx, %rdi
callq 0x2140
movl 0x14515(%rip), %edx     # 0x177fc
leaq 0x100b4(%rip), %rsi     # 0x133a2
movq %rbx, %rdi
xorl %eax, %eax
callq 0x2050
movq %rbx, %rdi
callq 0x2140
movl 0x1450e(%rip), %edx     # 0x17814
leaq 0x100cd(%rip), %rsi     # 0x133da
movq %rbx, %rdi
xorl %eax, %eax
callq 0x2050
movq %rbx, %rdi
callq 0x2140
xorl %eax, %eax
addq $0x70, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rdx
subq 0x144a8(%rip), %rdx     # 0x177e0
cmpq $0x12c, %rdx            # imm = 0x12C
jg 0x2e4f
cmpl $0x0, 0x1449c(%rip)     # 0x177e8
jne 0x2ec3
jmp 0x2e4f
xorl %esi, %esi
cmpl $0x0, 0x13e28(%rip)     # 0x17188
jne 0x2d6b
jmp 0x2d84