
/* DWARF original prototype: _Bool check_dst_limits(re_match_context_t * mctx, re_node_set * limits,
   Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx, re_node_set * limits) */

_Bool check_dst_limits(re_match_context_t *mctx,re_node_set *limits,Idx dst_node,Idx dst_idx,
                      Idx src_node,Idx src_idx,re_node_set *limits_1)

{
  int iVar1;
  int iVar2;
  int iVar3;
  Idx limit;
  int iVar4;
  Idx bkref_idx;
  Idx bkref_idx_00;
  int iVar5;
  re_dfa_t *prVar6;
  Idx subexp_idx;
  
  iVar3 = mctx->nbkref_ents;
  prVar6 = mctx->dfa;
  bkref_idx = 0;
  iVar5 = iVar3;
  while (bkref_idx < iVar5) {
    iVar4 = (bkref_idx + iVar5) / 2;
    iVar2 = mctx->bkref_ents[iVar4].str_idx;
    while (iVar1 = iVar4, src_node <= iVar2) {
      if (iVar1 <= bkref_idx) goto LAB_0002bd7c;
      iVar4 = (bkref_idx + iVar1) / 2;
      iVar2 = mctx->bkref_ents[iVar4].str_idx;
      iVar5 = iVar1;
    }
    bkref_idx = iVar1 + 1;
  }
LAB_0002bd7c:
  if (bkref_idx < iVar3) {
    if (src_node != mctx->bkref_ents[bkref_idx].str_idx) {
      bkref_idx = -1;
    }
  }
  else {
    bkref_idx = -1;
  }
  bkref_idx_00 = 0;
  iVar5 = iVar3;
  while (bkref_idx_00 < iVar5) {
    iVar4 = (bkref_idx_00 + iVar5) / 2;
    iVar2 = mctx->bkref_ents[iVar4].str_idx;
    while (iVar1 = iVar4, (int)limits_1 <= iVar2) {
      if (iVar1 <= bkref_idx_00) goto LAB_0002be30;
      iVar4 = (bkref_idx_00 + iVar1) / 2;
      iVar2 = mctx->bkref_ents[iVar4].str_idx;
      iVar5 = iVar1;
    }
    bkref_idx_00 = iVar1 + 1;
  }
LAB_0002be30:
  if (bkref_idx_00 < iVar3) {
    if (limits_1 != (re_node_set *)mctx->bkref_ents[bkref_idx_00].str_idx) {
      bkref_idx_00 = -1;
    }
  }
  else {
    bkref_idx_00 = -1;
  }
  if (0 < limits->alloc) {
    iVar5 = 0;
    do {
      limit = *(Idx *)(*(int *)dst_node + iVar5 * 4);
      subexp_idx = prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx;
      iVar3 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx);
      iVar2 = check_dst_limits_calc_pos
                        (mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,
                         (Idx)limits_1,bkref_idx_00);
      if (iVar3 != iVar2) {
        return true;
      }
      iVar5 = iVar5 + 1;
    } while (iVar5 < limits->alloc);
  }
  return false;
}



undefined4
FUN_0002bca0(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6
            ,int param_7)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int *piVar8;
  undefined4 uVar9;
  
  iVar3 = *(int *)(param_1 + 0x6c);
  piVar8 = *(int **)(param_1 + 0x54);
  iVar6 = 0;
  iVar7 = iVar3;
  while (iVar6 < iVar7) {
    iVar4 = (iVar6 + iVar7) / 2;
    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);
    while (iVar5 = iVar4, param_5 <= iVar2) {
      if (iVar5 <= iVar6) goto LAB_0002bd7c;
      iVar4 = (iVar6 + iVar5) / 2;
      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);
      iVar7 = iVar5;
    }
    iVar6 = iVar5 + 1;
  }
LAB_0002bd7c:
  if (iVar6 < iVar3) {
    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {
      iVar6 = -1;
    }
  }
  else {
    iVar6 = -1;
  }
  iVar2 = 0;
  iVar7 = iVar3;
  while (iVar2 < iVar7) {
    iVar5 = (iVar2 + iVar7) / 2;
    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);
    while (iVar1 = iVar5, param_7 <= iVar4) {
      if (iVar1 <= iVar2) goto LAB_0002be30;
      iVar5 = (iVar2 + iVar1) / 2;
      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);
      iVar7 = iVar1;
    }
    iVar2 = iVar1 + 1;
  }
LAB_0002be30:
  if (iVar2 < iVar3) {
    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {
      iVar2 = -1;
    }
  }
  else {
    iVar2 = -1;
  }
  if (0 < *param_2) {
    iVar7 = 0;
    do {
      iVar3 = *(int *)(*param_3 + iVar7 * 4);
      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);
      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);
      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2
                          );
      if (iVar3 != iVar4) {
        return 1;
      }
      iVar7 = iVar7 + 1;
    } while (iVar7 < *param_2);
  }
  return 0;
}


