// File: atfrank[P]PCASA/lib/Analyze.cpp
// Function: AnalyzeCasa::runAnalysisCasa(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, double, int)
void AnalyzeCasa::runAnalysisCasa(unsigned int frame, std::string identification, bool header, bool predict, std::string fparmfile, std::string freffile, std::string fsasa, const double cutoff, const int beta){
  Molecule *mol;
  CASA *casa;
  std::stringstream fout;
  //double sasaPred;
  unsigned int natomi,natomj;
  std::stringstream residi, residj;
  unsigned int atm;
  std::string resnamei,resnamej;
  std::string key;
  double dist;
  double predSASA;
  mol = NULL;
  casa=NULL;
  mol = this->getMol(0);

  atm = 0;
  casa = new CASA(mol,fparmfile, freffile, fsasa);
  natomi=0;
  predSASA = 0.0;

  /* rename HID, HIE => HIS */
  mol->renameRes("HID","HIS");
  mol->renameRes("HIE","HIS");
  mol->renameRes("HIP","HIS");
  mol->renameRes("HSD","HIS");
  mol->renameRes("HSP","HIS");
  mol->renameRes("HSE","HIS");
  
  for (unsigned int i=0; i< mol->getNAtomSelected(); i++){
    natomj=0;
    resnamei = mol->getResidue(natomi)->getResName();
    residi << (natomi+1);
    for (unsigned int j=0; j< mol->getNAtomSelected(); j++){
      resnamej = mol->getResidue(natomj)->getResName();
      residj << mol->getResidue(natomj)->getResId();
      //get distance between atoms
      dist = Analyze::distance(mol->getResidue(natomi)->getAtom(atm)->getCoor(), mol->getResidue(natomj)->getAtom(atm)->getCoor());
      if (dist <= cutoff && dist!=0.0 ){
        casa->accumHist(resnamej,pow(dist,beta));
      }
      residj.str("");
      natomj++;
    }
    if(!predict){
      if(natomi==0 && header==true){
        // print out header information
        std::cout << "frame ID atomname resid resname " << casa->printRefSASAVecHeader() << " targetSASA ";
        casa->printHistHeader();
        std::cout << std::endl;
      }
      if (fsasa.length() > 0){
        std::cout << frame << " " << identification << " " << mol->getResidue(natomi)->getAtom(atm)->getAtmName() << " "<< natomi+1 << " " << resnamei << " " << casa->printRefSASAVec(resnamei) << " " << casa->getTargetSASA(resnamei+":"+residi.str()) << " ";
      } else {
        std::cout << frame << " " << identification << " " << mol->getResidue(natomi)->getAtom(atm)->getAtmName() << " "<< natomi+1 << " " << resnamei << " " << casa->printRefSASAVec(resnamei) << " 0.0 ";
      }
      casa->printHist();
      std::cout << std::endl;
    } else {
      if(natomi==0 && header==true){
        // print out header information
        std::cout << "frame ID atomname resid resname refSASA targetSASA predSASA" << std::endl;
      }
      predSASA = casa->getRefSASA(resnamei) + casa->predictHist(resnamei);
      //predSASA = casa->getRefSASA(resnamei);
      if(predSASA<0){
        predSASA = 0.0;
      }
      if (fsasa.length() > 0){
        std::cout << frame << " " << identification << " " << mol->getResidue(natomi)->getAtom(atm)->getAtmName() << " "<< natomi+1 << " " << resnamei << " " << casa->getRefSASA(resnamei) << " " << casa->getTargetSASA(resnamei+":"+residi.str()) << " " << predSASA << std::endl;
      } else {
        std::cout << frame << " " << identification << " " << mol->getResidue(natomi)->getAtom(atm)->getAtmName() << " "<< natomi+1 << " " << resnamei << " " << casa->getRefSASA(resnamei) << " 0.0 " << predSASA << std::endl;
      }
    }
    casa->clearHist();
    casa->initializeHist();
    residi.str("");
    natomi++;
  }
}

