// File: 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
movq %rsp, %rbp
subq $0x1060, %rsp           # imm = 0x1060
movb %dl, %al
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
andb $0x1, %al
movb %al, -0x19(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x5720
movb $0x1, -0x332(%rbp)
leaq -0x300(%rbp), %rax
movq %rax, -0xb30(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x309(%rbp), %rdi
movq %rdi, -0xb28(%rbp)
callq 0x5900
movq -0xb30(%rbp), %rdi
movq -0xb28(%rbp), %rdx
leaq 0x1a72ea(%rip), %rsi    # 0x1f2c51
callq 0x47530
jmp 0x4b96e
leaq -0x2e0(%rbp), %rax
movq %rax, -0xb40(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x31d(%rbp), %rdi
movq %rdi, -0xb38(%rbp)
callq 0x5900
movq -0xb40(%rbp), %rdi
movq -0xb38(%rbp), %rdx
leaq 0x1a72ac(%rip), %rsi    # 0x1f2c57
callq 0x47530
jmp 0x4b9b2
leaq -0x2c0(%rbp), %rax
movq %rax, -0xb50(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x31e(%rbp), %rdi
movq %rdi, -0xb48(%rbp)
callq 0x5900
movq -0xb50(%rbp), %rdi
movq -0xb48(%rbp), %rdx
leaq 0x1a7277(%rip), %rsi    # 0x1f2c66
callq 0x47530
jmp 0x4b9f6
leaq -0x2a0(%rbp), %rax
movq %rax, -0xb60(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x31f(%rbp), %rdi
movq %rdi, -0xb58(%rbp)
callq 0x5900
movq -0xb60(%rbp), %rdi
movq -0xb58(%rbp), %rdx
leaq 0x1a7242(%rip), %rsi    # 0x1f2c75
callq 0x47530
jmp 0x4ba3a
leaq -0x280(%rbp), %rax
movq %rax, -0xb70(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x320(%rbp), %rdi
movq %rdi, -0xb68(%rbp)
callq 0x5900
movq -0xb70(%rbp), %rdi
movq -0xb68(%rbp), %rdx
leaq 0x1a720d(%rip), %rsi    # 0x1f2c84
callq 0x47530
jmp 0x4ba7e
leaq -0x260(%rbp), %rax
movq %rax, -0xb80(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x321(%rbp), %rdi
movq %rdi, -0xb78(%rbp)
callq 0x5900
movq -0xb80(%rbp), %rdi
movq -0xb78(%rbp), %rdx
leaq 0x1a71db(%rip), %rsi    # 0x1f2c96
callq 0x47530
jmp 0x4bac2
leaq -0x240(%rbp), %rax
movq %rax, -0xb90(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x322(%rbp), %rdi
movq %rdi, -0xb88(%rbp)
callq 0x5900
movq -0xb90(%rbp), %rdi
movq -0xb88(%rbp), %rdx
leaq 0x1a71a8(%rip), %rsi    # 0x1f2ca7
callq 0x47530
jmp 0x4bb06
leaq -0x220(%rbp), %rax
movq %rax, -0xba0(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x323(%rbp), %rdi
movq %rdi, -0xb98(%rbp)
callq 0x5900
movq -0xba0(%rbp), %rdi
movq -0xb98(%rbp), %rdx
leaq 0x1a7176(%rip), %rsi    # 0x1f2cb9
callq 0x47530
jmp 0x4bb4a
leaq -0x200(%rbp), %rax
movq %rax, -0xbb0(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x324(%rbp), %rdi
movq %rdi, -0xba8(%rbp)
callq 0x5900
movq -0xbb0(%rbp), %rdi
movq -0xba8(%rbp), %rdx
leaq 0x1a7138(%rip), %rsi    # 0x1f2cbf
callq 0x47530
jmp 0x4bb8e
leaq -0x1e0(%rbp), %rax
movq %rax, -0xbc0(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x325(%rbp), %rdi
movq %rdi, -0xbb8(%rbp)
callq 0x5900
movq -0xbc0(%rbp), %rdi
movq -0xbb8(%rbp), %rdx
leaq 0x1a710f(%rip), %rsi    # 0x1f2cda
callq 0x47530
jmp 0x4bbd2
leaq -0x1c0(%rbp), %rax
movq %rax, -0xbd0(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x326(%rbp), %rdi
movq %rdi, -0xbc8(%rbp)
callq 0x5900
movq -0xbd0(%rbp), %rdi
movq -0xbc8(%rbp), %rdx
leaq 0x1a70ec(%rip), %rsi    # 0x1f2cfb
callq 0x47530
jmp 0x4bc16
leaq -0x1a0(%rbp), %rax
movq %rax, -0xbe0(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x327(%rbp), %rdi
movq %rdi, -0xbd8(%rbp)
callq 0x5900
movq -0xbe0(%rbp), %rdi
movq -0xbd8(%rbp), %rdx
leaq 0x1a70b9(%rip), %rsi    # 0x1f2d0c
callq 0x47530
jmp 0x4bc5a
leaq -0x180(%rbp), %rax
movq %rax, -0xbf0(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x328(%rbp), %rdi
movq %rdi, -0xbe8(%rbp)
callq 0x5900
movq -0xbf0(%rbp), %rdi
movq -0xbe8(%rbp), %rdx
leaq 0x1a708c(%rip), %rsi    # 0x1f2d23
callq 0x47530
jmp 0x4bc9e
leaq -0x160(%rbp), %rax
movq %rax, -0xc00(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x329(%rbp), %rdi
movq %rdi, -0xbf8(%rbp)
callq 0x5900
movq -0xc00(%rbp), %rdi
movq -0xbf8(%rbp), %rdx
leaq 0x1a705b(%rip), %rsi    # 0x1f2d36
callq 0x47530
jmp 0x4bce2
leaq -0x140(%rbp), %rax
movq %rax, -0xc10(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x32a(%rbp), %rdi
movq %rdi, -0xc08(%rbp)
callq 0x5900
movq -0xc10(%rbp), %rdi
movq -0xc08(%rbp), %rdx
leaq 0x1a702a(%rip), %rsi    # 0x1f2d49
callq 0x47530
jmp 0x4bd26
leaq -0x120(%rbp), %rax
movq %rax, -0xc20(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x32b(%rbp), %rdi
movq %rdi, -0xc18(%rbp)
callq 0x5900
movq -0xc20(%rbp), %rdi
movq -0xc18(%rbp), %rdx
leaq 0x1a6ff9(%rip), %rsi    # 0x1f2d5c
callq 0x47530
jmp 0x4bd6a
leaq -0x100(%rbp), %rax
movq %rax, -0xc30(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x32c(%rbp), %rdi
movq %rdi, -0xc28(%rbp)
callq 0x5900
movq -0xc30(%rbp), %rdi
movq -0xc28(%rbp), %rdx
leaq 0x1a6fc7(%rip), %rsi    # 0x1f2d6e
callq 0x47530
jmp 0x4bdae
leaq -0xe0(%rbp), %rax
movq %rax, -0xc40(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x32d(%rbp), %rdi
movq %rdi, -0xc38(%rbp)
callq 0x5900
movq -0xc40(%rbp), %rdi
movq -0xc38(%rbp), %rdx
leaq 0x1a6f9f(%rip), %rsi    # 0x1f2d8a
callq 0x47530
jmp 0x4bdf2
leaq -0xc0(%rbp), %rax
movq %rax, -0xc50(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x32e(%rbp), %rdi
movq %rdi, -0xc48(%rbp)
callq 0x5900
movq -0xc50(%rbp), %rdi
movq -0xc48(%rbp), %rdx
leaq 0x1a6f6e(%rip), %rsi    # 0x1f2d9d
callq 0x47530
jmp 0x4be36
leaq -0xa0(%rbp), %rax
movq %rax, -0xc60(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x32f(%rbp), %rdi
movq %rdi, -0xc58(%rbp)
callq 0x5900
movq -0xc60(%rbp), %rdi
movq -0xc58(%rbp), %rdx
leaq 0x1a6f3d(%rip), %rsi    # 0x1f2db0
callq 0x47530
jmp 0x4be7a
leaq -0x80(%rbp), %rax
movq %rax, -0xc70(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x330(%rbp), %rdi
movq %rdi, -0xc68(%rbp)
callq 0x5900
movq -0xc70(%rbp), %rdi
movq -0xc68(%rbp), %rdx
leaq 0x1a6f0f(%rip), %rsi    # 0x1f2dc3
callq 0x47530
jmp 0x4bebb
leaq -0x60(%rbp), %rax
movq %rax, -0xc80(%rbp)
movq %rax, -0x308(%rbp)
leaq -0x331(%rbp), %rdi
movq %rdi, -0xc78(%rbp)
callq 0x5900
movq -0xc80(%rbp), %rdi
movq -0xc78(%rbp), %rdx
leaq 0x1ab534(%rip), %rsi    # 0x1f7429
callq 0x47530
jmp 0x4befc
movb $0x0, -0x332(%rbp)
leaq -0x331(%rbp), %rdi
callq 0x55d0
leaq -0x330(%rbp), %rdi
callq 0x55d0
leaq -0x32f(%rbp), %rdi
callq 0x55d0
leaq -0x32e(%rbp), %rdi
callq 0x55d0
leaq -0x32d(%rbp), %rdi
callq 0x55d0
leaq -0x32c(%rbp), %rdi
callq 0x55d0
leaq -0x32b(%rbp), %rdi
callq 0x55d0
leaq -0x32a(%rbp), %rdi
callq 0x55d0
leaq -0x329(%rbp), %rdi
callq 0x55d0
leaq -0x328(%rbp), %rdi
callq 0x55d0
leaq -0x327(%rbp), %rdi
callq 0x55d0
leaq -0x326(%rbp), %rdi
callq 0x55d0
leaq -0x325(%rbp), %rdi
callq 0x55d0
leaq -0x324(%rbp), %rdi
callq 0x55d0
leaq -0x323(%rbp), %rdi
callq 0x55d0
leaq -0x322(%rbp), %rdi
callq 0x55d0
leaq -0x321(%rbp), %rdi
callq 0x55d0
leaq -0x320(%rbp), %rdi
callq 0x55d0
leaq -0x31f(%rbp), %rdi
callq 0x55d0
leaq -0x31e(%rbp), %rdi
callq 0x55d0
leaq -0x31d(%rbp), %rdi
callq 0x55d0
leaq -0x309(%rbp), %rdi
callq 0x55d0
leaq -0x350(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0x8a7e0
jmp 0x4c020
leaq -0x368(%rbp), %rdi
callq 0x59240
leaq -0x380(%rbp), %rdi
callq 0x59240
leaq -0x398(%rbp), %rdi
callq 0x59240
leaq -0x3b0(%rbp), %rdi
callq 0x59240
leaq -0x3c8(%rbp), %rdi
callq 0x59240
leaq -0x3e0(%rbp), %rdi
callq 0x59240
leaq -0x3f8(%rbp), %rdi
callq 0xf650
leaq -0x410(%rbp), %rdi
callq 0xf650
leaq -0x428(%rbp), %rdi
callq 0xf650
leaq -0x440(%rbp), %rdi
callq 0xf650
movl $0xffffffff, -0x444(%rbp) # imm = 0xFFFFFFFF
movb $0x0, -0x445(%rbp)
leaq -0x650(%rbp), %rdi
callq 0x5620
jmp 0x4c0b7
movq 0x226f02(%rip), %rdi    # 0x272fc0
leaq 0x1a6d1a(%rip), %rsi    # 0x1f2ddf
callq 0x5540
movq %rax, -0xc88(%rbp)
jmp 0x4c0d3
movq -0xc88(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x5540
movq %rax, -0xc90(%rbp)
jmp 0x4c0ec
movq -0xc90(%rbp), %rdi
movq 0x226e9e(%rip), %rsi    # 0x272f98
callq 0x55b0
jmp 0x4c101
movq -0x10(%rbp), %rsi
leaq -0x650(%rbp), %rdi
movl $0x8, %edx
callq 0x5310
jmp 0x4c118
movb $0x0, -0x651(%rbp)
movb $0x0, -0x652(%rbp)
movb $0x0, -0x653(%rbp)
movb $0x0, -0x654(%rbp)
movb $0x0, -0x655(%rbp)
movb $0x0, -0x656(%rbp)
movb $0x0, -0x657(%rbp)
leaq -0x650(%rbp), %rdi
callq 0x5800
movb %al, -0xc91(%rbp)
jmp 0x4c15d
movb -0xc91(%rbp), %al
testb $0x1, %al
jne 0x4c16c
jmp 0x4e808
jmp 0x4c16e
movq -0x650(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x650(%rbp,%rax), %rdi
callq 0x5960
movb %al, -0xc92(%rbp)
jmp 0x4c18e
movb -0xc92(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x4c19f
jmp 0x4dadc
testb $0x1, -0x651(%rbp)
je 0x4c5a4
testb $0x1, -0x652(%rbp)
je 0x4c5a4
testb $0x1, -0x653(%rbp)
je 0x4c5a4
testb $0x1, -0x654(%rbp)
je 0x4c5a4
testb $0x1, -0x655(%rbp)
je 0x4c5a4
testb $0x1, -0x656(%rbp)
je 0x4c5a4
testb $0x1, -0x657(%rbp)
jne 0x4c5a4
movq -0x18(%rbp), %rdi
callq 0x96250
jmp 0x4c205
movb $0x1, -0x657(%rbp)
jmp 0x4c5a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c4f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c4ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c4de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c4d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c4c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c4ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c4ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c4a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c496
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c48a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c47e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c472
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c466
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c45a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c44e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c442
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c436
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c42a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c41e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c412
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c406
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x331(%rbp), %rdi
callq 0x55d0
leaq -0x330(%rbp), %rdi
callq 0x55d0
leaq -0x32f(%rbp), %rdi
callq 0x55d0
leaq -0x32e(%rbp), %rdi
callq 0x55d0
leaq -0x32d(%rbp), %rdi
callq 0x55d0
leaq -0x32c(%rbp), %rdi
callq 0x55d0
leaq -0x32b(%rbp), %rdi
callq 0x55d0
leaq -0x32a(%rbp), %rdi
callq 0x55d0
leaq -0x329(%rbp), %rdi
callq 0x55d0
leaq -0x328(%rbp), %rdi
callq 0x55d0
leaq -0x327(%rbp), %rdi
callq 0x55d0
leaq -0x326(%rbp), %rdi
callq 0x55d0
leaq -0x325(%rbp), %rdi
callq 0x55d0
leaq -0x324(%rbp), %rdi
callq 0x55d0
leaq -0x323(%rbp), %rdi
callq 0x55d0
leaq -0x322(%rbp), %rdi
callq 0x55d0
leaq -0x321(%rbp), %rdi
callq 0x55d0
leaq -0x320(%rbp), %rdi
callq 0x55d0
leaq -0x31f(%rbp), %rdi
callq 0x55d0
leaq -0x31e(%rbp), %rdi
callq 0x55d0
leaq -0x31d(%rbp), %rdi
callq 0x55d0
leaq -0x309(%rbp), %rdi
callq 0x55d0
testb $0x1, -0x332(%rbp)
jne 0x4c50d
jmp 0x4c55a
movq -0x308(%rbp), %rax
leaq -0x300(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0xca0(%rbp)
je 0x4c558
movq -0xca0(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xca8(%rbp)
callq 0x5300
movq -0xca8(%rbp), %rax
leaq -0x300(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0xca0(%rbp)
jne 0x4c527
jmp 0x4c55a
jmp 0x4ea56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4ea08
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4e93a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4e92e
leaq -0x650(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x5110
jmp 0x4c5b6
leaq -0x690(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x5220
jmp 0x4c5c8
leaq -0x6b1(%rbp), %rdi
movq %rdi, -0xcb0(%rbp)
callq 0x5900
movq -0xcb0(%rbp), %rdx
leaq 0x1a6805(%rip), %rsi    # 0x1f2dee
leaq -0x6b0(%rbp), %rdi
callq 0x47530
jmp 0x4c5f7
leaq -0x670(%rbp), %rdi
leaq -0x690(%rbp), %rsi
leaq -0x6b0(%rbp), %rdx
callq 0x8a620
jmp 0x4c613
leaq -0x368(%rbp), %rdi
leaq -0x670(%rbp), %rsi
callq 0x59260
leaq -0x670(%rbp), %rdi
callq 0x59290
leaq -0x6b0(%rbp), %rdi
callq 0x5300
leaq -0x6b1(%rbp), %rdi
callq 0x55d0
leaq -0x690(%rbp), %rdi
callq 0x5300
leaq -0x368(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
jbe 0x4dad7
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0xcb8(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x59310
movq -0xcb8(%rbp), %rdx
movq %rax, %rsi
leaq -0x6d8(%rbp), %rdi
movl $0x5, %ecx
callq 0x5590
jmp 0x4c6a0
xorl %eax, %eax
movl %eax, %esi
leaq -0x350(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0x6d8(%rbp), %rdi
callq 0x5050
movl %eax, -0xcbc(%rbp)
jmp 0x4c6c7
leaq -0x6d8(%rbp), %rdi
callq 0x5300
movl -0xcbc(%rbp), %eax
cmpl $0x0, %eax
jne 0x4c7a9
xorl %eax, %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0x6f8(%rbp), %rdi
movl $0x5, %edx
movq $-0x1, %rcx
callq 0x5590
jmp 0x4c70f
movq -0x18(%rbp), %rdi
addq $0x320, %rdi            # imm = 0x320
leaq -0x6f8(%rbp), %rsi
callq 0x5680
leaq -0x6f8(%rbp), %rdi
callq 0x5300
jmp 0x4dacb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4c769
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x6b0(%rbp), %rdi
callq 0x5300
leaq -0x6b1(%rbp), %rdi
callq 0x55d0
leaq -0x690(%rbp), %rdi
callq 0x5300
jmp 0x4e92e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x6d8(%rbp), %rdi
callq 0x5300
jmp 0x4e92e
xorl %eax, %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, -0xcc8(%rbp)
leaq -0x350(%rbp), %rdi
movl $0x1, %esi
callq 0x59310
movq -0xcc8(%rbp), %rdi
movq %rax, %rsi
callq 0x5050
movl %eax, -0xcc0(%rbp)
jmp 0x4c7e8
movl -0xcc0(%rbp), %eax
cmpl $0x0, %eax
jne 0x4c833
leaq -0x368(%rbp), %rdi
movl $0x1, %esi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xcd0(%rbp)
jmp 0x4c816
movsd -0xcd0(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movb $0x1, -0x651(%rbp)
jmp 0x4dac9
xorl %eax, %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, -0xce0(%rbp)
leaq -0x350(%rbp), %rdi
movl $0x2, %esi
callq 0x59310
movq -0xce0(%rbp), %rdi
movq %rax, %rsi
callq 0x5050
movl %eax, -0xcd4(%rbp)
jmp 0x4c872
movl -0xcd4(%rbp), %eax
cmpl $0x0, %eax
jne 0x4c8bd
leaq -0x368(%rbp), %rdi
movl $0x1, %esi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xce8(%rbp)
jmp 0x4c8a0
movsd -0xce8(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, 0x10(%rax)
movb $0x1, -0x652(%rbp)
jmp 0x4dac7
xorl %eax, %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, -0xcf8(%rbp)
leaq -0x350(%rbp), %rdi
movl $0x3, %esi
callq 0x59310
movq -0xcf8(%rbp), %rdi
movq %rax, %rsi
callq 0x5050
movl %eax, -0xcec(%rbp)
jmp 0x4c8fc
movl -0xcec(%rbp), %eax
cmpl $0x0, %eax
jne 0x4c947
leaq -0x368(%rbp), %rdi
movl $0x1, %esi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xd00(%rbp)
jmp 0x4c92a
movsd -0xd00(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, 0x18(%rax)
movb $0x1, -0x653(%rbp)
jmp 0x4dac5
xorl %eax, %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, -0xd10(%rbp)
leaq -0x350(%rbp), %rdi
movl $0x4, %esi
callq 0x59310
movq -0xd10(%rbp), %rdi
movq %rax, %rsi
callq 0x5050
movl %eax, -0xd04(%rbp)
jmp 0x4c986
movl -0xd04(%rbp), %eax
cmpl $0x0, %eax
jne 0x4c9d1
leaq -0x368(%rbp), %rdi
movl $0x1, %esi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xd18(%rbp)
jmp 0x4c9b4
movsd -0xd18(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, 0x20(%rax)
movb $0x1, -0x654(%rbp)
jmp 0x4dac3
xorl %eax, %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, -0xd28(%rbp)
leaq -0x350(%rbp), %rdi
movl $0x5, %esi
callq 0x59310
movq -0xd28(%rbp), %rdi
movq %rax, %rsi
callq 0x5050
movl %eax, -0xd1c(%rbp)
jmp 0x4ca10
movl -0xd1c(%rbp), %eax
cmpl $0x0, %eax
jne 0x4ca5b
leaq -0x368(%rbp), %rdi
movl $0x1, %esi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xd30(%rbp)
jmp 0x4ca3e
movsd -0xd30(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, 0x28(%rax)
movb $0x1, -0x655(%rbp)
jmp 0x4dac1
xorl %eax, %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, -0xd40(%rbp)
leaq -0x350(%rbp), %rdi
movl $0x6, %esi
callq 0x59310
movq -0xd40(%rbp), %rdi
movq %rax, %rsi
callq 0x5050
movl %eax, -0xd34(%rbp)
jmp 0x4ca9a
movl -0xd34(%rbp), %eax
cmpl $0x0, %eax
jne 0x4cae5
leaq -0x368(%rbp), %rdi
movl $0x1, %esi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xd48(%rbp)
jmp 0x4cac8
movsd -0xd48(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, 0x30(%rax)
movb $0x1, -0x656(%rbp)
jmp 0x4dabf
xorl %eax, %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, -0xd58(%rbp)
leaq -0x350(%rbp), %rdi
movl $0x10, %esi
callq 0x59310
movq -0xd58(%rbp), %rdi
movq %rax, %rsi
callq 0x5050
movl %eax, -0xd4c(%rbp)
jmp 0x4cb24
movl -0xd4c(%rbp), %eax
cmpl $0x0, %eax
jne 0x4cb61
leaq -0x368(%rbp), %rdi
movl $0x1, %esi
callq 0x59310
movq %rax, %rdi
callq 0x8a9b0
movl %eax, -0xd5c(%rbp)
jmp 0x4cb50
movl -0xd5c(%rbp), %eax
movl %eax, -0x444(%rbp)
jmp 0x4dabd
xorl %eax, %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, -0xd68(%rbp)
leaq -0x350(%rbp), %rdi
movl $0x7, %esi
callq 0x59310
movq -0xd68(%rbp), %rdi
movq %rax, %rsi
callq 0x5050
movl %eax, -0xd60(%rbp)
jmp 0x4cba0
movl -0xd60(%rbp), %eax
cmpl $0x0, %eax
jne 0x4dabb
leaq -0x710(%rbp), %rdi
callq 0x59240
leaq -0x650(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x5110
jmp 0x4cbcd
leaq -0x748(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x5220
jmp 0x4cbdf
leaq -0x769(%rbp), %rdi
movq %rdi, -0xd70(%rbp)
callq 0x5900
movq -0xd70(%rbp), %rdx
leaq 0x1a61f4(%rip), %rsi    # 0x1f2df4
leaq -0x768(%rbp), %rdi
callq 0x47530
jmp 0x4cc0e
leaq -0x728(%rbp), %rdi
leaq -0x748(%rbp), %rsi
leaq -0x768(%rbp), %rdx
callq 0x8a620
jmp 0x4cc2a
leaq -0x368(%rbp), %rdi
leaq -0x728(%rbp), %rsi
callq 0x59260
leaq -0x728(%rbp), %rdi
callq 0x59290
leaq -0x768(%rbp), %rdi
callq 0x5300
leaq -0x769(%rbp), %rdi
callq 0x55d0
leaq -0x748(%rbp), %rdi
callq 0x5300
movb $0x0, -0x76a(%rbp)
movb $0x1, -0x76b(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
jbe 0x4ccfc
movb $0x1, -0x76a(%rbp)
jmp 0x4ccfc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4daaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4ccdf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x768(%rbp), %rdi
callq 0x5300
leaq -0x769(%rbp), %rdi
callq 0x55d0
leaq -0x748(%rbp), %rdi
callq 0x5300
jmp 0x4daaa
jmp 0x4ccfe
xorl %eax, %eax
testb $0x1, -0x76a(%rbp)
movb %al, -0xd71(%rbp)
je 0x4cd1b
movb -0x76b(%rbp), %al
movb %al, -0xd71(%rbp)
movb -0xd71(%rbp), %al
testb $0x1, %al
jne 0x4cd2a
jmp 0x4ceb7
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0xd88(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x59310
movq -0xd88(%rbp), %rsi
movq %rax, %rdi
callq 0x59a0
movq %rax, -0xd80(%rbp)
jmp 0x4cd59
movq -0xd80(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x5f, %eax
jne 0x4ceab
xorl %eax, %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0x710(%rbp), %rdi
callq 0x59330
jmp 0x4cd8d
leaq -0x650(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x5110
jmp 0x4cd9f
leaq -0x7a8(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x5220
jmp 0x4cdb1
leaq -0x7c9(%rbp), %rdi
movq %rdi, -0xd90(%rbp)
callq 0x5900
movq -0xd90(%rbp), %rdx
leaq 0x1a6022(%rip), %rsi    # 0x1f2df4
leaq -0x7c8(%rbp), %rdi
callq 0x47530
jmp 0x4cde0
leaq -0x788(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
leaq -0x7c8(%rbp), %rdx
callq 0x8a620
jmp 0x4cdfc
leaq -0x368(%rbp), %rdi
leaq -0x788(%rbp), %rsi
callq 0x59260
leaq -0x788(%rbp), %rdi
callq 0x59290
leaq -0x7c8(%rbp), %rdi
callq 0x5300
leaq -0x7c9(%rbp), %rdi
callq 0x55d0
leaq -0x7a8(%rbp), %rdi
callq 0x5300
leaq -0x368(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
ja 0x4cea9
movb $0x0, -0x76a(%rbp)
jmp 0x4cea9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4ce8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x7c8(%rbp), %rdi
callq 0x5300
leaq -0x7c9(%rbp), %rdi
callq 0x55d0
leaq -0x7a8(%rbp), %rdi
callq 0x5300
jmp 0x4daaa
jmp 0x4ceb2
movb $0x0, -0x76b(%rbp)
jmp 0x4ccfe
testb $0x1, -0x76a(%rbp)
jne 0x4ced5
leaq 0x1a5f31(%rip), %rdi    # 0x1f2df8
xorl %eax, %eax
callq 0x5070
jmp 0x4ced0
jmp 0x4da6c
leaq -0x808(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x5220
jmp 0x4cee7
leaq -0x829(%rbp), %rdi
movq %rdi, -0xd98(%rbp)
callq 0x5900
movq -0xd98(%rbp), %rdx
leaq 0x1a5f42(%rip), %rsi    # 0x1f2e4a
leaq -0x828(%rbp), %rdi
callq 0x47530
jmp 0x4cf16
leaq -0x7e8(%rbp), %rdi
leaq -0x808(%rbp), %rsi
leaq -0x828(%rbp), %rdx
callq 0x8a620
jmp 0x4cf32
leaq -0x368(%rbp), %rdi
leaq -0x7e8(%rbp), %rsi
callq 0x59260
leaq -0x7e8(%rbp), %rdi
callq 0x59290
leaq -0x828(%rbp), %rdi
callq 0x5300
leaq -0x829(%rbp), %rdi
callq 0x55d0
leaq -0x808(%rbp), %rdi
callq 0x5300
movb $0x0, -0x82a(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
jbe 0x4da60
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0xda8(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x59310
movq -0xda8(%rbp), %rsi
movq %rax, %rdi
callq 0x59a0
movq %rax, -0xda0(%rbp)
jmp 0x4cfc1
movq -0xda0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x5f, %eax
je 0x4d032
leaq -0x368(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x59310
movq %rax, %rdi
leaq 0x1a5ccf(%rip), %rsi    # 0x1f2cb9
callq 0x51b0
cmpl $0x0, %eax
je 0x4d032
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0xdb8(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x59310
movq -0xdb8(%rbp), %rsi
movq %rax, %rdi
callq 0x59a0
movq %rax, -0xdb0(%rbp)
jmp 0x4d023
movq -0xdb0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
jne 0x4d090
movl $0x4, -0x830(%rbp)
jmp 0x4da76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4d073
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x828(%rbp), %rdi
callq 0x5300
leaq -0x829(%rbp), %rdi
callq 0x55d0
leaq -0x808(%rbp), %rdi
callq 0x5300
jmp 0x4daaa
leaq -0x368(%rbp), %rdi
callq 0x592f0
movq %rax, -0xdc0(%rbp)
leaq -0x710(%rbp), %rdi
callq 0x592f0
movq %rax, %rcx
movq -0xdc0(%rbp), %rax
cmpq %rcx, %rax
je 0x4d1b3
xorl %eax, %eax
movl %eax, %esi
leaq -0x710(%rbp), %rdi
callq 0x59310
movq %rax, -0xdd0(%rbp)
leaq -0x350(%rbp), %rdi
movl $0x8, %esi
callq 0x59310
movq -0xdd0(%rbp), %rdi
movq %rax, %rsi
callq 0x5050
movl %eax, -0xdc4(%rbp)
jmp 0x4d101
movl -0xdc4(%rbp), %eax
cmpl $0x0, %eax
je 0x4d1b3
xorl %eax, %eax
movl %eax, %esi
leaq -0x710(%rbp), %rdi
callq 0x59310
movq %rax, -0xde0(%rbp)
leaq -0x350(%rbp), %rdi
movl $0x9, %esi
callq 0x59310
movq -0xde0(%rbp), %rdi
movq %rax, %rsi
callq 0x5050
movl %eax, -0xdd4(%rbp)
jmp 0x4d14f
movl -0xdd4(%rbp), %eax
cmpl $0x0, %eax
je 0x4d1b3
xorl %eax, %eax
movl %eax, %esi
leaq -0x710(%rbp), %rdi
callq 0x59310
movq %rax, -0xdf0(%rbp)
leaq -0x350(%rbp), %rdi
movl $0x14, %esi
callq 0x59310
movq -0xdf0(%rbp), %rdi
movq %rax, %rsi
callq 0x5050
movl %eax, -0xde4(%rbp)
jmp 0x4d199
movl -0xde4(%rbp), %eax
cmpl $0x0, %eax
je 0x4d1b3
movl $0x4, -0x830(%rbp)
jmp 0x4da76
movl $0x0, -0x834(%rbp)
movl -0x834(%rbp), %eax
movq %rax, -0xdf8(%rbp)
leaq -0x710(%rbp), %rdi
callq 0x592f0
movq %rax, %rcx
movq -0xdf8(%rbp), %rax
cmpq %rcx, %rax
jae 0x4d73c
leaq -0x850(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0x593a0
jmp 0x4d1fe
movl -0x834(%rbp), %eax
movl %eax, %esi
leaq -0x710(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0x870(%rbp), %rdi
callq 0x5220
jmp 0x4d223
leaq -0x850(%rbp), %rdi
leaq -0x870(%rbp), %rsi
callq 0x8a5a0
movl %eax, -0xdfc(%rbp)
jmp 0x4d23e
leaq -0x870(%rbp), %rdi
callq 0x5300
leaq -0x850(%rbp), %rdi
callq 0x59290
movl -0xdfc(%rbp), %eax
addl $-0x8, %eax
movl %eax, %ecx
movq %rcx, -0xe08(%rbp)
subl $0xc, %eax
ja 0x4d726
movq -0xe08(%rbp), %rax
leaq 0x1a5841(%rip), %rcx    # 0x1f2ac0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4d2ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x870(%rbp), %rdi
callq 0x5300
leaq -0x850(%rbp), %rdi
callq 0x59290
jmp 0x4daaa
leaq -0x368(%rbp), %rdi
callq 0x592f0
cmpq $0x3, %rax
jne 0x4d2ed
movb -0x445(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
je 0x4d361
leaq -0x368(%rbp), %rdi
callq 0x592f0
cmpq $0x4, %rax
jne 0x4d30f
movb -0x445(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
je 0x4d361
movq 0x225cda(%rip), %rdi    # 0x272ff0
leaq 0x1a5b33(%rip), %rsi    # 0x1f2e50
callq 0x5540
movq %rax, -0xe10(%rbp)
jmp 0x4d32b
movq -0xe10(%rbp), %rdi
movq 0x225c5f(%rip), %rsi    # 0x272f98
callq 0x55b0
jmp 0x4d340
leaq -0x650(%rbp), %rdi
callq 0x5120
jmp 0x4d34e
movb $0x0, -0x1(%rbp)
movl $0x1, -0x830(%rbp)
jmp 0x4da76
leaq -0x368(%rbp), %rdi
callq 0x592f0
cmpq $0x3, %rax
jne 0x4d3da
xorl %eax, %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0x380(%rbp), %rdi
callq 0x59330
jmp 0x4d394
leaq -0x368(%rbp), %rdi
movl $0x1, %esi
callq 0x59310
movq %rax, %rsi
leaq -0x398(%rbp), %rdi
callq 0x59330
jmp 0x4d3b6
leaq -0x368(%rbp), %rdi
movl $0x2, %esi
callq 0x59310
movq %rax, %rsi
leaq -0x3b0(%rbp), %rdi
callq 0x59330
jmp 0x4d3d8
jmp 0x4d442
leaq -0x368(%rbp), %rdi
movl $0x1, %esi
callq 0x59310
movq %rax, %rsi
leaq -0x380(%rbp), %rdi
callq 0x59330
jmp 0x4d3fc
leaq -0x368(%rbp), %rdi
movl $0x2, %esi
callq 0x59310
movq %rax, %rsi
leaq -0x398(%rbp), %rdi
callq 0x59330
jmp 0x4d41e
leaq -0x368(%rbp), %rdi
movl $0x3, %esi
callq 0x59310
movq %rax, %rsi
leaq -0x3b0(%rbp), %rdi
callq 0x59330
jmp 0x4d440
jmp 0x4d442
jmp 0x4d726
movl -0x834(%rbp), %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0x3c8(%rbp), %rdi
callq 0x59330
jmp 0x4d46c
jmp 0x4d726
movl -0x834(%rbp), %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0x3e0(%rbp), %rdi
callq 0x59330
jmp 0x4d496
jmp 0x4d726
movl -0x834(%rbp), %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xe18(%rbp)
jmp 0x4d4c1
movsd -0xe18(%rbp), %xmm0
callq 0xe9290
movsd %xmm0, -0xe20(%rbp)
jmp 0x4d4d8
movsd -0xe20(%rbp), %xmm0
movsd %xmm0, -0x878(%rbp)
leaq -0x3f8(%rbp), %rdi
leaq -0x878(%rbp), %rsi
callq 0xf6d0
jmp 0x4d4fd
jmp 0x4d726
movl -0x834(%rbp), %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xe28(%rbp)
jmp 0x4d528
movsd -0xe28(%rbp), %xmm0
callq 0xe9290
movsd %xmm0, -0xe30(%rbp)
jmp 0x4d53f
movsd -0xe30(%rbp), %xmm0
movsd %xmm0, -0x880(%rbp)
leaq -0x410(%rbp), %rdi
leaq -0x880(%rbp), %rsi
callq 0xf6d0
jmp 0x4d564
jmp 0x4d726
movl -0x834(%rbp), %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xe38(%rbp)
jmp 0x4d58f
movsd -0xe38(%rbp), %xmm0
callq 0xe9290
movsd %xmm0, -0xe40(%rbp)
jmp 0x4d5a6
movsd -0xe40(%rbp), %xmm0
movsd %xmm0, -0x888(%rbp)
leaq -0x428(%rbp), %rdi
leaq -0x888(%rbp), %rsi
callq 0xf6d0
jmp 0x4d5cb
jmp 0x4d726
movl -0x834(%rbp), %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xe48(%rbp)
jmp 0x4d5f6
movsd -0xe48(%rbp), %xmm0
movsd %xmm0, -0x890(%rbp)
leaq -0x440(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0xf6d0
jmp 0x4d61b
jmp 0x4d726
movl -0x834(%rbp), %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xe50(%rbp)
jmp 0x4d646
movsd -0xe50(%rbp), %xmm0
movsd %xmm0, -0x898(%rbp)
leaq -0x3f8(%rbp), %rdi
leaq -0x898(%rbp), %rsi
callq 0xf6d0
jmp 0x4d66b
movb $0x1, -0x82a(%rbp)
jmp 0x4d726
movl -0x834(%rbp), %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xe58(%rbp)
jmp 0x4d69d
movsd -0xe58(%rbp), %xmm0
movsd %xmm0, -0x8a0(%rbp)
leaq -0x410(%rbp), %rdi
leaq -0x8a0(%rbp), %rsi
callq 0xf6d0
jmp 0x4d6c2
movb $0x1, -0x82a(%rbp)
jmp 0x4d726
movl -0x834(%rbp), %eax
movl %eax, %esi
leaq -0x368(%rbp), %rdi
callq 0x59310
movq %rax, %rdi
callq 0x8a8a0
movsd %xmm0, -0xe60(%rbp)
jmp 0x4d6f1
movsd -0xe60(%rbp), %xmm0
movsd %xmm0, -0x8a8(%rbp)
leaq -0x428(%rbp), %rdi
leaq -0x8a8(%rbp), %rsi
callq 0xf6d0
jmp 0x4d716
movb $0x1, -0x82a(%rbp)
jmp 0x4d726
movb $0x1, -0x445(%rbp)
jmp 0x4d728
movl -0x834(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x834(%rbp)
jmp 0x4d1bd
testb $0x1, -0x82a(%rbp)
je 0x4d95d
leaq -0x8c0(%rbp), %rdi
xorps %xmm2, %xmm2
movaps %xmm2, %xmm0
movaps %xmm2, %xmm1
callq 0xe9c70
jmp 0x4d760
leaq -0x3f8(%rbp), %rdi
movq %rdi, -0xe78(%rbp)
callq 0xf990
movq -0xe78(%rbp), %rdi
decl %eax
movl %eax, -0x8c4(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0xe70(%rbp)
movslq -0x8c4(%rbp), %rsi
callq 0xfc80
movq %rax, -0xe68(%rbp)
jmp 0x4d7a2
movq -0xe68(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xe88(%rbp)
movslq -0x8c4(%rbp), %rsi
leaq -0x410(%rbp), %rdi
callq 0xfc80
movq %rax, -0xe80(%rbp)
jmp 0x4d7d1
movq -0xe80(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xe98(%rbp)
movslq -0x8c4(%rbp), %rsi
leaq -0x428(%rbp), %rdi
callq 0xfc80
movq %rax, -0xe90(%rbp)
jmp 0x4d800
movsd -0xe98(%rbp), %xmm1
movsd -0xe88(%rbp), %xmm0
movq -0xe70(%rbp), %rsi
movq -0xe90(%rbp), %rax
movsd (%rax), %xmm2
leaq -0x8e0(%rbp), %rdi
callq 0x97360
jmp 0x4d830
movq -0x8d0(%rbp), %rax
movq %rax, -0x8b0(%rbp)
movups -0x8e0(%rbp), %xmm0
movaps %xmm0, -0x8c0(%rbp)
leaq -0x8c0(%rbp), %rdi
xorl %esi, %esi
callq 0xe9d70
movq %rax, -0xea0(%rbp)
jmp 0x4d863
movq -0xea0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xeb0(%rbp)
movslq -0x8c4(%rbp), %rsi
leaq -0x3f8(%rbp), %rdi
callq 0xfc80
movq %rax, -0xea8(%rbp)
jmp 0x4d892
movq -0xea8(%rbp), %rax
movsd -0xeb0(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x8c0(%rbp), %rdi
movl $0x1, %esi
callq 0xe9d70
movq %rax, -0xeb8(%rbp)
jmp 0x4d8bf
movq -0xeb8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xec8(%rbp)
movslq -0x8c4(%rbp), %rsi
leaq -0x410(%rbp), %rdi
callq 0xfc80
movq %rax, -0xec0(%rbp)
jmp 0x4d8ee
movq -0xec0(%rbp), %rax
movsd -0xec8(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x8c0(%rbp), %rdi
movl $0x2, %esi
callq 0xe9d70
movq %rax, -0xed0(%rbp)
jmp 0x4d91b
movq -0xed0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xee0(%rbp)
movslq -0x8c4(%rbp), %rsi
leaq -0x428(%rbp), %rdi
callq 0xfc80
movq %rax, -0xed8(%rbp)
jmp 0x4d94a
movq -0xed8(%rbp), %rax
movsd -0xee0(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x650(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x5110
jmp 0x4d96f
leaq -0x918(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x5220
jmp 0x4d981
leaq -0x939(%rbp), %rdi
movq %rdi, -0xee8(%rbp)
callq 0x5900
movq -0xee8(%rbp), %rdx
leaq 0x1a5518(%rip), %rsi    # 0x1f2eba
leaq -0x938(%rbp), %rdi
callq 0x47530
jmp 0x4d9b0
leaq -0x8f8(%rbp), %rdi
leaq -0x918(%rbp), %rsi
leaq -0x938(%rbp), %rdx
callq 0x8a620
jmp 0x4d9cc
leaq -0x368(%rbp), %rdi
leaq -0x8f8(%rbp), %rsi
callq 0x59260
leaq -0x8f8(%rbp), %rdi
callq 0x59290
leaq -0x938(%rbp), %rdi
callq 0x5300
leaq -0x939(%rbp), %rdi
callq 0x55d0
leaq -0x918(%rbp), %rdi
callq 0x5300
jmp 0x4cf7c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4da46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x938(%rbp), %rdi
callq 0x5300
leaq -0x939(%rbp), %rdi
callq 0x55d0
leaq -0x918(%rbp), %rdi
callq 0x5300
jmp 0x4daaa
leaq -0x710(%rbp), %rdi
callq 0x59490
movl $0x0, -0x830(%rbp)
leaq -0x710(%rbp), %rdi
callq 0x59290
movl -0x830(%rbp), %eax
movl %eax, -0xeec(%rbp)
testl %eax, %eax
je 0x4daa8
jmp 0x4da94
movl -0xeec(%rbp), %eax
subl $0x4, %eax
je 0x4c656
jmp 0x4e87e
jmp 0x4dabb
leaq -0x710(%rbp), %rdi
callq 0x59290
jmp 0x4e92e
jmp 0x4dabd
jmp 0x4dabf
jmp 0x4dac1
jmp 0x4dac3
jmp 0x4dac5
jmp 0x4dac7
jmp 0x4dac9
jmp 0x4dacb
leaq -0x368(%rbp), %rdi
callq 0x59490
jmp 0x4c16e
leaq -0x650(%rbp), %rdi
callq 0x5120
jmp 0x4daea
leaq -0x380(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
je 0x4db24
leaq -0x398(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
je 0x4db24
leaq -0x3b0(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
jne 0x4dd43
cmpl $0x0, -0x444(%rbp)
jl 0x4db5f
cmpl $0x1, -0x444(%rbp)
je 0x4db5f
movl -0x444(%rbp), %esi
leaq 0x1a537d(%rip), %rdi    # 0x1f2ec0
xorl %eax, %eax
callq 0x5070
jmp 0x4db4c
movb $0x0, -0x1(%rbp)
movl $0x1, -0x830(%rbp)
jmp 0x4e87e
leaq -0x961(%rbp), %rdi
movq %rdi, -0xef8(%rbp)
callq 0x5900
movq -0xef8(%rbp), %rdx
leaq 0x1a521b(%rip), %rsi    # 0x1f2d9b
leaq -0x960(%rbp), %rdi
callq 0x47530
jmp 0x4db8e
leaq -0x380(%rbp), %rdi
leaq -0x960(%rbp), %rsi
callq 0x594b0
jmp 0x4dba3
leaq -0x960(%rbp), %rdi
callq 0x5300
leaq -0x961(%rbp), %rdi
callq 0x55d0
leaq -0x989(%rbp), %rdi
movq %rdi, -0xf00(%rbp)
callq 0x5900
movq -0xf00(%rbp), %rdx
leaq 0x1a4c47(%rip), %rsi    # 0x1f2823
leaq -0x988(%rbp), %rdi
callq 0x47530
jmp 0x4dbea
leaq -0x398(%rbp), %rdi
leaq -0x988(%rbp), %rsi
callq 0x594b0
jmp 0x4dbff
leaq -0x988(%rbp), %rdi
callq 0x5300
leaq -0x989(%rbp), %rdi
callq 0x55d0
leaq -0x9b1(%rbp), %rdi
movq %rdi, -0xf08(%rbp)
callq 0x5900
movq -0xf08(%rbp), %rdx
leaq 0x1a5189(%rip), %rsi    # 0x1f2dc1
leaq -0x9b0(%rbp), %rdi
callq 0x47530
jmp 0x4dc46
leaq -0x3b0(%rbp), %rdi
leaq -0x9b0(%rbp), %rsi
callq 0x594b0
jmp 0x4dc5b
leaq -0x9b0(%rbp), %rdi
callq 0x5300
leaq -0x9b1(%rbp), %rdi
callq 0x55d0
jmp 0x4dd41
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4dcaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x960(%rbp), %rdi
callq 0x5300
leaq -0x961(%rbp), %rdi
callq 0x55d0
jmp 0x4e92e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4dced
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x988(%rbp), %rdi
callq 0x5300
leaq -0x989(%rbp), %rdi
callq 0x55d0
jmp 0x4e92e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4dd30
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0x9b0(%rbp), %rdi
callq 0x5300
leaq -0x9b1(%rbp), %rdi
callq 0x55d0
jmp 0x4e92e
jmp 0x4dd43
leaq -0x3e0(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
sete %al
andb $0x1, %al
movb %al, -0x9b2(%rbp)
leaq -0x440(%rbp), %rdi
callq 0xf990
cmpq $0x0, %rax
seta %al
andb $0x1, %al
movb %al, -0x9b3(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
je 0x4ddaf
leaq -0x398(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
je 0x4ddaf
leaq -0x3b0(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
jne 0x4de24
movq 0x22523a(%rip), %rdi    # 0x272ff0
leaq 0x1a51f5(%rip), %rsi    # 0x1f2fb2
callq 0x5540
movq %rax, -0xf10(%rbp)
jmp 0x4ddcb
movq -0xf10(%rbp), %rdi
movq 0x2251bf(%rip), %rsi    # 0x272f98
callq 0x55b0
jmp 0x4dde0
movq 0x225209(%rip), %rdi    # 0x272ff0
leaq 0x1a51ee(%rip), %rsi    # 0x1f2fdc
callq 0x5540
movq %rax, -0xf18(%rbp)
jmp 0x4ddfc
movq -0xf18(%rbp), %rdi
movq 0x22518e(%rip), %rsi    # 0x272f98
callq 0x55b0
jmp 0x4de11
movb $0x0, -0x1(%rbp)
movl $0x1, -0x830(%rbp)
jmp 0x4e87e
leaq -0x3c8(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
jne 0x4debf
movb -0x9b2(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x4debf
movq 0x22519f(%rip), %rdi    # 0x272ff0
leaq 0x1a519b(%rip), %rsi    # 0x1f2ff3
callq 0x5540
movq %rax, -0xf20(%rbp)
jmp 0x4de66
movq -0xf20(%rbp), %rdi
movq 0x225124(%rip), %rsi    # 0x272f98
callq 0x55b0
jmp 0x4de7b
movq 0x22516e(%rip), %rdi    # 0x272ff0
leaq 0x1a51b4(%rip), %rsi    # 0x1f303d
callq 0x5540
movq %rax, -0xf28(%rbp)
jmp 0x4de97
movq -0xf28(%rbp), %rdi
movq 0x2250f3(%rip), %rsi    # 0x272f98
callq 0x55b0
jmp 0x4deac
movb $0x0, -0x1(%rbp)
movl $0x1, -0x830(%rbp)
jmp 0x4e87e
leaq -0x3e0(%rbp), %rdi
callq 0x592f0
cmpq $0x0, %rax
jne 0x4df5a
movb -0x9b2(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x4df5a
movq 0x225104(%rip), %rdi    # 0x272ff0
leaq 0x1a51f4(%rip), %rsi    # 0x1f30e7
callq 0x5540
movq %rax, -0xf30(%rbp)
jmp 0x4df01
movq -0xf30(%rbp), %rdi
movq 0x225089(%rip), %rsi    # 0x272f98
callq 0x55b0
jmp 0x4df16
movq 0x2250d3(%rip), %rdi    # 0x272ff0
leaq 0x1a50b8(%rip), %rsi    # 0x1f2fdc
callq 0x5540
movq %rax, -0xf38(%rbp)
jmp 0x4df32
movq -0xf38(%rbp), %rdi
movq 0x225058(%rip), %rsi    # 0x272f98
callq 0x55b0
jmp 0x4df47
movb $0x0, -0x1(%rbp)
movl $0x1, -0x830(%rbp)
jmp 0x4e87e
leaq -0x3f8(%rbp), %rdi
callq 0xf990
movq %rax, -0xf40(%rbp)
leaq -0x410(%rbp), %rdi
callq 0xf990
movq %rax, %rcx
movq -0xf40(%rbp), %rax
cmpq %rcx, %rax
jne 0x4dfcc
leaq -0x410(%rbp), %rdi
callq 0xf990
movq %rax, -0xf48(%rbp)
leaq -0x428(%rbp), %rdi
callq 0xf990
movq %rax, %rcx
movq -0xf48(%rbp), %rax
cmpq %rcx, %rax
jne 0x4dfcc
leaq -0x3f8(%rbp), %rdi
callq 0xf990
cmpq $0x0, %rax
jne 0x4e0d0
movq 0x22501d(%rip), %rdi    # 0x272ff0
leaq 0x1a513e(%rip), %rsi    # 0x1f3118
callq 0x5540
movq %rax, -0xf50(%rbp)
jmp 0x4dfe8
leaq -0x3f8(%rbp), %rdi
callq 0xf990
movq -0xf50(%rbp), %rdi
movq %rax, %rsi
callq 0x5160
movq %rax, -0xf58(%rbp)
jmp 0x4e00c
movq -0xf58(%rbp), %rdi
leaq 0x1a512a(%rip), %rsi    # 0x1f3144
callq 0x5540
movq %rax, -0xf60(%rbp)
jmp 0x4e028
leaq -0x410(%rbp), %rdi
callq 0xf990
movq -0xf60(%rbp), %rdi
movq %rax, %rsi
callq 0x5160
movq %rax, -0xf68(%rbp)
jmp 0x4e04c
movq -0xf68(%rbp), %rdi
leaq 0x1a50f6(%rip), %rsi    # 0x1f3150
callq 0x5540
movq %rax, -0xf70(%rbp)
jmp 0x4e068
leaq -0x428(%rbp), %rdi
callq 0xf990
movq -0xf70(%rbp), %rdi
movq %rax, %rsi
callq 0x5160
movq %rax, -0xf78(%rbp)
jmp 0x4e08c
movq -0xf78(%rbp), %rdi
leaq 0x1a50c2(%rip), %rsi    # 0x1f315c
callq 0x5540
movq %rax, -0xf80(%rbp)
jmp 0x4e0a8
movq -0xf80(%rbp), %rdi
movq 0x224ee2(%rip), %rsi    # 0x272f98
callq 0x55b0
jmp 0x4e0bd
movb $0x0, -0x1(%rbp)
movl $0x1, -0x830(%rbp)
jmp 0x4e87e
movq -0x18(%rbp), %rdi
addq $0x320, %rdi            # imm = 0x320
callq 0x5360
cmpq $0x0, %rax
jne 0x4e101
movq -0x10(%rbp), %rax
movsbl (%rax), %esi
movq -0x18(%rbp), %rdi
addq $0x320, %rdi            # imm = 0x320
callq 0x5840
jmp 0x4e0ff
jmp 0x4e101
leaq -0xa50(%rbp), %rdi
callq 0x954b0
jmp 0x4e10f
leaq -0xa70(%rbp), %rdi
xorps %xmm2, %xmm2
movaps %xmm2, %xmm0
movaps %xmm2, %xmm1
callq 0xe9c70
jmp 0x4e126
movl $0x0, -0xa74(%rbp)
movl -0xa74(%rbp), %eax
movq %rax, -0xf88(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0xf990
movq %rax, %rcx
movq -0xf88(%rbp), %rax
cmpq %rcx, %rax
jae 0x4e7cd
testb $0x1, -0x9b2(%rbp)
je 0x4e1a3
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x3c8(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0xa10(%rbp), %rdi
callq 0x5060
jmp 0x4e18a
jmp 0x4e1ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
jmp 0x4e7f7
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x3e0(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0xa10(%rbp), %rdi
callq 0x5060
jmp 0x4e1c8
jmp 0x4e1ca
leaq -0xa10(%rbp), %rsi
leaq -0xa98(%rbp), %rdi
callq 0x5220
jmp 0x4e1df
movzbl -0x19(%rbp), %esi
andl $0x1, %esi
leaq -0xa98(%rbp), %rdi
callq 0x466e0
movsd %xmm0, -0xf90(%rbp)
jmp 0x4e1fc
movsd -0xf90(%rbp), %xmm0
movsd %xmm0, -0xa20(%rbp)
leaq -0xa98(%rbp), %rdi
callq 0x5300
testb $0x1, -0x9b3(%rbp)
je 0x4e266
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x440(%rbp), %rdi
callq 0xedb0
movsd (%rax), %xmm0
movsd %xmm0, -0x9c8(%rbp)
jmp 0x4e271
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0xa98(%rbp), %rdi
callq 0x5300
jmp 0x4e7f7
xorps %xmm0, %xmm0
movsd %xmm0, -0x9c8(%rbp)
movl $0x0, -0xa9c(%rbp)
movl -0xa9c(%rbp), %eax
movq %rax, -0xf98(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x592f0
movq %rax, %rcx
movq -0xf98(%rbp), %rax
cmpq %rcx, %rax
jae 0x4e7b7
movl -0xa9c(%rbp), %eax
movl %eax, %esi
leaq -0x380(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0xac0(%rbp), %rdi
callq 0x5220
jmp 0x4e2cc
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x3f8(%rbp), %rdi
callq 0xedb0
movsd (%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xfa4(%rbp)
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x410(%rbp), %rdi
callq 0xedb0
movsd (%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xfa0(%rbp)
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x428(%rbp), %rdi
callq 0xedb0
movss -0xfa4(%rbp), %xmm0
movss -0xfa0(%rbp), %xmm1
movsd (%rax), %xmm2
cvtsd2ss %xmm2, %xmm2
leaq -0xac0(%rbp), %rdi
callq 0x8acd0
movss %xmm0, -0xf9c(%rbp)
jmp 0x4e356
movss -0xf9c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
callq 0xe9290
movsd %xmm0, -0xfb0(%rbp)
jmp 0x4e371
movsd -0xfb0(%rbp), %xmm0
movsd %xmm0, -0xa38(%rbp)
leaq -0xac0(%rbp), %rdi
callq 0x5300
movl -0xa9c(%rbp), %eax
movl %eax, %esi
leaq -0x398(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0xae0(%rbp), %rdi
callq 0x5220
jmp 0x4e3b2
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x3f8(%rbp), %rdi
callq 0xedb0
movsd (%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xfbc(%rbp)
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x410(%rbp), %rdi
callq 0xedb0
movsd (%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xfb8(%rbp)
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x428(%rbp), %rdi
callq 0xedb0
movss -0xfbc(%rbp), %xmm0
movss -0xfb8(%rbp), %xmm1
movsd (%rax), %xmm2
cvtsd2ss %xmm2, %xmm2
leaq -0xae0(%rbp), %rdi
callq 0x8acd0
movss %xmm0, -0xfb4(%rbp)
jmp 0x4e43c
movss -0xfb4(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
callq 0xe9290
movsd %xmm0, -0xfc8(%rbp)
jmp 0x4e457
movsd -0xfc8(%rbp), %xmm0
movsd %xmm0, -0xa30(%rbp)
leaq -0xae0(%rbp), %rdi
callq 0x5300
movl -0xa9c(%rbp), %eax
movl %eax, %esi
leaq -0x3b0(%rbp), %rdi
callq 0x59310
movq %rax, %rsi
leaq -0xb00(%rbp), %rdi
callq 0x5220
jmp 0x4e498
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x3f8(%rbp), %rdi
callq 0xedb0
movsd (%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xfd4(%rbp)
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x410(%rbp), %rdi
callq 0xedb0
movsd (%rax), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xfd0(%rbp)
movl -0xa74(%rbp), %eax
movl %eax, %esi
leaq -0x428(%rbp), %rdi
callq 0xedb0
movss -0xfd4(%rbp), %xmm0
movss -0xfd0(%rbp), %xmm1
movsd (%rax), %xmm2
cvtsd2ss %xmm2, %xmm2
leaq -0xb00(%rbp), %rdi
callq 0x8acd0
movss %xmm0, -0xfcc(%rbp)
jmp 0x4e522
movss -0xfcc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
callq 0xe9290
movsd %xmm0, -0xfe0(%rbp)
jmp 0x4e53d
movsd -0xfe0(%rbp), %xmm0
movsd %xmm0, -0xa28(%rbp)
leaq -0xb00(%rbp), %rdi
callq 0x5300
movq -0x18(%rbp), %rsi
movsd -0xa38(%rbp), %xmm0
movsd -0xa30(%rbp), %xmm1
movsd -0xa28(%rbp), %xmm2
leaq -0xb18(%rbp), %rdi
callq 0x97170
jmp 0x4e583
movq -0xb08(%rbp), %rax
movq %rax, -0xa60(%rbp)
movups -0xb18(%rbp), %xmm0
movaps %xmm0, -0xa70(%rbp)
leaq -0xa70(%rbp), %rdi
xorl %esi, %esi
callq 0xe9d70
movq %rax, -0xfe8(%rbp)
jmp 0x4e5b6
movq -0xfe8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xa50(%rbp)
leaq -0xa70(%rbp), %rdi
movl $0x1, %esi
callq 0xe9d70
movq %rax, -0xff0(%rbp)
jmp 0x4e5e3
movq -0xff0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xa48(%rbp)
leaq -0xa70(%rbp), %rdi
movl $0x2, %esi
callq 0xe9d70
movq %rax, -0xff8(%rbp)
jmp 0x4e610
movq -0xff8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xa40(%rbp)
movl -0xa74(%rbp), %eax
movq %rax, -0x1000(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x592f0
movq %rax, %rcx
movq -0x1000(%rbp), %rax
imulq %rcx, %rax
movl -0xa9c(%rbp), %ecx
addq %rcx, %rax
movl %eax, -0x9d0(%rbp)
movl $0x1, -0xb1c(%rbp)
movl $0x0, -0xb20(%rbp)
movl -0xb20(%rbp), %eax
movq %rax, -0x1008(%rbp)
movq -0x18(%rbp), %rdi
addq $0x2f0, %rdi            # imm = 0x2F0
callq 0xf060
movq %rax, %rcx
movq -0x1008(%rbp), %rax
cmpq %rcx, %rax
jae 0x4e77d
movq -0x18(%rbp), %rdi
movq %rdi, -0x1018(%rbp)
addq $0x2f0, %rdi            # imm = 0x2F0
movl -0xb20(%rbp), %eax
movl %eax, %esi
callq 0xfcc0
movq -0x1018(%rbp), %rdi
movq %rax, %rsi
leaq -0xa50(%rbp), %rdx
callq 0x979b0
movsd %xmm0, -0x1010(%rbp)
jmp 0x4e6dc
movsd -0x1010(%rbp), %xmm1
movsd 0x1a394c(%rip), %xmm0   # 0x1f2038
ucomisd %xmm1, %xmm0
jbe 0x4e767
movl $0x0, -0xb1c(%rbp)
jmp 0x4e767
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0xac0(%rbp), %rdi
callq 0x5300
jmp 0x4e7f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0xae0(%rbp), %rdi
callq 0x5300
jmp 0x4e7f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x318(%rbp)
movl %eax, -0x31c(%rbp)
leaq -0xb00(%rbp), %rdi
callq 0x5300
jmp 0x4e7f7
jmp 0x4e769
movl -0xb20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb20(%rbp)
jmp 0x4e66d
cmpl $0x1, -0xb1c(%rbp)
jne 0x4e7a1
movq -0x18(%rbp), %rdi
addq $0x2f0, %rdi            # imm = 0x2F0
leaq -0xa50(%rbp), %rsi
callq 0xf190
jmp 0x4e79f
jmp 0x4e7a1
jmp 0x4e7a3
movl -0xa9c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa9c(%rbp)
jmp 0x4e27b
jmp 0x4e7b9
movl -0xa74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa74(%rbp)
jmp 0x4e130
movq -0x18(%rbp), %rdi
addq $0x2f0, %rdi            # imm = 0x2F0
callq 0xf060
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x110(%rax)
leaq -0xa50(%rbp), %rdi
callq 0xf200
jmp 0x4e870
leaq -0xa50(%rbp), %rdi
callq 0xf200
jmp 0x4e92e
movq 0x2247b1(%rip), %rdi    # 0x272fc0
leaq 0x1a4951(%rip), %rsi    # 0x1f3167
callq 0x5540
movq %rax, -0x1020(%rbp)
jmp 0x4e824
movq -0x1020(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x5540
movq %rax, -0x1028(%rbp)
jmp 0x4e83d
movq -0x1028(%rbp), %rdi
movq 0x22474d(%rip), %rsi    # 0x272f98
callq 0x55b0
jmp 0x4e852
leaq -0x650(%rbp), %rdi
callq 0x5120
jmp 0x4e860
movb $0x0, -0x1(%rbp)
movl $0x1, -0x830(%rbp)
jmp 0x4e87e
movb $0x1, -0x1(%rbp)
movl $0x1, -0x830(%rbp)
leaq -0x650(%rbp), %rdi
callq 0x5180
leaq -0x440(%rbp), %rdi
callq 0xf9d0
leaq -0x428(%rbp), %rdi
callq 0xf9d0
leaq -0x410(%rbp), %rdi
callq 0xf9d0
leaq -0x3f8(%rbp), %rdi
callq 0xf9d0
leaq -0x3e0(%rbp), %rdi
callq 0x59290
leaq -0x3c8(%rbp), %rdi
callq 0x59290
leaq -0x3b0(%rbp), %rdi
callq 0x59290
leaq -0x398(%rbp), %rdi
callq 0x59290
leaq -0x380(%rbp), %rdi
callq 0x59290
leaq -0x368(%rbp), %rdi
callq 0x59290
leaq -0x350(%rbp), %rdi
callq 0x59290
leaq -0x300(%rbp), %rax
movq %rax, -0x1038(%rbp)
addq $0x2c0, %rax            # imm = 0x2C0
movq %rax, -0x1030(%rbp)
jmp 0x4e9c0
leaq -0x650(%rbp), %rdi
callq 0x5180
leaq -0x440(%rbp), %rdi
callq 0xf9d0
leaq -0x428(%rbp), %rdi
callq 0xf9d0
leaq -0x410(%rbp), %rdi
callq 0xf9d0
leaq -0x3f8(%rbp), %rdi
callq 0xf9d0
leaq -0x3e0(%rbp), %rdi
callq 0x59290
leaq -0x3c8(%rbp), %rdi
callq 0x59290
leaq -0x3b0(%rbp), %rdi
callq 0x59290
leaq -0x398(%rbp), %rdi
callq 0x59290
leaq -0x380(%rbp), %rdi
callq 0x59290
leaq -0x368(%rbp), %rdi
callq 0x59290
leaq -0x350(%rbp), %rdi
callq 0x59290
jmp 0x4ea08
movq -0x1030(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x1040(%rbp)
callq 0x5300
movq -0x1038(%rbp), %rcx
movq -0x1040(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x1030(%rbp)
jne 0x4e9c0
leaq -0x40(%rbp), %rdi
callq 0x5300
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x1060, %rsp           # imm = 0x1060
popq %rbp
retq
leaq -0x300(%rbp), %rax
movq %rax, -0x1050(%rbp)
addq $0x2c0, %rax            # imm = 0x2C0
movq %rax, -0x1048(%rbp)
movq -0x1048(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x1058(%rbp)
callq 0x5300
movq -0x1050(%rbp), %rcx
movq -0x1058(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x1048(%rbp)
jne 0x4ea23
jmp 0x4ea56
leaq -0x40(%rbp), %rdi
callq 0x5300
movq -0x318(%rbp), %rdi
callq 0x58f0
nopl (%rax,%rax)