
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Type propagation algorithm not settling */

bin_tree_t * __regparm3
parse_branch(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,
            reg_errcode_t *err)

{
  undefined1 *puVar1;
  re_dfa_t *prVar2;
  bin_tree_t *pbVar3;
  bin_tree_t *fn;
  bin_tree_t *root;
  bin_tree_storage_t *pbVar4;
  void *extra;
  void *extra_00;
  void *extraout_ECX;
  int iVar5;
  _func_reg_errcode_t_void_ptr_bin_tree_t_ptr *fn_00;
  _func_reg_errcode_t_void_ptr_bin_tree_t_ptr *fn_01;
  bin_tree_t *extraout_EDX;
  int iVar6;
  int iVar7;
  bin_tree_t *root_00;
  int local_24;
  
  prVar2 = preg->buffer;
  fn = parse_expression(regexp,preg,token,syntax,nest,err);
  if ((*err == _REG_NOERROR) || (fn != (bin_tree_t *)0x0)) {
    do {
      while( true ) {
        root_00 = fn;
        if (((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9)))) {
          return root_00;
        }
        root = parse_expression(regexp,preg,token,syntax,nest,err);
        if (((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0)) {
          if (root_00 == (bin_tree_t *)0x0) {
            return (bin_tree_t *)0x0;
          }
          postorder(root_00,fn_00,(void *)*err);
          return (bin_tree_t *)0x0;
        }
        if ((root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0)) break;
        fn = root_00;
        if (root_00 == (bin_tree_t *)0x0) {
          fn = root;
        }
      }
      iVar5 = prVar2->str_tree_storage_idx;
      if (iVar5 == 0x1f) {
        pbVar4 = (bin_tree_storage_t *)malloc(0x3e4);
        extra = extraout_ECX;
        fn = extraout_EDX;
        if (pbVar4 == (bin_tree_storage_t *)0x0) break;
        iVar7 = 1;
        iVar5 = 0;
        local_24 = 4;
        pbVar4->next = prVar2->str_tree_storage;
        prVar2->str_tree_storage = pbVar4;
        iVar6 = 0x18;
      }
      else {
        iVar7 = iVar5 + 1;
        local_24 = iVar5 * 0x20 + 4;
        iVar6 = iVar5 * 0x20 + 0x18;
        pbVar4 = prVar2->str_tree_storage;
      }
      extra = (void *)(iVar5 * 0x20);
      prVar2->str_tree_storage_idx = iVar7;
      pbVar3 = pbVar4->data;
      pbVar3[iVar5].parent = (bin_tree_t *)0x0;
      fn = (bin_tree_t *)((int)pbVar4->data + local_24 + -4);
      pbVar3[iVar5].left = root_00;
      pbVar3[iVar5].right = root;
      *(undefined1 *)((int)&pbVar4->data[0].parent + iVar6) = 0x10;
      puVar1 = &pbVar4->data[iVar5].token.field_0x6;
      *puVar1 = *puVar1 & 0xf3;
      pbVar3[iVar5].first = (bin_tree_t *)0x0;
      pbVar3[iVar5].next = (bin_tree_t *)0x0;
      pbVar3[iVar5].node_idx = -1;
      root_00->parent = fn;
      root->parent = fn;
    } while (fn != (bin_tree_t *)0x0);
    postorder(root,(_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *)fn,extra);
    postorder(root_00,fn_01,extra_00);
    *err = _REG_ESPACE;
  }
  return (bin_tree_t *)0x0;
}



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

int * __regparm3
FUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6
            )

{
  byte *pbVar1;
  int iVar2;
  int *piVar3;
  int *piVar4;
  undefined4 *puVar5;
  int iVar6;
  int *piVar7;
  int iVar8;
  int iVar9;
  int local_24;
  
  iVar2 = *param_2;
  piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);
  if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {
    do {
      while( true ) {
        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||
           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {
          return piVar3;
        }
        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);
        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {
          if (piVar3 == (int *)0x0) {
            return (int *)0x0;
          }
          FUN_0001f5e0();
          return (int *)0x0;
        }
        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;
        if (piVar3 == (int *)0x0) {
          piVar3 = piVar4;
        }
      }
      iVar6 = *(int *)(iVar2 + 0x40);
      if (iVar6 == 0x1f) {
        puVar5 = (undefined4 *)malloc(0x3e4);
        if (puVar5 == (undefined4 *)0x0) break;
        iVar9 = 1;
        iVar6 = 0;
        local_24 = 4;
        *puVar5 = *(undefined4 *)(iVar2 + 0x38);
        *(undefined4 **)(iVar2 + 0x38) = puVar5;
        iVar8 = 0x18;
      }
      else {
        iVar9 = iVar6 + 1;
        local_24 = iVar6 * 0x20 + 4;
        iVar8 = iVar6 * 0x20 + 0x18;
        puVar5 = *(undefined4 **)(iVar2 + 0x38);
      }
      *(int *)(iVar2 + 0x40) = iVar9;
      puVar5[iVar6 * 8 + 1] = 0;
      piVar7 = (int *)(local_24 + (int)puVar5);
      puVar5[iVar6 * 8 + 2] = piVar3;
      puVar5[iVar6 * 8 + 3] = piVar4;
      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;
      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);
      *pbVar1 = *pbVar1 & 0xf3;
      puVar5[iVar6 * 8 + 4] = 0;
      puVar5[iVar6 * 8 + 5] = 0;
      puVar5[iVar6 * 8 + 8] = 0xffffffff;
      *piVar3 = (int)piVar7;
      *piVar4 = (int)piVar7;
      piVar3 = piVar7;
    } while (piVar7 != (int *)0x0);
    FUN_0001f5e0();
    FUN_0001f5e0();
    *param_6 = 0xc;
  }
  return (int *)0x0;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x000138d0