lui gp,0x3
addiu gp,gp,-0xbc0
addu gp,gp,t9
addiu sp,sp,-0x48
lw t0,0x6c(a0)
lw t8,0x54(a0)
or t3,zero,zero
lw t5,0x58(sp)
or v1,t0,zero
lw t6,0x60(sp)
sw gp,0x18(sp)
sw ra,0x44(sp)
sw s8,0x40(sp)
sw s7,0x3c(sp)
sw s6,0x38(sp)
sw s5,0x34(sp)
sw s4,0x30(sp)
sw s3,0x2c(sp)
sw s2,0x28(sp)
sw s1,0x24(sp)
sw s0,0x20(sp)
slt v0,t3,v1
beq v0,zero,0x0002bd7c
_slt v0,t3,t0
addu t1,t3,v1
lw t4,0x74(a0)
srl v0,t1,0x1f
addu t1,v0,t1
sra t1,t1,0x1
sll v0,t1,0x2
addu v0,v0,t1
sll v0,v0,0x2
addu v0,t4,v0
lw v0,0x4(v0)
slt v0,v0,t5
beq v0,zero,0x0002bd68
_or t2,t1,zero
b 0x0002bf3c
_or t1,v1,zero
addu v0,v0,t2
sra v0,v0,0x1
sll v1,v0,0x2
addu v1,v1,v0
sll v1,v1,0x2
addu v1,t4,v1
lw v1,0x4(v1)
slt v1,v1,t5
bne v1,zero,0x0002bf3c
_or t2,v0,zero
or t1,v0,zero
addu t2,t3,t1
slt v1,t3,t1
bne v1,zero,0x0002bd3c
_srl v0,t2,0x1f
slt v0,t3,t0
beq v0,zero,0x0002bf70
_sll v0,t3,0x2
lw v1,0x74(a0)
addu v0,v0,t3
sll v0,v0,0x2
addu v0,v1,v0
li v1,-0x1
lw v0,0x4(v0)
xor v0,t5,v0
movn t3,v1,v0
or s0,zero,zero
or v1,t0,zero
slt v0,s0,v1
beq v0,zero,0x0002be30
_nop
addu t1,s0,v1
lw t4,0x74(a0)
srl v0,t1,0x1f
addu t1,v0,t1
sra t1,t1,0x1
sll v0,t1,0x2
addu v0,v0,t1
sll v0,v0,0x2
addu v0,t4,v0
lw v0,0x4(v0)
slt v0,v0,t6
beq v0,zero,0x0002be20
_or t2,t1,zero
b 0x0002bf48
_or t1,v1,zero
addu v0,v0,t2
sra v0,v0,0x1
sll v1,v0,0x2
addu v1,v1,v0
sll v1,v1,0x2
addu v1,t4,v1
lw v1,0x4(v1)
slt v1,v1,t6
bne v1,zero,0x0002bf48
_or t2,v0,zero
or t1,v0,zero
addu t2,s0,t1
slt v1,s0,t1
bne v1,zero,0x0002bdf4
_srl v0,t2,0x1f
slt t0,s0,t0
beq t0,zero,0x0002bf78
_sll v0,s0,0x2
lw v1,0x74(a0)
addu v0,v0,s0
sll v0,v0,0x2
addu v0,v1,v0
li v1,-0x1
lw v0,0x4(v0)
xor v0,t6,v0
movn s0,v1,v0
lw v0,0x0(a1)
blez v0,0x0002bf68
_lw s3,-0x7db4(gp)
or s7,zero,zero
or s2,a3,zero
or s5,a2,zero
addiu s3,s3,-0x6748
or s4,a1,zero
or s6,a0,zero
lw v0,0x0(s5)
sll s1,s7,0x2
lw a2,0x74(s6)
or a3,s2,zero
lw v1,0x0(t8)
or a0,s6,zero
addu v0,v0,s1
or t9,s3,zero
lw t0,0x0(v0)
sll v0,t0,0x2
or a1,t0,zero
addu v0,v0,t0
sll v0,v0,0x2
addu v0,a2,v0
lw v0,0x0(v0)
sll v0,v0,0x3
addu v0,v1,v0
lw s8,0x0(v0)
sw t3,0x14(sp)
sw t5,0x10(sp)
bal 0x000298b8
_or a2,s8,zero
or a2,s8,zero
lw v1,0x0(s5)
or a0,s6,zero
lw a3,0x5c(sp)
or t9,s3,zero
or s8,v0,zero
addu s1,v1,s1
lw a1,0x0(s1)
sw s0,0x14(sp)
bal 0x000298b8
_sw t6,0x10(sp)
beq s8,v0,0x0002bf54
_li v0,0x1
lw ra,0x44(sp)
lw s8,0x40(sp)
lw s7,0x3c(sp)
lw s6,0x38(sp)
lw s5,0x34(sp)
lw s4,0x30(sp)
lw s3,0x2c(sp)
lw s2,0x28(sp)
lw s1,0x24(sp)
lw s0,0x20(sp)
jr ra
_addiu sp,sp,0x48
addiu t3,t2,0x1
b 0x0002bcf4
_or v1,t1,zero
addiu s0,t2,0x1
b 0x0002bdac
_or v1,t1,zero
lw v0,0x0(s4)
addiu s7,s7,0x1
slt v0,s7,v0
bne v0,zero,0x0002be80
_nop
b 0x0002bf0c
_or v0,zero,zero
b 0x0002bda4
_li t3,-0x1
b 0x0002be5c
_li s0,-0x1
(translation_unit "undefined4\nFUN_0002bca0(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6\n            ,int param_7)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  int *piVar8;\n  undefined4 uVar9;\n  \n  iVar3 = *(int *)(param_1 + 0x6c);\n  piVar8 = *(int **)(param_1 + 0x54);\n  iVar6 = 0;\n  iVar7 = iVar3;\n  while (iVar6 < iVar7) {\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }\nLAB_0002bd7c:\n  if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }\n  iVar2 = 0;\n  iVar7 = iVar3;\n  while (iVar2 < iVar7) {\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }\nLAB_0002be30:\n  if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }\n  if (0 < *param_2) {\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }\n  return 0;\n}\n\n" (function_definition "undefined4\nFUN_0002bca0(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6\n            ,int param_7)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  int *piVar8;\n  undefined4 uVar9;\n  \n  iVar3 = *(int *)(param_1 + 0x6c);\n  piVar8 = *(int **)(param_1 + 0x54);\n  iVar6 = 0;\n  iVar7 = iVar3;\n  while (iVar6 < iVar7) {\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }\nLAB_0002bd7c:\n  if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }\n  iVar2 = 0;\n  iVar7 = iVar3;\n  while (iVar2 < iVar7) {\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }\nLAB_0002be30:\n  if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }\n  if (0 < *param_2) {\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0002bca0(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6\n            ,int param_7)" identifier (parameter_list "(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6\n            ,int param_7)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "undefined4 param_6" type_identifier identifier) , (parameter_declaration "int param_7" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  int *piVar8;\n  undefined4 uVar9;\n  \n  iVar3 = *(int *)(param_1 + 0x6c);\n  piVar8 = *(int **)(param_1 + 0x54);\n  iVar6 = 0;\n  iVar7 = iVar3;\n  while (iVar6 < iVar7) {\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }\nLAB_0002bd7c:\n  if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }\n  iVar2 = 0;\n  iVar7 = iVar3;\n  while (iVar2 < iVar7) {\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }\nLAB_0002be30:\n  if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }\n  if (0 < *param_2) {\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "undefined4 uVar9;" type_identifier identifier ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x6c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x6c)" identifier = (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) ))))) ;) (expression_statement "piVar8 = *(int **)(param_1 + 0x54);" (assignment_expression "piVar8 = *(int **)(param_1 + 0x54)" identifier = (pointer_expression "*(int **)(param_1 + 0x54)" * (cast_expression "(int **)(param_1 + 0x54)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) ))))) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "iVar7 = iVar3;" (assignment_expression "iVar7 = iVar3" identifier = identifier) ;) (while_statement "while (iVar6 < iVar7) {\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }" while (parenthesized_expression "(iVar6 < iVar7)" ( (binary_expression "iVar6 < iVar7" identifier < identifier) )) (compound_statement "{\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }" { (expression_statement "iVar4 = (iVar6 + iVar7) / 2;" (assignment_expression "iVar4 = (iVar6 + iVar7) / 2" identifier = (binary_expression "(iVar6 + iVar7) / 2" (parenthesized_expression "(iVar6 + iVar7)" ( (binary_expression "iVar6 + iVar7" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);" (assignment_expression "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar4 * 0x14" identifier * number_literal)) + number_literal) ))))) ;) (while_statement "while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }" while (parenthesized_expression "(iVar5 = iVar4, param_5 <= iVar2)" ( (comma_expression "iVar5 = iVar4, param_5 <= iVar2" (assignment_expression "iVar5 = iVar4" identifier = identifier) , (binary_expression "param_5 <= iVar2" identifier <= identifier)) )) (compound_statement "{\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }" { (if_statement "if (iVar5 <= iVar6) goto LAB_0002bd7c;" if (parenthesized_expression "(iVar5 <= iVar6)" ( (binary_expression "iVar5 <= iVar6" identifier <= identifier) )) (goto_statement "goto LAB_0002bd7c;" goto statement_identifier ;)) (expression_statement "iVar4 = (iVar6 + iVar5) / 2;" (assignment_expression "iVar4 = (iVar6 + iVar5) / 2" identifier = (binary_expression "(iVar6 + iVar5) / 2" (parenthesized_expression "(iVar6 + iVar5)" ( (binary_expression "iVar6 + iVar5" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);" (assignment_expression "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar4 * 0x14" identifier * number_literal)) + number_literal) ))))) ;) (expression_statement "iVar7 = iVar5;" (assignment_expression "iVar7 = iVar5" identifier = identifier) ;) })) (expression_statement "iVar6 = iVar5 + 1;" (assignment_expression "iVar6 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) })) (labeled_statement "LAB_0002bd7c:\n  if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }" statement_identifier : (if_statement "if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }" if (parenthesized_expression "(iVar6 < iVar3)" ( (binary_expression "iVar6 < iVar3" identifier < identifier) )) (compound_statement "{\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }" { (if_statement "if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }" if (parenthesized_expression "(param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4))" ( (binary_expression "param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" identifier != (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar6 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar6 * 0x14" identifier * number_literal)) + number_literal) ))))) )) (compound_statement "{\n      iVar6 = -1;\n    }" { (expression_statement "iVar6 = -1;" (assignment_expression "iVar6 = -1" identifier = number_literal) ;) })) }) (else_clause "else {\n    iVar6 = -1;\n  }" else (compound_statement "{\n    iVar6 = -1;\n  }" { (expression_statement "iVar6 = -1;" (assignment_expression "iVar6 = -1" identifier = number_literal) ;) })))) (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (expression_statement "iVar7 = iVar3;" (assignment_expression "iVar7 = iVar3" identifier = identifier) ;) (while_statement "while (iVar2 < iVar7) {\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }" while (parenthesized_expression "(iVar2 < iVar7)" ( (binary_expression "iVar2 < iVar7" identifier < identifier) )) (compound_statement "{\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }" { (expression_statement "iVar5 = (iVar2 + iVar7) / 2;" (assignment_expression "iVar5 = (iVar2 + iVar7) / 2" identifier = (binary_expression "(iVar2 + iVar7) / 2" (parenthesized_expression "(iVar2 + iVar7)" ( (binary_expression "iVar2 + iVar7" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);" (assignment_expression "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar5 * 0x14" identifier * number_literal)) + number_literal) ))))) ;) (while_statement "while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }" while (parenthesized_expression "(iVar1 = iVar5, param_7 <= iVar4)" ( (comma_expression "iVar1 = iVar5, param_7 <= iVar4" (assignment_expression "iVar1 = iVar5" identifier = identifier) , (binary_expression "param_7 <= iVar4" identifier <= identifier)) )) (compound_statement "{\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }" { (if_statement "if (iVar1 <= iVar2) goto LAB_0002be30;" if (parenthesized_expression "(iVar1 <= iVar2)" ( (binary_expression "iVar1 <= iVar2" identifier <= identifier) )) (goto_statement "goto LAB_0002be30;" goto statement_identifier ;)) (expression_statement "iVar5 = (iVar2 + iVar1) / 2;" (assignment_expression "iVar5 = (iVar2 + iVar1) / 2" identifier = (binary_expression "(iVar2 + iVar1) / 2" (parenthesized_expression "(iVar2 + iVar1)" ( (binary_expression "iVar2 + iVar1" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);" (assignment_expression "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar5 * 0x14" identifier * number_literal)) + number_literal) ))))) ;) (expression_statement "iVar7 = iVar1;" (assignment_expression "iVar7 = iVar1" identifier = identifier) ;) })) (expression_statement "iVar2 = iVar1 + 1;" (assignment_expression "iVar2 = iVar1 + 1" identifier = (binary_expression "iVar1 + 1" identifier + number_literal)) ;) })) (labeled_statement "LAB_0002be30:\n  if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }" statement_identifier : (if_statement "if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }" if (parenthesized_expression "(iVar2 < iVar3)" ( (binary_expression "iVar2 < iVar3" identifier < identifier) )) (compound_statement "{\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }" { (if_statement "if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }" if (parenthesized_expression "(param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4))" ( (binary_expression "param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" identifier != (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar2 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar2 * 0x14" identifier * number_literal)) + number_literal) ))))) )) (compound_statement "{\n      iVar2 = -1;\n    }" { (expression_statement "iVar2 = -1;" (assignment_expression "iVar2 = -1" identifier = number_literal) ;) })) }) (else_clause "else {\n    iVar2 = -1;\n  }" else (compound_statement "{\n    iVar2 = -1;\n  }" { (expression_statement "iVar2 = -1;" (assignment_expression "iVar2 = -1" identifier = number_literal) ;) })))) (if_statement "if (0 < *param_2) {\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }" if (parenthesized_expression "(0 < *param_2)" ( (binary_expression "0 < *param_2" number_literal < (pointer_expression "*param_2" * identifier)) )) (compound_statement "{\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);" do (compound_statement "{\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    }" { (expression_statement "iVar3 = *(int *)(*param_3 + iVar7 * 4);" (assignment_expression "iVar3 = *(int *)(*param_3 + iVar7 * 4)" identifier = (pointer_expression "*(int *)(*param_3 + iVar7 * 4)" * (cast_expression "(int *)(*param_3 + iVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + iVar7 * 4)" ( (binary_expression "*param_3 + iVar7 * 4" (pointer_expression "*param_3" * identifier) + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);" (assignment_expression "uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" identifier = (pointer_expression "*(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" * (cast_expression "(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" ( (binary_expression "*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8" (pointer_expression "*piVar8" * identifier) + (binary_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar3 * 0x14)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar3 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar3 * 0x14" identifier * number_literal)) )))) * number_literal)) ))))) ;) (expression_statement "iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);" (assignment_expression "iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6)" identifier = (call_expression "FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6)" identifier (argument_list "(param_1,iVar3,uVar9,param_4,param_5,iVar6)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );" (assignment_expression "iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          )" identifier = (call_expression "FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          )" identifier (argument_list "(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          )" ( identifier , (pointer_expression "*(undefined4 *)(*param_3 + iVar7 * 4)" * (cast_expression "(undefined4 *)(*param_3 + iVar7 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + iVar7 * 4)" ( (binary_expression "*param_3 + iVar7 * 4" (pointer_expression "*param_3" * identifier) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 != iVar4) {\n        return 1;\n      }" if (parenthesized_expression "(iVar3 != iVar4)" ( (binary_expression "iVar3 != iVar4" identifier != identifier) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 < *param_2)" ( (binary_expression "iVar7 < *param_2" identifier < (pointer_expression "*param_2" * identifier)) )) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* DWARF original prototype: _Bool check_dst_limits(re_match_context_t * mctx, re_node_set * limits,\n   Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx, re_node_set * limits) */\n\n_Bool check_dst_limits(re_match_context_t *mctx,re_node_set *limits,Idx dst_node,Idx dst_idx,\n                      Idx src_node,Idx src_idx,re_node_set *limits_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  Idx limit;\n  int iVar4;\n  Idx bkref_idx;\n  Idx bkref_idx_00;\n  int iVar5;\n  re_dfa_t *prVar6;\n  Idx subexp_idx;\n  \n  iVar3 = mctx->nbkref_ents;\n  prVar6 = mctx->dfa;\n  bkref_idx = 0;\n  iVar5 = iVar3;\n  while (bkref_idx < iVar5) {\n    iVar4 = (bkref_idx + iVar5) / 2;\n    iVar2 = mctx->bkref_ents[iVar4].str_idx;\n    while (iVar1 = iVar4, src_node <= iVar2) {\n      if (iVar1 <= bkref_idx) goto LAB_0002bd7c;\n      iVar4 = (bkref_idx + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }\n    bkref_idx = iVar1 + 1;\n  }\nLAB_0002bd7c:\n  if (bkref_idx < iVar3) {\n    if (src_node != mctx->bkref_ents[bkref_idx].str_idx) {\n      bkref_idx = -1;\n    }\n  }\n  else {\n    bkref_idx = -1;\n  }\n  bkref_idx_00 = 0;\n  iVar5 = iVar3;\n  while (bkref_idx_00 < iVar5) {\n    iVar4 = (bkref_idx_00 + iVar5) / 2;\n    iVar2 = mctx->bkref_ents[iVar4].str_idx;\n    while (iVar1 = iVar4, (int)limits_1 <= iVar2) {\n      if (iVar1 <= bkref_idx_00) goto LAB_0002be30;\n      iVar4 = (bkref_idx_00 + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }\n    bkref_idx_00 = iVar1 + 1;\n  }\nLAB_0002be30:\n  if (bkref_idx_00 < iVar3) {\n    if (limits_1 != (re_node_set *)mctx->bkref_ents[bkref_idx_00].str_idx) {\n      bkref_idx_00 = -1;\n    }\n  }\n  else {\n    bkref_idx_00 = -1;\n  }\n  if (0 < limits->alloc) {\n    iVar5 = 0;\n    do {\n      limit = *(Idx *)(*(int *)dst_node + iVar5 * 4);\n      subexp_idx = prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar3 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx);\n      iVar2 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,\n                         (Idx)limits_1,bkref_idx_00);\n      if (iVar3 != iVar2) {\n        return true;\n      }\n      iVar5 = iVar5 + 1;\n    } while (iVar5 < limits->alloc);\n  }\n  return false;\n}\n\n" comment (function_definition "_Bool check_dst_limits(re_match_context_t *mctx,re_node_set *limits,Idx dst_node,Idx dst_idx,\n                      Idx src_node,Idx src_idx,re_node_set *limits_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  Idx limit;\n  int iVar4;\n  Idx bkref_idx;\n  Idx bkref_idx_00;\n  int iVar5;\n  re_dfa_t *prVar6;\n  Idx subexp_idx;\n  \n  iVar3 = mctx->nbkref_ents;\n  prVar6 = mctx->dfa;\n  bkref_idx = 0;\n  iVar5 = iVar3;\n  while (bkref_idx < iVar5) {\n    iVar4 = (bkref_idx + iVar5) / 2;\n    iVar2 = mctx->bkref_ents[iVar4].str_idx;\n    while (iVar1 = iVar4, src_node <= iVar2) {\n      if (iVar1 <= bkref_idx) goto LAB_0002bd7c;\n      iVar4 = (bkref_idx + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }\n    bkref_idx = iVar1 + 1;\n  }\nLAB_0002bd7c:\n  if (bkref_idx < iVar3) {\n    if (src_node != mctx->bkref_ents[bkref_idx].str_idx) {\n      bkref_idx = -1;\n    }\n  }\n  else {\n    bkref_idx = -1;\n  }\n  bkref_idx_00 = 0;\n  iVar5 = iVar3;\n  while (bkref_idx_00 < iVar5) {\n    iVar4 = (bkref_idx_00 + iVar5) / 2;\n    iVar2 = mctx->bkref_ents[iVar4].str_idx;\n    while (iVar1 = iVar4, (int)limits_1 <= iVar2) {\n      if (iVar1 <= bkref_idx_00) goto LAB_0002be30;\n      iVar4 = (bkref_idx_00 + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }\n    bkref_idx_00 = iVar1 + 1;\n  }\nLAB_0002be30:\n  if (bkref_idx_00 < iVar3) {\n    if (limits_1 != (re_node_set *)mctx->bkref_ents[bkref_idx_00].str_idx) {\n      bkref_idx_00 = -1;\n    }\n  }\n  else {\n    bkref_idx_00 = -1;\n  }\n  if (0 < limits->alloc) {\n    iVar5 = 0;\n    do {\n      limit = *(Idx *)(*(int *)dst_node + iVar5 * 4);\n      subexp_idx = prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar3 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx);\n      iVar2 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,\n                         (Idx)limits_1,bkref_idx_00);\n      if (iVar3 != iVar2) {\n        return true;\n      }\n      iVar5 = iVar5 + 1;\n    } while (iVar5 < limits->alloc);\n  }\n  return false;\n}" type_identifier (function_declarator "check_dst_limits(re_match_context_t *mctx,re_node_set *limits,Idx dst_node,Idx dst_idx,\n                      Idx src_node,Idx src_idx,re_node_set *limits_1)" identifier (parameter_list "(re_match_context_t *mctx,re_node_set *limits,Idx dst_node,Idx dst_idx,\n                      Idx src_node,Idx src_idx,re_node_set *limits_1)" ( (parameter_declaration "re_match_context_t *mctx" type_identifier (pointer_declarator "*mctx" * identifier)) , (parameter_declaration "re_node_set *limits" type_identifier (pointer_declarator "*limits" * identifier)) , (parameter_declaration "Idx dst_node" type_identifier identifier) , (parameter_declaration "Idx dst_idx" type_identifier identifier) , (parameter_declaration "Idx src_node" type_identifier identifier) , (parameter_declaration "Idx src_idx" type_identifier identifier) , (parameter_declaration "re_node_set *limits_1" type_identifier (pointer_declarator "*limits_1" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  Idx limit;\n  int iVar4;\n  Idx bkref_idx;\n  Idx bkref_idx_00;\n  int iVar5;\n  re_dfa_t *prVar6;\n  Idx subexp_idx;\n  \n  iVar3 = mctx->nbkref_ents;\n  prVar6 = mctx->dfa;\n  bkref_idx = 0;\n  iVar5 = iVar3;\n  while (bkref_idx < iVar5) {\n    iVar4 = (bkref_idx + iVar5) / 2;\n    iVar2 = mctx->bkref_ents[iVar4].str_idx;\n    while (iVar1 = iVar4, src_node <= iVar2) {\n      if (iVar1 <= bkref_idx) goto LAB_0002bd7c;\n      iVar4 = (bkref_idx + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }\n    bkref_idx = iVar1 + 1;\n  }\nLAB_0002bd7c:\n  if (bkref_idx < iVar3) {\n    if (src_node != mctx->bkref_ents[bkref_idx].str_idx) {\n      bkref_idx = -1;\n    }\n  }\n  else {\n    bkref_idx = -1;\n  }\n  bkref_idx_00 = 0;\n  iVar5 = iVar3;\n  while (bkref_idx_00 < iVar5) {\n    iVar4 = (bkref_idx_00 + iVar5) / 2;\n    iVar2 = mctx->bkref_ents[iVar4].str_idx;\n    while (iVar1 = iVar4, (int)limits_1 <= iVar2) {\n      if (iVar1 <= bkref_idx_00) goto LAB_0002be30;\n      iVar4 = (bkref_idx_00 + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }\n    bkref_idx_00 = iVar1 + 1;\n  }\nLAB_0002be30:\n  if (bkref_idx_00 < iVar3) {\n    if (limits_1 != (re_node_set *)mctx->bkref_ents[bkref_idx_00].str_idx) {\n      bkref_idx_00 = -1;\n    }\n  }\n  else {\n    bkref_idx_00 = -1;\n  }\n  if (0 < limits->alloc) {\n    iVar5 = 0;\n    do {\n      limit = *(Idx *)(*(int *)dst_node + iVar5 * 4);\n      subexp_idx = prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar3 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx);\n      iVar2 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,\n                         (Idx)limits_1,bkref_idx_00);\n      if (iVar3 != iVar2) {\n        return true;\n      }\n      iVar5 = iVar5 + 1;\n    } while (iVar5 < limits->alloc);\n  }\n  return false;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "Idx limit;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "Idx bkref_idx;" type_identifier identifier ;) (declaration "Idx bkref_idx_00;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "re_dfa_t *prVar6;" type_identifier (pointer_declarator "*prVar6" * identifier) ;) (declaration "Idx subexp_idx;" type_identifier identifier ;) (expression_statement "iVar3 = mctx->nbkref_ents;" (assignment_expression "iVar3 = mctx->nbkref_ents" identifier = (field_expression "mctx->nbkref_ents" identifier -> field_identifier)) ;) (expression_statement "prVar6 = mctx->dfa;" (assignment_expression "prVar6 = mctx->dfa" identifier = (field_expression "mctx->dfa" identifier -> field_identifier)) ;) (expression_statement "bkref_idx = 0;" (assignment_expression "bkref_idx = 0" identifier = number_literal) ;) (expression_statement "iVar5 = iVar3;" (assignment_expression "iVar5 = iVar3" identifier = identifier) ;) (while_statement "while (bkref_idx < iVar5) {\n    iVar4 = (bkref_idx + iVar5) / 2;\n    iVar2 = mctx->bkref_ents[iVar4].str_idx;\n    while (iVar1 = iVar4, src_node <= iVar2) {\n      if (iVar1 <= bkref_idx) goto LAB_0002bd7c;\n      iVar4 = (bkref_idx + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }\n    bkref_idx = iVar1 + 1;\n  }" while (parenthesized_expression "(bkref_idx < iVar5)" ( (binary_expression "bkref_idx < iVar5" identifier < identifier) )) (compound_statement "{\n    iVar4 = (bkref_idx + iVar5) / 2;\n    iVar2 = mctx->bkref_ents[iVar4].str_idx;\n    while (iVar1 = iVar4, src_node <= iVar2) {\n      if (iVar1 <= bkref_idx) goto LAB_0002bd7c;\n      iVar4 = (bkref_idx + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }\n    bkref_idx = iVar1 + 1;\n  }" { (expression_statement "iVar4 = (bkref_idx + iVar5) / 2;" (assignment_expression "iVar4 = (bkref_idx + iVar5) / 2" identifier = (binary_expression "(bkref_idx + iVar5) / 2" (parenthesized_expression "(bkref_idx + iVar5)" ( (binary_expression "bkref_idx + iVar5" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar2 = mctx->bkref_ents[iVar4].str_idx;" (assignment_expression "iVar2 = mctx->bkref_ents[iVar4].str_idx" identifier = (field_expression "mctx->bkref_ents[iVar4].str_idx" (subscript_expression "mctx->bkref_ents[iVar4]" (field_expression "mctx->bkref_ents" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (while_statement "while (iVar1 = iVar4, src_node <= iVar2) {\n      if (iVar1 <= bkref_idx) goto LAB_0002bd7c;\n      iVar4 = (bkref_idx + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }" while (parenthesized_expression "(iVar1 = iVar4, src_node <= iVar2)" ( (comma_expression "iVar1 = iVar4, src_node <= iVar2" (assignment_expression "iVar1 = iVar4" identifier = identifier) , (binary_expression "src_node <= iVar2" identifier <= identifier)) )) (compound_statement "{\n      if (iVar1 <= bkref_idx) goto LAB_0002bd7c;\n      iVar4 = (bkref_idx + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }" { (if_statement "if (iVar1 <= bkref_idx) goto LAB_0002bd7c;" if (parenthesized_expression "(iVar1 <= bkref_idx)" ( (binary_expression "iVar1 <= bkref_idx" identifier <= identifier) )) (goto_statement "goto LAB_0002bd7c;" goto statement_identifier ;)) (expression_statement "iVar4 = (bkref_idx + iVar1) / 2;" (assignment_expression "iVar4 = (bkref_idx + iVar1) / 2" identifier = (binary_expression "(bkref_idx + iVar1) / 2" (parenthesized_expression "(bkref_idx + iVar1)" ( (binary_expression "bkref_idx + iVar1" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar2 = mctx->bkref_ents[iVar4].str_idx;" (assignment_expression "iVar2 = mctx->bkref_ents[iVar4].str_idx" identifier = (field_expression "mctx->bkref_ents[iVar4].str_idx" (subscript_expression "mctx->bkref_ents[iVar4]" (field_expression "mctx->bkref_ents" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (expression_statement "iVar5 = iVar1;" (assignment_expression "iVar5 = iVar1" identifier = identifier) ;) })) (expression_statement "bkref_idx = iVar1 + 1;" (assignment_expression "bkref_idx = iVar1 + 1" identifier = (binary_expression "iVar1 + 1" identifier + number_literal)) ;) })) (labeled_statement "LAB_0002bd7c:\n  if (bkref_idx < iVar3) {\n    if (src_node != mctx->bkref_ents[bkref_idx].str_idx) {\n      bkref_idx = -1;\n    }\n  }\n  else {\n    bkref_idx = -1;\n  }" statement_identifier : (if_statement "if (bkref_idx < iVar3) {\n    if (src_node != mctx->bkref_ents[bkref_idx].str_idx) {\n      bkref_idx = -1;\n    }\n  }\n  else {\n    bkref_idx = -1;\n  }" if (parenthesized_expression "(bkref_idx < iVar3)" ( (binary_expression "bkref_idx < iVar3" identifier < identifier) )) (compound_statement "{\n    if (src_node != mctx->bkref_ents[bkref_idx].str_idx) {\n      bkref_idx = -1;\n    }\n  }" { (if_statement "if (src_node != mctx->bkref_ents[bkref_idx].str_idx) {\n      bkref_idx = -1;\n    }" if (parenthesized_expression "(src_node != mctx->bkref_ents[bkref_idx].str_idx)" ( (binary_expression "src_node != mctx->bkref_ents[bkref_idx].str_idx" identifier != (field_expression "mctx->bkref_ents[bkref_idx].str_idx" (subscript_expression "mctx->bkref_ents[bkref_idx]" (field_expression "mctx->bkref_ents" identifier -> field_identifier) [ identifier ]) . field_identifier)) )) (compound_statement "{\n      bkref_idx = -1;\n    }" { (expression_statement "bkref_idx = -1;" (assignment_expression "bkref_idx = -1" identifier = number_literal) ;) })) }) (else_clause "else {\n    bkref_idx = -1;\n  }" else (compound_statement "{\n    bkref_idx = -1;\n  }" { (expression_statement "bkref_idx = -1;" (assignment_expression "bkref_idx = -1" identifier = number_literal) ;) })))) (expression_statement "bkref_idx_00 = 0;" (assignment_expression "bkref_idx_00 = 0" identifier = number_literal) ;) (expression_statement "iVar5 = iVar3;" (assignment_expression "iVar5 = iVar3" identifier = identifier) ;) (while_statement "while (bkref_idx_00 < iVar5) {\n    iVar4 = (bkref_idx_00 + iVar5) / 2;\n    iVar2 = mctx->bkref_ents[iVar4].str_idx;\n    while (iVar1 = iVar4, (int)limits_1 <= iVar2) {\n      if (iVar1 <= bkref_idx_00) goto LAB_0002be30;\n      iVar4 = (bkref_idx_00 + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }\n    bkref_idx_00 = iVar1 + 1;\n  }" while (parenthesized_expression "(bkref_idx_00 < iVar5)" ( (binary_expression "bkref_idx_00 < iVar5" identifier < identifier) )) (compound_statement "{\n    iVar4 = (bkref_idx_00 + iVar5) / 2;\n    iVar2 = mctx->bkref_ents[iVar4].str_idx;\n    while (iVar1 = iVar4, (int)limits_1 <= iVar2) {\n      if (iVar1 <= bkref_idx_00) goto LAB_0002be30;\n      iVar4 = (bkref_idx_00 + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }\n    bkref_idx_00 = iVar1 + 1;\n  }" { (expression_statement "iVar4 = (bkref_idx_00 + iVar5) / 2;" (assignment_expression "iVar4 = (bkref_idx_00 + iVar5) / 2" identifier = (binary_expression "(bkref_idx_00 + iVar5) / 2" (parenthesized_expression "(bkref_idx_00 + iVar5)" ( (binary_expression "bkref_idx_00 + iVar5" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar2 = mctx->bkref_ents[iVar4].str_idx;" (assignment_expression "iVar2 = mctx->bkref_ents[iVar4].str_idx" identifier = (field_expression "mctx->bkref_ents[iVar4].str_idx" (subscript_expression "mctx->bkref_ents[iVar4]" (field_expression "mctx->bkref_ents" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (while_statement "while (iVar1 = iVar4, (int)limits_1 <= iVar2) {\n      if (iVar1 <= bkref_idx_00) goto LAB_0002be30;\n      iVar4 = (bkref_idx_00 + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }" while (parenthesized_expression "(iVar1 = iVar4, (int)limits_1 <= iVar2)" ( (comma_expression "iVar1 = iVar4, (int)limits_1 <= iVar2" (assignment_expression "iVar1 = iVar4" identifier = identifier) , (binary_expression "(int)limits_1 <= iVar2" (cast_expression "(int)limits_1" ( (type_descriptor "int" primitive_type) ) identifier) <= identifier)) )) (compound_statement "{\n      if (iVar1 <= bkref_idx_00) goto LAB_0002be30;\n      iVar4 = (bkref_idx_00 + iVar1) / 2;\n      iVar2 = mctx->bkref_ents[iVar4].str_idx;\n      iVar5 = iVar1;\n    }" { (if_statement "if (iVar1 <= bkref_idx_00) goto LAB_0002be30;" if (parenthesized_expression "(iVar1 <= bkref_idx_00)" ( (binary_expression "iVar1 <= bkref_idx_00" identifier <= identifier) )) (goto_statement "goto LAB_0002be30;" goto statement_identifier ;)) (expression_statement "iVar4 = (bkref_idx_00 + iVar1) / 2;" (assignment_expression "iVar4 = (bkref_idx_00 + iVar1) / 2" identifier = (binary_expression "(bkref_idx_00 + iVar1) / 2" (parenthesized_expression "(bkref_idx_00 + iVar1)" ( (binary_expression "bkref_idx_00 + iVar1" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar2 = mctx->bkref_ents[iVar4].str_idx;" (assignment_expression "iVar2 = mctx->bkref_ents[iVar4].str_idx" identifier = (field_expression "mctx->bkref_ents[iVar4].str_idx" (subscript_expression "mctx->bkref_ents[iVar4]" (field_expression "mctx->bkref_ents" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (expression_statement "iVar5 = iVar1;" (assignment_expression "iVar5 = iVar1" identifier = identifier) ;) })) (expression_statement "bkref_idx_00 = iVar1 + 1;" (assignment_expression "bkref_idx_00 = iVar1 + 1" identifier = (binary_expression "iVar1 + 1" identifier + number_literal)) ;) })) (labeled_statement "LAB_0002be30:\n  if (bkref_idx_00 < iVar3) {\n    if (limits_1 != (re_node_set *)mctx->bkref_ents[bkref_idx_00].str_idx) {\n      bkref_idx_00 = -1;\n    }\n  }\n  else {\n    bkref_idx_00 = -1;\n  }" statement_identifier : (if_statement "if (bkref_idx_00 < iVar3) {\n    if (limits_1 != (re_node_set *)mctx->bkref_ents[bkref_idx_00].str_idx) {\n      bkref_idx_00 = -1;\n    }\n  }\n  else {\n    bkref_idx_00 = -1;\n  }" if (parenthesized_expression "(bkref_idx_00 < iVar3)" ( (binary_expression "bkref_idx_00 < iVar3" identifier < identifier) )) (compound_statement "{\n    if (limits_1 != (re_node_set *)mctx->bkref_ents[bkref_idx_00].str_idx) {\n      bkref_idx_00 = -1;\n    }\n  }" { (if_statement "if (limits_1 != (re_node_set *)mctx->bkref_ents[bkref_idx_00].str_idx) {\n      bkref_idx_00 = -1;\n    }" if (parenthesized_expression "(limits_1 != (re_node_set *)mctx->bkref_ents[bkref_idx_00].str_idx)" ( (binary_expression "limits_1 != (re_node_set *)mctx->bkref_ents[bkref_idx_00].str_idx" identifier != (cast_expression "(re_node_set *)mctx->bkref_ents[bkref_idx_00].str_idx" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "mctx->bkref_ents[bkref_idx_00].str_idx" (subscript_expression "mctx->bkref_ents[bkref_idx_00]" (field_expression "mctx->bkref_ents" identifier -> field_identifier) [ identifier ]) . field_identifier))) )) (compound_statement "{\n      bkref_idx_00 = -1;\n    }" { (expression_statement "bkref_idx_00 = -1;" (assignment_expression "bkref_idx_00 = -1" identifier = number_literal) ;) })) }) (else_clause "else {\n    bkref_idx_00 = -1;\n  }" else (compound_statement "{\n    bkref_idx_00 = -1;\n  }" { (expression_statement "bkref_idx_00 = -1;" (assignment_expression "bkref_idx_00 = -1" identifier = number_literal) ;) })))) (if_statement "if (0 < limits->alloc) {\n    iVar5 = 0;\n    do {\n      limit = *(Idx *)(*(int *)dst_node + iVar5 * 4);\n      subexp_idx = prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar3 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx);\n      iVar2 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,\n                         (Idx)limits_1,bkref_idx_00);\n      if (iVar3 != iVar2) {\n        return true;\n      }\n      iVar5 = iVar5 + 1;\n    } while (iVar5 < limits->alloc);\n  }" if (parenthesized_expression "(0 < limits->alloc)" ( (binary_expression "0 < limits->alloc" number_literal < (field_expression "limits->alloc" identifier -> field_identifier)) )) (compound_statement "{\n    iVar5 = 0;\n    do {\n      limit = *(Idx *)(*(int *)dst_node + iVar5 * 4);\n      subexp_idx = prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar3 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx);\n      iVar2 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,\n                         (Idx)limits_1,bkref_idx_00);\n      if (iVar3 != iVar2) {\n        return true;\n      }\n      iVar5 = iVar5 + 1;\n    } while (iVar5 < limits->alloc);\n  }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n      limit = *(Idx *)(*(int *)dst_node + iVar5 * 4);\n      subexp_idx = prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar3 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx);\n      iVar2 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,\n                         (Idx)limits_1,bkref_idx_00);\n      if (iVar3 != iVar2) {\n        return true;\n      }\n      iVar5 = iVar5 + 1;\n    } while (iVar5 < limits->alloc);" do (compound_statement "{\n      limit = *(Idx *)(*(int *)dst_node + iVar5 * 4);\n      subexp_idx = prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar3 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx);\n      iVar2 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,\n                         (Idx)limits_1,bkref_idx_00);\n      if (iVar3 != iVar2) {\n        return true;\n      }\n      iVar5 = iVar5 + 1;\n    }" { (expression_statement "limit = *(Idx *)(*(int *)dst_node + iVar5 * 4);" (assignment_expression "limit = *(Idx *)(*(int *)dst_node + iVar5 * 4)" identifier = (pointer_expression "*(Idx *)(*(int *)dst_node + iVar5 * 4)" * (cast_expression "(Idx *)(*(int *)dst_node + iVar5 * 4)" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)dst_node + iVar5 * 4)" ( (binary_expression "*(int *)dst_node + iVar5 * 4" (pointer_expression "*(int *)dst_node" * (cast_expression "(int *)dst_node" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + (binary_expression "iVar5 * 4" identifier * number_literal)) ))))) ;) (expression_statement "subexp_idx = prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx;" (assignment_expression "subexp_idx = prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx" identifier = (field_expression "prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx" (field_expression "prVar6->nodes[mctx->bkref_ents[limit].node].opr" (subscript_expression "prVar6->nodes[mctx->bkref_ents[limit].node]" (field_expression "prVar6->nodes" identifier -> field_identifier) [ (field_expression "mctx->bkref_ents[limit].node" (subscript_expression "mctx->bkref_ents[limit]" (field_expression "mctx->bkref_ents" identifier -> field_identifier) [ identifier ]) . field_identifier) ]) . field_identifier) . field_identifier)) ;) (expression_statement "iVar3 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx);" (assignment_expression "iVar3 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx)" identifier = (call_expression "check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx)" identifier (argument_list "(mctx,limit,subexp_idx,dst_idx,src_node,bkref_idx)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar2 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,\n                         (Idx)limits_1,bkref_idx_00);" (assignment_expression "iVar2 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,\n                         (Idx)limits_1,bkref_idx_00)" identifier = (call_expression "check_dst_limits_calc_pos\n                        (mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,\n                         (Idx)limits_1,bkref_idx_00)" identifier (argument_list "(mctx,*(Idx *)(*(int *)dst_node + iVar5 * 4),subexp_idx,src_idx,\n                         (Idx)limits_1,bkref_idx_00)" ( identifier , (pointer_expression "*(Idx *)(*(int *)dst_node + iVar5 * 4)" * (cast_expression "(Idx *)(*(int *)dst_node + iVar5 * 4)" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)dst_node + iVar5 * 4)" ( (binary_expression "*(int *)dst_node + iVar5 * 4" (pointer_expression "*(int *)dst_node" * (cast_expression "(int *)dst_node" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + (binary_expression "iVar5 * 4" identifier * number_literal)) )))) , identifier , identifier , (cast_expression "(Idx)limits_1" ( (type_descriptor "Idx" type_identifier) ) identifier) , identifier )))) ;) (if_statement "if (iVar3 != iVar2) {\n        return true;\n      }" if (parenthesized_expression "(iVar3 != iVar2)" ( (binary_expression "iVar3 != iVar2" identifier != identifier) )) (compound_statement "{\n        return true;\n      }" { (return_statement "return true;" return true ;) })) (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar5 < limits->alloc)" ( (binary_expression "iVar5 < limits->alloc" identifier < (field_expression "limits->alloc" identifier -> field_identifier)) )) ;) })) (return_statement "return false;" return false ;) })))
(translation_unit "undefined4\nFUN_0002bca0(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6\n            ,int param_7)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  int *piVar8;\n  undefined4 uVar9;\n  \n  iVar3 = *(int *)(param_1 + 0x6c);\n  piVar8 = *(int **)(param_1 + 0x54);\n  iVar6 = 0;\n  iVar7 = iVar3;\n  while (iVar6 < iVar7) {\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }\nLAB_0002bd7c:\n  if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }\n  iVar2 = 0;\n  iVar7 = iVar3;\n  while (iVar2 < iVar7) {\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }\nLAB_0002be30:\n  if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }\n  if (0 < *param_2) {\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }\n  return 0;\n}\n\n" (function_definition "undefined4\nFUN_0002bca0(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6\n            ,int param_7)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  int *piVar8;\n  undefined4 uVar9;\n  \n  iVar3 = *(int *)(param_1 + 0x6c);\n  piVar8 = *(int **)(param_1 + 0x54);\n  iVar6 = 0;\n  iVar7 = iVar3;\n  while (iVar6 < iVar7) {\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }\nLAB_0002bd7c:\n  if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }\n  iVar2 = 0;\n  iVar7 = iVar3;\n  while (iVar2 < iVar7) {\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }\nLAB_0002be30:\n  if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }\n  if (0 < *param_2) {\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0002bca0(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6\n            ,int param_7)" identifier (parameter_list "(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6\n            ,int param_7)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "undefined4 param_6" type_identifier identifier) , (parameter_declaration "int param_7" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  int *piVar8;\n  undefined4 uVar9;\n  \n  iVar3 = *(int *)(param_1 + 0x6c);\n  piVar8 = *(int **)(param_1 + 0x54);\n  iVar6 = 0;\n  iVar7 = iVar3;\n  while (iVar6 < iVar7) {\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }\nLAB_0002bd7c:\n  if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }\n  iVar2 = 0;\n  iVar7 = iVar3;\n  while (iVar2 < iVar7) {\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }\nLAB_0002be30:\n  if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }\n  if (0 < *param_2) {\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "undefined4 uVar9;" type_identifier identifier ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x6c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x6c)" identifier = (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) ))))) ;) (expression_statement "piVar8 = *(int **)(param_1 + 0x54);" (assignment_expression "piVar8 = *(int **)(param_1 + 0x54)" identifier = (pointer_expression "*(int **)(param_1 + 0x54)" * (cast_expression "(int **)(param_1 + 0x54)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) ))))) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "iVar7 = iVar3;" (assignment_expression "iVar7 = iVar3" identifier = identifier) ;) (while_statement "while (iVar6 < iVar7) {\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }" while (parenthesized_expression "(iVar6 < iVar7)" ( (binary_expression "iVar6 < iVar7" identifier < identifier) )) (compound_statement "{\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }" { (expression_statement "iVar4 = (iVar6 + iVar7) / 2;" (assignment_expression "iVar4 = (iVar6 + iVar7) / 2" identifier = (binary_expression "(iVar6 + iVar7) / 2" (parenthesized_expression "(iVar6 + iVar7)" ( (binary_expression "iVar6 + iVar7" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);" (assignment_expression "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar4 * 0x14" identifier * number_literal)) + number_literal) ))))) ;) (while_statement "while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }" while (parenthesized_expression "(iVar5 = iVar4, param_5 <= iVar2)" ( (comma_expression "iVar5 = iVar4, param_5 <= iVar2" (assignment_expression "iVar5 = iVar4" identifier = identifier) , (binary_expression "param_5 <= iVar2" identifier <= identifier)) )) (compound_statement "{\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }" { (if_statement "if (iVar5 <= iVar6) goto LAB_0002bd7c;" if (parenthesized_expression "(iVar5 <= iVar6)" ( (binary_expression "iVar5 <= iVar6" identifier <= identifier) )) (goto_statement "goto LAB_0002bd7c;" goto statement_identifier ;)) (expression_statement "iVar4 = (iVar6 + iVar5) / 2;" (assignment_expression "iVar4 = (iVar6 + iVar5) / 2" identifier = (binary_expression "(iVar6 + iVar5) / 2" (parenthesized_expression "(iVar6 + iVar5)" ( (binary_expression "iVar6 + iVar5" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);" (assignment_expression "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar4 * 0x14" identifier * number_literal)) + number_literal) ))))) ;) (expression_statement "iVar7 = iVar5;" (assignment_expression "iVar7 = iVar5" identifier = identifier) ;) })) (expression_statement "iVar6 = iVar5 + 1;" (assignment_expression "iVar6 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) })) (labeled_statement "LAB_0002bd7c:\n  if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }" statement_identifier : (if_statement "if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }" if (parenthesized_expression "(iVar6 < iVar3)" ( (binary_expression "iVar6 < iVar3" identifier < identifier) )) (compound_statement "{\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }" { (if_statement "if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }" if (parenthesized_expression "(param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4))" ( (binary_expression "param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" identifier != (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar6 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar6 * 0x14" identifier * number_literal)) + number_literal) ))))) )) (compound_statement "{\n      iVar6 = -1;\n    }" { (expression_statement "iVar6 = -1;" (assignment_expression "iVar6 = -1" identifier = number_literal) ;) })) }) (else_clause "else {\n    iVar6 = -1;\n  }" else (compound_statement "{\n    iVar6 = -1;\n  }" { (expression_statement "iVar6 = -1;" (assignment_expression "iVar6 = -1" identifier = number_literal) ;) })))) (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (expression_statement "iVar7 = iVar3;" (assignment_expression "iVar7 = iVar3" identifier = identifier) ;) (while_statement "while (iVar2 < iVar7) {\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }" while (parenthesized_expression "(iVar2 < iVar7)" ( (binary_expression "iVar2 < iVar7" identifier < identifier) )) (compound_statement "{\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }" { (expression_statement "iVar5 = (iVar2 + iVar7) / 2;" (assignment_expression "iVar5 = (iVar2 + iVar7) / 2" identifier = (binary_expression "(iVar2 + iVar7) / 2" (parenthesized_expression "(iVar2 + iVar7)" ( (binary_expression "iVar2 + iVar7" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);" (assignment_expression "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar5 * 0x14" identifier * number_literal)) + number_literal) ))))) ;) (while_statement "while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }" while (parenthesized_expression "(iVar1 = iVar5, param_7 <= iVar4)" ( (comma_expression "iVar1 = iVar5, param_7 <= iVar4" (assignment_expression "iVar1 = iVar5" identifier = identifier) , (binary_expression "param_7 <= iVar4" identifier <= identifier)) )) (compound_statement "{\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }" { (if_statement "if (iVar1 <= iVar2) goto LAB_0002be30;" if (parenthesized_expression "(iVar1 <= iVar2)" ( (binary_expression "iVar1 <= iVar2" identifier <= identifier) )) (goto_statement "goto LAB_0002be30;" goto statement_identifier ;)) (expression_statement "iVar5 = (iVar2 + iVar1) / 2;" (assignment_expression "iVar5 = (iVar2 + iVar1) / 2" identifier = (binary_expression "(iVar2 + iVar1) / 2" (parenthesized_expression "(iVar2 + iVar1)" ( (binary_expression "iVar2 + iVar1" identifier + identifier) )) / number_literal)) ;) (expression_statement "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);" (assignment_expression "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar5 * 0x14" identifier * number_literal)) + number_literal) ))))) ;) (expression_statement "iVar7 = iVar1;" (assignment_expression "iVar7 = iVar1" identifier = identifier) ;) })) (expression_statement "iVar2 = iVar1 + 1;" (assignment_expression "iVar2 = iVar1 + 1" identifier = (binary_expression "iVar1 + 1" identifier + number_literal)) ;) })) (labeled_statement "LAB_0002be30:\n  if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }" statement_identifier : (if_statement "if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }" if (parenthesized_expression "(iVar2 < iVar3)" ( (binary_expression "iVar2 < iVar3" identifier < identifier) )) (compound_statement "{\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }" { (if_statement "if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }" if (parenthesized_expression "(param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4))" ( (binary_expression "param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" identifier != (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar2 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar2 * 0x14" identifier * number_literal)) + number_literal) ))))) )) (compound_statement "{\n      iVar2 = -1;\n    }" { (expression_statement "iVar2 = -1;" (assignment_expression "iVar2 = -1" identifier = number_literal) ;) })) }) (else_clause "else {\n    iVar2 = -1;\n  }" else (compound_statement "{\n    iVar2 = -1;\n  }" { (expression_statement "iVar2 = -1;" (assignment_expression "iVar2 = -1" identifier = number_literal) ;) })))) (if_statement "if (0 < *param_2) {\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }" if (parenthesized_expression "(0 < *param_2)" ( (binary_expression "0 < *param_2" number_literal < (pointer_expression "*param_2" * identifier)) )) (compound_statement "{\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);" do (compound_statement "{\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    }" { (expression_statement "iVar3 = *(int *)(*param_3 + iVar7 * 4);" (assignment_expression "iVar3 = *(int *)(*param_3 + iVar7 * 4)" identifier = (pointer_expression "*(int *)(*param_3 + iVar7 * 4)" * (cast_expression "(int *)(*param_3 + iVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + iVar7 * 4)" ( (binary_expression "*param_3 + iVar7 * 4" (pointer_expression "*param_3" * identifier) + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);" (assignment_expression "uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" identifier = (pointer_expression "*(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" * (cast_expression "(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" ( (binary_expression "*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8" (pointer_expression "*piVar8" * identifier) + (binary_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar3 * 0x14)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar3 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar3 * 0x14" identifier * number_literal)) )))) * number_literal)) ))))) ;) (expression_statement "iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);" (assignment_expression "iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6)" identifier = (call_expression "FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6)" identifier (argument_list "(param_1,iVar3,uVar9,param_4,param_5,iVar6)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );" (assignment_expression "iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          )" identifier = (call_expression "FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          )" identifier (argument_list "(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          )" ( identifier , (pointer_expression "*(undefined4 *)(*param_3 + iVar7 * 4)" * (cast_expression "(undefined4 *)(*param_3 + iVar7 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + iVar7 * 4)" ( (binary_expression "*param_3 + iVar7 * 4" (pointer_expression "*param_3" * identifier) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 != iVar4) {\n        return 1;\n      }" if (parenthesized_expression "(iVar3 != iVar4)" ( (binary_expression "iVar3 != iVar4" identifier != identifier) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 < *param_2)" ( (binary_expression "iVar7 < *param_2" identifier < (pointer_expression "*param_2" * identifier)) )) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) / LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) ))))) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT <= IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) / LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })))) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) / LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) ))))) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT <= IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) / LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })))) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression IDENT * LIT)) )))) , IDENT , IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * IDENT)) )) ;) })) (return_statement return LIT ;) })))
(function_definition "undefined4\nFUN_0002bca0(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6\n            ,int param_7)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  int *piVar8;\n  undefined4 uVar9;\n  \n  iVar3 = *(int *)(param_1 + 0x6c);\n  piVar8 = *(int **)(param_1 + 0x54);\n  iVar6 = 0;\n  iVar7 = iVar3;\n  while (iVar6 < iVar7) {\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }\nLAB_0002bd7c:\n  if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }\n  iVar2 = 0;\n  iVar7 = iVar3;\n  while (iVar2 < iVar7) {\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }\nLAB_0002be30:\n  if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }\n  if (0 < *param_2) {\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }\n  return 0;\n}" (type_identifier "undefined4") (function_declarator "FUN_0002bca0(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6\n            ,int param_7)" (identifier "FUN_0002bca0") (parameter_list "(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5,undefined4 param_6\n            ,int param_7)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) (, ",") (parameter_declaration "undefined4 param_6" (type_identifier "undefined4") (identifier "param_6")) (, ",") (parameter_declaration "int param_7" (primitive_type "int") (identifier "param_7")) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  int *piVar8;\n  undefined4 uVar9;\n  \n  iVar3 = *(int *)(param_1 + 0x6c);\n  piVar8 = *(int **)(param_1 + 0x54);\n  iVar6 = 0;\n  iVar7 = iVar3;\n  while (iVar6 < iVar7) {\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }\nLAB_0002bd7c:\n  if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }\n  iVar2 = 0;\n  iVar7 = iVar3;\n  while (iVar2 < iVar7) {\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }\nLAB_0002be30:\n  if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }\n  if (0 < *param_2) {\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }\n  return 0;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int *piVar8;" (primitive_type "int") (pointer_declarator "*piVar8" (* "*") (identifier "piVar8")) (; ";")) (declaration "undefined4 uVar9;" (type_identifier "undefined4") (identifier "uVar9") (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x6c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x6c)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x6c)" (* "*") (cast_expression "(int *)(param_1 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x6c)" (( "(") (binary_expression "param_1 + 0x6c" (identifier "param_1") (+ "+") (number_literal "0x6c")) () ")"))))) (; ";")) (expression_statement "piVar8 = *(int **)(param_1 + 0x54);" (assignment_expression "piVar8 = *(int **)(param_1 + 0x54)" (identifier "piVar8") (= "=") (pointer_expression "*(int **)(param_1 + 0x54)" (* "*") (cast_expression "(int **)(param_1 + 0x54)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")"))))) (; ";")) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar7 = iVar3;" (assignment_expression "iVar7 = iVar3" (identifier "iVar7") (= "=") (identifier "iVar3")) (; ";")) (while_statement "while (iVar6 < iVar7) {\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }" (while "while") (parenthesized_expression "(iVar6 < iVar7)" (( "(") (binary_expression "iVar6 < iVar7" (identifier "iVar6") (< "<") (identifier "iVar7")) () ")")) (compound_statement "{\n    iVar4 = (iVar6 + iVar7) / 2;\n    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n    while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }\n    iVar6 = iVar5 + 1;\n  }" ({ "{") (expression_statement "iVar4 = (iVar6 + iVar7) / 2;" (assignment_expression "iVar4 = (iVar6 + iVar7) / 2" (identifier "iVar4") (= "=") (binary_expression "(iVar6 + iVar7) / 2" (parenthesized_expression "(iVar6 + iVar7)" (( "(") (binary_expression "iVar6 + iVar7" (identifier "iVar6") (+ "+") (identifier "iVar7")) () ")")) (/ "/") (number_literal "2"))) (; ";")) (expression_statement "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);" (assignment_expression "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" (* "*") (cast_expression "(int *)(param_1 + 0x74)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")")))) (+ "+") (binary_expression "iVar4 * 0x14" (identifier "iVar4") (* "*") (number_literal "0x14"))) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (while_statement "while (iVar5 = iVar4, param_5 <= iVar2) {\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }" (while "while") (parenthesized_expression "(iVar5 = iVar4, param_5 <= iVar2)" (( "(") (comma_expression "iVar5 = iVar4, param_5 <= iVar2" (assignment_expression "iVar5 = iVar4" (identifier "iVar5") (= "=") (identifier "iVar4")) (, ",") (binary_expression "param_5 <= iVar2" (identifier "param_5") (<= "<=") (identifier "iVar2"))) () ")")) (compound_statement "{\n      if (iVar5 <= iVar6) goto LAB_0002bd7c;\n      iVar4 = (iVar6 + iVar5) / 2;\n      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);\n      iVar7 = iVar5;\n    }" ({ "{") (if_statement "if (iVar5 <= iVar6) goto LAB_0002bd7c;" (if "if") (parenthesized_expression "(iVar5 <= iVar6)" (( "(") (binary_expression "iVar5 <= iVar6" (identifier "iVar5") (<= "<=") (identifier "iVar6")) () ")")) (goto_statement "goto LAB_0002bd7c;" (goto "goto") (statement_identifier "LAB_0002bd7c") (; ";"))) (expression_statement "iVar4 = (iVar6 + iVar5) / 2;" (assignment_expression "iVar4 = (iVar6 + iVar5) / 2" (identifier "iVar4") (= "=") (binary_expression "(iVar6 + iVar5) / 2" (parenthesized_expression "(iVar6 + iVar5)" (( "(") (binary_expression "iVar6 + iVar5" (identifier "iVar6") (+ "+") (identifier "iVar5")) () ")")) (/ "/") (number_literal "2"))) (; ";")) (expression_statement "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);" (assignment_expression "iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" (* "*") (cast_expression "(int *)(param_1 + 0x74)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")")))) (+ "+") (binary_expression "iVar4 * 0x14" (identifier "iVar4") (* "*") (number_literal "0x14"))) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "iVar7 = iVar5;" (assignment_expression "iVar7 = iVar5" (identifier "iVar7") (= "=") (identifier "iVar5")) (; ";")) (} "}"))) (expression_statement "iVar6 = iVar5 + 1;" (assignment_expression "iVar6 = iVar5 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar5 + 1" (identifier "iVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (labeled_statement "LAB_0002bd7c:\n  if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }" (statement_identifier "LAB_0002bd7c") (: ":") (if_statement "if (iVar6 < iVar3) {\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }\n  else {\n    iVar6 = -1;\n  }" (if "if") (parenthesized_expression "(iVar6 < iVar3)" (( "(") (binary_expression "iVar6 < iVar3" (identifier "iVar6") (< "<") (identifier "iVar3")) () ")")) (compound_statement "{\n    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }\n  }" ({ "{") (if_statement "if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {\n      iVar6 = -1;\n    }" (if "if") (parenthesized_expression "(param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4))" (( "(") (binary_expression "param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" (identifier "param_5") (!= "!=") (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar6 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" (* "*") (cast_expression "(int *)(param_1 + 0x74)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")")))) (+ "+") (binary_expression "iVar6 * 0x14" (identifier "iVar6") (* "*") (number_literal "0x14"))) (+ "+") (number_literal "4")) () ")"))))) () ")")) (compound_statement "{\n      iVar6 = -1;\n    }" ({ "{") (expression_statement "iVar6 = -1;" (assignment_expression "iVar6 = -1" (identifier "iVar6") (= "=") (number_literal "-1")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    iVar6 = -1;\n  }" (else "else") (compound_statement "{\n    iVar6 = -1;\n  }" ({ "{") (expression_statement "iVar6 = -1;" (assignment_expression "iVar6 = -1" (identifier "iVar6") (= "=") (number_literal "-1")) (; ";")) (} "}"))))) (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" (identifier "iVar2") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar7 = iVar3;" (assignment_expression "iVar7 = iVar3" (identifier "iVar7") (= "=") (identifier "iVar3")) (; ";")) (while_statement "while (iVar2 < iVar7) {\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }" (while "while") (parenthesized_expression "(iVar2 < iVar7)" (( "(") (binary_expression "iVar2 < iVar7" (identifier "iVar2") (< "<") (identifier "iVar7")) () ")")) (compound_statement "{\n    iVar5 = (iVar2 + iVar7) / 2;\n    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n    while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }\n    iVar2 = iVar1 + 1;\n  }" ({ "{") (expression_statement "iVar5 = (iVar2 + iVar7) / 2;" (assignment_expression "iVar5 = (iVar2 + iVar7) / 2" (identifier "iVar5") (= "=") (binary_expression "(iVar2 + iVar7) / 2" (parenthesized_expression "(iVar2 + iVar7)" (( "(") (binary_expression "iVar2 + iVar7" (identifier "iVar2") (+ "+") (identifier "iVar7")) () ")")) (/ "/") (number_literal "2"))) (; ";")) (expression_statement "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);" (assignment_expression "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" (* "*") (cast_expression "(int *)(param_1 + 0x74)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")")))) (+ "+") (binary_expression "iVar5 * 0x14" (identifier "iVar5") (* "*") (number_literal "0x14"))) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (while_statement "while (iVar1 = iVar5, param_7 <= iVar4) {\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }" (while "while") (parenthesized_expression "(iVar1 = iVar5, param_7 <= iVar4)" (( "(") (comma_expression "iVar1 = iVar5, param_7 <= iVar4" (assignment_expression "iVar1 = iVar5" (identifier "iVar1") (= "=") (identifier "iVar5")) (, ",") (binary_expression "param_7 <= iVar4" (identifier "param_7") (<= "<=") (identifier "iVar4"))) () ")")) (compound_statement "{\n      if (iVar1 <= iVar2) goto LAB_0002be30;\n      iVar5 = (iVar2 + iVar1) / 2;\n      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);\n      iVar7 = iVar1;\n    }" ({ "{") (if_statement "if (iVar1 <= iVar2) goto LAB_0002be30;" (if "if") (parenthesized_expression "(iVar1 <= iVar2)" (( "(") (binary_expression "iVar1 <= iVar2" (identifier "iVar1") (<= "<=") (identifier "iVar2")) () ")")) (goto_statement "goto LAB_0002be30;" (goto "goto") (statement_identifier "LAB_0002be30") (; ";"))) (expression_statement "iVar5 = (iVar2 + iVar1) / 2;" (assignment_expression "iVar5 = (iVar2 + iVar1) / 2" (identifier "iVar5") (= "=") (binary_expression "(iVar2 + iVar1) / 2" (parenthesized_expression "(iVar2 + iVar1)" (( "(") (binary_expression "iVar2 + iVar1" (identifier "iVar2") (+ "+") (identifier "iVar1")) () ")")) (/ "/") (number_literal "2"))) (; ";")) (expression_statement "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);" (assignment_expression "iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar5 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" (* "*") (cast_expression "(int *)(param_1 + 0x74)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")")))) (+ "+") (binary_expression "iVar5 * 0x14" (identifier "iVar5") (* "*") (number_literal "0x14"))) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "iVar7 = iVar1;" (assignment_expression "iVar7 = iVar1" (identifier "iVar7") (= "=") (identifier "iVar1")) (; ";")) (} "}"))) (expression_statement "iVar2 = iVar1 + 1;" (assignment_expression "iVar2 = iVar1 + 1" (identifier "iVar2") (= "=") (binary_expression "iVar1 + 1" (identifier "iVar1") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (labeled_statement "LAB_0002be30:\n  if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }" (statement_identifier "LAB_0002be30") (: ":") (if_statement "if (iVar2 < iVar3) {\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }\n  else {\n    iVar2 = -1;\n  }" (if "if") (parenthesized_expression "(iVar2 < iVar3)" (( "(") (binary_expression "iVar2 < iVar3" (identifier "iVar2") (< "<") (identifier "iVar3")) () ")")) (compound_statement "{\n    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }\n  }" ({ "{") (if_statement "if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {\n      iVar2 = -1;\n    }" (if "if") (parenthesized_expression "(param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4))" (( "(") (binary_expression "param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" (identifier "param_7") (!= "!=") (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4" (binary_expression "*(int *)(param_1 + 0x74) + iVar2 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" (* "*") (cast_expression "(int *)(param_1 + 0x74)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")")))) (+ "+") (binary_expression "iVar2 * 0x14" (identifier "iVar2") (* "*") (number_literal "0x14"))) (+ "+") (number_literal "4")) () ")"))))) () ")")) (compound_statement "{\n      iVar2 = -1;\n    }" ({ "{") (expression_statement "iVar2 = -1;" (assignment_expression "iVar2 = -1" (identifier "iVar2") (= "=") (number_literal "-1")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    iVar2 = -1;\n  }" (else "else") (compound_statement "{\n    iVar2 = -1;\n  }" ({ "{") (expression_statement "iVar2 = -1;" (assignment_expression "iVar2 = -1" (identifier "iVar2") (= "=") (number_literal "-1")) (; ";")) (} "}"))))) (if_statement "if (0 < *param_2) {\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }" (if "if") (parenthesized_expression "(0 < *param_2)" (( "(") (binary_expression "0 < *param_2" (number_literal "0") (< "<") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")")) (compound_statement "{\n    iVar7 = 0;\n    do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);\n  }" ({ "{") (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    } while (iVar7 < *param_2);" (do "do") (compound_statement "{\n      iVar3 = *(int *)(*param_3 + iVar7 * 4);\n      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);\n      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);\n      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );\n      if (iVar3 != iVar4) {\n        return 1;\n      }\n      iVar7 = iVar7 + 1;\n    }" ({ "{") (expression_statement "iVar3 = *(int *)(*param_3 + iVar7 * 4);" (assignment_expression "iVar3 = *(int *)(*param_3 + iVar7 * 4)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(*param_3 + iVar7 * 4)" (* "*") (cast_expression "(int *)(*param_3 + iVar7 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_3 + iVar7 * 4)" (( "(") (binary_expression "*param_3 + iVar7 * 4" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);" (assignment_expression "uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" (identifier "uVar9") (= "=") (pointer_expression "*(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" (* "*") (cast_expression "(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8)" (( "(") (binary_expression "*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8" (pointer_expression "*piVar8" (* "*") (identifier "piVar8")) (+ "+") (binary_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar3 * 0x14)" (( "(") (binary_expression "*(int *)(param_1 + 0x74) + iVar3 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" (* "*") (cast_expression "(int *)(param_1 + 0x74)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")")))) (+ "+") (binary_expression "iVar3 * 0x14" (identifier "iVar3") (* "*") (number_literal "0x14"))) () ")")))) (* "*") (number_literal "8"))) () ")"))))) (; ";")) (expression_statement "iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);" (assignment_expression "iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6)" (identifier "iVar3") (= "=") (call_expression "FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6)" (identifier "FUN_000298b8") (argument_list "(param_1,iVar3,uVar9,param_4,param_5,iVar6)" (( "(") (identifier "param_1") (, ",") (identifier "iVar3") (, ",") (identifier "uVar9") (, ",") (identifier "param_4") (, ",") (identifier "param_5") (, ",") (identifier "iVar6") () ")")))) (; ";")) (expression_statement "iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          );" (assignment_expression "iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          )" (identifier "iVar4") (= "=") (call_expression "FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          )" (identifier "FUN_000298b8") (argument_list "(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2\n                          )" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(*param_3 + iVar7 * 4)" (* "*") (cast_expression "(undefined4 *)(*param_3 + iVar7 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_3 + iVar7 * 4)" (( "(") (binary_expression "*param_3 + iVar7 * 4" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (, ",") (identifier "uVar9") (, ",") (identifier "param_6") (, ",") (identifier "param_7") (, ",") (identifier "iVar2") () ")")))) (; ";")) (if_statement "if (iVar3 != iVar4) {\n        return 1;\n      }" (if "if") (parenthesized_expression "(iVar3 != iVar4)" (( "(") (binary_expression "iVar3 != iVar4" (identifier "iVar3") (!= "!=") (identifier "iVar4")) () ")")) (compound_statement "{\n        return 1;\n      }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 < *param_2)" (( "(") (binary_expression "iVar7 < *param_2" (identifier "iVar7") (< "<") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")")) (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* DWARF original prototype: _Bool check_dst_limits(re_match_context_t * mctx, re_node_set * limits,
   Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx, re_node_set * limits) */

type_1 function_1(type_2 *mctx,type_3 *limits,type_4 dst_node,type_4 dst_idx,
                      type_4 var_3,type_4 src_idx,type_3 *var_8)

{
  int var_5;
  int var_4;
  int var_6;
  type_4 limit;
  int iVar4;
  type_4 var_1;
  type_4 var_7;
  int var_2;
  type_5 *prVar6;
  type_4 subexp_idx;
  
  var_6 = mctx->nbkref_ents;
  prVar6 = mctx->dfa;
  var_1 = 0;
  var_2 = var_6;
  while (var_1 < var_2) {
    iVar4 = (var_1 + var_2) / 2;
    var_4 = mctx->bkref_ents[iVar4].str_idx;
    while (var_5 = iVar4, var_3 <= var_4) {
      if (var_5 <= var_1) goto LAB_0002bd7c;
      iVar4 = (var_1 + var_5) / 2;
      var_4 = mctx->bkref_ents[iVar4].str_idx;
      var_2 = var_5;
    }
    var_1 = var_5 + 1;
  }
LAB_0002bd7c:
  if (var_1 < var_6) {
    if (var_3 != mctx->bkref_ents[var_1].str_idx) {
      var_1 = -1;
    }
  }
  else {
    var_1 = -1;
  }
  var_7 = 0;
  var_2 = var_6;
  while (var_7 < var_2) {
    iVar4 = (var_7 + var_2) / 2;
    var_4 = mctx->bkref_ents[iVar4].str_idx;
    while (var_5 = iVar4, (int)var_8 <= var_4) {
      if (var_5 <= var_7) goto LAB_0002be30;
      iVar4 = (var_7 + var_5) / 2;
      var_4 = mctx->bkref_ents[iVar4].str_idx;
      var_2 = var_5;
    }
    var_7 = var_5 + 1;
  }
LAB_0002be30:
  if (var_7 < var_6) {
    if (var_8 != (type_3 *)mctx->bkref_ents[var_7].str_idx) {
      var_7 = -1;
    }
  }
  else {
    var_7 = -1;
  }
  if (0 < limits->alloc) {
    var_2 = 0;
    do {
      limit = *(type_4 *)(*(int *)dst_node + var_2 * 4);
      subexp_idx = prVar6->nodes[mctx->bkref_ents[limit].node].opr.idx;
      var_6 = var_9(mctx,limit,subexp_idx,dst_idx,var_3,var_1);
      var_4 = var_9
                        (mctx,*(type_4 *)(*(int *)dst_node + var_2 * 4),subexp_idx,src_idx,
                         (type_4)var_8,var_7);
      if (var_6 != var_4) {
        return true;
      }
      var_2 = var_2 + 1;
    } while (var_2 < limits->alloc);
  }
  return false;
}


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

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

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int *piVar8;
  undefined4 uVar9;
  
  iVar3 = *(int *)(param_1 + 0x6c);
  piVar8 = *(int **)(param_1 + 0x54);
  iVar6 = 0;
  iVar7 = iVar3;
  while (iVar6 < iVar7) {
    iVar4 = (iVar6 + iVar7) / 2;
    iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);
    while (iVar5 = iVar4, param_5 <= iVar2) {
      if (iVar5 <= iVar6) goto LAB_0002bd7c;
      iVar4 = (iVar6 + iVar5) / 2;
      iVar2 = *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14 + 4);
      iVar7 = iVar5;
    }
    iVar6 = iVar5 + 1;
  }
LAB_0002bd7c:
  if (iVar6 < iVar3) {
    if (param_5 != *(int *)(*(int *)(param_1 + 0x74) + iVar6 * 0x14 + 4)) {
      iVar6 = -1;
    }
  }
  else {
    iVar6 = -1;
  }
  iVar2 = 0;
  iVar7 = iVar3;
  while (iVar2 < iVar7) {
    iVar5 = (iVar2 + iVar7) / 2;
    iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);
    while (iVar1 = iVar5, param_7 <= iVar4) {
      if (iVar1 <= iVar2) goto LAB_0002be30;
      iVar5 = (iVar2 + iVar1) / 2;
      iVar4 = *(int *)(*(int *)(param_1 + 0x74) + iVar5 * 0x14 + 4);
      iVar7 = iVar1;
    }
    iVar2 = iVar1 + 1;
  }
LAB_0002be30:
  if (iVar2 < iVar3) {
    if (param_7 != *(int *)(*(int *)(param_1 + 0x74) + iVar2 * 0x14 + 4)) {
      iVar2 = -1;
    }
  }
  else {
    iVar2 = -1;
  }
  if (0 < *param_2) {
    iVar7 = 0;
    do {
      iVar3 = *(int *)(*param_3 + iVar7 * 4);
      uVar9 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar3 * 0x14) * 8);
      iVar3 = FUN_000298b8(param_1,iVar3,uVar9,param_4,param_5,iVar6);
      iVar4 = FUN_000298b8(param_1,*(undefined4 *)(*param_3 + iVar7 * 4),uVar9,param_6,param_7,iVar2
                          );
      if (iVar3 != iVar4) {
        return 1;
      }
      iVar7 = iVar7 + 1;
    } while (iVar7 < *param_2);
  }
  return 0;
}

