
int sqlite3_bind_value(sqlite3_stmt *pStmt,int i,sqlite3_value *pValue)

{
  Mem *pMVar1;
  double dVar2;
  byte bVar3;
  sqlite3_value *psVar4;
  int iVar5;
  int iVar6;
  char *zData;
  int unaff_EDI;
  
  psVar4 = pValue;
  __x86_get_pc_thunk_di();
  bVar3 = *(byte *)(unaff_EDI + 0xe9769 + (pValue->flags & 0x1f));
  if (bVar3 == 2) {
    dVar2 = (pValue->u).r;
    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);
    if (iVar6 != 0) {
      return iVar6;
    }
    pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);
    if ((pMVar1->flags & 0x2400) == 0) {
      pMVar1->flags = 1;
    }
    else {
      vdbeMemClearExternAndSetNull(pMVar1);
    }
    if (!NAN(dVar2)) {
      (pMVar1->u).r = dVar2;
      pMVar1->flags = 8;
    }
  }
  else {
    if (bVar3 < 3) {
      if (bVar3 == 1) {
        iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);
        return iVar6;
      }
    }
    else {
      if (bVar3 == 3) {
        zData = pValue->z;
        pValue._0_1_ = pValue->enc;
LAB_0007a65b:
        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);
        return iVar6;
      }
      if (bVar3 == 4) {
        if ((pValue->flags & 0x4000) != 0) {
          iVar6 = (pValue->u).nZero;
          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);
          if (iVar5 != 0) {
            return iVar5;
          }
          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);
          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {
            vdbeMemClear(pMVar1);
          }
          pMVar1->enc = '\x01';
          pMVar1->flags = 0x4010;
          pMVar1->n = 0;
          iVar5 = 0;
          if (-1 < iVar6) {
            iVar5 = iVar6;
          }
          pMVar1->z = (char *)0x0;
          (pMVar1->u).nZero = iVar5;
          goto LAB_0007a628;
        }
        zData = pValue->z;
        pValue._0_1_ = '\0';
        goto LAB_0007a65b;
      }
    }
    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);
    if (iVar6 != 0) {
      return iVar6;
    }
  }
LAB_0007a628:
  if (*(int *)(*(int *)pStmt + 0xc) == 0) {
    return 0;
  }
  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*(int *)pStmt + 0xc));
  return 0;
}



int FUN_0007a570(int *param_1,int param_2,double *param_3)

{
  double *pdVar1;
  int *piVar2;
  double dVar3;
  byte bVar4;
  int iVar5;
  int iVar6;
  int unaff_EDI;
  
  FUN_0003a401();
  bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));
  if (bVar4 == 2) {
    dVar3 = *param_3;
    iVar6 = FUN_00079820();
    if (iVar6 != 0) {
      return iVar6;
    }
    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);
    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {
      *(undefined2 *)(pdVar1 + 1) = 1;
    }
    else {
      FUN_0004c150();
    }
    if (!NAN(dVar3)) {
      *pdVar1 = dVar3;
      *(undefined2 *)(pdVar1 + 1) = 8;
    }
  }
  else {
    if (bVar4 < 3) {
      if (bVar4 == 1) {
        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,
                             *(undefined4 *)((int)param_3 + 4));
        return iVar6;
      }
    }
    else {
      if (bVar4 == 3) {
LAB_0007a65b:
        iVar6 = FUN_000799f0();
        return iVar6;
      }
      if (bVar4 == 4) {
        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {
          iVar6 = *(int *)param_3;
          iVar5 = FUN_00079820();
          if (iVar5 != 0) {
            return iVar5;
          }
          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);
          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {
            FUN_00060f90();
          }
          *(undefined1 *)((int)piVar2 + 10) = 1;
          *(undefined2 *)(piVar2 + 2) = 0x4010;
          piVar2[3] = 0;
          iVar5 = 0;
          if (-1 < iVar6) {
            iVar5 = iVar6;
          }
          piVar2[4] = 0;
          *piVar2 = iVar5;
          goto LAB_0007a628;
        }
        goto LAB_0007a65b;
      }
    }
    iVar6 = FUN_00079820();
    if (iVar6 != 0) {
      return iVar6;
    }
  }
LAB_0007a628:
  if (*(int *)(*param_1 + 0xc) == 0) {
    return 0;
  }
  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));
  return 0;
}


