
int d_demangle_callback(char *mangled,int options,demangle_callbackref callback,void *opaque)

{
  char *pcVar1;
  char cVar2;
  long lVar3;
  demangle_callbackref callback_00;
  demangle_component **ppdVar4;
  int iVar5;
  size_t sVar6;
  demangle_component *pdVar7;
  long lVar8;
  byte *pbVar9;
  byte *pbVar10;
  byte bVar11;
  bool bVar12;
  bool bVar13;
  demangle_component *pdStack_c0;
  ulong local_b8;
  undefined1 uStack_b1;
  demangle_component *local_b0;
  char *local_a8;
  demangle_callbackref local_a0;
  d_info di;
  
  bVar12 = (byte)*mangled < 0x5f;
  bVar13 = *mangled == 0x5f;
  if (bVar13) {
    bVar12 = (byte)mangled[1] < 0x5a;
    bVar13 = mangled[1] == 0x5a;
    if (!bVar13) goto LAB_002d29d5;
    bVar11 = 1;
  }
  else {
LAB_002d29d5:
    lVar8 = 8;
    pbVar9 = (byte *)mangled;
    pbVar10 = (byte *)"_GLOBAL_";
    do {
      if (lVar8 == 0) break;
      lVar8 = lVar8 + -1;
      bVar12 = *pbVar9 < *pbVar10;
      bVar13 = *pbVar9 == *pbVar10;
      pbVar9 = pbVar9 + 1;
      pbVar10 = pbVar10 + 1;
    } while (bVar13);
    if (((((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&
        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)) &&
       (((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_')))) {
      bVar11 = (cVar2 != 'I') + 2;
    }
    else {
      if ((options & 0x10U) == 0) {
        return 0;
      }
      bVar11 = 0;
    }
  }
  pdStack_c0 = (demangle_component *)0x2d2a13;
  local_a0 = callback;
  sVar6 = strlen(mangled);
  di.send = mangled + sVar6;
  di.num_subs = (int)sVar6;
  di.num_comps = di.num_subs * 2;
  lVar8 = (long)di.num_comps * -0x18;
  lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);
  di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);
  di.next_comp = 0;
  di.next_sub = 0;
  di.comps = (demangle_component *)(((ulong)(&uStack_b1 + lVar8) >> 3) * 8);
  di.last_name = (demangle_component *)0x0;
  di.expansion = 0;
  di.is_expression = 0;
  di.is_conversion = 0;
  di.s = mangled;
  di.options = options;
  di.n = mangled;
  if (bVar11 == 1) {
    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);
    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c41;
    pdVar7 = cplus_demangle_mangled_name(&di,1);
    callback_00 = local_a0;
    goto joined_r0x002d2c0a;
  }
  if ((bVar11 == 0) || (3 < bVar11)) {
    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);
    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c04;
    pdVar7 = cplus_demangle_type(&di);
    callback_00 = local_a0;
    goto joined_r0x002d2c0a;
  }
  pcVar1 = mangled + 0xb;
  if ((mangled[0xb] == '_') && (mangled[0xc] == 'Z')) {
    di.n = mangled + 0xd;
    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);
    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c8c;
    pdVar7 = d_encoding(&di,0);
  }
  else {
    di.n = pcVar1;
    ppdVar4 = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);
    if (0 < di.num_comps) {
      local_b8 = (ulong)(&uStack_b1 + lVar8) >> 3;
      local_b0 = di.comps;
      local_a8 = pcVar1;
      *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2ae7;
      sVar6 = strlen(pcVar1);
      di.next_comp = 1;
      *(undefined4 *)(local_b8 * 8 + 4) = 0;
      ppdVar4 = di.subs;
      if ((int)sVar6 != 0) {
        *(char **)(local_b8 * 8 + 8) = local_a8;
        *(undefined4 *)(local_b8 * 8) = 0;
        *(int *)(local_b8 * 8 + 0x10) = (int)sVar6;
        pdVar7 = local_b0;
        goto LAB_002d2b37;
      }
    }
    di.subs = ppdVar4;
    pdVar7 = (demangle_component *)0x0;
  }
LAB_002d2b37:
  *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b4e;
  pdVar7 = d_make_comp(&di,(bVar11 != 2) + DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,pdVar7,
                       (demangle_component *)0x0);
  pcVar1 = di.n;
  *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b5d;
  sVar6 = strlen(pcVar1);
  di.n = pcVar1 + sVar6;
  callback_00 = local_a0;
joined_r0x002d2c0a:
  if ((((options & 1U) == 0) || (iVar5 = 0, *di.n == '\0')) &&
     (iVar5 = 0, pdVar7 != (demangle_component *)0x0)) {
    local_a0 = callback_00;
    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b89;
    iVar5 = cplus_demangle_print_callback(options,pdVar7,callback_00,opaque);
  }
  return iVar5;
}



ulong FUN_002d29b0(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)

{
  long lVar1;
  undefined8 uVar2;
  undefined1 *puVar3;
  size_t sVar4;
  long lVar5;
  long lVar6;
  byte *pbVar7;
  ulong uVar8;
  byte *pbVar9;
  byte bVar10;
  bool bVar11;
  bool bVar12;
  undefined8 uStack_c0;
  undefined8 local_b8;
  long local_b0;
  byte *local_a8;
  undefined8 local_a0;
  byte *local_98;
  byte *local_90;
  uint local_88;
  byte *local_80;
  long local_78;
  undefined4 local_70;
  int local_6c;
  undefined1 *local_68;
  undefined4 local_60;
  int local_5c;
  undefined8 local_58;
  undefined8 local_50;
  undefined4 local_48;
  
  bVar11 = *param_1 < 0x5f;
  bVar12 = *param_1 == 0x5f;
  if (bVar12) {
    bVar11 = param_1[1] < 0x5a;
    bVar12 = param_1[1] == 0x5a;
    if (!bVar12) goto LAB_002d29d5;
    bVar10 = 1;
  }
  else {
LAB_002d29d5:
    lVar6 = 8;
    pbVar7 = param_1;
    pbVar9 = (byte *)"_GLOBAL_";
    do {
      if (lVar6 == 0) break;
      lVar6 = lVar6 + -1;
      bVar11 = *pbVar7 < *pbVar9;
      bVar12 = *pbVar7 == *pbVar9;
      pbVar7 = pbVar7 + 1;
      pbVar9 = pbVar9 + 1;
    } while (bVar12);
    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&
        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&
       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {
      bVar10 = (bVar10 != 0x49) + 2;
    }
    else {
      if ((param_2 & 0x10) == 0) {
        return (ulong)(param_2 & 0x10);
      }
      bVar10 = 0;
    }
  }
  uStack_c0 = 0x2d2a13;
  local_a0 = param_3;
  sVar4 = strlen((char *)param_1);
  local_90 = param_1 + sVar4;
  local_5c = (int)sVar4;
  local_6c = local_5c * 2;
  lVar6 = (long)local_6c * -0x18;
  lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);
  local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);
  local_70 = 0;
  uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;
  local_60 = 0;
  local_78 = uVar8 * 8;
  local_58 = 0;
  local_50 = 0;
  local_48 = 0;
  local_98 = param_1;
  local_88 = param_2;
  local_80 = param_1;
  if (bVar10 == 1) {
    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);
    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;
    lVar5 = FUN_002d1990(&local_98,1);
    uVar2 = local_a0;
    goto joined_r0x002d2c0a;
  }
  if ((bVar10 == 0) || (3 < bVar10)) {
    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);
    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;
    lVar5 = FUN_002cfad0(&local_98);
    uVar2 = local_a0;
    goto joined_r0x002d2c0a;
  }
  pbVar7 = param_1 + 0xb;
  if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {
    local_80 = param_1 + 0xd;
    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);
    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;
    lVar5 = FUN_002d12a0(&local_98,0);
  }
  else {
    local_80 = pbVar7;
    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);
    if (0 < local_6c) {
      local_b8 = uVar8;
      local_b0 = local_78;
      local_a8 = pbVar7;
      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;
      sVar4 = strlen((char *)pbVar7);
      local_70 = 1;
      *(undefined4 *)(local_b8 * 8 + 4) = 0;
      puVar3 = local_68;
      if ((int)sVar4 != 0) {
        *(byte **)(local_b8 * 8 + 8) = local_a8;
        *(undefined4 *)(local_b8 * 8) = 0;
        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;
        lVar5 = local_b0;
        goto LAB_002d2b37;
      }
    }
    local_68 = puVar3;
    lVar5 = 0;
  }
LAB_002d2b37:
  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;
  lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);
  pbVar7 = local_80;
  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;
  sVar4 = strlen((char *)pbVar7);
  local_80 = pbVar7 + sVar4;
  uVar2 = local_a0;
joined_r0x002d2c0a:
  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {
    local_a0 = uVar2;
    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;
    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);
  }
  return uVar8;
}


