
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name: __upper_bound<__gnu_cxx::__normal_iterator<gold::Input_section_info*,
   std::vector<gold::Input_section_info> >, gold::Input_section_info,
   __gnu_cxx::__ops::_Val_comp_iter<gold::Input_section_sorter> > */

__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>
 std::
 __upper_bound<__gnu_cxx::__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info>_>,_gold::Input_section_info,___gnu_cxx::__ops::_Val_comp_iter<gold::Input_section_sorter>_>
           (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>
            __first,__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>
                    __last,Input_section_info *__val,
           _Val_comp_iter<gold::Input_section_sorter> __comp)

{
  bool bVar1;
  long lVar2;
  long lVar3;
  Input_section_sorter local_40 [2];
  
  if (0 < (long)__last._M_current - (long)__first._M_current) {
    lVar2 = ((long)__last._M_current - (long)__first._M_current >> 4) * -0x3333333333333333;
    local_40[0] = __comp._M_comp;
    do {
      while( true ) {
        lVar3 = lVar2 >> 1;
        bVar1 = gold::Input_section_sorter::operator()(local_40,__val,__first._M_current + lVar3);
        if (!bVar1) break;
        lVar2 = lVar3;
        if (lVar3 < 1) {
          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>
                  )__first._M_current;
        }
      }
      __first._M_current = __first._M_current + lVar3 + 1;
      lVar2 = (lVar2 - lVar3) + -1;
    } while (0 < lVar2);
  }
  return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>
          )__first._M_current;
}



long FUN_0025f650(long param_1,long param_2,undefined8 param_3,undefined8 param_4)

{
  char cVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  undefined8 local_40 [2];
  
  if (0 < param_2 - param_1) {
    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;
    local_40[0] = param_4;
    do {
      while( true ) {
        lVar4 = lVar3 >> 1;
        lVar2 = lVar4 * 0x50 + param_1;
        cVar1 = FUN_002572a0(local_40,param_3,lVar2);
        if (cVar1 == '\0') break;
        lVar3 = lVar4;
        if (lVar4 < 1) {
          return param_1;
        }
      }
      param_1 = lVar2 + 0x50;
      lVar3 = (lVar3 - lVar4) + -1;
    } while (0 < lVar3);
  }
  return param_1;
}


