
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

i8_err_e __regparm3
infinity_get_string(char **result,uchar **ptr,uchar *limit,uchar *table_start,uchar *table_limit)

{
  uchar *puVar1;
  dwarf_vma dVar2;
  uint length;
  undefined4 uStack_14;
  
  uStack_14 = 0x1feab;
  if (*ptr <= limit) {
    dVar2 = read_leb128(*ptr,&length,0,limit);
    puVar1 = *ptr;
    *ptr = puVar1 + length;
    if (puVar1 + length <= limit) {
      puVar1 = table_start + (int)dVar2;
      *result = (char *)puVar1;
      if (puVar1 < table_limit) {
        do {
          if (*puVar1 == '\0') {
            return I8_NOTE_OK;
          }
          if (0x5e < (byte)(*puVar1 - 0x20)) {
            return I8_NOTE_UNHANDLED;
          }
          puVar1 = puVar1 + 1;
        } while (table_limit != puVar1);
      }
    }
  }
  return I8_NOTE_CORRUPT;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

undefined4 __regparm3
FUN_0001fea0(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)

{
  uint uVar1;
  int iVar2;
  char *pcVar3;
  int local_20 [3];
  undefined4 uStack_14;
  
  uStack_14 = 0x1feab;
  if (*param_2 <= param_3) {
    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);
    uVar1 = *param_2;
    *param_2 = local_20[0] + uVar1;
    if (local_20[0] + uVar1 <= param_3) {
      pcVar3 = (char *)(param_4 + iVar2);
      *param_1 = pcVar3;
      if (pcVar3 < param_5) {
        do {
          if (*pcVar3 == '\0') {
            return 0;
          }
          if (0x5e < (byte)(*pcVar3 - 0x20U)) {
            return 2;
          }
          pcVar3 = pcVar3 + 1;
        } while (param_5 != pcVar3);
      }
    }
  }
  return 1;
}