PUSH EBP
PUSH EDI
CALL 0x0003a401
ADD EDI,0x1408b1
PUSH ESI
PUSH EBX
SUB ESP,0x1c
MOV EDX,dword ptr [ESP + 0x38]
MOV EBX,dword ptr [ESP + 0x30]
MOV ESI,dword ptr [ESP + 0x34]
MOVZX ECX,word ptr [EDX + 0x8]
MOV EAX,ECX
AND EAX,0x1f
MOVZX EAX,byte ptr [EDI + EAX*0x1 + 0xfffa8eb8]
CMP AL,0x2
JZ 0x0007a680
JBE 0x0007a5e8
CMP AL,0x3
JZ 0x0007a650
CMP AL,0x4
JNZ 0x0007a610
AND CH,0x40
JZ 0x0007a6d8
MOV EAX,dword ptr [EDX]
MOV EDX,ESI
MOV dword ptr [ESP + 0x8],EAX
MOV EAX,EBX
CALL 0x00079820
MOV EBP,EAX
TEST EAX,EAX
JZ 0x0007a700
ADD ESP,0x1c
MOV EAX,EBP
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP AL,0x1
JNZ 0x0007a610
PUSH dword ptr [EDX + 0x4]
PUSH dword ptr [EDX]
PUSH ESI
PUSH EBX
CALL 0x00079bb0
ADD ESP,0x10
ADD ESP,0x1c
MOV EBP,EAX
POP EBX
MOV EAX,EBP
POP ESI
POP EDI
POP EBP
RET
MOV EDX,ESI
MOV EAX,EBX
CALL 0x00079820
MOV EBP,EAX
TEST EAX,EAX
JNZ 0x0007a5d7
JMP 0x0007a628
FSTP ST0
LEA ESI,[ESI]
NOP
MOV EAX,dword ptr [EBX]
MOV EAX,dword ptr [EAX + 0xc]
TEST EAX,EAX
JZ 0x0007a6f0
SUB ESP,0xc
PUSH EAX
CALL dword ptr [EDI + 0x61c]
MOV EAX,EBP
ADD ESP,0x10
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOVZX EAX,byte ptr [EDX + 0xa]
MOV ECX,dword ptr [EDX + 0x10]
MOV dword ptr [ESP + 0x38],EAX
MOV dword ptr [ESP + 0x34],0xffffffff
MOV EAX,dword ptr [EDX + 0xc]
MOV EDX,ESI
MOV dword ptr [ESP + 0x30],EAX
ADD ESP,0x1c
MOV EAX,EBX
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x000799f0
FLD qword ptr [EDX]
MOV EAX,EBX
MOV EDX,ESI
FSTP qword ptr [ESP + 0x8]
CALL 0x00079820
MOV EBP,EAX
TEST EAX,EAX
JNZ 0x0007a5d7
MOV EAX,dword ptr [EBX + 0x60]
LEA ECX,[ESI + ESI*0x4]
FLD qword ptr [ESP + 0x8]
LEA ESI,[EAX + ECX*0x8 + -0x28]
TEST word ptr [ESI + 0x8],0x2400
JNZ 0x0007a750
MOV EAX,0x1
MOV word ptr [ESI + 0x8],AX
FUCOMI ST0,ST0
JP 0x0007a621
MOV ECX,0x8
FSTP qword ptr [ESI]
MOV word ptr [ESI + 0x8],CX
JMP 0x0007a628
MOV ECX,dword ptr [EDX + 0x10]
MOV dword ptr [ESP + 0x38],0x0
JMP 0x0007a65b
XOR EBP,EBP
JMP 0x0007a5d7
MOV EAX,dword ptr [EBX + 0x60]
LEA ECX,[ESI + ESI*0x4]
LEA ESI,[EAX + ECX*0x8 + -0x28]
TEST word ptr [ESI + 0x8],0x2400
JNZ 0x0007a719
MOV EDX,dword ptr [ESI + 0x18]
TEST EDX,EDX
JZ 0x0007a720
MOV EAX,ESI
CALL 0x00060f90
MOV ECX,dword ptr [ESP + 0x8]
MOV EAX,0x4010
MOV byte ptr [ESI + 0xa],0x1
MOV word ptr [ESI + 0x8],AX
MOV EAX,0x0
TEST ECX,ECX
MOV dword ptr [ESI + 0xc],0x0
CMOVNS EAX,ECX
MOV dword ptr [ESI + 0x10],0x0
MOV dword ptr [ESI],EAX
JMP 0x0007a628
FSTP ST0
MOV EAX,ESI
CALL 0x0004c150
FLD qword ptr [ESP + 0x8]
JMP 0x0007a6bc
(translation_unit "int FUN_0007a570(int *param_1,int param_2,double *param_3)\n\n{\n  double *pdVar1;\n  int *piVar2;\n  double dVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  int unaff_EDI;\n  \n  FUN_0003a401();\n  bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));\n  if (bVar4 == 2) {\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }\n  else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }\nLAB_0007a628:\n  if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\n  }\n  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));\n  return 0;\n}\n\n" (function_definition "int FUN_0007a570(int *param_1,int param_2,double *param_3)\n\n{\n  double *pdVar1;\n  int *piVar2;\n  double dVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  int unaff_EDI;\n  \n  FUN_0003a401();\n  bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));\n  if (bVar4 == 2) {\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }\n  else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }\nLAB_0007a628:\n  if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\n  }\n  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));\n  return 0;\n}" primitive_type (function_declarator "FUN_0007a570(int *param_1,int param_2,double *param_3)" identifier (parameter_list "(int *param_1,int param_2,double *param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "double *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  double *pdVar1;\n  int *piVar2;\n  double dVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  int unaff_EDI;\n  \n  FUN_0003a401();\n  bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));\n  if (bVar4 == 2) {\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }\n  else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }\nLAB_0007a628:\n  if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\n  }\n  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));\n  return 0;\n}" { (declaration "double *pdVar1;" primitive_type (pointer_declarator "*pdVar1" * identifier) ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "double dVar3;" primitive_type identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "FUN_0003a401();" (call_expression "FUN_0003a401()" identifier (argument_list "()" ( ))) ;) (expression_statement "bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));" (assignment_expression "bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" identifier = (pointer_expression "*(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" * (cast_expression "(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" ( (binary_expression "unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f)" (binary_expression "unaff_EDI + 0xe9769" identifier + number_literal) + (parenthesized_expression "(*(ushort *)(param_3 + 1) & 0x1f)" ( (binary_expression "*(ushort *)(param_3 + 1) & 0x1f" (pointer_expression "*(ushort *)(param_3 + 1)" * (cast_expression "(ushort *)(param_3 + 1)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) & number_literal) ))) ))))) ;) (if_statement "if (bVar4 == 2) {\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }\n  else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" if (parenthesized_expression "(bVar4 == 2)" ( (binary_expression "bVar4 == 2" identifier == number_literal) )) (compound_statement "{\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }" { (expression_statement "dVar3 = *param_3;" (assignment_expression "dVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "iVar6 = FUN_00079820();" (assignment_expression "iVar6 = FUN_00079820()" identifier = (call_expression "FUN_00079820()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 != 0) {\n      return iVar6;\n    }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      return iVar6;\n    }" { (return_statement "return iVar6;" return identifier ;) })) (expression_statement "pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);" (assignment_expression "pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28)" identifier = (cast_expression "(double *)(param_1[0x18] + -0x28 + param_2 * 0x28)" ( (type_descriptor "double *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x18] + -0x28 + param_2 * 0x28)" ( (binary_expression "param_1[0x18] + -0x28 + param_2 * 0x28" (binary_expression "param_1[0x18] + -0x28" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) + number_literal) + (binary_expression "param_2 * 0x28" identifier * number_literal)) )))) ;) (if_statement "if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }" if (parenthesized_expression "(((ulonglong)pdVar1[1] & 0x2400) == 0)" ( (binary_expression "((ulonglong)pdVar1[1] & 0x2400) == 0" (parenthesized_expression "((ulonglong)pdVar1[1] & 0x2400)" ( (binary_expression "(ulonglong)pdVar1[1] & 0x2400" (cast_expression "(ulonglong)pdVar1[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "pdVar1[1]" identifier [ number_literal ])) & number_literal) )) == number_literal) )) (compound_statement "{\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }" { (expression_statement "*(undefined2 *)(pdVar1 + 1) = 1;" (assignment_expression "*(undefined2 *)(pdVar1 + 1) = 1" (pointer_expression "*(undefined2 *)(pdVar1 + 1)" * (cast_expression "(undefined2 *)(pdVar1 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pdVar1 + 1)" ( (binary_expression "pdVar1 + 1" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else {\n      FUN_0004c150();\n    }" else (compound_statement "{\n      FUN_0004c150();\n    }" { (expression_statement "FUN_0004c150();" (call_expression "FUN_0004c150()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }" if (parenthesized_expression "(!NAN(dVar3))" ( (unary_expression "!NAN(dVar3)" ! (call_expression "NAN(dVar3)" identifier (argument_list "(dVar3)" ( identifier )))) )) (compound_statement "{\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }" { (expression_statement "*pdVar1 = dVar3;" (assignment_expression "*pdVar1 = dVar3" (pointer_expression "*pdVar1" * identifier) = identifier) ;) (expression_statement "*(undefined2 *)(pdVar1 + 1) = 8;" (assignment_expression "*(undefined2 *)(pdVar1 + 1) = 8" (pointer_expression "*(undefined2 *)(pdVar1 + 1)" * (cast_expression "(undefined2 *)(pdVar1 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pdVar1 + 1)" ( (binary_expression "pdVar1 + 1" identifier + number_literal) )))) = number_literal) ;) })) }) (else_clause "else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" else (compound_statement "{\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" { (if_statement "if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }" if (parenthesized_expression "(bVar4 < 3)" ( (binary_expression "bVar4 < 3" identifier < number_literal) )) (compound_statement "{\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }" { (if_statement "if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }" if (parenthesized_expression "(bVar4 == 1)" ( (binary_expression "bVar4 == 1" identifier == number_literal) )) (compound_statement "{\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }" { (expression_statement "iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));" (assignment_expression "iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4))" identifier = (call_expression "FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4))" identifier (argument_list "(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4))" ( identifier , identifier , (pointer_expression "*(undefined4 *)param_3" * (cast_expression "(undefined4 *)param_3" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (pointer_expression "*(undefined4 *)((int)param_3 + 4)" * (cast_expression "(undefined4 *)((int)param_3 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_3 + 4)" ( (binary_expression "(int)param_3 + 4" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) )))) ;) (return_statement "return iVar6;" return identifier ;) })) }) (else_clause "else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }" else (compound_statement "{\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }" { (if_statement "if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }" if (parenthesized_expression "(bVar4 == 3)" ( (binary_expression "bVar4 == 3" identifier == number_literal) )) (compound_statement "{\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }" { (labeled_statement "LAB_0007a65b:\n        iVar6 = FUN_000799f0();" statement_identifier : (expression_statement "iVar6 = FUN_000799f0();" (assignment_expression "iVar6 = FUN_000799f0()" identifier = (call_expression "FUN_000799f0()" identifier (argument_list "()" ( )))) ;)) (return_statement "return iVar6;" return identifier ;) })) (if_statement "if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }" if (parenthesized_expression "(bVar4 == 4)" ( (binary_expression "bVar4 == 4" identifier == number_literal) )) (compound_statement "{\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }" { (if_statement "if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }" if (parenthesized_expression "((*(ushort *)(param_3 + 1) & 0x4000) != 0)" ( (binary_expression "(*(ushort *)(param_3 + 1) & 0x4000) != 0" (parenthesized_expression "(*(ushort *)(param_3 + 1) & 0x4000)" ( (binary_expression "*(ushort *)(param_3 + 1) & 0x4000" (pointer_expression "*(ushort *)(param_3 + 1)" * (cast_expression "(ushort *)(param_3 + 1)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }" { (expression_statement "iVar6 = *(int *)param_3;" (assignment_expression "iVar6 = *(int *)param_3" identifier = (pointer_expression "*(int *)param_3" * (cast_expression "(int *)param_3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "iVar5 = FUN_00079820();" (assignment_expression "iVar5 = FUN_00079820()" identifier = (call_expression "FUN_00079820()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar5 != 0) {\n            return iVar5;\n          }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n            return iVar5;\n          }" { (return_statement "return iVar5;" return identifier ;) })) (expression_statement "piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);" (assignment_expression "piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28)" identifier = (cast_expression "(int *)(param_1[0x18] + -0x28 + param_2 * 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x18] + -0x28 + param_2 * 0x28)" ( (binary_expression "param_1[0x18] + -0x28 + param_2 * 0x28" (binary_expression "param_1[0x18] + -0x28" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) + number_literal) + (binary_expression "param_2 * 0x28" identifier * number_literal)) )))) ;) (if_statement "if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }" if (parenthesized_expression "(((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0))" ( (binary_expression "((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)" (parenthesized_expression "((*(ushort *)(piVar2 + 2) & 0x2400) != 0)" ( (binary_expression "(*(ushort *)(piVar2 + 2) & 0x2400) != 0" (parenthesized_expression "(*(ushort *)(piVar2 + 2) & 0x2400)" ( (binary_expression "*(ushort *)(piVar2 + 2) & 0x2400" (pointer_expression "*(ushort *)(piVar2 + 2)" * (cast_expression "(ushort *)(piVar2 + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar2 + 2)" ( (binary_expression "piVar2 + 2" identifier + number_literal) )))) & number_literal) )) != number_literal) )) || (parenthesized_expression "(piVar2[6] != 0)" ( (binary_expression "piVar2[6] != 0" (subscript_expression "piVar2[6]" identifier [ number_literal ]) != number_literal) ))) )) (compound_statement "{\n            FUN_00060f90();\n          }" { (expression_statement "FUN_00060f90();" (call_expression "FUN_00060f90()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*(undefined1 *)((int)piVar2 + 10) = 1;" (assignment_expression "*(undefined1 *)((int)piVar2 + 10) = 1" (pointer_expression "*(undefined1 *)((int)piVar2 + 10)" * (cast_expression "(undefined1 *)((int)piVar2 + 10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar2 + 10)" ( (binary_expression "(int)piVar2 + 10" (cast_expression "(int)piVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined2 *)(piVar2 + 2) = 0x4010;" (assignment_expression "*(undefined2 *)(piVar2 + 2) = 0x4010" (pointer_expression "*(undefined2 *)(piVar2 + 2)" * (cast_expression "(undefined2 *)(piVar2 + 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar2 + 2)" ( (binary_expression "piVar2 + 2" identifier + number_literal) )))) = number_literal) ;) (expression_statement "piVar2[3] = 0;" (assignment_expression "piVar2[3] = 0" (subscript_expression "piVar2[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (if_statement "if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }" if (parenthesized_expression "(-1 < iVar6)" ( (binary_expression "-1 < iVar6" number_literal < identifier) )) (compound_statement "{\n            iVar5 = iVar6;\n          }" { (expression_statement "iVar5 = iVar6;" (assignment_expression "iVar5 = iVar6" identifier = identifier) ;) })) (expression_statement "piVar2[4] = 0;" (assignment_expression "piVar2[4] = 0" (subscript_expression "piVar2[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*piVar2 = iVar5;" (assignment_expression "*piVar2 = iVar5" (pointer_expression "*piVar2" * identifier) = identifier) ;) (goto_statement "goto LAB_0007a628;" goto statement_identifier ;) })) (goto_statement "goto LAB_0007a65b;" goto statement_identifier ;) })) }))) (expression_statement "iVar6 = FUN_00079820();" (assignment_expression "iVar6 = FUN_00079820()" identifier = (call_expression "FUN_00079820()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 != 0) {\n      return iVar6;\n    }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      return iVar6;\n    }" { (return_statement "return iVar6;" return identifier ;) })) }))) (labeled_statement "LAB_0007a628:\n  if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\n  }" statement_identifier : (if_statement "if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\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" (pointer_expression "*param_1" * identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) }))) (expression_statement "(**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));" (call_expression "(**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc))" (parenthesized_expression "(**(code **)(unaff_EDI + 0x140ecd))" ( (pointer_expression "**(code **)(unaff_EDI + 0x140ecd)" * (pointer_expression "*(code **)(unaff_EDI + 0x140ecd)" * (cast_expression "(code **)(unaff_EDI + 0x140ecd)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x140ecd)" ( (binary_expression "unaff_EDI + 0x140ecd" 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" (pointer_expression "*param_1" * identifier) + number_literal) )))) ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "int sqlite3_bind_value(sqlite3_stmt *pStmt,int i,sqlite3_value *pValue)\n\n{\n  Mem *pMVar1;\n  double dVar2;\n  byte bVar3;\n  sqlite3_value *psVar4;\n  int iVar5;\n  int iVar6;\n  char *zData;\n  int unaff_EDI;\n  \n  psVar4 = pValue;\n  __x86_get_pc_thunk_di();\n  bVar3 = *(byte *)(unaff_EDI + 0xe9769 + (pValue->flags & 0x1f));\n  if (bVar3 == 2) {\n    dVar2 = (pValue->u).r;\n    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n    if ((pMVar1->flags & 0x2400) == 0) {\n      pMVar1->flags = 1;\n    }\n    else {\n      vdbeMemClearExternAndSetNull(pMVar1);\n    }\n    if (!NAN(dVar2)) {\n      (pMVar1->u).r = dVar2;\n      pMVar1->flags = 8;\n    }\n  }\n  else {\n    if (bVar3 < 3) {\n      if (bVar3 == 1) {\n        iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar3 == 3) {\n        zData = pValue->z;\n        pValue._0_1_ = pValue->enc;\nLAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);\n        return iVar6;\n      }\n      if (bVar3 == 4) {\n        if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }\n        zData = pValue->z;\n        pValue._0_1_ = '\0';\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }\nLAB_0007a628:\n  if (*(int *)(*(int *)pStmt + 0xc) == 0) {\n    return 0;\n  }\n  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*(int *)pStmt + 0xc));\n  return 0;\n}\n\n" (function_definition "int sqlite3_bind_value(sqlite3_stmt *pStmt,int i,sqlite3_value *pValue)\n\n{\n  Mem *pMVar1;\n  double dVar2;\n  byte bVar3;\n  sqlite3_value *psVar4;\n  int iVar5;\n  int iVar6;\n  char *zData;\n  int unaff_EDI;\n  \n  psVar4 = pValue;\n  __x86_get_pc_thunk_di();\n  bVar3 = *(byte *)(unaff_EDI + 0xe9769 + (pValue->flags & 0x1f));\n  if (bVar3 == 2) {\n    dVar2 = (pValue->u).r;\n    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n    if ((pMVar1->flags & 0x2400) == 0) {\n      pMVar1->flags = 1;\n    }\n    else {\n      vdbeMemClearExternAndSetNull(pMVar1);\n    }\n    if (!NAN(dVar2)) {\n      (pMVar1->u).r = dVar2;\n      pMVar1->flags = 8;\n    }\n  }\n  else {\n    if (bVar3 < 3) {\n      if (bVar3 == 1) {\n        iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar3 == 3) {\n        zData = pValue->z;\n        pValue._0_1_ = pValue->enc;\nLAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);\n        return iVar6;\n      }\n      if (bVar3 == 4) {\n        if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }\n        zData = pValue->z;\n        pValue._0_1_ = '\0';\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }\nLAB_0007a628:\n  if (*(int *)(*(int *)pStmt + 0xc) == 0) {\n    return 0;\n  }\n  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*(int *)pStmt + 0xc));\n  return 0;\n}" primitive_type (function_declarator "sqlite3_bind_value(sqlite3_stmt *pStmt,int i,sqlite3_value *pValue)" identifier (parameter_list "(sqlite3_stmt *pStmt,int i,sqlite3_value *pValue)" ( (parameter_declaration "sqlite3_stmt *pStmt" type_identifier (pointer_declarator "*pStmt" * identifier)) , (parameter_declaration "int i" primitive_type identifier) , (parameter_declaration "sqlite3_value *pValue" type_identifier (pointer_declarator "*pValue" * identifier)) ))) (compound_statement "{\n  Mem *pMVar1;\n  double dVar2;\n  byte bVar3;\n  sqlite3_value *psVar4;\n  int iVar5;\n  int iVar6;\n  char *zData;\n  int unaff_EDI;\n  \n  psVar4 = pValue;\n  __x86_get_pc_thunk_di();\n  bVar3 = *(byte *)(unaff_EDI + 0xe9769 + (pValue->flags & 0x1f));\n  if (bVar3 == 2) {\n    dVar2 = (pValue->u).r;\n    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n    if ((pMVar1->flags & 0x2400) == 0) {\n      pMVar1->flags = 1;\n    }\n    else {\n      vdbeMemClearExternAndSetNull(pMVar1);\n    }\n    if (!NAN(dVar2)) {\n      (pMVar1->u).r = dVar2;\n      pMVar1->flags = 8;\n    }\n  }\n  else {\n    if (bVar3 < 3) {\n      if (bVar3 == 1) {\n        iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar3 == 3) {\n        zData = pValue->z;\n        pValue._0_1_ = pValue->enc;\nLAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);\n        return iVar6;\n      }\n      if (bVar3 == 4) {\n        if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }\n        zData = pValue->z;\n        pValue._0_1_ = '\0';\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }\nLAB_0007a628:\n  if (*(int *)(*(int *)pStmt + 0xc) == 0) {\n    return 0;\n  }\n  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*(int *)pStmt + 0xc));\n  return 0;\n}" { (declaration "Mem *pMVar1;" type_identifier (pointer_declarator "*pMVar1" * identifier) ;) (declaration "double dVar2;" primitive_type identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "sqlite3_value *psVar4;" type_identifier (pointer_declarator "*psVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "char *zData;" primitive_type (pointer_declarator "*zData" * identifier) ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "psVar4 = pValue;" (assignment_expression "psVar4 = pValue" identifier = identifier) ;) (expression_statement "__x86_get_pc_thunk_di();" (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( ))) ;) (expression_statement "bVar3 = *(byte *)(unaff_EDI + 0xe9769 + (pValue->flags & 0x1f));" (assignment_expression "bVar3 = *(byte *)(unaff_EDI + 0xe9769 + (pValue->flags & 0x1f))" identifier = (pointer_expression "*(byte *)(unaff_EDI + 0xe9769 + (pValue->flags & 0x1f))" * (cast_expression "(byte *)(unaff_EDI + 0xe9769 + (pValue->flags & 0x1f))" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0xe9769 + (pValue->flags & 0x1f))" ( (binary_expression "unaff_EDI + 0xe9769 + (pValue->flags & 0x1f)" (binary_expression "unaff_EDI + 0xe9769" identifier + number_literal) + (parenthesized_expression "(pValue->flags & 0x1f)" ( (binary_expression "pValue->flags & 0x1f" (field_expression "pValue->flags" identifier -> field_identifier) & number_literal) ))) ))))) ;) (if_statement "if (bVar3 == 2) {\n    dVar2 = (pValue->u).r;\n    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n    if ((pMVar1->flags & 0x2400) == 0) {\n      pMVar1->flags = 1;\n    }\n    else {\n      vdbeMemClearExternAndSetNull(pMVar1);\n    }\n    if (!NAN(dVar2)) {\n      (pMVar1->u).r = dVar2;\n      pMVar1->flags = 8;\n    }\n  }\n  else {\n    if (bVar3 < 3) {\n      if (bVar3 == 1) {\n        iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar3 == 3) {\n        zData = pValue->z;\n        pValue._0_1_ = pValue->enc;\nLAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);\n        return iVar6;\n      }\n      if (bVar3 == 4) {\n        if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }\n        zData = pValue->z;\n        pValue._0_1_ = '\0';\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" if (parenthesized_expression "(bVar3 == 2)" ( (binary_expression "bVar3 == 2" identifier == number_literal) )) (compound_statement "{\n    dVar2 = (pValue->u).r;\n    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n    if ((pMVar1->flags & 0x2400) == 0) {\n      pMVar1->flags = 1;\n    }\n    else {\n      vdbeMemClearExternAndSetNull(pMVar1);\n    }\n    if (!NAN(dVar2)) {\n      (pMVar1->u).r = dVar2;\n      pMVar1->flags = 8;\n    }\n  }" { (expression_statement "dVar2 = (pValue->u).r;" (assignment_expression "dVar2 = (pValue->u).r" identifier = (field_expression "(pValue->u).r" (parenthesized_expression "(pValue->u)" ( (field_expression "pValue->u" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "iVar6 = vdbeUnbind((Vdbe *)pStmt,i);" (assignment_expression "iVar6 = vdbeUnbind((Vdbe *)pStmt,i)" identifier = (call_expression "vdbeUnbind((Vdbe *)pStmt,i)" identifier (argument_list "((Vdbe *)pStmt,i)" ( (cast_expression "(Vdbe *)pStmt" ( (type_descriptor "Vdbe *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (iVar6 != 0) {\n      return iVar6;\n    }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      return iVar6;\n    }" { (return_statement "return iVar6;" return identifier ;) })) (expression_statement "pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);" (assignment_expression "pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28)" identifier = (cast_expression "(Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28)" ( (type_descriptor "Mem *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28)" ( (binary_expression "*(int *)(pStmt + 0x60) + -0x28 + i * 0x28" (binary_expression "*(int *)(pStmt + 0x60) + -0x28" (pointer_expression "*(int *)(pStmt + 0x60)" * (cast_expression "(int *)(pStmt + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pStmt + 0x60)" ( (binary_expression "pStmt + 0x60" identifier + number_literal) )))) + number_literal) + (binary_expression "i * 0x28" identifier * number_literal)) )))) ;) (if_statement "if ((pMVar1->flags & 0x2400) == 0) {\n      pMVar1->flags = 1;\n    }\n    else {\n      vdbeMemClearExternAndSetNull(pMVar1);\n    }" if (parenthesized_expression "((pMVar1->flags & 0x2400) == 0)" ( (binary_expression "(pMVar1->flags & 0x2400) == 0" (parenthesized_expression "(pMVar1->flags & 0x2400)" ( (binary_expression "pMVar1->flags & 0x2400" (field_expression "pMVar1->flags" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      pMVar1->flags = 1;\n    }" { (expression_statement "pMVar1->flags = 1;" (assignment_expression "pMVar1->flags = 1" (field_expression "pMVar1->flags" identifier -> field_identifier) = number_literal) ;) }) (else_clause "else {\n      vdbeMemClearExternAndSetNull(pMVar1);\n    }" else (compound_statement "{\n      vdbeMemClearExternAndSetNull(pMVar1);\n    }" { (expression_statement "vdbeMemClearExternAndSetNull(pMVar1);" (call_expression "vdbeMemClearExternAndSetNull(pMVar1)" identifier (argument_list "(pMVar1)" ( identifier ))) ;) }))) (if_statement "if (!NAN(dVar2)) {\n      (pMVar1->u).r = dVar2;\n      pMVar1->flags = 8;\n    }" if (parenthesized_expression "(!NAN(dVar2))" ( (unary_expression "!NAN(dVar2)" ! (call_expression "NAN(dVar2)" identifier (argument_list "(dVar2)" ( identifier )))) )) (compound_statement "{\n      (pMVar1->u).r = dVar2;\n      pMVar1->flags = 8;\n    }" { (expression_statement "(pMVar1->u).r = dVar2;" (assignment_expression "(pMVar1->u).r = dVar2" (field_expression "(pMVar1->u).r" (parenthesized_expression "(pMVar1->u)" ( (field_expression "pMVar1->u" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "pMVar1->flags = 8;" (assignment_expression "pMVar1->flags = 8" (field_expression "pMVar1->flags" identifier -> field_identifier) = number_literal) ;) })) }) (else_clause "else {\n    if (bVar3 < 3) {\n      if (bVar3 == 1) {\n        iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar3 == 3) {\n        zData = pValue->z;\n        pValue._0_1_ = pValue->enc;\nLAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);\n        return iVar6;\n      }\n      if (bVar3 == 4) {\n        if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }\n        zData = pValue->z;\n        pValue._0_1_ = '\0';\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" else (compound_statement "{\n    if (bVar3 < 3) {\n      if (bVar3 == 1) {\n        iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar3 == 3) {\n        zData = pValue->z;\n        pValue._0_1_ = pValue->enc;\nLAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);\n        return iVar6;\n      }\n      if (bVar3 == 4) {\n        if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }\n        zData = pValue->z;\n        pValue._0_1_ = '\0';\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = vdbeUnbind((Vdbe *)pStmt,i);\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" { (if_statement "if (bVar3 < 3) {\n      if (bVar3 == 1) {\n        iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar3 == 3) {\n        zData = pValue->z;\n        pValue._0_1_ = pValue->enc;\nLAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);\n        return iVar6;\n      }\n      if (bVar3 == 4) {\n        if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }\n        zData = pValue->z;\n        pValue._0_1_ = '\0';\n        goto LAB_0007a65b;\n      }\n    }" if (parenthesized_expression "(bVar3 < 3)" ( (binary_expression "bVar3 < 3" identifier < number_literal) )) (compound_statement "{\n      if (bVar3 == 1) {\n        iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);\n        return iVar6;\n      }\n    }" { (if_statement "if (bVar3 == 1) {\n        iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);\n        return iVar6;\n      }" if (parenthesized_expression "(bVar3 == 1)" ( (binary_expression "bVar3 == 1" identifier == number_literal) )) (compound_statement "{\n        iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);\n        return iVar6;\n      }" { (expression_statement "iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i);" (assignment_expression "iVar6 = sqlite3_bind_int64(pStmt,i,(pValue->u).i)" identifier = (call_expression "sqlite3_bind_int64(pStmt,i,(pValue->u).i)" identifier (argument_list "(pStmt,i,(pValue->u).i)" ( identifier , identifier , (field_expression "(pValue->u).i" (parenthesized_expression "(pValue->u)" ( (field_expression "pValue->u" identifier -> field_identifier) )) . field_identifier) )))) ;) (return_statement "return iVar6;" return identifier ;) })) }) (else_clause "else {\n      if (bVar3 == 3) {\n        zData = pValue->z;\n        pValue._0_1_ = pValue->enc;\nLAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);\n        return iVar6;\n      }\n      if (bVar3 == 4) {\n        if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }\n        zData = pValue->z;\n        pValue._0_1_ = '\0';\n        goto LAB_0007a65b;\n      }\n    }" else (compound_statement "{\n      if (bVar3 == 3) {\n        zData = pValue->z;\n        pValue._0_1_ = pValue->enc;\nLAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);\n        return iVar6;\n      }\n      if (bVar3 == 4) {\n        if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }\n        zData = pValue->z;\n        pValue._0_1_ = '\0';\n        goto LAB_0007a65b;\n      }\n    }" { (if_statement "if (bVar3 == 3) {\n        zData = pValue->z;\n        pValue._0_1_ = pValue->enc;\nLAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);\n        return iVar6;\n      }" if (parenthesized_expression "(bVar3 == 3)" ( (binary_expression "bVar3 == 3" identifier == number_literal) )) (compound_statement "{\n        zData = pValue->z;\n        pValue._0_1_ = pValue->enc;\nLAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);\n        return iVar6;\n      }" { (expression_statement "zData = pValue->z;" (assignment_expression "zData = pValue->z" identifier = (field_expression "pValue->z" identifier -> field_identifier)) ;) (expression_statement "pValue._0_1_ = pValue->enc;" (assignment_expression "pValue._0_1_ = pValue->enc" (field_expression "pValue._0_1_" identifier . field_identifier) = (field_expression "pValue->enc" identifier -> field_identifier)) ;) (labeled_statement "LAB_0007a65b:\n        iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);" statement_identifier : (expression_statement "iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue);" (assignment_expression "iVar6 = bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue)" identifier = (call_expression "bindText(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue)" identifier (argument_list "(pStmt,i,zData,psVar4->n,(_func_void_void_ptr *)&DAT_ffffffff,(u8)pValue)" ( identifier , identifier , identifier , (field_expression "psVar4->n" identifier -> field_identifier) , (cast_expression "(_func_void_void_ptr *)&DAT_ffffffff" ( (type_descriptor "_func_void_void_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_ffffffff" & identifier)) , (cast_expression "(u8)pValue" ( (type_descriptor "u8" type_identifier) ) identifier) )))) ;)) (return_statement "return iVar6;" return identifier ;) })) (if_statement "if (bVar3 == 4) {\n        if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }\n        zData = pValue->z;\n        pValue._0_1_ = '\0';\n        goto LAB_0007a65b;\n      }" if (parenthesized_expression "(bVar3 == 4)" ( (binary_expression "bVar3 == 4" identifier == number_literal) )) (compound_statement "{\n        if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }\n        zData = pValue->z;\n        pValue._0_1_ = '\0';\n        goto LAB_0007a65b;\n      }" { (if_statement "if ((pValue->flags & 0x4000) != 0) {\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }" if (parenthesized_expression "((pValue->flags & 0x4000) != 0)" ( (binary_expression "(pValue->flags & 0x4000) != 0" (parenthesized_expression "(pValue->flags & 0x4000)" ( (binary_expression "pValue->flags & 0x4000" (field_expression "pValue->flags" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n          iVar6 = (pValue->u).nZero;\n          iVar5 = vdbeUnbind((Vdbe *)pStmt,i);\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);\n          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }\n          pMVar1->enc = '\x01';\n          pMVar1->flags = 0x4010;\n          pMVar1->n = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          pMVar1->z = (char *)0x0;\n          (pMVar1->u).nZero = iVar5;\n          goto LAB_0007a628;\n        }" { (expression_statement "iVar6 = (pValue->u).nZero;" (assignment_expression "iVar6 = (pValue->u).nZero" identifier = (field_expression "(pValue->u).nZero" (parenthesized_expression "(pValue->u)" ( (field_expression "pValue->u" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "iVar5 = vdbeUnbind((Vdbe *)pStmt,i);" (assignment_expression "iVar5 = vdbeUnbind((Vdbe *)pStmt,i)" identifier = (call_expression "vdbeUnbind((Vdbe *)pStmt,i)" identifier (argument_list "((Vdbe *)pStmt,i)" ( (cast_expression "(Vdbe *)pStmt" ( (type_descriptor "Vdbe *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (iVar5 != 0) {\n            return iVar5;\n          }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n            return iVar5;\n          }" { (return_statement "return iVar5;" return identifier ;) })) (expression_statement "pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28);" (assignment_expression "pMVar1 = (Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28)" identifier = (cast_expression "(Mem *)(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28)" ( (type_descriptor "Mem *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(pStmt + 0x60) + -0x28 + i * 0x28)" ( (binary_expression "*(int *)(pStmt + 0x60) + -0x28 + i * 0x28" (binary_expression "*(int *)(pStmt + 0x60) + -0x28" (pointer_expression "*(int *)(pStmt + 0x60)" * (cast_expression "(int *)(pStmt + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pStmt + 0x60)" ( (binary_expression "pStmt + 0x60" identifier + number_literal) )))) + number_literal) + (binary_expression "i * 0x28" identifier * number_literal)) )))) ;) (if_statement "if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {\n            vdbeMemClear(pMVar1);\n          }" if (parenthesized_expression "(((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0))" ( (binary_expression "((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)" (parenthesized_expression "((pMVar1->flags & 0x2400) != 0)" ( (binary_expression "(pMVar1->flags & 0x2400) != 0" (parenthesized_expression "(pMVar1->flags & 0x2400)" ( (binary_expression "pMVar1->flags & 0x2400" (field_expression "pMVar1->flags" identifier -> field_identifier) & number_literal) )) != number_literal) )) || (parenthesized_expression "(pMVar1->szMalloc != 0)" ( (binary_expression "pMVar1->szMalloc != 0" (field_expression "pMVar1->szMalloc" identifier -> field_identifier) != number_literal) ))) )) (compound_statement "{\n            vdbeMemClear(pMVar1);\n          }" { (expression_statement "vdbeMemClear(pMVar1);" (call_expression "vdbeMemClear(pMVar1)" identifier (argument_list "(pMVar1)" ( identifier ))) ;) })) (expression_statement "pMVar1->enc = '\x01';" (assignment_expression "pMVar1->enc = '\x01'" (field_expression "pMVar1->enc" identifier -> field_identifier) = (char_literal "'\x01'" ' escape_sequence ')) ;) (expression_statement "pMVar1->flags = 0x4010;" (assignment_expression "pMVar1->flags = 0x4010" (field_expression "pMVar1->flags" identifier -> field_identifier) = number_literal) ;) (expression_statement "pMVar1->n = 0;" (assignment_expression "pMVar1->n = 0" (field_expression "pMVar1->n" identifier -> field_identifier) = number_literal) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (if_statement "if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }" if (parenthesized_expression "(-1 < iVar6)" ( (binary_expression "-1 < iVar6" number_literal < identifier) )) (compound_statement "{\n            iVar5 = iVar6;\n          }" { (expression_statement "iVar5 = iVar6;" (assignment_expression "iVar5 = iVar6" identifier = identifier) ;) })) (expression_statement "pMVar1->z = (char *)0x0;" (assignment_expression "pMVar1->z = (char *)0x0" (field_expression "pMVar1->z" identifier -> field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(pMVar1->u).nZero = iVar5;" (assignment_expression "(pMVar1->u).nZero = iVar5" (field_expression "(pMVar1->u).nZero" (parenthesized_expression "(pMVar1->u)" ( (field_expression "pMVar1->u" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (goto_statement "goto LAB_0007a628;" goto statement_identifier ;) })) (expression_statement "zData = pValue->z;" (assignment_expression "zData = pValue->z" identifier = (field_expression "pValue->z" identifier -> field_identifier)) ;) (expression_statement "pValue._0_1_ = '\0';" (assignment_expression "pValue._0_1_ = '\0'" (field_expression "pValue._0_1_" identifier . field_identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (goto_statement "goto LAB_0007a65b;" goto statement_identifier ;) })) }))) (expression_statement "iVar6 = vdbeUnbind((Vdbe *)pStmt,i);" (assignment_expression "iVar6 = vdbeUnbind((Vdbe *)pStmt,i)" identifier = (call_expression "vdbeUnbind((Vdbe *)pStmt,i)" identifier (argument_list "((Vdbe *)pStmt,i)" ( (cast_expression "(Vdbe *)pStmt" ( (type_descriptor "Vdbe *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (iVar6 != 0) {\n      return iVar6;\n    }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      return iVar6;\n    }" { (return_statement "return iVar6;" return identifier ;) })) }))) (labeled_statement "LAB_0007a628:\n  if (*(int *)(*(int *)pStmt + 0xc) == 0) {\n    return 0;\n  }" statement_identifier : (if_statement "if (*(int *)(*(int *)pStmt + 0xc) == 0) {\n    return 0;\n  }" if (parenthesized_expression "(*(int *)(*(int *)pStmt + 0xc) == 0)" ( (binary_expression "*(int *)(*(int *)pStmt + 0xc) == 0" (pointer_expression "*(int *)(*(int *)pStmt + 0xc)" * (cast_expression "(int *)(*(int *)pStmt + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)pStmt + 0xc)" ( (binary_expression "*(int *)pStmt + 0xc" (pointer_expression "*(int *)pStmt" * (cast_expression "(int *)pStmt" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) }))) (expression_statement "(**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*(int *)pStmt + 0xc));" (call_expression "(**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*(int *)pStmt + 0xc))" (parenthesized_expression "(**(code **)(unaff_EDI + 0x140ecd))" ( (pointer_expression "**(code **)(unaff_EDI + 0x140ecd)" * (pointer_expression "*(code **)(unaff_EDI + 0x140ecd)" * (cast_expression "(code **)(unaff_EDI + 0x140ecd)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x140ecd)" ( (binary_expression "unaff_EDI + 0x140ecd" identifier + number_literal) ))))) )) (argument_list "(*(int *)(*(int *)pStmt + 0xc))" ( (pointer_expression "*(int *)(*(int *)pStmt + 0xc)" * (cast_expression "(int *)(*(int *)pStmt + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)pStmt + 0xc)" ( (binary_expression "*(int *)pStmt + 0xc" (pointer_expression "*(int *)pStmt" * (cast_expression "(int *)pStmt" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "int FUN_0007a570(int *param_1,int param_2,double *param_3)\n\n{\n  double *pdVar1;\n  int *piVar2;\n  double dVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  int unaff_EDI;\n  \n  FUN_0003a401();\n  bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));\n  if (bVar4 == 2) {\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }\n  else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }\nLAB_0007a628:\n  if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\n  }\n  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));\n  return 0;\n}\n\n" (function_definition "int FUN_0007a570(int *param_1,int param_2,double *param_3)\n\n{\n  double *pdVar1;\n  int *piVar2;\n  double dVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  int unaff_EDI;\n  \n  FUN_0003a401();\n  bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));\n  if (bVar4 == 2) {\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }\n  else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }\nLAB_0007a628:\n  if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\n  }\n  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));\n  return 0;\n}" primitive_type (function_declarator "FUN_0007a570(int *param_1,int param_2,double *param_3)" identifier (parameter_list "(int *param_1,int param_2,double *param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "double *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  double *pdVar1;\n  int *piVar2;\n  double dVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  int unaff_EDI;\n  \n  FUN_0003a401();\n  bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));\n  if (bVar4 == 2) {\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }\n  else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }\nLAB_0007a628:\n  if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\n  }\n  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));\n  return 0;\n}" { (declaration "double *pdVar1;" primitive_type (pointer_declarator "*pdVar1" * identifier) ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "double dVar3;" primitive_type identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (expression_statement "FUN_0003a401();" (call_expression "FUN_0003a401()" identifier (argument_list "()" ( ))) ;) (expression_statement "bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));" (assignment_expression "bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" identifier = (pointer_expression "*(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" * (cast_expression "(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" ( (binary_expression "unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f)" (binary_expression "unaff_EDI + 0xe9769" identifier + number_literal) + (parenthesized_expression "(*(ushort *)(param_3 + 1) & 0x1f)" ( (binary_expression "*(ushort *)(param_3 + 1) & 0x1f" (pointer_expression "*(ushort *)(param_3 + 1)" * (cast_expression "(ushort *)(param_3 + 1)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) & number_literal) ))) ))))) ;) (if_statement "if (bVar4 == 2) {\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }\n  else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" if (parenthesized_expression "(bVar4 == 2)" ( (binary_expression "bVar4 == 2" identifier == number_literal) )) (compound_statement "{\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }" { (expression_statement "dVar3 = *param_3;" (assignment_expression "dVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "iVar6 = FUN_00079820();" (assignment_expression "iVar6 = FUN_00079820()" identifier = (call_expression "FUN_00079820()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 != 0) {\n      return iVar6;\n    }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      return iVar6;\n    }" { (return_statement "return iVar6;" return identifier ;) })) (expression_statement "pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);" (assignment_expression "pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28)" identifier = (cast_expression "(double *)(param_1[0x18] + -0x28 + param_2 * 0x28)" ( (type_descriptor "double *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x18] + -0x28 + param_2 * 0x28)" ( (binary_expression "param_1[0x18] + -0x28 + param_2 * 0x28" (binary_expression "param_1[0x18] + -0x28" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) + number_literal) + (binary_expression "param_2 * 0x28" identifier * number_literal)) )))) ;) (if_statement "if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }" if (parenthesized_expression "(((ulonglong)pdVar1[1] & 0x2400) == 0)" ( (binary_expression "((ulonglong)pdVar1[1] & 0x2400) == 0" (parenthesized_expression "((ulonglong)pdVar1[1] & 0x2400)" ( (binary_expression "(ulonglong)pdVar1[1] & 0x2400" (cast_expression "(ulonglong)pdVar1[1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "pdVar1[1]" identifier [ number_literal ])) & number_literal) )) == number_literal) )) (compound_statement "{\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }" { (expression_statement "*(undefined2 *)(pdVar1 + 1) = 1;" (assignment_expression "*(undefined2 *)(pdVar1 + 1) = 1" (pointer_expression "*(undefined2 *)(pdVar1 + 1)" * (cast_expression "(undefined2 *)(pdVar1 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pdVar1 + 1)" ( (binary_expression "pdVar1 + 1" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else {\n      FUN_0004c150();\n    }" else (compound_statement "{\n      FUN_0004c150();\n    }" { (expression_statement "FUN_0004c150();" (call_expression "FUN_0004c150()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }" if (parenthesized_expression "(!NAN(dVar3))" ( (unary_expression "!NAN(dVar3)" ! (call_expression "NAN(dVar3)" identifier (argument_list "(dVar3)" ( identifier )))) )) (compound_statement "{\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }" { (expression_statement "*pdVar1 = dVar3;" (assignment_expression "*pdVar1 = dVar3" (pointer_expression "*pdVar1" * identifier) = identifier) ;) (expression_statement "*(undefined2 *)(pdVar1 + 1) = 8;" (assignment_expression "*(undefined2 *)(pdVar1 + 1) = 8" (pointer_expression "*(undefined2 *)(pdVar1 + 1)" * (cast_expression "(undefined2 *)(pdVar1 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pdVar1 + 1)" ( (binary_expression "pdVar1 + 1" identifier + number_literal) )))) = number_literal) ;) })) }) (else_clause "else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" else (compound_statement "{\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" { (if_statement "if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }" if (parenthesized_expression "(bVar4 < 3)" ( (binary_expression "bVar4 < 3" identifier < number_literal) )) (compound_statement "{\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }" { (if_statement "if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }" if (parenthesized_expression "(bVar4 == 1)" ( (binary_expression "bVar4 == 1" identifier == number_literal) )) (compound_statement "{\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }" { (expression_statement "iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));" (assignment_expression "iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4))" identifier = (call_expression "FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4))" identifier (argument_list "(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4))" ( identifier , identifier , (pointer_expression "*(undefined4 *)param_3" * (cast_expression "(undefined4 *)param_3" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (pointer_expression "*(undefined4 *)((int)param_3 + 4)" * (cast_expression "(undefined4 *)((int)param_3 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_3 + 4)" ( (binary_expression "(int)param_3 + 4" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) )))) ;) (return_statement "return iVar6;" return identifier ;) })) }) (else_clause "else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }" else (compound_statement "{\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }" { (if_statement "if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }" if (parenthesized_expression "(bVar4 == 3)" ( (binary_expression "bVar4 == 3" identifier == number_literal) )) (compound_statement "{\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }" { (labeled_statement "LAB_0007a65b:\n        iVar6 = FUN_000799f0();" statement_identifier : (expression_statement "iVar6 = FUN_000799f0();" (assignment_expression "iVar6 = FUN_000799f0()" identifier = (call_expression "FUN_000799f0()" identifier (argument_list "()" ( )))) ;)) (return_statement "return iVar6;" return identifier ;) })) (if_statement "if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }" if (parenthesized_expression "(bVar4 == 4)" ( (binary_expression "bVar4 == 4" identifier == number_literal) )) (compound_statement "{\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }" { (if_statement "if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }" if (parenthesized_expression "((*(ushort *)(param_3 + 1) & 0x4000) != 0)" ( (binary_expression "(*(ushort *)(param_3 + 1) & 0x4000) != 0" (parenthesized_expression "(*(ushort *)(param_3 + 1) & 0x4000)" ( (binary_expression "*(ushort *)(param_3 + 1) & 0x4000" (pointer_expression "*(ushort *)(param_3 + 1)" * (cast_expression "(ushort *)(param_3 + 1)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }" { (expression_statement "iVar6 = *(int *)param_3;" (assignment_expression "iVar6 = *(int *)param_3" identifier = (pointer_expression "*(int *)param_3" * (cast_expression "(int *)param_3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "iVar5 = FUN_00079820();" (assignment_expression "iVar5 = FUN_00079820()" identifier = (call_expression "FUN_00079820()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar5 != 0) {\n            return iVar5;\n          }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n            return iVar5;\n          }" { (return_statement "return iVar5;" return identifier ;) })) (expression_statement "piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);" (assignment_expression "piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28)" identifier = (cast_expression "(int *)(param_1[0x18] + -0x28 + param_2 * 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x18] + -0x28 + param_2 * 0x28)" ( (binary_expression "param_1[0x18] + -0x28 + param_2 * 0x28" (binary_expression "param_1[0x18] + -0x28" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) + number_literal) + (binary_expression "param_2 * 0x28" identifier * number_literal)) )))) ;) (if_statement "if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }" if (parenthesized_expression "(((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0))" ( (binary_expression "((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)" (parenthesized_expression "((*(ushort *)(piVar2 + 2) & 0x2400) != 0)" ( (binary_expression "(*(ushort *)(piVar2 + 2) & 0x2400) != 0" (parenthesized_expression "(*(ushort *)(piVar2 + 2) & 0x2400)" ( (binary_expression "*(ushort *)(piVar2 + 2) & 0x2400" (pointer_expression "*(ushort *)(piVar2 + 2)" * (cast_expression "(ushort *)(piVar2 + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar2 + 2)" ( (binary_expression "piVar2 + 2" identifier + number_literal) )))) & number_literal) )) != number_literal) )) || (parenthesized_expression "(piVar2[6] != 0)" ( (binary_expression "piVar2[6] != 0" (subscript_expression "piVar2[6]" identifier [ number_literal ]) != number_literal) ))) )) (compound_statement "{\n            FUN_00060f90();\n          }" { (expression_statement "FUN_00060f90();" (call_expression "FUN_00060f90()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*(undefined1 *)((int)piVar2 + 10) = 1;" (assignment_expression "*(undefined1 *)((int)piVar2 + 10) = 1" (pointer_expression "*(undefined1 *)((int)piVar2 + 10)" * (cast_expression "(undefined1 *)((int)piVar2 + 10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar2 + 10)" ( (binary_expression "(int)piVar2 + 10" (cast_expression "(int)piVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined2 *)(piVar2 + 2) = 0x4010;" (assignment_expression "*(undefined2 *)(piVar2 + 2) = 0x4010" (pointer_expression "*(undefined2 *)(piVar2 + 2)" * (cast_expression "(undefined2 *)(piVar2 + 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar2 + 2)" ( (binary_expression "piVar2 + 2" identifier + number_literal) )))) = number_literal) ;) (expression_statement "piVar2[3] = 0;" (assignment_expression "piVar2[3] = 0" (subscript_expression "piVar2[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (if_statement "if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }" if (parenthesized_expression "(-1 < iVar6)" ( (binary_expression "-1 < iVar6" number_literal < identifier) )) (compound_statement "{\n            iVar5 = iVar6;\n          }" { (expression_statement "iVar5 = iVar6;" (assignment_expression "iVar5 = iVar6" identifier = identifier) ;) })) (expression_statement "piVar2[4] = 0;" (assignment_expression "piVar2[4] = 0" (subscript_expression "piVar2[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*piVar2 = iVar5;" (assignment_expression "*piVar2 = iVar5" (pointer_expression "*piVar2" * identifier) = identifier) ;) (goto_statement "goto LAB_0007a628;" goto statement_identifier ;) })) (goto_statement "goto LAB_0007a65b;" goto statement_identifier ;) })) }))) (expression_statement "iVar6 = FUN_00079820();" (assignment_expression "iVar6 = FUN_00079820()" identifier = (call_expression "FUN_00079820()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 != 0) {\n      return iVar6;\n    }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      return iVar6;\n    }" { (return_statement "return iVar6;" return identifier ;) })) }))) (labeled_statement "LAB_0007a628:\n  if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\n  }" statement_identifier : (if_statement "if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\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" (pointer_expression "*param_1" * identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) }))) (expression_statement "(**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));" (call_expression "(**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc))" (parenthesized_expression "(**(code **)(unaff_EDI + 0x140ecd))" ( (pointer_expression "**(code **)(unaff_EDI + 0x140ecd)" * (pointer_expression "*(code **)(unaff_EDI + 0x140ecd)" * (cast_expression "(code **)(unaff_EDI + 0x140ecd)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x140ecd)" ( (binary_expression "unaff_EDI + 0x140ecd" 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" (pointer_expression "*param_1" * identifier) + number_literal) )))) ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) ))) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + (binary_expression IDENT * LIT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (if_statement if (parenthesized_expression ( (unary_expression ! (call_expression IDENT (argument_list ( IDENT )))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) )))) ;) (return_statement return IDENT ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;)) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + (binary_expression IDENT * LIT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) 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 (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == LIT) )) (compound_statement { (return_statement return LIT ;) }))) (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 (pointer_expression * IDENT) + LIT) )))) ))) ;) (return_statement return LIT ;) })))
(function_definition "int FUN_0007a570(int *param_1,int param_2,double *param_3)\n\n{\n  double *pdVar1;\n  int *piVar2;\n  double dVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  int unaff_EDI;\n  \n  FUN_0003a401();\n  bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));\n  if (bVar4 == 2) {\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }\n  else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }\nLAB_0007a628:\n  if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\n  }\n  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));\n  return 0;\n}" (primitive_type "int") (function_declarator "FUN_0007a570(int *param_1,int param_2,double *param_3)" (identifier "FUN_0007a570") (parameter_list "(int *param_1,int param_2,double *param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "double *param_3" (primitive_type "double") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  double *pdVar1;\n  int *piVar2;\n  double dVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  int unaff_EDI;\n  \n  FUN_0003a401();\n  bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));\n  if (bVar4 == 2) {\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }\n  else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }\nLAB_0007a628:\n  if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\n  }\n  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));\n  return 0;\n}" ({ "{") (declaration "double *pdVar1;" (primitive_type "double") (pointer_declarator "*pdVar1" (* "*") (identifier "pdVar1")) (; ";")) (declaration "int *piVar2;" (primitive_type "int") (pointer_declarator "*piVar2" (* "*") (identifier "piVar2")) (; ";")) (declaration "double dVar3;" (primitive_type "double") (identifier "dVar3") (; ";")) (declaration "byte bVar4;" (type_identifier "byte") (identifier "bVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (expression_statement "FUN_0003a401();" (call_expression "FUN_0003a401()" (identifier "FUN_0003a401") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));" (assignment_expression "bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" (identifier "bVar4") (= "=") (pointer_expression "*(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" (* "*") (cast_expression "(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f))" (( "(") (binary_expression "unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f)" (binary_expression "unaff_EDI + 0xe9769" (identifier "unaff_EDI") (+ "+") (number_literal "0xe9769")) (+ "+") (parenthesized_expression "(*(ushort *)(param_3 + 1) & 0x1f)" (( "(") (binary_expression "*(ushort *)(param_3 + 1) & 0x1f" (pointer_expression "*(ushort *)(param_3 + 1)" (* "*") (cast_expression "(ushort *)(param_3 + 1)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 1)" (( "(") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1")) () ")")))) (& "&") (number_literal "0x1f")) () ")"))) () ")"))))) (; ";")) (if_statement "if (bVar4 == 2) {\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }\n  else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" (if "if") (parenthesized_expression "(bVar4 == 2)" (( "(") (binary_expression "bVar4 == 2" (identifier "bVar4") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n    dVar3 = *param_3;\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }\n    if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }\n  }" ({ "{") (expression_statement "dVar3 = *param_3;" (assignment_expression "dVar3 = *param_3" (identifier "dVar3") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (expression_statement "iVar6 = FUN_00079820();" (assignment_expression "iVar6 = FUN_00079820()" (identifier "iVar6") (= "=") (call_expression "FUN_00079820()" (identifier "FUN_00079820") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar6 != 0) {\n      return iVar6;\n    }" (if "if") (parenthesized_expression "(iVar6 != 0)" (( "(") (binary_expression "iVar6 != 0" (identifier "iVar6") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return iVar6;\n    }" ({ "{") (return_statement "return iVar6;" (return "return") (identifier "iVar6") (; ";")) (} "}"))) (expression_statement "pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);" (assignment_expression "pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28)" (identifier "pdVar1") (= "=") (cast_expression "(double *)(param_1[0x18] + -0x28 + param_2 * 0x28)" (( "(") (type_descriptor "double *" (primitive_type "double") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x18] + -0x28 + param_2 * 0x28)" (( "(") (binary_expression "param_1[0x18] + -0x28 + param_2 * 0x28" (binary_expression "param_1[0x18] + -0x28" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (+ "+") (number_literal "-0x28")) (+ "+") (binary_expression "param_2 * 0x28" (identifier "param_2") (* "*") (number_literal "0x28"))) () ")")))) (; ";")) (if_statement "if (((ulonglong)pdVar1[1] & 0x2400) == 0) {\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }\n    else {\n      FUN_0004c150();\n    }" (if "if") (parenthesized_expression "(((ulonglong)pdVar1[1] & 0x2400) == 0)" (( "(") (binary_expression "((ulonglong)pdVar1[1] & 0x2400) == 0" (parenthesized_expression "((ulonglong)pdVar1[1] & 0x2400)" (( "(") (binary_expression "(ulonglong)pdVar1[1] & 0x2400" (cast_expression "(ulonglong)pdVar1[1]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "pdVar1[1]" (identifier "pdVar1") ([ "[") (number_literal "1") (] "]"))) (& "&") (number_literal "0x2400")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      *(undefined2 *)(pdVar1 + 1) = 1;\n    }" ({ "{") (expression_statement "*(undefined2 *)(pdVar1 + 1) = 1;" (assignment_expression "*(undefined2 *)(pdVar1 + 1) = 1" (pointer_expression "*(undefined2 *)(pdVar1 + 1)" (* "*") (cast_expression "(undefined2 *)(pdVar1 + 1)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pdVar1 + 1)" (( "(") (binary_expression "pdVar1 + 1" (identifier "pdVar1") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "1")) (; ";")) (} "}")) (else_clause "else {\n      FUN_0004c150();\n    }" (else "else") (compound_statement "{\n      FUN_0004c150();\n    }" ({ "{") (expression_statement "FUN_0004c150();" (call_expression "FUN_0004c150()" (identifier "FUN_0004c150") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (if_statement "if (!NAN(dVar3)) {\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }" (if "if") (parenthesized_expression "(!NAN(dVar3))" (( "(") (unary_expression "!NAN(dVar3)" (! "!") (call_expression "NAN(dVar3)" (identifier "NAN") (argument_list "(dVar3)" (( "(") (identifier "dVar3") () ")")))) () ")")) (compound_statement "{\n      *pdVar1 = dVar3;\n      *(undefined2 *)(pdVar1 + 1) = 8;\n    }" ({ "{") (expression_statement "*pdVar1 = dVar3;" (assignment_expression "*pdVar1 = dVar3" (pointer_expression "*pdVar1" (* "*") (identifier "pdVar1")) (= "=") (identifier "dVar3")) (; ";")) (expression_statement "*(undefined2 *)(pdVar1 + 1) = 8;" (assignment_expression "*(undefined2 *)(pdVar1 + 1) = 8" (pointer_expression "*(undefined2 *)(pdVar1 + 1)" (* "*") (cast_expression "(undefined2 *)(pdVar1 + 1)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pdVar1 + 1)" (( "(") (binary_expression "pdVar1 + 1" (identifier "pdVar1") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "8")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" (else "else") (compound_statement "{\n    if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }\n    iVar6 = FUN_00079820();\n    if (iVar6 != 0) {\n      return iVar6;\n    }\n  }" ({ "{") (if_statement "if (bVar4 < 3) {\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }\n    else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }" (if "if") (parenthesized_expression "(bVar4 < 3)" (( "(") (binary_expression "bVar4 < 3" (identifier "bVar4") (< "<") (number_literal "3")) () ")")) (compound_statement "{\n      if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }\n    }" ({ "{") (if_statement "if (bVar4 == 1) {\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }" (if "if") (parenthesized_expression "(bVar4 == 1)" (( "(") (binary_expression "bVar4 == 1" (identifier "bVar4") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));\n        return iVar6;\n      }" ({ "{") (expression_statement "iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4));" (assignment_expression "iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4))" (identifier "iVar6") (= "=") (call_expression "FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4))" (identifier "FUN_00079bb0") (argument_list "(param_1,param_2,*(undefined4 *)param_3,\n                             *(undefined4 *)((int)param_3 + 4))" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (pointer_expression "*(undefined4 *)param_3" (* "*") (cast_expression "(undefined4 *)param_3" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_3"))) (, ",") (pointer_expression "*(undefined4 *)((int)param_3 + 4)" (* "*") (cast_expression "(undefined4 *)((int)param_3 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_3 + 4)" (( "(") (binary_expression "(int)param_3 + 4" (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3")) (+ "+") (number_literal "4")) () ")")))) () ")")))) (; ";")) (return_statement "return iVar6;" (return "return") (identifier "iVar6") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }" (else "else") (compound_statement "{\n      if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }\n      if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }\n    }" ({ "{") (if_statement "if (bVar4 == 3) {\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }" (if "if") (parenthesized_expression "(bVar4 == 3)" (( "(") (binary_expression "bVar4 == 3" (identifier "bVar4") (== "==") (number_literal "3")) () ")")) (compound_statement "{\nLAB_0007a65b:\n        iVar6 = FUN_000799f0();\n        return iVar6;\n      }" ({ "{") (labeled_statement "LAB_0007a65b:\n        iVar6 = FUN_000799f0();" (statement_identifier "LAB_0007a65b") (: ":") (expression_statement "iVar6 = FUN_000799f0();" (assignment_expression "iVar6 = FUN_000799f0()" (identifier "iVar6") (= "=") (call_expression "FUN_000799f0()" (identifier "FUN_000799f0") (argument_list "()" (( "(") () ")")))) (; ";"))) (return_statement "return iVar6;" (return "return") (identifier "iVar6") (; ";")) (} "}"))) (if_statement "if (bVar4 == 4) {\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }" (if "if") (parenthesized_expression "(bVar4 == 4)" (( "(") (binary_expression "bVar4 == 4" (identifier "bVar4") (== "==") (number_literal "4")) () ")")) (compound_statement "{\n        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }\n        goto LAB_0007a65b;\n      }" ({ "{") (if_statement "if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }" (if "if") (parenthesized_expression "((*(ushort *)(param_3 + 1) & 0x4000) != 0)" (( "(") (binary_expression "(*(ushort *)(param_3 + 1) & 0x4000) != 0" (parenthesized_expression "(*(ushort *)(param_3 + 1) & 0x4000)" (( "(") (binary_expression "*(ushort *)(param_3 + 1) & 0x4000" (pointer_expression "*(ushort *)(param_3 + 1)" (* "*") (cast_expression "(ushort *)(param_3 + 1)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 1)" (( "(") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1")) () ")")))) (& "&") (number_literal "0x4000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          iVar6 = *(int *)param_3;\n          iVar5 = FUN_00079820();\n          if (iVar5 != 0) {\n            return iVar5;\n          }\n          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);\n          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }\n          *(undefined1 *)((int)piVar2 + 10) = 1;\n          *(undefined2 *)(piVar2 + 2) = 0x4010;\n          piVar2[3] = 0;\n          iVar5 = 0;\n          if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }\n          piVar2[4] = 0;\n          *piVar2 = iVar5;\n          goto LAB_0007a628;\n        }" ({ "{") (expression_statement "iVar6 = *(int *)param_3;" (assignment_expression "iVar6 = *(int *)param_3" (identifier "iVar6") (= "=") (pointer_expression "*(int *)param_3" (* "*") (cast_expression "(int *)param_3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_3")))) (; ";")) (expression_statement "iVar5 = FUN_00079820();" (assignment_expression "iVar5 = FUN_00079820()" (identifier "iVar5") (= "=") (call_expression "FUN_00079820()" (identifier "FUN_00079820") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar5 != 0) {\n            return iVar5;\n          }" (if "if") (parenthesized_expression "(iVar5 != 0)" (( "(") (binary_expression "iVar5 != 0" (identifier "iVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            return iVar5;\n          }" ({ "{") (return_statement "return iVar5;" (return "return") (identifier "iVar5") (; ";")) (} "}"))) (expression_statement "piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);" (assignment_expression "piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28)" (identifier "piVar2") (= "=") (cast_expression "(int *)(param_1[0x18] + -0x28 + param_2 * 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x18] + -0x28 + param_2 * 0x28)" (( "(") (binary_expression "param_1[0x18] + -0x28 + param_2 * 0x28" (binary_expression "param_1[0x18] + -0x28" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (+ "+") (number_literal "-0x28")) (+ "+") (binary_expression "param_2 * 0x28" (identifier "param_2") (* "*") (number_literal "0x28"))) () ")")))) (; ";")) (if_statement "if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {\n            FUN_00060f90();\n          }" (if "if") (parenthesized_expression "(((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0))" (( "(") (binary_expression "((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)" (parenthesized_expression "((*(ushort *)(piVar2 + 2) & 0x2400) != 0)" (( "(") (binary_expression "(*(ushort *)(piVar2 + 2) & 0x2400) != 0" (parenthesized_expression "(*(ushort *)(piVar2 + 2) & 0x2400)" (( "(") (binary_expression "*(ushort *)(piVar2 + 2) & 0x2400" (pointer_expression "*(ushort *)(piVar2 + 2)" (* "*") (cast_expression "(ushort *)(piVar2 + 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar2 + 2)" (( "(") (binary_expression "piVar2 + 2" (identifier "piVar2") (+ "+") (number_literal "2")) () ")")))) (& "&") (number_literal "0x2400")) () ")")) (!= "!=") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(piVar2[6] != 0)" (( "(") (binary_expression "piVar2[6] != 0" (subscript_expression "piVar2[6]" (identifier "piVar2") ([ "[") (number_literal "6") (] "]")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n            FUN_00060f90();\n          }" ({ "{") (expression_statement "FUN_00060f90();" (call_expression "FUN_00060f90()" (identifier "FUN_00060f90") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "*(undefined1 *)((int)piVar2 + 10) = 1;" (assignment_expression "*(undefined1 *)((int)piVar2 + 10) = 1" (pointer_expression "*(undefined1 *)((int)piVar2 + 10)" (* "*") (cast_expression "(undefined1 *)((int)piVar2 + 10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)piVar2 + 10)" (( "(") (binary_expression "(int)piVar2 + 10" (cast_expression "(int)piVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar2")) (+ "+") (number_literal "10")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "*(undefined2 *)(piVar2 + 2) = 0x4010;" (assignment_expression "*(undefined2 *)(piVar2 + 2) = 0x4010" (pointer_expression "*(undefined2 *)(piVar2 + 2)" (* "*") (cast_expression "(undefined2 *)(piVar2 + 2)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar2 + 2)" (( "(") (binary_expression "piVar2 + 2" (identifier "piVar2") (+ "+") (number_literal "2")) () ")")))) (= "=") (number_literal "0x4010")) (; ";")) (expression_statement "piVar2[3] = 0;" (assignment_expression "piVar2[3] = 0" (subscript_expression "piVar2[3]" (identifier "piVar2") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (if_statement "if (-1 < iVar6) {\n            iVar5 = iVar6;\n          }" (if "if") (parenthesized_expression "(-1 < iVar6)" (( "(") (binary_expression "-1 < iVar6" (number_literal "-1") (< "<") (identifier "iVar6")) () ")")) (compound_statement "{\n            iVar5 = iVar6;\n          }" ({ "{") (expression_statement "iVar5 = iVar6;" (assignment_expression "iVar5 = iVar6" (identifier "iVar5") (= "=") (identifier "iVar6")) (; ";")) (} "}"))) (expression_statement "piVar2[4] = 0;" (assignment_expression "piVar2[4] = 0" (subscript_expression "piVar2[4]" (identifier "piVar2") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*piVar2 = iVar5;" (assignment_expression "*piVar2 = iVar5" (pointer_expression "*piVar2" (* "*") (identifier "piVar2")) (= "=") (identifier "iVar5")) (; ";")) (goto_statement "goto LAB_0007a628;" (goto "goto") (statement_identifier "LAB_0007a628") (; ";")) (} "}"))) (goto_statement "goto LAB_0007a65b;" (goto "goto") (statement_identifier "LAB_0007a65b") (; ";")) (} "}"))) (} "}")))) (expression_statement "iVar6 = FUN_00079820();" (assignment_expression "iVar6 = FUN_00079820()" (identifier "iVar6") (= "=") (call_expression "FUN_00079820()" (identifier "FUN_00079820") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar6 != 0) {\n      return iVar6;\n    }" (if "if") (parenthesized_expression "(iVar6 != 0)" (( "(") (binary_expression "iVar6 != 0" (identifier "iVar6") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return iVar6;\n    }" ({ "{") (return_statement "return iVar6;" (return "return") (identifier "iVar6") (; ";")) (} "}"))) (} "}")))) (labeled_statement "LAB_0007a628:\n  if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\n  }" (statement_identifier "LAB_0007a628") (: ":") (if_statement "if (*(int *)(*param_1 + 0xc) == 0) {\n    return 0;\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" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0xc")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))) (expression_statement "(**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));" (call_expression "(**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc))" (parenthesized_expression "(**(code **)(unaff_EDI + 0x140ecd))" (( "(") (pointer_expression "**(code **)(unaff_EDI + 0x140ecd)" (* "*") (pointer_expression "*(code **)(unaff_EDI + 0x140ecd)" (* "*") (cast_expression "(code **)(unaff_EDI + 0x140ecd)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(unaff_EDI + 0x140ecd)" (( "(") (binary_expression "unaff_EDI + 0x140ecd" (identifier "unaff_EDI") (+ "+") (number_literal "0x140ecd")) () ")"))))) () ")")) (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" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0xc")) () ")")))) () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

int function_1(type_1 *var_6,int var_7,type_2 *pValue)

{
  type_3 *pMVar1;
  double dVar2;
  type_4 var_3;
  type_2 *psVar4;
  int var_12;
  int var_5;
  char *zData;
  int var_2;
  
  psVar4 = pValue;
  var_1();
  var_3 = *(type_4 *)(var_2 + 0xe9769 + (pValue->flags & 0x1f));
  if (var_3 == 2) {
    dVar2 = (pValue->u).r;
    var_5 = var_4((type_5 *)var_6,var_7);
    if (var_5 != 0) {
      return var_5;
    }
    pMVar1 = (type_3 *)(*(int *)(var_6 + 0x60) + -0x28 + var_7 * 0x28);
    if ((pMVar1->flags & 0x2400) == 0) {
      pMVar1->flags = 1;
    }
    else {
      var_8(pMVar1);
    }
    if (!var_9(dVar2)) {
      (pMVar1->u).r = dVar2;
      pMVar1->flags = 8;
    }
  }
  else {
    if (var_3 < 3) {
      if (var_3 == 1) {
        var_5 = var_10(var_6,var_7,(pValue->u).var_7);
        return var_5;
      }
    }
    else {
      if (var_3 == 3) {
        zData = pValue->z;
        pValue._0_1_ = pValue->enc;
LAB_0007a65b:
        var_5 = var_11(var_6,var_7,zData,psVar4->n,(type_6 *)&DAT_ffffffff,(type_7)pValue);
        return var_5;
      }
      if (var_3 == 4) {
        if ((pValue->flags & 0x4000) != 0) {
          var_5 = (pValue->u).nZero;
          var_12 = var_4((type_5 *)var_6,var_7);
          if (var_12 != 0) {
            return var_12;
          }
          pMVar1 = (type_3 *)(*(int *)(var_6 + 0x60) + -0x28 + var_7 * 0x28);
          if (((pMVar1->flags & 0x2400) != 0) || (pMVar1->szMalloc != 0)) {
            var_13(pMVar1);
          }
          pMVar1->enc = '\x01';
          pMVar1->flags = 0x4010;
          pMVar1->n = 0;
          var_12 = 0;
          if (-1 < var_5) {
            var_12 = var_5;
          }
          pMVar1->z = (char *)0x0;
          (pMVar1->u).nZero = var_12;
          goto LAB_0007a628;
        }
        zData = pValue->z;
        pValue._0_1_ = '\0';
        goto LAB_0007a65b;
      }
    }
    var_5 = var_4((type_5 *)var_6,var_7);
    if (var_5 != 0) {
      return var_5;
    }
  }
LAB_0007a628:
  if (*(int *)(*(int *)var_6 + 0xc) == 0) {
    return 0;
  }
  (**(type_8 **)(var_2 + 0x140ecd))(*(int *)(*(int *)var_6 + 0xc));
  return 0;
}


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

int MASKED(int *param_1,int param_2,double *param_3)

{
  double *pdVar1;
  int *piVar2;
  double dVar3;
  byte bVar4;
  int iVar5;
  int iVar6;
  int unaff_EDI;
  
  FUN_0003a401();
  bVar4 = *(byte *)(unaff_EDI + 0xe9769 + (*(ushort *)(param_3 + 1) & 0x1f));
  if (bVar4 == 2) {
    dVar3 = *param_3;
    iVar6 = FUN_00079820();
    if (iVar6 != 0) {
      return iVar6;
    }
    pdVar1 = (double *)(param_1[0x18] + -0x28 + param_2 * 0x28);
    if (((ulonglong)pdVar1[1] & 0x2400) == 0) {
      *(undefined2 *)(pdVar1 + 1) = 1;
    }
    else {
      FUN_0004c150();
    }
    if (!NAN(dVar3)) {
      *pdVar1 = dVar3;
      *(undefined2 *)(pdVar1 + 1) = 8;
    }
  }
  else {
    if (bVar4 < 3) {
      if (bVar4 == 1) {
        iVar6 = FUN_00079bb0(param_1,param_2,*(undefined4 *)param_3,
                             *(undefined4 *)((int)param_3 + 4));
        return iVar6;
      }
    }
    else {
      if (bVar4 == 3) {
LAB_0007a65b:
        iVar6 = FUN_000799f0();
        return iVar6;
      }
      if (bVar4 == 4) {
        if ((*(ushort *)(param_3 + 1) & 0x4000) != 0) {
          iVar6 = *(int *)param_3;
          iVar5 = FUN_00079820();
          if (iVar5 != 0) {
            return iVar5;
          }
          piVar2 = (int *)(param_1[0x18] + -0x28 + param_2 * 0x28);
          if (((*(ushort *)(piVar2 + 2) & 0x2400) != 0) || (piVar2[6] != 0)) {
            FUN_00060f90();
          }
          *(undefined1 *)((int)piVar2 + 10) = 1;
          *(undefined2 *)(piVar2 + 2) = 0x4010;
          piVar2[3] = 0;
          iVar5 = 0;
          if (-1 < iVar6) {
            iVar5 = iVar6;
          }
          piVar2[4] = 0;
          *piVar2 = iVar5;
          goto LAB_0007a628;
        }
        goto LAB_0007a65b;
      }
    }
    iVar6 = FUN_00079820();
    if (iVar6 != 0) {
      return iVar6;
    }
  }
LAB_0007a628:
  if (*(int *)(*param_1 + 0xc) == 0) {
    return 0;
  }
  (**(code **)(unaff_EDI + 0x140ecd))(*(int *)(*param_1 + 0xc));
  return 0;
}

