
long __cxa_begin_catch(long *param_1)

{
  long *plVar1;
  long *plVar2;
  int iVar3;
  long *plVar4;
  
  plVar4 = (long *)__cxa_get_globals();
  plVar1 = param_1 + -10;
  plVar2 = (long *)*plVar4;
  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {
    iVar3 = (int)param_1[-5];
    if (iVar3 < 0) {
      iVar3 = -iVar3;
    }
    *(int *)(param_1 + -5) = iVar3 + 1;
    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;
    if (plVar2 != plVar1) {
      param_1[-6] = (long)plVar2;
      *plVar4 = (long)plVar1;
    }
    return param_1[-1];
  }
  if (plVar2 == (long *)0x0) {
    *plVar4 = (long)plVar1;
    return 0;
  }
                    /* WARNING: Subroutine does not return */
  std::terminate();
}



long FUN_002da4e0(long *param_1)

{
  long *plVar1;
  long *plVar2;
  int iVar3;
  long *plVar4;
  
  plVar4 = (long *)FUN_002da380();
  plVar1 = param_1 + -10;
  plVar2 = (long *)*plVar4;
  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {
    iVar3 = (int)param_1[-5];
    if (iVar3 < 0) {
      iVar3 = -iVar3;
    }
    *(int *)(param_1 + -5) = iVar3 + 1;
    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;
    if (plVar2 != plVar1) {
      param_1[-6] = (long)plVar2;
      *plVar4 = (long)plVar1;
    }
    return param_1[-1];
  }
  if (plVar2 == (long *)0x0) {
    *plVar4 = (long)plVar1;
    return 0;
  }
                    /* WARNING: Subroutine does not return */
  FUN_002d9910();
}