MOV RAX,-0x3333333333333333
PUSH R15
SUB RSI,RDI
PUSH R14
MOV R14,RSI
PUSH R13
SAR R14,0x4
PUSH R12
IMUL R14,RAX
PUSH RBP
MOV RBP,RDI
PUSH RBX
SUB RSP,0x18
MOV qword ptr [RSP + 0x8],RCX
TEST RSI,RSI
JLE 0x0025f6cb
MOV R12,RDX
LEA R13,[RSP + 0x8]
JMP 0x0025f6a0
SUB R14,R15
LEA RBP,[RBX + 0x50]
SUB R14,0x1
TEST R14,R14
JLE 0x0025f6cb
MOV R15,R14
MOV RSI,R12
MOV RDI,R13
SAR R15,0x1
LEA RBX,[R15 + R15*0x4]
SHL RBX,0x4
ADD RBX,RBP
MOV RDX,RBX
CALL 0x002572a0
TEST AL,AL
JZ 0x0025f690
MOV R14,R15
TEST R14,R14
JG 0x0025f6a0
ADD RSP,0x18
MOV RAX,RBP
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
(translation_unit "long FUN_0025f650(long param_1,long param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined8 local_40 [2];\n  \n  if (0 < param_2 - param_1) {\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }\n  return param_1;\n}\n\n" (function_definition "long FUN_0025f650(long param_1,long param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined8 local_40 [2];\n  \n  if (0 < param_2 - param_1) {\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }\n  return param_1;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_0025f650(long param_1,long param_2,undefined8 param_3,undefined8 param_4)" identifier (parameter_list "(long param_1,long param_2,undefined8 param_3,undefined8 param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined8 local_40 [2];\n  \n  if (0 < param_2 - param_1) {\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }\n  return param_1;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (if_statement "if (0 < param_2 - param_1) {\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }" if (parenthesized_expression "(0 < param_2 - param_1)" ( (binary_expression "0 < param_2 - param_1" number_literal < (binary_expression "param_2 - param_1" identifier - identifier)) )) (compound_statement "{\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }" { (expression_statement "lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;" (assignment_expression "lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333" identifier = (binary_expression "(param_2 - param_1 >> 4) * -0x3333333333333333" (parenthesized_expression "(param_2 - param_1 >> 4)" ( (binary_expression "param_2 - param_1 >> 4" (binary_expression "param_2 - param_1" identifier - identifier) >> number_literal) )) * number_literal)) ;) (expression_statement "local_40[0] = param_4;" (assignment_expression "local_40[0] = param_4" (subscript_expression "local_40[0]" identifier [ number_literal ]) = identifier) ;) (do_statement "do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);" do (compound_statement "{\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    }" { (while_statement "while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }" { (expression_statement "lVar4 = lVar3 >> 1;" (assignment_expression "lVar4 = lVar3 >> 1" identifier = (binary_expression "lVar3 >> 1" identifier >> number_literal)) ;) (expression_statement "lVar2 = lVar4 * 0x50 + param_1;" (assignment_expression "lVar2 = lVar4 * 0x50 + param_1" identifier = (binary_expression "lVar4 * 0x50 + param_1" (binary_expression "lVar4 * 0x50" identifier * number_literal) + identifier)) ;) (expression_statement "cVar1 = FUN_002572a0(local_40,param_3,lVar2);" (assignment_expression "cVar1 = FUN_002572a0(local_40,param_3,lVar2)" identifier = (call_expression "FUN_002572a0(local_40,param_3,lVar2)" identifier (argument_list "(local_40,param_3,lVar2)" ( identifier , identifier , identifier )))) ;) (if_statement "if (cVar1 == '\0') break;" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "lVar3 = lVar4;" (assignment_expression "lVar3 = lVar4" identifier = identifier) ;) (if_statement "if (lVar4 < 1) {\n          return param_1;\n        }" if (parenthesized_expression "(lVar4 < 1)" ( (binary_expression "lVar4 < 1" identifier < number_literal) )) (compound_statement "{\n          return param_1;\n        }" { (return_statement "return param_1;" return identifier ;) })) })) (expression_statement "param_1 = lVar2 + 0x50;" (assignment_expression "param_1 = lVar2 + 0x50" identifier = (binary_expression "lVar2 + 0x50" identifier + number_literal)) ;) (expression_statement "lVar3 = (lVar3 - lVar4) + -1;" (assignment_expression "lVar3 = (lVar3 - lVar4) + -1" identifier = (binary_expression "(lVar3 - lVar4) + -1" (parenthesized_expression "(lVar3 - lVar4)" ( (binary_expression "lVar3 - lVar4" identifier - identifier) )) + number_literal)) ;) }) while (parenthesized_expression "(0 < lVar3)" ( (binary_expression "0 < lVar3" number_literal < identifier) )) ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* DWARF original name: __upper_bound<__gnu_cxx::__normal_iterator<gold::Input_section_info*,\n   std::vector<gold::Input_section_info> >, gold::Input_section_info,\n   __gnu_cxx::__ops::_Val_comp_iter<gold::Input_section_sorter> > */\n\n__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n std::\n __upper_bound<__gnu_cxx::__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info>_>,_gold::Input_section_info,___gnu_cxx::__ops::_Val_comp_iter<gold::Input_section_sorter>_>\n           (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n            __first,__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                    __last,Input_section_info *__val,\n           _Val_comp_iter<gold::Input_section_sorter> __comp)\n\n{\n  bool bVar1;\n  long lVar2;\n  long lVar3;\n  Input_section_sorter local_40 [2];\n  \n  if (0 < (long)__last._M_current - (long)__first._M_current) {\n    lVar2 = ((long)__last._M_current - (long)__first._M_current >> 4) * -0x3333333333333333;\n    local_40[0] = __comp._M_comp;\n    do {\n      while( true ) {\n        lVar3 = lVar2 >> 1;\n        bVar1 = gold::Input_section_sorter::operator()(local_40,__val,__first._M_current + lVar3);\n        if (!bVar1) break;\n        lVar2 = lVar3;\n        if (lVar3 < 1) {\n          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;\n        }\n      }\n      __first._M_current = __first._M_current + lVar3 + 1;\n      lVar2 = (lVar2 - lVar3) + -1;\n    } while (0 < lVar2);\n  }\n  return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n          )__first._M_current;\n}\n\n" comment comment (ERROR "__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info," (binary_expression "__normal_iterator<gold::Input_section_info*,_std::vector<gold" (binary_expression "__normal_iterator<gold::Input_section_info*,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Input_section_info" : : identifier) * (ERROR "," ,) identifier) (ERROR "::vector" : : identifier) < identifier) : : identifier ,) (labeled_statement "_std::allocator<gold::Input_section_info>_>_>\n std::\n __upper_bound<__gnu_cxx::__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info>_>,_gold::Input_section_info,___gnu_cxx::__ops::_Val_comp_iter<gold::Input_section_sorter>_>\n           (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n            __first,__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                    __last,Input_section_info *__val,\n           _Val_comp_iter<gold::Input_section_sorter> __comp)\n\n{\n  bool bVar1;\n  long lVar2;\n  long lVar3;\n  Input_section_sorter local_40 [2];\n  \n  if (0 < (long)__last._M_current - (long)__first._M_current) {\n    lVar2 = ((long)__last._M_current - (long)__first._M_current >> 4) * -0x3333333333333333;\n    local_40[0] = __comp._M_comp;\n    do {\n      while( true ) {\n        lVar3 = lVar2 >> 1;\n        bVar1 = gold::Input_section_sorter::operator()(local_40,__val,__first._M_current + lVar3);\n        if (!bVar1) break;\n        lVar2 = lVar3;\n        if (lVar3 < 1) {\n          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;\n        }\n      }\n      __first._M_current = __first._M_current + lVar3 + 1;\n      lVar2 = (lVar2 - lVar3) + -1;\n    } while (0 < lVar2);\n  }\n  return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n          )__first._M_current;\n}" statement_identifier (ERROR "::allocator<gold::Input_section_info>_>_>\n std::\n __upper_bound<__gnu_cxx::__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info>_>,_gold::Input_section_info,___gnu_cxx::__ops::_Val_comp_iter<gold::Input_section_sorter>_>\n           (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n            __first,__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                    __last,Input_section_info *__val,\n           _Val_comp_iter<gold:" : : (binary_expression "allocator<gold" identifier < identifier) : : (binary_expression "Input_section_info>_>_>\n std" (binary_expression "Input_section_info>_>_" (binary_expression "Input_section_info>_" identifier > identifier) > identifier) > identifier) : : (binary_expression "__upper_bound<__gnu_cxx" identifier < identifier) : : (binary_expression "__normal_iterator<gold" identifier < identifier) : : (binary_expression "Input_section_info*,_std" identifier * (ERROR "," ,) identifier) : : (binary_expression "vector<gold" identifier < identifier) : : (binary_expression "Input_section_info>_>,_gold" (binary_expression "Input_section_info>_" identifier > identifier) > (ERROR "," ,) identifier) : : (comma_expression "Input_section_info,___gnu_cxx" identifier , identifier) : : (comma_expression "__ops::_Val_comp_iter<gold::Input_section_sorter>_>\n           (__normal_iterator<gold::Input_section_info*,_std" identifier (ERROR "::_Val_comp_iter<gold::Input_section_sorter>_>\n           (__normal_iterator<gold::Input_section_info*" : : (binary_expression "_Val_comp_iter<gold" identifier < identifier) : : (binary_expression "Input_section_sorter>_" identifier > identifier) > ( (binary_expression "__normal_iterator<gold" identifier < identifier) : : identifier *) , identifier) : : (binary_expression "vector<gold" identifier < identifier) : : (comma_expression "Input_section_info,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : (comma_expression "Input_section_info>_>_>\n            __first,__normal_iterator<gold" (binary_expression "Input_section_info>_>_>\n            __first" (binary_expression "Input_section_info>_>_" (binary_expression "Input_section_info>_" identifier > identifier) > identifier) > identifier) , (binary_expression "__normal_iterator<gold" identifier < identifier)) : : (binary_expression "Input_section_info*,_std" identifier * (ERROR "," ,) identifier) : : (binary_expression "vector<gold" identifier < identifier) : : (comma_expression "Input_section_info,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : (comma_expression "Input_section_info>_>_>\n                    __last,Input_section_info *__val,\n           _Val_comp_iter<gold" (binary_expression "Input_section_info>_>_>\n                    __last" (binary_expression "Input_section_info>_>_" (binary_expression "Input_section_info>_" identifier > identifier) > identifier) > identifier) , (comma_expression "Input_section_info *__val,\n           _Val_comp_iter<gold" (binary_expression "Input_section_info *__val" identifier * identifier) , (binary_expression "_Val_comp_iter<gold" identifier < identifier))) :) : (ERROR "Input_section_sorter> __comp)" (binary_expression "Input_section_sorter> __comp" identifier > identifier) )) (compound_statement "{\n  bool bVar1;\n  long lVar2;\n  long lVar3;\n  Input_section_sorter local_40 [2];\n  \n  if (0 < (long)__last._M_current - (long)__first._M_current) {\n    lVar2 = ((long)__last._M_current - (long)__first._M_current >> 4) * -0x3333333333333333;\n    local_40[0] = __comp._M_comp;\n    do {\n      while( true ) {\n        lVar3 = lVar2 >> 1;\n        bVar1 = gold::Input_section_sorter::operator()(local_40,__val,__first._M_current + lVar3);\n        if (!bVar1) break;\n        lVar2 = lVar3;\n        if (lVar3 < 1) {\n          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;\n        }\n      }\n      __first._M_current = __first._M_current + lVar3 + 1;\n      lVar2 = (lVar2 - lVar3) + -1;\n    } while (0 < lVar2);\n  }\n  return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n          )__first._M_current;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "Input_section_sorter local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (if_statement "if (0 < (long)__last._M_current - (long)__first._M_current) {\n    lVar2 = ((long)__last._M_current - (long)__first._M_current >> 4) * -0x3333333333333333;\n    local_40[0] = __comp._M_comp;\n    do {\n      while( true ) {\n        lVar3 = lVar2 >> 1;\n        bVar1 = gold::Input_section_sorter::operator()(local_40,__val,__first._M_current + lVar3);\n        if (!bVar1) break;\n        lVar2 = lVar3;\n        if (lVar3 < 1) {\n          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;\n        }\n      }\n      __first._M_current = __first._M_current + lVar3 + 1;\n      lVar2 = (lVar2 - lVar3) + -1;\n    } while (0 < lVar2);\n  }" if (parenthesized_expression "(0 < (long)__last._M_current - (long)__first._M_current)" ( (binary_expression "0 < (long)__last._M_current - (long)__first._M_current" number_literal < (binary_expression "(long)__last._M_current - (long)__first._M_current" (cast_expression "(long)__last._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__last._M_current" identifier . field_identifier)) - (cast_expression "(long)__first._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__first._M_current" identifier . field_identifier)))) )) (compound_statement "{\n    lVar2 = ((long)__last._M_current - (long)__first._M_current >> 4) * -0x3333333333333333;\n    local_40[0] = __comp._M_comp;\n    do {\n      while( true ) {\n        lVar3 = lVar2 >> 1;\n        bVar1 = gold::Input_section_sorter::operator()(local_40,__val,__first._M_current + lVar3);\n        if (!bVar1) break;\n        lVar2 = lVar3;\n        if (lVar3 < 1) {\n          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;\n        }\n      }\n      __first._M_current = __first._M_current + lVar3 + 1;\n      lVar2 = (lVar2 - lVar3) + -1;\n    } while (0 < lVar2);\n  }" { (expression_statement "lVar2 = ((long)__last._M_current - (long)__first._M_current >> 4) * -0x3333333333333333;" (assignment_expression "lVar2 = ((long)__last._M_current - (long)__first._M_current >> 4) * -0x3333333333333333" identifier = (binary_expression "((long)__last._M_current - (long)__first._M_current >> 4) * -0x3333333333333333" (parenthesized_expression "((long)__last._M_current - (long)__first._M_current >> 4)" ( (binary_expression "(long)__last._M_current - (long)__first._M_current >> 4" (binary_expression "(long)__last._M_current - (long)__first._M_current" (cast_expression "(long)__last._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__last._M_current" identifier . field_identifier)) - (cast_expression "(long)__first._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__first._M_current" identifier . field_identifier))) >> number_literal) )) * number_literal)) ;) (expression_statement "local_40[0] = __comp._M_comp;" (assignment_expression "local_40[0] = __comp._M_comp" (subscript_expression "local_40[0]" identifier [ number_literal ]) = (field_expression "__comp._M_comp" identifier . field_identifier)) ;) (do_statement "do {\n      while( true ) {\n        lVar3 = lVar2 >> 1;\n        bVar1 = gold::Input_section_sorter::operator()(local_40,__val,__first._M_current + lVar3);\n        if (!bVar1) break;\n        lVar2 = lVar3;\n        if (lVar3 < 1) {\n          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;\n        }\n      }\n      __first._M_current = __first._M_current + lVar3 + 1;\n      lVar2 = (lVar2 - lVar3) + -1;\n    } while (0 < lVar2);" do (compound_statement "{\n      while( true ) {\n        lVar3 = lVar2 >> 1;\n        bVar1 = gold::Input_section_sorter::operator()(local_40,__val,__first._M_current + lVar3);\n        if (!bVar1) break;\n        lVar2 = lVar3;\n        if (lVar3 < 1) {\n          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;\n        }\n      }\n      __first._M_current = __first._M_current + lVar3 + 1;\n      lVar2 = (lVar2 - lVar3) + -1;\n    }" { (while_statement "while( true ) {\n        lVar3 = lVar2 >> 1;\n        bVar1 = gold::Input_section_sorter::operator()(local_40,__val,__first._M_current + lVar3);\n        if (!bVar1) break;\n        lVar2 = lVar3;\n        if (lVar3 < 1) {\n          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        lVar3 = lVar2 >> 1;\n        bVar1 = gold::Input_section_sorter::operator()(local_40,__val,__first._M_current + lVar3);\n        if (!bVar1) break;\n        lVar2 = lVar3;\n        if (lVar3 < 1) {\n          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;\n        }\n      }" { (expression_statement "lVar3 = lVar2 >> 1;" (assignment_expression "lVar3 = lVar2 >> 1" identifier = (binary_expression "lVar2 >> 1" identifier >> number_literal)) ;) (ERROR "bVar1 = gold::" (assignment_expression "bVar1 = gold" identifier = identifier) : :) (labeled_statement "Input_section_sorter::operator()(local_40,__val,__first._M_current + lVar3);" statement_identifier : (ERROR ":" :) (expression_statement "operator()(local_40,__val,__first._M_current + lVar3);" (call_expression "operator()(local_40,__val,__first._M_current + lVar3)" (call_expression "operator()" identifier (argument_list "()" ( ))) (argument_list "(local_40,__val,__first._M_current + lVar3)" ( identifier , identifier , (binary_expression "__first._M_current + lVar3" (field_expression "__first._M_current" identifier . field_identifier) + identifier) ))) ;)) (if_statement "if (!bVar1) break;" if (parenthesized_expression "(!bVar1)" ( (unary_expression "!bVar1" ! identifier) )) (break_statement "break;" break ;)) (expression_statement "lVar2 = lVar3;" (assignment_expression "lVar2 = lVar3" identifier = identifier) ;) (if_statement "if (lVar3 < 1) {\n          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;\n        }" if (parenthesized_expression "(lVar3 < 1)" ( (binary_expression "lVar3 < 1" identifier < number_literal) )) (compound_statement "{\n          return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;\n        }" { (return_statement "return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current;" return (parenthesized_expression "(__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n                  )__first._M_current" ( (ERROR "__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::" (comma_expression "__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std" (binary_expression "__normal_iterator<gold::Input_section_info*,_std::vector<gold" (binary_expression "__normal_iterator<gold::Input_section_info*,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Input_section_info" : : identifier) * (ERROR "," ,) identifier) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Input_section_info" : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : :) (binary_expression "Input_section_info>_>_>\n                  )__first._M_current" (binary_expression "Input_section_info>_>_" (binary_expression "Input_section_info>_" identifier > identifier) > identifier) > (ERROR ")" )) (field_expression "__first._M_current" identifier . field_identifier)) )) ;) })) })) (expression_statement "__first._M_current = __first._M_current + lVar3 + 1;" (assignment_expression "__first._M_current = __first._M_current + lVar3 + 1" (field_expression "__first._M_current" identifier . field_identifier) = (binary_expression "__first._M_current + lVar3 + 1" (binary_expression "__first._M_current + lVar3" (field_expression "__first._M_current" identifier . field_identifier) + identifier) + number_literal)) ;) (expression_statement "lVar2 = (lVar2 - lVar3) + -1;" (assignment_expression "lVar2 = (lVar2 - lVar3) + -1" identifier = (binary_expression "(lVar2 - lVar3) + -1" (parenthesized_expression "(lVar2 - lVar3)" ( (binary_expression "lVar2 - lVar3" identifier - identifier) )) + number_literal)) ;) }) while (parenthesized_expression "(0 < lVar2)" ( (binary_expression "0 < lVar2" number_literal < identifier) )) ;) })) (return_statement "return (__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n          )__first._M_current;" return (parenthesized_expression "(__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::Input_section_info>_>_>\n          )__first._M_current" ( (ERROR "__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std::allocator<gold::" (comma_expression "__normal_iterator<gold::Input_section_info*,_std::vector<gold::Input_section_info,_std" (binary_expression "__normal_iterator<gold::Input_section_info*,_std::vector<gold" (binary_expression "__normal_iterator<gold::Input_section_info*,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Input_section_info" : : identifier) * (ERROR "," ,) identifier) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Input_section_info" : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : :) (binary_expression "Input_section_info>_>_>\n          )__first._M_current" (binary_expression "Input_section_info>_>_" (binary_expression "Input_section_info>_" identifier > identifier) > identifier) > (ERROR ")" )) (field_expression "__first._M_current" identifier . field_identifier)) )) ;) })))
(translation_unit "long FUN_0025f650(long param_1,long param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined8 local_40 [2];\n  \n  if (0 < param_2 - param_1) {\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }\n  return param_1;\n}\n\n" (function_definition "long FUN_0025f650(long param_1,long param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined8 local_40 [2];\n  \n  if (0 < param_2 - param_1) {\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }\n  return param_1;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_0025f650(long param_1,long param_2,undefined8 param_3,undefined8 param_4)" identifier (parameter_list "(long param_1,long param_2,undefined8 param_3,undefined8 param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined8 local_40 [2];\n  \n  if (0 < param_2 - param_1) {\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }\n  return param_1;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (if_statement "if (0 < param_2 - param_1) {\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }" if (parenthesized_expression "(0 < param_2 - param_1)" ( (binary_expression "0 < param_2 - param_1" number_literal < (binary_expression "param_2 - param_1" identifier - identifier)) )) (compound_statement "{\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }" { (expression_statement "lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;" (assignment_expression "lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333" identifier = (binary_expression "(param_2 - param_1 >> 4) * -0x3333333333333333" (parenthesized_expression "(param_2 - param_1 >> 4)" ( (binary_expression "param_2 - param_1 >> 4" (binary_expression "param_2 - param_1" identifier - identifier) >> number_literal) )) * number_literal)) ;) (expression_statement "local_40[0] = param_4;" (assignment_expression "local_40[0] = param_4" (subscript_expression "local_40[0]" identifier [ number_literal ]) = identifier) ;) (do_statement "do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);" do (compound_statement "{\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    }" { (while_statement "while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }" { (expression_statement "lVar4 = lVar3 >> 1;" (assignment_expression "lVar4 = lVar3 >> 1" identifier = (binary_expression "lVar3 >> 1" identifier >> number_literal)) ;) (expression_statement "lVar2 = lVar4 * 0x50 + param_1;" (assignment_expression "lVar2 = lVar4 * 0x50 + param_1" identifier = (binary_expression "lVar4 * 0x50 + param_1" (binary_expression "lVar4 * 0x50" identifier * number_literal) + identifier)) ;) (expression_statement "cVar1 = FUN_002572a0(local_40,param_3,lVar2);" (assignment_expression "cVar1 = FUN_002572a0(local_40,param_3,lVar2)" identifier = (call_expression "FUN_002572a0(local_40,param_3,lVar2)" identifier (argument_list "(local_40,param_3,lVar2)" ( identifier , identifier , identifier )))) ;) (if_statement "if (cVar1 == '\0') break;" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "lVar3 = lVar4;" (assignment_expression "lVar3 = lVar4" identifier = identifier) ;) (if_statement "if (lVar4 < 1) {\n          return param_1;\n        }" if (parenthesized_expression "(lVar4 < 1)" ( (binary_expression "lVar4 < 1" identifier < number_literal) )) (compound_statement "{\n          return param_1;\n        }" { (return_statement "return param_1;" return identifier ;) })) })) (expression_statement "param_1 = lVar2 + 0x50;" (assignment_expression "param_1 = lVar2 + 0x50" identifier = (binary_expression "lVar2 + 0x50" identifier + number_literal)) ;) (expression_statement "lVar3 = (lVar3 - lVar4) + -1;" (assignment_expression "lVar3 = (lVar3 - lVar4) + -1" identifier = (binary_expression "(lVar3 - lVar4) + -1" (parenthesized_expression "(lVar3 - lVar4)" ( (binary_expression "lVar3 - lVar4" identifier - identifier) )) + number_literal)) ;) }) while (parenthesized_expression "(0 < lVar3)" ( (binary_expression "0 < lVar3" number_literal < identifier) )) ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT - IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) >> LIT) )) * LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return IDENT ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) + LIT)) ;) }) while (parenthesized_expression ( (binary_expression LIT < IDENT) )) ;) })) (return_statement return IDENT ;) })))
(function_definition "long FUN_0025f650(long param_1,long param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined8 local_40 [2];\n  \n  if (0 < param_2 - param_1) {\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }\n  return param_1;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_0025f650(long param_1,long param_2,undefined8 param_3,undefined8 param_4)" (identifier "FUN_0025f650") (parameter_list "(long param_1,long param_2,undefined8 param_3,undefined8 param_4)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "undefined8 param_4" (type_identifier "undefined8") (identifier "param_4")) () ")"))) (compound_statement "{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  undefined8 local_40 [2];\n  \n  if (0 < param_2 - param_1) {\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }\n  return param_1;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "undefined8 local_40 [2];" (type_identifier "undefined8") (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]")) (; ";")) (if_statement "if (0 < param_2 - param_1) {\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }" (if "if") (parenthesized_expression "(0 < param_2 - param_1)" (( "(") (binary_expression "0 < param_2 - param_1" (number_literal "0") (< "<") (binary_expression "param_2 - param_1" (identifier "param_2") (- "-") (identifier "param_1"))) () ")")) (compound_statement "{\n    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;\n    local_40[0] = param_4;\n    do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);\n  }" ({ "{") (expression_statement "lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;" (assignment_expression "lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333" (identifier "lVar3") (= "=") (binary_expression "(param_2 - param_1 >> 4) * -0x3333333333333333" (parenthesized_expression "(param_2 - param_1 >> 4)" (( "(") (binary_expression "param_2 - param_1 >> 4" (binary_expression "param_2 - param_1" (identifier "param_2") (- "-") (identifier "param_1")) (>> ">>") (number_literal "4")) () ")")) (* "*") (number_literal "-0x3333333333333333"))) (; ";")) (expression_statement "local_40[0] = param_4;" (assignment_expression "local_40[0] = param_4" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "param_4")) (; ";")) (do_statement "do {\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    } while (0 < lVar3);" (do "do") (compound_statement "{\n      while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }\n      param_1 = lVar2 + 0x50;\n      lVar3 = (lVar3 - lVar4) + -1;\n    }" ({ "{") (while_statement "while( true ) {\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        lVar4 = lVar3 >> 1;\n        lVar2 = lVar4 * 0x50 + param_1;\n        cVar1 = FUN_002572a0(local_40,param_3,lVar2);\n        if (cVar1 == '\0') break;\n        lVar3 = lVar4;\n        if (lVar4 < 1) {\n          return param_1;\n        }\n      }" ({ "{") (expression_statement "lVar4 = lVar3 >> 1;" (assignment_expression "lVar4 = lVar3 >> 1" (identifier "lVar4") (= "=") (binary_expression "lVar3 >> 1" (identifier "lVar3") (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "lVar2 = lVar4 * 0x50 + param_1;" (assignment_expression "lVar2 = lVar4 * 0x50 + param_1" (identifier "lVar2") (= "=") (binary_expression "lVar4 * 0x50 + param_1" (binary_expression "lVar4 * 0x50" (identifier "lVar4") (* "*") (number_literal "0x50")) (+ "+") (identifier "param_1"))) (; ";")) (expression_statement "cVar1 = FUN_002572a0(local_40,param_3,lVar2);" (assignment_expression "cVar1 = FUN_002572a0(local_40,param_3,lVar2)" (identifier "cVar1") (= "=") (call_expression "FUN_002572a0(local_40,param_3,lVar2)" (identifier "FUN_002572a0") (argument_list "(local_40,param_3,lVar2)" (( "(") (identifier "local_40") (, ",") (identifier "param_3") (, ",") (identifier "lVar2") () ")")))) (; ";")) (if_statement "if (cVar1 == '\0') break;" (if "if") (parenthesized_expression "(cVar1 == '\0')" (( "(") (binary_expression "cVar1 == '\0'" (identifier "cVar1") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "lVar3 = lVar4;" (assignment_expression "lVar3 = lVar4" (identifier "lVar3") (= "=") (identifier "lVar4")) (; ";")) (if_statement "if (lVar4 < 1) {\n          return param_1;\n        }" (if "if") (parenthesized_expression "(lVar4 < 1)" (( "(") (binary_expression "lVar4 < 1" (identifier "lVar4") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n          return param_1;\n        }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (} "}"))) (expression_statement "param_1 = lVar2 + 0x50;" (assignment_expression "param_1 = lVar2 + 0x50" (identifier "param_1") (= "=") (binary_expression "lVar2 + 0x50" (identifier "lVar2") (+ "+") (number_literal "0x50"))) (; ";")) (expression_statement "lVar3 = (lVar3 - lVar4) + -1;" (assignment_expression "lVar3 = (lVar3 - lVar4) + -1" (identifier "lVar3") (= "=") (binary_expression "(lVar3 - lVar4) + -1" (parenthesized_expression "(lVar3 - lVar4)" (( "(") (binary_expression "lVar3 - lVar4" (identifier "lVar3") (- "-") (identifier "lVar4")) () ")")) (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(0 < lVar3)" (( "(") (binary_expression "0 < lVar3" (number_literal "0") (< "<") (identifier "lVar3")) () ")")) (; ";")) (} "}"))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name: __upper_bound<__gnu_cxx::__normal_iterator<gold::Input_section_info*,
   std::vector<gold::Input_section_info> >, gold::Input_section_info,
   __gnu_cxx::__ops::_Val_comp_iter<gold::Input_section_sorter> > */

__normal_iterator<gold::var_4*,_std::vector<gold::var_4,_std::allocator<gold::var_4>var_5>var_5>
 std::
 __upper_bound<__gnu_cxx::__normal_iterator<gold::var_4*,_std::vector<gold::var_4>var_5>,_gold::var_4,___gnu_cxx::__ops::_Val_comp_iter<gold::type_1>var_5>
           (__normal_iterator<gold::var_4*,_std::vector<gold::var_4,_std::allocator<gold::var_4>var_5>var_5>
            __first,__normal_iterator<gold::var_4*,_std::vector<gold::var_4,_std::allocator<gold::var_4>var_5>var_5>
                    __last,var_4 *__val,
           _Val_comp_iter<gold::type_1> __comp)

{
  bool bVar1;
  long var_1;
  long var_3;
  type_1 local_40 [2];
  
  if (0 < (long)__last._M_current - (long)__first._M_current) {
    var_1 = ((long)__last._M_current - (long)__first._M_current >> 4) * -0x3333333333333333;
    local_40[0] = __comp._M_comp;
    do {
      while( true ) {
        var_3 = var_1 >> 1;
        bVar1 = gold::Input_section_sorter::var_2()(local_40,__val,__first._M_current + var_3);
        if (!bVar1) break;
        var_1 = var_3;
        if (var_3 < 1) {
          return (__normal_iterator<gold::var_4*,_std::vector<gold::var_4,_std::allocator<gold::var_4>var_5>var_5>
                  )__first._M_current;
        }
      }
      __first._M_current = __first._M_current + var_3 + 1;
      var_1 = (var_1 - var_3) + -1;
    } while (0 < var_1);
  }
  return (__normal_iterator<gold::var_4*,_std::vector<gold::var_4,_std::allocator<gold::var_4>var_5>var_5>
          )__first._M_current;
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (binary_expression left: (identifier) right: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier)))))) (return_statement (identifier)))))

long MASKED(long param_1,long param_2,undefined8 param_3,undefined8 param_4)

{
  char cVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  undefined8 local_40 [2];
  
  if (0 < param_2 - param_1) {
    lVar3 = (param_2 - param_1 >> 4) * -0x3333333333333333;
    local_40[0] = param_4;
    do {
      while( true ) {
        lVar4 = lVar3 >> 1;
        lVar2 = lVar4 * 0x50 + param_1;
        cVar1 = FUN_002572a0(local_40,param_3,lVar2);
        if (cVar1 == '\0') break;
        lVar3 = lVar4;
        if (lVar4 < 1) {
          return param_1;
        }
      }
      param_1 = lVar2 + 0x50;
      lVar3 = (lVar3 - lVar4) + -1;
    } while (0 < lVar3);
  }
  return param_1;
}

