// File: /workspace/github_cpp_makefile_star2_O3/Luthaf[P]zeopp/networkio.cc
// Function: readCIFFile(char*, ATOM_NETWORK*, bool)
bool readCIFFile(char *filename, ATOM_NETWORK *cell, bool radial){
  string line;
  // Known markers in CIF File if you change the order it will affect the code
  string descriptor[] = {"data_",
			 "_cell_length_a", //case 1
			 "_cell_length_b", //2
			 "_cell_length_c", //3
			 "_cell_angle_alpha", //4
			 "_cell_angle_beta", //5
			 "_cell_angle_gamma", //6
			 "loop_", //7
			 "_symmetry_equiv_pos_as_xyz", //8
			 "_space_group_symop_operation_xyz", //9
			 "_atom_site_label", //10
			 "_atom_site_type_symbol", //11
			 "_atom_site_fract_x", //12
			 "_atom_site_fract_y", //13
			 "_atom_site_fract_z", //14
			 "_atom_site_charge", //15
       "_symmetry_Int_Tables_number", //16
			 "_atom_site_Cartn_x", //17
			 "_atom_site_Cartn_y", //18
			 "_atom_site_Cartn_z", //19
                         "_symmetry_equiv_pos_site_id", // 20
			 "NULL"};
  int ndx;
  vector<string> list = strAry2StrVec(descriptor);
  vector<string> token;

  vector<string> sym_x;
  vector<string> sym_y;
  vector<string> sym_z;
  vector<string> atom_label;
  vector<string> atom_type;
  vector<double> atom_x;
  vector<double> atom_y;
  vector<double> atom_z;
  vector<double> atom_charge;

  int symmetry_Int_Table_number = -1; //set to dummy value so we can check if anything was read
  bool symmetry_equiv_pos_site_id_Flag = false; // this is to read symmetry lines from lines that have sym. id.

  // Try opening the file if it opens proceed with processing
  ifstream ciffile;
  cout << "Opening File: " << filename << endl;
  ciffile.open(filename);
  bool read_a = false, read_b = false, read_c = false, read_alpha = false, read_beta = false, read_gamma = false, initialized_cell = false; //keep track of when all cell params are parsed, so the cell can be created
  if(ciffile.is_open()) {
    while(!ciffile.eof()) {
      if(read_a && read_b && read_c && read_alpha && read_beta && read_gamma && !initialized_cell) {cell->initialize(); initialized_cell=true;}
      getline(ciffile,line);
//printf("DEBUG: read line %s\n", line.c_str());
      token = split(line," ()\r\t");
      exception: //I needed an easy way to jump out of the _loop command if an unknown command was found
      if (token.size() > 0) {
	      //Where all non-loop commands should be added
	      if(token[0].substr(0,5).compare(list[0]) == 0){ //name of unit cell
	        cell->name=token[0].substr(5);
	      }
	      else if (token[0].compare(list[1]) == 0){ //length a
	        cell->a=convertToDouble(token[1]);
          read_a = true;
	      }
	      else if (token[0].compare(list[2]) == 0){ //length b
	        cell->b=convertToDouble(token[1]);
          read_b = true;
	      }
	      else if (token[0].compare(list[3]) == 0){ //length c
	        cell->c=convertToDouble(token[1]);
          read_c = true;
	      }
	      else if (token[0].compare(list[4]) == 0){ //alpha
	        cell->alpha=convertToDouble(token[1]);
          read_alpha = true;
	      }
	      else if (token[0].compare(list[5]) == 0){ //beta
	        cell->beta=convertToDouble(token[1]);
          read_beta = true;
	      }
	      else if (token[0].compare(list[6]) == 0){ //gamma
	        cell->gamma=convertToDouble(token[1]);
          read_gamma = true;
	      }
        else if (token[0].compare(list[16]) == 0){ //_symmetry_Int_Tables_number
	        symmetry_Int_Table_number = convertToInt(token[1]);
	      }
	      else if (token[0].compare(list[7]) == 0){ //loop_
//printf("DEBUG: inside a \"loop_\" section\n");
	        vector<string> column_labels;
	        getline(ciffile,line);
	        token = split(line," \r\t");
          bool tokenized = false, in_loop = true;
          if(token.size()>0) tokenized=true;
//	        while (token[0].at(0)=='_') { //collect all of the collumn labels
	        while (tokenized && in_loop) { //collect all of the collumn labels
            if(token[0].at(0)=='_') {
	            column_labels.push_back(token[0]);
//printf("DEBUG: within loop, parsed a column header \"%s\"\n", token[0].c_str());
	            getline(ciffile,line);
//printf("DEBUG: read line \"%s\" - tokenizing ...\n", line.c_str());
	            token = split(line," \r\t");
              if(token.size()<=0) tokenized=false;
            } else in_loop = false;
	        }
          if(!tokenized) {
printf("\n#####\n##### WARNING: parsed a loop in cif file, but data was not present\n#####\n\n");
          } else {
//printf("DEBUG: exited loop successfully, having read data line \"%s\"\n", line.c_str());
            //collecting the data associated with each column and put
            // in correct place
            token = split(line," ,'\r\t"); //This is needed to split data
            bool need_to_convert_to_fractional = false;
            while(token.size()>0){
              if (token[0].at(0) =='_' || token[0].compare("loop_")==0 || token[0].at(0) == '#'){
                goto exception; // unexpected input
              }
              if (token.size()!=column_labels.size() && column_labels[0].compare(list[8]) != 0 && column_labels[0].compare(list[9]) != 0 && column_labels[0].compare(list[20]) != 0){
                goto exception; //unexpected input
              }
              for (unsigned int i=0; i<column_labels.size(); i++){
                switch (strCmpList(list,column_labels[i])){
  //printf("SYM DEBUG: checking for symmetry section ...\n");
	              //Where all loop commands should be added
                case 8: //_symmetry_equiv_pos_as_xyz and
                case 9: //_space_group_symop_operation_xyz have the same meaning
  //printf("SYM DEBUG: symmetry section found!\n");
	              if (!((token.size()==3&&symmetry_equiv_pos_site_id_Flag==false)||(token.size()==4&&symmetry_equiv_pos_site_id_Flag==true))){
	                cerr << "Error: Expected 3 strings for _symmetry_equiv_pos_as_xyz (or 4 if _symmetry_equiv_pos_site_id is present)" << endl;
  //	              abort();
                  ciffile.close();
                  return false;
	              }
                      if(token.size()==3) {
	                sym_x.push_back(token[0]);
	                sym_y.push_back(token[1]);
	                sym_z.push_back(token[2]);}
                        else {
                        sym_x.push_back(token[1]);
                        sym_y.push_back(token[2]);
                        sym_z.push_back(token[3]);
                        };
  //printf("SYM DEBUG: pushing back %s %s %s\n", token[0].c_str(), token[1].c_str(), token[2].c_str());
	              break;
                case 10:
	              atom_label.push_back(token[i]);
	              break;
                case 11:
	              atom_type.push_back(token[i]);
	              break;
                case 12:
	              atom_x.push_back(trans_to_origuc(convertToDouble(token[i])));
	              break;
                case 13:
	              atom_y.push_back(trans_to_origuc(convertToDouble(token[i])));
	              break;
                case 14:
	              atom_z.push_back(trans_to_origuc(convertToDouble(token[i])));
	              break;
                case 15:
	              atom_charge.push_back(convertToDouble(token[i]));
	              break;
                case 17:
	              atom_x.push_back(convertToDouble(token[i]));
                need_to_convert_to_fractional = true;
	              break;
                case 18:
	              atom_y.push_back(convertToDouble(token[i]));
                need_to_convert_to_fractional = true;
	              break;
                case 19:
	              atom_z.push_back(convertToDouble(token[i]));
                need_to_convert_to_fractional = true;
	              break;
                case 20:
                      symmetry_equiv_pos_site_id_Flag = true;
                      break;
                }
              }
              //now we've finished parsing this line, we might need to convert Cartesian to fractional coords
              if(need_to_convert_to_fractional) {
                Point tempcoor;
                int this_ID = atom_x.size()-1;
        	      tempcoor = cell->xyz_to_abc(atom_x.at(this_ID),atom_y.at(this_ID),atom_z.at(this_ID));
//printf("DEBUG: atom at Cartesian %.3f %.3f %.3f written to fractional %.3f %.3f %.3f\n", atom_x.at(this_ID),atom_y.at(this_ID),atom_z.at(this_ID), tempcoor[0], tempcoor[1], tempcoor[2]);
                atom_x.at(this_ID) = tempcoor[0];
                atom_y.at(this_ID) = tempcoor[1];
                atom_z.at(this_ID) = tempcoor[2];
              }
              getline(ciffile,line);
              token = split(line," ',\r\t");
            }
            column_labels.clear();
          }
        }
        token.clear();
      }
    }
    ciffile.close();

    //If no symmetry info was provided, we can assume that none is required (i.e., structure has 'P 1' symmetry), ONLY IF we did not read a symmetry_Int_Tables_Number!=1
    if (sym_x.size()==0 || sym_y.size()==0 || sym_z.size()==0){
      //no symmetry provided
      if (symmetry_Int_Table_number>=0 && symmetry_Int_Table_number!=1) {
        //read a symmetry table number, but it was not 1
        printf("ERROR:\n\tcif file provided no symmetry operations; however, a symmetry_Int_Tables_Number of %d was provided,\n\tindicating symmetry which is not 'P 1' (no symmetry operations);\n\tcannot proceed with insufficient symmetry information\nExiting ...\n", symmetry_Int_Table_number);
//        exit(EXIT_FAILURE);
        return false;
      } else {
        sym_x.push_back("x");
        sym_y.push_back("y");
        sym_z.push_back("z");
      }
    }

    //Now determine whether it is correct to use atom_label or atom_type (atom_label used only if atom_type has no data)
    bool CIF_USE_LABEL = atom_type.size()==0;

    //Now determine whether charges are used - only if they were provided
    bool CIF_CHARGES = atom_charge.size()>0;

    //Parse out the numbers from atom labels and types, if specified (defined in network.h)
    if (CIF_RMV_NUMS_FROM_ATOM_TYPE){
      if (!CIF_USE_LABEL){
	      for (unsigned int i=0; i<atom_type.size(); i++){
	        atom_type[i] = split(atom_type[i],"0123456789").at(0);
	      }
      }
      else{
	      for (unsigned int i=0; i<atom_label.size(); i++){
	        atom_label[i] = split(atom_label[i],"0123456789").at(0);
	      }
      }
    }

    //Error checking
    if (sym_x.size()==0 || sym_y.size()==0 || sym_z.size()==0 ){
      cerr << "Error: No .cif symmetry information given" << endl;
      cerr << "DEBUG SHOULDN'T HAPPEN" << endl;
      return false;
//      abort();
    }
    if (atom_label.size()==0 && CIF_USE_LABEL == true){
      cerr << "Error: No ''_atom_site_label'' or ''_atom_site_type_symbol'' information " << endl;
      cerr << "This structure appears to be invalid: there are no atom identifying element types or labels - if this is not the case, then this is a bug; please contact the developers." << endl;
      return false;
    }
    if (atom_type.size()==0 && CIF_USE_LABEL == false){
      cerr << "Error: No ''_atom_site_type_symbol'' information" << endl;
      cerr << "DEBUG SHOULDN'T HAPPEN" << endl;
      return false;
//      abort();
    }
    if (atom_x.size()!=atom_y.size() || atom_y.size()!=atom_z.size() || atom_x.size()==0){
      cerr << "Error: Atom coordinates not read properly (" << atom_x.size() << " x coords, " << atom_y.size() << " y coords, " << atom_z.size() << " z coords)" << endl;
//      abort();
      return false;
    }

    //If no name for the unit cell is given the filename becomes its name
    if (cell->name.size() == 0){
      cell->name = *filename;
    }

    //Now to fully assemble the ATOM_NETWORK initialize constructor
//    cell->initialize(); //this should now happen much earlier, during parsing

    ATOM tempatom;
    Point tempcoor;
    for (unsigned int i=0; i<atom_x.size(); i++){ //atoms
      if (CIF_USE_LABEL){
	      tempatom.type = atom_label[i];
      }
      else {
	      tempatom.type = atom_type[i];
      }
      tempatom.radius = lookupRadius(tempatom.type, radial);
      if(CIF_CHARGES) {
        tempatom.charge = atom_charge[i];
      } else tempatom.charge = 0;
      for (unsigned int j=0;j<sym_x.size(); j++){ //symmetries
	      tempatom.a_coord = trans_to_origuc(symbCalc(sym_x[j],atom_x[i],atom_y[i],atom_z[i]));
	      tempatom.b_coord = trans_to_origuc(symbCalc(sym_y[j],atom_x[i],atom_y[i],atom_z[i]));
	      tempatom.c_coord = trans_to_origuc(symbCalc(sym_z[j],atom_x[i],atom_y[i],atom_z[i]));
	      tempcoor = cell->abc_to_xyz (tempatom.a_coord,tempatom.b_coord,tempatom.c_coord);
	      tempatom.x = tempcoor[0];
	      tempatom.y = tempcoor[1];
	      tempatom.z = tempcoor[2];
	      tempatom.specialID = (i*sym_x.size())+j;

	      //make sure that no duplicate atoms are writen
	      int match=1;
	      for (unsigned int k=0;k<cell->atoms.size(); k++){
                if(cell->calcDistance(cell->atoms[k],tempatom)<thresholdLarge) { match=0;
/*
	        if (tempatom.a_coord-thresholdLarge < cell->atoms[k].a_coord && cell->atoms[k].a_coord < tempatom.a_coord+thresholdLarge)
          if (tempatom.b_coord-thresholdLarge < cell->atoms[k].b_coord && cell->atoms[k].b_coord < tempatom.b_coord+thresholdLarge )
          if (tempatom.c_coord-thresholdLarge < cell->atoms[k].c_coord && cell->atoms[k].c_coord < tempatom.c_coord+thresholdLarge ){
            match=0;
*/
          }
        }
        if (match == 1){
          cell->atoms.push_back(tempatom);
        }
      }
    }
    cell->numAtoms = cell->atoms.size();
  }
  else{
    cout << "Failed to open: " << filename << endl;
    ciffile.close();
//    exit(1);
    return false;
  }
  return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x958, %rsp            # imm = 0x958
movl %edx, %r12d
movq %rsi, %rbx
movq %rdi, %r13
leaq 0x30(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq $0x0, -0x8(%rbp)
movb $0x0, (%rbp)
leaq 0x4a0(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a775(%rip), %rsi    # 0x14dc01
leaq 0x12a773(%rip), %rdx    # 0x14dc06
leaq 0x490(%rsp), %r14
movq %r14, %rdi
callq 0x22538
leaq 0x4b0(%rsp), %r15
leaq 0x4c0(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a749(%rip), %rsi    # 0x14dc07
leaq 0x12a750(%rip), %rdx    # 0x14dc15
movq %r15, %rdi
callq 0x22538
leaq 0x4d0(%rsp), %r15
leaq 0x4e0(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a72e(%rip), %rsi    # 0x14dc16
leaq 0x12a735(%rip), %rdx    # 0x14dc24
movq %r15, %rdi
callq 0x22538
leaq 0x4f0(%rsp), %r15
leaq 0x500(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a713(%rip), %rsi    # 0x14dc25
leaq 0x12a71a(%rip), %rdx    # 0x14dc33
movq %r15, %rdi
callq 0x22538
leaq 0x510(%rsp), %r15
leaq 0x520(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a6f8(%rip), %rsi    # 0x14dc34
leaq 0x12a702(%rip), %rdx    # 0x14dc45
movq %r15, %rdi
callq 0x22538
leaq 0x530(%rsp), %r15
leaq 0x540(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a6e0(%rip), %rsi    # 0x14dc46
leaq 0x12a6e9(%rip), %rdx    # 0x14dc56
movq %r15, %rdi
callq 0x22538
leaq 0x550(%rsp), %r15
leaq 0x560(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a6c7(%rip), %rsi    # 0x14dc57
leaq 0x12a6d1(%rip), %rdx    # 0x14dc68
movq %r15, %rdi
callq 0x22538
leaq 0x570(%rsp), %r15
leaq 0x580(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a6af(%rip), %rsi    # 0x14dc69
leaq 0x12a6ad(%rip), %rdx    # 0x14dc6e
movq %r15, %rdi
callq 0x22538
leaq 0x590(%rsp), %r15
leaq 0x5a0(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a68b(%rip), %rsi    # 0x14dc6f
leaq 0x12a69e(%rip), %rdx    # 0x14dc89
movq %r15, %rdi
callq 0x22538
leaq 0x5b0(%rsp), %r15
leaq 0x5c0(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a67c(%rip), %rsi    # 0x14dc8a
leaq 0x12a695(%rip), %rdx    # 0x14dcaa
movq %r15, %rdi
callq 0x22538
leaq 0x5d0(%rsp), %r15
leaq 0x5e0(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a673(%rip), %rsi    # 0x14dcab
leaq 0x12a67c(%rip), %rdx    # 0x14dcbb
movq %r15, %rdi
callq 0x22538
leaq 0x5f0(%rsp), %r15
leaq 0x600(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a65a(%rip), %rsi    # 0x14dcbc
leaq 0x12a669(%rip), %rdx    # 0x14dcd2
movq %r15, %rdi
callq 0x22538
leaq 0x610(%rsp), %r15
leaq 0x620(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a647(%rip), %rsi    # 0x14dcd3
leaq 0x12a652(%rip), %rdx    # 0x14dce5
movq %r15, %rdi
callq 0x22538
leaq 0x630(%rsp), %r15
leaq 0x640(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a630(%rip), %rsi    # 0x14dce6
leaq 0x12a63b(%rip), %rdx    # 0x14dcf8
movq %r15, %rdi
callq 0x22538
leaq 0x650(%rsp), %r15
leaq 0x660(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a619(%rip), %rsi    # 0x14dcf9
leaq 0x12a624(%rip), %rdx    # 0x14dd0b
movq %r15, %rdi
callq 0x22538
leaq 0x670(%rsp), %r15
leaq 0x680(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a602(%rip), %rsi    # 0x14dd0c
leaq 0x12a60c(%rip), %rdx    # 0x14dd1d
movq %r15, %rdi
callq 0x22538
leaq 0x690(%rsp), %r15
leaq 0x6a0(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a5ea(%rip), %rsi    # 0x14dd1e
leaq 0x12a5fe(%rip), %rdx    # 0x14dd39
movq %r15, %rdi
callq 0x22538
leaq 0x6b0(%rsp), %r15
leaq 0x6c0(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a5dc(%rip), %rsi    # 0x14dd3a
leaq 0x12a5e7(%rip), %rdx    # 0x14dd4c
movq %r15, %rdi
callq 0x22538
leaq 0x6d0(%rsp), %r15
leaq 0x6e0(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a5c5(%rip), %rsi    # 0x14dd4d
leaq 0x12a5d0(%rip), %rdx    # 0x14dd5f
movq %r15, %rdi
callq 0x22538
leaq 0x6f0(%rsp), %r15
leaq 0x700(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a5ae(%rip), %rsi    # 0x14dd60
leaq 0x12a5b9(%rip), %rdx    # 0x14dd72
movq %r15, %rdi
callq 0x22538
movq %r13, 0xd8(%rsp)
movl %r12d, 0x23c(%rsp)
movq %rbx, 0x18(%rsp)
leaq 0x710(%rsp), %r15
leaq 0x720(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x12a582(%rip), %rsi    # 0x14dd73
leaq 0x12a596(%rip), %rdx    # 0x14dd8e
movq %r15, %rdi
callq 0x22538
leaq 0x730(%rsp), %r15
leaq 0x740(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x12eafe(%rip), %rsi    # 0x152319
leaq 0x12eafb(%rip), %rdx    # 0x15231d
movq %r15, %rdi
callq 0x22538
leaq 0x100(%rsp), %rdi
leaq 0x490(%rsp), %rsi
callq 0x4a55a
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
xorl %eax, %eax
movq %rax, 0x10(%rsp)
movq %rax, 0xf0(%rsp)
movaps %xmm0, 0xe0(%rsp)
movq %rax, 0x230(%rsp)
movaps %xmm0, 0x220(%rsp)
movq %rax, 0x210(%rsp)
movaps %xmm0, 0x200(%rsp)
movq %rax, 0x280(%rsp)
movaps %xmm0, 0x270(%rsp)
movq %rax, 0x260(%rsp)
movaps %xmm0, 0x250(%rsp)
movq %rax, 0x70(%rsp)
movaps %xmm0, 0x60(%rsp)
movq %rax, 0xd0(%rsp)
movaps %xmm0, 0xc0(%rsp)
movq %rax, 0xb0(%rsp)
movaps %xmm0, 0xa0(%rsp)
movq %rax, 0x1f0(%rsp)
movaps %xmm0, 0x1e0(%rsp)
leaq 0x750(%rsp), %rdi
callq 0x44d0
movq 0x1716d5(%rip), %r14    # 0x194fc0
leaq 0x12a49d(%rip), %rsi    # 0x14dd8f
movl $0xe, %edx
movq %r14, %rdi
callq 0x44e0
movq 0xd8(%rsp), %rbx
testq %rbx, %rbx
je 0x23928
movq %rbx, %rdi
callq 0x41e0
movq 0x1716a5(%rip), %rdi    # 0x194fc0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x44e0
jmp 0x23940
movq (%r14), %rax
movq -0x18(%rax), %rax
leaq (%r14,%rax), %rdi
movl 0x20(%r14,%rax), %esi
orl $0x1, %esi
callq 0x4710
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x4420
movsbl %al, %esi
movq 0x171662(%rip), %rdi    # 0x194fc0
callq 0x4040
movq %rax, %rdi
callq 0x42c0
leaq 0x750(%rsp), %rdi
movq 0xd8(%rsp), %rsi
movl $0x8, %edx
callq 0x4280
leaq 0x7c8(%rsp), %rdi
callq 0x4120
testb %al, %al
je 0x24b04
movq 0x750(%rsp), %rax
movq -0x18(%rax), %rcx
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
testb $0x2, 0x770(%rsp,%rcx)
jne 0x24b4f
movq 0x18(%rsp), %rcx
addq $0x320, %rcx            # imm = 0x320
movq %rcx, 0x430(%rsp)
movq $0x0, 0x138(%rsp)
movq $0x0, 0x240(%rsp)
movq $0x0, 0x248(%rsp)
movq $0x0, 0x118(%rsp)
movq $0x0, 0x120(%rsp)
movq $0x0, 0x128(%rsp)
movq $0x0, 0x130(%rsp)
movq $0x0, 0x78(%rsp)
movq 0x130(%rsp), %rcx
andb 0x128(%rsp), %cl
movq 0x120(%rsp), %rdx
andb 0x118(%rsp), %dl
andb %cl, %dl
movq 0x248(%rsp), %rcx
andb 0x240(%rsp), %cl
andb %dl, %cl
notb %cl
orb 0x138(%rsp), %cl
testb $0x1, %cl
jne 0x23a86
movq 0x18(%rsp), %rdi
callq 0x51db4
movb $0x1, %al
movq %rax, 0x138(%rsp)
movq 0x750(%rsp), %rax
movq -0x18(%rax), %rdi
leaq 0x750(%rsp), %rax
addq %rax, %rdi
movl $0xa, %esi
callq 0x4420
movsbl %al, %edx
leaq 0x750(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x47e0
leaq 0x320(%rsp), %rax
movq %rax, 0x310(%rsp)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x310(%rsp), %rdi
callq 0xf3ce
leaq 0x420(%rsp), %rax
movq %rax, 0x410(%rsp)
leaq 0x410(%rsp), %rbx
movq %rbx, %rdi
leaq 0x12a29e(%rip), %rsi    # 0x14dd9e
leaq 0x12a29c(%rip), %rdx    # 0x14dda3
callq 0x22538
leaq 0x40(%rsp), %r15
movq %r15, %rdi
leaq 0x310(%rsp), %rsi
movq %rbx, %rdx
callq 0x4a3cc
movq 0x10(%rsp), %rax
movaps 0x40(%rsp), %xmm0
movq 0x50(%rsp), %rcx
movq %rcx, 0x10(%rsp)
movaps (%rsp), %xmm1
movaps %xmm0, (%rsp)
movaps %xmm1, 0x140(%rsp)
movq %rax, 0x150(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x40(%rsp)
movq $0x0, 0x50(%rsp)
leaq 0x140(%rsp), %rdi
callq 0x2f4c2
movq %r15, %rdi
callq 0x2f4c2
movq 0x410(%rsp), %rdi
leaq 0x420(%rsp), %rax
cmpq %rax, %rdi
je 0x23b9b
movq 0x420(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x310(%rsp), %rdi
leaq 0x320(%rsp), %rax
cmpq %rax, %rdi
je 0x23bc0
movq 0x320(%rsp), %rsi
incq %rsi
callq 0x4470
movq (%rsp), %rsi
cmpq %rsi, 0x8(%rsp)
je 0x249a9
movl %r14d, 0x58(%rsp)
movl $0x5, %ecx
leaq 0x140(%rsp), %rbx
movq %rbx, %rdi
xorl %edx, %edx
callq 0x4490
movq 0x100(%rsp), %rsi
movq %rbx, %rdi
callq 0x4050
movl %eax, %r15d
movq 0x140(%rsp), %rdi
leaq 0x150(%rsp), %rax
cmpq %rax, %rdi
je 0x23c23
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x4470
testl %r15d, %r15d
je 0x249c8
movq (%rsp), %rdi
movq 0x100(%rsp), %rsi
addq $0x20, %rsi
callq 0x4050
leaq 0x3e0(%rsp), %r14
leaq 0x468(%rsp), %r15
movq (%rsp), %rdi
testl %eax, %eax
je 0x24a26
movq 0x100(%rsp), %rsi
addq $0x40, %rsi
callq 0x4050
movq (%rsp), %rdi
testl %eax, %eax
je 0x24a48
movq 0x100(%rsp), %rsi
addq $0x60, %rsi
callq 0x4050
movq (%rsp), %rdi
testl %eax, %eax
je 0x24a6a
movq 0x100(%rsp), %rsi
subq $-0x80, %rsi
callq 0x4050
movq (%rsp), %rdi
testl %eax, %eax
je 0x24a8c
movq 0x100(%rsp), %rsi
movl $0xa0, %eax
addq %rax, %rsi
callq 0x4050
movq (%rsp), %rdi
testl %eax, %eax
je 0x24aae
movq 0x100(%rsp), %rsi
movl $0xc0, %eax
addq %rax, %rsi
callq 0x4050
movq (%rsp), %rdi
testl %eax, %eax
je 0x24ad0
movq 0x100(%rsp), %rsi
movl $0x200, %eax            # imm = 0x200
addq %rax, %rsi
callq 0x4050
movq (%rsp), %rdi
testl %eax, %eax
je 0x24af2
movq 0x100(%rsp), %rsi
movl $0xe0, %eax
addq %rax, %rsi
callq 0x4050
testl %eax, %eax
jne 0x24969
xorps %xmm0, %xmm0
movaps %xmm0, 0x40(%rsp)
movq $0x0, 0x50(%rsp)
movq 0x750(%rsp), %rax
movq -0x18(%rax), %rdi
leaq 0x750(%rsp), %rbx
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4420
movsbl %al, %edx
movq %rbx, %rdi
leaq 0x20(%rsp), %rsi
callq 0x47e0
leaq 0x300(%rsp), %rax
movq %rax, 0x2f0(%rsp)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2f0(%rsp), %rdi
callq 0xf3ce
leaq 0x400(%rsp), %rax
movq %rax, 0x3f0(%rsp)
leaq 0x3f0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x129fe2(%rip), %rsi    # 0x14dda4
leaq 0x129fde(%rip), %rdx    # 0x14dda7
callq 0x22538
leaq 0x80(%rsp), %r12
movq %r12, %rdi
leaq 0x2f0(%rsp), %rsi
movq %rbx, %rdx
callq 0x4a3cc
movq 0x10(%rsp), %rax
movaps 0x80(%rsp), %xmm0
movq 0x90(%rsp), %rcx
movq %rcx, 0x10(%rsp)
movaps (%rsp), %xmm1
movaps %xmm0, (%rsp)
movaps %xmm1, 0x140(%rsp)
movq %rax, 0x150(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x80(%rsp)
movq $0x0, 0x90(%rsp)
leaq 0x140(%rsp), %rdi
callq 0x2f4c2
movq %r12, %rdi
callq 0x2f4c2
movq 0x3f0(%rsp), %rdi
leaq 0x400(%rsp), %rax
cmpq %rax, %rdi
je 0x23e6c
movq 0x400(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x2f0(%rsp), %rdi
leaq 0x300(%rsp), %rax
cmpq %rax, %rdi
je 0x23e91
movq 0x300(%rsp), %rsi
incq %rsi
callq 0x4470
movq (%rsp), %rsi
cmpq %rsi, 0x8(%rsp)
je 0x24953
cmpq $0x0, 0x8(%rsi)
je 0x2567a
movq (%rsi), %rax
movb (%rax), %bl
cmpb $0x5f, %bl
jne 0x24014
leaq 0x40(%rsp), %rdi
callq 0x2f520
movq 0x750(%rsp), %rax
movq -0x18(%rax), %rdi
leaq 0x750(%rsp), %rax
addq %rax, %rdi
movl $0xa, %esi
callq 0x4420
movsbl %al, %edx
leaq 0x750(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x47e0
movq %r14, 0x3d0(%rsp)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x3d0(%rsp), %rdi
callq 0xf3ce
movq %r15, 0x458(%rsp)
leaq 0x458(%rsp), %rbp
movq %rbp, %rdi
leaq 0x129e6f(%rip), %rsi    # 0x14dda4
leaq 0x129e6b(%rip), %rdx    # 0x14dda7
callq 0x22538
leaq 0x80(%rsp), %r12
movq %r12, %rdi
leaq 0x3d0(%rsp), %rsi
movq %rbp, %rdx
callq 0x4a3cc
movq 0x10(%rsp), %rax
movaps 0x80(%rsp), %xmm0
movq 0x90(%rsp), %rcx
movq %rcx, 0x10(%rsp)
movaps (%rsp), %xmm1
movaps %xmm0, (%rsp)
movaps %xmm1, 0x140(%rsp)
movq %rax, 0x150(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x80(%rsp)
movq $0x0, 0x90(%rsp)
leaq 0x140(%rsp), %rdi
callq 0x2f4c2
movq %r12, %rdi
callq 0x2f4c2
movq 0x458(%rsp), %rdi
cmpq %r15, %rdi
je 0x23fd7
movq 0x468(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x3d0(%rsp), %rdi
cmpq %r14, %rdi
je 0x23ff4
movq 0x3e0(%rsp), %rsi
incq %rsi
callq 0x4470
movq (%rsp), %rsi
movq 0x8(%rsp), %rax
cmpq %rsi, %rax
je 0x2400b
cmpb $0x5f, %bl
je 0x23ea0
cmpq %rsi, %rax
je 0x24953
leaq 0x2e0(%rsp), %rax
movq %rax, 0x2d0(%rsp)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2d0(%rsp), %rdi
callq 0xf3ce
leaq 0x3c0(%rsp), %rax
movq %rax, 0x3b0(%rsp)
leaq 0x3b0(%rsp), %r14
movq %r14, %rdi
leaq 0x129d48(%rip), %rsi    # 0x14dda8
leaq 0x129d46(%rip), %rdx    # 0x14ddad
callq 0x22538
leaq 0x40(%rsp), %rbx
leaq 0x80(%rsp), %r15
movq %r15, %rdi
leaq 0x2d0(%rsp), %rsi
movq %r14, %rdx
callq 0x4a3cc
movl 0x58(%rsp), %r14d
movq 0x10(%rsp), %rax
movaps 0x80(%rsp), %xmm0
movq 0x90(%rsp), %rcx
movq %rcx, 0x10(%rsp)
movaps (%rsp), %xmm1
movaps %xmm0, (%rsp)
movaps %xmm1, 0x140(%rsp)
movq %rax, 0x150(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x80(%rsp)
movq $0x0, 0x90(%rsp)
leaq 0x140(%rsp), %rdi
callq 0x2f4c2
movq %r15, %rdi
callq 0x2f4c2
movq 0x3b0(%rsp), %rdi
leaq 0x3c0(%rsp), %rax
cmpq %rax, %rdi
je 0x24114
movq 0x3c0(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x2d0(%rsp), %rdi
leaq 0x2e0(%rsp), %rax
cmpq %rax, %rdi
je 0x24139
movq 0x2e0(%rsp), %rsi
incq %rsi
callq 0x4470
movq (%rsp), %rdi
cmpq %rdi, 0x8(%rsp)
je 0x24915
xorl %ebp, %ebp
cmpq $0x0, 0x8(%rdi)
je 0x2568c
movq (%rdi), %rax
cmpb $0x5f, (%rax)
je 0x248f9
leaq 0x129b01(%rip), %rsi    # 0x14dc69
callq 0x4170
testl %eax, %eax
je 0x248f9
movq (%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2568c
movq (%rax), %rcx
cmpb $0x23, (%rcx)
je 0x248f9
movq 0x8(%rsp), %rcx
subq %rax, %rcx
movq 0x40(%rsp), %rdi
movq 0x48(%rsp), %rax
subq %rdi, %rax
cmpq %rax, %rcx
je 0x24208
movq 0x100(%rsp), %rsi
movl $0x100, %eax            # imm = 0x100
addq %rax, %rsi
callq 0x4050
movq 0x40(%rsp), %rdi
testl %eax, %eax
je 0x24208
movq 0x100(%rsp), %rsi
movl $0x120, %eax            # imm = 0x120
addq %rax, %rsi
callq 0x4050
movq 0x40(%rsp), %rdi
testl %eax, %eax
je 0x24208
movq 0x100(%rsp), %rsi
movl $0x280, %eax            # imm = 0x280
addq %rax, %rsi
callq 0x4050
testl %eax, %eax
jne 0x248f9
movq 0x40(%rsp), %rdi
cmpq %rdi, 0x48(%rsp)
je 0x24611
movl $0x1, %r14d
xorl %r15d, %r15d
leaq 0x478(%rsp), %rdi
leaq 0x100(%rsp), %rsi
callq 0x2f55e
movq 0x40(%rsp), %rax
shlq $0x5, %r15
leaq 0x3a0(%rsp), %rcx
movq %rcx, 0x390(%rsp)
movq (%rax,%r15), %rsi
movq 0x8(%rax,%r15), %rdx
addq %rsi, %rdx
leaq 0x390(%rsp), %r12
movq %r12, %rdi
callq 0xf3ce
leaq 0x478(%rsp), %rdi
movq %r12, %rsi
callq 0x4a36c
movl %eax, %r12d
movq 0x390(%rsp), %rdi
leaq 0x3a0(%rsp), %rax
cmpq %rax, %rdi
je 0x2429e
movq 0x3a0(%rsp), %rsi
incq %rsi
callq 0x4470
leaq 0x478(%rsp), %rdi
callq 0x2f4c2
addl $-0x8, %r12d
cmpl $0xc, %r12d
ja 0x245b0
leaq 0x129890(%rip), %rcx    # 0x14db50
movslq (%rcx,%r12,4), %rax
addq %rcx, %rax
jmpq *%rax
movq (%rsp), %rsi
movq 0x8(%rsp), %rax
subq %rsi, %rax
cmpq $0x60, %rax
jne 0x243be
movq 0x78(%rsp), %rcx
andb $0x1, %cl
jne 0x243be
leaq 0xe0(%rsp), %rdi
callq 0x2f520
movq (%rsp), %rsi
addq $0x20, %rsi
leaq 0x220(%rsp), %rdi
callq 0x2f520
movq (%rsp), %r15
addq $0x40, %r15
jmp 0x24403
addq (%rsp), %r15
movq %r15, %rdi
callq 0x4a5c7
movsd %xmm0, 0x140(%rsp)
movq 0xa8(%rsp), %rsi
cmpq 0xb0(%rsp), %rsi
je 0x24556
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0xa8(%rsp)
jmp 0x245ad
addq (%rsp), %r15
leaq 0x270(%rsp), %rdi
jmp 0x244a1
addq (%rsp), %r15
movq %r15, %rdi
callq 0x4a5c7
callq 0x839b6
movsd %xmm0, 0x140(%rsp)
movq 0xc8(%rsp), %rsi
cmpq 0xd0(%rsp), %rsi
je 0x245cf
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0xc8(%rsp)
jmp 0x245b0
movb $0x1, %al
movq %rax, 0x78(%rsp)
jmp 0x245b0
cmpq $0x80, %rax
jne 0x24bcb
testb $0x1, 0x78(%rsp)
je 0x24bcb
addq $0x20, %rsi
leaq 0xe0(%rsp), %rdi
callq 0x2f520
movq (%rsp), %rsi
addq $0x40, %rsi
leaq 0x220(%rsp), %rdi
callq 0x2f520
movq (%rsp), %r15
addq $0x60, %r15
leaq 0x200(%rsp), %rdi
jmp 0x244a1
addq (%rsp), %r15
movq %r15, %rdi
callq 0x4a5c7
callq 0x839b6
movsd %xmm0, 0x140(%rsp)
movq 0xa8(%rsp), %rsi
cmpq 0xb0(%rsp), %rsi
je 0x245e6
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0xa8(%rsp)
jmp 0x245b0
addq (%rsp), %r15
movq %r15, %rdi
callq 0x4a5c7
movsd %xmm0, 0x140(%rsp)
movq 0x1e8(%rsp), %rsi
cmpq 0x1f0(%rsp), %rsi
je 0x2456d
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x1e8(%rsp)
jmp 0x245b0
addq (%rsp), %r15
leaq 0x250(%rsp), %rdi
movq %r15, %rsi
callq 0x2f520
jmp 0x245b0
addq (%rsp), %r15
movq %r15, %rdi
callq 0x4a5c7
callq 0x839b6
movsd %xmm0, 0x140(%rsp)
movq 0x68(%rsp), %rsi
cmpq 0x70(%rsp), %rsi
je 0x245fd
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x68(%rsp)
jmp 0x245b0
addq (%rsp), %r15
movq %r15, %rdi
callq 0x4a5c7
movsd %xmm0, 0x140(%rsp)
movq 0xc8(%rsp), %rsi
cmpq 0xd0(%rsp), %rsi
je 0x24584
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0xc8(%rsp)
jmp 0x245ad
addq (%rsp), %r15
movq %r15, %rdi
callq 0x4a5c7
movsd %xmm0, 0x140(%rsp)
movq 0x68(%rsp), %rsi
cmpq 0x70(%rsp), %rsi
je 0x2459b
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x68(%rsp)
jmp 0x245ad
leaq 0xa0(%rsp), %rdi
leaq 0x140(%rsp), %rdx
callq 0x1391c
jmp 0x245ad
leaq 0x1e0(%rsp), %rdi
leaq 0x140(%rsp), %rdx
callq 0x1391c
jmp 0x245b0
leaq 0xc0(%rsp), %rdi
leaq 0x140(%rsp), %rdx
callq 0x1391c
jmp 0x245ad
leaq 0x60(%rsp), %rdi
leaq 0x140(%rsp), %rdx
callq 0x1391c
movb $0x1, %bpl
movq 0x48(%rsp), %rax
subq 0x40(%rsp), %rax
movl %r14d, %r15d
sarq $0x5, %rax
incl %r14d
cmpq %r15, %rax
ja 0x2421c
jmp 0x24611
leaq 0xc0(%rsp), %rdi
leaq 0x140(%rsp), %rdx
callq 0x1391c
jmp 0x245b0
leaq 0xa0(%rsp), %rdi
leaq 0x140(%rsp), %rdx
callq 0x1391c
jmp 0x245b0
leaq 0x60(%rsp), %rdi
leaq 0x140(%rsp), %rdx
callq 0x1391c
jmp 0x245b0
testb $0x1, %bpl
movl 0x58(%rsp), %r14d
je 0x24797
xorps %xmm0, %xmm0
xorps %xmm1, %xmm1
xorps %xmm2, %xmm2
leaq 0x140(%rsp), %rdi
callq 0x83f68
movq 0x60(%rsp), %rax
movq 0x68(%rsp), %r15
subq %rax, %r15
movq %r15, %rdx
sarq $0x3, %rdx
shlq $0x1d, %r15
movabsq $-0x100000000, %rcx     # imm = 0xFFFFFFFF00000000
addq %rcx, %r15
sarq $0x20, %r15
cmpq %r15, %rdx
jbe 0x256af
movq 0xc0(%rsp), %rcx
movq 0xc8(%rsp), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r15, %rdx
jbe 0x256af
movq 0xa0(%rsp), %rsi
movq 0xa8(%rsp), %rdx
subq %rsi, %rdx
sarq $0x3, %rdx
cmpq %r15, %rdx
jbe 0x256af
movsd (%rax,%r15,8), %xmm0
movsd (%rcx,%r15,8), %xmm1
movsd (%rsi,%r15,8), %xmm2
leaq 0x80(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x52eec
movq 0x90(%rsp), %rax
movq %rax, 0x150(%rsp)
movups 0x80(%rsp), %xmm0
movaps %xmm0, 0x140(%rsp)
leaq 0x140(%rsp), %rdi
xorl %esi, %esi
callq 0x83f9a
movq 0x60(%rsp), %rcx
movq 0x68(%rsp), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r15, %rdx
jbe 0x2569e
movsd (%rax), %xmm0
movsd %xmm0, (%rcx,%r15,8)
leaq 0x140(%rsp), %rdi
movl $0x1, %esi
callq 0x83f9a
movq 0xc0(%rsp), %rcx
movq 0xc8(%rsp), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r15, %rdx
jbe 0x2569e
movsd (%rax), %xmm0
movsd %xmm0, (%rcx,%r15,8)
leaq 0x140(%rsp), %rdi
movl $0x2, %esi
callq 0x83f9a
movq 0xa0(%rsp), %rcx
movq 0xa8(%rsp), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r15, %rdx
jbe 0x2569e
movsd (%rax), %xmm0
movsd %xmm0, (%rcx,%r15,8)
movq 0x750(%rsp), %rax
movq -0x18(%rax), %rdi
leaq 0x750(%rsp), %rax
addq %rax, %rdi
movl $0xa, %esi
callq 0x4420
movsbl %al, %edx
leaq 0x750(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x47e0
leaq 0x2c0(%rsp), %rax
movq %rax, 0x2b0(%rsp)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2b0(%rsp), %rdi
callq 0xf3ce
leaq 0x380(%rsp), %rax
movq %rax, 0x370(%rsp)
leaq 0x370(%rsp), %r12
movq %r12, %rdi
leaq 0x1295ff(%rip), %rsi    # 0x14de18
leaq 0x1295fd(%rip), %rdx    # 0x14de1d
callq 0x22538
leaq 0x80(%rsp), %r15
movq %r15, %rdi
leaq 0x2b0(%rsp), %rsi
movq %r12, %rdx
callq 0x4a3cc
movq 0x10(%rsp), %rax
movaps 0x80(%rsp), %xmm0
movq 0x90(%rsp), %rcx
movq %rcx, 0x10(%rsp)
movaps (%rsp), %xmm1
movaps %xmm0, (%rsp)
movaps %xmm1, 0x140(%rsp)
movq %rax, 0x150(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x80(%rsp)
movq $0x0, 0x90(%rsp)
leaq 0x140(%rsp), %rdi
callq 0x2f4c2
movq %r15, %rdi
callq 0x2f4c2
movq 0x370(%rsp), %rdi
leaq 0x380(%rsp), %rax
cmpq %rax, %rdi
je 0x248c3
movq 0x380(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x2b0(%rsp), %rdi
leaq 0x2c0(%rsp), %rax
cmpq %rax, %rdi
je 0x248e8
movq 0x2c0(%rsp), %rsi
incq %rsi
callq 0x4470
movq (%rsp), %rdi
cmpq %rdi, 0x8(%rsp)
jne 0x2414a
jmp 0x24915
movq %rbx, %rdi
callq 0x2f4c2
movq (%rsp), %rsi
cmpq %rsi, 0x8(%rsp)
jne 0x23bd4
jmp 0x249a9
movq 0x40(%rsp), %rbx
movq 0x48(%rsp), %r14
cmpq %rbx, %r14
je 0x2495f
leaq 0x10(%rbx), %r15
movq -0x10(%r15), %rdi
cmpq %rdi, %r15
je 0x2493c
movq (%r15), %rsi
incq %rsi
callq 0x4470
leaq 0x20(%r15), %rax
addq $0x10, %r15
cmpq %r14, %r15
movq %rax, %r15
jne 0x24928
movq %rbx, 0x48(%rsp)
jmp 0x2495f
leaq 0x129f86(%rip), %rdi    # 0x14e8e0
callq 0x4660
leaq 0x40(%rsp), %rdi
callq 0x2f4c2
movq (%rsp), %rbx
movq 0x8(%rsp), %r14
cmpq %rbx, %r14
je 0x249a4
leaq 0x10(%rbx), %r15
movq -0x10(%r15), %rdi
cmpq %rdi, %r15
je 0x2498f
movq (%r15), %rsi
incq %rsi
callq 0x4470
leaq 0x20(%r15), %rax
addq $0x10, %r15
cmpq %r14, %r15
movq %rax, %r15
jne 0x2497b
movq %rbx, 0x8(%rsp)
movl 0x58(%rsp), %r14d
movq 0x750(%rsp), %rax
movq -0x18(%rax), %rcx
testb $0x2, 0x770(%rsp,%rcx)
je 0x23a2b
jmp 0x24b4f
movq (%rsp), %rsi
movl $0x5, %edx
leaq 0x140(%rsp), %rbx
movq %rbx, %rdi
movq $-0x1, %rcx
callq 0x4490
movq 0x430(%rsp), %rdi
movq %rbx, %rsi
callq 0x4540
movq 0x140(%rsp), %rdi
leaq 0x150(%rsp), %rax
cmpq %rax, %rdi
je 0x24969
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x4470
jmp 0x24969
addq $0x20, %rdi
callq 0x4a5c7
movq 0x18(%rsp), %rax
movsd %xmm0, 0x8(%rax)
movb $0x1, %al
movq %rax, 0x130(%rsp)
jmp 0x24969
addq $0x20, %rdi
callq 0x4a5c7
movq 0x18(%rsp), %rax
movsd %xmm0, 0x10(%rax)
movb $0x1, %al
movq %rax, 0x128(%rsp)
jmp 0x24969
addq $0x20, %rdi
callq 0x4a5c7
movq 0x18(%rsp), %rax
movsd %xmm0, 0x18(%rax)
movb $0x1, %al
movq %rax, 0x120(%rsp)
jmp 0x24969
addq $0x20, %rdi
callq 0x4a5c7
movq 0x18(%rsp), %rax
movsd %xmm0, 0x20(%rax)
movb $0x1, %al
movq %rax, 0x118(%rsp)
jmp 0x24969
addq $0x20, %rdi
callq 0x4a5c7
movq 0x18(%rsp), %rax
movsd %xmm0, 0x28(%rax)
movb $0x1, %al
movq %rax, 0x248(%rsp)
jmp 0x24969
addq $0x20, %rdi
callq 0x4a5c7
movq 0x18(%rsp), %rax
movsd %xmm0, 0x30(%rax)
movb $0x1, %al
movq %rax, 0x240(%rsp)
jmp 0x24969
addq $0x20, %rdi
callq 0x4a68a
movl %eax, 0x58(%rsp)
jmp 0x24969
movq 0x1704b5(%rip), %rbx    # 0x194fc0
leaq 0x129582(%rip), %rsi    # 0x14e094
movl $0x10, %edx
movq %rbx, %rdi
callq 0x44e0
movq 0xd8(%rsp), %r14
testq %r14, %r14
je 0x24c34
movq %r14, %rdi
callq 0x41e0
movq 0x170481(%rip), %rdi    # 0x194fc0
movq %r14, %rsi
movq %rax, %rdx
callq 0x44e0
jmp 0x24c4b
leaq 0x750(%rsp), %rdi
leaq 0x30(%rsp), %rbp
callq 0x40f0
movq 0xe0(%rsp), %rax
movq 0xe8(%rsp), %rcx
cmpq %rax, %rcx
je 0x24b9e
movq 0x228(%rsp), %rdx
cmpq 0x220(%rsp), %rdx
je 0x24b9e
movq 0x208(%rsp), %rdx
cmpq 0x200(%rsp), %rdx
jne 0x24d91
testl %r14d, %r14d
sets %al
cmpl $0x1, %r14d
sete %cl
orb %al, %cl
jne 0x24c88
leaq 0x129264(%rip), %rdi    # 0x14de1e
xorl %ebx, %ebx
movl %r14d, %esi
xorl %eax, %eax
callq 0x4060
jmp 0x25558
movq 0x17041e(%rip), %rbx    # 0x194ff0
leaq 0x1291d5(%rip), %rsi    # 0x14ddae
movl $0x69, %edx
movq %rbx, %rdi
callq 0x44e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x4420
movsbl %al, %esi
movq 0x1703ec(%rip), %rdi    # 0x194ff0
callq 0x4040
movq %rax, %rdi
callq 0x42c0
leaq 0x750(%rsp), %rdi
callq 0x40f0
leaq 0x40(%rsp), %rdi
callq 0x2f4c2
xorl %ebx, %ebx
leaq 0x30(%rsp), %rbp
jmp 0x25558
movq (%rbx), %rax
movq -0x18(%rax), %rax
leaq (%rbx,%rax), %rdi
movl 0x20(%rbx,%rax), %esi
orl $0x1, %esi
callq 0x4710
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x4420
movsbl %al, %esi
movq 0x170357(%rip), %rdi    # 0x194fc0
callq 0x4040
movq %rax, %rdi
callq 0x42c0
leaq 0x750(%rsp), %rdi
callq 0x40f0
jmp 0x25556
leaq 0x150(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1290b0(%rip), %rsi    # 0x14dd4b
leaq 0x1290aa(%rip), %rdx    # 0x14dd4c
leaq 0x140(%rsp), %rdi
callq 0x22538
leaq 0xe0(%rsp), %rdi
leaq 0x140(%rsp), %rsi
callq 0x2f96e
movq 0x140(%rsp), %rdi
cmpq %r14, %rdi
je 0x24ce1
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x4470
leaq 0x140(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x128bbf(%rip), %rsi    # 0x14d8b2
leaq 0x128bb9(%rip), %rdx    # 0x14d8b3
callq 0x22538
leaq 0x220(%rsp), %rdi
leaq 0x140(%rsp), %rsi
callq 0x2f96e
movq 0x140(%rsp), %rdi
cmpq %r14, %rdi
je 0x24d31
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x4470
leaq 0x140(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x12f34d(%rip), %rsi    # 0x154090
leaq 0x12f347(%rip), %rdx    # 0x154091
callq 0x22538
leaq 0x200(%rsp), %rdi
leaq 0x140(%rsp), %rsi
callq 0x2f96e
movq 0x140(%rsp), %rdi
cmpq %r14, %rdi
je 0x24d81
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0xe0(%rsp), %rax
movq 0xe8(%rsp), %rcx
cmpq %rax, %rcx
je 0x24e65
movq 0x228(%rsp), %rax
cmpq 0x220(%rsp), %rax
je 0x24e65
movq 0x208(%rsp), %rax
cmpq 0x200(%rsp), %rax
je 0x24e65
movq 0x250(%rsp), %rax
movq 0x258(%rsp), %rcx
movq 0x1e0(%rsp), %rdx
movq %rdx, 0x128(%rsp)
movq 0x1e8(%rsp), %rdx
movq %rdx, 0x120(%rsp)
movq %rax, 0x138(%rsp)
movq %rcx, 0x130(%rsp)
cmpq %rax, %rcx
jne 0x24ef6
movq 0x270(%rsp), %rax
cmpq %rax, 0x278(%rsp)
jne 0x24ef6
movq 0x1701c4(%rip), %rdi    # 0x194ff0
leaq 0x12911e(%rip), %rsi    # 0x14df51
movl $0x49, %edx
callq 0x44e0
movq 0x1701ac(%rip), %rbx    # 0x194ff0
movq %rbx, %rdi
callq 0x41f0
leaq 0x129148(%rip), %rsi    # 0x14df9b
movl $0xa9, %edx
movq %rbx, %rdi
callq 0x44e0
jmp 0x2554e
movq 0x170184(%rip), %rbx    # 0x194ff0
leaq 0x12909d(%rip), %rsi    # 0x14df10
movl $0x29, %edx
movq %rbx, %rdi
callq 0x44e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x4420
movsbl %al, %esi
movq 0x170152(%rip), %rdi    # 0x194ff0
callq 0x4040
movq %rax, %rdi
callq 0x42c0
movq 0x17013e(%rip), %rbx    # 0x194ff0
leaq 0x129081(%rip), %rsi    # 0x14df3a
movl $0x16, %edx
movq %rbx, %rdi
callq 0x44e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x4420
movsbl %al, %esi
movq 0x17010c(%rip), %rdi    # 0x194ff0
callq 0x4040
movq %rax, %rdi
callq 0x42c0
jmp 0x25556
movq 0x60(%rsp), %rcx
movq 0x68(%rsp), %rdx
movq %rdx, %rax
subq %rcx, %rax
movq 0xc8(%rsp), %rsi
subq 0xc0(%rsp), %rsi
cmpq %rsi, %rax
jne 0x2549f
cmpq %rcx, %rdx
je 0x2549f
movq 0xa8(%rsp), %rcx
subq 0xa0(%rsp), %rcx
cmpq %rcx, %rax
jne 0x2549f
movq 0x18(%rsp), %rax
cmpq $0x0, 0x328(%rax)
jne 0x24f76
movq 0x18(%rsp), %rax
leaq 0x320(%rax), %rdi
movq 0xd8(%rsp), %rax
movsbl (%rax), %r8d
movl $0x1, %ecx
xorl %esi, %esi
xorl %edx, %edx
callq 0x47f0
leaq 0x140(%rsp), %rdi
callq 0x51264
leaq 0x40(%rsp), %rdi
xorps %xmm0, %xmm0
xorps %xmm1, %xmm1
xorps %xmm2, %xmm2
callq 0x83f68
movq 0x68(%rsp), %rax
cmpq 0x60(%rsp), %rax
je 0x25468
leaq 0x448(%rsp), %rbx
leaq 0x360(%rsp), %r14
leaq 0x340(%rsp), %r12
movq 0x18(%rsp), %rax
addq $0x2f0, %rax            # imm = 0x2F0
movq %rax, 0xd8(%rsp)
movzbl 0x23c(%rsp), %eax
movl %eax, 0x118(%rsp)
leaq 0x140(%rsp), %r15
xorl %esi, %esi
movq $0x0, 0x58(%rsp)
movq 0x130(%rsp), %rax
cmpq 0x138(%rsp), %rax
leaq 0x270(%rsp), %rax
leaq 0x250(%rsp), %rcx
cmovneq %rcx, %rax
movq %rsi, 0x78(%rsp)
shlq $0x5, %rsi
addq (%rax), %rsi
leaq 0x180(%rsp), %rdi
callq 0x4240
leaq 0x438(%rsp), %rbp
movq %rbx, 0x438(%rsp)
movq 0x180(%rsp), %rsi
movq 0x188(%rsp), %rdx
addq %rsi, %rdx
movq %rbp, %rdi
callq 0xf3ce
movq %rbp, %rdi
movl 0x118(%rsp), %esi
callq 0x21d5e
movsd %xmm0, 0x170(%rsp)
movq 0x438(%rsp), %rdi
cmpq %rbx, %rdi
je 0x25090
movq 0x448(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x120(%rsp), %rax
cmpq 0x128(%rsp), %rax
movq 0x78(%rsp), %rcx
je 0x250b6
movq 0x1e0(%rsp), %rax
movsd (%rax,%rcx,8), %xmm0
jmp 0x250b9
xorps %xmm0, %xmm0
movsd %xmm0, 0x1c8(%rsp)
movq 0xe0(%rsp), %rax
cmpq %rax, 0xe8(%rsp)
je 0x25435
xorl %ebx, %ebx
xorl %ebp, %ebp
shlq $0x5, %rbx
movq %r14, 0x350(%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
leaq 0x350(%rsp), %rdi
callq 0xf3ce
movq 0x60(%rsp), %rax
movq 0x78(%rsp), %rcx
xorps %xmm0, %xmm0
cvtsd2ss (%rax,%rcx,8), %xmm0
movq 0xc0(%rsp), %rax
xorps %xmm1, %xmm1
cvtsd2ss (%rax,%rcx,8), %xmm1
movq 0xa0(%rsp), %rax
cvtsd2ss (%rax,%rcx,8), %xmm2
leaq 0x350(%rsp), %rdi
callq 0x4a88c
cvtss2sd %xmm0, %xmm0
callq 0x839b6
movsd %xmm0, 0x158(%rsp)
movq 0x350(%rsp), %rdi
cmpq %r14, %rdi
je 0x2516c
movq 0x360(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x220(%rsp), %rax
movq %r12, 0x330(%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
leaq 0x330(%rsp), %rdi
callq 0xf3ce
movq 0x60(%rsp), %rax
movq 0x78(%rsp), %rcx
xorps %xmm0, %xmm0
cvtsd2ss (%rax,%rcx,8), %xmm0
movq 0xc0(%rsp), %rax
xorps %xmm1, %xmm1
cvtsd2ss (%rax,%rcx,8), %xmm1
movq 0xa0(%rsp), %rax
xorps %xmm2, %xmm2
cvtsd2ss (%rax,%rcx,8), %xmm2
leaq 0x330(%rsp), %rdi
callq 0x4a88c
cvtss2sd %xmm0, %xmm0
callq 0x839b6
movsd %xmm0, 0x160(%rsp)
movq 0x330(%rsp), %rdi
cmpq %r12, %rdi
je 0x25203
movq 0x340(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x200(%rsp), %rax
leaq 0x2a0(%rsp), %rcx
movq %rcx, 0x290(%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
leaq 0x290(%rsp), %rdi
callq 0xf3ce
movq 0x60(%rsp), %rax
movq 0x78(%rsp), %rcx
xorps %xmm0, %xmm0
cvtsd2ss (%rax,%rcx,8), %xmm0
movq 0xc0(%rsp), %rax
xorps %xmm1, %xmm1
cvtsd2ss (%rax,%rcx,8), %xmm1
movq 0xa0(%rsp), %rax
xorps %xmm2, %xmm2
cvtsd2ss (%rax,%rcx,8), %xmm2
leaq 0x290(%rsp), %rdi
callq 0x4a88c
cvtss2sd %xmm0, %xmm0
callq 0x839b6
movaps %xmm0, %xmm2
movsd %xmm0, 0x168(%rsp)
movq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
cmpq %rax, %rdi
je 0x252b6
movq 0x2a0(%rsp), %rsi
incq %rsi
callq 0x4470
movsd 0x168(%rsp), %xmm2
movsd 0x158(%rsp), %xmm0
movsd 0x160(%rsp), %xmm1
leaq 0x80(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x52d94
movq 0x90(%rsp), %rax
movq %rax, 0x50(%rsp)
movups 0x80(%rsp), %xmm0
movaps %xmm0, 0x40(%rsp)
leaq 0x40(%rsp), %rdi
xorl %esi, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movsd %xmm0, 0x140(%rsp)
leaq 0x40(%rsp), %rdi
movl $0x1, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movsd %xmm0, 0x148(%rsp)
leaq 0x40(%rsp), %rdi
movl $0x2, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movq 0xe8(%rsp), %rax
subq 0xe0(%rsp), %rax
movsd %xmm0, 0x150(%rsp)
shrq $0x5, %rax
imull 0x58(%rsp), %eax
addl %ebp, %eax
movl %eax, 0x1c0(%rsp)
movq 0x18(%rsp), %rcx
movq 0x2f0(%rcx), %rax
cmpq %rax, 0x2f8(%rcx)
je 0x25400
movl $0x1, %ebx
xorl %ecx, %ecx
movl $0x1, %r14d
movq 0x18(%rsp), %r12
imulq $0x98, %rcx, %rsi
addq %rax, %rsi
movq %r12, %rdi
movq %r15, %rdx
callq 0x53628
movsd 0x127c99(%rip), %xmm1   # 0x14d048
ucomisd %xmm0, %xmm1
movl $0x0, %eax
cmoval %eax, %r14d
movl %ebx, %ecx
movq 0x2f0(%r12), %rax
movq 0x2f8(%r12), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
movabsq $-0x79435e50d79435e5, %rsi # imm = 0x86BCA1AF286BCA1B
imulq %rsi, %rdx
incl %ebx
cmpq %rcx, %rdx
ja 0x25392
cmpl $0x1, %r14d
leaq 0x360(%rsp), %r14
leaq 0x340(%rsp), %r12
jne 0x25410
movq 0xd8(%rsp), %rdi
movq %r15, %rsi
callq 0xe9a8
incl %ebp
movq 0xe0(%rsp), %rax
movq 0xe8(%rsp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
movq %rbp, %rbx
cmpq %rbp, %rcx
ja 0x250dc
movq 0x68(%rsp), %rax
subq 0x60(%rsp), %rax
movq 0x58(%rsp), %rcx
incl %ecx
sarq $0x3, %rax
movq %rcx, %rsi
movq %rcx, 0x58(%rsp)
cmpq %rcx, %rax
leaq 0x30(%rsp), %rbp
leaq 0x448(%rsp), %rbx
ja 0x24ff3
movq 0x18(%rsp), %rcx
movq 0x2f8(%rcx), %rax
subq 0x2f0(%rcx), %rax
shrq $0x3, %rax
imull $0x286bca1b, %eax, %eax # imm = 0x286BCA1B
movl %eax, 0x110(%rcx)
leaq 0x140(%rsp), %rdi
callq 0x2f5e8
movb $0x1, %bl
jmp 0x25558
movq 0x16fb4a(%rip), %rdi    # 0x194ff0
leaq 0x128b98(%rip), %rsi    # 0x14e045
movl $0x2b, %edx
callq 0x44e0
movq 0x68(%rsp), %rsi
subq 0x60(%rsp), %rsi
sarq $0x3, %rsi
movq 0x16fb24(%rip), %rdi    # 0x194ff0
callq 0x42b0
movq %rax, %rbx
leaq 0x128b96(%rip), %rsi    # 0x14e071
movl $0xb, %edx
movq %rax, %rdi
callq 0x44e0
movq 0xc8(%rsp), %rsi
subq 0xc0(%rsp), %rsi
sarq $0x3, %rsi
movq %rbx, %rdi
callq 0x42b0
movq %rax, %rbx
leaq 0x128b6f(%rip), %rsi    # 0x14e07d
movl $0xb, %edx
movq %rax, %rdi
callq 0x44e0
movq 0xa8(%rsp), %rsi
subq 0xa0(%rsp), %rsi
sarq $0x3, %rsi
movq %rbx, %rdi
callq 0x42b0
movq %rax, %rbx
leaq 0x128b48(%rip), %rsi    # 0x14e089
movl $0xa, %edx
movq %rax, %rdi
callq 0x44e0
movq %rbx, %rdi
callq 0x41f0
xorl %ebx, %ebx
leaq 0x750(%rsp), %rdi
callq 0x4140
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x25582
movq 0x1f0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x2559f
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x255bc
movq 0xd0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x255d3
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
leaq 0x250(%rsp), %rdi
callq 0x2f4c2
leaq 0x270(%rsp), %rdi
callq 0x2f4c2
leaq 0x200(%rsp), %rdi
callq 0x2f4c2
leaq 0x220(%rsp), %rdi
callq 0x2f4c2
leaq 0xe0(%rsp), %rdi
callq 0x2f4c2
movq %rsp, %rdi
callq 0x2f4c2
leaq 0x100(%rsp), %rdi
callq 0x2f4c2
movq $-0x2c0, %r14           # imm = 0xFD40
movq -0x10(%r13), %rdi
cmpq %rdi, %r13
je 0x25645
movq (%r13), %rsi
incq %rsi
callq 0x4470
addq $-0x20, %r13
addq $0x20, %r14
jne 0x25630
movq 0x20(%rsp), %rdi
cmpq %rbp, %rdi
je 0x25666
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x4470
movl %ebx, %eax
addq $0x958, %rsp            # imm = 0x958
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x12921b(%rip), %rdi    # 0x14e89c
xorl %esi, %esi
xorl %edx, %edx
xorl %eax, %eax
callq 0x4630
leaq 0x129209(%rip), %rdi    # 0x14e89c
xorl %esi, %esi
xorl %edx, %edx
xorl %eax, %eax
callq 0x4630
leaq 0x128050(%rip), %rdi    # 0x14d6f5
movq %r15, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0x12803f(%rip), %rdi    # 0x14d6f5
movq %r15, %rsi
xorl %eax, %eax
callq 0x4630
jmp 0x25a5e
jmp 0x259e9
jmp 0x259f1
movq %rbx, %rcx
movq %rax, %rbx
movq 0x438(%rsp), %rdi
cmpq %rcx, %rdi
je 0x25a61
movq 0x448(%rsp), %rsi
jmp 0x259c3
jmp 0x25701
jmp 0x259f1
jmp 0x25701
jmp 0x259f1
movq %rax, %rbx
movq 0x140(%rsp), %rdi
cmpq %r14, %rdi
jne 0x257f0
jmp 0x25a6e
jmp 0x259f1
jmp 0x25a5e
movq %rax, %rbx
movq 0x3b0(%rsp), %rdi
leaq 0x3c0(%rsp), %rax
cmpq %rax, %rdi
je 0x25751
movq 0x3c0(%rsp), %rsi
incq %rsi
callq 0x4470
jmp 0x25751
movq %rax, %rbx
movq 0x2d0(%rsp), %rdi
leaq 0x2e0(%rsp), %rax
cmpq %rax, %rdi
je 0x25ab4
movq 0x2e0(%rsp), %rsi
jmp 0x25a4c
jmp 0x25ab1
movq %rax, %rbx
movq 0x3f0(%rsp), %rdi
leaq 0x400(%rsp), %rax
cmpq %rax, %rdi
je 0x257a9
movq 0x400(%rsp), %rsi
incq %rsi
callq 0x4470
jmp 0x257a9
movq %rax, %rbx
movq 0x2f0(%rsp), %rdi
leaq 0x300(%rsp), %rax
cmpq %rax, %rdi
je 0x25ab4
movq 0x300(%rsp), %rsi
jmp 0x25a4c
jmp 0x25ab1
movq %rax, %rbx
movq 0x140(%rsp), %rdi
leaq 0x150(%rsp), %rax
cmpq %rax, %rdi
je 0x25a6e
movq 0x150(%rsp), %rsi
jmp 0x2584d
jmp 0x259f1
movq %rax, %rbx
movq 0x410(%rsp), %rdi
leaq 0x420(%rsp), %rax
cmpq %rax, %rdi
je 0x2582c
movq 0x420(%rsp), %rsi
incq %rsi
callq 0x4470
jmp 0x2582c
movq %rax, %rbx
movq 0x310(%rsp), %rdi
leaq 0x320(%rsp), %rax
cmpq %rax, %rdi
je 0x25a6e
movq 0x320(%rsp), %rsi
incq %rsi
callq 0x4470
jmp 0x25a6e
jmp 0x259f1
movq %rax, %rbx
jmp 0x25ad0
movq %rax, %rbx
jmp 0x25b94
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
jmp 0x25897
movq %rax, %rbx
addq $-0x10, %r15
movq -0x10(%r15), %rdi
cmpq %rdi, %r15
je 0x258b2
movq (%r15), %rsi
incq %rsi
callq 0x4470
leaq -0x20(%r15), %rax
addq $-0x10, %r15
cmpq %r14, %r15
movq %rax, %r15
jne 0x2589e
jmp 0x25bc0
movq %rax, %rbx
jmp 0x25bc0
jmp 0x25ab1
jmp 0x259e9
jmp 0x25ab1
jmp 0x25ab1
jmp 0x25ab1
jmp 0x25a5e
jmp 0x25a5e
jmp 0x259f1
jmp 0x25ab1
movq %rax, %rbx
jmp 0x25929
movq %rax, %rbx
movq 0x370(%rsp), %rdi
leaq 0x380(%rsp), %rax
cmpq %rax, %rdi
je 0x25929
movq 0x380(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x2b0(%rsp), %rdi
leaq 0x2c0(%rsp), %rax
cmpq %rax, %rdi
je 0x25ab4
movq 0x2c0(%rsp), %rsi
jmp 0x25a4c
jmp 0x259e9
jmp 0x25ab1
jmp 0x25ab1
jmp 0x25ab1
movq %rax, %rbx
movq 0x350(%rsp), %rdi
cmpq %r14, %rdi
je 0x25a61
movq 0x360(%rsp), %rsi
jmp 0x259c3
movq %rax, %rbx
movq 0x330(%rsp), %rdi
cmpq %r12, %rdi
je 0x25a61
movq 0x340(%rsp), %rsi
jmp 0x259c3
movq %rax, %rbx
movq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
cmpq %rax, %rdi
je 0x25a61
movq 0x2a0(%rsp), %rsi
incq %rsi
callq 0x4470
jmp 0x25a61
jmp 0x25ab1
jmp 0x25ab1
jmp 0x25ab1
jmp 0x25ab1
jmp 0x25ab1
movq %rax, %rbx
jmp 0x25ac3
movq %rax, %rbx
jmp 0x25a6e
jmp 0x25ab1
jmp 0x25ab1
jmp 0x25ab1
jmp 0x25ab1
movq %rax, %rbx
movq 0x458(%rsp), %rdi
cmpq %r15, %rdi
je 0x25a2f
movq 0x468(%rsp), %rsi
incq %rsi
callq 0x4470
jmp 0x25a2f
movq %rax, %rbx
movq 0x3d0(%rsp), %rdi
leaq 0x3e0(%rsp), %rax
cmpq %rax, %rdi
je 0x25ab4
movq 0x3e0(%rsp), %rsi
incq %rsi
callq 0x4470
jmp 0x25ab4
jmp 0x25ab1
jmp 0x25ab1
jmp 0x25a5e
jmp 0x25ab1
movq %rax, %rbx
leaq 0x140(%rsp), %rdi
callq 0x2f5e8
leaq 0x30(%rsp), %rbp
jmp 0x25ac3
movq %rax, %rbx
movq 0x390(%rsp), %rdi
leaq 0x3a0(%rsp), %rax
cmpq %rax, %rdi
je 0x25aa2
movq 0x3a0(%rsp), %rsi
incq %rsi
callq 0x4470
jmp 0x25aa2
movq %rax, %rbx
leaq 0x478(%rsp), %rdi
callq 0x2f4c2
jmp 0x25ab4
movq %rax, %rbx
leaq 0x30(%rsp), %rbp
leaq 0x40(%rsp), %rdi
callq 0x2f4c2
leaq 0x750(%rsp), %rdi
callq 0x4140
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x25aed
movq 0x1f0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x25b0a
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x25b27
movq 0xd0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x25b3e
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
leaq 0x250(%rsp), %rdi
callq 0x2f4c2
leaq 0x270(%rsp), %rdi
callq 0x2f4c2
leaq 0x200(%rsp), %rdi
callq 0x2f4c2
leaq 0x220(%rsp), %rdi
callq 0x2f4c2
leaq 0xe0(%rsp), %rdi
callq 0x2f4c2
movq %rsp, %rdi
callq 0x2f4c2
leaq 0x100(%rsp), %rdi
callq 0x2f4c2
xorl %r14d, %r14d
movq 0x730(%rsp,%r14), %rdi
leaq (%r14,%r13), %rax
cmpq %rdi, %rax
je 0x25bb3
movq (%rax), %rsi
incq %rsi
callq 0x4470
addq $-0x20, %r14
cmpq $-0x2c0, %r14           # imm = 0xFD40
jne 0x25b97
movq 0x20(%rsp), %rdi
cmpq %rbp, %rdi
je 0x25bd7
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x4470
movq %rbx, %rdi
callq 0x4780