PUSH EBP
PUSH EDI
MOV EDI,EDX
PUSH ESI
PUSH EBX
CALL 0x00013f70
ADD EBX,0x94155
SUB ESP,0x2c
MOV EDX,dword ptr [EDX]
MOV ESI,dword ptr [ESP + 0x44]
CMP EDX,ECX
JBE 0x0001fed0
ADD ESP,0x2c
MOV EAX,0x1
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV dword ptr [ESP + 0xc],EAX
MOV EBP,ECX
PUSH ECX
PUSH 0x0
LEA EAX,[ESP + 0x24]
PUSH EAX
PUSH EDX
CALL 0x0004f990
MOV EDX,dword ptr [ESP + 0x2c]
ADD EDX,dword ptr [EDI]
ADD ESP,0x10
MOV dword ptr [EDI],EDX
CMP EDX,EBP
JA 0x0001febe
MOV EDX,dword ptr [ESP + 0x40]
ADD EDX,EAX
MOV EAX,dword ptr [ESP + 0xc]
MOV dword ptr [EAX],EDX
CMP EDX,ESI
JC 0x0001ff16
JMP 0x0001febe
SUB EAX,0x20
CMP AL,0x5e
JA 0x0001ff30
ADD EDX,0x1
CMP ESI,EDX
JZ 0x0001febe
MOVZX EAX,byte ptr [EDX]
TEST AL,AL
JNZ 0x0001ff08
ADD ESP,0x2c
XOR EAX,EAX
POP EBX
POP ESI
POP EDI
POP EBP
RET
ADD ESP,0x2c
MOV EAX,0x2
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nundefined4 __regparm3\nFUN_0001fea0(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)\n\n{\n  uint uVar1;\n  int iVar2;\n  char *pcVar3;\n  int local_20 [3];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x1feab;\n  if (*param_2 <= param_3) {\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }\n  return 1;\n}\n\n" comment (function_definition "undefined4 __regparm3\nFUN_0001fea0(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)\n\n{\n  uint uVar1;\n  int iVar2;\n  char *pcVar3;\n  int local_20 [3];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x1feab;\n  if (*param_2 <= param_3) {\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }\n  return 1;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0001fea0(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)" identifier (parameter_list "(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "char *param_5" primitive_type (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  char *pcVar3;\n  int local_20 [3];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x1feab;\n  if (*param_2 <= param_3) {\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }\n  return 1;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int local_20 [3];" primitive_type (array_declarator "local_20 [3]" identifier [ number_literal ]) ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x1feab;" (assignment_expression "uStack_14 = 0x1feab" identifier = number_literal) ;) (if_statement "if (*param_2 <= param_3) {\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }" if (parenthesized_expression "(*param_2 <= param_3)" ( (binary_expression "*param_2 <= param_3" (pointer_expression "*param_2" * identifier) <= identifier) )) (compound_statement "{\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }" { (expression_statement "iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);" (assignment_expression "iVar2 = FUN_0004f990(*param_2,local_20,0,param_3)" identifier = (call_expression "FUN_0004f990(*param_2,local_20,0,param_3)" identifier (argument_list "(*param_2,local_20,0,param_3)" ( (pointer_expression "*param_2" * identifier) , identifier , number_literal , identifier )))) ;) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "*param_2 = local_20[0] + uVar1;" (assignment_expression "*param_2 = local_20[0] + uVar1" (pointer_expression "*param_2" * identifier) = (binary_expression "local_20[0] + uVar1" (subscript_expression "local_20[0]" identifier [ number_literal ]) + identifier)) ;) (if_statement "if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }" if (parenthesized_expression "(local_20[0] + uVar1 <= param_3)" ( (binary_expression "local_20[0] + uVar1 <= param_3" (binary_expression "local_20[0] + uVar1" (subscript_expression "local_20[0]" identifier [ number_literal ]) + identifier) <= identifier) )) (compound_statement "{\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }" { (expression_statement "pcVar3 = (char *)(param_4 + iVar2);" (assignment_expression "pcVar3 = (char *)(param_4 + iVar2)" identifier = (cast_expression "(char *)(param_4 + iVar2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + iVar2)" ( (binary_expression "param_4 + iVar2" identifier + identifier) )))) ;) (expression_statement "*param_1 = pcVar3;" (assignment_expression "*param_1 = pcVar3" (pointer_expression "*param_1" * identifier) = identifier) ;) (if_statement "if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }" if (parenthesized_expression "(pcVar3 < param_5)" ( (binary_expression "pcVar3 < param_5" identifier < identifier) )) (compound_statement "{\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }" { (do_statement "do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);" do (compound_statement "{\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        }" { (if_statement "if (*pcVar3 == '\0') {\n            return 0;\n          }" if (parenthesized_expression "(*pcVar3 == '\0')" ( (binary_expression "*pcVar3 == '\0'" (pointer_expression "*pcVar3" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }" if (parenthesized_expression "(0x5e < (byte)(*pcVar3 - 0x20U))" ( (binary_expression "0x5e < (byte)(*pcVar3 - 0x20U)" number_literal < (call_expression "(byte)(*pcVar3 - 0x20U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*pcVar3 - 0x20U)" ( (binary_expression "*pcVar3 - 0x20U" (pointer_expression "*pcVar3" * identifier) - number_literal) )))) )) (compound_statement "{\n            return 2;\n          }" { (return_statement "return 2;" return number_literal ;) })) (expression_statement "pcVar3 = pcVar3 + 1;" (assignment_expression "pcVar3 = pcVar3 + 1" identifier = (binary_expression "pcVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_5 != pcVar3)" ( (binary_expression "param_5 != pcVar3" identifier != identifier) )) ;) })) })) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\ni8_err_e __regparm3\ninfinity_get_string(char **result,uchar **ptr,uchar *limit,uchar *table_start,uchar *table_limit)\n\n{\n  uchar *puVar1;\n  dwarf_vma dVar2;\n  uint length;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x1feab;\n  if (*ptr <= limit) {\n    dVar2 = read_leb128(*ptr,&length,0,limit);\n    puVar1 = *ptr;\n    *ptr = puVar1 + length;\n    if (puVar1 + length <= limit) {\n      puVar1 = table_start + (int)dVar2;\n      *result = (char *)puVar1;\n      if (puVar1 < table_limit) {\n        do {\n          if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar1 = puVar1 + 1;\n        } while (table_limit != puVar1);\n      }\n    }\n  }\n  return I8_NOTE_CORRUPT;\n}\n\n" comment (function_definition "i8_err_e __regparm3\ninfinity_get_string(char **result,uchar **ptr,uchar *limit,uchar *table_start,uchar *table_limit)\n\n{\n  uchar *puVar1;\n  dwarf_vma dVar2;\n  uint length;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x1feab;\n  if (*ptr <= limit) {\n    dVar2 = read_leb128(*ptr,&length,0,limit);\n    puVar1 = *ptr;\n    *ptr = puVar1 + length;\n    if (puVar1 + length <= limit) {\n      puVar1 = table_start + (int)dVar2;\n      *result = (char *)puVar1;\n      if (puVar1 < table_limit) {\n        do {\n          if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar1 = puVar1 + 1;\n        } while (table_limit != puVar1);\n      }\n    }\n  }\n  return I8_NOTE_CORRUPT;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "infinity_get_string(char **result,uchar **ptr,uchar *limit,uchar *table_start,uchar *table_limit)" identifier (parameter_list "(char **result,uchar **ptr,uchar *limit,uchar *table_start,uchar *table_limit)" ( (parameter_declaration "char **result" primitive_type (pointer_declarator "**result" * (pointer_declarator "*result" * identifier))) , (parameter_declaration "uchar **ptr" type_identifier (pointer_declarator "**ptr" * (pointer_declarator "*ptr" * identifier))) , (parameter_declaration "uchar *limit" type_identifier (pointer_declarator "*limit" * identifier)) , (parameter_declaration "uchar *table_start" type_identifier (pointer_declarator "*table_start" * identifier)) , (parameter_declaration "uchar *table_limit" type_identifier (pointer_declarator "*table_limit" * identifier)) ))) (compound_statement "{\n  uchar *puVar1;\n  dwarf_vma dVar2;\n  uint length;\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x1feab;\n  if (*ptr <= limit) {\n    dVar2 = read_leb128(*ptr,&length,0,limit);\n    puVar1 = *ptr;\n    *ptr = puVar1 + length;\n    if (puVar1 + length <= limit) {\n      puVar1 = table_start + (int)dVar2;\n      *result = (char *)puVar1;\n      if (puVar1 < table_limit) {\n        do {\n          if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar1 = puVar1 + 1;\n        } while (table_limit != puVar1);\n      }\n    }\n  }\n  return I8_NOTE_CORRUPT;\n}" { (declaration "uchar *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "dwarf_vma dVar2;" type_identifier identifier ;) (declaration "uint length;" type_identifier identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x1feab;" (assignment_expression "uStack_14 = 0x1feab" identifier = number_literal) ;) (if_statement "if (*ptr <= limit) {\n    dVar2 = read_leb128(*ptr,&length,0,limit);\n    puVar1 = *ptr;\n    *ptr = puVar1 + length;\n    if (puVar1 + length <= limit) {\n      puVar1 = table_start + (int)dVar2;\n      *result = (char *)puVar1;\n      if (puVar1 < table_limit) {\n        do {\n          if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar1 = puVar1 + 1;\n        } while (table_limit != puVar1);\n      }\n    }\n  }" if (parenthesized_expression "(*ptr <= limit)" ( (binary_expression "*ptr <= limit" (pointer_expression "*ptr" * identifier) <= identifier) )) (compound_statement "{\n    dVar2 = read_leb128(*ptr,&length,0,limit);\n    puVar1 = *ptr;\n    *ptr = puVar1 + length;\n    if (puVar1 + length <= limit) {\n      puVar1 = table_start + (int)dVar2;\n      *result = (char *)puVar1;\n      if (puVar1 < table_limit) {\n        do {\n          if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar1 = puVar1 + 1;\n        } while (table_limit != puVar1);\n      }\n    }\n  }" { (expression_statement "dVar2 = read_leb128(*ptr,&length,0,limit);" (assignment_expression "dVar2 = read_leb128(*ptr,&length,0,limit)" identifier = (call_expression "read_leb128(*ptr,&length,0,limit)" identifier (argument_list "(*ptr,&length,0,limit)" ( (pointer_expression "*ptr" * identifier) , (pointer_expression "&length" & identifier) , number_literal , identifier )))) ;) (expression_statement "puVar1 = *ptr;" (assignment_expression "puVar1 = *ptr" identifier = (pointer_expression "*ptr" * identifier)) ;) (expression_statement "*ptr = puVar1 + length;" (assignment_expression "*ptr = puVar1 + length" (pointer_expression "*ptr" * identifier) = (binary_expression "puVar1 + length" identifier + identifier)) ;) (if_statement "if (puVar1 + length <= limit) {\n      puVar1 = table_start + (int)dVar2;\n      *result = (char *)puVar1;\n      if (puVar1 < table_limit) {\n        do {\n          if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar1 = puVar1 + 1;\n        } while (table_limit != puVar1);\n      }\n    }" if (parenthesized_expression "(puVar1 + length <= limit)" ( (binary_expression "puVar1 + length <= limit" (binary_expression "puVar1 + length" identifier + identifier) <= identifier) )) (compound_statement "{\n      puVar1 = table_start + (int)dVar2;\n      *result = (char *)puVar1;\n      if (puVar1 < table_limit) {\n        do {\n          if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar1 = puVar1 + 1;\n        } while (table_limit != puVar1);\n      }\n    }" { (expression_statement "puVar1 = table_start + (int)dVar2;" (assignment_expression "puVar1 = table_start + (int)dVar2" identifier = (binary_expression "table_start + (int)dVar2" identifier + (cast_expression "(int)dVar2" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "*result = (char *)puVar1;" (assignment_expression "*result = (char *)puVar1" (pointer_expression "*result" * identifier) = (cast_expression "(char *)puVar1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (puVar1 < table_limit) {\n        do {\n          if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar1 = puVar1 + 1;\n        } while (table_limit != puVar1);\n      }" if (parenthesized_expression "(puVar1 < table_limit)" ( (binary_expression "puVar1 < table_limit" identifier < identifier) )) (compound_statement "{\n        do {\n          if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar1 = puVar1 + 1;\n        } while (table_limit != puVar1);\n      }" { (do_statement "do {\n          if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar1 = puVar1 + 1;\n        } while (table_limit != puVar1);" do (compound_statement "{\n          if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar1 = puVar1 + 1;\n        }" { (if_statement "if (*puVar1 == '\0') {\n            return I8_NOTE_OK;\n          }" if (parenthesized_expression "(*puVar1 == '\0')" ( (binary_expression "*puVar1 == '\0'" (pointer_expression "*puVar1" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            return I8_NOTE_OK;\n          }" { (return_statement "return I8_NOTE_OK;" return identifier ;) })) (if_statement "if (0x5e < (byte)(*puVar1 - 0x20)) {\n            return I8_NOTE_UNHANDLED;\n          }" if (parenthesized_expression "(0x5e < (byte)(*puVar1 - 0x20))" ( (binary_expression "0x5e < (byte)(*puVar1 - 0x20)" number_literal < (call_expression "(byte)(*puVar1 - 0x20)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*puVar1 - 0x20)" ( (binary_expression "*puVar1 - 0x20" (pointer_expression "*puVar1" * identifier) - number_literal) )))) )) (compound_statement "{\n            return I8_NOTE_UNHANDLED;\n          }" { (return_statement "return I8_NOTE_UNHANDLED;" return identifier ;) })) (expression_statement "puVar1 = puVar1 + 1;" (assignment_expression "puVar1 = puVar1 + 1" identifier = (binary_expression "puVar1 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(table_limit != puVar1)" ( (binary_expression "table_limit != puVar1" identifier != identifier) )) ;) })) })) })) (return_statement "return I8_NOTE_CORRUPT;" return identifier ;) })))
(translation_unit "undefined4 __regparm3\nFUN_0001fea0(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)\n\n{\n  uint uVar1;\n  int iVar2;\n  char *pcVar3;\n  int local_20 [3];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x1feab;\n  if (*param_2 <= param_3) {\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }\n  return 1;\n}\n\n" (function_definition "undefined4 __regparm3\nFUN_0001fea0(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)\n\n{\n  uint uVar1;\n  int iVar2;\n  char *pcVar3;\n  int local_20 [3];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x1feab;\n  if (*param_2 <= param_3) {\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }\n  return 1;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0001fea0(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)" identifier (parameter_list "(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "char *param_5" primitive_type (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  char *pcVar3;\n  int local_20 [3];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x1feab;\n  if (*param_2 <= param_3) {\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }\n  return 1;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int local_20 [3];" primitive_type (array_declarator "local_20 [3]" identifier [ number_literal ]) ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x1feab;" (assignment_expression "uStack_14 = 0x1feab" identifier = number_literal) ;) (if_statement "if (*param_2 <= param_3) {\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }" if (parenthesized_expression "(*param_2 <= param_3)" ( (binary_expression "*param_2 <= param_3" (pointer_expression "*param_2" * identifier) <= identifier) )) (compound_statement "{\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }" { (expression_statement "iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);" (assignment_expression "iVar2 = FUN_0004f990(*param_2,local_20,0,param_3)" identifier = (call_expression "FUN_0004f990(*param_2,local_20,0,param_3)" identifier (argument_list "(*param_2,local_20,0,param_3)" ( (pointer_expression "*param_2" * identifier) , identifier , number_literal , identifier )))) ;) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "*param_2 = local_20[0] + uVar1;" (assignment_expression "*param_2 = local_20[0] + uVar1" (pointer_expression "*param_2" * identifier) = (binary_expression "local_20[0] + uVar1" (subscript_expression "local_20[0]" identifier [ number_literal ]) + identifier)) ;) (if_statement "if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }" if (parenthesized_expression "(local_20[0] + uVar1 <= param_3)" ( (binary_expression "local_20[0] + uVar1 <= param_3" (binary_expression "local_20[0] + uVar1" (subscript_expression "local_20[0]" identifier [ number_literal ]) + identifier) <= identifier) )) (compound_statement "{\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }" { (expression_statement "pcVar3 = (char *)(param_4 + iVar2);" (assignment_expression "pcVar3 = (char *)(param_4 + iVar2)" identifier = (cast_expression "(char *)(param_4 + iVar2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + iVar2)" ( (binary_expression "param_4 + iVar2" identifier + identifier) )))) ;) (expression_statement "*param_1 = pcVar3;" (assignment_expression "*param_1 = pcVar3" (pointer_expression "*param_1" * identifier) = identifier) ;) (if_statement "if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }" if (parenthesized_expression "(pcVar3 < param_5)" ( (binary_expression "pcVar3 < param_5" identifier < identifier) )) (compound_statement "{\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }" { (do_statement "do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);" do (compound_statement "{\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        }" { (if_statement "if (*pcVar3 == '\0') {\n            return 0;\n          }" if (parenthesized_expression "(*pcVar3 == '\0')" ( (binary_expression "*pcVar3 == '\0'" (pointer_expression "*pcVar3" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }" if (parenthesized_expression "(0x5e < (byte)(*pcVar3 - 0x20U))" ( (binary_expression "0x5e < (byte)(*pcVar3 - 0x20U)" number_literal < (call_expression "(byte)(*pcVar3 - 0x20U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*pcVar3 - 0x20U)" ( (binary_expression "*pcVar3 - 0x20U" (pointer_expression "*pcVar3" * identifier) - number_literal) )))) )) (compound_statement "{\n            return 2;\n          }" { (return_statement "return 2;" return number_literal ;) })) (expression_statement "pcVar3 = pcVar3 + 1;" (assignment_expression "pcVar3 = pcVar3 + 1" identifier = (binary_expression "pcVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_5 != pcVar3)" ( (binary_expression "param_5 != pcVar3" identifier != identifier) )) ;) })) })) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * IDENT) , IDENT , LIT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * IDENT) - LIT) )))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) })) })) (return_statement return LIT ;) })))
(function_definition "undefined4 __regparm3\nFUN_0001fea0(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)\n\n{\n  uint uVar1;\n  int iVar2;\n  char *pcVar3;\n  int local_20 [3];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x1feab;\n  if (*param_2 <= param_3) {\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }\n  return 1;\n}" (type_identifier "undefined4") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0001fea0(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)" (identifier "FUN_0001fea0") (parameter_list "(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "char *param_5" (primitive_type "char") (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) () ")"))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  char *pcVar3;\n  int local_20 [3];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x1feab;\n  if (*param_2 <= param_3) {\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }\n  return 1;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "char *pcVar3;" (primitive_type "char") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (declaration "int local_20 [3];" (primitive_type "int") (array_declarator "local_20 [3]" (identifier "local_20") ([ "[") (number_literal "3") (] "]")) (; ";")) (declaration "undefined4 uStack_14;" (type_identifier "undefined4") (identifier "uStack_14") (; ";")) (expression_statement "uStack_14 = 0x1feab;" (assignment_expression "uStack_14 = 0x1feab" (identifier "uStack_14") (= "=") (number_literal "0x1feab")) (; ";")) (if_statement "if (*param_2 <= param_3) {\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }" (if "if") (parenthesized_expression "(*param_2 <= param_3)" (( "(") (binary_expression "*param_2 <= param_3" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (<= "<=") (identifier "param_3")) () ")")) (compound_statement "{\n    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = local_20[0] + uVar1;\n    if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }\n  }" ({ "{") (expression_statement "iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);" (assignment_expression "iVar2 = FUN_0004f990(*param_2,local_20,0,param_3)" (identifier "iVar2") (= "=") (call_expression "FUN_0004f990(*param_2,local_20,0,param_3)" (identifier "FUN_0004f990") (argument_list "(*param_2,local_20,0,param_3)" (( "(") (pointer_expression "*param_2" (* "*") (identifier "param_2")) (, ",") (identifier "local_20") (, ",") (number_literal "0") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" (identifier "uVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "*param_2 = local_20[0] + uVar1;" (assignment_expression "*param_2 = local_20[0] + uVar1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "local_20[0] + uVar1" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (identifier "uVar1"))) (; ";")) (if_statement "if (local_20[0] + uVar1 <= param_3) {\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }" (if "if") (parenthesized_expression "(local_20[0] + uVar1 <= param_3)" (( "(") (binary_expression "local_20[0] + uVar1 <= param_3" (binary_expression "local_20[0] + uVar1" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (identifier "uVar1")) (<= "<=") (identifier "param_3")) () ")")) (compound_statement "{\n      pcVar3 = (char *)(param_4 + iVar2);\n      *param_1 = pcVar3;\n      if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }\n    }" ({ "{") (expression_statement "pcVar3 = (char *)(param_4 + iVar2);" (assignment_expression "pcVar3 = (char *)(param_4 + iVar2)" (identifier "pcVar3") (= "=") (cast_expression "(char *)(param_4 + iVar2)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + iVar2)" (( "(") (binary_expression "param_4 + iVar2" (identifier "param_4") (+ "+") (identifier "iVar2")) () ")")))) (; ";")) (expression_statement "*param_1 = pcVar3;" (assignment_expression "*param_1 = pcVar3" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "pcVar3")) (; ";")) (if_statement "if (pcVar3 < param_5) {\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }" (if "if") (parenthesized_expression "(pcVar3 < param_5)" (( "(") (binary_expression "pcVar3 < param_5" (identifier "pcVar3") (< "<") (identifier "param_5")) () ")")) (compound_statement "{\n        do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);\n      }" ({ "{") (do_statement "do {\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        } while (param_5 != pcVar3);" (do "do") (compound_statement "{\n          if (*pcVar3 == '\0') {\n            return 0;\n          }\n          if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }\n          pcVar3 = pcVar3 + 1;\n        }" ({ "{") (if_statement "if (*pcVar3 == '\0') {\n            return 0;\n          }" (if "if") (parenthesized_expression "(*pcVar3 == '\0')" (( "(") (binary_expression "*pcVar3 == '\0'" (pointer_expression "*pcVar3" (* "*") (identifier "pcVar3")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n            return 0;\n          }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (0x5e < (byte)(*pcVar3 - 0x20U)) {\n            return 2;\n          }" (if "if") (parenthesized_expression "(0x5e < (byte)(*pcVar3 - 0x20U))" (( "(") (binary_expression "0x5e < (byte)(*pcVar3 - 0x20U)" (number_literal "0x5e") (< "<") (call_expression "(byte)(*pcVar3 - 0x20U)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(*pcVar3 - 0x20U)" (( "(") (binary_expression "*pcVar3 - 0x20U" (pointer_expression "*pcVar3" (* "*") (identifier "pcVar3")) (- "-") (number_literal "0x20U")) () ")")))) () ")")) (compound_statement "{\n            return 2;\n          }" ({ "{") (return_statement "return 2;" (return "return") (number_literal "2") (; ";")) (} "}"))) (expression_statement "pcVar3 = pcVar3 + 1;" (assignment_expression "pcVar3 = pcVar3 + 1" (identifier "pcVar3") (= "=") (binary_expression "pcVar3 + 1" (identifier "pcVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_5 != pcVar3)" (( "(") (binary_expression "param_5 != pcVar3" (identifier "param_5") (!= "!=") (identifier "pcVar3")) () ")")) (; ";")) (} "}"))) (} "}"))) (} "}"))) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

