void *__fastcall initializeFunctions(char *a1)
{
  int v1; // eax
  int v2; // eax
  int v3; // eax
  int v4; // eax
  int v5; // eax
  int v6; // eax
  int v7; // eax
  int v8; // eax
  int v9; // eax
  int v10; // eax
  void **v11; // rbx
  _DWORD *v12; // rbx
  __int64 v13; // rbx
  __int64 v14; // rbx
  void **v15; // rbx
  int v16; // eax
  char v18; // [rsp+1Ch] [rbp-34h]
  char v19; // [rsp+1Dh] [rbp-33h]
  char v20; // [rsp+1Eh] [rbp-32h]
  char v21; // [rsp+1Fh] [rbp-31h]
  char v22; // [rsp+20h] [rbp-30h]
  char v23; // [rsp+21h] [rbp-2Fh]
  char v24; // [rsp+22h] [rbp-2Eh]
  char v25; // [rsp+23h] [rbp-2Dh]
  int j; // [rsp+24h] [rbp-2Ch]
  char i; // [rsp+2Bh] [rbp-25h]
  int v28; // [rsp+2Ch] [rbp-24h]
  void *ptr; // [rsp+30h] [rbp-20h]
  int v30; // [rsp+38h] [rbp-18h]
  int v31; // [rsp+3Ch] [rbp-14h]

  v31 = 2;
  v30 = 1;
  ptr = malloc(0x10uLL);
  v28 = 1;
  for ( i = *a1; i == 17; i = a1[v16] )
  {
    v1 = v28++;
    for ( i = a1[v1]; i != 18; i = a1[v2] )
      v2 = v28++;
    v3 = v28++;
    v22 = a1[v3];
    v4 = v28++;
    v23 = a1[v4];
    v5 = v28++;
    v24 = a1[v5];
    v6 = v28++;
    v25 = a1[v6];
    v7 = v28++;
    v18 = a1[v7];
    v8 = v28++;
    v19 = a1[v8];
    v9 = v28++;
    v20 = a1[v9];
    v10 = v28++;
    v21 = a1[v10];
    if ( v30 >= v31 )
    {
      v31 *= 2;
      ptr = realloc(ptr, 8LL * v31);
    }
    v11 = (void **)((char *)ptr + 8 * v30 - 8);
    *v11 = malloc(0x20uLL);
    v12 = (_DWORD *)*((_QWORD *)ptr + v30 - 1);
    *v12 = bytesToInt((unsigned __int8 *)&v18);
    *(_DWORD *)(*((_QWORD *)ptr + v30 - 1) + 20LL) = 0;
    v13 = *((_QWORD *)ptr + v30 - 1);
    *(_DWORD *)(v13 + 16) = bytesToInt((unsigned __int8 *)&v22);
    *(_DWORD *)(*((_QWORD *)ptr + v30 - 1) + 24LL) = v30 == 1;
    v14 = *((_QWORD *)ptr + v30 - 1);
    *(_QWORD *)(v14 + 8) = malloc(8LL * *(int *)(*((_QWORD *)ptr + v30 - 1) + 16LL));
    for ( j = 0; j < *(_DWORD *)(*((_QWORD *)ptr + v30 - 1) + 16LL); ++j )
    {
      v15 = (void **)(*(_QWORD *)(*((_QWORD *)ptr + v30 - 1) + 8LL) + 8LL * j);
      *v15 = malloc(0xA0uLL);
    }
    ++v30;
    v16 = v28++;
  }
  return ptr;
}