PUSH RBX
MOV RBX,RDI
CALL 0x002da380
LEA RSI,[RBX + -0x50]
MOV RCX,-0x474e5543432b2b00
ADD RCX,qword ptr [RBX]
MOV RDX,qword ptr [RAX]
CMP RCX,0x1
JBE 0x002da510
TEST RDX,RDX
JNZ 0x002da545
MOV qword ptr [RAX],RSI
MOV RAX,RDX
POP RBX
RET
MOV R8D,dword ptr [RBX + -0x28]
MOV ECX,0x1
MOV EDI,ECX
SUB EDI,R8D
LEA ECX,[R8 + 0x1]
TEST R8D,R8D
CMOVS ECX,EDI
MOV dword ptr [RBX + -0x28],ECX
SUB dword ptr [RAX + 0x8],0x1
CMP RDX,RSI
JZ 0x002da53b
MOV qword ptr [RBX + -0x30],RDX
MOV qword ptr [RAX],RSI
MOV RDX,qword ptr [RBX + -0x8]
NOP
MOV RAX,RDX
POP RBX
RET
CALL 0x002d9910
(translation_unit "long FUN_002da4e0(long *param_1)\n\n{\n  long *plVar1;\n  long *plVar2;\n  int iVar3;\n  long *plVar4;\n  \n  plVar4 = (long *)FUN_002da380();\n  plVar1 = param_1 + -10;\n  plVar2 = (long *)*plVar4;\n  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }\n  if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_002d9910();\n}\n\n" (function_definition "long FUN_002da4e0(long *param_1)\n\n{\n  long *plVar1;\n  long *plVar2;\n  int iVar3;\n  long *plVar4;\n  \n  plVar4 = (long *)FUN_002da380();\n  plVar1 = param_1 + -10;\n  plVar2 = (long *)*plVar4;\n  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }\n  if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_002d9910();\n}" (sized_type_specifier "long" long) (function_declarator "FUN_002da4e0(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  long *plVar1;\n  long *plVar2;\n  int iVar3;\n  long *plVar4;\n  \n  plVar4 = (long *)FUN_002da380();\n  plVar1 = param_1 + -10;\n  plVar2 = (long *)*plVar4;\n  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }\n  if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_002d9910();\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (expression_statement "plVar4 = (long *)FUN_002da380();" (assignment_expression "plVar4 = (long *)FUN_002da380()" identifier = (cast_expression "(long *)FUN_002da380()" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002da380()" identifier (argument_list "()" ( ))))) ;) (expression_statement "plVar1 = param_1 + -10;" (assignment_expression "plVar1 = param_1 + -10" identifier = (binary_expression "param_1 + -10" identifier + number_literal)) ;) (expression_statement "plVar2 = (long *)*plVar4;" (assignment_expression "plVar2 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) (if_statement "if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }" if (parenthesized_expression "(*param_1 + 0xb8b1aabcbcd4d500U < 2)" ( (binary_expression "*param_1 + 0xb8b1aabcbcd4d500U < 2" (binary_expression "*param_1 + 0xb8b1aabcbcd4d500U" (pointer_expression "*param_1" * identifier) + number_literal) < number_literal) )) (compound_statement "{\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }" { (expression_statement "iVar3 = (int)param_1[-5];" (assignment_expression "iVar3 = (int)param_1[-5]" identifier = (cast_expression "(int)param_1[-5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[-5]" identifier [ number_literal ]))) ;) (if_statement "if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }" if (parenthesized_expression "(iVar3 < 0)" ( (binary_expression "iVar3 < 0" identifier < number_literal) )) (compound_statement "{\n      iVar3 = -iVar3;\n    }" { (expression_statement "iVar3 = -iVar3;" (assignment_expression "iVar3 = -iVar3" identifier = (unary_expression "-iVar3" - identifier)) ;) })) (expression_statement "*(int *)(param_1 + -5) = iVar3 + 1;" (assignment_expression "*(int *)(param_1 + -5) = iVar3 + 1" (pointer_expression "*(int *)(param_1 + -5)" * (cast_expression "(int *)(param_1 + -5)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + -5)" ( (binary_expression "param_1 + -5" identifier + number_literal) )))) = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(plVar4 + 1) = (int)plVar4[1] + -1;" (assignment_expression "*(int *)(plVar4 + 1) = (int)plVar4[1] + -1" (pointer_expression "*(int *)(plVar4 + 1)" * (cast_expression "(int *)(plVar4 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4 + 1)" ( (binary_expression "plVar4 + 1" identifier + number_literal) )))) = (binary_expression "(int)plVar4[1] + -1" (cast_expression "(int)plVar4[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar4[1]" identifier [ number_literal ])) + number_literal)) ;) (if_statement "if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }" if (parenthesized_expression "(plVar2 != plVar1)" ( (binary_expression "plVar2 != plVar1" identifier != identifier) )) (compound_statement "{\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }" { (expression_statement "param_1[-6] = (long)plVar2;" (assignment_expression "param_1[-6] = (long)plVar2" (subscript_expression "param_1[-6]" identifier [ number_literal ]) = (cast_expression "(long)plVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*plVar4 = (long)plVar1;" (assignment_expression "*plVar4 = (long)plVar1" (pointer_expression "*plVar4" * identifier) = (cast_expression "(long)plVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) })) (return_statement "return param_1[-1];" return (subscript_expression "param_1[-1]" identifier [ number_literal ]) ;) })) (if_statement "if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }" if (parenthesized_expression "(plVar2 == (long *)0x0)" ( (binary_expression "plVar2 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    *plVar4 = (long)plVar1;\n    return 0;\n  }" { (expression_statement "*plVar4 = (long)plVar1;" (assignment_expression "*plVar4 = (long)plVar1" (pointer_expression "*plVar4" * identifier) = (cast_expression "(long)plVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (return_statement "return 0;" return number_literal ;) })) comment (expression_statement "FUN_002d9910();" (call_expression "FUN_002d9910()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "long __cxa_begin_catch(long *param_1)\n\n{\n  long *plVar1;\n  long *plVar2;\n  int iVar3;\n  long *plVar4;\n  \n  plVar4 = (long *)__cxa_get_globals();\n  plVar1 = param_1 + -10;\n  plVar2 = (long *)*plVar4;\n  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }\n  if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }\n                    /* WARNING: Subroutine does not return */\n  std::terminate();\n}\n\n" (function_definition "long __cxa_begin_catch(long *param_1)\n\n{\n  long *plVar1;\n  long *plVar2;\n  int iVar3;\n  long *plVar4;\n  \n  plVar4 = (long *)__cxa_get_globals();\n  plVar1 = param_1 + -10;\n  plVar2 = (long *)*plVar4;\n  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }\n  if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }\n                    /* WARNING: Subroutine does not return */\n  std::terminate();\n}" (sized_type_specifier "long" long) (function_declarator "__cxa_begin_catch(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  long *plVar1;\n  long *plVar2;\n  int iVar3;\n  long *plVar4;\n  \n  plVar4 = (long *)__cxa_get_globals();\n  plVar1 = param_1 + -10;\n  plVar2 = (long *)*plVar4;\n  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }\n  if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }\n                    /* WARNING: Subroutine does not return */\n  std::terminate();\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (expression_statement "plVar4 = (long *)__cxa_get_globals();" (assignment_expression "plVar4 = (long *)__cxa_get_globals()" identifier = (cast_expression "(long *)__cxa_get_globals()" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "__cxa_get_globals()" identifier (argument_list "()" ( ))))) ;) (expression_statement "plVar1 = param_1 + -10;" (assignment_expression "plVar1 = param_1 + -10" identifier = (binary_expression "param_1 + -10" identifier + number_literal)) ;) (expression_statement "plVar2 = (long *)*plVar4;" (assignment_expression "plVar2 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) (if_statement "if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }" if (parenthesized_expression "(*param_1 + 0xb8b1aabcbcd4d500U < 2)" ( (binary_expression "*param_1 + 0xb8b1aabcbcd4d500U < 2" (binary_expression "*param_1 + 0xb8b1aabcbcd4d500U" (pointer_expression "*param_1" * identifier) + number_literal) < number_literal) )) (compound_statement "{\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }" { (expression_statement "iVar3 = (int)param_1[-5];" (assignment_expression "iVar3 = (int)param_1[-5]" identifier = (cast_expression "(int)param_1[-5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[-5]" identifier [ number_literal ]))) ;) (if_statement "if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }" if (parenthesized_expression "(iVar3 < 0)" ( (binary_expression "iVar3 < 0" identifier < number_literal) )) (compound_statement "{\n      iVar3 = -iVar3;\n    }" { (expression_statement "iVar3 = -iVar3;" (assignment_expression "iVar3 = -iVar3" identifier = (unary_expression "-iVar3" - identifier)) ;) })) (expression_statement "*(int *)(param_1 + -5) = iVar3 + 1;" (assignment_expression "*(int *)(param_1 + -5) = iVar3 + 1" (pointer_expression "*(int *)(param_1 + -5)" * (cast_expression "(int *)(param_1 + -5)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + -5)" ( (binary_expression "param_1 + -5" identifier + number_literal) )))) = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(plVar4 + 1) = (int)plVar4[1] + -1;" (assignment_expression "*(int *)(plVar4 + 1) = (int)plVar4[1] + -1" (pointer_expression "*(int *)(plVar4 + 1)" * (cast_expression "(int *)(plVar4 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4 + 1)" ( (binary_expression "plVar4 + 1" identifier + number_literal) )))) = (binary_expression "(int)plVar4[1] + -1" (cast_expression "(int)plVar4[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar4[1]" identifier [ number_literal ])) + number_literal)) ;) (if_statement "if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }" if (parenthesized_expression "(plVar2 != plVar1)" ( (binary_expression "plVar2 != plVar1" identifier != identifier) )) (compound_statement "{\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }" { (expression_statement "param_1[-6] = (long)plVar2;" (assignment_expression "param_1[-6] = (long)plVar2" (subscript_expression "param_1[-6]" identifier [ number_literal ]) = (cast_expression "(long)plVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*plVar4 = (long)plVar1;" (assignment_expression "*plVar4 = (long)plVar1" (pointer_expression "*plVar4" * identifier) = (cast_expression "(long)plVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) })) (return_statement "return param_1[-1];" return (subscript_expression "param_1[-1]" identifier [ number_literal ]) ;) })) (if_statement "if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }" if (parenthesized_expression "(plVar2 == (long *)0x0)" ( (binary_expression "plVar2 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    *plVar4 = (long)plVar1;\n    return 0;\n  }" { (expression_statement "*plVar4 = (long)plVar1;" (assignment_expression "*plVar4 = (long)plVar1" (pointer_expression "*plVar4" * identifier) = (cast_expression "(long)plVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (return_statement "return 0;" return number_literal ;) })) comment (labeled_statement "std::terminate();" statement_identifier : (ERROR ":" :) (expression_statement "terminate();" (call_expression "terminate()" identifier (argument_list "()" ( ))) ;)) })))
(translation_unit "long FUN_002da4e0(long *param_1)\n\n{\n  long *plVar1;\n  long *plVar2;\n  int iVar3;\n  long *plVar4;\n  \n  plVar4 = (long *)FUN_002da380();\n  plVar1 = param_1 + -10;\n  plVar2 = (long *)*plVar4;\n  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }\n  if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }\n                    \n  FUN_002d9910();\n}\n\n" (function_definition "long FUN_002da4e0(long *param_1)\n\n{\n  long *plVar1;\n  long *plVar2;\n  int iVar3;\n  long *plVar4;\n  \n  plVar4 = (long *)FUN_002da380();\n  plVar1 = param_1 + -10;\n  plVar2 = (long *)*plVar4;\n  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }\n  if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }\n                    \n  FUN_002d9910();\n}" (sized_type_specifier "long" long) (function_declarator "FUN_002da4e0(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  long *plVar1;\n  long *plVar2;\n  int iVar3;\n  long *plVar4;\n  \n  plVar4 = (long *)FUN_002da380();\n  plVar1 = param_1 + -10;\n  plVar2 = (long *)*plVar4;\n  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }\n  if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }\n                    \n  FUN_002d9910();\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (expression_statement "plVar4 = (long *)FUN_002da380();" (assignment_expression "plVar4 = (long *)FUN_002da380()" identifier = (cast_expression "(long *)FUN_002da380()" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002da380()" identifier (argument_list "()" ( ))))) ;) (expression_statement "plVar1 = param_1 + -10;" (assignment_expression "plVar1 = param_1 + -10" identifier = (binary_expression "param_1 + -10" identifier + number_literal)) ;) (expression_statement "plVar2 = (long *)*plVar4;" (assignment_expression "plVar2 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) (if_statement "if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }" if (parenthesized_expression "(*param_1 + 0xb8b1aabcbcd4d500U < 2)" ( (binary_expression "*param_1 + 0xb8b1aabcbcd4d500U < 2" (binary_expression "*param_1 + 0xb8b1aabcbcd4d500U" (pointer_expression "*param_1" * identifier) + number_literal) < number_literal) )) (compound_statement "{\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }" { (expression_statement "iVar3 = (int)param_1[-5];" (assignment_expression "iVar3 = (int)param_1[-5]" identifier = (cast_expression "(int)param_1[-5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[-5]" identifier [ number_literal ]))) ;) (if_statement "if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }" if (parenthesized_expression "(iVar3 < 0)" ( (binary_expression "iVar3 < 0" identifier < number_literal) )) (compound_statement "{\n      iVar3 = -iVar3;\n    }" { (expression_statement "iVar3 = -iVar3;" (assignment_expression "iVar3 = -iVar3" identifier = (unary_expression "-iVar3" - identifier)) ;) })) (expression_statement "*(int *)(param_1 + -5) = iVar3 + 1;" (assignment_expression "*(int *)(param_1 + -5) = iVar3 + 1" (pointer_expression "*(int *)(param_1 + -5)" * (cast_expression "(int *)(param_1 + -5)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + -5)" ( (binary_expression "param_1 + -5" identifier + number_literal) )))) = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(plVar4 + 1) = (int)plVar4[1] + -1;" (assignment_expression "*(int *)(plVar4 + 1) = (int)plVar4[1] + -1" (pointer_expression "*(int *)(plVar4 + 1)" * (cast_expression "(int *)(plVar4 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4 + 1)" ( (binary_expression "plVar4 + 1" identifier + number_literal) )))) = (binary_expression "(int)plVar4[1] + -1" (cast_expression "(int)plVar4[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar4[1]" identifier [ number_literal ])) + number_literal)) ;) (if_statement "if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }" if (parenthesized_expression "(plVar2 != plVar1)" ( (binary_expression "plVar2 != plVar1" identifier != identifier) )) (compound_statement "{\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }" { (expression_statement "param_1[-6] = (long)plVar2;" (assignment_expression "param_1[-6] = (long)plVar2" (subscript_expression "param_1[-6]" identifier [ number_literal ]) = (cast_expression "(long)plVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*plVar4 = (long)plVar1;" (assignment_expression "*plVar4 = (long)plVar1" (pointer_expression "*plVar4" * identifier) = (cast_expression "(long)plVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) })) (return_statement "return param_1[-1];" return (subscript_expression "param_1[-1]" identifier [ number_literal ]) ;) })) (if_statement "if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }" if (parenthesized_expression "(plVar2 == (long *)0x0)" ( (binary_expression "plVar2 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    *plVar4 = (long)plVar1;\n    return 0;\n  }" { (expression_statement "*plVar4 = (long)plVar1;" (assignment_expression "*plVar4 = (long)plVar1" (pointer_expression "*plVar4" * identifier) = (cast_expression "(long)plVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_002d9910();" (call_expression "FUN_002d9910()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) + LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - IDENT)) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) })) (return_statement return (subscript_expression IDENT [ LIT ]) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "long FUN_002da4e0(long *param_1)\n\n{\n  long *plVar1;\n  long *plVar2;\n  int iVar3;\n  long *plVar4;\n  \n  plVar4 = (long *)FUN_002da380();\n  plVar1 = param_1 + -10;\n  plVar2 = (long *)*plVar4;\n  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }\n  if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }\n                    \n  FUN_002d9910();\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_002da4e0(long *param_1)" (identifier "FUN_002da4e0") (parameter_list "(long *param_1)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  long *plVar1;\n  long *plVar2;\n  int iVar3;\n  long *plVar4;\n  \n  plVar4 = (long *)FUN_002da380();\n  plVar1 = param_1 + -10;\n  plVar2 = (long *)*plVar4;\n  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }\n  if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }\n                    \n  FUN_002d9910();\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (expression_statement "plVar4 = (long *)FUN_002da380();" (assignment_expression "plVar4 = (long *)FUN_002da380()" (identifier "plVar4") (= "=") (cast_expression "(long *)FUN_002da380()" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002da380()" (identifier "FUN_002da380") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "plVar1 = param_1 + -10;" (assignment_expression "plVar1 = param_1 + -10" (identifier "plVar1") (= "=") (binary_expression "param_1 + -10" (identifier "param_1") (+ "+") (number_literal "-10"))) (; ";")) (expression_statement "plVar2 = (long *)*plVar4;" (assignment_expression "plVar2 = (long *)*plVar4" (identifier "plVar2") (= "=") (cast_expression "(long *)*plVar4" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar4" (* "*") (identifier "plVar4")))) (; ";")) (if_statement "if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }" (if "if") (parenthesized_expression "(*param_1 + 0xb8b1aabcbcd4d500U < 2)" (( "(") (binary_expression "*param_1 + 0xb8b1aabcbcd4d500U < 2" (binary_expression "*param_1 + 0xb8b1aabcbcd4d500U" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0xb8b1aabcbcd4d500U")) (< "<") (number_literal "2")) () ")")) (compound_statement "{\n    iVar3 = (int)param_1[-5];\n    if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }\n    *(int *)(param_1 + -5) = iVar3 + 1;\n    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;\n    if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }\n    return param_1[-1];\n  }" ({ "{") (expression_statement "iVar3 = (int)param_1[-5];" (assignment_expression "iVar3 = (int)param_1[-5]" (identifier "iVar3") (= "=") (cast_expression "(int)param_1[-5]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[-5]" (identifier "param_1") ([ "[") (number_literal "-5") (] "]")))) (; ";")) (if_statement "if (iVar3 < 0) {\n      iVar3 = -iVar3;\n    }" (if "if") (parenthesized_expression "(iVar3 < 0)" (( "(") (binary_expression "iVar3 < 0" (identifier "iVar3") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      iVar3 = -iVar3;\n    }" ({ "{") (expression_statement "iVar3 = -iVar3;" (assignment_expression "iVar3 = -iVar3" (identifier "iVar3") (= "=") (unary_expression "-iVar3" (- "-") (identifier "iVar3"))) (; ";")) (} "}"))) (expression_statement "*(int *)(param_1 + -5) = iVar3 + 1;" (assignment_expression "*(int *)(param_1 + -5) = iVar3 + 1" (pointer_expression "*(int *)(param_1 + -5)" (* "*") (cast_expression "(int *)(param_1 + -5)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + -5)" (( "(") (binary_expression "param_1 + -5" (identifier "param_1") (+ "+") (number_literal "-5")) () ")")))) (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(int *)(plVar4 + 1) = (int)plVar4[1] + -1;" (assignment_expression "*(int *)(plVar4 + 1) = (int)plVar4[1] + -1" (pointer_expression "*(int *)(plVar4 + 1)" (* "*") (cast_expression "(int *)(plVar4 + 1)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4 + 1)" (( "(") (binary_expression "plVar4 + 1" (identifier "plVar4") (+ "+") (number_literal "1")) () ")")))) (= "=") (binary_expression "(int)plVar4[1] + -1" (cast_expression "(int)plVar4[1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "plVar4[1]" (identifier "plVar4") ([ "[") (number_literal "1") (] "]"))) (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (plVar2 != plVar1) {\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }" (if "if") (parenthesized_expression "(plVar2 != plVar1)" (( "(") (binary_expression "plVar2 != plVar1" (identifier "plVar2") (!= "!=") (identifier "plVar1")) () ")")) (compound_statement "{\n      param_1[-6] = (long)plVar2;\n      *plVar4 = (long)plVar1;\n    }" ({ "{") (expression_statement "param_1[-6] = (long)plVar2;" (assignment_expression "param_1[-6] = (long)plVar2" (subscript_expression "param_1[-6]" (identifier "param_1") ([ "[") (number_literal "-6") (] "]")) (= "=") (cast_expression "(long)plVar2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar2"))) (; ";")) (expression_statement "*plVar4 = (long)plVar1;" (assignment_expression "*plVar4 = (long)plVar1" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (= "=") (cast_expression "(long)plVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar1"))) (; ";")) (} "}"))) (return_statement "return param_1[-1];" (return "return") (subscript_expression "param_1[-1]" (identifier "param_1") ([ "[") (number_literal "-1") (] "]")) (; ";")) (} "}"))) (if_statement "if (plVar2 == (long *)0x0) {\n    *plVar4 = (long)plVar1;\n    return 0;\n  }" (if "if") (parenthesized_expression "(plVar2 == (long *)0x0)" (( "(") (binary_expression "plVar2 == (long *)0x0" (identifier "plVar2") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    *plVar4 = (long)plVar1;\n    return 0;\n  }" ({ "{") (expression_statement "*plVar4 = (long)plVar1;" (assignment_expression "*plVar4 = (long)plVar1" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (= "=") (cast_expression "(long)plVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar1"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "FUN_002d9910();" (call_expression "FUN_002d9910()" (identifier "FUN_002d9910") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

long function_1(long *var_2)

{
  long *var_6;
  long *var_5;
  int var_3;
  long *var_4;
  
  var_4 = (long *)var_1();
  var_6 = var_2 + -10;
  var_5 = (long *)*var_4;
  if (*var_2 + 0xb8b1aabcbcd4d500U < 2) {
    var_3 = (int)var_2[-5];
    if (var_3 < 0) {
      var_3 = -var_3;
    }
    *(int *)(var_2 + -5) = var_3 + 1;
    *(int *)(var_4 + 1) = (int)var_4[1] + -1;
    if (var_5 != var_6) {
      var_2[-6] = (long)var_5;
      *var_4 = (long)var_6;
    }
    return var_2[-1];
  }
  if (var_5 == (long *)0x0) {
    *var_4 = (long)var_6;
    return 0;
  }
                    /* WARNING: Subroutine does not return */
  std::var_7();
}


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

long MASKED(long *param_1)

{
  long *plVar1;
  long *plVar2;
  int iVar3;
  long *plVar4;
  
  plVar4 = (long *)FUN_002da380();
  plVar1 = param_1 + -10;
  plVar2 = (long *)*plVar4;
  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {
    iVar3 = (int)param_1[-5];
    if (iVar3 < 0) {
      iVar3 = -iVar3;
    }
    *(int *)(param_1 + -5) = iVar3 + 1;
    *(int *)(plVar4 + 1) = (int)plVar4[1] + -1;
    if (plVar2 != plVar1) {
      param_1[-6] = (long)plVar2;
      *plVar4 = (long)plVar1;
    }
    return param_1[-1];
  }
  if (plVar2 == (long *)0x0) {
    *plVar4 = (long)plVar1;
    return 0;
  }
                    /* WARNING: Subroutine does not return */
  FUN_002d9910();
}

