
int sqlite3_unlock_notify(sqlite3 *db,_func_void_void_ptr_ptr_int *xNotify,void *pArg)

{
  _func_void_void_ptr_ptr_int *p_Var1;
  sqlite3 *psVar2;
  sqlite3 *psVar3;
  sqlite3 **ppsVar4;
  sqlite3 *psVar5;
  char *zFormat;
  int err_code;
  int unaff_EDI;
  
  __x86_get_pc_thunk_di();
  if (db->mutex != (sqlite3_mutex *)0x0) {
    (**(code **)(unaff_EDI + 0x107885))(db->mutex);
  }
  enterMutex();
  if (xNotify == (_func_void_void_ptr_ptr_int *)0x0) {
    psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);
    if (psVar2 != (sqlite3 *)0x0) {
      if (db == psVar2) {
        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);
        psVar2 = db;
      }
      else {
        do {
          psVar5 = psVar2;
          psVar2 = psVar5->pNextBlocked;
          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;
        } while (db != psVar2);
        ppsVar4 = &psVar5->pNextBlocked;
      }
      *ppsVar4 = psVar2->pNextBlocked;
    }
LAB_00074d24:
    db->pBlockingConnection = (sqlite3 *)0x0;
    err_code = 0;
    zFormat = (char *)0x0;
    db->pUnlockConnection = (sqlite3 *)0x0;
    db->xUnlockNotify = (_func_void_void_ptr_ptr_int *)0x0;
    db->pUnlockArg = (void *)0x0;
    leaveMutex();
    goto LAB_00074cc8;
  }
  psVar2 = db->pBlockingConnection;
  if (psVar2 == (sqlite3 *)0x0) {
    zFormat = (char *)0x0;
    (*xNotify)(&pArg,1);
    err_code = 0;
    leaveMutex();
    goto LAB_00074cc8;
  }
  psVar5 = psVar2;
  if (psVar2 != db) {
    do {
      psVar5 = psVar5->pUnlockConnection;
      if (psVar5 == (sqlite3 *)0x0) break;
    } while (db != psVar5);
    if (psVar5 == (sqlite3 *)0x0) {
      db->pUnlockConnection = psVar2;
      db->xUnlockNotify = xNotify;
      db->pUnlockArg = pArg;
      psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);
      if (psVar2 == (sqlite3 *)0x0) {
LAB_00074d94:
        psVar2 = (sqlite3 *)0x0;
        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);
      }
      else {
        psVar5 = psVar2;
        if (db == psVar2) {
          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);
          psVar5 = db;
        }
        else {
          do {
            psVar3 = psVar5;
            psVar5 = psVar3->pNextBlocked;
            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;
          } while (db != psVar5);
          ppsVar4 = &psVar3->pNextBlocked;
        }
        *ppsVar4 = psVar5->pNextBlocked;
        psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);
        if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;
LAB_00074c64:
        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);
        p_Var1 = psVar2->xUnlockNotify;
        while (p_Var1 != db->xUnlockNotify) {
          ppsVar4 = &psVar2->pNextBlocked;
          psVar2 = psVar2->pNextBlocked;
          if (psVar2 == (sqlite3 *)0x0) break;
          p_Var1 = psVar2->xUnlockNotify;
        }
      }
      db->pNextBlocked = psVar2;
      err_code = 0;
      *ppsVar4 = db;
      leaveMutex();
      zFormat = (char *)0x0;
      goto LAB_00074cc8;
    }
  }
  leaveMutex();
  err_code = 6;
  zFormat = (char *)(unaff_EDI + 0xaaf9e);
LAB_00074cc8:
  sqlite3ErrorWithMsg(db,err_code,zFormat);
  if (db->mutex != (sqlite3_mutex *)0x0) {
    (**(code **)(unaff_EDI + 0x10788d))(db->mutex);
  }
  return err_code;
}



undefined4 FUN_00074bb0(int param_1,code *param_2,undefined4 param_3)

{
  int iVar1;
  int iVar2;
  int *piVar3;
  undefined4 *puVar4;
  int iVar5;
  undefined4 uVar6;
  int unaff_EDI;
  
  FUN_00036ac5();
  if (*(int *)(param_1 + 0xc) != 0) {
    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));
  }
  FUN_0003ad60();
  if (param_2 == (code *)0x0) {
    iVar1 = *(int *)(unaff_EDI + 0x108f59);
    if (iVar1 != 0) {
      if (param_1 == iVar1) {
        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);
        iVar1 = param_1;
      }
      else {
        do {
          iVar5 = iVar1;
          iVar1 = *(int *)(iVar5 + 500);
          if (iVar1 == 0) goto LAB_00074d24;
        } while (param_1 != iVar1);
        puVar4 = (undefined4 *)(iVar5 + 500);
      }
      *puVar4 = *(undefined4 *)(iVar1 + 500);
    }
LAB_00074d24:
    *(undefined4 *)(param_1 + 0x1e4) = 0;
    uVar6 = 0;
    iVar1 = 0;
    *(undefined4 *)(param_1 + 0x1e8) = 0;
    *(undefined4 *)(param_1 + 0x1f0) = 0;
    *(undefined4 *)(param_1 + 0x1ec) = 0;
    FUN_0003ada0();
    goto LAB_00074cc8;
  }
  iVar1 = *(int *)(param_1 + 0x1e4);
  if (iVar1 == 0) {
    iVar1 = 0;
    (*param_2)(&param_3,1);
    uVar6 = 0;
    FUN_0003ada0();
    goto LAB_00074cc8;
  }
  iVar5 = iVar1;
  if (iVar1 != param_1) {
    do {
      iVar5 = *(int *)(iVar5 + 0x1e8);
      if (iVar5 == 0) break;
    } while (param_1 != iVar5);
    if (iVar5 == 0) {
      *(int *)(param_1 + 0x1e8) = iVar1;
      *(code **)(param_1 + 0x1f0) = param_2;
      *(undefined4 *)(param_1 + 0x1ec) = param_3;
      iVar1 = *(int *)(unaff_EDI + 0x108f59);
      if (iVar1 == 0) {
LAB_00074d94:
        iVar1 = 0;
        piVar3 = (int *)(unaff_EDI + 0x108f59);
      }
      else {
        iVar5 = iVar1;
        if (param_1 == iVar1) {
          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);
          iVar5 = param_1;
        }
        else {
          do {
            iVar2 = iVar5;
            iVar5 = *(int *)(iVar2 + 500);
            if (iVar5 == 0) goto LAB_00074c64;
          } while (param_1 != iVar5);
          puVar4 = (undefined4 *)(iVar2 + 500);
        }
        *puVar4 = *(undefined4 *)(iVar5 + 500);
        iVar1 = *(int *)(unaff_EDI + 0x108f59);
        if (iVar1 == 0) goto LAB_00074d94;
LAB_00074c64:
        piVar3 = (int *)(unaff_EDI + 0x108f59);
        iVar5 = *(int *)(iVar1 + 0x1f0);
        while (iVar5 != *(int *)(param_1 + 0x1f0)) {
          piVar3 = (int *)(iVar1 + 500);
          iVar1 = *(int *)(iVar1 + 500);
          if (iVar1 == 0) break;
          iVar5 = *(int *)(iVar1 + 0x1f0);
        }
      }
      *(int *)(param_1 + 500) = iVar1;
      uVar6 = 0;
      *piVar3 = param_1;
      FUN_0003ada0();
      iVar1 = 0;
      goto LAB_00074cc8;
    }
  }
  FUN_0003ada0();
  uVar6 = 6;
  iVar1 = unaff_EDI + 0xaaf9e;
LAB_00074cc8:
  FUN_00074070(param_1,uVar6,iVar1);
  if (*(int *)(param_1 + 0xc) != 0) {
    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));
  }
  return uVar6;
}


