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

{
  uchar uVar1;
  uchar *puVar2;
  int extraout_v1;
  uint length;
  
  if (*ptr <= limit) {
    (*(code *)PTR_read_leb128_000c33b4)(*ptr,&length,0,limit);
    puVar2 = *ptr;
    *ptr = puVar2 + length;
    if (puVar2 + length <= limit) {
      puVar2 = table_start + extraout_v1;
      *result = (char *)puVar2;
      if (puVar2 < table_limit) {
        uVar1 = *puVar2;
        while( true ) {
          if ((char)uVar1 == 0) {
            return I8_NOTE_OK;
          }
          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {
            return I8_NOTE_UNHANDLED;
          }
          puVar2 = puVar2 + 1;
          if (table_limit == puVar2) break;
          uVar1 = *puVar2;
        }
      }
    }
  }
  return I8_NOTE_CORRUPT;
}



ulonglong FUN_0001fbdc(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)

{
  uint uVar1;
  int iVar2;
  char *in_v1;
  char *extraout_v1;
  char *pcVar3;
  int local_20 [2];
  
  if (*param_2 <= param_3) {
    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);
    uVar1 = *param_2;
    *param_2 = uVar1 + local_20[0];
    in_v1 = extraout_v1;
    if (uVar1 + local_20[0] <= param_3) {
      in_v1 = extraout_v1 + param_4;
      *param_1 = in_v1;
      if (in_v1 < param_5) {
        iVar2 = (int)*in_v1;
        if (iVar2 == 0) {
LAB_0001fce0:
          return ZEXT48(in_v1);
        }
        pcVar3 = in_v1;
        in_v1 = in_v1 + 1;
        while( true ) {
          if (0x5e < (iVar2 - 0x20U & 0xff)) {
            return CONCAT44(2,pcVar3);
          }
          if (param_5 == in_v1) break;
          iVar2 = (int)*in_v1;
          if (iVar2 == 0) goto LAB_0001fce0;
          pcVar3 = in_v1 + 1;
          in_v1 = pcVar3;
        }
      }
    }
  }
  return CONCAT44(1,in_v1);
}