PUSH RBP
MOV RBP,RSP
PUSH R15
MOV R15,RDI
PUSH R14
PUSH R13
MOV R13,RCX
PUSH R12
PUSH RBX
MOV EBX,ESI
SUB RSP,0x88
CMP byte ptr [RDI],0x5f
JZ 0x002d2c50
MOV ECX,0x8
LEA RDI,[0x38e06e]
MOV RSI,R15
CMPSB.REPE RDI,RSI
SETA AL
SBB AL,0x0
TEST AL,AL
JZ 0x002d2ba0
MOV EAX,EBX
AND EAX,0x10
JZ 0x002d2b8c
XOR R12D,R12D
MOV RDI,R15
MOV qword ptr [RBP + -0x98],RDX
MOV R14,RSP
CALL 0x00147490
MOV qword ptr [RBP + -0x90],R15
LEA RDX,[R15 + RAX*0x1]
LEA EDI,[RAX + RAX*0x1]
MOV dword ptr [RBP + -0x54],EAX
CDQE
MOV qword ptr [RBP + -0x88],RDX
MOVSXD RDX,EDI
LEA RAX,[0xf + RAX*0x8]
LEA RDX,[RDX + RDX*0x2]
AND RAX,-0x10
MOV dword ptr [RBP + -0x80],EBX
SHL RDX,0x3
MOV qword ptr [RBP + -0x78],R15
SUB RSP,RDX
MOV dword ptr [RBP + -0x64],EDI
LEA RSI,[RSP + 0x7]
SUB RSP,RAX
MOV dword ptr [RBP + -0x68],0x0
SHR RSI,0x3
MOV dword ptr [RBP + -0x58],0x0
LEA RDX,[RSI*0x8]
MOV qword ptr [RBP + -0x50],0x0
MOV qword ptr [RBP + -0x48],0x0
MOV dword ptr [RBP + -0x40],0x0
MOV qword ptr [RBP + -0x70],RDX
MOV qword ptr [RBP + -0x60],RSP
CMP R12D,0x1
JZ 0x002d2c30
TEST R12D,R12D
JZ 0x002d2bf8
CMP R12D,0x3
JA 0x002d2bf8
LEA R8,[R15 + 0xb]
CMP byte ptr [R15 + 0xb],0x5f
MOV qword ptr [RBP + -0x78],R8
JZ 0x002d2c68
TEST EDI,EDI
JLE 0x002d2c98
MOV RDI,R8
MOV qword ptr [RBP + -0xb0],RSI
MOV qword ptr [RBP + -0xa8],RDX
MOV qword ptr [RBP + -0xa0],R8
CALL 0x00147490
MOV RSI,qword ptr [RBP + -0xb0]
MOV dword ptr [RBP + -0x68],0x1
TEST EAX,EAX
MOV R8,qword ptr [RBP + -0xa0]
MOV RDX,qword ptr [RBP + -0xa8]
MOV dword ptr [0x4 + RSI*0x8],0x0
JZ 0x002d2c98
MOV qword ptr [0x8 + RSI*0x8],R8
LEA R15,[RBP + -0x90]
MOV dword ptr [RSI*0x8],0x0
MOV dword ptr [0x10 + RSI*0x8],EAX
XOR ESI,ESI
CMP R12D,0x2
MOV RDI,R15
SETNZ SIL
XOR ECX,ECX
ADD ESI,0x43
CALL 0x002c91b0
MOV R12,qword ptr [RBP + -0x78]
MOV R15,RAX
MOV RDI,R12
CALL 0x00147490
LEA RDX,[R12 + RAX*0x1]
MOV qword ptr [RBP + -0x78],RDX
TEST BL,0x1
JNZ 0x002d2c10
XOR EAX,EAX
TEST R15,R15
JZ 0x002d2b89
MOV RDX,qword ptr [RBP + -0x98]
MOV RCX,R13
MOV RSI,R15
MOV EDI,EBX
CALL 0x002d2890
MOV RSP,R14
LEA RSP,[RBP + -0x28]
POP RBX
POP R12
POP R13
POP R14
POP R15
POP RBP
RET
MOVZX EAX,byte ptr [R15 + 0x8]
SUB EAX,0x24
CMP AL,0x3b
JA 0x002d29f3
MOV RCX,0x800000000000401
BT RCX,RAX
JNC 0x002d29f3
MOVZX EAX,byte ptr [R15 + 0x9]
CMP AL,0x44
JZ 0x002d2bd5
CMP AL,0x49
JNZ 0x002d29f3
CMP byte ptr [R15 + 0xa],0x5f
JNZ 0x002d29f3
XOR R12D,R12D
CMP AL,0x49
SETNZ R12B
ADD R12D,0x2
JMP 0x002d2a01
LEA RDI,[RBP + -0x90]
CALL 0x002cfad0
MOV R15,RAX
TEST BL,0x1
JZ 0x002d2b6e
MOV RDX,qword ptr [RBP + -0x78]
XOR EAX,EAX
CMP byte ptr [RDX],0x0
JZ 0x002d2b6e
MOV RSP,R14
JMP 0x002d2b8c
LEA RDI,[RBP + -0x90]
MOV ESI,0x1
CALL 0x002d1990
MOV R15,RAX
JMP 0x002d2c07
CMP byte ptr [RDI + 0x1],0x5a
JNZ 0x002d29d5
MOV R12D,0x1
JMP 0x002d2a01
CMP byte ptr [R15 + 0xc],0x5a
JNZ 0x002d2ac2
LEA R8,[R15 + 0xd]
LEA R15,[RBP + -0x90]
XOR ESI,ESI
MOV RDI,R15
MOV qword ptr [RBP + -0x78],R8
CALL 0x002d12a0
MOV RDX,RAX
JMP 0x002d2b37
XOR EDX,EDX
LEA R15,[RBP + -0x90]
JMP 0x002d2b37
(translation_unit "ulong FUN_002d29b0(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  undefined1 *puVar3;\n  size_t sVar4;\n  long lVar5;\n  long lVar6;\n  byte *pbVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  byte bVar10;\n  bool bVar11;\n  bool bVar12;\n  undefined8 uStack_c0;\n  undefined8 local_b8;\n  long local_b0;\n  byte *local_a8;\n  undefined8 local_a0;\n  byte *local_98;\n  byte *local_90;\n  uint local_88;\n  byte *local_80;\n  long local_78;\n  undefined4 local_70;\n  int local_6c;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined8 local_58;\n  undefined8 local_50;\n  undefined4 local_48;\n  \n  bVar11 = *param_1 < 0x5f;\n  bVar12 = *param_1 == 0x5f;\n  if (bVar12) {\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }\n  uStack_c0 = 0x2d2a13;\n  local_a0 = param_3;\n  sVar4 = strlen((char *)param_1);\n  local_90 = param_1 + sVar4;\n  local_5c = (int)sVar4;\n  local_6c = local_5c * 2;\n  lVar6 = (long)local_6c * -0x18;\n  lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n  local_70 = 0;\n  uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;\n  local_60 = 0;\n  local_78 = uVar8 * 8;\n  local_58 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_98 = param_1;\n  local_88 = param_2;\n  local_80 = param_1;\n  if (bVar10 == 1) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  if ((bVar10 == 0) || (3 < bVar10)) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  pbVar7 = param_1 + 0xb;\n  if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }\n  else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }\nLAB_002d2b37:\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;\n  lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);\n  pbVar7 = local_80;\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;\n  sVar4 = strlen((char *)pbVar7);\n  local_80 = pbVar7 + sVar4;\n  uVar2 = local_a0;\njoined_r0x002d2c0a:\n  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }\n  return uVar8;\n}\n\n" (function_definition "ulong FUN_002d29b0(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  undefined1 *puVar3;\n  size_t sVar4;\n  long lVar5;\n  long lVar6;\n  byte *pbVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  byte bVar10;\n  bool bVar11;\n  bool bVar12;\n  undefined8 uStack_c0;\n  undefined8 local_b8;\n  long local_b0;\n  byte *local_a8;\n  undefined8 local_a0;\n  byte *local_98;\n  byte *local_90;\n  uint local_88;\n  byte *local_80;\n  long local_78;\n  undefined4 local_70;\n  int local_6c;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined8 local_58;\n  undefined8 local_50;\n  undefined4 local_48;\n  \n  bVar11 = *param_1 < 0x5f;\n  bVar12 = *param_1 == 0x5f;\n  if (bVar12) {\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }\n  uStack_c0 = 0x2d2a13;\n  local_a0 = param_3;\n  sVar4 = strlen((char *)param_1);\n  local_90 = param_1 + sVar4;\n  local_5c = (int)sVar4;\n  local_6c = local_5c * 2;\n  lVar6 = (long)local_6c * -0x18;\n  lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n  local_70 = 0;\n  uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;\n  local_60 = 0;\n  local_78 = uVar8 * 8;\n  local_58 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_98 = param_1;\n  local_88 = param_2;\n  local_80 = param_1;\n  if (bVar10 == 1) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  if ((bVar10 == 0) || (3 < bVar10)) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  pbVar7 = param_1 + 0xb;\n  if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }\n  else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }\nLAB_002d2b37:\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;\n  lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);\n  pbVar7 = local_80;\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;\n  sVar4 = strlen((char *)pbVar7);\n  local_80 = pbVar7 + sVar4;\n  uVar2 = local_a0;\njoined_r0x002d2c0a:\n  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }\n  return uVar8;\n}" type_identifier (function_declarator "FUN_002d29b0(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)" identifier (parameter_list "(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined8 uVar2;\n  undefined1 *puVar3;\n  size_t sVar4;\n  long lVar5;\n  long lVar6;\n  byte *pbVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  byte bVar10;\n  bool bVar11;\n  bool bVar12;\n  undefined8 uStack_c0;\n  undefined8 local_b8;\n  long local_b0;\n  byte *local_a8;\n  undefined8 local_a0;\n  byte *local_98;\n  byte *local_90;\n  uint local_88;\n  byte *local_80;\n  long local_78;\n  undefined4 local_70;\n  int local_6c;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined8 local_58;\n  undefined8 local_50;\n  undefined4 local_48;\n  \n  bVar11 = *param_1 < 0x5f;\n  bVar12 = *param_1 == 0x5f;\n  if (bVar12) {\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }\n  uStack_c0 = 0x2d2a13;\n  local_a0 = param_3;\n  sVar4 = strlen((char *)param_1);\n  local_90 = param_1 + sVar4;\n  local_5c = (int)sVar4;\n  local_6c = local_5c * 2;\n  lVar6 = (long)local_6c * -0x18;\n  lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n  local_70 = 0;\n  uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;\n  local_60 = 0;\n  local_78 = uVar8 * 8;\n  local_58 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_98 = param_1;\n  local_88 = param_2;\n  local_80 = param_1;\n  if (bVar10 == 1) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  if ((bVar10 == 0) || (3 < bVar10)) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  pbVar7 = param_1 + 0xb;\n  if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }\n  else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }\nLAB_002d2b37:\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;\n  lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);\n  pbVar7 = local_80;\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;\n  sVar4 = strlen((char *)pbVar7);\n  local_80 = pbVar7 + sVar4;\n  uVar2 = local_a0;\njoined_r0x002d2c0a:\n  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }\n  return uVar8;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "undefined1 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "ulong uVar8;" type_identifier identifier ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (declaration "byte bVar10;" type_identifier identifier ;) (declaration "bool bVar11;" primitive_type identifier ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "undefined8 uStack_c0;" type_identifier identifier ;) (declaration "undefined8 local_b8;" type_identifier identifier ;) (declaration "long local_b0;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *local_a8;" type_identifier (pointer_declarator "*local_a8" * identifier) ;) (declaration "undefined8 local_a0;" type_identifier identifier ;) (declaration "byte *local_98;" type_identifier (pointer_declarator "*local_98" * identifier) ;) (declaration "byte *local_90;" type_identifier (pointer_declarator "*local_90" * identifier) ;) (declaration "uint local_88;" type_identifier identifier ;) (declaration "byte *local_80;" type_identifier (pointer_declarator "*local_80" * identifier) ;) (declaration "long local_78;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 local_70;" type_identifier identifier ;) (declaration "int local_6c;" primitive_type identifier ;) (declaration "undefined1 *local_68;" type_identifier (pointer_declarator "*local_68" * identifier) ;) (declaration "undefined4 local_60;" type_identifier identifier ;) (declaration "int local_5c;" primitive_type identifier ;) (declaration "undefined8 local_58;" type_identifier identifier ;) (declaration "undefined8 local_50;" type_identifier identifier ;) (declaration "undefined4 local_48;" type_identifier identifier ;) (expression_statement "bVar11 = *param_1 < 0x5f;" (assignment_expression "bVar11 = *param_1 < 0x5f" identifier = (binary_expression "*param_1 < 0x5f" (pointer_expression "*param_1" * identifier) < number_literal)) ;) (expression_statement "bVar12 = *param_1 == 0x5f;" (assignment_expression "bVar12 = *param_1 == 0x5f" identifier = (binary_expression "*param_1 == 0x5f" (pointer_expression "*param_1" * identifier) == number_literal)) ;) (if_statement "if (bVar12) {\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }" { (expression_statement "bVar11 = param_1[1] < 0x5a;" (assignment_expression "bVar11 = param_1[1] < 0x5a" identifier = (binary_expression "param_1[1] < 0x5a" (subscript_expression "param_1[1]" identifier [ number_literal ]) < number_literal)) ;) (expression_statement "bVar12 = param_1[1] == 0x5a;" (assignment_expression "bVar12 = param_1[1] == 0x5a" identifier = (binary_expression "param_1[1] == 0x5a" (subscript_expression "param_1[1]" identifier [ number_literal ]) == number_literal)) ;) (if_statement "if (!bVar12) goto LAB_002d29d5;" if (parenthesized_expression "(!bVar12)" ( (unary_expression "!bVar12" ! identifier) )) (goto_statement "goto LAB_002d29d5;" goto statement_identifier ;)) (expression_statement "bVar10 = 1;" (assignment_expression "bVar10 = 1" identifier = number_literal) ;) }) (else_clause "else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }" else (compound_statement "{\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }" { (labeled_statement "LAB_002d29d5:\n    lVar6 = 8;" statement_identifier : (expression_statement "lVar6 = 8;" (assignment_expression "lVar6 = 8" identifier = number_literal) ;)) (expression_statement "pbVar7 = param_1;" (assignment_expression "pbVar7 = param_1" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"_GLOBAL_";" (assignment_expression "pbVar9 = (byte *)"_GLOBAL_"" identifier = (cast_expression "(byte *)"_GLOBAL_"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""_GLOBAL_"" " string_content "))) ;) (do_statement "do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);" do (compound_statement "{\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    }" { (if_statement "if (lVar6 == 0) break;" if (parenthesized_expression "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" identifier = (binary_expression "lVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar11 = *pbVar7 < *pbVar9;" (assignment_expression "bVar11 = *pbVar7 < *pbVar9" identifier = (binary_expression "*pbVar7 < *pbVar9" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar12 = *pbVar7 == *pbVar9;" (assignment_expression "bVar12 = *pbVar7 == *pbVar9" identifier = (binary_expression "*pbVar7 == *pbVar9" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" identifier = (binary_expression "pbVar7 + 1" identifier + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + 1;" (assignment_expression "pbVar9 = pbVar9 + 1" identifier = (binary_expression "pbVar9 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar12)" ( identifier )) ;) (if_statement "if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }" if (parenthesized_expression "(((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f))))" ( (binary_expression "((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))" (parenthesized_expression "((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0))" ( (binary_expression "(((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)" (parenthesized_expression "(((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c))" ( (binary_expression "((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)" (parenthesized_expression "((!bVar11 && !bVar12) == bVar11)" ( (binary_expression "(!bVar11 && !bVar12) == bVar11" (parenthesized_expression "(!bVar11 && !bVar12)" ( (binary_expression "!bVar11 && !bVar12" (unary_expression "!bVar11" ! identifier) && (unary_expression "!bVar12" ! identifier)) )) == identifier) )) && (parenthesized_expression "((byte)(param_1[8] - 0x24) < 0x3c)" ( (binary_expression "(byte)(param_1[8] - 0x24) < 0x3c" (call_expression "(byte)(param_1[8] - 0x24)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(param_1[8] - 0x24)" ( (binary_expression "param_1[8] - 0x24" (subscript_expression "param_1[8]" identifier [ number_literal ]) - number_literal) ))) < number_literal) ))) )) && (parenthesized_expression "((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)" ( (binary_expression "(0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0" (parenthesized_expression "(0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1)" ( (binary_expression "0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1" (binary_expression "0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f)" number_literal >> (parenthesized_expression "((ulong)(param_1[8] - 0x24) & 0x3f)" ( (binary_expression "(ulong)(param_1[8] - 0x24) & 0x3f" (call_expression "(ulong)(param_1[8] - 0x24)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[8] - 0x24)" ( (binary_expression "param_1[8] - 0x24" (subscript_expression "param_1[8]" identifier [ number_literal ]) - number_literal) ))) & number_literal) ))) & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "(((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))" ( (parenthesized_expression "((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f))" ( (binary_expression "(bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)" (parenthesized_expression "(bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49))" ( (comma_expression "bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)" (assignment_expression "bVar10 = param_1[9]" identifier = (subscript_expression "param_1[9]" identifier [ number_literal ])) , (binary_expression "bVar10 == 0x44 || (bVar10 == 0x49)" (binary_expression "bVar10 == 0x44" identifier == number_literal) || (parenthesized_expression "(bVar10 == 0x49)" ( (binary_expression "bVar10 == 0x49" identifier == number_literal) )))) )) && (parenthesized_expression "(param_1[10] == 0x5f)" ( (binary_expression "param_1[10] == 0x5f" (subscript_expression "param_1[10]" identifier [ number_literal ]) == number_literal) ))) )) ))) )) (compound_statement "{\n      bVar10 = (bVar10 != 0x49) + 2;\n    }" { (expression_statement "bVar10 = (bVar10 != 0x49) + 2;" (assignment_expression "bVar10 = (bVar10 != 0x49) + 2" identifier = (binary_expression "(bVar10 != 0x49) + 2" (parenthesized_expression "(bVar10 != 0x49)" ( (binary_expression "bVar10 != 0x49" identifier != number_literal) )) + number_literal)) ;) }) (else_clause "else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }" else (compound_statement "{\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }" { (if_statement "if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }" if (parenthesized_expression "((param_2 & 0x10) == 0)" ( (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" ( (binary_expression "param_2 & 0x10" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        return (ulong)(param_2 & 0x10);\n      }" { (return_statement "return (ulong)(param_2 & 0x10);" return (call_expression "(ulong)(param_2 & 0x10)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_2 & 0x10)" ( (binary_expression "param_2 & 0x10" identifier & number_literal) ))) ;) })) (expression_statement "bVar10 = 0;" (assignment_expression "bVar10 = 0" identifier = number_literal) ;) }))) }))) (expression_statement "uStack_c0 = 0x2d2a13;" (assignment_expression "uStack_c0 = 0x2d2a13" identifier = number_literal) ;) (expression_statement "local_a0 = param_3;" (assignment_expression "local_a0 = param_3" identifier = identifier) ;) (expression_statement "sVar4 = strlen((char *)param_1);" (assignment_expression "sVar4 = strlen((char *)param_1)" identifier = (call_expression "strlen((char *)param_1)" identifier (argument_list "((char *)param_1)" ( (cast_expression "(char *)param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_90 = param_1 + sVar4;" (assignment_expression "local_90 = param_1 + sVar4" identifier = (binary_expression "param_1 + sVar4" identifier + identifier)) ;) (expression_statement "local_5c = (int)sVar4;" (assignment_expression "local_5c = (int)sVar4" identifier = (cast_expression "(int)sVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "local_6c = local_5c * 2;" (assignment_expression "local_6c = local_5c * 2" identifier = (binary_expression "local_5c * 2" identifier * number_literal)) ;) (expression_statement "lVar6 = (long)local_6c * -0x18;" (assignment_expression "lVar6 = (long)local_6c * -0x18" identifier = (binary_expression "(long)local_6c * -0x18" (cast_expression "(long)local_6c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ;) (expression_statement "lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);" (assignment_expression "lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0)" identifier = (unary_expression "-((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0)" - (parenthesized_expression "((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0)" ( (binary_expression "(long)local_5c * 8 + 0xfU & 0xfffffffffffffff0" (binary_expression "(long)local_5c * 8 + 0xfU" (binary_expression "(long)local_5c * 8" (cast_expression "(long)local_5c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) + number_literal) & number_literal) )))) ;) (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" identifier = (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" ( (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "local_70 = 0;" (assignment_expression "local_70 = 0" identifier = number_literal) ;) (expression_statement "uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;" (assignment_expression "uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3" identifier = (binary_expression "(ulong)((long)&local_b8 + lVar6 + 7) >> 3" (call_expression "(ulong)((long)&local_b8 + lVar6 + 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)&local_b8 + lVar6 + 7)" ( (binary_expression "(long)&local_b8 + lVar6 + 7" (binary_expression "(long)&local_b8 + lVar6" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + number_literal) ))) >> number_literal)) ;) (expression_statement "local_60 = 0;" (assignment_expression "local_60 = 0" identifier = number_literal) ;) (expression_statement "local_78 = uVar8 * 8;" (assignment_expression "local_78 = uVar8 * 8" identifier = (binary_expression "uVar8 * 8" identifier * number_literal)) ;) (expression_statement "local_58 = 0;" (assignment_expression "local_58 = 0" identifier = number_literal) ;) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" identifier = number_literal) ;) (expression_statement "local_98 = param_1;" (assignment_expression "local_98 = param_1" identifier = identifier) ;) (expression_statement "local_88 = param_2;" (assignment_expression "local_88 = param_2" identifier = identifier) ;) (expression_statement "local_80 = param_1;" (assignment_expression "local_80 = param_1" identifier = identifier) ;) (if_statement "if (bVar10 == 1) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" if (parenthesized_expression "(bVar10 == 1)" ( (binary_expression "bVar10 == 1" identifier == number_literal) )) (compound_statement "{\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" { (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" identifier = (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" ( (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "lVar5 = FUN_002d1990(&local_98,1);" (assignment_expression "lVar5 = FUN_002d1990(&local_98,1)" identifier = (call_expression "FUN_002d1990(&local_98,1)" identifier (argument_list "(&local_98,1)" ( (pointer_expression "&local_98" & identifier) , number_literal )))) ;) (expression_statement "uVar2 = local_a0;" (assignment_expression "uVar2 = local_a0" identifier = identifier) ;) (goto_statement "goto joined_r0x002d2c0a;" goto statement_identifier ;) })) (if_statement "if ((bVar10 == 0) || (3 < bVar10)) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" if (parenthesized_expression "((bVar10 == 0) || (3 < bVar10))" ( (binary_expression "(bVar10 == 0) || (3 < bVar10)" (parenthesized_expression "(bVar10 == 0)" ( (binary_expression "bVar10 == 0" identifier == number_literal) )) || (parenthesized_expression "(3 < bVar10)" ( (binary_expression "3 < bVar10" number_literal < identifier) ))) )) (compound_statement "{\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" { (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" identifier = (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" ( (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "lVar5 = FUN_002cfad0(&local_98);" (assignment_expression "lVar5 = FUN_002cfad0(&local_98)" identifier = (call_expression "FUN_002cfad0(&local_98)" identifier (argument_list "(&local_98)" ( (pointer_expression "&local_98" & identifier) )))) ;) (expression_statement "uVar2 = local_a0;" (assignment_expression "uVar2 = local_a0" identifier = identifier) ;) (goto_statement "goto joined_r0x002d2c0a;" goto statement_identifier ;) })) (expression_statement "pbVar7 = param_1 + 0xb;" (assignment_expression "pbVar7 = param_1 + 0xb" identifier = (binary_expression "param_1 + 0xb" identifier + number_literal)) ;) (if_statement "if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }\n  else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }" if (parenthesized_expression "((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a))" ( (binary_expression "(param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)" (parenthesized_expression "(param_1[0xb] == 0x5f)" ( (binary_expression "param_1[0xb] == 0x5f" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) == number_literal) )) && (parenthesized_expression "(param_1[0xc] == 0x5a)" ( (binary_expression "param_1[0xc] == 0x5a" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) == number_literal) ))) )) (compound_statement "{\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }" { (expression_statement "local_80 = param_1 + 0xd;" (assignment_expression "local_80 = param_1 + 0xd" identifier = (binary_expression "param_1 + 0xd" identifier + number_literal)) ;) (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" identifier = (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" ( (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "lVar5 = FUN_002d12a0(&local_98,0);" (assignment_expression "lVar5 = FUN_002d12a0(&local_98,0)" identifier = (call_expression "FUN_002d12a0(&local_98,0)" identifier (argument_list "(&local_98,0)" ( (pointer_expression "&local_98" & identifier) , number_literal )))) ;) }) (else_clause "else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }" else (compound_statement "{\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }" { (expression_statement "local_80 = pbVar7;" (assignment_expression "local_80 = pbVar7" identifier = identifier) ;) (expression_statement "puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" identifier = (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" ( (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + identifier) )))) ;) (if_statement "if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }" if (parenthesized_expression "(0 < local_6c)" ( (binary_expression "0 < local_6c" number_literal < identifier) )) (compound_statement "{\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }" { (expression_statement "local_b8 = uVar8;" (assignment_expression "local_b8 = uVar8" identifier = identifier) ;) (expression_statement "local_b0 = local_78;" (assignment_expression "local_b0 = local_78" identifier = identifier) ;) (expression_statement "local_a8 = pbVar7;" (assignment_expression "local_a8 = pbVar7" identifier = identifier) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "sVar4 = strlen((char *)pbVar7);" (assignment_expression "sVar4 = strlen((char *)pbVar7)" identifier = (call_expression "strlen((char *)pbVar7)" identifier (argument_list "((char *)pbVar7)" ( (cast_expression "(char *)pbVar7" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" identifier = number_literal) ;) (expression_statement "*(undefined4 *)(local_b8 * 8 + 4) = 0;" (assignment_expression "*(undefined4 *)(local_b8 * 8 + 4) = 0" (pointer_expression "*(undefined4 *)(local_b8 * 8 + 4)" * (cast_expression "(undefined4 *)(local_b8 * 8 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_b8 * 8 + 4)" ( (binary_expression "local_b8 * 8 + 4" (binary_expression "local_b8 * 8" identifier * number_literal) + number_literal) )))) = number_literal) ;) (expression_statement "puVar3 = local_68;" (assignment_expression "puVar3 = local_68" identifier = identifier) ;) (if_statement "if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }" if (parenthesized_expression "((int)sVar4 != 0)" ( (binary_expression "(int)sVar4 != 0" (cast_expression "(int)sVar4" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (compound_statement "{\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }" { (expression_statement "*(byte **)(local_b8 * 8 + 8) = local_a8;" (assignment_expression "*(byte **)(local_b8 * 8 + 8) = local_a8" (pointer_expression "*(byte **)(local_b8 * 8 + 8)" * (cast_expression "(byte **)(local_b8 * 8 + 8)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_b8 * 8 + 8)" ( (binary_expression "local_b8 * 8 + 8" (binary_expression "local_b8 * 8" identifier * number_literal) + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(local_b8 * 8) = 0;" (assignment_expression "*(undefined4 *)(local_b8 * 8) = 0" (pointer_expression "*(undefined4 *)(local_b8 * 8)" * (cast_expression "(undefined4 *)(local_b8 * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_b8 * 8)" ( (binary_expression "local_b8 * 8" identifier * number_literal) )))) = number_literal) ;) (expression_statement "*(int *)(local_b8 * 8 + 0x10) = (int)sVar4;" (assignment_expression "*(int *)(local_b8 * 8 + 0x10) = (int)sVar4" (pointer_expression "*(int *)(local_b8 * 8 + 0x10)" * (cast_expression "(int *)(local_b8 * 8 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_b8 * 8 + 0x10)" ( (binary_expression "local_b8 * 8 + 0x10" (binary_expression "local_b8 * 8" identifier * number_literal) + number_literal) )))) = (cast_expression "(int)sVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "lVar5 = local_b0;" (assignment_expression "lVar5 = local_b0" identifier = identifier) ;) (goto_statement "goto LAB_002d2b37;" goto statement_identifier ;) })) })) (expression_statement "local_68 = puVar3;" (assignment_expression "local_68 = puVar3" identifier = identifier) ;) (expression_statement "lVar5 = 0;" (assignment_expression "lVar5 = 0" identifier = number_literal) ;) }))) (labeled_statement "LAB_002d2b37:\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;" statement_identifier : (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;)) (expression_statement "lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);" (assignment_expression "lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0)" identifier = (call_expression "FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0)" identifier (argument_list "(&local_98,(bVar10 != 2) + 'C',lVar5,0)" ( (pointer_expression "&local_98" & identifier) , (binary_expression "(bVar10 != 2) + 'C'" (parenthesized_expression "(bVar10 != 2)" ( (binary_expression "bVar10 != 2" identifier != number_literal) )) + (char_literal "'C'" ' character ')) , identifier , number_literal )))) ;) (expression_statement "pbVar7 = local_80;" (assignment_expression "pbVar7 = local_80" identifier = identifier) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "sVar4 = strlen((char *)pbVar7);" (assignment_expression "sVar4 = strlen((char *)pbVar7)" identifier = (call_expression "strlen((char *)pbVar7)" identifier (argument_list "((char *)pbVar7)" ( (cast_expression "(char *)pbVar7" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_80 = pbVar7 + sVar4;" (assignment_expression "local_80 = pbVar7 + sVar4" identifier = (binary_expression "pbVar7 + sVar4" identifier + identifier)) ;) (expression_statement "uVar2 = local_a0;" (assignment_expression "uVar2 = local_a0" identifier = identifier) ;) (labeled_statement "joined_r0x002d2c0a:\n  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }" statement_identifier : (if_statement "if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }" if (parenthesized_expression "((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0))" ( (binary_expression "(((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)" (parenthesized_expression "(((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0))" ( (binary_expression "((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)" (parenthesized_expression "((param_2 & 1) == 0)" ( (binary_expression "(param_2 & 1) == 0" (parenthesized_expression "(param_2 & 1)" ( (binary_expression "param_2 & 1" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(uVar8 = 0, *local_80 == 0)" ( (comma_expression "uVar8 = 0, *local_80 == 0" (assignment_expression "uVar8 = 0" identifier = number_literal) , (binary_expression "*local_80 == 0" (pointer_expression "*local_80" * identifier) == number_literal)) ))) )) && (parenthesized_expression "(uVar8 = 0, lVar5 != 0)" ( (comma_expression "uVar8 = 0, lVar5 != 0" (assignment_expression "uVar8 = 0" identifier = number_literal) , (binary_expression "lVar5 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }" { (expression_statement "local_a0 = uVar2;" (assignment_expression "local_a0 = uVar2" identifier = identifier) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);" (assignment_expression "uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4)" identifier = (call_expression "FUN_002d2890(param_2,lVar5,uVar2,param_4)" identifier (argument_list "(param_2,lVar5,uVar2,param_4)" ( identifier , identifier , identifier , identifier )))) ;) }))) (return_statement "return uVar8;" return identifier ;) })))
(translation_unit "int d_demangle_callback(char *mangled,int options,demangle_callbackref callback,void *opaque)\n\n{\n  char *pcVar1;\n  char cVar2;\n  long lVar3;\n  demangle_callbackref callback_00;\n  demangle_component **ppdVar4;\n  int iVar5;\n  size_t sVar6;\n  demangle_component *pdVar7;\n  long lVar8;\n  byte *pbVar9;\n  byte *pbVar10;\n  byte bVar11;\n  bool bVar12;\n  bool bVar13;\n  demangle_component *pdStack_c0;\n  ulong local_b8;\n  undefined1 uStack_b1;\n  demangle_component *local_b0;\n  char *local_a8;\n  demangle_callbackref local_a0;\n  d_info di;\n  \n  bVar12 = (byte)*mangled < 0x5f;\n  bVar13 = *mangled == 0x5f;\n  if (bVar13) {\n    bVar12 = (byte)mangled[1] < 0x5a;\n    bVar13 = mangled[1] == 0x5a;\n    if (!bVar13) goto LAB_002d29d5;\n    bVar11 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar8 = 8;\n    pbVar9 = (byte *)mangled;\n    pbVar10 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar8 == 0) break;\n      lVar8 = lVar8 + -1;\n      bVar12 = *pbVar9 < *pbVar10;\n      bVar13 = *pbVar9 == *pbVar10;\n      pbVar9 = pbVar9 + 1;\n      pbVar10 = pbVar10 + 1;\n    } while (bVar13);\n    if (((((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_')))) {\n      bVar11 = (cVar2 != 'I') + 2;\n    }\n    else {\n      if ((options & 0x10U) == 0) {\n        return 0;\n      }\n      bVar11 = 0;\n    }\n  }\n  pdStack_c0 = (demangle_component *)0x2d2a13;\n  local_a0 = callback;\n  sVar6 = strlen(mangled);\n  di.send = mangled + sVar6;\n  di.num_subs = (int)sVar6;\n  di.num_comps = di.num_subs * 2;\n  lVar8 = (long)di.num_comps * -0x18;\n  lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);\n  di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n  di.next_comp = 0;\n  di.next_sub = 0;\n  di.comps = (demangle_component *)(((ulong)(&uStack_b1 + lVar8) >> 3) * 8);\n  di.last_name = (demangle_component *)0x0;\n  di.expansion = 0;\n  di.is_expression = 0;\n  di.is_conversion = 0;\n  di.s = mangled;\n  di.options = options;\n  di.n = mangled;\n  if (bVar11 == 1) {\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c41;\n    pdVar7 = cplus_demangle_mangled_name(&di,1);\n    callback_00 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  if ((bVar11 == 0) || (3 < bVar11)) {\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c04;\n    pdVar7 = cplus_demangle_type(&di);\n    callback_00 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  pcVar1 = mangled + 0xb;\n  if ((mangled[0xb] == '_') && (mangled[0xc] == 'Z')) {\n    di.n = mangled + 0xd;\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c8c;\n    pdVar7 = d_encoding(&di,0);\n  }\n  else {\n    di.n = pcVar1;\n    ppdVar4 = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    if (0 < di.num_comps) {\n      local_b8 = (ulong)(&uStack_b1 + lVar8) >> 3;\n      local_b0 = di.comps;\n      local_a8 = pcVar1;\n      *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2ae7;\n      sVar6 = strlen(pcVar1);\n      di.next_comp = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      ppdVar4 = di.subs;\n      if ((int)sVar6 != 0) {\n        *(char **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar6;\n        pdVar7 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    di.subs = ppdVar4;\n    pdVar7 = (demangle_component *)0x0;\n  }\nLAB_002d2b37:\n  *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b4e;\n  pdVar7 = d_make_comp(&di,(bVar11 != 2) + DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,pdVar7,\n                       (demangle_component *)0x0);\n  pcVar1 = di.n;\n  *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b5d;\n  sVar6 = strlen(pcVar1);\n  di.n = pcVar1 + sVar6;\n  callback_00 = local_a0;\njoined_r0x002d2c0a:\n  if ((((options & 1U) == 0) || (iVar5 = 0, *di.n == '\0')) &&\n     (iVar5 = 0, pdVar7 != (demangle_component *)0x0)) {\n    local_a0 = callback_00;\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b89;\n    iVar5 = cplus_demangle_print_callback(options,pdVar7,callback_00,opaque);\n  }\n  return iVar5;\n}\n\n" (function_definition "int d_demangle_callback(char *mangled,int options,demangle_callbackref callback,void *opaque)\n\n{\n  char *pcVar1;\n  char cVar2;\n  long lVar3;\n  demangle_callbackref callback_00;\n  demangle_component **ppdVar4;\n  int iVar5;\n  size_t sVar6;\n  demangle_component *pdVar7;\n  long lVar8;\n  byte *pbVar9;\n  byte *pbVar10;\n  byte bVar11;\n  bool bVar12;\n  bool bVar13;\n  demangle_component *pdStack_c0;\n  ulong local_b8;\n  undefined1 uStack_b1;\n  demangle_component *local_b0;\n  char *local_a8;\n  demangle_callbackref local_a0;\n  d_info di;\n  \n  bVar12 = (byte)*mangled < 0x5f;\n  bVar13 = *mangled == 0x5f;\n  if (bVar13) {\n    bVar12 = (byte)mangled[1] < 0x5a;\n    bVar13 = mangled[1] == 0x5a;\n    if (!bVar13) goto LAB_002d29d5;\n    bVar11 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar8 = 8;\n    pbVar9 = (byte *)mangled;\n    pbVar10 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar8 == 0) break;\n      lVar8 = lVar8 + -1;\n      bVar12 = *pbVar9 < *pbVar10;\n      bVar13 = *pbVar9 == *pbVar10;\n      pbVar9 = pbVar9 + 1;\n      pbVar10 = pbVar10 + 1;\n    } while (bVar13);\n    if (((((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_')))) {\n      bVar11 = (cVar2 != 'I') + 2;\n    }\n    else {\n      if ((options & 0x10U) == 0) {\n        return 0;\n      }\n      bVar11 = 0;\n    }\n  }\n  pdStack_c0 = (demangle_component *)0x2d2a13;\n  local_a0 = callback;\n  sVar6 = strlen(mangled);\n  di.send = mangled + sVar6;\n  di.num_subs = (int)sVar6;\n  di.num_comps = di.num_subs * 2;\n  lVar8 = (long)di.num_comps * -0x18;\n  lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);\n  di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n  di.next_comp = 0;\n  di.next_sub = 0;\n  di.comps = (demangle_component *)(((ulong)(&uStack_b1 + lVar8) >> 3) * 8);\n  di.last_name = (demangle_component *)0x0;\n  di.expansion = 0;\n  di.is_expression = 0;\n  di.is_conversion = 0;\n  di.s = mangled;\n  di.options = options;\n  di.n = mangled;\n  if (bVar11 == 1) {\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c41;\n    pdVar7 = cplus_demangle_mangled_name(&di,1);\n    callback_00 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  if ((bVar11 == 0) || (3 < bVar11)) {\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c04;\n    pdVar7 = cplus_demangle_type(&di);\n    callback_00 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  pcVar1 = mangled + 0xb;\n  if ((mangled[0xb] == '_') && (mangled[0xc] == 'Z')) {\n    di.n = mangled + 0xd;\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c8c;\n    pdVar7 = d_encoding(&di,0);\n  }\n  else {\n    di.n = pcVar1;\n    ppdVar4 = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    if (0 < di.num_comps) {\n      local_b8 = (ulong)(&uStack_b1 + lVar8) >> 3;\n      local_b0 = di.comps;\n      local_a8 = pcVar1;\n      *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2ae7;\n      sVar6 = strlen(pcVar1);\n      di.next_comp = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      ppdVar4 = di.subs;\n      if ((int)sVar6 != 0) {\n        *(char **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar6;\n        pdVar7 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    di.subs = ppdVar4;\n    pdVar7 = (demangle_component *)0x0;\n  }\nLAB_002d2b37:\n  *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b4e;\n  pdVar7 = d_make_comp(&di,(bVar11 != 2) + DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,pdVar7,\n                       (demangle_component *)0x0);\n  pcVar1 = di.n;\n  *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b5d;\n  sVar6 = strlen(pcVar1);\n  di.n = pcVar1 + sVar6;\n  callback_00 = local_a0;\njoined_r0x002d2c0a:\n  if ((((options & 1U) == 0) || (iVar5 = 0, *di.n == '\0')) &&\n     (iVar5 = 0, pdVar7 != (demangle_component *)0x0)) {\n    local_a0 = callback_00;\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b89;\n    iVar5 = cplus_demangle_print_callback(options,pdVar7,callback_00,opaque);\n  }\n  return iVar5;\n}" primitive_type (function_declarator "d_demangle_callback(char *mangled,int options,demangle_callbackref callback,void *opaque)" identifier (parameter_list "(char *mangled,int options,demangle_callbackref callback,void *opaque)" ( (parameter_declaration "char *mangled" primitive_type (pointer_declarator "*mangled" * identifier)) , (parameter_declaration "int options" primitive_type identifier) , (parameter_declaration "demangle_callbackref callback" type_identifier identifier) , (parameter_declaration "void *opaque" primitive_type (pointer_declarator "*opaque" * identifier)) ))) (compound_statement "{\n  char *pcVar1;\n  char cVar2;\n  long lVar3;\n  demangle_callbackref callback_00;\n  demangle_component **ppdVar4;\n  int iVar5;\n  size_t sVar6;\n  demangle_component *pdVar7;\n  long lVar8;\n  byte *pbVar9;\n  byte *pbVar10;\n  byte bVar11;\n  bool bVar12;\n  bool bVar13;\n  demangle_component *pdStack_c0;\n  ulong local_b8;\n  undefined1 uStack_b1;\n  demangle_component *local_b0;\n  char *local_a8;\n  demangle_callbackref local_a0;\n  d_info di;\n  \n  bVar12 = (byte)*mangled < 0x5f;\n  bVar13 = *mangled == 0x5f;\n  if (bVar13) {\n    bVar12 = (byte)mangled[1] < 0x5a;\n    bVar13 = mangled[1] == 0x5a;\n    if (!bVar13) goto LAB_002d29d5;\n    bVar11 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar8 = 8;\n    pbVar9 = (byte *)mangled;\n    pbVar10 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar8 == 0) break;\n      lVar8 = lVar8 + -1;\n      bVar12 = *pbVar9 < *pbVar10;\n      bVar13 = *pbVar9 == *pbVar10;\n      pbVar9 = pbVar9 + 1;\n      pbVar10 = pbVar10 + 1;\n    } while (bVar13);\n    if (((((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_')))) {\n      bVar11 = (cVar2 != 'I') + 2;\n    }\n    else {\n      if ((options & 0x10U) == 0) {\n        return 0;\n      }\n      bVar11 = 0;\n    }\n  }\n  pdStack_c0 = (demangle_component *)0x2d2a13;\n  local_a0 = callback;\n  sVar6 = strlen(mangled);\n  di.send = mangled + sVar6;\n  di.num_subs = (int)sVar6;\n  di.num_comps = di.num_subs * 2;\n  lVar8 = (long)di.num_comps * -0x18;\n  lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);\n  di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n  di.next_comp = 0;\n  di.next_sub = 0;\n  di.comps = (demangle_component *)(((ulong)(&uStack_b1 + lVar8) >> 3) * 8);\n  di.last_name = (demangle_component *)0x0;\n  di.expansion = 0;\n  di.is_expression = 0;\n  di.is_conversion = 0;\n  di.s = mangled;\n  di.options = options;\n  di.n = mangled;\n  if (bVar11 == 1) {\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c41;\n    pdVar7 = cplus_demangle_mangled_name(&di,1);\n    callback_00 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  if ((bVar11 == 0) || (3 < bVar11)) {\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c04;\n    pdVar7 = cplus_demangle_type(&di);\n    callback_00 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  pcVar1 = mangled + 0xb;\n  if ((mangled[0xb] == '_') && (mangled[0xc] == 'Z')) {\n    di.n = mangled + 0xd;\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c8c;\n    pdVar7 = d_encoding(&di,0);\n  }\n  else {\n    di.n = pcVar1;\n    ppdVar4 = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    if (0 < di.num_comps) {\n      local_b8 = (ulong)(&uStack_b1 + lVar8) >> 3;\n      local_b0 = di.comps;\n      local_a8 = pcVar1;\n      *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2ae7;\n      sVar6 = strlen(pcVar1);\n      di.next_comp = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      ppdVar4 = di.subs;\n      if ((int)sVar6 != 0) {\n        *(char **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar6;\n        pdVar7 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    di.subs = ppdVar4;\n    pdVar7 = (demangle_component *)0x0;\n  }\nLAB_002d2b37:\n  *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b4e;\n  pdVar7 = d_make_comp(&di,(bVar11 != 2) + DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,pdVar7,\n                       (demangle_component *)0x0);\n  pcVar1 = di.n;\n  *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b5d;\n  sVar6 = strlen(pcVar1);\n  di.n = pcVar1 + sVar6;\n  callback_00 = local_a0;\njoined_r0x002d2c0a:\n  if ((((options & 1U) == 0) || (iVar5 = 0, *di.n == '\0')) &&\n     (iVar5 = 0, pdVar7 != (demangle_component *)0x0)) {\n    local_a0 = callback_00;\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b89;\n    iVar5 = cplus_demangle_print_callback(options,pdVar7,callback_00,opaque);\n  }\n  return iVar5;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "demangle_callbackref callback_00;" type_identifier identifier ;) (declaration "demangle_component **ppdVar4;" type_identifier (pointer_declarator "**ppdVar4" * (pointer_declarator "*ppdVar4" * identifier)) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "size_t sVar6;" primitive_type identifier ;) (declaration "demangle_component *pdVar7;" type_identifier (pointer_declarator "*pdVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (declaration "byte *pbVar10;" type_identifier (pointer_declarator "*pbVar10" * identifier) ;) (declaration "byte bVar11;" type_identifier identifier ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "bool bVar13;" primitive_type identifier ;) (declaration "demangle_component *pdStack_c0;" type_identifier (pointer_declarator "*pdStack_c0" * identifier) ;) (declaration "ulong local_b8;" type_identifier identifier ;) (declaration "undefined1 uStack_b1;" type_identifier identifier ;) (declaration "demangle_component *local_b0;" type_identifier (pointer_declarator "*local_b0" * identifier) ;) (declaration "char *local_a8;" primitive_type (pointer_declarator "*local_a8" * identifier) ;) (declaration "demangle_callbackref local_a0;" type_identifier identifier ;) (declaration "d_info di;" type_identifier identifier ;) (expression_statement "bVar12 = (byte)*mangled < 0x5f;" (assignment_expression "bVar12 = (byte)*mangled < 0x5f" identifier = (binary_expression "(byte)*mangled < 0x5f" (binary_expression "(byte)*mangled" (parenthesized_expression "(byte)" ( identifier )) * identifier) < number_literal)) ;) (expression_statement "bVar13 = *mangled == 0x5f;" (assignment_expression "bVar13 = *mangled == 0x5f" identifier = (binary_expression "*mangled == 0x5f" (pointer_expression "*mangled" * identifier) == number_literal)) ;) (if_statement "if (bVar13) {\n    bVar12 = (byte)mangled[1] < 0x5a;\n    bVar13 = mangled[1] == 0x5a;\n    if (!bVar13) goto LAB_002d29d5;\n    bVar11 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar8 = 8;\n    pbVar9 = (byte *)mangled;\n    pbVar10 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar8 == 0) break;\n      lVar8 = lVar8 + -1;\n      bVar12 = *pbVar9 < *pbVar10;\n      bVar13 = *pbVar9 == *pbVar10;\n      pbVar9 = pbVar9 + 1;\n      pbVar10 = pbVar10 + 1;\n    } while (bVar13);\n    if (((((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_')))) {\n      bVar11 = (cVar2 != 'I') + 2;\n    }\n    else {\n      if ((options & 0x10U) == 0) {\n        return 0;\n      }\n      bVar11 = 0;\n    }\n  }" if (parenthesized_expression "(bVar13)" ( identifier )) (compound_statement "{\n    bVar12 = (byte)mangled[1] < 0x5a;\n    bVar13 = mangled[1] == 0x5a;\n    if (!bVar13) goto LAB_002d29d5;\n    bVar11 = 1;\n  }" { (expression_statement "bVar12 = (byte)mangled[1] < 0x5a;" (assignment_expression "bVar12 = (byte)mangled[1] < 0x5a" identifier = (binary_expression "(byte)mangled[1] < 0x5a" (cast_expression "(byte)mangled[1]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "mangled[1]" identifier [ number_literal ])) < number_literal)) ;) (expression_statement "bVar13 = mangled[1] == 0x5a;" (assignment_expression "bVar13 = mangled[1] == 0x5a" identifier = (binary_expression "mangled[1] == 0x5a" (subscript_expression "mangled[1]" identifier [ number_literal ]) == number_literal)) ;) (if_statement "if (!bVar13) goto LAB_002d29d5;" if (parenthesized_expression "(!bVar13)" ( (unary_expression "!bVar13" ! identifier) )) (goto_statement "goto LAB_002d29d5;" goto statement_identifier ;)) (expression_statement "bVar11 = 1;" (assignment_expression "bVar11 = 1" identifier = number_literal) ;) }) (else_clause "else {\nLAB_002d29d5:\n    lVar8 = 8;\n    pbVar9 = (byte *)mangled;\n    pbVar10 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar8 == 0) break;\n      lVar8 = lVar8 + -1;\n      bVar12 = *pbVar9 < *pbVar10;\n      bVar13 = *pbVar9 == *pbVar10;\n      pbVar9 = pbVar9 + 1;\n      pbVar10 = pbVar10 + 1;\n    } while (bVar13);\n    if (((((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_')))) {\n      bVar11 = (cVar2 != 'I') + 2;\n    }\n    else {\n      if ((options & 0x10U) == 0) {\n        return 0;\n      }\n      bVar11 = 0;\n    }\n  }" else (compound_statement "{\nLAB_002d29d5:\n    lVar8 = 8;\n    pbVar9 = (byte *)mangled;\n    pbVar10 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar8 == 0) break;\n      lVar8 = lVar8 + -1;\n      bVar12 = *pbVar9 < *pbVar10;\n      bVar13 = *pbVar9 == *pbVar10;\n      pbVar9 = pbVar9 + 1;\n      pbVar10 = pbVar10 + 1;\n    } while (bVar13);\n    if (((((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_')))) {\n      bVar11 = (cVar2 != 'I') + 2;\n    }\n    else {\n      if ((options & 0x10U) == 0) {\n        return 0;\n      }\n      bVar11 = 0;\n    }\n  }" { (labeled_statement "LAB_002d29d5:\n    lVar8 = 8;" statement_identifier : (expression_statement "lVar8 = 8;" (assignment_expression "lVar8 = 8" identifier = number_literal) ;)) (expression_statement "pbVar9 = (byte *)mangled;" (assignment_expression "pbVar9 = (byte *)mangled" identifier = (cast_expression "(byte *)mangled" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pbVar10 = (byte *)"_GLOBAL_";" (assignment_expression "pbVar10 = (byte *)"_GLOBAL_"" identifier = (cast_expression "(byte *)"_GLOBAL_"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""_GLOBAL_"" " string_content "))) ;) (do_statement "do {\n      if (lVar8 == 0) break;\n      lVar8 = lVar8 + -1;\n      bVar12 = *pbVar9 < *pbVar10;\n      bVar13 = *pbVar9 == *pbVar10;\n      pbVar9 = pbVar9 + 1;\n      pbVar10 = pbVar10 + 1;\n    } while (bVar13);" do (compound_statement "{\n      if (lVar8 == 0) break;\n      lVar8 = lVar8 + -1;\n      bVar12 = *pbVar9 < *pbVar10;\n      bVar13 = *pbVar9 == *pbVar10;\n      pbVar9 = pbVar9 + 1;\n      pbVar10 = pbVar10 + 1;\n    }" { (if_statement "if (lVar8 == 0) break;" if (parenthesized_expression "(lVar8 == 0)" ( (binary_expression "lVar8 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar8 = lVar8 + -1;" (assignment_expression "lVar8 = lVar8 + -1" identifier = (binary_expression "lVar8 + -1" identifier + number_literal)) ;) (expression_statement "bVar12 = *pbVar9 < *pbVar10;" (assignment_expression "bVar12 = *pbVar9 < *pbVar10" identifier = (binary_expression "*pbVar9 < *pbVar10" (pointer_expression "*pbVar9" * identifier) < (pointer_expression "*pbVar10" * identifier))) ;) (expression_statement "bVar13 = *pbVar9 == *pbVar10;" (assignment_expression "bVar13 = *pbVar9 == *pbVar10" identifier = (binary_expression "*pbVar9 == *pbVar10" (pointer_expression "*pbVar9" * identifier) == (pointer_expression "*pbVar10" * identifier))) ;) (expression_statement "pbVar9 = pbVar9 + 1;" (assignment_expression "pbVar9 = pbVar9 + 1" identifier = (binary_expression "pbVar9 + 1" identifier + number_literal)) ;) (expression_statement "pbVar10 = pbVar10 + 1;" (assignment_expression "pbVar10 = pbVar10 + 1" identifier = (binary_expression "pbVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar13)" ( identifier )) ;) (if_statement "if (((((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_')))) {\n      bVar11 = (cVar2 != 'I') + 2;\n    }\n    else {\n      if ((options & 0x10U) == 0) {\n        return 0;\n      }\n      bVar11 = 0;\n    }" if (parenthesized_expression "(((((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_'))))" ( (binary_expression "((((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_')))" (parenthesized_expression "((((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0))" ( (binary_expression "(((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)" (parenthesized_expression "(((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c))" ( (binary_expression "((!bVar12 && !bVar13) == bVar12) && ((byte)((byte)mangled[8] - 0x24) < 0x3c)" (parenthesized_expression "((!bVar12 && !bVar13) == bVar12)" ( (binary_expression "(!bVar12 && !bVar13) == bVar12" (parenthesized_expression "(!bVar12 && !bVar13)" ( (binary_expression "!bVar12 && !bVar13" (unary_expression "!bVar12" ! identifier) && (unary_expression "!bVar13" ! identifier)) )) == identifier) )) && (parenthesized_expression "((byte)((byte)mangled[8] - 0x24) < 0x3c)" ( (binary_expression "(byte)((byte)mangled[8] - 0x24) < 0x3c" (call_expression "(byte)((byte)mangled[8] - 0x24)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((byte)mangled[8] - 0x24)" ( (binary_expression "(byte)mangled[8] - 0x24" (cast_expression "(byte)mangled[8]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "mangled[8]" identifier [ number_literal ])) - number_literal) ))) < number_literal) ))) )) && (parenthesized_expression "((0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0)" ( (binary_expression "(0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1) != 0" (parenthesized_expression "(0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1)" ( (binary_expression "0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f) & 1" (binary_expression "0x800000000000401U >> ((ulong)((byte)mangled[8] - 0x24) & 0x3f)" number_literal >> (parenthesized_expression "((ulong)((byte)mangled[8] - 0x24) & 0x3f)" ( (binary_expression "(ulong)((byte)mangled[8] - 0x24) & 0x3f" (call_expression "(ulong)((byte)mangled[8] - 0x24)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((byte)mangled[8] - 0x24)" ( (binary_expression "(byte)mangled[8] - 0x24" (cast_expression "(byte)mangled[8]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "mangled[8]" identifier [ number_literal ])) - number_literal) ))) & number_literal) ))) & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "(((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_')))" ( (parenthesized_expression "((cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_'))" ( (binary_expression "(cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')) && (mangled[10] == '_')" (parenthesized_expression "(cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I'))" ( (comma_expression "cVar2 = mangled[9], cVar2 == 'D' || (cVar2 == 'I')" (assignment_expression "cVar2 = mangled[9]" identifier = (subscript_expression "mangled[9]" identifier [ number_literal ])) , (binary_expression "cVar2 == 'D' || (cVar2 == 'I')" (binary_expression "cVar2 == 'D'" identifier == (char_literal "'D'" ' character ')) || (parenthesized_expression "(cVar2 == 'I')" ( (binary_expression "cVar2 == 'I'" identifier == (char_literal "'I'" ' character ')) )))) )) && (parenthesized_expression "(mangled[10] == '_')" ( (binary_expression "mangled[10] == '_'" (subscript_expression "mangled[10]" identifier [ number_literal ]) == (char_literal "'_'" ' character ')) ))) )) ))) )) (compound_statement "{\n      bVar11 = (cVar2 != 'I') + 2;\n    }" { (expression_statement "bVar11 = (cVar2 != 'I') + 2;" (assignment_expression "bVar11 = (cVar2 != 'I') + 2" identifier = (binary_expression "(cVar2 != 'I') + 2" (parenthesized_expression "(cVar2 != 'I')" ( (binary_expression "cVar2 != 'I'" identifier != (char_literal "'I'" ' character ')) )) + number_literal)) ;) }) (else_clause "else {\n      if ((options & 0x10U) == 0) {\n        return 0;\n      }\n      bVar11 = 0;\n    }" else (compound_statement "{\n      if ((options & 0x10U) == 0) {\n        return 0;\n      }\n      bVar11 = 0;\n    }" { (if_statement "if ((options & 0x10U) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((options & 0x10U) == 0)" ( (binary_expression "(options & 0x10U) == 0" (parenthesized_expression "(options & 0x10U)" ( (binary_expression "options & 0x10U" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar11 = 0;" (assignment_expression "bVar11 = 0" identifier = number_literal) ;) }))) }))) (expression_statement "pdStack_c0 = (demangle_component *)0x2d2a13;" (assignment_expression "pdStack_c0 = (demangle_component *)0x2d2a13" identifier = (cast_expression "(demangle_component *)0x2d2a13" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_a0 = callback;" (assignment_expression "local_a0 = callback" identifier = identifier) ;) (expression_statement "sVar6 = strlen(mangled);" (assignment_expression "sVar6 = strlen(mangled)" identifier = (call_expression "strlen(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (expression_statement "di.send = mangled + sVar6;" (assignment_expression "di.send = mangled + sVar6" (field_expression "di.send" identifier . field_identifier) = (binary_expression "mangled + sVar6" identifier + identifier)) ;) (expression_statement "di.num_subs = (int)sVar6;" (assignment_expression "di.num_subs = (int)sVar6" (field_expression "di.num_subs" identifier . field_identifier) = (cast_expression "(int)sVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "di.num_comps = di.num_subs * 2;" (assignment_expression "di.num_comps = di.num_subs * 2" (field_expression "di.num_comps" identifier . field_identifier) = (binary_expression "di.num_subs * 2" (field_expression "di.num_subs" identifier . field_identifier) * number_literal)) ;) (expression_statement "lVar8 = (long)di.num_comps * -0x18;" (assignment_expression "lVar8 = (long)di.num_comps * -0x18" identifier = (binary_expression "(long)di.num_comps * -0x18" (cast_expression "(long)di.num_comps" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "di.num_comps" identifier . field_identifier)) * number_literal)) ;) (expression_statement "lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);" (assignment_expression "lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0)" identifier = (unary_expression "-((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0)" - (parenthesized_expression "((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0)" ( (binary_expression "(long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0" (binary_expression "(long)di.num_subs * 8 + 0xfU" (binary_expression "(long)di.num_subs * 8" (cast_expression "(long)di.num_subs" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "di.num_subs" identifier . field_identifier)) * number_literal) + number_literal) & number_literal) )))) ;) (expression_statement "di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);" (assignment_expression "di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" (field_expression "di.subs" identifier . field_identifier) = (cast_expression "(demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" ( (type_descriptor "demangle_component **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" ( (binary_expression "(long)&stack0xffffffffffffff48 + lVar3 + lVar8" (binary_expression "(long)&stack0xffffffffffffff48 + lVar3" (cast_expression "(long)&stack0xffffffffffffff48" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&stack0xffffffffffffff48" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "di.next_comp = 0;" (assignment_expression "di.next_comp = 0" (field_expression "di.next_comp" identifier . field_identifier) = number_literal) ;) (expression_statement "di.next_sub = 0;" (assignment_expression "di.next_sub = 0" (field_expression "di.next_sub" identifier . field_identifier) = number_literal) ;) (expression_statement "di.comps = (demangle_component *)(((ulong)(&uStack_b1 + lVar8) >> 3) * 8);" (assignment_expression "di.comps = (demangle_component *)(((ulong)(&uStack_b1 + lVar8) >> 3) * 8)" (field_expression "di.comps" identifier . field_identifier) = (cast_expression "(demangle_component *)(((ulong)(&uStack_b1 + lVar8) >> 3) * 8)" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((ulong)(&uStack_b1 + lVar8) >> 3) * 8)" ( (binary_expression "((ulong)(&uStack_b1 + lVar8) >> 3) * 8" (parenthesized_expression "((ulong)(&uStack_b1 + lVar8) >> 3)" ( (binary_expression "(ulong)(&uStack_b1 + lVar8) >> 3" (call_expression "(ulong)(&uStack_b1 + lVar8)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(&uStack_b1 + lVar8)" ( (binary_expression "&uStack_b1 + lVar8" (pointer_expression "&uStack_b1" & identifier) + identifier) ))) >> number_literal) )) * number_literal) )))) ;) (expression_statement "di.last_name = (demangle_component *)0x0;" (assignment_expression "di.last_name = (demangle_component *)0x0" (field_expression "di.last_name" identifier . field_identifier) = (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "di.expansion = 0;" (assignment_expression "di.expansion = 0" (field_expression "di.expansion" identifier . field_identifier) = number_literal) ;) (expression_statement "di.is_expression = 0;" (assignment_expression "di.is_expression = 0" (field_expression "di.is_expression" identifier . field_identifier) = number_literal) ;) (expression_statement "di.is_conversion = 0;" (assignment_expression "di.is_conversion = 0" (field_expression "di.is_conversion" identifier . field_identifier) = number_literal) ;) (expression_statement "di.s = mangled;" (assignment_expression "di.s = mangled" (field_expression "di.s" identifier . field_identifier) = identifier) ;) (expression_statement "di.options = options;" (assignment_expression "di.options = options" (field_expression "di.options" identifier . field_identifier) = identifier) ;) (expression_statement "di.n = mangled;" (assignment_expression "di.n = mangled" (field_expression "di.n" identifier . field_identifier) = identifier) ;) (if_statement "if (bVar11 == 1) {\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c41;\n    pdVar7 = cplus_demangle_mangled_name(&di,1);\n    callback_00 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" if (parenthesized_expression "(bVar11 == 1)" ( (binary_expression "bVar11 == 1" identifier == number_literal) )) (compound_statement "{\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c41;\n    pdVar7 = cplus_demangle_mangled_name(&di,1);\n    callback_00 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" { (expression_statement "di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);" (assignment_expression "di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" (field_expression "di.subs" identifier . field_identifier) = (cast_expression "(demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" ( (type_descriptor "demangle_component **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" ( (binary_expression "(long)&stack0xffffffffffffff48 + lVar3 + lVar8" (binary_expression "(long)&stack0xffffffffffffff48 + lVar3" (cast_expression "(long)&stack0xffffffffffffff48" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&stack0xffffffffffffff48" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c41;" (assignment_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c41" (pointer_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" * (cast_expression "(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pdStack_c0 + lVar3 + lVar8)" ( (binary_expression "(long)&pdStack_c0 + lVar3 + lVar8" (binary_expression "(long)&pdStack_c0 + lVar3" (cast_expression "(long)&pdStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pdStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "pdVar7 = cplus_demangle_mangled_name(&di,1);" (assignment_expression "pdVar7 = cplus_demangle_mangled_name(&di,1)" identifier = (call_expression "cplus_demangle_mangled_name(&di,1)" identifier (argument_list "(&di,1)" ( (pointer_expression "&di" & identifier) , number_literal )))) ;) (expression_statement "callback_00 = local_a0;" (assignment_expression "callback_00 = local_a0" identifier = identifier) ;) (goto_statement "goto joined_r0x002d2c0a;" goto statement_identifier ;) })) (if_statement "if ((bVar11 == 0) || (3 < bVar11)) {\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c04;\n    pdVar7 = cplus_demangle_type(&di);\n    callback_00 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" if (parenthesized_expression "((bVar11 == 0) || (3 < bVar11))" ( (binary_expression "(bVar11 == 0) || (3 < bVar11)" (parenthesized_expression "(bVar11 == 0)" ( (binary_expression "bVar11 == 0" identifier == number_literal) )) || (parenthesized_expression "(3 < bVar11)" ( (binary_expression "3 < bVar11" number_literal < identifier) ))) )) (compound_statement "{\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c04;\n    pdVar7 = cplus_demangle_type(&di);\n    callback_00 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" { (expression_statement "di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);" (assignment_expression "di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" (field_expression "di.subs" identifier . field_identifier) = (cast_expression "(demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" ( (type_descriptor "demangle_component **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" ( (binary_expression "(long)&stack0xffffffffffffff48 + lVar3 + lVar8" (binary_expression "(long)&stack0xffffffffffffff48 + lVar3" (cast_expression "(long)&stack0xffffffffffffff48" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&stack0xffffffffffffff48" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c04;" (assignment_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c04" (pointer_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" * (cast_expression "(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pdStack_c0 + lVar3 + lVar8)" ( (binary_expression "(long)&pdStack_c0 + lVar3 + lVar8" (binary_expression "(long)&pdStack_c0 + lVar3" (cast_expression "(long)&pdStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pdStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "pdVar7 = cplus_demangle_type(&di);" (assignment_expression "pdVar7 = cplus_demangle_type(&di)" identifier = (call_expression "cplus_demangle_type(&di)" identifier (argument_list "(&di)" ( (pointer_expression "&di" & identifier) )))) ;) (expression_statement "callback_00 = local_a0;" (assignment_expression "callback_00 = local_a0" identifier = identifier) ;) (goto_statement "goto joined_r0x002d2c0a;" goto statement_identifier ;) })) (expression_statement "pcVar1 = mangled + 0xb;" (assignment_expression "pcVar1 = mangled + 0xb" identifier = (binary_expression "mangled + 0xb" identifier + number_literal)) ;) (if_statement "if ((mangled[0xb] == '_') && (mangled[0xc] == 'Z')) {\n    di.n = mangled + 0xd;\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c8c;\n    pdVar7 = d_encoding(&di,0);\n  }\n  else {\n    di.n = pcVar1;\n    ppdVar4 = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    if (0 < di.num_comps) {\n      local_b8 = (ulong)(&uStack_b1 + lVar8) >> 3;\n      local_b0 = di.comps;\n      local_a8 = pcVar1;\n      *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2ae7;\n      sVar6 = strlen(pcVar1);\n      di.next_comp = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      ppdVar4 = di.subs;\n      if ((int)sVar6 != 0) {\n        *(char **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar6;\n        pdVar7 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    di.subs = ppdVar4;\n    pdVar7 = (demangle_component *)0x0;\n  }" if (parenthesized_expression "((mangled[0xb] == '_') && (mangled[0xc] == 'Z'))" ( (binary_expression "(mangled[0xb] == '_') && (mangled[0xc] == 'Z')" (parenthesized_expression "(mangled[0xb] == '_')" ( (binary_expression "mangled[0xb] == '_'" (subscript_expression "mangled[0xb]" identifier [ number_literal ]) == (char_literal "'_'" ' character ')) )) && (parenthesized_expression "(mangled[0xc] == 'Z')" ( (binary_expression "mangled[0xc] == 'Z'" (subscript_expression "mangled[0xc]" identifier [ number_literal ]) == (char_literal "'Z'" ' character ')) ))) )) (compound_statement "{\n    di.n = mangled + 0xd;\n    di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c8c;\n    pdVar7 = d_encoding(&di,0);\n  }" { (expression_statement "di.n = mangled + 0xd;" (assignment_expression "di.n = mangled + 0xd" (field_expression "di.n" identifier . field_identifier) = (binary_expression "mangled + 0xd" identifier + number_literal)) ;) (expression_statement "di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);" (assignment_expression "di.subs = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" (field_expression "di.subs" identifier . field_identifier) = (cast_expression "(demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" ( (type_descriptor "demangle_component **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" ( (binary_expression "(long)&stack0xffffffffffffff48 + lVar3 + lVar8" (binary_expression "(long)&stack0xffffffffffffff48 + lVar3" (cast_expression "(long)&stack0xffffffffffffff48" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&stack0xffffffffffffff48" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c8c;" (assignment_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2c8c" (pointer_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" * (cast_expression "(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pdStack_c0 + lVar3 + lVar8)" ( (binary_expression "(long)&pdStack_c0 + lVar3 + lVar8" (binary_expression "(long)&pdStack_c0 + lVar3" (cast_expression "(long)&pdStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pdStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "pdVar7 = d_encoding(&di,0);" (assignment_expression "pdVar7 = d_encoding(&di,0)" identifier = (call_expression "d_encoding(&di,0)" identifier (argument_list "(&di,0)" ( (pointer_expression "&di" & identifier) , number_literal )))) ;) }) (else_clause "else {\n    di.n = pcVar1;\n    ppdVar4 = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    if (0 < di.num_comps) {\n      local_b8 = (ulong)(&uStack_b1 + lVar8) >> 3;\n      local_b0 = di.comps;\n      local_a8 = pcVar1;\n      *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2ae7;\n      sVar6 = strlen(pcVar1);\n      di.next_comp = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      ppdVar4 = di.subs;\n      if ((int)sVar6 != 0) {\n        *(char **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar6;\n        pdVar7 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    di.subs = ppdVar4;\n    pdVar7 = (demangle_component *)0x0;\n  }" else (compound_statement "{\n    di.n = pcVar1;\n    ppdVar4 = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);\n    if (0 < di.num_comps) {\n      local_b8 = (ulong)(&uStack_b1 + lVar8) >> 3;\n      local_b0 = di.comps;\n      local_a8 = pcVar1;\n      *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2ae7;\n      sVar6 = strlen(pcVar1);\n      di.next_comp = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      ppdVar4 = di.subs;\n      if ((int)sVar6 != 0) {\n        *(char **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar6;\n        pdVar7 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    di.subs = ppdVar4;\n    pdVar7 = (demangle_component *)0x0;\n  }" { (expression_statement "di.n = pcVar1;" (assignment_expression "di.n = pcVar1" (field_expression "di.n" identifier . field_identifier) = identifier) ;) (expression_statement "ppdVar4 = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8);" (assignment_expression "ppdVar4 = (demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" identifier = (cast_expression "(demangle_component **)((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" ( (type_descriptor "demangle_component **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)&stack0xffffffffffffff48 + lVar3 + lVar8)" ( (binary_expression "(long)&stack0xffffffffffffff48 + lVar3 + lVar8" (binary_expression "(long)&stack0xffffffffffffff48 + lVar3" (cast_expression "(long)&stack0xffffffffffffff48" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&stack0xffffffffffffff48" & identifier)) + identifier) + identifier) )))) ;) (if_statement "if (0 < di.num_comps) {\n      local_b8 = (ulong)(&uStack_b1 + lVar8) >> 3;\n      local_b0 = di.comps;\n      local_a8 = pcVar1;\n      *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2ae7;\n      sVar6 = strlen(pcVar1);\n      di.next_comp = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      ppdVar4 = di.subs;\n      if ((int)sVar6 != 0) {\n        *(char **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar6;\n        pdVar7 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }" if (parenthesized_expression "(0 < di.num_comps)" ( (binary_expression "0 < di.num_comps" number_literal < (field_expression "di.num_comps" identifier . field_identifier)) )) (compound_statement "{\n      local_b8 = (ulong)(&uStack_b1 + lVar8) >> 3;\n      local_b0 = di.comps;\n      local_a8 = pcVar1;\n      *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2ae7;\n      sVar6 = strlen(pcVar1);\n      di.next_comp = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      ppdVar4 = di.subs;\n      if ((int)sVar6 != 0) {\n        *(char **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar6;\n        pdVar7 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }" { (expression_statement "local_b8 = (ulong)(&uStack_b1 + lVar8) >> 3;" (assignment_expression "local_b8 = (ulong)(&uStack_b1 + lVar8) >> 3" identifier = (binary_expression "(ulong)(&uStack_b1 + lVar8) >> 3" (call_expression "(ulong)(&uStack_b1 + lVar8)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(&uStack_b1 + lVar8)" ( (binary_expression "&uStack_b1 + lVar8" (pointer_expression "&uStack_b1" & identifier) + identifier) ))) >> number_literal)) ;) (expression_statement "local_b0 = di.comps;" (assignment_expression "local_b0 = di.comps" identifier = (field_expression "di.comps" identifier . field_identifier)) ;) (expression_statement "local_a8 = pcVar1;" (assignment_expression "local_a8 = pcVar1" identifier = identifier) ;) (expression_statement "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2ae7;" (assignment_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2ae7" (pointer_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" * (cast_expression "(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pdStack_c0 + lVar3 + lVar8)" ( (binary_expression "(long)&pdStack_c0 + lVar3 + lVar8" (binary_expression "(long)&pdStack_c0 + lVar3" (cast_expression "(long)&pdStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pdStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "sVar6 = strlen(pcVar1);" (assignment_expression "sVar6 = strlen(pcVar1)" identifier = (call_expression "strlen(pcVar1)" identifier (argument_list "(pcVar1)" ( identifier )))) ;) (expression_statement "di.next_comp = 1;" (assignment_expression "di.next_comp = 1" (field_expression "di.next_comp" identifier . field_identifier) = number_literal) ;) (expression_statement "*(undefined4 *)(local_b8 * 8 + 4) = 0;" (assignment_expression "*(undefined4 *)(local_b8 * 8 + 4) = 0" (pointer_expression "*(undefined4 *)(local_b8 * 8 + 4)" * (cast_expression "(undefined4 *)(local_b8 * 8 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_b8 * 8 + 4)" ( (binary_expression "local_b8 * 8 + 4" (binary_expression "local_b8 * 8" identifier * number_literal) + number_literal) )))) = number_literal) ;) (expression_statement "ppdVar4 = di.subs;" (assignment_expression "ppdVar4 = di.subs" identifier = (field_expression "di.subs" identifier . field_identifier)) ;) (if_statement "if ((int)sVar6 != 0) {\n        *(char **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar6;\n        pdVar7 = local_b0;\n        goto LAB_002d2b37;\n      }" if (parenthesized_expression "((int)sVar6 != 0)" ( (binary_expression "(int)sVar6 != 0" (cast_expression "(int)sVar6" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (compound_statement "{\n        *(char **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar6;\n        pdVar7 = local_b0;\n        goto LAB_002d2b37;\n      }" { (expression_statement "*(char **)(local_b8 * 8 + 8) = local_a8;" (assignment_expression "*(char **)(local_b8 * 8 + 8) = local_a8" (pointer_expression "*(char **)(local_b8 * 8 + 8)" * (cast_expression "(char **)(local_b8 * 8 + 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_b8 * 8 + 8)" ( (binary_expression "local_b8 * 8 + 8" (binary_expression "local_b8 * 8" identifier * number_literal) + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(local_b8 * 8) = 0;" (assignment_expression "*(undefined4 *)(local_b8 * 8) = 0" (pointer_expression "*(undefined4 *)(local_b8 * 8)" * (cast_expression "(undefined4 *)(local_b8 * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_b8 * 8)" ( (binary_expression "local_b8 * 8" identifier * number_literal) )))) = number_literal) ;) (expression_statement "*(int *)(local_b8 * 8 + 0x10) = (int)sVar6;" (assignment_expression "*(int *)(local_b8 * 8 + 0x10) = (int)sVar6" (pointer_expression "*(int *)(local_b8 * 8 + 0x10)" * (cast_expression "(int *)(local_b8 * 8 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_b8 * 8 + 0x10)" ( (binary_expression "local_b8 * 8 + 0x10" (binary_expression "local_b8 * 8" identifier * number_literal) + number_literal) )))) = (cast_expression "(int)sVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "pdVar7 = local_b0;" (assignment_expression "pdVar7 = local_b0" identifier = identifier) ;) (goto_statement "goto LAB_002d2b37;" goto statement_identifier ;) })) })) (expression_statement "di.subs = ppdVar4;" (assignment_expression "di.subs = ppdVar4" (field_expression "di.subs" identifier . field_identifier) = identifier) ;) (expression_statement "pdVar7 = (demangle_component *)0x0;" (assignment_expression "pdVar7 = (demangle_component *)0x0" identifier = (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) (labeled_statement "LAB_002d2b37:\n  *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b4e;" statement_identifier : (expression_statement "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b4e;" (assignment_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b4e" (pointer_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" * (cast_expression "(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pdStack_c0 + lVar3 + lVar8)" ( (binary_expression "(long)&pdStack_c0 + lVar3 + lVar8" (binary_expression "(long)&pdStack_c0 + lVar3" (cast_expression "(long)&pdStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pdStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;)) (expression_statement "pdVar7 = d_make_comp(&di,(bVar11 != 2) + DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,pdVar7,\n                       (demangle_component *)0x0);" (assignment_expression "pdVar7 = d_make_comp(&di,(bVar11 != 2) + DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,pdVar7,\n                       (demangle_component *)0x0)" identifier = (call_expression "d_make_comp(&di,(bVar11 != 2) + DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,pdVar7,\n                       (demangle_component *)0x0)" identifier (argument_list "(&di,(bVar11 != 2) + DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,pdVar7,\n                       (demangle_component *)0x0)" ( (pointer_expression "&di" & identifier) , (binary_expression "(bVar11 != 2) + DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS" (parenthesized_expression "(bVar11 != 2)" ( (binary_expression "bVar11 != 2" identifier != number_literal) )) + identifier) , identifier , (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) )))) ;) (expression_statement "pcVar1 = di.n;" (assignment_expression "pcVar1 = di.n" identifier = (field_expression "di.n" identifier . field_identifier)) ;) (expression_statement "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b5d;" (assignment_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b5d" (pointer_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" * (cast_expression "(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pdStack_c0 + lVar3 + lVar8)" ( (binary_expression "(long)&pdStack_c0 + lVar3 + lVar8" (binary_expression "(long)&pdStack_c0 + lVar3" (cast_expression "(long)&pdStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pdStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "sVar6 = strlen(pcVar1);" (assignment_expression "sVar6 = strlen(pcVar1)" identifier = (call_expression "strlen(pcVar1)" identifier (argument_list "(pcVar1)" ( identifier )))) ;) (expression_statement "di.n = pcVar1 + sVar6;" (assignment_expression "di.n = pcVar1 + sVar6" (field_expression "di.n" identifier . field_identifier) = (binary_expression "pcVar1 + sVar6" identifier + identifier)) ;) (expression_statement "callback_00 = local_a0;" (assignment_expression "callback_00 = local_a0" identifier = identifier) ;) (labeled_statement "joined_r0x002d2c0a:\n  if ((((options & 1U) == 0) || (iVar5 = 0, *di.n == '\0')) &&\n     (iVar5 = 0, pdVar7 != (demangle_component *)0x0)) {\n    local_a0 = callback_00;\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b89;\n    iVar5 = cplus_demangle_print_callback(options,pdVar7,callback_00,opaque);\n  }" statement_identifier : (if_statement "if ((((options & 1U) == 0) || (iVar5 = 0, *di.n == '\0')) &&\n     (iVar5 = 0, pdVar7 != (demangle_component *)0x0)) {\n    local_a0 = callback_00;\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b89;\n    iVar5 = cplus_demangle_print_callback(options,pdVar7,callback_00,opaque);\n  }" if (parenthesized_expression "((((options & 1U) == 0) || (iVar5 = 0, *di.n == '\0')) &&\n     (iVar5 = 0, pdVar7 != (demangle_component *)0x0))" ( (binary_expression "(((options & 1U) == 0) || (iVar5 = 0, *di.n == '\0')) &&\n     (iVar5 = 0, pdVar7 != (demangle_component *)0x0)" (parenthesized_expression "(((options & 1U) == 0) || (iVar5 = 0, *di.n == '\0'))" ( (binary_expression "((options & 1U) == 0) || (iVar5 = 0, *di.n == '\0')" (parenthesized_expression "((options & 1U) == 0)" ( (binary_expression "(options & 1U) == 0" (parenthesized_expression "(options & 1U)" ( (binary_expression "options & 1U" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(iVar5 = 0, *di.n == '\0')" ( (comma_expression "iVar5 = 0, *di.n == '\0'" (assignment_expression "iVar5 = 0" identifier = number_literal) , (binary_expression "*di.n == '\0'" (pointer_expression "*di.n" * (field_expression "di.n" identifier . field_identifier)) == (char_literal "'\0'" ' escape_sequence '))) ))) )) && (parenthesized_expression "(iVar5 = 0, pdVar7 != (demangle_component *)0x0)" ( (comma_expression "iVar5 = 0, pdVar7 != (demangle_component *)0x0" (assignment_expression "iVar5 = 0" identifier = number_literal) , (binary_expression "pdVar7 != (demangle_component *)0x0" identifier != (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n    local_a0 = callback_00;\n    *(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b89;\n    iVar5 = cplus_demangle_print_callback(options,pdVar7,callback_00,opaque);\n  }" { (expression_statement "local_a0 = callback_00;" (assignment_expression "local_a0 = callback_00" identifier = identifier) ;) (expression_statement "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b89;" (assignment_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8) = 0x2d2b89" (pointer_expression "*(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" * (cast_expression "(undefined8 *)((long)&pdStack_c0 + lVar3 + lVar8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pdStack_c0 + lVar3 + lVar8)" ( (binary_expression "(long)&pdStack_c0 + lVar3 + lVar8" (binary_expression "(long)&pdStack_c0 + lVar3" (cast_expression "(long)&pdStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pdStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "iVar5 = cplus_demangle_print_callback(options,pdVar7,callback_00,opaque);" (assignment_expression "iVar5 = cplus_demangle_print_callback(options,pdVar7,callback_00,opaque)" identifier = (call_expression "cplus_demangle_print_callback(options,pdVar7,callback_00,opaque)" identifier (argument_list "(options,pdVar7,callback_00,opaque)" ( identifier , identifier , identifier , identifier )))) ;) }))) (return_statement "return iVar5;" return identifier ;) })))
(translation_unit "ulong FUN_002d29b0(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  undefined1 *puVar3;\n  size_t sVar4;\n  long lVar5;\n  long lVar6;\n  byte *pbVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  byte bVar10;\n  bool bVar11;\n  bool bVar12;\n  undefined8 uStack_c0;\n  undefined8 local_b8;\n  long local_b0;\n  byte *local_a8;\n  undefined8 local_a0;\n  byte *local_98;\n  byte *local_90;\n  uint local_88;\n  byte *local_80;\n  long local_78;\n  undefined4 local_70;\n  int local_6c;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined8 local_58;\n  undefined8 local_50;\n  undefined4 local_48;\n  \n  bVar11 = *param_1 < 0x5f;\n  bVar12 = *param_1 == 0x5f;\n  if (bVar12) {\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }\n  uStack_c0 = 0x2d2a13;\n  local_a0 = param_3;\n  sVar4 = strlen((char *)param_1);\n  local_90 = param_1 + sVar4;\n  local_5c = (int)sVar4;\n  local_6c = local_5c * 2;\n  lVar6 = (long)local_6c * -0x18;\n  lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n  local_70 = 0;\n  uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;\n  local_60 = 0;\n  local_78 = uVar8 * 8;\n  local_58 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_98 = param_1;\n  local_88 = param_2;\n  local_80 = param_1;\n  if (bVar10 == 1) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  if ((bVar10 == 0) || (3 < bVar10)) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  pbVar7 = param_1 + 0xb;\n  if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }\n  else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }\nLAB_002d2b37:\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;\n  lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);\n  pbVar7 = local_80;\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;\n  sVar4 = strlen((char *)pbVar7);\n  local_80 = pbVar7 + sVar4;\n  uVar2 = local_a0;\njoined_r0x002d2c0a:\n  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }\n  return uVar8;\n}\n\n" (function_definition "ulong FUN_002d29b0(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  undefined1 *puVar3;\n  size_t sVar4;\n  long lVar5;\n  long lVar6;\n  byte *pbVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  byte bVar10;\n  bool bVar11;\n  bool bVar12;\n  undefined8 uStack_c0;\n  undefined8 local_b8;\n  long local_b0;\n  byte *local_a8;\n  undefined8 local_a0;\n  byte *local_98;\n  byte *local_90;\n  uint local_88;\n  byte *local_80;\n  long local_78;\n  undefined4 local_70;\n  int local_6c;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined8 local_58;\n  undefined8 local_50;\n  undefined4 local_48;\n  \n  bVar11 = *param_1 < 0x5f;\n  bVar12 = *param_1 == 0x5f;\n  if (bVar12) {\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }\n  uStack_c0 = 0x2d2a13;\n  local_a0 = param_3;\n  sVar4 = strlen((char *)param_1);\n  local_90 = param_1 + sVar4;\n  local_5c = (int)sVar4;\n  local_6c = local_5c * 2;\n  lVar6 = (long)local_6c * -0x18;\n  lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n  local_70 = 0;\n  uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;\n  local_60 = 0;\n  local_78 = uVar8 * 8;\n  local_58 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_98 = param_1;\n  local_88 = param_2;\n  local_80 = param_1;\n  if (bVar10 == 1) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  if ((bVar10 == 0) || (3 < bVar10)) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  pbVar7 = param_1 + 0xb;\n  if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }\n  else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }\nLAB_002d2b37:\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;\n  lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);\n  pbVar7 = local_80;\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;\n  sVar4 = strlen((char *)pbVar7);\n  local_80 = pbVar7 + sVar4;\n  uVar2 = local_a0;\njoined_r0x002d2c0a:\n  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }\n  return uVar8;\n}" type_identifier (function_declarator "FUN_002d29b0(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)" identifier (parameter_list "(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined8 uVar2;\n  undefined1 *puVar3;\n  size_t sVar4;\n  long lVar5;\n  long lVar6;\n  byte *pbVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  byte bVar10;\n  bool bVar11;\n  bool bVar12;\n  undefined8 uStack_c0;\n  undefined8 local_b8;\n  long local_b0;\n  byte *local_a8;\n  undefined8 local_a0;\n  byte *local_98;\n  byte *local_90;\n  uint local_88;\n  byte *local_80;\n  long local_78;\n  undefined4 local_70;\n  int local_6c;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined8 local_58;\n  undefined8 local_50;\n  undefined4 local_48;\n  \n  bVar11 = *param_1 < 0x5f;\n  bVar12 = *param_1 == 0x5f;\n  if (bVar12) {\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }\n  uStack_c0 = 0x2d2a13;\n  local_a0 = param_3;\n  sVar4 = strlen((char *)param_1);\n  local_90 = param_1 + sVar4;\n  local_5c = (int)sVar4;\n  local_6c = local_5c * 2;\n  lVar6 = (long)local_6c * -0x18;\n  lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n  local_70 = 0;\n  uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;\n  local_60 = 0;\n  local_78 = uVar8 * 8;\n  local_58 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_98 = param_1;\n  local_88 = param_2;\n  local_80 = param_1;\n  if (bVar10 == 1) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  if ((bVar10 == 0) || (3 < bVar10)) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  pbVar7 = param_1 + 0xb;\n  if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }\n  else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }\nLAB_002d2b37:\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;\n  lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);\n  pbVar7 = local_80;\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;\n  sVar4 = strlen((char *)pbVar7);\n  local_80 = pbVar7 + sVar4;\n  uVar2 = local_a0;\njoined_r0x002d2c0a:\n  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }\n  return uVar8;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "undefined1 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "ulong uVar8;" type_identifier identifier ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (declaration "byte bVar10;" type_identifier identifier ;) (declaration "bool bVar11;" primitive_type identifier ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "undefined8 uStack_c0;" type_identifier identifier ;) (declaration "undefined8 local_b8;" type_identifier identifier ;) (declaration "long local_b0;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *local_a8;" type_identifier (pointer_declarator "*local_a8" * identifier) ;) (declaration "undefined8 local_a0;" type_identifier identifier ;) (declaration "byte *local_98;" type_identifier (pointer_declarator "*local_98" * identifier) ;) (declaration "byte *local_90;" type_identifier (pointer_declarator "*local_90" * identifier) ;) (declaration "uint local_88;" type_identifier identifier ;) (declaration "byte *local_80;" type_identifier (pointer_declarator "*local_80" * identifier) ;) (declaration "long local_78;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 local_70;" type_identifier identifier ;) (declaration "int local_6c;" primitive_type identifier ;) (declaration "undefined1 *local_68;" type_identifier (pointer_declarator "*local_68" * identifier) ;) (declaration "undefined4 local_60;" type_identifier identifier ;) (declaration "int local_5c;" primitive_type identifier ;) (declaration "undefined8 local_58;" type_identifier identifier ;) (declaration "undefined8 local_50;" type_identifier identifier ;) (declaration "undefined4 local_48;" type_identifier identifier ;) (expression_statement "bVar11 = *param_1 < 0x5f;" (assignment_expression "bVar11 = *param_1 < 0x5f" identifier = (binary_expression "*param_1 < 0x5f" (pointer_expression "*param_1" * identifier) < number_literal)) ;) (expression_statement "bVar12 = *param_1 == 0x5f;" (assignment_expression "bVar12 = *param_1 == 0x5f" identifier = (binary_expression "*param_1 == 0x5f" (pointer_expression "*param_1" * identifier) == number_literal)) ;) (if_statement "if (bVar12) {\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }" { (expression_statement "bVar11 = param_1[1] < 0x5a;" (assignment_expression "bVar11 = param_1[1] < 0x5a" identifier = (binary_expression "param_1[1] < 0x5a" (subscript_expression "param_1[1]" identifier [ number_literal ]) < number_literal)) ;) (expression_statement "bVar12 = param_1[1] == 0x5a;" (assignment_expression "bVar12 = param_1[1] == 0x5a" identifier = (binary_expression "param_1[1] == 0x5a" (subscript_expression "param_1[1]" identifier [ number_literal ]) == number_literal)) ;) (if_statement "if (!bVar12) goto LAB_002d29d5;" if (parenthesized_expression "(!bVar12)" ( (unary_expression "!bVar12" ! identifier) )) (goto_statement "goto LAB_002d29d5;" goto statement_identifier ;)) (expression_statement "bVar10 = 1;" (assignment_expression "bVar10 = 1" identifier = number_literal) ;) }) (else_clause "else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }" else (compound_statement "{\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }" { (labeled_statement "LAB_002d29d5:\n    lVar6 = 8;" statement_identifier : (expression_statement "lVar6 = 8;" (assignment_expression "lVar6 = 8" identifier = number_literal) ;)) (expression_statement "pbVar7 = param_1;" (assignment_expression "pbVar7 = param_1" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"_GLOBAL_";" (assignment_expression "pbVar9 = (byte *)"_GLOBAL_"" identifier = (cast_expression "(byte *)"_GLOBAL_"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""_GLOBAL_"" " string_content "))) ;) (do_statement "do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);" do (compound_statement "{\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    }" { (if_statement "if (lVar6 == 0) break;" if (parenthesized_expression "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" identifier = (binary_expression "lVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar11 = *pbVar7 < *pbVar9;" (assignment_expression "bVar11 = *pbVar7 < *pbVar9" identifier = (binary_expression "*pbVar7 < *pbVar9" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar12 = *pbVar7 == *pbVar9;" (assignment_expression "bVar12 = *pbVar7 == *pbVar9" identifier = (binary_expression "*pbVar7 == *pbVar9" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" identifier = (binary_expression "pbVar7 + 1" identifier + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + 1;" (assignment_expression "pbVar9 = pbVar9 + 1" identifier = (binary_expression "pbVar9 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar12)" ( identifier )) ;) (if_statement "if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }" if (parenthesized_expression "(((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f))))" ( (binary_expression "((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))" (parenthesized_expression "((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0))" ( (binary_expression "(((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)" (parenthesized_expression "(((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c))" ( (binary_expression "((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)" (parenthesized_expression "((!bVar11 && !bVar12) == bVar11)" ( (binary_expression "(!bVar11 && !bVar12) == bVar11" (parenthesized_expression "(!bVar11 && !bVar12)" ( (binary_expression "!bVar11 && !bVar12" (unary_expression "!bVar11" ! identifier) && (unary_expression "!bVar12" ! identifier)) )) == identifier) )) && (parenthesized_expression "((byte)(param_1[8] - 0x24) < 0x3c)" ( (binary_expression "(byte)(param_1[8] - 0x24) < 0x3c" (call_expression "(byte)(param_1[8] - 0x24)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(param_1[8] - 0x24)" ( (binary_expression "param_1[8] - 0x24" (subscript_expression "param_1[8]" identifier [ number_literal ]) - number_literal) ))) < number_literal) ))) )) && (parenthesized_expression "((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)" ( (binary_expression "(0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0" (parenthesized_expression "(0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1)" ( (binary_expression "0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1" (binary_expression "0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f)" number_literal >> (parenthesized_expression "((ulong)(param_1[8] - 0x24) & 0x3f)" ( (binary_expression "(ulong)(param_1[8] - 0x24) & 0x3f" (call_expression "(ulong)(param_1[8] - 0x24)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[8] - 0x24)" ( (binary_expression "param_1[8] - 0x24" (subscript_expression "param_1[8]" identifier [ number_literal ]) - number_literal) ))) & number_literal) ))) & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "(((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))" ( (parenthesized_expression "((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f))" ( (binary_expression "(bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)" (parenthesized_expression "(bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49))" ( (comma_expression "bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)" (assignment_expression "bVar10 = param_1[9]" identifier = (subscript_expression "param_1[9]" identifier [ number_literal ])) , (binary_expression "bVar10 == 0x44 || (bVar10 == 0x49)" (binary_expression "bVar10 == 0x44" identifier == number_literal) || (parenthesized_expression "(bVar10 == 0x49)" ( (binary_expression "bVar10 == 0x49" identifier == number_literal) )))) )) && (parenthesized_expression "(param_1[10] == 0x5f)" ( (binary_expression "param_1[10] == 0x5f" (subscript_expression "param_1[10]" identifier [ number_literal ]) == number_literal) ))) )) ))) )) (compound_statement "{\n      bVar10 = (bVar10 != 0x49) + 2;\n    }" { (expression_statement "bVar10 = (bVar10 != 0x49) + 2;" (assignment_expression "bVar10 = (bVar10 != 0x49) + 2" identifier = (binary_expression "(bVar10 != 0x49) + 2" (parenthesized_expression "(bVar10 != 0x49)" ( (binary_expression "bVar10 != 0x49" identifier != number_literal) )) + number_literal)) ;) }) (else_clause "else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }" else (compound_statement "{\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }" { (if_statement "if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }" if (parenthesized_expression "((param_2 & 0x10) == 0)" ( (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" ( (binary_expression "param_2 & 0x10" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        return (ulong)(param_2 & 0x10);\n      }" { (return_statement "return (ulong)(param_2 & 0x10);" return (call_expression "(ulong)(param_2 & 0x10)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_2 & 0x10)" ( (binary_expression "param_2 & 0x10" identifier & number_literal) ))) ;) })) (expression_statement "bVar10 = 0;" (assignment_expression "bVar10 = 0" identifier = number_literal) ;) }))) }))) (expression_statement "uStack_c0 = 0x2d2a13;" (assignment_expression "uStack_c0 = 0x2d2a13" identifier = number_literal) ;) (expression_statement "local_a0 = param_3;" (assignment_expression "local_a0 = param_3" identifier = identifier) ;) (expression_statement "sVar4 = strlen((char *)param_1);" (assignment_expression "sVar4 = strlen((char *)param_1)" identifier = (call_expression "strlen((char *)param_1)" identifier (argument_list "((char *)param_1)" ( (cast_expression "(char *)param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_90 = param_1 + sVar4;" (assignment_expression "local_90 = param_1 + sVar4" identifier = (binary_expression "param_1 + sVar4" identifier + identifier)) ;) (expression_statement "local_5c = (int)sVar4;" (assignment_expression "local_5c = (int)sVar4" identifier = (cast_expression "(int)sVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "local_6c = local_5c * 2;" (assignment_expression "local_6c = local_5c * 2" identifier = (binary_expression "local_5c * 2" identifier * number_literal)) ;) (expression_statement "lVar6 = (long)local_6c * -0x18;" (assignment_expression "lVar6 = (long)local_6c * -0x18" identifier = (binary_expression "(long)local_6c * -0x18" (cast_expression "(long)local_6c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ;) (expression_statement "lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);" (assignment_expression "lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0)" identifier = (unary_expression "-((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0)" - (parenthesized_expression "((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0)" ( (binary_expression "(long)local_5c * 8 + 0xfU & 0xfffffffffffffff0" (binary_expression "(long)local_5c * 8 + 0xfU" (binary_expression "(long)local_5c * 8" (cast_expression "(long)local_5c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) + number_literal) & number_literal) )))) ;) (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" identifier = (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" ( (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "local_70 = 0;" (assignment_expression "local_70 = 0" identifier = number_literal) ;) (expression_statement "uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;" (assignment_expression "uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3" identifier = (binary_expression "(ulong)((long)&local_b8 + lVar6 + 7) >> 3" (call_expression "(ulong)((long)&local_b8 + lVar6 + 7)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)&local_b8 + lVar6 + 7)" ( (binary_expression "(long)&local_b8 + lVar6 + 7" (binary_expression "(long)&local_b8 + lVar6" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + number_literal) ))) >> number_literal)) ;) (expression_statement "local_60 = 0;" (assignment_expression "local_60 = 0" identifier = number_literal) ;) (expression_statement "local_78 = uVar8 * 8;" (assignment_expression "local_78 = uVar8 * 8" identifier = (binary_expression "uVar8 * 8" identifier * number_literal)) ;) (expression_statement "local_58 = 0;" (assignment_expression "local_58 = 0" identifier = number_literal) ;) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" identifier = number_literal) ;) (expression_statement "local_98 = param_1;" (assignment_expression "local_98 = param_1" identifier = identifier) ;) (expression_statement "local_88 = param_2;" (assignment_expression "local_88 = param_2" identifier = identifier) ;) (expression_statement "local_80 = param_1;" (assignment_expression "local_80 = param_1" identifier = identifier) ;) (if_statement "if (bVar10 == 1) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" if (parenthesized_expression "(bVar10 == 1)" ( (binary_expression "bVar10 == 1" identifier == number_literal) )) (compound_statement "{\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" { (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" identifier = (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" ( (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "lVar5 = FUN_002d1990(&local_98,1);" (assignment_expression "lVar5 = FUN_002d1990(&local_98,1)" identifier = (call_expression "FUN_002d1990(&local_98,1)" identifier (argument_list "(&local_98,1)" ( (pointer_expression "&local_98" & identifier) , number_literal )))) ;) (expression_statement "uVar2 = local_a0;" (assignment_expression "uVar2 = local_a0" identifier = identifier) ;) (goto_statement "goto joined_r0x002d2c0a;" goto statement_identifier ;) })) (if_statement "if ((bVar10 == 0) || (3 < bVar10)) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" if (parenthesized_expression "((bVar10 == 0) || (3 < bVar10))" ( (binary_expression "(bVar10 == 0) || (3 < bVar10)" (parenthesized_expression "(bVar10 == 0)" ( (binary_expression "bVar10 == 0" identifier == number_literal) )) || (parenthesized_expression "(3 < bVar10)" ( (binary_expression "3 < bVar10" number_literal < identifier) ))) )) (compound_statement "{\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" { (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" identifier = (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" ( (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "lVar5 = FUN_002cfad0(&local_98);" (assignment_expression "lVar5 = FUN_002cfad0(&local_98)" identifier = (call_expression "FUN_002cfad0(&local_98)" identifier (argument_list "(&local_98)" ( (pointer_expression "&local_98" & identifier) )))) ;) (expression_statement "uVar2 = local_a0;" (assignment_expression "uVar2 = local_a0" identifier = identifier) ;) (goto_statement "goto joined_r0x002d2c0a;" goto statement_identifier ;) })) (expression_statement "pbVar7 = param_1 + 0xb;" (assignment_expression "pbVar7 = param_1 + 0xb" identifier = (binary_expression "param_1 + 0xb" identifier + number_literal)) ;) (if_statement "if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }\n  else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }" if (parenthesized_expression "((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a))" ( (binary_expression "(param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)" (parenthesized_expression "(param_1[0xb] == 0x5f)" ( (binary_expression "param_1[0xb] == 0x5f" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) == number_literal) )) && (parenthesized_expression "(param_1[0xc] == 0x5a)" ( (binary_expression "param_1[0xc] == 0x5a" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) == number_literal) ))) )) (compound_statement "{\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }" { (expression_statement "local_80 = param_1 + 0xd;" (assignment_expression "local_80 = param_1 + 0xd" identifier = (binary_expression "param_1 + 0xd" identifier + number_literal)) ;) (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" identifier = (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" ( (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "lVar5 = FUN_002d12a0(&local_98,0);" (assignment_expression "lVar5 = FUN_002d12a0(&local_98,0)" identifier = (call_expression "FUN_002d12a0(&local_98,0)" identifier (argument_list "(&local_98,0)" ( (pointer_expression "&local_98" & identifier) , number_literal )))) ;) }) (else_clause "else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }" else (compound_statement "{\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }" { (expression_statement "local_80 = pbVar7;" (assignment_expression "local_80 = pbVar7" identifier = identifier) ;) (expression_statement "puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" identifier = (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" ( (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_b8" & identifier)) + identifier) + identifier) )))) ;) (if_statement "if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }" if (parenthesized_expression "(0 < local_6c)" ( (binary_expression "0 < local_6c" number_literal < identifier) )) (compound_statement "{\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }" { (expression_statement "local_b8 = uVar8;" (assignment_expression "local_b8 = uVar8" identifier = identifier) ;) (expression_statement "local_b0 = local_78;" (assignment_expression "local_b0 = local_78" identifier = identifier) ;) (expression_statement "local_a8 = pbVar7;" (assignment_expression "local_a8 = pbVar7" identifier = identifier) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "sVar4 = strlen((char *)pbVar7);" (assignment_expression "sVar4 = strlen((char *)pbVar7)" identifier = (call_expression "strlen((char *)pbVar7)" identifier (argument_list "((char *)pbVar7)" ( (cast_expression "(char *)pbVar7" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" identifier = number_literal) ;) (expression_statement "*(undefined4 *)(local_b8 * 8 + 4) = 0;" (assignment_expression "*(undefined4 *)(local_b8 * 8 + 4) = 0" (pointer_expression "*(undefined4 *)(local_b8 * 8 + 4)" * (cast_expression "(undefined4 *)(local_b8 * 8 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_b8 * 8 + 4)" ( (binary_expression "local_b8 * 8 + 4" (binary_expression "local_b8 * 8" identifier * number_literal) + number_literal) )))) = number_literal) ;) (expression_statement "puVar3 = local_68;" (assignment_expression "puVar3 = local_68" identifier = identifier) ;) (if_statement "if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }" if (parenthesized_expression "((int)sVar4 != 0)" ( (binary_expression "(int)sVar4 != 0" (cast_expression "(int)sVar4" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (compound_statement "{\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }" { (expression_statement "*(byte **)(local_b8 * 8 + 8) = local_a8;" (assignment_expression "*(byte **)(local_b8 * 8 + 8) = local_a8" (pointer_expression "*(byte **)(local_b8 * 8 + 8)" * (cast_expression "(byte **)(local_b8 * 8 + 8)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_b8 * 8 + 8)" ( (binary_expression "local_b8 * 8 + 8" (binary_expression "local_b8 * 8" identifier * number_literal) + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(local_b8 * 8) = 0;" (assignment_expression "*(undefined4 *)(local_b8 * 8) = 0" (pointer_expression "*(undefined4 *)(local_b8 * 8)" * (cast_expression "(undefined4 *)(local_b8 * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_b8 * 8)" ( (binary_expression "local_b8 * 8" identifier * number_literal) )))) = number_literal) ;) (expression_statement "*(int *)(local_b8 * 8 + 0x10) = (int)sVar4;" (assignment_expression "*(int *)(local_b8 * 8 + 0x10) = (int)sVar4" (pointer_expression "*(int *)(local_b8 * 8 + 0x10)" * (cast_expression "(int *)(local_b8 * 8 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_b8 * 8 + 0x10)" ( (binary_expression "local_b8 * 8 + 0x10" (binary_expression "local_b8 * 8" identifier * number_literal) + number_literal) )))) = (cast_expression "(int)sVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "lVar5 = local_b0;" (assignment_expression "lVar5 = local_b0" identifier = identifier) ;) (goto_statement "goto LAB_002d2b37;" goto statement_identifier ;) })) })) (expression_statement "local_68 = puVar3;" (assignment_expression "local_68 = puVar3" identifier = identifier) ;) (expression_statement "lVar5 = 0;" (assignment_expression "lVar5 = 0" identifier = number_literal) ;) }))) (labeled_statement "LAB_002d2b37:\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;" statement_identifier : (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;)) (expression_statement "lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);" (assignment_expression "lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0)" identifier = (call_expression "FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0)" identifier (argument_list "(&local_98,(bVar10 != 2) + 'C',lVar5,0)" ( (pointer_expression "&local_98" & identifier) , (binary_expression "(bVar10 != 2) + 'C'" (parenthesized_expression "(bVar10 != 2)" ( (binary_expression "bVar10 != 2" identifier != number_literal) )) + (char_literal "'C'" ' character ')) , identifier , number_literal )))) ;) (expression_statement "pbVar7 = local_80;" (assignment_expression "pbVar7 = local_80" identifier = identifier) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "sVar4 = strlen((char *)pbVar7);" (assignment_expression "sVar4 = strlen((char *)pbVar7)" identifier = (call_expression "strlen((char *)pbVar7)" identifier (argument_list "((char *)pbVar7)" ( (cast_expression "(char *)pbVar7" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_80 = pbVar7 + sVar4;" (assignment_expression "local_80 = pbVar7 + sVar4" identifier = (binary_expression "pbVar7 + sVar4" identifier + identifier)) ;) (expression_statement "uVar2 = local_a0;" (assignment_expression "uVar2 = local_a0" identifier = identifier) ;) (labeled_statement "joined_r0x002d2c0a:\n  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }" statement_identifier : (if_statement "if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }" if (parenthesized_expression "((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0))" ( (binary_expression "(((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)" (parenthesized_expression "(((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0))" ( (binary_expression "((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)" (parenthesized_expression "((param_2 & 1) == 0)" ( (binary_expression "(param_2 & 1) == 0" (parenthesized_expression "(param_2 & 1)" ( (binary_expression "param_2 & 1" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(uVar8 = 0, *local_80 == 0)" ( (comma_expression "uVar8 = 0, *local_80 == 0" (assignment_expression "uVar8 = 0" identifier = number_literal) , (binary_expression "*local_80 == 0" (pointer_expression "*local_80" * identifier) == number_literal)) ))) )) && (parenthesized_expression "(uVar8 = 0, lVar5 != 0)" ( (comma_expression "uVar8 = 0, lVar5 != 0" (assignment_expression "uVar8 = 0" identifier = number_literal) , (binary_expression "lVar5 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }" { (expression_statement "local_a0 = uVar2;" (assignment_expression "local_a0 = uVar2" identifier = identifier) ;) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" * (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" ( (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_c0" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);" (assignment_expression "uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4)" identifier = (call_expression "FUN_002d2890(param_2,lVar5,uVar2,param_4)" identifier (argument_list "(param_2,lVar5,uVar2,param_4)" ( identifier , identifier , identifier , identifier )))) ;) }))) (return_statement "return uVar8;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == LIT)) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) < LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) == LIT)) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT) )) && (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) - LIT) ))) < LIT) ))) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT >> (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) - LIT) ))) & LIT) ))) & LIT) )) != LIT) ))) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) , (binary_expression (binary_expression IDENT == LIT) || (parenthesized_expression ( (binary_expression IDENT == LIT) )))) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) + LIT)) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT & LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) }))) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) ;) (expression_statement (assignment_expression IDENT = (unary_expression - (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT) + LIT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + LIT) ))) >> LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , LIT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression LIT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , LIT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT * LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) + LIT) )))) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) = LIT) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) + (char_literal ' character ')) , IDENT , LIT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression (pointer_expression * IDENT) == LIT)) ))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT )))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "ulong FUN_002d29b0(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  undefined1 *puVar3;\n  size_t sVar4;\n  long lVar5;\n  long lVar6;\n  byte *pbVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  byte bVar10;\n  bool bVar11;\n  bool bVar12;\n  undefined8 uStack_c0;\n  undefined8 local_b8;\n  long local_b0;\n  byte *local_a8;\n  undefined8 local_a0;\n  byte *local_98;\n  byte *local_90;\n  uint local_88;\n  byte *local_80;\n  long local_78;\n  undefined4 local_70;\n  int local_6c;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined8 local_58;\n  undefined8 local_50;\n  undefined4 local_48;\n  \n  bVar11 = *param_1 < 0x5f;\n  bVar12 = *param_1 == 0x5f;\n  if (bVar12) {\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }\n  uStack_c0 = 0x2d2a13;\n  local_a0 = param_3;\n  sVar4 = strlen((char *)param_1);\n  local_90 = param_1 + sVar4;\n  local_5c = (int)sVar4;\n  local_6c = local_5c * 2;\n  lVar6 = (long)local_6c * -0x18;\n  lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n  local_70 = 0;\n  uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;\n  local_60 = 0;\n  local_78 = uVar8 * 8;\n  local_58 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_98 = param_1;\n  local_88 = param_2;\n  local_80 = param_1;\n  if (bVar10 == 1) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  if ((bVar10 == 0) || (3 < bVar10)) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  pbVar7 = param_1 + 0xb;\n  if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }\n  else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }\nLAB_002d2b37:\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;\n  lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);\n  pbVar7 = local_80;\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;\n  sVar4 = strlen((char *)pbVar7);\n  local_80 = pbVar7 + sVar4;\n  uVar2 = local_a0;\njoined_r0x002d2c0a:\n  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }\n  return uVar8;\n}" (type_identifier "ulong") (function_declarator "FUN_002d29b0(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)" (identifier "FUN_002d29b0") (parameter_list "(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)" (( "(") (parameter_declaration "byte *param_1" (type_identifier "byte") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "undefined8 param_4" (type_identifier "undefined8") (identifier "param_4")) () ")"))) (compound_statement "{\n  long lVar1;\n  undefined8 uVar2;\n  undefined1 *puVar3;\n  size_t sVar4;\n  long lVar5;\n  long lVar6;\n  byte *pbVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  byte bVar10;\n  bool bVar11;\n  bool bVar12;\n  undefined8 uStack_c0;\n  undefined8 local_b8;\n  long local_b0;\n  byte *local_a8;\n  undefined8 local_a0;\n  byte *local_98;\n  byte *local_90;\n  uint local_88;\n  byte *local_80;\n  long local_78;\n  undefined4 local_70;\n  int local_6c;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined8 local_58;\n  undefined8 local_50;\n  undefined4 local_48;\n  \n  bVar11 = *param_1 < 0x5f;\n  bVar12 = *param_1 == 0x5f;\n  if (bVar12) {\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }\n  uStack_c0 = 0x2d2a13;\n  local_a0 = param_3;\n  sVar4 = strlen((char *)param_1);\n  local_90 = param_1 + sVar4;\n  local_5c = (int)sVar4;\n  local_6c = local_5c * 2;\n  lVar6 = (long)local_6c * -0x18;\n  lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n  local_70 = 0;\n  uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;\n  local_60 = 0;\n  local_78 = uVar8 * 8;\n  local_58 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_98 = param_1;\n  local_88 = param_2;\n  local_80 = param_1;\n  if (bVar10 == 1) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  if ((bVar10 == 0) || (3 < bVar10)) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }\n  pbVar7 = param_1 + 0xb;\n  if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }\n  else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }\nLAB_002d2b37:\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;\n  lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);\n  pbVar7 = local_80;\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;\n  sVar4 = strlen((char *)pbVar7);\n  local_80 = pbVar7 + sVar4;\n  uVar2 = local_a0;\njoined_r0x002d2c0a:\n  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }\n  return uVar8;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "undefined8 uVar2;" (type_identifier "undefined8") (identifier "uVar2") (; ";")) (declaration "undefined1 *puVar3;" (type_identifier "undefined1") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "size_t sVar4;" (primitive_type "size_t") (identifier "sVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "byte *pbVar7;" (type_identifier "byte") (pointer_declarator "*pbVar7" (* "*") (identifier "pbVar7")) (; ";")) (declaration "ulong uVar8;" (type_identifier "ulong") (identifier "uVar8") (; ";")) (declaration "byte *pbVar9;" (type_identifier "byte") (pointer_declarator "*pbVar9" (* "*") (identifier "pbVar9")) (; ";")) (declaration "byte bVar10;" (type_identifier "byte") (identifier "bVar10") (; ";")) (declaration "bool bVar11;" (primitive_type "bool") (identifier "bVar11") (; ";")) (declaration "bool bVar12;" (primitive_type "bool") (identifier "bVar12") (; ";")) (declaration "undefined8 uStack_c0;" (type_identifier "undefined8") (identifier "uStack_c0") (; ";")) (declaration "undefined8 local_b8;" (type_identifier "undefined8") (identifier "local_b8") (; ";")) (declaration "long local_b0;" (sized_type_specifier "long" (long "long")) (identifier "local_b0") (; ";")) (declaration "byte *local_a8;" (type_identifier "byte") (pointer_declarator "*local_a8" (* "*") (identifier "local_a8")) (; ";")) (declaration "undefined8 local_a0;" (type_identifier "undefined8") (identifier "local_a0") (; ";")) (declaration "byte *local_98;" (type_identifier "byte") (pointer_declarator "*local_98" (* "*") (identifier "local_98")) (; ";")) (declaration "byte *local_90;" (type_identifier "byte") (pointer_declarator "*local_90" (* "*") (identifier "local_90")) (; ";")) (declaration "uint local_88;" (type_identifier "uint") (identifier "local_88") (; ";")) (declaration "byte *local_80;" (type_identifier "byte") (pointer_declarator "*local_80" (* "*") (identifier "local_80")) (; ";")) (declaration "long local_78;" (sized_type_specifier "long" (long "long")) (identifier "local_78") (; ";")) (declaration "undefined4 local_70;" (type_identifier "undefined4") (identifier "local_70") (; ";")) (declaration "int local_6c;" (primitive_type "int") (identifier "local_6c") (; ";")) (declaration "undefined1 *local_68;" (type_identifier "undefined1") (pointer_declarator "*local_68" (* "*") (identifier "local_68")) (; ";")) (declaration "undefined4 local_60;" (type_identifier "undefined4") (identifier "local_60") (; ";")) (declaration "int local_5c;" (primitive_type "int") (identifier "local_5c") (; ";")) (declaration "undefined8 local_58;" (type_identifier "undefined8") (identifier "local_58") (; ";")) (declaration "undefined8 local_50;" (type_identifier "undefined8") (identifier "local_50") (; ";")) (declaration "undefined4 local_48;" (type_identifier "undefined4") (identifier "local_48") (; ";")) (expression_statement "bVar11 = *param_1 < 0x5f;" (assignment_expression "bVar11 = *param_1 < 0x5f" (identifier "bVar11") (= "=") (binary_expression "*param_1 < 0x5f" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (< "<") (number_literal "0x5f"))) (; ";")) (expression_statement "bVar12 = *param_1 == 0x5f;" (assignment_expression "bVar12 = *param_1 == 0x5f" (identifier "bVar12") (= "=") (binary_expression "*param_1 == 0x5f" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (== "==") (number_literal "0x5f"))) (; ";")) (if_statement "if (bVar12) {\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }\n  else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (compound_statement "{\n    bVar11 = param_1[1] < 0x5a;\n    bVar12 = param_1[1] == 0x5a;\n    if (!bVar12) goto LAB_002d29d5;\n    bVar10 = 1;\n  }" ({ "{") (expression_statement "bVar11 = param_1[1] < 0x5a;" (assignment_expression "bVar11 = param_1[1] < 0x5a" (identifier "bVar11") (= "=") (binary_expression "param_1[1] < 0x5a" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (< "<") (number_literal "0x5a"))) (; ";")) (expression_statement "bVar12 = param_1[1] == 0x5a;" (assignment_expression "bVar12 = param_1[1] == 0x5a" (identifier "bVar12") (= "=") (binary_expression "param_1[1] == 0x5a" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (== "==") (number_literal "0x5a"))) (; ";")) (if_statement "if (!bVar12) goto LAB_002d29d5;" (if "if") (parenthesized_expression "(!bVar12)" (( "(") (unary_expression "!bVar12" (! "!") (identifier "bVar12")) () ")")) (goto_statement "goto LAB_002d29d5;" (goto "goto") (statement_identifier "LAB_002d29d5") (; ";"))) (expression_statement "bVar10 = 1;" (assignment_expression "bVar10 = 1" (identifier "bVar10") (= "=") (number_literal "1")) (; ";")) (} "}")) (else_clause "else {\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }" (else "else") (compound_statement "{\nLAB_002d29d5:\n    lVar6 = 8;\n    pbVar7 = param_1;\n    pbVar9 = (byte *)"_GLOBAL_";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);\n    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }\n  }" ({ "{") (labeled_statement "LAB_002d29d5:\n    lVar6 = 8;" (statement_identifier "LAB_002d29d5") (: ":") (expression_statement "lVar6 = 8;" (assignment_expression "lVar6 = 8" (identifier "lVar6") (= "=") (number_literal "8")) (; ";"))) (expression_statement "pbVar7 = param_1;" (assignment_expression "pbVar7 = param_1" (identifier "pbVar7") (= "=") (identifier "param_1")) (; ";")) (expression_statement "pbVar9 = (byte *)"_GLOBAL_";" (assignment_expression "pbVar9 = (byte *)"_GLOBAL_"" (identifier "pbVar9") (= "=") (cast_expression "(byte *)"_GLOBAL_"" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""_GLOBAL_"" (" """) (string_content "_GLOBAL_") (" """)))) (; ";")) (do_statement "do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    } while (bVar12);" (do "do") (compound_statement "{\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar11 = *pbVar7 < *pbVar9;\n      bVar12 = *pbVar7 == *pbVar9;\n      pbVar7 = pbVar7 + 1;\n      pbVar9 = pbVar9 + 1;\n    }" ({ "{") (if_statement "if (lVar6 == 0) break;" (if "if") (parenthesized_expression "(lVar6 == 0)" (( "(") (binary_expression "lVar6 == 0" (identifier "lVar6") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" (identifier "lVar6") (= "=") (binary_expression "lVar6 + -1" (identifier "lVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar11 = *pbVar7 < *pbVar9;" (assignment_expression "bVar11 = *pbVar7 < *pbVar9" (identifier "bVar11") (= "=") (binary_expression "*pbVar7 < *pbVar9" (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")) (< "<") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "bVar12 = *pbVar7 == *pbVar9;" (assignment_expression "bVar12 = *pbVar7 == *pbVar9" (identifier "bVar12") (= "=") (binary_expression "*pbVar7 == *pbVar9" (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")) (== "==") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" (identifier "pbVar7") (= "=") (binary_expression "pbVar7 + 1" (identifier "pbVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar9 = pbVar9 + 1;" (assignment_expression "pbVar9 = pbVar9 + 1" (identifier "pbVar9") (= "=") (binary_expression "pbVar9 + 1" (identifier "pbVar9") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (; ";")) (if_statement "if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {\n      bVar10 = (bVar10 != 0x49) + 2;\n    }\n    else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }" (if "if") (parenthesized_expression "(((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f))))" (( "(") (binary_expression "((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&\n       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))" (parenthesized_expression "((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0))" (( "(") (binary_expression "(((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&\n        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)" (parenthesized_expression "(((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c))" (( "(") (binary_expression "((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)" (parenthesized_expression "((!bVar11 && !bVar12) == bVar11)" (( "(") (binary_expression "(!bVar11 && !bVar12) == bVar11" (parenthesized_expression "(!bVar11 && !bVar12)" (( "(") (binary_expression "!bVar11 && !bVar12" (unary_expression "!bVar11" (! "!") (identifier "bVar11")) (&& "&&") (unary_expression "!bVar12" (! "!") (identifier "bVar12"))) () ")")) (== "==") (identifier "bVar11")) () ")")) (&& "&&") (parenthesized_expression "((byte)(param_1[8] - 0x24) < 0x3c)" (( "(") (binary_expression "(byte)(param_1[8] - 0x24) < 0x3c" (call_expression "(byte)(param_1[8] - 0x24)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(param_1[8] - 0x24)" (( "(") (binary_expression "param_1[8] - 0x24" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (- "-") (number_literal "0x24")) () ")"))) (< "<") (number_literal "0x3c")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)" (( "(") (binary_expression "(0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0" (parenthesized_expression "(0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1)" (( "(") (binary_expression "0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1" (binary_expression "0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f)" (number_literal "0x800000000000401U") (>> ">>") (parenthesized_expression "((ulong)(param_1[8] - 0x24) & 0x3f)" (( "(") (binary_expression "(ulong)(param_1[8] - 0x24) & 0x3f" (call_expression "(ulong)(param_1[8] - 0x24)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_1[8] - 0x24)" (( "(") (binary_expression "param_1[8] - 0x24" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (- "-") (number_literal "0x24")) () ")"))) (& "&") (number_literal "0x3f")) () ")"))) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))" (( "(") (parenthesized_expression "((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f))" (( "(") (binary_expression "(bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)" (parenthesized_expression "(bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49))" (( "(") (comma_expression "bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)" (assignment_expression "bVar10 = param_1[9]" (identifier "bVar10") (= "=") (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]"))) (, ",") (binary_expression "bVar10 == 0x44 || (bVar10 == 0x49)" (binary_expression "bVar10 == 0x44" (identifier "bVar10") (== "==") (number_literal "0x44")) (|| "||") (parenthesized_expression "(bVar10 == 0x49)" (( "(") (binary_expression "bVar10 == 0x49" (identifier "bVar10") (== "==") (number_literal "0x49")) () ")")))) () ")")) (&& "&&") (parenthesized_expression "(param_1[10] == 0x5f)" (( "(") (binary_expression "param_1[10] == 0x5f" (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")) (== "==") (number_literal "0x5f")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n      bVar10 = (bVar10 != 0x49) + 2;\n    }" ({ "{") (expression_statement "bVar10 = (bVar10 != 0x49) + 2;" (assignment_expression "bVar10 = (bVar10 != 0x49) + 2" (identifier "bVar10") (= "=") (binary_expression "(bVar10 != 0x49) + 2" (parenthesized_expression "(bVar10 != 0x49)" (( "(") (binary_expression "bVar10 != 0x49" (identifier "bVar10") (!= "!=") (number_literal "0x49")) () ")")) (+ "+") (number_literal "2"))) (; ";")) (} "}")) (else_clause "else {\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }" (else "else") (compound_statement "{\n      if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }\n      bVar10 = 0;\n    }" ({ "{") (if_statement "if ((param_2 & 0x10) == 0) {\n        return (ulong)(param_2 & 0x10);\n      }" (if "if") (parenthesized_expression "((param_2 & 0x10) == 0)" (( "(") (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" (( "(") (binary_expression "param_2 & 0x10" (identifier "param_2") (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return (ulong)(param_2 & 0x10);\n      }" ({ "{") (return_statement "return (ulong)(param_2 & 0x10);" (return "return") (call_expression "(ulong)(param_2 & 0x10)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_2 & 0x10)" (( "(") (binary_expression "param_2 & 0x10" (identifier "param_2") (& "&") (number_literal "0x10")) () ")"))) (; ";")) (} "}"))) (expression_statement "bVar10 = 0;" (assignment_expression "bVar10 = 0" (identifier "bVar10") (= "=") (number_literal "0")) (; ";")) (} "}")))) (} "}")))) (expression_statement "uStack_c0 = 0x2d2a13;" (assignment_expression "uStack_c0 = 0x2d2a13" (identifier "uStack_c0") (= "=") (number_literal "0x2d2a13")) (; ";")) (expression_statement "local_a0 = param_3;" (assignment_expression "local_a0 = param_3" (identifier "local_a0") (= "=") (identifier "param_3")) (; ";")) (expression_statement "sVar4 = strlen((char *)param_1);" (assignment_expression "sVar4 = strlen((char *)param_1)" (identifier "sVar4") (= "=") (call_expression "strlen((char *)param_1)" (identifier "strlen") (argument_list "((char *)param_1)" (( "(") (cast_expression "(char *)param_1" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "local_90 = param_1 + sVar4;" (assignment_expression "local_90 = param_1 + sVar4" (identifier "local_90") (= "=") (binary_expression "param_1 + sVar4" (identifier "param_1") (+ "+") (identifier "sVar4"))) (; ";")) (expression_statement "local_5c = (int)sVar4;" (assignment_expression "local_5c = (int)sVar4" (identifier "local_5c") (= "=") (cast_expression "(int)sVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "sVar4"))) (; ";")) (expression_statement "local_6c = local_5c * 2;" (assignment_expression "local_6c = local_5c * 2" (identifier "local_6c") (= "=") (binary_expression "local_5c * 2" (identifier "local_5c") (* "*") (number_literal "2"))) (; ";")) (expression_statement "lVar6 = (long)local_6c * -0x18;" (assignment_expression "lVar6 = (long)local_6c * -0x18" (identifier "lVar6") (= "=") (binary_expression "(long)local_6c * -0x18" (cast_expression "(long)local_6c" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_6c")) (* "*") (number_literal "-0x18"))) (; ";")) (expression_statement "lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);" (assignment_expression "lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0)" (identifier "lVar1") (= "=") (unary_expression "-((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0)" (- "-") (parenthesized_expression "((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0)" (( "(") (binary_expression "(long)local_5c * 8 + 0xfU & 0xfffffffffffffff0" (binary_expression "(long)local_5c * 8 + 0xfU" (binary_expression "(long)local_5c * 8" (cast_expression "(long)local_5c" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_5c")) (* "*") (number_literal "8")) (+ "+") (number_literal "0xfU")) (& "&") (number_literal "0xfffffffffffffff0")) () ")")))) (; ";")) (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" (identifier "local_68") (= "=") (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&local_b8" (& "&") (identifier "local_b8"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (; ";")) (expression_statement "local_70 = 0;" (assignment_expression "local_70 = 0" (identifier "local_70") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;" (assignment_expression "uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3" (identifier "uVar8") (= "=") (binary_expression "(ulong)((long)&local_b8 + lVar6 + 7) >> 3" (call_expression "(ulong)((long)&local_b8 + lVar6 + 7)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((long)&local_b8 + lVar6 + 7)" (( "(") (binary_expression "(long)&local_b8 + lVar6 + 7" (binary_expression "(long)&local_b8 + lVar6" (cast_expression "(long)&local_b8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&local_b8" (& "&") (identifier "local_b8"))) (+ "+") (identifier "lVar6")) (+ "+") (number_literal "7")) () ")"))) (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "local_60 = 0;" (assignment_expression "local_60 = 0" (identifier "local_60") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_78 = uVar8 * 8;" (assignment_expression "local_78 = uVar8 * 8" (identifier "local_78") (= "=") (binary_expression "uVar8 * 8" (identifier "uVar8") (* "*") (number_literal "8"))) (; ";")) (expression_statement "local_58 = 0;" (assignment_expression "local_58 = 0" (identifier "local_58") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" (identifier "local_50") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" (identifier "local_48") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_98 = param_1;" (assignment_expression "local_98 = param_1" (identifier "local_98") (= "=") (identifier "param_1")) (; ";")) (expression_statement "local_88 = param_2;" (assignment_expression "local_88 = param_2" (identifier "local_88") (= "=") (identifier "param_2")) (; ";")) (expression_statement "local_80 = param_1;" (assignment_expression "local_80 = param_1" (identifier "local_80") (= "=") (identifier "param_1")) (; ";")) (if_statement "if (bVar10 == 1) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" (if "if") (parenthesized_expression "(bVar10 == 1)" (( "(") (binary_expression "bVar10 == 1" (identifier "bVar10") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;\n    lVar5 = FUN_002d1990(&local_98,1);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" ({ "{") (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" (identifier "local_68") (= "=") (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&local_b8" (& "&") (identifier "local_b8"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (; ";")) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (* "*") (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&uStack_c0" (& "&") (identifier "uStack_c0"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (= "=") (number_literal "0x2d2c41")) (; ";")) (expression_statement "lVar5 = FUN_002d1990(&local_98,1);" (assignment_expression "lVar5 = FUN_002d1990(&local_98,1)" (identifier "lVar5") (= "=") (call_expression "FUN_002d1990(&local_98,1)" (identifier "FUN_002d1990") (argument_list "(&local_98,1)" (( "(") (pointer_expression "&local_98" (& "&") (identifier "local_98")) (, ",") (number_literal "1") () ")")))) (; ";")) (expression_statement "uVar2 = local_a0;" (assignment_expression "uVar2 = local_a0" (identifier "uVar2") (= "=") (identifier "local_a0")) (; ";")) (goto_statement "goto joined_r0x002d2c0a;" (goto "goto") (statement_identifier "joined_r0x002d2c0a") (; ";")) (} "}"))) (if_statement "if ((bVar10 == 0) || (3 < bVar10)) {\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" (if "if") (parenthesized_expression "((bVar10 == 0) || (3 < bVar10))" (( "(") (binary_expression "(bVar10 == 0) || (3 < bVar10)" (parenthesized_expression "(bVar10 == 0)" (( "(") (binary_expression "bVar10 == 0" (identifier "bVar10") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(3 < bVar10)" (( "(") (binary_expression "3 < bVar10" (number_literal "3") (< "<") (identifier "bVar10")) () ")"))) () ")")) (compound_statement "{\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;\n    lVar5 = FUN_002cfad0(&local_98);\n    uVar2 = local_a0;\n    goto joined_r0x002d2c0a;\n  }" ({ "{") (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" (identifier "local_68") (= "=") (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&local_b8" (& "&") (identifier "local_b8"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (; ";")) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (* "*") (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&uStack_c0" (& "&") (identifier "uStack_c0"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (= "=") (number_literal "0x2d2c04")) (; ";")) (expression_statement "lVar5 = FUN_002cfad0(&local_98);" (assignment_expression "lVar5 = FUN_002cfad0(&local_98)" (identifier "lVar5") (= "=") (call_expression "FUN_002cfad0(&local_98)" (identifier "FUN_002cfad0") (argument_list "(&local_98)" (( "(") (pointer_expression "&local_98" (& "&") (identifier "local_98")) () ")")))) (; ";")) (expression_statement "uVar2 = local_a0;" (assignment_expression "uVar2 = local_a0" (identifier "uVar2") (= "=") (identifier "local_a0")) (; ";")) (goto_statement "goto joined_r0x002d2c0a;" (goto "goto") (statement_identifier "joined_r0x002d2c0a") (; ";")) (} "}"))) (expression_statement "pbVar7 = param_1 + 0xb;" (assignment_expression "pbVar7 = param_1 + 0xb" (identifier "pbVar7") (= "=") (binary_expression "param_1 + 0xb" (identifier "param_1") (+ "+") (number_literal "0xb"))) (; ";")) (if_statement "if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }\n  else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }" (if "if") (parenthesized_expression "((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a))" (( "(") (binary_expression "(param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)" (parenthesized_expression "(param_1[0xb] == 0x5f)" (( "(") (binary_expression "param_1[0xb] == 0x5f" (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]")) (== "==") (number_literal "0x5f")) () ")")) (&& "&&") (parenthesized_expression "(param_1[0xc] == 0x5a)" (( "(") (binary_expression "param_1[0xc] == 0x5a" (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]")) (== "==") (number_literal "0x5a")) () ")"))) () ")")) (compound_statement "{\n    local_80 = param_1 + 0xd;\n    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;\n    lVar5 = FUN_002d12a0(&local_98,0);\n  }" ({ "{") (expression_statement "local_80 = param_1 + 0xd;" (assignment_expression "local_80 = param_1 + 0xd" (identifier "local_80") (= "=") (binary_expression "param_1 + 0xd" (identifier "param_1") (+ "+") (number_literal "0xd"))) (; ";")) (expression_statement "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" (identifier "local_68") (= "=") (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&local_b8" (& "&") (identifier "local_b8"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (; ";")) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (* "*") (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&uStack_c0" (& "&") (identifier "uStack_c0"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (= "=") (number_literal "0x2d2c8c")) (; ";")) (expression_statement "lVar5 = FUN_002d12a0(&local_98,0);" (assignment_expression "lVar5 = FUN_002d12a0(&local_98,0)" (identifier "lVar5") (= "=") (call_expression "FUN_002d12a0(&local_98,0)" (identifier "FUN_002d12a0") (argument_list "(&local_98,0)" (( "(") (pointer_expression "&local_98" (& "&") (identifier "local_98")) (, ",") (number_literal "0") () ")")))) (; ";")) (} "}")) (else_clause "else {\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }" (else "else") (compound_statement "{\n    local_80 = pbVar7;\n    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);\n    if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }\n    local_68 = puVar3;\n    lVar5 = 0;\n  }" ({ "{") (expression_statement "local_80 = pbVar7;" (assignment_expression "local_80 = pbVar7" (identifier "local_80") (= "=") (identifier "pbVar7")) (; ";")) (expression_statement "puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);" (assignment_expression "puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6)" (identifier "puVar3") (= "=") (cast_expression "(undefined1 *)((long)&local_b8 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&local_b8 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&local_b8 + lVar1 + lVar6" (binary_expression "(long)&local_b8 + lVar1" (cast_expression "(long)&local_b8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&local_b8" (& "&") (identifier "local_b8"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (; ";")) (if_statement "if (0 < local_6c) {\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }" (if "if") (parenthesized_expression "(0 < local_6c)" (( "(") (binary_expression "0 < local_6c" (number_literal "0") (< "<") (identifier "local_6c")) () ")")) (compound_statement "{\n      local_b8 = uVar8;\n      local_b0 = local_78;\n      local_a8 = pbVar7;\n      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;\n      sVar4 = strlen((char *)pbVar7);\n      local_70 = 1;\n      *(undefined4 *)(local_b8 * 8 + 4) = 0;\n      puVar3 = local_68;\n      if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }\n    }" ({ "{") (expression_statement "local_b8 = uVar8;" (assignment_expression "local_b8 = uVar8" (identifier "local_b8") (= "=") (identifier "uVar8")) (; ";")) (expression_statement "local_b0 = local_78;" (assignment_expression "local_b0 = local_78" (identifier "local_b0") (= "=") (identifier "local_78")) (; ";")) (expression_statement "local_a8 = pbVar7;" (assignment_expression "local_a8 = pbVar7" (identifier "local_a8") (= "=") (identifier "pbVar7")) (; ";")) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (* "*") (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&uStack_c0" (& "&") (identifier "uStack_c0"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (= "=") (number_literal "0x2d2ae7")) (; ";")) (expression_statement "sVar4 = strlen((char *)pbVar7);" (assignment_expression "sVar4 = strlen((char *)pbVar7)" (identifier "sVar4") (= "=") (call_expression "strlen((char *)pbVar7)" (identifier "strlen") (argument_list "((char *)pbVar7)" (( "(") (cast_expression "(char *)pbVar7" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pbVar7")) () ")")))) (; ";")) (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" (identifier "local_70") (= "=") (number_literal "1")) (; ";")) (expression_statement "*(undefined4 *)(local_b8 * 8 + 4) = 0;" (assignment_expression "*(undefined4 *)(local_b8 * 8 + 4) = 0" (pointer_expression "*(undefined4 *)(local_b8 * 8 + 4)" (* "*") (cast_expression "(undefined4 *)(local_b8 * 8 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_b8 * 8 + 4)" (( "(") (binary_expression "local_b8 * 8 + 4" (binary_expression "local_b8 * 8" (identifier "local_b8") (* "*") (number_literal "8")) (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar3 = local_68;" (assignment_expression "puVar3 = local_68" (identifier "puVar3") (= "=") (identifier "local_68")) (; ";")) (if_statement "if ((int)sVar4 != 0) {\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }" (if "if") (parenthesized_expression "((int)sVar4 != 0)" (( "(") (binary_expression "(int)sVar4 != 0" (cast_expression "(int)sVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "sVar4")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        *(byte **)(local_b8 * 8 + 8) = local_a8;\n        *(undefined4 *)(local_b8 * 8) = 0;\n        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;\n        lVar5 = local_b0;\n        goto LAB_002d2b37;\n      }" ({ "{") (expression_statement "*(byte **)(local_b8 * 8 + 8) = local_a8;" (assignment_expression "*(byte **)(local_b8 * 8 + 8) = local_a8" (pointer_expression "*(byte **)(local_b8 * 8 + 8)" (* "*") (cast_expression "(byte **)(local_b8 * 8 + 8)" (( "(") (type_descriptor "byte **" (type_identifier "byte") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(local_b8 * 8 + 8)" (( "(") (binary_expression "local_b8 * 8 + 8" (binary_expression "local_b8 * 8" (identifier "local_b8") (* "*") (number_literal "8")) (+ "+") (number_literal "8")) () ")")))) (= "=") (identifier "local_a8")) (; ";")) (expression_statement "*(undefined4 *)(local_b8 * 8) = 0;" (assignment_expression "*(undefined4 *)(local_b8 * 8) = 0" (pointer_expression "*(undefined4 *)(local_b8 * 8)" (* "*") (cast_expression "(undefined4 *)(local_b8 * 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_b8 * 8)" (( "(") (binary_expression "local_b8 * 8" (identifier "local_b8") (* "*") (number_literal "8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(int *)(local_b8 * 8 + 0x10) = (int)sVar4;" (assignment_expression "*(int *)(local_b8 * 8 + 0x10) = (int)sVar4" (pointer_expression "*(int *)(local_b8 * 8 + 0x10)" (* "*") (cast_expression "(int *)(local_b8 * 8 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_b8 * 8 + 0x10)" (( "(") (binary_expression "local_b8 * 8 + 0x10" (binary_expression "local_b8 * 8" (identifier "local_b8") (* "*") (number_literal "8")) (+ "+") (number_literal "0x10")) () ")")))) (= "=") (cast_expression "(int)sVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "sVar4"))) (; ";")) (expression_statement "lVar5 = local_b0;" (assignment_expression "lVar5 = local_b0" (identifier "lVar5") (= "=") (identifier "local_b0")) (; ";")) (goto_statement "goto LAB_002d2b37;" (goto "goto") (statement_identifier "LAB_002d2b37") (; ";")) (} "}"))) (} "}"))) (expression_statement "local_68 = puVar3;" (assignment_expression "local_68 = puVar3" (identifier "local_68") (= "=") (identifier "puVar3")) (; ";")) (expression_statement "lVar5 = 0;" (assignment_expression "lVar5 = 0" (identifier "lVar5") (= "=") (number_literal "0")) (; ";")) (} "}")))) (labeled_statement "LAB_002d2b37:\n  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;" (statement_identifier "LAB_002d2b37") (: ":") (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (* "*") (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&uStack_c0" (& "&") (identifier "uStack_c0"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (= "=") (number_literal "0x2d2b4e")) (; ";"))) (expression_statement "lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);" (assignment_expression "lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0)" (identifier "lVar5") (= "=") (call_expression "FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0)" (identifier "FUN_002c91b0") (argument_list "(&local_98,(bVar10 != 2) + 'C',lVar5,0)" (( "(") (pointer_expression "&local_98" (& "&") (identifier "local_98")) (, ",") (binary_expression "(bVar10 != 2) + 'C'" (parenthesized_expression "(bVar10 != 2)" (( "(") (binary_expression "bVar10 != 2" (identifier "bVar10") (!= "!=") (number_literal "2")) () ")")) (+ "+") (char_literal "'C'" (' "'") (character "C") (' "'"))) (, ",") (identifier "lVar5") (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "pbVar7 = local_80;" (assignment_expression "pbVar7 = local_80" (identifier "pbVar7") (= "=") (identifier "local_80")) (; ";")) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (* "*") (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&uStack_c0" (& "&") (identifier "uStack_c0"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (= "=") (number_literal "0x2d2b5d")) (; ";")) (expression_statement "sVar4 = strlen((char *)pbVar7);" (assignment_expression "sVar4 = strlen((char *)pbVar7)" (identifier "sVar4") (= "=") (call_expression "strlen((char *)pbVar7)" (identifier "strlen") (argument_list "((char *)pbVar7)" (( "(") (cast_expression "(char *)pbVar7" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pbVar7")) () ")")))) (; ";")) (expression_statement "local_80 = pbVar7 + sVar4;" (assignment_expression "local_80 = pbVar7 + sVar4" (identifier "local_80") (= "=") (binary_expression "pbVar7 + sVar4" (identifier "pbVar7") (+ "+") (identifier "sVar4"))) (; ";")) (expression_statement "uVar2 = local_a0;" (assignment_expression "uVar2 = local_a0" (identifier "uVar2") (= "=") (identifier "local_a0")) (; ";")) (labeled_statement "joined_r0x002d2c0a:\n  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }" (statement_identifier "joined_r0x002d2c0a") (: ":") (if_statement "if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }" (if "if") (parenthesized_expression "((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0))" (( "(") (binary_expression "(((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)" (parenthesized_expression "(((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0))" (( "(") (binary_expression "((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)" (parenthesized_expression "((param_2 & 1) == 0)" (( "(") (binary_expression "(param_2 & 1) == 0" (parenthesized_expression "(param_2 & 1)" (( "(") (binary_expression "param_2 & 1" (identifier "param_2") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(uVar8 = 0, *local_80 == 0)" (( "(") (comma_expression "uVar8 = 0, *local_80 == 0" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (, ",") (binary_expression "*local_80 == 0" (pointer_expression "*local_80" (* "*") (identifier "local_80")) (== "==") (number_literal "0"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(uVar8 = 0, lVar5 != 0)" (( "(") (comma_expression "uVar8 = 0, lVar5 != 0" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (, ",") (binary_expression "lVar5 != 0" (identifier "lVar5") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    local_a0 = uVar2;\n    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;\n    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);\n  }" ({ "{") (expression_statement "local_a0 = uVar2;" (assignment_expression "local_a0 = uVar2" (identifier "local_a0") (= "=") (identifier "uVar2")) (; ";")) (expression_statement "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;" (assignment_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89" (pointer_expression "*(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (* "*") (cast_expression "(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&uStack_c0 + lVar1 + lVar6)" (( "(") (binary_expression "(long)&uStack_c0 + lVar1 + lVar6" (binary_expression "(long)&uStack_c0 + lVar1" (cast_expression "(long)&uStack_c0" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&uStack_c0" (& "&") (identifier "uStack_c0"))) (+ "+") (identifier "lVar1")) (+ "+") (identifier "lVar6")) () ")")))) (= "=") (number_literal "0x2d2b89")) (; ";")) (expression_statement "uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);" (assignment_expression "uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4)" (identifier "uVar8") (= "=") (call_expression "FUN_002d2890(param_2,lVar5,uVar2,param_4)" (identifier "FUN_002d2890") (argument_list "(param_2,lVar5,uVar2,param_4)" (( "(") (identifier "param_2") (, ",") (identifier "lVar5") (, ",") (identifier "uVar2") (, ",") (identifier "param_4") () ")")))) (; ";")) (} "}")))) (return_statement "return uVar8;" (return "return") (identifier "uVar8") (; ";")) (} "}")))

int function_1(char *var_1,int var_7,type_1 callback,void *opaque)

{
  char *var_18;
  char var_6;
  long var_10;
  type_1 callback_00;
  type_2 **ppdVar4;
  int iVar5;
  size_t var_9;
  type_2 *var_19;
  long var_2;
  type_3 *var_3;
  type_3 *var_4;
  type_3 var_11;
  bool var_5;
  bool bVar13;
  type_2 *pdStack_c0;
  type_4 var_15;
  type_5 uStack_b1;
  type_2 *local_b0;
  char *local_a8;
  type_1 local_a0;
  type_6 di;
  
  var_5 = (type_3)*var_1 < 0x5f;
  bVar13 = *var_1 == 0x5f;
  if (bVar13) {
    var_5 = (type_3)var_1[1] < 0x5a;
    bVar13 = var_1[1] == 0x5a;
    if (!bVar13) goto LAB_002d29d5;
    var_11 = 1;
  }
  else {
LAB_002d29d5:
    var_2 = 8;
    var_3 = (type_3 *)var_1;
    var_4 = (type_3 *)"_GLOBAL_";
    do {
      if (var_2 == 0) break;
      var_2 = var_2 + -1;
      var_5 = *var_3 < *var_4;
      bVar13 = *var_3 == *var_4;
      var_3 = var_3 + 1;
      var_4 = var_4 + 1;
    } while (bVar13);
    if (((((!var_5 && !bVar13) == var_5) && ((type_3)((type_3)var_1[8] - 0x24) < 0x3c)) &&
        ((0x800000000000401U >> ((type_4)((type_3)var_1[8] - 0x24) & 0x3f) & 1) != 0)) &&
       (((var_6 = var_1[9], var_6 == 'D' || (var_6 == 'I')) && (var_1[10] == '_')))) {
      var_11 = (var_6 != 'I') + 2;
    }
    else {
      if ((var_7 & 0x10U) == 0) {
        return 0;
      }
      var_11 = 0;
    }
  }
  pdStack_c0 = (type_2 *)0x2d2a13;
  local_a0 = callback;
  var_9 = var_8(var_1);
  di.send = var_1 + var_9;
  di.num_subs = (int)var_9;
  di.num_comps = di.num_subs * 2;
  var_2 = (long)di.num_comps * -0x18;
  var_10 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);
  di.subs = (type_2 **)((long)&stack0xffffffffffffff48 + var_10 + var_2);
  di.next_comp = 0;
  di.next_sub = 0;
  di.comps = (type_2 *)(((type_4)(&uStack_b1 + var_2) >> 3) * 8);
  di.last_name = (type_2 *)0x0;
  di.expansion = 0;
  di.is_expression = 0;
  di.is_conversion = 0;
  di.s = var_1;
  di.var_7 = var_7;
  di.n = var_1;
  if (var_11 == 1) {
    di.subs = (type_2 **)((long)&stack0xffffffffffffff48 + var_10 + var_2);
    *(type_7 *)((long)&pdStack_c0 + var_10 + var_2) = 0x2d2c41;
    var_19 = var_12(&di,1);
    callback_00 = local_a0;
    goto joined_r0x002d2c0a;
  }
  if ((var_11 == 0) || (3 < var_11)) {
    di.subs = (type_2 **)((long)&stack0xffffffffffffff48 + var_10 + var_2);
    *(type_7 *)((long)&pdStack_c0 + var_10 + var_2) = 0x2d2c04;
    var_19 = var_13(&di);
    callback_00 = local_a0;
    goto joined_r0x002d2c0a;
  }
  var_18 = var_1 + 0xb;
  if ((var_1[0xb] == '_') && (var_1[0xc] == 'Z')) {
    di.n = var_1 + 0xd;
    di.subs = (type_2 **)((long)&stack0xffffffffffffff48 + var_10 + var_2);
    *(type_7 *)((long)&pdStack_c0 + var_10 + var_2) = 0x2d2c8c;
    var_19 = var_14(&di,0);
  }
  else {
    di.n = var_18;
    ppdVar4 = (type_2 **)((long)&stack0xffffffffffffff48 + var_10 + var_2);
    if (0 < di.num_comps) {
      var_15 = (type_4)(&uStack_b1 + var_2) >> 3;
      local_b0 = di.comps;
      local_a8 = var_18;
      *(type_7 *)((long)&pdStack_c0 + var_10 + var_2) = 0x2d2ae7;
      var_9 = var_8(var_18);
      di.next_comp = 1;
      *(type_8 *)(var_15 * 8 + 4) = 0;
      ppdVar4 = di.subs;
      if ((int)var_9 != 0) {
        *(char **)(var_15 * 8 + 8) = local_a8;
        *(type_8 *)(var_15 * 8) = 0;
        *(int *)(var_15 * 8 + 0x10) = (int)var_9;
        var_19 = local_b0;
        goto LAB_002d2b37;
      }
    }
    di.subs = ppdVar4;
    var_19 = (type_2 *)0x0;
  }
LAB_002d2b37:
  *(type_7 *)((long)&pdStack_c0 + var_10 + var_2) = 0x2d2b4e;
  var_19 = var_16(&di,(var_11 != 2) + var_17,var_19,
                       (type_2 *)0x0);
  var_18 = di.n;
  *(type_7 *)((long)&pdStack_c0 + var_10 + var_2) = 0x2d2b5d;
  var_9 = var_8(var_18);
  di.n = var_18 + var_9;
  callback_00 = local_a0;
joined_r0x002d2c0a:
  if ((((var_7 & 1U) == 0) || (iVar5 = 0, *di.n == '\0')) &&
     (iVar5 = 0, var_19 != (type_2 *)0x0)) {
    local_a0 = callback_00;
    *(type_7 *)((long)&pdStack_c0 + var_10 + var_2) = 0x2d2b89;
    iVar5 = var_20(var_7,var_19,callback_00,opaque);
  }
  return iVar5;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (unary_expression argument: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (string_literal (string_content))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier))) right: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (number_literal)))) right: (number_literal))) right: (number_literal))))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (return_statement (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (unary_expression argument: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)) right: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (number_literal)))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (number_literal)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (char_literal (character))) (identifier) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier)))))))) (return_statement (identifier)))))

ulong MASKED(byte *param_1,uint param_2,undefined8 param_3,undefined8 param_4)

{
  long lVar1;
  undefined8 uVar2;
  undefined1 *puVar3;
  size_t sVar4;
  long lVar5;
  long lVar6;
  byte *pbVar7;
  ulong uVar8;
  byte *pbVar9;
  byte bVar10;
  bool bVar11;
  bool bVar12;
  undefined8 uStack_c0;
  undefined8 local_b8;
  long local_b0;
  byte *local_a8;
  undefined8 local_a0;
  byte *local_98;
  byte *local_90;
  uint local_88;
  byte *local_80;
  long local_78;
  undefined4 local_70;
  int local_6c;
  undefined1 *local_68;
  undefined4 local_60;
  int local_5c;
  undefined8 local_58;
  undefined8 local_50;
  undefined4 local_48;
  
  bVar11 = *param_1 < 0x5f;
  bVar12 = *param_1 == 0x5f;
  if (bVar12) {
    bVar11 = param_1[1] < 0x5a;
    bVar12 = param_1[1] == 0x5a;
    if (!bVar12) goto LAB_002d29d5;
    bVar10 = 1;
  }
  else {
LAB_002d29d5:
    lVar6 = 8;
    pbVar7 = param_1;
    pbVar9 = (byte *)"_GLOBAL_";
    do {
      if (lVar6 == 0) break;
      lVar6 = lVar6 + -1;
      bVar11 = *pbVar7 < *pbVar9;
      bVar12 = *pbVar7 == *pbVar9;
      pbVar7 = pbVar7 + 1;
      pbVar9 = pbVar9 + 1;
    } while (bVar12);
    if (((((!bVar11 && !bVar12) == bVar11) && ((byte)(param_1[8] - 0x24) < 0x3c)) &&
        ((0x800000000000401U >> ((ulong)(param_1[8] - 0x24) & 0x3f) & 1) != 0)) &&
       (((bVar10 = param_1[9], bVar10 == 0x44 || (bVar10 == 0x49)) && (param_1[10] == 0x5f)))) {
      bVar10 = (bVar10 != 0x49) + 2;
    }
    else {
      if ((param_2 & 0x10) == 0) {
        return (ulong)(param_2 & 0x10);
      }
      bVar10 = 0;
    }
  }
  uStack_c0 = 0x2d2a13;
  local_a0 = param_3;
  sVar4 = strlen((char *)param_1);
  local_90 = param_1 + sVar4;
  local_5c = (int)sVar4;
  local_6c = local_5c * 2;
  lVar6 = (long)local_6c * -0x18;
  lVar1 = -((long)local_5c * 8 + 0xfU & 0xfffffffffffffff0);
  local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);
  local_70 = 0;
  uVar8 = (ulong)((long)&local_b8 + lVar6 + 7) >> 3;
  local_60 = 0;
  local_78 = uVar8 * 8;
  local_58 = 0;
  local_50 = 0;
  local_48 = 0;
  local_98 = param_1;
  local_88 = param_2;
  local_80 = param_1;
  if (bVar10 == 1) {
    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);
    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c41;
    lVar5 = FUN_002d1990(&local_98,1);
    uVar2 = local_a0;
    goto joined_r0x002d2c0a;
  }
  if ((bVar10 == 0) || (3 < bVar10)) {
    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);
    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c04;
    lVar5 = FUN_002cfad0(&local_98);
    uVar2 = local_a0;
    goto joined_r0x002d2c0a;
  }
  pbVar7 = param_1 + 0xb;
  if ((param_1[0xb] == 0x5f) && (param_1[0xc] == 0x5a)) {
    local_80 = param_1 + 0xd;
    local_68 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);
    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2c8c;
    lVar5 = FUN_002d12a0(&local_98,0);
  }
  else {
    local_80 = pbVar7;
    puVar3 = (undefined1 *)((long)&local_b8 + lVar1 + lVar6);
    if (0 < local_6c) {
      local_b8 = uVar8;
      local_b0 = local_78;
      local_a8 = pbVar7;
      *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2ae7;
      sVar4 = strlen((char *)pbVar7);
      local_70 = 1;
      *(undefined4 *)(local_b8 * 8 + 4) = 0;
      puVar3 = local_68;
      if ((int)sVar4 != 0) {
        *(byte **)(local_b8 * 8 + 8) = local_a8;
        *(undefined4 *)(local_b8 * 8) = 0;
        *(int *)(local_b8 * 8 + 0x10) = (int)sVar4;
        lVar5 = local_b0;
        goto LAB_002d2b37;
      }
    }
    local_68 = puVar3;
    lVar5 = 0;
  }
LAB_002d2b37:
  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b4e;
  lVar5 = FUN_002c91b0(&local_98,(bVar10 != 2) + 'C',lVar5,0);
  pbVar7 = local_80;
  *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b5d;
  sVar4 = strlen((char *)pbVar7);
  local_80 = pbVar7 + sVar4;
  uVar2 = local_a0;
joined_r0x002d2c0a:
  if ((((param_2 & 1) == 0) || (uVar8 = 0, *local_80 == 0)) && (uVar8 = 0, lVar5 != 0)) {
    local_a0 = uVar2;
    *(undefined8 *)((long)&uStack_c0 + lVar1 + lVar6) = 0x2d2b89;
    uVar8 = FUN_002d2890(param_2,lVar5,uVar2,param_4);
  }
  return uVar8;
}