PUSH EBP
PUSH EDI
CALL 0x00036ac5
ADD EDI,0x107271
PUSH ESI
PUSH EBX
SUB ESP,0xc
MOV ESI,dword ptr [ESP + 0x20]
MOV EBP,dword ptr [ESP + 0x24]
MOV EAX,dword ptr [ESI + 0xc]
TEST EAX,EAX
JZ 0x00074bde
SUB ESP,0xc
PUSH EAX
CALL dword ptr [EDI + 0x614]
ADD ESP,0x10
CALL 0x0003ad60
TEST EBP,EBP
JZ 0x00074cf8
MOV EAX,dword ptr [ESI + 0x1e4]
TEST EAX,EAX
JZ 0x00074cb0
MOV EBX,EAX
CMP EAX,ESI
JZ 0x00074d60
LEA ESI,[ESI]
NOP
MOV EBX,dword ptr [EBX + 0x1e8]
TEST EBX,EBX
JZ 0x00074c16
CMP ESI,EBX
JNZ 0x00074c08
TEST EBX,EBX
JNZ 0x00074d60
MOV dword ptr [ESI + 0x1e8],EAX
MOV EAX,dword ptr [ESP + 0x28]
MOV dword ptr [ESI + 0x1f0],EBP
MOV dword ptr [ESI + 0x1ec],EAX
MOV EAX,dword ptr [EDI + 0x1ce8]
TEST EAX,EAX
JZ 0x00074d94
CMP ESI,EAX
JZ 0x00074dbb
MOV ECX,EAX
JMP 0x00074c5a
CMP ESI,EDX
JZ 0x00074d78
MOV ECX,EDX
MOV EDX,dword ptr [ECX + 0x1f4]
TEST EDX,EDX
JNZ 0x00074c50
MOV EDX,dword ptr [ESI + 0x1f0]
LEA ECX,[EDI + 0x1ce8]
CMP dword ptr [EAX + 0x1f0],EDX
JNZ 0x00074c88
JMP 0x00074c98
CMP dword ptr [EAX + 0x1f0],EDX
JZ 0x00074c98
LEA ECX,[EAX + 0x1f4]
MOV EAX,dword ptr [EAX + 0x1f4]
TEST EAX,EAX
JNZ 0x00074c80
MOV dword ptr [ESI + 0x1f4],EAX
XOR EBP,EBP
MOV dword ptr [ECX],ESI
CALL 0x0003ada0
JMP 0x00074cc8
SUB ESP,0x8
XOR EBX,EBX
PUSH 0x1
LEA EAX,[ESP + 0x34]
PUSH EAX
CALL EBP
XOR EBP,EBP
CALL 0x0003ada0
ADD ESP,0x10
SUB ESP,0x4
PUSH EBX
PUSH EBP
PUSH ESI
CALL 0x00074070
MOV EAX,dword ptr [ESI + 0xc]
ADD ESP,0x10
TEST EAX,EAX
JZ 0x00074cea
SUB ESP,0xc
PUSH EAX
CALL dword ptr [EDI + 0x61c]
ADD ESP,0x10
ADD ESP,0xc
MOV EAX,EBP
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EDX,dword ptr [EDI + 0x1ce8]
TEST EDX,EDX
JZ 0x00074d24
CMP ESI,EDX
JNZ 0x00074d1a
JMP 0x00074dc5
CMP ESI,EAX
JZ 0x00074da8
MOV EDX,EAX
MOV EAX,dword ptr [EDX + 0x1f4]
TEST EAX,EAX
JNZ 0x00074d10
MOV dword ptr [ESI + 0x1e4],0x0
XOR EBP,EBP
XOR EBX,EBX
MOV dword ptr [ESI + 0x1e8],0x0
MOV dword ptr [ESI + 0x1f0],0x0
MOV dword ptr [ESI + 0x1ec],0x0
CALL 0x0003ada0
JMP 0x00074cc8
CALL 0x0003ada0
MOV EBP,0x6
LEA EBX,[EDI + 0xfffa3d2d]
JMP 0x00074cc8
ADD ECX,0x1f4
MOV EAX,dword ptr [EDX + 0x1f4]
MOV dword ptr [ECX],EAX
MOV EAX,dword ptr [EDI + 0x1ce8]
TEST EAX,EAX
JNZ 0x00074c64
XOR EAX,EAX
LEA ECX,[EDI + 0x1ce8]
JMP 0x00074c98
ADD EDX,0x1f4
MOV EAX,dword ptr [EAX + 0x1f4]
MOV dword ptr [EDX],EAX
JMP 0x00074d24
MOV EDX,ESI
LEA ECX,[EDI + 0x1ce8]
JMP 0x00074d7e
MOV EAX,ESI
LEA EDX,[EDI + 0x1ce8]
JMP 0x00074dae
(translation_unit "undefined4 FUN_00074bb0(int param_1,code *param_2,undefined4 param_3)\n\n{\n  int iVar1;\n  int iVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int unaff_EDI;\n  \n  FUN_00036ac5();\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }\n  FUN_0003ad60();\n  if (param_2 == (code *)0x0) {\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar1 = *(int *)(param_1 + 0x1e4);\n  if (iVar1 == 0) {\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar5 = iVar1;\n  if (iVar1 != param_1) {\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }\n  FUN_0003ada0();\n  uVar6 = 6;\n  iVar1 = unaff_EDI + 0xaaf9e;\nLAB_00074cc8:\n  FUN_00074070(param_1,uVar6,iVar1);\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }\n  return uVar6;\n}\n\n" (function_definition "undefined4 FUN_00074bb0(int param_1,code *param_2,undefined4 param_3)\n\n{\n  int iVar1;\n  int iVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int unaff_EDI;\n  \n  FUN_00036ac5();\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }\n  FUN_0003ad60();\n  if (param_2 == (code *)0x0) {\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar1 = *(int *)(param_1 + 0x1e4);\n  if (iVar1 == 0) {\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar5 = iVar1;\n  if (iVar1 != param_1) {\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }\n  FUN_0003ada0();\n  uVar6 = 6;\n  iVar1 = unaff_EDI + 0xaaf9e;\nLAB_00074cc8:\n  FUN_00074070(param_1,uVar6,iVar1);\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }\n  return uVar6;\n}" type_identifier (function_declarator "FUN_00074bb0(int param_1,code *param_2,undefined4 param_3)" identifier (parameter_list "(int param_1,code *param_2,undefined4 param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "code *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int unaff_EDI;\n  \n  FUN_00036ac5();\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }\n  FUN_0003ad60();\n  if (param_2 == (code *)0x0) {\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar1 = *(int *)(param_1 + 0x1e4);\n  if (iVar1 == 0) {\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar5 = iVar1;\n  if (iVar1 != param_1) {\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }\n  FUN_0003ada0();\n  uVar6 = 6;\n  iVar1 = unaff_EDI + 0xaaf9e;\nLAB_00074cc8:\n  FUN_00074070(param_1,uVar6,iVar1);\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }\n  return uVar6;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "FUN_00036ac5();" (call_expression "FUN_00036ac5()" identifier (argument_list "()" ( ))) ;) (if_statement "if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0xc) != 0)" ( (binary_expression "*(int *)(param_1 + 0xc) != 0" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }" { (expression_statement "(**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));" (call_expression "(**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc))" (parenthesized_expression "(**(code **)(unaff_EDI + 0x107885))" ( (pointer_expression "**(code **)(unaff_EDI + 0x107885)" * (pointer_expression "*(code **)(unaff_EDI + 0x107885)" * (cast_expression "(code **)(unaff_EDI + 0x107885)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x107885)" ( (binary_expression "unaff_EDI + 0x107885" identifier + number_literal) ))))) )) (argument_list "(*(int *)(param_1 + 0xc))" ( (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) ))) ;) })) (expression_statement "FUN_0003ad60();" (call_expression "FUN_0003ad60()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_2 == (code *)0x0) {\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" if (parenthesized_expression "(param_2 == (code *)0x0)" ( (binary_expression "param_2 == (code *)0x0" identifier == (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" { (expression_statement "iVar1 = *(int *)(unaff_EDI + 0x108f59);" (assignment_expression "iVar1 = *(int *)(unaff_EDI + 0x108f59)" identifier = (pointer_expression "*(int *)(unaff_EDI + 0x108f59)" * (cast_expression "(int *)(unaff_EDI + 0x108f59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }" { (if_statement "if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }" if (parenthesized_expression "(param_1 == iVar1)" ( (binary_expression "param_1 == iVar1" identifier == identifier) )) (compound_statement "{\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }" { (expression_statement "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);" (assignment_expression "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(undefined4 *)(unaff_EDI + 0x108f59)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;) (expression_statement "iVar1 = param_1;" (assignment_expression "iVar1 = param_1" identifier = identifier) ;) }) (else_clause "else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }" else (compound_statement "{\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }" { (do_statement "do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);" do (compound_statement "{\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        }" { (expression_statement "iVar5 = iVar1;" (assignment_expression "iVar5 = iVar1" identifier = identifier) ;) (expression_statement "iVar1 = *(int *)(iVar5 + 500);" (assignment_expression "iVar1 = *(int *)(iVar5 + 500)" identifier = (pointer_expression "*(int *)(iVar5 + 500)" * (cast_expression "(int *)(iVar5 + 500)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 500)" ( (binary_expression "iVar5 + 500" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) goto LAB_00074d24;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00074d24;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_1 != iVar1)" ( (binary_expression "param_1 != iVar1" identifier != identifier) )) ;) (expression_statement "puVar4 = (undefined4 *)(iVar5 + 500);" (assignment_expression "puVar4 = (undefined4 *)(iVar5 + 500)" identifier = (cast_expression "(undefined4 *)(iVar5 + 500)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 500)" ( (binary_expression "iVar5 + 500" identifier + number_literal) )))) ;) }))) (expression_statement "*puVar4 = *(undefined4 *)(iVar1 + 500);" (assignment_expression "*puVar4 = *(undefined4 *)(iVar1 + 500)" (pointer_expression "*puVar4" * identifier) = (pointer_expression "*(undefined4 *)(iVar1 + 500)" * (cast_expression "(undefined4 *)(iVar1 + 500)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 500)" ( (binary_expression "iVar1 + 500" identifier + number_literal) ))))) ;) })) (labeled_statement "LAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;" statement_identifier : (expression_statement "*(undefined4 *)(param_1 + 0x1e4) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1e4) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1e4)" * (cast_expression "(undefined4 *)(param_1 + 0x1e4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1e4)" ( (binary_expression "param_1 + 0x1e4" identifier + number_literal) )))) = number_literal) ;)) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1e8) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1e8) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1e8)" * (cast_expression "(undefined4 *)(param_1 + 0x1e8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1e8)" ( (binary_expression "param_1 + 0x1e8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1f0) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1f0) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1f0)" * (cast_expression "(undefined4 *)(param_1 + 0x1f0)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1f0)" ( (binary_expression "param_1 + 0x1f0" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1ec) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1ec) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1ec)" * (cast_expression "(undefined4 *)(param_1 + 0x1ec)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1ec)" ( (binary_expression "param_1 + 0x1ec" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto LAB_00074cc8;" goto statement_identifier ;) })) (expression_statement "iVar1 = *(int *)(param_1 + 0x1e4);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x1e4)" identifier = (pointer_expression "*(int *)(param_1 + 0x1e4)" * (cast_expression "(int *)(param_1 + 0x1e4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1e4)" ( (binary_expression "param_1 + 0x1e4" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) {\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" { (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;) (expression_statement "(*param_2)(&param_3,1);" (call_expression "(*param_2)(&param_3,1)" (parenthesized_expression "(*param_2)" ( (pointer_expression "*param_2" * identifier) )) (argument_list "(&param_3,1)" ( (pointer_expression "&param_3" & identifier) , number_literal ))) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto LAB_00074cc8;" goto statement_identifier ;) })) (expression_statement "iVar5 = iVar1;" (assignment_expression "iVar5 = iVar1" identifier = identifier) ;) (if_statement "if (iVar1 != param_1) {\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }" if (parenthesized_expression "(iVar1 != param_1)" ( (binary_expression "iVar1 != param_1" identifier != identifier) )) (compound_statement "{\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }" { (do_statement "do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);" do (compound_statement "{\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    }" { (expression_statement "iVar5 = *(int *)(iVar5 + 0x1e8);" (assignment_expression "iVar5 = *(int *)(iVar5 + 0x1e8)" identifier = (pointer_expression "*(int *)(iVar5 + 0x1e8)" * (cast_expression "(int *)(iVar5 + 0x1e8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x1e8)" ( (binary_expression "iVar5 + 0x1e8" identifier + number_literal) ))))) ;) (if_statement "if (iVar5 == 0) break;" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "(param_1 != iVar5)" ( (binary_expression "param_1 != iVar5" identifier != identifier) )) ;) (if_statement "if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }" { (expression_statement "*(int *)(param_1 + 0x1e8) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x1e8) = iVar1" (pointer_expression "*(int *)(param_1 + 0x1e8)" * (cast_expression "(int *)(param_1 + 0x1e8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1e8)" ( (binary_expression "param_1 + 0x1e8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(code **)(param_1 + 0x1f0) = param_2;" (assignment_expression "*(code **)(param_1 + 0x1f0) = param_2" (pointer_expression "*(code **)(param_1 + 0x1f0)" * (cast_expression "(code **)(param_1 + 0x1f0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x1f0)" ( (binary_expression "param_1 + 0x1f0" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1ec) = param_3;" (assignment_expression "*(undefined4 *)(param_1 + 0x1ec) = param_3" (pointer_expression "*(undefined4 *)(param_1 + 0x1ec)" * (cast_expression "(undefined4 *)(param_1 + 0x1ec)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1ec)" ( (binary_expression "param_1 + 0x1ec" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar1 = *(int *)(unaff_EDI + 0x108f59);" (assignment_expression "iVar1 = *(int *)(unaff_EDI + 0x108f59)" identifier = (pointer_expression "*(int *)(unaff_EDI + 0x108f59)" * (cast_expression "(int *)(unaff_EDI + 0x108f59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }" { (labeled_statement "LAB_00074d94:\n        iVar1 = 0;" statement_identifier : (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;)) (expression_statement "piVar3 = (int *)(unaff_EDI + 0x108f59);" (assignment_expression "piVar3 = (int *)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(int *)(unaff_EDI + 0x108f59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;) }) (else_clause "else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }" else (compound_statement "{\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }" { (expression_statement "iVar5 = iVar1;" (assignment_expression "iVar5 = iVar1" identifier = identifier) ;) (if_statement "if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }" if (parenthesized_expression "(param_1 == iVar1)" ( (binary_expression "param_1 == iVar1" identifier == identifier) )) (compound_statement "{\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }" { (expression_statement "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);" (assignment_expression "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(undefined4 *)(unaff_EDI + 0x108f59)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;) (expression_statement "iVar5 = param_1;" (assignment_expression "iVar5 = param_1" identifier = identifier) ;) }) (else_clause "else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }" else (compound_statement "{\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }" { (do_statement "do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);" do (compound_statement "{\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          }" { (expression_statement "iVar2 = iVar5;" (assignment_expression "iVar2 = iVar5" identifier = identifier) ;) (expression_statement "iVar5 = *(int *)(iVar2 + 500);" (assignment_expression "iVar5 = *(int *)(iVar2 + 500)" identifier = (pointer_expression "*(int *)(iVar2 + 500)" * (cast_expression "(int *)(iVar2 + 500)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 500)" ( (binary_expression "iVar2 + 500" identifier + number_literal) ))))) ;) (if_statement "if (iVar5 == 0) goto LAB_00074c64;" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00074c64;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_1 != iVar5)" ( (binary_expression "param_1 != iVar5" identifier != identifier) )) ;) (expression_statement "puVar4 = (undefined4 *)(iVar2 + 500);" (assignment_expression "puVar4 = (undefined4 *)(iVar2 + 500)" identifier = (cast_expression "(undefined4 *)(iVar2 + 500)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 500)" ( (binary_expression "iVar2 + 500" identifier + number_literal) )))) ;) }))) (expression_statement "*puVar4 = *(undefined4 *)(iVar5 + 500);" (assignment_expression "*puVar4 = *(undefined4 *)(iVar5 + 500)" (pointer_expression "*puVar4" * identifier) = (pointer_expression "*(undefined4 *)(iVar5 + 500)" * (cast_expression "(undefined4 *)(iVar5 + 500)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 500)" ( (binary_expression "iVar5 + 500" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(unaff_EDI + 0x108f59);" (assignment_expression "iVar1 = *(int *)(unaff_EDI + 0x108f59)" identifier = (pointer_expression "*(int *)(unaff_EDI + 0x108f59)" * (cast_expression "(int *)(unaff_EDI + 0x108f59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) goto LAB_00074d94;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00074d94;" goto statement_identifier ;)) (labeled_statement "LAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);" statement_identifier : (expression_statement "piVar3 = (int *)(unaff_EDI + 0x108f59);" (assignment_expression "piVar3 = (int *)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(int *)(unaff_EDI + 0x108f59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;)) (expression_statement "iVar5 = *(int *)(iVar1 + 0x1f0);" (assignment_expression "iVar5 = *(int *)(iVar1 + 0x1f0)" identifier = (pointer_expression "*(int *)(iVar1 + 0x1f0)" * (cast_expression "(int *)(iVar1 + 0x1f0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x1f0)" ( (binary_expression "iVar1 + 0x1f0" identifier + number_literal) ))))) ;) (while_statement "while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }" while (parenthesized_expression "(iVar5 != *(int *)(param_1 + 0x1f0))" ( (binary_expression "iVar5 != *(int *)(param_1 + 0x1f0)" identifier != (pointer_expression "*(int *)(param_1 + 0x1f0)" * (cast_expression "(int *)(param_1 + 0x1f0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1f0)" ( (binary_expression "param_1 + 0x1f0" identifier + number_literal) ))))) )) (compound_statement "{\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }" { (expression_statement "piVar3 = (int *)(iVar1 + 500);" (assignment_expression "piVar3 = (int *)(iVar1 + 500)" identifier = (cast_expression "(int *)(iVar1 + 500)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 500)" ( (binary_expression "iVar1 + 500" identifier + number_literal) )))) ;) (expression_statement "iVar1 = *(int *)(iVar1 + 500);" (assignment_expression "iVar1 = *(int *)(iVar1 + 500)" identifier = (pointer_expression "*(int *)(iVar1 + 500)" * (cast_expression "(int *)(iVar1 + 500)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 500)" ( (binary_expression "iVar1 + 500" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar5 = *(int *)(iVar1 + 0x1f0);" (assignment_expression "iVar5 = *(int *)(iVar1 + 0x1f0)" identifier = (pointer_expression "*(int *)(iVar1 + 0x1f0)" * (cast_expression "(int *)(iVar1 + 0x1f0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x1f0)" ( (binary_expression "iVar1 + 0x1f0" identifier + number_literal) ))))) ;) })) }))) (expression_statement "*(int *)(param_1 + 500) = iVar1;" (assignment_expression "*(int *)(param_1 + 500) = iVar1" (pointer_expression "*(int *)(param_1 + 500)" * (cast_expression "(int *)(param_1 + 500)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 500)" ( (binary_expression "param_1 + 500" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (expression_statement "*piVar3 = param_1;" (assignment_expression "*piVar3 = param_1" (pointer_expression "*piVar3" * identifier) = identifier) ;) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_00074cc8;" goto statement_identifier ;) })) })) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar6 = 6;" (assignment_expression "uVar6 = 6" identifier = number_literal) ;) (expression_statement "iVar1 = unaff_EDI + 0xaaf9e;" (assignment_expression "iVar1 = unaff_EDI + 0xaaf9e" identifier = (binary_expression "unaff_EDI + 0xaaf9e" identifier + number_literal)) ;) (labeled_statement "LAB_00074cc8:\n  FUN_00074070(param_1,uVar6,iVar1);" statement_identifier : (expression_statement "FUN_00074070(param_1,uVar6,iVar1);" (call_expression "FUN_00074070(param_1,uVar6,iVar1)" identifier (argument_list "(param_1,uVar6,iVar1)" ( identifier , identifier , identifier ))) ;)) (if_statement "if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0xc) != 0)" ( (binary_expression "*(int *)(param_1 + 0xc) != 0" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }" { (expression_statement "(**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));" (call_expression "(**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc))" (parenthesized_expression "(**(code **)(unaff_EDI + 0x10788d))" ( (pointer_expression "**(code **)(unaff_EDI + 0x10788d)" * (pointer_expression "*(code **)(unaff_EDI + 0x10788d)" * (cast_expression "(code **)(unaff_EDI + 0x10788d)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x10788d)" ( (binary_expression "unaff_EDI + 0x10788d" identifier + number_literal) ))))) )) (argument_list "(*(int *)(param_1 + 0xc))" ( (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) ))) ;) })) (return_statement "return uVar6;" return identifier ;) })))
(translation_unit "int sqlite3_unlock_notify(sqlite3 *db,_func_void_void_ptr_ptr_int *xNotify,void *pArg)\n\n{\n  _func_void_void_ptr_ptr_int *p_Var1;\n  sqlite3 *psVar2;\n  sqlite3 *psVar3;\n  sqlite3 **ppsVar4;\n  sqlite3 *psVar5;\n  char *zFormat;\n  int err_code;\n  int unaff_EDI;\n  \n  __x86_get_pc_thunk_di();\n  if (db->mutex != (sqlite3_mutex *)0x0) {\n    (**(code **)(unaff_EDI + 0x107885))(db->mutex);\n  }\n  enterMutex();\n  if (xNotify == (_func_void_void_ptr_ptr_int *)0x0) {\n    psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n    if (psVar2 != (sqlite3 *)0x0) {\n      if (db == psVar2) {\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        psVar2 = db;\n      }\n      else {\n        do {\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        } while (db != psVar2);\n        ppsVar4 = &psVar5->pNextBlocked;\n      }\n      *ppsVar4 = psVar2->pNextBlocked;\n    }\nLAB_00074d24:\n    db->pBlockingConnection = (sqlite3 *)0x0;\n    err_code = 0;\n    zFormat = (char *)0x0;\n    db->pUnlockConnection = (sqlite3 *)0x0;\n    db->xUnlockNotify = (_func_void_void_ptr_ptr_int *)0x0;\n    db->pUnlockArg = (void *)0x0;\n    leaveMutex();\n    goto LAB_00074cc8;\n  }\n  psVar2 = db->pBlockingConnection;\n  if (psVar2 == (sqlite3 *)0x0) {\n    zFormat = (char *)0x0;\n    (*xNotify)(&pArg,1);\n    err_code = 0;\n    leaveMutex();\n    goto LAB_00074cc8;\n  }\n  psVar5 = psVar2;\n  if (psVar2 != db) {\n    do {\n      psVar5 = psVar5->pUnlockConnection;\n      if (psVar5 == (sqlite3 *)0x0) break;\n    } while (db != psVar5);\n    if (psVar5 == (sqlite3 *)0x0) {\n      db->pUnlockConnection = psVar2;\n      db->xUnlockNotify = xNotify;\n      db->pUnlockArg = pArg;\n      psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n      if (psVar2 == (sqlite3 *)0x0) {\nLAB_00074d94:\n        psVar2 = (sqlite3 *)0x0;\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n      }\n      else {\n        psVar5 = psVar2;\n        if (db == psVar2) {\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }\n        else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }\n        *ppsVar4 = psVar5->pNextBlocked;\n        psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n        if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;\nLAB_00074c64:\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        p_Var1 = psVar2->xUnlockNotify;\n        while (p_Var1 != db->xUnlockNotify) {\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }\n      }\n      db->pNextBlocked = psVar2;\n      err_code = 0;\n      *ppsVar4 = db;\n      leaveMutex();\n      zFormat = (char *)0x0;\n      goto LAB_00074cc8;\n    }\n  }\n  leaveMutex();\n  err_code = 6;\n  zFormat = (char *)(unaff_EDI + 0xaaf9e);\nLAB_00074cc8:\n  sqlite3ErrorWithMsg(db,err_code,zFormat);\n  if (db->mutex != (sqlite3_mutex *)0x0) {\n    (**(code **)(unaff_EDI + 0x10788d))(db->mutex);\n  }\n  return err_code;\n}\n\n" (function_definition "int sqlite3_unlock_notify(sqlite3 *db,_func_void_void_ptr_ptr_int *xNotify,void *pArg)\n\n{\n  _func_void_void_ptr_ptr_int *p_Var1;\n  sqlite3 *psVar2;\n  sqlite3 *psVar3;\n  sqlite3 **ppsVar4;\n  sqlite3 *psVar5;\n  char *zFormat;\n  int err_code;\n  int unaff_EDI;\n  \n  __x86_get_pc_thunk_di();\n  if (db->mutex != (sqlite3_mutex *)0x0) {\n    (**(code **)(unaff_EDI + 0x107885))(db->mutex);\n  }\n  enterMutex();\n  if (xNotify == (_func_void_void_ptr_ptr_int *)0x0) {\n    psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n    if (psVar2 != (sqlite3 *)0x0) {\n      if (db == psVar2) {\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        psVar2 = db;\n      }\n      else {\n        do {\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        } while (db != psVar2);\n        ppsVar4 = &psVar5->pNextBlocked;\n      }\n      *ppsVar4 = psVar2->pNextBlocked;\n    }\nLAB_00074d24:\n    db->pBlockingConnection = (sqlite3 *)0x0;\n    err_code = 0;\n    zFormat = (char *)0x0;\n    db->pUnlockConnection = (sqlite3 *)0x0;\n    db->xUnlockNotify = (_func_void_void_ptr_ptr_int *)0x0;\n    db->pUnlockArg = (void *)0x0;\n    leaveMutex();\n    goto LAB_00074cc8;\n  }\n  psVar2 = db->pBlockingConnection;\n  if (psVar2 == (sqlite3 *)0x0) {\n    zFormat = (char *)0x0;\n    (*xNotify)(&pArg,1);\n    err_code = 0;\n    leaveMutex();\n    goto LAB_00074cc8;\n  }\n  psVar5 = psVar2;\n  if (psVar2 != db) {\n    do {\n      psVar5 = psVar5->pUnlockConnection;\n      if (psVar5 == (sqlite3 *)0x0) break;\n    } while (db != psVar5);\n    if (psVar5 == (sqlite3 *)0x0) {\n      db->pUnlockConnection = psVar2;\n      db->xUnlockNotify = xNotify;\n      db->pUnlockArg = pArg;\n      psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n      if (psVar2 == (sqlite3 *)0x0) {\nLAB_00074d94:\n        psVar2 = (sqlite3 *)0x0;\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n      }\n      else {\n        psVar5 = psVar2;\n        if (db == psVar2) {\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }\n        else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }\n        *ppsVar4 = psVar5->pNextBlocked;\n        psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n        if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;\nLAB_00074c64:\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        p_Var1 = psVar2->xUnlockNotify;\n        while (p_Var1 != db->xUnlockNotify) {\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }\n      }\n      db->pNextBlocked = psVar2;\n      err_code = 0;\n      *ppsVar4 = db;\n      leaveMutex();\n      zFormat = (char *)0x0;\n      goto LAB_00074cc8;\n    }\n  }\n  leaveMutex();\n  err_code = 6;\n  zFormat = (char *)(unaff_EDI + 0xaaf9e);\nLAB_00074cc8:\n  sqlite3ErrorWithMsg(db,err_code,zFormat);\n  if (db->mutex != (sqlite3_mutex *)0x0) {\n    (**(code **)(unaff_EDI + 0x10788d))(db->mutex);\n  }\n  return err_code;\n}" primitive_type (function_declarator "sqlite3_unlock_notify(sqlite3 *db,_func_void_void_ptr_ptr_int *xNotify,void *pArg)" identifier (parameter_list "(sqlite3 *db,_func_void_void_ptr_ptr_int *xNotify,void *pArg)" ( (parameter_declaration "sqlite3 *db" type_identifier (pointer_declarator "*db" * identifier)) , (parameter_declaration "_func_void_void_ptr_ptr_int *xNotify" type_identifier (pointer_declarator "*xNotify" * identifier)) , (parameter_declaration "void *pArg" primitive_type (pointer_declarator "*pArg" * identifier)) ))) (compound_statement "{\n  _func_void_void_ptr_ptr_int *p_Var1;\n  sqlite3 *psVar2;\n  sqlite3 *psVar3;\n  sqlite3 **ppsVar4;\n  sqlite3 *psVar5;\n  char *zFormat;\n  int err_code;\n  int unaff_EDI;\n  \n  __x86_get_pc_thunk_di();\n  if (db->mutex != (sqlite3_mutex *)0x0) {\n    (**(code **)(unaff_EDI + 0x107885))(db->mutex);\n  }\n  enterMutex();\n  if (xNotify == (_func_void_void_ptr_ptr_int *)0x0) {\n    psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n    if (psVar2 != (sqlite3 *)0x0) {\n      if (db == psVar2) {\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        psVar2 = db;\n      }\n      else {\n        do {\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        } while (db != psVar2);\n        ppsVar4 = &psVar5->pNextBlocked;\n      }\n      *ppsVar4 = psVar2->pNextBlocked;\n    }\nLAB_00074d24:\n    db->pBlockingConnection = (sqlite3 *)0x0;\n    err_code = 0;\n    zFormat = (char *)0x0;\n    db->pUnlockConnection = (sqlite3 *)0x0;\n    db->xUnlockNotify = (_func_void_void_ptr_ptr_int *)0x0;\n    db->pUnlockArg = (void *)0x0;\n    leaveMutex();\n    goto LAB_00074cc8;\n  }\n  psVar2 = db->pBlockingConnection;\n  if (psVar2 == (sqlite3 *)0x0) {\n    zFormat = (char *)0x0;\n    (*xNotify)(&pArg,1);\n    err_code = 0;\n    leaveMutex();\n    goto LAB_00074cc8;\n  }\n  psVar5 = psVar2;\n  if (psVar2 != db) {\n    do {\n      psVar5 = psVar5->pUnlockConnection;\n      if (psVar5 == (sqlite3 *)0x0) break;\n    } while (db != psVar5);\n    if (psVar5 == (sqlite3 *)0x0) {\n      db->pUnlockConnection = psVar2;\n      db->xUnlockNotify = xNotify;\n      db->pUnlockArg = pArg;\n      psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n      if (psVar2 == (sqlite3 *)0x0) {\nLAB_00074d94:\n        psVar2 = (sqlite3 *)0x0;\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n      }\n      else {\n        psVar5 = psVar2;\n        if (db == psVar2) {\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }\n        else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }\n        *ppsVar4 = psVar5->pNextBlocked;\n        psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n        if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;\nLAB_00074c64:\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        p_Var1 = psVar2->xUnlockNotify;\n        while (p_Var1 != db->xUnlockNotify) {\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }\n      }\n      db->pNextBlocked = psVar2;\n      err_code = 0;\n      *ppsVar4 = db;\n      leaveMutex();\n      zFormat = (char *)0x0;\n      goto LAB_00074cc8;\n    }\n  }\n  leaveMutex();\n  err_code = 6;\n  zFormat = (char *)(unaff_EDI + 0xaaf9e);\nLAB_00074cc8:\n  sqlite3ErrorWithMsg(db,err_code,zFormat);\n  if (db->mutex != (sqlite3_mutex *)0x0) {\n    (**(code **)(unaff_EDI + 0x10788d))(db->mutex);\n  }\n  return err_code;\n}" { (declaration "_func_void_void_ptr_ptr_int *p_Var1;" type_identifier (pointer_declarator "*p_Var1" * identifier) ;) (declaration "sqlite3 *psVar2;" type_identifier (pointer_declarator "*psVar2" * identifier) ;) (declaration "sqlite3 *psVar3;" type_identifier (pointer_declarator "*psVar3" * identifier) ;) (declaration "sqlite3 **ppsVar4;" type_identifier (pointer_declarator "**ppsVar4" * (pointer_declarator "*ppsVar4" * identifier)) ;) (declaration "sqlite3 *psVar5;" type_identifier (pointer_declarator "*psVar5" * identifier) ;) (declaration "char *zFormat;" primitive_type (pointer_declarator "*zFormat" * identifier) ;) (declaration "int err_code;" primitive_type identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "__x86_get_pc_thunk_di();" (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( ))) ;) (if_statement "if (db->mutex != (sqlite3_mutex *)0x0) {\n    (**(code **)(unaff_EDI + 0x107885))(db->mutex);\n  }" if (parenthesized_expression "(db->mutex != (sqlite3_mutex *)0x0)" ( (binary_expression "db->mutex != (sqlite3_mutex *)0x0" (field_expression "db->mutex" identifier -> field_identifier) != (cast_expression "(sqlite3_mutex *)0x0" ( (type_descriptor "sqlite3_mutex *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    (**(code **)(unaff_EDI + 0x107885))(db->mutex);\n  }" { (expression_statement "(**(code **)(unaff_EDI + 0x107885))(db->mutex);" (call_expression "(**(code **)(unaff_EDI + 0x107885))(db->mutex)" (parenthesized_expression "(**(code **)(unaff_EDI + 0x107885))" ( (pointer_expression "**(code **)(unaff_EDI + 0x107885)" * (pointer_expression "*(code **)(unaff_EDI + 0x107885)" * (cast_expression "(code **)(unaff_EDI + 0x107885)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x107885)" ( (binary_expression "unaff_EDI + 0x107885" identifier + number_literal) ))))) )) (argument_list "(db->mutex)" ( (field_expression "db->mutex" identifier -> field_identifier) ))) ;) })) (expression_statement "enterMutex();" (call_expression "enterMutex()" identifier (argument_list "()" ( ))) ;) (if_statement "if (xNotify == (_func_void_void_ptr_ptr_int *)0x0) {\n    psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n    if (psVar2 != (sqlite3 *)0x0) {\n      if (db == psVar2) {\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        psVar2 = db;\n      }\n      else {\n        do {\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        } while (db != psVar2);\n        ppsVar4 = &psVar5->pNextBlocked;\n      }\n      *ppsVar4 = psVar2->pNextBlocked;\n    }\nLAB_00074d24:\n    db->pBlockingConnection = (sqlite3 *)0x0;\n    err_code = 0;\n    zFormat = (char *)0x0;\n    db->pUnlockConnection = (sqlite3 *)0x0;\n    db->xUnlockNotify = (_func_void_void_ptr_ptr_int *)0x0;\n    db->pUnlockArg = (void *)0x0;\n    leaveMutex();\n    goto LAB_00074cc8;\n  }" if (parenthesized_expression "(xNotify == (_func_void_void_ptr_ptr_int *)0x0)" ( (binary_expression "xNotify == (_func_void_void_ptr_ptr_int *)0x0" identifier == (cast_expression "(_func_void_void_ptr_ptr_int *)0x0" ( (type_descriptor "_func_void_void_ptr_ptr_int *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n    if (psVar2 != (sqlite3 *)0x0) {\n      if (db == psVar2) {\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        psVar2 = db;\n      }\n      else {\n        do {\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        } while (db != psVar2);\n        ppsVar4 = &psVar5->pNextBlocked;\n      }\n      *ppsVar4 = psVar2->pNextBlocked;\n    }\nLAB_00074d24:\n    db->pBlockingConnection = (sqlite3 *)0x0;\n    err_code = 0;\n    zFormat = (char *)0x0;\n    db->pUnlockConnection = (sqlite3 *)0x0;\n    db->xUnlockNotify = (_func_void_void_ptr_ptr_int *)0x0;\n    db->pUnlockArg = (void *)0x0;\n    leaveMutex();\n    goto LAB_00074cc8;\n  }" { (expression_statement "psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);" (assignment_expression "psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59)" identifier = (pointer_expression "*(sqlite3 **)(unaff_EDI + 0x108f59)" * (cast_expression "(sqlite3 **)(unaff_EDI + 0x108f59)" ( (type_descriptor "sqlite3 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) ))))) ;) (if_statement "if (psVar2 != (sqlite3 *)0x0) {\n      if (db == psVar2) {\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        psVar2 = db;\n      }\n      else {\n        do {\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        } while (db != psVar2);\n        ppsVar4 = &psVar5->pNextBlocked;\n      }\n      *ppsVar4 = psVar2->pNextBlocked;\n    }" if (parenthesized_expression "(psVar2 != (sqlite3 *)0x0)" ( (binary_expression "psVar2 != (sqlite3 *)0x0" identifier != (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      if (db == psVar2) {\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        psVar2 = db;\n      }\n      else {\n        do {\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        } while (db != psVar2);\n        ppsVar4 = &psVar5->pNextBlocked;\n      }\n      *ppsVar4 = psVar2->pNextBlocked;\n    }" { (if_statement "if (db == psVar2) {\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        psVar2 = db;\n      }\n      else {\n        do {\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        } while (db != psVar2);\n        ppsVar4 = &psVar5->pNextBlocked;\n      }" if (parenthesized_expression "(db == psVar2)" ( (binary_expression "db == psVar2" identifier == identifier) )) (compound_statement "{\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        psVar2 = db;\n      }" { (expression_statement "ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);" (assignment_expression "ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(sqlite3 **)(unaff_EDI + 0x108f59)" ( (type_descriptor "sqlite3 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;) (expression_statement "psVar2 = db;" (assignment_expression "psVar2 = db" identifier = identifier) ;) }) (else_clause "else {\n        do {\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        } while (db != psVar2);\n        ppsVar4 = &psVar5->pNextBlocked;\n      }" else (compound_statement "{\n        do {\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        } while (db != psVar2);\n        ppsVar4 = &psVar5->pNextBlocked;\n      }" { (do_statement "do {\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        } while (db != psVar2);" do (compound_statement "{\n          psVar5 = psVar2;\n          psVar2 = psVar5->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;\n        }" { (expression_statement "psVar5 = psVar2;" (assignment_expression "psVar5 = psVar2" identifier = identifier) ;) (expression_statement "psVar2 = psVar5->pNextBlocked;" (assignment_expression "psVar2 = psVar5->pNextBlocked" identifier = (field_expression "psVar5->pNextBlocked" identifier -> field_identifier)) ;) (if_statement "if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d24;" if (parenthesized_expression "(psVar2 == (sqlite3 *)0x0)" ( (binary_expression "psVar2 == (sqlite3 *)0x0" identifier == (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00074d24;" goto statement_identifier ;)) }) while (parenthesized_expression "(db != psVar2)" ( (binary_expression "db != psVar2" identifier != identifier) )) ;) (expression_statement "ppsVar4 = &psVar5->pNextBlocked;" (assignment_expression "ppsVar4 = &psVar5->pNextBlocked" identifier = (pointer_expression "&psVar5->pNextBlocked" & (field_expression "psVar5->pNextBlocked" identifier -> field_identifier))) ;) }))) (expression_statement "*ppsVar4 = psVar2->pNextBlocked;" (assignment_expression "*ppsVar4 = psVar2->pNextBlocked" (pointer_expression "*ppsVar4" * identifier) = (field_expression "psVar2->pNextBlocked" identifier -> field_identifier)) ;) })) (labeled_statement "LAB_00074d24:\n    db->pBlockingConnection = (sqlite3 *)0x0;" statement_identifier : (expression_statement "db->pBlockingConnection = (sqlite3 *)0x0;" (assignment_expression "db->pBlockingConnection = (sqlite3 *)0x0" (field_expression "db->pBlockingConnection" identifier -> field_identifier) = (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (expression_statement "err_code = 0;" (assignment_expression "err_code = 0" identifier = number_literal) ;) (expression_statement "zFormat = (char *)0x0;" (assignment_expression "zFormat = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "db->pUnlockConnection = (sqlite3 *)0x0;" (assignment_expression "db->pUnlockConnection = (sqlite3 *)0x0" (field_expression "db->pUnlockConnection" identifier -> field_identifier) = (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "db->xUnlockNotify = (_func_void_void_ptr_ptr_int *)0x0;" (assignment_expression "db->xUnlockNotify = (_func_void_void_ptr_ptr_int *)0x0" (field_expression "db->xUnlockNotify" identifier -> field_identifier) = (cast_expression "(_func_void_void_ptr_ptr_int *)0x0" ( (type_descriptor "_func_void_void_ptr_ptr_int *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "db->pUnlockArg = (void *)0x0;" (assignment_expression "db->pUnlockArg = (void *)0x0" (field_expression "db->pUnlockArg" identifier -> field_identifier) = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "leaveMutex();" (call_expression "leaveMutex()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto LAB_00074cc8;" goto statement_identifier ;) })) (expression_statement "psVar2 = db->pBlockingConnection;" (assignment_expression "psVar2 = db->pBlockingConnection" identifier = (field_expression "db->pBlockingConnection" identifier -> field_identifier)) ;) (if_statement "if (psVar2 == (sqlite3 *)0x0) {\n    zFormat = (char *)0x0;\n    (*xNotify)(&pArg,1);\n    err_code = 0;\n    leaveMutex();\n    goto LAB_00074cc8;\n  }" if (parenthesized_expression "(psVar2 == (sqlite3 *)0x0)" ( (binary_expression "psVar2 == (sqlite3 *)0x0" identifier == (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    zFormat = (char *)0x0;\n    (*xNotify)(&pArg,1);\n    err_code = 0;\n    leaveMutex();\n    goto LAB_00074cc8;\n  }" { (expression_statement "zFormat = (char *)0x0;" (assignment_expression "zFormat = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(*xNotify)(&pArg,1);" (call_expression "(*xNotify)(&pArg,1)" (parenthesized_expression "(*xNotify)" ( (pointer_expression "*xNotify" * identifier) )) (argument_list "(&pArg,1)" ( (pointer_expression "&pArg" & identifier) , number_literal ))) ;) (expression_statement "err_code = 0;" (assignment_expression "err_code = 0" identifier = number_literal) ;) (expression_statement "leaveMutex();" (call_expression "leaveMutex()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto LAB_00074cc8;" goto statement_identifier ;) })) (expression_statement "psVar5 = psVar2;" (assignment_expression "psVar5 = psVar2" identifier = identifier) ;) (if_statement "if (psVar2 != db) {\n    do {\n      psVar5 = psVar5->pUnlockConnection;\n      if (psVar5 == (sqlite3 *)0x0) break;\n    } while (db != psVar5);\n    if (psVar5 == (sqlite3 *)0x0) {\n      db->pUnlockConnection = psVar2;\n      db->xUnlockNotify = xNotify;\n      db->pUnlockArg = pArg;\n      psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n      if (psVar2 == (sqlite3 *)0x0) {\nLAB_00074d94:\n        psVar2 = (sqlite3 *)0x0;\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n      }\n      else {\n        psVar5 = psVar2;\n        if (db == psVar2) {\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }\n        else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }\n        *ppsVar4 = psVar5->pNextBlocked;\n        psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n        if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;\nLAB_00074c64:\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        p_Var1 = psVar2->xUnlockNotify;\n        while (p_Var1 != db->xUnlockNotify) {\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }\n      }\n      db->pNextBlocked = psVar2;\n      err_code = 0;\n      *ppsVar4 = db;\n      leaveMutex();\n      zFormat = (char *)0x0;\n      goto LAB_00074cc8;\n    }\n  }" if (parenthesized_expression "(psVar2 != db)" ( (binary_expression "psVar2 != db" identifier != identifier) )) (compound_statement "{\n    do {\n      psVar5 = psVar5->pUnlockConnection;\n      if (psVar5 == (sqlite3 *)0x0) break;\n    } while (db != psVar5);\n    if (psVar5 == (sqlite3 *)0x0) {\n      db->pUnlockConnection = psVar2;\n      db->xUnlockNotify = xNotify;\n      db->pUnlockArg = pArg;\n      psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n      if (psVar2 == (sqlite3 *)0x0) {\nLAB_00074d94:\n        psVar2 = (sqlite3 *)0x0;\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n      }\n      else {\n        psVar5 = psVar2;\n        if (db == psVar2) {\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }\n        else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }\n        *ppsVar4 = psVar5->pNextBlocked;\n        psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n        if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;\nLAB_00074c64:\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        p_Var1 = psVar2->xUnlockNotify;\n        while (p_Var1 != db->xUnlockNotify) {\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }\n      }\n      db->pNextBlocked = psVar2;\n      err_code = 0;\n      *ppsVar4 = db;\n      leaveMutex();\n      zFormat = (char *)0x0;\n      goto LAB_00074cc8;\n    }\n  }" { (do_statement "do {\n      psVar5 = psVar5->pUnlockConnection;\n      if (psVar5 == (sqlite3 *)0x0) break;\n    } while (db != psVar5);" do (compound_statement "{\n      psVar5 = psVar5->pUnlockConnection;\n      if (psVar5 == (sqlite3 *)0x0) break;\n    }" { (expression_statement "psVar5 = psVar5->pUnlockConnection;" (assignment_expression "psVar5 = psVar5->pUnlockConnection" identifier = (field_expression "psVar5->pUnlockConnection" identifier -> field_identifier)) ;) (if_statement "if (psVar5 == (sqlite3 *)0x0) break;" if (parenthesized_expression "(psVar5 == (sqlite3 *)0x0)" ( (binary_expression "psVar5 == (sqlite3 *)0x0" identifier == (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "(db != psVar5)" ( (binary_expression "db != psVar5" identifier != identifier) )) ;) (if_statement "if (psVar5 == (sqlite3 *)0x0) {\n      db->pUnlockConnection = psVar2;\n      db->xUnlockNotify = xNotify;\n      db->pUnlockArg = pArg;\n      psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n      if (psVar2 == (sqlite3 *)0x0) {\nLAB_00074d94:\n        psVar2 = (sqlite3 *)0x0;\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n      }\n      else {\n        psVar5 = psVar2;\n        if (db == psVar2) {\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }\n        else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }\n        *ppsVar4 = psVar5->pNextBlocked;\n        psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n        if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;\nLAB_00074c64:\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        p_Var1 = psVar2->xUnlockNotify;\n        while (p_Var1 != db->xUnlockNotify) {\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }\n      }\n      db->pNextBlocked = psVar2;\n      err_code = 0;\n      *ppsVar4 = db;\n      leaveMutex();\n      zFormat = (char *)0x0;\n      goto LAB_00074cc8;\n    }" if (parenthesized_expression "(psVar5 == (sqlite3 *)0x0)" ( (binary_expression "psVar5 == (sqlite3 *)0x0" identifier == (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      db->pUnlockConnection = psVar2;\n      db->xUnlockNotify = xNotify;\n      db->pUnlockArg = pArg;\n      psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n      if (psVar2 == (sqlite3 *)0x0) {\nLAB_00074d94:\n        psVar2 = (sqlite3 *)0x0;\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n      }\n      else {\n        psVar5 = psVar2;\n        if (db == psVar2) {\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }\n        else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }\n        *ppsVar4 = psVar5->pNextBlocked;\n        psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n        if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;\nLAB_00074c64:\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        p_Var1 = psVar2->xUnlockNotify;\n        while (p_Var1 != db->xUnlockNotify) {\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }\n      }\n      db->pNextBlocked = psVar2;\n      err_code = 0;\n      *ppsVar4 = db;\n      leaveMutex();\n      zFormat = (char *)0x0;\n      goto LAB_00074cc8;\n    }" { (expression_statement "db->pUnlockConnection = psVar2;" (assignment_expression "db->pUnlockConnection = psVar2" (field_expression "db->pUnlockConnection" identifier -> field_identifier) = identifier) ;) (expression_statement "db->xUnlockNotify = xNotify;" (assignment_expression "db->xUnlockNotify = xNotify" (field_expression "db->xUnlockNotify" identifier -> field_identifier) = identifier) ;) (expression_statement "db->pUnlockArg = pArg;" (assignment_expression "db->pUnlockArg = pArg" (field_expression "db->pUnlockArg" identifier -> field_identifier) = identifier) ;) (expression_statement "psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);" (assignment_expression "psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59)" identifier = (pointer_expression "*(sqlite3 **)(unaff_EDI + 0x108f59)" * (cast_expression "(sqlite3 **)(unaff_EDI + 0x108f59)" ( (type_descriptor "sqlite3 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) ))))) ;) (if_statement "if (psVar2 == (sqlite3 *)0x0) {\nLAB_00074d94:\n        psVar2 = (sqlite3 *)0x0;\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n      }\n      else {\n        psVar5 = psVar2;\n        if (db == psVar2) {\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }\n        else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }\n        *ppsVar4 = psVar5->pNextBlocked;\n        psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n        if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;\nLAB_00074c64:\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        p_Var1 = psVar2->xUnlockNotify;\n        while (p_Var1 != db->xUnlockNotify) {\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }\n      }" if (parenthesized_expression "(psVar2 == (sqlite3 *)0x0)" ( (binary_expression "psVar2 == (sqlite3 *)0x0" identifier == (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00074d94:\n        psVar2 = (sqlite3 *)0x0;\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n      }" { (labeled_statement "LAB_00074d94:\n        psVar2 = (sqlite3 *)0x0;" statement_identifier : (expression_statement "psVar2 = (sqlite3 *)0x0;" (assignment_expression "psVar2 = (sqlite3 *)0x0" identifier = (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (expression_statement "ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);" (assignment_expression "ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(sqlite3 **)(unaff_EDI + 0x108f59)" ( (type_descriptor "sqlite3 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;) }) (else_clause "else {\n        psVar5 = psVar2;\n        if (db == psVar2) {\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }\n        else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }\n        *ppsVar4 = psVar5->pNextBlocked;\n        psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n        if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;\nLAB_00074c64:\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        p_Var1 = psVar2->xUnlockNotify;\n        while (p_Var1 != db->xUnlockNotify) {\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }\n      }" else (compound_statement "{\n        psVar5 = psVar2;\n        if (db == psVar2) {\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }\n        else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }\n        *ppsVar4 = psVar5->pNextBlocked;\n        psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);\n        if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;\nLAB_00074c64:\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n        p_Var1 = psVar2->xUnlockNotify;\n        while (p_Var1 != db->xUnlockNotify) {\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }\n      }" { (expression_statement "psVar5 = psVar2;" (assignment_expression "psVar5 = psVar2" identifier = identifier) ;) (if_statement "if (db == psVar2) {\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }\n        else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }" if (parenthesized_expression "(db == psVar2)" ( (binary_expression "db == psVar2" identifier == identifier) )) (compound_statement "{\n          ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);\n          psVar5 = db;\n        }" { (expression_statement "ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);" (assignment_expression "ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(sqlite3 **)(unaff_EDI + 0x108f59)" ( (type_descriptor "sqlite3 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;) (expression_statement "psVar5 = db;" (assignment_expression "psVar5 = db" identifier = identifier) ;) }) (else_clause "else {\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }" else (compound_statement "{\n          do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);\n          ppsVar4 = &psVar3->pNextBlocked;\n        }" { (do_statement "do {\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          } while (db != psVar5);" do (compound_statement "{\n            psVar3 = psVar5;\n            psVar5 = psVar3->pNextBlocked;\n            if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;\n          }" { (expression_statement "psVar3 = psVar5;" (assignment_expression "psVar3 = psVar5" identifier = identifier) ;) (expression_statement "psVar5 = psVar3->pNextBlocked;" (assignment_expression "psVar5 = psVar3->pNextBlocked" identifier = (field_expression "psVar3->pNextBlocked" identifier -> field_identifier)) ;) (if_statement "if (psVar5 == (sqlite3 *)0x0) goto LAB_00074c64;" if (parenthesized_expression "(psVar5 == (sqlite3 *)0x0)" ( (binary_expression "psVar5 == (sqlite3 *)0x0" identifier == (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00074c64;" goto statement_identifier ;)) }) while (parenthesized_expression "(db != psVar5)" ( (binary_expression "db != psVar5" identifier != identifier) )) ;) (expression_statement "ppsVar4 = &psVar3->pNextBlocked;" (assignment_expression "ppsVar4 = &psVar3->pNextBlocked" identifier = (pointer_expression "&psVar3->pNextBlocked" & (field_expression "psVar3->pNextBlocked" identifier -> field_identifier))) ;) }))) (expression_statement "*ppsVar4 = psVar5->pNextBlocked;" (assignment_expression "*ppsVar4 = psVar5->pNextBlocked" (pointer_expression "*ppsVar4" * identifier) = (field_expression "psVar5->pNextBlocked" identifier -> field_identifier)) ;) (expression_statement "psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59);" (assignment_expression "psVar2 = *(sqlite3 **)(unaff_EDI + 0x108f59)" identifier = (pointer_expression "*(sqlite3 **)(unaff_EDI + 0x108f59)" * (cast_expression "(sqlite3 **)(unaff_EDI + 0x108f59)" ( (type_descriptor "sqlite3 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) ))))) ;) (if_statement "if (psVar2 == (sqlite3 *)0x0) goto LAB_00074d94;" if (parenthesized_expression "(psVar2 == (sqlite3 *)0x0)" ( (binary_expression "psVar2 == (sqlite3 *)0x0" identifier == (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00074d94;" goto statement_identifier ;)) (labeled_statement "LAB_00074c64:\n        ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);" statement_identifier : (expression_statement "ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59);" (assignment_expression "ppsVar4 = (sqlite3 **)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(sqlite3 **)(unaff_EDI + 0x108f59)" ( (type_descriptor "sqlite3 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;)) (expression_statement "p_Var1 = psVar2->xUnlockNotify;" (assignment_expression "p_Var1 = psVar2->xUnlockNotify" identifier = (field_expression "psVar2->xUnlockNotify" identifier -> field_identifier)) ;) (while_statement "while (p_Var1 != db->xUnlockNotify) {\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }" while (parenthesized_expression "(p_Var1 != db->xUnlockNotify)" ( (binary_expression "p_Var1 != db->xUnlockNotify" identifier != (field_expression "db->xUnlockNotify" identifier -> field_identifier)) )) (compound_statement "{\n          ppsVar4 = &psVar2->pNextBlocked;\n          psVar2 = psVar2->pNextBlocked;\n          if (psVar2 == (sqlite3 *)0x0) break;\n          p_Var1 = psVar2->xUnlockNotify;\n        }" { (expression_statement "ppsVar4 = &psVar2->pNextBlocked;" (assignment_expression "ppsVar4 = &psVar2->pNextBlocked" identifier = (pointer_expression "&psVar2->pNextBlocked" & (field_expression "psVar2->pNextBlocked" identifier -> field_identifier))) ;) (expression_statement "psVar2 = psVar2->pNextBlocked;" (assignment_expression "psVar2 = psVar2->pNextBlocked" identifier = (field_expression "psVar2->pNextBlocked" identifier -> field_identifier)) ;) (if_statement "if (psVar2 == (sqlite3 *)0x0) break;" if (parenthesized_expression "(psVar2 == (sqlite3 *)0x0)" ( (binary_expression "psVar2 == (sqlite3 *)0x0" identifier == (cast_expression "(sqlite3 *)0x0" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "p_Var1 = psVar2->xUnlockNotify;" (assignment_expression "p_Var1 = psVar2->xUnlockNotify" identifier = (field_expression "psVar2->xUnlockNotify" identifier -> field_identifier)) ;) })) }))) (expression_statement "db->pNextBlocked = psVar2;" (assignment_expression "db->pNextBlocked = psVar2" (field_expression "db->pNextBlocked" identifier -> field_identifier) = identifier) ;) (expression_statement "err_code = 0;" (assignment_expression "err_code = 0" identifier = number_literal) ;) (expression_statement "*ppsVar4 = db;" (assignment_expression "*ppsVar4 = db" (pointer_expression "*ppsVar4" * identifier) = identifier) ;) (expression_statement "leaveMutex();" (call_expression "leaveMutex()" identifier (argument_list "()" ( ))) ;) (expression_statement "zFormat = (char *)0x0;" (assignment_expression "zFormat = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00074cc8;" goto statement_identifier ;) })) })) (expression_statement "leaveMutex();" (call_expression "leaveMutex()" identifier (argument_list "()" ( ))) ;) (expression_statement "err_code = 6;" (assignment_expression "err_code = 6" identifier = number_literal) ;) (expression_statement "zFormat = (char *)(unaff_EDI + 0xaaf9e);" (assignment_expression "zFormat = (char *)(unaff_EDI + 0xaaf9e)" identifier = (cast_expression "(char *)(unaff_EDI + 0xaaf9e)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0xaaf9e)" ( (binary_expression "unaff_EDI + 0xaaf9e" identifier + number_literal) )))) ;) (labeled_statement "LAB_00074cc8:\n  sqlite3ErrorWithMsg(db,err_code,zFormat);" statement_identifier : (expression_statement "sqlite3ErrorWithMsg(db,err_code,zFormat);" (call_expression "sqlite3ErrorWithMsg(db,err_code,zFormat)" identifier (argument_list "(db,err_code,zFormat)" ( identifier , identifier , identifier ))) ;)) (if_statement "if (db->mutex != (sqlite3_mutex *)0x0) {\n    (**(code **)(unaff_EDI + 0x10788d))(db->mutex);\n  }" if (parenthesized_expression "(db->mutex != (sqlite3_mutex *)0x0)" ( (binary_expression "db->mutex != (sqlite3_mutex *)0x0" (field_expression "db->mutex" identifier -> field_identifier) != (cast_expression "(sqlite3_mutex *)0x0" ( (type_descriptor "sqlite3_mutex *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    (**(code **)(unaff_EDI + 0x10788d))(db->mutex);\n  }" { (expression_statement "(**(code **)(unaff_EDI + 0x10788d))(db->mutex);" (call_expression "(**(code **)(unaff_EDI + 0x10788d))(db->mutex)" (parenthesized_expression "(**(code **)(unaff_EDI + 0x10788d))" ( (pointer_expression "**(code **)(unaff_EDI + 0x10788d)" * (pointer_expression "*(code **)(unaff_EDI + 0x10788d)" * (cast_expression "(code **)(unaff_EDI + 0x10788d)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x10788d)" ( (binary_expression "unaff_EDI + 0x10788d" identifier + number_literal) ))))) )) (argument_list "(db->mutex)" ( (field_expression "db->mutex" identifier -> field_identifier) ))) ;) })) (return_statement "return err_code;" return identifier ;) })))
(translation_unit "undefined4 FUN_00074bb0(int param_1,code *param_2,undefined4 param_3)\n\n{\n  int iVar1;\n  int iVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int unaff_EDI;\n  \n  FUN_00036ac5();\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }\n  FUN_0003ad60();\n  if (param_2 == (code *)0x0) {\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar1 = *(int *)(param_1 + 0x1e4);\n  if (iVar1 == 0) {\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar5 = iVar1;\n  if (iVar1 != param_1) {\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }\n  FUN_0003ada0();\n  uVar6 = 6;\n  iVar1 = unaff_EDI + 0xaaf9e;\nLAB_00074cc8:\n  FUN_00074070(param_1,uVar6,iVar1);\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }\n  return uVar6;\n}\n\n" (function_definition "undefined4 FUN_00074bb0(int param_1,code *param_2,undefined4 param_3)\n\n{\n  int iVar1;\n  int iVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int unaff_EDI;\n  \n  FUN_00036ac5();\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }\n  FUN_0003ad60();\n  if (param_2 == (code *)0x0) {\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar1 = *(int *)(param_1 + 0x1e4);\n  if (iVar1 == 0) {\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar5 = iVar1;\n  if (iVar1 != param_1) {\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }\n  FUN_0003ada0();\n  uVar6 = 6;\n  iVar1 = unaff_EDI + 0xaaf9e;\nLAB_00074cc8:\n  FUN_00074070(param_1,uVar6,iVar1);\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }\n  return uVar6;\n}" type_identifier (function_declarator "FUN_00074bb0(int param_1,code *param_2,undefined4 param_3)" identifier (parameter_list "(int param_1,code *param_2,undefined4 param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "code *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int unaff_EDI;\n  \n  FUN_00036ac5();\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }\n  FUN_0003ad60();\n  if (param_2 == (code *)0x0) {\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar1 = *(int *)(param_1 + 0x1e4);\n  if (iVar1 == 0) {\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar5 = iVar1;\n  if (iVar1 != param_1) {\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }\n  FUN_0003ada0();\n  uVar6 = 6;\n  iVar1 = unaff_EDI + 0xaaf9e;\nLAB_00074cc8:\n  FUN_00074070(param_1,uVar6,iVar1);\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }\n  return uVar6;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "FUN_00036ac5();" (call_expression "FUN_00036ac5()" identifier (argument_list "()" ( ))) ;) (if_statement "if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0xc) != 0)" ( (binary_expression "*(int *)(param_1 + 0xc) != 0" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }" { (expression_statement "(**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));" (call_expression "(**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc))" (parenthesized_expression "(**(code **)(unaff_EDI + 0x107885))" ( (pointer_expression "**(code **)(unaff_EDI + 0x107885)" * (pointer_expression "*(code **)(unaff_EDI + 0x107885)" * (cast_expression "(code **)(unaff_EDI + 0x107885)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x107885)" ( (binary_expression "unaff_EDI + 0x107885" identifier + number_literal) ))))) )) (argument_list "(*(int *)(param_1 + 0xc))" ( (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) ))) ;) })) (expression_statement "FUN_0003ad60();" (call_expression "FUN_0003ad60()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_2 == (code *)0x0) {\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" if (parenthesized_expression "(param_2 == (code *)0x0)" ( (binary_expression "param_2 == (code *)0x0" identifier == (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" { (expression_statement "iVar1 = *(int *)(unaff_EDI + 0x108f59);" (assignment_expression "iVar1 = *(int *)(unaff_EDI + 0x108f59)" identifier = (pointer_expression "*(int *)(unaff_EDI + 0x108f59)" * (cast_expression "(int *)(unaff_EDI + 0x108f59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }" { (if_statement "if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }" if (parenthesized_expression "(param_1 == iVar1)" ( (binary_expression "param_1 == iVar1" identifier == identifier) )) (compound_statement "{\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }" { (expression_statement "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);" (assignment_expression "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(undefined4 *)(unaff_EDI + 0x108f59)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;) (expression_statement "iVar1 = param_1;" (assignment_expression "iVar1 = param_1" identifier = identifier) ;) }) (else_clause "else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }" else (compound_statement "{\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }" { (do_statement "do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);" do (compound_statement "{\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        }" { (expression_statement "iVar5 = iVar1;" (assignment_expression "iVar5 = iVar1" identifier = identifier) ;) (expression_statement "iVar1 = *(int *)(iVar5 + 500);" (assignment_expression "iVar1 = *(int *)(iVar5 + 500)" identifier = (pointer_expression "*(int *)(iVar5 + 500)" * (cast_expression "(int *)(iVar5 + 500)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 500)" ( (binary_expression "iVar5 + 500" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) goto LAB_00074d24;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00074d24;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_1 != iVar1)" ( (binary_expression "param_1 != iVar1" identifier != identifier) )) ;) (expression_statement "puVar4 = (undefined4 *)(iVar5 + 500);" (assignment_expression "puVar4 = (undefined4 *)(iVar5 + 500)" identifier = (cast_expression "(undefined4 *)(iVar5 + 500)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 500)" ( (binary_expression "iVar5 + 500" identifier + number_literal) )))) ;) }))) (expression_statement "*puVar4 = *(undefined4 *)(iVar1 + 500);" (assignment_expression "*puVar4 = *(undefined4 *)(iVar1 + 500)" (pointer_expression "*puVar4" * identifier) = (pointer_expression "*(undefined4 *)(iVar1 + 500)" * (cast_expression "(undefined4 *)(iVar1 + 500)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 500)" ( (binary_expression "iVar1 + 500" identifier + number_literal) ))))) ;) })) (labeled_statement "LAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;" statement_identifier : (expression_statement "*(undefined4 *)(param_1 + 0x1e4) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1e4) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1e4)" * (cast_expression "(undefined4 *)(param_1 + 0x1e4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1e4)" ( (binary_expression "param_1 + 0x1e4" identifier + number_literal) )))) = number_literal) ;)) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1e8) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1e8) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1e8)" * (cast_expression "(undefined4 *)(param_1 + 0x1e8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1e8)" ( (binary_expression "param_1 + 0x1e8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1f0) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1f0) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1f0)" * (cast_expression "(undefined4 *)(param_1 + 0x1f0)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1f0)" ( (binary_expression "param_1 + 0x1f0" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1ec) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1ec) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1ec)" * (cast_expression "(undefined4 *)(param_1 + 0x1ec)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1ec)" ( (binary_expression "param_1 + 0x1ec" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto LAB_00074cc8;" goto statement_identifier ;) })) (expression_statement "iVar1 = *(int *)(param_1 + 0x1e4);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x1e4)" identifier = (pointer_expression "*(int *)(param_1 + 0x1e4)" * (cast_expression "(int *)(param_1 + 0x1e4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1e4)" ( (binary_expression "param_1 + 0x1e4" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) {\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" { (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;) (expression_statement "(*param_2)(&param_3,1);" (call_expression "(*param_2)(&param_3,1)" (parenthesized_expression "(*param_2)" ( (pointer_expression "*param_2" * identifier) )) (argument_list "(&param_3,1)" ( (pointer_expression "&param_3" & identifier) , number_literal ))) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto LAB_00074cc8;" goto statement_identifier ;) })) (expression_statement "iVar5 = iVar1;" (assignment_expression "iVar5 = iVar1" identifier = identifier) ;) (if_statement "if (iVar1 != param_1) {\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }" if (parenthesized_expression "(iVar1 != param_1)" ( (binary_expression "iVar1 != param_1" identifier != identifier) )) (compound_statement "{\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }" { (do_statement "do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);" do (compound_statement "{\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    }" { (expression_statement "iVar5 = *(int *)(iVar5 + 0x1e8);" (assignment_expression "iVar5 = *(int *)(iVar5 + 0x1e8)" identifier = (pointer_expression "*(int *)(iVar5 + 0x1e8)" * (cast_expression "(int *)(iVar5 + 0x1e8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x1e8)" ( (binary_expression "iVar5 + 0x1e8" identifier + number_literal) ))))) ;) (if_statement "if (iVar5 == 0) break;" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "(param_1 != iVar5)" ( (binary_expression "param_1 != iVar5" identifier != identifier) )) ;) (if_statement "if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }" { (expression_statement "*(int *)(param_1 + 0x1e8) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x1e8) = iVar1" (pointer_expression "*(int *)(param_1 + 0x1e8)" * (cast_expression "(int *)(param_1 + 0x1e8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1e8)" ( (binary_expression "param_1 + 0x1e8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(code **)(param_1 + 0x1f0) = param_2;" (assignment_expression "*(code **)(param_1 + 0x1f0) = param_2" (pointer_expression "*(code **)(param_1 + 0x1f0)" * (cast_expression "(code **)(param_1 + 0x1f0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x1f0)" ( (binary_expression "param_1 + 0x1f0" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1ec) = param_3;" (assignment_expression "*(undefined4 *)(param_1 + 0x1ec) = param_3" (pointer_expression "*(undefined4 *)(param_1 + 0x1ec)" * (cast_expression "(undefined4 *)(param_1 + 0x1ec)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1ec)" ( (binary_expression "param_1 + 0x1ec" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar1 = *(int *)(unaff_EDI + 0x108f59);" (assignment_expression "iVar1 = *(int *)(unaff_EDI + 0x108f59)" identifier = (pointer_expression "*(int *)(unaff_EDI + 0x108f59)" * (cast_expression "(int *)(unaff_EDI + 0x108f59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }" { (labeled_statement "LAB_00074d94:\n        iVar1 = 0;" statement_identifier : (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;)) (expression_statement "piVar3 = (int *)(unaff_EDI + 0x108f59);" (assignment_expression "piVar3 = (int *)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(int *)(unaff_EDI + 0x108f59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;) }) (else_clause "else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }" else (compound_statement "{\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }" { (expression_statement "iVar5 = iVar1;" (assignment_expression "iVar5 = iVar1" identifier = identifier) ;) (if_statement "if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }" if (parenthesized_expression "(param_1 == iVar1)" ( (binary_expression "param_1 == iVar1" identifier == identifier) )) (compound_statement "{\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }" { (expression_statement "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);" (assignment_expression "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(undefined4 *)(unaff_EDI + 0x108f59)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;) (expression_statement "iVar5 = param_1;" (assignment_expression "iVar5 = param_1" identifier = identifier) ;) }) (else_clause "else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }" else (compound_statement "{\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }" { (do_statement "do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);" do (compound_statement "{\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          }" { (expression_statement "iVar2 = iVar5;" (assignment_expression "iVar2 = iVar5" identifier = identifier) ;) (expression_statement "iVar5 = *(int *)(iVar2 + 500);" (assignment_expression "iVar5 = *(int *)(iVar2 + 500)" identifier = (pointer_expression "*(int *)(iVar2 + 500)" * (cast_expression "(int *)(iVar2 + 500)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 500)" ( (binary_expression "iVar2 + 500" identifier + number_literal) ))))) ;) (if_statement "if (iVar5 == 0) goto LAB_00074c64;" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00074c64;" goto statement_identifier ;)) }) while (parenthesized_expression "(param_1 != iVar5)" ( (binary_expression "param_1 != iVar5" identifier != identifier) )) ;) (expression_statement "puVar4 = (undefined4 *)(iVar2 + 500);" (assignment_expression "puVar4 = (undefined4 *)(iVar2 + 500)" identifier = (cast_expression "(undefined4 *)(iVar2 + 500)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 500)" ( (binary_expression "iVar2 + 500" identifier + number_literal) )))) ;) }))) (expression_statement "*puVar4 = *(undefined4 *)(iVar5 + 500);" (assignment_expression "*puVar4 = *(undefined4 *)(iVar5 + 500)" (pointer_expression "*puVar4" * identifier) = (pointer_expression "*(undefined4 *)(iVar5 + 500)" * (cast_expression "(undefined4 *)(iVar5 + 500)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 500)" ( (binary_expression "iVar5 + 500" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(unaff_EDI + 0x108f59);" (assignment_expression "iVar1 = *(int *)(unaff_EDI + 0x108f59)" identifier = (pointer_expression "*(int *)(unaff_EDI + 0x108f59)" * (cast_expression "(int *)(unaff_EDI + 0x108f59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) goto LAB_00074d94;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00074d94;" goto statement_identifier ;)) (labeled_statement "LAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);" statement_identifier : (expression_statement "piVar3 = (int *)(unaff_EDI + 0x108f59);" (assignment_expression "piVar3 = (int *)(unaff_EDI + 0x108f59)" identifier = (cast_expression "(int *)(unaff_EDI + 0x108f59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x108f59)" ( (binary_expression "unaff_EDI + 0x108f59" identifier + number_literal) )))) ;)) (expression_statement "iVar5 = *(int *)(iVar1 + 0x1f0);" (assignment_expression "iVar5 = *(int *)(iVar1 + 0x1f0)" identifier = (pointer_expression "*(int *)(iVar1 + 0x1f0)" * (cast_expression "(int *)(iVar1 + 0x1f0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x1f0)" ( (binary_expression "iVar1 + 0x1f0" identifier + number_literal) ))))) ;) (while_statement "while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }" while (parenthesized_expression "(iVar5 != *(int *)(param_1 + 0x1f0))" ( (binary_expression "iVar5 != *(int *)(param_1 + 0x1f0)" identifier != (pointer_expression "*(int *)(param_1 + 0x1f0)" * (cast_expression "(int *)(param_1 + 0x1f0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1f0)" ( (binary_expression "param_1 + 0x1f0" identifier + number_literal) ))))) )) (compound_statement "{\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }" { (expression_statement "piVar3 = (int *)(iVar1 + 500);" (assignment_expression "piVar3 = (int *)(iVar1 + 500)" identifier = (cast_expression "(int *)(iVar1 + 500)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 500)" ( (binary_expression "iVar1 + 500" identifier + number_literal) )))) ;) (expression_statement "iVar1 = *(int *)(iVar1 + 500);" (assignment_expression "iVar1 = *(int *)(iVar1 + 500)" identifier = (pointer_expression "*(int *)(iVar1 + 500)" * (cast_expression "(int *)(iVar1 + 500)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 500)" ( (binary_expression "iVar1 + 500" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar5 = *(int *)(iVar1 + 0x1f0);" (assignment_expression "iVar5 = *(int *)(iVar1 + 0x1f0)" identifier = (pointer_expression "*(int *)(iVar1 + 0x1f0)" * (cast_expression "(int *)(iVar1 + 0x1f0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x1f0)" ( (binary_expression "iVar1 + 0x1f0" identifier + number_literal) ))))) ;) })) }))) (expression_statement "*(int *)(param_1 + 500) = iVar1;" (assignment_expression "*(int *)(param_1 + 500) = iVar1" (pointer_expression "*(int *)(param_1 + 500)" * (cast_expression "(int *)(param_1 + 500)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 500)" ( (binary_expression "param_1 + 500" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (expression_statement "*piVar3 = param_1;" (assignment_expression "*piVar3 = param_1" (pointer_expression "*piVar3" * identifier) = identifier) ;) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_00074cc8;" goto statement_identifier ;) })) })) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar6 = 6;" (assignment_expression "uVar6 = 6" identifier = number_literal) ;) (expression_statement "iVar1 = unaff_EDI + 0xaaf9e;" (assignment_expression "iVar1 = unaff_EDI + 0xaaf9e" identifier = (binary_expression "unaff_EDI + 0xaaf9e" identifier + number_literal)) ;) (labeled_statement "LAB_00074cc8:\n  FUN_00074070(param_1,uVar6,iVar1);" statement_identifier : (expression_statement "FUN_00074070(param_1,uVar6,iVar1);" (call_expression "FUN_00074070(param_1,uVar6,iVar1)" identifier (argument_list "(param_1,uVar6,iVar1)" ( identifier , identifier , identifier ))) ;)) (if_statement "if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0xc) != 0)" ( (binary_expression "*(int *)(param_1 + 0xc) != 0" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }" { (expression_statement "(**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));" (call_expression "(**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc))" (parenthesized_expression "(**(code **)(unaff_EDI + 0x10788d))" ( (pointer_expression "**(code **)(unaff_EDI + 0x10788d)" * (pointer_expression "*(code **)(unaff_EDI + 0x10788d)" * (cast_expression "(code **)(unaff_EDI + 0x10788d)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x10788d)" ( (binary_expression "unaff_EDI + 0x10788d" identifier + number_literal) ))))) )) (argument_list "(*(int *)(param_1 + 0xc))" ( (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) ))) ;) })) (return_statement "return uVar6;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (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 { (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (do_statement do (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) )) (goto_statement goto statement_identifier ;)) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_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) ))))) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (goto_statement goto statement_identifier ;) })) (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 = LIT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (pointer_expression & IDENT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (do_statement do (compound_statement { (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) )) (break_statement break ;)) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (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 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 { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (do_statement do (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) )) (goto_statement goto statement_identifier ;)) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_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 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) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (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) )) (break_statement break ;)) (expression_statement (assignment_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 *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) })) (return_statement return IDENT ;) })))
(function_definition "undefined4 FUN_00074bb0(int param_1,code *param_2,undefined4 param_3)\n\n{\n  int iVar1;\n  int iVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int unaff_EDI;\n  \n  FUN_00036ac5();\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }\n  FUN_0003ad60();\n  if (param_2 == (code *)0x0) {\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar1 = *(int *)(param_1 + 0x1e4);\n  if (iVar1 == 0) {\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar5 = iVar1;\n  if (iVar1 != param_1) {\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }\n  FUN_0003ada0();\n  uVar6 = 6;\n  iVar1 = unaff_EDI + 0xaaf9e;\nLAB_00074cc8:\n  FUN_00074070(param_1,uVar6,iVar1);\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }\n  return uVar6;\n}" (type_identifier "undefined4") (function_declarator "FUN_00074bb0(int param_1,code *param_2,undefined4 param_3)" (identifier "FUN_00074bb0") (parameter_list "(int param_1,code *param_2,undefined4 param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "code *param_2" (type_identifier "code") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int unaff_EDI;\n  \n  FUN_00036ac5();\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }\n  FUN_0003ad60();\n  if (param_2 == (code *)0x0) {\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar1 = *(int *)(param_1 + 0x1e4);\n  if (iVar1 == 0) {\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }\n  iVar5 = iVar1;\n  if (iVar1 != param_1) {\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }\n  FUN_0003ada0();\n  uVar6 = 6;\n  iVar1 = unaff_EDI + 0xaaf9e;\nLAB_00074cc8:\n  FUN_00074070(param_1,uVar6,iVar1);\n  if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }\n  return uVar6;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "undefined4 *puVar4;" (type_identifier "undefined4") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "undefined4 uVar6;" (type_identifier "undefined4") (identifier "uVar6") (; ";")) (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (expression_statement "FUN_00036ac5();" (call_expression "FUN_00036ac5()" (identifier "FUN_00036ac5") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0xc) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0xc) != 0" (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));\n  }" ({ "{") (expression_statement "(**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));" (call_expression "(**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc))" (parenthesized_expression "(**(code **)(unaff_EDI + 0x107885))" (( "(") (pointer_expression "**(code **)(unaff_EDI + 0x107885)" (* "*") (pointer_expression "*(code **)(unaff_EDI + 0x107885)" (* "*") (cast_expression "(code **)(unaff_EDI + 0x107885)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(unaff_EDI + 0x107885)" (( "(") (binary_expression "unaff_EDI + 0x107885" (identifier "unaff_EDI") (+ "+") (number_literal "0x107885")) () ")"))))) () ")")) (argument_list "(*(int *)(param_1 + 0xc))" (( "(") (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_0003ad60();" (call_expression "FUN_0003ad60()" (identifier "FUN_0003ad60") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (param_2 == (code *)0x0) {\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" (if "if") (parenthesized_expression "(param_2 == (code *)0x0)" (( "(") (binary_expression "param_2 == (code *)0x0" (identifier "param_2") (== "==") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    iVar1 = *(int *)(unaff_EDI + 0x108f59);\n    if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }\nLAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;\n    uVar6 = 0;\n    iVar1 = 0;\n    *(undefined4 *)(param_1 + 0x1e8) = 0;\n    *(undefined4 *)(param_1 + 0x1f0) = 0;\n    *(undefined4 *)(param_1 + 0x1ec) = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" ({ "{") (expression_statement "iVar1 = *(int *)(unaff_EDI + 0x108f59);" (assignment_expression "iVar1 = *(int *)(unaff_EDI + 0x108f59)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(unaff_EDI + 0x108f59)" (* "*") (cast_expression "(int *)(unaff_EDI + 0x108f59)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x108f59)" (( "(") (binary_expression "unaff_EDI + 0x108f59" (identifier "unaff_EDI") (+ "+") (number_literal "0x108f59")) () ")"))))) (; ";")) (if_statement "if (iVar1 != 0) {\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }\n      *puVar4 = *(undefined4 *)(iVar1 + 500);\n    }" ({ "{") (if_statement "if (param_1 == iVar1) {\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }\n      else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }" (if "if") (parenthesized_expression "(param_1 == iVar1)" (( "(") (binary_expression "param_1 == iVar1" (identifier "param_1") (== "==") (identifier "iVar1")) () ")")) (compound_statement "{\n        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n        iVar1 = param_1;\n      }" ({ "{") (expression_statement "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);" (assignment_expression "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59)" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)(unaff_EDI + 0x108f59)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x108f59)" (( "(") (binary_expression "unaff_EDI + 0x108f59" (identifier "unaff_EDI") (+ "+") (number_literal "0x108f59")) () ")")))) (; ";")) (expression_statement "iVar1 = param_1;" (assignment_expression "iVar1 = param_1" (identifier "iVar1") (= "=") (identifier "param_1")) (; ";")) (} "}")) (else_clause "else {\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }" (else "else") (compound_statement "{\n        do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);\n        puVar4 = (undefined4 *)(iVar5 + 500);\n      }" ({ "{") (do_statement "do {\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        } while (param_1 != iVar1);" (do "do") (compound_statement "{\n          iVar5 = iVar1;\n          iVar1 = *(int *)(iVar5 + 500);\n          if (iVar1 == 0) goto LAB_00074d24;\n        }" ({ "{") (expression_statement "iVar5 = iVar1;" (assignment_expression "iVar5 = iVar1" (identifier "iVar5") (= "=") (identifier "iVar1")) (; ";")) (expression_statement "iVar1 = *(int *)(iVar5 + 500);" (assignment_expression "iVar1 = *(int *)(iVar5 + 500)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(iVar5 + 500)" (* "*") (cast_expression "(int *)(iVar5 + 500)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 500)" (( "(") (binary_expression "iVar5 + 500" (identifier "iVar5") (+ "+") (number_literal "500")) () ")"))))) (; ";")) (if_statement "if (iVar1 == 0) goto LAB_00074d24;" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00074d24;" (goto "goto") (statement_identifier "LAB_00074d24") (; ";"))) (} "}")) (while "while") (parenthesized_expression "(param_1 != iVar1)" (( "(") (binary_expression "param_1 != iVar1" (identifier "param_1") (!= "!=") (identifier "iVar1")) () ")")) (; ";")) (expression_statement "puVar4 = (undefined4 *)(iVar5 + 500);" (assignment_expression "puVar4 = (undefined4 *)(iVar5 + 500)" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)(iVar5 + 500)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 500)" (( "(") (binary_expression "iVar5 + 500" (identifier "iVar5") (+ "+") (number_literal "500")) () ")")))) (; ";")) (} "}")))) (expression_statement "*puVar4 = *(undefined4 *)(iVar1 + 500);" (assignment_expression "*puVar4 = *(undefined4 *)(iVar1 + 500)" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (pointer_expression "*(undefined4 *)(iVar1 + 500)" (* "*") (cast_expression "(undefined4 *)(iVar1 + 500)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 500)" (( "(") (binary_expression "iVar1 + 500" (identifier "iVar1") (+ "+") (number_literal "500")) () ")"))))) (; ";")) (} "}"))) (labeled_statement "LAB_00074d24:\n    *(undefined4 *)(param_1 + 0x1e4) = 0;" (statement_identifier "LAB_00074d24") (: ":") (expression_statement "*(undefined4 *)(param_1 + 0x1e4) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1e4) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1e4)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x1e4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1e4)" (( "(") (binary_expression "param_1 + 0x1e4" (identifier "param_1") (+ "+") (number_literal "0x1e4")) () ")")))) (= "=") (number_literal "0")) (; ";"))) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" (identifier "iVar1") (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x1e8) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1e8) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1e8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x1e8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1e8)" (( "(") (binary_expression "param_1 + 0x1e8" (identifier "param_1") (+ "+") (number_literal "0x1e8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x1f0) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1f0) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1f0)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x1f0)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1f0)" (( "(") (binary_expression "param_1 + 0x1f0" (identifier "param_1") (+ "+") (number_literal "0x1f0")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x1ec) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x1ec) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x1ec)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x1ec)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1ec)" (( "(") (binary_expression "param_1 + 0x1ec" (identifier "param_1") (+ "+") (number_literal "0x1ec")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" (identifier "FUN_0003ada0") (argument_list "()" (( "(") () ")"))) (; ";")) (goto_statement "goto LAB_00074cc8;" (goto "goto") (statement_identifier "LAB_00074cc8") (; ";")) (} "}"))) (expression_statement "iVar1 = *(int *)(param_1 + 0x1e4);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x1e4)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x1e4)" (* "*") (cast_expression "(int *)(param_1 + 0x1e4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1e4)" (( "(") (binary_expression "param_1 + 0x1e4" (identifier "param_1") (+ "+") (number_literal "0x1e4")) () ")"))))) (; ";")) (if_statement "if (iVar1 == 0) {\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar1 = 0;\n    (*param_2)(&param_3,1);\n    uVar6 = 0;\n    FUN_0003ada0();\n    goto LAB_00074cc8;\n  }" ({ "{") (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" (identifier "iVar1") (= "=") (number_literal "0")) (; ";")) (expression_statement "(*param_2)(&param_3,1);" (call_expression "(*param_2)(&param_3,1)" (parenthesized_expression "(*param_2)" (( "(") (pointer_expression "*param_2" (* "*") (identifier "param_2")) () ")")) (argument_list "(&param_3,1)" (( "(") (pointer_expression "&param_3" (& "&") (identifier "param_3")) (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" (identifier "FUN_0003ada0") (argument_list "()" (( "(") () ")"))) (; ";")) (goto_statement "goto LAB_00074cc8;" (goto "goto") (statement_identifier "LAB_00074cc8") (; ";")) (} "}"))) (expression_statement "iVar5 = iVar1;" (assignment_expression "iVar5 = iVar1" (identifier "iVar5") (= "=") (identifier "iVar1")) (; ";")) (if_statement "if (iVar1 != param_1) {\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }" (if "if") (parenthesized_expression "(iVar1 != param_1)" (( "(") (binary_expression "iVar1 != param_1" (identifier "iVar1") (!= "!=") (identifier "param_1")) () ")")) (compound_statement "{\n    do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);\n    if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }\n  }" ({ "{") (do_statement "do {\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    } while (param_1 != iVar5);" (do "do") (compound_statement "{\n      iVar5 = *(int *)(iVar5 + 0x1e8);\n      if (iVar5 == 0) break;\n    }" ({ "{") (expression_statement "iVar5 = *(int *)(iVar5 + 0x1e8);" (assignment_expression "iVar5 = *(int *)(iVar5 + 0x1e8)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(iVar5 + 0x1e8)" (* "*") (cast_expression "(int *)(iVar5 + 0x1e8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x1e8)" (( "(") (binary_expression "iVar5 + 0x1e8" (identifier "iVar5") (+ "+") (number_literal "0x1e8")) () ")"))))) (; ";")) (if_statement "if (iVar5 == 0) break;" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (} "}")) (while "while") (parenthesized_expression "(param_1 != iVar5)" (( "(") (binary_expression "param_1 != iVar5" (identifier "param_1") (!= "!=") (identifier "iVar5")) () ")")) (; ";")) (if_statement "if (iVar5 == 0) {\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      *(int *)(param_1 + 0x1e8) = iVar1;\n      *(code **)(param_1 + 0x1f0) = param_2;\n      *(undefined4 *)(param_1 + 0x1ec) = param_3;\n      iVar1 = *(int *)(unaff_EDI + 0x108f59);\n      if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }\n      *(int *)(param_1 + 500) = iVar1;\n      uVar6 = 0;\n      *piVar3 = param_1;\n      FUN_0003ada0();\n      iVar1 = 0;\n      goto LAB_00074cc8;\n    }" ({ "{") (expression_statement "*(int *)(param_1 + 0x1e8) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x1e8) = iVar1" (pointer_expression "*(int *)(param_1 + 0x1e8)" (* "*") (cast_expression "(int *)(param_1 + 0x1e8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1e8)" (( "(") (binary_expression "param_1 + 0x1e8" (identifier "param_1") (+ "+") (number_literal "0x1e8")) () ")")))) (= "=") (identifier "iVar1")) (; ";")) (expression_statement "*(code **)(param_1 + 0x1f0) = param_2;" (assignment_expression "*(code **)(param_1 + 0x1f0) = param_2" (pointer_expression "*(code **)(param_1 + 0x1f0)" (* "*") (cast_expression "(code **)(param_1 + 0x1f0)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x1f0)" (( "(") (binary_expression "param_1 + 0x1f0" (identifier "param_1") (+ "+") (number_literal "0x1f0")) () ")")))) (= "=") (identifier "param_2")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x1ec) = param_3;" (assignment_expression "*(undefined4 *)(param_1 + 0x1ec) = param_3" (pointer_expression "*(undefined4 *)(param_1 + 0x1ec)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x1ec)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1ec)" (( "(") (binary_expression "param_1 + 0x1ec" (identifier "param_1") (+ "+") (number_literal "0x1ec")) () ")")))) (= "=") (identifier "param_3")) (; ";")) (expression_statement "iVar1 = *(int *)(unaff_EDI + 0x108f59);" (assignment_expression "iVar1 = *(int *)(unaff_EDI + 0x108f59)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(unaff_EDI + 0x108f59)" (* "*") (cast_expression "(int *)(unaff_EDI + 0x108f59)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x108f59)" (( "(") (binary_expression "unaff_EDI + 0x108f59" (identifier "unaff_EDI") (+ "+") (number_literal "0x108f59")) () ")"))))) (; ";")) (if_statement "if (iVar1 == 0) {\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }\n      else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_00074d94:\n        iVar1 = 0;\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n      }" ({ "{") (labeled_statement "LAB_00074d94:\n        iVar1 = 0;" (statement_identifier "LAB_00074d94") (: ":") (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" (identifier "iVar1") (= "=") (number_literal "0")) (; ";"))) (expression_statement "piVar3 = (int *)(unaff_EDI + 0x108f59);" (assignment_expression "piVar3 = (int *)(unaff_EDI + 0x108f59)" (identifier "piVar3") (= "=") (cast_expression "(int *)(unaff_EDI + 0x108f59)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x108f59)" (( "(") (binary_expression "unaff_EDI + 0x108f59" (identifier "unaff_EDI") (+ "+") (number_literal "0x108f59")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }" (else "else") (compound_statement "{\n        iVar5 = iVar1;\n        if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }\n        *puVar4 = *(undefined4 *)(iVar5 + 500);\n        iVar1 = *(int *)(unaff_EDI + 0x108f59);\n        if (iVar1 == 0) goto LAB_00074d94;\nLAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);\n        iVar5 = *(int *)(iVar1 + 0x1f0);\n        while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }\n      }" ({ "{") (expression_statement "iVar5 = iVar1;" (assignment_expression "iVar5 = iVar1" (identifier "iVar5") (= "=") (identifier "iVar1")) (; ";")) (if_statement "if (param_1 == iVar1) {\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }\n        else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }" (if "if") (parenthesized_expression "(param_1 == iVar1)" (( "(") (binary_expression "param_1 == iVar1" (identifier "param_1") (== "==") (identifier "iVar1")) () ")")) (compound_statement "{\n          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);\n          iVar5 = param_1;\n        }" ({ "{") (expression_statement "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);" (assignment_expression "puVar4 = (undefined4 *)(unaff_EDI + 0x108f59)" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)(unaff_EDI + 0x108f59)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x108f59)" (( "(") (binary_expression "unaff_EDI + 0x108f59" (identifier "unaff_EDI") (+ "+") (number_literal "0x108f59")) () ")")))) (; ";")) (expression_statement "iVar5 = param_1;" (assignment_expression "iVar5 = param_1" (identifier "iVar5") (= "=") (identifier "param_1")) (; ";")) (} "}")) (else_clause "else {\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }" (else "else") (compound_statement "{\n          do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);\n          puVar4 = (undefined4 *)(iVar2 + 500);\n        }" ({ "{") (do_statement "do {\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          } while (param_1 != iVar5);" (do "do") (compound_statement "{\n            iVar2 = iVar5;\n            iVar5 = *(int *)(iVar2 + 500);\n            if (iVar5 == 0) goto LAB_00074c64;\n          }" ({ "{") (expression_statement "iVar2 = iVar5;" (assignment_expression "iVar2 = iVar5" (identifier "iVar2") (= "=") (identifier "iVar5")) (; ";")) (expression_statement "iVar5 = *(int *)(iVar2 + 500);" (assignment_expression "iVar5 = *(int *)(iVar2 + 500)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(iVar2 + 500)" (* "*") (cast_expression "(int *)(iVar2 + 500)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 500)" (( "(") (binary_expression "iVar2 + 500" (identifier "iVar2") (+ "+") (number_literal "500")) () ")"))))) (; ";")) (if_statement "if (iVar5 == 0) goto LAB_00074c64;" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00074c64;" (goto "goto") (statement_identifier "LAB_00074c64") (; ";"))) (} "}")) (while "while") (parenthesized_expression "(param_1 != iVar5)" (( "(") (binary_expression "param_1 != iVar5" (identifier "param_1") (!= "!=") (identifier "iVar5")) () ")")) (; ";")) (expression_statement "puVar4 = (undefined4 *)(iVar2 + 500);" (assignment_expression "puVar4 = (undefined4 *)(iVar2 + 500)" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)(iVar2 + 500)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 500)" (( "(") (binary_expression "iVar2 + 500" (identifier "iVar2") (+ "+") (number_literal "500")) () ")")))) (; ";")) (} "}")))) (expression_statement "*puVar4 = *(undefined4 *)(iVar5 + 500);" (assignment_expression "*puVar4 = *(undefined4 *)(iVar5 + 500)" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (pointer_expression "*(undefined4 *)(iVar5 + 500)" (* "*") (cast_expression "(undefined4 *)(iVar5 + 500)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 500)" (( "(") (binary_expression "iVar5 + 500" (identifier "iVar5") (+ "+") (number_literal "500")) () ")"))))) (; ";")) (expression_statement "iVar1 = *(int *)(unaff_EDI + 0x108f59);" (assignment_expression "iVar1 = *(int *)(unaff_EDI + 0x108f59)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(unaff_EDI + 0x108f59)" (* "*") (cast_expression "(int *)(unaff_EDI + 0x108f59)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x108f59)" (( "(") (binary_expression "unaff_EDI + 0x108f59" (identifier "unaff_EDI") (+ "+") (number_literal "0x108f59")) () ")"))))) (; ";")) (if_statement "if (iVar1 == 0) goto LAB_00074d94;" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00074d94;" (goto "goto") (statement_identifier "LAB_00074d94") (; ";"))) (labeled_statement "LAB_00074c64:\n        piVar3 = (int *)(unaff_EDI + 0x108f59);" (statement_identifier "LAB_00074c64") (: ":") (expression_statement "piVar3 = (int *)(unaff_EDI + 0x108f59);" (assignment_expression "piVar3 = (int *)(unaff_EDI + 0x108f59)" (identifier "piVar3") (= "=") (cast_expression "(int *)(unaff_EDI + 0x108f59)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x108f59)" (( "(") (binary_expression "unaff_EDI + 0x108f59" (identifier "unaff_EDI") (+ "+") (number_literal "0x108f59")) () ")")))) (; ";"))) (expression_statement "iVar5 = *(int *)(iVar1 + 0x1f0);" (assignment_expression "iVar5 = *(int *)(iVar1 + 0x1f0)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(iVar1 + 0x1f0)" (* "*") (cast_expression "(int *)(iVar1 + 0x1f0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x1f0)" (( "(") (binary_expression "iVar1 + 0x1f0" (identifier "iVar1") (+ "+") (number_literal "0x1f0")) () ")"))))) (; ";")) (while_statement "while (iVar5 != *(int *)(param_1 + 0x1f0)) {\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }" (while "while") (parenthesized_expression "(iVar5 != *(int *)(param_1 + 0x1f0))" (( "(") (binary_expression "iVar5 != *(int *)(param_1 + 0x1f0)" (identifier "iVar5") (!= "!=") (pointer_expression "*(int *)(param_1 + 0x1f0)" (* "*") (cast_expression "(int *)(param_1 + 0x1f0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1f0)" (( "(") (binary_expression "param_1 + 0x1f0" (identifier "param_1") (+ "+") (number_literal "0x1f0")) () ")"))))) () ")")) (compound_statement "{\n          piVar3 = (int *)(iVar1 + 500);\n          iVar1 = *(int *)(iVar1 + 500);\n          if (iVar1 == 0) break;\n          iVar5 = *(int *)(iVar1 + 0x1f0);\n        }" ({ "{") (expression_statement "piVar3 = (int *)(iVar1 + 500);" (assignment_expression "piVar3 = (int *)(iVar1 + 500)" (identifier "piVar3") (= "=") (cast_expression "(int *)(iVar1 + 500)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 500)" (( "(") (binary_expression "iVar1 + 500" (identifier "iVar1") (+ "+") (number_literal "500")) () ")")))) (; ";")) (expression_statement "iVar1 = *(int *)(iVar1 + 500);" (assignment_expression "iVar1 = *(int *)(iVar1 + 500)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(iVar1 + 500)" (* "*") (cast_expression "(int *)(iVar1 + 500)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 500)" (( "(") (binary_expression "iVar1 + 500" (identifier "iVar1") (+ "+") (number_literal "500")) () ")"))))) (; ";")) (if_statement "if (iVar1 == 0) break;" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar5 = *(int *)(iVar1 + 0x1f0);" (assignment_expression "iVar5 = *(int *)(iVar1 + 0x1f0)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(iVar1 + 0x1f0)" (* "*") (cast_expression "(int *)(iVar1 + 0x1f0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x1f0)" (( "(") (binary_expression "iVar1 + 0x1f0" (identifier "iVar1") (+ "+") (number_literal "0x1f0")) () ")"))))) (; ";")) (} "}"))) (} "}")))) (expression_statement "*(int *)(param_1 + 500) = iVar1;" (assignment_expression "*(int *)(param_1 + 500) = iVar1" (pointer_expression "*(int *)(param_1 + 500)" (* "*") (cast_expression "(int *)(param_1 + 500)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 500)" (( "(") (binary_expression "param_1 + 500" (identifier "param_1") (+ "+") (number_literal "500")) () ")")))) (= "=") (identifier "iVar1")) (; ";")) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "*piVar3 = param_1;" (assignment_expression "*piVar3 = param_1" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (= "=") (identifier "param_1")) (; ";")) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" (identifier "FUN_0003ada0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" (identifier "iVar1") (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_00074cc8;" (goto "goto") (statement_identifier "LAB_00074cc8") (; ";")) (} "}"))) (} "}"))) (expression_statement "FUN_0003ada0();" (call_expression "FUN_0003ada0()" (identifier "FUN_0003ada0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "uVar6 = 6;" (assignment_expression "uVar6 = 6" (identifier "uVar6") (= "=") (number_literal "6")) (; ";")) (expression_statement "iVar1 = unaff_EDI + 0xaaf9e;" (assignment_expression "iVar1 = unaff_EDI + 0xaaf9e" (identifier "iVar1") (= "=") (binary_expression "unaff_EDI + 0xaaf9e" (identifier "unaff_EDI") (+ "+") (number_literal "0xaaf9e"))) (; ";")) (labeled_statement "LAB_00074cc8:\n  FUN_00074070(param_1,uVar6,iVar1);" (statement_identifier "LAB_00074cc8") (: ":") (expression_statement "FUN_00074070(param_1,uVar6,iVar1);" (call_expression "FUN_00074070(param_1,uVar6,iVar1)" (identifier "FUN_00074070") (argument_list "(param_1,uVar6,iVar1)" (( "(") (identifier "param_1") (, ",") (identifier "uVar6") (, ",") (identifier "iVar1") () ")"))) (; ";"))) (if_statement "if (*(int *)(param_1 + 0xc) != 0) {\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0xc) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0xc) != 0" (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));\n  }" ({ "{") (expression_statement "(**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));" (call_expression "(**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc))" (parenthesized_expression "(**(code **)(unaff_EDI + 0x10788d))" (( "(") (pointer_expression "**(code **)(unaff_EDI + 0x10788d)" (* "*") (pointer_expression "*(code **)(unaff_EDI + 0x10788d)" (* "*") (cast_expression "(code **)(unaff_EDI + 0x10788d)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(unaff_EDI + 0x10788d)" (( "(") (binary_expression "unaff_EDI + 0x10788d" (identifier "unaff_EDI") (+ "+") (number_literal "0x10788d")) () ")"))))) () ")")) (argument_list "(*(int *)(param_1 + 0xc))" (( "(") (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) () ")"))) (; ";")) (} "}"))) (return_statement "return uVar6;" (return "return") (identifier "uVar6") (; ";")) (} "}")))

