
dwarf_vma read_leb128(uchar *data,uint *length_return,bfd_boolean sign,uchar *end)

{
  bool bVar1;
  ulong uVar2;
  byte bVar3;
  uint uVar4;
  byte *pbVar5;
  byte bVar6;
  uint uVar7;
  
  if (data < end) {
    bVar6 = *data;
    uVar2 = (ulong)(bVar6 & 0x7f);
    if (-1 < (char)bVar6) {
      bVar1 = true;
      uVar4 = 7;
      uVar7 = 1;
      goto LAB_0011158d;
    }
    uVar4 = 7;
    uVar7 = 1;
    pbVar5 = data + 1;
    do {
      if (end == pbVar5) {
        bVar1 = true;
        goto LAB_0011158d;
      }
      bVar6 = *pbVar5;
      uVar7 = uVar7 + 1;
      bVar3 = (byte)uVar4;
      uVar4 = uVar4 + 7;
      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);
      if (-1 < (char)bVar6) {
        bVar1 = uVar4 < 0x40;
        goto LAB_0011158d;
      }
      pbVar5 = pbVar5 + 1;
    } while (uVar7 != 10);
    if (length_return == (uint *)0x0) {
      return uVar2;
    }
    bVar1 = uVar4 < 0x40;
  }
  else {
    bVar1 = true;
    bVar6 = 0;
    uVar4 = 0;
    uVar7 = 0;
    uVar2 = 0;
LAB_0011158d:
    bVar3 = (byte)uVar4;
    if (length_return == (uint *)0x0) goto LAB_0011155b;
  }
  bVar3 = (byte)uVar4;
  *length_return = uVar7;
