
/* std::(anonymous namespace)::ucs4_out(std::(anonymous namespace)::range<char32_t const, true>&,
   std::(anonymous namespace)::range<char, true>&, unsigned long, std::codecvt_mode) [clone
   .part.21] */

undefined4 __regparm3
std::(anonymous_namespace)::ucs4_out(int *param_1,range *param_2,wchar32 param_3)

{
  int iVar1;
  wchar32 wVar2;
  int iVar3;
  char cVar4;
  
  if ((wchar32 *)param_1[1] != (wchar32 *)*param_1) {
    wVar2 = *(wchar32 *)*param_1;
    while( true ) {
      if ((uint)param_3 < (uint)wVar2) {
        return 2;
      }
      cVar4 = write_utf8_code_point(param_2,wVar2);
      if (cVar4 == '\0') {
        return 1;
      }
      iVar3 = *param_1;
      iVar1 = iVar3 + 4;
      *param_1 = iVar1;
      if (param_1[1] == iVar1) break;
      wVar2 = *(wchar32 *)(iVar3 + 4);
    }
  }
  return 0;
}



undefined4 __regparm3 FUN_002867b0(int *param_1,undefined4 param_2,uint param_3)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  char cVar4;
  
  if ((uint *)param_1[1] != (uint *)*param_1) {
    uVar2 = *(uint *)*param_1;
    while( true ) {
      if (param_3 < uVar2) {
        return 2;
      }
      cVar4 = FUN_00286390();
      if (cVar4 == '\0') {
        return 1;
      }
      iVar3 = *param_1;
      iVar1 = iVar3 + 4;
      *param_1 = iVar1;
      if (param_1[1] == iVar1) break;
      uVar2 = *(uint *)(iVar3 + 4);
    }
  }
  return 0;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