type_1 __regparm3
function_1(char **result,type_2 **ptr,type_2 *var_1,type_2 *var_5,type_2 *var_6)

{
  type_2 *var_3;
  type_3 dVar2;
  type_4 var_4;
  type_5 uStack_14;
  
  uStack_14 = 0x1feab;
  if (*ptr <= var_1) {
    dVar2 = var_2(*ptr,&var_4,0,var_1);
    var_3 = *ptr;
    *ptr = var_3 + var_4;
    if (var_3 + var_4 <= var_1) {
      var_3 = var_5 + (int)dVar2;
      *result = (char *)var_3;
      if (var_3 < var_6) {
        do {
          if (*var_3 == '\0') {
            return I8_NOTE_OK;
          }
          if (0x5e < (byte)(*var_3 - 0x20)) {
            return I8_NOTE_UNHANDLED;
          }
          var_3 = var_3 + 1;
        } while (var_6 != var_3);
      }
    }
  }
  return I8_NOTE_CORRUPT;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

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

{
  uint uVar1;
  int iVar2;
  char *pcVar3;
  int local_20 [3];
  undefined4 uStack_14;
  
  uStack_14 = 0x1feab;
  if (*param_2 <= param_3) {
    iVar2 = FUN_0004f990(*param_2,local_20,0,param_3);
    uVar1 = *param_2;
    *param_2 = local_20[0] + uVar1;
    if (local_20[0] + uVar1 <= param_3) {
      pcVar3 = (char *)(param_4 + iVar2);
      *param_1 = pcVar3;
      if (pcVar3 < param_5) {
        do {
          if (*pcVar3 == '\0') {
            return 0;
          }
          if (0x5e < (byte)(*pcVar3 - 0x20U)) {
            return 2;
          }
          pcVar3 = pcVar3 + 1;
        } while (param_5 != pcVar3);
      }
    }
  }
  return 1;
}