LAB_0011155b:
  if (((sign != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {
    return uVar2 | -1L << (bVar3 & 0x3f);
  }
  return uVar2;
}



ulong FUN_001114f0(byte *param_1,int *param_2,int param_3,byte *param_4)

{
  bool bVar1;
  ulong uVar2;
  byte bVar3;
  uint uVar4;
  byte *pbVar5;
  byte bVar6;
  int iVar7;
  
  if (param_1 < param_4) {
    bVar6 = *param_1;
    uVar2 = (ulong)(bVar6 & 0x7f);
    if (-1 < (char)bVar6) {
      bVar1 = true;
      uVar4 = 7;
      iVar7 = 1;
      goto LAB_0011158d;
    }
    uVar4 = 7;
    iVar7 = 1;
    pbVar5 = param_1 + 1;
    do {
      if (param_4 == pbVar5) {
        bVar1 = true;
        goto LAB_0011158d;
      }
      bVar6 = *pbVar5;
      iVar7 = iVar7 + 1;
      bVar3 = (byte)uVar4;
      uVar4 = uVar4 + 7;
      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);
      if (-1 < (char)bVar6) {
        bVar1 = uVar4 < 0x40;
        goto LAB_0011158d;
      }
      pbVar5 = pbVar5 + 1;
    } while (iVar7 != 10);
    if (param_2 == (int *)0x0) {
      return uVar2;
    }
    bVar1 = uVar4 < 0x40;
  }
  else {
    bVar1 = true;
    bVar6 = 0;
    uVar4 = 0;
    iVar7 = 0;
    uVar2 = 0;
LAB_0011158d:
    bVar3 = (byte)uVar4;
    if (param_2 == (int *)0x0) goto LAB_0011155b;
  }
  bVar3 = (byte)uVar4;
  *param_2 = iVar7;
LAB_0011155b:
  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {
    return uVar2 | -1L << (bVar3 & 0x3f);
  }
  return uVar2;
}


MOV R11,RCX
CMP RDI,RCX
JNC 0x001115a1
MOVZX R9D,byte ptr [RDI]
LEA R8,[RDI + 0x1]
MOV RAX,R9
AND EAX,0x7f
TEST R9B,R9B
JNS 0x001115b2
MOV ECX,0x7
MOV R10D,0x1
NOP
CMP R11,R8
JZ 0x00111588
ADD R8,0x1
MOVZX R9D,byte ptr [R8 + -0x1]
ADD R10D,0x1
MOV RDI,R9
AND EDI,0x7f
SHL RDI,CL
ADD ECX,0x7
OR RAX,RDI
TEST R9B,R9B
JNS 0x00111598
CMP R10D,0xa
JNZ 0x00111520
TEST RSI,RSI
JZ 0x00111580
CMP ECX,0x3f
SETBE DIL
MOV dword ptr [RSI],R10D
TEST EDX,EDX
JZ 0x00111580
TEST DIL,DIL
JZ 0x00111580
AND R9D,0x40
JZ 0x00111580
MOV RDX,-0x1
SHL RDX,CL
OR RAX,RDX
RET
RET
MOV EDI,0x1
TEST RSI,RSI
JNZ 0x00111558
JMP 0x0011155b
CMP ECX,0x3f
SETBE DIL
JMP 0x0011158d
MOV EDI,0x1
XOR R9D,R9D
XOR ECX,ECX
XOR R10D,R10D
XOR EAX,EAX
JMP 0x0011158d
MOV EDI,0x1
MOV ECX,0x7
MOV R10D,0x1
JMP 0x0011158d
(translation_unit "ulong FUN_001114f0(byte *param_1,int *param_2,int param_3,byte *param_4)\n\n{\n  bool bVar1;\n  ulong uVar2;\n  byte bVar3;\n  uint uVar4;\n  byte *pbVar5;\n  byte bVar6;\n  int iVar7;\n  \n  if (param_1 < param_4) {\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }\n  bVar3 = (byte)uVar4;\n  *param_2 = iVar7;\nLAB_0011155b:\n  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }\n  return uVar2;\n}\n\n" (function_definition "ulong FUN_001114f0(byte *param_1,int *param_2,int param_3,byte *param_4)\n\n{\n  bool bVar1;\n  ulong uVar2;\n  byte bVar3;\n  uint uVar4;\n  byte *pbVar5;\n  byte bVar6;\n  int iVar7;\n  \n  if (param_1 < param_4) {\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }\n  bVar3 = (byte)uVar4;\n  *param_2 = iVar7;\nLAB_0011155b:\n  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }\n  return uVar2;\n}" type_identifier (function_declarator "FUN_001114f0(byte *param_1,int *param_2,int param_3,byte *param_4)" identifier (parameter_list "(byte *param_1,int *param_2,int param_3,byte *param_4)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "byte *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  ulong uVar2;\n  byte bVar3;\n  uint uVar4;\n  byte *pbVar5;\n  byte bVar6;\n  int iVar7;\n  \n  if (param_1 < param_4) {\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }\n  bVar3 = (byte)uVar4;\n  *param_2 = iVar7;\nLAB_0011155b:\n  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }\n  return uVar2;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "byte bVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (if_statement "if (param_1 < param_4) {\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }" if (parenthesized_expression "(param_1 < param_4)" ( (binary_expression "param_1 < param_4" identifier < identifier) )) (compound_statement "{\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }" { (expression_statement "bVar6 = *param_1;" (assignment_expression "bVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar2 = (ulong)(bVar6 & 0x7f);" (assignment_expression "uVar2 = (ulong)(bVar6 & 0x7f)" identifier = (call_expression "(ulong)(bVar6 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar6 & 0x7f)" ( (binary_expression "bVar6 & 0x7f" identifier & number_literal) )))) ;) (if_statement "if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }" if (parenthesized_expression "(-1 < (char)bVar6)" ( (binary_expression "-1 < (char)bVar6" number_literal < (cast_expression "(char)bVar6" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "uVar4 = 7;" (assignment_expression "uVar4 = 7" identifier = number_literal) ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_0011158d;" goto statement_identifier ;) })) (expression_statement "uVar4 = 7;" (assignment_expression "uVar4 = 7" identifier = number_literal) ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (expression_statement "pbVar5 = param_1 + 1;" (assignment_expression "pbVar5 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (do_statement "do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);" do (compound_statement "{\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    }" { (if_statement "if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }" if (parenthesized_expression "(param_4 == pbVar5)" ( (binary_expression "param_4 == pbVar5" identifier == identifier) )) (compound_statement "{\n        bVar1 = true;\n        goto LAB_0011158d;\n      }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (goto_statement "goto LAB_0011158d;" goto statement_identifier ;) })) (expression_statement "bVar6 = *pbVar5;" (assignment_expression "bVar6 = *pbVar5" identifier = (pointer_expression "*pbVar5" * identifier)) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" identifier = (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "uVar4 = uVar4 + 7;" (assignment_expression "uVar4 = uVar4 + 7" identifier = (binary_expression "uVar4 + 7" identifier + number_literal)) ;) (expression_statement "uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);" (assignment_expression "uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" identifier = (binary_expression "uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" identifier | (binary_expression "(ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" (call_expression "(ulong)(bVar6 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar6 & 0x7f)" ( (binary_expression "bVar6 & 0x7f" identifier & number_literal) ))) << (parenthesized_expression "(bVar3 & 0x3f)" ( (binary_expression "bVar3 & 0x3f" identifier & number_literal) ))))) ;) (if_statement "if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }" if (parenthesized_expression "(-1 < (char)bVar6)" ( (binary_expression "-1 < (char)bVar6" number_literal < (cast_expression "(char)bVar6" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }" { (expression_statement "bVar1 = uVar4 < 0x40;" (assignment_expression "bVar1 = uVar4 < 0x40" identifier = (binary_expression "uVar4 < 0x40" identifier < number_literal)) ;) (goto_statement "goto LAB_0011158d;" goto statement_identifier ;) })) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 10)" ( (binary_expression "iVar7 != 10" identifier != number_literal) )) ;) (if_statement "if (param_2 == (int *)0x0) {\n      return uVar2;\n    }" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return uVar2;\n    }" { (return_statement "return uVar2;" return identifier ;) })) (expression_statement "bVar1 = uVar4 < 0x40;" (assignment_expression "bVar1 = uVar4 < 0x40" identifier = (binary_expression "uVar4 < 0x40" identifier < number_literal)) ;) }) (else_clause "else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }" else (compound_statement "{\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0011158d:\n    bVar3 = (byte)uVar4;" statement_identifier : (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" identifier = (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;)) (if_statement "if (param_2 == (int *)0x0) goto LAB_0011155b;" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0011155b;" goto statement_identifier ;)) }))) (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" identifier = (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "*param_2 = iVar7;" (assignment_expression "*param_2 = iVar7" (pointer_expression "*param_2" * identifier) = identifier) ;) (labeled_statement "LAB_0011155b:\n  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" statement_identifier : (if_statement "if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" if (parenthesized_expression "(((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0))" ( (binary_expression "((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)" (parenthesized_expression "((param_3 != 0) && (bVar1))" ( (binary_expression "(param_3 != 0) && (bVar1)" (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) && (parenthesized_expression "(bVar1)" ( identifier ))) )) && (parenthesized_expression "((bVar6 & 0x40) != 0)" ( (binary_expression "(bVar6 & 0x40) != 0" (parenthesized_expression "(bVar6 & 0x40)" ( (binary_expression "bVar6 & 0x40" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" { (return_statement "return uVar2 | -1L << (bVar3 & 0x3f);" return (binary_expression "uVar2 | -1L << (bVar3 & 0x3f)" identifier | (binary_expression "-1L << (bVar3 & 0x3f)" number_literal << (parenthesized_expression "(bVar3 & 0x3f)" ( (binary_expression "bVar3 & 0x3f" identifier & number_literal) )))) ;) }))) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "dwarf_vma read_leb128(uchar *data,uint *length_return,bfd_boolean sign,uchar *end)\n\n{\n  bool bVar1;\n  ulong uVar2;\n  byte bVar3;\n  uint uVar4;\n  byte *pbVar5;\n  byte bVar6;\n  uint uVar7;\n  \n  if (data < end) {\n    bVar6 = *data;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      uVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    uVar7 = 1;\n    pbVar5 = data + 1;\n    do {\n      if (end == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      uVar7 = uVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (uVar7 != 10);\n    if (length_return == (uint *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    uVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (length_return == (uint *)0x0) goto LAB_0011155b;\n  }\n  bVar3 = (byte)uVar4;\n  *length_return = uVar7;\nLAB_0011155b:\n  if (((sign != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }\n  return uVar2;\n}\n\n" (function_definition "dwarf_vma read_leb128(uchar *data,uint *length_return,bfd_boolean sign,uchar *end)\n\n{\n  bool bVar1;\n  ulong uVar2;\n  byte bVar3;\n  uint uVar4;\n  byte *pbVar5;\n  byte bVar6;\n  uint uVar7;\n  \n  if (data < end) {\n    bVar6 = *data;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      uVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    uVar7 = 1;\n    pbVar5 = data + 1;\n    do {\n      if (end == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      uVar7 = uVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (uVar7 != 10);\n    if (length_return == (uint *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    uVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (length_return == (uint *)0x0) goto LAB_0011155b;\n  }\n  bVar3 = (byte)uVar4;\n  *length_return = uVar7;\nLAB_0011155b:\n  if (((sign != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }\n  return uVar2;\n}" type_identifier (function_declarator "read_leb128(uchar *data,uint *length_return,bfd_boolean sign,uchar *end)" identifier (parameter_list "(uchar *data,uint *length_return,bfd_boolean sign,uchar *end)" ( (parameter_declaration "uchar *data" type_identifier (pointer_declarator "*data" * identifier)) , (parameter_declaration "uint *length_return" type_identifier (pointer_declarator "*length_return" * identifier)) , (parameter_declaration "bfd_boolean sign" type_identifier identifier) , (parameter_declaration "uchar *end" type_identifier (pointer_declarator "*end" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  ulong uVar2;\n  byte bVar3;\n  uint uVar4;\n  byte *pbVar5;\n  byte bVar6;\n  uint uVar7;\n  \n  if (data < end) {\n    bVar6 = *data;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      uVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    uVar7 = 1;\n    pbVar5 = data + 1;\n    do {\n      if (end == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      uVar7 = uVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (uVar7 != 10);\n    if (length_return == (uint *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    uVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (length_return == (uint *)0x0) goto LAB_0011155b;\n  }\n  bVar3 = (byte)uVar4;\n  *length_return = uVar7;\nLAB_0011155b:\n  if (((sign != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }\n  return uVar2;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "byte bVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (if_statement "if (data < end) {\n    bVar6 = *data;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      uVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    uVar7 = 1;\n    pbVar5 = data + 1;\n    do {\n      if (end == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      uVar7 = uVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (uVar7 != 10);\n    if (length_return == (uint *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    uVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (length_return == (uint *)0x0) goto LAB_0011155b;\n  }" if (parenthesized_expression "(data < end)" ( (binary_expression "data < end" identifier < identifier) )) (compound_statement "{\n    bVar6 = *data;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      uVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    uVar7 = 1;\n    pbVar5 = data + 1;\n    do {\n      if (end == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      uVar7 = uVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (uVar7 != 10);\n    if (length_return == (uint *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }" { (expression_statement "bVar6 = *data;" (assignment_expression "bVar6 = *data" identifier = (pointer_expression "*data" * identifier)) ;) (expression_statement "uVar2 = (ulong)(bVar6 & 0x7f);" (assignment_expression "uVar2 = (ulong)(bVar6 & 0x7f)" identifier = (call_expression "(ulong)(bVar6 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar6 & 0x7f)" ( (binary_expression "bVar6 & 0x7f" identifier & number_literal) )))) ;) (if_statement "if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      uVar7 = 1;\n      goto LAB_0011158d;\n    }" if (parenthesized_expression "(-1 < (char)bVar6)" ( (binary_expression "-1 < (char)bVar6" number_literal < (cast_expression "(char)bVar6" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n      bVar1 = true;\n      uVar4 = 7;\n      uVar7 = 1;\n      goto LAB_0011158d;\n    }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "uVar4 = 7;" (assignment_expression "uVar4 = 7" identifier = number_literal) ;) (expression_statement "uVar7 = 1;" (assignment_expression "uVar7 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_0011158d;" goto statement_identifier ;) })) (expression_statement "uVar4 = 7;" (assignment_expression "uVar4 = 7" identifier = number_literal) ;) (expression_statement "uVar7 = 1;" (assignment_expression "uVar7 = 1" identifier = number_literal) ;) (expression_statement "pbVar5 = data + 1;" (assignment_expression "pbVar5 = data + 1" identifier = (binary_expression "data + 1" identifier + number_literal)) ;) (do_statement "do {\n      if (end == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      uVar7 = uVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (uVar7 != 10);" do (compound_statement "{\n      if (end == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      uVar7 = uVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    }" { (if_statement "if (end == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }" if (parenthesized_expression "(end == pbVar5)" ( (binary_expression "end == pbVar5" identifier == identifier) )) (compound_statement "{\n        bVar1 = true;\n        goto LAB_0011158d;\n      }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (goto_statement "goto LAB_0011158d;" goto statement_identifier ;) })) (expression_statement "bVar6 = *pbVar5;" (assignment_expression "bVar6 = *pbVar5" identifier = (pointer_expression "*pbVar5" * identifier)) ;) (expression_statement "uVar7 = uVar7 + 1;" (assignment_expression "uVar7 = uVar7 + 1" identifier = (binary_expression "uVar7 + 1" identifier + number_literal)) ;) (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" identifier = (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "uVar4 = uVar4 + 7;" (assignment_expression "uVar4 = uVar4 + 7" identifier = (binary_expression "uVar4 + 7" identifier + number_literal)) ;) (expression_statement "uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);" (assignment_expression "uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" identifier = (binary_expression "uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" identifier | (binary_expression "(ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" (call_expression "(ulong)(bVar6 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar6 & 0x7f)" ( (binary_expression "bVar6 & 0x7f" identifier & number_literal) ))) << (parenthesized_expression "(bVar3 & 0x3f)" ( (binary_expression "bVar3 & 0x3f" identifier & number_literal) ))))) ;) (if_statement "if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }" if (parenthesized_expression "(-1 < (char)bVar6)" ( (binary_expression "-1 < (char)bVar6" number_literal < (cast_expression "(char)bVar6" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }" { (expression_statement "bVar1 = uVar4 < 0x40;" (assignment_expression "bVar1 = uVar4 < 0x40" identifier = (binary_expression "uVar4 < 0x40" identifier < number_literal)) ;) (goto_statement "goto LAB_0011158d;" goto statement_identifier ;) })) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar7 != 10)" ( (binary_expression "uVar7 != 10" identifier != number_literal) )) ;) (if_statement "if (length_return == (uint *)0x0) {\n      return uVar2;\n    }" if (parenthesized_expression "(length_return == (uint *)0x0)" ( (binary_expression "length_return == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return uVar2;\n    }" { (return_statement "return uVar2;" return identifier ;) })) (expression_statement "bVar1 = uVar4 < 0x40;" (assignment_expression "bVar1 = uVar4 < 0x40" identifier = (binary_expression "uVar4 < 0x40" identifier < number_literal)) ;) }) (else_clause "else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    uVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (length_return == (uint *)0x0) goto LAB_0011155b;\n  }" else (compound_statement "{\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    uVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (length_return == (uint *)0x0) goto LAB_0011155b;\n  }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0011158d:\n    bVar3 = (byte)uVar4;" statement_identifier : (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" identifier = (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;)) (if_statement "if (length_return == (uint *)0x0) goto LAB_0011155b;" if (parenthesized_expression "(length_return == (uint *)0x0)" ( (binary_expression "length_return == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0011155b;" goto statement_identifier ;)) }))) (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" identifier = (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "*length_return = uVar7;" (assignment_expression "*length_return = uVar7" (pointer_expression "*length_return" * identifier) = identifier) ;) (labeled_statement "LAB_0011155b:\n  if (((sign != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" statement_identifier : (if_statement "if (((sign != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" if (parenthesized_expression "(((sign != 0) && (bVar1)) && ((bVar6 & 0x40) != 0))" ( (binary_expression "((sign != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)" (parenthesized_expression "((sign != 0) && (bVar1))" ( (binary_expression "(sign != 0) && (bVar1)" (parenthesized_expression "(sign != 0)" ( (binary_expression "sign != 0" identifier != number_literal) )) && (parenthesized_expression "(bVar1)" ( identifier ))) )) && (parenthesized_expression "((bVar6 & 0x40) != 0)" ( (binary_expression "(bVar6 & 0x40) != 0" (parenthesized_expression "(bVar6 & 0x40)" ( (binary_expression "bVar6 & 0x40" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" { (return_statement "return uVar2 | -1L << (bVar3 & 0x3f);" return (binary_expression "uVar2 | -1L << (bVar3 & 0x3f)" identifier | (binary_expression "-1L << (bVar3 & 0x3f)" number_literal << (parenthesized_expression "(bVar3 & 0x3f)" ( (binary_expression "bVar3 & 0x3f" identifier & number_literal) )))) ;) }))) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "ulong FUN_001114f0(byte *param_1,int *param_2,int param_3,byte *param_4)\n\n{\n  bool bVar1;\n  ulong uVar2;\n  byte bVar3;\n  uint uVar4;\n  byte *pbVar5;\n  byte bVar6;\n  int iVar7;\n  \n  if (param_1 < param_4) {\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }\n  bVar3 = (byte)uVar4;\n  *param_2 = iVar7;\nLAB_0011155b:\n  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }\n  return uVar2;\n}\n\n" (function_definition "ulong FUN_001114f0(byte *param_1,int *param_2,int param_3,byte *param_4)\n\n{\n  bool bVar1;\n  ulong uVar2;\n  byte bVar3;\n  uint uVar4;\n  byte *pbVar5;\n  byte bVar6;\n  int iVar7;\n  \n  if (param_1 < param_4) {\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }\n  bVar3 = (byte)uVar4;\n  *param_2 = iVar7;\nLAB_0011155b:\n  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }\n  return uVar2;\n}" type_identifier (function_declarator "FUN_001114f0(byte *param_1,int *param_2,int param_3,byte *param_4)" identifier (parameter_list "(byte *param_1,int *param_2,int param_3,byte *param_4)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "byte *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  ulong uVar2;\n  byte bVar3;\n  uint uVar4;\n  byte *pbVar5;\n  byte bVar6;\n  int iVar7;\n  \n  if (param_1 < param_4) {\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }\n  bVar3 = (byte)uVar4;\n  *param_2 = iVar7;\nLAB_0011155b:\n  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }\n  return uVar2;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "byte bVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (if_statement "if (param_1 < param_4) {\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }" if (parenthesized_expression "(param_1 < param_4)" ( (binary_expression "param_1 < param_4" identifier < identifier) )) (compound_statement "{\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }" { (expression_statement "bVar6 = *param_1;" (assignment_expression "bVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar2 = (ulong)(bVar6 & 0x7f);" (assignment_expression "uVar2 = (ulong)(bVar6 & 0x7f)" identifier = (call_expression "(ulong)(bVar6 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar6 & 0x7f)" ( (binary_expression "bVar6 & 0x7f" identifier & number_literal) )))) ;) (if_statement "if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }" if (parenthesized_expression "(-1 < (char)bVar6)" ( (binary_expression "-1 < (char)bVar6" number_literal < (cast_expression "(char)bVar6" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "uVar4 = 7;" (assignment_expression "uVar4 = 7" identifier = number_literal) ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_0011158d;" goto statement_identifier ;) })) (expression_statement "uVar4 = 7;" (assignment_expression "uVar4 = 7" identifier = number_literal) ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (expression_statement "pbVar5 = param_1 + 1;" (assignment_expression "pbVar5 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (do_statement "do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);" do (compound_statement "{\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    }" { (if_statement "if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }" if (parenthesized_expression "(param_4 == pbVar5)" ( (binary_expression "param_4 == pbVar5" identifier == identifier) )) (compound_statement "{\n        bVar1 = true;\n        goto LAB_0011158d;\n      }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (goto_statement "goto LAB_0011158d;" goto statement_identifier ;) })) (expression_statement "bVar6 = *pbVar5;" (assignment_expression "bVar6 = *pbVar5" identifier = (pointer_expression "*pbVar5" * identifier)) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" identifier = (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "uVar4 = uVar4 + 7;" (assignment_expression "uVar4 = uVar4 + 7" identifier = (binary_expression "uVar4 + 7" identifier + number_literal)) ;) (expression_statement "uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);" (assignment_expression "uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" identifier = (binary_expression "uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" identifier | (binary_expression "(ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" (call_expression "(ulong)(bVar6 & 0x7f)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(bVar6 & 0x7f)" ( (binary_expression "bVar6 & 0x7f" identifier & number_literal) ))) << (parenthesized_expression "(bVar3 & 0x3f)" ( (binary_expression "bVar3 & 0x3f" identifier & number_literal) ))))) ;) (if_statement "if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }" if (parenthesized_expression "(-1 < (char)bVar6)" ( (binary_expression "-1 < (char)bVar6" number_literal < (cast_expression "(char)bVar6" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }" { (expression_statement "bVar1 = uVar4 < 0x40;" (assignment_expression "bVar1 = uVar4 < 0x40" identifier = (binary_expression "uVar4 < 0x40" identifier < number_literal)) ;) (goto_statement "goto LAB_0011158d;" goto statement_identifier ;) })) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != 10)" ( (binary_expression "iVar7 != 10" identifier != number_literal) )) ;) (if_statement "if (param_2 == (int *)0x0) {\n      return uVar2;\n    }" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return uVar2;\n    }" { (return_statement "return uVar2;" return identifier ;) })) (expression_statement "bVar1 = uVar4 < 0x40;" (assignment_expression "bVar1 = uVar4 < 0x40" identifier = (binary_expression "uVar4 < 0x40" identifier < number_literal)) ;) }) (else_clause "else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }" else (compound_statement "{\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0011158d:\n    bVar3 = (byte)uVar4;" statement_identifier : (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" identifier = (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;)) (if_statement "if (param_2 == (int *)0x0) goto LAB_0011155b;" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0011155b;" goto statement_identifier ;)) }))) (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" identifier = (cast_expression "(byte)uVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "*param_2 = iVar7;" (assignment_expression "*param_2 = iVar7" (pointer_expression "*param_2" * identifier) = identifier) ;) (labeled_statement "LAB_0011155b:\n  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" statement_identifier : (if_statement "if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" if (parenthesized_expression "(((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0))" ( (binary_expression "((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)" (parenthesized_expression "((param_3 != 0) && (bVar1))" ( (binary_expression "(param_3 != 0) && (bVar1)" (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) && (parenthesized_expression "(bVar1)" ( identifier ))) )) && (parenthesized_expression "((bVar6 & 0x40) != 0)" ( (binary_expression "(bVar6 & 0x40) != 0" (parenthesized_expression "(bVar6 & 0x40)" ( (binary_expression "bVar6 & 0x40" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" { (return_statement "return uVar2 | -1L << (bVar3 & 0x3f);" return (binary_expression "uVar2 | -1L << (bVar3 & 0x3f)" identifier | (binary_expression "-1L << (bVar3 & 0x3f)" number_literal << (parenthesized_expression "(bVar3 & 0x3f)" ( (binary_expression "bVar3 & 0x3f" identifier & number_literal) )))) ;) }))) (return_statement "return uVar2;" return 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 (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT & LIT) ))) << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT < LIT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( IDENT ))) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) (compound_statement { (return_statement return (binary_expression IDENT | (binary_expression LIT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "ulong FUN_001114f0(byte *param_1,int *param_2,int param_3,byte *param_4)\n\n{\n  bool bVar1;\n  ulong uVar2;\n  byte bVar3;\n  uint uVar4;\n  byte *pbVar5;\n  byte bVar6;\n  int iVar7;\n  \n  if (param_1 < param_4) {\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }\n  bVar3 = (byte)uVar4;\n  *param_2 = iVar7;\nLAB_0011155b:\n  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }\n  return uVar2;\n}" (type_identifier "ulong") (function_declarator "FUN_001114f0(byte *param_1,int *param_2,int param_3,byte *param_4)" (identifier "FUN_001114f0") (parameter_list "(byte *param_1,int *param_2,int param_3,byte *param_4)" (( "(") (parameter_declaration "byte *param_1" (type_identifier "byte") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "byte *param_4" (type_identifier "byte") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  bool bVar1;\n  ulong uVar2;\n  byte bVar3;\n  uint uVar4;\n  byte *pbVar5;\n  byte bVar6;\n  int iVar7;\n  \n  if (param_1 < param_4) {\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }\n  bVar3 = (byte)uVar4;\n  *param_2 = iVar7;\nLAB_0011155b:\n  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }\n  return uVar2;\n}" ({ "{") (declaration "bool bVar1;" (primitive_type "bool") (identifier "bVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "byte *pbVar5;" (type_identifier "byte") (pointer_declarator "*pbVar5" (* "*") (identifier "pbVar5")) (; ";")) (declaration "byte bVar6;" (type_identifier "byte") (identifier "bVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (if_statement "if (param_1 < param_4) {\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }\n  else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }" (if "if") (parenthesized_expression "(param_1 < param_4)" (( "(") (binary_expression "param_1 < param_4" (identifier "param_1") (< "<") (identifier "param_4")) () ")")) (compound_statement "{\n    bVar6 = *param_1;\n    uVar2 = (ulong)(bVar6 & 0x7f);\n    if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }\n    uVar4 = 7;\n    iVar7 = 1;\n    pbVar5 = param_1 + 1;\n    do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);\n    if (param_2 == (int *)0x0) {\n      return uVar2;\n    }\n    bVar1 = uVar4 < 0x40;\n  }" ({ "{") (expression_statement "bVar6 = *param_1;" (assignment_expression "bVar6 = *param_1" (identifier "bVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar2 = (ulong)(bVar6 & 0x7f);" (assignment_expression "uVar2 = (ulong)(bVar6 & 0x7f)" (identifier "uVar2") (= "=") (call_expression "(ulong)(bVar6 & 0x7f)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(bVar6 & 0x7f)" (( "(") (binary_expression "bVar6 & 0x7f" (identifier "bVar6") (& "&") (number_literal "0x7f")) () ")")))) (; ";")) (if_statement "if (-1 < (char)bVar6) {\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }" (if "if") (parenthesized_expression "(-1 < (char)bVar6)" (( "(") (binary_expression "-1 < (char)bVar6" (number_literal "-1") (< "<") (cast_expression "(char)bVar6" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar6"))) () ")")) (compound_statement "{\n      bVar1 = true;\n      uVar4 = 7;\n      iVar7 = 1;\n      goto LAB_0011158d;\n    }" ({ "{") (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" (identifier "bVar1") (= "=") (true "true")) (; ";")) (expression_statement "uVar4 = 7;" (assignment_expression "uVar4 = 7" (identifier "uVar4") (= "=") (number_literal "7")) (; ";")) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" (identifier "iVar7") (= "=") (number_literal "1")) (; ";")) (goto_statement "goto LAB_0011158d;" (goto "goto") (statement_identifier "LAB_0011158d") (; ";")) (} "}"))) (expression_statement "uVar4 = 7;" (assignment_expression "uVar4 = 7" (identifier "uVar4") (= "=") (number_literal "7")) (; ";")) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" (identifier "iVar7") (= "=") (number_literal "1")) (; ";")) (expression_statement "pbVar5 = param_1 + 1;" (assignment_expression "pbVar5 = param_1 + 1" (identifier "pbVar5") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (do_statement "do {\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    } while (iVar7 != 10);" (do "do") (compound_statement "{\n      if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }\n      bVar6 = *pbVar5;\n      iVar7 = iVar7 + 1;\n      bVar3 = (byte)uVar4;\n      uVar4 = uVar4 + 7;\n      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);\n      if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }\n      pbVar5 = pbVar5 + 1;\n    }" ({ "{") (if_statement "if (param_4 == pbVar5) {\n        bVar1 = true;\n        goto LAB_0011158d;\n      }" (if "if") (parenthesized_expression "(param_4 == pbVar5)" (( "(") (binary_expression "param_4 == pbVar5" (identifier "param_4") (== "==") (identifier "pbVar5")) () ")")) (compound_statement "{\n        bVar1 = true;\n        goto LAB_0011158d;\n      }" ({ "{") (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" (identifier "bVar1") (= "=") (true "true")) (; ";")) (goto_statement "goto LAB_0011158d;" (goto "goto") (statement_identifier "LAB_0011158d") (; ";")) (} "}"))) (expression_statement "bVar6 = *pbVar5;" (assignment_expression "bVar6 = *pbVar5" (identifier "bVar6") (= "=") (pointer_expression "*pbVar5" (* "*") (identifier "pbVar5"))) (; ";")) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" (identifier "bVar3") (= "=") (cast_expression "(byte)uVar4" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar4"))) (; ";")) (expression_statement "uVar4 = uVar4 + 7;" (assignment_expression "uVar4 = uVar4 + 7" (identifier "uVar4") (= "=") (binary_expression "uVar4 + 7" (identifier "uVar4") (+ "+") (number_literal "7"))) (; ";")) (expression_statement "uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);" (assignment_expression "uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" (identifier "uVar2") (= "=") (binary_expression "uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" (identifier "uVar2") (| "|") (binary_expression "(ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f)" (call_expression "(ulong)(bVar6 & 0x7f)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(bVar6 & 0x7f)" (( "(") (binary_expression "bVar6 & 0x7f" (identifier "bVar6") (& "&") (number_literal "0x7f")) () ")"))) (<< "<<") (parenthesized_expression "(bVar3 & 0x3f)" (( "(") (binary_expression "bVar3 & 0x3f" (identifier "bVar3") (& "&") (number_literal "0x3f")) () ")"))))) (; ";")) (if_statement "if (-1 < (char)bVar6) {\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }" (if "if") (parenthesized_expression "(-1 < (char)bVar6)" (( "(") (binary_expression "-1 < (char)bVar6" (number_literal "-1") (< "<") (cast_expression "(char)bVar6" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar6"))) () ")")) (compound_statement "{\n        bVar1 = uVar4 < 0x40;\n        goto LAB_0011158d;\n      }" ({ "{") (expression_statement "bVar1 = uVar4 < 0x40;" (assignment_expression "bVar1 = uVar4 < 0x40" (identifier "bVar1") (= "=") (binary_expression "uVar4 < 0x40" (identifier "uVar4") (< "<") (number_literal "0x40"))) (; ";")) (goto_statement "goto LAB_0011158d;" (goto "goto") (statement_identifier "LAB_0011158d") (; ";")) (} "}"))) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" (identifier "pbVar5") (= "=") (binary_expression "pbVar5 + 1" (identifier "pbVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 != 10)" (( "(") (binary_expression "iVar7 != 10" (identifier "iVar7") (!= "!=") (number_literal "10")) () ")")) (; ";")) (if_statement "if (param_2 == (int *)0x0) {\n      return uVar2;\n    }" (if "if") (parenthesized_expression "(param_2 == (int *)0x0)" (( "(") (binary_expression "param_2 == (int *)0x0" (identifier "param_2") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return uVar2;\n    }" ({ "{") (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}"))) (expression_statement "bVar1 = uVar4 < 0x40;" (assignment_expression "bVar1 = uVar4 < 0x40" (identifier "bVar1") (= "=") (binary_expression "uVar4 < 0x40" (identifier "uVar4") (< "<") (number_literal "0x40"))) (; ";")) (} "}")) (else_clause "else {\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }" (else "else") (compound_statement "{\n    bVar1 = true;\n    bVar6 = 0;\n    uVar4 = 0;\n    iVar7 = 0;\n    uVar2 = 0;\nLAB_0011158d:\n    bVar3 = (byte)uVar4;\n    if (param_2 == (int *)0x0) goto LAB_0011155b;\n  }" ({ "{") (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" (identifier "bVar1") (= "=") (true "true")) (; ";")) (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" (identifier "bVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" (identifier "uVar2") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_0011158d:\n    bVar3 = (byte)uVar4;" (statement_identifier "LAB_0011158d") (: ":") (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" (identifier "bVar3") (= "=") (cast_expression "(byte)uVar4" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar4"))) (; ";"))) (if_statement "if (param_2 == (int *)0x0) goto LAB_0011155b;" (if "if") (parenthesized_expression "(param_2 == (int *)0x0)" (( "(") (binary_expression "param_2 == (int *)0x0" (identifier "param_2") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_0011155b;" (goto "goto") (statement_identifier "LAB_0011155b") (; ";"))) (} "}")))) (expression_statement "bVar3 = (byte)uVar4;" (assignment_expression "bVar3 = (byte)uVar4" (identifier "bVar3") (= "=") (cast_expression "(byte)uVar4" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar4"))) (; ";")) (expression_statement "*param_2 = iVar7;" (assignment_expression "*param_2 = iVar7" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (identifier "iVar7")) (; ";")) (labeled_statement "LAB_0011155b:\n  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" (statement_identifier "LAB_0011155b") (: ":") (if_statement "if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" (if "if") (parenthesized_expression "(((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0))" (( "(") (binary_expression "((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)" (parenthesized_expression "((param_3 != 0) && (bVar1))" (( "(") (binary_expression "(param_3 != 0) && (bVar1)" (parenthesized_expression "(param_3 != 0)" (( "(") (binary_expression "param_3 != 0" (identifier "param_3") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(bVar1)" (( "(") (identifier "bVar1") () ")"))) () ")")) (&& "&&") (parenthesized_expression "((bVar6 & 0x40) != 0)" (( "(") (binary_expression "(bVar6 & 0x40) != 0" (parenthesized_expression "(bVar6 & 0x40)" (( "(") (binary_expression "bVar6 & 0x40" (identifier "bVar6") (& "&") (number_literal "0x40")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    return uVar2 | -1L << (bVar3 & 0x3f);\n  }" ({ "{") (return_statement "return uVar2 | -1L << (bVar3 & 0x3f);" (return "return") (binary_expression "uVar2 | -1L << (bVar3 & 0x3f)" (identifier "uVar2") (| "|") (binary_expression "-1L << (bVar3 & 0x3f)" (number_literal "-1L") (<< "<<") (parenthesized_expression "(bVar3 & 0x3f)" (( "(") (binary_expression "bVar3 & 0x3f" (identifier "bVar3") (& "&") (number_literal "0x3f")) () ")")))) (; ";")) (} "}")))) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}")))

type_1 function_1(type_2 *var_1,type_3 *var_9,type_4 var_10,type_2 *var_2)

{
  bool bVar1;
  type_5 var_7;
  type_6 var_8;
  type_3 var_6;
  type_6 *var_4;
  type_6 var_3;
  type_3 var_5;
  
  if (var_1 < var_2) {
    var_3 = *var_1;
    var_7 = (type_5)(var_3 & 0x7f);
    if (-1 < (char)var_3) {
      bVar1 = true;
      var_6 = 7;
      var_5 = 1;
      goto LAB_0011158d;
    }
    var_6 = 7;
    var_5 = 1;
    var_4 = var_1 + 1;
    do {
      if (var_2 == var_4) {
        bVar1 = true;
        goto LAB_0011158d;
      }
      var_3 = *var_4;
      var_5 = var_5 + 1;
      var_8 = (type_6)var_6;
      var_6 = var_6 + 7;
      var_7 = var_7 | (type_5)(var_3 & 0x7f) << (var_8 & 0x3f);
      if (-1 < (char)var_3) {
        bVar1 = var_6 < 0x40;
        goto LAB_0011158d;
      }
      var_4 = var_4 + 1;
    } while (var_5 != 10);
    if (var_9 == (type_3 *)0x0) {
      return var_7;
    }
    bVar1 = var_6 < 0x40;
  }
  else {
    bVar1 = true;
    var_3 = 0;
    var_6 = 0;
    var_5 = 0;
    var_7 = 0;
LAB_0011158d:
    var_8 = (type_6)var_6;
    if (var_9 == (type_3 *)0x0) goto LAB_0011155b;
  }
  var_8 = (type_6)var_6;
  *var_9 = var_5;
LAB_0011155b:
  if (((var_10 != 0) && (bVar1)) && ((var_3 & 0x40) != 0)) {
    return var_7 | -1L << (var_8 & 0x3f);
  }
  return var_7;
}


(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: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (true))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (true))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (true))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (identifier)))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) consequence: (compound_statement (return_statement (binary_expression left: (identifier) right: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (return_statement (identifier)))))

ulong MASKED(byte *param_1,int *param_2,int param_3,byte *param_4)

{
  bool bVar1;
  ulong uVar2;
  byte bVar3;
  uint uVar4;
  byte *pbVar5;
  byte bVar6;
  int iVar7;
  
  if (param_1 < param_4) {
    bVar6 = *param_1;
    uVar2 = (ulong)(bVar6 & 0x7f);
    if (-1 < (char)bVar6) {
      bVar1 = true;
      uVar4 = 7;
      iVar7 = 1;
      goto LAB_0011158d;
    }
    uVar4 = 7;
    iVar7 = 1;
    pbVar5 = param_1 + 1;
    do {
      if (param_4 == pbVar5) {
        bVar1 = true;
        goto LAB_0011158d;
      }
      bVar6 = *pbVar5;
      iVar7 = iVar7 + 1;
      bVar3 = (byte)uVar4;
      uVar4 = uVar4 + 7;
      uVar2 = uVar2 | (ulong)(bVar6 & 0x7f) << (bVar3 & 0x3f);
      if (-1 < (char)bVar6) {
        bVar1 = uVar4 < 0x40;
        goto LAB_0011158d;
      }
      pbVar5 = pbVar5 + 1;
    } while (iVar7 != 10);
    if (param_2 == (int *)0x0) {
      return uVar2;
    }
    bVar1 = uVar4 < 0x40;
  }
  else {
    bVar1 = true;
    bVar6 = 0;
    uVar4 = 0;
    iVar7 = 0;
    uVar2 = 0;
LAB_0011158d:
    bVar3 = (byte)uVar4;
    if (param_2 == (int *)0x0) goto LAB_0011155b;
  }
  bVar3 = (byte)uVar4;
  *param_2 = iVar7;
LAB_0011155b:
  if (((param_3 != 0) && (bVar1)) && ((bVar6 & 0x40) != 0)) {
    return uVar2 | -1L << (bVar3 & 0x3f);
  }
  return uVar2;
}