int function_1(type_1 *var_6,type_2 *var_4,void *pArg)

{
  type_2 *var_9;
  type_1 *var_5;
  type_1 *psVar3;
  type_1 **ppsVar4;
  type_1 *var_8;
  char *zFormat;
  int err_code;
  int var_2;
  
  var_1();
  if (var_6->mutex != (type_3 *)0x0) {
    (**(type_4 **)(var_2 + 0x107885))(var_6->mutex);
  }
  var_3();
  if (var_4 == (type_2 *)0x0) {
    var_5 = *(type_1 **)(var_2 + 0x108f59);
    if (var_5 != (type_1 *)0x0) {
      if (var_6 == var_5) {
        ppsVar4 = (type_1 **)(var_2 + 0x108f59);
        var_5 = var_6;
      }
      else {
        do {
          var_8 = var_5;
          var_5 = var_8->pNextBlocked;
          if (var_5 == (type_1 *)0x0) goto LAB_00074d24;
        } while (var_6 != var_5);
        ppsVar4 = &var_8->pNextBlocked;
      }
      *ppsVar4 = var_5->pNextBlocked;
    }
LAB_00074d24:
    var_6->pBlockingConnection = (type_1 *)0x0;
    err_code = 0;
    zFormat = (char *)0x0;
    var_6->pUnlockConnection = (type_1 *)0x0;
    var_6->xUnlockNotify = (type_2 *)0x0;
    var_6->pUnlockArg = (void *)0x0;
    var_7();
    goto LAB_00074cc8;
  }
  var_5 = var_6->pBlockingConnection;
  if (var_5 == (type_1 *)0x0) {
    zFormat = (char *)0x0;
    (*var_4)(&pArg,1);
    err_code = 0;
    var_7();
    goto LAB_00074cc8;
  }
  var_8 = var_5;
  if (var_5 != var_6) {
    do {
      var_8 = var_8->pUnlockConnection;
      if (var_8 == (type_1 *)0x0) break;
    } while (var_6 != var_8);
    if (var_8 == (type_1 *)0x0) {
      var_6->pUnlockConnection = var_5;
      var_6->xUnlockNotify = var_4;
      var_6->pUnlockArg = pArg;
      var_5 = *(type_1 **)(var_2 + 0x108f59);
      if (var_5 == (type_1 *)0x0) {
LAB_00074d94:
        var_5 = (type_1 *)0x0;
        ppsVar4 = (type_1 **)(var_2 + 0x108f59);
      }
      else {
        var_8 = var_5;
        if (var_6 == var_5) {
          ppsVar4 = (type_1 **)(var_2 + 0x108f59);
          var_8 = var_6;
        }
        else {
          do {
            psVar3 = var_8;
            var_8 = psVar3->pNextBlocked;
            if (var_8 == (type_1 *)0x0) goto LAB_00074c64;
          } while (var_6 != var_8);
          ppsVar4 = &psVar3->pNextBlocked;
        }
        *ppsVar4 = var_8->pNextBlocked;
        var_5 = *(type_1 **)(var_2 + 0x108f59);
        if (var_5 == (type_1 *)0x0) goto LAB_00074d94;
LAB_00074c64:
        ppsVar4 = (type_1 **)(var_2 + 0x108f59);
        var_9 = var_5->xUnlockNotify;
        while (var_9 != var_6->xUnlockNotify) {
          ppsVar4 = &var_5->pNextBlocked;
          var_5 = var_5->pNextBlocked;
          if (var_5 == (type_1 *)0x0) break;
          var_9 = var_5->xUnlockNotify;
        }
      }
      var_6->pNextBlocked = var_5;
      err_code = 0;
      *ppsVar4 = var_6;
      var_7();
      zFormat = (char *)0x0;
      goto LAB_00074cc8;
    }
  }
  var_7();
  err_code = 6;
  zFormat = (char *)(var_2 + 0xaaf9e);
LAB_00074cc8:
  var_10(var_6,err_code,zFormat);
  if (var_6->mutex != (type_3 *)0x0) {
    (**(type_4 **)(var_2 + 0x10788d))(var_6->mutex);
  }
  return err_code;
}


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