MOV EBP,dword ptr [EAX]
CMP dword ptr [EAX + 0x4],EBP
JZ 0x00286800
MOV EDI,EDX
MOV EDX,dword ptr [EBP]
MOV ESI,ECX
MOV EBX,EAX
CMP ECX,EDX
JNC 0x002867e3
JMP 0x00286810
MOV EDX,dword ptr [EBX]
LEA EAX,[EDX + 0x4]
MOV dword ptr [EBX],EAX
CMP dword ptr [EBX + 0x4],EAX
JZ 0x00286800
MOV EDX,dword ptr [EDX + 0x4]
CMP EDX,ESI
JA 0x00286810
MOV EAX,EDI
CALL 0x00286390
TEST AL,AL
JNZ 0x002867d0
POP EBX
MOV EAX,0x1
POP ESI
POP EDI
POP EBP
RET
POP EBX
XOR EAX,EAX
POP ESI
POP EDI
POP EBP
RET
POP EBX
MOV EAX,0x2
POP ESI
POP EDI
POP EBP
RET
(translation_unit "undefined4 __regparm3 FUN_002867b0(int *param_1,undefined4 param_2,uint param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  char cVar4;\n  \n  if ((uint *)param_1[1] != (uint *)*param_1) {\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }\n  return 0;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_002867b0(int *param_1,undefined4 param_2,uint param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  char cVar4;\n  \n  if ((uint *)param_1[1] != (uint *)*param_1) {\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }\n  return 0;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_002867b0(int *param_1,undefined4 param_2,uint param_3)" identifier (parameter_list "(int *param_1,undefined4 param_2,uint param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  char cVar4;\n  \n  if ((uint *)param_1[1] != (uint *)*param_1) {\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "char cVar4;" primitive_type identifier ;) (if_statement "if ((uint *)param_1[1] != (uint *)*param_1) {\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }" if (parenthesized_expression "((uint *)param_1[1] != (uint *)*param_1)" ( (binary_expression "(uint *)param_1[1] != (uint *)*param_1" (cast_expression "(uint *)param_1[1]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) != (cast_expression "(uint *)*param_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) )) (compound_statement "{\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }" { (expression_statement "uVar2 = *(uint *)*param_1;" (assignment_expression "uVar2 = *(uint *)*param_1" identifier = (pointer_expression "*(uint *)*param_1" * (cast_expression "(uint *)*param_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)))) ;) (while_statement "while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }" { (if_statement "if (param_3 < uVar2) {\n        return 2;\n      }" if (parenthesized_expression "(param_3 < uVar2)" ( (binary_expression "param_3 < uVar2" identifier < identifier) )) (compound_statement "{\n        return 2;\n      }" { (return_statement "return 2;" return number_literal ;) })) (expression_statement "cVar4 = FUN_00286390();" (assignment_expression "cVar4 = FUN_00286390()" identifier = (call_expression "FUN_00286390()" identifier (argument_list "()" ( )))) ;) (if_statement "if (cVar4 == '\0') {\n        return 1;\n      }" if (parenthesized_expression "(cVar4 == '\0')" ( (binary_expression "cVar4 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar3 = *param_1;" (assignment_expression "iVar3 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar1 = iVar3 + 4;" (assignment_expression "iVar1 = iVar3 + 4" identifier = (binary_expression "iVar3 + 4" identifier + number_literal)) ;) (expression_statement "*param_1 = iVar1;" (assignment_expression "*param_1 = iVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (if_statement "if (param_1[1] == iVar1) break;" if (parenthesized_expression "(param_1[1] == iVar1)" ( (binary_expression "param_1[1] == iVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar2 = *(uint *)(iVar3 + 4);" (assignment_expression "uVar2 = *(uint *)(iVar3 + 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 4)" * (cast_expression "(uint *)(iVar3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) ))))) ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* std::(anonymous namespace)::ucs4_out(std::(anonymous namespace)::range<char32_t const, true>&,\n   std::(anonymous namespace)::range<char, true>&, unsigned long, std::codecvt_mode) [clone\n   .part.21] */\n\nundefined4 __regparm3\nstd::(anonymous_namespace)::ucs4_out(int *param_1,range *param_2,wchar32 param_3)\n\n{\n  int iVar1;\n  wchar32 wVar2;\n  int iVar3;\n  char cVar4;\n  \n  if ((wchar32 *)param_1[1] != (wchar32 *)*param_1) {\n    wVar2 = *(wchar32 *)*param_1;\n    while( true ) {\n      if ((uint)param_3 < (uint)wVar2) {\n        return 2;\n      }\n      cVar4 = write_utf8_code_point(param_2,wVar2);\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      wVar2 = *(wchar32 *)(iVar3 + 4);\n    }\n  }\n  return 0;\n}\n\n" comment (declaration "undefined4 __regparm3" type_identifier identifier ;) (labeled_statement "std::(anonymous_namespace)::ucs4_out(int *param_1,range *param_2,wchar32 param_3)" statement_identifier (ERROR "::(anonymous_namespace):" : : (parenthesized_expression "(anonymous_namespace)" ( identifier )) :) : (expression_statement "ucs4_out(int *param_1,range *param_2,wchar32 param_3)" (call_expression "ucs4_out(int *param_1,range *param_2,wchar32 param_3)" identifier (argument_list "(int *param_1,range *param_2,wchar32 param_3)" ( (binary_expression "int *param_1" identifier * identifier) , (binary_expression "range *param_2" identifier * identifier) , identifier (ERROR "param_3" identifier) ))) ;)) (compound_statement "{\n  int iVar1;\n  wchar32 wVar2;\n  int iVar3;\n  char cVar4;\n  \n  if ((wchar32 *)param_1[1] != (wchar32 *)*param_1) {\n    wVar2 = *(wchar32 *)*param_1;\n    while( true ) {\n      if ((uint)param_3 < (uint)wVar2) {\n        return 2;\n      }\n      cVar4 = write_utf8_code_point(param_2,wVar2);\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      wVar2 = *(wchar32 *)(iVar3 + 4);\n    }\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "wchar32 wVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "char cVar4;" primitive_type identifier ;) (if_statement "if ((wchar32 *)param_1[1] != (wchar32 *)*param_1) {\n    wVar2 = *(wchar32 *)*param_1;\n    while( true ) {\n      if ((uint)param_3 < (uint)wVar2) {\n        return 2;\n      }\n      cVar4 = write_utf8_code_point(param_2,wVar2);\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      wVar2 = *(wchar32 *)(iVar3 + 4);\n    }\n  }" if (parenthesized_expression "((wchar32 *)param_1[1] != (wchar32 *)*param_1)" ( (binary_expression "(wchar32 *)param_1[1] != (wchar32 *)*param_1" (cast_expression "(wchar32 *)param_1[1]" ( (type_descriptor "wchar32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) != (cast_expression "(wchar32 *)*param_1" ( (type_descriptor "wchar32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) )) (compound_statement "{\n    wVar2 = *(wchar32 *)*param_1;\n    while( true ) {\n      if ((uint)param_3 < (uint)wVar2) {\n        return 2;\n      }\n      cVar4 = write_utf8_code_point(param_2,wVar2);\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      wVar2 = *(wchar32 *)(iVar3 + 4);\n    }\n  }" { (expression_statement "wVar2 = *(wchar32 *)*param_1;" (assignment_expression "wVar2 = *(wchar32 *)*param_1" identifier = (pointer_expression "*(wchar32 *)*param_1" * (cast_expression "(wchar32 *)*param_1" ( (type_descriptor "wchar32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)))) ;) (while_statement "while( true ) {\n      if ((uint)param_3 < (uint)wVar2) {\n        return 2;\n      }\n      cVar4 = write_utf8_code_point(param_2,wVar2);\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      wVar2 = *(wchar32 *)(iVar3 + 4);\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if ((uint)param_3 < (uint)wVar2) {\n        return 2;\n      }\n      cVar4 = write_utf8_code_point(param_2,wVar2);\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      wVar2 = *(wchar32 *)(iVar3 + 4);\n    }" { (if_statement "if ((uint)param_3 < (uint)wVar2) {\n        return 2;\n      }" if (parenthesized_expression "((uint)param_3 < (uint)wVar2)" ( (binary_expression "(uint)param_3 < (uint)wVar2" (cast_expression "(uint)param_3" ( (type_descriptor "uint" type_identifier) ) identifier) < (cast_expression "(uint)wVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n        return 2;\n      }" { (return_statement "return 2;" return number_literal ;) })) (expression_statement "cVar4 = write_utf8_code_point(param_2,wVar2);" (assignment_expression "cVar4 = write_utf8_code_point(param_2,wVar2)" identifier = (call_expression "write_utf8_code_point(param_2,wVar2)" identifier (argument_list "(param_2,wVar2)" ( identifier , identifier )))) ;) (if_statement "if (cVar4 == '\0') {\n        return 1;\n      }" if (parenthesized_expression "(cVar4 == '\0')" ( (binary_expression "cVar4 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar3 = *param_1;" (assignment_expression "iVar3 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar1 = iVar3 + 4;" (assignment_expression "iVar1 = iVar3 + 4" identifier = (binary_expression "iVar3 + 4" identifier + number_literal)) ;) (expression_statement "*param_1 = iVar1;" (assignment_expression "*param_1 = iVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (if_statement "if (param_1[1] == iVar1) break;" if (parenthesized_expression "(param_1[1] == iVar1)" ( (binary_expression "param_1[1] == iVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) == identifier) )) (break_statement "break;" break ;)) (expression_statement "wVar2 = *(wchar32 *)(iVar3 + 4);" (assignment_expression "wVar2 = *(wchar32 *)(iVar3 + 4)" identifier = (pointer_expression "*(wchar32 *)(iVar3 + 4)" * (cast_expression "(wchar32 *)(iVar3 + 4)" ( (type_descriptor "wchar32 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) ))))) ;) })) })) (return_statement "return 0;" return number_literal ;) }))
(translation_unit "undefined4 __regparm3 FUN_002867b0(int *param_1,undefined4 param_2,uint param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  char cVar4;\n  \n  if ((uint *)param_1[1] != (uint *)*param_1) {\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }\n  return 0;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_002867b0(int *param_1,undefined4 param_2,uint param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  char cVar4;\n  \n  if ((uint *)param_1[1] != (uint *)*param_1) {\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }\n  return 0;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_002867b0(int *param_1,undefined4 param_2,uint param_3)" identifier (parameter_list "(int *param_1,undefined4 param_2,uint param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  char cVar4;\n  \n  if ((uint *)param_1[1] != (uint *)*param_1) {\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "char cVar4;" primitive_type identifier ;) (if_statement "if ((uint *)param_1[1] != (uint *)*param_1) {\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }" if (parenthesized_expression "((uint *)param_1[1] != (uint *)*param_1)" ( (binary_expression "(uint *)param_1[1] != (uint *)*param_1" (cast_expression "(uint *)param_1[1]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) != (cast_expression "(uint *)*param_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) )) (compound_statement "{\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }" { (expression_statement "uVar2 = *(uint *)*param_1;" (assignment_expression "uVar2 = *(uint *)*param_1" identifier = (pointer_expression "*(uint *)*param_1" * (cast_expression "(uint *)*param_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)))) ;) (while_statement "while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }" { (if_statement "if (param_3 < uVar2) {\n        return 2;\n      }" if (parenthesized_expression "(param_3 < uVar2)" ( (binary_expression "param_3 < uVar2" identifier < identifier) )) (compound_statement "{\n        return 2;\n      }" { (return_statement "return 2;" return number_literal ;) })) (expression_statement "cVar4 = FUN_00286390();" (assignment_expression "cVar4 = FUN_00286390()" identifier = (call_expression "FUN_00286390()" identifier (argument_list "()" ( )))) ;) (if_statement "if (cVar4 == '\0') {\n        return 1;\n      }" if (parenthesized_expression "(cVar4 == '\0')" ( (binary_expression "cVar4 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar3 = *param_1;" (assignment_expression "iVar3 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar1 = iVar3 + 4;" (assignment_expression "iVar1 = iVar3 + 4" identifier = (binary_expression "iVar3 + 4" identifier + number_literal)) ;) (expression_statement "*param_1 = iVar1;" (assignment_expression "*param_1 = iVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (if_statement "if (param_1[1] == iVar1) break;" if (parenthesized_expression "(param_1[1] == iVar1)" ( (binary_expression "param_1[1] == iVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar2 = *(uint *)(iVar3 + 4);" (assignment_expression "uVar2 = *(uint *)(iVar3 + 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 4)" * (cast_expression "(uint *)(iVar3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) ))))) ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)))) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) })) (return_statement return LIT ;) })))
(function_definition "undefined4 __regparm3 FUN_002867b0(int *param_1,undefined4 param_2,uint param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  char cVar4;\n  \n  if ((uint *)param_1[1] != (uint *)*param_1) {\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }\n  return 0;\n}" (type_identifier "undefined4") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_002867b0(int *param_1,undefined4 param_2,uint param_3)" (identifier "FUN_002867b0") (parameter_list "(int *param_1,undefined4 param_2,uint param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  char cVar4;\n  \n  if ((uint *)param_1[1] != (uint *)*param_1) {\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }\n  return 0;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "char cVar4;" (primitive_type "char") (identifier "cVar4") (; ";")) (if_statement "if ((uint *)param_1[1] != (uint *)*param_1) {\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }" (if "if") (parenthesized_expression "((uint *)param_1[1] != (uint *)*param_1)" (( "(") (binary_expression "(uint *)param_1[1] != (uint *)*param_1" (cast_expression "(uint *)param_1[1]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (!= "!=") (cast_expression "(uint *)*param_1" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) () ")")) (compound_statement "{\n    uVar2 = *(uint *)*param_1;\n    while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }\n  }" ({ "{") (expression_statement "uVar2 = *(uint *)*param_1;" (assignment_expression "uVar2 = *(uint *)*param_1" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)*param_1" (* "*") (cast_expression "(uint *)*param_1" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1"))))) (; ";")) (while_statement "while( true ) {\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      if (param_3 < uVar2) {\n        return 2;\n      }\n      cVar4 = FUN_00286390();\n      if (cVar4 == '\0') {\n        return 1;\n      }\n      iVar3 = *param_1;\n      iVar1 = iVar3 + 4;\n      *param_1 = iVar1;\n      if (param_1[1] == iVar1) break;\n      uVar2 = *(uint *)(iVar3 + 4);\n    }" ({ "{") (if_statement "if (param_3 < uVar2) {\n        return 2;\n      }" (if "if") (parenthesized_expression "(param_3 < uVar2)" (( "(") (binary_expression "param_3 < uVar2" (identifier "param_3") (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\n        return 2;\n      }" ({ "{") (return_statement "return 2;" (return "return") (number_literal "2") (; ";")) (} "}"))) (expression_statement "cVar4 = FUN_00286390();" (assignment_expression "cVar4 = FUN_00286390()" (identifier "cVar4") (= "=") (call_expression "FUN_00286390()" (identifier "FUN_00286390") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (cVar4 == '\0') {\n        return 1;\n      }" (if "if") (parenthesized_expression "(cVar4 == '\0')" (( "(") (binary_expression "cVar4 == '\0'" (identifier "cVar4") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return 1;\n      }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "iVar3 = *param_1;" (assignment_expression "iVar3 = *param_1" (identifier "iVar3") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "iVar1 = iVar3 + 4;" (assignment_expression "iVar1 = iVar3 + 4" (identifier "iVar1") (= "=") (binary_expression "iVar3 + 4" (identifier "iVar3") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "*param_1 = iVar1;" (assignment_expression "*param_1 = iVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "iVar1")) (; ";")) (if_statement "if (param_1[1] == iVar1) break;" (if "if") (parenthesized_expression "(param_1[1] == iVar1)" (( "(") (binary_expression "param_1[1] == iVar1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (== "==") (identifier "iVar1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar2 = *(uint *)(iVar3 + 4);" (assignment_expression "uVar2 = *(uint *)(iVar3 + 4)" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)(iVar3 + 4)" (* "*") (cast_expression "(uint *)(iVar3 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 4)" (( "(") (binary_expression "iVar3 + 4" (identifier "iVar3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}"))) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* std::(anonymous namespace)::ucs4_out(std::(anonymous namespace)::range<char32_t const, true>&,
   std::(anonymous namespace)::range<char, true>&, unsigned long, std::codecvt_mode) [clone
   .part.21] */

type_1 __regparm3
std::(anonymous_namespace)::var_1(var_2 *var_3,var_4 *var_5,type_2 param_3)

{
  int var_9;
  type_2 wVar2;
  int var_8;
  char var_7;
  
  if ((type_2 *)var_3[1] != (type_2 *)*var_3) {
    wVar2 = *(type_2 *)*var_3;
    while( true ) {
      if ((type_3)param_3 < (type_3)wVar2) {
        return 2;
      }
      var_7 = var_6(var_5,wVar2);
      if (var_7 == '\0') {
        return 1;
      }
      var_8 = *var_3;
      var_9 = var_8 + 4;
      *var_3 = var_9;
      if (var_3[1] == var_9) break;
      wVar2 = *(type_2 *)(var_8 + 4);
    }
  }
  return 0;
}


(translation_unit (function_definition type: (type_identifier) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator 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: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))) (return_statement (number_literal)))))

undefined4 __regparm3 MASKED(int *param_1,undefined4 param_2,uint param_3)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  char cVar4;
  
  if ((uint *)param_1[1] != (uint *)*param_1) {
    uVar2 = *(uint *)*param_1;
    while( true ) {
      if (param_3 < uVar2) {
        return 2;
      }
      cVar4 = FUN_00286390();
      if (cVar4 == '\0') {
        return 1;
      }
      iVar3 = *param_1;
      iVar1 = iVar3 + 4;
      *param_1 = iVar1;
      if (param_1[1] == iVar1) break;
      uVar2 = *(uint *)(iVar3 + 4);
    }
  }
  return 0;
}