lui gp,0xb
addiu gp,gp,-0x488c
addu gp,gp,t9
addiu sp,sp,-0x38
lw v0,0x0(a1)
sltu t0,a2,v0
sw gp,0x10(sp)
sw s2,0x28(sp)
sw ra,0x34(sp)
sw s4,0x30(sp)
sw s3,0x2c(sp)
sw s1,0x24(sp)
sw s0,0x20(sp)
beq t0,zero,0x0001fc3c
_lw s2,0x48(sp)
lw ra,0x34(sp)
li v0,0x1
lw s4,0x30(sp)
lw s3,0x2c(sp)
lw s2,0x28(sp)
lw s1,0x24(sp)
lw s0,0x20(sp)
jr ra
_addiu sp,sp,0x38
lw t9,-0x7f9c(gp)
or s1,a2,zero
or s3,a1,zero
or a2,zero,zero
addiu a1,sp,0x18
or s0,a3,zero
or s4,a0,zero
or a3,s1,zero
jalr t9
_or a0,v0,zero
lw v0,0x0(s3)
lw a0,0x18(sp)
addu v0,v0,a0
sltu a2,s1,v0
bne a2,zero,0x0001fc18
_sw v0,0x0(s3)
addu v1,s0,v1
sltu v0,v1,s2
beq v0,zero,0x0001fc18
_sw v1,0x0(s4)
lb v0,0x0(v1)
beq v0,zero,0x0001fce0
_addiu v0,v0,-0x20
andi v0,v0,0xff
sltiu v0,v0,0x5f
bne v0,zero,0x0001fcd0
_addiu v1,v1,0x1
addiu v1,v1,-0x1
b 0x0001fd08
_lw ra,0x34(sp)
lb a0,0x0(v1)
beq a0,zero,0x0001fce0
_addiu v0,a0,-0x20
andi v0,v0,0xff
sltiu v0,v0,0x5f
beq v0,zero,0x0001fd04
_addiu v1,v1,0x1
bne s2,v1,0x0001fcb4
_lw ra,0x34(sp)
b 0x0001fc20
_li v0,0x1
lw ra,0x34(sp)
or v0,zero,zero
lw s4,0x30(sp)
lw s3,0x2c(sp)
lw s2,0x28(sp)
lw s1,0x24(sp)
lw s0,0x20(sp)
jr ra
_addiu sp,sp,0x38
lw ra,0x34(sp)
li v0,0x2
lw s4,0x30(sp)
lw s3,0x2c(sp)
lw s2,0x28(sp)
lw s1,0x24(sp)
lw s0,0x20(sp)
jr ra
_addiu sp,sp,0x38
(translation_unit "ulonglong FUN_0001fbdc(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 *in_v1;\n  char *extraout_v1;\n  char *pcVar3;\n  int local_20 [2];\n  \n  if (*param_2 <= param_3) {\n    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }\n  }\n  return CONCAT44(1,in_v1);\n}\n\n" (function_definition "ulonglong FUN_0001fbdc(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 *in_v1;\n  char *extraout_v1;\n  char *pcVar3;\n  int local_20 [2];\n  \n  if (*param_2 <= param_3) {\n    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }\n  }\n  return CONCAT44(1,in_v1);\n}" type_identifier (function_declarator "FUN_0001fbdc(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 *in_v1;\n  char *extraout_v1;\n  char *pcVar3;\n  int local_20 [2];\n  \n  if (*param_2 <= param_3) {\n    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }\n  }\n  return CONCAT44(1,in_v1);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *in_v1;" primitive_type (pointer_declarator "*in_v1" * identifier) ;) (declaration "char *extraout_v1;" primitive_type (pointer_declarator "*extraout_v1" * identifier) ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int local_20 [2];" primitive_type (array_declarator "local_20 [2]" identifier [ number_literal ]) ;) (if_statement "if (*param_2 <= param_3) {\n    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\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    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }\n  }" { (expression_statement "(*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);" (call_expression "(*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3)" (parenthesized_expression "(*(code *)PTR_read_leb128_000c33b4)" ( (pointer_expression "*(code *)PTR_read_leb128_000c33b4" * (cast_expression "(code *)PTR_read_leb128_000c33b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) 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 = uVar1 + local_20[0];" (assignment_expression "*param_2 = uVar1 + local_20[0]" (pointer_expression "*param_2" * identifier) = (binary_expression "uVar1 + local_20[0]" identifier + (subscript_expression "local_20[0]" identifier [ number_literal ]))) ;) (expression_statement "in_v1 = extraout_v1;" (assignment_expression "in_v1 = extraout_v1" identifier = identifier) ;) (if_statement "if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }" if (parenthesized_expression "(uVar1 + local_20[0] <= param_3)" ( (binary_expression "uVar1 + local_20[0] <= param_3" (binary_expression "uVar1 + local_20[0]" identifier + (subscript_expression "local_20[0]" identifier [ number_literal ])) <= identifier) )) (compound_statement "{\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }" { (expression_statement "in_v1 = extraout_v1 + param_4;" (assignment_expression "in_v1 = extraout_v1 + param_4" identifier = (binary_expression "extraout_v1 + param_4" identifier + identifier)) ;) (expression_statement "*param_1 = in_v1;" (assignment_expression "*param_1 = in_v1" (pointer_expression "*param_1" * identifier) = identifier) ;) (if_statement "if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }" if (parenthesized_expression "(in_v1 < param_5)" ( (binary_expression "in_v1 < param_5" identifier < identifier) )) (compound_statement "{\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }" { (expression_statement "iVar2 = (int)*in_v1;" (assignment_expression "iVar2 = (int)*in_v1" identifier = (cast_expression "(int)*in_v1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*in_v1" * identifier))) ;) (if_statement "if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }" { (labeled_statement "LAB_0001fce0:\n          return ZEXT48(in_v1);" statement_identifier : (return_statement "return ZEXT48(in_v1);" return (call_expression "ZEXT48(in_v1)" identifier (argument_list "(in_v1)" ( identifier ))) ;)) })) (expression_statement "pcVar3 = in_v1;" (assignment_expression "pcVar3 = in_v1" identifier = identifier) ;) (expression_statement "in_v1 = in_v1 + 1;" (assignment_expression "in_v1 = in_v1 + 1" identifier = (binary_expression "in_v1 + 1" identifier + number_literal)) ;) (while_statement "while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }" { (if_statement "if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }" if (parenthesized_expression "(0x5e < (iVar2 - 0x20U & 0xff))" ( (binary_expression "0x5e < (iVar2 - 0x20U & 0xff)" number_literal < (parenthesized_expression "(iVar2 - 0x20U & 0xff)" ( (binary_expression "iVar2 - 0x20U & 0xff" (binary_expression "iVar2 - 0x20U" identifier - number_literal) & number_literal) ))) )) (compound_statement "{\n            return CONCAT44(2,pcVar3);\n          }" { (return_statement "return CONCAT44(2,pcVar3);" return (call_expression "CONCAT44(2,pcVar3)" identifier (argument_list "(2,pcVar3)" ( number_literal , identifier ))) ;) })) (if_statement "if (param_5 == in_v1) break;" if (parenthesized_expression "(param_5 == in_v1)" ( (binary_expression "param_5 == in_v1" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "iVar2 = (int)*in_v1;" (assignment_expression "iVar2 = (int)*in_v1" identifier = (cast_expression "(int)*in_v1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*in_v1" * identifier))) ;) (if_statement "if (iVar2 == 0) goto LAB_0001fce0;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001fce0;" goto statement_identifier ;)) (expression_statement "pcVar3 = in_v1 + 1;" (assignment_expression "pcVar3 = in_v1 + 1" identifier = (binary_expression "in_v1 + 1" identifier + number_literal)) ;) (expression_statement "in_v1 = pcVar3;" (assignment_expression "in_v1 = pcVar3" identifier = identifier) ;) })) })) })) })) (return_statement "return CONCAT44(1,in_v1);" return (call_expression "CONCAT44(1,in_v1)" identifier (argument_list "(1,in_v1)" ( number_literal , identifier ))) ;) })))
(translation_unit "i8_err_e infinity_get_string(char **result,uchar **ptr,uchar *limit,uchar *table_start,\n                            uchar *table_limit)\n\n{\n  uchar uVar1;\n  uchar *puVar2;\n  int extraout_v1;\n  uint length;\n  \n  if (*ptr <= limit) {\n    (*(code *)PTR_read_leb128_000c33b4)(*ptr,&length,0,limit);\n    puVar2 = *ptr;\n    *ptr = puVar2 + length;\n    if (puVar2 + length <= limit) {\n      puVar2 = table_start + extraout_v1;\n      *result = (char *)puVar2;\n      if (puVar2 < table_limit) {\n        uVar1 = *puVar2;\n        while( true ) {\n          if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar2 = puVar2 + 1;\n          if (table_limit == puVar2) break;\n          uVar1 = *puVar2;\n        }\n      }\n    }\n  }\n  return I8_NOTE_CORRUPT;\n}\n\n" (function_definition "i8_err_e infinity_get_string(char **result,uchar **ptr,uchar *limit,uchar *table_start,\n                            uchar *table_limit)\n\n{\n  uchar uVar1;\n  uchar *puVar2;\n  int extraout_v1;\n  uint length;\n  \n  if (*ptr <= limit) {\n    (*(code *)PTR_read_leb128_000c33b4)(*ptr,&length,0,limit);\n    puVar2 = *ptr;\n    *ptr = puVar2 + length;\n    if (puVar2 + length <= limit) {\n      puVar2 = table_start + extraout_v1;\n      *result = (char *)puVar2;\n      if (puVar2 < table_limit) {\n        uVar1 = *puVar2;\n        while( true ) {\n          if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar2 = puVar2 + 1;\n          if (table_limit == puVar2) break;\n          uVar1 = *puVar2;\n        }\n      }\n    }\n  }\n  return I8_NOTE_CORRUPT;\n}" type_identifier (function_declarator "infinity_get_string(char **result,uchar **ptr,uchar *limit,uchar *table_start,\n                            uchar *table_limit)" identifier (parameter_list "(char **result,uchar **ptr,uchar *limit,uchar *table_start,\n                            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 uVar1;\n  uchar *puVar2;\n  int extraout_v1;\n  uint length;\n  \n  if (*ptr <= limit) {\n    (*(code *)PTR_read_leb128_000c33b4)(*ptr,&length,0,limit);\n    puVar2 = *ptr;\n    *ptr = puVar2 + length;\n    if (puVar2 + length <= limit) {\n      puVar2 = table_start + extraout_v1;\n      *result = (char *)puVar2;\n      if (puVar2 < table_limit) {\n        uVar1 = *puVar2;\n        while( true ) {\n          if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar2 = puVar2 + 1;\n          if (table_limit == puVar2) break;\n          uVar1 = *puVar2;\n        }\n      }\n    }\n  }\n  return I8_NOTE_CORRUPT;\n}" { (declaration "uchar uVar1;" type_identifier identifier ;) (declaration "uchar *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int extraout_v1;" primitive_type identifier ;) (declaration "uint length;" type_identifier identifier ;) (if_statement "if (*ptr <= limit) {\n    (*(code *)PTR_read_leb128_000c33b4)(*ptr,&length,0,limit);\n    puVar2 = *ptr;\n    *ptr = puVar2 + length;\n    if (puVar2 + length <= limit) {\n      puVar2 = table_start + extraout_v1;\n      *result = (char *)puVar2;\n      if (puVar2 < table_limit) {\n        uVar1 = *puVar2;\n        while( true ) {\n          if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar2 = puVar2 + 1;\n          if (table_limit == puVar2) break;\n          uVar1 = *puVar2;\n        }\n      }\n    }\n  }" if (parenthesized_expression "(*ptr <= limit)" ( (binary_expression "*ptr <= limit" (pointer_expression "*ptr" * identifier) <= identifier) )) (compound_statement "{\n    (*(code *)PTR_read_leb128_000c33b4)(*ptr,&length,0,limit);\n    puVar2 = *ptr;\n    *ptr = puVar2 + length;\n    if (puVar2 + length <= limit) {\n      puVar2 = table_start + extraout_v1;\n      *result = (char *)puVar2;\n      if (puVar2 < table_limit) {\n        uVar1 = *puVar2;\n        while( true ) {\n          if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar2 = puVar2 + 1;\n          if (table_limit == puVar2) break;\n          uVar1 = *puVar2;\n        }\n      }\n    }\n  }" { (expression_statement "(*(code *)PTR_read_leb128_000c33b4)(*ptr,&length,0,limit);" (call_expression "(*(code *)PTR_read_leb128_000c33b4)(*ptr,&length,0,limit)" (parenthesized_expression "(*(code *)PTR_read_leb128_000c33b4)" ( (pointer_expression "*(code *)PTR_read_leb128_000c33b4" * (cast_expression "(code *)PTR_read_leb128_000c33b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*ptr,&length,0,limit)" ( (pointer_expression "*ptr" * identifier) , (pointer_expression "&length" & identifier) , number_literal , identifier ))) ;) (expression_statement "puVar2 = *ptr;" (assignment_expression "puVar2 = *ptr" identifier = (pointer_expression "*ptr" * identifier)) ;) (expression_statement "*ptr = puVar2 + length;" (assignment_expression "*ptr = puVar2 + length" (pointer_expression "*ptr" * identifier) = (binary_expression "puVar2 + length" identifier + identifier)) ;) (if_statement "if (puVar2 + length <= limit) {\n      puVar2 = table_start + extraout_v1;\n      *result = (char *)puVar2;\n      if (puVar2 < table_limit) {\n        uVar1 = *puVar2;\n        while( true ) {\n          if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar2 = puVar2 + 1;\n          if (table_limit == puVar2) break;\n          uVar1 = *puVar2;\n        }\n      }\n    }" if (parenthesized_expression "(puVar2 + length <= limit)" ( (binary_expression "puVar2 + length <= limit" (binary_expression "puVar2 + length" identifier + identifier) <= identifier) )) (compound_statement "{\n      puVar2 = table_start + extraout_v1;\n      *result = (char *)puVar2;\n      if (puVar2 < table_limit) {\n        uVar1 = *puVar2;\n        while( true ) {\n          if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar2 = puVar2 + 1;\n          if (table_limit == puVar2) break;\n          uVar1 = *puVar2;\n        }\n      }\n    }" { (expression_statement "puVar2 = table_start + extraout_v1;" (assignment_expression "puVar2 = table_start + extraout_v1" identifier = (binary_expression "table_start + extraout_v1" identifier + identifier)) ;) (expression_statement "*result = (char *)puVar2;" (assignment_expression "*result = (char *)puVar2" (pointer_expression "*result" * identifier) = (cast_expression "(char *)puVar2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (puVar2 < table_limit) {\n        uVar1 = *puVar2;\n        while( true ) {\n          if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar2 = puVar2 + 1;\n          if (table_limit == puVar2) break;\n          uVar1 = *puVar2;\n        }\n      }" if (parenthesized_expression "(puVar2 < table_limit)" ( (binary_expression "puVar2 < table_limit" identifier < identifier) )) (compound_statement "{\n        uVar1 = *puVar2;\n        while( true ) {\n          if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar2 = puVar2 + 1;\n          if (table_limit == puVar2) break;\n          uVar1 = *puVar2;\n        }\n      }" { (expression_statement "uVar1 = *puVar2;" (assignment_expression "uVar1 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (while_statement "while( true ) {\n          if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar2 = puVar2 + 1;\n          if (table_limit == puVar2) break;\n          uVar1 = *puVar2;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }\n          if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }\n          puVar2 = puVar2 + 1;\n          if (table_limit == puVar2) break;\n          uVar1 = *puVar2;\n        }" { (if_statement "if ((char)uVar1 == 0) {\n            return I8_NOTE_OK;\n          }" if (parenthesized_expression "((char)uVar1 == 0)" ( (binary_expression "(char)uVar1 == 0" (cast_expression "(char)uVar1" ( (type_descriptor "char" primitive_type) ) identifier) == number_literal) )) (compound_statement "{\n            return I8_NOTE_OK;\n          }" { (return_statement "return I8_NOTE_OK;" return identifier ;) })) (if_statement "if (0x5e < ((int)(char)uVar1 - 0x20U & 0xff)) {\n            return I8_NOTE_UNHANDLED;\n          }" if (parenthesized_expression "(0x5e < ((int)(char)uVar1 - 0x20U & 0xff))" ( (binary_expression "0x5e < ((int)(char)uVar1 - 0x20U & 0xff)" number_literal < (parenthesized_expression "((int)(char)uVar1 - 0x20U & 0xff)" ( (binary_expression "(int)(char)uVar1 - 0x20U & 0xff" (binary_expression "(int)(char)uVar1 - 0x20U" (cast_expression "(int)(char)uVar1" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)uVar1" ( (type_descriptor "char" primitive_type) ) identifier)) - number_literal) & number_literal) ))) )) (compound_statement "{\n            return I8_NOTE_UNHANDLED;\n          }" { (return_statement "return I8_NOTE_UNHANDLED;" return identifier ;) })) (expression_statement "puVar2 = puVar2 + 1;" (assignment_expression "puVar2 = puVar2 + 1" identifier = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (if_statement "if (table_limit == puVar2) break;" if (parenthesized_expression "(table_limit == puVar2)" ( (binary_expression "table_limit == puVar2" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar1 = *puVar2;" (assignment_expression "uVar1 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) })) })) })) })) (return_statement "return I8_NOTE_CORRUPT;" return identifier ;) })))
(translation_unit "ulonglong FUN_0001fbdc(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 *in_v1;\n  char *extraout_v1;\n  char *pcVar3;\n  int local_20 [2];\n  \n  if (*param_2 <= param_3) {\n    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }\n  }\n  return CONCAT44(1,in_v1);\n}\n\n" (function_definition "ulonglong FUN_0001fbdc(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 *in_v1;\n  char *extraout_v1;\n  char *pcVar3;\n  int local_20 [2];\n  \n  if (*param_2 <= param_3) {\n    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }\n  }\n  return CONCAT44(1,in_v1);\n}" type_identifier (function_declarator "FUN_0001fbdc(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 *in_v1;\n  char *extraout_v1;\n  char *pcVar3;\n  int local_20 [2];\n  \n  if (*param_2 <= param_3) {\n    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }\n  }\n  return CONCAT44(1,in_v1);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *in_v1;" primitive_type (pointer_declarator "*in_v1" * identifier) ;) (declaration "char *extraout_v1;" primitive_type (pointer_declarator "*extraout_v1" * identifier) ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int local_20 [2];" primitive_type (array_declarator "local_20 [2]" identifier [ number_literal ]) ;) (if_statement "if (*param_2 <= param_3) {\n    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\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    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }\n  }" { (expression_statement "(*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);" (call_expression "(*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3)" (parenthesized_expression "(*(code *)PTR_read_leb128_000c33b4)" ( (pointer_expression "*(code *)PTR_read_leb128_000c33b4" * (cast_expression "(code *)PTR_read_leb128_000c33b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) 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 = uVar1 + local_20[0];" (assignment_expression "*param_2 = uVar1 + local_20[0]" (pointer_expression "*param_2" * identifier) = (binary_expression "uVar1 + local_20[0]" identifier + (subscript_expression "local_20[0]" identifier [ number_literal ]))) ;) (expression_statement "in_v1 = extraout_v1;" (assignment_expression "in_v1 = extraout_v1" identifier = identifier) ;) (if_statement "if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }" if (parenthesized_expression "(uVar1 + local_20[0] <= param_3)" ( (binary_expression "uVar1 + local_20[0] <= param_3" (binary_expression "uVar1 + local_20[0]" identifier + (subscript_expression "local_20[0]" identifier [ number_literal ])) <= identifier) )) (compound_statement "{\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }" { (expression_statement "in_v1 = extraout_v1 + param_4;" (assignment_expression "in_v1 = extraout_v1 + param_4" identifier = (binary_expression "extraout_v1 + param_4" identifier + identifier)) ;) (expression_statement "*param_1 = in_v1;" (assignment_expression "*param_1 = in_v1" (pointer_expression "*param_1" * identifier) = identifier) ;) (if_statement "if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }" if (parenthesized_expression "(in_v1 < param_5)" ( (binary_expression "in_v1 < param_5" identifier < identifier) )) (compound_statement "{\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }" { (expression_statement "iVar2 = (int)*in_v1;" (assignment_expression "iVar2 = (int)*in_v1" identifier = (cast_expression "(int)*in_v1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*in_v1" * identifier))) ;) (if_statement "if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }" { (labeled_statement "LAB_0001fce0:\n          return ZEXT48(in_v1);" statement_identifier : (return_statement "return ZEXT48(in_v1);" return (call_expression "ZEXT48(in_v1)" identifier (argument_list "(in_v1)" ( identifier ))) ;)) })) (expression_statement "pcVar3 = in_v1;" (assignment_expression "pcVar3 = in_v1" identifier = identifier) ;) (expression_statement "in_v1 = in_v1 + 1;" (assignment_expression "in_v1 = in_v1 + 1" identifier = (binary_expression "in_v1 + 1" identifier + number_literal)) ;) (while_statement "while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }" { (if_statement "if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }" if (parenthesized_expression "(0x5e < (iVar2 - 0x20U & 0xff))" ( (binary_expression "0x5e < (iVar2 - 0x20U & 0xff)" number_literal < (parenthesized_expression "(iVar2 - 0x20U & 0xff)" ( (binary_expression "iVar2 - 0x20U & 0xff" (binary_expression "iVar2 - 0x20U" identifier - number_literal) & number_literal) ))) )) (compound_statement "{\n            return CONCAT44(2,pcVar3);\n          }" { (return_statement "return CONCAT44(2,pcVar3);" return (call_expression "CONCAT44(2,pcVar3)" identifier (argument_list "(2,pcVar3)" ( number_literal , identifier ))) ;) })) (if_statement "if (param_5 == in_v1) break;" if (parenthesized_expression "(param_5 == in_v1)" ( (binary_expression "param_5 == in_v1" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "iVar2 = (int)*in_v1;" (assignment_expression "iVar2 = (int)*in_v1" identifier = (cast_expression "(int)*in_v1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*in_v1" * identifier))) ;) (if_statement "if (iVar2 == 0) goto LAB_0001fce0;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001fce0;" goto statement_identifier ;)) (expression_statement "pcVar3 = in_v1 + 1;" (assignment_expression "pcVar3 = in_v1 + 1" identifier = (binary_expression "in_v1 + 1" identifier + number_literal)) ;) (expression_statement "in_v1 = pcVar3;" (assignment_expression "in_v1 = pcVar3" identifier = identifier) ;) })) })) })) })) (return_statement "return CONCAT44(1,in_v1);" return (call_expression "CONCAT44(1,in_v1)" identifier (argument_list "(1,in_v1)" ( number_literal , identifier ))) ;) })))
(translation_unit (function_definition TYPE (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 (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) <= IDENT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) 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 IDENT + (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + (subscript_expression IDENT [ LIT ])) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (return_statement return (call_expression IDENT (argument_list ( IDENT ))) ;)) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) & LIT) ))) )) (compound_statement { (return_statement return (call_expression IDENT (argument_list ( LIT , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) })) })) })) (return_statement return (call_expression IDENT (argument_list ( LIT , IDENT ))) ;) })))
(function_definition "ulonglong FUN_0001fbdc(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 *in_v1;\n  char *extraout_v1;\n  char *pcVar3;\n  int local_20 [2];\n  \n  if (*param_2 <= param_3) {\n    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }\n  }\n  return CONCAT44(1,in_v1);\n}" (type_identifier "ulonglong") (function_declarator "FUN_0001fbdc(undefined4 *param_1,uint *param_2,uint param_3,int param_4,char *param_5)" (identifier "FUN_0001fbdc") (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 *in_v1;\n  char *extraout_v1;\n  char *pcVar3;\n  int local_20 [2];\n  \n  if (*param_2 <= param_3) {\n    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }\n  }\n  return CONCAT44(1,in_v1);\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "char *in_v1;" (primitive_type "char") (pointer_declarator "*in_v1" (* "*") (identifier "in_v1")) (; ";")) (declaration "char *extraout_v1;" (primitive_type "char") (pointer_declarator "*extraout_v1" (* "*") (identifier "extraout_v1")) (; ";")) (declaration "char *pcVar3;" (primitive_type "char") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (declaration "int local_20 [2];" (primitive_type "int") (array_declarator "local_20 [2]" (identifier "local_20") ([ "[") (number_literal "2") (] "]")) (; ";")) (if_statement "if (*param_2 <= param_3) {\n    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\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    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);\n    uVar1 = *param_2;\n    *param_2 = uVar1 + local_20[0];\n    in_v1 = extraout_v1;\n    if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }\n  }" ({ "{") (expression_statement "(*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);" (call_expression "(*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3)" (parenthesized_expression "(*(code *)PTR_read_leb128_000c33b4)" (( "(") (pointer_expression "*(code *)PTR_read_leb128_000c33b4" (* "*") (cast_expression "(code *)PTR_read_leb128_000c33b4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_read_leb128_000c33b4"))) () ")")) (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 = uVar1 + local_20[0];" (assignment_expression "*param_2 = uVar1 + local_20[0]" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "uVar1 + local_20[0]" (identifier "uVar1") (+ "+") (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")))) (; ";")) (expression_statement "in_v1 = extraout_v1;" (assignment_expression "in_v1 = extraout_v1" (identifier "in_v1") (= "=") (identifier "extraout_v1")) (; ";")) (if_statement "if (uVar1 + local_20[0] <= param_3) {\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }" (if "if") (parenthesized_expression "(uVar1 + local_20[0] <= param_3)" (( "(") (binary_expression "uVar1 + local_20[0] <= param_3" (binary_expression "uVar1 + local_20[0]" (identifier "uVar1") (+ "+") (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]"))) (<= "<=") (identifier "param_3")) () ")")) (compound_statement "{\n      in_v1 = extraout_v1 + param_4;\n      *param_1 = in_v1;\n      if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }\n    }" ({ "{") (expression_statement "in_v1 = extraout_v1 + param_4;" (assignment_expression "in_v1 = extraout_v1 + param_4" (identifier "in_v1") (= "=") (binary_expression "extraout_v1 + param_4" (identifier "extraout_v1") (+ "+") (identifier "param_4"))) (; ";")) (expression_statement "*param_1 = in_v1;" (assignment_expression "*param_1 = in_v1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "in_v1")) (; ";")) (if_statement "if (in_v1 < param_5) {\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }" (if "if") (parenthesized_expression "(in_v1 < param_5)" (( "(") (binary_expression "in_v1 < param_5" (identifier "in_v1") (< "<") (identifier "param_5")) () ")")) (compound_statement "{\n        iVar2 = (int)*in_v1;\n        if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }\n        pcVar3 = in_v1;\n        in_v1 = in_v1 + 1;\n        while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }\n      }" ({ "{") (expression_statement "iVar2 = (int)*in_v1;" (assignment_expression "iVar2 = (int)*in_v1" (identifier "iVar2") (= "=") (cast_expression "(int)*in_v1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*in_v1" (* "*") (identifier "in_v1")))) (; ";")) (if_statement "if (iVar2 == 0) {\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0001fce0:\n          return ZEXT48(in_v1);\n        }" ({ "{") (labeled_statement "LAB_0001fce0:\n          return ZEXT48(in_v1);" (statement_identifier "LAB_0001fce0") (: ":") (return_statement "return ZEXT48(in_v1);" (return "return") (call_expression "ZEXT48(in_v1)" (identifier "ZEXT48") (argument_list "(in_v1)" (( "(") (identifier "in_v1") () ")"))) (; ";"))) (} "}"))) (expression_statement "pcVar3 = in_v1;" (assignment_expression "pcVar3 = in_v1" (identifier "pcVar3") (= "=") (identifier "in_v1")) (; ";")) (expression_statement "in_v1 = in_v1 + 1;" (assignment_expression "in_v1 = in_v1 + 1" (identifier "in_v1") (= "=") (binary_expression "in_v1 + 1" (identifier "in_v1") (+ "+") (number_literal "1"))) (; ";")) (while_statement "while( true ) {\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }\n          if (param_5 == in_v1) break;\n          iVar2 = (int)*in_v1;\n          if (iVar2 == 0) goto LAB_0001fce0;\n          pcVar3 = in_v1 + 1;\n          in_v1 = pcVar3;\n        }" ({ "{") (if_statement "if (0x5e < (iVar2 - 0x20U & 0xff)) {\n            return CONCAT44(2,pcVar3);\n          }" (if "if") (parenthesized_expression "(0x5e < (iVar2 - 0x20U & 0xff))" (( "(") (binary_expression "0x5e < (iVar2 - 0x20U & 0xff)" (number_literal "0x5e") (< "<") (parenthesized_expression "(iVar2 - 0x20U & 0xff)" (( "(") (binary_expression "iVar2 - 0x20U & 0xff" (binary_expression "iVar2 - 0x20U" (identifier "iVar2") (- "-") (number_literal "0x20U")) (& "&") (number_literal "0xff")) () ")"))) () ")")) (compound_statement "{\n            return CONCAT44(2,pcVar3);\n          }" ({ "{") (return_statement "return CONCAT44(2,pcVar3);" (return "return") (call_expression "CONCAT44(2,pcVar3)" (identifier "CONCAT44") (argument_list "(2,pcVar3)" (( "(") (number_literal "2") (, ",") (identifier "pcVar3") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_5 == in_v1) break;" (if "if") (parenthesized_expression "(param_5 == in_v1)" (( "(") (binary_expression "param_5 == in_v1" (identifier "param_5") (== "==") (identifier "in_v1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar2 = (int)*in_v1;" (assignment_expression "iVar2 = (int)*in_v1" (identifier "iVar2") (= "=") (cast_expression "(int)*in_v1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*in_v1" (* "*") (identifier "in_v1")))) (; ";")) (if_statement "if (iVar2 == 0) goto LAB_0001fce0;" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0001fce0;" (goto "goto") (statement_identifier "LAB_0001fce0") (; ";"))) (expression_statement "pcVar3 = in_v1 + 1;" (assignment_expression "pcVar3 = in_v1 + 1" (identifier "pcVar3") (= "=") (binary_expression "in_v1 + 1" (identifier "in_v1") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "in_v1 = pcVar3;" (assignment_expression "in_v1 = pcVar3" (identifier "in_v1") (= "=") (identifier "pcVar3")) (; ";")) (} "}"))) (} "}"))) (} "}"))) (} "}"))) (return_statement "return CONCAT44(1,in_v1);" (return "return") (call_expression "CONCAT44(1,in_v1)" (identifier "CONCAT44") (argument_list "(1,in_v1)" (( "(") (number_literal "1") (, ",") (identifier "in_v1") () ")"))) (; ";")) (} "}")))
(translation_unit (function_definition type: (type_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: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (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: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (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 (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (return_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) consequence: (compound_statement (return_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))))))))) (return_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier)))))))

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

{
  uint uVar1;
  int iVar2;
  char *in_v1;
  char *extraout_v1;
  char *pcVar3;
  int local_20 [2];
  
  if (*param_2 <= param_3) {
    (*(code *)PTR_read_leb128_000c33b4)(*param_2,local_20,0,param_3);
    uVar1 = *param_2;
    *param_2 = uVar1 + local_20[0];
    in_v1 = extraout_v1;
    if (uVar1 + local_20[0] <= param_3) {
      in_v1 = extraout_v1 + param_4;
      *param_1 = in_v1;
      if (in_v1 < param_5) {
        iVar2 = (int)*in_v1;
        if (iVar2 == 0) {
LAB_0001fce0:
          return ZEXT48(in_v1);
        }
        pcVar3 = in_v1;
        in_v1 = in_v1 + 1;
        while( true ) {
          if (0x5e < (iVar2 - 0x20U & 0xff)) {
            return CONCAT44(2,pcVar3);
          }
          if (param_5 == in_v1) break;
          iVar2 = (int)*in_v1;
          if (iVar2 == 0) goto LAB_0001fce0;
          pcVar3 = in_v1 + 1;
          in_v1 = pcVar3;
        }
      }
    }
  }
  return CONCAT44(1,in_v1);
}