ADD EBX,0xdb97
SUB ESP,0x30
MOV dword ptr [ESP + 0x10],EAX
MOV dword ptr [ESP + 0x14],EDX
MOV dword ptr [ESP + 0xc],ECX
MOV dword ptr [ESP + 0x20],EBX
MOV EBX,dword ptr [EDX]
MOV dword ptr [ESP + 0x18],EBX
PUSH dword ptr [ESP + 0x4c]
PUSH dword ptr [ESP + 0x4c]
PUSH dword ptr [ESP + 0x4c]
CALL 0x00027e10
ADD ESP,0x10
MOV ESI,EAX
MOV EAX,dword ptr [ESP + 0x48]
MOV EBX,dword ptr [EAX]
TEST EBX,EBX
JZ 0x0002a4b0
TEST ESI,ESI
JZ 0x0002a5c9
MOV EAX,dword ptr [ESP + 0x8]
MOVZX EAX,byte ptr [EAX + 0x4]
MOV EDX,EAX
AND EDX,0xfffffff7
CMP DL,0x2
JZ 0x0002a5a7
MOV EDX,dword ptr [ESP + 0x44]
TEST EDX,EDX
JZ 0x0002a4d6
CMP AL,0x9
JZ 0x0002a5a7
SUB ESP,0x4
PUSH dword ptr [ESP + 0x4c]
PUSH dword ptr [ESP + 0x4c]
PUSH dword ptr [ESP + 0x4c]
MOV ECX,dword ptr [ESP + 0x18]
MOV EDX,dword ptr [ESP + 0x20]
MOV EAX,dword ptr [ESP + 0x1c]
CALL 0x00027e10
ADD ESP,0x10
MOV EDI,EAX
MOV EAX,dword ptr [ESP + 0x48]
MOV ECX,dword ptr [EAX]
TEST ECX,ECX
JZ 0x0002a50d
TEST EDI,EDI
JZ 0x0002a59a
TEST ESI,ESI
JZ 0x0002a590
TEST EDI,EDI
JZ 0x0002a590
MOV EAX,dword ptr [ESP + 0x14]
MOV ECX,dword ptr [EAX + 0x40]
CMP ECX,0x1f
JZ 0x0002a5d8
MOV EDX,ECX
LEA EBP,[ECX + 0x1]
SHL EDX,0x5
LEA EAX,[EDX + 0x4]
LEA EBX,[EDX + 0x18]
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,dword ptr [ESP + 0x14]
MOV EAX,dword ptr [EAX + 0x38]
MOV EDX,dword ptr [ESP + 0x14]
SHL ECX,0x5
MOV dword ptr [EDX + 0x40],EBP
MOV EDX,dword ptr [ESP + 0x18]
LEA EBP,[EAX + ECX*0x1]
MOV dword ptr [EBP + 0x4],0x0
ADD EDX,EAX
MOV dword ptr [EBP + 0x8],ESI
MOV dword ptr [EBP + 0xc],EDI
MOV byte ptr [EAX + EBX*0x1 + 0x4],0x10
AND byte ptr [EAX + ECX*0x1 + 0x1e],0xf3
MOV dword ptr [EBP + 0x10],0x0
MOV dword ptr [EBP + 0x14],0x0
MOV dword ptr [EBP + 0x20],0xffffffff
MOV dword ptr [ESI],EDX
MOV dword ptr [EDI],EDX
TEST EDX,EDX
JZ 0x0002a5b1
MOV ESI,EDX
JMP 0x0002a4b0
TEST ESI,ESI
CMOVZ ESI,EDI
JMP 0x0002a4b0
TEST ESI,ESI
JZ 0x0002a5c9
MOV EAX,ESI
XOR ESI,ESI
CALL 0x0001f5e0
ADD ESP,0x2c
MOV EAX,ESI
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,EDI
CALL 0x0001f5e0
MOV EAX,ESI
CALL 0x0001f5e0
MOV EAX,dword ptr [ESP + 0x48]
MOV dword ptr [EAX],0xc
ADD ESP,0x2c
XOR ESI,ESI
POP EBX
MOV EAX,ESI
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0xc
PUSH 0x3e4
MOV EBX,dword ptr [ESP + 0x2c]
CALL 0x000122b0
ADD ESP,0x10
TEST EAX,EAX
JZ 0x0002a5b1
MOV EBX,dword ptr [ESP + 0x14]
MOV EBP,0x1
XOR ECX,ECX
MOV dword ptr [ESP + 0x18],0x4
MOV EDX,dword ptr [EBX + 0x38]
MOV dword ptr [EAX],EDX
MOV dword ptr [EBX + 0x38],EAX
MOV EBX,0x18
JMP 0x0002a53e
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint * __regparm3\nFUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )\n\n{\n  byte *pbVar1;\n  int iVar2;\n  int *piVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  int local_24;\n  \n  iVar2 = *param_2;\n  piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);\n  if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }\n  return (int *)0x0;\n}\n\n" comment (function_definition "int * __regparm3\nFUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )\n\n{\n  byte *pbVar1;\n  int iVar2;\n  int *piVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  int local_24;\n  \n  iVar2 = *param_2;\n  piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);\n  if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }\n  return (int *)0x0;\n}" primitive_type (pointer_declarator "* __regparm3\nFUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )" * (ERROR "__regparm3" identifier) (function_declarator "FUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )" identifier (parameter_list "(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int *param_6" primitive_type (pointer_declarator "*param_6" * identifier)) )))) (compound_statement "{\n  byte *pbVar1;\n  int iVar2;\n  int *piVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  int local_24;\n  \n  iVar2 = *param_2;\n  piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);\n  if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }\n  return (int *)0x0;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "iVar2 = *param_2;" (assignment_expression "iVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);" (assignment_expression "piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6)" identifier = (cast_expression "(int *)FUN_00027e10(param_4,param_5,param_6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00027e10(param_4,param_5,param_6)" identifier (argument_list "(param_4,param_5,param_6)" ( identifier , identifier , identifier ))))) ;) (if_statement "if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }" if (parenthesized_expression "((*param_6 == 0) || (piVar3 != (int *)0x0))" ( (binary_expression "(*param_6 == 0) || (piVar3 != (int *)0x0)" (parenthesized_expression "(*param_6 == 0)" ( (binary_expression "*param_6 == 0" (pointer_expression "*param_6" * identifier) == number_literal) )) || (parenthesized_expression "(piVar3 != (int *)0x0)" ( (binary_expression "piVar3 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }" { (do_statement "do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);" do (compound_statement "{\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    }" { (while_statement "while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }" { (if_statement "if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }" if (parenthesized_expression "(((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9))))" ( (binary_expression "((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))" (parenthesized_expression "((*(byte *)(param_3 + 4) & 0xf7) == 2)" ( (binary_expression "(*(byte *)(param_3 + 4) & 0xf7) == 2" (parenthesized_expression "(*(byte *)(param_3 + 4) & 0xf7)" ( (binary_expression "*(byte *)(param_3 + 4) & 0xf7" (pointer_expression "*(byte *)(param_3 + 4)" * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))" ( (parenthesized_expression "(param_5 != 0 && (*(byte *)(param_3 + 4) == 9))" ( (binary_expression "param_5 != 0 && (*(byte *)(param_3 + 4) == 9)" (binary_expression "param_5 != 0" identifier != number_literal) && (parenthesized_expression "(*(byte *)(param_3 + 4) == 9)" ( (binary_expression "*(byte *)(param_3 + 4) == 9" (pointer_expression "*(byte *)(param_3 + 4)" * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) == number_literal) ))) )) ))) )) (compound_statement "{\n          return piVar3;\n        }" { (return_statement "return piVar3;" return identifier ;) })) (expression_statement "piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);" (assignment_expression "piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6)" identifier = (cast_expression "(int *)FUN_00027e10(param_4,param_5,param_6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00027e10(param_4,param_5,param_6)" identifier (argument_list "(param_4,param_5,param_6)" ( identifier , identifier , identifier ))))) ;) (if_statement "if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }" if (parenthesized_expression "((*param_6 != 0) && (piVar4 == (int *)0x0))" ( (binary_expression "(*param_6 != 0) && (piVar4 == (int *)0x0)" (parenthesized_expression "(*param_6 != 0)" ( (binary_expression "*param_6 != 0" (pointer_expression "*param_6" * identifier) != number_literal) )) && (parenthesized_expression "(piVar4 == (int *)0x0)" ( (binary_expression "piVar4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }" { (if_statement "if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }" if (parenthesized_expression "(piVar3 == (int *)0x0)" ( (binary_expression "piVar3 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            return (int *)0x0;\n          }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "FUN_0001f5e0();" (call_expression "FUN_0001f5e0()" identifier (argument_list "()" ( ))) ;) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;" if (parenthesized_expression "((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0))" ( (binary_expression "(piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)" (parenthesized_expression "(piVar3 != (int *)0x0)" ( (binary_expression "piVar3 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(piVar4 != (int *)0x0)" ( (binary_expression "piVar4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (break_statement "break;" break ;)) (if_statement "if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }" if (parenthesized_expression "(piVar3 == (int *)0x0)" ( (binary_expression "piVar3 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          piVar3 = piVar4;\n        }" { (expression_statement "piVar3 = piVar4;" (assignment_expression "piVar3 = piVar4" identifier = identifier) ;) })) })) (expression_statement "iVar6 = *(int *)(iVar2 + 0x40);" (assignment_expression "iVar6 = *(int *)(iVar2 + 0x40)" identifier = (pointer_expression "*(int *)(iVar2 + 0x40)" * (cast_expression "(int *)(iVar2 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x40)" ( (binary_expression "iVar2 + 0x40" identifier + number_literal) ))))) ;) (if_statement "if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }" if (parenthesized_expression "(iVar6 == 0x1f)" ( (binary_expression "iVar6 == 0x1f" identifier == number_literal) )) (compound_statement "{\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }" { (expression_statement "puVar5 = (undefined4 *)malloc(0x3e4);" (assignment_expression "puVar5 = (undefined4 *)malloc(0x3e4)" identifier = (cast_expression "(undefined4 *)malloc(0x3e4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(0x3e4)" identifier (argument_list "(0x3e4)" ( number_literal ))))) ;) (if_statement "if (puVar5 == (undefined4 *)0x0) break;" if (parenthesized_expression "(puVar5 == (undefined4 *)0x0)" ( (binary_expression "puVar5 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "iVar9 = 1;" (assignment_expression "iVar9 = 1" identifier = number_literal) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "local_24 = 4;" (assignment_expression "local_24 = 4" identifier = number_literal) ;) (expression_statement "*puVar5 = *(undefined4 *)(iVar2 + 0x38);" (assignment_expression "*puVar5 = *(undefined4 *)(iVar2 + 0x38)" (pointer_expression "*puVar5" * identifier) = (pointer_expression "*(undefined4 *)(iVar2 + 0x38)" * (cast_expression "(undefined4 *)(iVar2 + 0x38)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x38)" ( (binary_expression "iVar2 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 **)(iVar2 + 0x38) = puVar5;" (assignment_expression "*(undefined4 **)(iVar2 + 0x38) = puVar5" (pointer_expression "*(undefined4 **)(iVar2 + 0x38)" * (cast_expression "(undefined4 **)(iVar2 + 0x38)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x38)" ( (binary_expression "iVar2 + 0x38" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar8 = 0x18;" (assignment_expression "iVar8 = 0x18" identifier = number_literal) ;) }) (else_clause "else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }" else (compound_statement "{\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }" { (expression_statement "iVar9 = iVar6 + 1;" (assignment_expression "iVar9 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "local_24 = iVar6 * 0x20 + 4;" (assignment_expression "local_24 = iVar6 * 0x20 + 4" identifier = (binary_expression "iVar6 * 0x20 + 4" (binary_expression "iVar6 * 0x20" identifier * number_literal) + number_literal)) ;) (expression_statement "iVar8 = iVar6 * 0x20 + 0x18;" (assignment_expression "iVar8 = iVar6 * 0x20 + 0x18" identifier = (binary_expression "iVar6 * 0x20 + 0x18" (binary_expression "iVar6 * 0x20" identifier * number_literal) + number_literal)) ;) (expression_statement "puVar5 = *(undefined4 **)(iVar2 + 0x38);" (assignment_expression "puVar5 = *(undefined4 **)(iVar2 + 0x38)" identifier = (pointer_expression "*(undefined4 **)(iVar2 + 0x38)" * (cast_expression "(undefined4 **)(iVar2 + 0x38)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x38)" ( (binary_expression "iVar2 + 0x38" identifier + number_literal) ))))) ;) }))) (expression_statement "*(int *)(iVar2 + 0x40) = iVar9;" (assignment_expression "*(int *)(iVar2 + 0x40) = iVar9" (pointer_expression "*(int *)(iVar2 + 0x40)" * (cast_expression "(int *)(iVar2 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x40)" ( (binary_expression "iVar2 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "puVar5[iVar6 * 8 + 1] = 0;" (assignment_expression "puVar5[iVar6 * 8 + 1] = 0" (subscript_expression "puVar5[iVar6 * 8 + 1]" identifier [ (binary_expression "iVar6 * 8 + 1" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = number_literal) ;) (expression_statement "piVar7 = (int *)(local_24 + (int)puVar5);" (assignment_expression "piVar7 = (int *)(local_24 + (int)puVar5)" identifier = (cast_expression "(int *)(local_24 + (int)puVar5)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_24 + (int)puVar5)" ( (binary_expression "local_24 + (int)puVar5" identifier + (cast_expression "(int)puVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "puVar5[iVar6 * 8 + 2] = piVar3;" (assignment_expression "puVar5[iVar6 * 8 + 2] = piVar3" (subscript_expression "puVar5[iVar6 * 8 + 2]" identifier [ (binary_expression "iVar6 * 8 + 2" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = identifier) ;) (expression_statement "puVar5[iVar6 * 8 + 3] = piVar4;" (assignment_expression "puVar5[iVar6 * 8 + 3] = piVar4" (subscript_expression "puVar5[iVar6 * 8 + 3]" identifier [ (binary_expression "iVar6 * 8 + 3" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = identifier) ;) (expression_statement "*(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;" (assignment_expression "*(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10" (pointer_expression "*(undefined1 *)((int)puVar5 + iVar8 + 4)" * (cast_expression "(undefined1 *)((int)puVar5 + iVar8 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar5 + iVar8 + 4)" ( (binary_expression "(int)puVar5 + iVar8 + 4" (binary_expression "(int)puVar5 + iVar8" (cast_expression "(int)puVar5" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = number_literal) ;) (expression_statement "pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);" (assignment_expression "pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e)" identifier = (cast_expression "(byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar5 + iVar6 * 0x20 + 0x1e)" ( (binary_expression "(int)puVar5 + iVar6 * 0x20 + 0x1e" (binary_expression "(int)puVar5 + iVar6 * 0x20" (cast_expression "(int)puVar5" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar6 * 0x20" identifier * number_literal)) + number_literal) )))) ;) (expression_statement "*pbVar1 = *pbVar1 & 0xf3;" (assignment_expression "*pbVar1 = *pbVar1 & 0xf3" (pointer_expression "*pbVar1" * identifier) = (binary_expression "*pbVar1 & 0xf3" (pointer_expression "*pbVar1" * identifier) & number_literal)) ;) (expression_statement "puVar5[iVar6 * 8 + 4] = 0;" (assignment_expression "puVar5[iVar6 * 8 + 4] = 0" (subscript_expression "puVar5[iVar6 * 8 + 4]" identifier [ (binary_expression "iVar6 * 8 + 4" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = number_literal) ;) (expression_statement "puVar5[iVar6 * 8 + 5] = 0;" (assignment_expression "puVar5[iVar6 * 8 + 5] = 0" (subscript_expression "puVar5[iVar6 * 8 + 5]" identifier [ (binary_expression "iVar6 * 8 + 5" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = number_literal) ;) (expression_statement "puVar5[iVar6 * 8 + 8] = 0xffffffff;" (assignment_expression "puVar5[iVar6 * 8 + 8] = 0xffffffff" (subscript_expression "puVar5[iVar6 * 8 + 8]" identifier [ (binary_expression "iVar6 * 8 + 8" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = number_literal) ;) (expression_statement "*piVar3 = (int)piVar7;" (assignment_expression "*piVar3 = (int)piVar7" (pointer_expression "*piVar3" * identifier) = (cast_expression "(int)piVar7" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "*piVar4 = (int)piVar7;" (assignment_expression "*piVar4 = (int)piVar7" (pointer_expression "*piVar4" * identifier) = (cast_expression "(int)piVar7" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar3 = piVar7;" (assignment_expression "piVar3 = piVar7" identifier = identifier) ;) }) while (parenthesized_expression "(piVar7 != (int *)0x0)" ( (binary_expression "piVar7 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "FUN_0001f5e0();" (call_expression "FUN_0001f5e0()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0001f5e0();" (call_expression "FUN_0001f5e0()" identifier (argument_list "()" ( ))) ;) (expression_statement "*param_6 = 0xc;" (assignment_expression "*param_6 = 0xc" (pointer_expression "*param_6" * identifier) = number_literal) ;) })) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Type propagation algorithm not settling */\n\nbin_tree_t * __regparm3\nparse_branch(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n            reg_errcode_t *err)\n\n{\n  undefined1 *puVar1;\n  re_dfa_t *prVar2;\n  bin_tree_t *pbVar3;\n  bin_tree_t *fn;\n  bin_tree_t *root;\n  bin_tree_storage_t *pbVar4;\n  void *extra;\n  void *extra_00;\n  void *extraout_ECX;\n  int iVar5;\n  _func_reg_errcode_t_void_ptr_bin_tree_t_ptr *fn_00;\n  _func_reg_errcode_t_void_ptr_bin_tree_t_ptr *fn_01;\n  bin_tree_t *extraout_EDX;\n  int iVar6;\n  int iVar7;\n  bin_tree_t *root_00;\n  int local_24;\n  \n  prVar2 = preg->buffer;\n  fn = parse_expression(regexp,preg,token,syntax,nest,err);\n  if ((*err == _REG_NOERROR) || (fn != (bin_tree_t *)0x0)) {\n    do {\n      while( true ) {\n        root_00 = fn;\n        if (((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9)))) {\n          return root_00;\n        }\n        root = parse_expression(regexp,preg,token,syntax,nest,err);\n        if (((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0)) {\n          if (root_00 == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root_00,fn_00,(void *)*err);\n          return (bin_tree_t *)0x0;\n        }\n        if ((root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0)) break;\n        fn = root_00;\n        if (root_00 == (bin_tree_t *)0x0) {\n          fn = root;\n        }\n      }\n      iVar5 = prVar2->str_tree_storage_idx;\n      if (iVar5 == 0x1f) {\n        pbVar4 = (bin_tree_storage_t *)malloc(0x3e4);\n        extra = extraout_ECX;\n        fn = extraout_EDX;\n        if (pbVar4 == (bin_tree_storage_t *)0x0) break;\n        iVar7 = 1;\n        iVar5 = 0;\n        local_24 = 4;\n        pbVar4->next = prVar2->str_tree_storage;\n        prVar2->str_tree_storage = pbVar4;\n        iVar6 = 0x18;\n      }\n      else {\n        iVar7 = iVar5 + 1;\n        local_24 = iVar5 * 0x20 + 4;\n        iVar6 = iVar5 * 0x20 + 0x18;\n        pbVar4 = prVar2->str_tree_storage;\n      }\n      extra = (void *)(iVar5 * 0x20);\n      prVar2->str_tree_storage_idx = iVar7;\n      pbVar3 = pbVar4->data;\n      pbVar3[iVar5].parent = (bin_tree_t *)0x0;\n      fn = (bin_tree_t *)((int)pbVar4->data + local_24 + -4);\n      pbVar3[iVar5].left = root_00;\n      pbVar3[iVar5].right = root;\n      *(undefined1 *)((int)&pbVar4->data[0].parent + iVar6) = 0x10;\n      puVar1 = &pbVar4->data[iVar5].token.field_0x6;\n      *puVar1 = *puVar1 & 0xf3;\n      pbVar3[iVar5].first = (bin_tree_t *)0x0;\n      pbVar3[iVar5].next = (bin_tree_t *)0x0;\n      pbVar3[iVar5].node_idx = -1;\n      root_00->parent = fn;\n      root->parent = fn;\n    } while (fn != (bin_tree_t *)0x0);\n    postorder(root,(_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *)fn,extra);\n    postorder(root_00,fn_01,extra_00);\n    *err = _REG_ESPACE;\n  }\n  return (bin_tree_t *)0x0;\n}\n\n" comment comment (ERROR "bin_tree_t * __regparm3\nparse_branch(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n            reg_errcode_t *err)" (binary_expression "bin_tree_t * __regparm3\nparse_branch(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n            reg_errcode_t *err)" identifier * (ERROR "__regparm3" identifier) (call_expression "parse_branch(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n            reg_errcode_t *err)" identifier (argument_list "(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n            reg_errcode_t *err)" ( (binary_expression "re_string_t *regexp" identifier * identifier) , (binary_expression "regex_t *preg" identifier * identifier) , (binary_expression "re_token_t *token" identifier * identifier) , identifier (ERROR "syntax" identifier) , (ERROR "Idx" identifier) identifier , (binary_expression "reg_errcode_t *err" identifier * identifier) ))))) (compound_statement "{\n  undefined1 *puVar1;\n  re_dfa_t *prVar2;\n  bin_tree_t *pbVar3;\n  bin_tree_t *fn;\n  bin_tree_t *root;\n  bin_tree_storage_t *pbVar4;\n  void *extra;\n  void *extra_00;\n  void *extraout_ECX;\n  int iVar5;\n  _func_reg_errcode_t_void_ptr_bin_tree_t_ptr *fn_00;\n  _func_reg_errcode_t_void_ptr_bin_tree_t_ptr *fn_01;\n  bin_tree_t *extraout_EDX;\n  int iVar6;\n  int iVar7;\n  bin_tree_t *root_00;\n  int local_24;\n  \n  prVar2 = preg->buffer;\n  fn = parse_expression(regexp,preg,token,syntax,nest,err);\n  if ((*err == _REG_NOERROR) || (fn != (bin_tree_t *)0x0)) {\n    do {\n      while( true ) {\n        root_00 = fn;\n        if (((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9)))) {\n          return root_00;\n        }\n        root = parse_expression(regexp,preg,token,syntax,nest,err);\n        if (((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0)) {\n          if (root_00 == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root_00,fn_00,(void *)*err);\n          return (bin_tree_t *)0x0;\n        }\n        if ((root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0)) break;\n        fn = root_00;\n        if (root_00 == (bin_tree_t *)0x0) {\n          fn = root;\n        }\n      }\n      iVar5 = prVar2->str_tree_storage_idx;\n      if (iVar5 == 0x1f) {\n        pbVar4 = (bin_tree_storage_t *)malloc(0x3e4);\n        extra = extraout_ECX;\n        fn = extraout_EDX;\n        if (pbVar4 == (bin_tree_storage_t *)0x0) break;\n        iVar7 = 1;\n        iVar5 = 0;\n        local_24 = 4;\n        pbVar4->next = prVar2->str_tree_storage;\n        prVar2->str_tree_storage = pbVar4;\n        iVar6 = 0x18;\n      }\n      else {\n        iVar7 = iVar5 + 1;\n        local_24 = iVar5 * 0x20 + 4;\n        iVar6 = iVar5 * 0x20 + 0x18;\n        pbVar4 = prVar2->str_tree_storage;\n      }\n      extra = (void *)(iVar5 * 0x20);\n      prVar2->str_tree_storage_idx = iVar7;\n      pbVar3 = pbVar4->data;\n      pbVar3[iVar5].parent = (bin_tree_t *)0x0;\n      fn = (bin_tree_t *)((int)pbVar4->data + local_24 + -4);\n      pbVar3[iVar5].left = root_00;\n      pbVar3[iVar5].right = root;\n      *(undefined1 *)((int)&pbVar4->data[0].parent + iVar6) = 0x10;\n      puVar1 = &pbVar4->data[iVar5].token.field_0x6;\n      *puVar1 = *puVar1 & 0xf3;\n      pbVar3[iVar5].first = (bin_tree_t *)0x0;\n      pbVar3[iVar5].next = (bin_tree_t *)0x0;\n      pbVar3[iVar5].node_idx = -1;\n      root_00->parent = fn;\n      root->parent = fn;\n    } while (fn != (bin_tree_t *)0x0);\n    postorder(root,(_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *)fn,extra);\n    postorder(root_00,fn_01,extra_00);\n    *err = _REG_ESPACE;\n  }\n  return (bin_tree_t *)0x0;\n}" { (declaration "undefined1 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "re_dfa_t *prVar2;" type_identifier (pointer_declarator "*prVar2" * identifier) ;) (declaration "bin_tree_t *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "bin_tree_t *fn;" type_identifier (pointer_declarator "*fn" * identifier) ;) (declaration "bin_tree_t *root;" type_identifier (pointer_declarator "*root" * identifier) ;) (declaration "bin_tree_storage_t *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "void *extra;" primitive_type (pointer_declarator "*extra" * identifier) ;) (declaration "void *extra_00;" primitive_type (pointer_declarator "*extra_00" * identifier) ;) (declaration "void *extraout_ECX;" primitive_type (pointer_declarator "*extraout_ECX" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *fn_00;" type_identifier (pointer_declarator "*fn_00" * identifier) ;) (declaration "_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *fn_01;" type_identifier (pointer_declarator "*fn_01" * identifier) ;) (declaration "bin_tree_t *extraout_EDX;" type_identifier (pointer_declarator "*extraout_EDX" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "bin_tree_t *root_00;" type_identifier (pointer_declarator "*root_00" * identifier) ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "prVar2 = preg->buffer;" (assignment_expression "prVar2 = preg->buffer" identifier = (field_expression "preg->buffer" identifier -> field_identifier)) ;) (expression_statement "fn = parse_expression(regexp,preg,token,syntax,nest,err);" (assignment_expression "fn = parse_expression(regexp,preg,token,syntax,nest,err)" identifier = (call_expression "parse_expression(regexp,preg,token,syntax,nest,err)" identifier (argument_list "(regexp,preg,token,syntax,nest,err)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if ((*err == _REG_NOERROR) || (fn != (bin_tree_t *)0x0)) {\n    do {\n      while( true ) {\n        root_00 = fn;\n        if (((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9)))) {\n          return root_00;\n        }\n        root = parse_expression(regexp,preg,token,syntax,nest,err);\n        if (((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0)) {\n          if (root_00 == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root_00,fn_00,(void *)*err);\n          return (bin_tree_t *)0x0;\n        }\n        if ((root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0)) break;\n        fn = root_00;\n        if (root_00 == (bin_tree_t *)0x0) {\n          fn = root;\n        }\n      }\n      iVar5 = prVar2->str_tree_storage_idx;\n      if (iVar5 == 0x1f) {\n        pbVar4 = (bin_tree_storage_t *)malloc(0x3e4);\n        extra = extraout_ECX;\n        fn = extraout_EDX;\n        if (pbVar4 == (bin_tree_storage_t *)0x0) break;\n        iVar7 = 1;\n        iVar5 = 0;\n        local_24 = 4;\n        pbVar4->next = prVar2->str_tree_storage;\n        prVar2->str_tree_storage = pbVar4;\n        iVar6 = 0x18;\n      }\n      else {\n        iVar7 = iVar5 + 1;\n        local_24 = iVar5 * 0x20 + 4;\n        iVar6 = iVar5 * 0x20 + 0x18;\n        pbVar4 = prVar2->str_tree_storage;\n      }\n      extra = (void *)(iVar5 * 0x20);\n      prVar2->str_tree_storage_idx = iVar7;\n      pbVar3 = pbVar4->data;\n      pbVar3[iVar5].parent = (bin_tree_t *)0x0;\n      fn = (bin_tree_t *)((int)pbVar4->data + local_24 + -4);\n      pbVar3[iVar5].left = root_00;\n      pbVar3[iVar5].right = root;\n      *(undefined1 *)((int)&pbVar4->data[0].parent + iVar6) = 0x10;\n      puVar1 = &pbVar4->data[iVar5].token.field_0x6;\n      *puVar1 = *puVar1 & 0xf3;\n      pbVar3[iVar5].first = (bin_tree_t *)0x0;\n      pbVar3[iVar5].next = (bin_tree_t *)0x0;\n      pbVar3[iVar5].node_idx = -1;\n      root_00->parent = fn;\n      root->parent = fn;\n    } while (fn != (bin_tree_t *)0x0);\n    postorder(root,(_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *)fn,extra);\n    postorder(root_00,fn_01,extra_00);\n    *err = _REG_ESPACE;\n  }" if (parenthesized_expression "((*err == _REG_NOERROR) || (fn != (bin_tree_t *)0x0))" ( (binary_expression "(*err == _REG_NOERROR) || (fn != (bin_tree_t *)0x0)" (parenthesized_expression "(*err == _REG_NOERROR)" ( (binary_expression "*err == _REG_NOERROR" (pointer_expression "*err" * identifier) == identifier) )) || (parenthesized_expression "(fn != (bin_tree_t *)0x0)" ( (binary_expression "fn != (bin_tree_t *)0x0" identifier != (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    do {\n      while( true ) {\n        root_00 = fn;\n        if (((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9)))) {\n          return root_00;\n        }\n        root = parse_expression(regexp,preg,token,syntax,nest,err);\n        if (((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0)) {\n          if (root_00 == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root_00,fn_00,(void *)*err);\n          return (bin_tree_t *)0x0;\n        }\n        if ((root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0)) break;\n        fn = root_00;\n        if (root_00 == (bin_tree_t *)0x0) {\n          fn = root;\n        }\n      }\n      iVar5 = prVar2->str_tree_storage_idx;\n      if (iVar5 == 0x1f) {\n        pbVar4 = (bin_tree_storage_t *)malloc(0x3e4);\n        extra = extraout_ECX;\n        fn = extraout_EDX;\n        if (pbVar4 == (bin_tree_storage_t *)0x0) break;\n        iVar7 = 1;\n        iVar5 = 0;\n        local_24 = 4;\n        pbVar4->next = prVar2->str_tree_storage;\n        prVar2->str_tree_storage = pbVar4;\n        iVar6 = 0x18;\n      }\n      else {\n        iVar7 = iVar5 + 1;\n        local_24 = iVar5 * 0x20 + 4;\n        iVar6 = iVar5 * 0x20 + 0x18;\n        pbVar4 = prVar2->str_tree_storage;\n      }\n      extra = (void *)(iVar5 * 0x20);\n      prVar2->str_tree_storage_idx = iVar7;\n      pbVar3 = pbVar4->data;\n      pbVar3[iVar5].parent = (bin_tree_t *)0x0;\n      fn = (bin_tree_t *)((int)pbVar4->data + local_24 + -4);\n      pbVar3[iVar5].left = root_00;\n      pbVar3[iVar5].right = root;\n      *(undefined1 *)((int)&pbVar4->data[0].parent + iVar6) = 0x10;\n      puVar1 = &pbVar4->data[iVar5].token.field_0x6;\n      *puVar1 = *puVar1 & 0xf3;\n      pbVar3[iVar5].first = (bin_tree_t *)0x0;\n      pbVar3[iVar5].next = (bin_tree_t *)0x0;\n      pbVar3[iVar5].node_idx = -1;\n      root_00->parent = fn;\n      root->parent = fn;\n    } while (fn != (bin_tree_t *)0x0);\n    postorder(root,(_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *)fn,extra);\n    postorder(root_00,fn_01,extra_00);\n    *err = _REG_ESPACE;\n  }" { (do_statement "do {\n      while( true ) {\n        root_00 = fn;\n        if (((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9)))) {\n          return root_00;\n        }\n        root = parse_expression(regexp,preg,token,syntax,nest,err);\n        if (((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0)) {\n          if (root_00 == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root_00,fn_00,(void *)*err);\n          return (bin_tree_t *)0x0;\n        }\n        if ((root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0)) break;\n        fn = root_00;\n        if (root_00 == (bin_tree_t *)0x0) {\n          fn = root;\n        }\n      }\n      iVar5 = prVar2->str_tree_storage_idx;\n      if (iVar5 == 0x1f) {\n        pbVar4 = (bin_tree_storage_t *)malloc(0x3e4);\n        extra = extraout_ECX;\n        fn = extraout_EDX;\n        if (pbVar4 == (bin_tree_storage_t *)0x0) break;\n        iVar7 = 1;\n        iVar5 = 0;\n        local_24 = 4;\n        pbVar4->next = prVar2->str_tree_storage;\n        prVar2->str_tree_storage = pbVar4;\n        iVar6 = 0x18;\n      }\n      else {\n        iVar7 = iVar5 + 1;\n        local_24 = iVar5 * 0x20 + 4;\n        iVar6 = iVar5 * 0x20 + 0x18;\n        pbVar4 = prVar2->str_tree_storage;\n      }\n      extra = (void *)(iVar5 * 0x20);\n      prVar2->str_tree_storage_idx = iVar7;\n      pbVar3 = pbVar4->data;\n      pbVar3[iVar5].parent = (bin_tree_t *)0x0;\n      fn = (bin_tree_t *)((int)pbVar4->data + local_24 + -4);\n      pbVar3[iVar5].left = root_00;\n      pbVar3[iVar5].right = root;\n      *(undefined1 *)((int)&pbVar4->data[0].parent + iVar6) = 0x10;\n      puVar1 = &pbVar4->data[iVar5].token.field_0x6;\n      *puVar1 = *puVar1 & 0xf3;\n      pbVar3[iVar5].first = (bin_tree_t *)0x0;\n      pbVar3[iVar5].next = (bin_tree_t *)0x0;\n      pbVar3[iVar5].node_idx = -1;\n      root_00->parent = fn;\n      root->parent = fn;\n    } while (fn != (bin_tree_t *)0x0);" do (compound_statement "{\n      while( true ) {\n        root_00 = fn;\n        if (((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9)))) {\n          return root_00;\n        }\n        root = parse_expression(regexp,preg,token,syntax,nest,err);\n        if (((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0)) {\n          if (root_00 == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root_00,fn_00,(void *)*err);\n          return (bin_tree_t *)0x0;\n        }\n        if ((root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0)) break;\n        fn = root_00;\n        if (root_00 == (bin_tree_t *)0x0) {\n          fn = root;\n        }\n      }\n      iVar5 = prVar2->str_tree_storage_idx;\n      if (iVar5 == 0x1f) {\n        pbVar4 = (bin_tree_storage_t *)malloc(0x3e4);\n        extra = extraout_ECX;\n        fn = extraout_EDX;\n        if (pbVar4 == (bin_tree_storage_t *)0x0) break;\n        iVar7 = 1;\n        iVar5 = 0;\n        local_24 = 4;\n        pbVar4->next = prVar2->str_tree_storage;\n        prVar2->str_tree_storage = pbVar4;\n        iVar6 = 0x18;\n      }\n      else {\n        iVar7 = iVar5 + 1;\n        local_24 = iVar5 * 0x20 + 4;\n        iVar6 = iVar5 * 0x20 + 0x18;\n        pbVar4 = prVar2->str_tree_storage;\n      }\n      extra = (void *)(iVar5 * 0x20);\n      prVar2->str_tree_storage_idx = iVar7;\n      pbVar3 = pbVar4->data;\n      pbVar3[iVar5].parent = (bin_tree_t *)0x0;\n      fn = (bin_tree_t *)((int)pbVar4->data + local_24 + -4);\n      pbVar3[iVar5].left = root_00;\n      pbVar3[iVar5].right = root;\n      *(undefined1 *)((int)&pbVar4->data[0].parent + iVar6) = 0x10;\n      puVar1 = &pbVar4->data[iVar5].token.field_0x6;\n      *puVar1 = *puVar1 & 0xf3;\n      pbVar3[iVar5].first = (bin_tree_t *)0x0;\n      pbVar3[iVar5].next = (bin_tree_t *)0x0;\n      pbVar3[iVar5].node_idx = -1;\n      root_00->parent = fn;\n      root->parent = fn;\n    }" { (while_statement "while( true ) {\n        root_00 = fn;\n        if (((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9)))) {\n          return root_00;\n        }\n        root = parse_expression(regexp,preg,token,syntax,nest,err);\n        if (((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0)) {\n          if (root_00 == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root_00,fn_00,(void *)*err);\n          return (bin_tree_t *)0x0;\n        }\n        if ((root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0)) break;\n        fn = root_00;\n        if (root_00 == (bin_tree_t *)0x0) {\n          fn = root;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        root_00 = fn;\n        if (((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9)))) {\n          return root_00;\n        }\n        root = parse_expression(regexp,preg,token,syntax,nest,err);\n        if (((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0)) {\n          if (root_00 == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root_00,fn_00,(void *)*err);\n          return (bin_tree_t *)0x0;\n        }\n        if ((root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0)) break;\n        fn = root_00;\n        if (root_00 == (bin_tree_t *)0x0) {\n          fn = root;\n        }\n      }" { (expression_statement "root_00 = fn;" (assignment_expression "root_00 = fn" identifier = identifier) ;) (if_statement "if (((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9)))) {\n          return root_00;\n        }" if (parenthesized_expression "(((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9))))" ( (binary_expression "((token->field_0x4 & 0xf7) == 2) || ((nest != 0 && (token->field_0x4 == 9)))" (parenthesized_expression "((token->field_0x4 & 0xf7) == 2)" ( (binary_expression "(token->field_0x4 & 0xf7) == 2" (parenthesized_expression "(token->field_0x4 & 0xf7)" ( (binary_expression "token->field_0x4 & 0xf7" (field_expression "token->field_0x4" identifier -> field_identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((nest != 0 && (token->field_0x4 == 9)))" ( (parenthesized_expression "(nest != 0 && (token->field_0x4 == 9))" ( (binary_expression "nest != 0 && (token->field_0x4 == 9)" (binary_expression "nest != 0" identifier != number_literal) && (parenthesized_expression "(token->field_0x4 == 9)" ( (binary_expression "token->field_0x4 == 9" (field_expression "token->field_0x4" identifier -> field_identifier) == number_literal) ))) )) ))) )) (compound_statement "{\n          return root_00;\n        }" { (return_statement "return root_00;" return identifier ;) })) (expression_statement "root = parse_expression(regexp,preg,token,syntax,nest,err);" (assignment_expression "root = parse_expression(regexp,preg,token,syntax,nest,err)" identifier = (call_expression "parse_expression(regexp,preg,token,syntax,nest,err)" identifier (argument_list "(regexp,preg,token,syntax,nest,err)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0)) {\n          if (root_00 == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root_00,fn_00,(void *)*err);\n          return (bin_tree_t *)0x0;\n        }" if (parenthesized_expression "(((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0))" ( (binary_expression "((void *)*err != (void *)0x0) && (root == (bin_tree_t *)0x0)" (parenthesized_expression "((void *)*err != (void *)0x0)" ( (binary_expression "(void *)*err != (void *)0x0" (cast_expression "(void *)*err" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*err" * identifier)) != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(root == (bin_tree_t *)0x0)" ( (binary_expression "root == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n          if (root_00 == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }\n          postorder(root_00,fn_00,(void *)*err);\n          return (bin_tree_t *)0x0;\n        }" { (if_statement "if (root_00 == (bin_tree_t *)0x0) {\n            return (bin_tree_t *)0x0;\n          }" if (parenthesized_expression "(root_00 == (bin_tree_t *)0x0)" ( (binary_expression "root_00 == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            return (bin_tree_t *)0x0;\n          }" { (return_statement "return (bin_tree_t *)0x0;" return (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "postorder(root_00,fn_00,(void *)*err);" (call_expression "postorder(root_00,fn_00,(void *)*err)" identifier (argument_list "(root_00,fn_00,(void *)*err)" ( identifier , identifier , (cast_expression "(void *)*err" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*err" * identifier)) ))) ;) (return_statement "return (bin_tree_t *)0x0;" return (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if ((root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0)) break;" if (parenthesized_expression "((root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0))" ( (binary_expression "(root_00 != (bin_tree_t *)0x0) && (root != (bin_tree_t *)0x0)" (parenthesized_expression "(root_00 != (bin_tree_t *)0x0)" ( (binary_expression "root_00 != (bin_tree_t *)0x0" identifier != (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(root != (bin_tree_t *)0x0)" ( (binary_expression "root != (bin_tree_t *)0x0" identifier != (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (break_statement "break;" break ;)) (expression_statement "fn = root_00;" (assignment_expression "fn = root_00" identifier = identifier) ;) (if_statement "if (root_00 == (bin_tree_t *)0x0) {\n          fn = root;\n        }" if (parenthesized_expression "(root_00 == (bin_tree_t *)0x0)" ( (binary_expression "root_00 == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          fn = root;\n        }" { (expression_statement "fn = root;" (assignment_expression "fn = root" identifier = identifier) ;) })) })) (expression_statement "iVar5 = prVar2->str_tree_storage_idx;" (assignment_expression "iVar5 = prVar2->str_tree_storage_idx" identifier = (field_expression "prVar2->str_tree_storage_idx" identifier -> field_identifier)) ;) (if_statement "if (iVar5 == 0x1f) {\n        pbVar4 = (bin_tree_storage_t *)malloc(0x3e4);\n        extra = extraout_ECX;\n        fn = extraout_EDX;\n        if (pbVar4 == (bin_tree_storage_t *)0x0) break;\n        iVar7 = 1;\n        iVar5 = 0;\n        local_24 = 4;\n        pbVar4->next = prVar2->str_tree_storage;\n        prVar2->str_tree_storage = pbVar4;\n        iVar6 = 0x18;\n      }\n      else {\n        iVar7 = iVar5 + 1;\n        local_24 = iVar5 * 0x20 + 4;\n        iVar6 = iVar5 * 0x20 + 0x18;\n        pbVar4 = prVar2->str_tree_storage;\n      }" if (parenthesized_expression "(iVar5 == 0x1f)" ( (binary_expression "iVar5 == 0x1f" identifier == number_literal) )) (compound_statement "{\n        pbVar4 = (bin_tree_storage_t *)malloc(0x3e4);\n        extra = extraout_ECX;\n        fn = extraout_EDX;\n        if (pbVar4 == (bin_tree_storage_t *)0x0) break;\n        iVar7 = 1;\n        iVar5 = 0;\n        local_24 = 4;\n        pbVar4->next = prVar2->str_tree_storage;\n        prVar2->str_tree_storage = pbVar4;\n        iVar6 = 0x18;\n      }" { (expression_statement "pbVar4 = (bin_tree_storage_t *)malloc(0x3e4);" (assignment_expression "pbVar4 = (bin_tree_storage_t *)malloc(0x3e4)" identifier = (cast_expression "(bin_tree_storage_t *)malloc(0x3e4)" ( (type_descriptor "bin_tree_storage_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(0x3e4)" identifier (argument_list "(0x3e4)" ( number_literal ))))) ;) (expression_statement "extra = extraout_ECX;" (assignment_expression "extra = extraout_ECX" identifier = identifier) ;) (expression_statement "fn = extraout_EDX;" (assignment_expression "fn = extraout_EDX" identifier = identifier) ;) (if_statement "if (pbVar4 == (bin_tree_storage_t *)0x0) break;" if (parenthesized_expression "(pbVar4 == (bin_tree_storage_t *)0x0)" ( (binary_expression "pbVar4 == (bin_tree_storage_t *)0x0" identifier == (cast_expression "(bin_tree_storage_t *)0x0" ( (type_descriptor "bin_tree_storage_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (expression_statement "local_24 = 4;" (assignment_expression "local_24 = 4" identifier = number_literal) ;) (expression_statement "pbVar4->next = prVar2->str_tree_storage;" (assignment_expression "pbVar4->next = prVar2->str_tree_storage" (field_expression "pbVar4->next" identifier -> field_identifier) = (field_expression "prVar2->str_tree_storage" identifier -> field_identifier)) ;) (expression_statement "prVar2->str_tree_storage = pbVar4;" (assignment_expression "prVar2->str_tree_storage = pbVar4" (field_expression "prVar2->str_tree_storage" identifier -> field_identifier) = identifier) ;) (expression_statement "iVar6 = 0x18;" (assignment_expression "iVar6 = 0x18" identifier = number_literal) ;) }) (else_clause "else {\n        iVar7 = iVar5 + 1;\n        local_24 = iVar5 * 0x20 + 4;\n        iVar6 = iVar5 * 0x20 + 0x18;\n        pbVar4 = prVar2->str_tree_storage;\n      }" else (compound_statement "{\n        iVar7 = iVar5 + 1;\n        local_24 = iVar5 * 0x20 + 4;\n        iVar6 = iVar5 * 0x20 + 0x18;\n        pbVar4 = prVar2->str_tree_storage;\n      }" { (expression_statement "iVar7 = iVar5 + 1;" (assignment_expression "iVar7 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) (expression_statement "local_24 = iVar5 * 0x20 + 4;" (assignment_expression "local_24 = iVar5 * 0x20 + 4" identifier = (binary_expression "iVar5 * 0x20 + 4" (binary_expression "iVar5 * 0x20" identifier * number_literal) + number_literal)) ;) (expression_statement "iVar6 = iVar5 * 0x20 + 0x18;" (assignment_expression "iVar6 = iVar5 * 0x20 + 0x18" identifier = (binary_expression "iVar5 * 0x20 + 0x18" (binary_expression "iVar5 * 0x20" identifier * number_literal) + number_literal)) ;) (expression_statement "pbVar4 = prVar2->str_tree_storage;" (assignment_expression "pbVar4 = prVar2->str_tree_storage" identifier = (field_expression "prVar2->str_tree_storage" identifier -> field_identifier)) ;) }))) (expression_statement "extra = (void *)(iVar5 * 0x20);" (assignment_expression "extra = (void *)(iVar5 * 0x20)" identifier = (cast_expression "(void *)(iVar5 * 0x20)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 * 0x20)" ( (binary_expression "iVar5 * 0x20" identifier * number_literal) )))) ;) (expression_statement "prVar2->str_tree_storage_idx = iVar7;" (assignment_expression "prVar2->str_tree_storage_idx = iVar7" (field_expression "prVar2->str_tree_storage_idx" identifier -> field_identifier) = identifier) ;) (expression_statement "pbVar3 = pbVar4->data;" (assignment_expression "pbVar3 = pbVar4->data" identifier = (field_expression "pbVar4->data" identifier -> field_identifier)) ;) (expression_statement "pbVar3[iVar5].parent = (bin_tree_t *)0x0;" (assignment_expression "pbVar3[iVar5].parent = (bin_tree_t *)0x0" (field_expression "pbVar3[iVar5].parent" (subscript_expression "pbVar3[iVar5]" identifier [ identifier ]) . field_identifier) = (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "fn = (bin_tree_t *)((int)pbVar4->data + local_24 + -4);" (assignment_expression "fn = (bin_tree_t *)((int)pbVar4->data + local_24 + -4)" identifier = (cast_expression "(bin_tree_t *)((int)pbVar4->data + local_24 + -4)" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pbVar4->data + local_24 + -4)" ( (binary_expression "(int)pbVar4->data + local_24 + -4" (binary_expression "(int)pbVar4->data + local_24" (cast_expression "(int)pbVar4->data" ( (type_descriptor "int" primitive_type) ) (field_expression "pbVar4->data" identifier -> field_identifier)) + identifier) + number_literal) )))) ;) (expression_statement "pbVar3[iVar5].left = root_00;" (assignment_expression "pbVar3[iVar5].left = root_00" (field_expression "pbVar3[iVar5].left" (subscript_expression "pbVar3[iVar5]" identifier [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "pbVar3[iVar5].right = root;" (assignment_expression "pbVar3[iVar5].right = root" (field_expression "pbVar3[iVar5].right" (subscript_expression "pbVar3[iVar5]" identifier [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "*(undefined1 *)((int)&pbVar4->data[0].parent + iVar6) = 0x10;" (assignment_expression "*(undefined1 *)((int)&pbVar4->data[0].parent + iVar6) = 0x10" (pointer_expression "*(undefined1 *)((int)&pbVar4->data[0].parent + iVar6)" * (cast_expression "(undefined1 *)((int)&pbVar4->data[0].parent + iVar6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&pbVar4->data[0].parent + iVar6)" ( (binary_expression "(int)&pbVar4->data[0].parent + iVar6" (cast_expression "(int)&pbVar4->data[0].parent" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&pbVar4->data[0].parent" & (field_expression "pbVar4->data[0].parent" (subscript_expression "pbVar4->data[0]" (field_expression "pbVar4->data" identifier -> field_identifier) [ number_literal ]) . field_identifier))) + identifier) )))) = number_literal) ;) (expression_statement "puVar1 = &pbVar4->data[iVar5].token.field_0x6;" (assignment_expression "puVar1 = &pbVar4->data[iVar5].token.field_0x6" identifier = (pointer_expression "&pbVar4->data[iVar5].token.field_0x6" & (field_expression "pbVar4->data[iVar5].token.field_0x6" (field_expression "pbVar4->data[iVar5].token" (subscript_expression "pbVar4->data[iVar5]" (field_expression "pbVar4->data" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier))) ;) (expression_statement "*puVar1 = *puVar1 & 0xf3;" (assignment_expression "*puVar1 = *puVar1 & 0xf3" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 & 0xf3" (pointer_expression "*puVar1" * identifier) & number_literal)) ;) (expression_statement "pbVar3[iVar5].first = (bin_tree_t *)0x0;" (assignment_expression "pbVar3[iVar5].first = (bin_tree_t *)0x0" (field_expression "pbVar3[iVar5].first" (subscript_expression "pbVar3[iVar5]" identifier [ identifier ]) . field_identifier) = (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pbVar3[iVar5].next = (bin_tree_t *)0x0;" (assignment_expression "pbVar3[iVar5].next = (bin_tree_t *)0x0" (field_expression "pbVar3[iVar5].next" (subscript_expression "pbVar3[iVar5]" identifier [ identifier ]) . field_identifier) = (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pbVar3[iVar5].node_idx = -1;" (assignment_expression "pbVar3[iVar5].node_idx = -1" (field_expression "pbVar3[iVar5].node_idx" (subscript_expression "pbVar3[iVar5]" identifier [ identifier ]) . field_identifier) = number_literal) ;) (expression_statement "root_00->parent = fn;" (assignment_expression "root_00->parent = fn" (field_expression "root_00->parent" identifier -> field_identifier) = identifier) ;) (expression_statement "root->parent = fn;" (assignment_expression "root->parent = fn" (field_expression "root->parent" identifier -> field_identifier) = identifier) ;) }) while (parenthesized_expression "(fn != (bin_tree_t *)0x0)" ( (binary_expression "fn != (bin_tree_t *)0x0" identifier != (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "postorder(root,(_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *)fn,extra);" (call_expression "postorder(root,(_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *)fn,extra)" identifier (argument_list "(root,(_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *)fn,extra)" ( identifier , (cast_expression "(_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *)fn" ( (type_descriptor "_func_reg_errcode_t_void_ptr_bin_tree_t_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;) (expression_statement "postorder(root_00,fn_01,extra_00);" (call_expression "postorder(root_00,fn_01,extra_00)" identifier (argument_list "(root_00,fn_01,extra_00)" ( identifier , identifier , identifier ))) ;) (expression_statement "*err = _REG_ESPACE;" (assignment_expression "*err = _REG_ESPACE" (pointer_expression "*err" * identifier) = identifier) ;) })) (return_statement "return (bin_tree_t *)0x0;" return (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))
(translation_unit "int * __regparm3\nFUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )\n\n{\n  byte *pbVar1;\n  int iVar2;\n  int *piVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  int local_24;\n  \n  iVar2 = *param_2;\n  piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);\n  if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }\n  return (int *)0x0;\n}\n\n" (function_definition "int * __regparm3\nFUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )\n\n{\n  byte *pbVar1;\n  int iVar2;\n  int *piVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  int local_24;\n  \n  iVar2 = *param_2;\n  piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);\n  if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }\n  return (int *)0x0;\n}" primitive_type (pointer_declarator "* __regparm3\nFUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )" * (ERROR "__regparm3" identifier) (function_declarator "FUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )" identifier (parameter_list "(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int *param_6" primitive_type (pointer_declarator "*param_6" * identifier)) )))) (compound_statement "{\n  byte *pbVar1;\n  int iVar2;\n  int *piVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  int local_24;\n  \n  iVar2 = *param_2;\n  piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);\n  if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }\n  return (int *)0x0;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "iVar2 = *param_2;" (assignment_expression "iVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);" (assignment_expression "piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6)" identifier = (cast_expression "(int *)FUN_00027e10(param_4,param_5,param_6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00027e10(param_4,param_5,param_6)" identifier (argument_list "(param_4,param_5,param_6)" ( identifier , identifier , identifier ))))) ;) (if_statement "if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }" if (parenthesized_expression "((*param_6 == 0) || (piVar3 != (int *)0x0))" ( (binary_expression "(*param_6 == 0) || (piVar3 != (int *)0x0)" (parenthesized_expression "(*param_6 == 0)" ( (binary_expression "*param_6 == 0" (pointer_expression "*param_6" * identifier) == number_literal) )) || (parenthesized_expression "(piVar3 != (int *)0x0)" ( (binary_expression "piVar3 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }" { (do_statement "do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);" do (compound_statement "{\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    }" { (while_statement "while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }" { (if_statement "if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }" if (parenthesized_expression "(((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9))))" ( (binary_expression "((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))" (parenthesized_expression "((*(byte *)(param_3 + 4) & 0xf7) == 2)" ( (binary_expression "(*(byte *)(param_3 + 4) & 0xf7) == 2" (parenthesized_expression "(*(byte *)(param_3 + 4) & 0xf7)" ( (binary_expression "*(byte *)(param_3 + 4) & 0xf7" (pointer_expression "*(byte *)(param_3 + 4)" * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))" ( (parenthesized_expression "(param_5 != 0 && (*(byte *)(param_3 + 4) == 9))" ( (binary_expression "param_5 != 0 && (*(byte *)(param_3 + 4) == 9)" (binary_expression "param_5 != 0" identifier != number_literal) && (parenthesized_expression "(*(byte *)(param_3 + 4) == 9)" ( (binary_expression "*(byte *)(param_3 + 4) == 9" (pointer_expression "*(byte *)(param_3 + 4)" * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) == number_literal) ))) )) ))) )) (compound_statement "{\n          return piVar3;\n        }" { (return_statement "return piVar3;" return identifier ;) })) (expression_statement "piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);" (assignment_expression "piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6)" identifier = (cast_expression "(int *)FUN_00027e10(param_4,param_5,param_6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00027e10(param_4,param_5,param_6)" identifier (argument_list "(param_4,param_5,param_6)" ( identifier , identifier , identifier ))))) ;) (if_statement "if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }" if (parenthesized_expression "((*param_6 != 0) && (piVar4 == (int *)0x0))" ( (binary_expression "(*param_6 != 0) && (piVar4 == (int *)0x0)" (parenthesized_expression "(*param_6 != 0)" ( (binary_expression "*param_6 != 0" (pointer_expression "*param_6" * identifier) != number_literal) )) && (parenthesized_expression "(piVar4 == (int *)0x0)" ( (binary_expression "piVar4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }" { (if_statement "if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }" if (parenthesized_expression "(piVar3 == (int *)0x0)" ( (binary_expression "piVar3 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            return (int *)0x0;\n          }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "FUN_0001f5e0();" (call_expression "FUN_0001f5e0()" identifier (argument_list "()" ( ))) ;) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;" if (parenthesized_expression "((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0))" ( (binary_expression "(piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)" (parenthesized_expression "(piVar3 != (int *)0x0)" ( (binary_expression "piVar3 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(piVar4 != (int *)0x0)" ( (binary_expression "piVar4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (break_statement "break;" break ;)) (if_statement "if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }" if (parenthesized_expression "(piVar3 == (int *)0x0)" ( (binary_expression "piVar3 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          piVar3 = piVar4;\n        }" { (expression_statement "piVar3 = piVar4;" (assignment_expression "piVar3 = piVar4" identifier = identifier) ;) })) })) (expression_statement "iVar6 = *(int *)(iVar2 + 0x40);" (assignment_expression "iVar6 = *(int *)(iVar2 + 0x40)" identifier = (pointer_expression "*(int *)(iVar2 + 0x40)" * (cast_expression "(int *)(iVar2 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x40)" ( (binary_expression "iVar2 + 0x40" identifier + number_literal) ))))) ;) (if_statement "if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }" if (parenthesized_expression "(iVar6 == 0x1f)" ( (binary_expression "iVar6 == 0x1f" identifier == number_literal) )) (compound_statement "{\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }" { (expression_statement "puVar5 = (undefined4 *)malloc(0x3e4);" (assignment_expression "puVar5 = (undefined4 *)malloc(0x3e4)" identifier = (cast_expression "(undefined4 *)malloc(0x3e4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(0x3e4)" identifier (argument_list "(0x3e4)" ( number_literal ))))) ;) (if_statement "if (puVar5 == (undefined4 *)0x0) break;" if (parenthesized_expression "(puVar5 == (undefined4 *)0x0)" ( (binary_expression "puVar5 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "iVar9 = 1;" (assignment_expression "iVar9 = 1" identifier = number_literal) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "local_24 = 4;" (assignment_expression "local_24 = 4" identifier = number_literal) ;) (expression_statement "*puVar5 = *(undefined4 *)(iVar2 + 0x38);" (assignment_expression "*puVar5 = *(undefined4 *)(iVar2 + 0x38)" (pointer_expression "*puVar5" * identifier) = (pointer_expression "*(undefined4 *)(iVar2 + 0x38)" * (cast_expression "(undefined4 *)(iVar2 + 0x38)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x38)" ( (binary_expression "iVar2 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 **)(iVar2 + 0x38) = puVar5;" (assignment_expression "*(undefined4 **)(iVar2 + 0x38) = puVar5" (pointer_expression "*(undefined4 **)(iVar2 + 0x38)" * (cast_expression "(undefined4 **)(iVar2 + 0x38)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x38)" ( (binary_expression "iVar2 + 0x38" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar8 = 0x18;" (assignment_expression "iVar8 = 0x18" identifier = number_literal) ;) }) (else_clause "else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }" else (compound_statement "{\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }" { (expression_statement "iVar9 = iVar6 + 1;" (assignment_expression "iVar9 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "local_24 = iVar6 * 0x20 + 4;" (assignment_expression "local_24 = iVar6 * 0x20 + 4" identifier = (binary_expression "iVar6 * 0x20 + 4" (binary_expression "iVar6 * 0x20" identifier * number_literal) + number_literal)) ;) (expression_statement "iVar8 = iVar6 * 0x20 + 0x18;" (assignment_expression "iVar8 = iVar6 * 0x20 + 0x18" identifier = (binary_expression "iVar6 * 0x20 + 0x18" (binary_expression "iVar6 * 0x20" identifier * number_literal) + number_literal)) ;) (expression_statement "puVar5 = *(undefined4 **)(iVar2 + 0x38);" (assignment_expression "puVar5 = *(undefined4 **)(iVar2 + 0x38)" identifier = (pointer_expression "*(undefined4 **)(iVar2 + 0x38)" * (cast_expression "(undefined4 **)(iVar2 + 0x38)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x38)" ( (binary_expression "iVar2 + 0x38" identifier + number_literal) ))))) ;) }))) (expression_statement "*(int *)(iVar2 + 0x40) = iVar9;" (assignment_expression "*(int *)(iVar2 + 0x40) = iVar9" (pointer_expression "*(int *)(iVar2 + 0x40)" * (cast_expression "(int *)(iVar2 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x40)" ( (binary_expression "iVar2 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "puVar5[iVar6 * 8 + 1] = 0;" (assignment_expression "puVar5[iVar6 * 8 + 1] = 0" (subscript_expression "puVar5[iVar6 * 8 + 1]" identifier [ (binary_expression "iVar6 * 8 + 1" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = number_literal) ;) (expression_statement "piVar7 = (int *)(local_24 + (int)puVar5);" (assignment_expression "piVar7 = (int *)(local_24 + (int)puVar5)" identifier = (cast_expression "(int *)(local_24 + (int)puVar5)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_24 + (int)puVar5)" ( (binary_expression "local_24 + (int)puVar5" identifier + (cast_expression "(int)puVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "puVar5[iVar6 * 8 + 2] = piVar3;" (assignment_expression "puVar5[iVar6 * 8 + 2] = piVar3" (subscript_expression "puVar5[iVar6 * 8 + 2]" identifier [ (binary_expression "iVar6 * 8 + 2" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = identifier) ;) (expression_statement "puVar5[iVar6 * 8 + 3] = piVar4;" (assignment_expression "puVar5[iVar6 * 8 + 3] = piVar4" (subscript_expression "puVar5[iVar6 * 8 + 3]" identifier [ (binary_expression "iVar6 * 8 + 3" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = identifier) ;) (expression_statement "*(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;" (assignment_expression "*(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10" (pointer_expression "*(undefined1 *)((int)puVar5 + iVar8 + 4)" * (cast_expression "(undefined1 *)((int)puVar5 + iVar8 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar5 + iVar8 + 4)" ( (binary_expression "(int)puVar5 + iVar8 + 4" (binary_expression "(int)puVar5 + iVar8" (cast_expression "(int)puVar5" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = number_literal) ;) (expression_statement "pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);" (assignment_expression "pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e)" identifier = (cast_expression "(byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar5 + iVar6 * 0x20 + 0x1e)" ( (binary_expression "(int)puVar5 + iVar6 * 0x20 + 0x1e" (binary_expression "(int)puVar5 + iVar6 * 0x20" (cast_expression "(int)puVar5" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar6 * 0x20" identifier * number_literal)) + number_literal) )))) ;) (expression_statement "*pbVar1 = *pbVar1 & 0xf3;" (assignment_expression "*pbVar1 = *pbVar1 & 0xf3" (pointer_expression "*pbVar1" * identifier) = (binary_expression "*pbVar1 & 0xf3" (pointer_expression "*pbVar1" * identifier) & number_literal)) ;) (expression_statement "puVar5[iVar6 * 8 + 4] = 0;" (assignment_expression "puVar5[iVar6 * 8 + 4] = 0" (subscript_expression "puVar5[iVar6 * 8 + 4]" identifier [ (binary_expression "iVar6 * 8 + 4" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = number_literal) ;) (expression_statement "puVar5[iVar6 * 8 + 5] = 0;" (assignment_expression "puVar5[iVar6 * 8 + 5] = 0" (subscript_expression "puVar5[iVar6 * 8 + 5]" identifier [ (binary_expression "iVar6 * 8 + 5" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = number_literal) ;) (expression_statement "puVar5[iVar6 * 8 + 8] = 0xffffffff;" (assignment_expression "puVar5[iVar6 * 8 + 8] = 0xffffffff" (subscript_expression "puVar5[iVar6 * 8 + 8]" identifier [ (binary_expression "iVar6 * 8 + 8" (binary_expression "iVar6 * 8" identifier * number_literal) + number_literal) ]) = number_literal) ;) (expression_statement "*piVar3 = (int)piVar7;" (assignment_expression "*piVar3 = (int)piVar7" (pointer_expression "*piVar3" * identifier) = (cast_expression "(int)piVar7" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "*piVar4 = (int)piVar7;" (assignment_expression "*piVar4 = (int)piVar7" (pointer_expression "*piVar4" * identifier) = (cast_expression "(int)piVar7" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar3 = piVar7;" (assignment_expression "piVar3 = piVar7" identifier = identifier) ;) }) while (parenthesized_expression "(piVar7 != (int *)0x0)" ( (binary_expression "piVar7 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "FUN_0001f5e0();" (call_expression "FUN_0001f5e0()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0001f5e0();" (call_expression "FUN_0001f5e0()" identifier (argument_list "()" ( ))) ;) (expression_statement "*param_6 = 0xc;" (assignment_expression "*param_6 = 0xc" (pointer_expression "*param_6" * identifier) = number_literal) ;) })) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) || (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT != LIT) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) ))) )) ))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) && (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) & LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) })) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })))
(function_definition "int * __regparm3\nFUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )\n\n{\n  byte *pbVar1;\n  int iVar2;\n  int *piVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  int local_24;\n  \n  iVar2 = *param_2;\n  piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);\n  if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }\n  return (int *)0x0;\n}" (primitive_type "int") (pointer_declarator "* __regparm3\nFUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )" (* "*") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0002a460(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )" (identifier "FUN_0002a460") (parameter_list "(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,int param_5,int *param_6\n            )" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (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 "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) (, ",") (parameter_declaration "int *param_6" (primitive_type "int") (pointer_declarator "*param_6" (* "*") (identifier "param_6"))) () ")")))) (compound_statement "{\n  byte *pbVar1;\n  int iVar2;\n  int *piVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  int local_24;\n  \n  iVar2 = *param_2;\n  piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);\n  if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }\n  return (int *)0x0;\n}" ({ "{") (declaration "byte *pbVar1;" (type_identifier "byte") (pointer_declarator "*pbVar1" (* "*") (identifier "pbVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int *piVar7;" (primitive_type "int") (pointer_declarator "*piVar7" (* "*") (identifier "piVar7")) (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (declaration "int local_24;" (primitive_type "int") (identifier "local_24") (; ";")) (expression_statement "iVar2 = *param_2;" (assignment_expression "iVar2 = *param_2" (identifier "iVar2") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);" (assignment_expression "piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6)" (identifier "piVar3") (= "=") (cast_expression "(int *)FUN_00027e10(param_4,param_5,param_6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00027e10(param_4,param_5,param_6)" (identifier "FUN_00027e10") (argument_list "(param_4,param_5,param_6)" (( "(") (identifier "param_4") (, ",") (identifier "param_5") (, ",") (identifier "param_6") () ")"))))) (; ";")) (if_statement "if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }" (if "if") (parenthesized_expression "((*param_6 == 0) || (piVar3 != (int *)0x0))" (( "(") (binary_expression "(*param_6 == 0) || (piVar3 != (int *)0x0)" (parenthesized_expression "(*param_6 == 0)" (( "(") (binary_expression "*param_6 == 0" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(piVar3 != (int *)0x0)" (( "(") (binary_expression "piVar3 != (int *)0x0" (identifier "piVar3") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\n    do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);\n    FUN_0001f5e0();\n    FUN_0001f5e0();\n    *param_6 = 0xc;\n  }" ({ "{") (do_statement "do {\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    } while (piVar7 != (int *)0x0);" (do "do") (compound_statement "{\n      while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }\n      iVar6 = *(int *)(iVar2 + 0x40);\n      if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }\n      *(int *)(iVar2 + 0x40) = iVar9;\n      puVar5[iVar6 * 8 + 1] = 0;\n      piVar7 = (int *)(local_24 + (int)puVar5);\n      puVar5[iVar6 * 8 + 2] = piVar3;\n      puVar5[iVar6 * 8 + 3] = piVar4;\n      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;\n      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);\n      *pbVar1 = *pbVar1 & 0xf3;\n      puVar5[iVar6 * 8 + 4] = 0;\n      puVar5[iVar6 * 8 + 5] = 0;\n      puVar5[iVar6 * 8 + 8] = 0xffffffff;\n      *piVar3 = (int)piVar7;\n      *piVar4 = (int)piVar7;\n      piVar3 = piVar7;\n    }" ({ "{") (while_statement "while( true ) {\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }\n        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);\n        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }\n        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;\n        if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }\n      }" ({ "{") (if_statement "if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {\n          return piVar3;\n        }" (if "if") (parenthesized_expression "(((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9))))" (( "(") (binary_expression "((*(byte *)(param_3 + 4) & 0xf7) == 2) ||\n           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))" (parenthesized_expression "((*(byte *)(param_3 + 4) & 0xf7) == 2)" (( "(") (binary_expression "(*(byte *)(param_3 + 4) & 0xf7) == 2" (parenthesized_expression "(*(byte *)(param_3 + 4) & 0xf7)" (( "(") (binary_expression "*(byte *)(param_3 + 4) & 0xf7" (pointer_expression "*(byte *)(param_3 + 4)" (* "*") (cast_expression "(byte *)(param_3 + 4)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "0xf7")) () ")")) (== "==") (number_literal "2")) () ")")) (|| "||") (parenthesized_expression "((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))" (( "(") (parenthesized_expression "(param_5 != 0 && (*(byte *)(param_3 + 4) == 9))" (( "(") (binary_expression "param_5 != 0 && (*(byte *)(param_3 + 4) == 9)" (binary_expression "param_5 != 0" (identifier "param_5") (!= "!=") (number_literal "0")) (&& "&&") (parenthesized_expression "(*(byte *)(param_3 + 4) == 9)" (( "(") (binary_expression "*(byte *)(param_3 + 4) == 9" (pointer_expression "*(byte *)(param_3 + 4)" (* "*") (cast_expression "(byte *)(param_3 + 4)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (== "==") (number_literal "9")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n          return piVar3;\n        }" ({ "{") (return_statement "return piVar3;" (return "return") (identifier "piVar3") (; ";")) (} "}"))) (expression_statement "piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);" (assignment_expression "piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6)" (identifier "piVar4") (= "=") (cast_expression "(int *)FUN_00027e10(param_4,param_5,param_6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00027e10(param_4,param_5,param_6)" (identifier "FUN_00027e10") (argument_list "(param_4,param_5,param_6)" (( "(") (identifier "param_4") (, ",") (identifier "param_5") (, ",") (identifier "param_6") () ")"))))) (; ";")) (if_statement "if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }" (if "if") (parenthesized_expression "((*param_6 != 0) && (piVar4 == (int *)0x0))" (( "(") (binary_expression "(*param_6 != 0) && (piVar4 == (int *)0x0)" (parenthesized_expression "(*param_6 != 0)" (( "(") (binary_expression "*param_6 != 0" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(piVar4 == (int *)0x0)" (( "(") (binary_expression "piVar4 == (int *)0x0" (identifier "piVar4") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\n          if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }\n          FUN_0001f5e0();\n          return (int *)0x0;\n        }" ({ "{") (if_statement "if (piVar3 == (int *)0x0) {\n            return (int *)0x0;\n          }" (if "if") (parenthesized_expression "(piVar3 == (int *)0x0)" (( "(") (binary_expression "piVar3 == (int *)0x0" (identifier "piVar3") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n            return (int *)0x0;\n          }" ({ "{") (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (expression_statement "FUN_0001f5e0();" (call_expression "FUN_0001f5e0()" (identifier "FUN_0001f5e0") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (if_statement "if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;" (if "if") (parenthesized_expression "((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0))" (( "(") (binary_expression "(piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)" (parenthesized_expression "(piVar3 != (int *)0x0)" (( "(") (binary_expression "piVar3 != (int *)0x0" (identifier "piVar3") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(piVar4 != (int *)0x0)" (( "(") (binary_expression "piVar4 != (int *)0x0" (identifier "piVar4") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (piVar3 == (int *)0x0) {\n          piVar3 = piVar4;\n        }" (if "if") (parenthesized_expression "(piVar3 == (int *)0x0)" (( "(") (binary_expression "piVar3 == (int *)0x0" (identifier "piVar3") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          piVar3 = piVar4;\n        }" ({ "{") (expression_statement "piVar3 = piVar4;" (assignment_expression "piVar3 = piVar4" (identifier "piVar3") (= "=") (identifier "piVar4")) (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar6 = *(int *)(iVar2 + 0x40);" (assignment_expression "iVar6 = *(int *)(iVar2 + 0x40)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(iVar2 + 0x40)" (* "*") (cast_expression "(int *)(iVar2 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x40)" (( "(") (binary_expression "iVar2 + 0x40" (identifier "iVar2") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (if_statement "if (iVar6 == 0x1f) {\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }\n      else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }" (if "if") (parenthesized_expression "(iVar6 == 0x1f)" (( "(") (binary_expression "iVar6 == 0x1f" (identifier "iVar6") (== "==") (number_literal "0x1f")) () ")")) (compound_statement "{\n        puVar5 = (undefined4 *)malloc(0x3e4);\n        if (puVar5 == (undefined4 *)0x0) break;\n        iVar9 = 1;\n        iVar6 = 0;\n        local_24 = 4;\n        *puVar5 = *(undefined4 *)(iVar2 + 0x38);\n        *(undefined4 **)(iVar2 + 0x38) = puVar5;\n        iVar8 = 0x18;\n      }" ({ "{") (expression_statement "puVar5 = (undefined4 *)malloc(0x3e4);" (assignment_expression "puVar5 = (undefined4 *)malloc(0x3e4)" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)malloc(0x3e4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "malloc(0x3e4)" (identifier "malloc") (argument_list "(0x3e4)" (( "(") (number_literal "0x3e4") () ")"))))) (; ";")) (if_statement "if (puVar5 == (undefined4 *)0x0) break;" (if "if") (parenthesized_expression "(puVar5 == (undefined4 *)0x0)" (( "(") (binary_expression "puVar5 == (undefined4 *)0x0" (identifier "puVar5") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar9 = 1;" (assignment_expression "iVar9 = 1" (identifier "iVar9") (= "=") (number_literal "1")) (; ";")) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_24 = 4;" (assignment_expression "local_24 = 4" (identifier "local_24") (= "=") (number_literal "4")) (; ";")) (expression_statement "*puVar5 = *(undefined4 *)(iVar2 + 0x38);" (assignment_expression "*puVar5 = *(undefined4 *)(iVar2 + 0x38)" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (pointer_expression "*(undefined4 *)(iVar2 + 0x38)" (* "*") (cast_expression "(undefined4 *)(iVar2 + 0x38)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x38)" (( "(") (binary_expression "iVar2 + 0x38" (identifier "iVar2") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (expression_statement "*(undefined4 **)(iVar2 + 0x38) = puVar5;" (assignment_expression "*(undefined4 **)(iVar2 + 0x38) = puVar5" (pointer_expression "*(undefined4 **)(iVar2 + 0x38)" (* "*") (cast_expression "(undefined4 **)(iVar2 + 0x38)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar2 + 0x38)" (( "(") (binary_expression "iVar2 + 0x38" (identifier "iVar2") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (identifier "puVar5")) (; ";")) (expression_statement "iVar8 = 0x18;" (assignment_expression "iVar8 = 0x18" (identifier "iVar8") (= "=") (number_literal "0x18")) (; ";")) (} "}")) (else_clause "else {\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }" (else "else") (compound_statement "{\n        iVar9 = iVar6 + 1;\n        local_24 = iVar6 * 0x20 + 4;\n        iVar8 = iVar6 * 0x20 + 0x18;\n        puVar5 = *(undefined4 **)(iVar2 + 0x38);\n      }" ({ "{") (expression_statement "iVar9 = iVar6 + 1;" (assignment_expression "iVar9 = iVar6 + 1" (identifier "iVar9") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "local_24 = iVar6 * 0x20 + 4;" (assignment_expression "local_24 = iVar6 * 0x20 + 4" (identifier "local_24") (= "=") (binary_expression "iVar6 * 0x20 + 4" (binary_expression "iVar6 * 0x20" (identifier "iVar6") (* "*") (number_literal "0x20")) (+ "+") (number_literal "4"))) (; ";")) (expression_statement "iVar8 = iVar6 * 0x20 + 0x18;" (assignment_expression "iVar8 = iVar6 * 0x20 + 0x18" (identifier "iVar8") (= "=") (binary_expression "iVar6 * 0x20 + 0x18" (binary_expression "iVar6 * 0x20" (identifier "iVar6") (* "*") (number_literal "0x20")) (+ "+") (number_literal "0x18"))) (; ";")) (expression_statement "puVar5 = *(undefined4 **)(iVar2 + 0x38);" (assignment_expression "puVar5 = *(undefined4 **)(iVar2 + 0x38)" (identifier "puVar5") (= "=") (pointer_expression "*(undefined4 **)(iVar2 + 0x38)" (* "*") (cast_expression "(undefined4 **)(iVar2 + 0x38)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar2 + 0x38)" (( "(") (binary_expression "iVar2 + 0x38" (identifier "iVar2") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (} "}")))) (expression_statement "*(int *)(iVar2 + 0x40) = iVar9;" (assignment_expression "*(int *)(iVar2 + 0x40) = iVar9" (pointer_expression "*(int *)(iVar2 + 0x40)" (* "*") (cast_expression "(int *)(iVar2 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x40)" (( "(") (binary_expression "iVar2 + 0x40" (identifier "iVar2") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (identifier "iVar9")) (; ";")) (expression_statement "puVar5[iVar6 * 8 + 1] = 0;" (assignment_expression "puVar5[iVar6 * 8 + 1] = 0" (subscript_expression "puVar5[iVar6 * 8 + 1]" (identifier "puVar5") ([ "[") (binary_expression "iVar6 * 8 + 1" (binary_expression "iVar6 * 8" (identifier "iVar6") (* "*") (number_literal "8")) (+ "+") (number_literal "1")) (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar7 = (int *)(local_24 + (int)puVar5);" (assignment_expression "piVar7 = (int *)(local_24 + (int)puVar5)" (identifier "piVar7") (= "=") (cast_expression "(int *)(local_24 + (int)puVar5)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_24 + (int)puVar5)" (( "(") (binary_expression "local_24 + (int)puVar5" (identifier "local_24") (+ "+") (cast_expression "(int)puVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar5"))) () ")")))) (; ";")) (expression_statement "puVar5[iVar6 * 8 + 2] = piVar3;" (assignment_expression "puVar5[iVar6 * 8 + 2] = piVar3" (subscript_expression "puVar5[iVar6 * 8 + 2]" (identifier "puVar5") ([ "[") (binary_expression "iVar6 * 8 + 2" (binary_expression "iVar6 * 8" (identifier "iVar6") (* "*") (number_literal "8")) (+ "+") (number_literal "2")) (] "]")) (= "=") (identifier "piVar3")) (; ";")) (expression_statement "puVar5[iVar6 * 8 + 3] = piVar4;" (assignment_expression "puVar5[iVar6 * 8 + 3] = piVar4" (subscript_expression "puVar5[iVar6 * 8 + 3]" (identifier "puVar5") ([ "[") (binary_expression "iVar6 * 8 + 3" (binary_expression "iVar6 * 8" (identifier "iVar6") (* "*") (number_literal "8")) (+ "+") (number_literal "3")) (] "]")) (= "=") (identifier "piVar4")) (; ";")) (expression_statement "*(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;" (assignment_expression "*(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10" (pointer_expression "*(undefined1 *)((int)puVar5 + iVar8 + 4)" (* "*") (cast_expression "(undefined1 *)((int)puVar5 + iVar8 + 4)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar5 + iVar8 + 4)" (( "(") (binary_expression "(int)puVar5 + iVar8 + 4" (binary_expression "(int)puVar5 + iVar8" (cast_expression "(int)puVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar5")) (+ "+") (identifier "iVar8")) (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0x10")) (; ";")) (expression_statement "pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);" (assignment_expression "pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e)" (identifier "pbVar1") (= "=") (cast_expression "(byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar5 + iVar6 * 0x20 + 0x1e)" (( "(") (binary_expression "(int)puVar5 + iVar6 * 0x20 + 0x1e" (binary_expression "(int)puVar5 + iVar6 * 0x20" (cast_expression "(int)puVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar5")) (+ "+") (binary_expression "iVar6 * 0x20" (identifier "iVar6") (* "*") (number_literal "0x20"))) (+ "+") (number_literal "0x1e")) () ")")))) (; ";")) (expression_statement "*pbVar1 = *pbVar1 & 0xf3;" (assignment_expression "*pbVar1 = *pbVar1 & 0xf3" (pointer_expression "*pbVar1" (* "*") (identifier "pbVar1")) (= "=") (binary_expression "*pbVar1 & 0xf3" (pointer_expression "*pbVar1" (* "*") (identifier "pbVar1")) (& "&") (number_literal "0xf3"))) (; ";")) (expression_statement "puVar5[iVar6 * 8 + 4] = 0;" (assignment_expression "puVar5[iVar6 * 8 + 4] = 0" (subscript_expression "puVar5[iVar6 * 8 + 4]" (identifier "puVar5") ([ "[") (binary_expression "iVar6 * 8 + 4" (binary_expression "iVar6 * 8" (identifier "iVar6") (* "*") (number_literal "8")) (+ "+") (number_literal "4")) (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar5[iVar6 * 8 + 5] = 0;" (assignment_expression "puVar5[iVar6 * 8 + 5] = 0" (subscript_expression "puVar5[iVar6 * 8 + 5]" (identifier "puVar5") ([ "[") (binary_expression "iVar6 * 8 + 5" (binary_expression "iVar6 * 8" (identifier "iVar6") (* "*") (number_literal "8")) (+ "+") (number_literal "5")) (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar5[iVar6 * 8 + 8] = 0xffffffff;" (assignment_expression "puVar5[iVar6 * 8 + 8] = 0xffffffff" (subscript_expression "puVar5[iVar6 * 8 + 8]" (identifier "puVar5") ([ "[") (binary_expression "iVar6 * 8 + 8" (binary_expression "iVar6 * 8" (identifier "iVar6") (* "*") (number_literal "8")) (+ "+") (number_literal "8")) (] "]")) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "*piVar3 = (int)piVar7;" (assignment_expression "*piVar3 = (int)piVar7" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (= "=") (cast_expression "(int)piVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar7"))) (; ";")) (expression_statement "*piVar4 = (int)piVar7;" (assignment_expression "*piVar4 = (int)piVar7" (pointer_expression "*piVar4" (* "*") (identifier "piVar4")) (= "=") (cast_expression "(int)piVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar7"))) (; ";")) (expression_statement "piVar3 = piVar7;" (assignment_expression "piVar3 = piVar7" (identifier "piVar3") (= "=") (identifier "piVar7")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(piVar7 != (int *)0x0)" (( "(") (binary_expression "piVar7 != (int *)0x0" (identifier "piVar7") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (expression_statement "FUN_0001f5e0();" (call_expression "FUN_0001f5e0()" (identifier "FUN_0001f5e0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_0001f5e0();" (call_expression "FUN_0001f5e0()" (identifier "FUN_0001f5e0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*param_6 = 0xc;" (assignment_expression "*param_6 = 0xc" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (= "=") (number_literal "0xc")) (; ";")) (} "}"))) (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Type propagation algorithm not settling */

type_3 * __regparm3
parse_branch(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx var_4,
            reg_errcode_t *err)

{
  type_1 *puVar1;
  type_2 *prVar2;
  type_3 *pbVar3;
  type_3 *var_3;
  type_3 *var_5;
  type_4 *var_10;
  void *extra;
  void *extra_00;
  void *extraout_ECX;
  int var_8;
  type_5 *fn_00;
  type_5 *fn_01;
  type_3 *extraout_EDX;
  int var_12;
  int iVar7;
  type_3 *var_6;
  int var_11;
  
  prVar2 = preg->buffer;
  var_3 = var_1(regexp,preg,token,syntax,var_4,err);
  if ((*err == var_2) || (var_3 != (type_3 *)0x0)) {
    do {
      while( true ) {
        var_6 = var_3;
        if (((token->field_0x4 & 0xf7) == 2) || ((var_4 != 0 && (token->field_0x4 == 9)))) {
          return var_6;
        }
        var_5 = var_1(regexp,preg,token,syntax,var_4,err);
        if (((void *)*err != (void *)0x0) && (var_5 == (type_3 *)0x0)) {
          if (var_6 == (type_3 *)0x0) {
            return (type_3 *)0x0;
          }
          var_7(var_6,fn_00,(void *)*err);
          return (type_3 *)0x0;
        }
        if ((var_6 != (type_3 *)0x0) && (var_5 != (type_3 *)0x0)) break;
        var_3 = var_6;
        if (var_6 == (type_3 *)0x0) {
          var_3 = var_5;
        }
      }
      var_8 = prVar2->str_tree_storage_idx;
      if (var_8 == 0x1f) {
        var_10 = (type_4 *)var_9(0x3e4);
        extra = extraout_ECX;
        var_3 = extraout_EDX;
        if (var_10 == (type_4 *)0x0) break;
        iVar7 = 1;
        var_8 = 0;
        var_11 = 4;
        var_10->next = prVar2->str_tree_storage;
        prVar2->str_tree_storage = var_10;
        var_12 = 0x18;
      }
      else {
        iVar7 = var_8 + 1;
        var_11 = var_8 * 0x20 + 4;
        var_12 = var_8 * 0x20 + 0x18;
        var_10 = prVar2->str_tree_storage;
      }
      extra = (void *)(var_8 * 0x20);
      prVar2->str_tree_storage_idx = iVar7;
      pbVar3 = var_10->data;
      pbVar3[var_8].parent = (type_3 *)0x0;
      var_3 = (type_3 *)((int)var_10->data + var_11 + -4);
      pbVar3[var_8].left = var_6;
      pbVar3[var_8].right = var_5;
      *(type_1 *)((int)&var_10->data[0].parent + var_12) = 0x10;
      puVar1 = &var_10->data[var_8].token.field_0x6;
      *puVar1 = *puVar1 & 0xf3;
      pbVar3[var_8].first = (type_3 *)0x0;
      pbVar3[var_8].next = (type_3 *)0x0;
      pbVar3[var_8].node_idx = -1;
      var_6->parent = var_3;
      var_5->parent = var_3;
    } while (var_3 != (type_3 *)0x0);
    var_7(var_5,(type_5 *)var_3,extra);
    var_7(var_6,fn_01,extra_00);
    *err = _REG_ESPACE;
  }
  return (type_3 *)0x0;
}


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

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

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

{
  byte *pbVar1;
  int iVar2;
  int *piVar3;
  int *piVar4;
  undefined4 *puVar5;
  int iVar6;
  int *piVar7;
  int iVar8;
  int iVar9;
  int local_24;
  
  iVar2 = *param_2;
  piVar3 = (int *)FUN_00027e10(param_4,param_5,param_6);
  if ((*param_6 == 0) || (piVar3 != (int *)0x0)) {
    do {
      while( true ) {
        if (((*(byte *)(param_3 + 4) & 0xf7) == 2) ||
           ((param_5 != 0 && (*(byte *)(param_3 + 4) == 9)))) {
          return piVar3;
        }
        piVar4 = (int *)FUN_00027e10(param_4,param_5,param_6);
        if ((*param_6 != 0) && (piVar4 == (int *)0x0)) {
          if (piVar3 == (int *)0x0) {
            return (int *)0x0;
          }
          FUN_0001f5e0();
          return (int *)0x0;
        }
        if ((piVar3 != (int *)0x0) && (piVar4 != (int *)0x0)) break;
        if (piVar3 == (int *)0x0) {
          piVar3 = piVar4;
        }
      }
      iVar6 = *(int *)(iVar2 + 0x40);
      if (iVar6 == 0x1f) {
        puVar5 = (undefined4 *)malloc(0x3e4);
        if (puVar5 == (undefined4 *)0x0) break;
        iVar9 = 1;
        iVar6 = 0;
        local_24 = 4;
        *puVar5 = *(undefined4 *)(iVar2 + 0x38);
        *(undefined4 **)(iVar2 + 0x38) = puVar5;
        iVar8 = 0x18;
      }
      else {
        iVar9 = iVar6 + 1;
        local_24 = iVar6 * 0x20 + 4;
        iVar8 = iVar6 * 0x20 + 0x18;
        puVar5 = *(undefined4 **)(iVar2 + 0x38);
      }
      *(int *)(iVar2 + 0x40) = iVar9;
      puVar5[iVar6 * 8 + 1] = 0;
      piVar7 = (int *)(local_24 + (int)puVar5);
      puVar5[iVar6 * 8 + 2] = piVar3;
      puVar5[iVar6 * 8 + 3] = piVar4;
      *(undefined1 *)((int)puVar5 + iVar8 + 4) = 0x10;
      pbVar1 = (byte *)((int)puVar5 + iVar6 * 0x20 + 0x1e);
      *pbVar1 = *pbVar1 & 0xf3;
      puVar5[iVar6 * 8 + 4] = 0;
      puVar5[iVar6 * 8 + 5] = 0;
      puVar5[iVar6 * 8 + 8] = 0xffffffff;
      *piVar3 = (int)piVar7;
      *piVar4 = (int)piVar7;
      piVar3 = piVar7;
    } while (piVar7 != (int *)0x0);
    FUN_0001f5e0();
    FUN_0001f5e0();
    *param_6 = 0xc;
  }
  return (int *)0x0;
}

