
/* WARNING: Type propagation algorithm not settling */

int demangle_signature(work_stuff *work,char **mangled,string *declp)

{
  char cVar1;
  byte bVar2;
  ulong uVar3;
  ulong uVar4;
  undefined1 uVar5;
  undefined1 uVar6;
  undefined1 uVar7;
  int iVar8;
  char *pcVar9;
  bool bVar10;
  int iVar11;
  uint uVar12;
  char *pcVar13;
  byte *pbVar14;
  char *pcVar15;
  undefined1 uVar16;
  string trawname;
  string tname;
  string s;
  
  iVar8 = 1;
  uVar7 = false;
  pcVar9 = (char *)0x0;
  uVar5 = false;
  uVar6 = false;
LAB_003255c0:
  do {
    pcVar13 = *mangled;
    cVar1 = *pcVar13;
joined_r0x003255cb:
    if (cVar1 == '\0') {
      uVar12 = work->options;
      if ((!(bool)uVar6) && ((uVar12 & 0x300) != 0)) {
        iVar8 = demangle_args(work,mangled,declp);
        if (iVar8 == 0) {
          return 0;
        }
        uVar12 = work->options;
      }
      if ((uVar12 & 1) == 0) {
        return iVar8;
      }
      if (work->static_type != 0) {
        string_append(declp," static");
      }
      iVar11 = work->type_quals;
      if (iVar11 == 0) {
        return iVar8;
      }
      if (declp->b != declp->p) {
        string_append(declp," ");
        iVar11 = work->type_quals;
      }
      pcVar9 = qualifier_string(iVar11);
      if (pcVar9 == (char *)0x0) {
        return iVar8;
      }
      if (*pcVar9 == '\0') {
        return iVar8;
      }
      string_append(declp,pcVar9);
      return iVar8;
    }
    switch(cVar1) {
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
      work->temp_start = -1;
      s.e = (char *)0x0;
      if (pcVar9 == (char *)0x0) {
        pcVar9 = pcVar13;
      }
      s.p = (char *)0x0;
      s.b = (char *)0x0;
      iVar8 = register_Btype(work);
      iVar11 = demangle_class_name(work,mangled,&s);
      pcVar13 = s.p;
      if (iVar11 == 0) {
        if (s.b != (char *)0x0) {
          free(s.b);
          return 0;
        }
        return 0;
      }
      uVar4._0_4_ = work->constructor;
      uVar4._4_4_ = work->destructor;
      if ((uVar4 & 0x100000001) != 0) {
        if (1 < work->temp_start + 1U) {
          s.p = s.b + work->temp_start;
        }
        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {
          string_prependn(declp,s.b,iVar11);
        }
        if ((work->destructor & 1) == 0) {
          work->constructor = work->constructor + -1;
        }
        else {
          string_prepend(declp,"~");
          work->destructor = work->destructor + -1;
        }
      }
      iVar11 = (int)pcVar13 - (int)s.b;
      if (pcVar13 == s.b) {
        iVar11 = 0;
      }
      s.p = pcVar13;
      remember_Ktype(work,s.b,iVar11);
      iVar11 = (int)s.p - (int)s.b;
      if (s.b == s.p) {
        iVar11 = 0;
      }
      remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8);
      pcVar13 = ".";
      if ((work->options & 4) == 0) {
        pcVar13 = "::";
      }
      string_prepend(declp,pcVar13);
      if ((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)) {
        string_prependn(declp,s.b,iVar8);
      }
      if (s.b != (char *)0x0) {
        free(s.b);
      }
      remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);
      uVar12 = work->options;
      if (((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')) {
        iVar8 = 1;
        goto LAB_00325b2b;
      }
      goto joined_r0x00325745;
    default:
      if ((work->options & 0x300U) == 0) {
        return 0;
      }
      iVar8 = demangle_args(work,mangled,declp);
      uVar6 = true;
      uVar16 = iVar8 != 0 & uVar7;
      break;
    case 'B':
      iVar8 = do_type(work,mangled,&s);
      if (iVar8 != 0) {
        pcVar9 = "::";
        if ((work->options & 4) != 0) {
          pcVar9 = ".";
        }
        string_append(&s,pcVar9);
        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {
          string_prependn(declp,s.b,iVar11);
        }
        if (s.b != (char *)0x0) {
          free(s.b);
        }
      }
      uVar16 = iVar8 != 0;
LAB_003259a2:
      pcVar9 = (char *)0x0;
      uVar7 = true;
      break;
    case 'C':
    case 'V':
    case 'u':
      if (cVar1 == 'V') {
        uVar12 = 2;
      }
      else if (cVar1 == 'u') {
        uVar12 = 4;
      }
      else {
        if (cVar1 != 'C') {
                    /* WARNING: Subroutine does not return */
          abort();
        }
        uVar12 = 1;
      }
      work->type_quals = work->type_quals | uVar12;
      if (pcVar9 == (char *)0x0) {
        pcVar9 = pcVar13;
      }
      *mangled = (char *)((long)pcVar13 + 1);
      goto LAB_0032581c;
    case 'F':
      *mangled = (char *)((long)pcVar13 + 1);
      if ((work->options & 0x3c00U) != 0) {
        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);
      }
      iVar8 = demangle_args(work,mangled,declp);
      if (iVar8 == 0) {
        return 0;
      }
      uVar12 = work->options;
      if ((uVar12 & 0x2100) == 0) {
        uVar6 = true;
      }
      else {
        uVar6 = true;
        if (**mangled == '_') {
          *mangled = *mangled + 1;
          iVar8 = do_type(work,mangled,&tname);
          if (tname.b == (char *)0x0) {
            uVar16 = uVar7 & iVar8 != 0;
            pcVar9 = (char *)0x0;
            tname.b = (char *)0x0;
          }
          else {
            free(tname.b);
            tname.p = (char *)0x0;
            tname.e = (char *)0x0;
            tname.b = (char *)0x0;
            pcVar9 = (char *)0x0;
            uVar16 = uVar7 & iVar8 != 0;
          }
          break;
        }
      }
      goto LAB_00325b2b;
    case 'H':
      if ((work->options & 0x300U) == 0) {
        return 0;
      }
      iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0);
      bVar10 = true;
      if ((work->constructor & 1) != 0) {
        bVar10 = (bool)uVar5;
      }
      if (**mangled == '\0') {
        return 0;
      }
      *mangled = *mangled + 1;
      uVar16 = iVar8 != 0 & uVar7;
      uVar5 = bVar10;
      break;
    case 'K':
      iVar8 = demangle_qualified(work,mangled,declp,1,0);
      uVar16 = iVar8 != 0;
      if ((work->options & 0x300U) != 0) goto LAB_003259a2;
      uVar16 = uVar16 & uVar7;
      pcVar9 = (char *)0x0;
      break;
    case 'L':
      if ((work->options & 0x1000U) == 0) {
        return 0;
      }
      do {
        pcVar15 = pcVar13;
        *mangled = pcVar15 + 1;
        cVar1 = pcVar15[1];
        if (cVar1 == '\0') break;
        pcVar13 = pcVar15 + 1;
      } while (cVar1 != '_');
      if (cVar1 == '\0') {
        return 0;
      }
      *mangled = pcVar15 + 2;
      goto LAB_0032581c;
    case 'Q':
      iVar8 = demangle_qualified(work,mangled,declp,1,0);
      if (iVar8 == 0) {
        return 0;
      }
      remember_type(work,pcVar13,(int)*mangled - (int)pcVar13);
      uVar12 = work->options;
      if ((uVar12 & 0x300) != 0) {
        pcVar9 = (char *)0x0;
        goto joined_r0x00325745;
      }
LAB_00325b2b:
      pcVar9 = (char *)0x0;
      if ((bool)uVar7) goto joined_r0x00325745;
      goto LAB_003255c0;
    case 'S':
      if (pcVar9 == (char *)0x0) {
        pcVar9 = pcVar13;
      }
      *mangled = (char *)((long)pcVar13 + 1);
      work->static_type = 1;
LAB_0032581c:
      if (!(bool)uVar7) goto code_r0x00325824;
      goto LAB_00325740;
    case '_':
      if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {
        if ((work->options & 0x1000U) == 0) {
          return 0;
        }
        *mangled = (char *)((long)pcVar13 + 1);
        if ((*(byte *)((long)pcVar13 + 1) != 0) &&
           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {
          pbVar14 = (byte *)((long)pcVar13 + 2);
          do {
            *mangled = (char *)pbVar14;
            bVar2 = *pbVar14;
            if (bVar2 == 0) break;
            pbVar14 = pbVar14 + 1;
          } while ((_sch_istable[bVar2] & 4) != 0);
        }
        goto LAB_0032581c;
      }
      *mangled = (char *)((long)pcVar13 + 1);
      iVar8 = do_type(work,mangled,&s);
      pcVar13 = s.p;
      if (((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&
         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {
        string_prependn(declp,s.b,iVar11);
        pcVar13 = s.b;
      }
      if (pcVar13 != (char *)0x0) {
        free(pcVar13);
      }
      uVar16 = iVar8 != 0 & uVar7;
      uVar5 = true;
      break;
    case 't':
      if (pcVar9 == (char *)0x0) {
        pcVar9 = pcVar13;
      }
      trawname.e = (char *)0x0;
      trawname.p = (char *)0x0;
      trawname.b = (char *)0x0;
      tname.e = (char *)0x0;
      tname.p = (char *)0x0;
      tname.b = (char *)0x0;
      iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1);
      if (iVar8 != 0) {
        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);
      }
      pcVar9 = "::";
      if ((work->options & 4) != 0) {
        pcVar9 = ".";
      }
      string_append(&tname,pcVar9);
      if ((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)) {
        if ((work->destructor & 1) == 0) goto LAB_003256a5;
LAB_00325d78:
        string_prepend(&trawname,"~");
        string_appends(declp,&trawname,(string *)trawname.p);
        work->destructor = work->destructor + -1;
        uVar3._0_4_ = work->constructor;
        uVar3._4_4_ = work->destructor;
      }
      else {
        string_prependn(declp,tname.b,iVar11);
        if ((work->destructor & 1) != 0) goto LAB_00325d78;
LAB_003256a5:
        uVar3._0_4_ = work->constructor;
        uVar3._4_4_ = work->destructor;
      }
      if ((uVar3 & 0x100000001) != 0) {
        string_appends(declp,&trawname,(string *)trawname.p);
        work->constructor = work->constructor + -1;
      }
      if (trawname.b != (char *)0x0) {
        free(trawname.b);
        trawname.p = (char *)0x0;
        trawname.e = (char *)0x0;
        trawname.b = (char *)0x0;
      }
      uVar16 = iVar8 != 0;
      uVar7 = true;
      pcVar9 = tname.b;
      if (tname.b != (char *)0x0) {
        free(tname.b);
        tname.p = (char *)0x0;
        tname.e = (char *)0x0;
        tname.b = (char *)0x0;
        pcVar9 = (char *)0x0;
      }
    }
    if (!(bool)uVar16) goto LAB_00325766;
LAB_00325740:
    uVar12 = work->options;
joined_r0x00325745:
    if ((uVar12 & 0x2c00) != 0) {
      forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);
    }
    uVar7 = false;
    iVar8 = demangle_args(work,mangled,declp);
    uVar6 = true;
LAB_00325766:
    if (iVar8 == 0) {
      return 0;
    }
  } while( true );
code_r0x00325824:
  pcVar13 = *mangled;
  cVar1 = *pcVar13;
  goto joined_r0x003255cb;
}



/* WARNING: Type propagation algorithm not settling */

int FUN_00325580(uint *param_1,long *param_2,long *param_3)

{
  char cVar1;
  byte bVar2;
  undefined1 uVar3;
  undefined1 uVar4;
  undefined1 uVar5;
  uint uVar6;
  int iVar7;
  char *pcVar8;
  bool bVar9;
  ulong uVar10;
  char *pcVar11;
  void *pvVar12;
  byte *pbVar13;
  char *pcVar14;
  undefined1 uVar15;
  void *local_98;
  undefined8 local_90;
  undefined8 local_88;
  char *local_78;
  char *local_70;
  undefined8 local_68;
  void *local_58;
  void *local_50;
  undefined8 local_48;
  
  iVar7 = 1;
  uVar5 = false;
  pcVar8 = (char *)0x0;
  uVar3 = false;
  uVar4 = false;
LAB_003255c0:
  do {
    pcVar11 = (char *)*param_2;
    cVar1 = *pcVar11;
joined_r0x003255cb:
    if (cVar1 == '\0') {
      uVar6 = *param_1;
      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {
        iVar7 = FUN_00324c60(param_1,param_2,param_3);
        if (iVar7 == 0) {
          return 0;
        }
        uVar6 = *param_1;
      }
      if ((uVar6 & 1) == 0) {
        return iVar7;
      }
      if (param_1[0x10] != 0) {
        FUN_00320c70(param_3," static");
      }
      uVar6 = param_1[0x12];
      if (uVar6 == 0) {
        return iVar7;
      }
      if (*param_3 != param_3[1]) {
        FUN_00320c70(param_3,&DAT_003f45bf);
        uVar6 = param_1[0x12];
      }
      pcVar8 = (char *)FUN_00320790(uVar6);
      if (pcVar8 == (char *)0x0) {
        return iVar7;
      }
      if (*pcVar8 == '\0') {
        return iVar7;
      }
      FUN_00320c70(param_3,pcVar8);
      return iVar7;
    }
    switch(cVar1) {
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
      param_1[0x11] = 0xffffffff;
      local_48 = 0;
      if (pcVar8 == (char *)0x0) {
        pcVar8 = pcVar11;
      }
      local_50 = (void *)0x0;
      local_58 = (void *)0x0;
      FUN_00320670(param_1);
      iVar7 = FUN_003238a0(param_1,param_2,&local_58);
      pvVar12 = local_50;
      if (iVar7 == 0) {
        if (local_58 != (void *)0x0) {
          free(local_58);
          return 0;
        }
        return 0;
      }
      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {
        if (1 < param_1[0x11] + 1) {
          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);
        }
        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {
          FUN_00320bf0(param_3);
        }
        if ((param_1[0xf] & 1) == 0) {
          param_1[0xe] = param_1[0xe] - 1;
        }
        else {
          FUN_00320c40(param_3,&DAT_003fb32e);
          param_1[0xf] = param_1[0xf] - 1;
        }
      }
      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;
      if (pvVar12 == local_58) {
        uVar10 = 0;
      }
      local_50 = pvVar12;
      FUN_003206f0(param_1,local_58,uVar10);
      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;
      if (local_58 == local_50) {
        uVar10 = 0;
      }
      FUN_00320ad0(param_1 + 6,local_58,uVar10);
      pcVar11 = ".";
      if ((*param_1 & 4) == 0) {
        pcVar11 = "::";
      }
      FUN_00320c40(param_3,pcVar11);
      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {
        FUN_00320bf0(param_3,local_58);
      }
      if (local_58 != (void *)0x0) {
        free(local_58);
      }
      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);
      uVar6 = *param_1;
      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {
        iVar7 = 1;
        goto LAB_00325b2b;
      }
      goto joined_r0x00325745;
    default:
      if ((*param_1 & 0x300) == 0) {
        return 0;
      }
      iVar7 = FUN_00324c60(param_1,param_2,param_3);
      uVar4 = true;
      uVar15 = iVar7 != 0 & uVar5;
      break;
    case 'B':
      iVar7 = FUN_00322150(param_1,param_2,&local_58);
      if (iVar7 != 0) {
        pcVar8 = "::";
        if ((*param_1 & 4) != 0) {
          pcVar8 = ".";
        }
        FUN_00320c70(&local_58,pcVar8);
        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {
          FUN_00320bf0(param_3,local_58);
        }
        if (local_58 != (void *)0x0) {
          free(local_58);
        }
      }
      uVar15 = iVar7 != 0;
LAB_003259a2:
      pcVar8 = (char *)0x0;
      uVar5 = true;
      break;
    case 'C':
    case 'V':
    case 'u':
      if (cVar1 == 'V') {
        uVar6 = 2;
      }
      else if (cVar1 == 'u') {
        uVar6 = 4;
      }
      else {
        if (cVar1 != 'C') {
                    /* WARNING: Subroutine does not return */
          abort();
        }
        uVar6 = 1;
      }
      param_1[0x12] = param_1[0x12] | uVar6;
      if (pcVar8 == (char *)0x0) {
        pcVar8 = pcVar11;
      }
      *param_2 = (long)((long)pcVar11 + 1);
      goto LAB_0032581c;
    case 'F':
      *param_2 = (long)((long)pcVar11 + 1);
      if ((*param_1 & 0x3c00) != 0) {
        FUN_00320990(param_1 + 2,param_1 + 0xc);
      }
      iVar7 = FUN_00324c60(param_1,param_2,param_3);
      if (iVar7 == 0) {
        return 0;
      }
      uVar6 = *param_1;
      if ((uVar6 & 0x2100) == 0) {
        uVar4 = true;
      }
      else {
        uVar4 = true;
        if (*(char *)*param_2 == '_') {
          *param_2 = (long)((char *)*param_2 + 1);
          iVar7 = FUN_00322150(param_1,param_2,&local_78);
          if (local_78 == (char *)0x0) {
            uVar15 = uVar5 & iVar7 != 0;
            pcVar8 = (char *)0x0;
            local_78 = (char *)0x0;
          }
          else {
            free(local_78);
            local_70 = (char *)0x0;
            local_68 = 0;
            local_78 = (char *)0x0;
            pcVar8 = (char *)0x0;
            uVar15 = uVar5 & iVar7 != 0;
          }
          break;
        }
      }
      goto LAB_00325b2b;
    case 'H':
      if ((*param_1 & 0x300) == 0) {
        return 0;
      }
      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);
      bVar9 = true;
      if ((param_1[0xe] & 1) != 0) {
        bVar9 = (bool)uVar3;
      }
      if (*(char *)*param_2 == '\0') {
        return 0;
      }
      *param_2 = (long)((char *)*param_2 + 1);
      uVar15 = iVar7 != 0 & uVar5;
      uVar3 = bVar9;
      break;
    case 'K':
      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);
      uVar15 = iVar7 != 0;
      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;
      uVar15 = uVar15 & uVar5;
      pcVar8 = (char *)0x0;
      break;
    case 'L':
      if ((*param_1 & 0x1000) == 0) {
        return 0;
      }
      do {
        pcVar14 = pcVar11;
        *param_2 = (long)(pcVar14 + 1);
        cVar1 = pcVar14[1];
        if (cVar1 == '\0') break;
        pcVar11 = pcVar14 + 1;
      } while (cVar1 != '_');
      if (cVar1 == '\0') {
        return 0;
      }
      *param_2 = (long)(pcVar14 + 2);
      goto LAB_0032581c;
    case 'Q':
      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);
      if (iVar7 == 0) {
        return 0;
      }
      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);
      uVar6 = *param_1;
      if ((uVar6 & 0x300) != 0) {
        pcVar8 = (char *)0x0;
        goto joined_r0x00325745;
      }
LAB_00325b2b:
      pcVar8 = (char *)0x0;
      if ((bool)uVar5) goto joined_r0x00325745;
      goto LAB_003255c0;
    case 'S':
      if (pcVar8 == (char *)0x0) {
        pcVar8 = pcVar11;
      }
      *param_2 = (long)((long)pcVar11 + 1);
      param_1[0x10] = 1;
LAB_0032581c:
      if (!(bool)uVar5) goto code_r0x00325824;
      goto LAB_00325740;
    case '_':
      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {
        if ((*param_1 & 0x1000) == 0) {
          return 0;
        }
        *param_2 = (long)((long)pcVar11 + 1);
        if ((*(byte *)((long)pcVar11 + 1) != 0) &&
           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {
          pbVar13 = (byte *)((long)pcVar11 + 2);
          do {
            *param_2 = (long)pbVar13;
            bVar2 = *pbVar13;
            if (bVar2 == 0) break;
            pbVar13 = pbVar13 + 1;
          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);
        }
        goto LAB_0032581c;
      }
      *param_2 = (long)((long)pcVar11 + 1);
      iVar7 = FUN_00322150(param_1,param_2,&local_58);
      pvVar12 = local_50;
      if (((local_58 != local_50) &&
          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&
         ((int)local_50 != (int)local_58)) {
        FUN_00320bf0(param_3,local_58);
        pvVar12 = local_58;
      }
      if (pvVar12 != (void *)0x0) {
        free(pvVar12);
      }
      uVar15 = iVar7 != 0 & uVar5;
      uVar3 = true;
      break;
    case 't':
      if (pcVar8 == (char *)0x0) {
        pcVar8 = pcVar11;
      }
      local_88 = 0;
      local_90 = 0;
      local_98 = (void *)0x0;
      local_68 = 0;
      local_70 = (char *)0x0;
      local_78 = (char *)0x0;
      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);
      if (iVar7 != 0) {
        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);
      }
      pcVar8 = "::";
      if ((*param_1 & 4) != 0) {
        pcVar8 = ".";
      }
      FUN_00320c70(&local_78,pcVar8);
      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {
        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;
LAB_00325d78:
        FUN_00320c40(&local_98,&DAT_003fb32e);
        FUN_00320db0(param_3,&local_98,local_90);
        param_1[0xf] = param_1[0xf] - 1;
        uVar10 = *(ulong *)(param_1 + 0xe);
      }
      else {
        FUN_00320bf0(param_3);
        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;
LAB_003256a5:
        uVar10 = *(ulong *)(param_1 + 0xe);
      }
      if ((uVar10 & 0x100000001) != 0) {
        FUN_00320db0(param_3,&local_98,local_90);
        param_1[0xe] = param_1[0xe] - 1;
      }
      if (local_98 != (void *)0x0) {
        free(local_98);
        local_90 = 0;
        local_88 = 0;
        local_98 = (void *)0x0;
      }
      uVar15 = iVar7 != 0;
      uVar5 = true;
      pcVar8 = local_78;
      if (local_78 != (char *)0x0) {
        free(local_78);
        local_70 = (char *)0x0;
        local_68 = 0;
        local_78 = (char *)0x0;
        pcVar8 = (char *)0x0;
      }
    }
    if (!(bool)uVar15) goto LAB_00325766;
LAB_00325740:
    uVar6 = *param_1;
joined_r0x00325745:
    if ((uVar6 & 0x2c00) != 0) {
      FUN_00320990(param_1 + 2,param_1 + 0xc);
    }
    uVar5 = false;
    iVar7 = FUN_00324c60(param_1,param_2,param_3);
    uVar4 = true;
LAB_00325766:
    if (iVar7 == 0) {
      return 0;
    }
  } while( true );
code_r0x00325824:
  pcVar11 = (char *)*param_2;
  cVar1 = *pcVar11;
  goto joined_r0x003255cb;
}


PUSH R15
MOV ECX,0x1
PUSH R14
MOV EAX,ECX
XOR R14D,R14D
PUSH R13
XOR R13D,R13D
PUSH R12
LEA R12,[0x3fcde0]
PUSH RBP
MOV RBP,RSI
PUSH RBX
MOV RBX,RDI
SUB RSP,0x88
MOV qword ptr [RSP + 0x8],RDX
MOV dword ptr [RSP + 0x14],0x0
MOV dword ptr [RSP + 0x10],0x0
MOV R15,qword ptr [RBP]
MOVZX ESI,byte ptr [R15]
TEST SIL,SIL
JZ 0x00325838
LEA EDX,[RSI + -0x30]
CMP DL,0x45
JA 0x00325cc0
MOVZX EDX,DL
MOVSXD RDX,dword ptr [R12 + RDX*0x4]
ADD RDX,R12
JMP RDX
TEST R13,R13
LEA R14,[RSP + 0x20]
MOV RSI,RBP
MOV RDI,RBX
CMOVZ R13,R15
LEA R15,[RSP + 0x40]
MOV R9D,0x1
MOV RCX,R14
MOV R8D,0x1
MOV RDX,R15
MOV qword ptr [RSP + 0x30],0x0
MOV qword ptr [RSP + 0x28],0x0
MOV qword ptr [RSP + 0x20],0x0
MOV qword ptr [RSP + 0x50],0x0
MOV qword ptr [RSP + 0x48],0x0
MOV qword ptr [RSP + 0x40],0x0
CALL 0x00323ef0
TEST EAX,EAX
JNZ 0x00325dd8
TEST byte ptr [RBX],0x4
MOV dword ptr [RSP + 0x18],EAX
LEA RSI,[0x3fd999]
MOV RDI,R15
LEA RAX,[0x3e8e90]
CMOVNZ RSI,RAX
CALL 0x00320c70
MOV RSI,qword ptr [RSP + 0x40]
MOV RDX,qword ptr [RSP + 0x48]
MOV EAX,dword ptr [RSP + 0x18]
CMP RSI,RDX
JZ 0x0032569b
SUB RDX,RSI
TEST EDX,EDX
JNZ 0x00325e10
TEST byte ptr [RBX + 0x3c],0x1
JNZ 0x00325d78
MOV RDX,0x100000001
TEST qword ptr [RBX + 0x38],RDX
JNZ 0x00325d40
MOV RDI,qword ptr [RSP + 0x20]
TEST RDI,RDI
JZ 0x003256eb
MOV dword ptr [RSP + 0x18],EAX
CALL 0x00150470
MOV EAX,dword ptr [RSP + 0x18]
MOV qword ptr [RSP + 0x28],0x0
MOV qword ptr [RSP + 0x30],0x0
MOV qword ptr [RSP + 0x20],0x0
MOV R13,qword ptr [RSP + 0x40]
TEST EAX,EAX
MOV R14D,0x1
SETNZ R15B
TEST R13,R13
JZ 0x003259ab
MOV RDI,R13
MOV dword ptr [RSP + 0x18],EAX
XOR R13D,R13D
CALL 0x00150470
MOV EAX,dword ptr [RSP + 0x18]
MOV qword ptr [RSP + 0x48],0x0
MOV qword ptr [RSP + 0x50],0x0
MOV qword ptr [RSP + 0x40],0x0
TEST R15B,R15B
JZ 0x00325766
NOP dword ptr [RAX + RAX*0x1]
MOV EDX,dword ptr [RBX]
AND DH,0x2c
JNZ 0x00325b40
MOV RDX,qword ptr [RSP + 0x8]
MOV RSI,RBP
MOV RDI,RBX
XOR R14D,R14D
CALL 0x00324c60
MOV dword ptr [RSP + 0x10],0x1
TEST EAX,EAX
JNZ 0x003255c0
NOP
XOR ECX,ECX
ADD RSP,0x88
MOV EAX,ECX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EDX,dword ptr [RBX]
TEST DH,0x3
JZ 0x003257a2
TEST byte ptr [RSP + 0x14],0x1
JNZ 0x00325e40
AND DH,0x10
JZ 0x00325770
LEA RDX,[R15 + 0x1]
MOV ECX,R14D
MOV qword ptr [RBP],RDX
MOVZX EDX,byte ptr [R15 + 0x1]
AND ECX,0x1
TEST DL,DL
JZ 0x0032581c
LEA RDI,[0x3fef00]
TEST byte ptr [RDI + RDX*0x2],0x4
JZ 0x0032581c
ADD R15,0x2
JMP 0x003257e9
LEA RDI,[0x3fef00]
ADD R15,0x1
TEST byte ptr [RDI + RDX*0x2],0x4
JZ 0x0032581c
MOV qword ptr [RBP],R15
MOVZX EDX,byte ptr [R15]
TEST DL,DL
JNZ 0x003257d8
JMP 0x0032581c
TEST R13,R13
MOV ECX,R14D
CMOVZ R13,R15
ADD R15,0x1
AND ECX,0x1
MOV qword ptr [RBP],R15
MOV dword ptr [RBX + 0x40],0x1
TEST CL,CL
JNZ 0x00325740
MOV R15,qword ptr [RBP]
MOVZX ESI,byte ptr [R15]
TEST SIL,SIL
JNZ 0x003255d1
NOP dword ptr [RAX]
MOV EDX,dword ptr [RSP + 0x10]
MOV ECX,EAX
MOV EAX,dword ptr [RBX]
TEST EDX,EDX
JNZ 0x0032584d
TEST AH,0x3
JNZ 0x00325f10
TEST AL,0x1
JZ 0x00325772
MOV ESI,dword ptr [RBX + 0x40]
TEST ESI,ESI
JNZ 0x00325ec0
MOV EDI,dword ptr [RBX + 0x48]
TEST EDI,EDI
JZ 0x00325772
MOV RAX,qword ptr [RSP + 0x8]
MOV RSI,qword ptr [RAX + 0x8]
CMP qword ptr [RAX],RSI
JZ 0x00325893
MOV RDI,RAX
LEA RSI,[0x3f45bf]
MOV dword ptr [RSP + 0x10],ECX
CALL 0x00320c70
MOV EDI,dword ptr [RBX + 0x48]
MOV ECX,dword ptr [RSP + 0x10]
MOV dword ptr [RSP + 0x10],ECX
CALL 0x00320790
MOV ECX,dword ptr [RSP + 0x10]
TEST RAX,RAX
JZ 0x00325772
CMP byte ptr [RAX],0x0
JZ 0x00325772
MOV RDI,qword ptr [RSP + 0x8]
MOV RSI,RAX
CALL 0x00320c70
MOV ECX,dword ptr [RSP + 0x10]
JMP 0x00325772
MOV RDX,qword ptr [RSP + 0x8]
XOR R8D,R8D
MOV ECX,0x1
MOV RSI,RBP
MOV RDI,RBX
CALL 0x003245f0
TEST EAX,EAX
JZ 0x00325770
MOV RDX,qword ptr [RBP]
MOV RSI,R15
MOV RDI,RBX
MOV dword ptr [RSP + 0x18],EAX
SUB RDX,R15
CALL 0x00321100
MOV EDX,dword ptr [RBX]
TEST DH,0x3
JNZ 0x00325e30
MOV R15D,R14D
MOV EAX,dword ptr [RSP + 0x18]
AND R15D,0x1
JMP 0x00325b2b
TEST dword ptr [RBX],0x1000
JZ 0x00325770
JMP 0x00325943
MOV R15,RCX
LEA RCX,[R15 + 0x1]
MOV qword ptr [RBP],RCX
MOVZX EDX,byte ptr [R15 + 0x1]
TEST DL,DL
JZ 0x00325959
CMP DL,0x5f
JNZ 0x00325940
TEST DL,DL
JZ 0x00325770
ADD R15,0x2
MOV ECX,R14D
MOV qword ptr [RBP],R15
AND ECX,0x1
JMP 0x0032581c
MOV RDX,qword ptr [RSP + 0x8]
XOR R8D,R8D
MOV ECX,0x1
MOV RSI,RBP
MOV RDI,RBX
CALL 0x003245f0
TEST EAX,EAX
SETNZ R15B
TEST dword ptr [RBX],0x300
JZ 0x00325d20
XOR R13D,R13D
MOV R14D,0x1
TEST R15B,R15B
JNZ 0x00325740
JMP 0x00325766
TEST dword ptr [RBX],0x300
JZ 0x00325770
MOV RDX,qword ptr [RSP + 0x8]
XOR R9D,R9D
XOR R8D,R8D
XOR ECX,ECX
MOV RSI,RBP
MOV RDI,RBX
CALL 0x00323ef0
TEST byte ptr [RBX + 0x38],0x1
MOV EDX,0x1
CMOVNZ EDX,dword ptr [RSP + 0x14]
MOV dword ptr [RSP + 0x14],EDX
MOV RDX,qword ptr [RBP]
CMP byte ptr [RDX],0x0
JZ 0x00325770
ADD RDX,0x1
TEST EAX,EAX
SETNZ R15B
MOV qword ptr [RBP],RDX
AND R15D,R14D
JMP 0x003259ab
CMP SIL,0x56
JZ 0x00325d30
CMP SIL,0x75
JZ 0x00325d10
CMP SIL,0x43
JNZ 0x00325ff8
MOV EDX,0x1
OR dword ptr [RBX + 0x48],EDX
TEST R13,R13
MOV ECX,R14D
CMOVZ R13,R15
ADD R15,0x1
AND ECX,0x1
MOV qword ptr [RBP],R15
JMP 0x0032581c
LEA R13,[RSP + 0x60]
MOV RSI,RBP
MOV RDI,RBX
MOV RDX,R13
CALL 0x00322150
TEST EAX,EAX
JZ 0x00325ac8
TEST byte ptr [RBX],0x4
MOV dword ptr [RSP + 0x18],EAX
LEA RSI,[0x3fd999]
MOV RDI,R13
LEA RAX,[0x3e8e90]
CMOVNZ RSI,RAX
CALL 0x00320c70
MOV RDI,qword ptr [RSP + 0x60]
MOV RDX,qword ptr [RSP + 0x68]
MOV EAX,dword ptr [RSP + 0x18]
CMP RDI,RDX
JZ 0x00325ab6
SUB RDX,RDI
TEST EDX,EDX
JNZ 0x00325ef5
TEST RDI,RDI
JZ 0x00325ac8
MOV dword ptr [RSP + 0x18],EAX
CALL 0x00150470
MOV EAX,dword ptr [RSP + 0x18]
TEST EAX,EAX
SETNZ R15B
JMP 0x003259a2
ADD R15,0x1
MOV qword ptr [RBP],R15
TEST dword ptr [RBX],0x3c00
JNZ 0x00325dc0
MOV RDX,qword ptr [RSP + 0x8]
MOV RSI,RBP
MOV RDI,RBX
CALL 0x00324c60
TEST EAX,EAX
JZ 0x00325770
MOV EDX,dword ptr [RBX]
MOV R15D,R14D
AND R15D,0x1
TEST DH,0x21
JZ 0x00325e00
MOV RSI,qword ptr [RBP]
MOV dword ptr [RSP + 0x10],0x1
CMP byte ptr [RSI],0x5f
JZ 0x00325f73
XOR R13D,R13D
TEST R15B,R15B
JZ 0x003255c0
AND DH,0x2c
JZ 0x0032574b
LEA RSI,[RBX + 0x30]
LEA RDI,[RBX + 0x8]
CALL 0x00320990
JMP 0x0032574b
MOV dword ptr [RBX + 0x44],0xffffffff
TEST R13,R13
MOV RDI,RBX
MOV qword ptr [RSP + 0x70],0x0
CMOVZ R13,R15
MOV qword ptr [RSP + 0x68],0x0
MOV qword ptr [RSP + 0x60],0x0
CALL 0x00320670
LEA RDX,[RSP + 0x60]
MOV RSI,RBP
MOV RDI,RBX
MOV R15D,EAX
CALL 0x003238a0
TEST EAX,EAX
JZ 0x00325cf8
MOV RCX,qword ptr [RSP + 0x68]
MOV RSI,qword ptr [RSP + 0x60]
MOV RAX,0x100000001
TEST qword ptr [RBX + 0x38],RAX
JZ 0x00325bf9
MOVSXD RAX,dword ptr [RBX + 0x44]
MOV RDX,RCX
LEA EDI,[RAX + 0x1]
CMP EDI,0x1
JBE 0x00325bd6
LEA RDX,[RSI + RAX*0x1]
MOV qword ptr [RSP + 0x68],RDX
CMP RSI,RDX
JZ 0x00325be6
SUB RDX,RSI
TEST EDX,EDX
JNZ 0x00325f5a
TEST byte ptr [RBX + 0x3c],0x1
JNZ 0x00325f31
SUB dword ptr [RBX + 0x38],0x1
MOV RSI,qword ptr [RSP + 0x60]
MOV RDX,RCX
XOR EAX,EAX
MOV RDI,RBX
MOV qword ptr [RSP + 0x68],RCX
SUB RDX,RSI
CMP RCX,RSI
CMOVZ EDX,EAX
CALL 0x003206f0
MOV RCX,qword ptr [RSP + 0x68]
MOV RSI,qword ptr [RSP + 0x60]
MOV EAX,0x0
LEA RDI,[RBX + 0x18]
MOV RDX,RCX
SUB RDX,RSI
CMP RSI,RCX
MOV ECX,R15D
CMOVZ EDX,EAX
CALL 0x00320ad0
TEST byte ptr [RBX],0x4
MOV RDI,qword ptr [RSP + 0x8]
LEA RAX,[0x3fd999]
LEA RSI,[0x3e8e90]
CMOVZ RSI,RAX
CALL 0x00320c40
MOV RDI,qword ptr [RSP + 0x60]
MOV RDX,qword ptr [RSP + 0x68]
CMP RDI,RDX
JZ 0x00325c74
SUB RDX,RDI
TEST EDX,EDX
JNZ 0x00325ede
TEST RDI,RDI
JZ 0x00325c7e
CALL 0x00150470
MOV RDX,qword ptr [RBP]
MOV RSI,R13
MOV RDI,RBX
SUB RDX,R13
CALL 0x00321100
MOV EDX,dword ptr [RBX]
TEST DH,0x23
JZ 0x00325ca7
MOV RAX,qword ptr [RBP]
XOR R13D,R13D
CMP byte ptr [RAX],0x46
JNZ 0x00325742
MOV R15D,R14D
MOV EAX,0x1
AND R15D,0x1
JMP 0x00325b2b
TEST dword ptr [RBX],0x300
JZ 0x00325770
MOV RDX,qword ptr [RSP + 0x8]
MOV RSI,RBP
MOV RDI,RBX
CALL 0x00324c60
MOV dword ptr [RSP + 0x10],0x1
TEST EAX,EAX
SETNZ R15B
AND R15D,R14D
JMP 0x003259ab
MOV RDI,qword ptr [RSP + 0x60]
TEST RDI,RDI
JZ 0x00325770
CALL 0x00150470
JMP 0x00325770
MOV EDX,0x4
JMP 0x00325a43
AND R15D,R14D
XOR R13D,R13D
JMP 0x003259ab
MOV EDX,0x2
JMP 0x00325a43
MOV RDI,qword ptr [RSP + 0x8]
MOV RDX,qword ptr [RSP + 0x28]
MOV RSI,R14
MOV dword ptr [RSP + 0x18],EAX
CALL 0x00320db0
MOV RDI,qword ptr [RSP + 0x20]
SUB dword ptr [RBX + 0x38],0x1
MOV EAX,dword ptr [RSP + 0x18]
TEST RDI,RDI
JNZ 0x003256c3
JMP 0x003256eb
LEA RSI,[0x3fb32e]
MOV RDI,R14
MOV dword ptr [RSP + 0x18],EAX
CALL 0x00320c40
MOV RDX,qword ptr [RSP + 0x28]
MOV RDI,qword ptr [RSP + 0x8]
MOV RSI,R14
CALL 0x00320db0
SUB dword ptr [RBX + 0x3c],0x1
MOV EAX,dword ptr [RSP + 0x18]
MOV RDX,0x100000001
TEST qword ptr [RBX + 0x38],RDX
JZ 0x003256b9
JMP 0x00325d40
LEA RSI,[RBX + 0x30]
LEA RDI,[RBX + 0x8]
CALL 0x00320990
JMP 0x00325aec
MOV RDX,qword ptr [RBP]
MOV RSI,R13
MOV RDI,RBX
MOV dword ptr [RSP + 0x18],EAX
SUB RDX,R13
CALL 0x00321100
MOV EAX,dword ptr [RSP + 0x18]
JMP 0x0032565c
MOV dword ptr [RSP + 0x10],0x1
JMP 0x00325b2b
MOV RDI,qword ptr [RSP + 0x8]
CALL 0x00320bf0
MOV EAX,dword ptr [RSP + 0x18]
TEST byte ptr [RBX + 0x3c],0x1
JZ 0x003256a5
JMP 0x00325d78
XOR R13D,R13D
JMP 0x00325742
ADD R15,0x1
MOV RDI,RBX
MOV RSI,RBP
MOV qword ptr [RBP],R15
LEA R15,[RSP + 0x60]
MOV RDX,R15
CALL 0x00322150
MOV RDI,qword ptr [RSP + 0x68]
CMP qword ptr [RSP + 0x60],RDI
JZ 0x00325e98
MOV RDI,R15
LEA RSI,[0x3f45bf]
MOV dword ptr [RSP + 0x14],EAX
CALL 0x00320c70
MOV RDI,qword ptr [RSP + 0x60]
MOV RDX,qword ptr [RSP + 0x68]
MOV EAX,dword ptr [RSP + 0x14]
CMP RDI,RDX
JZ 0x00325e98
SUB RDX,RDI
TEST EDX,EDX
JNZ 0x00325fd0
TEST RDI,RDI
JZ 0x00325eaa
MOV dword ptr [RSP + 0x14],EAX
CALL 0x00150470
MOV EAX,dword ptr [RSP + 0x14]
TEST EAX,EAX
MOV dword ptr [RSP + 0x14],0x1
SETNZ R15B
AND R15D,R14D
JMP 0x003259ab
MOV RDI,qword ptr [RSP + 0x8]
LEA RSI,[0x3fc5c5]
MOV dword ptr [RSP + 0x10],ECX
CALL 0x00320c70
MOV ECX,dword ptr [RSP + 0x10]
JMP 0x00325860
MOV RSI,RDI
MOV RDI,qword ptr [RSP + 0x8]
CALL 0x00320bf0
MOV RDI,qword ptr [RSP + 0x60]
JMP 0x00325c74
MOV RSI,RDI
MOV RDI,qword ptr [RSP + 0x8]
CALL 0x00320bf0
MOV RDI,qword ptr [RSP + 0x60]
MOV EAX,dword ptr [RSP + 0x18]
JMP 0x00325ab6
MOV RDX,qword ptr [RSP + 0x8]
MOV RSI,RBP
MOV RDI,RBX
CALL 0x00324c60
MOV ECX,EAX
TEST EAX,EAX
JZ 0x00325770
MOV EAX,dword ptr [RBX]
JMP 0x0032584d
MOV RDI,qword ptr [RSP + 0x8]
LEA RSI,[0x3fb32e]
MOV qword ptr [RSP + 0x18],RCX
CALL 0x00320c40
SUB dword ptr [RBX + 0x3c],0x1
MOV RSI,qword ptr [RSP + 0x60]
MOV RCX,qword ptr [RSP + 0x18]
JMP 0x00325bf9
MOV RDI,qword ptr [RSP + 0x8]
MOV qword ptr [RSP + 0x18],RCX
CALL 0x00320bf0
MOV RCX,qword ptr [RSP + 0x18]
JMP 0x00325be6
ADD RSI,0x1
LEA RDX,[RSP + 0x40]
MOV RDI,RBX
MOV qword ptr [RBP],RSI
MOV RSI,RBP
CALL 0x00322150
MOV R13,qword ptr [RSP + 0x40]
TEST R13,R13
JZ 0x00325feb
MOV RDI,R13
MOV dword ptr [RSP + 0x18],EAX
CALL 0x00150470
MOV EAX,dword ptr [RSP + 0x18]
MOV qword ptr [RSP + 0x48],0x0
MOV qword ptr [RSP + 0x50],0x0
MOV qword ptr [RSP + 0x40],0x0
TEST EAX,EAX
SETNZ DL
XOR R13D,R13D
AND R15D,EDX
JMP 0x003259ab
MOV RSI,RDI
MOV RDI,qword ptr [RSP + 0x8]
CALL 0x00320bf0
MOV RDI,qword ptr [RSP + 0x60]
MOV EAX,dword ptr [RSP + 0x14]
JMP 0x00325e98
TEST EAX,EAX
SETNZ DL
AND R15D,EDX
JMP 0x003259ab
CALL 0x001501a0
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n\nint FUN_00325580(uint *param_1,long *param_2,long *param_3)\n\n{\n  char cVar1;\n  byte bVar2;\n  undefined1 uVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  uint uVar6;\n  int iVar7;\n  char *pcVar8;\n  bool bVar9;\n  ulong uVar10;\n  char *pcVar11;\n  void *pvVar12;\n  byte *pbVar13;\n  char *pcVar14;\n  undefined1 uVar15;\n  void *local_98;\n  undefined8 local_90;\n  undefined8 local_88;\n  char *local_78;\n  char *local_70;\n  undefined8 local_68;\n  void *local_58;\n  void *local_50;\n  undefined8 local_48;\n  \n  iVar7 = 1;\n  uVar5 = false;\n  pcVar8 = (char *)0x0;\n  uVar3 = false;\n  uVar4 = false;\nLAB_003255c0:\n  do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );\ncode_r0x00325824:\n  pcVar11 = (char *)*param_2;\n  cVar1 = *pcVar11;\n  goto joined_r0x003255cb;\n}\n\n" comment (function_definition "int FUN_00325580(uint *param_1,long *param_2,long *param_3)\n\n{\n  char cVar1;\n  byte bVar2;\n  undefined1 uVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  uint uVar6;\n  int iVar7;\n  char *pcVar8;\n  bool bVar9;\n  ulong uVar10;\n  char *pcVar11;\n  void *pvVar12;\n  byte *pbVar13;\n  char *pcVar14;\n  undefined1 uVar15;\n  void *local_98;\n  undefined8 local_90;\n  undefined8 local_88;\n  char *local_78;\n  char *local_70;\n  undefined8 local_68;\n  void *local_58;\n  void *local_50;\n  undefined8 local_48;\n  \n  iVar7 = 1;\n  uVar5 = false;\n  pcVar8 = (char *)0x0;\n  uVar3 = false;\n  uVar4 = false;\nLAB_003255c0:\n  do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );\ncode_r0x00325824:\n  pcVar11 = (char *)*param_2;\n  cVar1 = *pcVar11;\n  goto joined_r0x003255cb;\n}" primitive_type (function_declarator "FUN_00325580(uint *param_1,long *param_2,long *param_3)" identifier (parameter_list "(uint *param_1,long *param_2,long *param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long *param_3" (sized_type_specifier "long" long) (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  char cVar1;\n  byte bVar2;\n  undefined1 uVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  uint uVar6;\n  int iVar7;\n  char *pcVar8;\n  bool bVar9;\n  ulong uVar10;\n  char *pcVar11;\n  void *pvVar12;\n  byte *pbVar13;\n  char *pcVar14;\n  undefined1 uVar15;\n  void *local_98;\n  undefined8 local_90;\n  undefined8 local_88;\n  char *local_78;\n  char *local_70;\n  undefined8 local_68;\n  void *local_58;\n  void *local_50;\n  undefined8 local_48;\n  \n  iVar7 = 1;\n  uVar5 = false;\n  pcVar8 = (char *)0x0;\n  uVar3 = false;\n  uVar4 = false;\nLAB_003255c0:\n  do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );\ncode_r0x00325824:\n  pcVar11 = (char *)*param_2;\n  cVar1 = *pcVar11;\n  goto joined_r0x003255cb;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "undefined1 uVar3;" type_identifier identifier ;) (declaration "undefined1 uVar4;" type_identifier identifier ;) (declaration "undefined1 uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "ulong uVar10;" type_identifier identifier ;) (declaration "char *pcVar11;" primitive_type (pointer_declarator "*pcVar11" * identifier) ;) (declaration "void *pvVar12;" primitive_type (pointer_declarator "*pvVar12" * identifier) ;) (declaration "byte *pbVar13;" type_identifier (pointer_declarator "*pbVar13" * identifier) ;) (declaration "char *pcVar14;" primitive_type (pointer_declarator "*pcVar14" * identifier) ;) (declaration "undefined1 uVar15;" type_identifier identifier ;) (declaration "void *local_98;" primitive_type (pointer_declarator "*local_98" * identifier) ;) (declaration "undefined8 local_90;" type_identifier identifier ;) (declaration "undefined8 local_88;" type_identifier identifier ;) (declaration "char *local_78;" primitive_type (pointer_declarator "*local_78" * identifier) ;) (declaration "char *local_70;" primitive_type (pointer_declarator "*local_70" * identifier) ;) (declaration "undefined8 local_68;" type_identifier identifier ;) (declaration "void *local_58;" primitive_type (pointer_declarator "*local_58" * identifier) ;) (declaration "void *local_50;" primitive_type (pointer_declarator "*local_50" * identifier) ;) (declaration "undefined8 local_48;" type_identifier identifier ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (expression_statement "uVar5 = false;" (assignment_expression "uVar5 = false" identifier = false) ;) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar3 = false;" (assignment_expression "uVar3 = false" identifier = false) ;) (expression_statement "uVar4 = false;" (assignment_expression "uVar4 = false" identifier = false) ;) (labeled_statement "LAB_003255c0:\n  do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );" do (compound_statement "{\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  }" { (expression_statement "pcVar11 = (char *)*param_2;" (assignment_expression "pcVar11 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "cVar1 = *pcVar11;" (assignment_expression "cVar1 = *pcVar11" identifier = (pointer_expression "*pcVar11" * identifier)) ;) (labeled_statement "joined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }" statement_identifier : (if_statement "if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }" { (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }" if (parenthesized_expression "((!(bool)uVar4) && ((uVar6 & 0x300) != 0))" ( (binary_expression "(!(bool)uVar4) && ((uVar6 & 0x300) != 0)" (parenthesized_expression "(!(bool)uVar4)" ( (unary_expression "!(bool)uVar4" ! (cast_expression "(bool)uVar4" ( (type_descriptor "bool" primitive_type) ) identifier)) )) && (parenthesized_expression "((uVar6 & 0x300) != 0)" ( (binary_expression "(uVar6 & 0x300) != 0" (parenthesized_expression "(uVar6 & 0x300)" ( (binary_expression "uVar6 & 0x300" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }" { (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" identifier = (call_expression "FUN_00324c60(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar7 == 0) {\n          return 0;\n        }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) })) (if_statement "if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }" if (parenthesized_expression "((uVar6 & 1) == 0)" ( (binary_expression "(uVar6 & 1) == 0" (parenthesized_expression "(uVar6 & 1)" ( (binary_expression "uVar6 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        return iVar7;\n      }" { (return_statement "return iVar7;" return identifier ;) })) (if_statement "if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }" if (parenthesized_expression "(param_1[0x10] != 0)" ( (binary_expression "param_1[0x10] != 0" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        FUN_00320c70(param_3," static");\n      }" { (expression_statement "FUN_00320c70(param_3," static");" (call_expression "FUN_00320c70(param_3," static")" identifier (argument_list "(param_3," static")" ( identifier , (string_literal "" static"" " string_content ") ))) ;) })) (expression_statement "uVar6 = param_1[0x12];" (assignment_expression "uVar6 = param_1[0x12]" identifier = (subscript_expression "param_1[0x12]" identifier [ number_literal ])) ;) (if_statement "if (uVar6 == 0) {\n        return iVar7;\n      }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        return iVar7;\n      }" { (return_statement "return iVar7;" return identifier ;) })) (if_statement "if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }" if (parenthesized_expression "(*param_3 != param_3[1])" ( (binary_expression "*param_3 != param_3[1]" (pointer_expression "*param_3" * identifier) != (subscript_expression "param_3[1]" identifier [ number_literal ])) )) (compound_statement "{\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }" { (expression_statement "FUN_00320c70(param_3,&DAT_003f45bf);" (call_expression "FUN_00320c70(param_3,&DAT_003f45bf)" identifier (argument_list "(param_3,&DAT_003f45bf)" ( identifier , (pointer_expression "&DAT_003f45bf" & identifier) ))) ;) (expression_statement "uVar6 = param_1[0x12];" (assignment_expression "uVar6 = param_1[0x12]" identifier = (subscript_expression "param_1[0x12]" identifier [ number_literal ])) ;) })) (expression_statement "pcVar8 = (char *)FUN_00320790(uVar6);" (assignment_expression "pcVar8 = (char *)FUN_00320790(uVar6)" identifier = (cast_expression "(char *)FUN_00320790(uVar6)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00320790(uVar6)" identifier (argument_list "(uVar6)" ( identifier ))))) ;) (if_statement "if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return iVar7;\n      }" { (return_statement "return iVar7;" return identifier ;) })) (if_statement "if (*pcVar8 == '\0') {\n        return iVar7;\n      }" if (parenthesized_expression "(*pcVar8 == '\0')" ( (binary_expression "*pcVar8 == '\0'" (pointer_expression "*pcVar8" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return iVar7;\n      }" { (return_statement "return iVar7;" return identifier ;) })) (expression_statement "FUN_00320c70(param_3,pcVar8);" (call_expression "FUN_00320c70(param_3,pcVar8)" identifier (argument_list "(param_3,pcVar8)" ( identifier , identifier ))) ;) (return_statement "return iVar7;" return identifier ;) }))) (switch_statement "switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }" switch (parenthesized_expression "(cVar1)" ( identifier )) (compound_statement "{\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }" { (case_statement "case '0':" case (char_literal "'0'" ' character ') :) (case_statement "case '1':" case (char_literal "'1'" ' character ') :) (case_statement "case '2':" case (char_literal "'2'" ' character ') :) (case_statement "case '3':" case (char_literal "'3'" ' character ') :) (case_statement "case '4':" case (char_literal "'4'" ' character ') :) (case_statement "case '5':" case (char_literal "'5'" ' character ') :) (case_statement "case '6':" case (char_literal "'6'" ' character ') :) (case_statement "case '7':" case (char_literal "'7'" ' character ') :) (case_statement "case '8':" case (char_literal "'8'" ' character ') :) (case_statement "case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;" case (char_literal "'9'" ' character ') : (expression_statement "param_1[0x11] = 0xffffffff;" (assignment_expression "param_1[0x11] = 0xffffffff" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" identifier = number_literal) ;) (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" { (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" identifier = identifier) ;) })) (expression_statement "local_50 = (void *)0x0;" (assignment_expression "local_50 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_58 = (void *)0x0;" (assignment_expression "local_58 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "FUN_00320670(param_1);" (call_expression "FUN_00320670(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "iVar7 = FUN_003238a0(param_1,param_2,&local_58);" (assignment_expression "iVar7 = FUN_003238a0(param_1,param_2,&local_58)" identifier = (call_expression "FUN_003238a0(param_1,param_2,&local_58)" identifier (argument_list "(param_1,param_2,&local_58)" ( identifier , identifier , (pointer_expression "&local_58" & identifier) )))) ;) (expression_statement "pvVar12 = local_50;" (assignment_expression "pvVar12 = local_50" identifier = identifier) ;) (if_statement "if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }" { (if_statement "if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }" if (parenthesized_expression "(local_58 != (void *)0x0)" ( (binary_expression "local_58 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          free(local_58);\n          return 0;\n        }" { (expression_statement "free(local_58);" (call_expression "free(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }" if (parenthesized_expression "((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0)" ( (binary_expression "(*(ulong *)(param_1 + 0xe) & 0x100000001) != 0" (parenthesized_expression "(*(ulong *)(param_1 + 0xe) & 0x100000001)" ( (binary_expression "*(ulong *)(param_1 + 0xe) & 0x100000001" (pointer_expression "*(ulong *)(param_1 + 0xe)" * (cast_expression "(ulong *)(param_1 + 0xe)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }" { (if_statement "if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }" if (parenthesized_expression "(1 < param_1[0x11] + 1)" ( (binary_expression "1 < param_1[0x11] + 1" number_literal < (binary_expression "param_1[0x11] + 1" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) + number_literal)) )) (compound_statement "{\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }" { (expression_statement "local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);" (assignment_expression "local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11])" identifier = (cast_expression "(void *)((long)local_58 + (long)(int)param_1[0x11])" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)local_58 + (long)(int)param_1[0x11])" ( (binary_expression "(long)local_58 + (long)(int)param_1[0x11]" (cast_expression "(long)local_58" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (cast_expression "(long)(int)param_1[0x11]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_1[0x11]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0x11]" identifier [ number_literal ])))) )))) ;) })) (if_statement "if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }" if (parenthesized_expression "((local_58 != local_50) && ((int)local_50 != (int)local_58))" ( (binary_expression "(local_58 != local_50) && ((int)local_50 != (int)local_58)" (parenthesized_expression "(local_58 != local_50)" ( (binary_expression "local_58 != local_50" identifier != identifier) )) && (parenthesized_expression "((int)local_50 != (int)local_58)" ( (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier) != (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n          FUN_00320bf0(param_3);\n        }" { (expression_statement "FUN_00320bf0(param_3);" (call_expression "FUN_00320bf0(param_3)" identifier (argument_list "(param_3)" ( identifier ))) ;) })) (if_statement "if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }" if (parenthesized_expression "((param_1[0xf] & 1) == 0)" ( (binary_expression "(param_1[0xf] & 1) == 0" (parenthesized_expression "(param_1[0xf] & 1)" ( (binary_expression "param_1[0xf] & 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n          param_1[0xe] = param_1[0xe] - 1;\n        }" { (expression_statement "param_1[0xe] = param_1[0xe] - 1;" (assignment_expression "param_1[0xe] = param_1[0xe] - 1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) = (binary_expression "param_1[0xe] - 1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) - number_literal)) ;) }) (else_clause "else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }" else (compound_statement "{\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }" { (expression_statement "FUN_00320c40(param_3,&DAT_003fb32e);" (call_expression "FUN_00320c40(param_3,&DAT_003fb32e)" identifier (argument_list "(param_3,&DAT_003fb32e)" ( identifier , (pointer_expression "&DAT_003fb32e" & identifier) ))) ;) (expression_statement "param_1[0xf] = param_1[0xf] - 1;" (assignment_expression "param_1[0xf] = param_1[0xf] - 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) = (binary_expression "param_1[0xf] - 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) - number_literal)) ;) }))) })) (expression_statement "uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;" (assignment_expression "uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff" identifier = (binary_expression "(long)pvVar12 - (long)local_58 & 0xffffffff" (binary_expression "(long)pvVar12 - (long)local_58" (cast_expression "(long)pvVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)local_58" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) & number_literal)) ;) (if_statement "if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }" if (parenthesized_expression "(pvVar12 == local_58)" ( (binary_expression "pvVar12 == local_58" identifier == identifier) )) (compound_statement "{\n        uVar10 = 0;\n      }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) })) (expression_statement "local_50 = pvVar12;" (assignment_expression "local_50 = pvVar12" identifier = identifier) ;) (expression_statement "FUN_003206f0(param_1,local_58,uVar10);" (call_expression "FUN_003206f0(param_1,local_58,uVar10)" identifier (argument_list "(param_1,local_58,uVar10)" ( identifier , identifier , identifier ))) ;) (expression_statement "uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;" (assignment_expression "uVar10 = (long)local_50 - (long)local_58 & 0xffffffff" identifier = (binary_expression "(long)local_50 - (long)local_58 & 0xffffffff" (binary_expression "(long)local_50 - (long)local_58" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)local_58" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) & number_literal)) ;) (if_statement "if (local_58 == local_50) {\n        uVar10 = 0;\n      }" if (parenthesized_expression "(local_58 == local_50)" ( (binary_expression "local_58 == local_50" identifier == identifier) )) (compound_statement "{\n        uVar10 = 0;\n      }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) })) (expression_statement "FUN_00320ad0(param_1 + 6,local_58,uVar10);" (call_expression "FUN_00320ad0(param_1 + 6,local_58,uVar10)" identifier (argument_list "(param_1 + 6,local_58,uVar10)" ( (binary_expression "param_1 + 6" identifier + number_literal) , identifier , identifier ))) ;) (expression_statement "pcVar11 = ".";" (assignment_expression "pcVar11 = "."" identifier = (string_literal ""."" " string_content ")) ;) (if_statement "if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }" if (parenthesized_expression "((*param_1 & 4) == 0)" ( (binary_expression "(*param_1 & 4) == 0" (parenthesized_expression "(*param_1 & 4)" ( (binary_expression "*param_1 & 4" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        pcVar11 = "::";\n      }" { (expression_statement "pcVar11 = "::";" (assignment_expression "pcVar11 = "::"" identifier = (string_literal ""::"" " string_content ")) ;) })) (expression_statement "FUN_00320c40(param_3,pcVar11);" (call_expression "FUN_00320c40(param_3,pcVar11)" identifier (argument_list "(param_3,pcVar11)" ( identifier , identifier ))) ;) (if_statement "if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }" if (parenthesized_expression "((local_58 != local_50) && ((int)local_50 != (int)local_58))" ( (binary_expression "(local_58 != local_50) && ((int)local_50 != (int)local_58)" (parenthesized_expression "(local_58 != local_50)" ( (binary_expression "local_58 != local_50" identifier != identifier) )) && (parenthesized_expression "((int)local_50 != (int)local_58)" ( (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier) != (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        FUN_00320bf0(param_3,local_58);\n      }" { (expression_statement "FUN_00320bf0(param_3,local_58);" (call_expression "FUN_00320bf0(param_3,local_58)" identifier (argument_list "(param_3,local_58)" ( identifier , identifier ))) ;) })) (if_statement "if (local_58 != (void *)0x0) {\n        free(local_58);\n      }" if (parenthesized_expression "(local_58 != (void *)0x0)" ( (binary_expression "local_58 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(local_58);\n      }" { (expression_statement "free(local_58);" (call_expression "free(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) })) (expression_statement "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);" (call_expression "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8)" identifier (argument_list "(param_1,pcVar8,*param_2 - (long)pcVar8)" ( identifier , identifier , (binary_expression "*param_2 - (long)pcVar8" (pointer_expression "*param_2" * identifier) - (cast_expression "(long)pcVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }" if (parenthesized_expression "(((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F'))" ( (binary_expression "((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')" (parenthesized_expression "((uVar6 & 0x2300) == 0)" ( (binary_expression "(uVar6 & 0x2300) == 0" (parenthesized_expression "(uVar6 & 0x2300)" ( (binary_expression "uVar6 & 0x2300" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')" ( (comma_expression "pcVar8 = (char *)0x0, *(char *)*param_2 == 'F'" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) , (binary_expression "*(char *)*param_2 == 'F'" (pointer_expression "*(char *)*param_2" * (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) == (char_literal "'F'" ' character '))) ))) )) (compound_statement "{\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }" { (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_00325b2b;" goto statement_identifier ;) })) (goto_statement "goto joined_r0x00325745;" goto statement_identifier ;)) (case_statement "default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;" default : (if_statement "if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((*param_1 & 0x300) == 0)" ( (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" ( (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" identifier = (call_expression "FUN_00324c60(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" identifier = true) ;) (expression_statement "uVar15 = iVar7 != 0 & uVar5;" (assignment_expression "uVar15 = iVar7 != 0 & uVar5" identifier = (binary_expression "iVar7 != 0 & uVar5" (binary_expression "iVar7 != 0" identifier != number_literal) & identifier)) ;) (break_statement "break;" break ;)) (case_statement "case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;" case (char_literal "'B'" ' character ') : (expression_statement "iVar7 = FUN_00322150(param_1,param_2,&local_58);" (assignment_expression "iVar7 = FUN_00322150(param_1,param_2,&local_58)" identifier = (call_expression "FUN_00322150(param_1,param_2,&local_58)" identifier (argument_list "(param_1,param_2,&local_58)" ( identifier , identifier , (pointer_expression "&local_58" & identifier) )))) ;) (if_statement "if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }" { (expression_statement "pcVar8 = "::";" (assignment_expression "pcVar8 = "::"" identifier = (string_literal ""::"" " string_content ")) ;) (if_statement "if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }" if (parenthesized_expression "((*param_1 & 4) != 0)" ( (binary_expression "(*param_1 & 4) != 0" (parenthesized_expression "(*param_1 & 4)" ( (binary_expression "*param_1 & 4" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n          pcVar8 = ".";\n        }" { (expression_statement "pcVar8 = ".";" (assignment_expression "pcVar8 = "."" identifier = (string_literal ""."" " string_content ")) ;) })) (expression_statement "FUN_00320c70(&local_58,pcVar8);" (call_expression "FUN_00320c70(&local_58,pcVar8)" identifier (argument_list "(&local_58,pcVar8)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (if_statement "if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }" if (parenthesized_expression "((local_58 != local_50) && ((int)local_50 != (int)local_58))" ( (binary_expression "(local_58 != local_50) && ((int)local_50 != (int)local_58)" (parenthesized_expression "(local_58 != local_50)" ( (binary_expression "local_58 != local_50" identifier != identifier) )) && (parenthesized_expression "((int)local_50 != (int)local_58)" ( (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier) != (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n          FUN_00320bf0(param_3,local_58);\n        }" { (expression_statement "FUN_00320bf0(param_3,local_58);" (call_expression "FUN_00320bf0(param_3,local_58)" identifier (argument_list "(param_3,local_58)" ( identifier , identifier ))) ;) })) (if_statement "if (local_58 != (void *)0x0) {\n          free(local_58);\n        }" if (parenthesized_expression "(local_58 != (void *)0x0)" ( (binary_expression "local_58 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          free(local_58);\n        }" { (expression_statement "free(local_58);" (call_expression "free(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) })) })) (expression_statement "uVar15 = iVar7 != 0;" (assignment_expression "uVar15 = iVar7 != 0" identifier = (binary_expression "iVar7 != 0" identifier != number_literal)) ;) (labeled_statement "LAB_003259a2:\n      pcVar8 = (char *)0x0;" statement_identifier : (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (expression_statement "uVar5 = true;" (assignment_expression "uVar5 = true" identifier = true) ;) (break_statement "break;" break ;)) (case_statement "case 'C':" case (char_literal "'C'" ' character ') :) (case_statement "case 'V':" case (char_literal "'V'" ' character ') :) (case_statement "case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;" case (char_literal "'u'" ' character ') : (if_statement "if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }" if (parenthesized_expression "(cVar1 == 'V')" ( (binary_expression "cVar1 == 'V'" identifier == (char_literal "'V'" ' character ')) )) (compound_statement "{\n        uVar6 = 2;\n      }" { (expression_statement "uVar6 = 2;" (assignment_expression "uVar6 = 2" identifier = number_literal) ;) }) (else_clause "else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }" else (if_statement "if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }" if (parenthesized_expression "(cVar1 == 'u')" ( (binary_expression "cVar1 == 'u'" identifier == (char_literal "'u'" ' character ')) )) (compound_statement "{\n        uVar6 = 4;\n      }" { (expression_statement "uVar6 = 4;" (assignment_expression "uVar6 = 4" identifier = number_literal) ;) }) (else_clause "else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }" else (compound_statement "{\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar6 = 1;\n      }" { (if_statement "if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }" if (parenthesized_expression "(cVar1 != 'C')" ( (binary_expression "cVar1 != 'C'" identifier != (char_literal "'C'" ' character ')) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }" { comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar6 = 1;" (assignment_expression "uVar6 = 1" identifier = number_literal) ;) }))))) (expression_statement "param_1[0x12] = param_1[0x12] | uVar6;" (assignment_expression "param_1[0x12] = param_1[0x12] | uVar6" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = (binary_expression "param_1[0x12] | uVar6" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) | identifier)) ;) (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" { (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" identifier = identifier) ;) })) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((long)pcVar11 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (goto_statement "goto LAB_0032581c;" goto statement_identifier ;)) (case_statement "case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;" case (char_literal "'F'" ' character ') : (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((long)pcVar11 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (if_statement "if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }" if (parenthesized_expression "((*param_1 & 0x3c00) != 0)" ( (binary_expression "(*param_1 & 0x3c00) != 0" (parenthesized_expression "(*param_1 & 0x3c00)" ( (binary_expression "*param_1 & 0x3c00" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }" { (expression_statement "FUN_00320990(param_1 + 2,param_1 + 0xc);" (call_expression "FUN_00320990(param_1 + 2,param_1 + 0xc)" identifier (argument_list "(param_1 + 2,param_1 + 0xc)" ( (binary_expression "param_1 + 2" identifier + number_literal) , (binary_expression "param_1 + 0xc" identifier + number_literal) ))) ;) })) (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" identifier = (call_expression "FUN_00324c60(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar7 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }" if (parenthesized_expression "((uVar6 & 0x2100) == 0)" ( (binary_expression "(uVar6 & 0x2100) == 0" (parenthesized_expression "(uVar6 & 0x2100)" ( (binary_expression "uVar6 & 0x2100" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar4 = true;\n      }" { (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" identifier = true) ;) }) (else_clause "else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }" else (compound_statement "{\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }" { (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" identifier = true) ;) (if_statement "if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }" if (parenthesized_expression "(*(char *)*param_2 == '_')" ( (binary_expression "*(char *)*param_2 == '_'" (pointer_expression "*(char *)*param_2" * (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) == (char_literal "'_'" ' character ')) )) (compound_statement "{\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }" { (expression_statement "*param_2 = (long)((char *)*param_2 + 1);" (assignment_expression "*param_2 = (long)((char *)*param_2 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((char *)*param_2 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((char *)*param_2 + 1)" ( (binary_expression "(char *)*param_2 + 1" (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) + number_literal) )))) ;) (expression_statement "iVar7 = FUN_00322150(param_1,param_2,&local_78);" (assignment_expression "iVar7 = FUN_00322150(param_1,param_2,&local_78)" identifier = (call_expression "FUN_00322150(param_1,param_2,&local_78)" identifier (argument_list "(param_1,param_2,&local_78)" ( identifier , identifier , (pointer_expression "&local_78" & identifier) )))) ;) (if_statement "if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }" if (parenthesized_expression "(local_78 == (char *)0x0)" ( (binary_expression "local_78 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }" { (expression_statement "uVar15 = uVar5 & iVar7 != 0;" (assignment_expression "uVar15 = uVar5 & iVar7 != 0" identifier = (binary_expression "uVar5 & iVar7 != 0" identifier & (binary_expression "iVar7 != 0" identifier != number_literal))) ;) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }" else (compound_statement "{\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }" { (expression_statement "free(local_78);" (call_expression "free(local_78)" identifier (argument_list "(local_78)" ( identifier ))) ;) (expression_statement "local_70 = (char *)0x0;" (assignment_expression "local_70 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" identifier = number_literal) ;) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar15 = uVar5 & iVar7 != 0;" (assignment_expression "uVar15 = uVar5 & iVar7 != 0" identifier = (binary_expression "uVar5 & iVar7 != 0" identifier & (binary_expression "iVar7 != 0" identifier != number_literal))) ;) }))) (break_statement "break;" break ;) })) }))) (goto_statement "goto LAB_00325b2b;" goto statement_identifier ;)) (case_statement "case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;" case (char_literal "'H'" ' character ') : (if_statement "if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((*param_1 & 0x300) == 0)" ( (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" ( (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);" (assignment_expression "iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0)" identifier = (call_expression "FUN_00323ef0(param_1,param_2,param_3,0,0,0)" identifier (argument_list "(param_1,param_2,param_3,0,0,0)" ( identifier , identifier , identifier , number_literal , number_literal , number_literal )))) ;) (expression_statement "bVar9 = true;" (assignment_expression "bVar9 = true" identifier = true) ;) (if_statement "if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }" if (parenthesized_expression "((param_1[0xe] & 1) != 0)" ( (binary_expression "(param_1[0xe] & 1) != 0" (parenthesized_expression "(param_1[0xe] & 1)" ( (binary_expression "param_1[0xe] & 1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) & number_literal) )) != number_literal) )) (compound_statement "{\n        bVar9 = (bool)uVar3;\n      }" { (expression_statement "bVar9 = (bool)uVar3;" (assignment_expression "bVar9 = (bool)uVar3" identifier = (cast_expression "(bool)uVar3" ( (type_descriptor "bool" primitive_type) ) identifier)) ;) })) (if_statement "if (*(char *)*param_2 == '\0') {\n        return 0;\n      }" if (parenthesized_expression "(*(char *)*param_2 == '\0')" ( (binary_expression "*(char *)*param_2 == '\0'" (pointer_expression "*(char *)*param_2" * (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_2 = (long)((char *)*param_2 + 1);" (assignment_expression "*param_2 = (long)((char *)*param_2 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((char *)*param_2 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((char *)*param_2 + 1)" ( (binary_expression "(char *)*param_2 + 1" (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) + number_literal) )))) ;) (expression_statement "uVar15 = iVar7 != 0 & uVar5;" (assignment_expression "uVar15 = iVar7 != 0 & uVar5" identifier = (binary_expression "iVar7 != 0 & uVar5" (binary_expression "iVar7 != 0" identifier != number_literal) & identifier)) ;) (expression_statement "uVar3 = bVar9;" (assignment_expression "uVar3 = bVar9" identifier = identifier) ;) (break_statement "break;" break ;)) (case_statement "case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;" case (char_literal "'K'" ' character ') : (expression_statement "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);" (assignment_expression "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0)" identifier = (call_expression "FUN_003245f0(param_1,param_2,param_3,1,0)" identifier (argument_list "(param_1,param_2,param_3,1,0)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;) (expression_statement "uVar15 = iVar7 != 0;" (assignment_expression "uVar15 = iVar7 != 0" identifier = (binary_expression "iVar7 != 0" identifier != number_literal)) ;) (if_statement "if ((*param_1 & 0x300) != 0) goto LAB_003259a2;" if (parenthesized_expression "((*param_1 & 0x300) != 0)" ( (binary_expression "(*param_1 & 0x300) != 0" (parenthesized_expression "(*param_1 & 0x300)" ( (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_003259a2;" goto statement_identifier ;)) (expression_statement "uVar15 = uVar15 & uVar5;" (assignment_expression "uVar15 = uVar15 & uVar5" identifier = (binary_expression "uVar15 & uVar5" identifier & identifier)) ;) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (break_statement "break;" break ;)) (case_statement "case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;" case (char_literal "'L'" ' character ') : (if_statement "if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((*param_1 & 0x1000) == 0)" ( (binary_expression "(*param_1 & 0x1000) == 0" (parenthesized_expression "(*param_1 & 0x1000)" ( (binary_expression "*param_1 & 0x1000" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (do_statement "do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');" do (compound_statement "{\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      }" { (expression_statement "pcVar14 = pcVar11;" (assignment_expression "pcVar14 = pcVar11" identifier = identifier) ;) (expression_statement "*param_2 = (long)(pcVar14 + 1);" (assignment_expression "*param_2 = (long)(pcVar14 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)(pcVar14 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(pcVar14 + 1)" ( (binary_expression "pcVar14 + 1" identifier + number_literal) )))) ;) (expression_statement "cVar1 = pcVar14[1];" (assignment_expression "cVar1 = pcVar14[1]" identifier = (subscript_expression "pcVar14[1]" identifier [ number_literal ])) ;) (if_statement "if (cVar1 == '\0') break;" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "pcVar11 = pcVar14 + 1;" (assignment_expression "pcVar11 = pcVar14 + 1" identifier = (binary_expression "pcVar14 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(cVar1 != '_')" ( (binary_expression "cVar1 != '_'" identifier != (char_literal "'_'" ' character ')) )) ;) (if_statement "if (cVar1 == '\0') {\n        return 0;\n      }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_2 = (long)(pcVar14 + 2);" (assignment_expression "*param_2 = (long)(pcVar14 + 2)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)(pcVar14 + 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(pcVar14 + 2)" ( (binary_expression "pcVar14 + 2" identifier + number_literal) )))) ;) (goto_statement "goto LAB_0032581c;" goto statement_identifier ;)) (case_statement "case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;" case (char_literal "'Q'" ' character ') : (expression_statement "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);" (assignment_expression "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0)" identifier = (call_expression "FUN_003245f0(param_1,param_2,param_3,1,0)" identifier (argument_list "(param_1,param_2,param_3,1,0)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;) (if_statement "if (iVar7 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);" (call_expression "FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11)" identifier (argument_list "(param_1,pcVar11,*param_2 - (long)pcVar11)" ( identifier , identifier , (binary_expression "*param_2 - (long)pcVar11" (pointer_expression "*param_2" * identifier) - (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }" if (parenthesized_expression "((uVar6 & 0x300) != 0)" ( (binary_expression "(uVar6 & 0x300) != 0" (parenthesized_expression "(uVar6 & 0x300)" ( (binary_expression "uVar6 & 0x300" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }" { (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto joined_r0x00325745;" goto statement_identifier ;) })) (labeled_statement "LAB_00325b2b:\n      pcVar8 = (char *)0x0;" statement_identifier : (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (if_statement "if ((bool)uVar5) goto joined_r0x00325745;" if (parenthesized_expression "((bool)uVar5)" ( (cast_expression "(bool)uVar5" ( (type_descriptor "bool" primitive_type) ) identifier) )) (goto_statement "goto joined_r0x00325745;" goto statement_identifier ;)) (goto_statement "goto LAB_003255c0;" goto statement_identifier ;)) (case_statement "case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;" case (char_literal "'S'" ' character ') : (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" { (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" identifier = identifier) ;) })) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((long)pcVar11 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "param_1[0x10] = 1;" (assignment_expression "param_1[0x10] = 1" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) = number_literal) ;) (labeled_statement "LAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;" statement_identifier : (if_statement "if (!(bool)uVar5) goto code_r0x00325824;" if (parenthesized_expression "(!(bool)uVar5)" ( (unary_expression "!(bool)uVar5" ! (cast_expression "(bool)uVar5" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (goto_statement "goto code_r0x00325824;" goto statement_identifier ;))) (goto_statement "goto LAB_00325740;" goto statement_identifier ;)) (case_statement "case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;" case (char_literal "'_'" ' character ') : (if_statement "if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }" if (parenthesized_expression "(((*param_1 & 0x300) == 0) || (!(bool)uVar3))" ( (binary_expression "((*param_1 & 0x300) == 0) || (!(bool)uVar3)" (parenthesized_expression "((*param_1 & 0x300) == 0)" ( (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" ( (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "(!(bool)uVar3)" ( (unary_expression "!(bool)uVar3" ! (cast_expression "(bool)uVar3" ( (type_descriptor "bool" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }" { (if_statement "if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }" if (parenthesized_expression "((*param_1 & 0x1000) == 0)" ( (binary_expression "(*param_1 & 0x1000) == 0" (parenthesized_expression "(*param_1 & 0x1000)" ( (binary_expression "*param_1 & 0x1000" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((long)pcVar11 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (if_statement "if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }" if (parenthesized_expression "((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0))" ( (binary_expression "(*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)" (parenthesized_expression "(*(byte *)((long)pcVar11 + 1) != 0)" ( (binary_expression "*(byte *)((long)pcVar11 + 1) != 0" (pointer_expression "*(byte *)((long)pcVar11 + 1)" * (cast_expression "(byte *)((long)pcVar11 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) != number_literal) )) && (parenthesized_expression "(((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)" ( (binary_expression "((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4)" ( (binary_expression "(&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4" (subscript_expression "(&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2]" (parenthesized_expression "(&DAT_003fef00)" ( (pointer_expression "&DAT_003fef00" & identifier) )) [ (binary_expression "(ulong)*(byte *)((long)pcVar11 + 1) * 2" (binary_expression "(ulong)*(byte *)((long)pcVar11 + 1)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(byte *)((long)pcVar11 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) * number_literal) ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }" { (expression_statement "pbVar13 = (byte *)((long)pcVar11 + 2);" (assignment_expression "pbVar13 = (byte *)((long)pcVar11 + 2)" identifier = (cast_expression "(byte *)((long)pcVar11 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar11 + 2)" ( (binary_expression "(long)pcVar11 + 2" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (do_statement "do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);" do (compound_statement "{\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          }" { (expression_statement "*param_2 = (long)pbVar13;" (assignment_expression "*param_2 = (long)pbVar13" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)pbVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "bVar2 = *pbVar13;" (assignment_expression "bVar2 = *pbVar13" identifier = (pointer_expression "*pbVar13" * identifier)) ;) (if_statement "if (bVar2 == 0) break;" if (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "pbVar13 = pbVar13 + 1;" (assignment_expression "pbVar13 = pbVar13 + 1" identifier = (binary_expression "pbVar13 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0)" ( (binary_expression "((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef00)[(ulong)bVar2 * 2] & 4)" ( (binary_expression "(&DAT_003fef00)[(ulong)bVar2 * 2] & 4" (subscript_expression "(&DAT_003fef00)[(ulong)bVar2 * 2]" (parenthesized_expression "(&DAT_003fef00)" ( (pointer_expression "&DAT_003fef00" & identifier) )) [ (binary_expression "(ulong)bVar2 * 2" (cast_expression "(ulong)bVar2" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal) ]) & number_literal) )) != number_literal) )) ;) })) (goto_statement "goto LAB_0032581c;" goto statement_identifier ;) })) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((long)pcVar11 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "iVar7 = FUN_00322150(param_1,param_2,&local_58);" (assignment_expression "iVar7 = FUN_00322150(param_1,param_2,&local_58)" identifier = (call_expression "FUN_00322150(param_1,param_2,&local_58)" identifier (argument_list "(param_1,param_2,&local_58)" ( identifier , identifier , (pointer_expression "&local_58" & identifier) )))) ;) (expression_statement "pvVar12 = local_50;" (assignment_expression "pvVar12 = local_50" identifier = identifier) ;) (if_statement "if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }" if (parenthesized_expression "(((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58))" ( (binary_expression "((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)" (parenthesized_expression "((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50))" ( (binary_expression "(local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)" (parenthesized_expression "(local_58 != local_50)" ( (binary_expression "local_58 != local_50" identifier != identifier) )) && (parenthesized_expression "(FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)" ( (comma_expression "FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50" (call_expression "FUN_00320c70(&local_58,&DAT_003f45bf)" identifier (argument_list "(&local_58,&DAT_003f45bf)" ( (pointer_expression "&local_58" & identifier) , (pointer_expression "&DAT_003f45bf" & identifier) ))) , (comma_expression "pvVar12 = local_58, local_58 != local_50" (assignment_expression "pvVar12 = local_58" identifier = identifier) , (binary_expression "local_58 != local_50" identifier != identifier))) ))) )) && (parenthesized_expression "((int)local_50 != (int)local_58)" ( (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier) != (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }" { (expression_statement "FUN_00320bf0(param_3,local_58);" (call_expression "FUN_00320bf0(param_3,local_58)" identifier (argument_list "(param_3,local_58)" ( identifier , identifier ))) ;) (expression_statement "pvVar12 = local_58;" (assignment_expression "pvVar12 = local_58" identifier = identifier) ;) })) (if_statement "if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }" if (parenthesized_expression "(pvVar12 != (void *)0x0)" ( (binary_expression "pvVar12 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(pvVar12);\n      }" { (expression_statement "free(pvVar12);" (call_expression "free(pvVar12)" identifier (argument_list "(pvVar12)" ( identifier ))) ;) })) (expression_statement "uVar15 = iVar7 != 0 & uVar5;" (assignment_expression "uVar15 = iVar7 != 0 & uVar5" identifier = (binary_expression "iVar7 != 0 & uVar5" (binary_expression "iVar7 != 0" identifier != number_literal) & identifier)) ;) (expression_statement "uVar3 = true;" (assignment_expression "uVar3 = true" identifier = true) ;) (break_statement "break;" break ;)) (case_statement "case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }" case (char_literal "'t'" ' character ') : (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" { (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" identifier = identifier) ;) })) (expression_statement "local_88 = 0;" (assignment_expression "local_88 = 0" identifier = number_literal) ;) (expression_statement "local_90 = 0;" (assignment_expression "local_90 = 0" identifier = number_literal) ;) (expression_statement "local_98 = (void *)0x0;" (assignment_expression "local_98 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" identifier = number_literal) ;) (expression_statement "local_70 = (char *)0x0;" (assignment_expression "local_70 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);" (assignment_expression "iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1)" identifier = (call_expression "FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1)" identifier (argument_list "(param_1,param_2,&local_78,&local_98,1,1)" ( identifier , identifier , (pointer_expression "&local_78" & identifier) , (pointer_expression "&local_98" & identifier) , number_literal , number_literal )))) ;) (if_statement "if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }" { (expression_statement "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);" (call_expression "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8)" identifier (argument_list "(param_1,pcVar8,*param_2 - (long)pcVar8)" ( identifier , identifier , (binary_expression "*param_2 - (long)pcVar8" (pointer_expression "*param_2" * identifier) - (cast_expression "(long)pcVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) })) (expression_statement "pcVar8 = "::";" (assignment_expression "pcVar8 = "::"" identifier = (string_literal ""::"" " string_content ")) ;) (if_statement "if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }" if (parenthesized_expression "((*param_1 & 4) != 0)" ( (binary_expression "(*param_1 & 4) != 0" (parenthesized_expression "(*param_1 & 4)" ( (binary_expression "*param_1 & 4" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        pcVar8 = ".";\n      }" { (expression_statement "pcVar8 = ".";" (assignment_expression "pcVar8 = "."" identifier = (string_literal ""."" " string_content ")) ;) })) (expression_statement "FUN_00320c70(&local_78,pcVar8);" (call_expression "FUN_00320c70(&local_78,pcVar8)" identifier (argument_list "(&local_78,pcVar8)" ( (pointer_expression "&local_78" & identifier) , identifier ))) ;) (if_statement "if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" if (parenthesized_expression "((local_78 == local_70) || ((int)local_70 == (int)local_78))" ( (binary_expression "(local_78 == local_70) || ((int)local_70 == (int)local_78)" (parenthesized_expression "(local_78 == local_70)" ( (binary_expression "local_78 == local_70" identifier == identifier) )) || (parenthesized_expression "((int)local_70 == (int)local_78)" ( (binary_expression "(int)local_70 == (int)local_78" (cast_expression "(int)local_70" ( (type_descriptor "int" primitive_type) ) identifier) == (cast_expression "(int)local_78" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" { (if_statement "if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;" if (parenthesized_expression "((param_1[0xf] & 1) == 0)" ( (binary_expression "(param_1[0xf] & 1) == 0" (parenthesized_expression "(param_1[0xf] & 1)" ( (binary_expression "param_1[0xf] & 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_003256a5;" goto statement_identifier ;)) (labeled_statement "LAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);" statement_identifier : (expression_statement "FUN_00320c40(&local_98,&DAT_003fb32e);" (call_expression "FUN_00320c40(&local_98,&DAT_003fb32e)" identifier (argument_list "(&local_98,&DAT_003fb32e)" ( (pointer_expression "&local_98" & identifier) , (pointer_expression "&DAT_003fb32e" & identifier) ))) ;)) (expression_statement "FUN_00320db0(param_3,&local_98,local_90);" (call_expression "FUN_00320db0(param_3,&local_98,local_90)" identifier (argument_list "(param_3,&local_98,local_90)" ( identifier , (pointer_expression "&local_98" & identifier) , identifier ))) ;) (expression_statement "param_1[0xf] = param_1[0xf] - 1;" (assignment_expression "param_1[0xf] = param_1[0xf] - 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) = (binary_expression "param_1[0xf] - 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) - number_literal)) ;) (expression_statement "uVar10 = *(ulong *)(param_1 + 0xe);" (assignment_expression "uVar10 = *(ulong *)(param_1 + 0xe)" identifier = (pointer_expression "*(ulong *)(param_1 + 0xe)" * (cast_expression "(ulong *)(param_1 + 0xe)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) ))))) ;) }) (else_clause "else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" else (compound_statement "{\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" { (expression_statement "FUN_00320bf0(param_3);" (call_expression "FUN_00320bf0(param_3)" identifier (argument_list "(param_3)" ( identifier ))) ;) (if_statement "if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;" if (parenthesized_expression "((param_1[0xf] & 1) != 0)" ( (binary_expression "(param_1[0xf] & 1) != 0" (parenthesized_expression "(param_1[0xf] & 1)" ( (binary_expression "param_1[0xf] & 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00325d78;" goto statement_identifier ;)) (labeled_statement "LAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);" statement_identifier : (expression_statement "uVar10 = *(ulong *)(param_1 + 0xe);" (assignment_expression "uVar10 = *(ulong *)(param_1 + 0xe)" identifier = (pointer_expression "*(ulong *)(param_1 + 0xe)" * (cast_expression "(ulong *)(param_1 + 0xe)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) ))))) ;)) }))) (if_statement "if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }" if (parenthesized_expression "((uVar10 & 0x100000001) != 0)" ( (binary_expression "(uVar10 & 0x100000001) != 0" (parenthesized_expression "(uVar10 & 0x100000001)" ( (binary_expression "uVar10 & 0x100000001" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }" { (expression_statement "FUN_00320db0(param_3,&local_98,local_90);" (call_expression "FUN_00320db0(param_3,&local_98,local_90)" identifier (argument_list "(param_3,&local_98,local_90)" ( identifier , (pointer_expression "&local_98" & identifier) , identifier ))) ;) (expression_statement "param_1[0xe] = param_1[0xe] - 1;" (assignment_expression "param_1[0xe] = param_1[0xe] - 1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) = (binary_expression "param_1[0xe] - 1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) - number_literal)) ;) })) (if_statement "if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }" if (parenthesized_expression "(local_98 != (void *)0x0)" ( (binary_expression "local_98 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }" { (expression_statement "free(local_98);" (call_expression "free(local_98)" identifier (argument_list "(local_98)" ( identifier ))) ;) (expression_statement "local_90 = 0;" (assignment_expression "local_90 = 0" identifier = number_literal) ;) (expression_statement "local_88 = 0;" (assignment_expression "local_88 = 0" identifier = number_literal) ;) (expression_statement "local_98 = (void *)0x0;" (assignment_expression "local_98 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (expression_statement "uVar15 = iVar7 != 0;" (assignment_expression "uVar15 = iVar7 != 0" identifier = (binary_expression "iVar7 != 0" identifier != number_literal)) ;) (expression_statement "uVar5 = true;" (assignment_expression "uVar5 = true" identifier = true) ;) (expression_statement "pcVar8 = local_78;" (assignment_expression "pcVar8 = local_78" identifier = identifier) ;) (if_statement "if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }" if (parenthesized_expression "(local_78 != (char *)0x0)" ( (binary_expression "local_78 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }" { (expression_statement "free(local_78);" (call_expression "free(local_78)" identifier (argument_list "(local_78)" ( identifier ))) ;) (expression_statement "local_70 = (char *)0x0;" (assignment_expression "local_70 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" identifier = number_literal) ;) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) })) (if_statement "if (!(bool)uVar15) goto LAB_00325766;" if (parenthesized_expression "(!(bool)uVar15)" ( (unary_expression "!(bool)uVar15" ! (cast_expression "(bool)uVar15" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (goto_statement "goto LAB_00325766;" goto statement_identifier ;)) (labeled_statement "LAB_00325740:\n    uVar6 = *param_1;" statement_identifier : (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (labeled_statement "joined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }" statement_identifier : (if_statement "if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }" if (parenthesized_expression "((uVar6 & 0x2c00) != 0)" ( (binary_expression "(uVar6 & 0x2c00) != 0" (parenthesized_expression "(uVar6 & 0x2c00)" ( (binary_expression "uVar6 & 0x2c00" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }" { (expression_statement "FUN_00320990(param_1 + 2,param_1 + 0xc);" (call_expression "FUN_00320990(param_1 + 2,param_1 + 0xc)" identifier (argument_list "(param_1 + 2,param_1 + 0xc)" ( (binary_expression "param_1 + 2" identifier + number_literal) , (binary_expression "param_1 + 0xc" identifier + number_literal) ))) ;) }))) (expression_statement "uVar5 = false;" (assignment_expression "uVar5 = false" identifier = false) ;) (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" identifier = (call_expression "FUN_00324c60(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" identifier = true) ;) (labeled_statement "LAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }" statement_identifier : (if_statement "if (iVar7 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) }))) }) while (parenthesized_expression "( true )" ( true )) ;)) (labeled_statement "code_r0x00325824:\n  pcVar11 = (char *)*param_2;" statement_identifier : (expression_statement "pcVar11 = (char *)*param_2;" (assignment_expression "pcVar11 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;)) (expression_statement "cVar1 = *pcVar11;" (assignment_expression "cVar1 = *pcVar11" identifier = (pointer_expression "*pcVar11" * identifier)) ;) (goto_statement "goto joined_r0x003255cb;" goto statement_identifier ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n\nint demangle_signature(work_stuff *work,char **mangled,string *declp)\n\n{\n  char cVar1;\n  byte bVar2;\n  ulong uVar3;\n  ulong uVar4;\n  undefined1 uVar5;\n  undefined1 uVar6;\n  undefined1 uVar7;\n  int iVar8;\n  char *pcVar9;\n  bool bVar10;\n  int iVar11;\n  uint uVar12;\n  char *pcVar13;\n  byte *pbVar14;\n  char *pcVar15;\n  undefined1 uVar16;\n  string trawname;\n  string tname;\n  string s;\n  \n  iVar8 = 1;\n  uVar7 = false;\n  pcVar9 = (char *)0x0;\n  uVar5 = false;\n  uVar6 = false;\nLAB_003255c0:\n  do {\n    pcVar13 = *mangled;\n    cVar1 = *pcVar13;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar12 = work->options;\n      if ((!(bool)uVar6) && ((uVar12 & 0x300) != 0)) {\n        iVar8 = demangle_args(work,mangled,declp);\n        if (iVar8 == 0) {\n          return 0;\n        }\n        uVar12 = work->options;\n      }\n      if ((uVar12 & 1) == 0) {\n        return iVar8;\n      }\n      if (work->static_type != 0) {\n        string_append(declp," static");\n      }\n      iVar11 = work->type_quals;\n      if (iVar11 == 0) {\n        return iVar8;\n      }\n      if (declp->b != declp->p) {\n        string_append(declp," ");\n        iVar11 = work->type_quals;\n      }\n      pcVar9 = qualifier_string(iVar11);\n      if (pcVar9 == (char *)0x0) {\n        return iVar8;\n      }\n      if (*pcVar9 == '\0') {\n        return iVar8;\n      }\n      string_append(declp,pcVar9);\n      return iVar8;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      work->temp_start = -1;\n      s.e = (char *)0x0;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      s.p = (char *)0x0;\n      s.b = (char *)0x0;\n      iVar8 = register_Btype(work);\n      iVar11 = demangle_class_name(work,mangled,&s);\n      pcVar13 = s.p;\n      if (iVar11 == 0) {\n        if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }\n        return 0;\n      }\n      uVar4._0_4_ = work->constructor;\n      uVar4._4_4_ = work->destructor;\n      if ((uVar4 & 0x100000001) != 0) {\n        if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }\n      }\n      iVar11 = (int)pcVar13 - (int)s.b;\n      if (pcVar13 == s.b) {\n        iVar11 = 0;\n      }\n      s.p = pcVar13;\n      remember_Ktype(work,s.b,iVar11);\n      iVar11 = (int)s.p - (int)s.b;\n      if (s.b == s.p) {\n        iVar11 = 0;\n      }\n      remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8);\n      pcVar13 = ".";\n      if ((work->options & 4) == 0) {\n        pcVar13 = "::";\n      }\n      string_prepend(declp,pcVar13);\n      if ((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)) {\n        string_prependn(declp,s.b,iVar8);\n      }\n      if (s.b != (char *)0x0) {\n        free(s.b);\n      }\n      remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      uVar12 = work->options;\n      if (((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')) {\n        iVar8 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      uVar6 = true;\n      uVar16 = iVar8 != 0 & uVar7;\n      break;\n    case 'B':\n      iVar8 = do_type(work,mangled,&s);\n      if (iVar8 != 0) {\n        pcVar9 = "::";\n        if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }\n        string_append(&s,pcVar9);\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if (s.b != (char *)0x0) {\n          free(s.b);\n        }\n      }\n      uVar16 = iVar8 != 0;\nLAB_003259a2:\n      pcVar9 = (char *)0x0;\n      uVar7 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar12 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }\n      work->type_quals = work->type_quals | uVar12;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *mangled = (char *)((long)pcVar13 + 1);\n      if ((work->options & 0x3c00U) != 0) {\n        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      uVar12 = work->options;\n      if ((uVar12 & 0x2100) == 0) {\n        uVar6 = true;\n      }\n      else {\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0);\n      bVar10 = true;\n      if ((work->constructor & 1) != 0) {\n        bVar10 = (bool)uVar5;\n      }\n      if (**mangled == '\0') {\n        return 0;\n      }\n      *mangled = *mangled + 1;\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = bVar10;\n      break;\n    case 'K':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      uVar16 = iVar8 != 0;\n      if ((work->options & 0x300U) != 0) goto LAB_003259a2;\n      uVar16 = uVar16 & uVar7;\n      pcVar9 = (char *)0x0;\n      break;\n    case 'L':\n      if ((work->options & 0x1000U) == 0) {\n        return 0;\n      }\n      do {\n        pcVar15 = pcVar13;\n        *mangled = pcVar15 + 1;\n        cVar1 = pcVar15[1];\n        if (cVar1 == '\0') break;\n        pcVar13 = pcVar15 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *mangled = pcVar15 + 2;\n      goto LAB_0032581c;\n    case 'Q':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      remember_type(work,pcVar13,(int)*mangled - (int)pcVar13);\n      uVar12 = work->options;\n      if ((uVar12 & 0x300) != 0) {\n        pcVar9 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar9 = (char *)0x0;\n      if ((bool)uVar7) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      work->static_type = 1;\nLAB_0032581c:\n      if (!(bool)uVar7) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {\n        if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }\n        *mangled = (char *)((long)pcVar13 + 1);\n        if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      iVar8 = do_type(work,mangled,&s);\n      pcVar13 = s.p;\n      if (((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n        string_prependn(declp,s.b,iVar11);\n        pcVar13 = s.b;\n      }\n      if (pcVar13 != (char *)0x0) {\n        free(pcVar13);\n      }\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = true;\n      break;\n    case 't':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      trawname.e = (char *)0x0;\n      trawname.p = (char *)0x0;\n      trawname.b = (char *)0x0;\n      tname.e = (char *)0x0;\n      tname.p = (char *)0x0;\n      tname.b = (char *)0x0;\n      iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1);\n      if (iVar8 != 0) {\n        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      }\n      pcVar9 = "::";\n      if ((work->options & 4) != 0) {\n        pcVar9 = ".";\n      }\n      string_append(&tname,pcVar9);\n      if ((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)) {\n        if ((work->destructor & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        string_prepend(&trawname,"~");\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->destructor = work->destructor + -1;\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      else {\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      if ((uVar3 & 0x100000001) != 0) {\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->constructor = work->constructor + -1;\n      }\n      if (trawname.b != (char *)0x0) {\n        free(trawname.b);\n        trawname.p = (char *)0x0;\n        trawname.e = (char *)0x0;\n        trawname.b = (char *)0x0;\n      }\n      uVar16 = iVar8 != 0;\n      uVar7 = true;\n      pcVar9 = tname.b;\n      if (tname.b != (char *)0x0) {\n        free(tname.b);\n        tname.p = (char *)0x0;\n        tname.e = (char *)0x0;\n        tname.b = (char *)0x0;\n        pcVar9 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar16) goto LAB_00325766;\nLAB_00325740:\n    uVar12 = work->options;\njoined_r0x00325745:\n    if ((uVar12 & 0x2c00) != 0) {\n      forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n    }\n    uVar7 = false;\n    iVar8 = demangle_args(work,mangled,declp);\n    uVar6 = true;\nLAB_00325766:\n    if (iVar8 == 0) {\n      return 0;\n    }\n  } while( true );\ncode_r0x00325824:\n  pcVar13 = *mangled;\n  cVar1 = *pcVar13;\n  goto joined_r0x003255cb;\n}\n\n" comment (function_definition "int demangle_signature(work_stuff *work,char **mangled,string *declp)\n\n{\n  char cVar1;\n  byte bVar2;\n  ulong uVar3;\n  ulong uVar4;\n  undefined1 uVar5;\n  undefined1 uVar6;\n  undefined1 uVar7;\n  int iVar8;\n  char *pcVar9;\n  bool bVar10;\n  int iVar11;\n  uint uVar12;\n  char *pcVar13;\n  byte *pbVar14;\n  char *pcVar15;\n  undefined1 uVar16;\n  string trawname;\n  string tname;\n  string s;\n  \n  iVar8 = 1;\n  uVar7 = false;\n  pcVar9 = (char *)0x0;\n  uVar5 = false;\n  uVar6 = false;\nLAB_003255c0:\n  do {\n    pcVar13 = *mangled;\n    cVar1 = *pcVar13;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar12 = work->options;\n      if ((!(bool)uVar6) && ((uVar12 & 0x300) != 0)) {\n        iVar8 = demangle_args(work,mangled,declp);\n        if (iVar8 == 0) {\n          return 0;\n        }\n        uVar12 = work->options;\n      }\n      if ((uVar12 & 1) == 0) {\n        return iVar8;\n      }\n      if (work->static_type != 0) {\n        string_append(declp," static");\n      }\n      iVar11 = work->type_quals;\n      if (iVar11 == 0) {\n        return iVar8;\n      }\n      if (declp->b != declp->p) {\n        string_append(declp," ");\n        iVar11 = work->type_quals;\n      }\n      pcVar9 = qualifier_string(iVar11);\n      if (pcVar9 == (char *)0x0) {\n        return iVar8;\n      }\n      if (*pcVar9 == '\0') {\n        return iVar8;\n      }\n      string_append(declp,pcVar9);\n      return iVar8;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      work->temp_start = -1;\n      s.e = (char *)0x0;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      s.p = (char *)0x0;\n      s.b = (char *)0x0;\n      iVar8 = register_Btype(work);\n      iVar11 = demangle_class_name(work,mangled,&s);\n      pcVar13 = s.p;\n      if (iVar11 == 0) {\n        if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }\n        return 0;\n      }\n      uVar4._0_4_ = work->constructor;\n      uVar4._4_4_ = work->destructor;\n      if ((uVar4 & 0x100000001) != 0) {\n        if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }\n      }\n      iVar11 = (int)pcVar13 - (int)s.b;\n      if (pcVar13 == s.b) {\n        iVar11 = 0;\n      }\n      s.p = pcVar13;\n      remember_Ktype(work,s.b,iVar11);\n      iVar11 = (int)s.p - (int)s.b;\n      if (s.b == s.p) {\n        iVar11 = 0;\n      }\n      remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8);\n      pcVar13 = ".";\n      if ((work->options & 4) == 0) {\n        pcVar13 = "::";\n      }\n      string_prepend(declp,pcVar13);\n      if ((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)) {\n        string_prependn(declp,s.b,iVar8);\n      }\n      if (s.b != (char *)0x0) {\n        free(s.b);\n      }\n      remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      uVar12 = work->options;\n      if (((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')) {\n        iVar8 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      uVar6 = true;\n      uVar16 = iVar8 != 0 & uVar7;\n      break;\n    case 'B':\n      iVar8 = do_type(work,mangled,&s);\n      if (iVar8 != 0) {\n        pcVar9 = "::";\n        if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }\n        string_append(&s,pcVar9);\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if (s.b != (char *)0x0) {\n          free(s.b);\n        }\n      }\n      uVar16 = iVar8 != 0;\nLAB_003259a2:\n      pcVar9 = (char *)0x0;\n      uVar7 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar12 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }\n      work->type_quals = work->type_quals | uVar12;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *mangled = (char *)((long)pcVar13 + 1);\n      if ((work->options & 0x3c00U) != 0) {\n        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      uVar12 = work->options;\n      if ((uVar12 & 0x2100) == 0) {\n        uVar6 = true;\n      }\n      else {\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0);\n      bVar10 = true;\n      if ((work->constructor & 1) != 0) {\n        bVar10 = (bool)uVar5;\n      }\n      if (**mangled == '\0') {\n        return 0;\n      }\n      *mangled = *mangled + 1;\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = bVar10;\n      break;\n    case 'K':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      uVar16 = iVar8 != 0;\n      if ((work->options & 0x300U) != 0) goto LAB_003259a2;\n      uVar16 = uVar16 & uVar7;\n      pcVar9 = (char *)0x0;\n      break;\n    case 'L':\n      if ((work->options & 0x1000U) == 0) {\n        return 0;\n      }\n      do {\n        pcVar15 = pcVar13;\n        *mangled = pcVar15 + 1;\n        cVar1 = pcVar15[1];\n        if (cVar1 == '\0') break;\n        pcVar13 = pcVar15 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *mangled = pcVar15 + 2;\n      goto LAB_0032581c;\n    case 'Q':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      remember_type(work,pcVar13,(int)*mangled - (int)pcVar13);\n      uVar12 = work->options;\n      if ((uVar12 & 0x300) != 0) {\n        pcVar9 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar9 = (char *)0x0;\n      if ((bool)uVar7) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      work->static_type = 1;\nLAB_0032581c:\n      if (!(bool)uVar7) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {\n        if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }\n        *mangled = (char *)((long)pcVar13 + 1);\n        if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      iVar8 = do_type(work,mangled,&s);\n      pcVar13 = s.p;\n      if (((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n        string_prependn(declp,s.b,iVar11);\n        pcVar13 = s.b;\n      }\n      if (pcVar13 != (char *)0x0) {\n        free(pcVar13);\n      }\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = true;\n      break;\n    case 't':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      trawname.e = (char *)0x0;\n      trawname.p = (char *)0x0;\n      trawname.b = (char *)0x0;\n      tname.e = (char *)0x0;\n      tname.p = (char *)0x0;\n      tname.b = (char *)0x0;\n      iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1);\n      if (iVar8 != 0) {\n        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      }\n      pcVar9 = "::";\n      if ((work->options & 4) != 0) {\n        pcVar9 = ".";\n      }\n      string_append(&tname,pcVar9);\n      if ((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)) {\n        if ((work->destructor & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        string_prepend(&trawname,"~");\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->destructor = work->destructor + -1;\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      else {\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      if ((uVar3 & 0x100000001) != 0) {\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->constructor = work->constructor + -1;\n      }\n      if (trawname.b != (char *)0x0) {\n        free(trawname.b);\n        trawname.p = (char *)0x0;\n        trawname.e = (char *)0x0;\n        trawname.b = (char *)0x0;\n      }\n      uVar16 = iVar8 != 0;\n      uVar7 = true;\n      pcVar9 = tname.b;\n      if (tname.b != (char *)0x0) {\n        free(tname.b);\n        tname.p = (char *)0x0;\n        tname.e = (char *)0x0;\n        tname.b = (char *)0x0;\n        pcVar9 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar16) goto LAB_00325766;\nLAB_00325740:\n    uVar12 = work->options;\njoined_r0x00325745:\n    if ((uVar12 & 0x2c00) != 0) {\n      forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n    }\n    uVar7 = false;\n    iVar8 = demangle_args(work,mangled,declp);\n    uVar6 = true;\nLAB_00325766:\n    if (iVar8 == 0) {\n      return 0;\n    }\n  } while( true );\ncode_r0x00325824:\n  pcVar13 = *mangled;\n  cVar1 = *pcVar13;\n  goto joined_r0x003255cb;\n}" primitive_type (function_declarator "demangle_signature(work_stuff *work,char **mangled,string *declp)" identifier (parameter_list "(work_stuff *work,char **mangled,string *declp)" ( (parameter_declaration "work_stuff *work" type_identifier (pointer_declarator "*work" * identifier)) , (parameter_declaration "char **mangled" primitive_type (pointer_declarator "**mangled" * (pointer_declarator "*mangled" * identifier))) , (parameter_declaration "string *declp" type_identifier (pointer_declarator "*declp" * identifier)) ))) (compound_statement "{\n  char cVar1;\n  byte bVar2;\n  ulong uVar3;\n  ulong uVar4;\n  undefined1 uVar5;\n  undefined1 uVar6;\n  undefined1 uVar7;\n  int iVar8;\n  char *pcVar9;\n  bool bVar10;\n  int iVar11;\n  uint uVar12;\n  char *pcVar13;\n  byte *pbVar14;\n  char *pcVar15;\n  undefined1 uVar16;\n  string trawname;\n  string tname;\n  string s;\n  \n  iVar8 = 1;\n  uVar7 = false;\n  pcVar9 = (char *)0x0;\n  uVar5 = false;\n  uVar6 = false;\nLAB_003255c0:\n  do {\n    pcVar13 = *mangled;\n    cVar1 = *pcVar13;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar12 = work->options;\n      if ((!(bool)uVar6) && ((uVar12 & 0x300) != 0)) {\n        iVar8 = demangle_args(work,mangled,declp);\n        if (iVar8 == 0) {\n          return 0;\n        }\n        uVar12 = work->options;\n      }\n      if ((uVar12 & 1) == 0) {\n        return iVar8;\n      }\n      if (work->static_type != 0) {\n        string_append(declp," static");\n      }\n      iVar11 = work->type_quals;\n      if (iVar11 == 0) {\n        return iVar8;\n      }\n      if (declp->b != declp->p) {\n        string_append(declp," ");\n        iVar11 = work->type_quals;\n      }\n      pcVar9 = qualifier_string(iVar11);\n      if (pcVar9 == (char *)0x0) {\n        return iVar8;\n      }\n      if (*pcVar9 == '\0') {\n        return iVar8;\n      }\n      string_append(declp,pcVar9);\n      return iVar8;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      work->temp_start = -1;\n      s.e = (char *)0x0;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      s.p = (char *)0x0;\n      s.b = (char *)0x0;\n      iVar8 = register_Btype(work);\n      iVar11 = demangle_class_name(work,mangled,&s);\n      pcVar13 = s.p;\n      if (iVar11 == 0) {\n        if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }\n        return 0;\n      }\n      uVar4._0_4_ = work->constructor;\n      uVar4._4_4_ = work->destructor;\n      if ((uVar4 & 0x100000001) != 0) {\n        if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }\n      }\n      iVar11 = (int)pcVar13 - (int)s.b;\n      if (pcVar13 == s.b) {\n        iVar11 = 0;\n      }\n      s.p = pcVar13;\n      remember_Ktype(work,s.b,iVar11);\n      iVar11 = (int)s.p - (int)s.b;\n      if (s.b == s.p) {\n        iVar11 = 0;\n      }\n      remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8);\n      pcVar13 = ".";\n      if ((work->options & 4) == 0) {\n        pcVar13 = "::";\n      }\n      string_prepend(declp,pcVar13);\n      if ((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)) {\n        string_prependn(declp,s.b,iVar8);\n      }\n      if (s.b != (char *)0x0) {\n        free(s.b);\n      }\n      remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      uVar12 = work->options;\n      if (((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')) {\n        iVar8 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      uVar6 = true;\n      uVar16 = iVar8 != 0 & uVar7;\n      break;\n    case 'B':\n      iVar8 = do_type(work,mangled,&s);\n      if (iVar8 != 0) {\n        pcVar9 = "::";\n        if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }\n        string_append(&s,pcVar9);\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if (s.b != (char *)0x0) {\n          free(s.b);\n        }\n      }\n      uVar16 = iVar8 != 0;\nLAB_003259a2:\n      pcVar9 = (char *)0x0;\n      uVar7 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar12 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }\n      work->type_quals = work->type_quals | uVar12;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *mangled = (char *)((long)pcVar13 + 1);\n      if ((work->options & 0x3c00U) != 0) {\n        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      uVar12 = work->options;\n      if ((uVar12 & 0x2100) == 0) {\n        uVar6 = true;\n      }\n      else {\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0);\n      bVar10 = true;\n      if ((work->constructor & 1) != 0) {\n        bVar10 = (bool)uVar5;\n      }\n      if (**mangled == '\0') {\n        return 0;\n      }\n      *mangled = *mangled + 1;\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = bVar10;\n      break;\n    case 'K':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      uVar16 = iVar8 != 0;\n      if ((work->options & 0x300U) != 0) goto LAB_003259a2;\n      uVar16 = uVar16 & uVar7;\n      pcVar9 = (char *)0x0;\n      break;\n    case 'L':\n      if ((work->options & 0x1000U) == 0) {\n        return 0;\n      }\n      do {\n        pcVar15 = pcVar13;\n        *mangled = pcVar15 + 1;\n        cVar1 = pcVar15[1];\n        if (cVar1 == '\0') break;\n        pcVar13 = pcVar15 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *mangled = pcVar15 + 2;\n      goto LAB_0032581c;\n    case 'Q':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      remember_type(work,pcVar13,(int)*mangled - (int)pcVar13);\n      uVar12 = work->options;\n      if ((uVar12 & 0x300) != 0) {\n        pcVar9 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar9 = (char *)0x0;\n      if ((bool)uVar7) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      work->static_type = 1;\nLAB_0032581c:\n      if (!(bool)uVar7) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {\n        if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }\n        *mangled = (char *)((long)pcVar13 + 1);\n        if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      iVar8 = do_type(work,mangled,&s);\n      pcVar13 = s.p;\n      if (((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n        string_prependn(declp,s.b,iVar11);\n        pcVar13 = s.b;\n      }\n      if (pcVar13 != (char *)0x0) {\n        free(pcVar13);\n      }\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = true;\n      break;\n    case 't':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      trawname.e = (char *)0x0;\n      trawname.p = (char *)0x0;\n      trawname.b = (char *)0x0;\n      tname.e = (char *)0x0;\n      tname.p = (char *)0x0;\n      tname.b = (char *)0x0;\n      iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1);\n      if (iVar8 != 0) {\n        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      }\n      pcVar9 = "::";\n      if ((work->options & 4) != 0) {\n        pcVar9 = ".";\n      }\n      string_append(&tname,pcVar9);\n      if ((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)) {\n        if ((work->destructor & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        string_prepend(&trawname,"~");\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->destructor = work->destructor + -1;\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      else {\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      if ((uVar3 & 0x100000001) != 0) {\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->constructor = work->constructor + -1;\n      }\n      if (trawname.b != (char *)0x0) {\n        free(trawname.b);\n        trawname.p = (char *)0x0;\n        trawname.e = (char *)0x0;\n        trawname.b = (char *)0x0;\n      }\n      uVar16 = iVar8 != 0;\n      uVar7 = true;\n      pcVar9 = tname.b;\n      if (tname.b != (char *)0x0) {\n        free(tname.b);\n        tname.p = (char *)0x0;\n        tname.e = (char *)0x0;\n        tname.b = (char *)0x0;\n        pcVar9 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar16) goto LAB_00325766;\nLAB_00325740:\n    uVar12 = work->options;\njoined_r0x00325745:\n    if ((uVar12 & 0x2c00) != 0) {\n      forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n    }\n    uVar7 = false;\n    iVar8 = demangle_args(work,mangled,declp);\n    uVar6 = true;\nLAB_00325766:\n    if (iVar8 == 0) {\n      return 0;\n    }\n  } while( true );\ncode_r0x00325824:\n  pcVar13 = *mangled;\n  cVar1 = *pcVar13;\n  goto joined_r0x003255cb;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "undefined1 uVar5;" type_identifier identifier ;) (declaration "undefined1 uVar6;" type_identifier identifier ;) (declaration "undefined1 uVar7;" type_identifier identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "bool bVar10;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "char *pcVar13;" primitive_type (pointer_declarator "*pcVar13" * identifier) ;) (declaration "byte *pbVar14;" type_identifier (pointer_declarator "*pbVar14" * identifier) ;) (declaration "char *pcVar15;" primitive_type (pointer_declarator "*pcVar15" * identifier) ;) (declaration "undefined1 uVar16;" type_identifier identifier ;) (declaration "string trawname;" type_identifier identifier ;) (declaration "string tname;" type_identifier identifier ;) (declaration "string s;" type_identifier identifier ;) (expression_statement "iVar8 = 1;" (assignment_expression "iVar8 = 1" identifier = number_literal) ;) (expression_statement "uVar7 = false;" (assignment_expression "uVar7 = false" identifier = false) ;) (expression_statement "pcVar9 = (char *)0x0;" (assignment_expression "pcVar9 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar5 = false;" (assignment_expression "uVar5 = false" identifier = false) ;) (expression_statement "uVar6 = false;" (assignment_expression "uVar6 = false" identifier = false) ;) (labeled_statement "LAB_003255c0:\n  do {\n    pcVar13 = *mangled;\n    cVar1 = *pcVar13;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar12 = work->options;\n      if ((!(bool)uVar6) && ((uVar12 & 0x300) != 0)) {\n        iVar8 = demangle_args(work,mangled,declp);\n        if (iVar8 == 0) {\n          return 0;\n        }\n        uVar12 = work->options;\n      }\n      if ((uVar12 & 1) == 0) {\n        return iVar8;\n      }\n      if (work->static_type != 0) {\n        string_append(declp," static");\n      }\n      iVar11 = work->type_quals;\n      if (iVar11 == 0) {\n        return iVar8;\n      }\n      if (declp->b != declp->p) {\n        string_append(declp," ");\n        iVar11 = work->type_quals;\n      }\n      pcVar9 = qualifier_string(iVar11);\n      if (pcVar9 == (char *)0x0) {\n        return iVar8;\n      }\n      if (*pcVar9 == '\0') {\n        return iVar8;\n      }\n      string_append(declp,pcVar9);\n      return iVar8;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      work->temp_start = -1;\n      s.e = (char *)0x0;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      s.p = (char *)0x0;\n      s.b = (char *)0x0;\n      iVar8 = register_Btype(work);\n      iVar11 = demangle_class_name(work,mangled,&s);\n      pcVar13 = s.p;\n      if (iVar11 == 0) {\n        if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }\n        return 0;\n      }\n      uVar4._0_4_ = work->constructor;\n      uVar4._4_4_ = work->destructor;\n      if ((uVar4 & 0x100000001) != 0) {\n        if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }\n      }\n      iVar11 = (int)pcVar13 - (int)s.b;\n      if (pcVar13 == s.b) {\n        iVar11 = 0;\n      }\n      s.p = pcVar13;\n      remember_Ktype(work,s.b,iVar11);\n      iVar11 = (int)s.p - (int)s.b;\n      if (s.b == s.p) {\n        iVar11 = 0;\n      }\n      remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8);\n      pcVar13 = ".";\n      if ((work->options & 4) == 0) {\n        pcVar13 = "::";\n      }\n      string_prepend(declp,pcVar13);\n      if ((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)) {\n        string_prependn(declp,s.b,iVar8);\n      }\n      if (s.b != (char *)0x0) {\n        free(s.b);\n      }\n      remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      uVar12 = work->options;\n      if (((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')) {\n        iVar8 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      uVar6 = true;\n      uVar16 = iVar8 != 0 & uVar7;\n      break;\n    case 'B':\n      iVar8 = do_type(work,mangled,&s);\n      if (iVar8 != 0) {\n        pcVar9 = "::";\n        if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }\n        string_append(&s,pcVar9);\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if (s.b != (char *)0x0) {\n          free(s.b);\n        }\n      }\n      uVar16 = iVar8 != 0;\nLAB_003259a2:\n      pcVar9 = (char *)0x0;\n      uVar7 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar12 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }\n      work->type_quals = work->type_quals | uVar12;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *mangled = (char *)((long)pcVar13 + 1);\n      if ((work->options & 0x3c00U) != 0) {\n        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      uVar12 = work->options;\n      if ((uVar12 & 0x2100) == 0) {\n        uVar6 = true;\n      }\n      else {\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0);\n      bVar10 = true;\n      if ((work->constructor & 1) != 0) {\n        bVar10 = (bool)uVar5;\n      }\n      if (**mangled == '\0') {\n        return 0;\n      }\n      *mangled = *mangled + 1;\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = bVar10;\n      break;\n    case 'K':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      uVar16 = iVar8 != 0;\n      if ((work->options & 0x300U) != 0) goto LAB_003259a2;\n      uVar16 = uVar16 & uVar7;\n      pcVar9 = (char *)0x0;\n      break;\n    case 'L':\n      if ((work->options & 0x1000U) == 0) {\n        return 0;\n      }\n      do {\n        pcVar15 = pcVar13;\n        *mangled = pcVar15 + 1;\n        cVar1 = pcVar15[1];\n        if (cVar1 == '\0') break;\n        pcVar13 = pcVar15 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *mangled = pcVar15 + 2;\n      goto LAB_0032581c;\n    case 'Q':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      remember_type(work,pcVar13,(int)*mangled - (int)pcVar13);\n      uVar12 = work->options;\n      if ((uVar12 & 0x300) != 0) {\n        pcVar9 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar9 = (char *)0x0;\n      if ((bool)uVar7) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      work->static_type = 1;\nLAB_0032581c:\n      if (!(bool)uVar7) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {\n        if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }\n        *mangled = (char *)((long)pcVar13 + 1);\n        if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      iVar8 = do_type(work,mangled,&s);\n      pcVar13 = s.p;\n      if (((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n        string_prependn(declp,s.b,iVar11);\n        pcVar13 = s.b;\n      }\n      if (pcVar13 != (char *)0x0) {\n        free(pcVar13);\n      }\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = true;\n      break;\n    case 't':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      trawname.e = (char *)0x0;\n      trawname.p = (char *)0x0;\n      trawname.b = (char *)0x0;\n      tname.e = (char *)0x0;\n      tname.p = (char *)0x0;\n      tname.b = (char *)0x0;\n      iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1);\n      if (iVar8 != 0) {\n        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      }\n      pcVar9 = "::";\n      if ((work->options & 4) != 0) {\n        pcVar9 = ".";\n      }\n      string_append(&tname,pcVar9);\n      if ((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)) {\n        if ((work->destructor & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        string_prepend(&trawname,"~");\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->destructor = work->destructor + -1;\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      else {\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      if ((uVar3 & 0x100000001) != 0) {\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->constructor = work->constructor + -1;\n      }\n      if (trawname.b != (char *)0x0) {\n        free(trawname.b);\n        trawname.p = (char *)0x0;\n        trawname.e = (char *)0x0;\n        trawname.b = (char *)0x0;\n      }\n      uVar16 = iVar8 != 0;\n      uVar7 = true;\n      pcVar9 = tname.b;\n      if (tname.b != (char *)0x0) {\n        free(tname.b);\n        tname.p = (char *)0x0;\n        tname.e = (char *)0x0;\n        tname.b = (char *)0x0;\n        pcVar9 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar16) goto LAB_00325766;\nLAB_00325740:\n    uVar12 = work->options;\njoined_r0x00325745:\n    if ((uVar12 & 0x2c00) != 0) {\n      forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n    }\n    uVar7 = false;\n    iVar8 = demangle_args(work,mangled,declp);\n    uVar6 = true;\nLAB_00325766:\n    if (iVar8 == 0) {\n      return 0;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    pcVar13 = *mangled;\n    cVar1 = *pcVar13;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar12 = work->options;\n      if ((!(bool)uVar6) && ((uVar12 & 0x300) != 0)) {\n        iVar8 = demangle_args(work,mangled,declp);\n        if (iVar8 == 0) {\n          return 0;\n        }\n        uVar12 = work->options;\n      }\n      if ((uVar12 & 1) == 0) {\n        return iVar8;\n      }\n      if (work->static_type != 0) {\n        string_append(declp," static");\n      }\n      iVar11 = work->type_quals;\n      if (iVar11 == 0) {\n        return iVar8;\n      }\n      if (declp->b != declp->p) {\n        string_append(declp," ");\n        iVar11 = work->type_quals;\n      }\n      pcVar9 = qualifier_string(iVar11);\n      if (pcVar9 == (char *)0x0) {\n        return iVar8;\n      }\n      if (*pcVar9 == '\0') {\n        return iVar8;\n      }\n      string_append(declp,pcVar9);\n      return iVar8;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      work->temp_start = -1;\n      s.e = (char *)0x0;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      s.p = (char *)0x0;\n      s.b = (char *)0x0;\n      iVar8 = register_Btype(work);\n      iVar11 = demangle_class_name(work,mangled,&s);\n      pcVar13 = s.p;\n      if (iVar11 == 0) {\n        if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }\n        return 0;\n      }\n      uVar4._0_4_ = work->constructor;\n      uVar4._4_4_ = work->destructor;\n      if ((uVar4 & 0x100000001) != 0) {\n        if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }\n      }\n      iVar11 = (int)pcVar13 - (int)s.b;\n      if (pcVar13 == s.b) {\n        iVar11 = 0;\n      }\n      s.p = pcVar13;\n      remember_Ktype(work,s.b,iVar11);\n      iVar11 = (int)s.p - (int)s.b;\n      if (s.b == s.p) {\n        iVar11 = 0;\n      }\n      remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8);\n      pcVar13 = ".";\n      if ((work->options & 4) == 0) {\n        pcVar13 = "::";\n      }\n      string_prepend(declp,pcVar13);\n      if ((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)) {\n        string_prependn(declp,s.b,iVar8);\n      }\n      if (s.b != (char *)0x0) {\n        free(s.b);\n      }\n      remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      uVar12 = work->options;\n      if (((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')) {\n        iVar8 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      uVar6 = true;\n      uVar16 = iVar8 != 0 & uVar7;\n      break;\n    case 'B':\n      iVar8 = do_type(work,mangled,&s);\n      if (iVar8 != 0) {\n        pcVar9 = "::";\n        if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }\n        string_append(&s,pcVar9);\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if (s.b != (char *)0x0) {\n          free(s.b);\n        }\n      }\n      uVar16 = iVar8 != 0;\nLAB_003259a2:\n      pcVar9 = (char *)0x0;\n      uVar7 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar12 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }\n      work->type_quals = work->type_quals | uVar12;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *mangled = (char *)((long)pcVar13 + 1);\n      if ((work->options & 0x3c00U) != 0) {\n        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      uVar12 = work->options;\n      if ((uVar12 & 0x2100) == 0) {\n        uVar6 = true;\n      }\n      else {\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0);\n      bVar10 = true;\n      if ((work->constructor & 1) != 0) {\n        bVar10 = (bool)uVar5;\n      }\n      if (**mangled == '\0') {\n        return 0;\n      }\n      *mangled = *mangled + 1;\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = bVar10;\n      break;\n    case 'K':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      uVar16 = iVar8 != 0;\n      if ((work->options & 0x300U) != 0) goto LAB_003259a2;\n      uVar16 = uVar16 & uVar7;\n      pcVar9 = (char *)0x0;\n      break;\n    case 'L':\n      if ((work->options & 0x1000U) == 0) {\n        return 0;\n      }\n      do {\n        pcVar15 = pcVar13;\n        *mangled = pcVar15 + 1;\n        cVar1 = pcVar15[1];\n        if (cVar1 == '\0') break;\n        pcVar13 = pcVar15 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *mangled = pcVar15 + 2;\n      goto LAB_0032581c;\n    case 'Q':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      remember_type(work,pcVar13,(int)*mangled - (int)pcVar13);\n      uVar12 = work->options;\n      if ((uVar12 & 0x300) != 0) {\n        pcVar9 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar9 = (char *)0x0;\n      if ((bool)uVar7) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      work->static_type = 1;\nLAB_0032581c:\n      if (!(bool)uVar7) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {\n        if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }\n        *mangled = (char *)((long)pcVar13 + 1);\n        if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      iVar8 = do_type(work,mangled,&s);\n      pcVar13 = s.p;\n      if (((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n        string_prependn(declp,s.b,iVar11);\n        pcVar13 = s.b;\n      }\n      if (pcVar13 != (char *)0x0) {\n        free(pcVar13);\n      }\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = true;\n      break;\n    case 't':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      trawname.e = (char *)0x0;\n      trawname.p = (char *)0x0;\n      trawname.b = (char *)0x0;\n      tname.e = (char *)0x0;\n      tname.p = (char *)0x0;\n      tname.b = (char *)0x0;\n      iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1);\n      if (iVar8 != 0) {\n        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      }\n      pcVar9 = "::";\n      if ((work->options & 4) != 0) {\n        pcVar9 = ".";\n      }\n      string_append(&tname,pcVar9);\n      if ((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)) {\n        if ((work->destructor & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        string_prepend(&trawname,"~");\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->destructor = work->destructor + -1;\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      else {\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      if ((uVar3 & 0x100000001) != 0) {\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->constructor = work->constructor + -1;\n      }\n      if (trawname.b != (char *)0x0) {\n        free(trawname.b);\n        trawname.p = (char *)0x0;\n        trawname.e = (char *)0x0;\n        trawname.b = (char *)0x0;\n      }\n      uVar16 = iVar8 != 0;\n      uVar7 = true;\n      pcVar9 = tname.b;\n      if (tname.b != (char *)0x0) {\n        free(tname.b);\n        tname.p = (char *)0x0;\n        tname.e = (char *)0x0;\n        tname.b = (char *)0x0;\n        pcVar9 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar16) goto LAB_00325766;\nLAB_00325740:\n    uVar12 = work->options;\njoined_r0x00325745:\n    if ((uVar12 & 0x2c00) != 0) {\n      forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n    }\n    uVar7 = false;\n    iVar8 = demangle_args(work,mangled,declp);\n    uVar6 = true;\nLAB_00325766:\n    if (iVar8 == 0) {\n      return 0;\n    }\n  } while( true );" do (compound_statement "{\n    pcVar13 = *mangled;\n    cVar1 = *pcVar13;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar12 = work->options;\n      if ((!(bool)uVar6) && ((uVar12 & 0x300) != 0)) {\n        iVar8 = demangle_args(work,mangled,declp);\n        if (iVar8 == 0) {\n          return 0;\n        }\n        uVar12 = work->options;\n      }\n      if ((uVar12 & 1) == 0) {\n        return iVar8;\n      }\n      if (work->static_type != 0) {\n        string_append(declp," static");\n      }\n      iVar11 = work->type_quals;\n      if (iVar11 == 0) {\n        return iVar8;\n      }\n      if (declp->b != declp->p) {\n        string_append(declp," ");\n        iVar11 = work->type_quals;\n      }\n      pcVar9 = qualifier_string(iVar11);\n      if (pcVar9 == (char *)0x0) {\n        return iVar8;\n      }\n      if (*pcVar9 == '\0') {\n        return iVar8;\n      }\n      string_append(declp,pcVar9);\n      return iVar8;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      work->temp_start = -1;\n      s.e = (char *)0x0;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      s.p = (char *)0x0;\n      s.b = (char *)0x0;\n      iVar8 = register_Btype(work);\n      iVar11 = demangle_class_name(work,mangled,&s);\n      pcVar13 = s.p;\n      if (iVar11 == 0) {\n        if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }\n        return 0;\n      }\n      uVar4._0_4_ = work->constructor;\n      uVar4._4_4_ = work->destructor;\n      if ((uVar4 & 0x100000001) != 0) {\n        if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }\n      }\n      iVar11 = (int)pcVar13 - (int)s.b;\n      if (pcVar13 == s.b) {\n        iVar11 = 0;\n      }\n      s.p = pcVar13;\n      remember_Ktype(work,s.b,iVar11);\n      iVar11 = (int)s.p - (int)s.b;\n      if (s.b == s.p) {\n        iVar11 = 0;\n      }\n      remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8);\n      pcVar13 = ".";\n      if ((work->options & 4) == 0) {\n        pcVar13 = "::";\n      }\n      string_prepend(declp,pcVar13);\n      if ((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)) {\n        string_prependn(declp,s.b,iVar8);\n      }\n      if (s.b != (char *)0x0) {\n        free(s.b);\n      }\n      remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      uVar12 = work->options;\n      if (((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')) {\n        iVar8 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      uVar6 = true;\n      uVar16 = iVar8 != 0 & uVar7;\n      break;\n    case 'B':\n      iVar8 = do_type(work,mangled,&s);\n      if (iVar8 != 0) {\n        pcVar9 = "::";\n        if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }\n        string_append(&s,pcVar9);\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if (s.b != (char *)0x0) {\n          free(s.b);\n        }\n      }\n      uVar16 = iVar8 != 0;\nLAB_003259a2:\n      pcVar9 = (char *)0x0;\n      uVar7 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar12 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }\n      work->type_quals = work->type_quals | uVar12;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *mangled = (char *)((long)pcVar13 + 1);\n      if ((work->options & 0x3c00U) != 0) {\n        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      uVar12 = work->options;\n      if ((uVar12 & 0x2100) == 0) {\n        uVar6 = true;\n      }\n      else {\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0);\n      bVar10 = true;\n      if ((work->constructor & 1) != 0) {\n        bVar10 = (bool)uVar5;\n      }\n      if (**mangled == '\0') {\n        return 0;\n      }\n      *mangled = *mangled + 1;\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = bVar10;\n      break;\n    case 'K':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      uVar16 = iVar8 != 0;\n      if ((work->options & 0x300U) != 0) goto LAB_003259a2;\n      uVar16 = uVar16 & uVar7;\n      pcVar9 = (char *)0x0;\n      break;\n    case 'L':\n      if ((work->options & 0x1000U) == 0) {\n        return 0;\n      }\n      do {\n        pcVar15 = pcVar13;\n        *mangled = pcVar15 + 1;\n        cVar1 = pcVar15[1];\n        if (cVar1 == '\0') break;\n        pcVar13 = pcVar15 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *mangled = pcVar15 + 2;\n      goto LAB_0032581c;\n    case 'Q':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      remember_type(work,pcVar13,(int)*mangled - (int)pcVar13);\n      uVar12 = work->options;\n      if ((uVar12 & 0x300) != 0) {\n        pcVar9 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar9 = (char *)0x0;\n      if ((bool)uVar7) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      work->static_type = 1;\nLAB_0032581c:\n      if (!(bool)uVar7) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {\n        if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }\n        *mangled = (char *)((long)pcVar13 + 1);\n        if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      iVar8 = do_type(work,mangled,&s);\n      pcVar13 = s.p;\n      if (((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n        string_prependn(declp,s.b,iVar11);\n        pcVar13 = s.b;\n      }\n      if (pcVar13 != (char *)0x0) {\n        free(pcVar13);\n      }\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = true;\n      break;\n    case 't':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      trawname.e = (char *)0x0;\n      trawname.p = (char *)0x0;\n      trawname.b = (char *)0x0;\n      tname.e = (char *)0x0;\n      tname.p = (char *)0x0;\n      tname.b = (char *)0x0;\n      iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1);\n      if (iVar8 != 0) {\n        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      }\n      pcVar9 = "::";\n      if ((work->options & 4) != 0) {\n        pcVar9 = ".";\n      }\n      string_append(&tname,pcVar9);\n      if ((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)) {\n        if ((work->destructor & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        string_prepend(&trawname,"~");\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->destructor = work->destructor + -1;\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      else {\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      if ((uVar3 & 0x100000001) != 0) {\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->constructor = work->constructor + -1;\n      }\n      if (trawname.b != (char *)0x0) {\n        free(trawname.b);\n        trawname.p = (char *)0x0;\n        trawname.e = (char *)0x0;\n        trawname.b = (char *)0x0;\n      }\n      uVar16 = iVar8 != 0;\n      uVar7 = true;\n      pcVar9 = tname.b;\n      if (tname.b != (char *)0x0) {\n        free(tname.b);\n        tname.p = (char *)0x0;\n        tname.e = (char *)0x0;\n        tname.b = (char *)0x0;\n        pcVar9 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar16) goto LAB_00325766;\nLAB_00325740:\n    uVar12 = work->options;\njoined_r0x00325745:\n    if ((uVar12 & 0x2c00) != 0) {\n      forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n    }\n    uVar7 = false;\n    iVar8 = demangle_args(work,mangled,declp);\n    uVar6 = true;\nLAB_00325766:\n    if (iVar8 == 0) {\n      return 0;\n    }\n  }" { (expression_statement "pcVar13 = *mangled;" (assignment_expression "pcVar13 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;) (expression_statement "cVar1 = *pcVar13;" (assignment_expression "cVar1 = *pcVar13" identifier = (pointer_expression "*pcVar13" * identifier)) ;) (labeled_statement "joined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar12 = work->options;\n      if ((!(bool)uVar6) && ((uVar12 & 0x300) != 0)) {\n        iVar8 = demangle_args(work,mangled,declp);\n        if (iVar8 == 0) {\n          return 0;\n        }\n        uVar12 = work->options;\n      }\n      if ((uVar12 & 1) == 0) {\n        return iVar8;\n      }\n      if (work->static_type != 0) {\n        string_append(declp," static");\n      }\n      iVar11 = work->type_quals;\n      if (iVar11 == 0) {\n        return iVar8;\n      }\n      if (declp->b != declp->p) {\n        string_append(declp," ");\n        iVar11 = work->type_quals;\n      }\n      pcVar9 = qualifier_string(iVar11);\n      if (pcVar9 == (char *)0x0) {\n        return iVar8;\n      }\n      if (*pcVar9 == '\0') {\n        return iVar8;\n      }\n      string_append(declp,pcVar9);\n      return iVar8;\n    }" statement_identifier : (if_statement "if (cVar1 == '\0') {\n      uVar12 = work->options;\n      if ((!(bool)uVar6) && ((uVar12 & 0x300) != 0)) {\n        iVar8 = demangle_args(work,mangled,declp);\n        if (iVar8 == 0) {\n          return 0;\n        }\n        uVar12 = work->options;\n      }\n      if ((uVar12 & 1) == 0) {\n        return iVar8;\n      }\n      if (work->static_type != 0) {\n        string_append(declp," static");\n      }\n      iVar11 = work->type_quals;\n      if (iVar11 == 0) {\n        return iVar8;\n      }\n      if (declp->b != declp->p) {\n        string_append(declp," ");\n        iVar11 = work->type_quals;\n      }\n      pcVar9 = qualifier_string(iVar11);\n      if (pcVar9 == (char *)0x0) {\n        return iVar8;\n      }\n      if (*pcVar9 == '\0') {\n        return iVar8;\n      }\n      string_append(declp,pcVar9);\n      return iVar8;\n    }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar12 = work->options;\n      if ((!(bool)uVar6) && ((uVar12 & 0x300) != 0)) {\n        iVar8 = demangle_args(work,mangled,declp);\n        if (iVar8 == 0) {\n          return 0;\n        }\n        uVar12 = work->options;\n      }\n      if ((uVar12 & 1) == 0) {\n        return iVar8;\n      }\n      if (work->static_type != 0) {\n        string_append(declp," static");\n      }\n      iVar11 = work->type_quals;\n      if (iVar11 == 0) {\n        return iVar8;\n      }\n      if (declp->b != declp->p) {\n        string_append(declp," ");\n        iVar11 = work->type_quals;\n      }\n      pcVar9 = qualifier_string(iVar11);\n      if (pcVar9 == (char *)0x0) {\n        return iVar8;\n      }\n      if (*pcVar9 == '\0') {\n        return iVar8;\n      }\n      string_append(declp,pcVar9);\n      return iVar8;\n    }" { (expression_statement "uVar12 = work->options;" (assignment_expression "uVar12 = work->options" identifier = (field_expression "work->options" identifier -> field_identifier)) ;) (if_statement "if ((!(bool)uVar6) && ((uVar12 & 0x300) != 0)) {\n        iVar8 = demangle_args(work,mangled,declp);\n        if (iVar8 == 0) {\n          return 0;\n        }\n        uVar12 = work->options;\n      }" if (parenthesized_expression "((!(bool)uVar6) && ((uVar12 & 0x300) != 0))" ( (binary_expression "(!(bool)uVar6) && ((uVar12 & 0x300) != 0)" (parenthesized_expression "(!(bool)uVar6)" ( (unary_expression "!(bool)uVar6" ! (cast_expression "(bool)uVar6" ( (type_descriptor "bool" primitive_type) ) identifier)) )) && (parenthesized_expression "((uVar12 & 0x300) != 0)" ( (binary_expression "(uVar12 & 0x300) != 0" (parenthesized_expression "(uVar12 & 0x300)" ( (binary_expression "uVar12 & 0x300" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        iVar8 = demangle_args(work,mangled,declp);\n        if (iVar8 == 0) {\n          return 0;\n        }\n        uVar12 = work->options;\n      }" { (expression_statement "iVar8 = demangle_args(work,mangled,declp);" (assignment_expression "iVar8 = demangle_args(work,mangled,declp)" identifier = (call_expression "demangle_args(work,mangled,declp)" identifier (argument_list "(work,mangled,declp)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar8 == 0) {\n          return 0;\n        }" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar12 = work->options;" (assignment_expression "uVar12 = work->options" identifier = (field_expression "work->options" identifier -> field_identifier)) ;) })) (if_statement "if ((uVar12 & 1) == 0) {\n        return iVar8;\n      }" if (parenthesized_expression "((uVar12 & 1) == 0)" ( (binary_expression "(uVar12 & 1) == 0" (parenthesized_expression "(uVar12 & 1)" ( (binary_expression "uVar12 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        return iVar8;\n      }" { (return_statement "return iVar8;" return identifier ;) })) (if_statement "if (work->static_type != 0) {\n        string_append(declp," static");\n      }" if (parenthesized_expression "(work->static_type != 0)" ( (binary_expression "work->static_type != 0" (field_expression "work->static_type" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n        string_append(declp," static");\n      }" { (expression_statement "string_append(declp," static");" (call_expression "string_append(declp," static")" identifier (argument_list "(declp," static")" ( identifier , (string_literal "" static"" " string_content ") ))) ;) })) (expression_statement "iVar11 = work->type_quals;" (assignment_expression "iVar11 = work->type_quals" identifier = (field_expression "work->type_quals" identifier -> field_identifier)) ;) (if_statement "if (iVar11 == 0) {\n        return iVar8;\n      }" if (parenthesized_expression "(iVar11 == 0)" ( (binary_expression "iVar11 == 0" identifier == number_literal) )) (compound_statement "{\n        return iVar8;\n      }" { (return_statement "return iVar8;" return identifier ;) })) (if_statement "if (declp->b != declp->p) {\n        string_append(declp," ");\n        iVar11 = work->type_quals;\n      }" if (parenthesized_expression "(declp->b != declp->p)" ( (binary_expression "declp->b != declp->p" (field_expression "declp->b" identifier -> field_identifier) != (field_expression "declp->p" identifier -> field_identifier)) )) (compound_statement "{\n        string_append(declp," ");\n        iVar11 = work->type_quals;\n      }" { (expression_statement "string_append(declp," ");" (call_expression "string_append(declp," ")" identifier (argument_list "(declp," ")" ( identifier , (string_literal "" "" " string_content ") ))) ;) (expression_statement "iVar11 = work->type_quals;" (assignment_expression "iVar11 = work->type_quals" identifier = (field_expression "work->type_quals" identifier -> field_identifier)) ;) })) (expression_statement "pcVar9 = qualifier_string(iVar11);" (assignment_expression "pcVar9 = qualifier_string(iVar11)" identifier = (call_expression "qualifier_string(iVar11)" identifier (argument_list "(iVar11)" ( identifier )))) ;) (if_statement "if (pcVar9 == (char *)0x0) {\n        return iVar8;\n      }" if (parenthesized_expression "(pcVar9 == (char *)0x0)" ( (binary_expression "pcVar9 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return iVar8;\n      }" { (return_statement "return iVar8;" return identifier ;) })) (if_statement "if (*pcVar9 == '\0') {\n        return iVar8;\n      }" if (parenthesized_expression "(*pcVar9 == '\0')" ( (binary_expression "*pcVar9 == '\0'" (pointer_expression "*pcVar9" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return iVar8;\n      }" { (return_statement "return iVar8;" return identifier ;) })) (expression_statement "string_append(declp,pcVar9);" (call_expression "string_append(declp,pcVar9)" identifier (argument_list "(declp,pcVar9)" ( identifier , identifier ))) ;) (return_statement "return iVar8;" return identifier ;) }))) (switch_statement "switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      work->temp_start = -1;\n      s.e = (char *)0x0;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      s.p = (char *)0x0;\n      s.b = (char *)0x0;\n      iVar8 = register_Btype(work);\n      iVar11 = demangle_class_name(work,mangled,&s);\n      pcVar13 = s.p;\n      if (iVar11 == 0) {\n        if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }\n        return 0;\n      }\n      uVar4._0_4_ = work->constructor;\n      uVar4._4_4_ = work->destructor;\n      if ((uVar4 & 0x100000001) != 0) {\n        if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }\n      }\n      iVar11 = (int)pcVar13 - (int)s.b;\n      if (pcVar13 == s.b) {\n        iVar11 = 0;\n      }\n      s.p = pcVar13;\n      remember_Ktype(work,s.b,iVar11);\n      iVar11 = (int)s.p - (int)s.b;\n      if (s.b == s.p) {\n        iVar11 = 0;\n      }\n      remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8);\n      pcVar13 = ".";\n      if ((work->options & 4) == 0) {\n        pcVar13 = "::";\n      }\n      string_prepend(declp,pcVar13);\n      if ((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)) {\n        string_prependn(declp,s.b,iVar8);\n      }\n      if (s.b != (char *)0x0) {\n        free(s.b);\n      }\n      remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      uVar12 = work->options;\n      if (((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')) {\n        iVar8 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      uVar6 = true;\n      uVar16 = iVar8 != 0 & uVar7;\n      break;\n    case 'B':\n      iVar8 = do_type(work,mangled,&s);\n      if (iVar8 != 0) {\n        pcVar9 = "::";\n        if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }\n        string_append(&s,pcVar9);\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if (s.b != (char *)0x0) {\n          free(s.b);\n        }\n      }\n      uVar16 = iVar8 != 0;\nLAB_003259a2:\n      pcVar9 = (char *)0x0;\n      uVar7 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar12 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }\n      work->type_quals = work->type_quals | uVar12;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *mangled = (char *)((long)pcVar13 + 1);\n      if ((work->options & 0x3c00U) != 0) {\n        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      uVar12 = work->options;\n      if ((uVar12 & 0x2100) == 0) {\n        uVar6 = true;\n      }\n      else {\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0);\n      bVar10 = true;\n      if ((work->constructor & 1) != 0) {\n        bVar10 = (bool)uVar5;\n      }\n      if (**mangled == '\0') {\n        return 0;\n      }\n      *mangled = *mangled + 1;\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = bVar10;\n      break;\n    case 'K':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      uVar16 = iVar8 != 0;\n      if ((work->options & 0x300U) != 0) goto LAB_003259a2;\n      uVar16 = uVar16 & uVar7;\n      pcVar9 = (char *)0x0;\n      break;\n    case 'L':\n      if ((work->options & 0x1000U) == 0) {\n        return 0;\n      }\n      do {\n        pcVar15 = pcVar13;\n        *mangled = pcVar15 + 1;\n        cVar1 = pcVar15[1];\n        if (cVar1 == '\0') break;\n        pcVar13 = pcVar15 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *mangled = pcVar15 + 2;\n      goto LAB_0032581c;\n    case 'Q':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      remember_type(work,pcVar13,(int)*mangled - (int)pcVar13);\n      uVar12 = work->options;\n      if ((uVar12 & 0x300) != 0) {\n        pcVar9 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar9 = (char *)0x0;\n      if ((bool)uVar7) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      work->static_type = 1;\nLAB_0032581c:\n      if (!(bool)uVar7) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {\n        if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }\n        *mangled = (char *)((long)pcVar13 + 1);\n        if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      iVar8 = do_type(work,mangled,&s);\n      pcVar13 = s.p;\n      if (((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n        string_prependn(declp,s.b,iVar11);\n        pcVar13 = s.b;\n      }\n      if (pcVar13 != (char *)0x0) {\n        free(pcVar13);\n      }\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = true;\n      break;\n    case 't':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      trawname.e = (char *)0x0;\n      trawname.p = (char *)0x0;\n      trawname.b = (char *)0x0;\n      tname.e = (char *)0x0;\n      tname.p = (char *)0x0;\n      tname.b = (char *)0x0;\n      iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1);\n      if (iVar8 != 0) {\n        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      }\n      pcVar9 = "::";\n      if ((work->options & 4) != 0) {\n        pcVar9 = ".";\n      }\n      string_append(&tname,pcVar9);\n      if ((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)) {\n        if ((work->destructor & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        string_prepend(&trawname,"~");\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->destructor = work->destructor + -1;\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      else {\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      if ((uVar3 & 0x100000001) != 0) {\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->constructor = work->constructor + -1;\n      }\n      if (trawname.b != (char *)0x0) {\n        free(trawname.b);\n        trawname.p = (char *)0x0;\n        trawname.e = (char *)0x0;\n        trawname.b = (char *)0x0;\n      }\n      uVar16 = iVar8 != 0;\n      uVar7 = true;\n      pcVar9 = tname.b;\n      if (tname.b != (char *)0x0) {\n        free(tname.b);\n        tname.p = (char *)0x0;\n        tname.e = (char *)0x0;\n        tname.b = (char *)0x0;\n        pcVar9 = (char *)0x0;\n      }\n    }" switch (parenthesized_expression "(cVar1)" ( identifier )) (compound_statement "{\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      work->temp_start = -1;\n      s.e = (char *)0x0;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      s.p = (char *)0x0;\n      s.b = (char *)0x0;\n      iVar8 = register_Btype(work);\n      iVar11 = demangle_class_name(work,mangled,&s);\n      pcVar13 = s.p;\n      if (iVar11 == 0) {\n        if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }\n        return 0;\n      }\n      uVar4._0_4_ = work->constructor;\n      uVar4._4_4_ = work->destructor;\n      if ((uVar4 & 0x100000001) != 0) {\n        if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }\n      }\n      iVar11 = (int)pcVar13 - (int)s.b;\n      if (pcVar13 == s.b) {\n        iVar11 = 0;\n      }\n      s.p = pcVar13;\n      remember_Ktype(work,s.b,iVar11);\n      iVar11 = (int)s.p - (int)s.b;\n      if (s.b == s.p) {\n        iVar11 = 0;\n      }\n      remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8);\n      pcVar13 = ".";\n      if ((work->options & 4) == 0) {\n        pcVar13 = "::";\n      }\n      string_prepend(declp,pcVar13);\n      if ((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)) {\n        string_prependn(declp,s.b,iVar8);\n      }\n      if (s.b != (char *)0x0) {\n        free(s.b);\n      }\n      remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      uVar12 = work->options;\n      if (((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')) {\n        iVar8 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      uVar6 = true;\n      uVar16 = iVar8 != 0 & uVar7;\n      break;\n    case 'B':\n      iVar8 = do_type(work,mangled,&s);\n      if (iVar8 != 0) {\n        pcVar9 = "::";\n        if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }\n        string_append(&s,pcVar9);\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if (s.b != (char *)0x0) {\n          free(s.b);\n        }\n      }\n      uVar16 = iVar8 != 0;\nLAB_003259a2:\n      pcVar9 = (char *)0x0;\n      uVar7 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar12 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }\n      work->type_quals = work->type_quals | uVar12;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *mangled = (char *)((long)pcVar13 + 1);\n      if ((work->options & 0x3c00U) != 0) {\n        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      uVar12 = work->options;\n      if ((uVar12 & 0x2100) == 0) {\n        uVar6 = true;\n      }\n      else {\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0);\n      bVar10 = true;\n      if ((work->constructor & 1) != 0) {\n        bVar10 = (bool)uVar5;\n      }\n      if (**mangled == '\0') {\n        return 0;\n      }\n      *mangled = *mangled + 1;\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = bVar10;\n      break;\n    case 'K':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      uVar16 = iVar8 != 0;\n      if ((work->options & 0x300U) != 0) goto LAB_003259a2;\n      uVar16 = uVar16 & uVar7;\n      pcVar9 = (char *)0x0;\n      break;\n    case 'L':\n      if ((work->options & 0x1000U) == 0) {\n        return 0;\n      }\n      do {\n        pcVar15 = pcVar13;\n        *mangled = pcVar15 + 1;\n        cVar1 = pcVar15[1];\n        if (cVar1 == '\0') break;\n        pcVar13 = pcVar15 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *mangled = pcVar15 + 2;\n      goto LAB_0032581c;\n    case 'Q':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      remember_type(work,pcVar13,(int)*mangled - (int)pcVar13);\n      uVar12 = work->options;\n      if ((uVar12 & 0x300) != 0) {\n        pcVar9 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar9 = (char *)0x0;\n      if ((bool)uVar7) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      work->static_type = 1;\nLAB_0032581c:\n      if (!(bool)uVar7) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {\n        if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }\n        *mangled = (char *)((long)pcVar13 + 1);\n        if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      iVar8 = do_type(work,mangled,&s);\n      pcVar13 = s.p;\n      if (((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n        string_prependn(declp,s.b,iVar11);\n        pcVar13 = s.b;\n      }\n      if (pcVar13 != (char *)0x0) {\n        free(pcVar13);\n      }\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = true;\n      break;\n    case 't':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      trawname.e = (char *)0x0;\n      trawname.p = (char *)0x0;\n      trawname.b = (char *)0x0;\n      tname.e = (char *)0x0;\n      tname.p = (char *)0x0;\n      tname.b = (char *)0x0;\n      iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1);\n      if (iVar8 != 0) {\n        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      }\n      pcVar9 = "::";\n      if ((work->options & 4) != 0) {\n        pcVar9 = ".";\n      }\n      string_append(&tname,pcVar9);\n      if ((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)) {\n        if ((work->destructor & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        string_prepend(&trawname,"~");\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->destructor = work->destructor + -1;\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      else {\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      if ((uVar3 & 0x100000001) != 0) {\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->constructor = work->constructor + -1;\n      }\n      if (trawname.b != (char *)0x0) {\n        free(trawname.b);\n        trawname.p = (char *)0x0;\n        trawname.e = (char *)0x0;\n        trawname.b = (char *)0x0;\n      }\n      uVar16 = iVar8 != 0;\n      uVar7 = true;\n      pcVar9 = tname.b;\n      if (tname.b != (char *)0x0) {\n        free(tname.b);\n        tname.p = (char *)0x0;\n        tname.e = (char *)0x0;\n        tname.b = (char *)0x0;\n        pcVar9 = (char *)0x0;\n      }\n    }" { (case_statement "case '0':" case (char_literal "'0'" ' character ') :) (case_statement "case '1':" case (char_literal "'1'" ' character ') :) (case_statement "case '2':" case (char_literal "'2'" ' character ') :) (case_statement "case '3':" case (char_literal "'3'" ' character ') :) (case_statement "case '4':" case (char_literal "'4'" ' character ') :) (case_statement "case '5':" case (char_literal "'5'" ' character ') :) (case_statement "case '6':" case (char_literal "'6'" ' character ') :) (case_statement "case '7':" case (char_literal "'7'" ' character ') :) (case_statement "case '8':" case (char_literal "'8'" ' character ') :) (case_statement "case '9':\n      work->temp_start = -1;\n      s.e = (char *)0x0;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      s.p = (char *)0x0;\n      s.b = (char *)0x0;\n      iVar8 = register_Btype(work);\n      iVar11 = demangle_class_name(work,mangled,&s);\n      pcVar13 = s.p;\n      if (iVar11 == 0) {\n        if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }\n        return 0;\n      }\n      uVar4._0_4_ = work->constructor;\n      uVar4._4_4_ = work->destructor;\n      if ((uVar4 & 0x100000001) != 0) {\n        if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }\n      }\n      iVar11 = (int)pcVar13 - (int)s.b;\n      if (pcVar13 == s.b) {\n        iVar11 = 0;\n      }\n      s.p = pcVar13;\n      remember_Ktype(work,s.b,iVar11);\n      iVar11 = (int)s.p - (int)s.b;\n      if (s.b == s.p) {\n        iVar11 = 0;\n      }\n      remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8);\n      pcVar13 = ".";\n      if ((work->options & 4) == 0) {\n        pcVar13 = "::";\n      }\n      string_prepend(declp,pcVar13);\n      if ((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)) {\n        string_prependn(declp,s.b,iVar8);\n      }\n      if (s.b != (char *)0x0) {\n        free(s.b);\n      }\n      remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      uVar12 = work->options;\n      if (((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')) {\n        iVar8 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;" case (char_literal "'9'" ' character ') : (expression_statement "work->temp_start = -1;" (assignment_expression "work->temp_start = -1" (field_expression "work->temp_start" identifier -> field_identifier) = number_literal) ;) (expression_statement "s.e = (char *)0x0;" (assignment_expression "s.e = (char *)0x0" (field_expression "s.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }" if (parenthesized_expression "(pcVar9 == (char *)0x0)" ( (binary_expression "pcVar9 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar9 = pcVar13;\n      }" { (expression_statement "pcVar9 = pcVar13;" (assignment_expression "pcVar9 = pcVar13" identifier = identifier) ;) })) (expression_statement "s.p = (char *)0x0;" (assignment_expression "s.p = (char *)0x0" (field_expression "s.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "s.b = (char *)0x0;" (assignment_expression "s.b = (char *)0x0" (field_expression "s.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "iVar8 = register_Btype(work);" (assignment_expression "iVar8 = register_Btype(work)" identifier = (call_expression "register_Btype(work)" identifier (argument_list "(work)" ( identifier )))) ;) (expression_statement "iVar11 = demangle_class_name(work,mangled,&s);" (assignment_expression "iVar11 = demangle_class_name(work,mangled,&s)" identifier = (call_expression "demangle_class_name(work,mangled,&s)" identifier (argument_list "(work,mangled,&s)" ( identifier , identifier , (pointer_expression "&s" & identifier) )))) ;) (expression_statement "pcVar13 = s.p;" (assignment_expression "pcVar13 = s.p" identifier = (field_expression "s.p" identifier . field_identifier)) ;) (if_statement "if (iVar11 == 0) {\n        if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }\n        return 0;\n      }" if (parenthesized_expression "(iVar11 == 0)" ( (binary_expression "iVar11 == 0" identifier == number_literal) )) (compound_statement "{\n        if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }\n        return 0;\n      }" { (if_statement "if (s.b != (char *)0x0) {\n          free(s.b);\n          return 0;\n        }" if (parenthesized_expression "(s.b != (char *)0x0)" ( (binary_expression "s.b != (char *)0x0" (field_expression "s.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          free(s.b);\n          return 0;\n        }" { (expression_statement "free(s.b);" (call_expression "free(s.b)" identifier (argument_list "(s.b)" ( (field_expression "s.b" identifier . field_identifier) ))) ;) (return_statement "return 0;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar4._0_4_ = work->constructor;" (assignment_expression "uVar4._0_4_ = work->constructor" (field_expression "uVar4._0_4_" identifier . field_identifier) = (field_expression "work->constructor" identifier -> field_identifier)) ;) (expression_statement "uVar4._4_4_ = work->destructor;" (assignment_expression "uVar4._4_4_ = work->destructor" (field_expression "uVar4._4_4_" identifier . field_identifier) = (field_expression "work->destructor" identifier -> field_identifier)) ;) (if_statement "if ((uVar4 & 0x100000001) != 0) {\n        if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }\n      }" if (parenthesized_expression "((uVar4 & 0x100000001) != 0)" ( (binary_expression "(uVar4 & 0x100000001) != 0" (parenthesized_expression "(uVar4 & 0x100000001)" ( (binary_expression "uVar4 & 0x100000001" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }\n      }" { (if_statement "if (1 < work->temp_start + 1U) {\n          s.p = s.b + work->temp_start;\n        }" if (parenthesized_expression "(1 < work->temp_start + 1U)" ( (binary_expression "1 < work->temp_start + 1U" number_literal < (binary_expression "work->temp_start + 1U" (field_expression "work->temp_start" identifier -> field_identifier) + number_literal)) )) (compound_statement "{\n          s.p = s.b + work->temp_start;\n        }" { (expression_statement "s.p = s.b + work->temp_start;" (assignment_expression "s.p = s.b + work->temp_start" (field_expression "s.p" identifier . field_identifier) = (binary_expression "s.b + work->temp_start" (field_expression "s.b" identifier . field_identifier) + (field_expression "work->temp_start" identifier -> field_identifier))) ;) })) (if_statement "if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }" if (parenthesized_expression "((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0))" ( (binary_expression "(s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)" (parenthesized_expression "(s.b != s.p)" ( (binary_expression "s.b != s.p" (field_expression "s.b" identifier . field_identifier) != (field_expression "s.p" identifier . field_identifier)) )) && (parenthesized_expression "(iVar11 = (int)s.p - (int)s.b, iVar11 != 0)" ( (comma_expression "iVar11 = (int)s.p - (int)s.b, iVar11 != 0" (assignment_expression "iVar11 = (int)s.p - (int)s.b" identifier = (binary_expression "(int)s.p - (int)s.b" (cast_expression "(int)s.p" ( (type_descriptor "int" primitive_type) ) (field_expression "s.p" identifier . field_identifier)) - (cast_expression "(int)s.b" ( (type_descriptor "int" primitive_type) ) (field_expression "s.b" identifier . field_identifier)))) , (binary_expression "iVar11 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n          string_prependn(declp,s.b,iVar11);\n        }" { (expression_statement "string_prependn(declp,s.b,iVar11);" (call_expression "string_prependn(declp,s.b,iVar11)" identifier (argument_list "(declp,s.b,iVar11)" ( identifier , (field_expression "s.b" identifier . field_identifier) , identifier ))) ;) })) (if_statement "if ((work->destructor & 1) == 0) {\n          work->constructor = work->constructor + -1;\n        }\n        else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }" if (parenthesized_expression "((work->destructor & 1) == 0)" ( (binary_expression "(work->destructor & 1) == 0" (parenthesized_expression "(work->destructor & 1)" ( (binary_expression "work->destructor & 1" (field_expression "work->destructor" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n          work->constructor = work->constructor + -1;\n        }" { (expression_statement "work->constructor = work->constructor + -1;" (assignment_expression "work->constructor = work->constructor + -1" (field_expression "work->constructor" identifier -> field_identifier) = (binary_expression "work->constructor + -1" (field_expression "work->constructor" identifier -> field_identifier) + number_literal)) ;) }) (else_clause "else {\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }" else (compound_statement "{\n          string_prepend(declp,"~");\n          work->destructor = work->destructor + -1;\n        }" { (expression_statement "string_prepend(declp,"~");" (call_expression "string_prepend(declp,"~")" identifier (argument_list "(declp,"~")" ( identifier , (string_literal ""~"" " string_content ") ))) ;) (expression_statement "work->destructor = work->destructor + -1;" (assignment_expression "work->destructor = work->destructor + -1" (field_expression "work->destructor" identifier -> field_identifier) = (binary_expression "work->destructor + -1" (field_expression "work->destructor" identifier -> field_identifier) + number_literal)) ;) }))) })) (expression_statement "iVar11 = (int)pcVar13 - (int)s.b;" (assignment_expression "iVar11 = (int)pcVar13 - (int)s.b" identifier = (binary_expression "(int)pcVar13 - (int)s.b" (cast_expression "(int)pcVar13" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)s.b" ( (type_descriptor "int" primitive_type) ) (field_expression "s.b" identifier . field_identifier)))) ;) (if_statement "if (pcVar13 == s.b) {\n        iVar11 = 0;\n      }" if (parenthesized_expression "(pcVar13 == s.b)" ( (binary_expression "pcVar13 == s.b" identifier == (field_expression "s.b" identifier . field_identifier)) )) (compound_statement "{\n        iVar11 = 0;\n      }" { (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) })) (expression_statement "s.p = pcVar13;" (assignment_expression "s.p = pcVar13" (field_expression "s.p" identifier . field_identifier) = identifier) ;) (expression_statement "remember_Ktype(work,s.b,iVar11);" (call_expression "remember_Ktype(work,s.b,iVar11)" identifier (argument_list "(work,s.b,iVar11)" ( identifier , (field_expression "s.b" identifier . field_identifier) , identifier ))) ;) (expression_statement "iVar11 = (int)s.p - (int)s.b;" (assignment_expression "iVar11 = (int)s.p - (int)s.b" identifier = (binary_expression "(int)s.p - (int)s.b" (cast_expression "(int)s.p" ( (type_descriptor "int" primitive_type) ) (field_expression "s.p" identifier . field_identifier)) - (cast_expression "(int)s.b" ( (type_descriptor "int" primitive_type) ) (field_expression "s.b" identifier . field_identifier)))) ;) (if_statement "if (s.b == s.p) {\n        iVar11 = 0;\n      }" if (parenthesized_expression "(s.b == s.p)" ( (binary_expression "s.b == s.p" (field_expression "s.b" identifier . field_identifier) == (field_expression "s.p" identifier . field_identifier)) )) (compound_statement "{\n        iVar11 = 0;\n      }" { (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) })) (expression_statement "remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8);" (call_expression "remember_Btype((work_stuff *)&work->btypevec,s.b,iVar11,iVar8)" identifier (argument_list "((work_stuff *)&work->btypevec,s.b,iVar11,iVar8)" ( (cast_expression "(work_stuff *)&work->btypevec" ( (type_descriptor "work_stuff *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&work->btypevec" & (field_expression "work->btypevec" identifier -> field_identifier))) , (field_expression "s.b" identifier . field_identifier) , identifier , identifier ))) ;) (expression_statement "pcVar13 = ".";" (assignment_expression "pcVar13 = "."" identifier = (string_literal ""."" " string_content ")) ;) (if_statement "if ((work->options & 4) == 0) {\n        pcVar13 = "::";\n      }" if (parenthesized_expression "((work->options & 4) == 0)" ( (binary_expression "(work->options & 4) == 0" (parenthesized_expression "(work->options & 4)" ( (binary_expression "work->options & 4" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        pcVar13 = "::";\n      }" { (expression_statement "pcVar13 = "::";" (assignment_expression "pcVar13 = "::"" identifier = (string_literal ""::"" " string_content ")) ;) })) (expression_statement "string_prepend(declp,pcVar13);" (call_expression "string_prepend(declp,pcVar13)" identifier (argument_list "(declp,pcVar13)" ( identifier , identifier ))) ;) (if_statement "if ((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)) {\n        string_prependn(declp,s.b,iVar8);\n      }" if (parenthesized_expression "((s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0))" ( (binary_expression "(s.b != s.p) && (iVar8 = (int)s.p - (int)s.b, iVar8 != 0)" (parenthesized_expression "(s.b != s.p)" ( (binary_expression "s.b != s.p" (field_expression "s.b" identifier . field_identifier) != (field_expression "s.p" identifier . field_identifier)) )) && (parenthesized_expression "(iVar8 = (int)s.p - (int)s.b, iVar8 != 0)" ( (comma_expression "iVar8 = (int)s.p - (int)s.b, iVar8 != 0" (assignment_expression "iVar8 = (int)s.p - (int)s.b" identifier = (binary_expression "(int)s.p - (int)s.b" (cast_expression "(int)s.p" ( (type_descriptor "int" primitive_type) ) (field_expression "s.p" identifier . field_identifier)) - (cast_expression "(int)s.b" ( (type_descriptor "int" primitive_type) ) (field_expression "s.b" identifier . field_identifier)))) , (binary_expression "iVar8 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n        string_prependn(declp,s.b,iVar8);\n      }" { (expression_statement "string_prependn(declp,s.b,iVar8);" (call_expression "string_prependn(declp,s.b,iVar8)" identifier (argument_list "(declp,s.b,iVar8)" ( identifier , (field_expression "s.b" identifier . field_identifier) , identifier ))) ;) })) (if_statement "if (s.b != (char *)0x0) {\n        free(s.b);\n      }" if (parenthesized_expression "(s.b != (char *)0x0)" ( (binary_expression "s.b != (char *)0x0" (field_expression "s.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(s.b);\n      }" { (expression_statement "free(s.b);" (call_expression "free(s.b)" identifier (argument_list "(s.b)" ( (field_expression "s.b" identifier . field_identifier) ))) ;) })) (expression_statement "remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);" (call_expression "remember_type(work,pcVar9,(int)*mangled - (int)pcVar9)" identifier (argument_list "(work,pcVar9,(int)*mangled - (int)pcVar9)" ( identifier , identifier , (binary_expression "(int)*mangled - (int)pcVar9" (cast_expression "(int)*mangled" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*mangled" * identifier)) - (cast_expression "(int)pcVar9" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ;) (expression_statement "uVar12 = work->options;" (assignment_expression "uVar12 = work->options" identifier = (field_expression "work->options" identifier -> field_identifier)) ;) (if_statement "if (((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')) {\n        iVar8 = 1;\n        goto LAB_00325b2b;\n      }" if (parenthesized_expression "(((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F'))" ( (binary_expression "((uVar12 & 0x2300) == 0) || (pcVar9 = (char *)0x0, **mangled == 'F')" (parenthesized_expression "((uVar12 & 0x2300) == 0)" ( (binary_expression "(uVar12 & 0x2300) == 0" (parenthesized_expression "(uVar12 & 0x2300)" ( (binary_expression "uVar12 & 0x2300" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(pcVar9 = (char *)0x0, **mangled == 'F')" ( (comma_expression "pcVar9 = (char *)0x0, **mangled == 'F'" (assignment_expression "pcVar9 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) , (binary_expression "**mangled == 'F'" (pointer_expression "**mangled" * (pointer_expression "*mangled" * identifier)) == (char_literal "'F'" ' character '))) ))) )) (compound_statement "{\n        iVar8 = 1;\n        goto LAB_00325b2b;\n      }" { (expression_statement "iVar8 = 1;" (assignment_expression "iVar8 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_00325b2b;" goto statement_identifier ;) })) (goto_statement "goto joined_r0x00325745;" goto statement_identifier ;)) (case_statement "default:\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      uVar6 = true;\n      uVar16 = iVar8 != 0 & uVar7;\n      break;" default : (if_statement "if ((work->options & 0x300U) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((work->options & 0x300U) == 0)" ( (binary_expression "(work->options & 0x300U) == 0" (parenthesized_expression "(work->options & 0x300U)" ( (binary_expression "work->options & 0x300U" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar8 = demangle_args(work,mangled,declp);" (assignment_expression "iVar8 = demangle_args(work,mangled,declp)" identifier = (call_expression "demangle_args(work,mangled,declp)" identifier (argument_list "(work,mangled,declp)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar6 = true;" (assignment_expression "uVar6 = true" identifier = true) ;) (expression_statement "uVar16 = iVar8 != 0 & uVar7;" (assignment_expression "uVar16 = iVar8 != 0 & uVar7" identifier = (binary_expression "iVar8 != 0 & uVar7" (binary_expression "iVar8 != 0" identifier != number_literal) & identifier)) ;) (break_statement "break;" break ;)) (case_statement "case 'B':\n      iVar8 = do_type(work,mangled,&s);\n      if (iVar8 != 0) {\n        pcVar9 = "::";\n        if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }\n        string_append(&s,pcVar9);\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if (s.b != (char *)0x0) {\n          free(s.b);\n        }\n      }\n      uVar16 = iVar8 != 0;\nLAB_003259a2:\n      pcVar9 = (char *)0x0;\n      uVar7 = true;\n      break;" case (char_literal "'B'" ' character ') : (expression_statement "iVar8 = do_type(work,mangled,&s);" (assignment_expression "iVar8 = do_type(work,mangled,&s)" identifier = (call_expression "do_type(work,mangled,&s)" identifier (argument_list "(work,mangled,&s)" ( identifier , identifier , (pointer_expression "&s" & identifier) )))) ;) (if_statement "if (iVar8 != 0) {\n        pcVar9 = "::";\n        if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }\n        string_append(&s,pcVar9);\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if (s.b != (char *)0x0) {\n          free(s.b);\n        }\n      }" if (parenthesized_expression "(iVar8 != 0)" ( (binary_expression "iVar8 != 0" identifier != number_literal) )) (compound_statement "{\n        pcVar9 = "::";\n        if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }\n        string_append(&s,pcVar9);\n        if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }\n        if (s.b != (char *)0x0) {\n          free(s.b);\n        }\n      }" { (expression_statement "pcVar9 = "::";" (assignment_expression "pcVar9 = "::"" identifier = (string_literal ""::"" " string_content ")) ;) (if_statement "if ((work->options & 4) != 0) {\n          pcVar9 = ".";\n        }" if (parenthesized_expression "((work->options & 4) != 0)" ( (binary_expression "(work->options & 4) != 0" (parenthesized_expression "(work->options & 4)" ( (binary_expression "work->options & 4" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n          pcVar9 = ".";\n        }" { (expression_statement "pcVar9 = ".";" (assignment_expression "pcVar9 = "."" identifier = (string_literal ""."" " string_content ")) ;) })) (expression_statement "string_append(&s,pcVar9);" (call_expression "string_append(&s,pcVar9)" identifier (argument_list "(&s,pcVar9)" ( (pointer_expression "&s" & identifier) , identifier ))) ;) (if_statement "if ((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n          string_prependn(declp,s.b,iVar11);\n        }" if (parenthesized_expression "((s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0))" ( (binary_expression "(s.b != s.p) && (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)" (parenthesized_expression "(s.b != s.p)" ( (binary_expression "s.b != s.p" (field_expression "s.b" identifier . field_identifier) != (field_expression "s.p" identifier . field_identifier)) )) && (parenthesized_expression "(iVar11 = (int)s.p - (int)s.b, iVar11 != 0)" ( (comma_expression "iVar11 = (int)s.p - (int)s.b, iVar11 != 0" (assignment_expression "iVar11 = (int)s.p - (int)s.b" identifier = (binary_expression "(int)s.p - (int)s.b" (cast_expression "(int)s.p" ( (type_descriptor "int" primitive_type) ) (field_expression "s.p" identifier . field_identifier)) - (cast_expression "(int)s.b" ( (type_descriptor "int" primitive_type) ) (field_expression "s.b" identifier . field_identifier)))) , (binary_expression "iVar11 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n          string_prependn(declp,s.b,iVar11);\n        }" { (expression_statement "string_prependn(declp,s.b,iVar11);" (call_expression "string_prependn(declp,s.b,iVar11)" identifier (argument_list "(declp,s.b,iVar11)" ( identifier , (field_expression "s.b" identifier . field_identifier) , identifier ))) ;) })) (if_statement "if (s.b != (char *)0x0) {\n          free(s.b);\n        }" if (parenthesized_expression "(s.b != (char *)0x0)" ( (binary_expression "s.b != (char *)0x0" (field_expression "s.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          free(s.b);\n        }" { (expression_statement "free(s.b);" (call_expression "free(s.b)" identifier (argument_list "(s.b)" ( (field_expression "s.b" identifier . field_identifier) ))) ;) })) })) (expression_statement "uVar16 = iVar8 != 0;" (assignment_expression "uVar16 = iVar8 != 0" identifier = (binary_expression "iVar8 != 0" identifier != number_literal)) ;) (labeled_statement "LAB_003259a2:\n      pcVar9 = (char *)0x0;" statement_identifier : (expression_statement "pcVar9 = (char *)0x0;" (assignment_expression "pcVar9 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (expression_statement "uVar7 = true;" (assignment_expression "uVar7 = true" identifier = true) ;) (break_statement "break;" break ;)) (case_statement "case 'C':" case (char_literal "'C'" ' character ') :) (case_statement "case 'V':" case (char_literal "'V'" ' character ') :) (case_statement "case 'u':\n      if (cVar1 == 'V') {\n        uVar12 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }\n      work->type_quals = work->type_quals | uVar12;\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      goto LAB_0032581c;" case (char_literal "'u'" ' character ') : (if_statement "if (cVar1 == 'V') {\n        uVar12 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }" if (parenthesized_expression "(cVar1 == 'V')" ( (binary_expression "cVar1 == 'V'" identifier == (char_literal "'V'" ' character ')) )) (compound_statement "{\n        uVar12 = 2;\n      }" { (expression_statement "uVar12 = 2;" (assignment_expression "uVar12 = 2" identifier = number_literal) ;) }) (else_clause "else if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }" else (if_statement "if (cVar1 == 'u') {\n        uVar12 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }" if (parenthesized_expression "(cVar1 == 'u')" ( (binary_expression "cVar1 == 'u'" identifier == (char_literal "'u'" ' character ')) )) (compound_statement "{\n        uVar12 = 4;\n      }" { (expression_statement "uVar12 = 4;" (assignment_expression "uVar12 = 4" identifier = number_literal) ;) }) (else_clause "else {\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }" else (compound_statement "{\n        if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }\n        uVar12 = 1;\n      }" { (if_statement "if (cVar1 != 'C') {\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }" if (parenthesized_expression "(cVar1 != 'C')" ( (binary_expression "cVar1 != 'C'" identifier != (char_literal "'C'" ' character ')) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          abort();\n        }" { comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar12 = 1;" (assignment_expression "uVar12 = 1" identifier = number_literal) ;) }))))) (expression_statement "work->type_quals = work->type_quals | uVar12;" (assignment_expression "work->type_quals = work->type_quals | uVar12" (field_expression "work->type_quals" identifier -> field_identifier) = (binary_expression "work->type_quals | uVar12" (field_expression "work->type_quals" identifier -> field_identifier) | identifier)) ;) (if_statement "if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }" if (parenthesized_expression "(pcVar9 == (char *)0x0)" ( (binary_expression "pcVar9 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar9 = pcVar13;\n      }" { (expression_statement "pcVar9 = pcVar13;" (assignment_expression "pcVar9 = pcVar13" identifier = identifier) ;) })) (expression_statement "*mangled = (char *)((long)pcVar13 + 1);" (assignment_expression "*mangled = (char *)((long)pcVar13 + 1)" (pointer_expression "*mangled" * identifier) = (cast_expression "(char *)((long)pcVar13 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar13 + 1)" ( (binary_expression "(long)pcVar13 + 1" (cast_expression "(long)pcVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (goto_statement "goto LAB_0032581c;" goto statement_identifier ;)) (case_statement "case 'F':\n      *mangled = (char *)((long)pcVar13 + 1);\n      if ((work->options & 0x3c00U) != 0) {\n        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n      }\n      iVar8 = demangle_args(work,mangled,declp);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      uVar12 = work->options;\n      if ((uVar12 & 0x2100) == 0) {\n        uVar6 = true;\n      }\n      else {\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;" case (char_literal "'F'" ' character ') : (expression_statement "*mangled = (char *)((long)pcVar13 + 1);" (assignment_expression "*mangled = (char *)((long)pcVar13 + 1)" (pointer_expression "*mangled" * identifier) = (cast_expression "(char *)((long)pcVar13 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar13 + 1)" ( (binary_expression "(long)pcVar13 + 1" (cast_expression "(long)pcVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (if_statement "if ((work->options & 0x3c00U) != 0) {\n        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n      }" if (parenthesized_expression "((work->options & 0x3c00U) != 0)" ( (binary_expression "(work->options & 0x3c00U) != 0" (parenthesized_expression "(work->options & 0x3c00U)" ( (binary_expression "work->options & 0x3c00U" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n      }" { (expression_statement "forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);" (call_expression "forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes)" identifier (argument_list "((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes)" ( (cast_expression "(work_stuff *)&work->typevec" ( (type_descriptor "work_stuff *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&work->typevec" & (field_expression "work->typevec" identifier -> field_identifier))) , (cast_expression "(work_stuff *)&work->ntypes" ( (type_descriptor "work_stuff *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&work->ntypes" & (field_expression "work->ntypes" identifier -> field_identifier))) ))) ;) })) (expression_statement "iVar8 = demangle_args(work,mangled,declp);" (assignment_expression "iVar8 = demangle_args(work,mangled,declp)" identifier = (call_expression "demangle_args(work,mangled,declp)" identifier (argument_list "(work,mangled,declp)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar8 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar12 = work->options;" (assignment_expression "uVar12 = work->options" identifier = (field_expression "work->options" identifier -> field_identifier)) ;) (if_statement "if ((uVar12 & 0x2100) == 0) {\n        uVar6 = true;\n      }\n      else {\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }" if (parenthesized_expression "((uVar12 & 0x2100) == 0)" ( (binary_expression "(uVar12 & 0x2100) == 0" (parenthesized_expression "(uVar12 & 0x2100)" ( (binary_expression "uVar12 & 0x2100" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar6 = true;\n      }" { (expression_statement "uVar6 = true;" (assignment_expression "uVar6 = true" identifier = true) ;) }) (else_clause "else {\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }" else (compound_statement "{\n        uVar6 = true;\n        if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }\n      }" { (expression_statement "uVar6 = true;" (assignment_expression "uVar6 = true" identifier = true) ;) (if_statement "if (**mangled == '_') {\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }" if (parenthesized_expression "(**mangled == '_')" ( (binary_expression "**mangled == '_'" (pointer_expression "**mangled" * (pointer_expression "*mangled" * identifier)) == (char_literal "'_'" ' character ')) )) (compound_statement "{\n          *mangled = *mangled + 1;\n          iVar8 = do_type(work,mangled,&tname);\n          if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }\n          break;\n        }" { (expression_statement "*mangled = *mangled + 1;" (assignment_expression "*mangled = *mangled + 1" (pointer_expression "*mangled" * identifier) = (binary_expression "*mangled + 1" (pointer_expression "*mangled" * identifier) + number_literal)) ;) (expression_statement "iVar8 = do_type(work,mangled,&tname);" (assignment_expression "iVar8 = do_type(work,mangled,&tname)" identifier = (call_expression "do_type(work,mangled,&tname)" identifier (argument_list "(work,mangled,&tname)" ( identifier , identifier , (pointer_expression "&tname" & identifier) )))) ;) (if_statement "if (tname.b == (char *)0x0) {\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }\n          else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }" if (parenthesized_expression "(tname.b == (char *)0x0)" ( (binary_expression "tname.b == (char *)0x0" (field_expression "tname.b" identifier . field_identifier) == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            uVar16 = uVar7 & iVar8 != 0;\n            pcVar9 = (char *)0x0;\n            tname.b = (char *)0x0;\n          }" { (expression_statement "uVar16 = uVar7 & iVar8 != 0;" (assignment_expression "uVar16 = uVar7 & iVar8 != 0" identifier = (binary_expression "uVar7 & iVar8 != 0" identifier & (binary_expression "iVar8 != 0" identifier != number_literal))) ;) (expression_statement "pcVar9 = (char *)0x0;" (assignment_expression "pcVar9 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "tname.b = (char *)0x0;" (assignment_expression "tname.b = (char *)0x0" (field_expression "tname.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }" else (compound_statement "{\n            free(tname.b);\n            tname.p = (char *)0x0;\n            tname.e = (char *)0x0;\n            tname.b = (char *)0x0;\n            pcVar9 = (char *)0x0;\n            uVar16 = uVar7 & iVar8 != 0;\n          }" { (expression_statement "free(tname.b);" (call_expression "free(tname.b)" identifier (argument_list "(tname.b)" ( (field_expression "tname.b" identifier . field_identifier) ))) ;) (expression_statement "tname.p = (char *)0x0;" (assignment_expression "tname.p = (char *)0x0" (field_expression "tname.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "tname.e = (char *)0x0;" (assignment_expression "tname.e = (char *)0x0" (field_expression "tname.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "tname.b = (char *)0x0;" (assignment_expression "tname.b = (char *)0x0" (field_expression "tname.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pcVar9 = (char *)0x0;" (assignment_expression "pcVar9 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar16 = uVar7 & iVar8 != 0;" (assignment_expression "uVar16 = uVar7 & iVar8 != 0" identifier = (binary_expression "uVar7 & iVar8 != 0" identifier & (binary_expression "iVar8 != 0" identifier != number_literal))) ;) }))) (break_statement "break;" break ;) })) }))) (goto_statement "goto LAB_00325b2b;" goto statement_identifier ;)) (case_statement "case 'H':\n      if ((work->options & 0x300U) == 0) {\n        return 0;\n      }\n      iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0);\n      bVar10 = true;\n      if ((work->constructor & 1) != 0) {\n        bVar10 = (bool)uVar5;\n      }\n      if (**mangled == '\0') {\n        return 0;\n      }\n      *mangled = *mangled + 1;\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = bVar10;\n      break;" case (char_literal "'H'" ' character ') : (if_statement "if ((work->options & 0x300U) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((work->options & 0x300U) == 0)" ( (binary_expression "(work->options & 0x300U) == 0" (parenthesized_expression "(work->options & 0x300U)" ( (binary_expression "work->options & 0x300U" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0);" (assignment_expression "iVar8 = demangle_template(work,mangled,declp,(string *)0x0,0,0)" identifier = (call_expression "demangle_template(work,mangled,declp,(string *)0x0,0,0)" identifier (argument_list "(work,mangled,declp,(string *)0x0,0,0)" ( identifier , identifier , identifier , (cast_expression "(string *)0x0" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , number_literal , number_literal )))) ;) (expression_statement "bVar10 = true;" (assignment_expression "bVar10 = true" identifier = true) ;) (if_statement "if ((work->constructor & 1) != 0) {\n        bVar10 = (bool)uVar5;\n      }" if (parenthesized_expression "((work->constructor & 1) != 0)" ( (binary_expression "(work->constructor & 1) != 0" (parenthesized_expression "(work->constructor & 1)" ( (binary_expression "work->constructor & 1" (field_expression "work->constructor" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        bVar10 = (bool)uVar5;\n      }" { (expression_statement "bVar10 = (bool)uVar5;" (assignment_expression "bVar10 = (bool)uVar5" identifier = (cast_expression "(bool)uVar5" ( (type_descriptor "bool" primitive_type) ) identifier)) ;) })) (if_statement "if (**mangled == '\0') {\n        return 0;\n      }" if (parenthesized_expression "(**mangled == '\0')" ( (binary_expression "**mangled == '\0'" (pointer_expression "**mangled" * (pointer_expression "*mangled" * identifier)) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*mangled = *mangled + 1;" (assignment_expression "*mangled = *mangled + 1" (pointer_expression "*mangled" * identifier) = (binary_expression "*mangled + 1" (pointer_expression "*mangled" * identifier) + number_literal)) ;) (expression_statement "uVar16 = iVar8 != 0 & uVar7;" (assignment_expression "uVar16 = iVar8 != 0 & uVar7" identifier = (binary_expression "iVar8 != 0 & uVar7" (binary_expression "iVar8 != 0" identifier != number_literal) & identifier)) ;) (expression_statement "uVar5 = bVar10;" (assignment_expression "uVar5 = bVar10" identifier = identifier) ;) (break_statement "break;" break ;)) (case_statement "case 'K':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      uVar16 = iVar8 != 0;\n      if ((work->options & 0x300U) != 0) goto LAB_003259a2;\n      uVar16 = uVar16 & uVar7;\n      pcVar9 = (char *)0x0;\n      break;" case (char_literal "'K'" ' character ') : (expression_statement "iVar8 = demangle_qualified(work,mangled,declp,1,0);" (assignment_expression "iVar8 = demangle_qualified(work,mangled,declp,1,0)" identifier = (call_expression "demangle_qualified(work,mangled,declp,1,0)" identifier (argument_list "(work,mangled,declp,1,0)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;) (expression_statement "uVar16 = iVar8 != 0;" (assignment_expression "uVar16 = iVar8 != 0" identifier = (binary_expression "iVar8 != 0" identifier != number_literal)) ;) (if_statement "if ((work->options & 0x300U) != 0) goto LAB_003259a2;" if (parenthesized_expression "((work->options & 0x300U) != 0)" ( (binary_expression "(work->options & 0x300U) != 0" (parenthesized_expression "(work->options & 0x300U)" ( (binary_expression "work->options & 0x300U" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_003259a2;" goto statement_identifier ;)) (expression_statement "uVar16 = uVar16 & uVar7;" (assignment_expression "uVar16 = uVar16 & uVar7" identifier = (binary_expression "uVar16 & uVar7" identifier & identifier)) ;) (expression_statement "pcVar9 = (char *)0x0;" (assignment_expression "pcVar9 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (break_statement "break;" break ;)) (case_statement "case 'L':\n      if ((work->options & 0x1000U) == 0) {\n        return 0;\n      }\n      do {\n        pcVar15 = pcVar13;\n        *mangled = pcVar15 + 1;\n        cVar1 = pcVar15[1];\n        if (cVar1 == '\0') break;\n        pcVar13 = pcVar15 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *mangled = pcVar15 + 2;\n      goto LAB_0032581c;" case (char_literal "'L'" ' character ') : (if_statement "if ((work->options & 0x1000U) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((work->options & 0x1000U) == 0)" ( (binary_expression "(work->options & 0x1000U) == 0" (parenthesized_expression "(work->options & 0x1000U)" ( (binary_expression "work->options & 0x1000U" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (do_statement "do {\n        pcVar15 = pcVar13;\n        *mangled = pcVar15 + 1;\n        cVar1 = pcVar15[1];\n        if (cVar1 == '\0') break;\n        pcVar13 = pcVar15 + 1;\n      } while (cVar1 != '_');" do (compound_statement "{\n        pcVar15 = pcVar13;\n        *mangled = pcVar15 + 1;\n        cVar1 = pcVar15[1];\n        if (cVar1 == '\0') break;\n        pcVar13 = pcVar15 + 1;\n      }" { (expression_statement "pcVar15 = pcVar13;" (assignment_expression "pcVar15 = pcVar13" identifier = identifier) ;) (expression_statement "*mangled = pcVar15 + 1;" (assignment_expression "*mangled = pcVar15 + 1" (pointer_expression "*mangled" * identifier) = (binary_expression "pcVar15 + 1" identifier + number_literal)) ;) (expression_statement "cVar1 = pcVar15[1];" (assignment_expression "cVar1 = pcVar15[1]" identifier = (subscript_expression "pcVar15[1]" identifier [ number_literal ])) ;) (if_statement "if (cVar1 == '\0') break;" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "pcVar13 = pcVar15 + 1;" (assignment_expression "pcVar13 = pcVar15 + 1" identifier = (binary_expression "pcVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(cVar1 != '_')" ( (binary_expression "cVar1 != '_'" identifier != (char_literal "'_'" ' character ')) )) ;) (if_statement "if (cVar1 == '\0') {\n        return 0;\n      }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*mangled = pcVar15 + 2;" (assignment_expression "*mangled = pcVar15 + 2" (pointer_expression "*mangled" * identifier) = (binary_expression "pcVar15 + 2" identifier + number_literal)) ;) (goto_statement "goto LAB_0032581c;" goto statement_identifier ;)) (case_statement "case 'Q':\n      iVar8 = demangle_qualified(work,mangled,declp,1,0);\n      if (iVar8 == 0) {\n        return 0;\n      }\n      remember_type(work,pcVar13,(int)*mangled - (int)pcVar13);\n      uVar12 = work->options;\n      if ((uVar12 & 0x300) != 0) {\n        pcVar9 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar9 = (char *)0x0;\n      if ((bool)uVar7) goto joined_r0x00325745;\n      goto LAB_003255c0;" case (char_literal "'Q'" ' character ') : (expression_statement "iVar8 = demangle_qualified(work,mangled,declp,1,0);" (assignment_expression "iVar8 = demangle_qualified(work,mangled,declp,1,0)" identifier = (call_expression "demangle_qualified(work,mangled,declp,1,0)" identifier (argument_list "(work,mangled,declp,1,0)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;) (if_statement "if (iVar8 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "remember_type(work,pcVar13,(int)*mangled - (int)pcVar13);" (call_expression "remember_type(work,pcVar13,(int)*mangled - (int)pcVar13)" identifier (argument_list "(work,pcVar13,(int)*mangled - (int)pcVar13)" ( identifier , identifier , (binary_expression "(int)*mangled - (int)pcVar13" (cast_expression "(int)*mangled" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*mangled" * identifier)) - (cast_expression "(int)pcVar13" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ;) (expression_statement "uVar12 = work->options;" (assignment_expression "uVar12 = work->options" identifier = (field_expression "work->options" identifier -> field_identifier)) ;) (if_statement "if ((uVar12 & 0x300) != 0) {\n        pcVar9 = (char *)0x0;\n        goto joined_r0x00325745;\n      }" if (parenthesized_expression "((uVar12 & 0x300) != 0)" ( (binary_expression "(uVar12 & 0x300) != 0" (parenthesized_expression "(uVar12 & 0x300)" ( (binary_expression "uVar12 & 0x300" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        pcVar9 = (char *)0x0;\n        goto joined_r0x00325745;\n      }" { (expression_statement "pcVar9 = (char *)0x0;" (assignment_expression "pcVar9 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto joined_r0x00325745;" goto statement_identifier ;) })) (labeled_statement "LAB_00325b2b:\n      pcVar9 = (char *)0x0;" statement_identifier : (expression_statement "pcVar9 = (char *)0x0;" (assignment_expression "pcVar9 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (if_statement "if ((bool)uVar7) goto joined_r0x00325745;" if (parenthesized_expression "((bool)uVar7)" ( (cast_expression "(bool)uVar7" ( (type_descriptor "bool" primitive_type) ) identifier) )) (goto_statement "goto joined_r0x00325745;" goto statement_identifier ;)) (goto_statement "goto LAB_003255c0;" goto statement_identifier ;)) (case_statement "case 'S':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      work->static_type = 1;\nLAB_0032581c:\n      if (!(bool)uVar7) goto code_r0x00325824;\n      goto LAB_00325740;" case (char_literal "'S'" ' character ') : (if_statement "if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }" if (parenthesized_expression "(pcVar9 == (char *)0x0)" ( (binary_expression "pcVar9 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar9 = pcVar13;\n      }" { (expression_statement "pcVar9 = pcVar13;" (assignment_expression "pcVar9 = pcVar13" identifier = identifier) ;) })) (expression_statement "*mangled = (char *)((long)pcVar13 + 1);" (assignment_expression "*mangled = (char *)((long)pcVar13 + 1)" (pointer_expression "*mangled" * identifier) = (cast_expression "(char *)((long)pcVar13 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar13 + 1)" ( (binary_expression "(long)pcVar13 + 1" (cast_expression "(long)pcVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "work->static_type = 1;" (assignment_expression "work->static_type = 1" (field_expression "work->static_type" identifier -> field_identifier) = number_literal) ;) (labeled_statement "LAB_0032581c:\n      if (!(bool)uVar7) goto code_r0x00325824;" statement_identifier : (if_statement "if (!(bool)uVar7) goto code_r0x00325824;" if (parenthesized_expression "(!(bool)uVar7)" ( (unary_expression "!(bool)uVar7" ! (cast_expression "(bool)uVar7" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (goto_statement "goto code_r0x00325824;" goto statement_identifier ;))) (goto_statement "goto LAB_00325740;" goto statement_identifier ;)) (case_statement "case '_':\n      if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {\n        if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }\n        *mangled = (char *)((long)pcVar13 + 1);\n        if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *mangled = (char *)((long)pcVar13 + 1);\n      iVar8 = do_type(work,mangled,&s);\n      pcVar13 = s.p;\n      if (((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n        string_prependn(declp,s.b,iVar11);\n        pcVar13 = s.b;\n      }\n      if (pcVar13 != (char *)0x0) {\n        free(pcVar13);\n      }\n      uVar16 = iVar8 != 0 & uVar7;\n      uVar5 = true;\n      break;" case (char_literal "'_'" ' character ') : (if_statement "if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {\n        if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }\n        *mangled = (char *)((long)pcVar13 + 1);\n        if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }" if (parenthesized_expression "(((work->options & 0x300U) == 0) || (!(bool)uVar5))" ( (binary_expression "((work->options & 0x300U) == 0) || (!(bool)uVar5)" (parenthesized_expression "((work->options & 0x300U) == 0)" ( (binary_expression "(work->options & 0x300U) == 0" (parenthesized_expression "(work->options & 0x300U)" ( (binary_expression "work->options & 0x300U" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "(!(bool)uVar5)" ( (unary_expression "!(bool)uVar5" ! (cast_expression "(bool)uVar5" ( (type_descriptor "bool" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }\n        *mangled = (char *)((long)pcVar13 + 1);\n        if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }" { (if_statement "if ((work->options & 0x1000U) == 0) {\n          return 0;\n        }" if (parenthesized_expression "((work->options & 0x1000U) == 0)" ( (binary_expression "(work->options & 0x1000U) == 0" (parenthesized_expression "(work->options & 0x1000U)" ( (binary_expression "work->options & 0x1000U" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*mangled = (char *)((long)pcVar13 + 1);" (assignment_expression "*mangled = (char *)((long)pcVar13 + 1)" (pointer_expression "*mangled" * identifier) = (cast_expression "(char *)((long)pcVar13 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar13 + 1)" ( (binary_expression "(long)pcVar13 + 1" (cast_expression "(long)pcVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (if_statement "if ((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)) {\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }" if (parenthesized_expression "((*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0))" ( (binary_expression "(*(byte *)((long)pcVar13 + 1) != 0) &&\n           ((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)" (parenthesized_expression "(*(byte *)((long)pcVar13 + 1) != 0)" ( (binary_expression "*(byte *)((long)pcVar13 + 1) != 0" (pointer_expression "*(byte *)((long)pcVar13 + 1)" * (cast_expression "(byte *)((long)pcVar13 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar13 + 1)" ( (binary_expression "(long)pcVar13 + 1" (cast_expression "(long)pcVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) != number_literal) )) && (parenthesized_expression "((_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0)" ( (binary_expression "(_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4) != 0" (parenthesized_expression "(_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4)" ( (binary_expression "_sch_istable[*(byte *)((long)pcVar13 + 1)] & 4" (subscript_expression "_sch_istable[*(byte *)((long)pcVar13 + 1)]" identifier [ (pointer_expression "*(byte *)((long)pcVar13 + 1)" * (cast_expression "(byte *)((long)pcVar13 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar13 + 1)" ( (binary_expression "(long)pcVar13 + 1" (cast_expression "(long)pcVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n          pbVar14 = (byte *)((long)pcVar13 + 2);\n          do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);\n        }" { (expression_statement "pbVar14 = (byte *)((long)pcVar13 + 2);" (assignment_expression "pbVar14 = (byte *)((long)pcVar13 + 2)" identifier = (cast_expression "(byte *)((long)pcVar13 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar13 + 2)" ( (binary_expression "(long)pcVar13 + 2" (cast_expression "(long)pcVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (do_statement "do {\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          } while ((_sch_istable[bVar2] & 4) != 0);" do (compound_statement "{\n            *mangled = (char *)pbVar14;\n            bVar2 = *pbVar14;\n            if (bVar2 == 0) break;\n            pbVar14 = pbVar14 + 1;\n          }" { (expression_statement "*mangled = (char *)pbVar14;" (assignment_expression "*mangled = (char *)pbVar14" (pointer_expression "*mangled" * identifier) = (cast_expression "(char *)pbVar14" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "bVar2 = *pbVar14;" (assignment_expression "bVar2 = *pbVar14" identifier = (pointer_expression "*pbVar14" * identifier)) ;) (if_statement "if (bVar2 == 0) break;" if (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "pbVar14 = pbVar14 + 1;" (assignment_expression "pbVar14 = pbVar14 + 1" identifier = (binary_expression "pbVar14 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((_sch_istable[bVar2] & 4) != 0)" ( (binary_expression "(_sch_istable[bVar2] & 4) != 0" (parenthesized_expression "(_sch_istable[bVar2] & 4)" ( (binary_expression "_sch_istable[bVar2] & 4" (subscript_expression "_sch_istable[bVar2]" identifier [ identifier ]) & number_literal) )) != number_literal) )) ;) })) (goto_statement "goto LAB_0032581c;" goto statement_identifier ;) })) (expression_statement "*mangled = (char *)((long)pcVar13 + 1);" (assignment_expression "*mangled = (char *)((long)pcVar13 + 1)" (pointer_expression "*mangled" * identifier) = (cast_expression "(char *)((long)pcVar13 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar13 + 1)" ( (binary_expression "(long)pcVar13 + 1" (cast_expression "(long)pcVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "iVar8 = do_type(work,mangled,&s);" (assignment_expression "iVar8 = do_type(work,mangled,&s)" identifier = (call_expression "do_type(work,mangled,&s)" identifier (argument_list "(work,mangled,&s)" ( identifier , identifier , (pointer_expression "&s" & identifier) )))) ;) (expression_statement "pcVar13 = s.p;" (assignment_expression "pcVar13 = s.p" identifier = (field_expression "s.p" identifier . field_identifier)) ;) (if_statement "if (((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)) {\n        string_prependn(declp,s.b,iVar11);\n        pcVar13 = s.b;\n      }" if (parenthesized_expression "(((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0))" ( (binary_expression "((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)) &&\n         (iVar11 = (int)s.p - (int)s.b, iVar11 != 0)" (parenthesized_expression "((s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p))" ( (binary_expression "(s.b != s.p) && (string_append(&s," "), pcVar13 = s.b, s.b != s.p)" (parenthesized_expression "(s.b != s.p)" ( (binary_expression "s.b != s.p" (field_expression "s.b" identifier . field_identifier) != (field_expression "s.p" identifier . field_identifier)) )) && (parenthesized_expression "(string_append(&s," "), pcVar13 = s.b, s.b != s.p)" ( (comma_expression "string_append(&s," "), pcVar13 = s.b, s.b != s.p" (call_expression "string_append(&s," ")" identifier (argument_list "(&s," ")" ( (pointer_expression "&s" & identifier) , (string_literal "" "" " string_content ") ))) , (comma_expression "pcVar13 = s.b, s.b != s.p" (assignment_expression "pcVar13 = s.b" identifier = (field_expression "s.b" identifier . field_identifier)) , (binary_expression "s.b != s.p" (field_expression "s.b" identifier . field_identifier) != (field_expression "s.p" identifier . field_identifier)))) ))) )) && (parenthesized_expression "(iVar11 = (int)s.p - (int)s.b, iVar11 != 0)" ( (comma_expression "iVar11 = (int)s.p - (int)s.b, iVar11 != 0" (assignment_expression "iVar11 = (int)s.p - (int)s.b" identifier = (binary_expression "(int)s.p - (int)s.b" (cast_expression "(int)s.p" ( (type_descriptor "int" primitive_type) ) (field_expression "s.p" identifier . field_identifier)) - (cast_expression "(int)s.b" ( (type_descriptor "int" primitive_type) ) (field_expression "s.b" identifier . field_identifier)))) , (binary_expression "iVar11 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n        string_prependn(declp,s.b,iVar11);\n        pcVar13 = s.b;\n      }" { (expression_statement "string_prependn(declp,s.b,iVar11);" (call_expression "string_prependn(declp,s.b,iVar11)" identifier (argument_list "(declp,s.b,iVar11)" ( identifier , (field_expression "s.b" identifier . field_identifier) , identifier ))) ;) (expression_statement "pcVar13 = s.b;" (assignment_expression "pcVar13 = s.b" identifier = (field_expression "s.b" identifier . field_identifier)) ;) })) (if_statement "if (pcVar13 != (char *)0x0) {\n        free(pcVar13);\n      }" if (parenthesized_expression "(pcVar13 != (char *)0x0)" ( (binary_expression "pcVar13 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(pcVar13);\n      }" { (expression_statement "free(pcVar13);" (call_expression "free(pcVar13)" identifier (argument_list "(pcVar13)" ( identifier ))) ;) })) (expression_statement "uVar16 = iVar8 != 0 & uVar7;" (assignment_expression "uVar16 = iVar8 != 0 & uVar7" identifier = (binary_expression "iVar8 != 0 & uVar7" (binary_expression "iVar8 != 0" identifier != number_literal) & identifier)) ;) (expression_statement "uVar5 = true;" (assignment_expression "uVar5 = true" identifier = true) ;) (break_statement "break;" break ;)) (case_statement "case 't':\n      if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }\n      trawname.e = (char *)0x0;\n      trawname.p = (char *)0x0;\n      trawname.b = (char *)0x0;\n      tname.e = (char *)0x0;\n      tname.p = (char *)0x0;\n      tname.b = (char *)0x0;\n      iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1);\n      if (iVar8 != 0) {\n        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      }\n      pcVar9 = "::";\n      if ((work->options & 4) != 0) {\n        pcVar9 = ".";\n      }\n      string_append(&tname,pcVar9);\n      if ((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)) {\n        if ((work->destructor & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        string_prepend(&trawname,"~");\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->destructor = work->destructor + -1;\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      else {\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      if ((uVar3 & 0x100000001) != 0) {\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->constructor = work->constructor + -1;\n      }\n      if (trawname.b != (char *)0x0) {\n        free(trawname.b);\n        trawname.p = (char *)0x0;\n        trawname.e = (char *)0x0;\n        trawname.b = (char *)0x0;\n      }\n      uVar16 = iVar8 != 0;\n      uVar7 = true;\n      pcVar9 = tname.b;\n      if (tname.b != (char *)0x0) {\n        free(tname.b);\n        tname.p = (char *)0x0;\n        tname.e = (char *)0x0;\n        tname.b = (char *)0x0;\n        pcVar9 = (char *)0x0;\n      }" case (char_literal "'t'" ' character ') : (if_statement "if (pcVar9 == (char *)0x0) {\n        pcVar9 = pcVar13;\n      }" if (parenthesized_expression "(pcVar9 == (char *)0x0)" ( (binary_expression "pcVar9 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar9 = pcVar13;\n      }" { (expression_statement "pcVar9 = pcVar13;" (assignment_expression "pcVar9 = pcVar13" identifier = identifier) ;) })) (expression_statement "trawname.e = (char *)0x0;" (assignment_expression "trawname.e = (char *)0x0" (field_expression "trawname.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "trawname.p = (char *)0x0;" (assignment_expression "trawname.p = (char *)0x0" (field_expression "trawname.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "trawname.b = (char *)0x0;" (assignment_expression "trawname.b = (char *)0x0" (field_expression "trawname.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "tname.e = (char *)0x0;" (assignment_expression "tname.e = (char *)0x0" (field_expression "tname.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "tname.p = (char *)0x0;" (assignment_expression "tname.p = (char *)0x0" (field_expression "tname.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "tname.b = (char *)0x0;" (assignment_expression "tname.b = (char *)0x0" (field_expression "tname.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1);" (assignment_expression "iVar8 = demangle_template(work,mangled,&tname,&trawname,1,1)" identifier = (call_expression "demangle_template(work,mangled,&tname,&trawname,1,1)" identifier (argument_list "(work,mangled,&tname,&trawname,1,1)" ( identifier , identifier , (pointer_expression "&tname" & identifier) , (pointer_expression "&trawname" & identifier) , number_literal , number_literal )))) ;) (if_statement "if (iVar8 != 0) {\n        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      }" if (parenthesized_expression "(iVar8 != 0)" ( (binary_expression "iVar8 != 0" identifier != number_literal) )) (compound_statement "{\n        remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);\n      }" { (expression_statement "remember_type(work,pcVar9,(int)*mangled - (int)pcVar9);" (call_expression "remember_type(work,pcVar9,(int)*mangled - (int)pcVar9)" identifier (argument_list "(work,pcVar9,(int)*mangled - (int)pcVar9)" ( identifier , identifier , (binary_expression "(int)*mangled - (int)pcVar9" (cast_expression "(int)*mangled" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*mangled" * identifier)) - (cast_expression "(int)pcVar9" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ;) })) (expression_statement "pcVar9 = "::";" (assignment_expression "pcVar9 = "::"" identifier = (string_literal ""::"" " string_content ")) ;) (if_statement "if ((work->options & 4) != 0) {\n        pcVar9 = ".";\n      }" if (parenthesized_expression "((work->options & 4) != 0)" ( (binary_expression "(work->options & 4) != 0" (parenthesized_expression "(work->options & 4)" ( (binary_expression "work->options & 4" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        pcVar9 = ".";\n      }" { (expression_statement "pcVar9 = ".";" (assignment_expression "pcVar9 = "."" identifier = (string_literal ""."" " string_content ")) ;) })) (expression_statement "string_append(&tname,pcVar9);" (call_expression "string_append(&tname,pcVar9)" identifier (argument_list "(&tname,pcVar9)" ( (pointer_expression "&tname" & identifier) , identifier ))) ;) (if_statement "if ((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)) {\n        if ((work->destructor & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        string_prepend(&trawname,"~");\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->destructor = work->destructor + -1;\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }\n      else {\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }" if (parenthesized_expression "((tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0))" ( (binary_expression "(tname.b == tname.p) || (iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)" (parenthesized_expression "(tname.b == tname.p)" ( (binary_expression "tname.b == tname.p" (field_expression "tname.b" identifier . field_identifier) == (field_expression "tname.p" identifier . field_identifier)) )) || (parenthesized_expression "(iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0)" ( (comma_expression "iVar11 = (int)tname.p - (int)tname.b, iVar11 == 0" (assignment_expression "iVar11 = (int)tname.p - (int)tname.b" identifier = (binary_expression "(int)tname.p - (int)tname.b" (cast_expression "(int)tname.p" ( (type_descriptor "int" primitive_type) ) (field_expression "tname.p" identifier . field_identifier)) - (cast_expression "(int)tname.b" ( (type_descriptor "int" primitive_type) ) (field_expression "tname.b" identifier . field_identifier)))) , (binary_expression "iVar11 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n        if ((work->destructor & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        string_prepend(&trawname,"~");\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->destructor = work->destructor + -1;\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }" { (if_statement "if ((work->destructor & 1) == 0) goto LAB_003256a5;" if (parenthesized_expression "((work->destructor & 1) == 0)" ( (binary_expression "(work->destructor & 1) == 0" (parenthesized_expression "(work->destructor & 1)" ( (binary_expression "work->destructor & 1" (field_expression "work->destructor" identifier -> field_identifier) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_003256a5;" goto statement_identifier ;)) (labeled_statement "LAB_00325d78:\n        string_prepend(&trawname,"~");" statement_identifier : (expression_statement "string_prepend(&trawname,"~");" (call_expression "string_prepend(&trawname,"~")" identifier (argument_list "(&trawname,"~")" ( (pointer_expression "&trawname" & identifier) , (string_literal ""~"" " string_content ") ))) ;)) (expression_statement "string_appends(declp,&trawname,(string *)trawname.p);" (call_expression "string_appends(declp,&trawname,(string *)trawname.p)" identifier (argument_list "(declp,&trawname,(string *)trawname.p)" ( identifier , (pointer_expression "&trawname" & identifier) , (cast_expression "(string *)trawname.p" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "trawname.p" identifier . field_identifier)) ))) ;) (expression_statement "work->destructor = work->destructor + -1;" (assignment_expression "work->destructor = work->destructor + -1" (field_expression "work->destructor" identifier -> field_identifier) = (binary_expression "work->destructor + -1" (field_expression "work->destructor" identifier -> field_identifier) + number_literal)) ;) (expression_statement "uVar3._0_4_ = work->constructor;" (assignment_expression "uVar3._0_4_ = work->constructor" (field_expression "uVar3._0_4_" identifier . field_identifier) = (field_expression "work->constructor" identifier -> field_identifier)) ;) (expression_statement "uVar3._4_4_ = work->destructor;" (assignment_expression "uVar3._4_4_ = work->destructor" (field_expression "uVar3._4_4_" identifier . field_identifier) = (field_expression "work->destructor" identifier -> field_identifier)) ;) }) (else_clause "else {\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }" else (compound_statement "{\n        string_prependn(declp,tname.b,iVar11);\n        if ((work->destructor & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar3._0_4_ = work->constructor;\n        uVar3._4_4_ = work->destructor;\n      }" { (expression_statement "string_prependn(declp,tname.b,iVar11);" (call_expression "string_prependn(declp,tname.b,iVar11)" identifier (argument_list "(declp,tname.b,iVar11)" ( identifier , (field_expression "tname.b" identifier . field_identifier) , identifier ))) ;) (if_statement "if ((work->destructor & 1) != 0) goto LAB_00325d78;" if (parenthesized_expression "((work->destructor & 1) != 0)" ( (binary_expression "(work->destructor & 1) != 0" (parenthesized_expression "(work->destructor & 1)" ( (binary_expression "work->destructor & 1" (field_expression "work->destructor" identifier -> field_identifier) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00325d78;" goto statement_identifier ;)) (labeled_statement "LAB_003256a5:\n        uVar3._0_4_ = work->constructor;" statement_identifier : (expression_statement "uVar3._0_4_ = work->constructor;" (assignment_expression "uVar3._0_4_ = work->constructor" (field_expression "uVar3._0_4_" identifier . field_identifier) = (field_expression "work->constructor" identifier -> field_identifier)) ;)) (expression_statement "uVar3._4_4_ = work->destructor;" (assignment_expression "uVar3._4_4_ = work->destructor" (field_expression "uVar3._4_4_" identifier . field_identifier) = (field_expression "work->destructor" identifier -> field_identifier)) ;) }))) (if_statement "if ((uVar3 & 0x100000001) != 0) {\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->constructor = work->constructor + -1;\n      }" if (parenthesized_expression "((uVar3 & 0x100000001) != 0)" ( (binary_expression "(uVar3 & 0x100000001) != 0" (parenthesized_expression "(uVar3 & 0x100000001)" ( (binary_expression "uVar3 & 0x100000001" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        string_appends(declp,&trawname,(string *)trawname.p);\n        work->constructor = work->constructor + -1;\n      }" { (expression_statement "string_appends(declp,&trawname,(string *)trawname.p);" (call_expression "string_appends(declp,&trawname,(string *)trawname.p)" identifier (argument_list "(declp,&trawname,(string *)trawname.p)" ( identifier , (pointer_expression "&trawname" & identifier) , (cast_expression "(string *)trawname.p" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "trawname.p" identifier . field_identifier)) ))) ;) (expression_statement "work->constructor = work->constructor + -1;" (assignment_expression "work->constructor = work->constructor + -1" (field_expression "work->constructor" identifier -> field_identifier) = (binary_expression "work->constructor + -1" (field_expression "work->constructor" identifier -> field_identifier) + number_literal)) ;) })) (if_statement "if (trawname.b != (char *)0x0) {\n        free(trawname.b);\n        trawname.p = (char *)0x0;\n        trawname.e = (char *)0x0;\n        trawname.b = (char *)0x0;\n      }" if (parenthesized_expression "(trawname.b != (char *)0x0)" ( (binary_expression "trawname.b != (char *)0x0" (field_expression "trawname.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(trawname.b);\n        trawname.p = (char *)0x0;\n        trawname.e = (char *)0x0;\n        trawname.b = (char *)0x0;\n      }" { (expression_statement "free(trawname.b);" (call_expression "free(trawname.b)" identifier (argument_list "(trawname.b)" ( (field_expression "trawname.b" identifier . field_identifier) ))) ;) (expression_statement "trawname.p = (char *)0x0;" (assignment_expression "trawname.p = (char *)0x0" (field_expression "trawname.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "trawname.e = (char *)0x0;" (assignment_expression "trawname.e = (char *)0x0" (field_expression "trawname.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "trawname.b = (char *)0x0;" (assignment_expression "trawname.b = (char *)0x0" (field_expression "trawname.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (expression_statement "uVar16 = iVar8 != 0;" (assignment_expression "uVar16 = iVar8 != 0" identifier = (binary_expression "iVar8 != 0" identifier != number_literal)) ;) (expression_statement "uVar7 = true;" (assignment_expression "uVar7 = true" identifier = true) ;) (expression_statement "pcVar9 = tname.b;" (assignment_expression "pcVar9 = tname.b" identifier = (field_expression "tname.b" identifier . field_identifier)) ;) (if_statement "if (tname.b != (char *)0x0) {\n        free(tname.b);\n        tname.p = (char *)0x0;\n        tname.e = (char *)0x0;\n        tname.b = (char *)0x0;\n        pcVar9 = (char *)0x0;\n      }" if (parenthesized_expression "(tname.b != (char *)0x0)" ( (binary_expression "tname.b != (char *)0x0" (field_expression "tname.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(tname.b);\n        tname.p = (char *)0x0;\n        tname.e = (char *)0x0;\n        tname.b = (char *)0x0;\n        pcVar9 = (char *)0x0;\n      }" { (expression_statement "free(tname.b);" (call_expression "free(tname.b)" identifier (argument_list "(tname.b)" ( (field_expression "tname.b" identifier . field_identifier) ))) ;) (expression_statement "tname.p = (char *)0x0;" (assignment_expression "tname.p = (char *)0x0" (field_expression "tname.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "tname.e = (char *)0x0;" (assignment_expression "tname.e = (char *)0x0" (field_expression "tname.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "tname.b = (char *)0x0;" (assignment_expression "tname.b = (char *)0x0" (field_expression "tname.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pcVar9 = (char *)0x0;" (assignment_expression "pcVar9 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) })) (if_statement "if (!(bool)uVar16) goto LAB_00325766;" if (parenthesized_expression "(!(bool)uVar16)" ( (unary_expression "!(bool)uVar16" ! (cast_expression "(bool)uVar16" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (goto_statement "goto LAB_00325766;" goto statement_identifier ;)) (labeled_statement "LAB_00325740:\n    uVar12 = work->options;" statement_identifier : (expression_statement "uVar12 = work->options;" (assignment_expression "uVar12 = work->options" identifier = (field_expression "work->options" identifier -> field_identifier)) ;)) (labeled_statement "joined_r0x00325745:\n    if ((uVar12 & 0x2c00) != 0) {\n      forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n    }" statement_identifier : (if_statement "if ((uVar12 & 0x2c00) != 0) {\n      forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n    }" if (parenthesized_expression "((uVar12 & 0x2c00) != 0)" ( (binary_expression "(uVar12 & 0x2c00) != 0" (parenthesized_expression "(uVar12 & 0x2c00)" ( (binary_expression "uVar12 & 0x2c00" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n    }" { (expression_statement "forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);" (call_expression "forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes)" identifier (argument_list "((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes)" ( (cast_expression "(work_stuff *)&work->typevec" ( (type_descriptor "work_stuff *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&work->typevec" & (field_expression "work->typevec" identifier -> field_identifier))) , (cast_expression "(work_stuff *)&work->ntypes" ( (type_descriptor "work_stuff *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&work->ntypes" & (field_expression "work->ntypes" identifier -> field_identifier))) ))) ;) }))) (expression_statement "uVar7 = false;" (assignment_expression "uVar7 = false" identifier = false) ;) (expression_statement "iVar8 = demangle_args(work,mangled,declp);" (assignment_expression "iVar8 = demangle_args(work,mangled,declp)" identifier = (call_expression "demangle_args(work,mangled,declp)" identifier (argument_list "(work,mangled,declp)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar6 = true;" (assignment_expression "uVar6 = true" identifier = true) ;) (labeled_statement "LAB_00325766:\n    if (iVar8 == 0) {\n      return 0;\n    }" statement_identifier : (if_statement "if (iVar8 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) }))) }) while (parenthesized_expression "( true )" ( true )) ;)) (labeled_statement "code_r0x00325824:\n  pcVar13 = *mangled;" statement_identifier : (expression_statement "pcVar13 = *mangled;" (assignment_expression "pcVar13 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;)) (expression_statement "cVar1 = *pcVar13;" (assignment_expression "cVar1 = *pcVar13" identifier = (pointer_expression "*pcVar13" * identifier)) ;) (goto_statement "goto joined_r0x003255cb;" goto statement_identifier ;) })))
(translation_unit "int FUN_00325580(uint *param_1,long *param_2,long *param_3)\n\n{\n  char cVar1;\n  byte bVar2;\n  undefined1 uVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  uint uVar6;\n  int iVar7;\n  char *pcVar8;\n  bool bVar9;\n  ulong uVar10;\n  char *pcVar11;\n  void *pvVar12;\n  byte *pbVar13;\n  char *pcVar14;\n  undefined1 uVar15;\n  void *local_98;\n  undefined8 local_90;\n  undefined8 local_88;\n  char *local_78;\n  char *local_70;\n  undefined8 local_68;\n  void *local_58;\n  void *local_50;\n  undefined8 local_48;\n  \n  iVar7 = 1;\n  uVar5 = false;\n  pcVar8 = (char *)0x0;\n  uVar3 = false;\n  uVar4 = false;\nLAB_003255c0:\n  do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );\ncode_r0x00325824:\n  pcVar11 = (char *)*param_2;\n  cVar1 = *pcVar11;\n  goto joined_r0x003255cb;\n}\n\n" (function_definition "int FUN_00325580(uint *param_1,long *param_2,long *param_3)\n\n{\n  char cVar1;\n  byte bVar2;\n  undefined1 uVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  uint uVar6;\n  int iVar7;\n  char *pcVar8;\n  bool bVar9;\n  ulong uVar10;\n  char *pcVar11;\n  void *pvVar12;\n  byte *pbVar13;\n  char *pcVar14;\n  undefined1 uVar15;\n  void *local_98;\n  undefined8 local_90;\n  undefined8 local_88;\n  char *local_78;\n  char *local_70;\n  undefined8 local_68;\n  void *local_58;\n  void *local_50;\n  undefined8 local_48;\n  \n  iVar7 = 1;\n  uVar5 = false;\n  pcVar8 = (char *)0x0;\n  uVar3 = false;\n  uVar4 = false;\nLAB_003255c0:\n  do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );\ncode_r0x00325824:\n  pcVar11 = (char *)*param_2;\n  cVar1 = *pcVar11;\n  goto joined_r0x003255cb;\n}" primitive_type (function_declarator "FUN_00325580(uint *param_1,long *param_2,long *param_3)" identifier (parameter_list "(uint *param_1,long *param_2,long *param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long *param_3" (sized_type_specifier "long" long) (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  char cVar1;\n  byte bVar2;\n  undefined1 uVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  uint uVar6;\n  int iVar7;\n  char *pcVar8;\n  bool bVar9;\n  ulong uVar10;\n  char *pcVar11;\n  void *pvVar12;\n  byte *pbVar13;\n  char *pcVar14;\n  undefined1 uVar15;\n  void *local_98;\n  undefined8 local_90;\n  undefined8 local_88;\n  char *local_78;\n  char *local_70;\n  undefined8 local_68;\n  void *local_58;\n  void *local_50;\n  undefined8 local_48;\n  \n  iVar7 = 1;\n  uVar5 = false;\n  pcVar8 = (char *)0x0;\n  uVar3 = false;\n  uVar4 = false;\nLAB_003255c0:\n  do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );\ncode_r0x00325824:\n  pcVar11 = (char *)*param_2;\n  cVar1 = *pcVar11;\n  goto joined_r0x003255cb;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "undefined1 uVar3;" type_identifier identifier ;) (declaration "undefined1 uVar4;" type_identifier identifier ;) (declaration "undefined1 uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "ulong uVar10;" type_identifier identifier ;) (declaration "char *pcVar11;" primitive_type (pointer_declarator "*pcVar11" * identifier) ;) (declaration "void *pvVar12;" primitive_type (pointer_declarator "*pvVar12" * identifier) ;) (declaration "byte *pbVar13;" type_identifier (pointer_declarator "*pbVar13" * identifier) ;) (declaration "char *pcVar14;" primitive_type (pointer_declarator "*pcVar14" * identifier) ;) (declaration "undefined1 uVar15;" type_identifier identifier ;) (declaration "void *local_98;" primitive_type (pointer_declarator "*local_98" * identifier) ;) (declaration "undefined8 local_90;" type_identifier identifier ;) (declaration "undefined8 local_88;" type_identifier identifier ;) (declaration "char *local_78;" primitive_type (pointer_declarator "*local_78" * identifier) ;) (declaration "char *local_70;" primitive_type (pointer_declarator "*local_70" * identifier) ;) (declaration "undefined8 local_68;" type_identifier identifier ;) (declaration "void *local_58;" primitive_type (pointer_declarator "*local_58" * identifier) ;) (declaration "void *local_50;" primitive_type (pointer_declarator "*local_50" * identifier) ;) (declaration "undefined8 local_48;" type_identifier identifier ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (expression_statement "uVar5 = false;" (assignment_expression "uVar5 = false" identifier = false) ;) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar3 = false;" (assignment_expression "uVar3 = false" identifier = false) ;) (expression_statement "uVar4 = false;" (assignment_expression "uVar4 = false" identifier = false) ;) (labeled_statement "LAB_003255c0:\n  do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );" do (compound_statement "{\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  }" { (expression_statement "pcVar11 = (char *)*param_2;" (assignment_expression "pcVar11 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "cVar1 = *pcVar11;" (assignment_expression "cVar1 = *pcVar11" identifier = (pointer_expression "*pcVar11" * identifier)) ;) (labeled_statement "joined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }" statement_identifier : (if_statement "if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }" { (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }" if (parenthesized_expression "((!(bool)uVar4) && ((uVar6 & 0x300) != 0))" ( (binary_expression "(!(bool)uVar4) && ((uVar6 & 0x300) != 0)" (parenthesized_expression "(!(bool)uVar4)" ( (unary_expression "!(bool)uVar4" ! (cast_expression "(bool)uVar4" ( (type_descriptor "bool" primitive_type) ) identifier)) )) && (parenthesized_expression "((uVar6 & 0x300) != 0)" ( (binary_expression "(uVar6 & 0x300) != 0" (parenthesized_expression "(uVar6 & 0x300)" ( (binary_expression "uVar6 & 0x300" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }" { (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" identifier = (call_expression "FUN_00324c60(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar7 == 0) {\n          return 0;\n        }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) })) (if_statement "if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }" if (parenthesized_expression "((uVar6 & 1) == 0)" ( (binary_expression "(uVar6 & 1) == 0" (parenthesized_expression "(uVar6 & 1)" ( (binary_expression "uVar6 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        return iVar7;\n      }" { (return_statement "return iVar7;" return identifier ;) })) (if_statement "if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }" if (parenthesized_expression "(param_1[0x10] != 0)" ( (binary_expression "param_1[0x10] != 0" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        FUN_00320c70(param_3," static");\n      }" { (expression_statement "FUN_00320c70(param_3," static");" (call_expression "FUN_00320c70(param_3," static")" identifier (argument_list "(param_3," static")" ( identifier , (string_literal "" static"" " string_content ") ))) ;) })) (expression_statement "uVar6 = param_1[0x12];" (assignment_expression "uVar6 = param_1[0x12]" identifier = (subscript_expression "param_1[0x12]" identifier [ number_literal ])) ;) (if_statement "if (uVar6 == 0) {\n        return iVar7;\n      }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        return iVar7;\n      }" { (return_statement "return iVar7;" return identifier ;) })) (if_statement "if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }" if (parenthesized_expression "(*param_3 != param_3[1])" ( (binary_expression "*param_3 != param_3[1]" (pointer_expression "*param_3" * identifier) != (subscript_expression "param_3[1]" identifier [ number_literal ])) )) (compound_statement "{\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }" { (expression_statement "FUN_00320c70(param_3,&DAT_003f45bf);" (call_expression "FUN_00320c70(param_3,&DAT_003f45bf)" identifier (argument_list "(param_3,&DAT_003f45bf)" ( identifier , (pointer_expression "&DAT_003f45bf" & identifier) ))) ;) (expression_statement "uVar6 = param_1[0x12];" (assignment_expression "uVar6 = param_1[0x12]" identifier = (subscript_expression "param_1[0x12]" identifier [ number_literal ])) ;) })) (expression_statement "pcVar8 = (char *)FUN_00320790(uVar6);" (assignment_expression "pcVar8 = (char *)FUN_00320790(uVar6)" identifier = (cast_expression "(char *)FUN_00320790(uVar6)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00320790(uVar6)" identifier (argument_list "(uVar6)" ( identifier ))))) ;) (if_statement "if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return iVar7;\n      }" { (return_statement "return iVar7;" return identifier ;) })) (if_statement "if (*pcVar8 == '\0') {\n        return iVar7;\n      }" if (parenthesized_expression "(*pcVar8 == '\0')" ( (binary_expression "*pcVar8 == '\0'" (pointer_expression "*pcVar8" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return iVar7;\n      }" { (return_statement "return iVar7;" return identifier ;) })) (expression_statement "FUN_00320c70(param_3,pcVar8);" (call_expression "FUN_00320c70(param_3,pcVar8)" identifier (argument_list "(param_3,pcVar8)" ( identifier , identifier ))) ;) (return_statement "return iVar7;" return identifier ;) }))) (switch_statement "switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }" switch (parenthesized_expression "(cVar1)" ( identifier )) (compound_statement "{\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }" { (case_statement "case '0':" case (char_literal "'0'" ' character ') :) (case_statement "case '1':" case (char_literal "'1'" ' character ') :) (case_statement "case '2':" case (char_literal "'2'" ' character ') :) (case_statement "case '3':" case (char_literal "'3'" ' character ') :) (case_statement "case '4':" case (char_literal "'4'" ' character ') :) (case_statement "case '5':" case (char_literal "'5'" ' character ') :) (case_statement "case '6':" case (char_literal "'6'" ' character ') :) (case_statement "case '7':" case (char_literal "'7'" ' character ') :) (case_statement "case '8':" case (char_literal "'8'" ' character ') :) (case_statement "case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;" case (char_literal "'9'" ' character ') : (expression_statement "param_1[0x11] = 0xffffffff;" (assignment_expression "param_1[0x11] = 0xffffffff" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" identifier = number_literal) ;) (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" { (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" identifier = identifier) ;) })) (expression_statement "local_50 = (void *)0x0;" (assignment_expression "local_50 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_58 = (void *)0x0;" (assignment_expression "local_58 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "FUN_00320670(param_1);" (call_expression "FUN_00320670(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "iVar7 = FUN_003238a0(param_1,param_2,&local_58);" (assignment_expression "iVar7 = FUN_003238a0(param_1,param_2,&local_58)" identifier = (call_expression "FUN_003238a0(param_1,param_2,&local_58)" identifier (argument_list "(param_1,param_2,&local_58)" ( identifier , identifier , (pointer_expression "&local_58" & identifier) )))) ;) (expression_statement "pvVar12 = local_50;" (assignment_expression "pvVar12 = local_50" identifier = identifier) ;) (if_statement "if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }" { (if_statement "if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }" if (parenthesized_expression "(local_58 != (void *)0x0)" ( (binary_expression "local_58 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          free(local_58);\n          return 0;\n        }" { (expression_statement "free(local_58);" (call_expression "free(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }" if (parenthesized_expression "((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0)" ( (binary_expression "(*(ulong *)(param_1 + 0xe) & 0x100000001) != 0" (parenthesized_expression "(*(ulong *)(param_1 + 0xe) & 0x100000001)" ( (binary_expression "*(ulong *)(param_1 + 0xe) & 0x100000001" (pointer_expression "*(ulong *)(param_1 + 0xe)" * (cast_expression "(ulong *)(param_1 + 0xe)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }" { (if_statement "if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }" if (parenthesized_expression "(1 < param_1[0x11] + 1)" ( (binary_expression "1 < param_1[0x11] + 1" number_literal < (binary_expression "param_1[0x11] + 1" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) + number_literal)) )) (compound_statement "{\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }" { (expression_statement "local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);" (assignment_expression "local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11])" identifier = (cast_expression "(void *)((long)local_58 + (long)(int)param_1[0x11])" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)local_58 + (long)(int)param_1[0x11])" ( (binary_expression "(long)local_58 + (long)(int)param_1[0x11]" (cast_expression "(long)local_58" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (cast_expression "(long)(int)param_1[0x11]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_1[0x11]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0x11]" identifier [ number_literal ])))) )))) ;) })) (if_statement "if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }" if (parenthesized_expression "((local_58 != local_50) && ((int)local_50 != (int)local_58))" ( (binary_expression "(local_58 != local_50) && ((int)local_50 != (int)local_58)" (parenthesized_expression "(local_58 != local_50)" ( (binary_expression "local_58 != local_50" identifier != identifier) )) && (parenthesized_expression "((int)local_50 != (int)local_58)" ( (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier) != (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n          FUN_00320bf0(param_3);\n        }" { (expression_statement "FUN_00320bf0(param_3);" (call_expression "FUN_00320bf0(param_3)" identifier (argument_list "(param_3)" ( identifier ))) ;) })) (if_statement "if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }" if (parenthesized_expression "((param_1[0xf] & 1) == 0)" ( (binary_expression "(param_1[0xf] & 1) == 0" (parenthesized_expression "(param_1[0xf] & 1)" ( (binary_expression "param_1[0xf] & 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n          param_1[0xe] = param_1[0xe] - 1;\n        }" { (expression_statement "param_1[0xe] = param_1[0xe] - 1;" (assignment_expression "param_1[0xe] = param_1[0xe] - 1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) = (binary_expression "param_1[0xe] - 1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) - number_literal)) ;) }) (else_clause "else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }" else (compound_statement "{\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }" { (expression_statement "FUN_00320c40(param_3,&DAT_003fb32e);" (call_expression "FUN_00320c40(param_3,&DAT_003fb32e)" identifier (argument_list "(param_3,&DAT_003fb32e)" ( identifier , (pointer_expression "&DAT_003fb32e" & identifier) ))) ;) (expression_statement "param_1[0xf] = param_1[0xf] - 1;" (assignment_expression "param_1[0xf] = param_1[0xf] - 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) = (binary_expression "param_1[0xf] - 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) - number_literal)) ;) }))) })) (expression_statement "uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;" (assignment_expression "uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff" identifier = (binary_expression "(long)pvVar12 - (long)local_58 & 0xffffffff" (binary_expression "(long)pvVar12 - (long)local_58" (cast_expression "(long)pvVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)local_58" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) & number_literal)) ;) (if_statement "if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }" if (parenthesized_expression "(pvVar12 == local_58)" ( (binary_expression "pvVar12 == local_58" identifier == identifier) )) (compound_statement "{\n        uVar10 = 0;\n      }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) })) (expression_statement "local_50 = pvVar12;" (assignment_expression "local_50 = pvVar12" identifier = identifier) ;) (expression_statement "FUN_003206f0(param_1,local_58,uVar10);" (call_expression "FUN_003206f0(param_1,local_58,uVar10)" identifier (argument_list "(param_1,local_58,uVar10)" ( identifier , identifier , identifier ))) ;) (expression_statement "uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;" (assignment_expression "uVar10 = (long)local_50 - (long)local_58 & 0xffffffff" identifier = (binary_expression "(long)local_50 - (long)local_58 & 0xffffffff" (binary_expression "(long)local_50 - (long)local_58" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)local_58" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) & number_literal)) ;) (if_statement "if (local_58 == local_50) {\n        uVar10 = 0;\n      }" if (parenthesized_expression "(local_58 == local_50)" ( (binary_expression "local_58 == local_50" identifier == identifier) )) (compound_statement "{\n        uVar10 = 0;\n      }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) })) (expression_statement "FUN_00320ad0(param_1 + 6,local_58,uVar10);" (call_expression "FUN_00320ad0(param_1 + 6,local_58,uVar10)" identifier (argument_list "(param_1 + 6,local_58,uVar10)" ( (binary_expression "param_1 + 6" identifier + number_literal) , identifier , identifier ))) ;) (expression_statement "pcVar11 = ".";" (assignment_expression "pcVar11 = "."" identifier = (string_literal ""."" " string_content ")) ;) (if_statement "if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }" if (parenthesized_expression "((*param_1 & 4) == 0)" ( (binary_expression "(*param_1 & 4) == 0" (parenthesized_expression "(*param_1 & 4)" ( (binary_expression "*param_1 & 4" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        pcVar11 = "::";\n      }" { (expression_statement "pcVar11 = "::";" (assignment_expression "pcVar11 = "::"" identifier = (string_literal ""::"" " string_content ")) ;) })) (expression_statement "FUN_00320c40(param_3,pcVar11);" (call_expression "FUN_00320c40(param_3,pcVar11)" identifier (argument_list "(param_3,pcVar11)" ( identifier , identifier ))) ;) (if_statement "if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }" if (parenthesized_expression "((local_58 != local_50) && ((int)local_50 != (int)local_58))" ( (binary_expression "(local_58 != local_50) && ((int)local_50 != (int)local_58)" (parenthesized_expression "(local_58 != local_50)" ( (binary_expression "local_58 != local_50" identifier != identifier) )) && (parenthesized_expression "((int)local_50 != (int)local_58)" ( (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier) != (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        FUN_00320bf0(param_3,local_58);\n      }" { (expression_statement "FUN_00320bf0(param_3,local_58);" (call_expression "FUN_00320bf0(param_3,local_58)" identifier (argument_list "(param_3,local_58)" ( identifier , identifier ))) ;) })) (if_statement "if (local_58 != (void *)0x0) {\n        free(local_58);\n      }" if (parenthesized_expression "(local_58 != (void *)0x0)" ( (binary_expression "local_58 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(local_58);\n      }" { (expression_statement "free(local_58);" (call_expression "free(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) })) (expression_statement "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);" (call_expression "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8)" identifier (argument_list "(param_1,pcVar8,*param_2 - (long)pcVar8)" ( identifier , identifier , (binary_expression "*param_2 - (long)pcVar8" (pointer_expression "*param_2" * identifier) - (cast_expression "(long)pcVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }" if (parenthesized_expression "(((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F'))" ( (binary_expression "((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')" (parenthesized_expression "((uVar6 & 0x2300) == 0)" ( (binary_expression "(uVar6 & 0x2300) == 0" (parenthesized_expression "(uVar6 & 0x2300)" ( (binary_expression "uVar6 & 0x2300" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')" ( (comma_expression "pcVar8 = (char *)0x0, *(char *)*param_2 == 'F'" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) , (binary_expression "*(char *)*param_2 == 'F'" (pointer_expression "*(char *)*param_2" * (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) == (char_literal "'F'" ' character '))) ))) )) (compound_statement "{\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }" { (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_00325b2b;" goto statement_identifier ;) })) (goto_statement "goto joined_r0x00325745;" goto statement_identifier ;)) (case_statement "default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;" default : (if_statement "if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((*param_1 & 0x300) == 0)" ( (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" ( (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" identifier = (call_expression "FUN_00324c60(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" identifier = true) ;) (expression_statement "uVar15 = iVar7 != 0 & uVar5;" (assignment_expression "uVar15 = iVar7 != 0 & uVar5" identifier = (binary_expression "iVar7 != 0 & uVar5" (binary_expression "iVar7 != 0" identifier != number_literal) & identifier)) ;) (break_statement "break;" break ;)) (case_statement "case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;" case (char_literal "'B'" ' character ') : (expression_statement "iVar7 = FUN_00322150(param_1,param_2,&local_58);" (assignment_expression "iVar7 = FUN_00322150(param_1,param_2,&local_58)" identifier = (call_expression "FUN_00322150(param_1,param_2,&local_58)" identifier (argument_list "(param_1,param_2,&local_58)" ( identifier , identifier , (pointer_expression "&local_58" & identifier) )))) ;) (if_statement "if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }" { (expression_statement "pcVar8 = "::";" (assignment_expression "pcVar8 = "::"" identifier = (string_literal ""::"" " string_content ")) ;) (if_statement "if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }" if (parenthesized_expression "((*param_1 & 4) != 0)" ( (binary_expression "(*param_1 & 4) != 0" (parenthesized_expression "(*param_1 & 4)" ( (binary_expression "*param_1 & 4" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n          pcVar8 = ".";\n        }" { (expression_statement "pcVar8 = ".";" (assignment_expression "pcVar8 = "."" identifier = (string_literal ""."" " string_content ")) ;) })) (expression_statement "FUN_00320c70(&local_58,pcVar8);" (call_expression "FUN_00320c70(&local_58,pcVar8)" identifier (argument_list "(&local_58,pcVar8)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (if_statement "if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }" if (parenthesized_expression "((local_58 != local_50) && ((int)local_50 != (int)local_58))" ( (binary_expression "(local_58 != local_50) && ((int)local_50 != (int)local_58)" (parenthesized_expression "(local_58 != local_50)" ( (binary_expression "local_58 != local_50" identifier != identifier) )) && (parenthesized_expression "((int)local_50 != (int)local_58)" ( (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier) != (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n          FUN_00320bf0(param_3,local_58);\n        }" { (expression_statement "FUN_00320bf0(param_3,local_58);" (call_expression "FUN_00320bf0(param_3,local_58)" identifier (argument_list "(param_3,local_58)" ( identifier , identifier ))) ;) })) (if_statement "if (local_58 != (void *)0x0) {\n          free(local_58);\n        }" if (parenthesized_expression "(local_58 != (void *)0x0)" ( (binary_expression "local_58 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          free(local_58);\n        }" { (expression_statement "free(local_58);" (call_expression "free(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) })) })) (expression_statement "uVar15 = iVar7 != 0;" (assignment_expression "uVar15 = iVar7 != 0" identifier = (binary_expression "iVar7 != 0" identifier != number_literal)) ;) (labeled_statement "LAB_003259a2:\n      pcVar8 = (char *)0x0;" statement_identifier : (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (expression_statement "uVar5 = true;" (assignment_expression "uVar5 = true" identifier = true) ;) (break_statement "break;" break ;)) (case_statement "case 'C':" case (char_literal "'C'" ' character ') :) (case_statement "case 'V':" case (char_literal "'V'" ' character ') :) (case_statement "case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;" case (char_literal "'u'" ' character ') : (if_statement "if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }" if (parenthesized_expression "(cVar1 == 'V')" ( (binary_expression "cVar1 == 'V'" identifier == (char_literal "'V'" ' character ')) )) (compound_statement "{\n        uVar6 = 2;\n      }" { (expression_statement "uVar6 = 2;" (assignment_expression "uVar6 = 2" identifier = number_literal) ;) }) (else_clause "else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }" else (if_statement "if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }" if (parenthesized_expression "(cVar1 == 'u')" ( (binary_expression "cVar1 == 'u'" identifier == (char_literal "'u'" ' character ')) )) (compound_statement "{\n        uVar6 = 4;\n      }" { (expression_statement "uVar6 = 4;" (assignment_expression "uVar6 = 4" identifier = number_literal) ;) }) (else_clause "else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }" else (compound_statement "{\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }" { (if_statement "if (cVar1 != 'C') {\n                    \n          abort();\n        }" if (parenthesized_expression "(cVar1 != 'C')" ( (binary_expression "cVar1 != 'C'" identifier != (char_literal "'C'" ' character ')) )) (compound_statement "{\n                    \n          abort();\n        }" { (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar6 = 1;" (assignment_expression "uVar6 = 1" identifier = number_literal) ;) }))))) (expression_statement "param_1[0x12] = param_1[0x12] | uVar6;" (assignment_expression "param_1[0x12] = param_1[0x12] | uVar6" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = (binary_expression "param_1[0x12] | uVar6" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) | identifier)) ;) (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" { (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" identifier = identifier) ;) })) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((long)pcVar11 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (goto_statement "goto LAB_0032581c;" goto statement_identifier ;)) (case_statement "case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;" case (char_literal "'F'" ' character ') : (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((long)pcVar11 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (if_statement "if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }" if (parenthesized_expression "((*param_1 & 0x3c00) != 0)" ( (binary_expression "(*param_1 & 0x3c00) != 0" (parenthesized_expression "(*param_1 & 0x3c00)" ( (binary_expression "*param_1 & 0x3c00" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }" { (expression_statement "FUN_00320990(param_1 + 2,param_1 + 0xc);" (call_expression "FUN_00320990(param_1 + 2,param_1 + 0xc)" identifier (argument_list "(param_1 + 2,param_1 + 0xc)" ( (binary_expression "param_1 + 2" identifier + number_literal) , (binary_expression "param_1 + 0xc" identifier + number_literal) ))) ;) })) (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" identifier = (call_expression "FUN_00324c60(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar7 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }" if (parenthesized_expression "((uVar6 & 0x2100) == 0)" ( (binary_expression "(uVar6 & 0x2100) == 0" (parenthesized_expression "(uVar6 & 0x2100)" ( (binary_expression "uVar6 & 0x2100" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar4 = true;\n      }" { (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" identifier = true) ;) }) (else_clause "else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }" else (compound_statement "{\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }" { (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" identifier = true) ;) (if_statement "if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }" if (parenthesized_expression "(*(char *)*param_2 == '_')" ( (binary_expression "*(char *)*param_2 == '_'" (pointer_expression "*(char *)*param_2" * (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) == (char_literal "'_'" ' character ')) )) (compound_statement "{\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }" { (expression_statement "*param_2 = (long)((char *)*param_2 + 1);" (assignment_expression "*param_2 = (long)((char *)*param_2 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((char *)*param_2 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((char *)*param_2 + 1)" ( (binary_expression "(char *)*param_2 + 1" (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) + number_literal) )))) ;) (expression_statement "iVar7 = FUN_00322150(param_1,param_2,&local_78);" (assignment_expression "iVar7 = FUN_00322150(param_1,param_2,&local_78)" identifier = (call_expression "FUN_00322150(param_1,param_2,&local_78)" identifier (argument_list "(param_1,param_2,&local_78)" ( identifier , identifier , (pointer_expression "&local_78" & identifier) )))) ;) (if_statement "if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }" if (parenthesized_expression "(local_78 == (char *)0x0)" ( (binary_expression "local_78 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }" { (expression_statement "uVar15 = uVar5 & iVar7 != 0;" (assignment_expression "uVar15 = uVar5 & iVar7 != 0" identifier = (binary_expression "uVar5 & iVar7 != 0" identifier & (binary_expression "iVar7 != 0" identifier != number_literal))) ;) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }" else (compound_statement "{\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }" { (expression_statement "free(local_78);" (call_expression "free(local_78)" identifier (argument_list "(local_78)" ( identifier ))) ;) (expression_statement "local_70 = (char *)0x0;" (assignment_expression "local_70 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" identifier = number_literal) ;) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar15 = uVar5 & iVar7 != 0;" (assignment_expression "uVar15 = uVar5 & iVar7 != 0" identifier = (binary_expression "uVar5 & iVar7 != 0" identifier & (binary_expression "iVar7 != 0" identifier != number_literal))) ;) }))) (break_statement "break;" break ;) })) }))) (goto_statement "goto LAB_00325b2b;" goto statement_identifier ;)) (case_statement "case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;" case (char_literal "'H'" ' character ') : (if_statement "if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((*param_1 & 0x300) == 0)" ( (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" ( (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);" (assignment_expression "iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0)" identifier = (call_expression "FUN_00323ef0(param_1,param_2,param_3,0,0,0)" identifier (argument_list "(param_1,param_2,param_3,0,0,0)" ( identifier , identifier , identifier , number_literal , number_literal , number_literal )))) ;) (expression_statement "bVar9 = true;" (assignment_expression "bVar9 = true" identifier = true) ;) (if_statement "if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }" if (parenthesized_expression "((param_1[0xe] & 1) != 0)" ( (binary_expression "(param_1[0xe] & 1) != 0" (parenthesized_expression "(param_1[0xe] & 1)" ( (binary_expression "param_1[0xe] & 1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) & number_literal) )) != number_literal) )) (compound_statement "{\n        bVar9 = (bool)uVar3;\n      }" { (expression_statement "bVar9 = (bool)uVar3;" (assignment_expression "bVar9 = (bool)uVar3" identifier = (cast_expression "(bool)uVar3" ( (type_descriptor "bool" primitive_type) ) identifier)) ;) })) (if_statement "if (*(char *)*param_2 == '\0') {\n        return 0;\n      }" if (parenthesized_expression "(*(char *)*param_2 == '\0')" ( (binary_expression "*(char *)*param_2 == '\0'" (pointer_expression "*(char *)*param_2" * (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_2 = (long)((char *)*param_2 + 1);" (assignment_expression "*param_2 = (long)((char *)*param_2 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((char *)*param_2 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((char *)*param_2 + 1)" ( (binary_expression "(char *)*param_2 + 1" (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) + number_literal) )))) ;) (expression_statement "uVar15 = iVar7 != 0 & uVar5;" (assignment_expression "uVar15 = iVar7 != 0 & uVar5" identifier = (binary_expression "iVar7 != 0 & uVar5" (binary_expression "iVar7 != 0" identifier != number_literal) & identifier)) ;) (expression_statement "uVar3 = bVar9;" (assignment_expression "uVar3 = bVar9" identifier = identifier) ;) (break_statement "break;" break ;)) (case_statement "case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;" case (char_literal "'K'" ' character ') : (expression_statement "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);" (assignment_expression "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0)" identifier = (call_expression "FUN_003245f0(param_1,param_2,param_3,1,0)" identifier (argument_list "(param_1,param_2,param_3,1,0)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;) (expression_statement "uVar15 = iVar7 != 0;" (assignment_expression "uVar15 = iVar7 != 0" identifier = (binary_expression "iVar7 != 0" identifier != number_literal)) ;) (if_statement "if ((*param_1 & 0x300) != 0) goto LAB_003259a2;" if (parenthesized_expression "((*param_1 & 0x300) != 0)" ( (binary_expression "(*param_1 & 0x300) != 0" (parenthesized_expression "(*param_1 & 0x300)" ( (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_003259a2;" goto statement_identifier ;)) (expression_statement "uVar15 = uVar15 & uVar5;" (assignment_expression "uVar15 = uVar15 & uVar5" identifier = (binary_expression "uVar15 & uVar5" identifier & identifier)) ;) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (break_statement "break;" break ;)) (case_statement "case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;" case (char_literal "'L'" ' character ') : (if_statement "if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }" if (parenthesized_expression "((*param_1 & 0x1000) == 0)" ( (binary_expression "(*param_1 & 0x1000) == 0" (parenthesized_expression "(*param_1 & 0x1000)" ( (binary_expression "*param_1 & 0x1000" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (do_statement "do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');" do (compound_statement "{\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      }" { (expression_statement "pcVar14 = pcVar11;" (assignment_expression "pcVar14 = pcVar11" identifier = identifier) ;) (expression_statement "*param_2 = (long)(pcVar14 + 1);" (assignment_expression "*param_2 = (long)(pcVar14 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)(pcVar14 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(pcVar14 + 1)" ( (binary_expression "pcVar14 + 1" identifier + number_literal) )))) ;) (expression_statement "cVar1 = pcVar14[1];" (assignment_expression "cVar1 = pcVar14[1]" identifier = (subscript_expression "pcVar14[1]" identifier [ number_literal ])) ;) (if_statement "if (cVar1 == '\0') break;" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "pcVar11 = pcVar14 + 1;" (assignment_expression "pcVar11 = pcVar14 + 1" identifier = (binary_expression "pcVar14 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(cVar1 != '_')" ( (binary_expression "cVar1 != '_'" identifier != (char_literal "'_'" ' character ')) )) ;) (if_statement "if (cVar1 == '\0') {\n        return 0;\n      }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_2 = (long)(pcVar14 + 2);" (assignment_expression "*param_2 = (long)(pcVar14 + 2)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)(pcVar14 + 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(pcVar14 + 2)" ( (binary_expression "pcVar14 + 2" identifier + number_literal) )))) ;) (goto_statement "goto LAB_0032581c;" goto statement_identifier ;)) (case_statement "case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;" case (char_literal "'Q'" ' character ') : (expression_statement "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);" (assignment_expression "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0)" identifier = (call_expression "FUN_003245f0(param_1,param_2,param_3,1,0)" identifier (argument_list "(param_1,param_2,param_3,1,0)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;) (if_statement "if (iVar7 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);" (call_expression "FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11)" identifier (argument_list "(param_1,pcVar11,*param_2 - (long)pcVar11)" ( identifier , identifier , (binary_expression "*param_2 - (long)pcVar11" (pointer_expression "*param_2" * identifier) - (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }" if (parenthesized_expression "((uVar6 & 0x300) != 0)" ( (binary_expression "(uVar6 & 0x300) != 0" (parenthesized_expression "(uVar6 & 0x300)" ( (binary_expression "uVar6 & 0x300" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }" { (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto joined_r0x00325745;" goto statement_identifier ;) })) (labeled_statement "LAB_00325b2b:\n      pcVar8 = (char *)0x0;" statement_identifier : (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (if_statement "if ((bool)uVar5) goto joined_r0x00325745;" if (parenthesized_expression "((bool)uVar5)" ( (cast_expression "(bool)uVar5" ( (type_descriptor "bool" primitive_type) ) identifier) )) (goto_statement "goto joined_r0x00325745;" goto statement_identifier ;)) (goto_statement "goto LAB_003255c0;" goto statement_identifier ;)) (case_statement "case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;" case (char_literal "'S'" ' character ') : (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" { (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" identifier = identifier) ;) })) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((long)pcVar11 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "param_1[0x10] = 1;" (assignment_expression "param_1[0x10] = 1" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) = number_literal) ;) (labeled_statement "LAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;" statement_identifier : (if_statement "if (!(bool)uVar5) goto code_r0x00325824;" if (parenthesized_expression "(!(bool)uVar5)" ( (unary_expression "!(bool)uVar5" ! (cast_expression "(bool)uVar5" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (goto_statement "goto code_r0x00325824;" goto statement_identifier ;))) (goto_statement "goto LAB_00325740;" goto statement_identifier ;)) (case_statement "case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;" case (char_literal "'_'" ' character ') : (if_statement "if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }" if (parenthesized_expression "(((*param_1 & 0x300) == 0) || (!(bool)uVar3))" ( (binary_expression "((*param_1 & 0x300) == 0) || (!(bool)uVar3)" (parenthesized_expression "((*param_1 & 0x300) == 0)" ( (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" ( (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "(!(bool)uVar3)" ( (unary_expression "!(bool)uVar3" ! (cast_expression "(bool)uVar3" ( (type_descriptor "bool" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }" { (if_statement "if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }" if (parenthesized_expression "((*param_1 & 0x1000) == 0)" ( (binary_expression "(*param_1 & 0x1000) == 0" (parenthesized_expression "(*param_1 & 0x1000)" ( (binary_expression "*param_1 & 0x1000" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((long)pcVar11 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (if_statement "if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }" if (parenthesized_expression "((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0))" ( (binary_expression "(*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)" (parenthesized_expression "(*(byte *)((long)pcVar11 + 1) != 0)" ( (binary_expression "*(byte *)((long)pcVar11 + 1) != 0" (pointer_expression "*(byte *)((long)pcVar11 + 1)" * (cast_expression "(byte *)((long)pcVar11 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) != number_literal) )) && (parenthesized_expression "(((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)" ( (binary_expression "((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4)" ( (binary_expression "(&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4" (subscript_expression "(&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2]" (parenthesized_expression "(&DAT_003fef00)" ( (pointer_expression "&DAT_003fef00" & identifier) )) [ (binary_expression "(ulong)*(byte *)((long)pcVar11 + 1) * 2" (binary_expression "(ulong)*(byte *)((long)pcVar11 + 1)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(byte *)((long)pcVar11 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) * number_literal) ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }" { (expression_statement "pbVar13 = (byte *)((long)pcVar11 + 2);" (assignment_expression "pbVar13 = (byte *)((long)pcVar11 + 2)" identifier = (cast_expression "(byte *)((long)pcVar11 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pcVar11 + 2)" ( (binary_expression "(long)pcVar11 + 2" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (do_statement "do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);" do (compound_statement "{\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          }" { (expression_statement "*param_2 = (long)pbVar13;" (assignment_expression "*param_2 = (long)pbVar13" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)pbVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "bVar2 = *pbVar13;" (assignment_expression "bVar2 = *pbVar13" identifier = (pointer_expression "*pbVar13" * identifier)) ;) (if_statement "if (bVar2 == 0) break;" if (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "pbVar13 = pbVar13 + 1;" (assignment_expression "pbVar13 = pbVar13 + 1" identifier = (binary_expression "pbVar13 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0)" ( (binary_expression "((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef00)[(ulong)bVar2 * 2] & 4)" ( (binary_expression "(&DAT_003fef00)[(ulong)bVar2 * 2] & 4" (subscript_expression "(&DAT_003fef00)[(ulong)bVar2 * 2]" (parenthesized_expression "(&DAT_003fef00)" ( (pointer_expression "&DAT_003fef00" & identifier) )) [ (binary_expression "(ulong)bVar2 * 2" (cast_expression "(ulong)bVar2" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal) ]) & number_literal) )) != number_literal) )) ;) })) (goto_statement "goto LAB_0032581c;" goto statement_identifier ;) })) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((long)pcVar11 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)pcVar11 + 1)" ( (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "iVar7 = FUN_00322150(param_1,param_2,&local_58);" (assignment_expression "iVar7 = FUN_00322150(param_1,param_2,&local_58)" identifier = (call_expression "FUN_00322150(param_1,param_2,&local_58)" identifier (argument_list "(param_1,param_2,&local_58)" ( identifier , identifier , (pointer_expression "&local_58" & identifier) )))) ;) (expression_statement "pvVar12 = local_50;" (assignment_expression "pvVar12 = local_50" identifier = identifier) ;) (if_statement "if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }" if (parenthesized_expression "(((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58))" ( (binary_expression "((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)" (parenthesized_expression "((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50))" ( (binary_expression "(local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)" (parenthesized_expression "(local_58 != local_50)" ( (binary_expression "local_58 != local_50" identifier != identifier) )) && (parenthesized_expression "(FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)" ( (comma_expression "FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50" (call_expression "FUN_00320c70(&local_58,&DAT_003f45bf)" identifier (argument_list "(&local_58,&DAT_003f45bf)" ( (pointer_expression "&local_58" & identifier) , (pointer_expression "&DAT_003f45bf" & identifier) ))) , (comma_expression "pvVar12 = local_58, local_58 != local_50" (assignment_expression "pvVar12 = local_58" identifier = identifier) , (binary_expression "local_58 != local_50" identifier != identifier))) ))) )) && (parenthesized_expression "((int)local_50 != (int)local_58)" ( (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier) != (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }" { (expression_statement "FUN_00320bf0(param_3,local_58);" (call_expression "FUN_00320bf0(param_3,local_58)" identifier (argument_list "(param_3,local_58)" ( identifier , identifier ))) ;) (expression_statement "pvVar12 = local_58;" (assignment_expression "pvVar12 = local_58" identifier = identifier) ;) })) (if_statement "if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }" if (parenthesized_expression "(pvVar12 != (void *)0x0)" ( (binary_expression "pvVar12 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(pvVar12);\n      }" { (expression_statement "free(pvVar12);" (call_expression "free(pvVar12)" identifier (argument_list "(pvVar12)" ( identifier ))) ;) })) (expression_statement "uVar15 = iVar7 != 0 & uVar5;" (assignment_expression "uVar15 = iVar7 != 0 & uVar5" identifier = (binary_expression "iVar7 != 0 & uVar5" (binary_expression "iVar7 != 0" identifier != number_literal) & identifier)) ;) (expression_statement "uVar3 = true;" (assignment_expression "uVar3 = true" identifier = true) ;) (break_statement "break;" break ;)) (case_statement "case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }" case (char_literal "'t'" ' character ') : (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" { (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" identifier = identifier) ;) })) (expression_statement "local_88 = 0;" (assignment_expression "local_88 = 0" identifier = number_literal) ;) (expression_statement "local_90 = 0;" (assignment_expression "local_90 = 0" identifier = number_literal) ;) (expression_statement "local_98 = (void *)0x0;" (assignment_expression "local_98 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" identifier = number_literal) ;) (expression_statement "local_70 = (char *)0x0;" (assignment_expression "local_70 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);" (assignment_expression "iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1)" identifier = (call_expression "FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1)" identifier (argument_list "(param_1,param_2,&local_78,&local_98,1,1)" ( identifier , identifier , (pointer_expression "&local_78" & identifier) , (pointer_expression "&local_98" & identifier) , number_literal , number_literal )))) ;) (if_statement "if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }" { (expression_statement "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);" (call_expression "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8)" identifier (argument_list "(param_1,pcVar8,*param_2 - (long)pcVar8)" ( identifier , identifier , (binary_expression "*param_2 - (long)pcVar8" (pointer_expression "*param_2" * identifier) - (cast_expression "(long)pcVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) })) (expression_statement "pcVar8 = "::";" (assignment_expression "pcVar8 = "::"" identifier = (string_literal ""::"" " string_content ")) ;) (if_statement "if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }" if (parenthesized_expression "((*param_1 & 4) != 0)" ( (binary_expression "(*param_1 & 4) != 0" (parenthesized_expression "(*param_1 & 4)" ( (binary_expression "*param_1 & 4" (pointer_expression "*param_1" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        pcVar8 = ".";\n      }" { (expression_statement "pcVar8 = ".";" (assignment_expression "pcVar8 = "."" identifier = (string_literal ""."" " string_content ")) ;) })) (expression_statement "FUN_00320c70(&local_78,pcVar8);" (call_expression "FUN_00320c70(&local_78,pcVar8)" identifier (argument_list "(&local_78,pcVar8)" ( (pointer_expression "&local_78" & identifier) , identifier ))) ;) (if_statement "if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" if (parenthesized_expression "((local_78 == local_70) || ((int)local_70 == (int)local_78))" ( (binary_expression "(local_78 == local_70) || ((int)local_70 == (int)local_78)" (parenthesized_expression "(local_78 == local_70)" ( (binary_expression "local_78 == local_70" identifier == identifier) )) || (parenthesized_expression "((int)local_70 == (int)local_78)" ( (binary_expression "(int)local_70 == (int)local_78" (cast_expression "(int)local_70" ( (type_descriptor "int" primitive_type) ) identifier) == (cast_expression "(int)local_78" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" { (if_statement "if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;" if (parenthesized_expression "((param_1[0xf] & 1) == 0)" ( (binary_expression "(param_1[0xf] & 1) == 0" (parenthesized_expression "(param_1[0xf] & 1)" ( (binary_expression "param_1[0xf] & 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_003256a5;" goto statement_identifier ;)) (labeled_statement "LAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);" statement_identifier : (expression_statement "FUN_00320c40(&local_98,&DAT_003fb32e);" (call_expression "FUN_00320c40(&local_98,&DAT_003fb32e)" identifier (argument_list "(&local_98,&DAT_003fb32e)" ( (pointer_expression "&local_98" & identifier) , (pointer_expression "&DAT_003fb32e" & identifier) ))) ;)) (expression_statement "FUN_00320db0(param_3,&local_98,local_90);" (call_expression "FUN_00320db0(param_3,&local_98,local_90)" identifier (argument_list "(param_3,&local_98,local_90)" ( identifier , (pointer_expression "&local_98" & identifier) , identifier ))) ;) (expression_statement "param_1[0xf] = param_1[0xf] - 1;" (assignment_expression "param_1[0xf] = param_1[0xf] - 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) = (binary_expression "param_1[0xf] - 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) - number_literal)) ;) (expression_statement "uVar10 = *(ulong *)(param_1 + 0xe);" (assignment_expression "uVar10 = *(ulong *)(param_1 + 0xe)" identifier = (pointer_expression "*(ulong *)(param_1 + 0xe)" * (cast_expression "(ulong *)(param_1 + 0xe)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) ))))) ;) }) (else_clause "else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" else (compound_statement "{\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" { (expression_statement "FUN_00320bf0(param_3);" (call_expression "FUN_00320bf0(param_3)" identifier (argument_list "(param_3)" ( identifier ))) ;) (if_statement "if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;" if (parenthesized_expression "((param_1[0xf] & 1) != 0)" ( (binary_expression "(param_1[0xf] & 1) != 0" (parenthesized_expression "(param_1[0xf] & 1)" ( (binary_expression "param_1[0xf] & 1" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00325d78;" goto statement_identifier ;)) (labeled_statement "LAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);" statement_identifier : (expression_statement "uVar10 = *(ulong *)(param_1 + 0xe);" (assignment_expression "uVar10 = *(ulong *)(param_1 + 0xe)" identifier = (pointer_expression "*(ulong *)(param_1 + 0xe)" * (cast_expression "(ulong *)(param_1 + 0xe)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) ))))) ;)) }))) (if_statement "if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }" if (parenthesized_expression "((uVar10 & 0x100000001) != 0)" ( (binary_expression "(uVar10 & 0x100000001) != 0" (parenthesized_expression "(uVar10 & 0x100000001)" ( (binary_expression "uVar10 & 0x100000001" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }" { (expression_statement "FUN_00320db0(param_3,&local_98,local_90);" (call_expression "FUN_00320db0(param_3,&local_98,local_90)" identifier (argument_list "(param_3,&local_98,local_90)" ( identifier , (pointer_expression "&local_98" & identifier) , identifier ))) ;) (expression_statement "param_1[0xe] = param_1[0xe] - 1;" (assignment_expression "param_1[0xe] = param_1[0xe] - 1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) = (binary_expression "param_1[0xe] - 1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) - number_literal)) ;) })) (if_statement "if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }" if (parenthesized_expression "(local_98 != (void *)0x0)" ( (binary_expression "local_98 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }" { (expression_statement "free(local_98);" (call_expression "free(local_98)" identifier (argument_list "(local_98)" ( identifier ))) ;) (expression_statement "local_90 = 0;" (assignment_expression "local_90 = 0" identifier = number_literal) ;) (expression_statement "local_88 = 0;" (assignment_expression "local_88 = 0" identifier = number_literal) ;) (expression_statement "local_98 = (void *)0x0;" (assignment_expression "local_98 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (expression_statement "uVar15 = iVar7 != 0;" (assignment_expression "uVar15 = iVar7 != 0" identifier = (binary_expression "iVar7 != 0" identifier != number_literal)) ;) (expression_statement "uVar5 = true;" (assignment_expression "uVar5 = true" identifier = true) ;) (expression_statement "pcVar8 = local_78;" (assignment_expression "pcVar8 = local_78" identifier = identifier) ;) (if_statement "if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }" if (parenthesized_expression "(local_78 != (char *)0x0)" ( (binary_expression "local_78 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }" { (expression_statement "free(local_78);" (call_expression "free(local_78)" identifier (argument_list "(local_78)" ( identifier ))) ;) (expression_statement "local_70 = (char *)0x0;" (assignment_expression "local_70 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" identifier = number_literal) ;) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) })) (if_statement "if (!(bool)uVar15) goto LAB_00325766;" if (parenthesized_expression "(!(bool)uVar15)" ( (unary_expression "!(bool)uVar15" ! (cast_expression "(bool)uVar15" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (goto_statement "goto LAB_00325766;" goto statement_identifier ;)) (labeled_statement "LAB_00325740:\n    uVar6 = *param_1;" statement_identifier : (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (labeled_statement "joined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }" statement_identifier : (if_statement "if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }" if (parenthesized_expression "((uVar6 & 0x2c00) != 0)" ( (binary_expression "(uVar6 & 0x2c00) != 0" (parenthesized_expression "(uVar6 & 0x2c00)" ( (binary_expression "uVar6 & 0x2c00" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }" { (expression_statement "FUN_00320990(param_1 + 2,param_1 + 0xc);" (call_expression "FUN_00320990(param_1 + 2,param_1 + 0xc)" identifier (argument_list "(param_1 + 2,param_1 + 0xc)" ( (binary_expression "param_1 + 2" identifier + number_literal) , (binary_expression "param_1 + 0xc" identifier + number_literal) ))) ;) }))) (expression_statement "uVar5 = false;" (assignment_expression "uVar5 = false" identifier = false) ;) (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" identifier = (call_expression "FUN_00324c60(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" identifier = true) ;) (labeled_statement "LAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }" statement_identifier : (if_statement "if (iVar7 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) }))) }) while (parenthesized_expression "( true )" ( true )) ;)) (labeled_statement "code_r0x00325824:\n  pcVar11 = (char *)*param_2;" statement_identifier : (expression_statement "pcVar11 = (char *)*param_2;" (assignment_expression "pcVar11 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;)) (expression_statement "cVar1 = *pcVar11;" (assignment_expression "cVar1 = *pcVar11" identifier = (pointer_expression "*pcVar11" * identifier)) ;) (goto_statement "goto joined_r0x003255cb;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return IDENT ;) }))) (switch_statement switch (parenthesized_expression ( IDENT )) (compound_statement { (case_statement case (char_literal ' character ') :) (case_statement case (char_literal ' character ') :) (case_statement case (char_literal ' character ') :) (case_statement case (char_literal ' character ') :) (case_statement case (char_literal ' character ') :) (case_statement case (char_literal ' character ') :) (case_statement case (char_literal ' character ') :) (case_statement case (char_literal ' character ') :) (case_statement case (char_literal ' character ') :) (case_statement case (char_literal ' character ') : (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return LIT ;) })) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])))) )))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != IDENT) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) - LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) - LIT)) ;) }))) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != IDENT) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (pointer_expression * IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) == (char_literal ' character '))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;)) (case_statement default : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT != LIT) & IDENT)) ;) (break_statement break ;)) (case_statement case (char_literal ' character ') : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != IDENT) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;)) (expression_statement (assignment_expression IDENT = BOOL) ;) (break_statement break ;)) (case_statement case (char_literal ' character ') :) (case_statement case (char_literal ' character ') :) (case_statement case (char_literal ' character ') : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' character ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) }))))) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) | IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) (goto_statement goto statement_identifier ;)) (case_statement case (char_literal ' character ') : (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT & (binary_expression IDENT != LIT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & (binary_expression IDENT != LIT))) ;) }))) (break_statement break ;) })) }))) (goto_statement goto statement_identifier ;)) (case_statement case (char_literal ' character ') : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT , LIT , LIT )))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT != LIT) & IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (break_statement break ;)) (case_statement case (char_literal ' character ') : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (break_statement break ;)) (case_statement case (char_literal ' character ') : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (char_literal ' character ')) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (goto_statement goto statement_identifier ;)) (case_statement case (char_literal ' character ') : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (pointer_expression * IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;)) (if_statement if (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) IDENT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;)) (case_statement case (char_literal ' character ') : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (goto_statement goto statement_identifier ;))) (goto_statement goto statement_identifier ;)) (case_statement case (char_literal ' character ') : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT) )) || (parenthesized_expression ( (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) * LIT) ]) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT) ]) & LIT) )) != LIT) )) ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != IDENT) )) && (parenthesized_expression ( (comma_expression (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (pointer_expression & IDENT) ))) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT != IDENT))) ))) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT != LIT) & IDENT)) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (break_statement break ;)) (case_statement case (char_literal ' character ') : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) , (pointer_expression & IDENT) , LIT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (pointer_expression * IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) ;) })) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) || (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) == (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) == LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (pointer_expression & IDENT) ))) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , IDENT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) - LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , IDENT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) - LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != LIT)) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }))) })) (if_statement if (parenthesized_expression ( (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) ))) ;) }))) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) }))) }) while (parenthesized_expression ( BOOL )) ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (goto_statement goto statement_identifier ;) })))
(function_definition "int FUN_00325580(uint *param_1,long *param_2,long *param_3)\n\n{\n  char cVar1;\n  byte bVar2;\n  undefined1 uVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  uint uVar6;\n  int iVar7;\n  char *pcVar8;\n  bool bVar9;\n  ulong uVar10;\n  char *pcVar11;\n  void *pvVar12;\n  byte *pbVar13;\n  char *pcVar14;\n  undefined1 uVar15;\n  void *local_98;\n  undefined8 local_90;\n  undefined8 local_88;\n  char *local_78;\n  char *local_70;\n  undefined8 local_68;\n  void *local_58;\n  void *local_50;\n  undefined8 local_48;\n  \n  iVar7 = 1;\n  uVar5 = false;\n  pcVar8 = (char *)0x0;\n  uVar3 = false;\n  uVar4 = false;\nLAB_003255c0:\n  do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );\ncode_r0x00325824:\n  pcVar11 = (char *)*param_2;\n  cVar1 = *pcVar11;\n  goto joined_r0x003255cb;\n}" (primitive_type "int") (function_declarator "FUN_00325580(uint *param_1,long *param_2,long *param_3)" (identifier "FUN_00325580") (parameter_list "(uint *param_1,long *param_2,long *param_3)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "long *param_3" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  char cVar1;\n  byte bVar2;\n  undefined1 uVar3;\n  undefined1 uVar4;\n  undefined1 uVar5;\n  uint uVar6;\n  int iVar7;\n  char *pcVar8;\n  bool bVar9;\n  ulong uVar10;\n  char *pcVar11;\n  void *pvVar12;\n  byte *pbVar13;\n  char *pcVar14;\n  undefined1 uVar15;\n  void *local_98;\n  undefined8 local_90;\n  undefined8 local_88;\n  char *local_78;\n  char *local_70;\n  undefined8 local_68;\n  void *local_58;\n  void *local_50;\n  undefined8 local_48;\n  \n  iVar7 = 1;\n  uVar5 = false;\n  pcVar8 = (char *)0x0;\n  uVar3 = false;\n  uVar4 = false;\nLAB_003255c0:\n  do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );\ncode_r0x00325824:\n  pcVar11 = (char *)*param_2;\n  cVar1 = *pcVar11;\n  goto joined_r0x003255cb;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "undefined1 uVar3;" (type_identifier "undefined1") (identifier "uVar3") (; ";")) (declaration "undefined1 uVar4;" (type_identifier "undefined1") (identifier "uVar4") (; ";")) (declaration "undefined1 uVar5;" (type_identifier "undefined1") (identifier "uVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "char *pcVar8;" (primitive_type "char") (pointer_declarator "*pcVar8" (* "*") (identifier "pcVar8")) (; ";")) (declaration "bool bVar9;" (primitive_type "bool") (identifier "bVar9") (; ";")) (declaration "ulong uVar10;" (type_identifier "ulong") (identifier "uVar10") (; ";")) (declaration "char *pcVar11;" (primitive_type "char") (pointer_declarator "*pcVar11" (* "*") (identifier "pcVar11")) (; ";")) (declaration "void *pvVar12;" (primitive_type "void") (pointer_declarator "*pvVar12" (* "*") (identifier "pvVar12")) (; ";")) (declaration "byte *pbVar13;" (type_identifier "byte") (pointer_declarator "*pbVar13" (* "*") (identifier "pbVar13")) (; ";")) (declaration "char *pcVar14;" (primitive_type "char") (pointer_declarator "*pcVar14" (* "*") (identifier "pcVar14")) (; ";")) (declaration "undefined1 uVar15;" (type_identifier "undefined1") (identifier "uVar15") (; ";")) (declaration "void *local_98;" (primitive_type "void") (pointer_declarator "*local_98" (* "*") (identifier "local_98")) (; ";")) (declaration "undefined8 local_90;" (type_identifier "undefined8") (identifier "local_90") (; ";")) (declaration "undefined8 local_88;" (type_identifier "undefined8") (identifier "local_88") (; ";")) (declaration "char *local_78;" (primitive_type "char") (pointer_declarator "*local_78" (* "*") (identifier "local_78")) (; ";")) (declaration "char *local_70;" (primitive_type "char") (pointer_declarator "*local_70" (* "*") (identifier "local_70")) (; ";")) (declaration "undefined8 local_68;" (type_identifier "undefined8") (identifier "local_68") (; ";")) (declaration "void *local_58;" (primitive_type "void") (pointer_declarator "*local_58" (* "*") (identifier "local_58")) (; ";")) (declaration "void *local_50;" (primitive_type "void") (pointer_declarator "*local_50" (* "*") (identifier "local_50")) (; ";")) (declaration "undefined8 local_48;" (type_identifier "undefined8") (identifier "local_48") (; ";")) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" (identifier "iVar7") (= "=") (number_literal "1")) (; ";")) (expression_statement "uVar5 = false;" (assignment_expression "uVar5 = false" (identifier "uVar5") (= "=") (false "false")) (; ";")) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" (identifier "pcVar8") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "uVar3 = false;" (assignment_expression "uVar3 = false" (identifier "uVar3") (= "=") (false "false")) (; ";")) (expression_statement "uVar4 = false;" (assignment_expression "uVar4 = false" (identifier "uVar4") (= "=") (false "false")) (; ";")) (labeled_statement "LAB_003255c0:\n  do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );" (statement_identifier "LAB_003255c0") (: ":") (do_statement "do {\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  } while( true );" (do "do") (compound_statement "{\n    pcVar11 = (char *)*param_2;\n    cVar1 = *pcVar11;\njoined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }\n    switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }\n    if (!(bool)uVar15) goto LAB_00325766;\nLAB_00325740:\n    uVar6 = *param_1;\njoined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }\n    uVar5 = false;\n    iVar7 = FUN_00324c60(param_1,param_2,param_3);\n    uVar4 = true;\nLAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }\n  }" ({ "{") (expression_statement "pcVar11 = (char *)*param_2;" (assignment_expression "pcVar11 = (char *)*param_2" (identifier "pcVar11") (= "=") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (expression_statement "cVar1 = *pcVar11;" (assignment_expression "cVar1 = *pcVar11" (identifier "cVar1") (= "=") (pointer_expression "*pcVar11" (* "*") (identifier "pcVar11"))) (; ";")) (labeled_statement "joined_r0x003255cb:\n    if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }" (statement_identifier "joined_r0x003255cb") (: ":") (if_statement "if (cVar1 == '\0') {\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }" (if "if") (parenthesized_expression "(cVar1 == '\0')" (( "(") (binary_expression "cVar1 == '\0'" (identifier "cVar1") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar6 = *param_1;\n      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }\n      if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }\n      if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }\n      uVar6 = param_1[0x12];\n      if (uVar6 == 0) {\n        return iVar7;\n      }\n      if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }\n      pcVar8 = (char *)FUN_00320790(uVar6);\n      if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }\n      if (*pcVar8 == '\0') {\n        return iVar7;\n      }\n      FUN_00320c70(param_3,pcVar8);\n      return iVar7;\n    }" ({ "{") (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" (identifier "uVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }" (if "if") (parenthesized_expression "((!(bool)uVar4) && ((uVar6 & 0x300) != 0))" (( "(") (binary_expression "(!(bool)uVar4) && ((uVar6 & 0x300) != 0)" (parenthesized_expression "(!(bool)uVar4)" (( "(") (unary_expression "!(bool)uVar4" (! "!") (cast_expression "(bool)uVar4" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar4"))) () ")")) (&& "&&") (parenthesized_expression "((uVar6 & 0x300) != 0)" (( "(") (binary_expression "(uVar6 & 0x300) != 0" (parenthesized_expression "(uVar6 & 0x300)" (( "(") (binary_expression "uVar6 & 0x300" (identifier "uVar6") (& "&") (number_literal "0x300")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n        iVar7 = FUN_00324c60(param_1,param_2,param_3);\n        if (iVar7 == 0) {\n          return 0;\n        }\n        uVar6 = *param_1;\n      }" ({ "{") (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" (identifier "iVar7") (= "=") (call_expression "FUN_00324c60(param_1,param_2,param_3)" (identifier "FUN_00324c60") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar7 == 0) {\n          return 0;\n        }" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" (identifier "uVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (} "}"))) (if_statement "if ((uVar6 & 1) == 0) {\n        return iVar7;\n      }" (if "if") (parenthesized_expression "((uVar6 & 1) == 0)" (( "(") (binary_expression "(uVar6 & 1) == 0" (parenthesized_expression "(uVar6 & 1)" (( "(") (binary_expression "uVar6 & 1" (identifier "uVar6") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return iVar7;\n      }" ({ "{") (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}"))) (if_statement "if (param_1[0x10] != 0) {\n        FUN_00320c70(param_3," static");\n      }" (if "if") (parenthesized_expression "(param_1[0x10] != 0)" (( "(") (binary_expression "param_1[0x10] != 0" (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_00320c70(param_3," static");\n      }" ({ "{") (expression_statement "FUN_00320c70(param_3," static");" (call_expression "FUN_00320c70(param_3," static")" (identifier "FUN_00320c70") (argument_list "(param_3," static")" (( "(") (identifier "param_3") (, ",") (string_literal "" static"" (" """) (string_content " static") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar6 = param_1[0x12];" (assignment_expression "uVar6 = param_1[0x12]" (identifier "uVar6") (= "=") (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]"))) (; ";")) (if_statement "if (uVar6 == 0) {\n        return iVar7;\n      }" (if "if") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return iVar7;\n      }" ({ "{") (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}"))) (if_statement "if (*param_3 != param_3[1]) {\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }" (if "if") (parenthesized_expression "(*param_3 != param_3[1])" (( "(") (binary_expression "*param_3 != param_3[1]" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (!= "!=") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) () ")")) (compound_statement "{\n        FUN_00320c70(param_3,&DAT_003f45bf);\n        uVar6 = param_1[0x12];\n      }" ({ "{") (expression_statement "FUN_00320c70(param_3,&DAT_003f45bf);" (call_expression "FUN_00320c70(param_3,&DAT_003f45bf)" (identifier "FUN_00320c70") (argument_list "(param_3,&DAT_003f45bf)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&DAT_003f45bf" (& "&") (identifier "DAT_003f45bf")) () ")"))) (; ";")) (expression_statement "uVar6 = param_1[0x12];" (assignment_expression "uVar6 = param_1[0x12]" (identifier "uVar6") (= "=") (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]"))) (; ";")) (} "}"))) (expression_statement "pcVar8 = (char *)FUN_00320790(uVar6);" (assignment_expression "pcVar8 = (char *)FUN_00320790(uVar6)" (identifier "pcVar8") (= "=") (cast_expression "(char *)FUN_00320790(uVar6)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00320790(uVar6)" (identifier "FUN_00320790") (argument_list "(uVar6)" (( "(") (identifier "uVar6") () ")"))))) (; ";")) (if_statement "if (pcVar8 == (char *)0x0) {\n        return iVar7;\n      }" (if "if") (parenthesized_expression "(pcVar8 == (char *)0x0)" (( "(") (binary_expression "pcVar8 == (char *)0x0" (identifier "pcVar8") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        return iVar7;\n      }" ({ "{") (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}"))) (if_statement "if (*pcVar8 == '\0') {\n        return iVar7;\n      }" (if "if") (parenthesized_expression "(*pcVar8 == '\0')" (( "(") (binary_expression "*pcVar8 == '\0'" (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return iVar7;\n      }" ({ "{") (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}"))) (expression_statement "FUN_00320c70(param_3,pcVar8);" (call_expression "FUN_00320c70(param_3,pcVar8)" (identifier "FUN_00320c70") (argument_list "(param_3,pcVar8)" (( "(") (identifier "param_3") (, ",") (identifier "pcVar8") () ")"))) (; ";")) (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}")))) (switch_statement "switch(cVar1) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }" (switch "switch") (parenthesized_expression "(cVar1)" (( "(") (identifier "cVar1") () ")")) (compound_statement "{\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;\n    default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;\n    case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;\n    case 'C':\n    case 'V':\n    case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;\n    case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;\n    case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;\n    case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;\n    case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;\n    case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;\n    case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;\n    case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;\n    case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }\n    }" ({ "{") (case_statement "case '0':" (case "case") (char_literal "'0'" (' "'") (character "0") (' "'")) (: ":")) (case_statement "case '1':" (case "case") (char_literal "'1'" (' "'") (character "1") (' "'")) (: ":")) (case_statement "case '2':" (case "case") (char_literal "'2'" (' "'") (character "2") (' "'")) (: ":")) (case_statement "case '3':" (case "case") (char_literal "'3'" (' "'") (character "3") (' "'")) (: ":")) (case_statement "case '4':" (case "case") (char_literal "'4'" (' "'") (character "4") (' "'")) (: ":")) (case_statement "case '5':" (case "case") (char_literal "'5'" (' "'") (character "5") (' "'")) (: ":")) (case_statement "case '6':" (case "case") (char_literal "'6'" (' "'") (character "6") (' "'")) (: ":")) (case_statement "case '7':" (case "case") (char_literal "'7'" (' "'") (character "7") (' "'")) (: ":")) (case_statement "case '8':" (case "case") (char_literal "'8'" (' "'") (character "8") (' "'")) (: ":")) (case_statement "case '9':\n      param_1[0x11] = 0xffffffff;\n      local_48 = 0;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_50 = (void *)0x0;\n      local_58 = (void *)0x0;\n      FUN_00320670(param_1);\n      iVar7 = FUN_003238a0(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }\n      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }\n      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;\n      if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }\n      local_50 = pvVar12;\n      FUN_003206f0(param_1,local_58,uVar10);\n      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;\n      if (local_58 == local_50) {\n        uVar10 = 0;\n      }\n      FUN_00320ad0(param_1 + 6,local_58,uVar10);\n      pcVar11 = ".";\n      if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }\n      FUN_00320c40(param_3,pcVar11);\n      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }\n      if (local_58 != (void *)0x0) {\n        free(local_58);\n      }\n      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      uVar6 = *param_1;\n      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }\n      goto joined_r0x00325745;" (case "case") (char_literal "'9'" (' "'") (character "9") (' "'")) (: ":") (expression_statement "param_1[0x11] = 0xffffffff;" (assignment_expression "param_1[0x11] = 0xffffffff" (subscript_expression "param_1[0x11]" (identifier "param_1") ([ "[") (number_literal "0x11") (] "]")) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" (identifier "local_48") (= "=") (number_literal "0")) (; ";")) (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" (if "if") (parenthesized_expression "(pcVar8 == (char *)0x0)" (( "(") (binary_expression "pcVar8 == (char *)0x0" (identifier "pcVar8") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" ({ "{") (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" (identifier "pcVar8") (= "=") (identifier "pcVar11")) (; ";")) (} "}"))) (expression_statement "local_50 = (void *)0x0;" (assignment_expression "local_50 = (void *)0x0" (identifier "local_50") (= "=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "local_58 = (void *)0x0;" (assignment_expression "local_58 = (void *)0x0" (identifier "local_58") (= "=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "FUN_00320670(param_1);" (call_expression "FUN_00320670(param_1)" (identifier "FUN_00320670") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "iVar7 = FUN_003238a0(param_1,param_2,&local_58);" (assignment_expression "iVar7 = FUN_003238a0(param_1,param_2,&local_58)" (identifier "iVar7") (= "=") (call_expression "FUN_003238a0(param_1,param_2,&local_58)" (identifier "FUN_003238a0") (argument_list "(param_1,param_2,&local_58)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (pointer_expression "&local_58" (& "&") (identifier "local_58")) () ")")))) (; ";")) (expression_statement "pvVar12 = local_50;" (assignment_expression "pvVar12 = local_50" (identifier "pvVar12") (= "=") (identifier "local_50")) (; ";")) (if_statement "if (iVar7 == 0) {\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }\n        return 0;\n      }" ({ "{") (if_statement "if (local_58 != (void *)0x0) {\n          free(local_58);\n          return 0;\n        }" (if "if") (parenthesized_expression "(local_58 != (void *)0x0)" (( "(") (binary_expression "local_58 != (void *)0x0" (identifier "local_58") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          free(local_58);\n          return 0;\n        }" ({ "{") (expression_statement "free(local_58);" (call_expression "free(local_58)" (identifier "free") (argument_list "(local_58)" (( "(") (identifier "local_58") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }" (if "if") (parenthesized_expression "((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0)" (( "(") (binary_expression "(*(ulong *)(param_1 + 0xe) & 0x100000001) != 0" (parenthesized_expression "(*(ulong *)(param_1 + 0xe) & 0x100000001)" (( "(") (binary_expression "*(ulong *)(param_1 + 0xe) & 0x100000001" (pointer_expression "*(ulong *)(param_1 + 0xe)" (* "*") (cast_expression "(ulong *)(param_1 + 0xe)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe)" (( "(") (binary_expression "param_1 + 0xe" (identifier "param_1") (+ "+") (number_literal "0xe")) () ")")))) (& "&") (number_literal "0x100000001")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }\n        if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }\n      }" ({ "{") (if_statement "if (1 < param_1[0x11] + 1) {\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }" (if "if") (parenthesized_expression "(1 < param_1[0x11] + 1)" (( "(") (binary_expression "1 < param_1[0x11] + 1" (number_literal "1") (< "<") (binary_expression "param_1[0x11] + 1" (subscript_expression "param_1[0x11]" (identifier "param_1") ([ "[") (number_literal "0x11") (] "]")) (+ "+") (number_literal "1"))) () ")")) (compound_statement "{\n          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);\n        }" ({ "{") (expression_statement "local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);" (assignment_expression "local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11])" (identifier "local_50") (= "=") (cast_expression "(void *)((long)local_58 + (long)(int)param_1[0x11])" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)local_58 + (long)(int)param_1[0x11])" (( "(") (binary_expression "(long)local_58 + (long)(int)param_1[0x11]" (cast_expression "(long)local_58" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_58")) (+ "+") (cast_expression "(long)(int)param_1[0x11]" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)param_1[0x11]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[0x11]" (identifier "param_1") ([ "[") (number_literal "0x11") (] "]"))))) () ")")))) (; ";")) (} "}"))) (if_statement "if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3);\n        }" (if "if") (parenthesized_expression "((local_58 != local_50) && ((int)local_50 != (int)local_58))" (( "(") (binary_expression "(local_58 != local_50) && ((int)local_50 != (int)local_58)" (parenthesized_expression "(local_58 != local_50)" (( "(") (binary_expression "local_58 != local_50" (identifier "local_58") (!= "!=") (identifier "local_50")) () ")")) (&& "&&") (parenthesized_expression "((int)local_50 != (int)local_58)" (( "(") (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_50")) (!= "!=") (cast_expression "(int)local_58" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_58"))) () ")"))) () ")")) (compound_statement "{\n          FUN_00320bf0(param_3);\n        }" ({ "{") (expression_statement "FUN_00320bf0(param_3);" (call_expression "FUN_00320bf0(param_3)" (identifier "FUN_00320bf0") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")"))) (; ";")) (} "}"))) (if_statement "if ((param_1[0xf] & 1) == 0) {\n          param_1[0xe] = param_1[0xe] - 1;\n        }\n        else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }" (if "if") (parenthesized_expression "((param_1[0xf] & 1) == 0)" (( "(") (binary_expression "(param_1[0xf] & 1) == 0" (parenthesized_expression "(param_1[0xf] & 1)" (( "(") (binary_expression "param_1[0xf] & 1" (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]")) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          param_1[0xe] = param_1[0xe] - 1;\n        }" ({ "{") (expression_statement "param_1[0xe] = param_1[0xe] - 1;" (assignment_expression "param_1[0xe] = param_1[0xe] - 1" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (= "=") (binary_expression "param_1[0xe] - 1" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (- "-") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }" (else "else") (compound_statement "{\n          FUN_00320c40(param_3,&DAT_003fb32e);\n          param_1[0xf] = param_1[0xf] - 1;\n        }" ({ "{") (expression_statement "FUN_00320c40(param_3,&DAT_003fb32e);" (call_expression "FUN_00320c40(param_3,&DAT_003fb32e)" (identifier "FUN_00320c40") (argument_list "(param_3,&DAT_003fb32e)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&DAT_003fb32e" (& "&") (identifier "DAT_003fb32e")) () ")"))) (; ";")) (expression_statement "param_1[0xf] = param_1[0xf] - 1;" (assignment_expression "param_1[0xf] = param_1[0xf] - 1" (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]")) (= "=") (binary_expression "param_1[0xf] - 1" (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]")) (- "-") (number_literal "1"))) (; ";")) (} "}")))) (} "}"))) (expression_statement "uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;" (assignment_expression "uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff" (identifier "uVar10") (= "=") (binary_expression "(long)pvVar12 - (long)local_58 & 0xffffffff" (binary_expression "(long)pvVar12 - (long)local_58" (cast_expression "(long)pvVar12" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar12")) (- "-") (cast_expression "(long)local_58" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_58"))) (& "&") (number_literal "0xffffffff"))) (; ";")) (if_statement "if (pvVar12 == local_58) {\n        uVar10 = 0;\n      }" (if "if") (parenthesized_expression "(pvVar12 == local_58)" (( "(") (binary_expression "pvVar12 == local_58" (identifier "pvVar12") (== "==") (identifier "local_58")) () ")")) (compound_statement "{\n        uVar10 = 0;\n      }" ({ "{") (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" (identifier "uVar10") (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "local_50 = pvVar12;" (assignment_expression "local_50 = pvVar12" (identifier "local_50") (= "=") (identifier "pvVar12")) (; ";")) (expression_statement "FUN_003206f0(param_1,local_58,uVar10);" (call_expression "FUN_003206f0(param_1,local_58,uVar10)" (identifier "FUN_003206f0") (argument_list "(param_1,local_58,uVar10)" (( "(") (identifier "param_1") (, ",") (identifier "local_58") (, ",") (identifier "uVar10") () ")"))) (; ";")) (expression_statement "uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;" (assignment_expression "uVar10 = (long)local_50 - (long)local_58 & 0xffffffff" (identifier "uVar10") (= "=") (binary_expression "(long)local_50 - (long)local_58 & 0xffffffff" (binary_expression "(long)local_50 - (long)local_58" (cast_expression "(long)local_50" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_50")) (- "-") (cast_expression "(long)local_58" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_58"))) (& "&") (number_literal "0xffffffff"))) (; ";")) (if_statement "if (local_58 == local_50) {\n        uVar10 = 0;\n      }" (if "if") (parenthesized_expression "(local_58 == local_50)" (( "(") (binary_expression "local_58 == local_50" (identifier "local_58") (== "==") (identifier "local_50")) () ")")) (compound_statement "{\n        uVar10 = 0;\n      }" ({ "{") (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" (identifier "uVar10") (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "FUN_00320ad0(param_1 + 6,local_58,uVar10);" (call_expression "FUN_00320ad0(param_1 + 6,local_58,uVar10)" (identifier "FUN_00320ad0") (argument_list "(param_1 + 6,local_58,uVar10)" (( "(") (binary_expression "param_1 + 6" (identifier "param_1") (+ "+") (number_literal "6")) (, ",") (identifier "local_58") (, ",") (identifier "uVar10") () ")"))) (; ";")) (expression_statement "pcVar11 = ".";" (assignment_expression "pcVar11 = "."" (identifier "pcVar11") (= "=") (string_literal ""."" (" """) (string_content ".") (" """))) (; ";")) (if_statement "if ((*param_1 & 4) == 0) {\n        pcVar11 = "::";\n      }" (if "if") (parenthesized_expression "((*param_1 & 4) == 0)" (( "(") (binary_expression "(*param_1 & 4) == 0" (parenthesized_expression "(*param_1 & 4)" (( "(") (binary_expression "*param_1 & 4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        pcVar11 = "::";\n      }" ({ "{") (expression_statement "pcVar11 = "::";" (assignment_expression "pcVar11 = "::"" (identifier "pcVar11") (= "=") (string_literal ""::"" (" """) (string_content "::") (" """))) (; ";")) (} "}"))) (expression_statement "FUN_00320c40(param_3,pcVar11);" (call_expression "FUN_00320c40(param_3,pcVar11)" (identifier "FUN_00320c40") (argument_list "(param_3,pcVar11)" (( "(") (identifier "param_3") (, ",") (identifier "pcVar11") () ")"))) (; ";")) (if_statement "if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n      }" (if "if") (parenthesized_expression "((local_58 != local_50) && ((int)local_50 != (int)local_58))" (( "(") (binary_expression "(local_58 != local_50) && ((int)local_50 != (int)local_58)" (parenthesized_expression "(local_58 != local_50)" (( "(") (binary_expression "local_58 != local_50" (identifier "local_58") (!= "!=") (identifier "local_50")) () ")")) (&& "&&") (parenthesized_expression "((int)local_50 != (int)local_58)" (( "(") (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_50")) (!= "!=") (cast_expression "(int)local_58" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_58"))) () ")"))) () ")")) (compound_statement "{\n        FUN_00320bf0(param_3,local_58);\n      }" ({ "{") (expression_statement "FUN_00320bf0(param_3,local_58);" (call_expression "FUN_00320bf0(param_3,local_58)" (identifier "FUN_00320bf0") (argument_list "(param_3,local_58)" (( "(") (identifier "param_3") (, ",") (identifier "local_58") () ")"))) (; ";")) (} "}"))) (if_statement "if (local_58 != (void *)0x0) {\n        free(local_58);\n      }" (if "if") (parenthesized_expression "(local_58 != (void *)0x0)" (( "(") (binary_expression "local_58 != (void *)0x0" (identifier "local_58") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        free(local_58);\n      }" ({ "{") (expression_statement "free(local_58);" (call_expression "free(local_58)" (identifier "free") (argument_list "(local_58)" (( "(") (identifier "local_58") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);" (call_expression "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8)" (identifier "FUN_00321100") (argument_list "(param_1,pcVar8,*param_2 - (long)pcVar8)" (( "(") (identifier "param_1") (, ",") (identifier "pcVar8") (, ",") (binary_expression "*param_2 - (long)pcVar8" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (- "-") (cast_expression "(long)pcVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar8"))) () ")"))) (; ";")) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" (identifier "uVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }" (if "if") (parenthesized_expression "(((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F'))" (( "(") (binary_expression "((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')" (parenthesized_expression "((uVar6 & 0x2300) == 0)" (( "(") (binary_expression "(uVar6 & 0x2300) == 0" (parenthesized_expression "(uVar6 & 0x2300)" (( "(") (binary_expression "uVar6 & 0x2300" (identifier "uVar6") (& "&") (number_literal "0x2300")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')" (( "(") (comma_expression "pcVar8 = (char *)0x0, *(char *)*param_2 == 'F'" (assignment_expression "pcVar8 = (char *)0x0" (identifier "pcVar8") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (, ",") (binary_expression "*(char *)*param_2 == 'F'" (pointer_expression "*(char *)*param_2" (* "*") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (== "==") (char_literal "'F'" (' "'") (character "F") (' "'")))) () ")"))) () ")")) (compound_statement "{\n        iVar7 = 1;\n        goto LAB_00325b2b;\n      }" ({ "{") (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" (identifier "iVar7") (= "=") (number_literal "1")) (; ";")) (goto_statement "goto LAB_00325b2b;" (goto "goto") (statement_identifier "LAB_00325b2b") (; ";")) (} "}"))) (goto_statement "goto joined_r0x00325745;" (goto "goto") (statement_identifier "joined_r0x00325745") (; ";"))) (case_statement "default:\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      uVar4 = true;\n      uVar15 = iVar7 != 0 & uVar5;\n      break;" (default "default") (: ":") (if_statement "if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "((*param_1 & 0x300) == 0)" (( "(") (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" (( "(") (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0x300")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" (identifier "iVar7") (= "=") (call_expression "FUN_00324c60(param_1,param_2,param_3)" (identifier "FUN_00324c60") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" (identifier "uVar4") (= "=") (true "true")) (; ";")) (expression_statement "uVar15 = iVar7 != 0 & uVar5;" (assignment_expression "uVar15 = iVar7 != 0 & uVar5" (identifier "uVar15") (= "=") (binary_expression "iVar7 != 0 & uVar5" (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) (& "&") (identifier "uVar5"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 'B':\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }\n      uVar15 = iVar7 != 0;\nLAB_003259a2:\n      pcVar8 = (char *)0x0;\n      uVar5 = true;\n      break;" (case "case") (char_literal "'B'" (' "'") (character "B") (' "'")) (: ":") (expression_statement "iVar7 = FUN_00322150(param_1,param_2,&local_58);" (assignment_expression "iVar7 = FUN_00322150(param_1,param_2,&local_58)" (identifier "iVar7") (= "=") (call_expression "FUN_00322150(param_1,param_2,&local_58)" (identifier "FUN_00322150") (argument_list "(param_1,param_2,&local_58)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (pointer_expression "&local_58" (& "&") (identifier "local_58")) () ")")))) (; ";")) (if_statement "if (iVar7 != 0) {\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }" (if "if") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        pcVar8 = "::";\n        if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }\n        FUN_00320c70(&local_58,pcVar8);\n        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }\n        if (local_58 != (void *)0x0) {\n          free(local_58);\n        }\n      }" ({ "{") (expression_statement "pcVar8 = "::";" (assignment_expression "pcVar8 = "::"" (identifier "pcVar8") (= "=") (string_literal ""::"" (" """) (string_content "::") (" """))) (; ";")) (if_statement "if ((*param_1 & 4) != 0) {\n          pcVar8 = ".";\n        }" (if "if") (parenthesized_expression "((*param_1 & 4) != 0)" (( "(") (binary_expression "(*param_1 & 4) != 0" (parenthesized_expression "(*param_1 & 4)" (( "(") (binary_expression "*param_1 & 4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          pcVar8 = ".";\n        }" ({ "{") (expression_statement "pcVar8 = ".";" (assignment_expression "pcVar8 = "."" (identifier "pcVar8") (= "=") (string_literal ""."" (" """) (string_content ".") (" """))) (; ";")) (} "}"))) (expression_statement "FUN_00320c70(&local_58,pcVar8);" (call_expression "FUN_00320c70(&local_58,pcVar8)" (identifier "FUN_00320c70") (argument_list "(&local_58,pcVar8)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "pcVar8") () ")"))) (; ";")) (if_statement "if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {\n          FUN_00320bf0(param_3,local_58);\n        }" (if "if") (parenthesized_expression "((local_58 != local_50) && ((int)local_50 != (int)local_58))" (( "(") (binary_expression "(local_58 != local_50) && ((int)local_50 != (int)local_58)" (parenthesized_expression "(local_58 != local_50)" (( "(") (binary_expression "local_58 != local_50" (identifier "local_58") (!= "!=") (identifier "local_50")) () ")")) (&& "&&") (parenthesized_expression "((int)local_50 != (int)local_58)" (( "(") (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_50")) (!= "!=") (cast_expression "(int)local_58" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_58"))) () ")"))) () ")")) (compound_statement "{\n          FUN_00320bf0(param_3,local_58);\n        }" ({ "{") (expression_statement "FUN_00320bf0(param_3,local_58);" (call_expression "FUN_00320bf0(param_3,local_58)" (identifier "FUN_00320bf0") (argument_list "(param_3,local_58)" (( "(") (identifier "param_3") (, ",") (identifier "local_58") () ")"))) (; ";")) (} "}"))) (if_statement "if (local_58 != (void *)0x0) {\n          free(local_58);\n        }" (if "if") (parenthesized_expression "(local_58 != (void *)0x0)" (( "(") (binary_expression "local_58 != (void *)0x0" (identifier "local_58") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          free(local_58);\n        }" ({ "{") (expression_statement "free(local_58);" (call_expression "free(local_58)" (identifier "free") (argument_list "(local_58)" (( "(") (identifier "local_58") () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar15 = iVar7 != 0;" (assignment_expression "uVar15 = iVar7 != 0" (identifier "uVar15") (= "=") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0"))) (; ";")) (labeled_statement "LAB_003259a2:\n      pcVar8 = (char *)0x0;" (statement_identifier "LAB_003259a2") (: ":") (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" (identifier "pcVar8") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";"))) (expression_statement "uVar5 = true;" (assignment_expression "uVar5 = true" (identifier "uVar5") (= "=") (true "true")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 'C':" (case "case") (char_literal "'C'" (' "'") (character "C") (' "'")) (: ":")) (case_statement "case 'V':" (case "case") (char_literal "'V'" (' "'") (character "V") (' "'")) (: ":")) (case_statement "case 'u':\n      if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }\n      param_1[0x12] = param_1[0x12] | uVar6;\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      goto LAB_0032581c;" (case "case") (char_literal "'u'" (' "'") (character "u") (' "'")) (: ":") (if_statement "if (cVar1 == 'V') {\n        uVar6 = 2;\n      }\n      else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }" (if "if") (parenthesized_expression "(cVar1 == 'V')" (( "(") (binary_expression "cVar1 == 'V'" (identifier "cVar1") (== "==") (char_literal "'V'" (' "'") (character "V") (' "'"))) () ")")) (compound_statement "{\n        uVar6 = 2;\n      }" ({ "{") (expression_statement "uVar6 = 2;" (assignment_expression "uVar6 = 2" (identifier "uVar6") (= "=") (number_literal "2")) (; ";")) (} "}")) (else_clause "else if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }" (else "else") (if_statement "if (cVar1 == 'u') {\n        uVar6 = 4;\n      }\n      else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }" (if "if") (parenthesized_expression "(cVar1 == 'u')" (( "(") (binary_expression "cVar1 == 'u'" (identifier "cVar1") (== "==") (char_literal "'u'" (' "'") (character "u") (' "'"))) () ")")) (compound_statement "{\n        uVar6 = 4;\n      }" ({ "{") (expression_statement "uVar6 = 4;" (assignment_expression "uVar6 = 4" (identifier "uVar6") (= "=") (number_literal "4")) (; ";")) (} "}")) (else_clause "else {\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }" (else "else") (compound_statement "{\n        if (cVar1 != 'C') {\n                    \n          abort();\n        }\n        uVar6 = 1;\n      }" ({ "{") (if_statement "if (cVar1 != 'C') {\n                    \n          abort();\n        }" (if "if") (parenthesized_expression "(cVar1 != 'C')" (( "(") (binary_expression "cVar1 != 'C'" (identifier "cVar1") (!= "!=") (char_literal "'C'" (' "'") (character "C") (' "'"))) () ")")) (compound_statement "{\n                    \n          abort();\n        }" ({ "{") (expression_statement "abort();" (call_expression "abort()" (identifier "abort") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar6 = 1;" (assignment_expression "uVar6 = 1" (identifier "uVar6") (= "=") (number_literal "1")) (; ";")) (} "}")))))) (expression_statement "param_1[0x12] = param_1[0x12] | uVar6;" (assignment_expression "param_1[0x12] = param_1[0x12] | uVar6" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (= "=") (binary_expression "param_1[0x12] | uVar6" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (| "|") (identifier "uVar6"))) (; ";")) (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" (if "if") (parenthesized_expression "(pcVar8 == (char *)0x0)" (( "(") (binary_expression "pcVar8 == (char *)0x0" (identifier "pcVar8") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" ({ "{") (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" (identifier "pcVar8") (= "=") (identifier "pcVar11")) (; ";")) (} "}"))) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)((long)pcVar11 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((long)pcVar11 + 1)" (( "(") (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar11")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (goto_statement "goto LAB_0032581c;" (goto "goto") (statement_identifier "LAB_0032581c") (; ";"))) (case_statement "case 'F':\n      *param_2 = (long)((long)pcVar11 + 1);\n      if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }\n      iVar7 = FUN_00324c60(param_1,param_2,param_3);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      uVar6 = *param_1;\n      if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }\n      goto LAB_00325b2b;" (case "case") (char_literal "'F'" (' "'") (character "F") (' "'")) (: ":") (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)((long)pcVar11 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((long)pcVar11 + 1)" (( "(") (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar11")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (if_statement "if ((*param_1 & 0x3c00) != 0) {\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }" (if "if") (parenthesized_expression "((*param_1 & 0x3c00) != 0)" (( "(") (binary_expression "(*param_1 & 0x3c00) != 0" (parenthesized_expression "(*param_1 & 0x3c00)" (( "(") (binary_expression "*param_1 & 0x3c00" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0x3c00")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_00320990(param_1 + 2,param_1 + 0xc);\n      }" ({ "{") (expression_statement "FUN_00320990(param_1 + 2,param_1 + 0xc);" (call_expression "FUN_00320990(param_1 + 2,param_1 + 0xc)" (identifier "FUN_00320990") (argument_list "(param_1 + 2,param_1 + 0xc)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) (, ",") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" (identifier "iVar7") (= "=") (call_expression "FUN_00324c60(param_1,param_2,param_3)" (identifier "FUN_00324c60") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar7 == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" (identifier "uVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if ((uVar6 & 0x2100) == 0) {\n        uVar4 = true;\n      }\n      else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }" (if "if") (parenthesized_expression "((uVar6 & 0x2100) == 0)" (( "(") (binary_expression "(uVar6 & 0x2100) == 0" (parenthesized_expression "(uVar6 & 0x2100)" (( "(") (binary_expression "uVar6 & 0x2100" (identifier "uVar6") (& "&") (number_literal "0x2100")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar4 = true;\n      }" ({ "{") (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" (identifier "uVar4") (= "=") (true "true")) (; ";")) (} "}")) (else_clause "else {\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }" (else "else") (compound_statement "{\n        uVar4 = true;\n        if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }\n      }" ({ "{") (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" (identifier "uVar4") (= "=") (true "true")) (; ";")) (if_statement "if (*(char *)*param_2 == '_') {\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }" (if "if") (parenthesized_expression "(*(char *)*param_2 == '_')" (( "(") (binary_expression "*(char *)*param_2 == '_'" (pointer_expression "*(char *)*param_2" (* "*") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (== "==") (char_literal "'_'" (' "'") (character "_") (' "'"))) () ")")) (compound_statement "{\n          *param_2 = (long)((char *)*param_2 + 1);\n          iVar7 = FUN_00322150(param_1,param_2,&local_78);\n          if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }\n          break;\n        }" ({ "{") (expression_statement "*param_2 = (long)((char *)*param_2 + 1);" (assignment_expression "*param_2 = (long)((char *)*param_2 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)((char *)*param_2 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((char *)*param_2 + 1)" (( "(") (binary_expression "(char *)*param_2 + 1" (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "iVar7 = FUN_00322150(param_1,param_2,&local_78);" (assignment_expression "iVar7 = FUN_00322150(param_1,param_2,&local_78)" (identifier "iVar7") (= "=") (call_expression "FUN_00322150(param_1,param_2,&local_78)" (identifier "FUN_00322150") (argument_list "(param_1,param_2,&local_78)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (pointer_expression "&local_78" (& "&") (identifier "local_78")) () ")")))) (; ";")) (if_statement "if (local_78 == (char *)0x0) {\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }\n          else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }" (if "if") (parenthesized_expression "(local_78 == (char *)0x0)" (( "(") (binary_expression "local_78 == (char *)0x0" (identifier "local_78") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n            uVar15 = uVar5 & iVar7 != 0;\n            pcVar8 = (char *)0x0;\n            local_78 = (char *)0x0;\n          }" ({ "{") (expression_statement "uVar15 = uVar5 & iVar7 != 0;" (assignment_expression "uVar15 = uVar5 & iVar7 != 0" (identifier "uVar15") (= "=") (binary_expression "uVar5 & iVar7 != 0" (identifier "uVar5") (& "&") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")))) (; ";")) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" (identifier "pcVar8") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" (identifier "local_78") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")) (else_clause "else {\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }" (else "else") (compound_statement "{\n            free(local_78);\n            local_70 = (char *)0x0;\n            local_68 = 0;\n            local_78 = (char *)0x0;\n            pcVar8 = (char *)0x0;\n            uVar15 = uVar5 & iVar7 != 0;\n          }" ({ "{") (expression_statement "free(local_78);" (call_expression "free(local_78)" (identifier "free") (argument_list "(local_78)" (( "(") (identifier "local_78") () ")"))) (; ";")) (expression_statement "local_70 = (char *)0x0;" (assignment_expression "local_70 = (char *)0x0" (identifier "local_70") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" (identifier "local_68") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" (identifier "local_78") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" (identifier "pcVar8") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "uVar15 = uVar5 & iVar7 != 0;" (assignment_expression "uVar15 = uVar5 & iVar7 != 0" (identifier "uVar15") (= "=") (binary_expression "uVar5 & iVar7 != 0" (identifier "uVar5") (& "&") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")))) (; ";")) (} "}")))) (break_statement "break;" (break "break") (; ";")) (} "}"))) (} "}")))) (goto_statement "goto LAB_00325b2b;" (goto "goto") (statement_identifier "LAB_00325b2b") (; ";"))) (case_statement "case 'H':\n      if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }\n      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);\n      bVar9 = true;\n      if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }\n      if (*(char *)*param_2 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)((char *)*param_2 + 1);\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = bVar9;\n      break;" (case "case") (char_literal "'H'" (' "'") (character "H") (' "'")) (: ":") (if_statement "if ((*param_1 & 0x300) == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "((*param_1 & 0x300) == 0)" (( "(") (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" (( "(") (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0x300")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);" (assignment_expression "iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0)" (identifier "iVar7") (= "=") (call_expression "FUN_00323ef0(param_1,param_2,param_3,0,0,0)" (identifier "FUN_00323ef0") (argument_list "(param_1,param_2,param_3,0,0,0)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "bVar9 = true;" (assignment_expression "bVar9 = true" (identifier "bVar9") (= "=") (true "true")) (; ";")) (if_statement "if ((param_1[0xe] & 1) != 0) {\n        bVar9 = (bool)uVar3;\n      }" (if "if") (parenthesized_expression "((param_1[0xe] & 1) != 0)" (( "(") (binary_expression "(param_1[0xe] & 1) != 0" (parenthesized_expression "(param_1[0xe] & 1)" (( "(") (binary_expression "param_1[0xe] & 1" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        bVar9 = (bool)uVar3;\n      }" ({ "{") (expression_statement "bVar9 = (bool)uVar3;" (assignment_expression "bVar9 = (bool)uVar3" (identifier "bVar9") (= "=") (cast_expression "(bool)uVar3" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar3"))) (; ";")) (} "}"))) (if_statement "if (*(char *)*param_2 == '\0') {\n        return 0;\n      }" (if "if") (parenthesized_expression "(*(char *)*param_2 == '\0')" (( "(") (binary_expression "*(char *)*param_2 == '\0'" (pointer_expression "*(char *)*param_2" (* "*") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "*param_2 = (long)((char *)*param_2 + 1);" (assignment_expression "*param_2 = (long)((char *)*param_2 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)((char *)*param_2 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((char *)*param_2 + 1)" (( "(") (binary_expression "(char *)*param_2 + 1" (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "uVar15 = iVar7 != 0 & uVar5;" (assignment_expression "uVar15 = iVar7 != 0 & uVar5" (identifier "uVar15") (= "=") (binary_expression "iVar7 != 0 & uVar5" (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) (& "&") (identifier "uVar5"))) (; ";")) (expression_statement "uVar3 = bVar9;" (assignment_expression "uVar3 = bVar9" (identifier "uVar3") (= "=") (identifier "bVar9")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 'K':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      uVar15 = iVar7 != 0;\n      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;\n      uVar15 = uVar15 & uVar5;\n      pcVar8 = (char *)0x0;\n      break;" (case "case") (char_literal "'K'" (' "'") (character "K") (' "'")) (: ":") (expression_statement "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);" (assignment_expression "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0)" (identifier "iVar7") (= "=") (call_expression "FUN_003245f0(param_1,param_2,param_3,1,0)" (identifier "FUN_003245f0") (argument_list "(param_1,param_2,param_3,1,0)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (number_literal "1") (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "uVar15 = iVar7 != 0;" (assignment_expression "uVar15 = iVar7 != 0" (identifier "uVar15") (= "=") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0"))) (; ";")) (if_statement "if ((*param_1 & 0x300) != 0) goto LAB_003259a2;" (if "if") (parenthesized_expression "((*param_1 & 0x300) != 0)" (( "(") (binary_expression "(*param_1 & 0x300) != 0" (parenthesized_expression "(*param_1 & 0x300)" (( "(") (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0x300")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_003259a2;" (goto "goto") (statement_identifier "LAB_003259a2") (; ";"))) (expression_statement "uVar15 = uVar15 & uVar5;" (assignment_expression "uVar15 = uVar15 & uVar5" (identifier "uVar15") (= "=") (binary_expression "uVar15 & uVar5" (identifier "uVar15") (& "&") (identifier "uVar5"))) (; ";")) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" (identifier "pcVar8") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 'L':\n      if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }\n      do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');\n      if (cVar1 == '\0') {\n        return 0;\n      }\n      *param_2 = (long)(pcVar14 + 2);\n      goto LAB_0032581c;" (case "case") (char_literal "'L'" (' "'") (character "L") (' "'")) (: ":") (if_statement "if ((*param_1 & 0x1000) == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "((*param_1 & 0x1000) == 0)" (( "(") (binary_expression "(*param_1 & 0x1000) == 0" (parenthesized_expression "(*param_1 & 0x1000)" (( "(") (binary_expression "*param_1 & 0x1000" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0x1000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (do_statement "do {\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      } while (cVar1 != '_');" (do "do") (compound_statement "{\n        pcVar14 = pcVar11;\n        *param_2 = (long)(pcVar14 + 1);\n        cVar1 = pcVar14[1];\n        if (cVar1 == '\0') break;\n        pcVar11 = pcVar14 + 1;\n      }" ({ "{") (expression_statement "pcVar14 = pcVar11;" (assignment_expression "pcVar14 = pcVar11" (identifier "pcVar14") (= "=") (identifier "pcVar11")) (; ";")) (expression_statement "*param_2 = (long)(pcVar14 + 1);" (assignment_expression "*param_2 = (long)(pcVar14 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)(pcVar14 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(pcVar14 + 1)" (( "(") (binary_expression "pcVar14 + 1" (identifier "pcVar14") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "cVar1 = pcVar14[1];" (assignment_expression "cVar1 = pcVar14[1]" (identifier "cVar1") (= "=") (subscript_expression "pcVar14[1]" (identifier "pcVar14") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (cVar1 == '\0') break;" (if "if") (parenthesized_expression "(cVar1 == '\0')" (( "(") (binary_expression "cVar1 == '\0'" (identifier "cVar1") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "pcVar11 = pcVar14 + 1;" (assignment_expression "pcVar11 = pcVar14 + 1" (identifier "pcVar11") (= "=") (binary_expression "pcVar14 + 1" (identifier "pcVar14") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(cVar1 != '_')" (( "(") (binary_expression "cVar1 != '_'" (identifier "cVar1") (!= "!=") (char_literal "'_'" (' "'") (character "_") (' "'"))) () ")")) (; ";")) (if_statement "if (cVar1 == '\0') {\n        return 0;\n      }" (if "if") (parenthesized_expression "(cVar1 == '\0')" (( "(") (binary_expression "cVar1 == '\0'" (identifier "cVar1") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "*param_2 = (long)(pcVar14 + 2);" (assignment_expression "*param_2 = (long)(pcVar14 + 2)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)(pcVar14 + 2)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(pcVar14 + 2)" (( "(") (binary_expression "pcVar14 + 2" (identifier "pcVar14") (+ "+") (number_literal "2")) () ")")))) (; ";")) (goto_statement "goto LAB_0032581c;" (goto "goto") (statement_identifier "LAB_0032581c") (; ";"))) (case_statement "case 'Q':\n      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);\n      if (iVar7 == 0) {\n        return 0;\n      }\n      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);\n      uVar6 = *param_1;\n      if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }\nLAB_00325b2b:\n      pcVar8 = (char *)0x0;\n      if ((bool)uVar5) goto joined_r0x00325745;\n      goto LAB_003255c0;" (case "case") (char_literal "'Q'" (' "'") (character "Q") (' "'")) (: ":") (expression_statement "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);" (assignment_expression "iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0)" (identifier "iVar7") (= "=") (call_expression "FUN_003245f0(param_1,param_2,param_3,1,0)" (identifier "FUN_003245f0") (argument_list "(param_1,param_2,param_3,1,0)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (number_literal "1") (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if (iVar7 == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);" (call_expression "FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11)" (identifier "FUN_00321100") (argument_list "(param_1,pcVar11,*param_2 - (long)pcVar11)" (( "(") (identifier "param_1") (, ",") (identifier "pcVar11") (, ",") (binary_expression "*param_2 - (long)pcVar11" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (- "-") (cast_expression "(long)pcVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar11"))) () ")"))) (; ";")) (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" (identifier "uVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if ((uVar6 & 0x300) != 0) {\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }" (if "if") (parenthesized_expression "((uVar6 & 0x300) != 0)" (( "(") (binary_expression "(uVar6 & 0x300) != 0" (parenthesized_expression "(uVar6 & 0x300)" (( "(") (binary_expression "uVar6 & 0x300" (identifier "uVar6") (& "&") (number_literal "0x300")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        pcVar8 = (char *)0x0;\n        goto joined_r0x00325745;\n      }" ({ "{") (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" (identifier "pcVar8") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (goto_statement "goto joined_r0x00325745;" (goto "goto") (statement_identifier "joined_r0x00325745") (; ";")) (} "}"))) (labeled_statement "LAB_00325b2b:\n      pcVar8 = (char *)0x0;" (statement_identifier "LAB_00325b2b") (: ":") (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" (identifier "pcVar8") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";"))) (if_statement "if ((bool)uVar5) goto joined_r0x00325745;" (if "if") (parenthesized_expression "((bool)uVar5)" (( "(") (cast_expression "(bool)uVar5" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar5")) () ")")) (goto_statement "goto joined_r0x00325745;" (goto "goto") (statement_identifier "joined_r0x00325745") (; ";"))) (goto_statement "goto LAB_003255c0;" (goto "goto") (statement_identifier "LAB_003255c0") (; ";"))) (case_statement "case 'S':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      param_1[0x10] = 1;\nLAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;\n      goto LAB_00325740;" (case "case") (char_literal "'S'" (' "'") (character "S") (' "'")) (: ":") (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" (if "if") (parenthesized_expression "(pcVar8 == (char *)0x0)" (( "(") (binary_expression "pcVar8 == (char *)0x0" (identifier "pcVar8") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" ({ "{") (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" (identifier "pcVar8") (= "=") (identifier "pcVar11")) (; ";")) (} "}"))) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)((long)pcVar11 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((long)pcVar11 + 1)" (( "(") (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar11")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "param_1[0x10] = 1;" (assignment_expression "param_1[0x10] = 1" (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]")) (= "=") (number_literal "1")) (; ";")) (labeled_statement "LAB_0032581c:\n      if (!(bool)uVar5) goto code_r0x00325824;" (statement_identifier "LAB_0032581c") (: ":") (if_statement "if (!(bool)uVar5) goto code_r0x00325824;" (if "if") (parenthesized_expression "(!(bool)uVar5)" (( "(") (unary_expression "!(bool)uVar5" (! "!") (cast_expression "(bool)uVar5" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar5"))) () ")")) (goto_statement "goto code_r0x00325824;" (goto "goto") (statement_identifier "code_r0x00325824") (; ";")))) (goto_statement "goto LAB_00325740;" (goto "goto") (statement_identifier "LAB_00325740") (; ";"))) (case_statement "case '_':\n      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }\n      *param_2 = (long)((long)pcVar11 + 1);\n      iVar7 = FUN_00322150(param_1,param_2,&local_58);\n      pvVar12 = local_50;\n      if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }\n      if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }\n      uVar15 = iVar7 != 0 & uVar5;\n      uVar3 = true;\n      break;" (case "case") (char_literal "'_'" (' "'") (character "_") (' "'")) (: ":") (if_statement "if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }" (if "if") (parenthesized_expression "(((*param_1 & 0x300) == 0) || (!(bool)uVar3))" (( "(") (binary_expression "((*param_1 & 0x300) == 0) || (!(bool)uVar3)" (parenthesized_expression "((*param_1 & 0x300) == 0)" (( "(") (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" (( "(") (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0x300")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(!(bool)uVar3)" (( "(") (unary_expression "!(bool)uVar3" (! "!") (cast_expression "(bool)uVar3" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar3"))) () ")"))) () ")")) (compound_statement "{\n        if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }\n        *param_2 = (long)((long)pcVar11 + 1);\n        if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }\n        goto LAB_0032581c;\n      }" ({ "{") (if_statement "if ((*param_1 & 0x1000) == 0) {\n          return 0;\n        }" (if "if") (parenthesized_expression "((*param_1 & 0x1000) == 0)" (( "(") (binary_expression "(*param_1 & 0x1000) == 0" (parenthesized_expression "(*param_1 & 0x1000)" (( "(") (binary_expression "*param_1 & 0x1000" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0x1000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)((long)pcVar11 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((long)pcVar11 + 1)" (( "(") (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar11")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (if_statement "if ((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }" (if "if") (parenthesized_expression "((*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0))" (( "(") (binary_expression "(*(byte *)((long)pcVar11 + 1) != 0) &&\n           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)" (parenthesized_expression "(*(byte *)((long)pcVar11 + 1) != 0)" (( "(") (binary_expression "*(byte *)((long)pcVar11 + 1) != 0" (pointer_expression "*(byte *)((long)pcVar11 + 1)" (* "*") (cast_expression "(byte *)((long)pcVar11 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)pcVar11 + 1)" (( "(") (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar11")) (+ "+") (number_literal "1")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)" (( "(") (binary_expression "((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4)" (( "(") (binary_expression "(&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4" (subscript_expression "(&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2]" (parenthesized_expression "(&DAT_003fef00)" (( "(") (pointer_expression "&DAT_003fef00" (& "&") (identifier "DAT_003fef00")) () ")")) ([ "[") (binary_expression "(ulong)*(byte *)((long)pcVar11 + 1) * 2" (binary_expression "(ulong)*(byte *)((long)pcVar11 + 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(byte *)((long)pcVar11 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)pcVar11 + 1)" (( "(") (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar11")) (+ "+") (number_literal "1")) () ")")))) (* "*") (number_literal "2")) (] "]")) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n          pbVar13 = (byte *)((long)pcVar11 + 2);\n          do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);\n        }" ({ "{") (expression_statement "pbVar13 = (byte *)((long)pcVar11 + 2);" (assignment_expression "pbVar13 = (byte *)((long)pcVar11 + 2)" (identifier "pbVar13") (= "=") (cast_expression "(byte *)((long)pcVar11 + 2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)pcVar11 + 2)" (( "(") (binary_expression "(long)pcVar11 + 2" (cast_expression "(long)pcVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar11")) (+ "+") (number_literal "2")) () ")")))) (; ";")) (do_statement "do {\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);" (do "do") (compound_statement "{\n            *param_2 = (long)pbVar13;\n            bVar2 = *pbVar13;\n            if (bVar2 == 0) break;\n            pbVar13 = pbVar13 + 1;\n          }" ({ "{") (expression_statement "*param_2 = (long)pbVar13;" (assignment_expression "*param_2 = (long)pbVar13" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)pbVar13" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pbVar13"))) (; ";")) (expression_statement "bVar2 = *pbVar13;" (assignment_expression "bVar2 = *pbVar13" (identifier "bVar2") (= "=") (pointer_expression "*pbVar13" (* "*") (identifier "pbVar13"))) (; ";")) (if_statement "if (bVar2 == 0) break;" (if "if") (parenthesized_expression "(bVar2 == 0)" (( "(") (binary_expression "bVar2 == 0" (identifier "bVar2") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "pbVar13 = pbVar13 + 1;" (assignment_expression "pbVar13 = pbVar13 + 1" (identifier "pbVar13") (= "=") (binary_expression "pbVar13 + 1" (identifier "pbVar13") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0)" (( "(") (binary_expression "((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef00)[(ulong)bVar2 * 2] & 4)" (( "(") (binary_expression "(&DAT_003fef00)[(ulong)bVar2 * 2] & 4" (subscript_expression "(&DAT_003fef00)[(ulong)bVar2 * 2]" (parenthesized_expression "(&DAT_003fef00)" (( "(") (pointer_expression "&DAT_003fef00" (& "&") (identifier "DAT_003fef00")) () ")")) ([ "[") (binary_expression "(ulong)bVar2 * 2" (cast_expression "(ulong)bVar2" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar2")) (* "*") (number_literal "2")) (] "]")) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}"))) (goto_statement "goto LAB_0032581c;" (goto "goto") (statement_identifier "LAB_0032581c") (; ";")) (} "}"))) (expression_statement "*param_2 = (long)((long)pcVar11 + 1);" (assignment_expression "*param_2 = (long)((long)pcVar11 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)((long)pcVar11 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((long)pcVar11 + 1)" (( "(") (binary_expression "(long)pcVar11 + 1" (cast_expression "(long)pcVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar11")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "iVar7 = FUN_00322150(param_1,param_2,&local_58);" (assignment_expression "iVar7 = FUN_00322150(param_1,param_2,&local_58)" (identifier "iVar7") (= "=") (call_expression "FUN_00322150(param_1,param_2,&local_58)" (identifier "FUN_00322150") (argument_list "(param_1,param_2,&local_58)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (pointer_expression "&local_58" (& "&") (identifier "local_58")) () ")")))) (; ";")) (expression_statement "pvVar12 = local_50;" (assignment_expression "pvVar12 = local_50" (identifier "pvVar12") (= "=") (identifier "local_50")) (; ";")) (if_statement "if (((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)) {\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }" (if "if") (parenthesized_expression "(((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58))" (( "(") (binary_expression "((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&\n         ((int)local_50 != (int)local_58)" (parenthesized_expression "((local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50))" (( "(") (binary_expression "(local_58 != local_50) &&\n          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)" (parenthesized_expression "(local_58 != local_50)" (( "(") (binary_expression "local_58 != local_50" (identifier "local_58") (!= "!=") (identifier "local_50")) () ")")) (&& "&&") (parenthesized_expression "(FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)" (( "(") (comma_expression "FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50" (call_expression "FUN_00320c70(&local_58,&DAT_003f45bf)" (identifier "FUN_00320c70") (argument_list "(&local_58,&DAT_003f45bf)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (pointer_expression "&DAT_003f45bf" (& "&") (identifier "DAT_003f45bf")) () ")"))) (, ",") (comma_expression "pvVar12 = local_58, local_58 != local_50" (assignment_expression "pvVar12 = local_58" (identifier "pvVar12") (= "=") (identifier "local_58")) (, ",") (binary_expression "local_58 != local_50" (identifier "local_58") (!= "!=") (identifier "local_50")))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((int)local_50 != (int)local_58)" (( "(") (binary_expression "(int)local_50 != (int)local_58" (cast_expression "(int)local_50" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_50")) (!= "!=") (cast_expression "(int)local_58" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_58"))) () ")"))) () ")")) (compound_statement "{\n        FUN_00320bf0(param_3,local_58);\n        pvVar12 = local_58;\n      }" ({ "{") (expression_statement "FUN_00320bf0(param_3,local_58);" (call_expression "FUN_00320bf0(param_3,local_58)" (identifier "FUN_00320bf0") (argument_list "(param_3,local_58)" (( "(") (identifier "param_3") (, ",") (identifier "local_58") () ")"))) (; ";")) (expression_statement "pvVar12 = local_58;" (assignment_expression "pvVar12 = local_58" (identifier "pvVar12") (= "=") (identifier "local_58")) (; ";")) (} "}"))) (if_statement "if (pvVar12 != (void *)0x0) {\n        free(pvVar12);\n      }" (if "if") (parenthesized_expression "(pvVar12 != (void *)0x0)" (( "(") (binary_expression "pvVar12 != (void *)0x0" (identifier "pvVar12") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        free(pvVar12);\n      }" ({ "{") (expression_statement "free(pvVar12);" (call_expression "free(pvVar12)" (identifier "free") (argument_list "(pvVar12)" (( "(") (identifier "pvVar12") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar15 = iVar7 != 0 & uVar5;" (assignment_expression "uVar15 = iVar7 != 0 & uVar5" (identifier "uVar15") (= "=") (binary_expression "iVar7 != 0 & uVar5" (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) (& "&") (identifier "uVar5"))) (; ";")) (expression_statement "uVar3 = true;" (assignment_expression "uVar3 = true" (identifier "uVar3") (= "=") (true "true")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 't':\n      if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }\n      local_88 = 0;\n      local_90 = 0;\n      local_98 = (void *)0x0;\n      local_68 = 0;\n      local_70 = (char *)0x0;\n      local_78 = (char *)0x0;\n      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);\n      if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }\n      pcVar8 = "::";\n      if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }\n      FUN_00320c70(&local_78,pcVar8);\n      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }\n      if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }\n      uVar15 = iVar7 != 0;\n      uVar5 = true;\n      pcVar8 = local_78;\n      if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }" (case "case") (char_literal "'t'" (' "'") (character "t") (' "'")) (: ":") (if_statement "if (pcVar8 == (char *)0x0) {\n        pcVar8 = pcVar11;\n      }" (if "if") (parenthesized_expression "(pcVar8 == (char *)0x0)" (( "(") (binary_expression "pcVar8 == (char *)0x0" (identifier "pcVar8") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        pcVar8 = pcVar11;\n      }" ({ "{") (expression_statement "pcVar8 = pcVar11;" (assignment_expression "pcVar8 = pcVar11" (identifier "pcVar8") (= "=") (identifier "pcVar11")) (; ";")) (} "}"))) (expression_statement "local_88 = 0;" (assignment_expression "local_88 = 0" (identifier "local_88") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_90 = 0;" (assignment_expression "local_90 = 0" (identifier "local_90") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_98 = (void *)0x0;" (assignment_expression "local_98 = (void *)0x0" (identifier "local_98") (= "=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" (identifier "local_68") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_70 = (char *)0x0;" (assignment_expression "local_70 = (char *)0x0" (identifier "local_70") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" (identifier "local_78") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);" (assignment_expression "iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1)" (identifier "iVar7") (= "=") (call_expression "FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1)" (identifier "FUN_00323ef0") (argument_list "(param_1,param_2,&local_78,&local_98,1,1)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (pointer_expression "&local_78" (& "&") (identifier "local_78")) (, ",") (pointer_expression "&local_98" (& "&") (identifier "local_98")) (, ",") (number_literal "1") (, ",") (number_literal "1") () ")")))) (; ";")) (if_statement "if (iVar7 != 0) {\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }" (if "if") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);\n      }" ({ "{") (expression_statement "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);" (call_expression "FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8)" (identifier "FUN_00321100") (argument_list "(param_1,pcVar8,*param_2 - (long)pcVar8)" (( "(") (identifier "param_1") (, ",") (identifier "pcVar8") (, ",") (binary_expression "*param_2 - (long)pcVar8" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (- "-") (cast_expression "(long)pcVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar8"))) () ")"))) (; ";")) (} "}"))) (expression_statement "pcVar8 = "::";" (assignment_expression "pcVar8 = "::"" (identifier "pcVar8") (= "=") (string_literal ""::"" (" """) (string_content "::") (" """))) (; ";")) (if_statement "if ((*param_1 & 4) != 0) {\n        pcVar8 = ".";\n      }" (if "if") (parenthesized_expression "((*param_1 & 4) != 0)" (( "(") (binary_expression "(*param_1 & 4) != 0" (parenthesized_expression "(*param_1 & 4)" (( "(") (binary_expression "*param_1 & 4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        pcVar8 = ".";\n      }" ({ "{") (expression_statement "pcVar8 = ".";" (assignment_expression "pcVar8 = "."" (identifier "pcVar8") (= "=") (string_literal ""."" (" """) (string_content ".") (" """))) (; ";")) (} "}"))) (expression_statement "FUN_00320c70(&local_78,pcVar8);" (call_expression "FUN_00320c70(&local_78,pcVar8)" (identifier "FUN_00320c70") (argument_list "(&local_78,pcVar8)" (( "(") (pointer_expression "&local_78" (& "&") (identifier "local_78")) (, ",") (identifier "pcVar8") () ")"))) (; ";")) (if_statement "if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }\n      else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" (if "if") (parenthesized_expression "((local_78 == local_70) || ((int)local_70 == (int)local_78))" (( "(") (binary_expression "(local_78 == local_70) || ((int)local_70 == (int)local_78)" (parenthesized_expression "(local_78 == local_70)" (( "(") (binary_expression "local_78 == local_70" (identifier "local_78") (== "==") (identifier "local_70")) () ")")) (|| "||") (parenthesized_expression "((int)local_70 == (int)local_78)" (( "(") (binary_expression "(int)local_70 == (int)local_78" (cast_expression "(int)local_70" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_70")) (== "==") (cast_expression "(int)local_78" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_78"))) () ")"))) () ")")) (compound_statement "{\n        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;\nLAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xf] = param_1[0xf] - 1;\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" ({ "{") (if_statement "if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;" (if "if") (parenthesized_expression "((param_1[0xf] & 1) == 0)" (( "(") (binary_expression "(param_1[0xf] & 1) == 0" (parenthesized_expression "(param_1[0xf] & 1)" (( "(") (binary_expression "param_1[0xf] & 1" (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]")) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_003256a5;" (goto "goto") (statement_identifier "LAB_003256a5") (; ";"))) (labeled_statement "LAB_00325d78:\n        FUN_00320c40(&local_98,&DAT_003fb32e);" (statement_identifier "LAB_00325d78") (: ":") (expression_statement "FUN_00320c40(&local_98,&DAT_003fb32e);" (call_expression "FUN_00320c40(&local_98,&DAT_003fb32e)" (identifier "FUN_00320c40") (argument_list "(&local_98,&DAT_003fb32e)" (( "(") (pointer_expression "&local_98" (& "&") (identifier "local_98")) (, ",") (pointer_expression "&DAT_003fb32e" (& "&") (identifier "DAT_003fb32e")) () ")"))) (; ";"))) (expression_statement "FUN_00320db0(param_3,&local_98,local_90);" (call_expression "FUN_00320db0(param_3,&local_98,local_90)" (identifier "FUN_00320db0") (argument_list "(param_3,&local_98,local_90)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&local_98" (& "&") (identifier "local_98")) (, ",") (identifier "local_90") () ")"))) (; ";")) (expression_statement "param_1[0xf] = param_1[0xf] - 1;" (assignment_expression "param_1[0xf] = param_1[0xf] - 1" (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]")) (= "=") (binary_expression "param_1[0xf] - 1" (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]")) (- "-") (number_literal "1"))) (; ";")) (expression_statement "uVar10 = *(ulong *)(param_1 + 0xe);" (assignment_expression "uVar10 = *(ulong *)(param_1 + 0xe)" (identifier "uVar10") (= "=") (pointer_expression "*(ulong *)(param_1 + 0xe)" (* "*") (cast_expression "(ulong *)(param_1 + 0xe)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe)" (( "(") (binary_expression "param_1 + 0xe" (identifier "param_1") (+ "+") (number_literal "0xe")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" (else "else") (compound_statement "{\n        FUN_00320bf0(param_3);\n        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;\nLAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);\n      }" ({ "{") (expression_statement "FUN_00320bf0(param_3);" (call_expression "FUN_00320bf0(param_3)" (identifier "FUN_00320bf0") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")"))) (; ";")) (if_statement "if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;" (if "if") (parenthesized_expression "((param_1[0xf] & 1) != 0)" (( "(") (binary_expression "(param_1[0xf] & 1) != 0" (parenthesized_expression "(param_1[0xf] & 1)" (( "(") (binary_expression "param_1[0xf] & 1" (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]")) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00325d78;" (goto "goto") (statement_identifier "LAB_00325d78") (; ";"))) (labeled_statement "LAB_003256a5:\n        uVar10 = *(ulong *)(param_1 + 0xe);" (statement_identifier "LAB_003256a5") (: ":") (expression_statement "uVar10 = *(ulong *)(param_1 + 0xe);" (assignment_expression "uVar10 = *(ulong *)(param_1 + 0xe)" (identifier "uVar10") (= "=") (pointer_expression "*(ulong *)(param_1 + 0xe)" (* "*") (cast_expression "(ulong *)(param_1 + 0xe)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe)" (( "(") (binary_expression "param_1 + 0xe" (identifier "param_1") (+ "+") (number_literal "0xe")) () ")"))))) (; ";"))) (} "}")))) (if_statement "if ((uVar10 & 0x100000001) != 0) {\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }" (if "if") (parenthesized_expression "((uVar10 & 0x100000001) != 0)" (( "(") (binary_expression "(uVar10 & 0x100000001) != 0" (parenthesized_expression "(uVar10 & 0x100000001)" (( "(") (binary_expression "uVar10 & 0x100000001" (identifier "uVar10") (& "&") (number_literal "0x100000001")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_00320db0(param_3,&local_98,local_90);\n        param_1[0xe] = param_1[0xe] - 1;\n      }" ({ "{") (expression_statement "FUN_00320db0(param_3,&local_98,local_90);" (call_expression "FUN_00320db0(param_3,&local_98,local_90)" (identifier "FUN_00320db0") (argument_list "(param_3,&local_98,local_90)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&local_98" (& "&") (identifier "local_98")) (, ",") (identifier "local_90") () ")"))) (; ";")) (expression_statement "param_1[0xe] = param_1[0xe] - 1;" (assignment_expression "param_1[0xe] = param_1[0xe] - 1" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (= "=") (binary_expression "param_1[0xe] - 1" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (- "-") (number_literal "1"))) (; ";")) (} "}"))) (if_statement "if (local_98 != (void *)0x0) {\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }" (if "if") (parenthesized_expression "(local_98 != (void *)0x0)" (( "(") (binary_expression "local_98 != (void *)0x0" (identifier "local_98") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        free(local_98);\n        local_90 = 0;\n        local_88 = 0;\n        local_98 = (void *)0x0;\n      }" ({ "{") (expression_statement "free(local_98);" (call_expression "free(local_98)" (identifier "free") (argument_list "(local_98)" (( "(") (identifier "local_98") () ")"))) (; ";")) (expression_statement "local_90 = 0;" (assignment_expression "local_90 = 0" (identifier "local_90") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_88 = 0;" (assignment_expression "local_88 = 0" (identifier "local_88") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_98 = (void *)0x0;" (assignment_expression "local_98 = (void *)0x0" (identifier "local_98") (= "=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}"))) (expression_statement "uVar15 = iVar7 != 0;" (assignment_expression "uVar15 = iVar7 != 0" (identifier "uVar15") (= "=") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0"))) (; ";")) (expression_statement "uVar5 = true;" (assignment_expression "uVar5 = true" (identifier "uVar5") (= "=") (true "true")) (; ";")) (expression_statement "pcVar8 = local_78;" (assignment_expression "pcVar8 = local_78" (identifier "pcVar8") (= "=") (identifier "local_78")) (; ";")) (if_statement "if (local_78 != (char *)0x0) {\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }" (if "if") (parenthesized_expression "(local_78 != (char *)0x0)" (( "(") (binary_expression "local_78 != (char *)0x0" (identifier "local_78") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        free(local_78);\n        local_70 = (char *)0x0;\n        local_68 = 0;\n        local_78 = (char *)0x0;\n        pcVar8 = (char *)0x0;\n      }" ({ "{") (expression_statement "free(local_78);" (call_expression "free(local_78)" (identifier "free") (argument_list "(local_78)" (( "(") (identifier "local_78") () ")"))) (; ";")) (expression_statement "local_70 = (char *)0x0;" (assignment_expression "local_70 = (char *)0x0" (identifier "local_70") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" (identifier "local_68") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_78 = (char *)0x0;" (assignment_expression "local_78 = (char *)0x0" (identifier "local_78") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "pcVar8 = (char *)0x0;" (assignment_expression "pcVar8 = (char *)0x0" (identifier "pcVar8") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")))) (} "}"))) (if_statement "if (!(bool)uVar15) goto LAB_00325766;" (if "if") (parenthesized_expression "(!(bool)uVar15)" (( "(") (unary_expression "!(bool)uVar15" (! "!") (cast_expression "(bool)uVar15" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar15"))) () ")")) (goto_statement "goto LAB_00325766;" (goto "goto") (statement_identifier "LAB_00325766") (; ";"))) (labeled_statement "LAB_00325740:\n    uVar6 = *param_1;" (statement_identifier "LAB_00325740") (: ":") (expression_statement "uVar6 = *param_1;" (assignment_expression "uVar6 = *param_1" (identifier "uVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";"))) (labeled_statement "joined_r0x00325745:\n    if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }" (statement_identifier "joined_r0x00325745") (: ":") (if_statement "if ((uVar6 & 0x2c00) != 0) {\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }" (if "if") (parenthesized_expression "((uVar6 & 0x2c00) != 0)" (( "(") (binary_expression "(uVar6 & 0x2c00) != 0" (parenthesized_expression "(uVar6 & 0x2c00)" (( "(") (binary_expression "uVar6 & 0x2c00" (identifier "uVar6") (& "&") (number_literal "0x2c00")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_00320990(param_1 + 2,param_1 + 0xc);\n    }" ({ "{") (expression_statement "FUN_00320990(param_1 + 2,param_1 + 0xc);" (call_expression "FUN_00320990(param_1 + 2,param_1 + 0xc)" (identifier "FUN_00320990") (argument_list "(param_1 + 2,param_1 + 0xc)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) (, ",") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))) (; ";")) (} "}")))) (expression_statement "uVar5 = false;" (assignment_expression "uVar5 = false" (identifier "uVar5") (= "=") (false "false")) (; ";")) (expression_statement "iVar7 = FUN_00324c60(param_1,param_2,param_3);" (assignment_expression "iVar7 = FUN_00324c60(param_1,param_2,param_3)" (identifier "iVar7") (= "=") (call_expression "FUN_00324c60(param_1,param_2,param_3)" (identifier "FUN_00324c60") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "uVar4 = true;" (assignment_expression "uVar4 = true" (identifier "uVar4") (= "=") (true "true")) (; ";")) (labeled_statement "LAB_00325766:\n    if (iVar7 == 0) {\n      return 0;\n    }" (statement_identifier "LAB_00325766") (: ":") (if_statement "if (iVar7 == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";"))) (labeled_statement "code_r0x00325824:\n  pcVar11 = (char *)*param_2;" (statement_identifier "code_r0x00325824") (: ":") (expression_statement "pcVar11 = (char *)*param_2;" (assignment_expression "pcVar11 = (char *)*param_2" (identifier "pcVar11") (= "=") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";"))) (expression_statement "cVar1 = *pcVar11;" (assignment_expression "cVar1 = *pcVar11" (identifier "cVar1") (= "=") (pointer_expression "*pcVar11" (* "*") (identifier "pcVar11"))) (; ";")) (goto_statement "goto joined_r0x003255cb;" (goto "goto") (statement_identifier "joined_r0x003255cb") (; ";")) (} "}")))

/* WARNING: Type propagation algorithm not settling */

int function_1(type_1 *work,char **mangled,type_2 *declp)

{
  char var_1;
  type_3 var_27;
  type_4 var_30;
  type_4 var_12;
  type_5 uVar5;
  type_5 uVar6;
  type_5 var_19;
  int var_4;
  char *var_8;
  bool bVar10;
  int var_6;
  type_6 var_2;
  char *var_15;
  type_3 *var_28;
  char *var_26;
  type_5 var_25;
  type_2 trawname;
  type_2 tname;
  type_2 s;
  
  var_4 = 1;
  var_19 = false;
  var_8 = (char *)0x0;
  uVar5 = false;
  uVar6 = false;
LAB_003255c0:
  do {
    var_15 = *mangled;
    var_1 = *var_15;
joined_r0x003255cb:
    if (var_1 == '\0') {
      var_2 = work->options;
      if ((!(bool)uVar6) && ((var_2 & 0x300) != 0)) {
        var_4 = var_3(work,mangled,declp);
        if (var_4 == 0) {
          return 0;
        }
        var_2 = work->options;
      }
      if ((var_2 & 1) == 0) {
        return var_4;
      }
      if (work->static_type != 0) {
        var_5(declp," static");
      }
      var_6 = work->type_quals;
      if (var_6 == 0) {
        return var_4;
      }
      if (declp->b != declp->p) {
        var_5(declp," ");
        var_6 = work->type_quals;
      }
      var_8 = var_7(var_6);
      if (var_8 == (char *)0x0) {
        return var_4;
      }
      if (*var_8 == '\0') {
        return var_4;
      }
      var_5(declp,var_8);
      return var_4;
    }
    switch(var_1) {
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
      work->temp_start = -1;
      s.e = (char *)0x0;
      if (var_8 == (char *)0x0) {
        var_8 = var_15;
      }
      s.p = (char *)0x0;
      s.b = (char *)0x0;
      var_4 = var_9(work);
      var_6 = var_10(work,mangled,&s);
      var_15 = s.p;
      if (var_6 == 0) {
        if (s.b != (char *)0x0) {
          var_11(s.b);
          return 0;
        }
        return 0;
      }
      var_12._0_4_ = work->constructor;
      var_12._4_4_ = work->destructor;
      if ((var_12 & 0x100000001) != 0) {
        if (1 < work->temp_start + 1U) {
          s.p = s.b + work->temp_start;
        }
        if ((s.b != s.p) && (var_6 = (int)s.p - (int)s.b, var_6 != 0)) {
          var_13(declp,s.b,var_6);
        }
        if ((work->destructor & 1) == 0) {
          work->constructor = work->constructor + -1;
        }
        else {
          var_14(declp,"~");
          work->destructor = work->destructor + -1;
        }
      }
      var_6 = (int)var_15 - (int)s.b;
      if (var_15 == s.b) {
        var_6 = 0;
      }
      s.p = var_15;
      var_16(work,s.b,var_6);
      var_6 = (int)s.p - (int)s.b;
      if (s.b == s.p) {
        var_6 = 0;
      }
      var_17((type_1 *)&work->btypevec,s.b,var_6,var_4);
      var_15 = ".";
      if ((work->options & 4) == 0) {
        var_15 = "::";
      }
      var_14(declp,var_15);
      if ((s.b != s.p) && (var_4 = (int)s.p - (int)s.b, var_4 != 0)) {
        var_13(declp,s.b,var_4);
      }
      if (s.b != (char *)0x0) {
        var_11(s.b);
      }
      var_18(work,var_8,(int)*mangled - (int)var_8);
      var_2 = work->options;
      if (((var_2 & 0x2300) == 0) || (var_8 = (char *)0x0, **mangled == 'F')) {
        var_4 = 1;
        goto LAB_00325b2b;
      }
      goto joined_r0x00325745;
    default:
      if ((work->options & 0x300U) == 0) {
        return 0;
      }
      var_4 = var_3(work,mangled,declp);
      uVar6 = true;
      var_25 = var_4 != 0 & var_19;
      break;
    case 'B':
      var_4 = var_20(work,mangled,&s);
      if (var_4 != 0) {
        var_8 = "::";
        if ((work->options & 4) != 0) {
          var_8 = ".";
        }
        var_5(&s,var_8);
        if ((s.b != s.p) && (var_6 = (int)s.p - (int)s.b, var_6 != 0)) {
          var_13(declp,s.b,var_6);
        }
        if (s.b != (char *)0x0) {
          var_11(s.b);
        }
      }
      var_25 = var_4 != 0;
LAB_003259a2:
      var_8 = (char *)0x0;
      var_19 = true;
      break;
    case 'C':
    case 'V':
    case 'u':
      if (var_1 == 'V') {
        var_2 = 2;
      }
      else if (var_1 == 'u') {
        var_2 = 4;
      }
      else {
        if (var_1 != 'C') {
                    /* WARNING: Subroutine does not return */
          var_21();
        }
        var_2 = 1;
      }
      work->type_quals = work->type_quals | var_2;
      if (var_8 == (char *)0x0) {
        var_8 = var_15;
      }
      *mangled = (char *)((long)var_15 + 1);
      goto LAB_0032581c;
    case 'F':
      *mangled = (char *)((long)var_15 + 1);
      if ((work->options & 0x3c00U) != 0) {
        var_22((type_1 *)&work->typevec,(type_1 *)&work->ntypes);
      }
      var_4 = var_3(work,mangled,declp);
      if (var_4 == 0) {
        return 0;
      }
      var_2 = work->options;
      if ((var_2 & 0x2100) == 0) {
        uVar6 = true;
      }
      else {
        uVar6 = true;
        if (**mangled == '_') {
          *mangled = *mangled + 1;
          var_4 = var_20(work,mangled,&tname);
          if (tname.b == (char *)0x0) {
            var_25 = var_19 & var_4 != 0;
            var_8 = (char *)0x0;
            tname.b = (char *)0x0;
          }
          else {
            var_11(tname.b);
            tname.p = (char *)0x0;
            tname.e = (char *)0x0;
            tname.b = (char *)0x0;
            var_8 = (char *)0x0;
            var_25 = var_19 & var_4 != 0;
          }
          break;
        }
      }
      goto LAB_00325b2b;
    case 'H':
      if ((work->options & 0x300U) == 0) {
        return 0;
      }
      var_4 = var_23(work,mangled,declp,(type_2 *)0x0,0,0);
      bVar10 = true;
      if ((work->constructor & 1) != 0) {
        bVar10 = (bool)uVar5;
      }
      if (**mangled == '\0') {
        return 0;
      }
      *mangled = *mangled + 1;
      var_25 = var_4 != 0 & var_19;
      uVar5 = bVar10;
      break;
    case 'K':
      var_4 = var_24(work,mangled,declp,1,0);
      var_25 = var_4 != 0;
      if ((work->options & 0x300U) != 0) goto LAB_003259a2;
      var_25 = var_25 & var_19;
      var_8 = (char *)0x0;
      break;
    case 'L':
      if ((work->options & 0x1000U) == 0) {
        return 0;
      }
      do {
        var_26 = var_15;
        *mangled = var_26 + 1;
        var_1 = var_26[1];
        if (var_1 == '\0') break;
        var_15 = var_26 + 1;
      } while (var_1 != '_');
      if (var_1 == '\0') {
        return 0;
      }
      *mangled = var_26 + 2;
      goto LAB_0032581c;
    case 'Q':
      var_4 = var_24(work,mangled,declp,1,0);
      if (var_4 == 0) {
        return 0;
      }
      var_18(work,var_15,(int)*mangled - (int)var_15);
      var_2 = work->options;
      if ((var_2 & 0x300) != 0) {
        var_8 = (char *)0x0;
        goto joined_r0x00325745;
      }
LAB_00325b2b:
      var_8 = (char *)0x0;
      if ((bool)var_19) goto joined_r0x00325745;
      goto LAB_003255c0;
    case 'S':
      if (var_8 == (char *)0x0) {
        var_8 = var_15;
      }
      *mangled = (char *)((long)var_15 + 1);
      work->static_type = 1;
LAB_0032581c:
      if (!(bool)var_19) goto code_r0x00325824;
      goto LAB_00325740;
    case '_':
      if (((work->options & 0x300U) == 0) || (!(bool)uVar5)) {
        if ((work->options & 0x1000U) == 0) {
          return 0;
        }
        *mangled = (char *)((long)var_15 + 1);
        if ((*(type_3 *)((long)var_15 + 1) != 0) &&
           ((_sch_istable[*(type_3 *)((long)var_15 + 1)] & 4) != 0)) {
          var_28 = (type_3 *)((long)var_15 + 2);
          do {
            *mangled = (char *)var_28;
            var_27 = *var_28;
            if (var_27 == 0) break;
            var_28 = var_28 + 1;
          } while ((_sch_istable[var_27] & 4) != 0);
        }
        goto LAB_0032581c;
      }
      *mangled = (char *)((long)var_15 + 1);
      var_4 = var_20(work,mangled,&s);
      var_15 = s.p;
      if (((s.b != s.p) && (var_5(&s," "), var_15 = s.b, s.b != s.p)) &&
         (var_6 = (int)s.p - (int)s.b, var_6 != 0)) {
        var_13(declp,s.b,var_6);
        var_15 = s.b;
      }
      if (var_15 != (char *)0x0) {
        var_11(var_15);
      }
      var_25 = var_4 != 0 & var_19;
      uVar5 = true;
      break;
    case 't':
      if (var_8 == (char *)0x0) {
        var_8 = var_15;
      }
      trawname.e = (char *)0x0;
      trawname.p = (char *)0x0;
      trawname.b = (char *)0x0;
      tname.e = (char *)0x0;
      tname.p = (char *)0x0;
      tname.b = (char *)0x0;
      var_4 = var_23(work,mangled,&tname,&trawname,1,1);
      if (var_4 != 0) {
        var_18(work,var_8,(int)*mangled - (int)var_8);
      }
      var_8 = "::";
      if ((work->options & 4) != 0) {
        var_8 = ".";
      }
      var_5(&tname,var_8);
      if ((tname.b == tname.p) || (var_6 = (int)tname.p - (int)tname.b, var_6 == 0)) {
        if ((work->destructor & 1) == 0) goto LAB_003256a5;
LAB_00325d78:
        var_14(&trawname,"~");
        var_29(declp,&trawname,(type_2 *)trawname.p);
        work->destructor = work->destructor + -1;
        var_30._0_4_ = work->constructor;
        var_30._4_4_ = work->destructor;
      }
      else {
        var_13(declp,tname.b,var_6);
        if ((work->destructor & 1) != 0) goto LAB_00325d78;
LAB_003256a5:
        var_30._0_4_ = work->constructor;
        var_30._4_4_ = work->destructor;
      }
      if ((var_30 & 0x100000001) != 0) {
        var_29(declp,&trawname,(type_2 *)trawname.p);
        work->constructor = work->constructor + -1;
      }
      if (trawname.b != (char *)0x0) {
        var_11(trawname.b);
        trawname.p = (char *)0x0;
        trawname.e = (char *)0x0;
        trawname.b = (char *)0x0;
      }
      var_25 = var_4 != 0;
      var_19 = true;
      var_8 = tname.b;
      if (tname.b != (char *)0x0) {
        var_11(tname.b);
        tname.p = (char *)0x0;
        tname.e = (char *)0x0;
        tname.b = (char *)0x0;
        var_8 = (char *)0x0;
      }
    }
    if (!(bool)var_25) goto LAB_00325766;
LAB_00325740:
    var_2 = work->options;
joined_r0x00325745:
    if ((var_2 & 0x2c00) != 0) {
      var_22((type_1 *)&work->typevec,(type_1 *)&work->ntypes);
    }
    var_19 = false;
    var_4 = var_3(work,mangled,declp);
    uVar6 = true;
LAB_00325766:
    if (var_4 == 0) {
      return 0;
    }
  } while( true );
code_r0x00325824:
  var_15 = *mangled;
  var_1 = *var_15;
  goto joined_r0x003255cb;
}


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

/* WARNING: Type propagation algorithm not settling */

int MASKED(uint *param_1,long *param_2,long *param_3)

{
  char cVar1;
  byte bVar2;
  undefined1 uVar3;
  undefined1 uVar4;
  undefined1 uVar5;
  uint uVar6;
  int iVar7;
  char *pcVar8;
  bool bVar9;
  ulong uVar10;
  char *pcVar11;
  void *pvVar12;
  byte *pbVar13;
  char *pcVar14;
  undefined1 uVar15;
  void *local_98;
  undefined8 local_90;
  undefined8 local_88;
  char *local_78;
  char *local_70;
  undefined8 local_68;
  void *local_58;
  void *local_50;
  undefined8 local_48;
  
  iVar7 = 1;
  uVar5 = false;
  pcVar8 = (char *)0x0;
  uVar3 = false;
  uVar4 = false;
LAB_003255c0:
  do {
    pcVar11 = (char *)*param_2;
    cVar1 = *pcVar11;
joined_r0x003255cb:
    if (cVar1 == '\0') {
      uVar6 = *param_1;
      if ((!(bool)uVar4) && ((uVar6 & 0x300) != 0)) {
        iVar7 = FUN_00324c60(param_1,param_2,param_3);
        if (iVar7 == 0) {
          return 0;
        }
        uVar6 = *param_1;
      }
      if ((uVar6 & 1) == 0) {
        return iVar7;
      }
      if (param_1[0x10] != 0) {
        FUN_00320c70(param_3," static");
      }
      uVar6 = param_1[0x12];
      if (uVar6 == 0) {
        return iVar7;
      }
      if (*param_3 != param_3[1]) {
        FUN_00320c70(param_3,&DAT_003f45bf);
        uVar6 = param_1[0x12];
      }
      pcVar8 = (char *)FUN_00320790(uVar6);
      if (pcVar8 == (char *)0x0) {
        return iVar7;
      }
      if (*pcVar8 == '\0') {
        return iVar7;
      }
      FUN_00320c70(param_3,pcVar8);
      return iVar7;
    }
    switch(cVar1) {
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
      param_1[0x11] = 0xffffffff;
      local_48 = 0;
      if (pcVar8 == (char *)0x0) {
        pcVar8 = pcVar11;
      }
      local_50 = (void *)0x0;
      local_58 = (void *)0x0;
      FUN_00320670(param_1);
      iVar7 = FUN_003238a0(param_1,param_2,&local_58);
      pvVar12 = local_50;
      if (iVar7 == 0) {
        if (local_58 != (void *)0x0) {
          free(local_58);
          return 0;
        }
        return 0;
      }
      if ((*(ulong *)(param_1 + 0xe) & 0x100000001) != 0) {
        if (1 < param_1[0x11] + 1) {
          local_50 = (void *)((long)local_58 + (long)(int)param_1[0x11]);
        }
        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {
          FUN_00320bf0(param_3);
        }
        if ((param_1[0xf] & 1) == 0) {
          param_1[0xe] = param_1[0xe] - 1;
        }
        else {
          FUN_00320c40(param_3,&DAT_003fb32e);
          param_1[0xf] = param_1[0xf] - 1;
        }
      }
      uVar10 = (long)pvVar12 - (long)local_58 & 0xffffffff;
      if (pvVar12 == local_58) {
        uVar10 = 0;
      }
      local_50 = pvVar12;
      FUN_003206f0(param_1,local_58,uVar10);
      uVar10 = (long)local_50 - (long)local_58 & 0xffffffff;
      if (local_58 == local_50) {
        uVar10 = 0;
      }
      FUN_00320ad0(param_1 + 6,local_58,uVar10);
      pcVar11 = ".";
      if ((*param_1 & 4) == 0) {
        pcVar11 = "::";
      }
      FUN_00320c40(param_3,pcVar11);
      if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {
        FUN_00320bf0(param_3,local_58);
      }
      if (local_58 != (void *)0x0) {
        free(local_58);
      }
      FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);
      uVar6 = *param_1;
      if (((uVar6 & 0x2300) == 0) || (pcVar8 = (char *)0x0, *(char *)*param_2 == 'F')) {
        iVar7 = 1;
        goto LAB_00325b2b;
      }
      goto joined_r0x00325745;
    default:
      if ((*param_1 & 0x300) == 0) {
        return 0;
      }
      iVar7 = FUN_00324c60(param_1,param_2,param_3);
      uVar4 = true;
      uVar15 = iVar7 != 0 & uVar5;
      break;
    case 'B':
      iVar7 = FUN_00322150(param_1,param_2,&local_58);
      if (iVar7 != 0) {
        pcVar8 = "::";
        if ((*param_1 & 4) != 0) {
          pcVar8 = ".";
        }
        FUN_00320c70(&local_58,pcVar8);
        if ((local_58 != local_50) && ((int)local_50 != (int)local_58)) {
          FUN_00320bf0(param_3,local_58);
        }
        if (local_58 != (void *)0x0) {
          free(local_58);
        }
      }
      uVar15 = iVar7 != 0;
LAB_003259a2:
      pcVar8 = (char *)0x0;
      uVar5 = true;
      break;
    case 'C':
    case 'V':
    case 'u':
      if (cVar1 == 'V') {
        uVar6 = 2;
      }
      else if (cVar1 == 'u') {
        uVar6 = 4;
      }
      else {
        if (cVar1 != 'C') {
                    /* WARNING: Subroutine does not return */
          abort();
        }
        uVar6 = 1;
      }
      param_1[0x12] = param_1[0x12] | uVar6;
      if (pcVar8 == (char *)0x0) {
        pcVar8 = pcVar11;
      }
      *param_2 = (long)((long)pcVar11 + 1);
      goto LAB_0032581c;
    case 'F':
      *param_2 = (long)((long)pcVar11 + 1);
      if ((*param_1 & 0x3c00) != 0) {
        FUN_00320990(param_1 + 2,param_1 + 0xc);
      }
      iVar7 = FUN_00324c60(param_1,param_2,param_3);
      if (iVar7 == 0) {
        return 0;
      }
      uVar6 = *param_1;
      if ((uVar6 & 0x2100) == 0) {
        uVar4 = true;
      }
      else {
        uVar4 = true;
        if (*(char *)*param_2 == '_') {
          *param_2 = (long)((char *)*param_2 + 1);
          iVar7 = FUN_00322150(param_1,param_2,&local_78);
          if (local_78 == (char *)0x0) {
            uVar15 = uVar5 & iVar7 != 0;
            pcVar8 = (char *)0x0;
            local_78 = (char *)0x0;
          }
          else {
            free(local_78);
            local_70 = (char *)0x0;
            local_68 = 0;
            local_78 = (char *)0x0;
            pcVar8 = (char *)0x0;
            uVar15 = uVar5 & iVar7 != 0;
          }
          break;
        }
      }
      goto LAB_00325b2b;
    case 'H':
      if ((*param_1 & 0x300) == 0) {
        return 0;
      }
      iVar7 = FUN_00323ef0(param_1,param_2,param_3,0,0,0);
      bVar9 = true;
      if ((param_1[0xe] & 1) != 0) {
        bVar9 = (bool)uVar3;
      }
      if (*(char *)*param_2 == '\0') {
        return 0;
      }
      *param_2 = (long)((char *)*param_2 + 1);
      uVar15 = iVar7 != 0 & uVar5;
      uVar3 = bVar9;
      break;
    case 'K':
      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);
      uVar15 = iVar7 != 0;
      if ((*param_1 & 0x300) != 0) goto LAB_003259a2;
      uVar15 = uVar15 & uVar5;
      pcVar8 = (char *)0x0;
      break;
    case 'L':
      if ((*param_1 & 0x1000) == 0) {
        return 0;
      }
      do {
        pcVar14 = pcVar11;
        *param_2 = (long)(pcVar14 + 1);
        cVar1 = pcVar14[1];
        if (cVar1 == '\0') break;
        pcVar11 = pcVar14 + 1;
      } while (cVar1 != '_');
      if (cVar1 == '\0') {
        return 0;
      }
      *param_2 = (long)(pcVar14 + 2);
      goto LAB_0032581c;
    case 'Q':
      iVar7 = FUN_003245f0(param_1,param_2,param_3,1,0);
      if (iVar7 == 0) {
        return 0;
      }
      FUN_00321100(param_1,pcVar11,*param_2 - (long)pcVar11);
      uVar6 = *param_1;
      if ((uVar6 & 0x300) != 0) {
        pcVar8 = (char *)0x0;
        goto joined_r0x00325745;
      }
LAB_00325b2b:
      pcVar8 = (char *)0x0;
      if ((bool)uVar5) goto joined_r0x00325745;
      goto LAB_003255c0;
    case 'S':
      if (pcVar8 == (char *)0x0) {
        pcVar8 = pcVar11;
      }
      *param_2 = (long)((long)pcVar11 + 1);
      param_1[0x10] = 1;
LAB_0032581c:
      if (!(bool)uVar5) goto code_r0x00325824;
      goto LAB_00325740;
    case '_':
      if (((*param_1 & 0x300) == 0) || (!(bool)uVar3)) {
        if ((*param_1 & 0x1000) == 0) {
          return 0;
        }
        *param_2 = (long)((long)pcVar11 + 1);
        if ((*(byte *)((long)pcVar11 + 1) != 0) &&
           (((&DAT_003fef00)[(ulong)*(byte *)((long)pcVar11 + 1) * 2] & 4) != 0)) {
          pbVar13 = (byte *)((long)pcVar11 + 2);
          do {
            *param_2 = (long)pbVar13;
            bVar2 = *pbVar13;
            if (bVar2 == 0) break;
            pbVar13 = pbVar13 + 1;
          } while (((&DAT_003fef00)[(ulong)bVar2 * 2] & 4) != 0);
        }
        goto LAB_0032581c;
      }
      *param_2 = (long)((long)pcVar11 + 1);
      iVar7 = FUN_00322150(param_1,param_2,&local_58);
      pvVar12 = local_50;
      if (((local_58 != local_50) &&
          (FUN_00320c70(&local_58,&DAT_003f45bf), pvVar12 = local_58, local_58 != local_50)) &&
         ((int)local_50 != (int)local_58)) {
        FUN_00320bf0(param_3,local_58);
        pvVar12 = local_58;
      }
      if (pvVar12 != (void *)0x0) {
        free(pvVar12);
      }
      uVar15 = iVar7 != 0 & uVar5;
      uVar3 = true;
      break;
    case 't':
      if (pcVar8 == (char *)0x0) {
        pcVar8 = pcVar11;
      }
      local_88 = 0;
      local_90 = 0;
      local_98 = (void *)0x0;
      local_68 = 0;
      local_70 = (char *)0x0;
      local_78 = (char *)0x0;
      iVar7 = FUN_00323ef0(param_1,param_2,&local_78,&local_98,1,1);
      if (iVar7 != 0) {
        FUN_00321100(param_1,pcVar8,*param_2 - (long)pcVar8);
      }
      pcVar8 = "::";
      if ((*param_1 & 4) != 0) {
        pcVar8 = ".";
      }
      FUN_00320c70(&local_78,pcVar8);
      if ((local_78 == local_70) || ((int)local_70 == (int)local_78)) {
        if ((param_1[0xf] & 1) == 0) goto LAB_003256a5;
LAB_00325d78:
        FUN_00320c40(&local_98,&DAT_003fb32e);
        FUN_00320db0(param_3,&local_98,local_90);
        param_1[0xf] = param_1[0xf] - 1;
        uVar10 = *(ulong *)(param_1 + 0xe);
      }
      else {
        FUN_00320bf0(param_3);
        if ((param_1[0xf] & 1) != 0) goto LAB_00325d78;
LAB_003256a5:
        uVar10 = *(ulong *)(param_1 + 0xe);
      }
      if ((uVar10 & 0x100000001) != 0) {
        FUN_00320db0(param_3,&local_98,local_90);
        param_1[0xe] = param_1[0xe] - 1;
      }
      if (local_98 != (void *)0x0) {
        free(local_98);
        local_90 = 0;
        local_88 = 0;
        local_98 = (void *)0x0;
      }
      uVar15 = iVar7 != 0;
      uVar5 = true;
      pcVar8 = local_78;
      if (local_78 != (char *)0x0) {
        free(local_78);
        local_70 = (char *)0x0;
        local_68 = 0;
        local_78 = (char *)0x0;
        pcVar8 = (char *)0x0;
      }
    }
    if (!(bool)uVar15) goto LAB_00325766;
LAB_00325740:
    uVar6 = *param_1;
joined_r0x00325745:
    if ((uVar6 & 0x2c00) != 0) {
      FUN_00320990(param_1 + 2,param_1 + 0xc);
    }
    uVar5 = false;
    iVar7 = FUN_00324c60(param_1,param_2,param_3);
    uVar4 = true;
LAB_00325766:
    if (iVar7 == 0) {
      return 0;
    }
  } while( true );
code_r0x00325824:
  pcVar11 = (char *)*param_2;
  cVar1 = *pcVar11;
  goto joined_r0x003255cb;
}