undefined4 MASKED(int param_1,code *param_2,undefined4 param_3)

{
  int iVar1;
  int iVar2;
  int *piVar3;
  undefined4 *puVar4;
  int iVar5;
  undefined4 uVar6;
  int unaff_EDI;
  
  FUN_00036ac5();
  if (*(int *)(param_1 + 0xc) != 0) {
    (**(code **)(unaff_EDI + 0x107885))(*(int *)(param_1 + 0xc));
  }
  FUN_0003ad60();
  if (param_2 == (code *)0x0) {
    iVar1 = *(int *)(unaff_EDI + 0x108f59);
    if (iVar1 != 0) {
      if (param_1 == iVar1) {
        puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);
        iVar1 = param_1;
      }
      else {
        do {
          iVar5 = iVar1;
          iVar1 = *(int *)(iVar5 + 500);
          if (iVar1 == 0) goto LAB_00074d24;
        } while (param_1 != iVar1);
        puVar4 = (undefined4 *)(iVar5 + 500);
      }
      *puVar4 = *(undefined4 *)(iVar1 + 500);
    }
LAB_00074d24:
    *(undefined4 *)(param_1 + 0x1e4) = 0;
    uVar6 = 0;
    iVar1 = 0;
    *(undefined4 *)(param_1 + 0x1e8) = 0;
    *(undefined4 *)(param_1 + 0x1f0) = 0;
    *(undefined4 *)(param_1 + 0x1ec) = 0;
    FUN_0003ada0();
    goto LAB_00074cc8;
  }
  iVar1 = *(int *)(param_1 + 0x1e4);
  if (iVar1 == 0) {
    iVar1 = 0;
    (*param_2)(&param_3,1);
    uVar6 = 0;
    FUN_0003ada0();
    goto LAB_00074cc8;
  }
  iVar5 = iVar1;
  if (iVar1 != param_1) {
    do {
      iVar5 = *(int *)(iVar5 + 0x1e8);
      if (iVar5 == 0) break;
    } while (param_1 != iVar5);
    if (iVar5 == 0) {
      *(int *)(param_1 + 0x1e8) = iVar1;
      *(code **)(param_1 + 0x1f0) = param_2;
      *(undefined4 *)(param_1 + 0x1ec) = param_3;
      iVar1 = *(int *)(unaff_EDI + 0x108f59);
      if (iVar1 == 0) {
LAB_00074d94:
        iVar1 = 0;
        piVar3 = (int *)(unaff_EDI + 0x108f59);
      }
      else {
        iVar5 = iVar1;
        if (param_1 == iVar1) {
          puVar4 = (undefined4 *)(unaff_EDI + 0x108f59);
          iVar5 = param_1;
        }
        else {
          do {
            iVar2 = iVar5;
            iVar5 = *(int *)(iVar2 + 500);
            if (iVar5 == 0) goto LAB_00074c64;
          } while (param_1 != iVar5);
          puVar4 = (undefined4 *)(iVar2 + 500);
        }
        *puVar4 = *(undefined4 *)(iVar5 + 500);
        iVar1 = *(int *)(unaff_EDI + 0x108f59);
        if (iVar1 == 0) goto LAB_00074d94;
LAB_00074c64:
        piVar3 = (int *)(unaff_EDI + 0x108f59);
        iVar5 = *(int *)(iVar1 + 0x1f0);
        while (iVar5 != *(int *)(param_1 + 0x1f0)) {
          piVar3 = (int *)(iVar1 + 500);
          iVar1 = *(int *)(iVar1 + 500);
          if (iVar1 == 0) break;
          iVar5 = *(int *)(iVar1 + 0x1f0);
        }
      }
      *(int *)(param_1 + 500) = iVar1;
      uVar6 = 0;
      *piVar3 = param_1;
      FUN_0003ada0();
      iVar1 = 0;
      goto LAB_00074cc8;
    }
  }
  FUN_0003ada0();
  uVar6 = 6;
  iVar1 = unaff_EDI + 0xaaf9e;
LAB_00074cc8:
  FUN_00074070(param_1,uVar6,iVar1);
  if (*(int *)(param_1 + 0xc) != 0) {
    (**(code **)(unaff_EDI + 0x10788d))(*(int *)(param_1 + 0xc));
  }
  return uVar6;
}

