
/* std::string::replace(__normal_iterator<char const*, std::string >, __normal_iterator<char const*,
   std::string >, char const*) */

void __thiscall std::string::replace(string *this,long param_2,long param_3,char *param_4)

{
  size_t sVar1;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  
  sVar1 = strlen(param_4);
  uVar4 = param_2 - *(long *)this;
  uVar3 = *(ulong *)(this + 8) - uVar4;
  uVar2 = param_3 - param_2;
  if (uVar3 < (ulong)(param_3 - param_2)) {
    uVar2 = uVar3;
  }
  if (uVar4 <= *(ulong *)(this + 8)) {
    _M_replace(this,uVar4,uVar2,param_4,sVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  __throw_out_of_range_fmt
            ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",uVar4)
  ;
}



void FUN_002e2d30(long *param_1,long param_2,long param_3,char *param_4)

{
  size_t sVar1;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  
  sVar1 = strlen(param_4);
  uVar4 = param_2 - *param_1;
  uVar3 = param_1[1] - uVar4;
  uVar2 = param_3 - param_2;
  if (uVar3 < (ulong)(param_3 - param_2)) {
    uVar2 = uVar3;
  }
  if (uVar4 <= (ulong)param_1[1]) {
    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",
               uVar4);
}


PUSH R13
MOV R13,RCX
PUSH R12
MOV R12,RSI
PUSH RBP
MOV RBP,RDI
MOV RDI,RCX
PUSH RBX
MOV RBX,RDX
SUB RBX,R12
SUB RSP,0x8
CALL 0x00147490
MOV RCX,qword ptr [RBP + 0x8]
MOV RDI,R12
SUB RDI,qword ptr [RBP]
MOV RDX,RBX
MOV RSI,RCX
SUB RSI,RDI
CMP RBX,RSI
CMOVA RDX,RSI
CMP RDI,RCX
JA 0x002e2d8c
ADD RSP,0x8
MOV RCX,R13
MOV RSI,RDI
POP RBX
MOV RDI,RBP
MOV R8,RAX
POP RBP
POP R12
POP R13
JMP 0x002e2590
MOV RDX,RDI
LEA RSI,[0x391166]
XOR EAX,EAX
LEA RDI,[0x376b80]
CALL 0x00319610
(translation_unit "void FUN_002e2d30(long *param_1,long param_2,long param_3,char *param_4)\n\n{\n  size_t sVar1;\n  ulong uVar2;\n  ulong uVar3;\n  ulong uVar4;\n  \n  sVar1 = strlen(param_4);\n  uVar4 = param_2 - *param_1;\n  uVar3 = param_1[1] - uVar4;\n  uVar2 = param_3 - param_2;\n  if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }\n  if (uVar4 <= (ulong)param_1[1]) {\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4);\n}\n\n" (function_definition "void FUN_002e2d30(long *param_1,long param_2,long param_3,char *param_4)\n\n{\n  size_t sVar1;\n  ulong uVar2;\n  ulong uVar3;\n  ulong uVar4;\n  \n  sVar1 = strlen(param_4);\n  uVar4 = param_2 - *param_1;\n  uVar3 = param_1[1] - uVar4;\n  uVar2 = param_3 - param_2;\n  if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }\n  if (uVar4 <= (ulong)param_1[1]) {\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4);\n}" primitive_type (function_declarator "FUN_002e2d30(long *param_1,long param_2,long param_3,char *param_4)" identifier (parameter_list "(long *param_1,long param_2,long param_3,char *param_4)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "char *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  size_t sVar1;\n  ulong uVar2;\n  ulong uVar3;\n  ulong uVar4;\n  \n  sVar1 = strlen(param_4);\n  uVar4 = param_2 - *param_1;\n  uVar3 = param_1[1] - uVar4;\n  uVar2 = param_3 - param_2;\n  if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }\n  if (uVar4 <= (ulong)param_1[1]) {\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4);\n}" { (declaration "size_t sVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (expression_statement "sVar1 = strlen(param_4);" (assignment_expression "sVar1 = strlen(param_4)" identifier = (call_expression "strlen(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (expression_statement "uVar4 = param_2 - *param_1;" (assignment_expression "uVar4 = param_2 - *param_1" identifier = (binary_expression "param_2 - *param_1" identifier - (pointer_expression "*param_1" * identifier))) ;) (expression_statement "uVar3 = param_1[1] - uVar4;" (assignment_expression "uVar3 = param_1[1] - uVar4" identifier = (binary_expression "param_1[1] - uVar4" (subscript_expression "param_1[1]" identifier [ number_literal ]) - identifier)) ;) (expression_statement "uVar2 = param_3 - param_2;" (assignment_expression "uVar2 = param_3 - param_2" identifier = (binary_expression "param_3 - param_2" identifier - identifier)) ;) (if_statement "if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }" if (parenthesized_expression "(uVar3 < (ulong)(param_3 - param_2))" ( (binary_expression "uVar3 < (ulong)(param_3 - param_2)" identifier < (call_expression "(ulong)(param_3 - param_2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_3 - param_2)" ( (binary_expression "param_3 - param_2" identifier - identifier) )))) )) (compound_statement "{\n    uVar2 = uVar3;\n  }" { (expression_statement "uVar2 = uVar3;" (assignment_expression "uVar2 = uVar3" identifier = identifier) ;) })) (if_statement "if (uVar4 <= (ulong)param_1[1]) {\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }" if (parenthesized_expression "(uVar4 <= (ulong)param_1[1])" ( (binary_expression "uVar4 <= (ulong)param_1[1]" identifier <= (cast_expression "(ulong)param_1[1]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) )) (compound_statement "{\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }" { (expression_statement "FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);" (call_expression "FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1)" identifier (argument_list "(param_1,uVar4,uVar2,param_4,sVar1)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) comment (expression_statement "FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4);" (call_expression "FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4)" identifier (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4)" ( (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" " string_content ") , (string_literal ""basic_string::replace"" " string_content ") , identifier ))) ;) })))
(translation_unit "/* std::string::replace(__normal_iterator<char const*, std::string >, __normal_iterator<char const*,\n   std::string >, char const*) */\n\nvoid __thiscall std::string::replace(string *this,long param_2,long param_3,char *param_4)\n\n{\n  size_t sVar1;\n  ulong uVar2;\n  ulong uVar3;\n  ulong uVar4;\n  \n  sVar1 = strlen(param_4);\n  uVar4 = param_2 - *(long *)this;\n  uVar3 = *(ulong *)(this + 8) - uVar4;\n  uVar2 = param_3 - param_2;\n  if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }\n  if (uVar4 <= *(ulong *)(this + 8)) {\n    _M_replace(this,uVar4,uVar2,param_4,sVar1);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  __throw_out_of_range_fmt\n            ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",uVar4)\n  ;\n}\n\n" comment (function_definition "void __thiscall std::string::replace(string *this,long param_2,long param_3,char *param_4)\n\n{\n  size_t sVar1;\n  ulong uVar2;\n  ulong uVar3;\n  ulong uVar4;\n  \n  sVar1 = strlen(param_4);\n  uVar4 = param_2 - *(long *)this;\n  uVar3 = *(ulong *)(this + 8) - uVar4;\n  uVar2 = param_3 - param_2;\n  if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }\n  if (uVar4 <= *(ulong *)(this + 8)) {\n    _M_replace(this,uVar4,uVar2,param_4,sVar1);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  __throw_out_of_range_fmt\n            ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",uVar4)\n  ;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::string::" identifier : : identifier : :) (function_declarator "replace(string *this,long param_2,long param_3,char *param_4)" identifier (parameter_list "(string *this,long param_2,long param_3,char *param_4)" ( (parameter_declaration "string *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "char *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  size_t sVar1;\n  ulong uVar2;\n  ulong uVar3;\n  ulong uVar4;\n  \n  sVar1 = strlen(param_4);\n  uVar4 = param_2 - *(long *)this;\n  uVar3 = *(ulong *)(this + 8) - uVar4;\n  uVar2 = param_3 - param_2;\n  if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }\n  if (uVar4 <= *(ulong *)(this + 8)) {\n    _M_replace(this,uVar4,uVar2,param_4,sVar1);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  __throw_out_of_range_fmt\n            ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",uVar4)\n  ;\n}" { (declaration "size_t sVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (expression_statement "sVar1 = strlen(param_4);" (assignment_expression "sVar1 = strlen(param_4)" identifier = (call_expression "strlen(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (expression_statement "uVar4 = param_2 - *(long *)this;" (assignment_expression "uVar4 = param_2 - *(long *)this" identifier = (binary_expression "param_2 - *(long *)this" identifier - (pointer_expression "*(long *)this" * (cast_expression "(long *)this" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)))) ;) (expression_statement "uVar3 = *(ulong *)(this + 8) - uVar4;" (assignment_expression "uVar3 = *(ulong *)(this + 8) - uVar4" identifier = (binary_expression "*(ulong *)(this + 8) - uVar4" (pointer_expression "*(ulong *)(this + 8)" * (cast_expression "(ulong *)(this + 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) - identifier)) ;) (expression_statement "uVar2 = param_3 - param_2;" (assignment_expression "uVar2 = param_3 - param_2" identifier = (binary_expression "param_3 - param_2" identifier - identifier)) ;) (if_statement "if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }" if (parenthesized_expression "(uVar3 < (ulong)(param_3 - param_2))" ( (binary_expression "uVar3 < (ulong)(param_3 - param_2)" identifier < (call_expression "(ulong)(param_3 - param_2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_3 - param_2)" ( (binary_expression "param_3 - param_2" identifier - identifier) )))) )) (compound_statement "{\n    uVar2 = uVar3;\n  }" { (expression_statement "uVar2 = uVar3;" (assignment_expression "uVar2 = uVar3" identifier = identifier) ;) })) (if_statement "if (uVar4 <= *(ulong *)(this + 8)) {\n    _M_replace(this,uVar4,uVar2,param_4,sVar1);\n    return;\n  }" if (parenthesized_expression "(uVar4 <= *(ulong *)(this + 8))" ( (binary_expression "uVar4 <= *(ulong *)(this + 8)" identifier <= (pointer_expression "*(ulong *)(this + 8)" * (cast_expression "(ulong *)(this + 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) ))))) )) (compound_statement "{\n    _M_replace(this,uVar4,uVar2,param_4,sVar1);\n    return;\n  }" { (expression_statement "_M_replace(this,uVar4,uVar2,param_4,sVar1);" (call_expression "_M_replace(this,uVar4,uVar2,param_4,sVar1)" identifier (argument_list "(this,uVar4,uVar2,param_4,sVar1)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) comment (expression_statement "__throw_out_of_range_fmt\n            ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",uVar4)\n  ;" (call_expression "__throw_out_of_range_fmt\n            ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",uVar4)" identifier (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",uVar4)" ( (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" " string_content ") , (string_literal ""basic_string::replace"" " string_content ") , identifier ))) ;) })))
(translation_unit "void FUN_002e2d30(long *param_1,long param_2,long param_3,char *param_4)\n\n{\n  size_t sVar1;\n  ulong uVar2;\n  ulong uVar3;\n  ulong uVar4;\n  \n  sVar1 = strlen(param_4);\n  uVar4 = param_2 - *param_1;\n  uVar3 = param_1[1] - uVar4;\n  uVar2 = param_3 - param_2;\n  if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }\n  if (uVar4 <= (ulong)param_1[1]) {\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }\n                    \n  FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4);\n}\n\n" (function_definition "void FUN_002e2d30(long *param_1,long param_2,long param_3,char *param_4)\n\n{\n  size_t sVar1;\n  ulong uVar2;\n  ulong uVar3;\n  ulong uVar4;\n  \n  sVar1 = strlen(param_4);\n  uVar4 = param_2 - *param_1;\n  uVar3 = param_1[1] - uVar4;\n  uVar2 = param_3 - param_2;\n  if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }\n  if (uVar4 <= (ulong)param_1[1]) {\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }\n                    \n  FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4);\n}" primitive_type (function_declarator "FUN_002e2d30(long *param_1,long param_2,long param_3,char *param_4)" identifier (parameter_list "(long *param_1,long param_2,long param_3,char *param_4)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "char *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  size_t sVar1;\n  ulong uVar2;\n  ulong uVar3;\n  ulong uVar4;\n  \n  sVar1 = strlen(param_4);\n  uVar4 = param_2 - *param_1;\n  uVar3 = param_1[1] - uVar4;\n  uVar2 = param_3 - param_2;\n  if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }\n  if (uVar4 <= (ulong)param_1[1]) {\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }\n                    \n  FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4);\n}" { (declaration "size_t sVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (expression_statement "sVar1 = strlen(param_4);" (assignment_expression "sVar1 = strlen(param_4)" identifier = (call_expression "strlen(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (expression_statement "uVar4 = param_2 - *param_1;" (assignment_expression "uVar4 = param_2 - *param_1" identifier = (binary_expression "param_2 - *param_1" identifier - (pointer_expression "*param_1" * identifier))) ;) (expression_statement "uVar3 = param_1[1] - uVar4;" (assignment_expression "uVar3 = param_1[1] - uVar4" identifier = (binary_expression "param_1[1] - uVar4" (subscript_expression "param_1[1]" identifier [ number_literal ]) - identifier)) ;) (expression_statement "uVar2 = param_3 - param_2;" (assignment_expression "uVar2 = param_3 - param_2" identifier = (binary_expression "param_3 - param_2" identifier - identifier)) ;) (if_statement "if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }" if (parenthesized_expression "(uVar3 < (ulong)(param_3 - param_2))" ( (binary_expression "uVar3 < (ulong)(param_3 - param_2)" identifier < (call_expression "(ulong)(param_3 - param_2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_3 - param_2)" ( (binary_expression "param_3 - param_2" identifier - identifier) )))) )) (compound_statement "{\n    uVar2 = uVar3;\n  }" { (expression_statement "uVar2 = uVar3;" (assignment_expression "uVar2 = uVar3" identifier = identifier) ;) })) (if_statement "if (uVar4 <= (ulong)param_1[1]) {\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }" if (parenthesized_expression "(uVar4 <= (ulong)param_1[1])" ( (binary_expression "uVar4 <= (ulong)param_1[1]" identifier <= (cast_expression "(ulong)param_1[1]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) )) (compound_statement "{\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }" { (expression_statement "FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);" (call_expression "FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1)" identifier (argument_list "(param_1,uVar4,uVar2,param_4,sVar1)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4);" (call_expression "FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4)" identifier (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4)" ( (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" " string_content ") , (string_literal ""basic_string::replace"" " string_content ") , identifier ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - IDENT) )))) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , IDENT ))) ;) })))
(function_definition "void FUN_002e2d30(long *param_1,long param_2,long param_3,char *param_4)\n\n{\n  size_t sVar1;\n  ulong uVar2;\n  ulong uVar3;\n  ulong uVar4;\n  \n  sVar1 = strlen(param_4);\n  uVar4 = param_2 - *param_1;\n  uVar3 = param_1[1] - uVar4;\n  uVar2 = param_3 - param_2;\n  if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }\n  if (uVar4 <= (ulong)param_1[1]) {\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }\n                    \n  FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4);\n}" (primitive_type "void") (function_declarator "FUN_002e2d30(long *param_1,long param_2,long param_3,char *param_4)" (identifier "FUN_002e2d30") (parameter_list "(long *param_1,long param_2,long param_3,char *param_4)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "char *param_4" (primitive_type "char") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  size_t sVar1;\n  ulong uVar2;\n  ulong uVar3;\n  ulong uVar4;\n  \n  sVar1 = strlen(param_4);\n  uVar4 = param_2 - *param_1;\n  uVar3 = param_1[1] - uVar4;\n  uVar2 = param_3 - param_2;\n  if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }\n  if (uVar4 <= (ulong)param_1[1]) {\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }\n                    \n  FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4);\n}" ({ "{") (declaration "size_t sVar1;" (primitive_type "size_t") (identifier "sVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "ulong uVar3;" (type_identifier "ulong") (identifier "uVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (expression_statement "sVar1 = strlen(param_4);" (assignment_expression "sVar1 = strlen(param_4)" (identifier "sVar1") (= "=") (call_expression "strlen(param_4)" (identifier "strlen") (argument_list "(param_4)" (( "(") (identifier "param_4") () ")")))) (; ";")) (expression_statement "uVar4 = param_2 - *param_1;" (assignment_expression "uVar4 = param_2 - *param_1" (identifier "uVar4") (= "=") (binary_expression "param_2 - *param_1" (identifier "param_2") (- "-") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "uVar3 = param_1[1] - uVar4;" (assignment_expression "uVar3 = param_1[1] - uVar4" (identifier "uVar3") (= "=") (binary_expression "param_1[1] - uVar4" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (- "-") (identifier "uVar4"))) (; ";")) (expression_statement "uVar2 = param_3 - param_2;" (assignment_expression "uVar2 = param_3 - param_2" (identifier "uVar2") (= "=") (binary_expression "param_3 - param_2" (identifier "param_3") (- "-") (identifier "param_2"))) (; ";")) (if_statement "if (uVar3 < (ulong)(param_3 - param_2)) {\n    uVar2 = uVar3;\n  }" (if "if") (parenthesized_expression "(uVar3 < (ulong)(param_3 - param_2))" (( "(") (binary_expression "uVar3 < (ulong)(param_3 - param_2)" (identifier "uVar3") (< "<") (call_expression "(ulong)(param_3 - param_2)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_3 - param_2)" (( "(") (binary_expression "param_3 - param_2" (identifier "param_3") (- "-") (identifier "param_2")) () ")")))) () ")")) (compound_statement "{\n    uVar2 = uVar3;\n  }" ({ "{") (expression_statement "uVar2 = uVar3;" (assignment_expression "uVar2 = uVar3" (identifier "uVar2") (= "=") (identifier "uVar3")) (; ";")) (} "}"))) (if_statement "if (uVar4 <= (ulong)param_1[1]) {\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }" (if "if") (parenthesized_expression "(uVar4 <= (ulong)param_1[1])" (( "(") (binary_expression "uVar4 <= (ulong)param_1[1]" (identifier "uVar4") (<= "<=") (cast_expression "(ulong)param_1[1]" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")))) () ")")) (compound_statement "{\n    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);\n    return;\n  }" ({ "{") (expression_statement "FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);" (call_expression "FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1)" (identifier "FUN_002e2590") (argument_list "(param_1,uVar4,uVar2,param_4,sVar1)" (( "(") (identifier "param_1") (, ",") (identifier "uVar4") (, ",") (identifier "uVar2") (, ",") (identifier "param_4") (, ",") (identifier "sVar1") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4);" (call_expression "FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4)" (identifier "FUN_00319610") (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",\n               uVar4)" (( "(") (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" (" """) (string_content "%s: __pos (which is %zu) > this->size() (which is %zu)") (" """)) (, ",") (string_literal ""basic_string::replace"" (" """) (string_content "basic_string::replace") (" """)) (, ",") (identifier "uVar4") () ")"))) (; ";")) (} "}")))

/* std::string::replace(__normal_iterator<char const*, std::string >, __normal_iterator<char const*,
   std::string >, char const*) */

void __thiscall std::type_1::function_1(type_1 *var_3,long var_2,long var_5,char *param_4)

{
  size_t sVar1;
  type_2 uVar2;
  type_2 var_6;
  type_2 var_4;
  
  sVar1 = var_1(param_4);
  var_4 = var_2 - *(long *)var_3;
  var_6 = *(type_2 *)(var_3 + 8) - var_4;
  uVar2 = var_5 - var_2;
  if (var_6 < (type_2)(var_5 - var_2)) {
    uVar2 = var_6;
  }
  if (var_4 <= *(type_2 *)(var_3 + 8)) {
    var_7(var_3,var_4,uVar2,param_4,sVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  var_8
            ("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",var_4)
  ;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier)))) (return_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (identifier)))))))

void MASKED(long *param_1,long param_2,long param_3,char *param_4)

{
  size_t sVar1;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  
  sVar1 = strlen(param_4);
  uVar4 = param_2 - *param_1;
  uVar3 = param_1[1] - uVar4;
  uVar2 = param_3 - param_2;
  if (uVar3 < (ulong)(param_3 - param_2)) {
    uVar2 = uVar3;
  }
  if (uVar4 <= (ulong)param_1[1]) {
    FUN_002e2590(param_1,uVar4,uVar2,param_4,sVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_00319610("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",
               uVar4);
}