// Assembly:
subq $0xd38, %rsp            # imm = 0xD38
movq %r9, 0x398(%rsp)
movq %rdx, 0x3a0(%rsp)
movb %r8b, %al
movl 0xd50(%rsp), %r8d
movq 0xd48(%rsp), %r8
movq %r8, 0x3a8(%rsp)
movq 0xd40(%rsp), %r8
movq %r8, 0x3b0(%rsp)
movq %rdi, 0xd30(%rsp)
movl %esi, 0xd2c(%rsp)
movq %rdx, 0xd20(%rsp)
andb $0x1, %cl
movb %cl, 0xd1f(%rsp)
andb $0x1, %al
movb %al, 0xd1e(%rsp)
movq %r9, 0xd10(%rsp)
movsd %xmm0, 0xd08(%rsp)
movq 0xd30(%rsp), %rax
movq %rax, 0x3b8(%rsp)
leaq 0xb70(%rsp), %rdi
callq 0x52a0
leaq 0x9e0(%rsp), %rdi
callq 0x52a0
jmp 0x13769
leaq 0x848(%rsp), %rdi
callq 0x52a0
jmp 0x13778
leaq 0x820(%rsp), %rdi
callq 0x5600
leaq 0x800(%rsp), %rdi
callq 0x5600
leaq 0x7e0(%rsp), %rdi
callq 0x5600
movq 0x3b8(%rsp), %rdi
movq $0x0, 0xd00(%rsp)
movq $0x0, 0xcf8(%rsp)
movl $0x0, 0x7cc(%rsp)
leaq 0x7cc(%rsp), %rsi
callq 0xece0
movq %rax, 0x390(%rsp)
jmp 0x137e1
movq 0x390(%rsp), %rax
movq %rax, 0xd00(%rsp)
movl $0x0, 0x844(%rsp)
movl $0xd8, %edi
callq 0x5410
movq %rax, 0x388(%rsp)
jmp 0x13810
movq 0x398(%rsp), %rsi
movb $0x1, 0x767(%rsp)
movq 0xd00(%rsp), %rax
movq %rax, 0x380(%rsp)
leaq 0x7a8(%rsp), %rdi
callq 0x51b0
jmp 0x1383f
movq 0x3b0(%rsp), %rsi
leaq 0x788(%rsp), %rdi
callq 0x51b0
jmp 0x13856
movq 0x3a8(%rsp), %rsi
leaq 0x768(%rsp), %rdi
callq 0x51b0
jmp 0x1386d
movq 0x380(%rsp), %rsi
movq 0x388(%rsp), %rdi
leaq 0x7a8(%rsp), %rdx
leaq 0x788(%rsp), %rcx
leaq 0x768(%rsp), %r8
callq 0x21870
jmp 0x1389c
movq 0x388(%rsp), %rax
movb $0x0, 0x767(%rsp)
movq %rax, 0xcf8(%rsp)
leaq 0x768(%rsp), %rdi
callq 0x5250
leaq 0x788(%rsp), %rdi
callq 0x5250
leaq 0x7a8(%rsp), %rdi
callq 0x5250
movl $0x0, 0xb6c(%rsp)
movq $0x0, 0x7d0(%rsp)
movq 0xd00(%rsp), %rax
movq %rax, 0x370(%rsp)
leaq 0x73f(%rsp), %rdi
movq %rdi, 0x378(%rsp)
callq 0x5730
movq 0x378(%rsp), %rdx
leaq 0x67b0d(%rip), %rsi     # 0x7b433
leaq 0x740(%rsp), %rdi
callq 0x7900
jmp 0x13935
leaq 0x717(%rsp), %rdi
movq %rdi, 0x368(%rsp)
callq 0x5730
movq 0x368(%rsp), %rdx
leaq 0x67e92(%rip), %rsi     # 0x7b7eb
leaq 0x718(%rsp), %rdi
callq 0x7900
jmp 0x13968
movq 0x370(%rsp), %rdi
leaq 0x740(%rsp), %rsi
leaq 0x718(%rsp), %rdx
callq 0x43c50
jmp 0x13987
leaq 0x718(%rsp), %rdi
callq 0x5250
leaq 0x717(%rsp), %rdi
callq 0x5480
leaq 0x740(%rsp), %rdi
callq 0x5250
leaq 0x73f(%rsp), %rdi
callq 0x5480
movq 0xd00(%rsp), %rax
movq %rax, 0x358(%rsp)
leaq 0x6ef(%rsp), %rdi
movq %rdi, 0x360(%rsp)
callq 0x5730
movq 0x360(%rsp), %rdx
leaq 0x67a48(%rip), %rsi     # 0x7b437
leaq 0x6f0(%rsp), %rdi
callq 0x7900
jmp 0x139fe
leaq 0x6c7(%rsp), %rdi
movq %rdi, 0x350(%rsp)
callq 0x5730
movq 0x350(%rsp), %rdx
leaq 0x67dc9(%rip), %rsi     # 0x7b7eb
leaq 0x6c8(%rsp), %rdi
callq 0x7900
jmp 0x13a31
movq 0x358(%rsp), %rdi
leaq 0x6f0(%rsp), %rsi
leaq 0x6c8(%rsp), %rdx
callq 0x43c50
jmp 0x13a50
leaq 0x6c8(%rsp), %rdi
callq 0x5250
leaq 0x6c7(%rsp), %rdi
callq 0x5480
leaq 0x6f0(%rsp), %rdi
callq 0x5250
leaq 0x6ef(%rsp), %rdi
callq 0x5480
movq 0xd00(%rsp), %rax
movq %rax, 0x340(%rsp)
leaq 0x69f(%rsp), %rdi
movq %rdi, 0x348(%rsp)
callq 0x5730
movq 0x348(%rsp), %rdx
leaq 0x67983(%rip), %rsi     # 0x7b43b
leaq 0x6a0(%rsp), %rdi
callq 0x7900
jmp 0x13ac7
leaq 0x677(%rsp), %rdi
movq %rdi, 0x338(%rsp)
callq 0x5730
movq 0x338(%rsp), %rdx
leaq 0x67d00(%rip), %rsi     # 0x7b7eb
leaq 0x678(%rsp), %rdi
callq 0x7900
jmp 0x13afa
movq 0x340(%rsp), %rdi
leaq 0x6a0(%rsp), %rsi
leaq 0x678(%rsp), %rdx
callq 0x43c50
jmp 0x13b19
leaq 0x678(%rsp), %rdi
callq 0x5250
leaq 0x677(%rsp), %rdi
callq 0x5480
leaq 0x6a0(%rsp), %rdi
callq 0x5250
leaq 0x69f(%rsp), %rdi
callq 0x5480
movq 0xd00(%rsp), %rax
movq %rax, 0x328(%rsp)
leaq 0x64f(%rsp), %rdi
movq %rdi, 0x330(%rsp)
callq 0x5730
movq 0x330(%rsp), %rdx
leaq 0x67854(%rip), %rsi     # 0x7b3d5
leaq 0x650(%rsp), %rdi
callq 0x7900
jmp 0x13b90
leaq 0x627(%rsp), %rdi
movq %rdi, 0x320(%rsp)
callq 0x5730
movq 0x320(%rsp), %rdx
leaq 0x67c37(%rip), %rsi     # 0x7b7eb
leaq 0x628(%rsp), %rdi
callq 0x7900
jmp 0x13bc3
movq 0x328(%rsp), %rdi
leaq 0x650(%rsp), %rsi
leaq 0x628(%rsp), %rdx
callq 0x43c50
jmp 0x13be2
leaq 0x628(%rsp), %rdi
callq 0x5250
leaq 0x627(%rsp), %rdi
callq 0x5480
leaq 0x650(%rsp), %rdi
callq 0x5250
leaq 0x64f(%rsp), %rdi
callq 0x5480
movq 0xd00(%rsp), %rax
movq %rax, 0x310(%rsp)
leaq 0x5ff(%rsp), %rdi
movq %rdi, 0x318(%rsp)
callq 0x5730
movq 0x318(%rsp), %rdx
leaq 0x67793(%rip), %rsi     # 0x7b3dd
leaq 0x600(%rsp), %rdi
callq 0x7900
jmp 0x13c59
leaq 0x5d7(%rsp), %rdi
movq %rdi, 0x308(%rsp)
callq 0x5730
movq 0x308(%rsp), %rdx
leaq 0x67b6e(%rip), %rsi     # 0x7b7eb
leaq 0x5d8(%rsp), %rdi
callq 0x7900
jmp 0x13c8c
movq 0x310(%rsp), %rdi
leaq 0x600(%rsp), %rsi
leaq 0x5d8(%rsp), %rdx
callq 0x43c50
jmp 0x13cab
leaq 0x5d8(%rsp), %rdi
callq 0x5250
leaq 0x5d7(%rsp), %rdi
callq 0x5480
leaq 0x600(%rsp), %rdi
callq 0x5250
leaq 0x5ff(%rsp), %rdi
callq 0x5480
movq 0xd00(%rsp), %rax
movq %rax, 0x2f8(%rsp)
leaq 0x5af(%rsp), %rdi
movq %rdi, 0x300(%rsp)
callq 0x5730
movq 0x300(%rsp), %rdx
leaq 0x676c6(%rip), %rsi     # 0x7b3d9
leaq 0x5b0(%rsp), %rdi
callq 0x7900
jmp 0x13d22
leaq 0x587(%rsp), %rdi
movq %rdi, 0x2f0(%rsp)
callq 0x5730
movq 0x2f0(%rsp), %rdx
leaq 0x67aa5(%rip), %rsi     # 0x7b7eb
leaq 0x588(%rsp), %rdi
callq 0x7900
jmp 0x13d55
movq 0x2f8(%rsp), %rdi
leaq 0x5b0(%rsp), %rsi
leaq 0x588(%rsp), %rdx
callq 0x43c50
jmp 0x13d74
leaq 0x588(%rsp), %rdi
callq 0x5250
leaq 0x587(%rsp), %rdi
callq 0x5480
leaq 0x5b0(%rsp), %rdi
callq 0x5250
leaq 0x5af(%rsp), %rdi
callq 0x5480
movl $0x0, 0x580(%rsp)
movl 0x580(%rsp), %eax
movl %eax, 0x2e8(%rsp)
movq 0xd00(%rsp), %rdi
callq 0x44ba0
movl %eax, 0x2ec(%rsp)
jmp 0x13dd7
movl 0x2e8(%rsp), %eax
movl 0x2ec(%rsp), %ecx
cmpl %ecx, %eax
jae 0x1530b
movl $0x0, 0xb68(%rsp)
movq 0xd00(%rsp), %rdi
leaq 0xb6c(%rsp), %rsi
callq 0x43be0
movq %rax, 0x2e0(%rsp)
jmp 0x13e17
movq 0x2e0(%rsp), %rsi
leaq 0x560(%rsp), %rdi
callq 0x5dfa0
jmp 0x13e2e
leaq 0x820(%rsp), %rdi
leaq 0x560(%rsp), %rsi
movq %rsi, 0x2d8(%rsp)
callq 0x5510
movq 0x2d8(%rsp), %rdi
callq 0x5250
leaq 0x9f0(%rsp), %rdi
movl 0xb6c(%rsp), %esi
incl %esi
callq 0x55b0
jmp 0x13e70
movl $0x0, 0x55c(%rsp)
movl 0x55c(%rsp), %eax
movl %eax, 0x2d0(%rsp)
movq 0xd00(%rsp), %rdi
callq 0x44ba0
movl %eax, 0x2d4(%rsp)
jmp 0x13e9f
movl 0x2d0(%rsp), %eax
movl 0x2d4(%rsp), %ecx
cmpl %ecx, %eax
jae 0x1456a
movq 0xd00(%rsp), %rdi
leaq 0xb68(%rsp), %rsi
callq 0x43be0
movq %rax, 0x2c8(%rsp)
jmp 0x13ed4
movq 0x2c8(%rsp), %rsi
leaq 0x538(%rsp), %rdi
callq 0x5dfa0
jmp 0x13eeb
leaq 0x800(%rsp), %rdi
leaq 0x538(%rsp), %rsi
movq %rsi, 0x2b0(%rsp)
callq 0x5510
movq 0x2b0(%rsp), %rdi
callq 0x5250
leaq 0x858(%rsp), %rax
movq %rax, 0x2b8(%rsp)
movq 0xd00(%rsp), %rdi
leaq 0xb68(%rsp), %rsi
callq 0x43be0
movq %rax, 0x2c0(%rsp)
jmp 0x13f44
movq 0x2c0(%rsp), %rdi
callq 0x5df00
movl %eax, 0x2ac(%rsp)
jmp 0x13f5a
movl 0x2ac(%rsp), %esi
movq 0x2b8(%rsp), %rdi
callq 0x56f0
jmp 0x13f70
movq 0xd00(%rsp), %rdi
leaq 0xb6c(%rsp), %rsi
callq 0x43be0
movq %rax, 0x2a0(%rsp)
jmp 0x13f8f
movq 0x2a0(%rsp), %rdi
leaq 0x844(%rsp), %rsi
callq 0x5df30
movq %rax, 0x298(%rsp)
jmp 0x13fae
movq 0x298(%rsp), %rdi
callq 0x1f6e0
movq %rax, 0x290(%rsp)
jmp 0x13fc5
movq 0xd00(%rsp), %rdi
leaq 0xb68(%rsp), %rsi
callq 0x43be0
movq %rax, 0x288(%rsp)
jmp 0x13fe4
movq 0x288(%rsp), %rdi
leaq 0x844(%rsp), %rsi
callq 0x5df30
movq %rax, 0x280(%rsp)
jmp 0x14003
movq 0x280(%rsp), %rdi
callq 0x1f6e0
movq %rax, 0x278(%rsp)
jmp 0x1401a
movq 0x278(%rsp), %rsi
movq 0x290(%rsp), %rdi
callq 0xf810
movsd %xmm0, 0x270(%rsp)
jmp 0x1403a
movsd 0x270(%rsp), %xmm0
movsd %xmm0, 0x7d8(%rsp)
movsd 0x7d8(%rsp), %xmm1
movsd 0xd08(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jb 0x14496
movsd 0x7d8(%rsp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x14081
jp 0x14081
jmp 0x14496
movq 0xcf8(%rsp), %rax
movq %rax, 0x268(%rsp)
movsd 0x7d8(%rsp), %xmm0
cvtsi2sdl 0xd50(%rsp), %xmm1
callq 0x5710
movq 0x268(%rsp), %rdi
movsd %xmm0, 0x530(%rsp)
leaq 0x800(%rsp), %rsi
leaq 0x530(%rsp), %rdx
callq 0x379f0
jmp 0x140d0
jmp 0x14496
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x153a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x15395
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x15361
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x1419d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x14190
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x14183
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x768(%rsp), %rdi
callq 0x5250
leaq 0x788(%rsp), %rdi
callq 0x5250
leaq 0x7a8(%rsp), %rdi
callq 0x5250
testb $0x1, 0x767(%rsp)
jne 0x141a9
jmp 0x141bb
movq 0x388(%rsp), %rdi
movl $0xd8, %esi
callq 0x5420
jmp 0x15361
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x14227
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x1420d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x718(%rsp), %rdi
callq 0x5250
leaq 0x717(%rsp), %rdi
callq 0x5480
leaq 0x740(%rsp), %rdi
callq 0x5250
leaq 0x73f(%rsp), %rdi
callq 0x5480
jmp 0x15361
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x142a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x14286
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x6c8(%rsp), %rdi
callq 0x5250
leaq 0x6c7(%rsp), %rdi
callq 0x5480
leaq 0x6f0(%rsp), %rdi
callq 0x5250
leaq 0x6ef(%rsp), %rdi
callq 0x5480
jmp 0x15361
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x14319
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x142ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x678(%rsp), %rdi
callq 0x5250
leaq 0x677(%rsp), %rdi
callq 0x5480
leaq 0x6a0(%rsp), %rdi
callq 0x5250
leaq 0x69f(%rsp), %rdi
callq 0x5480
jmp 0x15361
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x14392
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x14378
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x628(%rsp), %rdi
callq 0x5250
leaq 0x627(%rsp), %rdi
callq 0x5480
leaq 0x650(%rsp), %rdi
callq 0x5250
leaq 0x64f(%rsp), %rdi
callq 0x5480
jmp 0x15361
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x1440b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x143f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x5d8(%rsp), %rdi
callq 0x5250
leaq 0x5d7(%rsp), %rdi
callq 0x5480
leaq 0x600(%rsp), %rdi
callq 0x5250
leaq 0x5ff(%rsp), %rdi
callq 0x5480
jmp 0x15361
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x14484
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x1446a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x588(%rsp), %rdi
callq 0x5250
leaq 0x587(%rsp), %rdi
callq 0x5480
leaq 0x5b0(%rsp), %rdi
callq 0x5250
leaq 0x5af(%rsp), %rdi
callq 0x5480
jmp 0x15361
leaq 0x50f(%rsp), %rdi
movq %rdi, 0x260(%rsp)
callq 0x5730
movq 0x260(%rsp), %rdx
leaq 0x66ef8(%rip), %rsi     # 0x7b3b2
leaq 0x510(%rsp), %rdi
callq 0x7900
jmp 0x144c9
leaq 0x848(%rsp), %rdi
leaq 0x510(%rsp), %rsi
callq 0x54d0
jmp 0x144e0
leaq 0x510(%rsp), %rdi
callq 0x5250
leaq 0x50f(%rsp), %rdi
callq 0x5480
movl 0xb68(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xb68(%rsp)
movl 0x55c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x55c(%rsp)
jmp 0x13e7b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x14558
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x510(%rsp), %rdi
callq 0x5250
leaq 0x50f(%rsp), %rdi
callq 0x5480
jmp 0x15361
testb $0x1, 0xd1e(%rsp)
jne 0x14c0e
cmpl $0x0, 0xb6c(%rsp)
jne 0x1465d
movb 0xd1f(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x1465d
movq 0x426a16(%rip), %rdi    # 0x43afb8
leaq 0x66e96(%rip), %rsi     # 0x7b43f
callq 0x53f0
movq %rax, 0x258(%rsp)
jmp 0x145b8
movq 0xcf8(%rsp), %rsi
leaq 0x4e8(%rsp), %rdi
callq 0x381d0
jmp 0x145cf
movq 0x258(%rsp), %rdi
leaq 0x4e8(%rsp), %rsi
callq 0x5390
movq %rax, 0x250(%rsp)
jmp 0x145ee
movq 0x250(%rsp), %rdi
leaq 0x66e63(%rip), %rsi     # 0x7b460
callq 0x53f0
jmp 0x14604
leaq 0x4e8(%rsp), %rdi
callq 0x5250
movq 0xcf8(%rsp), %rdi
callq 0x37ea0
jmp 0x14620
movq 0x426991(%rip), %rdi    # 0x43afb8
movq 0x42697a(%rip), %rsi    # 0x43afa8
callq 0x5460
jmp 0x14635
jmp 0x1465d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x4e8(%rsp), %rdi
callq 0x5250
jmp 0x15361
movq 0x3a8(%rsp), %rdi
callq 0x5630
cmpq $0x0, %rax
jbe 0x149d7
movl 0xd2c(%rsp), %esi
movq 0x426936(%rip), %rdi    # 0x43afb8
callq 0x55b0
movq %rax, 0x248(%rsp)
jmp 0x14691
movq 0x248(%rsp), %rdi
leaq 0x67ef8(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x240(%rsp)
jmp 0x146af
movq 0x3a0(%rsp), %rsi
movq 0x240(%rsp), %rdi
callq 0x5390
movq %rax, 0x238(%rsp)
jmp 0x146ce
movq 0x238(%rsp), %rdi
leaq 0x67ebb(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x230(%rsp)
jmp 0x146ec
movq 0xd00(%rsp), %rdi
leaq 0xb6c(%rsp), %rsi
callq 0x43be0
movq %rax, 0x228(%rsp)
jmp 0x1470b
movq 0x228(%rsp), %rdi
leaq 0x844(%rsp), %rsi
callq 0x5df30
movq %rax, 0x220(%rsp)
jmp 0x1472a
movq 0x220(%rsp), %rdi
callq 0x1f5c0
movq %rax, 0x218(%rsp)
jmp 0x14741
movq 0x218(%rsp), %rsi
movq 0x230(%rsp), %rdi
callq 0x5390
movq %rax, 0x210(%rsp)
jmp 0x14760
movq 0x210(%rsp), %rdi
leaq 0x67e29(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x208(%rsp)
jmp 0x1477e
movq 0x208(%rsp), %rdi
movl 0xb6c(%rsp), %esi
incl %esi
callq 0x55b0
movq %rax, 0x200(%rsp)
jmp 0x1479e
movq 0x200(%rsp), %rdi
leaq 0x67deb(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x1f8(%rsp)
jmp 0x147bc
movq 0x1f8(%rsp), %rdi
leaq 0x820(%rsp), %rsi
callq 0x5390
movq %rax, 0x1f0(%rsp)
jmp 0x147db
movq 0x1f0(%rsp), %rdi
leaq 0x67dae(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x1e8(%rsp)
jmp 0x147f9
movq 0xcf8(%rsp), %rsi
leaq 0x4c8(%rsp), %rdi
leaq 0x820(%rsp), %rdx
callq 0x37fd0
jmp 0x14818
movq 0x1e8(%rsp), %rdi
leaq 0x4c8(%rsp), %rsi
callq 0x5390
movq %rax, 0x1e0(%rsp)
jmp 0x14837
movq 0x1e0(%rsp), %rdi
leaq 0x67d52(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x1d8(%rsp)
jmp 0x14855
movq 0xcf8(%rsp), %rax
movq %rax, 0x1d0(%rsp)
leaq 0x669bb(%rip), %rdx     # 0x7b227
leaq 0x488(%rsp), %rdi
leaq 0x820(%rsp), %rsi
callq 0x17210
jmp 0x14883
leaq 0x468(%rsp), %rdi
leaq 0x9e0(%rsp), %rsi
callq 0x53e0
jmp 0x1489a
leaq 0x4a8(%rsp), %rdi
leaq 0x488(%rsp), %rsi
leaq 0x468(%rsp), %rdx
callq 0x16d90
jmp 0x148b9
movq 0x1d0(%rsp), %rdi
leaq 0x4a8(%rsp), %rsi
callq 0x384a0
movsd %xmm0, 0x1c8(%rsp)
jmp 0x148d9
movsd 0x1c8(%rsp), %xmm0
movq 0x1d8(%rsp), %rdi
callq 0x5780
movq %rax, 0x1c0(%rsp)
jmp 0x148f9
movq 0x1c0(%rsp), %rdi
leaq 0x67c90(%rip), %rsi     # 0x7c598
callq 0x53f0
jmp 0x1490f
leaq 0x4a8(%rsp), %rdi
callq 0x5250
leaq 0x468(%rsp), %rdi
callq 0x5250
leaq 0x488(%rsp), %rdi
callq 0x5250
leaq 0x4c8(%rsp), %rdi
callq 0x5250
jmp 0x14be5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x149c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x149b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x149ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x4a8(%rsp), %rdi
callq 0x5250
leaq 0x468(%rsp), %rdi
callq 0x5250
leaq 0x488(%rsp), %rdi
callq 0x5250
leaq 0x4c8(%rsp), %rdi
callq 0x5250
jmp 0x15361
movl 0xd2c(%rsp), %esi
movq 0x4265d3(%rip), %rdi    # 0x43afb8
callq 0x55b0
movq %rax, 0x1b8(%rsp)
jmp 0x149f4
movq 0x1b8(%rsp), %rdi
leaq 0x67b95(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x1b0(%rsp)
jmp 0x14a12
movq 0x3a0(%rsp), %rsi
movq 0x1b0(%rsp), %rdi
callq 0x5390
movq %rax, 0x1a8(%rsp)
jmp 0x14a31
movq 0x1a8(%rsp), %rdi
leaq 0x67b58(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x1a0(%rsp)
jmp 0x14a4f
movq 0xd00(%rsp), %rdi
leaq 0xb6c(%rsp), %rsi
callq 0x43be0
movq %rax, 0x198(%rsp)
jmp 0x14a6e
movq 0x198(%rsp), %rdi
leaq 0x844(%rsp), %rsi
callq 0x5df30
movq %rax, 0x190(%rsp)
jmp 0x14a8d
movq 0x190(%rsp), %rdi
callq 0x1f5c0
movq %rax, 0x188(%rsp)
jmp 0x14aa4
movq 0x188(%rsp), %rsi
movq 0x1a0(%rsp), %rdi
callq 0x5390
movq %rax, 0x180(%rsp)
jmp 0x14ac3
movq 0x180(%rsp), %rdi
leaq 0x67ac6(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x178(%rsp)
jmp 0x14ae1
movq 0x178(%rsp), %rdi
movl 0xb6c(%rsp), %esi
incl %esi
callq 0x55b0
movq %rax, 0x170(%rsp)
jmp 0x14b01
movq 0x170(%rsp), %rdi
leaq 0x67a88(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x168(%rsp)
jmp 0x14b1f
movq 0x168(%rsp), %rdi
leaq 0x820(%rsp), %rsi
callq 0x5390
movq %rax, 0x160(%rsp)
jmp 0x14b3e
movq 0x160(%rsp), %rdi
leaq 0x67a4b(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x158(%rsp)
jmp 0x14b5c
movq 0xcf8(%rsp), %rsi
leaq 0x448(%rsp), %rdi
leaq 0x820(%rsp), %rdx
callq 0x37fd0
jmp 0x14b7b
movq 0x158(%rsp), %rdi
leaq 0x448(%rsp), %rsi
callq 0x5390
movq %rax, 0x150(%rsp)
jmp 0x14b9a
movq 0x150(%rsp), %rdi
leaq 0x668c4(%rip), %rsi     # 0x7b46d
callq 0x53f0
jmp 0x14bb0
leaq 0x448(%rsp), %rdi
callq 0x5250
jmp 0x14be5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x448(%rsp), %rdi
callq 0x5250
jmp 0x15361
movq 0xcf8(%rsp), %rdi
callq 0x37e00
jmp 0x14bf4
movq 0x4263bd(%rip), %rdi    # 0x43afb8
movq 0x4263a6(%rip), %rsi    # 0x43afa8
callq 0x5460
jmp 0x14c09
jmp 0x15224
cmpl $0x0, 0xb6c(%rsp)
jne 0x14c5e
movb 0xd1f(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x14c5e
movq 0x426388(%rip), %rdi    # 0x43afb8
leaq 0x6683c(%rip), %rsi     # 0x7b473
callq 0x53f0
movq %rax, 0x148(%rsp)
jmp 0x14c46
movq 0x148(%rsp), %rdi
movq 0x426353(%rip), %rsi    # 0x43afa8
callq 0x5460
jmp 0x14c5c
jmp 0x14c5e
movq 0xcf8(%rsp), %rdi
leaq 0x820(%rsp), %rsi
callq 0x37f40
movsd %xmm0, 0x140(%rsp)
jmp 0x14c7e
movq 0xcf8(%rsp), %rdi
leaq 0x820(%rsp), %rsi
callq 0x37b30
movsd %xmm0, 0x138(%rsp)
jmp 0x14c9e
movsd 0x138(%rsp), %xmm1
movsd 0x140(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x7d0(%rsp)
xorps %xmm0, %xmm0
ucomisd 0x7d0(%rsp), %xmm0
jbe 0x14cd7
xorps %xmm0, %xmm0
movsd %xmm0, 0x7d0(%rsp)
movq 0x3a8(%rsp), %rdi
callq 0x5630
cmpq $0x0, %rax
jbe 0x15061
movl 0xd2c(%rsp), %esi
movq 0x4262bc(%rip), %rdi    # 0x43afb8
callq 0x55b0
movq %rax, 0x130(%rsp)
jmp 0x14d0b
movq 0x130(%rsp), %rdi
leaq 0x6787e(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x128(%rsp)
jmp 0x14d29
movq 0x3a0(%rsp), %rsi
movq 0x128(%rsp), %rdi
callq 0x5390
movq %rax, 0x120(%rsp)
jmp 0x14d48
movq 0x120(%rsp), %rdi
leaq 0x67841(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x118(%rsp)
jmp 0x14d66
movq 0xd00(%rsp), %rdi
leaq 0xb6c(%rsp), %rsi
callq 0x43be0
movq %rax, 0x110(%rsp)
jmp 0x14d85
movq 0x110(%rsp), %rdi
leaq 0x844(%rsp), %rsi
callq 0x5df30
movq %rax, 0x108(%rsp)
jmp 0x14da4
movq 0x108(%rsp), %rdi
callq 0x1f5c0
movq %rax, 0x100(%rsp)
jmp 0x14dbb
movq 0x100(%rsp), %rsi
movq 0x118(%rsp), %rdi
callq 0x5390
movq %rax, 0xf8(%rsp)
jmp 0x14dda
movq 0xf8(%rsp), %rdi
leaq 0x677af(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0xf0(%rsp)
jmp 0x14df8
movq 0xf0(%rsp), %rdi
movl 0xb6c(%rsp), %esi
incl %esi
callq 0x55b0
movq %rax, 0xe8(%rsp)
jmp 0x14e18
movq 0xe8(%rsp), %rdi
leaq 0x67771(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0xe0(%rsp)
jmp 0x14e36
movq 0xe0(%rsp), %rdi
leaq 0x820(%rsp), %rsi
callq 0x5390
movq %rax, 0xd8(%rsp)
jmp 0x14e55
movq 0xd8(%rsp), %rdi
leaq 0x67734(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0xd0(%rsp)
jmp 0x14e73
movq 0xcf8(%rsp), %rdi
leaq 0x820(%rsp), %rsi
callq 0x37f40
movsd %xmm0, 0xc8(%rsp)
jmp 0x14e93
movsd 0xc8(%rsp), %xmm0
movq 0xd0(%rsp), %rdi
callq 0x5780
movq %rax, 0xc0(%rsp)
jmp 0x14eb3
movq 0xc0(%rsp), %rdi
leaq 0x676d6(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0xb8(%rsp)
jmp 0x14ed1
movq 0xcf8(%rsp), %rax
movq %rax, 0xb0(%rsp)
leaq 0x6633f(%rip), %rdx     # 0x7b227
leaq 0x408(%rsp), %rdi
leaq 0x820(%rsp), %rsi
callq 0x17210
jmp 0x14eff
leaq 0x3e8(%rsp), %rdi
leaq 0x9e0(%rsp), %rsi
callq 0x53e0
jmp 0x14f16
leaq 0x428(%rsp), %rdi
leaq 0x408(%rsp), %rsi
leaq 0x3e8(%rsp), %rdx
callq 0x16d90
jmp 0x14f35
movq 0xb0(%rsp), %rdi
leaq 0x428(%rsp), %rsi
callq 0x384a0
movsd %xmm0, 0xa8(%rsp)
jmp 0x14f55
movsd 0xa8(%rsp), %xmm0
movq 0xb8(%rsp), %rdi
callq 0x5780
movq %rax, 0xa0(%rsp)
jmp 0x14f75
movq 0xa0(%rsp), %rdi
leaq 0x67614(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x98(%rsp)
jmp 0x14f93
movq 0x98(%rsp), %rdi
movsd 0x7d0(%rsp), %xmm0
callq 0x5780
movq %rax, 0x90(%rsp)
jmp 0x14fb3
movq 0x90(%rsp), %rdi
movq 0x425fe6(%rip), %rsi    # 0x43afa8
callq 0x5460
jmp 0x14fc9
leaq 0x428(%rsp), %rdi
callq 0x5250
leaq 0x3e8(%rsp), %rdi
callq 0x5250
leaq 0x408(%rsp), %rdi
callq 0x5250
jmp 0x15222
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x1504f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x15042
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x428(%rsp), %rdi
callq 0x5250
leaq 0x3e8(%rsp), %rdi
callq 0x5250
leaq 0x408(%rsp), %rdi
callq 0x5250
jmp 0x15361
movl 0xd2c(%rsp), %esi
movq 0x425f49(%rip), %rdi    # 0x43afb8
callq 0x55b0
movq %rax, 0x88(%rsp)
jmp 0x1507e
movq 0x88(%rsp), %rdi
leaq 0x6750b(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x80(%rsp)
jmp 0x1509c
movq 0x3a0(%rsp), %rsi
movq 0x80(%rsp), %rdi
callq 0x5390
movq %rax, 0x78(%rsp)
jmp 0x150b8
movq 0x78(%rsp), %rdi
leaq 0x674d4(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x70(%rsp)
jmp 0x150d0
movq 0xd00(%rsp), %rdi
leaq 0xb6c(%rsp), %rsi
callq 0x43be0
movq %rax, 0x68(%rsp)
jmp 0x150ec
movq 0x68(%rsp), %rdi
leaq 0x844(%rsp), %rsi
callq 0x5df30
movq %rax, 0x60(%rsp)
jmp 0x15105
movq 0x60(%rsp), %rdi
callq 0x1f5c0
movq %rax, 0x58(%rsp)
jmp 0x15116
movq 0x58(%rsp), %rsi
movq 0x70(%rsp), %rdi
callq 0x5390
movq %rax, 0x50(%rsp)
jmp 0x1512c
movq 0x50(%rsp), %rdi
leaq 0x67460(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x48(%rsp)
jmp 0x15144
movq 0x48(%rsp), %rdi
movl 0xb6c(%rsp), %esi
incl %esi
callq 0x55b0
movq %rax, 0x40(%rsp)
jmp 0x1515e
movq 0x40(%rsp), %rdi
leaq 0x6742e(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x38(%rsp)
jmp 0x15176
movq 0x38(%rsp), %rdi
leaq 0x820(%rsp), %rsi
callq 0x5390
movq %rax, 0x30(%rsp)
jmp 0x1518f
movq 0x30(%rsp), %rdi
leaq 0x673fd(%rip), %rsi     # 0x7c598
callq 0x53f0
movq %rax, 0x28(%rsp)
jmp 0x151a7
movq 0xcf8(%rsp), %rdi
leaq 0x820(%rsp), %rsi
callq 0x37f40
movsd %xmm0, 0x20(%rsp)
jmp 0x151c4
movsd 0x20(%rsp), %xmm0
movq 0x28(%rsp), %rdi
callq 0x5780
movq %rax, 0x18(%rsp)
jmp 0x151db
movq 0x18(%rsp), %rdi
leaq 0x66286(%rip), %rsi     # 0x7b46d
callq 0x53f0
movq %rax, 0x10(%rsp)
jmp 0x151f3
movq 0x10(%rsp), %rdi
movsd 0x7d0(%rsp), %xmm0
callq 0x5780
movq %rax, 0x8(%rsp)
jmp 0x1520d
movq 0x8(%rsp), %rdi
movq 0x425d8f(%rip), %rsi    # 0x43afa8
callq 0x5460
jmp 0x15220
jmp 0x15222
jmp 0x15224
movq 0xcf8(%rsp), %rdi
callq 0x37f20
jmp 0x15233
movq 0xcf8(%rsp), %rdi
callq 0x22a00
jmp 0x15242
leaq 0x3c7(%rsp), %rdi
movq %rdi, (%rsp)
callq 0x5730
movq (%rsp), %rdx
leaq 0x66154(%rip), %rsi     # 0x7b3b2
leaq 0x3c8(%rsp), %rdi
callq 0x7900
jmp 0x1526d
leaq 0x9e0(%rsp), %rdi
leaq 0x3c8(%rsp), %rsi
callq 0x54d0
jmp 0x15284
leaq 0x3c8(%rsp), %rdi
callq 0x5250
leaq 0x3c7(%rsp), %rdi
callq 0x5480
movl 0xb6c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xb6c(%rsp)
movl 0x580(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x580(%rsp)
jmp 0x13db3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
jmp 0x152fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x9d8(%rsp)
movl %eax, 0x9d4(%rsp)
leaq 0x3c8(%rsp), %rdi
callq 0x5250
leaq 0x3c7(%rsp), %rdi
callq 0x5480
jmp 0x15361
leaq 0x7e0(%rsp), %rdi
callq 0x5250
leaq 0x800(%rsp), %rdi
callq 0x5250
leaq 0x820(%rsp), %rdi
callq 0x5250
leaq 0x848(%rsp), %rdi
callq 0x52e0
leaq 0x9e0(%rsp), %rdi
callq 0x52e0
leaq 0xb70(%rsp), %rdi
callq 0x52e0
addq $0xd38, %rsp            # imm = 0xD38
retq
leaq 0x7e0(%rsp), %rdi
callq 0x5250
leaq 0x800(%rsp), %rdi
callq 0x5250
leaq 0x820(%rsp), %rdi
callq 0x5250
leaq 0x848(%rsp), %rdi
callq 0x52e0
leaq 0x9e0(%rsp), %rdi
callq 0x52e0
leaq 0xb70(%rsp), %rdi
callq 0x52e0
movq 0x9d8(%rsp), %rdi
callq 0x5720
nopl (%rax)