Newer
Older
AMI-Aptio-BIOS-Reversed / Build / GuidArtifacts / 117828F1-DA7D-4BC1-8B58-9A954FED5121 / 117828F1-DA7D-4BC1-8B58-9A954FED5121.c
@Ajax Dong Ajax Dong 2 days ago 839 KB Full restructure
#include "117828F1-DA7D-4BC1-8B58-9A954FED5121.h"

// 117828F1-DA7D-4BC1-8B58-9A954FED5121 - Regenerated from IDA
// Total functions: 906

// Function: HiiGetString @ 0x2e0 (0x15a bytes)
// Index: 1/906

EFI_STRING __cdecl HiiGetString(EFI_HII_HANDLE HiiHandle, EFI_STRING_ID StringId, const CHAR8 *Language)
{
  const CHAR8 *FirstString_1; // r9
  const CHAR8 *FirstString; // rbx
  EFI_STRING result; // rax
  UINTN v8; // rax
  __int64 v9; // rsi
  EFI_STRING v10; // rbx
  EFI_STRING v11; // r9
  __int64 v12; // rax
  EFI_STRING_ID StringId_1; // [rsp+68h] [rbp+10h] BYREF

  StringId_1 = StringId; /*0x2ef*/
  FirstString = FirstString_1; /*0x305*/
  if ( !HiiHandle ) /*0x315*/
    DebugAssert( /*0x329*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c",
      0x46u,
      "HiiHandle != ((void *) 0)");
  if ( !Language ) /*0x33b*/
    DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c", 0x47u, "String != ((void *) 0)"); /*0x350*/
  if ( FirstString ) /*0x358*/
  {
    v8 = AsciiStrLen(FirstString); /*0x367*/
    result = (EFI_STRING)MemAllocCopyPool(4, v8 + 1, (__int64)FirstString); /*0x378*/
  }
  else
  {
    result = (EFI_STRING)HiiGetHiiHandle(HiiHandle); /*0x35d*/
  }
  if ( result ) /*0x383*/
  {
    v9 = 0x8000000000000002uLL; /*0x38e*/
    v10 = result; /*0x398*/
    if ( *(_BYTE *)result ) /*0x39b*/
    {
      do /*0x406*/
      {
        v11 = v10; /*0x3a0*/
        if ( *(_BYTE *)v10 ) /*0x3a3*/
        {
          do /*0x3b0*/
          {
            if ( *(_BYTE *)v10 == 59 ) /*0x3ab*/
              break; /*0x3ab*/
            v10 = (EFI_STRING)((char *)v10 + 1); /*0x3ad*/
          }
          while ( *(_BYTE *)v10 ); /*0x3b0*/
          if ( *(_BYTE *)v10 ) /*0x3b5*/
          {
            *(_BYTE *)v10 = 0; /*0x3ba*/
            v10 = (EFI_STRING)((char *)v10 + 1); /*0x3bd*/
          }
        }
        if ( StringId_1 ) /*0x3d7*/
          v12 = (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, _QWORD, EFI_STRING, const CHAR8 *, _QWORD))(qword_58080 + 16))( /*0x3fb*/
                  qword_58080,
                  HiiHandle,
                  StringId_1,
                  v11,
                  Language,
                  0);
        else
          v12 = (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, EFI_STRING_ID *, EFI_STRING, _QWORD, const CHAR8 *, _QWORD))qword_58080)( /*0x3ed*/
                  qword_58080,
                  HiiHandle,
                  &StringId_1,
                  v11,
                  0,
                  Language,
                  0);
        v9 = v12; /*0x401*/
      }
      while ( v12 >= 0 && *(_BYTE *)v10 ); /*0x406*/
    }
    MemFreePool(); /*0x40e*/
    LOWORD(result) = 0; /*0x416*/
    if ( v9 >= 0 ) /*0x41a*/
      LOWORD(result) = StringId_1; /*0x41c*/
  }
  else
  {
    LOWORD(result) = 0; /*0x385*/
  }
  return result; /*0x430*/
}

// Function: HiiGetStringToLanguage @ 0x43c (0x21a bytes)
// Index: 2/906

__int64 __fastcall HiiGetStringToLanguage(void *HiiHandle, unsigned __int16 a2, void *a3)
{
  __int64 v6; // rdi
  char *HiiHandle_1; // r12
  __int64 v8; // rax
  __int64 v9; // rbx
  void *v10; // r8
  _BYTE *StringByGuid; // rsi
  unsigned __int64 n8; // [rsp+40h] [rbp-38h] BYREF
  unsigned __int64 n8_1; // [rsp+48h] [rbp-30h] BYREF
  char v15; // [rsp+98h] [rbp+20h] BYREF

  if ( !HiiHandle ) /*0x472*/
    DebugAssert( /*0x487*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c",
      0xE7u,
      "HiiHandle != ((void *) 0)");
  if ( !a2 ) /*0x49a*/
    DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c", 0xE8u, "StringId != 0"); /*0x4af*/
  v6 = 0; /*0x4b7*/
  HiiHandle_1 = (char *)HiiGetHiiHandle(HiiHandle); /*0x4bf*/
  if ( HiiHandle_1 ) /*0x4c5*/
  {
    n8 = 0; /*0x4e8*/
    if ( (*(__int64 (__fastcall **)(const wchar_t *, void *, _QWORD, unsigned __int64 *, _QWORD))(RuntimeServices + 72))( /*0x502*/
           L"PlatformLang",
           &unk_27830,
           0,
           &n8,
           0) == 0x8000000000000005uLL )
    {
      v8 = MemAllocPool(4, n8); /*0x50e*/
      v9 = v8; /*0x513*/
      if ( v8 ) /*0x519*/
      {
        if ( (*(__int64 (__fastcall **)(const wchar_t *, void *, _QWORD, unsigned __int64 *, __int64))(RuntimeServices + 72))( /*0x543*/
               L"PlatformLang",
               &unk_27830,
               0,
               &n8,
               v8) >= 0 )
        {
LABEL_11:
          v10 = &unk_2515A; /*0x550*/
          if ( a3 ) /*0x56a*/
            v10 = a3; /*0x56a*/
          StringByGuid = HiiGetStringByGuid(HiiHandle_1, 0, v10); /*0x57c*/
          if ( StringByGuid ) /*0x582*/
          {
            n8_1 = 0; /*0x5b8*/
            if ( (*(__int64 (__fastcall **)(__int64, _BYTE *, void *, _QWORD, char *, unsigned __int64 *, _QWORD))(qword_58080 + 8))( /*0x5c3*/
                   qword_58080,
                   StringByGuid,
                   HiiHandle,
                   a2,
                   &v15,
                   &n8_1,
                   0) == 0x8000000000000005uLL )
            {
              v6 = MemAllocZeroPool(n8_1); /*0x5cf*/
              if ( v6 ) /*0x5d5*/
              {
                if ( (*(__int64 (__fastcall **)(__int64, _BYTE *, void *, _QWORD, __int64, unsigned __int64 *, _QWORD))(qword_58080 + 8))( /*0x606*/
                       qword_58080,
                       StringByGuid,
                       HiiHandle,
                       a2,
                       v6,
                       &n8_1,
                       0) < 0 )
                {
                  MemFreePool(); /*0x60b*/
                  v6 = 0; /*0x610*/
                }
              }
            }
          }
          MemFreePool(); /*0x616*/
          if ( v9 ) /*0x61e*/
            MemFreePool(); /*0x623*/
          if ( StringByGuid ) /*0x62b*/
            MemFreePool(); /*0x630*/
          return v6; /*0x630*/
        }
        MemFreePool(); /*0x548*/
      }
    }
    v9 = 0; /*0x54d*/
    goto LABEL_11; /*0x54d*/
  }
  return v6; /*0x649*/
}

// Function: HiiPackageListBuild @ 0x658 (0x148 bytes)
// Index: 3/906

__int64 HiiPackageListBuild(__int64 a1, __int64 a2, ...)
{
  unsigned int *v4; // rdi
  int v5; // ebx
  unsigned int *v6; // rax
  unsigned int **v7; // rsi
  unsigned int n8; // ebx
  __int64 *v9; // rax
  __int64 *v10; // rsi
  va_list v11; // rbx
  _BYTE *v12; // rbp
  int n4; // eax
  __int64 v14; // r12
  __int64 v15; // rax
  __int64 v16; // rcx
  __int64 v18[9]; // [rsp+20h] [rbp-48h] BYREF
  unsigned int *v19; // [rsp+80h] [rbp+18h] BYREF
  va_list va; // [rsp+80h] [rbp+18h]
  va_list va1; // [rsp+88h] [rbp+20h] BYREF

  va_start(va1, a2);
  va_start(va, a2);
  v19 = va_arg(va1, unsigned int *); /*0x658*/
  if ( !a1 ) /*0x68a*/
    DebugAssert( /*0x69f*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
      0x9Bu,
      "PackageListGuid != ((void *) 0)");
  v4 = v19; /*0x6a4*/
  v5 = 0; /*0x6ac*/
  v6 = v19; /*0x6af*/
  if ( !v19 ) /*0x6b5*/
    return 0; /*0x6b5*/
  va_copy((va_list)v7, va); /*0x6bb*/
  do /*0x6d3*/
  {
    ++v7; /*0x6cb*/
    v5 = v5 + StrLenAscii(v6) - 4; /*0x6cf*/
    v6 = *v7; /*0x6d3*/
  }
  while ( *v7 ); /*0x6d3*/
  if ( !v5 ) /*0x6de*/
    return 0; /*0x6de*/
  n8 = v5 + 24; /*0x6e4*/
  v9 = (__int64 *)MemAllocZeroPool(n8); /*0x6e9*/
  v10 = v9; /*0x6ee*/
  if ( !v9 ) /*0x6f4*/
    return 0; /*0x78f*/
  Assert_59(v9, a1); /*0x700*/
  *((_DWORD *)v10 + 4) = n8; /*0x705*/
  va_copy(v11, va); /*0x708*/
  v12 = (char *)v10 + 20; /*0x710*/
  do /*0x73b*/
  {
    n4 = StrLenAscii(v4); /*0x717*/
    v14 = (unsigned int)(n4 - 4); /*0x71c*/
    if ( n4 != 4 ) /*0x723*/
      RstCopyMemOverlapped(v12, (_BYTE *)v4 + 4, (unsigned int)(n4 - 4)); /*0x72f*/
    ++v11; /*0x734*/
    v12 += v14; /*0x738*/
    v4 = (unsigned int *)*v11; /*0x73b*/
  }
  while ( *v11 ); /*0x73b*/
  RstCopyMemOverlapped(v12, byte_251D0, 4); /*0x753*/
  v15 = (*(__int64 (__fastcall **)(__int64, __int64 *, __int64, __int64 *))qword_58090)(qword_58090, v10, a2, v18); /*0x76d*/
  v16 = v18[0]; /*0x76f*/
  if ( v15 < 0 ) /*0x777*/
    v16 = 0; /*0x777*/
  v18[0] = v16; /*0x77b*/
  MemFreePool(); /*0x783*/
  return v18[0]; /*0x791*/
}

// Function: HiiNewString @ 0x7a0 (0x86 bytes)
// Index: 4/906

void __fastcall HiiNewString(EFI_HII_HANDLE HiiHandle)
{
  __int64 v2; // rax

  if ( !HiiHandle ) /*0x7b5*/
    DebugAssert( /*0x7ca*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
      0x101u,
      "HiiHandle != ((void *) 0)");
  v2 = (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE))(qword_58090 + 8))(qword_58090, HiiHandle); /*0x7dc*/
  if ( v2 < 0 ) /*0x7ed*/
  {
    DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v2); /*0x803*/
    DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c", 0x103u, "!EFI_ERROR (Status)"); /*0x81b*/
  }
}

// Function: HiiConfigRoutingExtractConfig @ 0x828 (0xbb bytes)
// Index: 5/906

__int64 __fastcall HiiConfigRoutingExtractConfig(__int64 StartOfBuffer, __int64 a2, __int64 n310)
{
  __int64 v6; // rax
  __int64 v7; // rcx
  _BYTE v9[24]; // [rsp+30h] [rbp-18h] BYREF
  __int64 v10; // [rsp+68h] [rbp+20h] BYREF

  if ( !StartOfBuffer ) /*0x854*/
    DebugAssert( /*0x869*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
      0x1B8u,
      "ConfigRequest != ((void *) 0)");
  if ( !a2 ) /*0x87b*/
    DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c", 0x1B9u, "Block != ((void *) 0)"); /*0x890*/
  v6 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64, __int64 *, _BYTE *))(qword_58098 + 24))( /*0x8bc*/
         qword_58098,
         StartOfBuffer,
         a2,
         n310,
         &v10,
         v9);
  v7 = v10; /*0x8bf*/
  if ( v6 < 0 ) /*0x8d1*/
    return 0; /*0x8d1*/
  return v7; /*0x8dd*/
}

// Function: HiiGetStringByLanguage @ 0x8e4 (0x100 bytes)
// Index: 6/906

__int64 __fastcall HiiGetStringByLanguage(__int64 a1, wchar_t *RstHiiConfig, __int64 a3, __int64 a4)
{
  __int64 v4; // rax
  __int64 v9; // rbx
  __int64 v10; // rax
  unsigned __int64 n8[5]; // [rsp+30h] [rbp-28h] BYREF
  char v12; // [rsp+78h] [rbp+20h] BYREF

  v4 = qword_58050; /*0x8f6*/
  if ( !qword_58050 ) /*0x90c*/
  {
    if ( (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27990, 0, &qword_58050) < 0 ) /*0x92e*/
      return 0; /*0x92e*/
    v4 = qword_58050; /*0x930*/
    if ( !qword_58050 ) /*0x93a*/
      return 0; /*0x93a*/
  }
  n8[0] = 0; /*0x943*/
  if ( a3 ) /*0x94b*/
  {
    v9 = a3; /*0x94d*/
  }
  else
  {
    LOBYTE(a4) = 1; /*0x95c*/
    v10 = (*(__int64 (__fastcall **)(__int64, unsigned __int64 *, char *, __int64, __int64, wchar_t *))(v4 + 8))( /*0x96c*/
            v4,
            n8,
            &v12,
            a4,
            a1,
            RstHiiConfig);
    if ( v10 >= 0 ) /*0x972*/
      return MemAllocZeroPool(2u); /*0x97e*/
    if ( v10 != 0x8000000000000005uLL ) /*0x98d*/
      return 0; /*0x98d*/
    v9 = MemAllocZeroPool(n8[0]); /*0x999*/
    if ( !v9 ) /*0x99f*/
      return 0; /*0x93e*/
    v4 = qword_58050; /*0x9a1*/
  }
  LOBYTE(a4) = a3 == 0; /*0x9b6*/
  if ( (*(__int64 (__fastcall **)(__int64, unsigned __int64 *, __int64, __int64, __int64, wchar_t *))(v4 + 8))( /*0x9ca*/
         v4,
         n8,
         v9,
         a4,
         a1,
         RstHiiConfig) < 0 )
    return 0; /*0x9ca*/
  return v9; /*0x9db*/
}

// Function: HiiConfigRoutingExtract @ 0x9e4 (0x1ee bytes)
// Index: 7/906

__int64 __fastcall HiiConfigRoutingExtract(__int64 a1, unsigned __int16 *RstHiiConfig, __int64 ImageHandle)
{
  unsigned __int16 *RstHiiConfig_1; // rbx
  UINTN v6; // rsi
  const CHAR16 *FirstString_1; // rbp
  unsigned __int64 j_1; // r12
  const CHAR16 *FirstString; // rax
  CHAR16 *StartOfBuffer; // rax
  const CHAR16 *StartOfBuffer_4; // rsi
  __int64 v13; // rdi
  CHAR16 *StartOfBuffer_1; // rsi
  unsigned __int64 i; // r13
  unsigned __int64 v16; // rax
  CHAR16 *StartOfBuffer_2; // rsi
  unsigned __int16 v18; // ax
  CHAR16 *StartOfBuffer_3; // rbx
  unsigned __int64 j; // rsi
  unsigned __int64 v21; // rax
  unsigned __int16 *v22; // rcx
  char k; // dl
  unsigned __int16 n0x41; // ax

  RstHiiConfig_1 = RstHiiConfig; /*0xa06*/
  v6 = 0; /*0xa0c*/
  if ( RstHiiConfig ) /*0xa12*/
    v6 = StrLen(RstHiiConfig); /*0xa1c*/
  FirstString_1 = 0; /*0xa1f*/
  j_1 = 0; /*0xa22*/
  if ( ImageHandle ) /*0xa28*/
  {
    FirstString = (const CHAR16 *)RstUefiReadVariable(ImageHandle); /*0xa2d*/
    FirstString_1 = FirstString; /*0xa32*/
    if ( !FirstString ) /*0xa38*/
      return 0; /*0xa3c*/
    j_1 = Assert_105(FirstString); /*0xa49*/
  }
  StartOfBuffer = (CHAR16 *)MemAllocZeroPool(4 * (j_1 + 2 * v6) + 100); /*0xa58*/
  StartOfBuffer_4 = StartOfBuffer; /*0xa5d*/
  if ( !StartOfBuffer ) /*0xa63*/
    return 0; /*0xa63*/
  v13 = Assert_36(StartOfBuffer, (const CHAR16 *)&GUID__); /*0xa77*/
  StartOfBuffer_1 = (CHAR16 *)&StartOfBuffer_4[StrLen(StartOfBuffer_4)]; /*0xa7f*/
  if ( a1 ) /*0xa86*/
  {
    for ( i = 0; i < 0x10; ++i ) /*0xa88*/
    {
      v16 = HiiCfgArrayNext(StartOfBuffer_1, 160, *(unsigned __int8 *)(i + a1), 2u); /*0xa9f*/
      StartOfBuffer_1 += v16; /*0xaa7*/
    }
  }
  Assert_36(StartOfBuffer_1, (const CHAR16 *)&GUID___0); /*0xabb*/
  StartOfBuffer_2 = &StartOfBuffer_1[StrLen(StartOfBuffer_1)]; /*0xac8*/
  if ( RstHiiConfig_1 ) /*0xacf*/
  {
    while ( 1 ) /*0xaf2*/
    {
      v18 = *RstHiiConfig_1; /*0xaf2*/
      if ( !*RstHiiConfig_1 ) /*0xaf2*/
        break; /*0xaf2*/
      ++RstHiiConfig_1; /*0xaea*/
      StartOfBuffer_2 += HiiCfgArrayNext(StartOfBuffer_2, 160, v18, 4u); /*0xaee*/
    }
  }
  Assert_36(StartOfBuffer_2, (const CHAR16 *)&GUID___1); /*0xb05*/
  StartOfBuffer_3 = &StartOfBuffer_2[StrLen(StartOfBuffer_2)]; /*0xb12*/
  for ( j = 0; j < j_1; StartOfBuffer_3 += v21 ) /*0xb1c*/
    v21 = HiiCfgArrayNext(StartOfBuffer_3, 160, *((unsigned __int8 *)FirstString_1 + j++), 2u); /*0xb31*/
  *StartOfBuffer_3 = 0; /*0xb49*/
  if ( !v13 ) /*0xb52*/
    DebugAssert( /*0xb67*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
      0x18Bu,
      "ConfigString != ((void *) 0)");
  v22 = (unsigned __int16 *)v13; /*0xb6c*/
  for ( k = 0; *v22; ++v22 ) /*0xb72*/
  {
    n0x41 = *v22; /*0xb78*/
    if ( *v22 == 61 ) /*0xb7f*/
    {
      k = 1; /*0xb81*/
    }
    else if ( n0x41 == 38 ) /*0xb89*/
    {
      k = 0; /*0xb8b*/
    }
    else if ( k && n0x41 >= 0x41u && n0x41 <= 0x46u ) /*0xb9f*/
    {
      *v22 = n0x41 + 32; /*0xba5*/
    }
  }
  return v13; /*0xbc4*/
}

// Function: HiiGetConfigString @ 0xbd4 (0xce bytes)
// Index: 8/906

bool __fastcall HiiGetConfigString(__int64 a1, wchar_t *RstHiiConfig, __int64 a3, __int64 a4)
{
  const CHAR16 *StringByLanguage; // rdi
  UINTN v7; // rbx
  unsigned __int64 n8; // rbx
  CHAR8 *StartOfBuffer; // rsi
  __int64 v10; // rbx
  _BYTE v11[24]; // [rsp+30h] [rbp-18h] BYREF
  __int64 v12; // [rsp+60h] [rbp+18h] BYREF

  v12 = a3; /*0xbe3*/
  StringByLanguage = (const CHAR16 *)HiiGetStringByLanguage(a1, RstHiiConfig, 0, a4); /*0xbf7*/
  if ( !StringByLanguage ) /*0xbfd*/
    return 0; /*0xbfd*/
  v7 = 2 * StrLen(L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00") + 2; /*0xc15*/
  n8 = v7 + 2 * StrLen(StringByLanguage) + 2; /*0xc1f*/
  StartOfBuffer = (CHAR8 *)MemAllocZeroPool(n8); /*0xc45*/
  HiiCfgArrayGet( /*0xc48*/
    StartOfBuffer,
    n8,
    (unsigned __int8 *)L"%s&%s",
    L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00",
    StringByLanguage);
  MemFreePool(); /*0xc50*/
  if ( !StartOfBuffer ) /*0xc58*/
    return 0; /*0xbff*/
  v10 = (*(__int64 (__fastcall **)(__int64, CHAR8 *, __int64, __int64 *, _BYTE *))(qword_58098 + 32))( /*0xc7f*/
          qword_58098,
          StartOfBuffer,
          a4,
          &v12,
          v11);
  MemFreePool(); /*0xc82*/
  return v10 >= 0; /*0xc9c*/
}

// Function: HiiBlockToConfig @ 0xca4 (0x12f bytes)
// Index: 9/906

bool __fastcall HiiBlockToConfig(__int64 a1, wchar_t *RstHiiConfig, CHAR16 *n310, __int64 a4, CHAR16 *n310_2)
{
  UINTN v9; // rax
  unsigned __int64 n8; // rbx
  CHAR8 *StartOfBuffer; // rax
  unsigned __int8 *%s%s; // r8
  __int64 StartOfBuffer_1; // rdi
  __int64 Config; // rsi
  UINTN v16; // rax
  __int64 v17; // r9
  __int64 StringByLanguage; // rbx
  CHAR16 *n310_1; // [rsp+20h] [rbp-28h]

  if ( !a4 ) /*0xcd9*/
    DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c", 0x8D1u, "Buffer != ((void *) 0)"); /*0xcee*/
  v9 = StrLen(L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00"); /*0xcff*/
  if ( n310_2 ) /*0xd07*/
  {
    n8 = 2 * v9 + 2 * StrLen(n310_2) + 2; /*0xd32*/
    StartOfBuffer = (CHAR8 *)MemAllocZeroPool(n8); /*0xd3a*/
    n310_1 = n310_2; /*0xd3f*/
    %s%s = (unsigned __int8 *)L"%s%s"; /*0xd44*/
  }
  else
  {
    n8 = 2 * v9 + 66; /*0xd09*/
    StartOfBuffer = (CHAR8 *)MemAllocZeroPool(n8); /*0xd11*/
    n310_1 = n310; /*0xd16*/
    %s%s = (unsigned __int8 *)L"%s&OFFSET=0&WIDTH=%016LX"; /*0xd1b*/
  }
  StartOfBuffer_1 = (__int64)StartOfBuffer; /*0xd58*/
  HiiCfgArrayGet(StartOfBuffer, n8, %s%s, L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00", n310_1); /*0xd5b*/
  if ( !StartOfBuffer_1 ) /*0xd63*/
    return 0; /*0xd63*/
  Config = HiiConfigRoutingExtractConfig(StartOfBuffer_1, a4, (__int64)n310); /*0xd7a*/
  MemFreePool(); /*0xd7d*/
  if ( !Config ) /*0xd85*/
    return 0; /*0xd65*/
  v16 = StrLen(L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00"); /*0xd8e*/
  StringByLanguage = HiiGetStringByLanguage(a1, RstHiiConfig, Config + 2 * v16 + 2, v17); /*0xda6*/
  MemFreePool(); /*0xda9*/
  return StringByLanguage != 0; /*0xdc8*/
}

// Function: HiiGetHiiHandle @ 0xdd4 (0xab bytes)
// Index: 10/906

__int64 __fastcall HiiGetHiiHandle(EFI_HII_HANDLE HiiHandle)
{
  __int64 v3; // rax
  __int64 v4; // rbx
  char v5; // [rsp+38h] [rbp+10h] BYREF
  __int64 v6; // [rsp+40h] [rbp+18h] BYREF

  if ( !HiiHandle ) /*0xded*/
    DebugAssert( /*0xe00*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLanguage.c",
      0x2Fu,
      "HiiHandle != ((void *) 0)");
  v6 = 0; /*0xe0c*/
  if ( (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, char *, __int64 *))(qword_58080 + 24))( /*0xe32*/
         qword_58080,
         HiiHandle,
         &v5,
         &v6) != 0x8000000000000005uLL )
    return 0; /*0xe32*/
  v3 = MemAllocZeroPool(v6); /*0xe3d*/
  v4 = v3; /*0xe42*/
  if ( !v3 ) /*0xe48*/
    return 0; /*0xe48*/
  if ( (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, __int64, __int64 *))(qword_58080 + 24))( /*0xe65*/
         qword_58080,
         HiiHandle,
         v3,
         &v6) < 0 )
  {
    MemFreePool(); /*0xe6a*/
    return 0; /*0xe36*/
  }
  return v4; /*0xe79*/
}

// Function: HiiCreateEventEx @ 0xe80 (0x181 bytes)
// Index: 11/906

__int64 __fastcall HiiCreateEventEx(__int64 a1, __int64 n8, __int64 sub_599C, __int64 a4, __int64 a5)
{
  __int64 v9; // rax
  __int64 v10; // rax
  __int64 v11; // rdx
  __int64 v12; // r8
  __int64 v13; // r9
  _QWORD v15[3]; // [rsp+30h] [rbp-18h] BYREF

  if ( !a1 ) /*0xeb9*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0x98u, "ProtocolGuid != ((void *) 0)"); /*0xeca*/
  if ( !sub_599C ) /*0xedc*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0x99u, "NotifyFunction != ((void *) 0)"); /*0xeed*/
  if ( !a5 ) /*0xf02*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0x9Au, "Registration != ((void *) 0)"); /*0xf13*/
  v9 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64, _QWORD *))(qword_58070 + 80))( /*0xf37*/
         512,
         n8,
         sub_599C,
         a4,
         v15);
  if ( v9 < 0 ) /*0xf4d*/
  {
    DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9); /*0xf61*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0xA7u, "!EFI_ERROR (Status)"); /*0xf75*/
  }
  v10 = (*(__int64 (__fastcall **)(__int64, _QWORD, __int64))(qword_58070 + 168))(a1, v15[0], a5); /*0xf8e*/
  LOBYTE(v13) = 15; /*0xf94*/
  if ( v10 < 0 ) /*0xfa4*/
  {
    DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v10, v13); /*0xfb9*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0xB3u, "!EFI_ERROR (Status)"); /*0xfcd*/
  }
  (*(void (__fastcall **)(_QWORD, __int64, __int64, __int64))(qword_58070 + 104))(v15[0], v11, v12, v13); /*0xfde*/
  return v15[0]; /*0xffa*/
}

// Function: HiiGetStringByGuid @ 0x1004 (0x151 bytes)
// Index: 12/906

_BYTE *HiiGetStringByGuid(char *HiiHandle, char a2, ...)
{
  CHAR8 *v4; // rbp
  CHAR8 **v5; // r13
  unsigned __int64 n3; // rsi
  UINTN n3_1; // rbx
  CHAR8 n59_1; // al
  char *HiiHandle_1; // rdi
  char n59; // al
  _BYTE *result; // rax
  CHAR8 *String; // [rsp+70h] [rbp+18h] BYREF
  va_list Stringa; // [rsp+70h] [rbp+18h]
  va_list va1; // [rsp+78h] [rbp+20h] BYREF

  va_start(va1, a2);
  va_start(Stringa, a2);
  String = va_arg(va1, CHAR8 *); /*0x1004*/
  if ( !HiiHandle ) /*0x1032*/
    DebugAssert( /*0x1047*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c",
      0x54Fu,
      "SupportedLanguages != ((void *) 0)");
  v4 = String; /*0x104c*/
  if ( String ) /*0x1054*/
  {
    va_copy((va_list)v5, Stringa); /*0x105a*/
    do /*0x1114*/
    {
      n3 = 3; /*0x1062*/
      if ( AsciiStrLen(v4) <= 3 ) /*0x106f*/
        n3_1 = AsciiStrLen(v4); /*0x107e*/
      else
        n3_1 = 3; /*0x1071*/
      if ( a2 ) /*0x1084*/
      {
LABEL_29:
        while ( n3_1 ) /*0x110e*/
        {
          HiiHandle_1 = HiiHandle; /*0x10a7*/
          if ( *HiiHandle ) /*0x10a3*/
          {
            while ( 1 ) /*0x10af*/
            {
              if ( a2 ) /*0x10af*/
                goto LABEL_37; /*0x10af*/
              while ( *HiiHandle_1 == 59 ) /*0x10be*/
                ++HiiHandle_1; /*0x10b7*/
              n59 = *HiiHandle_1; /*0x10c0*/
              n3 = 0; /*0x10c2*/
              while ( n59 && n59 != 59 ) /*0x10c8*/
                n59 = HiiHandle_1[++n3]; /*0x10cd*/
              if ( n3_1 <= n3 ) /*0x10d7*/
              {
LABEL_37:
                if ( !StrToDecimal(HiiHandle_1, v4, n3_1) ) /*0x10e2*/
                  break; /*0x10e2*/
              }
              HiiHandle_1 += n3; /*0x10ec*/
              if ( !*HiiHandle_1 ) /*0x10ef*/
                goto LABEL_25; /*0x10f2*/
            }
            result = (_BYTE *)MemAllocZeroPool(n3 + 1); /*0x1136*/
            if ( result ) /*0x113e*/
            {
              if ( n3 ) /*0x1143*/
                return RstCopyMemOverlapped(result, HiiHandle_1, n3); /*0x114e*/
              return result; /*0x114e*/
            }
            return 0; /*0x113e*/
          }
LABEL_25:
          if ( a2 ) /*0x10f7*/
            break; /*0x10f7*/
          if ( !--n3_1 ) /*0x10fd*/
            break; /*0x10fd*/
          do /*0x1109*/
          {
            if ( v4[n3_1] == 45 ) /*0x1103*/
              break; /*0x1103*/
            --n3_1; /*0x1105*/
          }
          while ( n3_1 ); /*0x1109*/
        }
      }
      else
      {
        n59_1 = *v4; /*0x108a*/
        n3_1 = 0; /*0x108d*/
        if ( *v4 ) /*0x108a*/
        {
          do /*0x109f*/
          {
            if ( n59_1 == 59 ) /*0x1095*/
              break; /*0x1095*/
            n59_1 = v4[++n3_1]; /*0x109a*/
          }
          while ( n59_1 ); /*0x109f*/
          goto LABEL_29; /*0x109f*/
        }
      }
      v4 = *++v5; /*0x1114*/
    }
    while ( *v5 ); /*0x1114*/
  }
  return 0; /*0x1123*/
}

// Function: DebugPrintSerial @ 0x1158 (0xb5 bytes)
// Index: 13/906

char DebugPrintSerial(int a1, char *a2, ...)
{
  UINTN i_1; // rax
  unsigned __int8 *StartOfBuffer_1; // rcx
  UINTN i; // r11
  unsigned __int8 v7; // al
  CHAR8 StartOfBuffer[280]; // [rsp+30h] [rbp-118h] BYREF
  va_list va; // [rsp+160h] [rbp+18h] BYREF

  va_start(va, a2);
  if ( !a2 ) /*0x1182*/
    DebugAssert( /*0x1195*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseDebugLibSerialPort\\DebugLib.c",
      0x4Fu,
      "Format != ((void *) 0)");
  LODWORD(i_1) = GetDebugLevel(); /*0x119a*/
  if ( ((unsigned int)i_1 & a1) != 0 ) /*0x11a5*/
  {
    AsciiSPrint(StartOfBuffer, 0x100u, 0, a2, va, 0); /*0x11ca*/
    i_1 = AsciiStrLen(StartOfBuffer); /*0x11d4*/
    StartOfBuffer_1 = (unsigned __int8 *)StartOfBuffer; /*0x11d9*/
    for ( i = i_1; i; ++StartOfBuffer_1 ) /*0x11e4*/
    {
      --i; /*0x11e6*/
      do /*0x11f1*/
        v7 = __inbyte(0x3FDu); /*0x11ee*/
      while ( (v7 & 0x20) == 0 ); /*0x11f1*/
      LOBYTE(i_1) = *StartOfBuffer_1; /*0x11f3*/
      __outbyte(0x3F8u, *StartOfBuffer_1); /*0x11fa*/
    }
  }
  return i_1; /*0x1203*/
}

// Function: DebugAssert @ 0x1210 (0x90 bytes)
// Index: 14/906

void __cdecl DebugAssert(const CHAR8 *FileName, UINTN LineNumber, const CHAR8 *Description)
{
  double v3; // xmm3_8
  UINTN i_1; // rax
  unsigned __int8 *StartOfBuffer_1; // rcx
  UINTN i; // r11
  unsigned __int8 v7; // al
  CHAR8 StartOfBuffer[264]; // [rsp+30h] [rbp-108h] BYREF

  HiiMemAlloc(StartOfBuffer, 0x100u, "ASSERT %a(%d): %a\n", v3, LineNumber, *(double *)&Description);
  i_1 = AsciiStrLen(StartOfBuffer); /*0x123f*/
  StartOfBuffer_1 = (unsigned __int8 *)StartOfBuffer; /*0x1244*/
  for ( i = i_1; i; ++StartOfBuffer_1 ) /*0x124f*/
  {
    --i; /*0x1251*/
    do /*0x125c*/
      v7 = __inbyte(0x3FDu); /*0x1259*/
    while ( (v7 & 0x20) == 0 ); /*0x125c*/
    __outbyte(0x3F8u, *StartOfBuffer_1); /*0x1265*/
  }
}

// Function: RstDebugEnabled @ 0x12a0 (0x9 bytes)
// Index: 15/906

char RstDebugEnabled()
{
  return 1; /*0x12a8*/
}

// Function: RstDebugEnabled2 @ 0x12ac (0xb bytes)
// Index: 16/906

char RstDebugEnabled2()
{
  return 1; /*0x12b6*/
}

// Function: HiiCfgArrayGet @ 0x12b8 (0x97 bytes)
// Index: 17/906

UINTN HiiCfgArrayGet(CHAR8 *StartOfBuffer, unsigned __int64 a2, unsigned __int8 *a3, ...)
{
  va_list va; // [rsp+68h] [rbp+20h] BYREF

  va_start(va, a3);
  if ( ((unsigned __int8)StartOfBuffer & 1) != 0 ) /*0x12df*/
    DebugAssert( /*0x12f4*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
      0x47u,
      "(((UINTN) (StartOfBuffer)) & 0x01) == 0");
  if ( ((unsigned __int8)a3 & 1) != 0 ) /*0x1306*/
    DebugAssert( /*0x131b*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
      0x48u,
      "(((UINTN) (FormatString)) & 0x01) == 0");
  return AsciiSPrint(StartOfBuffer, a2 >> 1, FormatString, a3, va, 0); /*0x1347*/
}

// Function: HiiCfgArraySet @ 0x1350 (0x6f bytes)
// Index: 18/906

UINTN HiiCfgArraySet(CHAR8 *StartOfBuffer, unsigned __int64 n256, char *%a_SN:%a__%a, ...)
{
  va_list va; // [rsp+68h] [rbp+20h] BYREF

  va_start(va, %a_SN:%a__%a);
  if ( ((unsigned __int8)StartOfBuffer & 1) != 0 ) /*0x1376*/
    DebugAssert( /*0x138b*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
      0xD7u,
      "(((UINTN) (StartOfBuffer)) & 0x01) == 0");
  return AsciiSPrint(StartOfBuffer, n256 >> 1, FormatString_0, %a_SN:%a__%a, va, 0); /*0x13b7*/
}

// Function: HiiCfgArrayNext @ 0x13c0 (0x6a bytes)
// Index: 19/906

unsigned __int64 __fastcall HiiCfgArrayNext(_BYTE *StartOfBuffer, int n160, unsigned __int64 a3, unsigned __int64 n2)
{
  if ( ((unsigned __int8)StartOfBuffer & 1) != 0 ) /*0x13e4*/
    DebugAssert( /*0x13f9*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
      0x16Cu,
      "(((UINTN) (Buffer)) & 0x01) == 0");
  return HiiBuildDevicePath(StartOfBuffer, 160, a3, n2); /*0x1424*/
}

// Function: HiiMemAlloc @ 0x142c (0x2c bytes)
// Index: 20/906

UINTN HiiMemAlloc(CHAR8 *StartOfBuffer, UINTN n256, char *ASSERT_%a(%d):_%a_n, ...)
{
  va_list va; // [rsp+58h] [rbp+20h] BYREF

  va_start(va, ASSERT_%a(%d):_%a_n);
  return AsciiSPrint(StartOfBuffer, n256, 0, ASSERT_%a(%d):_%a_n, va, 0); /*0x1453*/
}

// Function: HiiMemFree @ 0x1458 (0x33 bytes)
// Index: 21/906

_BYTE *__fastcall HiiMemFree(
        _BYTE *StartOfBuffer,
        unsigned __int64 StartOfBuffer_1,
        __int64 i,
        __int16 n32,
        __int64 n2)
{
  __int64 j; // r10

  for ( j = 0; j < i; ++j ) /*0x145e*/
  {
    if ( (unsigned __int64)StartOfBuffer >= StartOfBuffer_1 ) /*0x1463*/
      break; /*0x1463*/
    *StartOfBuffer = n32; /*0x146b*/
    if ( n2 != 1 ) /*0x146e*/
      StartOfBuffer[1] = HIBYTE(n32); /*0x1477*/
    StartOfBuffer += n2; /*0x147a*/
  }
  return StartOfBuffer; /*0x148a*/
}

// Function: HiiDevicePathExtract @ 0x148c (0x7f bytes)
// Index: 22/906

_BYTE *__fastcall HiiDevicePathExtract(_BYTE *_r_n, unsigned __int64 a2, __int64 n16)
{
  int n16_1; // edi
  _BYTE *_r_n_1; // rbx
  unsigned __int64 n16_2; // rsi
  unsigned __int64 v7; // rtt

  n16_1 = n16; /*0x14a0*/
  _r_n_1 = _r_n; /*0x14a6*/
  *_r_n = 0; /*0x14a9*/
  n16_2 = (unsigned int)n16; /*0x14ac*/
  do /*0x14f1*/
  {
    if ( !n16_1 ) /*0x14ba*/
      DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\DivU64x32Remainder.c", 0x2Fu, "Divisor != 0"); /*0x14cd*/
    ++_r_n_1; /*0x14d7*/
    v7 = a2; /*0x14da*/
    a2 /= n16_2; /*0x14e4*/
    *_r_n_1 = a0123456789abcd[(unsigned int)(v7 % n16_2)]; /*0x14ec*/
  }
  while ( a2 ); /*0x14f1*/
  return _r_n_1; /*0x1505*/
}

// Function: HiiBuildDevicePath @ 0x150c (0x1ec bytes)
// Index: 23/906

unsigned __int64 __fastcall HiiBuildDevicePath(
        _BYTE *StartOfBuffer,
        int n160,
        unsigned __int64 a3,
        unsigned __int64 n0x26)
{
  _BYTE *StartOfBuffer_1; // rbx
  char v7; // bp
  _BYTE *StartOfBuffer_2; // r13
  unsigned __int64 StartOfBuffer_3; // r12
  _BYTE *v10; // rsi
  unsigned __int64 v11; // r11
  unsigned __int64 v12; // rcx
  unsigned __int64 v13; // rdx
  int v14; // ebp
  __int16 v15; // r9
  __int64 v16; // r8
  __int64 v17; // rax
  _BYTE *StartOfBuffer_4; // rax
  __int64 v19; // rcx
  _BYTE _r_n[48]; // [rsp+30h] [rbp-48h] BYREF

  StartOfBuffer_1 = StartOfBuffer; /*0x1530*/
  v7 = -96; /*0x1533*/
  if ( !StartOfBuffer ) /*0x153f*/
    DebugAssert( /*0x1552*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLibInternal.c",
      0xBCu,
      "Buffer != ((void *) 0)");
  if ( n0x26 >= 0x26 ) /*0x1565*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLibInternal.c", 0xBDu, "Width < 38"); /*0x157a*/
  StartOfBuffer_2 = StartOfBuffer_1; /*0x1587*/
  if ( !n0x26 ) /*0x158a*/
  {
    v7 = 0x80; /*0x158a*/
    n0x26 = 37; /*0x1594*/
  }
  StartOfBuffer_3 = (unsigned __int64)&StartOfBuffer_1[2 * n0x26]; /*0x1598*/
  v10 = HiiDevicePathExtract(_r_n, a3, v7 < 0 ? 16LL : 10LL);
  v11 = v10 - _r_n; /*0x15f1*/
  if ( (v7 & 0x20) != 0 ) /*0x15f8*/
    StartOfBuffer_1 = HiiMemFree(StartOfBuffer_1, StartOfBuffer_3, n0x26 - v11, 48, 2); /*0x161a*/
  v12 = v11 % 3; /*0x1634*/
  if ( v11 % 3 ) /*0x1634*/
    v12 = 3 - v12; /*0x1641*/
  v13 = 0; /*0x1644*/
  if ( v11 ) /*0x1649*/
  {
    v14 = v7 & 8; /*0x164b*/
    do /*0x16b0*/
    {
      v15 = (char)*v10; /*0x164e*/
      v16 = 0; /*0x1652*/
      do /*0x1672*/
      {
        if ( (unsigned __int64)StartOfBuffer_1 >= StartOfBuffer_3 ) /*0x1658*/
          break; /*0x1658*/
        ++v16; /*0x165d*/
        *StartOfBuffer_1 = v15; /*0x1660*/
        StartOfBuffer_1 += 2; /*0x1667*/
        *(StartOfBuffer_1 - 1) = HIBYTE(v15); /*0x166f*/
      }
      while ( v16 < 1 ); /*0x1672*/
      --v10; /*0x1674*/
      if ( v14 ) /*0x167a*/
      {
        if ( ++v12 == 3 ) /*0x1683*/
        {
          v12 = 0; /*0x1689*/
          if ( v13 + 1 < v11 ) /*0x168e*/
          {
            v17 = 0; /*0x1690*/
            do /*0x16a8*/
            {
              if ( (unsigned __int64)StartOfBuffer_1 >= StartOfBuffer_3 ) /*0x1695*/
                break; /*0x1695*/
              ++v17; /*0x1697*/
              *StartOfBuffer_1 = 44; /*0x169a*/
              StartOfBuffer_1[1] = 0; /*0x169d*/
              StartOfBuffer_1 += 2; /*0x16a0*/
            }
            while ( v17 < 1 ); /*0x16a8*/
          }
        }
      }
      ++v13; /*0x16aa*/
    }
    while ( v13 < v11 ); /*0x16b0*/
  }
  StartOfBuffer_4 = StartOfBuffer_1; /*0x16b2*/
  v19 = 0; /*0x16b5*/
  do /*0x16d3*/
  {
    if ( (unsigned __int64)StartOfBuffer_4 >= StartOfBuffer_3 + 2 ) /*0x16bf*/
      break; /*0x16bf*/
    ++v19; /*0x16c1*/
    *StartOfBuffer_4 = 0; /*0x16c4*/
    StartOfBuffer_4[1] = 0; /*0x16c7*/
    StartOfBuffer_4 += 2; /*0x16cb*/
  }
  while ( v19 < 1 ); /*0x16d3*/
  return (unsigned __int64)(StartOfBuffer_1 - StartOfBuffer_2) >> 1; /*0x16ef*/
}

// Function: AsciiSPrint @ 0x16f8 (0xf08 bytes)
// Index: 24/906

UINTN AsciiSPrint(CHAR8 *StartOfBuffer, UINTN BufferSize, const CHAR8 *FormatString, ...)
{
  const CHAR16 *v3; // r14
  __int64 v4; // r12
  CHAR8 *StartOfBuffer_1; // r13
  const CHAR16 *StartOfBuffer_2; // rsi
  __int64 n2_1; // rdi
  CHAR8 *StartOfBuffera_1; // rbx
  unsigned __int64 v11; // r9
  __int64 n2_2; // r8
  __int64 n0xFFFF; // r10
  int v14; // eax
  unsigned __int64 n10; // rcx
  int *v16; // r15
  unsigned __int64 n512_5; // r9
  char v18; // r11
  unsigned __int64 n512_3; // rsi
  unsigned __int64 n512_2; // rbp
  const char *_r_n_1; // rbx
  int *va_1; // rdx
  unsigned __int64 n13_1; // rcx
  __int64 v24; // rax
  unsigned __int64 v25; // rcx
  unsigned __int64 v26; // rcx
  unsigned __int64 v27; // rcx
  unsigned __int64 v28; // rcx
  unsigned __int64 n4; // rcx
  unsigned __int16 *v30; // r9
  __int64 n4_1; // rcx
  signed __int64 v32; // rbx
  char n32; // al
  char n32_1; // di
  __int64 n16; // r8
  unsigned __int64 v36; // rdi
  int v37; // ebp
  int v38; // e... [28186 chars total]

// Function: AsciiSPrint_w @ 0x2600 (0x22 bytes)
// Index: 25/906

UINTN sub_2600(
        CHAR8 *_r_n,
        UINTN n38,
        const CHAR8 *FormatString,
        const char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x,
        ...)
{
  return AsciiSPrint(_r_n, n38, FormatString); /*0x261d*/
}

// Function: Assert_59 @ 0x2624 (0x95 bytes)
// Index: 26/906

__int64 *__fastcall Assert_59(__int64 *a1, __int64 a2)
{
  __int64 v4; // rsi
  __int64 v5; // rsi

  v4 = StrToHex(a2); /*0x2648*/
  if ( !a1 ) /*0x2650*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0xDBu, "Buffer != ((void *) 0)"); /*0x2665*/
  *a1 = v4; /*0x266e*/
  v5 = StrToHex(a2 + 8); /*0x2681*/
  if ( a1 == (__int64 *)-8LL ) /*0x2689*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0xDBu, "Buffer != ((void *) 0)"); /*0x269e*/
  a1[1] = v5; /*0x26a3*/
  return a1; /*0x26b3*/
}

// Function: RstGuidCompare @ 0x26bc (0x6e bytes)
// Index: 27/906

bool __fastcall RstGuidCompare(__int64 a1, __int64 a2)
{
  __int64 v3; // rdi
  __int64 v4; // rbx
  __int64 v5; // rbp
  __int64 v6; // rax

  v3 = StrToHex((__int64)&unk_27860); /*0x26e2*/
  v4 = StrToHex(a2); /*0x26f1*/
  v5 = StrToHex((__int64)&unk_27868); /*0x26fd*/
  v6 = StrToHex(a2 + 8); /*0x2700*/
  return v3 == v4 && v5 == v6; /*0x2724*/
}

// Function: RstCopyMemOverlapped @ 0x272c (0xd2 bytes)
// Index: 28/906

_BYTE *__fastcall RstCopyMemOverlapped(_BYTE *a1, _BYTE *a2, __int64 a3)
{
  __int64 v4; // rsi
  _BYTE *v6; // rcx
  __int64 v7; // rdi
  _BYTE *v8; // rdx
  __int64 v9; // rcx

  v4 = a3; /*0x274d*/
  if ( a3 - 1 > (unsigned __int64)(-1LL - (_QWORD)a1) ) /*0x2765*/
    DebugAssert( /*0x2778*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\CopyMemWrapper.c",
      0x38u,
      "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)DestinationBuffer)");
  if ( v4 - 1 > (unsigned __int64)(-1LL - (_QWORD)a2) ) /*0x2792*/
    DebugAssert( /*0x27a7*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\CopyMemWrapper.c",
      0x39u,
      "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)SourceBuffer)");
  if ( a2 != a1 ) /*0x27af*/
  {
    if ( a2 <= a1 ) /*0x27b1*/
    {
      if ( a2 < a1 ) /*0x27cc*/
      {
        v8 = &a1[v4]; /*0x27ce*/
        v9 = v4; /*0x27d5*/
        do /*0x27e4*/
          *--v8 = a2[--v9]; /*0x27e2*/
        while ( v9 ); /*0x27e4*/
      }
    }
    else
    {
      v6 = a1; /*0x27b3*/
      v7 = a2 - a1; /*0x27b6*/
      do /*0x27c5*/
      {
        *v6 = v6[v7]; /*0x27bc*/
        ++v6; /*0x27be*/
        --v4; /*0x27c1*/
      }
      while ( v4 ); /*0x27c5*/
    }
  }
  return a1; /*0x27f8*/
}

// Function: RstMemZero @ 0x2800 (0x89 bytes)
// Index: 29/906

__int64 __fastcall RstMemZero(__int64 i, unsigned __int64 n8)
{
  unsigned __int64 n8_1; // rbx
  _BYTE *j; // rax

  n8_1 = n8; /*0x2810*/
  if ( !i && n8 ) /*0x2822*/
    DebugAssert( /*0x2835*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\ZeroMemWrapper.c",
      0x31u,
      "!(Buffer == ((void *) 0) && Length > 0)");
  if ( n8_1 > -i ) /*0x284d*/
    DebugAssert( /*0x2862*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\ZeroMemWrapper.c",
      0x32u,
      "Length <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)Buffer + 1)");
  for ( j = (_BYTE *)i; n8_1; --n8_1 ) /*0x286d*/
    *j++ = 0; /*0x286f*/
  return i; /*0x2883*/
}

// Function: UefiRuntimeServicesTableLibConstructor @ 0x288c (0x3a bytes)
// Index: 30/906

__int64 __fastcall UefiRuntimeServicesTableLibConstructor(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  RuntimeServices = (__int64)SystemTable->RuntimeServices; /*0x289b*/
  if ( !RuntimeServices ) /*0x28a7*/
    DebugAssert( /*0x28ba*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiRuntimeServicesTableLib\\UefiRuntimeServicesTableLib.c",
      0x2Fu,
      "gRT != ((void *) 0)");
  return 0; /*0x28c1*/
}

// Function: UefiBootServicesTableLibConstructor @ 0x28c8 (0xa2 bytes)
// Index: 31/906

__int64 __fastcall UefiBootServicesTableLibConstructor(__int64 ImageHandle, __int64 SystemTable)
{
  ::ImageHandle = ImageHandle; /*0x28d8*/
  if ( !ImageHandle ) /*0x28e8*/
    DebugAssert( /*0x28fb*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
      0x33u,
      "gImageHandle != ((void *) 0)");
  ::SystemTable = SystemTable; /*0x2907*/
  if ( !SystemTable ) /*0x2917*/
    DebugAssert( /*0x292a*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
      0x39u,
      "gST != ((void *) 0)");
  qword_58070 = *(_QWORD *)(SystemTable + 96); /*0x293a*/
  if ( !qword_58070 ) /*0x294a*/
    DebugAssert( /*0x295d*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
      0x3Fu,
      "gBS != ((void *) 0)");
  return 0; /*0x2964*/
}

// Function: Assert_73 @ 0x296c (0x36 bytes)
// Index: 32/906

char __fastcall Assert_73(const CHAR16 *FirstString)
{
  if ( !FirstString ) /*0x2981*/
    DebugAssert( /*0x2994*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
      0x54u,
      "Node != ((void *) 0)");
  return *((_BYTE *)FirstString + 1); /*0x299c*/
}

// Function: Assert_72 @ 0x29a4 (0x3f bytes)
// Index: 33/906

__int64 __fastcall Assert_72(__int64 a1)
{
  if ( !a1 ) /*0x29b9*/
    DebugAssert( /*0x29cc*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
      0x6Du,
      "Node != ((void *) 0)");
  return (unsigned __int16)StrCharToUpper(a1 + 2); /*0x29dd*/
}

// Function: Assert_71 @ 0x29e4 (0x40 bytes)
// Index: 34/906

__int64 __fastcall Assert_71(__int64 a1)
{
  if ( !a1 ) /*0x29f9*/
    DebugAssert( /*0x2a0e*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
      0x85u,
      "Node != ((void *) 0)");
  return a1 + Assert_72(a1); /*0x2a1e*/
}

// Function: Assert_66 @ 0x2a24 (0x61 bytes)
// Index: 35/906

bool __fastcall Assert_66(const CHAR16 *FirstString)
{
  if ( !FirstString ) /*0x2a3a*/
    DebugAssert( /*0x2a4f*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
      0xA3u,
      "Node != ((void *) 0)");
  if ( !FirstString ) /*0x2a61*/
    DebugAssert( /*0x2a74*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
      0x3Eu,
      "Node != ((void *) 0)");
  return *(_BYTE *)FirstString == 127; /*0x2a7f*/
}

// Function: Assert_69 @ 0x2a88 (0x5b bytes)
// Index: 36/906

char __fastcall Assert_69(const CHAR16 *FirstString)
{
  char v1; // bl

  v1 = 1; /*0x2a92*/
  if ( !FirstString ) /*0x2aa2*/
    DebugAssert( /*0x2ab7*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
      0xBEu,
      "Node != ((void *) 0)");
  if ( !Assert_66(FirstString) || Assert_73(FirstString) != -1 ) /*0x2ad2*/
    return 0; /*0x2ad4*/
  return v1; /*0x2add*/
}

// Function: Assert_57 @ 0x2ae4 (0x9c bytes)
// Index: 37/906

__int16 __fastcall Assert_57(char *i, unsigned __int64 n16)
{
  char *v4; // rbx

  if ( !i ) /*0x2b01*/
    DebugAssert( /*0x2b16*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
      0xF5u,
      "Node != ((void *) 0)");
  if ( n16 >= 0x10000 ) /*0x2b2c*/
    DebugAssert( /*0x2b41*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
      0xF6u,
      "Length < 0x10000");
  v4 = i + 2; /*0x2b4c*/
  if ( !v4 ) /*0x2b57*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0x41u, "Buffer != ((void *) 0)"); /*0x2b6a*/
  *(_WORD *)v4 = n16; /*0x2b6f*/
  return n16; /*0x2b7a*/
}

// Function: Assert_70 @ 0x2b80 (0x49 bytes)
// Index: 38/906

_BYTE *__fastcall Assert_70(_BYTE *a1)
{
  if ( !a1 ) /*0x2b95*/
    DebugAssert( /*0x2baa*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiDevicePathLib\\UefiDevicePathLib.c",
      0x110u,
      "Node != ((void *) 0)");
  return RstCopyMemOverlapped(a1, FirstString, 4); /*0x2bbf*/
}

// Function: Assert_105 @ 0x2bcc (0x48 bytes)
// Index: 39/906

__int64 __fastcall Assert_105(const CHAR16 *FirstString)
{
  const CHAR16 *FirstString_1; // rbx
  const CHAR16 *FirstString_2; // rdi

  FirstString_1 = FirstString; /*0x2bd6*/
  if ( !FirstString ) /*0x2bdc*/
    return 0; /*0x2bde*/
  FirstString_2 = FirstString; /*0x2be2*/
  while ( !Assert_69(FirstString) ) /*0x2bfc*/
  {
    FirstString_1 = (const CHAR16 *)Assert_71((__int64)FirstString_1); /*0x2bec*/
    FirstString = FirstString_1; /*0x2bef*/
  }
  return (char *)FirstString_1 - (char *)FirstString_2 + Assert_72((__int64)FirstString_1); /*0x2c0e*/
}

// Function: Assert_122 @ 0x2c14 (0xce bytes)
// Index: 40/906

_BYTE *__fastcall Assert_122(CHAR16 *FirstString, CHAR16 *FirstString_2)
{
  __int64 v2; // rbx
  CHAR16 *FirstString_1; // rdi
  unsigned __int64 n8; // rax
  __int64 v7; // r12
  __int64 v8; // r13
  _BYTE *v9; // rax
  _BYTE *v10; // rbp

  v2 = 0; /*0x2c2c*/
  FirstString_1 = FirstString; /*0x2c31*/
  if ( !FirstString ) /*0x2c37*/
  {
    FirstString_1 = (CHAR16 *)::FirstString; /*0x2c39*/
    if ( FirstString_2 ) /*0x2c43*/
      FirstString_1 = FirstString_2; /*0x2c43*/
    FirstString = FirstString_1; /*0x2c47*/
    goto LABEL_5; /*0x2c47*/
  }
  if ( !FirstString_2 ) /*0x2c6f*/
  {
LABEL_5:
    n8 = Assert_105(FirstString); /*0x2c4a*/
    if ( n8 ) /*0x2c52*/
      return MemAllocCopyPool(4, n8, (__int64)FirstString_1); /*0x2c64*/
    return (_BYTE *)v2; /*0x2c6a*/
  }
  v7 = Assert_105(FirstString); /*0x2c79*/
  v8 = Assert_105(FirstString_2); /*0x2c8b*/
  v9 = (_BYTE *)MemAllocPool(4, v8 + v7 - 4); /*0x2c8e*/
  v10 = v9; /*0x2c93*/
  if ( v9 ) /*0x2c99*/
  {
    if ( v7 ) /*0x2c9e*/
      v10 = RstCopyMemOverlapped(v9, FirstString_1, v7); /*0x2cae*/
    if ( v8 ) /*0x2cb4*/
      RstCopyMemOverlapped(&v10[v7 - 4], FirstString_2, v8); /*0x2cc1*/
  }
  return v10; /*0x2cd8*/
}

// Function: Assert_85 @ 0x2ce4 (0xd3 bytes)
// Index: 41/906

_BYTE *__fastcall Assert_85(CHAR16 *FirstString, char *p_i)
{
  _BYTE *v2; // rbx
  const CHAR16 *FirstString_2; // rdi
  unsigned __int64 n8; // rax
  __int64 v7; // rsi
  CHAR16 *FirstString_3; // rax
  CHAR16 *FirstString_1; // r12
  _BYTE *v11; // rax

  v2 = 0; /*0x2cfd*/
  if ( p_i ) /*0x2d08*/
  {
    v7 = Assert_72((__int64)p_i); /*0x2d49*/
    FirstString_3 = (CHAR16 *)MemAllocPool(4, v7 + 4); /*0x2d4c*/
    FirstString_1 = FirstString_3; /*0x2d51*/
    if ( !FirstString_3 ) /*0x2d57*/
      return 0; /*0x2d5b*/
    if ( v7 ) /*0x2d60*/
      FirstString_1 = (CHAR16 *)RstCopyMemOverlapped(FirstString_3, p_i, v7); /*0x2d70*/
    v11 = (_BYTE *)Assert_71((__int64)FirstString_1); /*0x2d76*/
    Assert_70(v11); /*0x2d7e*/
    v2 = Assert_122(FirstString, FirstString_1); /*0x2d91*/
    MemFreePool(); /*0x2d94*/
  }
  else
  {
    FirstString_2 = (const CHAR16 *)::FirstString; /*0x2d0d*/
    if ( FirstString ) /*0x2d14*/
      FirstString_2 = FirstString; /*0x2d14*/
    n8 = Assert_105(FirstString_2); /*0x2d1b*/
    if ( n8 ) /*0x2d23*/
      return MemAllocCopyPool(4, n8, (__int64)FirstString_2); /*0x2d33*/
  }
  return v2; /*0x2db0*/
}

// Function: RstUefiReadVariable @ 0x2db8 (0x33 bytes)
// Index: 42/906

__int64 __fastcall RstUefiReadVariable(__int64 a1)
{
  __int64 v1; // rax
  __int64 v2; // rcx
  __int64 v4; // [rsp+38h] [rbp+10h] BYREF

  v1 = (*(__int64 (__fastcall **)(__int64, void *, __int64 *))(qword_58070 + 152))(a1, &unk_27730, &v4); /*0x2dcf*/
  v2 = v4; /*0x2dd5*/
  if ( v1 < 0 ) /*0x2ddf*/
    return 0; /*0x2ddf*/
  return v2; /*0x2de6*/
}

// Function: Assert_36 @ 0x2dec (0x102 bytes)
// Index: 43/906

__int64 __fastcall Assert_36(CHAR16 *StartOfBuffer, const CHAR16 *GUID_)
{
  __int64 StartOfBuffer_1; // rbx
  __int64 StartOfBuffer_2; // rax

  StartOfBuffer_1 = (__int64)StartOfBuffer; /*0x2e07*/
  if ( !StartOfBuffer ) /*0x2e13*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x35u, "Destination != ((void *) 0)"); /*0x2e26*/
  if ( (StartOfBuffer_1 & 1) != 0 ) /*0x2e3b*/
    DebugAssert( /*0x2e50*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
      0x36u,
      "((UINTN) Destination & 0x00000001) == 0");
  if ( (StartOfBuffer_1 - (__int64)GUID_) >> 1 <= StrLen(GUID_) ) /*0x2e72*/
    DebugAssert( /*0x2e87*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
      0x3Bu,
      "(UINTN)(Destination - Source) > StrLen (Source)");
  if ( ((__int64)GUID_ - StartOfBuffer_1) >> 1 <= StrLen(GUID_) ) /*0x2ea9*/
    DebugAssert( /*0x2ebe*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
      0x3Cu,
      "(UINTN)(Source - Destination) > StrLen (Source)");
  StartOfBuffer_2 = StartOfBuffer_1; /*0x2ec3*/
  while ( *GUID_ ) /*0x2ed9*/
  {
    *(_WORD *)StartOfBuffer_1 = *GUID_; /*0x2ec8*/
    StartOfBuffer_1 += 2; /*0x2ecb*/
    ++GUID_; /*0x2ecf*/
  }
  *(_WORD *)StartOfBuffer_1 = 0; /*0x2edb*/
  return StartOfBuffer_2; /*0x2ee8*/
}

// Function: StrLen @ 0x2ef0 (0xbf bytes)
// Index: 44/906

UINTN __cdecl StrLen(const CHAR16 *String)
{
  const CHAR16 *v1; // rbx
  UINTN i; // rdi

  v1 = String; /*0x2f08*/
  if ( !String ) /*0x2f10*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0xA6u, "String != ((void *) 0)"); /*0x2f25*/
  if ( ((unsigned __int8)v1 & 1) != 0 ) /*0x2f36*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0xA7u, "((UINTN) String & 0x00000001) == 0"); /*0x2f4b*/
  for ( i = 0; *v1; ++i ) /*0x2f53*/
  {
    if ( i >= 0xF4240 ) /*0x2f70*/
      DebugAssert( /*0x2f85*/
        "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
        0xAFu,
        "Length < _gPcd_FixedAtBuild_PcdMaximumUnicodeStringLength");
    ++v1; /*0x2f90*/
  }
  return i; /*0x2fa9*/
}

// Function: StrCpyOrCat @ 0x2fb0 (0xfe bytes)
// Index: 45/906

__int64 __fastcall StrCpyOrCat(const CHAR16 *i, const CHAR16 *a2, unsigned __int64 n0xF4240)
{
  unsigned __int64 n0xF4240_1; // rdi
  const CHAR16 *i_1; // rbx

  n0xF4240_1 = n0xF4240; /*0x2fc6*/
  i_1 = i; /*0x2fcc*/
  if ( !n0xF4240 ) /*0x2fd2*/
    return 0; /*0x2fd4*/
  if ( 2 * StrLen(i) == -2 ) /*0x2ff1*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x130u, "StrSize (FirstString) != 0"); /*0x3006*/
  if ( 2 * StrLen(a2) == -2 ) /*0x3024*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x131u, "StrSize (SecondString) != 0"); /*0x3039*/
  if ( n0xF4240_1 > 0xF4240 ) /*0x3054*/
    DebugAssert( /*0x3069*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
      0x134u,
      "Length <= _gPcd_FixedAtBuild_PcdMaximumUnicodeStringLength");
  while ( *i_1 && *i_1 == *a2 && n0xF4240_1 > 1 ) /*0x3079*/
  {
    ++i_1; /*0x307b*/
    ++a2; /*0x307f*/
    --n0xF4240_1; /*0x3083*/
  }
  return *i_1 - *a2; /*0x30a8*/
}

// Function: Assert_44 @ 0x30b0 (0xd1 bytes)
// Index: 46/906

const CHAR16 *__fastcall Assert_44(const CHAR16 *a1, wchar_t *&GUID)
{
  const CHAR16 *v3; // rbx
  wchar_t *&GUID_1; // rdx
  const CHAR16 *v6; // rcx
  CHAR16 v7; // ax

  v3 = a1; /*0x30cb*/
  if ( 2 * StrLen(a1) == -2 ) /*0x30dd*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x1D7u, "StrSize (String) != 0"); /*0x30f2*/
  if ( 2 * StrLen(&GUID) == -2 ) /*0x3110*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x1D8u, "StrSize (SearchString) != 0"); /*0x3125*/
  if ( !*&GUID ) /*0x312a*/
    return v3; /*0x312f*/
  while ( 1 ) /*0x3162*/
  {
    v7 = *v3; /*0x3162*/
    if ( !*v3 ) /*0x3162*/
      return 0; /*0x316a*/
    &GUID_1 = &GUID; /*0x3134*/
    v6 = v3; /*0x3137*/
    if ( v7 == *&GUID ) /*0x313d*/
    {
      do /*0x3152*/
      {
        if ( !v7 ) /*0x3142*/
          break; /*0x3142*/
        ++v3; /*0x3144*/
        ++&GUID_1; /*0x3148*/
        v7 = *v3; /*0x314c*/
      }
      while ( *v3 == *&GUID_1 ); /*0x3152*/
    }
    if ( !*&GUID_1 ) /*0x3154*/
      break; /*0x3154*/
    if ( !*v3 ) /*0x315c*/
      return 0; /*0x315c*/
    v3 = v6 + 1; /*0x315e*/
  }
  return v6; /*0x3176*/
}

// Function: StrToUpper @ 0x3184 (0xe1 bytes)
// Index: 47/906

unsigned __int64 __fastcall StrToUpper(const CHAR16 *a1)
{
  unsigned __int64 v1; // rdi
  const CHAR16 *v2; // rbx
  int v3; // eax

  v1 = 0; /*0x3193*/
  v2 = a1; /*0x319c*/
  if ( 2 * StrLen(a1) == -2 ) /*0x31ae*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x28Au, "StrSize (String) != 0"); /*0x31c3*/
  while ( *v2 == 32 || *v2 == 9 ) /*0x31d2*/
    ++v2; /*0x31d4*/
  while ( *v2 == 48 ) /*0x31e8*/
    ++v2; /*0x31e1*/
  while ( (unsigned __int16)(*v2 - 48) <= 9u ) /*0x31f4*/
  {
    if ( v1 > (-1LL - (*v2 - 48)) / 0xAuLL ) /*0x3222*/
      DebugAssert( /*0x3237*/
        "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
        0x2A1u,
        "Result <= ((((UINTN) ~0) - (*String - L'0')) / 10)");
    v3 = *v2++ - 48; /*0x323f*/
    v1 = v3 + 10 * v1; /*0x324c*/
  }
  return v1; /*0x325f*/
}

// Function: AsciiStrLen @ 0x3268 (0x8b bytes)
// Index: 48/906

UINTN __cdecl AsciiStrLen(const CHAR8 *String)
{
  const CHAR8 *v1; // rbx
  UINTN i; // rdi

  v1 = String; /*0x3279*/
  if ( !String ) /*0x3281*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x4BAu, "String != ((void *) 0)"); /*0x3296*/
  for ( i = 0; *v1; ++i ) /*0x329d*/
  {
    if ( i >= 0xF4240 ) /*0x32ba*/
      DebugAssert( /*0x32cf*/
        "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
        0x4C2u,
        "Length < _gPcd_FixedAtBuild_PcdMaximumAsciiStringLength");
    ++v1; /*0x32da*/
  }
  return i; /*0x32ed*/
}

// Function: StrToDecimal @ 0x32f4 (0xe5 bytes)
// Index: 49/906

__int64 __fastcall StrToDecimal(const CHAR8 *HiiHandle, const CHAR8 *a2, unsigned __int64 n3)
{
  unsigned __int64 n3_1; // rsi
  const CHAR8 *HiiHandle_1; // rbx

  n3_1 = n3; /*0x3303*/
  HiiHandle_1 = HiiHandle; /*0x3309*/
  if ( !n3 ) /*0x330f*/
    return 0; /*0x3311*/
  if ( AsciiStrLen(HiiHandle) == -1 ) /*0x332a*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x5A8u, "AsciiStrSize (FirstString)"); /*0x333f*/
  if ( AsciiStrLen(a2) == -1 ) /*0x3359*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x5A9u, "AsciiStrSize (SecondString)"); /*0x336e*/
  if ( n3_1 > 0xF4240 ) /*0x3389*/
    DebugAssert( /*0x339e*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
      0x5ACu,
      "Length <= _gPcd_FixedAtBuild_PcdMaximumAsciiStringLength");
  while ( *HiiHandle_1 && *HiiHandle_1 == *a2 && n3_1 > 1 ) /*0x33ad*/
  {
    ++HiiHandle_1; /*0x33af*/
    ++a2; /*0x33b2*/
    --n3_1; /*0x33b5*/
  }
  return *HiiHandle_1 - *a2; /*0x33d3*/
}

// Function: StrHexToDecimal @ 0x33dc (0x149 bytes)
// Index: 50/906

const CHAR16 *__fastcall StrHexToDecimal(const CHAR8 *Intel, CHAR16 *a2)
{
  CHAR16 *v2; // rdi
  const CHAR16 *v4; // rbx

  v2 = a2; /*0x33fe*/
  if ( !a2 ) /*0x3414*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x7D0u, "Destination != ((void *) 0)"); /*0x3425*/
  if ( AsciiStrLen(Intel) == -1 ) /*0x3443*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x7D5u, "AsciiStrSize (Source) != 0"); /*0x3454*/
  if ( (char *)v2 - Intel <= AsciiStrLen(Intel) ) /*0x3473*/
    DebugAssert( /*0x3484*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
      0x7DAu,
      "(UINTN) ((CHAR8 *) Destination - Source) > AsciiStrLen (Source)");
  if ( Intel - (const CHAR8 *)v2 <= 2 * AsciiStrLen(Intel) ) /*0x34a6*/
    DebugAssert( /*0x34b7*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c",
      0x7DBu,
      "(UINTN) (Source - (CHAR8 *) Destination) > (AsciiStrLen (Source) * sizeof (CHAR16))");
  v4 = v2; /*0x34bc*/
  while ( *Intel ) /*0x34d3*/
    *v2++ = *Intel++; /*0x34c4*/
  *v2 = 0; /*0x34dc*/
  if ( 2 * StrLen(v4) == -2 ) /*0x34f1*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\String.c", 0x7EAu, "StrSize (ReturnValue) != 0"); /*0x3502*/
  return v4; /*0x351e*/
}

// Function: StrCharToUpper @ 0x3528 (0x36 bytes)
// Index: 51/906

__int16 __fastcall StrCharToUpper(__int64 a1)
{
  if ( !a1 ) /*0x353d*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0x26u, "Buffer != ((void *) 0)"); /*0x3550*/
  return *(_WORD *)a1; /*0x3558*/
}

// Function: StrLenAscii @ 0x3560 (0x37 bytes)
// Index: 52/906

__int64 __fastcall StrLenAscii(unsigned int *a1)
{
  if ( !a1 ) /*0x3575*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0x8Du, "Buffer != ((void *) 0)"); /*0x358a*/
  return *a1; /*0x3591*/
}

// Function: StrToHex @ 0x3598 (0x38 bytes)
// Index: 53/906

__int64 __fastcall StrToHex(__int64 a1)
{
  if ( !a1 ) /*0x35ad*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\Unaligned.c", 0xC0u, "Buffer != ((void *) 0)"); /*0x35c2*/
  return *(_QWORD *)a1; /*0x35ca*/
}

// Function: MemAllocPool @ 0x35d0 (0x2e bytes)
// Index: 54/906

__int64 __fastcall MemAllocPool(int n4, unsigned __int64 n8)
{
  __int64 v2; // rax
  __int64 v3; // rcx
  __int64 v5; // [rsp+40h] [rbp+18h] BYREF

  v2 = (*(__int64 (__fastcall **)(__int64, unsigned __int64, __int64 *))(qword_58070 + 64))(4, n8, &v5); /*0x35e5*/
  v3 = v5; /*0x35e8*/
  if ( v2 < 0 ) /*0x35f2*/
    return 0; /*0x35f2*/
  return v3; /*0x35f9*/
}

// Function: MemAllocZeroPool @ 0x3600 (0x2c bytes)
// Index: 55/906

__int64 __fastcall MemAllocZeroPool(unsigned __int64 n8)
{
  __int64 i; // rax

  i = MemAllocPool(4, n8); /*0x3611*/
  if ( i ) /*0x3619*/
    return RstMemZero(i, n8); /*0x3621*/
  return i; /*0x3626*/
}

// Function: MemAllocCopyPool @ 0x362c (0x94 bytes)
// Index: 56/906

_BYTE *__fastcall MemAllocCopyPool(int n4, unsigned __int64 n8, __int64 FirstString)
{
  _BYTE *result; // rax

  if ( !FirstString ) /*0x3649*/
    DebugAssert( /*0x365e*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c",
      0x235u,
      "Buffer != ((void *) 0)");
  if ( n8 > -FirstString ) /*0x3676*/
    DebugAssert( /*0x368b*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c",
      0x236u,
      "AllocationSize <= (0xFFFFFFFFFFFFFFFFULL - (UINTN) Buffer + 1)");
  result = (_BYTE *)MemAllocPool(4, n8); /*0x3698*/
  if ( result ) /*0x36a0*/
  {
    if ( n8 ) /*0x36a5*/
      return RstCopyMemOverlapped(result, (_BYTE *)FirstString, n8); /*0x36b0*/
  }
  return result; /*0x36ba*/
}

// Function: MemFreePool @ 0x36c0 (0x54 bytes)
// Index: 57/906

void MemFreePool()
{
  __int64 v0; // rax

  v0 = (*(__int64 (**)(void))(qword_58070 + 72))(); /*0x36cb*/
  if ( v0 < 0 ) /*0x36dc*/
  {
    DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v0); /*0x36f2*/
    DebugAssert( /*0x370a*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c",
      0x32Fu,
      "!EFI_ERROR (Status)");
  }
}

// Function: ConsolePrintBoxed @ 0x3714 (0x345 bytes)
// Index: 58/906

__int64 ConsolePrintBoxed(__int64 n23, __int16 *p_n23, ...)
{
  const CHAR16 *v2; // rsi
  UINTN v4; // r12
  unsigned __int64 v5; // rbp
  const CHAR16 *v6; // rbx
  const CHAR16 **v7; // rdi
  __int64 v8; // rdi
  unsigned __int64 v9; // rax
  UINTN v10; // r15
  unsigned __int64 v11; // r13
  unsigned __int64 v12; // rbp
  _WORD *v13; // rbx
  unsigned __int64 v14; // r12
  __int64 v15; // r14
  unsigned __int64 v16; // r13
  UINTN v17; // rbp
  __int64 v18; // r8
  CHAR16 *v19; // rdx
  _BYTE *v20; // rcx
  __int64 v21; // rdx
  __int64 result; // rax
  unsigned __int64 v23; // [rsp+20h] [rbp-98h]
  va_list v24; // [rsp+28h] [rbp-90h]
  __int64 v25; // [rsp+30h] [rbp-88h] BYREF
  __int64 v26; // [rsp+38h] [rbp-80h] BYREF
  unsigned __int64 v27; // [rsp+40h] [rbp-78h]
  char v28[8]; // [rsp+48h] [rbp-70h] BYREF
  char v29[4]; // [rsp+50h] [rbp-68h] BYREF
  int v30; // [rsp+54h] [rbp-64h]
  int v31; // [rsp+58h] [rbp-60h]
  int v32; // [rsp+5Ch] [rbp-5Ch]
  int v33; // [rsp+60h] [rbp-58h]
  char v34; // [rsp+64h] [rbp-54h]
  const CHAR16 *v36; // [rsp+D0h] [rbp+18h] BYREF
  va_list va; // [rsp+D0h] [rbp+18h]
  va_list va1; // [rsp+D8h] [rbp+20h] BYREF

  va_start(va1, p_n23);
  va_start(va, p_n23);
  v36 = va_arg(va1, const CHAR16 *); /*0x3714*/
  v2 = v36; /*0x3733*/
  v4 = 0; /*0x373d*/
  v5 = 0; /*0x3740*/
  v6 = v36; /*0x3743*/
  if ( v36 ) /*0x3749*/
  {
    va_copy((va_list)v7, va); /*0x374b*/
    do /*0x376e*/
    {
      if ( v4 <= StrLen(v6) ) /*0x375a*/
        v4 = StrLen(v6); /*0x3764*/
      ++v7; /*0x3767*/
      ++v5; /*0x376b*/
      v6 = *v7; /*0x376e*/
    }
    while ( *v7 ); /*0x376e*/
  }
  if ( !v5 ) /*0x3784*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\Console.c", 0x15Bu, "NumberOfLines != 0"); /*0x3799*/
  if ( !v4 ) /*0x37ac*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\Console.c", 0x160u, "MaxLength != 0"); /*0x37c1*/
  v8 = *(_QWORD *)(SystemTable + 64LL); /*0x37d8*/
  RstCopyMemOverlapped(v29, *(_BYTE **)(v8 + 72), 24); /*0x37e0*/
  (*(void (__fastcall **)(__int64, _QWORD, __int64 *, __int64 *))(v8 + 24))(v8, v30, &v26, &v25); /*0x37f7*/
  (*(void (__fastcall **)(__int64, _QWORD))(v8 + 64))(v8, 0); /*0x37ff*/
  (*(void (__fastcall **)(__int64, __int64))(v8 + 40))(v8, n23); /*0x3808*/
  v9 = v25 - 3; /*0x3810*/
  if ( v5 < v25 - 3 ) /*0x3817*/
    v9 = v5; /*0x3817*/
  v10 = v26 - 2; /*0x3820*/
  v23 = v9; /*0x3824*/
  if ( v4 < v26 - 2 ) /*0x382c*/
    v10 = v4; /*0x382c*/
  v11 = (v25 - v9 - 3) >> 1; /*0x3843*/
  v12 = (v26 - v10 - 2) >> 1; /*0x3846*/
  v27 = v12; /*0x3849*/
  v13 = (_WORD *)MemAllocZeroPool(2 * v10 + 6); /*0x385a*/
  if ( !v13 ) /*0x3862*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\Console.c", 0x18Bu, "Line != ((void *) 0)"); /*0x3877*/
  v14 = 2 * v10 + 4; /*0x387c*/
  MemSet((__int64)v13, v14, 9472); /*0x388d*/
  v15 = v10; /*0x3898*/
  *v13 = 9484; /*0x38a0*/
  v13[v10 + 1] = 9488; /*0x38a7*/
  *(_WORD *)((char *)v13 + v14) = 0; /*0x38b5*/
  (*(void (__fastcall **)(__int64, unsigned __int64, unsigned __int64))(v8 + 56))(v8, v12, v11); /*0x38ba*/
  v16 = v11 + 1; /*0x38c3*/
  (*(void (__fastcall **)(__int64, _WORD *))(v8 + 8))(v8, v13); /*0x38c6*/
  if ( v2 ) /*0x38ce*/
  {
    va_copy(v24, va); /*0x38dc*/
    do /*0x38e1*/
    {
      if ( !v23 ) /*0x38e6*/
        break; /*0x38e6*/
      v17 = StrLen(v2); /*0x3900*/
      MemSet((__int64)v13, 2 * v10 + 4, 32); /*0x3903*/
      if ( v17 > v10 ) /*0x390b*/
      {
        if ( v15 * 2 ) /*0x392d*/
        {
          v20 = v13 + 1; /*0x3932*/
          v18 = 2 * v10; /*0x3936*/
          v19 = (CHAR16 *)&v2[(v17 - v10) >> 1]; /*0x393c*/
          goto LABEL_24; /*0x393c*/
        }
      }
      else
      {
        v18 = 2 * v17; /*0x390d*/
        if ( 2 * v17 ) /*0x390d*/
        {
          v19 = (CHAR16 *)v2; /*0x391a*/
          v20 = &v13[((v10 - v17) >> 1) + 1]; /*0x3923*/
LABEL_24:
          RstCopyMemOverlapped(v20, v19, v18); /*0x3940*/
        }
      }
      v12 = v27; /*0x3945*/
      *v13 = 9474; /*0x3951*/
      v13[v15 + 1] = 9474; /*0x395d*/
      *(_WORD *)((char *)v13 + v14) = 0; /*0x3963*/
      (*(void (__fastcall **)(__int64, unsigned __int64, unsigned __int64))(v8 + 56))(v8, v12, v16++); /*0x3968*/
      (*(void (__fastcall **)(__int64, _WORD *))(v8 + 8))(v8, v13); /*0x3974*/
      --v23; /*0x397c*/
      v2 = (const CHAR16 *)v24[1]; /*0x3987*/
      ++v24; /*0x398a*/
    }
    while ( v2 ); /*0x38e1*/
  }
  MemSet((__int64)v13, 2 * v10 + 4, 9472); /*0x3998*/
  *v13 = 9492; /*0x39b1*/
  *(_WORD *)((char *)v13 + v14) = 0; /*0x39c2*/
  v13[v15 + 1] = 9496; /*0x39c7*/
  (*(void (__fastcall **)(__int64, unsigned __int64, unsigned __int64))(v8 + 56))(v8, v12, v16); /*0x39cd*/
  (*(void (__fastcall **)(__int64, _WORD *))(v8 + 8))(v8, v13); /*0x39d6*/
  MemFreePool(); /*0x39dc*/
  LOBYTE(v21) = v34; /*0x39e1*/
  (*(void (__fastcall **)(__int64, __int64))(v8 + 64))(v8, v21); /*0x39e8*/
  (*(void (__fastcall **)(__int64, _QWORD, _QWORD))(v8 + 56))(v8, v32, v33); /*0x39f8*/
  result = (*(__int64 (__fastcall **)(__int64, _QWORD))(v8 + 40))(v8, v31); /*0x3a03*/
  if ( p_n23 ) /*0x3a11*/
  {
    (*(void (__fastcall **)(__int64, __int64, char *))(qword_58070 + 96))( /*0x3a31*/
      1,
      *(_QWORD *)(SystemTable + 48LL) + 16LL,
      v28);
    return (*(__int64 (__fastcall **)(_QWORD, __int16 *))(*(_QWORD *)(SystemTable + 48LL) + 8LL))( /*0x3a45*/
             *(_QWORD *)(SystemTable + 48LL),
             p_n23);
  }
  return result; /*0x3a48*/
}

// Function: LocateHandleBuffer @ 0x3a5c (0x166 bytes)
// Index: 59/906

__int64 __fastcall LocateHandleBuffer(__int64 a1, __int64 SystemTable)
{
  __int64 v2; // rax
  __int64 v3; // rax
  __int64 v4; // rax
  __int64 v5; // r9

  v2 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27960, 0, &qword_58080); /*0x3a79*/
  if ( v2 < 0 ) /*0x3a93*/
  {
    DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v2); /*0x3aa7*/
    DebugAssert( /*0x3abf*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
      0x58u,
      "!EFI_ERROR (Status)");
  }
  v3 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_279A0, 0, &qword_58090); /*0x3adb*/
  if ( v3 < 0 ) /*0x3aef*/
  {
    DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v3); /*0x3b03*/
    DebugAssert( /*0x3b1b*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
      0x5Eu,
      "!EFI_ERROR (Status)");
  }
  v4 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27970, 0, &qword_58098); /*0x3b37*/
  LOBYTE(v5) = 15; /*0x3b3d*/
  if ( v4 < 0 ) /*0x3b4d*/
  {
    DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v4, v5); /*0x3b62*/
    DebugAssert( /*0x3b7a*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
      0x64u,
      "!EFI_ERROR (Status)");
  }
  (*(void (__fastcall **)(void *, _QWORD, void *, __int64))(qword_58070 + 320))(&unk_279C0, 0, &unk_58078, v5); /*0x3b96*/
  (*(void (__fastcall **)(void *, _QWORD, void *))(qword_58070 + 320))(&unk_279B0, 0, &unk_58088); /*0x3bb3*/
  return 0; /*0x3bbb*/
}

// Function: GetDebugLevel @ 0x3bc4 (0x132 bytes)
// Index: 60/906

__int64 GetDebugLevel()
{
  __int64 result; // rax
  unsigned __int64 n8_1; // rbx
  __int64 v2; // r10
  __int64 v3; // rax
  _WORD *NextBlock; // rax
  _WORD *v5; // rbx
  __int64 n8; // [rsp+40h] [rbp+8h] BYREF
  unsigned int v7; // [rsp+48h] [rbp+10h] BYREF

  if ( !qword_580A8 ) /*0x3bd8*/
    return 0x80000000LL; /*0x3be0*/
  if ( !byte_580A0 ) /*0x3bec*/
  {
    n8_1 = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)(qword_580A8 + 96) + 24LL))(31); /*0x3c0c*/
    (*(void (__fastcall **)(unsigned __int64))(*(_QWORD *)(qword_580A8 + 96) + 32LL))(n8_1); /*0x3c0f*/
    if ( n8_1 <= 8 ) /*0x3c16*/
    {
      v2 = *(_QWORD *)(qword_580A8 + 88); /*0x3c2f*/
      n8 = 8; /*0x3c47*/
      v3 = (*(__int64 (__fastcall **)(const wchar_t *, void *, _QWORD, __int64 *, unsigned int *))(v2 + 72))( /*0x3c50*/
             L"EFIDebug",
             &unk_27860,
             0,
             &n8,
             &v7);
      if ( v3 == 0xA000000000000002uLL ) /*0x3c61*/
      {
        NextBlock = (_WORD *)HiiGetNextBlock(); /*0x3c7b*/
        v5 = HiiBlockExtract(4, NextBlock); /*0x3c8f*/
        if ( v5 ) /*0x3c95*/
        {
          do /*0x3cbf*/
          {
            if ( RstGuidCompare((__int64)&unk_27860, (__int64)(v5 + 4)) ) /*0x3ca2*/
              break; /*0x3ca9*/
            v5 = HiiBlockExtract(4, (_WORD *)((char *)v5 + (unsigned __int16)v5[1])); /*0x3cb9*/
          }
          while ( v5 ); /*0x3cbf*/
          if ( v5 && v5[1] == 28 ) /*0x3cd1*/
          {
            result = *((unsigned int *)v5 + 6); /*0x3cd3*/
            byte_580A0 = 1; /*0x3cd6*/
            dword_580A4 = result; /*0x3cdd*/
            return result; /*0x3ce3*/
          }
        }
      }
      else
      {
        byte_580A0 = 1; /*0x3c63*/
        if ( v3 >= 0 ) /*0x3c6d*/
        {
          dword_580A4 = v7; /*0x3c73*/
          return v7; /*0x3c79*/
        }
      }
    }
  }
  return (unsigned int)dword_580A4; /*0x3cf0*/
}

// Function: HiiLibError @ 0x3cf8 (0x1c bytes)
// Index: 61/906

unsigned __int64 __fastcall HiiLibError(__int64 a1, _QWORD *a2)
{
  if ( !a2 ) /*0x3cfb*/
    return 0x8000000000000002uLL; /*0x3cfd*/
  *a2 = (unsigned int)dword_580A4; /*0x3d0e*/
  return 0; /*0x3d07*/
}

// Function: HiiLibFalse @ 0x3d14 (0x9 bytes)
// Index: 62/906

__int64 __fastcall HiiLibFalse(__int64 a1, int a2)
{
  dword_580A4 = a2; /*0x3d14*/
  return 0; /*0x3d1c*/
}

// Function: HiiConfigStringToBlock @ 0x3d20 (0x39 bytes)
// Index: 63/906

unsigned __int32 __fastcall HiiConfigStringToBlock(unsigned __int16 n0xCFC)
{
  if ( (n0xCFC & 3) != 0 ) /*0x3d35*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLibMsc.c", 0xC1u, "(Port & 3) == 0"); /*0x3d4a*/
  return __indword(n0xCFC); /*0x3d53*/
}

// Function: HiiConfigStringToBlock2 @ 0x3d5c (0x46 bytes)
// Index: 64/906

__int64 __fastcall HiiConfigStringToBlock2(unsigned __int16 n0xCF8, unsigned int a2)
{
  if ( (n0xCF8 & 3) != 0 ) /*0x3d77*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLibMsc.c", 0xDFu, "(Port & 3) == 0"); /*0x3d8c*/
  __outdword(n0xCF8, a2); /*0x3d96*/
  return a2; /*0x3d9c*/
}

// Function: HiiGetBlockSize @ 0x3da4 (0x38 bytes)
// Index: 65/906

__int64 __fastcall HiiGetBlockSize(unsigned __int16 *a1)
{
  if ( ((unsigned __int8)a1 & 1) != 0 ) /*0x3db9*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", 0x97u, "(Address & 1) == 0"); /*0x3dce*/
  return *a1; /*0x3dd6*/
}

// Function: HiiWriteBlock @ 0x3ddc (0x37 bytes)
// Index: 66/906

__int64 __fastcall HiiWriteBlock(unsigned int *a1)
{
  if ( ((unsigned __int8)a1 & 3) != 0 ) /*0x3df1*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", 0xD7u, "(Address & 3) == 0"); /*0x3e06*/
  return *a1; /*0x3e0d*/
}

// Function: HiiReadBlock @ 0x3e14 (0x44 bytes)
// Index: 67/906

__int64 __fastcall HiiReadBlock(unsigned int *a1, unsigned int a2)
{
  if ( ((unsigned __int8)a1 & 3) != 0 ) /*0x3e2f*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", 0xF7u, "(Address & 3) == 0"); /*0x3e44*/
  *a1 = a2; /*0x3e49*/
  return a2; /*0x3e52*/
}

// Function: HiiSetBlockToVal @ 0x3e58 (0x39 bytes)
// Index: 68/906

__int64 __fastcall HiiSetBlockToVal(unsigned int *a1, int a2, int n257)
{
  unsigned int v6; // eax

  v6 = HiiWriteBlock(a1); /*0x3e6f*/
  return HiiReadBlock(a1, n257 | a2 & v6); /*0x3e87*/
}

// Function: MemSet @ 0x3e94 (0xf0 bytes)
// Index: 69/906

__int64 __fastcall MemSet(__int64 a1, unsigned __int64 a2, __int16 n9472)
{
  unsigned __int64 v6; // rbx

  if ( a2 ) /*0x3eb0*/
  {
    if ( !a1 ) /*0x3ec8*/
      DebugAssert( /*0x3edb*/
        "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\SetMem16Wrapper.c",
        0x3Au,
        "Buffer != ((void *) 0)");
    if ( a2 - 1 > -1 - a1 ) /*0x3ef9*/
      DebugAssert( /*0x3f0e*/
        "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\SetMem16Wrapper.c",
        0x3Bu,
        "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)Buffer)");
    if ( (a1 & 1) != 0 ) /*0x3f22*/
      DebugAssert( /*0x3f37*/
        "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\SetMem16Wrapper.c",
        0x3Cu,
        "(((UINTN)Buffer) & (sizeof (Value) - 1)) == 0");
    if ( (a2 & 1) != 0 ) /*0x3f4a*/
      DebugAssert( /*0x3f5f*/
        "c:\\udk\\myworkspace\\MdePkg\\Library\\BaseMemoryLib\\SetMem16Wrapper.c",
        0x3Du,
        "(Length & (sizeof (Value) - 1)) == 0");
    v6 = a2 >> 1; /*0x3f64*/
    do /*0x3f6f*/
    {
      --v6; /*0x3f67*/
      *(_WORD *)(a1 + 2 * v6) = n9472; /*0x3f6b*/
    }
    while ( v6 ); /*0x3f6f*/
  }
  return a1; /*0x3f7e*/
}

// Function: HiiLibSuccess @ 0x3f84 (0x20 bytes)
// Index: 70/906

bool HiiLibSuccess()
{
  __int16 v0; // bx

  v0 = _getcallerseflags_w(); /*0x3f8f*/
  disable_w(); /*0x3f92*/
  return (v0 & 0x200) != 0; /*0x3f9e*/
}

// Function: HiiLibFailure @ 0x3fa4 (0x20 bytes)
// Index: 71/906

char __fastcall HiiLibFailure(char a1)
{
  if ( a1 ) /*0x3fae*/
    enable_w(); /*0x3fb0*/
  else
    disable_w(); /*0x3fb7*/
  return a1; /*0x3fbe*/
}

// Function: HiiGetNextBlock @ 0x3fc4 (0x3b bytes)
// Index: 72/906

__int64 HiiGetNextBlock()
{
  if ( !qword_580B0 ) /*0x3fd9*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 0x4Du, "mHobList != ((void *) 0)"); /*0x3fee*/
  return qword_580B0; /*0x3ffa*/
}

// Function: HiiBlockExtract @ 0x4000 (0x56 bytes)
// Index: 73/906

_WORD *__fastcall HiiBlockExtract(int n4, _WORD *NextBlock)
{
  _WORD *NextBlock_1; // rbx

  NextBlock_1 = NextBlock; /*0x400d*/
  if ( !NextBlock ) /*0x4015*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 0x6Bu, "HobStart != ((void *) 0)"); /*0x4028*/
  while ( 1 ) /*0x4041*/
  {
    if ( *NextBlock_1 == 0xFFFF ) /*0x4047*/
      return 0; /*0x4050*/
    if ( *NextBlock_1 == 4 ) /*0x4038*/
      break; /*0x4038*/
    NextBlock_1 = (_WORD *)((char *)NextBlock_1 + (unsigned __int16)NextBlock_1[1]); /*0x403e*/
  }
  return NextBlock_1; /*0x404b*/
}

// Function: RstUefiDriverEntryPoint @ 0x4058 (0x7d bytes)
// Index: 74/906

EFI_STATUS __fastcall RstUefiDriverEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  __int64 v3; // rax
  __int64 v4; // rbx

  EfiDriverInit(ImageHandle, SystemTable); /*0x4065*/
  GetSystemMemoryMap(0); /*0x406c*/
  v3 = MemAlloc(744); /*0x407d*/
  v4 = v3; /*0x4082*/
  if ( v3 ) /*0x4088*/
  {
    RstPrivateDataInit(v3, ImageHandle); /*0x4090*/
    *(_QWORD *)(v4 + 720) = 0; /*0x4095*/
    *(_QWORD *)(v4 + 728) = 0; /*0x409d*/
    *(_BYTE *)(v4 + 736) = 0; /*0x40ac*/
    *(_QWORD *)v4 = &off_23120; /*0x40b3*/
  }
  else
  {
    v4 = 0; /*0x40b8*/
  }
  qword_35410 = v4; /*0x40ba*/
  return (*(EFI_STATUS (__fastcall **)(__int64))(*(_QWORD *)v4 + 16LL))(v4);
}

// Function: HiiBlockCompare @ 0x40d8 (0x1e bytes)
// Index: 75/906

__int64 HiiBlockCompare()
{
  if ( qword_35410 ) /*0x40e6*/
    return RstHelper_59fc(qword_35410); /*0x40e8*/
  else
    return 0; /*0x40ef*/
}

// Function: HiiBlockCompareConst @ 0x40f8 (0x1e bytes)
// Index: 76/906

__int64 HiiBlockCompareConst()
{
  if ( qword_35410 ) /*0x4106*/
    return RstDeviceGetRaidLevelFromCtx(qword_35410); /*0x4108*/
  else
    return 0; /*0x410f*/
}

// Function: GuidCompare @ 0x4118 (0x20 bytes)
// Index: 77/906

__int64 __fastcall GuidCompare(unsigned int a1)
{
  if ( qword_35410 ) /*0x4128*/
    return RstHelper_5a44(qword_35410, a1); /*0x412a*/
  else
    return 0; /*0x4131*/
}

// Function: HiiLibGuidIsZero @ 0x4138 (0x1e bytes)
// Index: 78/906

__int64 __fastcall HiiLibGuidIsZero(unsigned int a1)
{
  __int64 result; // rax

  result = 0; /*0x4145*/
  if ( qword_35410 ) /*0x414a*/
    return RstHelper_5a68(qword_35410, a1); /*0x414c*/
  return result; /*0x4151*/
}

// Function: HiiLibGuidToStr @ 0x4158 (0x25 bytes)
// Index: 79/906

__int64 __fastcall HiiLibGuidToStr(unsigned int a1, const char *en)
{
  if ( qword_35410 ) /*0x4168*/
    return RstHelper_5a8c(qword_35410, a1, (__int64)en); /*0x416f*/
  else
    return 0; /*0x4176*/
}

// Function: HiiLibStrToGuid @ 0x4180 (0x17 bytes)
// Index: 80/906

char __fastcall HiiLibStrToGuid(__int64 a1, int n5)
{
  if ( a1 ) /*0x4187*/
    return RstCheckSecureBoot(a1, n5); /*0x4189*/
  else
    return 0; /*0x4190*/
}

// Function: HiiLibGuidCmp @ 0x4198 (0x18 bytes)
// Index: 81/906

__int64 __fastcall HiiLibGuidCmp(__int64 a1)
{
  if ( a1 ) /*0x419f*/
    return RstReturnSuccess(a1); /*0x41a1*/
  else
    return 0xFFFFFFFFLL; /*0x41a8*/
}

// Function: HiiLibGuidIsEqual @ 0x41b0 (0x17 bytes)
// Index: 82/906

__int64 __fastcall HiiLibGuidIsEqual(__int64 a1)
{
  if ( a1 ) /*0x41b7*/
    return RstReturnFail(a1); /*0x41b9*/
  else
    return 0; /*0x41c0*/
}

// Function: HiiLibNewString @ 0x4220 (0x73 bytes)
// Index: 83/906

unsigned __int64 __fastcall HiiLibNewString(__int64 a1)
{
  __int64 v2; // rbx

  v2 = 0; /*0x4231*/
  if ( !RstUefiProtocolGuid(*(_QWORD **)(a1 + 48)) ) /*0x4233*/
    return 0x8000000000000007uLL; /*0x423c*/
  VarInstall((_QWORD *)qword_35418, &xmmword_27100, (CHAR16 *)"RstUefiV", L"RstUefiV", "VROC", (wchar_t *)L"RstUefiF"); /*0x427c*/
  *(_BYTE *)(a1 + 16) = 1; /*0x4281*/
  return v2; /*0x428d*/
}

// Function: HiiLibGetString @ 0x4294 (0x41 bytes)
// Index: 84/906

unsigned __int64 __fastcall HiiLibGetString(__int64 a1, unsigned __int64 a2, __int64 a3)
{
  __int64 v4; // rdi

  if ( a2 ) /*0x42a4*/
    return RstConfigAccessExtract(a1, a2, a3); /*0x42c4*/
  v4 = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 40LL))(a1); /*0x42ac*/
  RstDriverContextInitialize(); /*0x42af*/
  *(_QWORD *)(a1 + 8) = 0; /*0x42b4*/
  *(_BYTE *)(a1 + 16) = 0; /*0x42b9*/
  return v4; /*0x42cf*/
}

// Function: HiiLibGetStringId @ 0x42d8 (0x4a bytes)
// Index: 85/906

__int64 __fastcall HiiLibGetStringId(RST_PRIVATE_DATA *Private, __int64 a2, __int64 a3, void **p_NameString)
{
  return (*(__int64 (__fastcall **)(__int64, __int64, void **, _QWORD, _QWORD, int))(qword_58070 + 280))( /*0x431c*/
           a2,
           a3,
           p_NameString,
           *((_QWORD *)Private->HiiLibFunctions[4] + 70),
           *((_QWORD *)Private->HiiLibFunctions[4] + 78),
           16);
}

// Function: HiiLibFindString @ 0x4324 (0x2c bytes)
// Index: 86/906

__int64 __fastcall HiiLibFindString(RST_PRIVATE_DATA *Private, __int64 a2, __int64 a3)
{
  return (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, _QWORD))(qword_58070 + 288))(
           a2,
           a3,
           *((_QWORD *)Private->HiiLibFunctions[4] + 70),
           *((_QWORD *)Private->HiiLibFunctions[4] + 78));
}

// Function: HiiLibStub @ 0x4350 (0x5 bytes)
// Index: 87/906

// attributes: thunk
__int64 __fastcall HiiLibStub(__int64 a1)
{
  return RstConfigAccessRoute(a1);
}

// Function: HiiLibGetStringById @ 0x4358 (0x2d bytes)
// Index: 88/906

__int64 __fastcall HiiLibGetStringById(__int64 a1)
{
  __int64 result; // rax

  result = RstConfigAccessRoute(a1); /*0x4361*/
  if ( result >= 0 ) /*0x4369*/
  {
    result = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)qword_35418 + 40LL))(qword_35418); /*0x4375*/
    *(_BYTE *)(a1 + 136) = 0; /*0x4378*/
  }
  return result; /*0x437f*/
}

// Function: HiiLibGetDefaultString @ 0x4388 (0x5a bytes)
// Index: 89/906

__int64 __fastcall HiiLibGetDefaultString(RST_PRIVATE_DATA *Private)
{
  _BYTE *v2; // rcx
  __int64 result; // rax
  _BYTE *v4; // rcx
  _BYTE *v5; // rcx

  LODWORD(Private->HiiLibFunctions[11]) = 0; /*0x438e*/
  v2 = Private->HiiLibFunctions[12]; /*0x4395*/
  if ( v2 ) /*0x439c*/
  {
    result = MemZeroThenFree(v2, 0); /*0x43a0*/
    Private->HiiLibFunctions[12] = 0; /*0x43a5*/
  }
  v4 = Private->HiiLibFunctions[13]; /*0x43aa*/
  if ( v4 ) /*0x43b1*/
  {
    result = MemZeroThenFree(v4, LODWORD(Private->HiiLibFunctions[11])); /*0x43b6*/
    Private->HiiLibFunctions[13] = 0; /*0x43bb*/
  }
  v5 = Private->HiiLibFunctions[14]; /*0x43c0*/
  if ( v5 ) /*0x43ca*/
  {
    result = MemZeroThenFree(v5, LODWORD(Private->HiiLibFunctions[11])); /*0x43cf*/
    Private->HiiLibFunctions[14] = 0; /*0x43d4*/
  }
  return result; /*0x43dc*/
}

// Function: HiiLibGetDefaultStringId @ 0x43e4 (0x6b bytes)
// Index: 90/906

char __fastcall HiiLibGetDefaultStringId(_DWORD *Context, unsigned int a2, unsigned int a3)
{
  __int64 v3; // r9
  __int64 v4; // rdx
  unsigned __int8 v5; // al
  int v6; // ecx
  char result; // al
  int n2; // ecx

  v3 = *((_QWORD *)Context + 15) + 56LL * a2; /*0x43f2*/
  v4 = *((_QWORD *)Context + 15) + 56LL * a3; /*0x43f6*/
  v5 = *(_BYTE *)(v3 + 1); /*0x43fa*/
  if ( v5 != *(_BYTE *)(v4 + 1) ) /*0x4401*/
    return 0; /*0x4401*/
  v6 = v5; /*0x4403*/
  result = 1; /*0x4406*/
  n2 = v6 - 1; /*0x440b*/
  if ( n2 ) /*0x440d*/
  {
    if ( n2 != 2 /*0x444a*/
      || *(_WORD *)(v3 + 40) != 0x8086
      || *(_WORD *)(v3 + 42) != 10278 && *(_WORD *)(v3 + 42) != 10279
      || *(_WORD *)(v4 + 40) != 0x8086
      || *(_WORD *)(v4 + 42) != 10278 && *(_WORD *)(v4 + 42) != 10279 )
    {
      return 0; /*0x444c*/
    }
  }
  return result; /*0x444e*/
}

// Function: HiiLibReturnZero @ 0x4450 (0x4 bytes)
// Index: 91/906

__int64 __fastcall HiiLibReturnZero(__int64 a1)
{
  return *(unsigned int *)(a1 + 104); /*0x4453*/
}

// Function: HiiLibReturnOne @ 0x4454 (0x12 bytes)
// Index: 92/906

__int64 __fastcall HiiLibReturnOne(__int64 a1, unsigned int a2)
{
  return *(unsigned __int8 *)(56LL * a2 + *(_QWORD *)(a1 + 120) + 1); /*0x4465*/
}

// Function: HiiLibReturnFalse @ 0x4468 (0x15 bytes)
// Index: 93/906

__int64 __fastcall HiiLibReturnFalse(__int64 a1, unsigned int a2)
{
  if ( a2 >= *(_DWORD *)(a1 + 104) ) /*0x446b*/
    return 0; /*0x447a*/
  else
    return *(unsigned int *)(*(_QWORD *)(a1 + 128) + 4LL * a2); /*0x4476*/
}

// Function: HiiLibGetStringFromPackage @ 0x4480 (0x164 bytes)
// Index: 94/906

__int64 __fastcall HiiLibGetStringFromPackage(__int64 a1, unsigned int a2, __int64 a3)
{
  __int64 v3; // rbx
  __int64 v6; // rbp
  __int64 v8; // rdi
  __int64 v9; // rax
  unsigned __int64 v10; // [rsp+30h] [rbp-38h] BYREF
  __int64 v11; // [rsp+38h] [rbp-30h] BYREF
  _QWORD v12[5]; // [rsp+40h] [rbp-28h] BYREF
  __int64 v13; // [rsp+88h] [rbp+20h] BYREF

  v3 = 0; /*0x4493*/
  v11 = 0; /*0x449b*/
  if ( a2 < *(_DWORD *)(a1 + 104) ) /*0x44a2*/
  {
    v6 = a2; /*0x44ac*/
    if ( *(_QWORD *)(*(_QWORD *)(a1 + 112) + 8LL * a2) ) /*0x44ae*/
    {
      v10 = 0; /*0x44d8*/
      v13 = 0; /*0x44dc*/
      if ( (*(__int64 (__fastcall **)(__int64, void *, _QWORD, unsigned __int64 *, __int64 *))(qword_58070 + 312))( /*0x44e9*/
             2,
             &unk_27110,
             0,
             &v10,
             &v13) < 0 )
        return v11; /*0x44f0*/
      v8 = 0; /*0x44f5*/
      if ( v10 ) /*0x44fd*/
      {
        while ( 1 ) /*0x4503*/
        {
          v9 = *(_QWORD *)(a1 + 8); /*0x4503*/
          v12[0] = 0; /*0x4516*/
          if ( !(*(__int64 (__fastcall **)(_QWORD, void *, _QWORD *, _QWORD, __int64, int))(qword_58070 + 280))( /*0x4546*/
                  *(_QWORD *)(v13 + 8 * v8),
                  &unk_27770,
                  v12,
                  *(_QWORD *)(qword_35418 + 560),
                  v9,
                  2) )
          {
            if ( v12[0] ) /*0x4559*/
              break; /*0x4559*/
          }
          if ( ++v8 >= v10 ) /*0x4563*/
            goto LABEL_11; /*0x4563*/
        }
        (*(void (__fastcall **)(_QWORD, _QWORD, _QWORD, __int64, __int64 *))(v12[0] + 8LL))( /*0x4582*/
          v12[0],
          *(_QWORD *)(*(_QWORD *)(a1 + 112) + 8 * v6),
          0,
          a3,
          &v11);
        (*(void (__fastcall **)(_QWORD, void *, _QWORD, _QWORD))(qword_58070 + 288))( /*0x45b1*/
          *(_QWORD *)(v13 + 8 * v8),
          &unk_27770,
          *(_QWORD *)(qword_35418 + 560),
          *(_QWORD *)(a1 + 8));
      }
LABEL_11:
      (*(void (__fastcall **)(__int64))(qword_58070 + 72))(v13); /*0x45b7*/
      return v11; /*0x45c9*/
    }
  }
  return v3; /*0x45db*/
}

// Function: HiiLibGetAllStrings @ 0x45e4 (0x11b bytes)
// Index: 95/906

__int64 __fastcall HiiLibGetAllStrings(__int64 a1, __int64 a2)
{
  __int64 FirstString_2; // r15
  unsigned int v4; // ebx
  __int64 i; // r12
  const CHAR16 *FirstString_1; // rsi
  bool v7; // di
  const CHAR16 *FirstString; // r13
  UINTN Length; // r14

  FirstString_2 = RstUefiReadVariable(a2); /*0x460e*/
  if ( !FirstString_2 ) /*0x4614*/
    return 0xFFFFFFFFLL; /*0x4614*/
  v4 = 0; /*0x461a*/
  if ( !*(_DWORD *)(a1 + 104) ) /*0x461d*/
    return 0xFFFFFFFFLL; /*0x46db*/
  for ( i = 0; ; i += 8 ) /*0x4627*/
  {
    FirstString_1 = (const CHAR16 *)RstUefiReadVariable(*(_QWORD *)(i + *(_QWORD *)(a1 + 112))); /*0x4637*/
    if ( FirstString_1 ) /*0x463d*/
    {
      v7 = 1; /*0x4643*/
      FirstString = (const CHAR16 *)FirstString_2; /*0x4646*/
      do /*0x46c5*/
      {
        if ( !FirstString || !FirstString_1 || Assert_66(FirstString) || Assert_66(FirstString_1) ) /*0x4663*/
          break; /*0x466b*/
        Length = Assert_72((__int64)FirstString); /*0x4678*/
        v7 = Length == Assert_72((__int64)FirstString_1) /*0x4678*/
          && !(unsigned __int16)StrnCmp(FirstString, FirstString_1, Length);
        FirstString = (const CHAR16 *)Assert_71((__int64)FirstString); /*0x46b7*/
        FirstString_1 = (const CHAR16 *)Assert_71((__int64)FirstString_1); /*0x46bf*/
      }
      while ( v7 ); /*0x46c5*/
      if ( v7 ) /*0x46ca*/
        break; /*0x46ca*/
    }
    if ( ++v4 >= *(_DWORD *)(a1 + 104) ) /*0x46d5*/
      return 0xFFFFFFFFLL; /*0x46d5*/
  }
  return v4; /*0x46ed*/
}

// Function: HiiLibFreeStringArray @ 0x4700 (0x2e bytes)
// Index: 96/906

__int64 __fastcall HiiLibFreeStringArray(__int64 a1, __int64 a2)
{
  unsigned int v2; // eax
  _QWORD *i; // r8

  v2 = 0; /*0x4700*/
  if ( !*(_DWORD *)(a1 + 104) ) /*0x4705*/
    return 0; /*0x471e*/
  for ( i = *(_QWORD **)(a1 + 112); a2 != *i; ++i ) /*0x470a*/
  {
    if ( ++v2 >= *(_DWORD *)(a1 + 104) ) /*0x471c*/
      return 0; /*0x471c*/
  }
  return *(unsigned int *)(*(_QWORD *)(a1 + 128) + 4LL * v2); /*0x4720*/
}

// Function: RstAllocContext728 @ 0x4730 (0xb1 bytes)
// Index: 97/906

RST_DEVICE *__fastcall RstAllocContext728(RST_PRIVATE_DATA *Private)
{
  __int64 v1; // rdx
  __int64 v2; // rbx
  _QWORD *v4; // rax
  _QWORD *NewContext; // rbx
  RST_DEVICE *result; // rax
  bool v7; // di
  bool v8; // cl

  v2 = v1; /*0x4744*/
  v4 = (_QWORD *)MemAlloc(632); /*0x4756*/
  if ( v4 ) /*0x4760*/
    NewContext = RstCreateNewContext(v4, v2, (__int64)Private); /*0x4770*/
  else
    NewContext = 0; /*0x4775*/
  result = (RST_DEVICE *)RstReturnSuccess(NewContext); /*0x477b*/
  v7 = (_DWORD)result != -1; /*0x4783*/
  if ( (_DWORD)result == -1 ) /*0x478a*/
    goto LABEL_9; /*0x478a*/
  result = (RST_DEVICE *)(*(__int64 (__fastcall **)(_QWORD *))(*NewContext + 8LL))(NewContext); /*0x4792*/
  v8 = v7; /*0x4795*/
  if ( (__int64)result < 0 ) /*0x479c*/
    v8 = 0; /*0x479c*/
  if ( !v8 ) /*0x47a2*/
  {
LABEL_9:
    if ( NewContext ) /*0x47bd*/
      return (RST_DEVICE *)(*(__int64 (__fastcall **)(_QWORD *, __int64))*NewContext)(NewContext, 1); /*0x47ca*/
  }
  else
  {
    RstInstallClass((RST_PRIVATE_DATA *)&Private->HiiLibFunctions[1], NewContext); /*0x47ab*/
    return (RST_DEVICE *)RstAuthAssertContext(NewContext); /*0x47b3*/
  }
  return result; /*0x47db*/
}

// Function: RstAllocContext440 @ 0x47e4 (0x63 bytes)
// Index: 98/906

void *__fastcall RstAllocContext440(RST_PRIVATE_DATA *Private)
{
  __int64 v1; // rdx
  __int64 v2; // rsi
  __int64 v4; // rax
  void *Context; // rbx

  v2 = v1; /*0x47f3*/
  v4 = MemAlloc(440); /*0x4805*/
  Context = 0; /*0x480a*/
  if ( v4 ) /*0x480f*/
    Context = (void *)RstFormCallbackHandler(v4, (__int64)Private, v2); /*0x481f*/
  RstInstallClass((RST_PRIVATE_DATA *)&Private->HiiLibFunctions[1], Context); /*0x4829*/
  return (*(void *(__fastcall **)(void *))(*(_QWORD *)Context + 8LL))(Context);
}

// Function: RstFreeContext @ 0x4848 (0x58 bytes)
// Index: 99/906

void __fastcall RstFreeContext(void *Context)
{
  unsigned int v1; // edx
  unsigned int v2; // edi
  _DWORD *Context_1; // r11
  unsigned int v4; // ebx
  unsigned int v5; // esi

  v2 = v1; /*0x4857*/
  Context_1 = Context; /*0x4859*/
  if ( v1 ) /*0x485e*/
  {
    v4 = 0; /*0x4860*/
    v5 = v1 - 1; /*0x4862*/
    while ( !HiiLibGetDefaultStringId((__int64)Context_1, v4, v2) ) /*0x4874*/
    {
      if ( ++v4 > v5 ) /*0x487a*/
        goto LABEL_5; /*0x487a*/
    }
  }
  else
  {
LABEL_5:
    ++Context_1[27]; /*0x487c*/
  }
}

// Function: RstHelper_48a0 @ 0x48a0 (0x36 bytes)
// Index: 100/906

void __fastcall RstHelper_48a0(RST_PRIVATE_DATA *Private)
{
  _QWORD *i; // rbx
  RST_DEVICE *Device; // rcx

  for ( i = Private->HiiLibFunctions[1]; i; i = (_QWORD *)*i ) /*0x48a6*/
  {
    if ( !(*(unsigned __int8 (__fastcall **)(_QWORD))(*(_QWORD *)i[2] + 104LL))(i[2]) ) /*0x48b3*/
    {
      Device = (RST_DEVICE *)i[2]; /*0x48ba*/
      if ( Device ) /*0x48c1*/
        RstFormEntry(Device); /*0x48c3*/
    }
  }
}

// Function: RstCallback @ 0x48d8 (0x92 bytes)
// Index: 101/906

EFI_STATUS __fastcall RstCallback(RST_PRIVATE_DATA *Private)
{
  EFI_STATUS result; // rax
  __int64 v3; // [rsp+40h] [rbp+8h] BYREF
  __int64 v4; // [rsp+48h] [rbp+10h] BYREF

  RstHelper_48a0((__int64)Private); /*0x48e1*/
  result = (*(__int64 (__fastcall **)(__int64, unsigned int *, _QWORD, __int64 *, __int64 *))(qword_58070 + 312))( /*0x490a*/
             2,
             &dword_278C0,
             0,
             &v3,
             &v4);
  if ( !LOBYTE(Private->HiiLibFunctions[15]) && !result && v3 ) /*0x4923*/
  {
    (*(void (__fastcall **)(_QWORD *))(*qword_35418 + 32LL))(qword_35418); /*0x492f*/
    LOBYTE(Private->HiiLibFunctions[15]) = 1; /*0x4932*/
    result = RstGetString((__int64)&Private->HiiLibFunctions[7], (__int64)(qword_35418 + 78)); /*0x494b*/
  }
  if ( v4 ) /*0x4958*/
    return (*(EFI_STATUS (**)(void))(qword_58070 + 72))(); /*0x4961*/
  return result; /*0x4964*/
}

// Function: RstCallbackHandler @ 0x496c (0x1ad bytes)
// Index: 102/906

EFI_STATUS __fastcall RstCallbackHandler(RST_PRIVATE_DATA *Private)
{
  const CHAR16 *Source_1; // rdx
  unsigned int n24_3; // r8d
  unsigned int n24_1; // esi
  const CHAR16 *Source; // rbp
  EFI_STATUS n24; // rax
  void *v7; // rax
  CHAR16 *Destination; // rcx
  unsigned int n24_2; // r12d
  __int64 v10; // r14
  __int64 v11; // rbp
  __int64 v12; // r13
  __int64 v13; // rbx
  char *v14; // rax
  __int64 v15; // r15
  __int64 v16; // [rsp+50h] [rbp+8h] BYREF

  n24_1 = n24_3; /*0x4988*/
  Source = Source_1; /*0x498b*/
  HiiLibGetDefaultString((__int64)Private); /*0x4991*/
  n24 = 24; /*0x4996*/
  if ( n24_1 > 0x18 ) /*0x499d*/
    n24_1 = 24; /*0x499d*/
  HIDWORD(Private->HiiLibFunctions[11]) = 0; /*0x49a0*/
  if ( Source && n24_1 ) /*0x49af*/
  {
    Private->HiiLibFunctions[12] = (void *)MemAllocPages(8LL * n24_1); /*0x49c6*/
    Private->HiiLibFunctions[13] = (void *)MemAllocPages(56LL * n24_1); /*0x49d9*/
    v7 = (void *)MemAllocPages(4LL * n24_1); /*0x49dd*/
    Destination = (CHAR16 *)Private->HiiLibFunctions[12]; /*0x49e2*/
    Private->HiiLibFunctions[14] = v7; /*0x49e6*/
    if ( Destination && Private->HiiLibFunctions[13] && v7 ) /*0x4a04*/
    {
      StrnCpy(Destination, Source, 8LL * n24_1); /*0x4a10*/
      n24_2 = 0; /*0x4a15*/
      LODWORD(Private->HiiLibFunctions[11]) = n24_1; /*0x4a18*/
      v10 = 0; /*0x4a23*/
      v11 = 0; /*0x4a26*/
      v12 = 0; /*0x4a28*/
      v13 = 0; /*0x4a2b*/
      do /*0x4aec*/
      {
        MemZero((_BYTE *)Private->HiiLibFunctions[13] + v13, 0, 56); /*0x4a3b*/
        *((_BYTE *)Private->HiiLibFunctions[13] + v11) = 1; /*0x4a44*/
        v14 = (char *)Private->HiiLibFunctions[12]; /*0x4a49*/
        v15 = *(_QWORD *)&v14[v12]; /*0x4a4d*/
        if ( v15 /*0x4a7b*/
          && !HiiLibGetStringId((__int64)Private, *(_QWORD *)&v14[v12], (__int64)&unk_27890, (__int64)&v16)
          && v16 )
        {
          if ( (*(__int64 (__fastcall **)(__int64, char *))(v16 + 8))(v16, (char *)Private->HiiLibFunctions[13] + v13) < 0 /*0x4a99*/
            || *((_BYTE *)Private->HiiLibFunctions[13] + v11) != 1 )
          {
            MemZero((_BYTE *)Private->HiiLibFunctions[13] + v13, 0, 56); /*0x4aa9*/
          }
          HiiLibFindString((__int64)Private, v15, (__int64)&unk_27890); /*0x4abb*/
        }
        RstFreeContext(Private); /*0x4ac6*/
        ++n24_2; /*0x4ad2*/
        *(_DWORD *)((char *)Private->HiiLibFunctions[14] + v10) = n24; /*0x4ad5*/
        v13 += 56; /*0x4ad9*/
        v12 += 8; /*0x4add*/
        v10 += 4; /*0x4ae1*/
        v11 += 56; /*0x4ae5*/
      }
      while ( n24_2 < n24_1 ); /*0x4aec*/
    }
    else
    {
      return HiiLibGetDefaultString((__int64)Private); /*0x4af7*/
    }
  }
  return n24; /*0x4b0b*/
}

// Function: RstQueryConfig @ 0x4b1c (0x6a bytes)
// Index: 103/906

EFI_STATUS __fastcall RstQueryConfig(RST_PRIVATE_DATA *Private)
{
  EFI_STATUS result; // rax
  __int64 n24; // [rsp+48h] [rbp+10h] BYREF
  CHAR16 *Source; // [rsp+50h] [rbp+18h] BYREF

  n24 = 0; /*0x4b22*/
  HiiLibGetDefaultString(Private); /*0x4b2b*/
  result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, __int64 *, CHAR16 **))(qword_58070 + 312))( /*0x4b54*/
             2,
             &unk_27890,
             0,
             &n24,
             &Source);
  if ( !result ) /*0x4b5d*/
  {
    RstCallbackHandler(Private); /*0x4b6c*/
    return (*(EFI_STATUS (__fastcall **)(CHAR16 *))(qword_58070 + 72))(Source); /*0x4b7d*/
  }
  return result; /*0x4b80*/
}

// Function: RstFormCallback @ 0x4b88 (0x83 bytes)
// Index: 104/906

EFI_STATUS __fastcall RstFormCallback(RST_DEVICE *Device)
{
  unsigned __int64 v2; // rbx
  EFI_STATUS result; // rax
  unsigned __int64 v4; // [rsp+48h] [rbp+10h] BYREF
  __int64 v5; // [rsp+50h] [rbp+18h] BYREF

  RstQueryConfig((RST_PRIVATE_DATA *)Device); /*0x4b95*/
  v2 = 0; /*0x4b9f*/
  v4 = 0; /*0x4bbf*/
  result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, unsigned __int64 *, __int64 *))(qword_58070 + 312))( /*0x4bc4*/
             2,
             &unk_278A0,
             0,
             &v4,
             &v5);
  if ( !result ) /*0x4bcd*/
  {
    if ( v4 ) /*0x4bd4*/
    {
      do /*0x4bef*/
      {
        RstAllocContext728((RST_PRIVATE_DATA *)Device); /*0x4be2*/
        ++v2; /*0x4be7*/
      }
      while ( v2 < v4 ); /*0x4bef*/
    }
    return (*(__int64 (__fastcall **)(__int64))(qword_58070 + 72))(v5); /*0x4bfd*/
  }
  return result; /*0x4c05*/
}

// Function: RstFormCallbackInit @ 0x4c0c (0x2d bytes)
// Index: 105/906

char __fastcall RstFormCallbackInit(__int64 a1)
{
  if ( !*(_QWORD *)(a1 + 40) ) /*0x4c12*/
    *(_QWORD *)(a1 + 40) = Assert_85(0, 0); /*0x4c25*/
  RstFormCallback(a1); /*0x4c2c*/
  return 1; /*0x4c33*/
}

// Function: RstCreateNewContext @ 0x4c3c (0x69 bytes)
// Index: 106/906

_QWORD *__fastcall RstCreateNewContext(_QWORD *a1, __int64 a2, RST_PRIVATE_DATA *Private)
{
  CfgArrayAllocBlock(a1, (__int64)Private); /*0x4c4f*/
  *a1 = off_231B0; /*0x4c6c*/
  a1[23] = a2; /*0x4c6f*/
  a1[24] = 0; /*0x4c76*/
  a1[25] = 0; /*0x4c7d*/
  a1[78] = 0; /*0x4c84*/
  a1[45] = 0; /*0x4c8b*/
  MemZero((_BYTE *)a1 + 368, 0, 256); /*0x4c92*/
  return a1; /*0x4c9f*/
}

// Function: RstNullSub2 @ 0x4ca8 (0x3 bytes)
// Index: 107/906

char RstNullSub2()
{
  return 0; /*0x4caa*/
}

// Function: RstNullSub @ 0x4cac (0xb bytes)
// Index: 108/906

bool __fastcall RstNullSub(__int64 a1, __int64 a2)
{
  return a2 == *(_QWORD *)(a1 + 184); /*0x4cb6*/
}

// Function: RstFormEntry @ 0x4cb8 (0x3e2 bytes)
// Index: 109/906

RST_FORM_ENTRY *__fastcall RstFormEntry(RST_DEVICE *Device)
{
  _BYTE *FormEntry_1; // rax
  uint8_t *v4; // r8
  __int64 n3; // r9
  __int64 v6; // rdx
  __int64 v7; // rdx
  uint8_t *v8; // r8
  __int64 n8; // r9
  UINTN v10; // rax
  char *FormEntry; // rcx
  UINTN v12; // rax
  char *FormEntry_2; // rcx
  UINTN v14; // rax
  unsigned __int8 Length; // al
  RST_FORM_ENTRY *v16; // rdi
  UINTN v17; // rax
  UINTN v18; // rax
  CHAR16 i_1[12]; // [rsp+20h] [rbp-58h] BYREF
  CHAR16 i[28]; // [rsp+38h] [rbp-40h] BYREF

  if ( Device->FormEntry ) /*0x4cc7*/
    return 0; /*0x4cd6*/
  FormEntry_1 = (_BYTE *)MemAllocPages(116); /*0x4ce3*/
  Device->FormEntry = FormEntry_1; /*0x4ce8*/
  if ( !FormEntry_1 ) /*0x4cf2*/
    return (RST_FORM_ENTRY *)0x8000000000000009LL; /*0x4cf2*/
  MemZero(FormEntry_1, 0, 116); /*0x4d0b*/
  *(_QWORD *)((char *)Device->FormEntry + 28) = Device->reserved_090[152]; /*0x4d1f*/
  *(_QWORD *)((char *)Device->FormEntry + 36) = Device->reserved_090[153]; /*0x4d31*/
  *(_QWORD *)((char *)Device->FormEntry + 44) = Device->reserved_090[159]; /*0x4d43*/
  *((_QWORD *)Device->FormEntry + 2) = Device->reserved_090[158]; /*0x4d55*/
  *((_DWORD *)Device->FormEntry + 6) = *(_DWORD *)&Device->reserved_090[154]; /*0x4d66*/
  v4 = &Device->reserved_090[193]; /*0x4d80*/
  n3 = 3; /*0x4d8a*/
  *(_QWORD *)Device->FormEntry = ((unsigned __int64)*(unsigned __int16 *)&Device->reserved_090[161] >> 4) & 0xF; /*0x4d8e*/
  *((_WORD *)Device->FormEntry + 26) = *(_WORD *)&Device->reserved_090[213]; /*0x4d9f*/
  *((_QWORD *)Device->FormEntry + 1) = ((unsigned __int64)*(unsigned __int16 *)&Device->reserved_090[161] >> 8) & 3; /*0x4db8*/
  *(_QWORD *)((char *)Device->FormEntry + 70) = *(unsigned int *)&Device->reserved_090[82] /*0x4dd7*/
                                              | ((unsigned __int64)*(unsigned __int16 *)&Device->reserved_090[80] << 32);
  v6 = 0; /*0x4df0*/
  *(_WORD *)((char *)Device->FormEntry + 83) = (*(_WORD *)&Device->reserved_090[161] >> 10) & 0xF; /*0x4df2*/
  *(_QWORD *)((char *)Device->FormEntry + 85) = *(_QWORD *)&Device->reserved_090[48]; /*0x4e04*/
  *(_DWORD *)((char *)Device->FormEntry + 78) = *(_DWORD *)&Device->reserved_090[72]; /*0x4e15*/
  *(_WORD *)((char *)Device->FormEntry + 93) = *(_WORD *)&Device->reserved_090[187]; /*0x4e26*/
  *(_WORD *)((char *)Device->FormEntry + 95) = *(_WORD *)&Device->reserved_090[189]; /*0x4e38*/
  *(_WORD *)((char *)Device->FormEntry + 97) = *(_WORD *)&Device->reserved_090[191]; /*0x4e4a*/
  do /*0x4e66*/
  {
    *((_BYTE *)Device->FormEntry + ++v6 + 98) = *v4++; /*0x4e5b*/
    --n3; /*0x4e62*/
  }
  while ( n3 ); /*0x4e66*/
  v7 = 0; /*0x4e75*/
  v8 = &Device->reserved_090[197]; /*0x4e77*/
  n8 = 8; /*0x4e7e*/
  *((_BYTE *)Device->FormEntry + 102) = Device->reserved_090[196]; /*0x4e82*/
  do /*0x4e9d*/
  {
    *((_BYTE *)Device->FormEntry + ++v7 + 102) = *v8++; /*0x4e92*/
    --n8; /*0x4e99*/
  }
  while ( n8 ); /*0x4e9d*/
  *((_BYTE *)Device->FormEntry + 111) = Device->reserved_090[205]; /*0x4eb0*/
  RstStringTrimCopy(i_1, 21, (const CHAR16 *)&Device->reserved_090[92], 0x14u); /*0x4ec5*/
  RstStringTrimCopy(i, 41, (const CHAR16 *)&Device->reserved_090[112], 0x28u); /*0x4edd*/
  v10 = AsciiStrLen((const CHAR8 *)i_1); /*0x4ee7*/
  *(_QWORD *)((char *)Device->FormEntry + 54) = MemAllocPages(2 * v10 + 2); /*0x4efd*/
  FormEntry = (char *)Device->FormEntry; /*0x4f01*/
  if ( !*(_QWORD *)(FormEntry + 54) ) /*0x4f08*/
  {
LABEL_10:
    MemZeroThenFree(FormEntry, 116); /*0x4f0f*/
    return (RST_FORM_ENTRY *)0x8000000000000009LL; /*0x4cfe*/
  }
  v12 = AsciiStrLen((const CHAR8 *)i); /*0x4f21*/
  *(_QWORD *)((char *)Device->FormEntry + 62) = MemAllocPages(2 * v12 + 2); /*0x4f37*/
  FormEntry_2 = (char *)Device->FormEntry; /*0x4f3b*/
  if ( !*(_QWORD *)(FormEntry_2 + 62) ) /*0x4f42*/
  {
    v14 = StrLen(*(const CHAR16 **)(FormEntry_2 + 54)); /*0x4f4d*/
    MemZeroThenFree(*(_BYTE **)((char *)Device->FormEntry + 54), v14); /*0x4f60*/
    FormEntry = (char *)Device->FormEntry; /*0x4f65*/
    goto LABEL_10; /*0x4f6c*/
  }
  FormEntry_2[112] = Device->reserved_090[206]; /*0x4f77*/
  *((_BYTE *)Device->FormEntry + 113) = Device->reserved_090[207]; /*0x4f87*/
  *((_BYTE *)Device->FormEntry + 114) = Device->reserved_090[208]; /*0x4f97*/
  *((_BYTE *)Device->FormEntry + 115) = Device->reserved_090[209]; /*0x4fa7*/
  Assert_9(i_1, *(_QWORD *)((char *)Device->FormEntry + 54), 0x14u); /*0x4fba*/
  Assert_9(i, *(_QWORD *)((char *)Device->FormEntry + 62), 0x28u); /*0x4fd5*/
  Length = StrLenA(i_1); /*0x4fdf*/
  *((_BYTE *)Device->FormEntry + 82) = RstDeviceNameExists(i_1, Length); /*0x4fff*/
  v16 = (RST_FORM_ENTRY *)(*(__int64 (__fastcall **)(uint8_t *, void *, _QWORD, void *))(qword_58070 + 128))( /*0x5020*/
                            &Device->reserved_090[40],
                            &unk_278D0,
                            0,
                            Device->FormEntry);
  if ( (__int64)v16 < 0 ) /*0x5026*/
  {
    v17 = StrLen(*(const CHAR16 **)((char *)Device->FormEntry + 62)); /*0x5033*/
    MemZeroThenFree(*(_BYTE **)((char *)Device->FormEntry + 62), v17); /*0x5046*/
    v18 = StrLen(*(const CHAR16 **)((char *)Device->FormEntry + 54)); /*0x5056*/
    MemZeroThenFree(*(_BYTE **)((char *)Device->FormEntry + 54), v18); /*0x5069*/
    MemZeroThenFree((_BYTE *)Device->FormEntry, 116); /*0x5078*/
    Device->FormEntry = 0; /*0x507d*/
  }
  return v16; /*0x5095*/
}

// Function: RstProcessAction @ 0x509c (0xc7 bytes)
// Index: 110/906

__int64 __fastcall RstProcessAction(__int64 a1)
{
  __int64 v3; // rbx
  UINTN v4; // rax
  UINTN v5; // rax

  if ( !*(_QWORD *)(a1 + 360) ) /*0x50a6*/
    return 0x8000000000000003uLL; /*0x50b5*/
  v3 = (*(__int64 (__fastcall **)(_QWORD, void *))(qword_58070 + 144))(*(_QWORD *)(a1 + 184), &unk_278D0); /*0x50df*/
  if ( !v3 || v3 == 0x800000000000000EuLL ) /*0x50f4*/
  {
    v4 = StrLen(*(const CHAR16 **)(*(_QWORD *)(a1 + 360) + 62LL)); /*0x5101*/
    MemZeroThenFree(*(_BYTE **)(*(_QWORD *)(a1 + 360) + 62LL), v4); /*0x5114*/
    v5 = StrLen(*(const CHAR16 **)(*(_QWORD *)(a1 + 360) + 54LL)); /*0x5124*/
    MemZeroThenFree(*(_BYTE **)(*(_QWORD *)(a1 + 360) + 54LL), v5); /*0x5137*/
    MemZeroThenFree(*(_BYTE **)(a1 + 360), 116); /*0x5148*/
    *(_QWORD *)(a1 + 360) = 0; /*0x514d*/
  }
  return v3; /*0x515d*/
}

// Function: RstReturnFail @ 0x5164 (0x8 bytes)
// Index: 111/906

__int64 __fastcall RstReturnFail(__int64 a1)
{
  return *(_QWORD *)(a1 + 360); /*0x516b*/
}

// Function: RstReturnInvalid @ 0x516c (0x8 bytes)
// Index: 112/906

void __fastcall RstReturnInvalid(__int64 a1, __int64 a2)
{
  *(_QWORD *)(a1 + 192) = a2; /*0x516c*/
}

// Function: RstCheckCondition @ 0x5174 (0x38 bytes)
// Index: 113/906

__int64 __fastcall RstCheckCondition(__int64 *a1)
{
  __int64 result; // rax

  if ( a1[78] ) /*0x517a*/
  {
    result = HiiLibFindString(a1[2], a1[23], (__int64)&unk_278F0); /*0x5199*/
    a1[78] = 0; /*0x519e*/
  }
  return result; /*0x51a6*/
}

// Function: RstExtractConfig @ 0x51ac (0x36 bytes)
// Index: 114/906

__int64 __fastcall RstExtractConfig(__int64 a1, __int64 a2)
{
  __int64 result; // rax
  __int64 v3; // [rsp+38h] [rbp+10h] BYREF

  v3 = a2; /*0x51ac*/
  if ( *(_QWORD *)(a1 + 624) ) /*0x51b5*/
    return (*(__int64 (__fastcall **)(__int64 *, void *, _QWORD))(qword_58070 + 128))(&v3, &unk_278E0, 0); /*0x51d7*/
  return result; /*0x51dd*/
}

// Function: RstRouteConfig @ 0x51e4 (0x2f bytes)
// Index: 115/906

__int64 __fastcall RstRouteConfig(__int64 a1, __int64 a2)
{
  __int64 result; // rax

  result = a2; /*0x51ef*/
  if ( *(_QWORD *)(a1 + 624) ) /*0x51e8*/
    return (*(__int64 (__fastcall **)(__int64, void *))(qword_58070 + 144))(a2, &unk_278E0); /*0x5208*/
  return result; /*0x520e*/
}

// Function: RstSubmitForm @ 0x5214 (0x78 bytes)
// Index: 116/906

__int64 __fastcall RstSubmitForm(__int64 *a1)
{
  __int64 result; // rax
  __int64 String; // rdi

  result = RstProcessAction((__int64)a1); /*0x5221*/
  if ( result != 0x800000000000000FuLL && result != 0x8000000000000002uLL ) /*0x5242*/
  {
    String = HiiLibFindString(a1[2], a1[23], (__int64)&unk_278A0); /*0x525b*/
    if ( String >= 0 ) /*0x5261*/
    {
      a1[25] = 0; /*0x5263*/
      String = RstCallVtableEntry((__int64)a1); /*0x5273*/
    }
    RstCheckCondition(a1); /*0x5279*/
    return String; /*0x527e*/
  }
  return result; /*0x5286*/
}

// Function: RstReadWriteConfig @ 0x528c (0xd3 bytes)
// Index: 117/906

__int64 __fastcall RstReadWriteConfig(__int64 a1, int a2, __int64 a3, unsigned __int64 a4, __int64 a5)
{
  __int64 v5; // rsi
  __int64 v6; // r12
  __int64 v8; // rbx

  v5 = *(_QWORD *)(a1 + 200); /*0x52a5*/
  v6 = *(_QWORD *)(v5 + 8); /*0x52b4*/
  v8 = 0x8000000000000003uLL; /*0x52bd*/
  if ( !a5 || a4 / *(unsigned int *)(v6 + 12) + a3 - 1 > *(_QWORD *)(v6 + 24) ) /*0x52e3*/
    return 0x8000000000000002uLL; /*0x533a*/
  if ( !a4 ) /*0x52e8*/
    return 0; /*0x52ea*/
  if ( a4 % *(unsigned int *)(v6 + 12) ) /*0x52d6*/
    return 0x8000000000000004uLL; /*0x52f3*/
  if ( v5 ) /*0x5302*/
  {
    if ( a2 ) /*0x5313*/
    {
      v8 = (*(__int64 (__fastcall **)(__int64, _QWORD, __int64, unsigned __int64, __int64))(v5 + 32))(v5, 0, a3, a4, a5); /*0x5320*/
      if ( v8 >= 0 ) /*0x5326*/
        (*(void (__fastcall **)(_QWORD))(*(_QWORD *)(a1 + 200) + 40LL))(*(_QWORD *)(a1 + 200)); /*0x5332*/
    }
    else
    {
      return (*(__int64 (__fastcall **)(__int64, _QWORD, __int64, unsigned __int64, __int64))(v5 + 24))( /*0x5318*/
               v5,
               0,
               a3,
               a4,
               a5);
    }
  }
  return v8; /*0x5358*/
}

// Function: RstConfigRead @ 0x5360 (0x2a bytes)
// Index: 118/906

__int64 __fastcall RstConfigRead(__int64 a1)
{
  __int64 result; // rax

  result = 0x8000000000000003uLL; /*0x536c*/
  if ( *(_QWORD *)(a1 + 200) ) /*0x5364*/
    return (*(__int64 (__fastcall **)(_QWORD))(*(_QWORD *)(a1 + 200) + 16LL))(*(_QWORD *)(a1 + 200)); /*0x5382*/
  return result; /*0x5385*/
}

// Function: RstConfigWrite @ 0x538c (0x1e bytes)
// Index: 119/906

__int64 __fastcall RstConfigWrite(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
  return RstReadWriteConfig(a1, 1, a2, a3, a4); /*0x53a5*/
}

// Function: RstConfigReadVar @ 0x53ac (0x1b bytes)
// Index: 120/906

__int64 __fastcall RstConfigReadVar(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
  return RstReadWriteConfig(a1, 0, a2, a3, a4); /*0x53c2*/
}

// Function: RstContextCallbackCall @ 0x53c8 (0x2a bytes)
// Index: 121/906

__int64 __fastcall RstContextCallbackCall(__int64 a1)
{
  __int64 result; // rax

  result = 0x8000000000000003uLL; /*0x53d4*/
  if ( *(_QWORD *)(a1 + 200) ) /*0x53cc*/
    return (*(__int64 (__fastcall **)(_QWORD))(*(_QWORD *)(a1 + 200) + 40LL))(*(_QWORD *)(a1 + 200)); /*0x53ea*/
  return result; /*0x53ed*/
}

// Function: RstAuthCheckState @ 0x53f4 (0xc bytes)
// Index: 122/906

bool __fastcall RstAuthCheckState(__int64 a1)
{
  return (*(_BYTE *)(a1 + 355) & 8) != 0; /*0x53ff*/
}

// Function: RstNullSub @ 0x5400 (0x3 bytes)
// Index: 123/906

void __fastcall RstNullSub()
{
  ; /*0x5400*/
}

// Function: RstAuthAssertContext @ 0x5404 (0x12 bytes)
// Index: 124/906

__int64 __fastcall RstAuthAssertContext(_QWORD *NewContext)
{
  return Assert_137((__int64)NewContext, (__int64)(NewContext + 26), 36220);
}

// Function: RstFormatSerialNumber @ 0x5418 (0xe9 bytes)
// Index: 125/906

__int64 __fastcall RstFormatSerialNumber(__int64 a1, __int64 a2, CHAR8 **a3, double a4)
{
  CHAR8 *StartOfBuffer; // rdi
  unsigned __int64 v7; // rbx
  CHAR16 *v8; // rbx
  CHAR16 i[12]; // [rsp+30h] [rbp-78h] BYREF
  _BYTE i_1[32]; // [rsp+48h] [rbp-60h] BYREF
  CHAR16 i_2[28]; // [rsp+68h] [rbp-40h] BYREF

  StartOfBuffer = (CHAR8 *)(a1 + 368); /*0x542f*/
  if ( !*(_WORD *)(a1 + 368) ) /*0x543c*/
  {
    v7 = *(unsigned int *)(a1 + 226) | ((unsigned __int64)*(unsigned __int16 *)(a1 + 224) << 32); /*0x5461*/
    MemZero(i_1, 0, 32); /*0x5464*/
    RstFormatDiskSize((__int64)i_1, v7, *(_DWORD *)(a1 + 216), 1, 0); /*0x5480*/
    v8 = RstStringTrimCopy(i, 21, (const CHAR16 *)(a1 + 236), 0x14u); /*0x54b4*/
    RstStringTrimCopy(i_2, 41, (const CHAR16 *)(a1 + 256), 0x28u); /*0x54b7*/
    HiiCfgArraySet(StartOfBuffer, 0x100u, "%a SN:%a, %a", a4, *(double *)&v8, COERCE_DOUBLE(i_1)); /*0x54dd*/
  }
  *a3 = StartOfBuffer; /*0x54ea*/
  return 0; /*0x54fc*/
}

// Function: RstValidate @ 0x5504 (0x4a bytes)
// Index: 126/906

unsigned __int64 __fastcall RstValidate(__int64 a1, __int64 a2, CHAR16 *i, unsigned __int64 n0x14)
{
  if ( !a2 || !i || n0x14 <= 0x14 ) /*0x551b*/
    return 0x8000000000000002uLL; /*0x553f*/
  RstStringTrimCopy(i, n0x14, (const CHAR16 *)(a1 + 236), 0x14u); /*0x5536*/
  return 0; /*0x5549*/
}

// Function: RstCheckSecureBoot @ 0x5550 (0x86 bytes)
// Index: 127/906

char __fastcall RstCheckSecureBoot(__int64 a1, int n5)
{
  __int64 v4; // rax
  char v5; // bl
  int n5_1; // eax
  __int64 v8; // [rsp+30h] [rbp+8h] BYREF
  __int64 v9; // [rsp+40h] [rbp+18h] BYREF

  v4 = RstUefiReadVariable(*(_QWORD *)(a1 + 184)); /*0x556b*/
  v5 = 0; /*0x5570*/
  if ( !v4 ) /*0x5575*/
    return 0; /*0x5575*/
  v8 = v4; /*0x5577*/
  if ( (*(__int64 (__fastcall **)(void *, __int64 *, __int64 *))(qword_58070 + 184))(&unk_27890, &v8, &v9) < 0 || !v9 ) /*0x55a7*/
    return 0; /*0x55c4*/
  n5_1 = HiiLibFreeStringArray(*(_QWORD *)(a1 + 16), v9); /*0x55ad*/
  if ( !n5_1 || !n5 || n5_1 == n5 ) /*0x55bc*/
    return 1; /*0x55be*/
  return v5; /*0x55d0*/
}

// Function: RstReturnSuccess @ 0x55d8 (0x10 bytes)
// Index: 128/906

__int64 __fastcall RstReturnSuccess(_QWORD *NewContext)
{
  return HiiLibGetAllStrings(NewContext[2], NewContext[23]);
}

// Function: RstStringAllocCopy @ 0x55e8 (0x2f bytes)
// Index: 129/906

_QWORD *__fastcall RstStringAllocCopy(_QWORD *a1, char a2)
{
  CfgArrayGetBlock(a1); /*0x55f7*/
  if ( (a2 & 1) != 0 ) /*0x55ff*/
    MemFree(); /*0x5604*/
  return a1; /*0x5611*/
}

// Function: RsteDeviceAlloc @ 0x5618 (0x1fd bytes)
// Index: 130/906

void *__fastcall RsteDeviceAlloc(RST_DEVICE *Device)
{
  __int64 v1; // rdx
  void *v3; // rbx
  __int64 (__fastcall **NameString_1)(_QWORD, uint8_t *, int *); // rcx
  __int64 v5; // rbx
  int n512; // eax
  uint32_t BlockSize; // r8d
  char v8; // al
  unsigned __int64 v9; // rcx
  __int64 v10; // rax
  uint64_t LastBlock; // rcx
  uint64_t PhysicalSectorSize; // rax
  int n151; // [rsp+30h] [rbp+8h] BYREF
  __int64 (__fastcall **NameString)(_QWORD, uint8_t *, int *); // [rsp+38h] [rbp+10h] BYREF

  v1 = *(_QWORD *)&Device->reserved_090[40]; /*0x5622*/
  v3 = (void *)0x8000000000000006LL; /*0x562c*/
  if ( v1 ) /*0x5639*/
  {
    if ( HiiLibGetStringId((RST_PRIVATE_DATA *)Device->StringTable, v1, (__int64)&unk_278B0, (__int64)&NameString) ) /*0x564f*/
      return (void *)0x800000000000000ELL; /*0x564f*/
    if ( !NameString ) /*0x5662*/
      return (void *)0x800000000000000ELL; /*0x5662*/
    n151 = 151; /*0x5677*/
    MemZero(&Device->reserved_090[64], 0, 151); /*0x567c*/
    NameString_1 = NameString; /*0x5692*/
    *(_DWORD *)&Device->reserved_090[64] = 1381192805; /*0x5695*/
    *(_DWORD *)&Device->reserved_090[68] = 2; /*0x569f*/
    v5 = (*NameString_1)(NameString_1, &Device->reserved_090[64], &n151); /*0x56bd*/
    HiiLibFindString((RST_PRIVATE_DATA *)Device->StringTable, *(_QWORD *)&Device->reserved_090[40], (__int64)&unk_278B0); /*0x56c0*/
    if ( v5 < 0 ) /*0x56c8*/
      return (void *)0x800000000000000ELL; /*0x56c8*/
    n512 = *(_DWORD *)&Device->reserved_090[72]; /*0x56ce*/
    if ( n512 != 512 && n512 != 4096 ) /*0x56e0*/
      return (void *)0x800000000000000ELL; /*0x56e0*/
    if ( !HiiLibGetStringId( /*0x570d*/
            (RST_PRIVATE_DATA *)Device->StringTable,
            *(_QWORD *)&Device->reserved_090[40],
            (__int64)&unk_278A0,
            (__int64)&Device->reserved_090[56])
      && *(_QWORD *)&Device->reserved_090[56] )
    {
      BlockSize = *(_DWORD *)&Device->reserved_090[72]; /*0x5720*/
      v8 = Device->reserved_090[211] >> 2; /*0x572e*/
      v3 = 0; /*0x5731*/
      v9 = (unsigned __int64)*(unsigned __int16 *)&Device->reserved_090[80] << 32; /*0x5733*/
      Device->Flags = 0; /*0x5737*/
      Device->BitfieldBytes[0] = v8 & 1; /*0x573e*/
      v10 = *(unsigned int *)&Device->reserved_090[82]; /*0x5741*/
      Device->BitfieldBytes[1] = 1; /*0x5747*/
      LastBlock = v9 + v10 - 1; /*0x574b*/
      PhysicalSectorSize = *(unsigned int *)&Device->reserved_090[86]; /*0x5750*/
      Device->BitfieldBytes[2] = 0; /*0x5756*/
      Device->PhysicalSectorSize = PhysicalSectorSize; /*0x5759*/
      LODWORD(PhysicalSectorSize) = *(_DWORD *)&Device->reserved_090[76]; /*0x575d*/
      Device->BitfieldBytes[3] = 0; /*0x5763*/
      Device->BitfieldBytes[4] = 0; /*0x5769*/
      Device->BlockSize = BlockSize; /*0x576c*/
      Device->MediaId = 4; /*0x5770*/
      Device->LastBlock = LastBlock; /*0x5777*/
      Device->LogicalBlocksPerPhysical = (unsigned int)PhysicalSectorSize / BlockSize; /*0x577b*/
      if ( RstDebugEnabled() && *(_DWORD *)&Device->reserved_090[76] % *(_DWORD *)&Device->reserved_090[72] ) /*0x5792*/
        DebugAssert("RsteDevice.cpp", 0xE6u, "( m_idd.PhysicalSectorSize % m_idd.LogicalSectorSize ) == 0"); /*0x57af*/
      if ( RstDebugEnabled() && !Device->LogicalBlocksPerPhysical ) /*0x57bd*/
        DebugAssert("RsteDevice.cpp", 0xE7u, "mBlkMedia.LogicalBlocksPerPhysicalBlock != ( 0 )"); /*0x57d8*/
      HiiLibGetStringId( /*0x57f6*/
        (RST_PRIVATE_DATA *)Device->StringTable,
        *(_QWORD *)&Device->reserved_090[40],
        (__int64)&unk_278F0,
        (__int64)&Device->NameString);
    }
    else
    {
      return (void *)0x800000000000000ELL; /*0x57fd*/
    }
  }
  return v3; /*0x580f*/
}

// Function: RstInstallMultipleProtocols @ 0x5818 (0x5 bytes)
// Index: 131/906

// attributes: thunk
__int64 __fastcall RstInstallMultipleProtocols(__int64 a1)
{
  return RstInstallProtocols(a1);
}

// Function: RstDevicePathGet @ 0x5820 (0xc bytes)
// Index: 132/906

EFI_STATUS __fastcall RstDevicePathGet()
{
  return RstHelper_1114((__int64)&unk_27120);
}

// Function: RstDevicePathUpdate @ 0x582c (0xc bytes)
// Index: 133/906

EFI_STATUS __fastcall RstDevicePathUpdate()
{
  return RstHelper_1308((__int64)&unk_27120);
}

// Function: RstInstallClass @ 0x5838 (0x64 bytes)
// Index: 134/906

RST_LIST_ENTRY *__fastcall RstInstallClass(RST_PRIVATE_DATA *Private, void *Context)
{
  _QWORD *Vtable_1; // rax
  void *Vtable; // r11
  _QWORD *v7; // rax

  Vtable_1 = (_QWORD *)MemAlloc(24); /*0x5854*/
  Vtable = Vtable_1; /*0x5859*/
  if ( !Vtable_1 ) /*0x585f*/
    return (RST_LIST_ENTRY *)0xFFFFFFFFLL; /*0x5861*/
  *Vtable_1 = 0; /*0x5866*/
  Vtable_1[2] = Context; /*0x586a*/
  Vtable_1[1] = *(_QWORD *)&Private->Version; /*0x5872*/
  v7 = *(_QWORD **)&Private->Version; /*0x5876*/
  if ( v7 ) /*0x587d*/
    *v7 = Vtable; /*0x587f*/
  if ( !Private->Vtable ) /*0x5882*/
    Private->Vtable = Vtable; /*0x5888*/
  *(_QWORD *)&Private->Version = Vtable; /*0x588b*/
  return 0; /*0x5896*/
}

// Function: RstReturnOne @ 0x589c (0xb bytes)
// Index: 135/906

unsigned __int64 RstReturnOne()
{
  return 0x8000000000000003uLL; /*0x58a6*/
}

// Function: RstReturnThree @ 0x58a8 (0x7 bytes)
// Index: 136/906

__int64 __fastcall RstReturnThree(__int64 a1)
{
  return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 40LL))(a1);
}

// Function: RstCreateClass @ 0x58b0 (0x77 bytes)
// Index: 137/906

__int64 __fastcall RstCreateClass(__int64 a1, __int64 a2, RST_PRIVATE_DATA *Private)
{
  *(_QWORD *)(a1 + 8) = a2; /*0x58b6*/
  *(_BYTE *)(a1 + 16) = 0; /*0x58ba*/
  *(_QWORD *)a1 = off_232D0; /*0x58c5*/
  *(_QWORD *)(a1 + 24) = 0; /*0x58c8*/
  *(_QWORD *)(a1 + 32) = 0; /*0x58cd*/
  *(_QWORD *)(a1 + 40) = 0; /*0x58d2*/
  *(_QWORD *)(a1 + 48) = Private; /*0x58df*/
  *(_WORD *)(a1 + 56) = 256; /*0x58e3*/
  RstInitBrowserCallbacks((_QWORD *)(a1 + 72), a1); /*0x58ee*/
  *(_DWORD *)(a1 + 104) = 0; /*0x58f3*/
  *(_DWORD *)(a1 + 108) = 0; /*0x58f7*/
  *(_QWORD *)(a1 + 112) = 0; /*0x58fb*/
  *(_QWORD *)(a1 + 120) = 0; /*0x5900*/
  *(_QWORD *)(a1 + 128) = 0; /*0x5905*/
  *(_BYTE *)(a1 + 136) = 0; /*0x5914*/
  *(_QWORD *)a1 = off_23320; /*0x591e*/
  return a1; /*0x5921*/
}

// Function: RstUefiProtocolInstall @ 0x5928 (0x73 bytes)
// Index: 138/906

EFI_STATUS __fastcall RstUefiProtocolInstall(RST_PRIVATE_DATA *Private)
{
  void (__fastcall ***Class)(void *, _QWORD); // rbx
  __int64 v3; // rax

  Class = 0; /*0x593f*/
  if ( !RstCheckAlreadyStarted((__int64)Private, 0, 0) ) /*0x593a*/
  {
    v3 = MemAlloc(144); /*0x5952*/
    if ( v3 ) /*0x595a*/
      Class = (void (__fastcall ***)(void *, _QWORD))RstCreateClass(v3, 0, (__int64)Private); /*0x5969*/
    RstInstallClass((RST_PRIVATE_DATA *)&Private->Private_, Class); /*0x5976*/
    (**Class)(Class, 0); /*0x5983*/
  }
  return 0x8000000000000003uLL; /*0x5995*/
}

// Function: RstHelper_599c @ 0x599c (0xf bytes)
// Index: 139/906

char __fastcall RstHelper_599c(__int64 a1, _QWORD *a2)
{
  if ( !a2 ) /*0x599f*/
  {
    while ( 1 ) /*0x59a1*/
      ; /*0x59a1*/
  }
  return RstUefiProtocolGuid(a2);
}

// Function: RstUefiProtocolEntry @ 0x59ac (0x4f bytes)
// Index: 140/906

__int64 __fastcall RstUefiProtocolEntry(__int64 a1)
{
  __int64 v2; // rbx

  v2 = RstHiiPackageInstall(a1); /*0x59be*/
  if ( v2 >= 0 ) /*0x59c4*/
    HiiCreateEventEx((__int64)&dword_278C0, 8, (__int64)RstHelper_599c, a1, a1 + 728); /*0x59e8*/
  return v2; /*0x59f5*/
}

// Function: RstHelper_59fc @ 0x59fc (0x22 bytes)
// Index: 141/906

__int64 RstHelper_59fc__int64 a1)
{
  __int64 v1; // rcx

  v1 = *(_QWORD *)(a1 + 704); /*0x5a00*/
  if ( v1 ) /*0x5a0a*/
    return HiiLibReturnZero(*(_QWORD *)(v1 + 16)); /*0x5a10*/
  else
    return 0; /*0x5a17*/
}

// Function: RstDeviceGetRaidLevelFromCtx @ 0x5a20 (0x22 bytes)
// Index: 142/906

__int64 __fastcall RstDeviceGetRaidLevelFromCtx(__int64 a1)
{
  __int64 v1; // rcx

  v1 = *(_QWORD *)(a1 + 704); /*0x5a24*/
  if ( v1 ) /*0x5a2e*/
    return RstGetUint108(*(_QWORD *)(v1 + 16)); /*0x5a34*/
  else
    return 0; /*0x5a3b*/
}

// Function: RstHelper_5a44 @ 0x5a44 (0x22 bytes)
// Index: 143/906

__int64 RstHelper_5a44__int64 a1, unsigned int a2)
{
  __int64 v2; // rcx

  v2 = *(_QWORD *)(a1 + 704); /*0x5a48*/
  if ( v2 ) /*0x5a52*/
    return HiiLibReturnOne(*(_QWORD *)(v2 + 16), a2); /*0x5a58*/
  else
    return 0; /*0x5a5f*/
}

// Function: RstHelper_5a68 @ 0x5a68 (0x22 bytes)
// Index: 144/906

__int64 RstHelper_5a68__int64 a1, unsigned int a2)
{
  __int64 v2; // rcx

  v2 = *(_QWORD *)(a1 + 704); /*0x5a6c*/
  if ( v2 ) /*0x5a76*/
    return HiiLibReturnFalse(*(_QWORD *)(v2 + 16), a2); /*0x5a7c*/
  else
    return 0; /*0x5a83*/
}

// Function: RstHelper_5a8c @ 0x5a8c (0x22 bytes)
// Index: 145/906

__int64 __fastcall RstHelper_5a8c(__int64 a1, unsigned int a2, const char *en)
{
  __int64 v3; // rcx

  v3 = *(_QWORD *)(a1 + 704); /*0x5a90*/
  if ( v3 ) /*0x5a9a*/
    return HiiLibGetStringFromPackage(*(_QWORD *)(v3 + 16), a2, (__int64)en); /*0x5aa0*/
  else
    return 0; /*0x5aa7*/
}

// Function: RstProtocolEfiCall @ 0x5ab0 (0xd bytes)
// Index: 146/906

__int64 __fastcall RstProtocolEfiCall(__int64 a1)
{
  return (**(__int64 (__fastcall ***)(__int64))(a1 - 520))(a1 - 520);
}

// Function: RstProtocolEfiCall2 @ 0x5ac0 (0x31 bytes)
// Index: 147/906

__int64 __fastcall RstProtocolEfiCall2(__int64 a1, __int64 a2, __int64 a3)
{
  if ( a1 && a2 && a3 ) /*0x5ad1*/
    return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)(a1 - 568) + 8LL))(a1 - 568); /*0x5add*/
  else
    return 0x8000000000000002uLL; /*0x5ae2*/
}

// Function: RstProtocolEfiCall3 @ 0x5af4 (0x31 bytes)
// Index: 148/906

__int64 __fastcall RstProtocolEfiCall3(__int64 a1, __int64 a2, __int64 a3)
{
  if ( a1 && a2 && a3 ) /*0x5b05*/
    return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)(a1 - 592) + 8LL))(a1 - 592); /*0x5b11*/
  else
    return 0x8000000000000002uLL; /*0x5b16*/
}

// Function: RstInstallProtocols @ 0x5b28 (0x84 bytes)
// Index: 149/906

__int64 __fastcall RstInstallProtocols(__int64 a1)
{
  return (*(__int64 (__fastcall **)(_QWORD, void *, __int64, void *, __int64, void *, __int64, void *, __int64, void *, __int64, _QWORD))(qword_58070 + 336))( /*0x5ba7*/
           *(_QWORD *)(a1 + 624),
           &unk_27740,
           a1 + 520,
           &unk_27770,
           a1 + 568,
           &unk_27760,
           a1 + 592,
           &unk_27820,
           a1 + 616,
           &unk_27900,
           a1 + 8,
           0);
}

// Function: RstHiiPackageInstall @ 0x5bac (0x84 bytes)
// Index: 150/906

__int64 __fastcall RstHiiPackageInstall(__int64 a1)
{
  __int64 result; // rax

  result = (*(__int64 (__fastcall **)(__int64, void *, __int64, void *, __int64, void *, __int64, void *, __int64, _QWORD))(qword_58070 + 328))( /*0x5c16*/
             a1 + 624,
             &unk_27740,
             a1 + 520,
             &unk_27770,
             a1 + 568,
             &unk_27760,
             a1 + 592,
             &unk_27820,
             a1 + 616,
             0);
  if ( result >= 0 ) /*0x5c1f*/
    return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 56LL))(a1); /*0x5c27*/
  return result; /*0x5c2a*/
}

// Function: RstGetVariableUefi @ 0x5c30 (0x37 bytes)
// Index: 151/906

__int64 __fastcall RstGetVariableUefi(RST_PRIVATE_DATA *Private, __int16 *RstUefiV)
{
  RstGetGlobalContext(); /*0x5c39*/
  return (*(__int64 (__fastcall **)(__int16 *, void *, __int64))(RuntimeServices + 88))(RstUefiV, &unk_27178, 6); /*0x5c61*/
}

// Function: RstGetRaidVariable @ 0x5c68 (0xab bytes)
// Index: 152/906

__int64 __fastcall RstGetRaidVariable(RST_PRIVATE_DATA *Private, __int16 *VrocHwKeyId)
{
  __int64 v2; // rbx
  _BYTE *v5; // rdi

  v2 = 0; /*0x5c7c*/
  if ( !VrocHwKeyId ) /*0x5c84*/
    return 0x8000000000000002uLL; /*0x5c86*/
  v5 = (_BYTE *)MemAllocPages(7); /*0x5c9f*/
  if ( v5 ) /*0x5ca5*/
  {
    if ( !RstGenerateXorPattern() ) /*0x5cc0*/
      v2 = (*(__int64 (__fastcall **)(__int16 *, void *, __int64, __int64, _BYTE *))(RuntimeServices + 88))( /*0x5ced*/
             VrocHwKeyId,
             &unk_27178,
             6,
             6,
             v5);
    MemZeroThenFree(v5, 7); /*0x5cf6*/
    return v2; /*0x5cfb*/
  }
  else
  {
    MemZeroThenFree(0, 7); /*0x5cac*/
    return 0x8000000000000009uLL; /*0x5cb1*/
  }
}

// Function: RstParseRaidVariable @ 0x5d14 (0x1fc bytes)
// Index: 153/906

EFI_STATUS __fastcall RstParseRaidVariable(RST_PRIVATE_DATA *Private)
{
  const __m128i *v1; // rdx
  CHAR16 *Source_2; // r8
  CHAR16 *Source; // r13
  const __m128i *v5; // r14
  signed __int64 RaidVariable; // rbx
  __int64 i; // rdi
  unsigned __int16 Length; // ax
  __m128i v9; // xmm5
  const CHAR16 *Source_1; // rax
  __int64 v11; // r8
  __int64 (__fastcall **v12)(void *, __int64, _QWORD, __int64, void **); // r11
  void (__fastcall **DeviceListHead)(void *); // rax
  __int64 (__fastcall **v14)(void *, __int64); // rax

  Private->field_2A8 = 0; /*0x5d31*/
  Private->DeviceListHead = 0; /*0x5d39*/
  Source = Source_2; /*0x5d48*/
  v5 = v1; /*0x5d55*/
  if ( (*(__int64 (__fastcall **)(void *, _QWORD, void **))(qword_58070 + 320))(&unk_27880, 0, &Private->field_2A8) >= 0 /*0x5d9f*/
    && Private->field_2A8
    || (RaidVariable = (*(__int64 (__fastcall **)(void *, _QWORD, void **))(qword_58070 + 320))(
                         &unk_277E0,
                         0,
                         &Private->DeviceListHead),
        RaidVariable >= 0)
    && Private->DeviceListHead )
  {
    i = MemAllocPages(92); /*0x5dc2*/
    MemZero((_BYTE *)i, 0, 92); /*0x5dc5*/
    *(_DWORD *)i = 1229342037; /*0x5dd9*/
    *(_DWORD *)(i + 4) = 92; /*0x5ddf*/
    *(_BYTE *)(i + 8) = 1; /*0x5de2*/
    StrnCpy((CHAR16 *)(i + 10), "INTEL", 5u); /*0x5de6*/
    Length = StrLenA(Source); /*0x5dee*/
    StrnCpy((CHAR16 *)(i + 16), Source, Length); /*0x5dfe*/
    v9 = _mm_loadu_si128(v5); /*0x5e06*/
    *(_WORD *)(i + 52) = 54; /*0x5e0b*/
    *(__m128i *)(i + 36) = v9; /*0x5e0f*/
    Source_1 = (const CHAR16 *)RstGetGlobalContext(); /*0x5e14*/
    StrnCpy((CHAR16 *)(i + 54), Source_1, 0x26u); /*0x5e24*/
    v12 = (__int64 (__fastcall **)(void *, __int64, _QWORD, __int64, void **))Private->field_2A8; /*0x5e29*/
    if ( v12 ) /*0x5e37*/
    {
      LOBYTE(v11) = 1; /*0x5e43*/
      RaidVariable = v12[1](Private->field_2A8, i, v11, 14, &Private->DeviceListTail); /*0x5e55*/
    }
    else
    {
      DeviceListHead = (void (__fastcall **)(void *))Private->DeviceListHead; /*0x5e5a*/
      if ( DeviceListHead ) /*0x5e64*/
      {
        if ( Private->DeviceListTail ) /*0x5e66*/
          DeviceListHead[1](Private->DeviceListHead); /*0x5e75*/
        (*(void (__fastcall **)(void *, __int64, __int64, void **))Private->DeviceListHead)( /*0x5e92*/
          Private->DeviceListHead,
          i,
          92,
          &Private->DeviceListTail);
        RstGetVariableUefi((__int64)Private, L"RstUefiV"); /*0x5e9e*/
        RaidVariable = RstGetRaidVariable((__int64)Private, L"VrocHwKeyId"); /*0x5eb2*/
      }
      else
      {
        RaidVariable = 0x800000000000000EuLL; /*0x5eb7*/
      }
    }
    if ( RaidVariable >= 0 ) /*0x5ec9*/
    {
      v14 = (__int64 (__fastcall **)(void *, __int64))Private->field_2A8; /*0x5ecb*/
      if ( v14 ) /*0x5ed5*/
        RaidVariable = v14[2](Private->field_2A8, 14); /*0x5ee0*/
    }
    MemZeroThenFree((_BYTE *)i, 92); /*0x5ee9*/
  }
  return RaidVariable; /*0x5f05*/
}

// Function: RstInstallHiiConfigAccess @ 0x5f10 (0x35 bytes)
// Index: 154/906

__int64 __fastcall RstInstallHiiConfigAccess(RST_PRIVATE_DATA *Private, char *VROC)
{
  Private->HiiLibFunctions[0] = VROC; /*0x5f1a*/
  return (*(__int64 (__fastcall **)(void **, void *, uint32_t *, _QWORD, _QWORD))(qword_58070 + 328))( /*0x5f40*/
           &Private->ImageHandle,
           &unk_27900,
           &Private->Version,
           0,
           0);
}

// Function: RstSetVariableUefi @ 0x5f48 (0x41 bytes)
// Index: 155/906

__int64 __fastcall RstSetVariableUefi(RST_PRIVATE_DATA *Private, wchar_t *RstUefiF)
{
  return (*(__int64 (__fastcall **)(wchar_t *, void *, __int64))(RuntimeServices + 88))(RstUefiF, &unk_27178, 2); /*0x5f84*/
}

// Function: VarInstall @ 0x5f8c (0x53 bytes)
// Index: 156/906

__int64 __fastcall VarInstall(
        RST_PRIVATE_DATA *Private,
        const __m128i *a2,
        CHAR16 *RstUefiV,
        __int16 *RstUefiV_1,
        char *VROC,
        wchar_t *RstUefiF)
{
  RstParseRaidVariable(Private); /*0x5f9c*/
  RstGetVariableUefi(Private, RstUefiV_1); /*0x5fa7*/
  RstGetRaidVariable(Private, L"VrocHwKeyId"); /*0x5fb6*/
  RstInstallHiiConfigAccess((__int64)Private, VROC); /*0x5fc3*/
  return RstSetVariableUefi((__int64)Private, RstUefiF); /*0x5fd5*/
}

// Function: RstDriverBindingStart @ 0x5fe0 (0xf bytes)
// Index: 157/906

EFI_STATUS __fastcall RstDriverBindingStart(RST_PRIVATE_DATA *Private)
{
  _BYTE *v1; // rdx
  _QWORD *v2; // r8

  return RstParseUnicodeString(v1, &i_, v2);
}
/* Orphan comments:
"en-US"
*/

// Function: RstMainDispatch @ 0x5ff0 (0x41 bytes)
// Index: 158/906

__int64 __fastcall RstMainDispatch(_QWORD *a1)
{
  __int64 **i; // rbx
  __int64 result; // rax

  for ( i = (__int64 **)a1[88]; i; i = (__int64 **)*i ) /*0x5ffa*/
  {
    result = (*(__int64 (__fastcall **)(__int64 *))(*i[2] + 40))(i[2]); /*0x600d*/
    if ( result < 0 ) /*0x6013*/
      return result; /*0x6013*/
  }
  return (*(__int64 (__fastcall **)(_QWORD *))(*a1 + 24LL))(a1); /*0x602b*/
}

// Function: RstCheckAlreadyStarted @ 0x6034 (0x55 bytes)
// Index: 159/906

__int64 __fastcall RstCheckAlreadyStarted(RST_PRIVATE_DATA *Private, __int64 a2, char a3)
{
  _QWORD *Private_; // rax
  __int64 v5; // rbx
  _QWORD *p_i; // [rsp+30h] [rbp+8h] BYREF

  Private_ = Private->Private_; /*0x6041*/
  if ( !Private_ ) /*0x6047*/
    return 0; /*0x6049*/
  p_i = Private->Private_; /*0x604d*/
  while ( *(_QWORD *)(Private_[2] + 8LL) != a2 ) /*0x605a*/
  {
    Private_ = (_QWORD *)*Private_; /*0x605c*/
    p_i = Private_; /*0x605f*/
    if ( !Private_ ) /*0x6067*/
      return 0; /*0x6067*/
  }
  v5 = Private_[2]; /*0x606b*/
  if ( a3 ) /*0x6071*/
    RstInstallConfigAccess(&Private->Private_, &p_i); /*0x607b*/
  return v5; /*0x6083*/
}

// Function: RstFindDriverByHandle @ 0x608c (0x3c bytes)
// Index: 160/906

_QWORD *__fastcall RstFindDriverByHandle(__int64 a1, __int64 a2)
{
  _QWORD *i; // rbx
  _QWORD *result; // rax

  for ( i = *(_QWORD **)(a1 + 704); i; i = (_QWORD *)*i ) /*0x6096*/
  {
    result = RstConfigAccessCallback(i[2], a2); /*0x60a9*/
    if ( result ) /*0x60b1*/
      return result; /*0x60b1*/
  }
  return 0; /*0x60c2*/
}

// Function: RstUefiProtocolGuid @ 0x60c8 (0xbd bytes)
// Index: 161/906

EFI_STATUS __fastcall RstUefiProtocolGuid(RST_PRIVATE_DATA *Private)
{
  __int64 **i; // rbx
  char v3; // di
  __int64 **v4; // rbx
  char v5; // al
  EFI_STATUS result; // rax
  __int64 **j; // rbx

  MemZero(Private->GuidProtocolArea, 0, 48); /*0x60e2*/
  for ( i = (__int64 **)qword_35418[88]; i; i = (__int64 **)*i ) /*0x60ee*/
    (*(void (__fastcall **)(__int64 *))(*i[2] + 48))(i[2]); /*0x60fe*/
  RstDriverContextInitialize(); /*0x6109*/
  RstParseRaidVariable(Private); /*0x611f*/
  v3 = 1; /*0x612b*/
  v4 = (__int64 **)qword_35418[88]; /*0x612e*/
  while ( v4 )
  {
    v5 = (*(__int64 (__fastcall **)(__int64 *))(*v4[2] + 56))(v4[2]); /*0x613e*/
    v4 = (__int64 **)*v4; /*0x6141*/
    v3 = v5 != 0 ? v3 : 0;
  }
  RstAuthInstallProtocol(); /*0x6150*/
  for ( j = (__int64 **)qword_35418[88]; j; j = (__int64 **)*j ) /*0x615c*/
    result = (*(__int64 (__fastcall **)(__int64 *))(*j[2] + 64))(j[2]); /*0x616c*/
  LOBYTE(result) = v3; /*0x6177*/
  return result; /*0x617f*/
}

// Function: RstComponentNameGetDriverName @ 0x6188 (0x6e bytes)
// Index: 162/906

__int64 __fastcall RstComponentNameGetDriverName(__int64 a1, __int64 a2, __int64 a3)
{
  __int64 v3; // rdi
  __int64 (__fastcall ***v6)(_QWORD, __int64); // rax
  _QWORD *DriverByHandle; // rax

  v3 = a1 - 520; /*0x6197*/
  v6 = (__int64 (__fastcall ***)(_QWORD, __int64))RstCheckAlreadyStarted(a1 - 520, a2, 0); /*0x61aa*/
  if ( v6 ) /*0x61b5*/
    return (**v6)(v6, a3); /*0x61e4*/
  DriverByHandle = RstFindDriverByHandle(v3, a2); /*0x61bd*/
  if ( DriverByHandle ) /*0x61c8*/
    return (*(__int64 (__fastcall **)(_QWORD *))(*DriverByHandle + 8LL))(DriverByHandle); /*0x61d9*/
  else
    return 0x8000000000000003uLL; /*0x61ca*/
}

// Function: RstComponentNameGetControllerName @ 0x61f8 (0x8b bytes)
// Index: 163/906

__int64 __fastcall RstComponentNameGetControllerName(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
  __int64 v4; // rsi
  __int64 v7; // rbx
  __int64 Context_1; // rax
  void *Context; // rdi

  v4 = a1 - 520; /*0x6211*/
  v7 = 0x8000000000000002uLL; /*0x6228*/
  Context_1 = RstCheckAlreadyStarted((RST_PRIVATE_DATA *)(a1 - 520), a2, a3 == 0); /*0x6232*/
  Context = (void *)Context_1; /*0x6237*/
  if ( Context_1 ) /*0x623d*/
  {
    v7 = (*(__int64 (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)Context_1 + 8LL))(Context_1, a3, a4); /*0x624e*/
    if ( v7 < 0 ) /*0x6254*/
      RstInstallClass((RST_PRIVATE_DATA *)(v4 + 704), Context); /*0x6260*/
  }
  return v7; /*0x627c*/
}

// Function: RstComponentName2GetController @ 0x6284 (0x8b bytes)
// Index: 164/906

__int64 __fastcall RstComponentName2GetController(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
  __int64 result; // rax
  __int64 v8; // rax
  _QWORD *v9; // rax

  result = 0x8000000000000002uLL; /*0x6294*/
  if ( a1 && a4 && a5 && a2 ) /*0x62b3*/
  {
    v8 = RstCheckAlreadyStarted(a1, a2, 0); /*0x62b8*/
    if ( v8 ) /*0x62c3*/
    {
      if ( !a3 ) /*0x62c8*/
        return (*(__int64 (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)v8 + 24LL))(v8, a4, a5); /*0x62f8*/
      v9 = RstConfigAccessCallback(v8, a3); /*0x62cd*/
      if ( v9 ) /*0x62d8*/
        return (*(__int64 (__fastcall **)(_QWORD *, __int64, __int64))(*v9 + 64LL))(v9, a4, a5); /*0x62e8*/
    }
    return 0x8000000000000003uLL; /*0x62fa*/
  }
  return result; /*0x6309*/
}

// Function: RstGetLanguage @ 0x6310 (0x3f bytes)
// Index: 165/906

__int64 __fastcall RstGetLanguage(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
  if ( a1 && a4 && a5 && a2 ) /*0x632b*/
    return RstComponentName2GetController(a1 - 568, a2, a3, a4, a5); /*0x6339*/
  else
    return 0x8000000000000002uLL; /*0x6340*/
}

// Function: RstSetLanguage @ 0x6350 (0x3f bytes)
// Index: 166/906

__int64 __fastcall RstSetLanguage(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5)
{
  if ( a1 && a4 && a5 && a2 ) /*0x636b*/
    return RstComponentName2GetController(a1 - 592, a2, a3, a4, a5); /*0x6379*/
  else
    return 0x8000000000000002uLL; /*0x6380*/
}

// Function: RstHelper_6390 @ 0x6390 (0xc bytes)
// Index: 167/906

char RstHelper_6390()
{
  return RstUefiProtocolGuid(qword_35418);
}

// Function: RstPrivateDataInit @ 0x639c (0x368 bytes)
// Index: 168/906

__int64 __fastcall RstPrivateDataInit(__int64 a1, EFI_HANDLE ImageHandle)
{
  __int64 v4; // rax
  char *_en_US_; // rax

  *(_QWORD *)a1 = &off_23400; /*0x63b2*/
  *(_QWORD *)(a1 + 704) = 0; /*0x63b5*/
  *(_QWORD *)(a1 + 712) = 0; /*0x63bd*/
  MemZero((_BYTE *)(a1 + 632), 0, 48); /*0x63d3*/
  *(_QWORD *)(a1 + 624) = ImageHandle; /*0x63d8*/
  qword_35418 = (_QWORD *)a1; /*0x63df*/
  *(_QWORD *)(a1 + 696) = 0; /*0x63e6*/
  *(_QWORD *)(a1 + 520) = RstProtocolEfiCall; /*0x63f9*/
  *(_QWORD *)(a1 + 528) = RstComponentNameGetDriverName; /*0x6409*/
  *(_QWORD *)(a1 + 536) = RstComponentNameGetControllerName; /*0x641d*/
  v4 = *(_QWORD *)(a1 + 624); /*0x6424*/
  *(_DWORD *)(a1 + 544) = 11; /*0x642b*/
  *(_QWORD *)(a1 + 552) = v4; /*0x6435*/
  *(_QWORD *)(a1 + 560) = v4; /*0x643c*/
  *(_QWORD *)(a1 + 568) = RstProtocolEfiCall2; /*0x644a*/
  *(_DWORD *)(a1 + 616) = 8; /*0x6458*/
  *(_QWORD *)(a1 + 576) = RstGetLanguage; /*0x6462*/
  _en_US_ = off_27138[0]; // "en-US" /*0x6469*/
  *(_DWORD *)(a1 + 620) = (_DWORD)&loc_20009 + 1; /*0x6470*/
  *(_QWORD *)(a1 + 584) = _en_US_; /*0x647a*/
  *(_QWORD *)(a1 + 592) = RstProtocolEfiCall3; /*0x6488*/
  *(_QWORD *)(a1 + 600) = RstSetLanguage; /*0x6496*/
  *(char **)(a1 + 608) = off_27140[0]; // "eng" /*0x64a4*/
  MemZero((_BYTE *)(a1 + 8), 0, 512); /*0x64ab*/
  *(_QWORD *)(a1 + 24) = RstDeviceGetSlotCapacity; /*0x64b7*/
  *(_DWORD *)(a1 + 8) = 16; /*0x64c2*/
  *(_QWORD *)(a1 + 32) = Assert_121; /*0x64c9*/
  *(_DWORD *)(a1 + 12) = 512; /*0x64d4*/
  *(_QWORD *)(a1 + 40) = RstHelper_ce6c; /*0x64db*/
  *(_QWORD *)(a1 + 48) = Assert_116; /*0x64e6*/
  *(_QWORD *)(a1 + 56) = RstDeviceGetRaidLevelFromIndex; /*0x64f1*/
  *(_QWORD *)(a1 + 64) = RstVolGetDeviceStatus; /*0x64fc*/
  *(_QWORD *)(a1 + 72) = RstHelper_c8a8; /*0x6507*/
  *(_QWORD *)(a1 + 80) = RstDeviceSetPropertyByIndex; /*0x6512*/
  *(_QWORD *)(a1 + 88) = Assert_129; /*0x651d*/
  *(_QWORD *)(a1 + 96) = RstRaidOpFindFailedDisk; /*0x6528*/
  *(_QWORD *)(a1 + 104) = RstDeviceClearAndRelease; /*0x6533*/
  *(_QWORD *)(a1 + 112) = RstDeviceClear; /*0x653e*/
  *(_QWORD *)(a1 + 120) = RstDeviceGetLevel; /*0x6549*/
  *(_QWORD *)(a1 + 128) = Assert_24; /*0x6554*/
  *(_QWORD *)(a1 + 136) = RstVolCheckMemberSameLevel; /*0x6562*/
  *(_QWORD *)(a1 + 144) = RstVolFindFirstMember; /*0x6570*/
  *(_QWORD *)(a1 + 152) = RstVolFindSmallestCapacity; /*0x657e*/
  *(_QWORD *)(a1 + 168) = RstHelper_be04; /*0x658c*/
  *(_QWORD *)(a1 + 176) = RstRaidMemberRemove; /*0x659a*/
  *(_QWORD *)(a1 + 184) = RstRaidMemberAdd; /*0x65a8*/
  *(_QWORD *)(a1 + 192) = RstDeviceGetFirstWord; /*0x65b6*/
  *(_QWORD *)(a1 + 200) = RstDeviceGetStatusByte; /*0x65c4*/
  *(_QWORD *)(a1 + 208) = RstDeviceCountOnline; /*0x65d2*/
  *(_QWORD *)(a1 + 216) = RstDeviceCheckAllReady; /*0x65e0*/
  *(_QWORD *)(a1 + 160) = DxeInstall_3; /*0x65ee*/
  *(_QWORD *)(a1 + 224) = RstDeviceStartOp; /*0x65fc*/
  *(_QWORD *)(a1 + 232) = RstDeviceGetFeatureFlagBit; /*0x660a*/
  *(_QWORD *)(a1 + 240) = RstGetGlobalContextPtr; /*0x6618*/
  *(_QWORD *)(a1 + 248) = RstDeviceGetName; /*0x6626*/
  *(_QWORD *)(a1 + 256) = RstDeviceGetProperty; /*0x6634*/
  *(_QWORD *)(a1 + 488) = Assert_19; /*0x6642*/
  *(_QWORD *)(a1 + 472) = Assert_107; /*0x6650*/
  *(_QWORD *)(a1 + 480) = Assert_29; /*0x665e*/
  *(_QWORD *)(a1 + 496) = RstDeviceGetFieldCount; /*0x666c*/
  *(_QWORD *)(a1 + 504) = RstDeviceIsRaidLevel; /*0x667a*/
  *(_QWORD *)(a1 + 336) = RstHelper_6390; /*0x6688*/
  *(_QWORD *)(a1 + 424) = j_j_HiiLibGuidIsZero; /*0x6696*/
  *(_QWORD *)(a1 + 432) = j_j_HiiBlockCompare; /*0x66a4*/
  *(_QWORD *)(a1 + 440) = RstDeviceGetRaidLevelByIndex; /*0x66b2*/
  *(_QWORD *)(a1 + 448) = RstDeviceCountConfigured; /*0x66c0*/
  *(_QWORD *)(a1 + 456) = j_j_HiiLibGuidToStr; /*0x66ce*/
  *(_QWORD *)(a1 + 464) = j_j_HiiBlockCompareConst; /*0x66dc*/
  *(_QWORD *)(a1 + 512) = RstDeviceBlockSizeToStripe; /*0x66ea*/
  RstValidateGlobalContext(); /*0x66f1*/
  return a1; /*0x66fe*/
}

// Function: EfiDriverInit @ 0x6704 (0xe6 bytes)
// Index: 169/906

__int64 __fastcall EfiDriverInit(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  char v4; // al
  __int64 SystemTable_1; // r8

  ::SystemTable = SystemTable; /*0x6714*/
  v4 = RstDebugEnabled(); /*0x671b*/
  SystemTable_1 = ::SystemTable; /*0x6720*/
  if ( v4 && !::SystemTable ) /*0x672e*/
  {
    DebugAssert("EfiInit.cpp", 0x1Au, "gST != 0"); /*0x6743*/
    SystemTable_1 = ::SystemTable; /*0x6748*/
  }
  qword_58070 = *(_QWORD *)(SystemTable_1 + 96); /*0x6753*/
  RuntimeServices = *(_QWORD *)(SystemTable_1 + 88); /*0x675e*/
  if ( RstDebugEnabled() && !qword_58070 ) /*0x6776*/
    DebugAssert("EfiInit.cpp", 0x1Du, "gBS != 0"); /*0x678b*/
  if ( RstDebugEnabled() && !RuntimeServices ) /*0x67a1*/
    DebugAssert("EfiInit.cpp", 0x1Eu, "gRT != 0"); /*0x67b6*/
  if ( RstDebugEnabled2() )
    DebugPrintSerial(64, "efiDxeInitialize: Started\n");
  return RstDriverInit2(ImageHandle, SystemTable); /*0x67e0*/
}

// Function: RstHelper_67ec @ 0x67ec (0xf bytes)
// Index: 170/906

unsigned __int64 __fastcall RstHelper_67ec(__int64 a1, _BYTE *a2, _QWORD *a3)
{
  return RstParseUnicodeString(a2, &i__6, a3);
}
/* Orphan comments:
"en-US"
*/

// Function: RstInstallConfigAccess @ 0x67fc (0x34 bytes)
// Index: 171/906

__int64 __fastcall RstInstallConfigAccess(_QWORD *Private, _QWORD **p_i)
{
  _QWORD *i; // r8
  _QWORD *Private_1; // r9
  __int64 v4; // rax

  i = *p_i; /*0x67fc*/
  Private_1 = Private; /*0x67ff*/
  if ( (_QWORD *)*Private != *p_i ) /*0x6808*/
    Private = (_QWORD *)i[1]; /*0x680a*/
  *Private = **p_i; /*0x680e*/
  v4 = i[1]; /*0x6811*/
  if ( (_QWORD *)Private_1[1] == i ) /*0x6819*/
    Private_1[1] = v4; /*0x681b*/
  else
    *(_QWORD *)(*i + 8LL) = v4; /*0x6824*/
  return MemFree();
}

// Function: RstConfigAccessExtract @ 0x6830 (0x13c bytes)
// Index: 172/906

EFI_STATUS __fastcall RstConfigAccessExtract(RST_PRIVATE_DATA *Private)
{
  unsigned __int64 v1; // rdx
  __int64 v2; // r8
  signed __int64 v3; // rdi
  __int64 v4; // r12
  unsigned __int64 v5; // rbp
  void **Private_1; // rsi
  _QWORD *i; // rbx
  __int64 v8; // rax
  _QWORD *v9; // rcx
  void (__fastcall ***v10)(_QWORD, __int64); // rcx
  _QWORD *j; // rbx
  __int64 v12; // rax
  _QWORD *v13; // rcx
  void (__fastcall ***v14)(_QWORD, __int64); // rcx
  _QWORD *p_i; // [rsp+48h] [rbp+10h] BYREF

  v3 = 0; /*0x6842*/
  v4 = v2; /*0x6844*/
  v5 = v1; /*0x6847*/
  if ( v1 ) /*0x684d*/
  {
    if ( v2 ) /*0x6856*/
    {
      Private_1 = &Private->HiiLibFunctions[1]; /*0x6867*/
      for ( i = Private->HiiLibFunctions[1]; ; i = (_QWORD *)*i ) /*0x686b*/
      {
        p_i = i; /*0x68d7*/
        if ( !i ) /*0x68df*/
          break; /*0x68df*/
        if ( (*(unsigned __int8 (__fastcall **)(_QWORD))(*(_QWORD *)i[2] + 104LL))(i[2]) ) /*0x6877*/
        {
          v8 = 0; /*0x687e*/
          if ( v5 ) /*0x6883*/
          {
            v9 = (_QWORD *)i[2]; /*0x6885*/
            while ( *(_QWORD *)(v4 + 8 * v8) != v9[1] ) /*0x6891*/
            {
              if ( ++v8 >= v5 ) /*0x6899*/
                goto LABEL_15; /*0x6899*/
            }
            v3 = (*(__int64 (__fastcall **)(_QWORD *))(*v9 + 16LL))(v9); /*0x68a3*/
            if ( v3 >= 0 ) /*0x68a9*/
            {
              v10 = (void (__fastcall ***)(_QWORD, __int64))i[2]; /*0x68ab*/
              if ( v10 ) /*0x68b2*/
                (**v10)(v10, 1); /*0x68bc*/
              RstInstallConfigAccess(Private_1, &p_i); /*0x68c7*/
              i = *Private_1; /*0x68cc*/
              if ( !*Private_1 ) /*0x68cc*/
                break; /*0x68cc*/
            }
          }
        }
LABEL_15:
        ; /*0x68d4*/
      }
      for ( j = *Private_1; ; j = (_QWORD *)*j ) /*0x68e1*/
      {
        p_i = j; /*0x694c*/
        if ( !j ) /*0x6954*/
          break; /*0x6954*/
        if ( !(*(unsigned __int8 (__fastcall **)(_QWORD))(*(_QWORD *)j[2] + 104LL))(j[2]) ) /*0x68ed*/
        {
          v12 = 0; /*0x68f4*/
          if ( v5 ) /*0x68f9*/
          {
            v13 = (_QWORD *)j[2]; /*0x68fb*/
            while ( *(_QWORD *)(v4 + 8 * v12) != v13[1] ) /*0x6907*/
            {
              if ( ++v12 >= v5 ) /*0x690f*/
                goto LABEL_28; /*0x690f*/
            }
            v3 = (*(__int64 (__fastcall **)(_QWORD *))(*v13 + 16LL))(v13); /*0x6919*/
            if ( v3 >= 0 ) /*0x691f*/
            {
              v14 = (void (__fastcall ***)(_QWORD, __int64))j[2]; /*0x6921*/
              if ( v14 ) /*0x6928*/
                (**v14)(v14, 1); /*0x6932*/
              RstInstallConfigAccess(Private_1, &p_i); /*0x693c*/
              j = *Private_1; /*0x6941*/
              if ( !*Private_1 ) /*0x6941*/
                break; /*0x6941*/
            }
          }
        }
LABEL_28:
        ; /*0x6949*/
      }
    }
    else
    {
      return 0x8000000000000002uLL; /*0x6858*/
    }
  }
  return v3; /*0x6963*/
}

// Function: RstConfigAccessRoute @ 0x696c (0xa7 bytes)
// Index: 173/906

__int64 __fastcall RstConfigAccessRoute(__int64 a1)
{
  _QWORD **v1; // rdi
  __int64 v2; // rsi
  __int64 **i; // rbx
  _QWORD *j; // rbx
  void (__fastcall ***v5)(_QWORD, __int64); // rcx
  _QWORD *p_i; // [rsp+30h] [rbp+8h] BYREF

  v1 = (_QWORD **)(a1 + 24); /*0x697b*/
  v2 = 0; /*0x697f*/
  for ( i = *(__int64 ***)(a1 + 24); i; i = (__int64 **)*i ) /*0x6981*/
  {
    if ( (*(unsigned __int8 (__fastcall **)(__int64 *))(*i[2] + 104))(i[2]) ) /*0x698d*/
      v2 = (*(__int64 (__fastcall **)(__int64 *))(*i[2] + 16))(i[2]); /*0x699e*/
  }
  for ( j = *v1; j; j = (_QWORD *)*j ) /*0x69a9*/
  {
    if ( !(*(unsigned __int8 (__fastcall **)(_QWORD))(*(_QWORD *)j[2] + 104LL))(j[2]) ) /*0x69b5*/
      v2 = (*(__int64 (__fastcall **)(_QWORD))(*(_QWORD *)j[2] + 16LL))(j[2]); /*0x69c6*/
  }
  while ( *v1 ) /*0x69fe*/
  {
    v5 = (void (__fastcall ***)(_QWORD, __int64))(*v1)[2]; /*0x69d3*/
    p_i = *v1; /*0x69d7*/
    if ( v5 ) /*0x69df*/
      (**v5)(v5, 1); /*0x69e9*/
    RstInstallConfigAccess(v1, &p_i); /*0x69f3*/
  }
  return v2; /*0x6a0d*/
}

// Function: RstConfigAccessCallback @ 0x6a14 (0x1e bytes)
// Index: 174/906

_QWORD *__fastcall RstConfigAccessCallback(__int64 a1, __int64 a2)
{
  _QWORD *result; // rax

  for ( result = *(_QWORD **)(a1 + 24); result; result = (_QWORD *)*result ) /*0x6a14*/
  {
    if ( *(_QWORD *)(result[2] + 8LL) == a2 ) /*0x6a22*/
      return (_QWORD *)result[2]; /*0x6a2e*/
  }
  return result; /*0x6a2c*/
}

// Function: RstFormCallbackHandler @ 0x6a34 (0x7d bytes)
// Index: 175/906

__int64 __fastcall RstFormCallbackHandler(__int64 a1, RST_PRIVATE_DATA *Private, __int64 a3)
{
  CfgArrayAllocBlock((_QWORD *)a1, Private); /*0x6a4c*/
  *(_QWORD *)(a1 + 16) = Private; /*0x6a53*/
  *(_WORD *)(a1 + 192) = 0; /*0x6a5c*/
  *(_QWORD *)(a1 + 392) = 0; /*0x6a63*/
  *(_QWORD *)(a1 + 400) = 0; /*0x6a6a*/
  *(_QWORD *)(a1 + 408) = 0; /*0x6a71*/
  *(_BYTE *)(a1 + 433) = 0; /*0x6a78*/
  *(_BYTE *)(a1 + 432) = 0; /*0x6a7e*/
  *(_QWORD *)(a1 + 424) = 0; /*0x6a84*/
  *(_QWORD *)(a1 + 416) = 0; /*0x6a8b*/
  *(_QWORD *)(a1 + 184) = a3; /*0x6a99*/
  *(_QWORD *)a1 = off_23540; /*0x6aa3*/
  return a1; /*0x6aab*/
}

// Function: RstNoop @ 0x6ab4 (0x3 bytes)
// Index: 176/906

char RstNoop()
{
  return 1; /*0x6ab6*/
}

// Function: RstBeginSession @ 0x6ab8 (0x157 bytes)
// Index: 177/906

__int64 __fastcall RstBeginSession(_QWORD *a1)
{
  __int64 v1; // rbp
  __int64 v3; // rcx
  unsigned int v4; // eax
  int v5; // edi
  unsigned __int64 v6; // rbx
  unsigned __int64 v7; // r12
  __int16 v8; // ax
  __int64 v9; // rcx
  CHAR16 *FirstString; // rcx
  _BYTE *v11; // rax
  char i; // [rsp+30h] [rbp-48h] BYREF
  char n23; // [rsp+31h] [rbp-47h]
  int v15; // [rsp+34h] [rbp-44h]
  unsigned __int64 v16; // [rsp+38h] [rbp-40h]

  v1 = 0; /*0x6ad1*/
  if ( !a1[23] || !a1[2] ) /*0x6ae3*/
    return 0x8000000000000007uLL; /*0x6bea*/
  MemZero(&i, 0, 60); /*0x6af7*/
  v3 = a1[23]; /*0x6afc*/
  i = 3; /*0x6b03*/
  v4 = RstDeviceRaidLevelBitsToIndex(v3); /*0x6b08*/
  v5 = GuidCompare(v4); /*0x6b1b*/
  v6 = (unsigned __int64)(unsigned __int16)RstProtocolRelease(a1[23]) << 32; /*0x6b2c*/
  v7 = v6 | (unsigned int)RstCallGetUint108(a1[23]); /*0x6b3d*/
  if ( v5 == 1 ) /*0x6b43*/
  {
    i = 3; /*0x6b48*/
    n23 = 23; /*0x6b4d*/
    Assert_57(&i, 0x10u); /*0x6b52*/
    v16 = v7; /*0x6b57*/
    v15 = 1; /*0x6b5c*/
  }
  else
  {
    n23 = 18; /*0x6b67*/
    Assert_57(&i, 0xAu); /*0x6b6c*/
    v8 = RstCallGetUint108(a1[23]); /*0x6b78*/
    v9 = a1[23]; /*0x6b7d*/
    LOWORD(v15) = v8; /*0x6b84*/
    HIWORD(v15) = 0x8000; /*0x6b8e*/
    LOWORD(v16) = (unsigned __int8)RstProtocolRelease(v9); /*0x6b9b*/
  }
  FirstString = *(CHAR16 **)(a1[2] + 40LL); /*0x6ba4*/
  a1[3] = FirstString; /*0x6ba8*/
  if ( FirstString ) /*0x6baf*/
  {
    v11 = Assert_85(FirstString, &i); /*0x6bb6*/
    a1[3] = v11; /*0x6bc6*/
    return (*(__int64 (__fastcall **)(_QWORD *, void *, _BYTE *, _QWORD, _QWORD))(qword_58070 + 328))( /*0x6be2*/
             a1 + 1,
             &unk_27730,
             v11,
             0,
             0);
  }
  return v1; /*0x6c09*/
}

// Function: RstDeviceProbe @ 0x6c10 (0x7f bytes)
// Index: 178/906

__int64 __fastcall RstDeviceProbe(__int64 a1)
{
  __int64 v2; // rcx
  __int64 v4; // rax
  __int64 v5; // rcx
  int v6; // eax

  v2 = *(_QWORD *)(a1 + 184); /*0x6c19*/
  if ( !v2 ) /*0x6c23*/
    return 0x8000000000000007uLL; /*0x6c25*/
  *(_DWORD *)(a1 + 88) = 0; /*0x6c31*/
  *(_BYTE *)(a1 + 92) = 0; /*0x6c35*/
  *(_BYTE *)(a1 + 93) = 1; /*0x6c39*/
  *(_BYTE *)(a1 + 94) = 0; /*0x6c3d*/
  *(_BYTE *)(a1 + 95) = 0; /*0x6c41*/
  *(_BYTE *)(a1 + 96) = 0; /*0x6c45*/
  *(_DWORD *)(a1 + 104) = 4; /*0x6c49*/
  v4 = RstCallGetData88(v2); /*0x6c50*/
  v5 = *(_QWORD *)(a1 + 184); /*0x6c55*/
  *(_QWORD *)(a1 + 112) = v4 - 1; /*0x6c5f*/
  v6 = j_HiiLibReturnZero(v5); /*0x6c63*/
  *(_QWORD *)(a1 + 120) = 0; /*0x6c68*/
  *(_DWORD *)(a1 + 100) = v6; /*0x6c77*/
  *(_DWORD *)(a1 + 128) = 1; /*0x6c7a*/
  return RstHiiConfigRead(a1, (__int64)&unk_277C0); /*0x6c89*/
}

// Function: RstDeviceConfigure @ 0x6c90 (0x1a0 bytes)
// Index: 179/906

EFI_STATUS __fastcall RstDeviceConfigure(RST_DEVICE *Device)
{
  uint8_t v2; // di
  __int64 v4; // rax
  _BYTE *i; // rcx
  __int64 v6; // rcx
  const CHAR8 *Intel; // rax
  unsigned __int16 v8; // ax
  unsigned int v9; // eax
  __int64 v10; // rcx

  v2 = -1; /*0x6cba*/
  if ( !*(_QWORD *)&Device->reserved_090[40] ) /*0x6ca9*/
    return 0x8000000000000007uLL; /*0x6cc0*/
  *(_QWORD *)&Device->reserved_170[24] = MemAllocPages(12); /*0x6ce2*/
  *(_QWORD *)&Device->reserved_170[32] = MemAllocPages(40); /*0x6cf2*/
  v4 = MemAllocPages(42); /*0x6cf9*/
  i = *(_BYTE **)&Device->reserved_170[24]; /*0x6cfe*/
  *(_QWORD *)&Device->reserved_170[40] = v4; /*0x6d0b*/
  MemZero(i, 0, 12); /*0x6d12*/
  MemZero(*(_BYTE **)&Device->reserved_170[32], 0, 40); /*0x6d23*/
  MemZero(*(_BYTE **)&Device->reserved_170[40], 0, 42); /*0x6d35*/
  StrHexToDecimal("Intel", *(CHAR16 **)&Device->reserved_170[24]); /*0x6d48*/
  v6 = *(_QWORD *)&Device->reserved_090[40]; /*0x6d4d*/
  if ( !v6 ) /*0x6d57*/
    goto LABEL_8; /*0x6d57*/
  Intel = (const CHAR8 *)RstDeviceFindByGuidInList(v6); /*0x6d59*/
  if ( Intel ) /*0x6d61*/
    StrHexToDecimal(Intel, *(CHAR16 **)&Device->reserved_170[40]); /*0x6d6d*/
  v8 = RstDeviceGetRaidLevel(*(_QWORD *)&Device->reserved_090[40]); /*0x6d79*/
  v2 = v8; /*0x6d7e*/
  if ( v8 == 0xFFFF ) /*0x6d85*/
LABEL_8:
    StrHexToDecimal("VROC Volume", *(CHAR16 **)&Device->reserved_170[32]); /*0x6db1*/
  else
    HiiCfgArraySet(*(CHAR8 **)&Device->reserved_170[32], 0x28u, "VROC %d Volume", v8); /*0x6d9c*/
  v9 = j_HiiLibReturnZero(*(_QWORD *)&Device->reserved_090[40]); /*0x6dbd*/
  v10 = *(_QWORD *)&Device->reserved_090[40]; /*0x6dc2*/
  Device->reserved_170[64] = v2; /*0x6dc9*/
  *(_QWORD *)&Device->reserved_170[56] = v9; /*0x6dd3*/
  *(_QWORD *)&Device->reserved_170[48] = RstCallGetData88(v10); /*0x6de5*/
  Device->reserved_170[65] = 2; /*0x6dec*/
  return (*(__int64 (__fastcall **)(void **, void *, uint8_t *, _QWORD, _QWORD))(qword_58070 + 328))( /*0x6e29*/
           &Device->Destructor,
           &unk_27910,
           &Device->reserved_170[24],
           0,
           0);
}

// Function: RstDeviceCheck @ 0x6e30 (0x79 bytes)
// Index: 180/906

__int64 __fastcall RstDeviceCheck(__int64 a1)
{
  __int64 v2; // rbx

  v2 = (*(__int64 (__fastcall **)(_QWORD, void *, __int64))(qword_58070 + 144))( /*0x6e61*/
         *(_QWORD *)(a1 + 8),
         &unk_27910,
         a1 + 392);
  if ( !v2 ) /*0x6e67*/
  {
    MemZeroThenFree(*(_BYTE **)(a1 + 400), 40); /*0x6e73*/
    MemZeroThenFree(*(_BYTE **)(a1 + 392), 12); /*0x6e82*/
    MemZeroThenFree(*(_BYTE **)(a1 + 408), 42); /*0x6e91*/
  }
  return v2; /*0x6ea3*/
}

// Function: RsteDeviceInit @ 0x6eac (0x8a bytes)
// Index: 181/906

__int64 __fastcall RsteDeviceInit(_QWORD *a1)
{
  __int64 result; // rax
  __int64 v3; // rdi

  if ( !a1[23] ) /*0x6eb6*/
    return 0x8000000000000002uLL; /*0x6ec3*/
  result = RstBeginSession(a1); /*0x6ecf*/
  if ( result >= 0 ) /*0x6ed7*/
  {
    result = RstDeviceProbe((__int64)a1); /*0x6edc*/
    v3 = result; /*0x6ee1*/
    if ( result >= 0 ) /*0x6ee7*/
    {
      if ( (unsigned int)RstDeviceFindIndex(a1[23]) != -1 ) /*0x6ef8*/
        v3 = RstDeviceConfigure((__int64)a1); /*0x6f02*/
      if ( (unsigned int)RstDeviceFindIndex(a1[23]) == -1 ) /*0x6f14*/
        RstProtocolRevision(a1[23], 0, a1 + 1); /*0x6f23*/
      return v3; /*0x6f28*/
    }
  }
  return result; /*0x6f30*/
}

// Function: RsteDeviceAlloc2 @ 0x6f38 (0xe9 bytes)
// Index: 182/906

unsigned __int64 __fastcall RsteDeviceAlloc2(__int64 a1, __int64 a2, __int64 a3, unsigned __int64 a4, __int64 a5)
{
  __int64 v5; // rbx
  char v7; // r12
  void (__fastcall ***v10)(_QWORD, __int16 *); // rcx
  __int64 v11; // [rsp+20h] [rbp-28h] BYREF
  int v12; // [rsp+28h] [rbp-20h]
  int v13; // [rsp+2Ch] [rbp-1Ch]
  bool v14; // [rsp+30h] [rbp-18h]

  v5 = 0; /*0x6f51*/
  v7 = a2; /*0x6f56*/
  if ( !*(_QWORD *)(a1 + 184) ) /*0x6f5c*/
    return 0x8000000000000007uLL; /*0x6f65*/
  if ( !a5 ) /*0x6f7c*/
    return 0x8000000000000002uLL; /*0x6f7e*/
  if ( !a4 ) /*0x6f8d*/
    return 0x8000000000000004uLL; /*0x6f8f*/
  v11 = a3; /*0x6f9b*/
  if ( (unsigned __int8)RstDebugEnabled(a1, a2) && !*(_DWORD *)(a1 + 100) ) /*0x6fa9*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\efidriver\\BaseDevice.h", 0xD3u, "mBlkMedia.BlockSize != ( 0 )"); /*0x6fc1*/
  v10 = *(void (__fastcall ****)(_QWORD, __int16 *))(a1 + 184); /*0x6fd1*/
  v12 = a4 / *(unsigned int *)(a1 + 100); /*0x6fe0*/
  v13 = a5; /*0x6fe4*/
  v14 = v7 == 0; /*0x6fe8*/
  if ( RstHelper_a454(v10, &v11) ) /*0x6fed*/
    return 0x8000000000000007uLL; /*0x6fff*/
  return v5; /*0x701a*/
}

// Function: RstReturn2 @ 0x7024 (0x1b bytes)
// Index: 183/906

unsigned __int64 __fastcall RstReturn2(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
  __int64 v5; // r8

  v5 = a2; /*0x7030*/
  LOBYTE(a2) = 1; /*0x7033*/
  return RsteDeviceAlloc2(a1, a2, v5, a3, a4); /*0x703a*/
}

// Function: RstReturn2_0 @ 0x7040 (0x1b bytes)
// Index: 184/906

unsigned __int64 __fastcall RstReturn2_0(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
  return RsteDeviceAlloc2(a1, 0, a2, a3, a4); /*0x7056*/
}

// Function: RstReturn0 @ 0x705c (0x6 bytes)
// Index: 185/906

__int64 RstReturn0()
{
  return 1; /*0x7061*/
}

// Function: RstGetVariable @ 0x7064 (0xa4 bytes)
// Index: 186/906

unsigned __int64 __fastcall RstGetVariable(__int64 a1, __int64 a2, _QWORD *a3)
{
  _BYTE *i; // rdi
  const CHAR8 *v6; // rax
  CHAR8 *v7; // rsi
  unsigned int n99; // ebx

  if ( !*(_QWORD *)(a1 + 184) ) /*0x7078*/
    return 0x8000000000000002uLL; /*0x7093*/
  i = (_BYTE *)(a1 + 192); /*0x7095*/
  if ( !*(_WORD *)(a1 + 192) ) /*0x709c*/
  {
    v6 = (const CHAR8 *)RstCallGetOffset45(*(_QWORD *)(a1 + 184)); /*0x70a4*/
    v7 = (CHAR8 *)v6; /*0x70a9*/
    if ( !v6 ) /*0x70af*/
      return 0x8000000000000007uLL; /*0x70bb*/
    n99 = AsciiStrLen(v6); /*0x70c8*/
    if ( n99 > 0x63 ) /*0x70d6*/
      n99 = 99; /*0x70d6*/
    MemZero(i, 0, 200); /*0x70db*/
    RstAsciiStrnToUnicodeStrn(i, n99, v7); /*0x70e8*/
  }
  *a3 = i; /*0x70ed*/
  return 0; /*0x7102*/
}

// Function: RstSetVariable @ 0x7108 (0x87 bytes)
// Index: 187/906

__int64 __fastcall RstSetVariable(_QWORD *a1)
{
  if ( !a1[1] || !a1[23] ) /*0x711c*/
    return 0x8000000000000002uLL; /*0x717a*/
  RstDeviceCheck((__int64)a1); /*0x7126*/
  if ( (unsigned int)RstDeviceFindIndex(a1[23]) == -1 ) /*0x713a*/
    RstProtocolRevision(a1[23], 1, a1 + 1); /*0x714c*/
  RstCallVtableEntry((__int64)a1); /*0x7154*/
  return (*(__int64 (__fastcall **)(_QWORD, void *, _QWORD, _QWORD))(qword_58070 + 336))(a1[1], &unk_27730, a1[3], 0); /*0x7189*/
}

// Function: RstGpioRead @ 0x7190 (0x11c bytes)
// Index: 188/906

__int16 __fastcall RstGpioRead(unsigned __int8 n12)
{
  if ( n12 <= 0xCu ) /*0x7198*/
  {
    if ( n12 == 12 ) /*0x719e*/
      return 53; /*0x722e*/
    if ( n12 > 6u ) /*0x71a7*/
    {
      switch ( n12 ) /*0x71f7*/
      {
        case 7u: /*0x71f7*/
          return 48; /*0x7228*/
        case 8u: /*0x71f7*/
          return 49; /*0x7222*/
        case 9u: /*0x71f7*/
          return 50; /*0x721c*/
        case 0xAu: /*0x71f7*/
          return 51; /*0x7216*/
        case 0xBu: /*0x71f7*/
          return 52; /*0x7210*/
      }
    }
    else
    {
      switch ( n12 ) /*0x71a9*/
      {
        case 6u: /*0x71a9*/
          return 47; /*0x71f3*/
        case 0u: /*0x71a9*/
          return 41; /*0x71ed*/
        case 1u: /*0x71a9*/
          return 42; /*0x71e7*/
        case 2u: /*0x71a9*/
          return 43; /*0x71e1*/
        case 3u: /*0x71a9*/
          return 44; /*0x71db*/
        case 4u: /*0x71a9*/
          return 45; /*0x71d5*/
        case 5u: /*0x71a9*/
          return 46; /*0x71cf*/
      }
    }
    return 0; /*0x71c6*/
  }
  if ( n12 <= 0x12u ) /*0x7232*/
  {
    switch ( n12 ) /*0x7234*/
    {
      case 0x12u: /*0x7234*/
        return 59; /*0x7270*/
      case 0xDu: /*0x7234*/
        return 54; /*0x726a*/
      case 0xEu: /*0x7234*/
        return 55; /*0x7264*/
      case 0xFu: /*0x7234*/
        return 56; /*0x725e*/
      case 0x10u: /*0x7234*/
        return 57; /*0x7258*/
      case 0x11u: /*0x7234*/
        return 58; /*0x7252*/
    }
    return 0; /*0x724d*/
  }
  switch ( n12 ) /*0x7274*/
  {
    case 0x13u: /*0x7274*/
      return 60; /*0x72a6*/
    case 0x14u: /*0x7274*/
      return 61; /*0x72a0*/
    case 0x15u: /*0x7274*/
      return 62; /*0x729a*/
    case 0x16u: /*0x7274*/
      return 63; /*0x7294*/
  }
  if ( n12 != 23 ) /*0x7288*/
    return 0; /*0x728d*/
  return 64; /*0x71cf*/
}

// Function: RstGpioWrite @ 0x72ac (0x240 bytes)
// Index: 189/906

__int16 __fastcall RstGpioWrite(unsigned __int8 n24)
{
  if ( n24 <= 0x18u ) /*0x72b4*/
  {
    if ( n24 == 24 ) /*0x72ba*/
      return 89; /*0x73e2*/
    if ( n24 > 0xCu ) /*0x72c3*/
    {
      if ( n24 > 0x12u ) /*0x7361*/
      {
        switch ( n24 ) /*0x73a7*/
        {
          case 0x13u: /*0x73a7*/
            return 84; /*0x73dc*/
          case 0x14u: /*0x73a7*/
            return 85; /*0x73d6*/
          case 0x15u: /*0x73a7*/
            return 86; /*0x73d0*/
          case 0x16u: /*0x73a7*/
            return 87; /*0x73ca*/
          case 0x17u: /*0x73a7*/
            return 88; /*0x73c4*/
        }
      }
      else
      {
        switch ( n24 ) /*0x7363*/
        {
          case 0x12u: /*0x7363*/
            return 83; /*0x73a3*/
          case 0xDu: /*0x7363*/
            return 78; /*0x739d*/
          case 0xEu: /*0x7363*/
            return 79; /*0x7397*/
          case 0xFu: /*0x7363*/
            return 80; /*0x7391*/
          case 0x10u: /*0x7363*/
            return 81; /*0x738b*/
          case 0x11u: /*0x7363*/
            return 82; /*0x7385*/
        }
      }
    }
    else
    {
      if ( n24 == 12 ) /*0x72c9*/
        return 77; /*0x735d*/
      if ( n24 > 6u ) /*0x72d2*/
      {
        switch ( n24 ) /*0x7322*/
        {
          case 7u: /*0x7322*/
            return 72; /*0x7357*/
          case 8u: /*0x7322*/
            return 73; /*0x7351*/
          case 9u: /*0x7322*/
            return 74; /*0x734b*/
          case 0xAu: /*0x7322*/
            return 75; /*0x7345*/
          case 0xBu: /*0x7322*/
            return 76; /*0x733f*/
        }
      }
      else
      {
        switch ( n24 ) /*0x72d4*/
        {
          case 6u: /*0x72d4*/
            return 71; /*0x731e*/
          case 0u: /*0x72d4*/
            return 65; /*0x7318*/
          case 1u: /*0x72d4*/
            return 66; /*0x7312*/
          case 2u: /*0x72d4*/
            return 67; /*0x730c*/
          case 3u: /*0x72d4*/
            return 68; /*0x7306*/
          case 4u: /*0x72d4*/
            return 69; /*0x7300*/
          case 5u: /*0x72d4*/
            return 70; /*0x72fa*/
        }
      }
    }
    return 0; /*0x72f1*/
  }
  if ( n24 <= 0x24u ) /*0x73e6*/
  {
    if ( n24 == 36 ) /*0x73ec*/
      return 101; /*0x746e*/
    if ( n24 > 0x1Eu ) /*0x73f1*/
    {
      switch ( n24 ) /*0x7437*/
      {
        case 0x1Fu: /*0x7437*/
          return 96; /*0x7468*/
        case 0x20u: /*0x7437*/
          return 97; /*0x7462*/
        case 0x21u: /*0x7437*/
          return 98; /*0x745c*/
        case 0x22u: /*0x7437*/
          return 99; /*0x7456*/
        case 0x23u: /*0x7437*/
          return 100; /*0x7450*/
      }
    }
    else
    {
      switch ( n24 ) /*0x73f3*/
      {
        case 0x1Eu: /*0x73f3*/
          return 95; /*0x7433*/
        case 0x19u: /*0x73f3*/
          return 90; /*0x742d*/
        case 0x1Au: /*0x73f3*/
          return 91; /*0x7427*/
        case 0x1Bu: /*0x73f3*/
          return 92; /*0x7421*/
        case 0x1Cu: /*0x73f3*/
          return 93; /*0x741b*/
        case 0x1Du: /*0x73f3*/
          return 94; /*0x7415*/
      }
    }
    return 0; /*0x740c*/
  }
  if ( n24 <= 0x2Au ) /*0x7472*/
  {
    switch ( n24 ) /*0x7474*/
    {
      case '*': /*0x7474*/
        return 107; /*0x74b0*/
      case '%': /*0x7474*/
        return 102; /*0x74aa*/
      case '&': /*0x7474*/
        return 103; /*0x74a4*/
      case '\'': /*0x7474*/
        return 104; /*0x749e*/
      case '(': /*0x7474*/
        return 105; /*0x7498*/
      case ')': /*0x7474*/
        return 106; /*0x7492*/
    }
    return 0; /*0x748d*/
  }
  switch ( n24 ) /*0x74b4*/
  {
    case '+': /*0x74b4*/
      return 108; /*0x74e6*/
    case ',': /*0x74b4*/
      return 109; /*0x74e0*/
    case '-': /*0x74b4*/
      return 110; /*0x74da*/
    case '.': /*0x74b4*/
      return 111; /*0x74d4*/
  }
  if ( n24 != 47 ) /*0x74c8*/
    return 0; /*0x74cd*/
  return 112; /*0x72fa*/
}

// Function: RstGpioConfigure @ 0x74ec (0x1b2 bytes)
// Index: 190/906

__int16 __fastcall RstGpioConfigure(int n19)
{
  __int16 n9; // dx
  int v2; // ecx
  int v3; // ecx
  int v4; // ecx
  int v5; // ecx
  int v6; // ecx
  int v7; // ecx
  int v8; // ecx
  int v10; // ecx
  int v11; // ecx
  int v12; // ecx
  int v13; // ecx
  int v14; // ecx
  int v15; // ecx
  int v16; // ecx
  int v17; // ecx
  int v18; // ecx
  int v19; // ecx
  int v20; // ecx
  int v21; // ecx
  int v22; // ecx
  int v23; // ecx
  int v24; // ecx
  int v25; // ecx
  int v26; // ecx
  int v27; // ecx
  int v28; // ecx
  int v29; // ecx
  int v30; // ecx
  int v31; // ecx
  int v32; // ecx

  if ( n19 <= 19 ) /*0x74f5*/
  {
    if ( n19 == 19 ) /*0x74fb*/
      return 21; /*0x75d6*/
    n9 = 9; /*0x7501*/
    if ( n19 > 9 ) /*0x7507*/
    {
      v10 = n19 - 10; /*0x756e*/
      if ( !v10 ) /*0x7571*/
        return 12; /*0x75d0*/
      v11 = v10 - 1; /*0x7578*/
      if ( !v11 ) /*0x757a*/
        return 13; /*0x75ca*/
      v12 = v11 - 1; /*0x757c*/
      if ( !v12 ) /*0x757e*/
        return 14; /*0x75c4*/
      v13 = v12 - 1; /*0x7580*/
      if ( !v13 ) /*0x7582*/
        return 15; /*0x75be*/
      v14 = v13 - 1; /*0x7584*/
      if ( !v14 ) /*0x7586*/
        return 16; /*0x75b8*/
      v15 = v14 - 1; /*0x7588*/
      if ( !v15 ) /*0x758a*/
        return 17; /*0x75b2*/
      v16 = v15 - 1; /*0x758c*/
      if ( !v16 ) /*0x758e*/
        return 18; /*0x75ac*/
      v17 = v16 - 1; /*0x7590*/
      if ( !v17 ) /*0x7592*/
        return 19; /*0x75a6*/
      if ( v17 == 1 ) /*0x7596*/
        return 20; /*0x75a1*/
      return 40; /*0x7596*/
    }
    if ( n19 == 9 ) /*0x7509*/
      return 11; /*0x756d*/
    if ( !n19 ) /*0x750d*/
      return 2; /*0x7567*/
    v2 = n19 - 1; /*0x7512*/
    if ( !v2 ) /*0x7514*/
      return 3; /*0x7561*/
    v3 = v2 - 1; /*0x7516*/
    if ( !v3 ) /*0x7518*/
      return 4; /*0x755b*/
    v4 = v3 - 1; /*0x751a*/
    if ( !v4 ) /*0x751c*/
      return 5; /*0x7555*/
    v5 = v4 - 1; /*0x751e*/
    if ( !v5 ) /*0x7520*/
      return 6; /*0x754f*/
    v6 = v5 - 1; /*0x7522*/
    if ( !v6 ) /*0x7524*/
      return 7; /*0x7549*/
    v7 = v6 - 1; /*0x7526*/
    if ( !v7 ) /*0x7528*/
      return 8; /*0x7543*/
    v8 = v7 - 1; /*0x752a*/
    if ( v8 ) /*0x752c*/
    {
      if ( v8 == 1 ) /*0x7530*/
        return 10; /*0x7539*/
      return 40; /*0x7530*/
    }
    return n9; /*0x753d*/
  }
  n9 = 29; /*0x75d7*/
  if ( n19 <= 29 ) /*0x75de*/
  {
    if ( n19 == 29 ) /*0x75e0*/
      return 31; /*0x7641*/
    v18 = n19 - 20; /*0x75e2*/
    if ( !v18 ) /*0x75e5*/
      return 22; /*0x763b*/
    v19 = v18 - 1; /*0x75ea*/
    if ( !v19 ) /*0x75ec*/
      return 23; /*0x7635*/
    v20 = v19 - 1; /*0x75ee*/
    if ( !v20 ) /*0x75f0*/
      return 24; /*0x762f*/
    v21 = v20 - 1; /*0x75f2*/
    if ( !v21 ) /*0x75f4*/
      return 25; /*0x7629*/
    v22 = v21 - 1; /*0x75f6*/
    if ( !v22 ) /*0x75f8*/
      return 26; /*0x7623*/
    v23 = v22 - 1; /*0x75fa*/
    if ( !v23 ) /*0x75fc*/
      return 27; /*0x761d*/
    v24 = v23 - 1; /*0x75fe*/
    if ( !v24 ) /*0x7600*/
      return 28; /*0x7617*/
    v25 = v24 - 1; /*0x7602*/
    if ( v25 ) /*0x7604*/
    {
      if ( v25 == 1 ) /*0x760c*/
        return 30; /*0x7611*/
      return 40; /*0x760c*/
    }
    return n9; /*0x7604*/
  }
  v26 = n19 - 30; /*0x7642*/
  if ( !v26 ) /*0x7645*/
    return 32; /*0x7698*/
  v27 = v26 - 1; /*0x764c*/
  if ( !v27 ) /*0x764e*/
    return 33; /*0x7692*/
  v28 = v27 - 1; /*0x7650*/
  if ( !v28 ) /*0x7652*/
    return 34; /*0x768c*/
  v29 = v28 - 1; /*0x7654*/
  if ( !v29 ) /*0x7656*/
    return 35; /*0x7686*/
  v30 = v29 - 1; /*0x7658*/
  if ( !v30 ) /*0x765a*/
    return 36; /*0x7680*/
  v31 = v30 - 1; /*0x765c*/
  if ( !v31 ) /*0x765e*/
    return 37; /*0x767a*/
  v32 = v31 - 1; /*0x7660*/
  if ( !v32 ) /*0x7662*/
    return 38; /*0x7674*/
  if ( v32 != 1 ) /*0x7666*/
    return 40; /*0x766d*/
  return 39; /*0x7539*/
}

// Function: RstGetControllerInfo @ 0x76a0 (0xeb bytes)
// Index: 191/906

EFI_STRING __fastcall RstGetControllerInfo(CHAR16 *Destination, __int64 a2, void *HiiHandle)
{
  unsigned __int8 n12; // r10
  EFI_STRING_ID StringId; // di
  unsigned __int16 v7; // r9
  const CHAR8 *StringToLanguage; // rax
  unsigned __int16 v9; // ax
  __int64 v10; // rax
  _WORD i[24]; // [rsp+30h] [rbp-168h] BYREF
  CHAR8 Language[304]; // [rsp+60h] [rbp-138h] BYREF

  RstGpioConfigure(*((_DWORD *)Destination + 35)); /*0x76c1*/
  StringId = RstGpioRead(n12); /*0x76dc*/
  StringToLanguage = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, v7, 0); /*0x76df*/
  HiiGetString(HiiHandle, StringId, StringToLanguage); /*0x76f0*/
  MemZero(i, 0, 34); /*0x7700*/
  MemZero(Language, 0, 300); /*0x7712*/
  RstAsciiStrnToUnicodeStrn(i, 0x11u, (_BYTE *)Destination + 4); /*0x7725*/
  v9 = RstGpioConfigure(*((_DWORD *)Destination + 35)); /*0x7730*/
  v10 = HiiGetStringToLanguage(HiiHandle, v9, 0); /*0x773e*/
  HiiCfgArrayGet(Language, 0x12Cu, (unsigned __int8 *)L"%s, %s", i, v10); /*0x775e*/
  return HiiGetString(HiiHandle, StringId, Language); /*0x7786*/
}

// Function: RstLanguageHandler @ 0x778c (0x12e bytes)
// Index: 192/906

EFI_STRING __fastcall RstLanguageHandler(CHAR16 *Source, unsigned __int8 n24, void *HiiHandle)
{
  EFI_STRING_ID StringId; // bp
  unsigned __int16 v7; // r9
  const CHAR8 *StringToLanguage; // rax
  __int64 v9; // rax
  CHAR16 *v10; // r8
  unsigned __int16 v11; // ax
  __int64 v12; // rax
  _QWORD v14[3]; // [rsp+30h] [rbp-188h] BYREF
  _WORD i[28]; // [rsp+48h] [rbp-170h] BYREF
  CHAR8 Language[304]; // [rsp+80h] [rbp-138h] BYREF

  RstGpioConfigure(*((_DWORD *)Source + 36)); /*0x77b2*/
  StringId = RstGpioWrite(n24); /*0x77cd*/
  StringToLanguage = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, v7, 0); /*0x77d0*/
  HiiGetString(HiiHandle, StringId, StringToLanguage); /*0x77e1*/
  MemZero(i, 0, 44); /*0x77f1*/
  MemZero(Language, 0, 300); /*0x7806*/
  if ( n24 == 0xFF ) /*0x780f*/
    v9 = 0x8000000000000002uLL; /*0x7828*/
  else
    v9 = RstDeviceGetProperty((__int64)v14, n24, "en"); /*0x7821*/
  v10 = (CHAR16 *)v14; /*0x783c*/
  if ( v9 ) /*0x7844*/
    v10 = Source + 2; /*0x7846*/
  RstAsciiStrnToUnicodeStrn(i, 0x2Cu, v10); /*0x784a*/
  v11 = RstGpioConfigure(*((_DWORD *)Source + 36)); /*0x7855*/
  v12 = HiiGetStringToLanguage(HiiHandle, v11, 0); /*0x7863*/
  HiiCfgArrayGet(Language, 0x12Cu, (unsigned __int8 *)L"%s, %s", i, v12); /*0x7886*/
  return HiiGetString(HiiHandle, StringId, Language); /*0x78b5*/
}

// Function: RstGetString @ 0x78bc (0x98 bytes)
// Index: 193/906

__int64 __fastcall RstGetString(__int64 a1, __int64 a2)
{
  __int64 v4; // rbx
  __int64 v5; // rax

  LocateHandleBuffer(*(_QWORD *)(qword_35418 + 624), SystemTable); /*0x78e1*/
  v4 = (*(__int64 (__fastcall **)(__int64, void *, __int64, _QWORD))(qword_58070 + 328))(a2, &unk_271D8, a1 + 8, 0); /*0x7929*/
  v5 = HiiPackageListBuild((__int64)&unk_271C8, *(_QWORD *)(qword_35418 + 624), &unk_271F0, 0, 0); /*0x792c*/
  *(_QWORD *)(a1 + 24) = v5; /*0x793e*/
  if ( !v5 ) /*0x7942*/
    return 0x8000000000000002uLL; /*0x7942*/
  return v4; /*0x794e*/
}

// Function: RstIsDebugEnabled @ 0x7954 (0xdf bytes)
// Index: 194/906

char RstIsDebugEnabled()
{
  char v0; // di
  unsigned int v1; // eax
  unsigned __int8 n0x18; // si
  unsigned __int64 v3; // rbx
  unsigned __int8 v4; // si
  unsigned __int64 v5; // rbx
  __int64 i[17]; // [rsp+20h] [rbp-F8h] BYREF
  int n21; // [rsp+ACh] [rbp-6Ch]
  int n5; // [rsp+B0h] [rbp-68h]

  v0 = 0; /*0x7966*/
  v1 = RstDeviceBuildAllBitmap(); /*0x7969*/
  n0x18 = 0; /*0x796e*/
  v3 = v1; /*0x7971*/
  while ( v3 ) /*0x7975*/
  {
    if ( !(unsigned int)RstHelper_c8a8(n0x18, (__int64)i) ) /*0x797f*/
    {
      if ( (v3 & 1) != 0 && n21 != 21 && (n21 <= 23 || n21 > 25 && (n21 <= 31 || n21 > 36)) ) /*0x79ab*/
        ++v0; /*0x79ad*/
      v3 >>= 1; /*0x79b0*/
      ++n0x18; /*0x79b3*/
    }
  }
  v4 = 0; /*0x79bd*/
  v5 = RstVolFindDevicesByProperty(0); /*0x79c5*/
  while ( v5 ) /*0x79cb*/
  {
    if ( !(unsigned int)RstHelper_ce6c(v4, (__int64)i) ) /*0x79d6*/
    {
      if ( (v5 & 1) != 0 && n5 && n5 != 5 && (n5 <= 6 || n5 > 9 && n5 != 13 && (n5 <= 17 || n5 > 19)) ) /*0x7a0b*/
        ++v0; /*0x7a0d*/
      v5 >>= 1; /*0x7a10*/
      ++v4; /*0x7a13*/
    }
  }
  return v0; /*0x7a2e*/
}

// Function: RstProcessForm @ 0x7a34 (0x23a bytes)
// Index: 195/906

void __fastcall RstProcessForm(RST_PRIVATE_DATA *Private)
{
  _DWORD *v1; // rdx
  void *HiiHandle_1; // r8
  void *HiiHandle; // r14
  _DWORD *v4; // rsi
  unsigned int v6; // eax
  __int64 v7; // r13
  unsigned __int8 n0x18; // di
  unsigned __int64 v9; // rbx
  __int64 v10; // rdx
  __int64 v11; // r8
  __int16 v12; // ax
  __int64 v13; // r8
  unsigned __int8 n24; // di
  unsigned __int64 v15; // rbx
  unsigned __int8 v16; // bp
  __int64 v17; // r8
  __int16 v18; // ax
  __int64 v19; // r8
  CHAR16 Source[70]; // [rsp+20h] [rbp-1F8h] BYREF
  int n21; // [rsp+ACh] [rbp-16Ch]
  CHAR16 Destination[72]; // [rsp+110h] [rbp-108h] BYREF
  int n5; // [rsp+1A0h] [rbp-78h]

  HiiHandle = HiiHandle_1; /*0x7a54*/
  v4 = v1; /*0x7a57*/
  if ( !RstVolGetOnlineMemberMask() ) /*0x7a5d*/
  {
    *v4 = 0; /*0x7a67*/
    return; /*0x7a69*/
  }
  v6 = RstDeviceBuildAllBitmap(); /*0x7a6e*/
  LOBYTE(v7) = 0; /*0x7a73*/
  n0x18 = 0; /*0x7a76*/
  v9 = v6; /*0x7a79*/
  if ( v6 ) /*0x7a80*/
  {
    while ( 1 ) /*0x7a86*/
    {
      if ( (v9 & 1) == 0 ) /*0x7a89*/
        goto LABEL_13; /*0x7a89*/
      if ( !(unsigned int)RstHelper_c8a8(n0x18, (__int64)Source) ) /*0x7a97*/
        break; /*0x7a97*/
LABEL_14:
      if ( !v9 ) /*0x7b4c*/
        goto LABEL_15; /*0x7b4c*/
    }
    if ( n21 != 21 && (n21 <= 23 || n21 > 25 && (n21 <= 31 || n21 > 36)) ) /*0x7aca*/
    {
      *v4 = 3; /*0x7acc*/
      if ( Private ) /*0x7ad5*/
      {
        StrnCpy(Destination, Source, 0xA8u); /*0x7aea*/
        LOBYTE(v10) = n0x18; /*0x7afa*/
        RstGetControllerInfo(Destination, v10, HiiHandle); /*0x7afd*/
        v11 = 3LL * (unsigned __int8)v7; /*0x7b0a*/
        *((_QWORD *)Private->Vtable + v11 + 2) = 0; /*0x7b11*/
        *((_QWORD *)Private->Vtable + v11) = HiiHandle; /*0x7b1b*/
        v12 = RstGpioRead(n0x18); /*0x7b1f*/
        *((_WORD *)Private->Vtable + 4 * v13 + 4) = v12; /*0x7b28*/
        v7 = (unsigned __int8)(v7 + 1); /*0x7b35*/
        *((_QWORD *)Private->Vtable + 3 * v7) = 0; /*0x7b3e*/
      }
    }
LABEL_13:
    v9 >>= 1; /*0x7b43*/
    ++n0x18; /*0x7b46*/
    goto LABEL_14; /*0x7b46*/
  }
LABEL_15:
  n24 = 0; /*0x7b52*/
  v15 = RstVolFindDevicesByProperty(0); /*0x7b5c*/
  if ( v15 ) /*0x7b62*/
  {
    v16 = v7 + 1; /*0x7b68*/
    while ( 1 ) /*0x7b6c*/
    {
      if ( (v15 & 1) == 0 ) /*0x7b6f*/
        goto LABEL_28; /*0x7b6f*/
      if ( !(unsigned int)RstHelper_ce6c(n24, (__int64)Destination) ) /*0x7b81*/
        break; /*0x7b81*/
LABEL_29:
      if ( !v15 ) /*0x7c46*/
        return; /*0x7c46*/
    }
    if ( n5 && n5 != 5 && (n5 <= 6 || n5 > 9 && n5 != 13 && (n5 <= 17 || n5 > 19)) ) /*0x7bc5*/
    {
      *v4 = 3; /*0x7bc7*/
      if ( Private ) /*0x7bd0*/
      {
        StrnCpy(Source, Destination, 0xF0u); /*0x7be5*/
        RstLanguageHandler(Source, n24, HiiHandle); /*0x7bf5*/
        v17 = 3LL * (unsigned __int8)v7; /*0x7c02*/
        *((_QWORD *)Private->Vtable + v17 + 2) = 0; /*0x7c09*/
        *((_QWORD *)Private->Vtable + v17) = HiiHandle; /*0x7c13*/
        v18 = RstGpioWrite(n24); /*0x7c17*/
        *((_WORD *)Private->Vtable + 4 * v19 + 4) = v18; /*0x7c20*/
        LOBYTE(v7) = v7 + 1; /*0x7c2a*/
        *((_QWORD *)Private->Vtable + 3 * v16++) = 0; /*0x7c35*/
      }
    }
LABEL_28:
    v15 >>= 1; /*0x7c3d*/
    ++n24; /*0x7c40*/
    goto LABEL_29; /*0x7c40*/
  }
}

// Function: RstGetBrowserData @ 0x7c70 (0xbd bytes)
// Index: 196/906

__int64 __fastcall RstGetBrowserData(__int64 a1, __int64 a2, __int64 a3, _DWORD *a4, unsigned __int64 *Private_1)
{
  RST_PRIVATE_DATA *Private; // rdi
  unsigned __int8 IsDebugEnabled; // al

  if ( a2 && a2 != qword_35418[78] ) /*0x7c99*/
    return 0x8000000000000003uLL; /*0x7ca5*/
  if ( a3 ) /*0x7caa*/
    return (a4 != 0) - 0x7FFFFFFFFFFFFFFELL; /*0x7cc2*/
  Private = (RST_PRIVATE_DATA *)Private_1; /*0x7cc4*/
  *a4 = 0; /*0x7cc9*/
  if ( Private_1 ) /*0x7cd0*/
  {
    IsDebugEnabled = RstIsDebugEnabled(); /*0x7cd2*/
    if ( IsDebugEnabled ) /*0x7cdc*/
    {
      if ( (*(__int64 (__fastcall **)(__int64, __int64, unsigned __int64 *))(qword_58070 + 64))( /*0x7cfd*/
             4,
             24LL * ((unsigned int)IsDebugEnabled + 1),
             Private_1) < 0 )
        return 0x8000000000000009uLL; /*0x7d09*/
    }
    else
    {
      Private = 0; /*0x7d0b*/
    }
  }
  RstProcessForm(Private); /*0x7d16*/
  return 0; /*0x7d27*/
}

// Function: RstInitBrowserCallbacks @ 0x7d30 (0x1d bytes)
// Index: 197/906

_QWORD *__fastcall RstInitBrowserCallbacks(_QWORD *a1, __int64 a2)
{
  *a1 = a2; /*0x7d37*/
  a1[1] = RstGetBrowserData; /*0x7d3a*/
  a1[2] = RstReturnOne; /*0x7d45*/
  return a1; /*0x7d4c*/
}

// Function: RstHiiConfigRead @ 0x7d50 (0x7e bytes)
// Index: 198/906

__int64 __fastcall RstHiiConfigRead(__int64 a1, __int64 a2)
{
  __int64 v4; // rax
  __int64 v5; // rcx
  __int64 v6; // rbx

  v4 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, _QWORD, _QWORD))(qword_58070 + 328))( /*0x7d86*/
         a1 + 8,
         a2,
         a1 + 40,
         0,
         0);
  v5 = *(_QWORD *)(a1 + 8); /*0x7d8c*/
  *(_QWORD *)(a1 + 32) = a2; /*0x7d90*/
  v6 = v4; /*0x7da6*/
  (*(void (__fastcall **)(__int64, __int64, __int64, __int64))(qword_58070 + 136))(v5, a2, a1 + 40, a1 + 40); /*0x7da9*/
  return v6; /*0x7dc7*/
}

// Function: RstCallVtableEntry @ 0x7dd0 (0x1d bytes)
// Index: 199/906

__int64 __fastcall RstCallVtableEntry(__int64 a1)
{
  return (*(__int64 (__fastcall **)(_QWORD, _QWORD, __int64, _QWORD))(qword_58070 + 336))(
           *(_QWORD *)(a1 + 8),
           *(_QWORD *)(a1 + 32),
           a1 + 40,
           0);
}

// Function: RstConfigAccessExtract @ 0x7df0 (0x26 bytes)
// Index: 200/906

__int64 __fastcall RstConfigAccessExtract(__int64 a1)
{
  __int64 v2; // rcx

  if ( a1 && (v2 = a1 - 40) != 0 ) /*0x7e09*/
    return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)v2 + 24LL))(v2); /*0x7e0e*/
  else
    return 0x8000000000000007uLL; /*0x7df9*/
}

// Function: RstSetBrowserData @ 0x7e18 (0xba bytes)
// Index: 201/906

char __fastcall RstSetBrowserData(
        __int64 a1,
        int a2,
        unsigned __int64 a3,
        unsigned __int64 a4,
        unsigned __int64 a5,
        unsigned __int64 *a6)
{
  unsigned __int64 v7; // rax
  unsigned __int64 v8; // rcx

  if ( !a6 ) /*0x7e2b*/
    return 0; /*0x7e2b*/
  if ( !a1 ) /*0x7e34*/
    goto LABEL_17; /*0x7e34*/
  if ( *(_DWORD *)(a1 + 88) != a2 ) /*0x7e3d*/
  {
    v7 = 0x800000000000000DuLL; /*0x7e3f*/
LABEL_18:
    *a6 = v7; /*0x7ec7*/
    return 0; /*0x7ec7*/
  }
  if ( !a5 ) /*0x7e53*/
  {
LABEL_17:
    v7 = 0x8000000000000002uLL; /*0x7ebd*/
    goto LABEL_18; /*0x7ebd*/
  }
  if ( a4 ) /*0x7e58*/
  {
    v8 = *(unsigned int *)(a1 + 100); /*0x7e5f*/
    if ( a4 % v8 ) /*0x7e67*/
    {
      v7 = 0x8000000000000004uLL; /*0x7e6f*/
      goto LABEL_18; /*0x7e79*/
    }
    if ( a3 <= *(_QWORD *)(a1 + 112) /*0x7eb3*/
      && a4 / v8 + a3 - 1 <= *(_QWORD *)(a1 + 112)
      && a4 + a5 <= 0x100000000LL
      && a5 <= 0x100000000LL
      && (!*(_DWORD *)(a1 + 104) || ((*(_DWORD *)(a1 + 104) - 1) & (unsigned int)a5) == 0) )
    {
      *a6 = 0; /*0x7eb5*/
      return 1; /*0x7ebb*/
    }
    goto LABEL_17; /*0x7eb3*/
  }
  *a6 = 0; /*0x7e5a*/
  return 0; /*0x7ed1*/
}

// Function: RstDeviceRead @ 0x7ed4 (0x82 bytes)
// Index: 202/906

__int64 __fastcall RstDeviceRead(__int64 a1, int a2, unsigned __int64 a3, unsigned __int64 a4, unsigned __int64 a5)
{
  unsigned __int64 v8; // rbp
  __int64 v9; // rsi
  unsigned __int64 v10; // [rsp+40h] [rbp+8h] BYREF

  v10 = 0; /*0x7ee8*/
  if ( !a1 ) /*0x7ef6*/
    return 0x8000000000000002uLL; /*0x7ef8*/
  v8 = a5; /*0x7f04*/
  v9 = a1 - 40; /*0x7f09*/
  if ( RstSetBrowserData(a1 - 40, a2, a3, a4, a5, &v10) ) /*0x7f1f*/
    return (*(__int64 (__fastcall **)(__int64, unsigned __int64, unsigned __int64, unsigned __int64))(*(_QWORD *)v9 + 32LL))( /*0x7f3e*/
             v9,
             a3,
             a4,
             v8);
  else
    return v10; /*0x7f28*/
}

// Function: RstDeviceWrite @ 0x7f58 (0x94 bytes)
// Index: 203/906

__int64 __fastcall RstDeviceWrite(__int64 a1, int a2, unsigned __int64 a3, unsigned __int64 a4, unsigned __int64 a5)
{
  unsigned __int64 v8; // rbp
  _BYTE *v9; // rbx
  unsigned __int64 v10; // [rsp+40h] [rbp+8h] BYREF

  v10 = 0; /*0x7f6c*/
  if ( !a1 ) /*0x7f7a*/
    return 0x8000000000000002uLL; /*0x7f7c*/
  v8 = a5; /*0x7f88*/
  v9 = (_BYTE *)(a1 - 40); /*0x7f8d*/
  if ( !RstSetBrowserData(a1 - 40, a2, a3, a4, a5, &v10) ) /*0x7fa3*/
    return v10; /*0x7fac*/
  if ( v9[95] ) /*0x7fb3*/
    return 0x8000000000000008uLL; /*0x7fb9*/
  return (*(__int64 (__fastcall **)(_BYTE *, unsigned __int64, unsigned __int64, unsigned __int64))(*(_QWORD *)v9 + 40LL))( /*0x7fe6*/
           v9,
           a3,
           a4,
           v8);
}

// Function: RstDeviceGetStatus @ 0x7fec (0x26 bytes)
// Index: 204/906

__int64 __fastcall RstDeviceGetStatus(__int64 a1)
{
  __int64 v2; // rcx

  if ( a1 && (v2 = a1 - 40) != 0 ) /*0x8005*/
    return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)v2 + 48LL))(v2); /*0x800a*/
  else
    return 0x8000000000000007uLL; /*0x7ff5*/
}

// Function: CfgArrayAllocBlock @ 0x8014 (0x5d bytes)
// Index: 205/906

_QWORD *__fastcall CfgArrayAllocBlock(_QWORD *a1, RST_PRIVATE_DATA *Private)
{
  a1[2] = Private; /*0x801e*/
  *a1 = off_23610; /*0x8022*/
  a1[4] = 0; /*0x8029*/
  a1[6] = a1 + 11; /*0x802d*/
  a1[1] = 0; /*0x8038*/
  a1[7] = RstConfigAccessExtract; /*0x803c*/
  a1[5] = 131073; /*0x8047*/
  a1[8] = RstDeviceRead; /*0x804f*/
  a1[3] = 0; /*0x805a*/
  a1[9] = RstDeviceWrite; /*0x805e*/
  a1[10] = RstDeviceGetStatus; /*0x8069*/
  return a1; /*0x8070*/
}

// Function: CfgArrayGetBlock @ 0x8074 (0x26 bytes)
// Index: 206/906

__int64 (__fastcall **__fastcall CfgArrayGetBlock(_QWORD *a1))()
{
  __int64 (__fastcall **result)(); // rax

  result = off_23610; /*0x8078*/
  *a1 = off_23610; /*0x807f*/
  if ( a1[3] ) /*0x8082*/
    return (*(__int64 (__fastcall **(**)(void))())(qword_58070 + 72))(); /*0x8092*/
  return result; /*0x8095*/
}

// Function: StrnCmp @ 0x809c (0x27 bytes)
// Index: 207/906

INTN __cdecl StrnCmp(const CHAR16 *FirstString, const CHAR16 *SecondString, UINTN Length)
{
  INTN result; // rax

  if ( Length ) /*0x80a2*/
  {
    while ( *(_BYTE *)FirstString == *(_BYTE *)SecondString ) /*0x80ac*/
    {
      FirstString = (const CHAR16 *)((char *)FirstString + 1); /*0x80ae*/
      SecondString = (const CHAR16 *)((char *)SecondString + 1); /*0x80b1*/
      if ( !--Length ) /*0x80b7*/
        goto LABEL_4; /*0x80b7*/
    }
    LOWORD(result) = 1; /*0x80be*/
  }
  else
  {
LABEL_4:
    LOWORD(result) = 0; /*0x80b9*/
  }
  return result; /*0x80bd*/
}

// Function: StrnCpy @ 0x80c4 (0x1f bytes)
// Index: 208/906

CHAR16 *__cdecl StrnCpy(CHAR16 *Destination, const CHAR16 *Source, UINTN Length)
{
  CHAR16 *Destination_1; // r9
  signed __int64 v4; // rdx

  Destination_1 = Destination; /*0x80c4*/
  if ( Length ) /*0x80ca*/
  {
    v4 = (char *)Source - (char *)Destination; /*0x80cc*/
    do /*0x80dd*/
    {
      *(_BYTE *)Destination_1 = *((_BYTE *)Destination_1 + v4); /*0x80d3*/
      Destination_1 = (CHAR16 *)((char *)Destination_1 + 1); /*0x80d6*/
      --Length; /*0x80d9*/
    }
    while ( Length ); /*0x80dd*/
  }
  return Destination; /*0x80e2*/
}

// Function: MemZero @ 0x80e4 (0x17 bytes)
// Index: 209/906

_BYTE *__fastcall MemZero(_BYTE *i, char a2, __int64 a3)
{
  _BYTE *j; // rax

  for ( j = i; a3; --a3 ) /*0x80ea*/
    *j++ = a2; /*0x80ec*/
  return i; /*0x80fa*/
}

// Function: MemAllocPages @ 0x80fc (0x2b bytes)
// Index: 210/906

__int64 __fastcall MemAllocPages(__int64 a1)
{
  __int64 v2; // [rsp+38h] [rbp+10h] BYREF

  v2 = 0; /*0x8107*/
  (*(void (__fastcall **)(__int64, __int64, __int64 *))(qword_58070 + 64))(4, a1, &v2); /*0x811a*/
  return v2; /*0x8122*/
}

// Function: MemZeroThenFree @ 0x8128 (0x1f bytes)
// Index: 211/906

__int64 __fastcall MemZeroThenFree(_BYTE *a1, __int64 a2)
{
  for ( ; a2; --a2 ) /*0x812e*/
    *a1++ = 0; /*0x8130*/
  return (*(__int64 (**)(void))(qword_58070 + 72))();
}

// Function: MemAlloc @ 0x8148 (0x5 bytes)
// Index: 212/906

// attributes: thunk
__int64 __fastcall MemAlloc(__int64 a1)
{
  return MemAllocPages(a1);
}

// Function: MemFree @ 0x8150 (0xb bytes)
// Index: 213/906

__int64 MemFree()
{
  return (*(__int64 (**)(void))(qword_58070 + 72))();
}

// Function: GetSystemMemoryMap @ 0x815c (0x5 bytes)
// Index: 214/906

// attributes: thunk
unsigned __int64 __fastcall GetSystemMemoryMap(__int64 a1)
{
  return RstGetMemoryMap();
}

// Function: StrLenA @ 0x8164 (0x1d bytes)
// Index: 215/906

__int16 __fastcall StrLenA(_BYTE *a1)
{
  __int16 result; // ax

  for ( result = 0; *a1; ++result ) /*0x816b*/
    ++a1; /*0x8174*/
  return result; /*0x817f*/
}

// Function: StrnCpy16 @ 0x8184 (0x3a bytes)
// Index: 216/906

__int16 __fastcall StrnCpy16(_BYTE *a1, _BYTE *a2, __int16 a3)
{
  while ( *a1 ) /*0x81a3*/
  {
    if ( !a3 ) /*0x818d*/
      return 0; /*0x818d*/
    if ( *a1 != *a2 ) /*0x8191*/
      break; /*0x8191*/
    ++a1; /*0x8199*/
    ++a2; /*0x819c*/
    --a3; /*0x819f*/
  }
  if ( !a3 ) /*0x81ae*/
    return 0; /*0x81b4*/
  return (unsigned __int8)*a1 - (unsigned __int8)*a2; /*0x81b4*/
}

// Function: RstStringTrim @ 0x81c0 (0x43 bytes)
// Index: 217/906

_BYTE *__fastcall RstStringTrim(_BYTE *i)
{
  _BYTE *j; // rax
  _BYTE *i_1; // rax

  for ( j = i; *j; ++j ) /*0x81c6*/
    ; /*0x81cb*/
  do /*0x81da*/
    --j; /*0x81d5*/
  while ( *j == 32 ); /*0x81da*/
  j[1] = 0; /*0x81dc*/
  for ( i_1 = i; *i_1 == 32; ++i_1 ) /*0x81e5*/
    ; /*0x81e7*/
  while ( *i_1 ) /*0x81fd*/
    *i++ = *i_1++; /*0x81f0*/
  *i = 0; /*0x81ff*/
  return i_1; /*0x8202*/
}

// Function: RstStrCopy @ 0x8204 (0x13 bytes)
// Index: 218/906

char __fastcall RstStrCopy(_BYTE *a1, char *a2)
{
  char result; // al

  while ( 1 ) /*0x820e*/
  {
    result = *a2; /*0x820e*/
    if ( !*a2 ) /*0x820e*/
      break; /*0x820e*/
    *a1++ = result; /*0x8206*/
    ++a2; /*0x820b*/
  }
  *a1 = 0; /*0x8214*/
  return result; /*0x8216*/
}

// Function: RstStringFindChar @ 0x8218 (0x48 bytes)
// Index: 219/906

_BYTE *__fastcall RstStringFindChar(_BYTE *a1, char n92)
{
  unsigned __int16 i_1; // r8
  _BYTE *v4; // rax
  unsigned __int16 i; // dx

  i_1 = 0; /*0x8218*/
  if ( a1 ) /*0x8221*/
  {
    v4 = a1; /*0x8223*/
    for ( i = 0; *v4; ++i ) /*0x822e*/
      ++v4; /*0x8233*/
    while ( i_1 < i ) /*0x8253*/
    {
      if ( a1[i_1] == n92 ) /*0x8249*/
        return &a1[i_1]; /*0x825c*/
      ++i_1; /*0x824b*/
    }
  }
  return 0; /*0x8257*/
}

// Function: RstStringFindInBuffer @ 0x8260 (0xa4 bytes)
// Index: 220/906

char __fastcall RstStringFindInBuffer(__int64 a1, char *_A, unsigned __int16 n2)
{
  char *_A_1; // rax
  unsigned __int16 n2_1; // bx
  unsigned __int16 i; // r11
  _BYTE *v9; // rcx
  __int16 v10; // r11

  if ( a1 && _A ) /*0x828d*/
  {
    _A_1 = _A; /*0x828f*/
    n2_1 = 0; /*0x8292*/
    if ( !*_A ) /*0x829b*/
      goto LABEL_6; /*0x829b*/
    do /*0x82a7*/
    {
      ++_A_1; /*0x82a0*/
      ++n2_1; /*0x82a3*/
    }
    while ( *_A_1 ); /*0x82a7*/
    if ( n2_1 <= n2 ) /*0x82af*/
    {
LABEL_6:
      for ( i = 0; i < n2; i = v10 + 1 ) /*0x82b9*/
      {
        v9 = (_BYTE *)(i + a1); /*0x82bf*/
        if ( !*v9 ) /*0x82c3*/
          break; /*0x82c3*/
        if ( !StrnCpy16(v9, _A, n2_1) ) /*0x82d8*/
          return 1; /*0x82ff*/
      }
    }
  }
  return 0; /*0x82f5*/
}

// Function: RstStringCopyN @ 0x8304 (0x42 bytes)
// Index: 221/906

__int64 __fastcall RstStringCopyN(__int64 a1, __int64 a2, __int16 a3)
{
  unsigned __int16 v3; // ax
  char v4; // r10

  v3 = 0; /*0x8307*/
  if ( a3 ) /*0x830f*/
  {
    do /*0x8333*/
    {
      v4 = *(_BYTE *)(v3 + a2); /*0x8315*/
      if ( !v4 ) /*0x831c*/
        break; /*0x831c*/
      *(_BYTE *)(v3++ + a1) = v4; /*0x831e*/
      --a3; /*0x832b*/
    }
    while ( a3 ); /*0x8333*/
    if ( a3 ) /*0x8339*/
      *(_BYTE *)(v3 + a1) = 0; /*0x833e*/
  }
  return a1; /*0x8345*/
}

// Function: RstStringTrimCopy @ 0x8348 (0xef bytes)
// Index: 222/906

CHAR16 *__fastcall RstStringTrimCopy(CHAR16 *i, __int64 n21, const CHAR16 *Source, UINTN n20)
{
  unsigned int v8; // edi
  CHAR16 *i_1; // rsi
  CHAR16 *j; // r11
  const CHAR16 *k; // rbx

  if ( !i || !n20 || !n21 || !Source ) /*0x838a*/
    return 0; /*0x841c*/
  v8 = 0; /*0x8393*/
  i_1 = (CHAR16 *)MemAllocPages(n21); /*0x83a2*/
  MemZero(i_1, 0, n21); /*0x83a5*/
  StrnCpy(i_1, Source, n20); /*0x83b3*/
  for ( j = (CHAR16 *)((char *)i_1 + n21 - 1); j > i_1 && (*(_BYTE *)j == 32 || !*(_BYTE *)j); j = (CHAR16 *)((char *)j - 1) ) /*0x83b8*/
    ++v8; /*0x83cf*/
  *((_BYTE *)j + 1) = 0; /*0x83d6*/
  for ( k = i_1; *(_BYTE *)k == 32; ++v8 ) /*0x83e0*/
    k = (const CHAR16 *)((char *)k + 1); /*0x83e2*/
  MemZero(i, 0, n21); /*0x83f3*/
  StrnCpy(i, k, n21 - v8); /*0x8407*/
  MemZeroThenFree(i_1, n21); /*0x8412*/
  return i; /*0x842d*/
}

// Function: RstParseDecimalString @ 0x8438 (0x154 bytes)
// Index: 223/906

__int64 __fastcall RstParseDecimalString(
        __int64 a1,
        unsigned __int64 n9,
        unsigned __int8 i,
        unsigned __int64 *a4,
        unsigned __int64 *a5)
{
  __int64 v5; // r14
  char v10; // di
  unsigned __int8 n9_2; // si
  CHAR16 *v12; // rbx
  unsigned __int8 n9_1; // al
  __int64 n9_4; // rdx
  CHAR16 n46; // cx
  unsigned __int8 n9_3; // al
  __int64 n9_5; // rcx
  unsigned __int8 j; // dl
  CHAR16 n0x30; // cx
  unsigned __int64 n0xA; // rax

  v5 = 2 * n9; /*0x8454*/
  v10 = 1; /*0x8467*/
  n9_2 = 0; /*0x846a*/
  v12 = (CHAR16 *)MemAllocPages(2 * n9); /*0x8475*/
  n9_1 = 0; /*0x8478*/
  if ( n9 ) /*0x847e*/
  {
    n9_4 = 0; /*0x8480*/
    while ( 1 ) /*0x8483*/
    {
      n46 = *(_WORD *)(a1 + 2 * n9_4); /*0x8483*/
      if ( n46 == 46 ) /*0x848c*/
        break; /*0x848c*/
      if ( n46 < 0x30u || n46 > 0x39u ) /*0x849e*/
      {
        n9_2 = -1; /*0x84b1*/
        goto LABEL_10; /*0x84b4*/
      }
      ++n9_1; /*0x84a0*/
      v12[n9_4] = n46; /*0x84a3*/
      n9_4 = n9_1; /*0x84a7*/
      if ( n9_1 >= n9 ) /*0x84ad*/
        goto LABEL_10; /*0x84ad*/
    }
    n9_2 = n9_1; /*0x84b6*/
  }
LABEL_10:
  v12[n9_1] = 0; /*0x84b9*/
  *a4 = StrToUpper(v12); /*0x84c9*/
  if ( n9_2 != 0xFF ) /*0x84d1*/
  {
    n9_3 = 0; /*0x84da*/
    if ( n9 ) /*0x84e0*/
    {
      n9_5 = 0; /*0x84e2*/
      do /*0x84f3*/
      {
        ++n9_3; /*0x84e5*/
        v12[n9_5] = 0; /*0x84e8*/
        n9_5 = n9_3; /*0x84ed*/
      }
      while ( n9_3 < n9 ); /*0x84f3*/
    }
    for ( j = 0; j < i; ++j ) /*0x84fb*/
    {
      if ( j + n9_2 + 1 < n9 ) /*0x850f*/
      {
        n0x30 = *(_WORD *)(a1 + 2 * (j + (unsigned __int64)n9_2) + 2); /*0x851c*/
        if ( n0x30 < 0x30u || n0x30 > 0x39u ) /*0x852c*/
        {
          v10 = 0; /*0x853d*/
          break; /*0x853d*/
        }
        v12[j] = n0x30; /*0x852e*/
      }
    }
    n0xA = StrToUpper(v12); /*0x8540*/
    *a5 = n0xA; /*0x854d*/
    if ( !v10 && n0xA < 0xA ) /*0x8559*/
      *a5 = 10 * n0xA; /*0x8562*/
  }
  return MemZeroThenFree(v12, v5); /*0x857a*/
}

// Function: RstFormatDiskSize @ 0x858c (0x12f bytes)
// Index: 224/906

__int64 __fastcall RstFormatDiskSize(__int64 a1, unsigned __int64 a2, unsigned int a3, char a4, char a5)
{
  __int64 n5; // rcx
  unsigned __int64 v7; // r8
  unsigned __int64 v8; // rbx

  if ( a2 && a3 ) /*0x85a4*/
  {
    n5 = 0; /*0x85b1*/
    v7 = (1000 * (a2 / (0x100000 / a3))) >> 10; /*0x85ce*/
    if ( a4 == 1 ) /*0x85d6*/
      n5 = 5; /*0x85d6*/
    v8 = (n5 + v7) / 0xA; /*0x85ed*/
    if ( a1 ) /*0x85f4*/
    {
      if ( a5 ) /*0x860a*/
        RstHelper_8da8( /*0x8641*/
          a1,
          0xAu,
          "%4ld.%ld%ldGB",
          (unsigned int)v8 / 0x64,
          (unsigned int)v8 / 0xA % 0xA,
          (unsigned int)v8 % 0xA);
      else
        RstHelper_8da8( /*0x868d*/
          a1,
          0xAu,
          "%ld.%ld%ldGB",
          (unsigned int)v8 / 0x64,
          (unsigned int)v8 / 0xA % 0xA,
          (unsigned int)v8 % 0xA);
    }
    return (unsigned int)v8; /*0x8692*/
  }
  else
  {
    RstHelper_8da8(a1, 0xAu, "%4ld.%ldMB", 0, 0); /*0x86ae*/
    return 0; /*0x86b3*/
  }
}

// Function: RstParseUnicodeString @ 0x86bc (0x70 bytes)
// Index: 225/906

unsigned __int64 __fastcall RstParseUnicodeString(_BYTE *a1, _BYTE **i, _QWORD *a3)
{
  _BYTE *v3; // rax
  _BYTE **j; // rbx

  v3 = *i; /*0x86d0*/
  for ( j = i; ; v3 = *j ) /*0x86d6*/
  {
    if ( !v3 ) /*0x8700*/
      return 0x8000000000000003uLL; /*0x8702*/
    if ( !StrnCpy16(v3, a1, 0xFFFF) ) /*0x86ec*/
      break; /*0x86ec*/
    j += 2; /*0x86f6*/
  }
  *a3 = j[1]; /*0x8725*/
  return 0; /*0x871b*/
}

// Function: RstAsciiStrnToUnicodeStrn @ 0x872c (0x25 bytes)
// Index: 226/906

__int64 __fastcall RstAsciiStrnToUnicodeStrn(_WORD *a1, unsigned int i, _BYTE *a3)
{
  unsigned int j; // r9d
  __int64 result; // rax

  for ( j = 0; j < i; ++a3 ) /*0x8731*/
  {
    result = (unsigned __int8)*a3; /*0x8733*/
    *a1 = result; /*0x8737*/
    if ( !*a3 ) /*0x873a*/
      break; /*0x873e*/
    ++j; /*0x8740*/
    ++a1; /*0x8743*/
  }
  return result; /*0x874f*/
}

// Function: RstUnicodeStrnToAsciiStrn @ 0x8754 (0x27 bytes)
// Index: 227/906

char __fastcall RstUnicodeStrnToAsciiStrn(char *a1, unsigned int n16, char *a3)
{
  unsigned int i; // r9d
  char result; // al

  for ( i = 0; i < n16; a3 += 2 ) /*0x875d*/
  {
    result = *a3; /*0x875f*/
    *a1 = *a3; /*0x8762*/
    if ( !*(_WORD *)a3 ) /*0x8764*/
      break; /*0x8768*/
    ++i; /*0x876a*/
    ++a1; /*0x876d*/
  }
  return result; /*0x8779*/
}

// Function: RstGetMemoryMap @ 0x877c (0x50 bytes)
// Index: 228/906

unsigned __int64 RstGetMemoryMap()
{
  __int64 v1; // [rsp+30h] [rbp+8h] BYREF
  __int64 v2; // [rsp+38h] [rbp+10h] BYREF

  RstReadTsc(&v2); /*0x8785*/
  (*(void (__fastcall **)(__int64))(qword_58070 + 248))(3000); /*0x8796*/
  RstReadTsc(&v1); /*0x87a1*/
  dword_35430 = (v1 - v2) / 0xBB8uLL; /*0x87c1*/
  return 0xAEC33E1F671529A5uLL * (v1 - v2); /*0x87c7*/
}

// Function: RstGetTimestamp @ 0x87cc (0x27 bytes)
// Index: 229/906

__int64 __fastcall RstGetTimestamp(unsigned int a1)
{
  __int64 v1; // rbx
  __int64 v3; // [rsp+38h] [rbp+10h] BYREF

  v1 = a1; /*0x87d2*/
  RstReadTsc(&v3); /*0x87d9*/
  return v3 + v1 * (unsigned int)dword_35430; /*0x87ed*/
}

// Function: RstTimestampExpired @ 0x87f4 (0x24 bytes)
// Index: 230/906

bool __fastcall RstTimestampExpired(unsigned __int64 *a1)
{
  unsigned __int64 v3; // [rsp+30h] [rbp+8h] BYREF

  RstReadTsc(&v3); /*0x8802*/
  return v3 >= *a1; /*0x8812*/
}

// Function: RstMicrosecondsToTime @ 0x8818 (0x2a bytes)
// Index: 231/906

__int64 __fastcall RstMicrosecondsToTime(unsigned __int16 a1)
{
  __int64 result; // rax
  __int64 v2; // [rsp+38h] [rbp+10h] BYREF

  v2 = RstGetTimestamp(1000000 * (unsigned int)a1); /*0x882a*/
  do /*0x883b*/
    result = RstTimestampExpired(&v2); /*0x8834*/
  while ( !(_BYTE)result ); /*0x883b*/
  return result; /*0x883d*/
}

// Function: RstGetUefiTime @ 0x8844 (0x1e bytes)
// Index: 232/906

__int64 RstGetUefiTime()
{
  _BYTE v1[8]; // [rsp+20h] [rbp-18h] BYREF
  unsigned int v2; // [rsp+28h] [rbp-10h]

  (*(void (__fastcall **)(_BYTE *, _QWORD))(RuntimeServices + 24))(v1, 0); /*0x8856*/
  return v2; /*0x885d*/
}

// Function: RstUint64ToHexString @ 0x8864 (0xbd bytes)
// Index: 233/906

unsigned __int16 __fastcall RstUint64ToHexString(_BYTE *a1, unsigned __int64 a2, char a3, unsigned __int16 a4)
{
  _BYTE *i; // rdi
  unsigned __int16 v6; // bp
  char v7; // al
  char n48; // r10
  __int64 v9; // rbx
  _BYTE i_1[56]; // [rsp+20h] [rbp-38h] BYREF

  i = i_1; /*0x888a*/
  v6 = 0; /*0x888e*/
  do /*0x88b2*/
  {
    v7 = a2; /*0x8892*/
    a2 >>= 4; /*0x889c*/
    ++v6; /*0x88a3*/
    *i++ = a0123456789abcd_0[v7 & 0xF]; // "0123456789ABCDEF" /*0x88aa*/
  }
  while ( a2 ); /*0x88b2*/
  if ( (a3 & 0x20) != 0 ) /*0x88b8*/
    n48 = 48; /*0x88ba*/
  else
    n48 = ~(32 * a3) & 0x20; /*0x88c6*/
  if ( v6 < a4 ) /*0x88ce*/
  {
    v9 = (unsigned __int16)(a4 - v6); /*0x88da*/
    MemZero(i, n48, v9); /*0x88e1*/
    i += v9; /*0x88e6*/
    v6 += v9; /*0x88e9*/
  }
  while ( i != i_1 ) /*0x8900*/
    *a1++ = *--i; /*0x88f3*/
  *a1 = 0; /*0x8907*/
  return v6; /*0x8917*/
}

// Function: RstInt64ToDecimalString @ 0x8924 (0x17c bytes)
// Index: 234/906

unsigned __int16 __fastcall RstInt64ToDecimalString(_BYTE *i, __int64 a2, char a3, unsigned __int16 a4)
{
  __int64 v5; // r10
  _BYTE *i_1; // rbp
  __int64 *v7; // rsi
  char v8; // r13
  unsigned __int16 v9; // di
  __int16 v10; // r11
  char n48; // r9
  __int64 v12; // rdx
  __int16 v13; // ax
  unsigned __int16 v14; // di
  unsigned __int16 v15; // ax
  _BYTE *i_2; // rcx
  __int64 v17; // rbx
  __int64 v18; // rax
  __int64 v20; // [rsp+20h] [rbp-48h] BYREF

  v5 = a2; /*0x8947*/
  i_1 = i; /*0x894d*/
  v7 = &v20; /*0x8950*/
  v8 = 0; /*0x8958*/
  v9 = 0; /*0x895b*/
  if ( a2 < 0 && a3 >= 0 ) /*0x8964*/
  {
    v8 = 1; /*0x8966*/
    v5 = -a2; /*0x8969*/
  }
  v10 = 0; /*0x8970*/
  n48 = 48; /*0x8974*/
  do /*0x89ea*/
  {
    v12 = v5 / 10; /*0x8993*/
    v13 = v5 % 10; /*0x89a7*/
    if ( v13 < 0 ) /*0x89ab*/
      v13 = -v13; /*0x89ad*/
    ++v9; /*0x89b3*/
    v5 /= 10; /*0x89b7*/
    *(_BYTE *)v7 = v13 + 48; /*0x89ba*/
    v7 = (__int64 *)((char *)v7 + 1); /*0x89bc*/
    if ( (a3 & 8) == 8 && v9 == 3 * (v9 / 3) ) /*0x89db*/
    {
      *(_BYTE *)v7 = 44; /*0x89dd*/
      v7 = (__int64 *)((char *)v7 + 1); /*0x89e0*/
      ++v10; /*0x89e3*/
    }
  }
  while ( v12 ); /*0x89ea*/
  if ( v8 ) /*0x89ef*/
  {
    *(_BYTE *)v7 = 45; /*0x89f1*/
    v7 = (__int64 *)((char *)v7 + 1); /*0x89f4*/
    ++v9; /*0x89f7*/
  }
  v14 = v10 + v9; /*0x89fb*/
  if ( (a3 & 0x20) == 0 ) /*0x8a03*/
    n48 = 32; /*0x8a05*/
  v15 = a4 - v14; /*0x8a0c*/
  if ( (a3 & 1) != 0 )
  {
    i_2 = &i[v14]; /*0x8a17*/
    if ( (v15 & (unsigned __int16)-(v14 < a4)) != 0 )
      MemZero(i_2, n48, v14 < a4 ? v15 : 0);
  }
  else if ( (v15 & (unsigned __int16)-(v14 < a4)) != 0 )
  {
    v17 = v14 < a4 ? v15 : 0;
    MemZero(i, n48, v17); /*0x8a4e*/
    i_1 += v17; /*0x8a53*/
  }
  if ( v14 ) /*0x8a5a*/
  {
    v18 = v14; /*0x8a5c*/
    do /*0x8a6d*/
    {
      v7 = (__int64 *)((char *)v7 - 1); /*0x8a5f*/
      *i_1++ = *(_BYTE *)v7; /*0x8a64*/
      --v18; /*0x8a6a*/
    }
    while ( v18 ); /*0x8a6d*/
  }
  if ( a4 > v14 ) /*0x8a80*/
    v14 = a4; /*0x8a80*/
  i_1[v14] = 0; /*0x8a8b*/
  return v14; /*0x8a93*/
}

// Function: HiiGetStringOrNull @ 0x8aa0 (0x306 bytes)
// Index: 235/906

__int64 __fastcall HiiGetStringOrNull(__int64 a1, unsigned __int16 n0x100, char *a3, va_list va)
{
  int n0x100_1; // ebx
  char *v5; // rsi
  unsigned __int64 *v8; // rdi
  __int64 n0x100_2; // rax
  char v10; // al
  __int16 v11; // dx
  unsigned __int16 v12; // r9
  unsigned int n0x39; // r8d
  __int16 v14; // ax
  unsigned int n114; // ecx
  unsigned __int64 v16; // rax
  unsigned __int16 v17; // ax
  __int64 v18; // rax
  const char *_null_string_; // r8
  unsigned __int16 v20; // dx
  __int64 n0x100_3; // rax
  __int64 n0x100_4; // rcx
  __int64 v23; // rcx
  __int64 n0x100_5; // rax

  v5 = a3; /*0x8abf*/
  LOWORD(n0x100_1) = 0; /*0x8acd*/
  if ( !*a3 ) /*0x8ad4*/
    goto LABEL_79; /*0x8ad4*/
  v8 = (unsigned __int64 *)(va - 1); /*0x8ada*/
  do /*0x8d74*/
  {
    if ( (unsigned __int16)n0x100_1 >= n0x100 ) /*0x8af3*/
      break; /*0x8af3*/
    if ( *v5 != 37 ) /*0x8afc*/
    {
      if ( *v5 == 10 ) /*0x8b01*/
      {
        n0x100_2 = (unsigned __int16)n0x100_1; /*0x8b03*/
        LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8b06*/
        *(_BYTE *)(n0x100_2 + a1) = 13; /*0x8b0a*/
      }
      v10 = *v5; /*0x8b0e*/
LABEL_46:
      *(_BYTE *)((unsigned __int16)n0x100_1 + a1) = v10; /*0x8c33*/
      goto LABEL_56; /*0x8c39*/
    }
    v11 = 0; /*0x8b15*/
    v12 = 0; /*0x8b19*/
    while ( 1 ) /*0x8bd8*/
    {
      while ( 1 ) /*0x8bd2*/
      {
        while ( 1 ) /*0x8b28*/
        {
          while ( 1 ) /*0x8b1d*/
          {
            n0x39 = (unsigned __int8)*++v5; /*0x8b20*/
            if ( n0x39 > 0x39 ) /*0x8b28*/
              break; /*0x8b28*/
            if ( (unsigned __int8)*v5 >= 0x31u ) /*0x8b32*/
              goto LABEL_18; /*0x8b32*/
            switch ( n0x39 ) /*0x8b3a*/
            {
              case ' ': /*0x8b3a*/
                v11 |= 4u; /*0x8bb6*/
                break;
              case '+': /*0x8b3a*/
                v11 |= 2u; /*0x8bb0*/
                break;
              case ',': /*0x8b3a*/
                v11 |= 8u; /*0x8baa*/
                break;
              case '-': /*0x8b3a*/
                v11 |= 1u; /*0x8b9c*/
                break;
              default:
                if ( n0x39 != 46 ) /*0x8b4e*/
                {
                  if ( n0x39 != 48 ) /*0x8b53*/
                    goto LABEL_38; /*0x8b53*/
                  v11 |= 0x20u; /*0x8b59*/
                }
LABEL_18:
                v12 = 0; /*0x8b5d*/
                do /*0x8b95*/
                {
                  if ( (_BYTE)n0x39 == 46 ) /*0x8b64*/
                    ++v5; /*0x8b66*/
                  v14 = (unsigned __int8)*v5++; /*0x8b75*/
                  LOBYTE(n0x39) = *v5; /*0x8b7b*/
                  v12 = v14 + 10 * v12 - 48; /*0x8b86*/
                }
                while ( (unsigned __int8)*v5 >= 0x30u && (unsigned __int8)n0x39 <= 0x39u ); /*0x8b95*/
                --v5; /*0x8b97*/
                break;
            }
          }
          if ( n0x39 != 70 ) /*0x8bc0*/
          {
            if ( n0x39 == 76 ) /*0x8bc6*/
              goto LABEL_35; /*0x8bc6*/
            if ( n0x39 == 78 ) /*0x8bcc*/
              goto LABEL_34; /*0x8bcc*/
            if ( n0x39 != 102 ) /*0x8bd2*/
              break; /*0x8bd2*/
          }
LABEL_37:
          v11 |= 0x10u; /*0x8bf6*/
        }
        if ( n0x39 != 108 ) /*0x8bd8*/
          break; /*0x8bd8*/
LABEL_35:
        if ( (v11 & 0x10) == 0 ) /*0x8bec*/
          goto LABEL_37; /*0x8bec*/
        v11 |= 0x100u; /*0x8bee*/
      }
      if ( n0x39 != 110 ) /*0x8bde*/
        break; /*0x8bde*/
LABEL_34:
      v11 |= 0x40u; /*0x8be0*/
    }
LABEL_38:
    n114 = (unsigned __int8)*v5; /*0x8bff*/
    if ( n114 > 0x64 ) /*0x8c05*/
    {
      if ( n114 == 114 ) /*0x8c58*/
      {
        v17 = EfiStatusToStringWide(*++v8, a1 + (unsigned __int16)n0x100_1, n0x100); /*0x8d5a*/
        goto LABEL_77; /*0x8d5a*/
      }
      if ( n114 != 115 ) /*0x8c61*/
      {
        if ( n114 == 117 ) /*0x8c66*/
        {
          v11 |= 0x80u; /*0x8c9f*/
LABEL_60:
          ++v8; /*0x8ca2*/
          if ( (v11 & 0x100) != 0 ) /*0x8cad*/
            v18 = *v8; /*0x8caf*/
          else
            v18 = *(unsigned int *)v8; /*0x8cb4*/
          v17 = RstInt64ToDecimalString((_BYTE *)(a1 + (unsigned __int16)n0x100_1), v18, v11, v12); /*0x8cc3*/
          goto LABEL_77; /*0x8cc8*/
        }
        if ( n114 != 119 ) /*0x8c6b*/
        {
          if ( n114 != 120 ) /*0x8c70*/
            goto LABEL_55; /*0x8c70*/
LABEL_48:
          ++v8; /*0x8c3f*/
          if ( (v11 & 0x100) != 0 ) /*0x8c4a*/
            v16 = *v8; /*0x8c4c*/
          else
            v16 = *(unsigned int *)v8; /*0x8c81*/
          v17 = RstUint64ToHexString((_BYTE *)(a1 + (unsigned __int16)n0x100_1), v16, v11, v12); /*0x8c90*/
LABEL_77:
          LOWORD(n0x100_1) = v17 + n0x100_1; /*0x8d5f*/
          goto LABEL_78; /*0x8d65*/
        }
      }
LABEL_64:
      ++v8; /*0x8ccd*/
      _null_string_ = "<null string>"; /*0x8cd0*/
      v20 = 0; /*0x8cd7*/
      if ( *v8 ) /*0x8cdb*/
        _null_string_ = (const char *)*v8; /*0x8ce1*/
      while ( *_null_string_ && (v20 < v12 || !v12) ) /*0x8cf1*/
      {
        if ( *_null_string_ == 10 ) /*0x8cf5*/
        {
          n0x100_3 = (unsigned __int16)n0x100_1; /*0x8cf7*/
          LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8cfa*/
          *(_BYTE *)(n0x100_3 + a1) = 13; /*0x8cfe*/
        }
        n0x100_4 = (unsigned __int16)n0x100_1; /*0x8d05*/
        LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8d08*/
        *(_BYTE *)(n0x100_4 + a1) = *_null_string_; /*0x8d0c*/
        _null_string_ += (*v5 == 119) + 1; /*0x8d1b*/
        ++v20; /*0x8d1e*/
      }
      if ( v20 < v12 ) /*0x8d2e*/
      {
        v23 = (unsigned __int16)(v12 - v20); /*0x8d34*/
        do /*0x8d46*/
        {
          n0x100_5 = (unsigned __int16)n0x100_1; /*0x8d38*/
          LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8d3b*/
          --v23; /*0x8d3f*/
          *(_BYTE *)(n0x100_5 + a1) = 32; /*0x8d42*/
        }
        while ( v23 ); /*0x8d46*/
      }
      goto LABEL_78; /*0x8d46*/
    }
    switch ( n114 ) /*0x8c07*/
    {
      case 'd': /*0x8c07*/
        goto LABEL_60; /*0x8c07*/
      case '%': /*0x8c07*/
        break; /*0x8c10*/
      case 'S': /*0x8c07*/
        goto LABEL_64; /*0x8c15*/
      case 'X': /*0x8c07*/
        v11 |= 0x20u; /*0x8c3b*/
        goto LABEL_48; /*0x8c3b*/
      case 'a': /*0x8c07*/
        goto LABEL_64; /*0x8c23*/
      case 'c': /*0x8c07*/
        v10 = *(_BYTE *)++v8; /*0x8c31*/
        goto LABEL_46; /*0x8c31*/
    }
LABEL_55:
    *(_BYTE *)((unsigned __int16)n0x100_1 + a1) = n114; /*0x8c72*/
LABEL_56:
    LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8c78*/
LABEL_78:
    ++v5; /*0x8d6c*/
  }
  while ( *v5 ); /*0x8d74*/
LABEL_79:
  *(_BYTE *)((unsigned __int16)n0x100_1 + a1) = 0; /*0x8d7d*/
  return (unsigned int)(n0x100_1 + 1); /*0x8d98*/
}

// Function: RstHelper_8da8 @ 0x8da8 (0x1d bytes)
// Index: 236/906

__int64 sub_8DA8(__int64 a1, unsigned __int16 n0x100, char *a3, ...)
{
  va_list va; // [rsp+48h] [rbp+20h] BYREF

  va_start(va, a3);
  return HiiGetStringOrNull(a1, n0x100, a3, va); /*0x8dc0*/
}

// Function: EfiStatusToStringWide @ 0x8dc8 (0x265 bytes)
// Index: 237/906

__int64 __fastcall EfiStatusToStringWide(unsigned __int64 a1, __int64 a2, unsigned __int16 n0x100)
{
  const char *EFI_VOLUME_FULL; // r9
  unsigned __int16 v4; // ax

  if ( a1 > 0x800000000000000AuLL ) /*0x8de0*/
  {
    switch ( a1 ) /*0x8f86*/
    {
      case 0x800000000000000BuLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_VOLUME_FULL"; /*0x8f88*/
        goto LABEL_47; /*0x8f8f*/
      case 0x800000000000000CuLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_NO_MEDIA"; /*0x8f91*/
        goto LABEL_47; /*0x8f98*/
      case 0x800000000000000DuLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_MEDIA_CHANGED"; /*0x8f9a*/
        goto LABEL_47; /*0x8fa1*/
      case 0x800000000000000EuLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_NOT_FOUND"; /*0x8fa3*/
        goto LABEL_47; /*0x8faa*/
      case 0x800000000000000FuLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_ACCESS_DENIED"; /*0x8fac*/
        goto LABEL_47; /*0x8fb3*/
      case 0x8000000000000010uLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_NO_RESPONSE"; /*0x8fb5*/
        goto LABEL_47; /*0x8fbc*/
      case 0x8000000000000011uLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_NO_MAPPING"; /*0x8fbe*/
        goto LABEL_47; /*0x8fc5*/
      case 0x8000000000000012uLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_TIMEOUT"; /*0x8fc7*/
        goto LABEL_47; /*0x8fce*/
      case 0x8000000000000013uLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_NOT_STARTED"; /*0x8fd0*/
        goto LABEL_47; /*0x8fd7*/
      case 0x8000000000000014uLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_ALREADY_STARTED"; /*0x8fd9*/
        goto LABEL_47; /*0x8fe0*/
      case 0x8000000000000015uLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_ABORTED"; /*0x8fe2*/
        goto LABEL_47; /*0x8fe9*/
      case 0x8000000000000016uLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_ICMP_ERROR"; /*0x8feb*/
        goto LABEL_47; /*0x8ff2*/
      case 0x8000000000000017uLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_TFTP_ERROR"; /*0x8ff4*/
        goto LABEL_47; /*0x8ffb*/
      case 0x8000000000000018uLL: /*0x8f86*/
        EFI_VOLUME_FULL = "EFI_PROTOCOL_ERROR"; /*0x8ffd*/
        goto LABEL_47; /*0x8ffd*/
      default:
        goto LABEL_48;
    }
  }
  if ( a1 == 0x800000000000000AuLL ) /*0x8de6*/
  {
    EFI_VOLUME_FULL = "EFI_VOLUME_CORRUPTED"; /*0x8f52*/
  }
  else if ( a1 > 0x8000000000000003uLL ) /*0x8df9*/
  {
    switch ( a1 ) /*0x8eb5*/
    {
      case 0x8000000000000004uLL: /*0x8eb5*/
        EFI_VOLUME_FULL = "EFI_BAD_BUFFER_SIZE"; /*0x8f46*/
        break;
      case 0x8000000000000005uLL: /*0x8eb5*/
        EFI_VOLUME_FULL = "EFI_BUFFER_TOO_SMALL"; /*0x8f3a*/
        break;
      case 0x8000000000000006uLL: /*0x8eb5*/
        EFI_VOLUME_FULL = "EFI_NOT_READY"; /*0x8f2e*/
        break;
      case 0x8000000000000007uLL: /*0x8eb5*/
        EFI_VOLUME_FULL = "EFI_DEVICE_ERROR"; /*0x8f22*/
        break;
      case 0x8000000000000008uLL: /*0x8eb5*/
        EFI_VOLUME_FULL = "EFI_WRITE_PROTECTED"; /*0x8f16*/
        break;
      default:
        EFI_VOLUME_FULL = "EFI_OUT_OF_RESOURCES"; /*0x8f0a*/
        break;
    }
  }
  else if ( a1 == 0x8000000000000003uLL ) /*0x8dff*/
  {
    EFI_VOLUME_FULL = "EFI_UNSUPPORTED"; /*0x8e9c*/
  }
  else if ( a1 ) /*0x8e08*/
  {
    switch ( a1 ) /*0x8e12*/
    {
      case 1uLL: /*0x8e12*/
        EFI_VOLUME_FULL = "EFI_WARN_UNKNOWN_GLYPH"; /*0x8e84*/
        break;
      case 2uLL: /*0x8e12*/
        EFI_VOLUME_FULL = "EFI_WARN_DELETE_FAILURE"; /*0x8e78*/
        break;
      case 3uLL: /*0x8e12*/
        EFI_VOLUME_FULL = "EFI_WARN_WRITE_FAILURE"; /*0x8e6c*/
        break;
      case 4uLL: /*0x8e12*/
        EFI_VOLUME_FULL = "EFI_WARN_BUFFER_TOO_SMALL"; /*0x8e60*/
        break;
      case 0x8000000000000001uLL: /*0x8e12*/
        EFI_VOLUME_FULL = "EFI_LOAD_ERROR"; /*0x8e54*/
        break;
      case 0x8000000000000002uLL: /*0x8e12*/
        EFI_VOLUME_FULL = "EFI_INVALID_PARAMETER"; /*0x8e48*/
        break;
      default:
LABEL_48:
        v4 = RstHelper_8da8(a2, n0x100, "%X", a1); /*0x900d*/
        return (unsigned int)v4 - 1; /*0x901e*/
    }
  }
  else
  {
    EFI_VOLUME_FULL = "EFI_SUCCESS"; /*0x8e90*/
  }
LABEL_47:
  v4 = RstHelper_8da8(a2, n0x100, "%a", EFI_VOLUME_FULL); /*0x9004*/
  return (unsigned int)v4 - 1; /*0x9028*/
}

// Function: RstReadTsc @ 0x9070 (0x8 bytes)
// Index: 238/906

unsigned __int64 __fastcall RstReadTsc(_DWORD *a1)
{
  unsigned __int64 result; // rax
  int v2; // edx

  result = __rdtsc(); /*0x9070*/
  v2 = HIDWORD(result); /*0x9070*/
  result = (unsigned int)result; /*0x9070*/
  *a1 = result; /*0x9072*/
  a1[1] = v2; /*0x9074*/
  return result; /*0x9077*/
}

// Function: StrLenSafe @ 0x9078 (0x79 bytes)
// Index: 239/906

unsigned __int64 __fastcall StrLenSafe(_WORD *a1, __int64 n1000000)
{
  unsigned __int64 result; // rax

  if ( RstDebugEnabled() && ((unsigned __int8)a1 & 1) != 0 ) /*0x909c*/
    DebugAssert("SecureString.cpp", 0x20u, "((UINTN) String & 0x00000001) == 0"); /*0x90af*/
  if ( !a1 || !n1000000 ) /*0x90bc*/
    return 0; /*0x90df*/
  result = 0; /*0x90be*/
  if ( *a1 ) /*0x90c1*/
  {
    while ( result < n1000000 - 1 ) /*0x90cd*/
    {
      if ( !a1[++result] ) /*0x90d2*/
        return result; /*0x90d6*/
    }
    return n1000000; /*0x90da*/
  }
  return result; /*0x90eb*/
}

// Function: RstStringFirstNullOffset @ 0x90f4 (0x2b bytes)
// Index: 240/906

unsigned __int64 __fastcall RstStringFirstNullOffset(_BYTE *i, unsigned __int64 n20)
{
  unsigned __int64 result; // rax

  if ( !i || !n20 ) /*0x90fc*/
    return 0; /*0x911c*/
  result = 0; /*0x90fe*/
  if ( *i ) /*0x9100*/
  {
    while ( result < n20 - 1 ) /*0x910b*/
    {
      if ( !i[++result] ) /*0x9110*/
        return result; /*0x9114*/
    }
    return n20; /*0x9118*/
  }
  return result; /*0x9116*/
}

// Function: Assert_9 @ 0x9120 (0x20b bytes)
// Index: 241/906

__int64 __fastcall Assert_9(_BYTE *i, unsigned __int64 i_1, unsigned __int64 n20)
{
  unsigned __int64 n20_1; // rbp

  if ( RstDebugEnabled() && (i_1 & 1) != 0 ) /*0x9158*/
    DebugAssert("SecureString.cpp", 0x72u, "((UINTN) Destination & 0x00000001) == 0"); /*0x9169*/
  if ( RstDebugEnabled() ) /*0x916e*/
  {
    if ( i_1 ) /*0x917b*/
      goto LABEL_9; /*0x917b*/
    DebugAssert("SecureString.cpp", 0x77u, "(Destination != 0)"); /*0x918c*/
  }
  if ( !i_1 ) /*0x9194*/
    return 0x8000000000000002uLL; /*0x91a0*/
LABEL_9:
  if ( RstDebugEnabled() ) /*0x91a5*/
  {
    if ( i ) /*0x91b2*/
      goto LABEL_13; /*0x91b2*/
    DebugAssert("SecureString.cpp", 0x78u, "(Source != 0)"); /*0x91c3*/
  }
  if ( !i ) /*0x91cb*/
    return 0x8000000000000002uLL; /*0x91cb*/
LABEL_13:
  if ( RstDebugEnabled() ) /*0x91cd*/
  {
    if ( n20 <= 0xF4240 ) /*0x91df*/
      goto LABEL_17; /*0x91df*/
    DebugAssert("SecureString.cpp", 0x7Eu, "(DestMax <= 1000000)"); /*0x91f0*/
  }
  if ( n20 > 0xF4240 ) /*0x91f8*/
    return 0x8000000000000002uLL; /*0x91f8*/
LABEL_17:
  RstDebugEnabled(); /*0x91fa*/
  if ( RstDebugEnabled() ) /*0x9226*/
  {
    if ( n20 ) /*0x9233*/
      goto LABEL_21; /*0x9233*/
    DebugAssert("SecureString.cpp", 0x87u, "(DestMax != 0)"); /*0x9244*/
  }
  if ( !n20 ) /*0x924c*/
    return 0x8000000000000002uLL; /*0x924c*/
LABEL_21:
  n20_1 = RstStringFirstNullOffset(i, n20); /*0x9252*/
  if ( RstDebugEnabled() ) /*0x9260*/
  {
    if ( n20 > n20_1 ) /*0x926d*/
      goto LABEL_26; /*0x926d*/
    DebugAssert("SecureString.cpp", 0x8Du, "(DestMax > SourceLen)"); /*0x927e*/
  }
  if ( n20 <= n20_1 ) /*0x9286*/
    return 0x8000000000000005uLL; /*0x9292*/
LABEL_26:
  if ( !RstDebugEnabled() ) /*0x929c*/
    goto LABEL_32; /*0x929c*/
  if ( (unsigned __int64)i > i_1 ) /*0x92a1*/
  {
LABEL_30:
    if ( (unsigned __int64)i >= i_1 + 2 * n20 ) /*0x92b9*/
      goto LABEL_32; /*0x92b9*/
    goto LABEL_31; /*0x92b9*/
  }
  if ( i_1 >= (unsigned __int64)&i[n20_1 + 1] ) /*0x92ab*/
  {
    if ( i_1 > (unsigned __int64)i ) /*0x92b0*/
      goto LABEL_33; /*0x92b0*/
    goto LABEL_30; /*0x92b0*/
  }
LABEL_31:
  DebugAssert( /*0x92bb*/
    "SecureString.cpp",
    0x92u,
    "!InternalSafeStringIsOverlap (Destination, DestMax * sizeof(CHAR16), (void *)Source, SourceLen + 1)");
LABEL_32:
  if ( (unsigned __int64)i > i_1 ) /*0x92d2*/
  {
LABEL_35:
    if ( (unsigned __int64)i < i_1 + 2 * n20 ) /*0x92ea*/
      return 0x800000000000000FuLL; /*0x92ea*/
    goto LABEL_38; /*0x92ea*/
  }
LABEL_33:
  if ( i_1 < (unsigned __int64)&i[n20_1 + 1] ) /*0x92dc*/
    return 0x800000000000000FuLL; /*0x92f6*/
  if ( (unsigned __int64)i >= i_1 ) /*0x92e1*/
    goto LABEL_35; /*0x92e1*/
LABEL_38:
  while ( *i ) /*0x930a*/
  {
    *(_WORD *)i_1 = (unsigned __int8)*i; /*0x92fb*/
    i_1 += 2LL; /*0x92fe*/
    ++i; /*0x9302*/
  }
  *(_WORD *)i_1 = 0; /*0x930c*/
  return 0; /*0x9321*/
}

// Function: StrLenSafe_w @ 0x932c (0xa bytes)
// Index: 242/906

unsigned __int64 StrLenSafe_w_WORD *a1)
{
  return StrLenSafe(a1, 1000000);
}

// Function: RstDriverInit2 @ 0x9338 (0x2d bytes)
// Index: 243/906

__int64 __fastcall RstDriverInit2(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  UefiBootServicesTableLibConstructor((__int64)ImageHandle, (__int64)SystemTable); /*0x9348*/
  UefiRuntimeServicesTableLibConstructor(ImageHandle, SystemTable); /*0x9353*/
  return 0; /*0x935f*/
}

// Function: RstGetGlobalContext @ 0x9368 (0x8 bytes)
// Index: 244/906

void *RstGetGlobalContext()
{
  return &qword_27920; /*0x936f*/
}

// Function: RstValidateGlobalContext @ 0x9370 (0x29 bytes)
// Index: 245/906

char RstValidateGlobalContext()
{
  char result; // al

  byte_2792F = 0; /*0x9380*/
  result = -(char)RstChecksum16(&qword_27920, 38); /*0x938c*/
  byte_2792F = result; /*0x938e*/
  return result; /*0x9394*/
}

// Function: RstCompareDriverSignature @ 0x939c (0x30 bytes)
// Index: 246/906

char RstCompareDriverSignature()
{
  unsigned __int8 v0; // r8
  char result; // al

  v0 = 0; /*0x939c*/
  result = 1; /*0x93a6*/
  while ( *((_BYTE *)&dword_35434 + (_QWORD)_ImageBase + v0) == *((_BYTE *)&dword_23A30 + (_QWORD)_ImageBase + v0) ) /*0x93bc*/
  {
    if ( ++v0 > 6u ) /*0x93c5*/
      return result; /*0x93c5*/
  }
  return 0; /*0x93c7*/
}

// Function: RstVrocModeFromString @ 0x93cc (0x70 bytes)
// Index: 247/906

__int64 __fastcall RstVrocModeFromString(CHAR16 *FirstString)
{
  if ( !(unsigned __int16)StrnCmp(FirstString, "Premium Intel VROC", 8u) ) /*0x93e8*/
    return 2; /*0x93f2*/
  if ( (unsigned __int16)StrnCmp(FirstString, "Standard Intel VROC", 8u) )
    return (unsigned __int16)StrnCmp(FirstString, "Intel-SSD-only Intel VROC", 8u) == 0 ? 3 : 0;
  return 1; /*0x9436*/
}

// Function: RstDriverModeSet @ 0x943c (0xd8 bytes)
// Index: 248/906

__int64 __fastcall RstDriverModeSet(int a1, char a2)
{
  char *v4; // rax
  __int64 n6; // rdx
  char *v6; // rbx
  unsigned int v7; // eax
  __int64 n41682; // rax
  unsigned __int16 v9; // [rsp+30h] [rbp+8h] BYREF

  v4 = (char *)RstGetGlobalContext(); /*0x9450*/
  v6 = v4; /*0x9455*/
  switch ( a1 ) /*0x945a*/
  {
    case 0: /*0x945a*/
      *(_DWORD *)(v4 + 26) &= 0xFFFFFFE9; /*0x945c*/
      *((_WORD *)v4 + 8) &= 0xFFE9u; /*0x9465*/
      *(_DWORD *)(v4 + 34) &= 0xFFFFF8FF; /*0x9469*/
      break; /*0x9470*/
    case 1: /*0x945a*/
      n6 = 6; /*0x947a*/
      *(_DWORD *)(v4 + 26) = *(_DWORD *)(v4 + 26) & 0xFFFFFFE9 | 6; /*0x9487*/
      *((_WORD *)v4 + 8) = *((_WORD *)v4 + 8) & 0xFFE9 | 6; /*0x9494*/
      v7 = *(_DWORD *)(v4 + 34) & 0xFFFFF8FF | 0x500; /*0x949f*/
LABEL_7:
      *(_DWORD *)(v6 + 34) = v7; /*0x94c1*/
      break; /*0x94c4*/
    case 2: /*0x945a*/
      *(_DWORD *)(v4 + 26) |= 0x16u; /*0x94ae*/
      *((_WORD *)v4 + 8) |= 0x16u; /*0x94b1*/
      v7 = *(_DWORD *)(v4 + 34) & 0xFFFFF8FF | 0x600; /*0x94bc*/
      goto LABEL_7; /*0x94bc*/
    case 3: /*0x945a*/
      *(_DWORD *)(v4 + 34) &= ~0x400u; /*0x94cb*/
      *(_DWORD *)(v4 + 26) |= 0x16u; /*0x94d3*/
      *((_WORD *)v4 + 8) |= 0x16u; /*0x94d6*/
      *(_DWORD *)(v4 + 34) |= 0x300u; /*0x94da*/
      break;
  }
  LOBYTE(n6) = a2; /*0x94e1*/
  n41682 = RstHelper_178c(&v9, n6); /*0x94e9*/
  if ( (_DWORD)n41682 == 2 ) /*0x94f1*/
  {
    n41682 = 41682; /*0x94f3*/
    if ( v9 == 0xA2D2 ) /*0x94fd*/
      *(_DWORD *)(v6 + 34) &= ~0x400u; /*0x94ff*/
  }
  return n41682; /*0x950e*/
}

// Function: RstAuthChallengeWriteVerifyRead @ 0x9514 (0x7c bytes)
// Index: 249/906

char __fastcall RstAuthChallengeWriteVerifyRead(CHAR16 *Source, _BYTE *a2)
{
  char result; // al
  CHAR16 *Source_1; // rsi
  __int64 n8; // rbp
  _BYTE *v7; // rcx
  CHAR16 *v8; // rdx
  __int64 n6; // r8
  char v10; // al

  result = RstAuthLockAcquire(); /*0x952e*/
  if ( !result ) /*0x9535*/
  {
    RstAuthTpmControlAll(51); /*0x9539*/
    Source_1 = Source; /*0x953e*/
    n8 = 8; /*0x9541*/
    do /*0x9554*/
    {
      *(_BYTE *)Source_1 = RstAuthTpmGetStateMask(); /*0x954b*/
      Source_1 = (CHAR16 *)((char *)Source_1 + 1); /*0x954d*/
      --n8; /*0x9550*/
    }
    while ( n8 ); /*0x9554*/
    *((_BYTE *)Source + 8) = 0; /*0x9556*/
    v7 = a2; /*0x955a*/
    v8 = Source + 3; /*0x955d*/
    n6 = 6; /*0x9561*/
    do /*0x9573*/
    {
      v10 = *(_BYTE *)v8; /*0x9565*/
      v8 = (CHAR16 *)((char *)v8 - 1); /*0x9567*/
      *v7++ = v10; /*0x956a*/
      --n6; /*0x956f*/
    }
    while ( n6 ); /*0x9573*/
    a2[6] = 0; /*0x9575*/
    return 0; /*0x9579*/
  }
  return result; /*0x958a*/
}

// Function: RstAuthVariableRead @ 0x9590 (0x7e bytes)
// Index: 250/906

char __fastcall RstAuthVariableRead(char n0x97, char *a2, unsigned __int8 n8)
{
  char result; // al
  __int64 n8_1; // rbx

  result = RstAuthLockAcquire(); /*0x95a7*/
  if ( !result ) /*0x95ae*/
  {
    if ( (unsigned __int8)n0x97 <= 0x97u ) /*0x95b3*/
    {
      if ( (unsigned __int8)(n0x97 + 0x80) > 7u ) /*0x95c1*/
      {
        RstAuthTpmControlAll(204); /*0x95c9*/
        RstAuthTpmControlAll(240); /*0x95d0*/
        RstAuthTpmControlAll(n0x97); /*0x95d7*/
        RstAuthTpmControlAll(0); /*0x95de*/
        if ( n8 ) /*0x95e6*/
        {
          n8_1 = n8; /*0x95e8*/
          do /*0x95fa*/
          {
            *a2++ = RstAuthTpmGetStateMask(); /*0x95f1*/
            --n8_1; /*0x95f6*/
          }
          while ( n8_1 ); /*0x95fa*/
        }
        return 0; /*0x95fc*/
      }
      else
      {
        return 6; /*0x95c3*/
      }
    }
    else
    {
      return 5; /*0x95b5*/
    }
  }
  return result; /*0x9608*/
}

// Function: RstSha1Round @ 0x9610 (0x3c bytes)
// Index: 251/906

__int64 __fastcall RstSha1Round(unsigned int n1732584193, unsigned int n271733878, unsigned int a3, _BYTE *n0x50)
{
  if ( (unsigned __int8)n0x50 < 0x14u ) /*0x9614*/
    return n271733878 & n1732584193 | a3 & ~n1732584193; /*0x9621*/
  if ( (unsigned __int8)n0x50 < 0x28u ) /*0x9626*/
    return a3 ^ n271733878 ^ n1732584193; /*0x9626*/
  if ( (unsigned __int8)n0x50 < 0x3Cu ) /*0x9634*/
    return a3 & n271733878 | n1732584193 & (a3 | n271733878); /*0x9640*/
  if ( (unsigned __int8)n0x50 < 0x50u ) /*0x9647*/
    return a3 ^ n271733878 ^ n1732584193; /*0x962f*/
  return 0; /*0x9621*/
}

// Function: RstSha1RoundConstant @ 0x964c (0x2c bytes)
// Index: 252/906

__int64 __fastcall RstSha1RoundConstant(unsigned __int8 n0x14)
{
  if ( n0x14 < 0x14u ) /*0x964f*/
    return 1518500249; /*0x9651*/
  if ( n0x14 < 0x28u ) /*0x965a*/
    return 1859775393; /*0x965c*/
  if ( n0x14 >= 0x3Cu )
    return n0x14 < 0x50u ? 0xCA62C1D6 : 0;
  return 2400959708LL; /*0x9656*/
}

// Function: RstCrc16 @ 0x9678 (0x40 bytes)
// Index: 253/906

unsigned __int16 __fastcall RstCrc16(unsigned __int8 *Source, unsigned __int8 n0x14)
{
  unsigned __int16 v2; // r8
  __int64 n0x14_1; // r9
  unsigned __int8 v4; // dl
  __int64 n8; // r10
  char v6; // al

  v2 = 0; /*0x9678*/
  if ( n0x14 ) /*0x967e*/
  {
    n0x14_1 = n0x14; /*0x9680*/
    do /*0x96b1*/
    {
      v4 = *Source; /*0x9684*/
      n8 = 8; /*0x9686*/
      do /*0x96a8*/
      {
        v6 = v2 ^ v4; /*0x968e*/
        v2 >>= 1; /*0x9691*/
        if ( (v6 & 1) != 0 ) /*0x9697*/
          v2 ^= 0xA001u; /*0x969e*/
        v4 >>= 1; /*0x96a2*/
        --n8; /*0x96a4*/
      }
      while ( n8 ); /*0x96a8*/
      ++Source; /*0x96aa*/
      --n0x14_1; /*0x96ad*/
    }
    while ( n0x14_1 ); /*0x96b1*/
  }
  return v2; /*0x96b7*/
}

// Function: RstGenerateXorPattern @ 0x96b8 (0x3a bytes)
// Index: 254/906

char RstGenerateXorPattern()
{
  _BYTE *v0; // r10
  __int64 n7; // rdx
  char *v2; // rcx

  if ( RstCompareDriverSignature() ) /*0x96bf*/
    return 1; /*0x96eb*/
  n7 = 7; /*0x96cf*/
  v2 = (char *)((char *)&dword_35434 - v0); /*0x96d4*/
  do /*0x96e5*/
  {
    *v0 = v0[(_QWORD)v2]; /*0x96db*/
    ++v0; /*0x96de*/
    --n7; /*0x96e1*/
  }
  while ( n7 ); /*0x96e5*/
  return 0; /*0x96ed*/
}

// Function: RstAuthChallengeWriteVerify @ 0x96f4 (0x120 bytes)
// Index: 255/906

char __fastcall RstAuthChallengeWriteVerify(__int64 n0x97, const CHAR16 *Source, unsigned __int8 Length)
{
  unsigned __int8 n0x97_1; // bl
  char result; // al
  unsigned __int8 v7; // di
  __int64 n8; // rsi
  char *v9; // rbx
  unsigned __int8 Sourcea[8]; // [rsp+20h] [rbp-28h] BYREF
  __int16 v11; // [rsp+28h] [rbp-20h]
  char v12; // [rsp+2Ah] [rbp-1Eh]
  __int16 v13; // [rsp+50h] [rbp+8h]

  n0x97_1 = n0x97; /*0x9715*/
  *(_QWORD *)Sourcea = 0; /*0x9717*/
  v11 = 0; /*0x971b*/
  v12 = 0; /*0x9720*/
  if ( (unsigned __int8)n0x97 > 0x97u ) /*0x9727*/
    return 5; /*0x9729*/
  v7 = n0x97 & 0xF8; /*0x9733*/
  result = RstAuthLockAcquire(); /*0x9737*/
  if ( !result ) /*0x973f*/
  {
    RstAuthTpmControlAll(204); /*0x9747*/
    n8 = 8; /*0x974c*/
    RstAuthVariableRead(n0x97_1 & 0xF8, (char *)&Sourcea[3], 8u); /*0x975c*/
    if ( Length ) /*0x9764*/
      StrnCpy((CHAR16 *)&Sourcea[n0x97_1 - (unsigned __int64)v7 + 3], Source, Length); /*0x977c*/
    Sourcea[0] = 15; /*0x9781*/
    Sourcea[1] = n0x97_1; /*0x9786*/
    Sourcea[2] = 0; /*0x978a*/
    result = RstAuthLockAcquire(); /*0x978f*/
    if ( !result ) /*0x9797*/
    {
      RstAuthTpmControlAll(204); /*0x979b*/
      RstAuthTpmControlAll(15); /*0x97a2*/
      RstAuthTpmControlAll(n0x97_1); /*0x97a9*/
      RstAuthTpmControlAll(0); /*0x97b0*/
      v9 = (char *)&Sourcea[3]; /*0x97b5*/
      do /*0x97c8*/
      {
        RstAuthTpmControlAll(*v9++); /*0x97bc*/
        --n8; /*0x97c4*/
      }
      while ( n8 ); /*0x97c8*/
      LOBYTE(v13) = RstAuthTpmGetStateMask(); /*0x97cf*/
      HIBYTE(v13) = RstAuthTpmGetStateMask(); /*0x97df*/
      if ( v13 == ~RstCrc16(Sourcea, 0xBu) ) /*0x97f0*/
        return RstAuthLockAcquire(); /*0x97f6*/
      else
        return 9; /*0x97f2*/
    }
  }
  return result; /*0x980a*/
}

// Function: RstMD5Transform @ 0x9814 (0x151 bytes)
// Index: 256/906

char __fastcall RstMD5Transform(__int64 a1)
{
  _BYTE *n0x50; // r9
  char *v2; // rdx
  _BYTE *v3; // r11
  int n1732584193; // edi
  unsigned int n1732584193_1; // esi
  unsigned int n271733878_1; // ebx
  __int64 n16; // rcx
  unsigned int n271733878; // ebp
  int n271733878_2; // r12d
  char *v10; // r8
  char v11; // al
  char *v12; // rcx
  __int64 n64; // rdx
  int v14; // eax
  unsigned __int8 n0x14; // r9
  int v16; // eax
  _BYTE *v17; // r10
  int v18; // r8d
  _DWORD *v19; // r11
  int n1732584193_3; // r8d
  unsigned int n1732584193_2; // ebx
  char n5; // dl
  char *v23; // rcx
  char v24; // al
  bool v25; // zf
  char result; // al
  int n271733878_3; // [rsp+30h] [rbp-158h] BYREF
  char v28; // [rsp+40h] [rbp-148h] BYREF
  _BYTE v29[7]; // [rsp+41h] [rbp-147h] BYREF
  char v30; // [rsp+48h] [rbp-140h] BYREF

  n0x50 = &v29[-a1]; /*0x983d*/
  v2 = (char *)(a1 + 2); /*0x9840*/
  v3 = &v29[-a1 - 1]; /*0x9844*/
  n1732584193 = 1732584193; /*0x9847*/
  n1732584193_1 = -271733879; /*0x984c*/
  n271733878_1 = -1732584194; /*0x9851*/
  n16 = 16; /*0x9856*/
  n271733878 = 271733878; /*0x985b*/
  n271733878_2 = -1009589776; /*0x9860*/
  v10 = &v28; /*0x9866*/
  do /*0x9891*/
  {
    v2[(_QWORD)n0x50] = *(v2 - 2); /*0x986e*/
    v2[(_QWORD)v3] = *(v2 - 1); /*0x9875*/
    v11 = *v2; /*0x9879*/
    v2 += 4; /*0x987b*/
    v10[1] = v11; /*0x987f*/
    *v10 = *(v2 - 3); /*0x9886*/
    v10 += 4; /*0x9889*/
    --n16; /*0x988d*/
  }
  while ( n16 ); /*0x9891*/
  v12 = &v30; /*0x9893*/
  n64 = 64; /*0x9898*/
  do /*0x98b5*/
  {
    v14 = *(_DWORD *)v12 ^ *((_DWORD *)v12 - 2) ^ *((_DWORD *)v12 + 6) ^ *((_DWORD *)v12 + 11); /*0x98a6*/
    v12 += 4; /*0x98a8*/
    --n64; /*0x98ae*/
    *((_DWORD *)v12 + 13) = __ROL4__(v14, 1); /*0x98b2*/
  }
  while ( n64 ); /*0x98b5*/
  LOBYTE(n0x50) = 0; /*0x98b7*/
  do /*0x9901*/
  {
    RstSha1Round(n1732584193_1, n271733878_1, n271733878, n0x50); /*0x98c6*/
    v16 = RstSha1RoundConstant(n0x14); /*0x98d1*/
    LOBYTE(n0x50) = (_BYTE)n0x50 + 1; /*0x98d6*/
    n1732584193_3 = n271733878_2 + *v19 + __ROL4__(n1732584193, 5) + v16 + v18; /*0x98eb*/
    n271733878_2 = n271733878; /*0x98ee*/
    n271733878 = n271733878_1; /*0x98f1*/
    n1732584193_2 = n1732584193_1; /*0x98f3*/
    n1732584193_1 = n1732584193; /*0x98f5*/
    n1732584193 = n1732584193_3; /*0x98f7*/
    n271733878_1 = __ROR4__(n1732584193_2, 2); /*0x98fa*/
  }
  while ( (unsigned __int8)n0x50 < 0x50u ); /*0x9901*/
  n271733878_3 = n271733878_2; /*0x9914*/
  n5 = 5; /*0x9919*/
  v23 = (char *)&n271733878_3 + 1; /*0x991b*/
  do /*0x9945*/
  {
    *v17 = *(v23 - 1); /*0x9923*/
    v17 += 4; /*0x9928*/
    *(v17 - 3) = *v23; /*0x992c*/
    v24 = v23[1]; /*0x9930*/
    v23 -= 4; /*0x9933*/
    v25 = n5-- == 1; /*0x9937*/
    *(v17 - 2) = v24; /*0x993a*/
    result = v23[6]; /*0x993e*/
    *(v17 - 1) = result; /*0x9941*/
  }
  while ( !v25 ); /*0x9945*/
  return result; /*0x995f*/
}

// Function: RstAuthMd5Init @ 0x9968 (0x127 bytes)
// Index: 257/906

char __fastcall RstAuthMd5Init(_QWORD *a1, CHAR16 *Source, const CHAR16 *Source_1)
{
  char v6; // al
  char v7; // al
  char v8; // al
  char v9; // al
  char v10; // al
  char v11; // al
  char v12; // al
  int v14; // [rsp+40h] [rbp-48h] BYREF
  CHAR16 Destination[16]; // [rsp+44h] [rbp-44h] BYREF
  char v16; // [rsp+64h] [rbp-24h]
  char v17; // [rsp+65h] [rbp-23h]
  char v18; // [rsp+66h] [rbp-22h]
  char v19; // [rsp+67h] [rbp-21h]
  char v20; // [rsp+68h] [rbp-20h]
  char v21; // [rsp+69h] [rbp-1Fh]
  char v22; // [rsp+6Ah] [rbp-1Eh]
  char v23; // [rsp+6Bh] [rbp-1Dh]
  char v24; // [rsp+6Ch] [rbp-1Ch]
  char v25; // [rsp+6Dh] [rbp-1Bh]
  char v26; // [rsp+6Eh] [rbp-1Ah]
  char v27; // [rsp+6Fh] [rbp-19h]
  int n1128482840; // [rsp+70h] [rbp-18h]
  char v29; // [rsp+74h] [rbp-14h]
  char v30; // [rsp+75h] [rbp-13h]
  char v31; // [rsp+76h] [rbp-12h]
  char v32; // [rsp+77h] [rbp-11h]
  char v33; // [rsp+78h] [rbp-10h]
  char v34; // [rsp+79h] [rbp-Fh]
  char v35; // [rsp+7Ah] [rbp-Eh]
  char v36; // [rsp+7Bh] [rbp-Dh]
  char v37; // [rsp+7Ch] [rbp-Ch]
  char v38; // [rsp+7Dh] [rbp-Bh]
  char v39; // [rsp+7Eh] [rbp-Ah]
  char v40; // [rsp+7Fh] [rbp-9h]

  MemZero((_BYTE *)&v14 + 1, 0, 63); /*0x9992*/
  v14 = -2097072044; /*0x99c5*/
  StrnCpy(Destination, Source_1, 0x20u); /*0x99c9*/
  v20 = *(_BYTE *)Source & 0x3F; /*0x99dc*/
  v6 = *((_BYTE *)Source + 1); /*0x99e0*/
  v16 = -1; /*0x99e3*/
  v21 = v6; /*0x99e8*/
  v7 = *((_BYTE *)Source + 2); /*0x99ec*/
  v17 = -1; /*0x99ef*/
  v22 = v7; /*0x99f4*/
  v8 = *((_BYTE *)Source + 3); /*0x99f8*/
  v18 = -1; /*0x99fb*/
  v23 = v8; /*0x9a00*/
  v9 = *((_BYTE *)Source + 4); /*0x9a04*/
  v19 = -1; /*0x9a07*/
  v24 = v9; /*0x9a0c*/
  v10 = *((_BYTE *)Source + 5); /*0x9a10*/
  v29 = -1; /*0x9a13*/
  v25 = v10; /*0x9a18*/
  v11 = *((_BYTE *)Source + 6); /*0x9a1c*/
  v30 = -1; /*0x9a1f*/
  v26 = v11; /*0x9a24*/
  v12 = *((_BYTE *)Source + 7); /*0x9a28*/
  v31 = -1; /*0x9a2b*/
  v27 = v12; /*0x9a30*/
  v32 = 0x80; /*0x9a3a*/
  v33 = 0; /*0x9a3f*/
  v34 = 0; /*0x9a44*/
  v35 = 0; /*0x9a49*/
  n1128482840 = 1128482840; /*0x9a4e*/
  v36 = 0; /*0x9a52*/
  v37 = 0; /*0x9a57*/
  v38 = 0; /*0x9a5c*/
  v39 = 1; /*0x9a61*/
  v40 = -72; /*0x9a66*/
  RstMD5Transform((__int64)&v14); /*0x9a6b*/
  *a1 = 0; /*0x9a81*/
  return 0; /*0x9a8a*/
}

// Function: RstAuthChecksumVerify @ 0x9a90 (0x2e8 bytes)
// Index: 258/906

char __fastcall RstAuthChecksumVerify(unsigned __int8 n4, const CHAR16 *Source, int *a3, _QWORD *FirstString, char *a5)
{
  __int64 n0x97; // rcx
  char result; // al
  char *Source_1; // rbx
  __int64 n3; // rsi
  __int64 *p_Sourcea; // rbx
  __int64 n33; // rsi
  char v15; // al
  char v16; // al
  unsigned __int8 *Source_4; // rbx
  __int64 n20; // rsi
  char *v19; // rbx
  __int64 n8; // rdi
  unsigned __int8 v21; // cl
  CHAR16 Source_; // [rsp+20h] [rbp-C8h] BYREF
  char v23; // [rsp+22h] [rbp-C6h]
  __int64 Sourcea; // [rsp+23h] [rbp-C5h] BYREF
  __int64 v25; // [rsp+2Bh] [rbp-BDh]
  __int64 v26; // [rsp+33h] [rbp-B5h]
  __int64 v27; // [rsp+3Bh] [rbp-ADh]
  _BYTE v28[8]; // [rsp+48h] [rbp-A0h] BYREF
  int v29; // [rsp+50h] [rbp-98h] BYREF
  CHAR16 Destination[16]; // [rsp+54h] [rbp-94h] BYREF
  char v31; // [rsp+74h] [rbp-74h]
  char v32; // [rsp+75h] [rbp-73h]
  char v33; // [rsp+76h] [rbp-72h]
  char v34; // [rsp+77h] [rbp-71h]
  char v35; // [rsp+78h] [rbp-70h]
  CHAR16 Destination_; // [rsp+79h] [rbp-6Fh] BYREF
  int v37; // [rsp+80h] [rbp-68h]
  char v38; // [rsp+84h] [rbp-64h]
  char v39; // [rsp+85h] [rbp-63h]
  char v40; // [rsp+86h] [rbp-62h]
  char v41; // [rsp+87h] [rbp-61h]
  char v42; // [rsp+88h] [rbp-60h]
  char v43; // [rsp+89h] [rbp-5Fh]
  char v44; // [rsp+8Ah] [rbp-5Eh]
  char v45; // [rsp+8Bh] [rbp-5Dh]
  char v46; // [rsp+8Ch] [rbp-5Ch]
  char v47; // [rsp+8Dh] [rbp-5Bh]
  char v48; // [rsp+8Eh] [rbp-5Ah]
  char v49; // [rsp+8Fh] [rbp-59h]
  unsigned __int8 Source_2[24]; // [rsp+90h] [rbp-58h] BYREF
  unsigned __int8 Source_3[24]; // [rsp+A8h] [rbp-40h] BYREF
  __int16 v52; // [rsp+F0h] [rbp+8h]
  __int16 v53; // [rsp+F0h] [rbp+8h]

  LOBYTE(Source_) = 0; /*0x9ac0*/
  MemZero((_BYTE *)&Source_ + 1, 0, 35); /*0x9ac5*/
  if ( n4 >= 4u ) /*0x9ace*/
    return 14; /*0x9ad0*/
  BYTE1(Sourcea) = *a5; /*0x9af1*/
  LOBYTE(n0x97) = 32 * n4; /*0x9afa*/
  WORD1(Sourcea) = *(_WORD *)(a5 + 1); /*0x9afc*/
  result = RstAuthChallengeWriteVerify(n0x97, &Source_, 8u); /*0x9b09*/
  if ( !result ) /*0x9b10*/
  {
    LOBYTE(Source_) = -91; /*0x9b16*/
    HIBYTE(Source_) = 32 * n4; /*0x9b1b*/
    v23 = 0; /*0x9b1f*/
    result = RstAuthLockAcquire(); /*0x9b23*/
    if ( !result ) /*0x9b2a*/
    {
      RstAuthTpmControlAll(204); /*0x9b32*/
      Source_1 = (char *)&Source_; /*0x9b37*/
      n3 = 3; /*0x9b3c*/
      do /*0x9b4f*/
      {
        RstAuthTpmControlAll(*Source_1++); /*0x9b43*/
        --n3; /*0x9b4b*/
      }
      while ( n3 ); /*0x9b4f*/
      p_Sourcea = &Sourcea; /*0x9b51*/
      n33 = 33; /*0x9b56*/
      do /*0x9b69*/
      {
        *(_BYTE *)p_Sourcea = RstAuthTpmGetStateMask(); /*0x9b60*/
        p_Sourcea = (__int64 *)((char *)p_Sourcea + 1); /*0x9b62*/
        --n33; /*0x9b65*/
      }
      while ( n33 ); /*0x9b69*/
      LOBYTE(v52) = RstAuthTpmGetStateMask(); /*0x9b70*/
      HIBYTE(v52) = RstAuthTpmGetStateMask(); /*0x9b83*/
      if ( v52 == ~RstCrc16((unsigned __int8 *)&Source_, 0x24u) ) /*0x9b9a*/
      {
        v29 = *a3; /*0x9bb7*/
        StrnCpy(Destination, (const CHAR16 *)&Sourcea, 0x20u); /*0x9bbb*/
        v31 = -1; /*0x9bd2*/
        v32 = -1; /*0x9bd7*/
        v33 = -1; /*0x9bdc*/
        v34 = -1; /*0x9be1*/
        v35 = n4 | 0x40; /*0x9be6*/
        StrnCpy(&Destination_, Source, 7u); /*0x9beb*/
        v37 = a3[1]; /*0x9bf4*/
        v38 = *a5; /*0x9c04*/
        v15 = a5[1]; /*0x9c0b*/
        v41 = 0x80; /*0x9c10*/
        v39 = v15; /*0x9c18*/
        v16 = a5[2]; /*0x9c1f*/
        v42 = 0; /*0x9c24*/
        v40 = v16; /*0x9c2c*/
        v43 = 0; /*0x9c3a*/
        v44 = 0; /*0x9c42*/
        v45 = 0; /*0x9c4a*/
        v46 = 0; /*0x9c52*/
        v47 = 0; /*0x9c5a*/
        v48 = 1; /*0x9c62*/
        v49 = -72; /*0x9c6a*/
        (*(void (__fastcall **)(__int64))(qword_58070 + 248))(2000); /*0x9c72*/
        Source_4 = Source_3; /*0x9c78*/
        n20 = 20; /*0x9c80*/
        do /*0x9c93*/
        {
          *Source_4++ = RstAuthTpmGetStateMask(); /*0x9c8a*/
          --n20; /*0x9c8f*/
        }
        while ( n20 ); /*0x9c93*/
        LOBYTE(v53) = RstAuthTpmGetStateMask(); /*0x9c9a*/
        HIBYTE(v53) = RstAuthTpmGetStateMask(); /*0x9cb3*/
        RstMD5Transform((__int64)&v29); /*0x9cba*/
        if ( v53 == ~RstCrc16(Source_3, 0x14u) ) /*0x9cd9*/
        {
          if ( v53 == ~RstCrc16(Source_2, 0x14u) ) /*0x9cf9*/
          {
            v19 = v28; /*0x9d04*/
            *FirstString = Sourcea; /*0x9d0c*/
            FirstString[1] = v25; /*0x9d13*/
            FirstString[2] = v26; /*0x9d1b*/
            FirstString[3] = v27; /*0x9d23*/
            n8 = 8; /*0x9d27*/
            do /*0x9d3a*/
            {
              *v19++ = RstAuthTpmGetStateMask(); /*0x9d31*/
              --n8; /*0x9d36*/
            }
            while ( n8 ); /*0x9d3a*/
            v21 = 1; /*0x9d3c*/
            while ( v28[v21] == 0xAA || v28[v21] == 85 ) /*0x9d4d*/
            {
              if ( ++v21 >= 8u ) /*0x9d54*/
                return 0; /*0x9d56*/
            }
            return 20; /*0x9d74*/
          }
          else
          {
            return 17; /*0x9cfb*/
          }
        }
        else
        {
          return 16; /*0x9cdb*/
        }
      }
      else
      {
        return 15; /*0x9b9c*/
      }
    }
  }
  return result; /*0x9d68*/
}

// Function: RstAuthVerifySignature @ 0x9d78 (0x225 bytes)
// Index: 259/906

char __fastcall RstAuthVerifySignature(char a1, unsigned int *a2, char a3)
{
  __int64 v6; // rsi
  __int64 n6; // rdx
  int v8; // edi
  char n23; // bl
  int v10; // eax
  __int16 v12; // [rsp+30h] [rbp-78h] BYREF
  char n29; // [rsp+32h] [rbp-76h]
  char v14[8]; // [rsp+38h] [rbp-70h] BYREF
  int v15; // [rsp+40h] [rbp-68h] BYREF
  int v16; // [rsp+44h] [rbp-64h] BYREF
  int v17; // [rsp+48h] [rbp-60h] BYREF
  __int64 v18; // [rsp+50h] [rbp-58h] BYREF
  CHAR16 Source[8]; // [rsp+58h] [rbp-50h] BYREF
  CHAR16 FirstString[20]; // [rsp+68h] [rbp-40h] BYREF
  __int16 v21; // [rsp+C8h] [rbp+20h]

  LODWORD(dword_35434) = -1; /*0x9da1*/
  word_35438 = -1; /*0x9db1*/
  byte_3543A = -1; /*0x9dc1*/
  v6 = (*(__int64 (__fastcall **)(__int64))(qword_58070 + 24))(31); /*0x9dd4*/
  RstAuthLevelCommit(a3, n6); /*0x9dd7*/
  RstHelper_18e0(n16908298, 0, &v15); /*0x9de9*/
  RstHelper_18e0(n16908298, 1u, &v16); /*0x9dfb*/
  RstReadTsc(&v17); /*0x9e05*/
  if ( (unsigned int)(1103515245 * v17 + 12345) >> 8 ) /*0x9e1d*/
  {
    v12 = (unsigned int)(1103515245 * v17 + 12345) >> 8; /*0x9e29*/
    n29 = (unsigned int)(1103515245 * v17 + 12345) >> 8 >> 16; /*0x9e35*/
  }
  else
  {
    v12 = -23173; /*0x9e40*/
    n29 = 29; /*0x9e4a*/
  }
  v8 = 0; /*0x9e4f*/
  while ( 1 ) /*0x9e62*/
  {
    n23 = RstAuthChallengeWriteVerifyRead(Source, &dword_35434); /*0x9e62*/
    if ( n23 ) /*0x9e66*/
      goto LABEL_16; /*0x9e66*/
    n23 = RstAuthVariableRead(136, v14, 8u); /*0x9e7b*/
    LOBYTE(v21) = v14[7]; /*0x9e81*/
    HIBYTE(v21) = v14[6]; /*0x9e8c*/
    if ( n23 ) /*0x9e95*/
      goto LABEL_16; /*0x9e95*/
    n23 = 0; /*0x9ea0*/
    if ( v14[3] != -86 ) /*0x9ea8*/
      n23 = 23; /*0x9ea8*/
    if ( n23 ) /*0x9ead*/
      goto LABEL_16; /*0x9ead*/
    if ( v21 == -27648 || v21 == -27392 || v21 == -23296 ) /*0x9ed3*/
      break; /*0x9ed3*/
    n23 = 24; /*0x9ed5*/
LABEL_16:
    if ( (unsigned int)++v8 >= 0x3E8 ) /*0x9f23*/
      goto LABEL_20; /*0x9f23*/
  }
  n23 = RstAuthMd5Init(&v18, Source, &Source_); /*0x9eef*/
  if ( n23 ) /*0x9ef3*/
    goto LABEL_16; /*0x9ef3*/
  n23 = RstAuthChecksumVerify(0, Source, (int *)&v18, FirstString, (char *)&v12); /*0x9f15*/
  if ( n23 ) /*0x9f19*/
    goto LABEL_16; /*0x9f19*/
  v10 = RstVrocModeFromString(FirstString); /*0x9f2f*/
  *a2 = v10; /*0x9f34*/
  if ( a1 ) /*0x9f3b*/
    RstDriverModeSet(v10, a3); /*0x9f42*/
LABEL_20:
  if ( n23 ) /*0x9f49*/
  {
    LODWORD(dword_35434) = -1; /*0x9f51*/
    word_35438 = -1; /*0x9f5e*/
    byte_3543A = -1; /*0x9f6b*/
  }
  (*(void (__fastcall **)(__int64))(qword_58070 + 32))(v6); /*0x9f7b*/
  return n23; /*0x9f94*/
}

// Function: RstAuthLevelToNvramId @ 0x9fa0 (0x34 bytes)
// Index: 260/906

__int64 __fastcall RstAuthLevelToNvramId(char a1, __int64 n6)
{
  int n2; // r11d
  __int64 n16908298; // rax
  unsigned __int16 v4; // [rsp+38h] [rbp+10h] BYREF

  LOBYTE(n6) = a1; /*0x9fa4*/
  n2 = RstHelper_178c(&v4, n6); /*0x9fb0*/
  n16908298 = 16908298; /*0x9fb6*/
  if ( n2 == 2 ) /*0x9fbb*/
    n16908298 = 17104918; /*0x9fc6*/
  n16908298 = n16908298; /*0x9fc9*/
  return n16908298; /*0x9fcf*/
}

// Function: RstNvramResetAndNotify @ 0x9fd4 (0x34 bytes)
// Index: 261/906

__int64 RstNvramResetAndNotify()
{
  RstHelper_1960((unsigned int)n16908298, 0, -258, 257); /*0x9fec*/
  return (*(__int64 (__fastcall **)(__int64))(qword_58070 + 248))(1);
}

// Function: Assert_101 @ 0xa008 (0x5f bytes)
// Index: 262/906

__int64 sub_A008()
{
  int v1; // [rsp+30h] [rbp+8h] BYREF
  unsigned int v2; // [rsp+34h] [rbp+Ch]

  Assert_7((unsigned int)n16908298, (__int64)&v1); /*0xa017*/
  v2 = v2 & 0xFFFF9FFF | 0x2000; /*0xa04d*/
  v1 = v1 & 0x60 | 0xD702481; /*0xa058*/
  return AssertCpuDeadLoop(n16908298, &v1); /*0xa062*/
}

// Function: RstAuthLockAcquire @ 0xa068 (0xa7 bytes)
// Index: 263/906

char RstAuthLockAcquire()
{
  char n2; // bl
  __int16 v1; // di
  int v3; // [rsp+30h] [rbp+8h] BYREF

  RstHelper1960Wrapper(n16908298, 0); /*0xa07a*/
  RstHelper18e0Wrapper(n16908298, &v3); /*0xa08a*/
  (*(void (__fastcall **)(__int64))(qword_58070 + 248))(477); /*0xa09b*/
  RstNvramResetAndNotify(); /*0xa0a1*/
  (*(void (__fastcall **)(__int64))(qword_58070 + 248))(57); /*0xa0b2*/
  n2 = 0; /*0xa0b8*/
  v1 = 0; /*0xa0ba*/
  while ( 1 ) /*0xa0c8*/
  {
    RstNvramReadBit(n16908298, (unsigned int *)&v3); /*0xa0c8*/
    if ( !v3 ) /*0xa0d1*/
      break; /*0xa0d1*/
    (*(void (__fastcall **)(__int64))(qword_58070 + 248))(100); /*0xa0df*/
    if ( (unsigned __int16)++v1 >= 0xAu ) /*0xa0ec*/
    {
      n2 = 2; /*0xa0ee*/
      break; /*0xa0ee*/
    }
  }
  (*(void (__fastcall **)(__int64))(qword_58070 + 248))(417); /*0xa0f0*/
  return n2; /*0xa109*/
}

// Function: RstAuthTpmControl @ 0xa110 (0x8e bytes)
// Index: 264/906

__int64 __fastcall RstAuthTpmControl(char a1)
{
  __int64 n71; // rcx

  if ( a1 ) /*0xa11e*/
  {
    RstHelper1960Wrapper(n16908298, 0); /*0xa120*/
    (*(void (__fastcall **)(__int64))(qword_58070 + 248))(3); /*0xa131*/
    RstHelper1960Wrapper(n16908298, 1); /*0xa142*/
    n71 = 71; /*0xa147*/
  }
  else
  {
    RstHelper1960Wrapper(n16908298, 0); /*0xa14e*/
    (*(void (__fastcall **)(__int64))(qword_58070 + 248))(67); /*0xa15f*/
    RstHelper1960Wrapper(n16908298, 1); /*0xa170*/
    n71 = 7; /*0xa175*/
  }
  (*(void (__fastcall **)(__int64))(qword_58070 + 248))(n71); /*0xa181*/
  return (*(__int64 (__fastcall **)(__int64))(qword_58070 + 248))(7);
}

// Function: RstAuthTpmCheckState @ 0xa1a0 (0x69 bytes)
// Index: 265/906

bool RstAuthTpmCheckState()
{
  int v1; // [rsp+30h] [rbp+8h] BYREF

  RstHelper1960Wrapper((unsigned int)n16908298, 0); /*0xa1ac*/
  RstNvramResetAndNotify(); /*0xa1b1*/
  (*(void (__fastcall **)(__int64))(qword_58070 + 248))(2); /*0xa1c2*/
  RstNvramReadBit((unsigned int)n16908298, &v1); /*0xa1d3*/
  (*(void (__fastcall **)(__int64))(qword_58070 + 248))(36); /*0xa1e4*/
  (*(void (__fastcall **)(__int64))(qword_58070 + 248))(7); /*0xa1f6*/
  return v1 != 0; /*0xa204*/
}

// Function: RstAuthTpmControlAll @ 0xa20c (0x28 bytes)
// Index: 266/906

__int64 __fastcall RstAuthTpmControlAll(char a1)
{
  char v2; // bl
  __int64 result; // rax

  v2 = 1; /*0xa219*/
  do /*0xa227*/
  {
    result = RstAuthTpmControl(a1 & v2); /*0xa220*/
    v2 *= 2; /*0xa225*/
  }
  while ( v2 ); /*0xa227*/
  return result; /*0xa22e*/
}

// Function: RstAuthTpmGetStateMask @ 0xa234 (0x2d bytes)
// Index: 267/906

char RstAuthTpmGetStateMask()
{
  char v0; // bl
  char v1; // di

  v0 = 0; /*0xa23e*/
  v1 = 1; /*0xa240*/
  do /*0xa252*/
  {
    if ( RstAuthTpmCheckState() ) /*0xa243*/
      v0 |= v1; /*0xa24c*/
    v1 *= 2; /*0xa24f*/
  }
  while ( v1 ); /*0xa252*/
  return v0; /*0xa25b*/
}

// Function: RstAuthLevelCommit @ 0xa264 (0x12 bytes)
// Index: 268/906

__int64 __fastcall RstAuthLevelCommit(char a1, __int64 n6)
{
  RstAuthLevelToNvramId(a1, n6); /*0xa268*/
  return Assert_101(); /*0xa26d*/
}

// Function: RstAuthInstallProtocol @ 0xa278 (0x19 bytes)
// Index: 269/906

unsigned __int8 RstAuthInstallProtocol()
{
  Assert_136(Source_16); /*0xa283*/
  return DxeInstall_4(); /*0xa288*/
}

// Function: j_HiiLibReturnZero @ 0xa294 (0x5 bytes)
// Index: 270/906

// attributes: thunk
__int64 __fastcall j_HiiLibReturnZero(__int64 a1)
{
  return HiiLibReturnZero(a1);
}

// Function: RstCallGetData88 @ 0xa29c (0x5 bytes)
// Index: 271/906

// attributes: thunk
__int64 __fastcall RstCallGetData88(__int64 a1)
{
  return RstGetData88(a1);
}

// Function: RstCallGetOffset45 @ 0xa2a4 (0x5 bytes)
// Index: 272/906

// attributes: thunk
__int64 __fastcall RstCallGetOffset45(__int64 a1)
{
  return RstGetOffset45(a1);
}

// Function: RstDeviceFindByGuidInList @ 0xa2ac (0x6f bytes)
// Index: 273/906

_QWORD *__fastcall RstDeviceFindByGuidInList(__int64 a1)
{
  __int64 v2; // rdi
  unsigned int v3; // esi
  unsigned __int8 v4; // bl
  _QWORD *v5; // rax

  v2 = *(_QWORD *)(Source_16 + 216); /*0xa2ca*/
  if ( !v2 ) /*0xa2d4*/
    return 0; /*0xa2d4*/
  v3 = *(unsigned __int8 *)(v2 + 48); /*0xa2d6*/
  v4 = 0; /*0xa2da*/
  if ( !*(_BYTE *)(v2 + 48) ) /*0xa2d6*/
    return 0; /*0xa2fe*/
  while ( 1 ) /*0xa2e6*/
  {
    v5 = (_QWORD *)RstArrayEntryLookup(v2, v4); /*0xa2e6*/
    if ( v5 ) /*0xa2ee*/
    {
      if ( *v5 == a1 ) /*0xa2f3*/
        break; /*0xa2f3*/
    }
    if ( ++v4 >= v3 ) /*0xa2fc*/
      return 0; /*0xa2fc*/
  }
  return v5 + 2; /*0xa30f*/
}

// Function: RstDeviceGetRaidLevel @ 0xa31c (0x97 bytes)
// Index: 274/906

__int16 __fastcall RstDeviceGetRaidLevel(__int64 a1)
{
  __int64 v2; // rdi
  unsigned int v3; // esi
  unsigned __int8 v4; // bl
  _QWORD *v5; // rax
  __int64 v6; // rdx
  __int16 v8; // cx

  v2 = *(_QWORD *)(Source_16 + 216); /*0xa33a*/
  if ( !v2 ) /*0xa344*/
    return -1; /*0xa344*/
  v3 = *(unsigned __int8 *)(v2 + 48); /*0xa346*/
  v4 = 0; /*0xa34a*/
  if ( !*(_BYTE *)(v2 + 48) ) /*0xa346*/
    return -1; /*0xa37b*/
  while ( 1 ) /*0xa356*/
  {
    v5 = (_QWORD *)RstArrayEntryLookup(v2, v4); /*0xa356*/
    if ( v5 ) /*0xa35e*/
    {
      if ( *v5 == a1 ) /*0xa363*/
      {
        v6 = *(_QWORD *)(v5[7] + 40LL); /*0xa369*/
        if ( v6 ) /*0xa370*/
          break; /*0xa370*/
      }
    }
    if ( ++v4 >= v3 ) /*0xa379*/
      return -1; /*0xa379*/
  }
  v8 = *(_WORD *)(v6 + 4); /*0xa395*/
  if ( v8 == 1 && *(_BYTE *)(v5[1] + 20LL) > 3u ) /*0xa3a7*/
    return 10; /*0xa3a9*/
  return v8; /*0xa38f*/
}

// Function: RstDeviceNameExists @ 0xa3b4 (0x83 bytes)
// Index: 275/906

bool __fastcall RstDeviceNameExists(const CHAR16 *Source, unsigned __int8 Length)
{
  bool result; // al
  __int64 v3; // rcx
  __int64 *v4; // rax
  int v5; // ecx
  _BYTE v6[9]; // [rsp+30h] [rbp-28h] BYREF
  __int64 v7; // [rsp+39h] [rbp-1Fh]

  result = 0; /*0xa3b8*/
  memset(v6, 0, sizeof(v6)); /*0xa3ba*/
  v7 = 0; /*0xa3c4*/
  if ( Source && Length && Source_16 ) /*0xa3d9*/
  {
    RstFormatStringCopy((__int64)v6, Source, 0x11u, Length, 0); /*0xa3ed*/
    v3 = *(_QWORD *)(Source_16 + 216); /*0xa3f9*/
    result = v3 && (v4 = RstLinkedListFindByName(v3, v6)) != 0 && (v5 = *(_DWORD *)(v4[6] + 136), (v5 & 0x40) == 0) && (v5 & 2) != 0; /*0xa42c*/
  }
  return result; /*0xa432*/
}

// Function: RstProtocolRelease @ 0xa438 (0x7 bytes)
// Index: 276/906

__int64 __fastcall RstProtocolRelease(__int64 a1)
{
  return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 8LL))(a1);
}

// Function: RstBlockSizeToStatus @ 0xa440 (0x11 bytes)
// Index: 277/906

char __fastcall RstBlockSizeToStatus(unsigned __int16 n5)
{
  char result; // al

  if ( n5 == 1 ) /*0xa444*/
    return 2; /*0xa444*/
  result = 1; /*0xa446*/
  if ( n5 == 10 ) /*0xa44c*/
    return 2; /*0xa44e*/
  return result; /*0xa450*/
}

// Function: RstHelper_a454 @ 0xa454 (0x71 bytes)
// Index: 278/906

_BOOL8 __fastcall RstHelper_a454(void (__fastcall ***a1)(_QWORD, __int16 *), __int64 *a2)
{
  int v3; // eax
  __int16 v5; // [rsp+20h] [rbp-28h] BYREF
  __int64 v6; // [rsp+28h] [rbp-20h]
  int v7; // [rsp+30h] [rbp-18h]
  int v8; // [rsp+34h] [rbp-14h]
  char v9; // [rsp+38h] [rbp-10h]

  v6 = *a2; /*0xa46c*/
  v3 = *((_DWORD *)a2 + 3); /*0xa478*/
  v9 = *((_BYTE *)a2 + 16) != 0 ? 42 : 40;
  v8 = v3; /*0xa48a*/
  v7 = *((_DWORD *)a2 + 2) * HiiLibReturnZero((__int64)a1); /*0xa49f*/
  (**a1)(a1, &v5); /*0xa4a6*/
  return v5 != 0; /*0xa4bf*/
}

// Function: RstCallGetUint108 @ 0xa4c8 (0x5 bytes)
// Index: 279/906

// attributes: thunk
__int64 __fastcall RstCallGetUint108(__int64 a1)
{
  return RstGetUint108(a1);
}

// Function: RstDeviceFindIndex @ 0xa4d0 (0x74 bytes)
// Index: 280/906

__int64 __fastcall RstDeviceFindIndex(__int64 a1)
{
  unsigned __int8 n0x18; // bl
  __int64 v3; // rsi
  unsigned int n0x19; // edi

  n0x18 = 0; /*0xa4eb*/
  if ( !Source_16 ) /*0xa4f3*/
    return 0xFFFFFFFFLL; /*0xa4f3*/
  v3 = *(_QWORD *)(Source_16 + 216); /*0xa4f5*/
  if ( !v3 ) /*0xa4ff*/
    return 0xFFFFFFFFLL; /*0xa4ff*/
  n0x19 = *(unsigned __int8 *)(v3 + 48); /*0xa501*/
  if ( n0x19 > 0x19 || !*(_BYTE *)(v3 + 48) ) /*0xa501*/
    return 0xFFFFFFFFLL; /*0xa527*/
  while ( *(_QWORD *)RstArrayEntryLookup(v3, n0x18) != a1 ) /*0xa51c*/
  {
    if ( ++n0x18 >= n0x19 ) /*0xa525*/
      return 0xFFFFFFFFLL; /*0xa525*/
  }
  return n0x18; /*0xa539*/
}

// Function: RstDeviceCtxInit @ 0xa544 (0x13d bytes)
// Index: 281/906

__int64 __fastcall RstDeviceCtxInit(__int64 i, _QWORD *NewContext, __int64 a3, __int16 n36220)
{
  int v8; // eax
  int v9; // r11d
  unsigned __int64 v10; // rcx
  __int64 n20; // rbx
  _BYTE *v12; // r11
  char *v13; // rcx
  char v14; // al
  __int64 result; // rax

  MemZero((_BYTE *)i, 0, 128); /*0xa572*/
  v8 = (unsigned __int16)word_35440; /*0xa577*/
  v9 = *(_DWORD *)(a3 + 8); /*0xa57e*/
  *(_DWORD *)(i + 8) = (unsigned __int16)word_35440; /*0xa582*/
  *(_DWORD *)(i + 24) = v9; /*0xa588*/
  *(_WORD *)(i + 16) = n36220; /*0xa58c*/
  *(_DWORD *)(i + 12) = v8; /*0xa590*/
  v10 = (unsigned __int64)*(unsigned __int16 *)(a3 + 16) << 32; /*0xa59e*/
  word_35440 = v8 + 1; /*0xa5a6*/
  *(_QWORD *)i = *(unsigned int *)(a3 + 18) + v10; /*0xa5b3*/
  if ( (*(_BYTE *)(a3 + 147) & 1) != 0 ) /*0xa5bd*/
    *(_DWORD *)(i + 20) |= 3u; /*0xa5bf*/
  if ( (*(_BYTE *)(a3 + 147) & 2) != 0 ) /*0xa5ca*/
    *(_DWORD *)(i + 20) |= 4u; /*0xa5cc*/
  if ( (unsigned __int8)RstProtocolCallEntry6(NewContext) ) /*0xa5d3*/
    *(_DWORD *)(i + 20) |= 8u; /*0xa5df*/
  if ( *(_WORD *)(a3 + 26) == 1 ) /*0xa5e8*/
    *(_DWORD *)(i + 20) |= 0x10u; /*0xa5ea*/
  n20 = 20; /*0xa5ee*/
  RstFormatStringCopy(i + 69, (const CHAR16 *)(a3 + 28), 0x11u, 0x14u, 0); /*0xa606*/
  v12 = (_BYTE *)(i + 29); /*0xa60b*/
  v13 = (char *)(a3 + 49); /*0xa60f*/
  do /*0xa62a*/
  {
    *(v12 - 1) = *(v13 - 1); /*0xa616*/
    v14 = *v13; /*0xa61a*/
    v13 += 2; /*0xa61c*/
    *v12 = v14; /*0xa620*/
    v12 += 2; /*0xa623*/
    --n20; /*0xa627*/
  }
  while ( n20 ); /*0xa62a*/
  RstStringTrim((_BYTE *)(i + 28)); /*0xa630*/
  *(_DWORD *)(i + 90) = 0; /*0xa63a*/
  *(_DWORD *)(i + 86) = 0; /*0xa63d*/
  *(_WORD *)(i + 100) = *(_WORD *)(a3 + 26); /*0xa649*/
  *(_WORD *)(i + 102) = *(_WORD *)(a3 + 149); /*0xa654*/
  *(_QWORD *)(i + 104) = *(_QWORD *)(a3 + 99); /*0xa65c*/
  *(_QWORD *)(i + 112) = *(_QWORD *)(a3 + 107); /*0xa664*/
  result = *(_QWORD *)(a3 + 115); /*0xa668*/
  *(_QWORD *)(i + 120) = result; /*0xa671*/
  return result; /*0xa67a*/
}

// Function: RstProtocolRevision @ 0xa684 (0x7 bytes)
// Index: 282/906

__int64 __fastcall RstProtocolRevision(__int64 a1)
{
  return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 16LL))(a1);
}

// Function: RstDeviceRaidLevelBitsToIndex @ 0xa68c (0x1c bytes)
// Index: 283/906

__int64 __fastcall RstDeviceRaidLevelBitsToIndex(__int64 a1)
{
  unsigned int v1; // eax
  unsigned __int16 v2; // cx

  v1 = *(_DWORD *)(a1 + 108); /*0xa68c*/
  v2 = 0; /*0xa691*/
  while ( v1 && (v1 & 1) == 0 ) /*0xa698*/
  {
    v1 >>= 1; /*0xa69a*/
    ++v2; /*0xa69c*/
  }
  return RstDeviceGetRaidLevelByIndex(v2);
}

// Function: RstDiskArrayInit @ 0xa6a8 (0xa7 bytes)
// Index: 284/906

__int64 __fastcall RstDiskArrayInit(__int64 a1)
{
  __int64 v2; // rdi
  int i; // esi
  __int64 v4; // rdi
  __int64 v5; // rax

  v2 = a1 + 2984; /*0xa6bf*/
  for ( i = 143; i >= 0; --i ) /*0xa6c6*/
  {
    RstDiskInit(v2); /*0xa6ce*/
    v2 += 208; /*0xa6d3*/
  }
  v4 = 0; /*0xa6e6*/
  *(_WORD *)(a1 + 32936) = 0; /*0xa6e8*/
  RstRaidOpStateInit(a1 + 32952); /*0xa6ef*/
  RstListNodeInit(a1 + 33680); /*0xa6fb*/
  RstConfigBlockZero(a1 + 34096); /*0xa707*/
  RstConfigBlockZero(a1 + 34176); /*0xa713*/
  v5 = RstMemPoolAlloc(24); /*0xa71b*/
  if ( v5 ) /*0xa723*/
    v4 = RstInitArray(v5); /*0xa72d*/
  *(_QWORD *)(a1 + 200) = v4; /*0xa73a*/
  return a1; /*0xa749*/
}

// Function: RstDriverContextInitialize @ 0xa750 (0x107 bytes)
// Index: 285/906

char RstDriverContextInitialize()
{
  _BYTE *i; // rcx
  __int64 v1; // rax
  __int64 v2; // rax
  __int64 Source; // rax
  char v4; // bl
  unsigned int p_n24682; // [rsp+30h] [rbp+8h] BYREF
  unsigned int v7; // [rsp+38h] [rbp+10h] BYREF

  i = i; /*0xa75f*/
  word_35440 = 0; /*0xa76d*/
  if ( i /*0xa7a3*/
    || (v1 = (*(__int64 (__fastcall **)(__int64, char *, _BYTE **))(qword_58070 + 64))(4, (char *)&loc_1F918 + 1, &i),
        v1 >= 0)
    && (i = i) != 0 )
  {
    MemZero(i, 0, (__int64)&loc_1F918 + 1); /*0xa7ae*/
    i_1 = (__int64)i; /*0xa7bf*/
    dword_35460 = 0; /*0xa7c9*/
    i_2 = (__int64)&i[(_QWORD)&loc_1F918 + 1]; /*0xa7cf*/
    v2 = RstMemPoolAlloc(34264); /*0xa7d6*/
    if ( v2 ) /*0xa7de*/
      Source = RstDiskArrayInit(v2); /*0xa7e3*/
    else
      Source = 0; /*0xa7ea*/
    Source_16 = Source; /*0xa7f0*/
    RstDriverContextInit(Source); /*0xa7f7*/
    v7 = 0; /*0xa801*/
    RstCpuid(&p_n24682); /*0xa808*/
    p_n24682 >>= 4; /*0xa829*/
    v4 = p_n24682 != 24682; /*0xa82e*/
    LOBYTE(v1) = RstAuthVerifySignature(1, &v7, p_n24682 != 24682); /*0xa834*/
    if ( (_BYTE)v1 ) /*0xa83c*/
      LOBYTE(v1) = RstDriverModeSet(0, v4); /*0xa842*/
  }
  return v1; /*0xa851*/
}

// Function: Assert_137 @ 0xa858 (0x3d bytes)
// Index: 286/906

char Assert_137_QWORD *NewContext, __int64 a2, __int16 n36220)
{
  _BYTE i[136]; // [rsp+20h] [rbp-88h] BYREF

  RstDeviceCtxInit((__int64)i, NewContext, a2, n36220); /*0xa873*/
  return Assert_82(Source_16, NewContext, i); /*0xa88c*/
}

// Function: RstDeviceGetFirstWord @ 0xa898 (0x12 bytes)
// Index: 287/906

__int16 RstDeviceGetFirstWord()
{
  return **(_WORD **)(Source_16 + 216); /*0xa8a9*/
}

// Function: RstDeviceGetSlotCapacity @ 0xa8ac (0x16 bytes)
// Index: 288/906

__int16 RstDeviceGetSlotCapacity()
{
  return *(_WORD *)(*(_QWORD *)(Source_16 + 216) + 256LL); /*0xa8c1*/
}

// Function: RstDeviceGetByIndex @ 0xa8c4 (0x35 bytes)
// Index: 289/906

__int64 __fastcall RstDeviceGetByIndex(unsigned __int16 a1)
{
  __int64 v1; // rdx
  __int64 v2; // rcx
  __int64 v3; // rax

  v1 = a1; /*0xa8cf*/
  if ( Source_16 && (v2 = *(_QWORD *)(Source_16 + 216)) != 0 && (v3 = RstArrayEntryLookup(v2, v1)) != 0 ) /*0xa8eb*/
    return *(_QWORD *)v3; /*0xa8ed*/
  else
    return 0; /*0xa8f2*/
}

// Function: Assert_24 @ 0xa8fc (0x15e bytes)
// Index: 290/906

__int64 __fastcall Assert_24(unsigned __int8 n24)
{
  __int64 v2; // rcx
  _QWORD *v3; // rax
  __int64 v4; // rdi
  __int64 v6; // rsi
  int v7; // ecx
  __int64 v8; // rax
  __int64 v9; // rax
  __int64 v10; // rcx
  char n24_1; // al
  _BYTE *Source; // rsi
  __int64 v13; // rdx

  if ( !Source_16 ) /*0xa917*/
    return 1; /*0xa917*/
  v2 = *(_QWORD *)(Source_16 + 216); /*0xa91d*/
  if ( !v2 ) /*0xa927*/
    return 1; /*0xaa45*/
  v3 = RstLinkedListGetNth((_QWORD **)(v2 + 16), n24); /*0xa934*/
  v4 = (__int64)v3; /*0xa939*/
  if ( !v3 ) /*0xa93f*/
    return 15; /*0xa93f*/
  v6 = v3[6]; /*0xa94b*/
  if ( !v6 ) /*0xa952*/
    return 15; /*0xa941*/
  v7 = *(_DWORD *)(v6 + 136); /*0xa954*/
  if ( (v7 & 0x10) != 0 && (v7 & 0x40) == 0 ) /*0xa971*/
  {
    v8 = v3[5]; /*0xa977*/
    if ( v8 ) /*0xa97e*/
    {
      v9 = *(_QWORD *)(v8 + 232); /*0xa980*/
      if ( v9 ) /*0xa98a*/
      {
        v10 = *(_QWORD *)(*(_QWORD *)(v9 + 56) + 40LL); /*0xa990*/
        if ( v10 ) /*0xa997*/
        {
          if ( *(_WORD *)(v10 + 4) != 1 ) /*0xa99d*/
            goto LABEL_15; /*0xa99d*/
          n24_1 = 24; /*0xa99f*/
          if ( *(_BYTE *)(v10 + 6) <= 0x18u ) /*0xa9a5*/
            n24_1 = *(_BYTE *)(v10 + 6); /*0xa9a7*/
          if ( n24_1 != 2 ) /*0xa9ad*/
LABEL_15:
            Assert_28(*(_QWORD *)(Source_16 + 216), 0, v6); /*0xa9c2*/
        }
      }
    }
    if ( RstDeviceIsActive(v4) && Source_16 != -224 ) /*0xa9e1*/
    {
      Source = (_BYTE *)RstBufferPoolFindEntry(Source_16 + 224, v6); /*0xa9eb*/
      if ( RstDebugEnabled() ) /*0xa9ee*/
      {
        if ( !Source ) /*0xa9fa*/
          DebugAssert("IsmApi.cpp", 0x10Cu, "pJd"); /*0xaa0f*/
      }
      Assert_93(Source); /*0xaa17*/
    }
    RstDeviceClearFlags(*(_QWORD *)(v4 + 48), -1); /*0xaa23*/
    RstDeviceSetFlags(*(_QWORD *)(v4 + 48), 0x110u); /*0xaa31*/
    LOBYTE(v13) = 1; /*0xaa3a*/
    (***(void (__fastcall ****)(_QWORD, __int64))(v4 + 64))(*(_QWORD *)(v4 + 64), v13); /*0xaa3f*/
  }
  return 0; /*0xaa54*/
}

// Function: RstDeviceSetPropertyByIndex @ 0xaa5c (0x5b bytes)
// Index: 291/906

__int64 __fastcall RstDeviceSetPropertyByIndex(__int16 n0x90, __int16 a2, char n3)
{
  __int64 v7; // rcx
  _QWORD *v8; // rax

  if ( !Source_16 ) /*0xaa79*/
    return 1; /*0xaa79*/
  v7 = *(_QWORD *)(Source_16 + 216); /*0xaa82*/
  if ( !v7 ) /*0xaa8c*/
    return 1; /*0xaa7b*/
  v8 = RstLinkedListGetNth((_QWORD **)(v7 + 16), n0x90); /*0xaa92*/
  if ( !v8 ) /*0xaa9a*/
    return 15; /*0xaa9c*/
  *((_WORD *)v8 + 28) = a2; /*0xaaa3*/
  *((_BYTE *)v8 + 58) = n3; /*0xaaa7*/
  return 0; /*0xaab1*/
}

// Function: RstDeviceCountOnline @ 0xaab8 (0x81 bytes)
// Index: 292/906

char RstDeviceCountOnline()
{
  unsigned __int16 *v0; // rsi
  char v1; // bl
  unsigned __int16 i; // di
  __int64 v3; // rax

  v0 = *(unsigned __int16 **)(Source_16 + 216); /*0xaadb*/
  v1 = 0; /*0xaae2*/
  for ( i = 0; i < *v0; ++i ) /*0xaae9*/
  {
    v3 = RstLinkedListGetNth(v0 + 8, i); /*0xaaf6*/
    if ( v3 && (*(_DWORD *)(*(_QWORD *)(v3 + 48) + 136LL) & 0x10) != 0 ) /*0xab10*/
      ++v1; /*0xab12*/
  }
  return v1; /*0xab32*/
}

// Function: Assert_121 @ 0xab3c (0x10a bytes)
// Index: 293/906

__int64 __fastcall Assert_121(__int16 a1, __int64 i)
{
  _QWORD *v3; // rax
  __int64 v4; // rsi
  unsigned __int8 n2_2; // al
  unsigned __int8 n2; // di
  unsigned __int8 n2_1; // r12
  unsigned __int8 n2_3; // bp
  int n2_4; // ecx
  __int64 v10; // rcx

  if ( !Source_16 ) /*0xab67*/
    return 19; /*0xab67*/
  v3 = RstLinkedListSkipN(*(_QWORD *)(Source_16 + 216), a1); /*0xab70*/
  v4 = (__int64)v3; /*0xab75*/
  if ( !v3 || !i ) /*0xab80*/
    return 19; /*0xab80*/
  n2_2 = *((_BYTE *)v3 + 224); /*0xab82*/
  n2 = 2; /*0xab89*/
  n2_1 = 2; /*0xab91*/
  if ( n2_2 < 2u ) /*0xab94*/
    n2_1 = n2_2; /*0xab94*/
  n2_3 = 0; /*0xab98*/
  if ( !n2_1 ) /*0xab9e*/
    return 19; /*0xabd3*/
  while ( 1 ) /*0xaba4*/
  {
    n2_4 = 1; /*0xaba4*/
    if ( n2_3 < 2u ) /*0xabac*/
      n2_4 = n2_3; /*0xabac*/
    v10 = *(_QWORD *)(v4 + 8LL * n2_4 + 232); /*0xabb2*/
    if ( v10 ) /*0xabbd*/
    {
      if ( RstDeviceMemberIsNvme(v10) ) /*0xabc2*/
        break; /*0xabc2*/
    }
    if ( ++n2_3 >= n2_1 ) /*0xabd1*/
      return 19; /*0xabd1*/
  }
  MemZero((_BYTE *)i, 0, 32); /*0xabfe*/
  *(_DWORD *)i = 32; /*0xac06*/
  *(_DWORD *)(i + 16) = Assert_110(v4); /*0xac0d*/
  *(_DWORD *)(i + 8) = *(unsigned __int8 *)(v4 + 20); /*0xac14*/
  if ( *(_BYTE *)(v4 + 224) < 2u ) /*0xac20*/
    n2 = *(_BYTE *)(v4 + 224); /*0xac22*/
  *(_DWORD *)(i + 12) = n2; /*0xac2c*/
  *(_DWORD *)(i + 20) = RstCfgCheckVolumeType(v4); /*0xac37*/
  *(_DWORD *)(i + 24) = Assert_109(v4); /*0xac3f*/
  return 0; /*0xabe7*/
}

// Function: RstVolGetDeviceStatus @ 0xac48 (0x3a bytes)
// Index: 294/906

char __fastcall RstVolGetDeviceStatus(unsigned __int16 a1)
{
  __int64 v1; // rdx
  __int64 v3; // rcx
  __int64 v4; // rax

  v1 = a1; /*0xac53*/
  if ( Source_16 && (v3 = *(_QWORD *)(Source_16 + 216)) != 0 && (v4 = RstLinkedListSkipN(v3, v1)) != 0 ) /*0xac73*/
    return RstRaidVolumeTypeValid(v4); /*0xac78*/
  else
    return 0; /*0xac5b*/
}

// Function: RstDeviceGetLevel @ 0xac84 (0x1a6 bytes)
// Index: 295/906

__int64 __fastcall RstDeviceGetLevel(unsigned __int8 n0x18, unsigned __int8 n24)
{
  __int64 v4; // r12
  unsigned __int16 n0x18_1; // r13
  __int64 v6; // rax
  __int64 v7; // r11
  __int64 v8; // rdi
  int n24_1; // eax
  __int64 v10; // rsi
  __int64 v11; // rax
  __int64 v12; // rcx
  __int64 v13; // rbx
  int n23; // eax
  __int64 v15; // rbp
  __int64 v16; // rax
  __int64 v17; // rcx
  __int64 v18; // rax
  __int64 v19; // rcx
  __int64 v20; // rax
  __int64 v21; // rdx
  __int64 v22; // rcx
  _DWORD *v23; // rcx
  _DWORD *v24; // rcx
  void (__fastcall ***v25)(_QWORD, __int64); // rcx

  if ( !Source_16 ) /*0xacab*/
    return 1; /*0xacab*/
  v4 = *(_QWORD *)(Source_16 + 216); /*0xacb7*/
  if ( !v4 ) /*0xacc1*/
    return 1; /*0xacc1*/
  n0x18_1 = n0x18; /*0xacc3*/
  v6 = RstDeviceContextGetNth(Source_16, n0x18); /*0xaccb*/
  v7 = v6; /*0xacd0*/
  if ( !v6 ) /*0xacd6*/
    return 14; /*0xacdc*/
  v8 = *(_QWORD *)(v6 + 144); /*0xace1*/
  if ( v8 ) /*0xaceb*/
  {
    n24_1 = 24; /*0xacf1*/
    if ( n24 < 0x19u ) /*0xacfe*/
      n24_1 = n24; /*0xacfe*/
    v10 = *(_QWORD *)(v8 + 8LL * n24_1 + 24); /*0xad03*/
    if ( v10 ) /*0xad0b*/
    {
      v11 = *(_QWORD *)(v7 + 160); /*0xad11*/
      if ( v11 ) /*0xad1b*/
      {
        v12 = *(_QWORD *)(v11 + 16); /*0xad21*/
        v13 = *(_QWORD *)(v11 + 24); /*0xad25*/
        if ( v12 ) /*0xad2c*/
        {
          if ( v13 ) /*0xad35*/
          {
            *(_DWORD *)(v12 + 8) = 0; /*0xad3b*/
            n23 = 23; /*0xad43*/
            if ( n24 < 0x18u ) /*0xad48*/
              n23 = n24; /*0xad48*/
            v15 = 2 * (n23 + 7LL); /*0xad52*/
            v16 = v12 + 16 * (n23 + 7LL); /*0xad55*/
            if ( v16 ) /*0xad5c*/
            {
              if ( *(_BYTE *)(v16 + 8) ) /*0xad5e*/
              {
                *(_BYTE *)(v16 + 8) = 0; /*0xad64*/
                v17 = *(_QWORD *)(v10 + 48); /*0xad68*/
                if ( (*(_DWORD *)(v17 + 136) & 0x80) != 0 ) /*0xad77*/
                  RstDeviceClearFlags(v17, 132); /*0xad7e*/
              }
            }
            *(_DWORD *)(v13 + 8) = 0; /*0xad83*/
            v18 = v13 + 8 * v15; /*0xad87*/
            if ( v18 ) /*0xad8e*/
            {
              if ( *(_BYTE *)(v18 + 8) ) /*0xad90*/
              {
                *(_BYTE *)(v18 + 8) = 0; /*0xad96*/
                v19 = *(_QWORD *)(v10 + 48); /*0xad9a*/
                if ( (*(_DWORD *)(v19 + 136) & 0x80) != 0 ) /*0xada9*/
                  RstDeviceClearFlags(v19, 132); /*0xadb0*/
              }
            }
            v20 = RstArrayEntryLookup(v4, n0x18_1); /*0xadbc*/
            v22 = *(_QWORD *)(v20 + 56); /*0xadc1*/
            if ( v22 ) /*0xadc8*/
            {
              v23 = *(_DWORD **)(v22 + 48); /*0xadca*/
              if ( v23 ) /*0xadd1*/
                *v23 = 0; /*0xadd3*/
              v24 = *(_DWORD **)(*(_QWORD *)(v20 + 56) + 40LL); /*0xadda*/
              if ( v24 ) /*0xade1*/
                *v24 = 0; /*0xade3*/
            }
            v25 = *(void (__fastcall ****)(_QWORD, __int64))(v8 + 248); /*0xade6*/
            if ( v25 || (v25 = *(void (__fastcall ****)(_QWORD, __int64))(v10 + 64)) != 0 ) /*0xae04*/
            {
              LOBYTE(v21) = 1; /*0xadf5*/
              (**v25)(v25, v21); /*0xadf7*/
              return 0; /*0xadfb*/
            }
            return 1; /*0xacb2*/
          }
        }
      }
    }
  }
  return 15; /*0xae20*/
}

// Function: RstDeviceCheckAllReady @ 0xae2c (0x91 bytes)
// Index: 296/906

bool RstDeviceCheckAllReady()
{
  unsigned __int16 *v0; // rsi
  char v1; // bp
  char v2; // bl
  unsigned __int16 i; // di
  __int64 v4; // rax
  int v5; // ecx

  v0 = *(unsigned __int16 **)(Source_16 + 216); /*0xae4e*/
  v1 = 0; /*0xae55*/
  v2 = 0; /*0xae58*/
  for ( i = 0; i < *v0; ++i ) /*0xae5f*/
  {
    v4 = RstLinkedListGetNth(v0 + 8, i); /*0xae6c*/
    if ( v4 ) /*0xae74*/
    {
      v5 = *(_DWORD *)(*(_QWORD *)(v4 + 48) + 136LL); /*0xae7a*/
      if ( (v5 & 0x10) != 0 ) /*0xae87*/
      {
        ++v1; /*0xae8c*/
        if ( (v5 & 0x40) != 0 ) /*0xae92*/
          ++v2; /*0xae94*/
      }
    }
  }
  return v2 == v1; /*0xaeb3*/
}

// Function: RstDeviceClear @ 0xaec0 (0x82 bytes)
// Index: 297/906

__int64 __fastcall RstDeviceClear(__int16 a1)
{
  _QWORD *v2; // rbx
  __int64 v3; // rcx
  int n132; // edx
  __int64 v5; // rcx
  __int64 v6; // rdx
  void (__fastcall ***v7)(_QWORD, __int64); // rcx

  if ( !Source_16 ) /*0xaece*/
    return 15; /*0xaece*/
  v2 = RstLinkedListGetNth((_QWORD **)&word_10, a1); /*0xaee4*/
  if ( !v2 || !*(_QWORD *)(Source_16 + 216) ) /*0xaef3*/
    return 15; /*0xaed0*/
  v3 = v2[6]; /*0xaefd*/
  n132 = 132; /*0xaf01*/
  if ( (*(_DWORD *)(v3 + 136) & 0x80) == 0 ) /*0xaf11*/
    n132 = 4; /*0xaf13*/
  RstDeviceClearFlags(v3, n132); /*0xaf18*/
  v5 = v2[5]; /*0xaf1d*/
  LOBYTE(v6) = 1; /*0xaf21*/
  if ( v5 ) /*0xaf26*/
    v7 = *(void (__fastcall ****)(_QWORD, __int64))(v5 + 248); /*0xaf28*/
  else
    v7 = (void (__fastcall ***)(_QWORD, __int64))v2[8]; /*0xaf31*/
  (**v7)(v7, v6); /*0xaf38*/
  return 0; /*0xaf3c*/
}

// Function: RstDeviceClearAndRelease @ 0xaf44 (0x26 bytes)
// Index: 298/906

__int64 __fastcall RstDeviceClearAndRelease(unsigned __int16 a1)
{
  __int64 v1; // rax

  v1 = RstDeviceGetByIndex(a1); /*0xaf48*/
  if ( !v1 ) /*0xaf50*/
    return 14; /*0xaf52*/
  RstDeviceSetNotificationFlag(v1, 0); /*0xaf5e*/
  return 0; /*0xaf65*/
}

// Function: RstRaidOpFindFailedDisk @ 0xaf6c (0x4a bytes)
// Index: 299/906

__int64 __fastcall RstRaidOpFindFailedDisk(__int64 a1, char *a2)
{
  __int64 v4; // rax
  __int64 v5; // rax
  __int64 v6; // rcx

  if ( !a2 ) /*0xaf78*/
    return 1; /*0xaf78*/
  v4 = RstDeviceGetByIndex(); /*0xaf81*/
  if ( !v4 ) /*0xaf89*/
    return 14; /*0xaf89*/
  v5 = *(_QWORD *)(v4 + 160); /*0xaf92*/
  if ( !v5 ) /*0xaf9c*/
    return 14; /*0xaf8b*/
  v6 = *(_QWORD *)(v5 + 16); /*0xaf9e*/
  if ( !v6 ) /*0xafa5*/
    return 1; /*0xaf7f*/
  *a2 = RstRaidOpFindFailedDisk(v6); /*0xafac*/
  return 0; /*0xafb0*/
}

// Function: Assert_129 @ 0xafb8 (0x5c bytes)
// Index: 300/906

__int64 __fastcall Assert_129(__int16 j)
{
  __int64 v1; // rbx
  unsigned __int8 j_1; // al
  __int64 v3; // rax

  if ( !Source_16 ) /*0xafcb*/
    return 1; /*0xafcb*/
  v1 = *(_QWORD *)(Source_16 + 216); /*0xafcd*/
  if ( !v1 ) /*0xafd7*/
    return 1; /*0xb009*/
  j_1 = *(_BYTE *)(v1 + 48); /*0xafd9*/
  if ( j_1 && j < j_1 && (v3 = RstArrayEntryLookup(v1, j)) != 0 ) /*0xaff3*/
    return Assert_87(v1, v3); /*0xaffb*/
  else
    return 14; /*0xb002*/
}

// Function: RstDeviceStartOp @ 0xb014 (0xad bytes)
// Index: 301/906

__int64 __fastcall RstDeviceStartOp(__int64 n2)
{
  unsigned __int8 n2_1; // dl
  __int64 v2; // rcx
  _QWORD *v3; // rax
  _QWORD *v4; // rbx
  __int64 v5; // rax
  __int64 v6; // rdx

  n2_1 = n2; /*0xb021*/
  if ( !Source_16 ) /*0xb026*/
    return 1; /*0xb026*/
  v2 = *(_QWORD *)(Source_16 + 216); /*0xb02c*/
  if ( !v2 ) /*0xb036*/
    return 1; /*0xb0b6*/
  v3 = RstLinkedListGetNth((_QWORD **)(v2 + 16), n2_1); /*0xb03f*/
  v4 = v3; /*0xb044*/
  if ( !v3 ) /*0xb04a*/
    return 18; /*0xb04a*/
  if ( !v3[8] ) /*0xb04c*/
    return 18; /*0xb04c*/
  if ( (*(_DWORD *)(v3[6] + 136LL) & 0x40) == 0 ) /*0xb063*/
    return 18; /*0xb063*/
  if ( RstDeviceCheckReservedSuffix((__int64)v3) ) /*0xb068*/
    return 18; /*0xb068*/
  v5 = v4[6]; /*0xb071*/
  if ( (*(_BYTE *)(v5 + 139) & 1) != 0 ) /*0xb07c*/
    return 18; /*0xb0af*/
  RstDeviceSetFlags(v4[6], *(_DWORD *)(v5 + 136) | 0x121); /*0xb08d*/
  RstDeviceClearFlags(v4[6], 64); /*0xb09b*/
  LOBYTE(v6) = 1; /*0xb0a4*/
  (**(void (__fastcall ***)(_QWORD, __int64))v4[8])(v4[8], v6); /*0xb0a9*/
  return 0; /*0xb0bb*/
}

// Function: RstDeviceGetStatusByte @ 0xb0c4 (0x12 bytes)
// Index: 302/906

char RstDeviceGetStatusByte()
{
  return *(_BYTE *)(*(_QWORD *)(Source_16 + 216) + 48LL); /*0xb0d5*/
}

// Function: RstDeviceGetRaidLevelFromIndex @ 0xb0d8 (0x48 bytes)
// Index: 303/906

__int16 __fastcall RstDeviceGetRaidLevelFromIndex(unsigned __int16 a1)
{
  __int64 v3; // rcx
  __int64 v4; // rax

  if ( Source_16 && (v3 = *(_QWORD *)(Source_16 + 216)) != 0 && (v4 = RstLinkedListSkipN(v3, a1)) != 0 ) /*0xb10d*/
    return (unsigned __int8)RstVolGetStripeSize(v4); /*0xb117*/
  else
    return 0; /*0xb0f0*/
}

// Function: RstVolGetOnlineMemberMask @ 0xb120 (0xa3 bytes)
// Index: 304/906

__int64 RstVolGetOnlineMemberMask()
{
  __int64 v0; // rcx
  __int64 v1; // rdi
  unsigned __int16 v2; // bx
  unsigned __int16 v3; // si
  __int64 v4; // rax

  v0 = Source_16; /*0xb139*/
  v1 = 0; /*0xb14a*/
  v2 = 0; /*0xb14d*/
  v3 = **(_WORD **)(Source_16 + 216); /*0xb151*/
  if ( v3 ) /*0xb158*/
  {
    while ( 1 ) /*0xb16d*/
    {
      v4 = RstLinkedListGetNth(*(_QWORD *)(v0 + 216) + 16LL, v2); /*0xb16d*/
      if ( v4 && (*(_DWORD *)(*(_QWORD *)(v4 + 48) + 136LL) & 0x10) != 0 ) /*0xb187*/
        v1 |= 1LL << v2; /*0xb191*/
      if ( ++v2 >= v3 ) /*0xb19a*/
        break; /*0xb19a*/
      v0 = Source_16; /*0xb19c*/
    }
  }
  return v1; /*0xb1bc*/
}

// Function: RstVolFindDevicesByProperty @ 0xb1c4 (0xb7 bytes)
// Index: 305/906

__int64 __fastcall RstVolFindDevicesByProperty(unsigned int a1)
{
  __int64 v2; // rcx
  __int64 v3; // rdi
  unsigned __int16 v4; // bx
  unsigned __int16 v5; // si
  __int64 v6; // rax
  __int64 v7; // rcx

  v2 = Source_16; /*0xb1e1*/
  v3 = 0; /*0xb1ef*/
  v4 = 0; /*0xb1f2*/
  v5 = **(_WORD **)(Source_16 + 216); /*0xb1f6*/
  if ( v5 ) /*0xb1fd*/
  {
    while ( 1 ) /*0xb211*/
    {
      v6 = RstLinkedListGetNth(*(_QWORD *)(v2 + 216) + 16LL, v4); /*0xb211*/
      if ( v6 ) /*0xb21c*/
      {
        v7 = *(_QWORD *)(v6 + 48); /*0xb21e*/
        if ( (*(_DWORD *)(v7 + 136) & 0x10) != 0 && !*(_QWORD *)(v6 + 40) && (unsigned __int8)RstHelper_02b4(v7, a1) ) /*0xb238*/
          v3 |= 1LL << v4; /*0xb24a*/
      }
      if ( ++v4 >= v5 ) /*0xb254*/
        break; /*0xb254*/
      v2 = Source_16; /*0xb256*/
    }
  }
  return v3; /*0xb271*/
}

// Function: RstVolFindDevicesByLevel @ 0xb27c (0xb8 bytes)
// Index: 306/906

__int64 __fastcall RstVolFindDevicesByLevel(__int16 a1)
{
  __int64 Source; // rcx
  unsigned int v4; // edi
  __int16 v5; // bx
  unsigned __int16 v6; // si
  _QWORD *v7; // rax
  _QWORD *v8; // rcx
  __int64 i_; // [rsp+20h] [rbp-38h] BYREF

  if ( (unsigned int)Assert_121(a1, (__int64)&i_) ) /*0xb29e*/
    return 0; /*0xb2ab*/
  Source = Source_16; /*0xb2af*/
  v4 = 0; /*0xb2b6*/
  v5 = 0; /*0xb2b9*/
  v6 = **(_WORD **)(Source_16 + 216); /*0xb2c4*/
  if ( v6 ) /*0xb2cb*/
  {
    while ( 1 ) /*0xb2e1*/
    {
      v7 = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source + 216) + 16LL), v5); /*0xb2e1*/
      if ( v7 ) /*0xb2e9*/
      {
        v8 = (_QWORD *)v7[5]; /*0xb2eb*/
        if ( v8 ) /*0xb2f2*/
        {
          if ( RstLinkedListCountToNode(v8) == a1 ) /*0xb2fc*/
            v4 |= 1 << v5; /*0xb305*/
        }
      }
      if ( (unsigned __int16)++v5 >= v6 ) /*0xb30e*/
        break; /*0xb30e*/
      Source = Source_16; /*0xb310*/
    }
  }
  return v4; /*0xb32a*/
}

// Function: RstDeviceBuildAllBitmap @ 0xb334 (0x6b bytes)
// Index: 307/906

__int64 RstDeviceBuildAllBitmap()
{
  __int64 v0; // rcx
  unsigned int v1; // edi
  unsigned __int8 v2; // bl
  unsigned __int8 v3; // si

  v0 = Source_16; /*0xb343*/
  v1 = 0; /*0xb34a*/
  v2 = 0; /*0xb34c*/
  v3 = *(_BYTE *)(*(_QWORD *)(Source_16 + 216) + 48LL); /*0xb355*/
  if ( v3 ) /*0xb35c*/
  {
    while ( 1 ) /*0xb35e*/
    {
      if ( RstArrayEntryLookup(*(_QWORD *)(v0 + 216), v2) ) /*0xb368*/
        v1 |= 1 << v2; /*0xb37b*/
      if ( ++v2 >= v3 ) /*0xb382*/
        break; /*0xb382*/
      v0 = Source_16; /*0xb384*/
    }
  }
  return v1; /*0xb399*/
}

// Function: RstRaidMemberOnlineBitmask @ 0xb3a0 (0x11d bytes)
// Index: 308/906

__int64 __fastcall RstRaidMemberOnlineBitmask(unsigned __int16 j)
{
  __int64 v1; // rsi
  __int64 v2; // rbp
  unsigned __int8 n24_2; // r12
  unsigned __int8 n24_1; // bl
  unsigned __int16 i; // r13
  int n24; // ecx
  __int64 v8; // r14
  unsigned __int16 k; // di

  v1 = 0; /*0xb3d0*/
  v2 = *(_QWORD *)(RstArrayEntryLookup(*(_QWORD *)(Source_16 + 216), j) + 8); /*0xb3d8*/
  if ( !v2 ) /*0xb3df*/
    return 0; /*0xb3e1*/
  n24_2 = *(_BYTE *)(v2 + 20); /*0xb3ef*/
  n24_1 = 0; /*0xb3f3*/
  for ( i = **(_WORD **)(Source_16 + 216); n24_1 < n24_2; ++n24_1 ) /*0xb404*/
  {
    n24 = 24; /*0xb415*/
    if ( n24_1 < 0x19u ) /*0xb41a*/
      n24 = n24_1; /*0xb41a*/
    v8 = *(_QWORD *)(v2 + 8LL * n24 + 24); /*0xb420*/
    if ( v8 ) /*0xb428*/
    {
      if ( (*(_DWORD *)(*(_QWORD *)(v8 + 48) + 136LL) & 0x10) != 0 ) /*0xb439*/
      {
        for ( k = 0; k < i; ++k ) /*0xb443*/
        {
          if ( *(_DWORD *)(RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source_16 + 216) + 16LL), k)[6] + 96LL) == *(_DWORD *)(*(_QWORD *)(v8 + 48) + 96LL) ) /*0xb473*/
            v1 |= 1LL << k; /*0xb47e*/
        }
      }
    }
  }
  return v1; /*0xb4af*/
}

// Function: RstDeviceSetNotDegraded @ 0xb4c0 (0x23 bytes)
// Index: 309/906

void __fastcall RstDeviceSetNotDegraded(__int64 i)
{
  bool v1; // zf

  v1 = *(_DWORD *)(i + 88) == 3; /*0xb4c0*/
  *(_BYTE *)(i + 136) = 1; /*0xb4c4*/
  if ( v1 ) /*0xb4cb*/
    *(_BYTE *)(i + 136) = 0; /*0xb4cd*/
  if ( _bittest((const signed __int32 *)(i + 116), 0xDu) ) /*0xb4d4*/
    *(_BYTE *)(i + 136) = 0; /*0xb4db*/
}

// Function: RstDeviceGetFeatureFlagBit @ 0xb4e4 (0xdc bytes)
// Index: 310/906

char __fastcall RstDeviceGetFeatureFlagBit(int n7)
{
  char *v2; // rax
  int v3; // ebx
  int v4; // ebx
  int v5; // ebx
  int v6; // ebx
  int v7; // ebx
  int v8; // eax
  int v10; // eax
  int v11; // ebx
  char v12; // cl
  int v13; // ebx
  int v14; // ebx
  int v15; // ebx
  int v16; // ebx
  int v17; // edx

  v2 = (char *)RstGetGlobalContext(); /*0xb4ec*/
  if ( n7 <= 7 ) /*0xb4f4*/
  {
    if ( n7 == 7 ) /*0xb4f6*/
    {
      v10 = *(_DWORD *)(v2 + 26) >> 25; /*0xb554*/
    }
    else
    {
      if ( n7 ) /*0xb4fc*/
      {
        v3 = n7 - 1; /*0xb503*/
        if ( !v3 ) /*0xb505*/
        {
          v8 = *(_DWORD *)(v2 + 26) >> 1; /*0xb546*/
          return v8 & 1; /*0xb546*/
        }
        v4 = v3 - 1; /*0xb507*/
        if ( !v4 ) /*0xb509*/
        {
          v8 = *(_DWORD *)(v2 + 26) >> 2; /*0xb53e*/
          return v8 & 1; /*0xb541*/
        }
        v5 = v4 - 1; /*0xb50b*/
        if ( !v5 ) /*0xb50d*/
        {
          v8 = *(_DWORD *)(v2 + 26) >> 3; /*0xb536*/
          return v8 & 1; /*0xb539*/
        }
        v6 = v5 - 1; /*0xb50f*/
        if ( v6 ) /*0xb511*/
        {
          v7 = v6 - 1; /*0xb513*/
          if ( !v7 ) /*0xb515*/
          {
            v8 = *(_DWORD *)(v2 + 26) >> 5; /*0xb526*/
            return v8 & 1; /*0xb529*/
          }
          if ( v7 == 1 ) /*0xb519*/
          {
            v8 = *(_DWORD *)(v2 + 26) >> 27; /*0xb51e*/
            return v8 & 1; /*0xb54a*/
          }
          return 0; /*0xb519*/
        }
        goto LABEL_12; /*0xb511*/
      }
      v10 = *(_DWORD *)(v2 + 26); /*0xb54c*/
    }
    return v10 & 1; /*0xb54f*/
  }
  v11 = n7 - 8; /*0xb559*/
  if ( !v11 ) /*0xb55c*/
  {
    v10 = *(_DWORD *)(v2 + 26) >> 29; /*0xb5b4*/
    return v10 & 1; /*0xb5b7*/
  }
  v12 = 1; /*0xb55e*/
  v13 = v11 - 1; /*0xb563*/
  if ( !v13 ) /*0xb565*/
  {
    v8 = *(_DWORD *)(v2 + 26) >> 26; /*0xb5ac*/
    return v8 & 1; /*0xb5af*/
  }
  v14 = v13 - 1; /*0xb567*/
  if ( !v14 ) /*0xb569*/
  {
    v8 = *(_DWORD *)(v2 + 30); /*0xb5a4*/
    return v8 & 1; /*0xb5a7*/
  }
  v15 = v14 - 1; /*0xb56b*/
  if ( v15 ) /*0xb56d*/
  {
    v16 = v15 - 1; /*0xb56f*/
    if ( v16 ) /*0xb571*/
    {
      if ( v16 == 1 ) /*0xb575*/
      {
        v8 = *(_DWORD *)(v2 + 34) >> 10; /*0xb57e*/
        return v8 & 1; /*0xb581*/
      }
      return 0; /*0xb579*/
    }
LABEL_12:
    v8 = *(_DWORD *)(v2 + 26) >> 4; /*0xb52b*/
    return v8 & 1; /*0xb531*/
  }
  v17 = *(_DWORD *)(v2 + 26); /*0xb583*/
  if ( (v17 & 2) == 0 && (v17 & 0x10) == 0 ) /*0xb595*/
    return (v17 & 4) != 0; /*0xb59e*/
  return v12; /*0xb5ba*/
}

// Function: RstGetGlobalMode @ 0xb5c0 (0x17 bytes)
// Index: 311/906

__int64 RstGetGlobalMode()
{
  return (*(_DWORD *)((char *)RstGetGlobalContext() + 34) >> 8) & 3; /*0xb5d2*/
}

// Function: RstGetGlobalContextPtr @ 0xb5d8 (0x5 bytes)
// Index: 312/906

// attributes: thunk
void *RstGetGlobalContextPtr()
{
  return RstGetGlobalContext();
}

// Function: RstDeviceGetName @ 0xb5e0 (0x68 bytes)
// Index: 313/906

__int64 __fastcall RstDeviceGetName(__int16 a1, CHAR16 *Destination)
{
  __int64 v5; // rcx
  _QWORD *v6; // rax
  __int64 v7; // rdx

  if ( !Destination ) /*0xb5ef*/
    return 1; /*0xb5ef*/
  if ( !Source_16 ) /*0xb602*/
    return 1; /*0xb602*/
  v5 = *(_QWORD *)(Source_16 + 216); /*0xb604*/
  if ( !v5 ) /*0xb60e*/
    return 1; /*0xb60e*/
  v6 = RstLinkedListGetNth((_QWORD **)(v5 + 16), a1); /*0xb614*/
  if ( !v6 ) /*0xb61c*/
    return 15; /*0xb623*/
  v7 = v6[6]; /*0xb625*/
  if ( !v7 ) /*0xb62c*/
    return 1; /*0xb5f6*/
  StrnCpy(Destination, (const CHAR16 *)(v7 + 45), 0x29u); /*0xb63b*/
  return 0; /*0xb642*/
}

// Function: RstDeviceGetStatusStringId @ 0xb648 (0xca bytes)
// Index: 314/906

__int64 __fastcall RstDeviceGetStatusStringId(__int64 a1)
{
  int v1; // edx
  int v2; // r8d
  __int64 result; // rax
  int v4; // edx
  int v5; // edx

  v1 = *(_DWORD *)(a1 + 88); /*0xb64d*/
  v2 = *(_DWORD *)(a1 + 96); /*0xb650*/
  result = *(unsigned int *)(a1 + 132); /*0xb654*/
  if ( _bittest((const signed __int32 *)(a1 + 116), 0xDu) ) /*0xb648*/
  {
    *(_DWORD *)(a1 + 140) = 31; /*0xb65c*/
    return result; /*0xb666*/
  }
  if ( !v1 ) /*0xb669*/
  {
    if ( !v2 ) /*0xb66e*/
    {
      if ( !(_DWORD)result ) /*0xb672*/
      {
LABEL_6:
        *(_DWORD *)(a1 + 140) = 21; /*0xb674*/
        return result; /*0xb67e*/
      }
      goto LABEL_8; /*0xb672*/
    }
LABEL_16:
    if ( (_DWORD)result ) /*0xb6c5*/
    {
      result = (unsigned int)(result - 1); /*0xb6c7*/
      if ( (_DWORD)result ) /*0xb6ca*/
      {
        result = (unsigned int)(result - 1); /*0xb6cc*/
        if ( (_DWORD)result ) /*0xb6cf*/
        {
          result = (unsigned int)(result - 1); /*0xb6d1*/
          if ( (_DWORD)result ) /*0xb6d4*/
          {
            if ( (_DWORD)result == 1 ) /*0xb6d9*/
              *(_DWORD *)(a1 + 140) = 37; /*0xb6db*/
          }
          else
          {
            *(_DWORD *)(a1 + 140) = 36; /*0xb6e6*/
          }
        }
        else
        {
          *(_DWORD *)(a1 + 140) = 35; /*0xb6f1*/
        }
      }
      else
      {
        *(_DWORD *)(a1 + 140) = 24; /*0xb6fc*/
      }
    }
    else
    {
      *(_DWORD *)(a1 + 140) = 34; /*0xb707*/
    }
    return result; /*0xb6e5*/
  }
  if ( v2 ) /*0xb682*/
    goto LABEL_16; /*0xb682*/
LABEL_8:
  if ( !v1 ) /*0xb686*/
    goto LABEL_6; /*0xb686*/
  v4 = v1 - 1; /*0xb688*/
  if ( v4 ) /*0xb68b*/
  {
    v5 = v4 - 1; /*0xb68d*/
    if ( v5 ) /*0xb690*/
    {
      if ( v5 == 1 ) /*0xb695*/
        *(_DWORD *)(a1 + 140) = 22; /*0xb6a2*/
      else
        *(_DWORD *)(a1 + 140) = 38; /*0xb697*/
    }
    else
    {
      *(_DWORD *)(a1 + 140) = 23; /*0xb6ad*/
    }
  }
  else
  {
    *(_DWORD *)(a1 + 140) = 25; /*0xb6b8*/
  }
  return result; /*0xb666*/
}

// Function: RstDeviceStatusCodeMap @ 0xb714 (0x60 bytes)
// Index: 315/906

__int64 __fastcall RstDeviceStatusCodeMap(unsigned int *a1)
{
  __int64 n5; // rax
  int v2; // eax

  n5 = a1[8]; /*0xb714*/
  if ( (_DWORD)n5 ) /*0xb719*/
  {
    v2 = n5 - 1; /*0xb71b*/
    if ( v2 ) /*0xb71e*/
    {
      n5 = (unsigned int)(v2 - 4); /*0xb720*/
      if ( (_DWORD)n5 ) /*0xb723*/
      {
        if ( (_DWORD)n5 == 5 ) /*0xb728*/
          a1[36] = 44; /*0xb72a*/
      }
      else
      {
        a1[36] = 43; /*0xb735*/
      }
    }
    else
    {
      n5 = a1[29]; /*0xb740*/
      if ( (n5 & 0x400) != 0 ) /*0xb747*/
      {
        n5 = (unsigned int)((a1[29] & 0x800) != 0) + 39; /*0xb754*/
        a1[36] = n5; /*0xb757*/
      }
      else
      {
        a1[36] = 42; /*0xb75e*/
      }
    }
  }
  else
  {
    a1[36] = 41; /*0xb769*/
  }
  return n5; /*0xb734*/
}

// Function: RstBlockSizeToStatusCode @ 0xb774 (0x13a bytes)
// Index: 316/906

void __fastcall RstBlockSizeToStatusCode(_DWORD *a1)
{
  unsigned int n512; // eax
  unsigned int v2; // eax
  unsigned int v3; // eax
  unsigned int v4; // eax
  unsigned int v5; // eax
  unsigned int v6; // eax
  unsigned int v7; // eax
  unsigned int n128; // eax

  if ( a1[8] == 1 ) /*0xb778*/
    goto LABEL_28; /*0xb778*/
  n512 = a1[12]; /*0xb77e*/
  if ( n512 <= 0x200 ) /*0xb788*/
  {
    if ( n512 == 512 ) /*0xb78e*/
    {
      a1[37] = 55; /*0xb81a*/
      return; /*0xb824*/
    }
    v2 = n512 - 2; /*0xb794*/
    if ( !v2 ) /*0xb797*/
    {
      a1[37] = 47; /*0xb80f*/
      return; /*0xb819*/
    }
    v3 = v2 - 2; /*0xb799*/
    if ( !v3 ) /*0xb79c*/
    {
      a1[37] = 48; /*0xb804*/
      return; /*0xb80e*/
    }
    v4 = v3 - 4; /*0xb79e*/
    if ( !v4 ) /*0xb7a1*/
    {
      a1[37] = 49; /*0xb7f9*/
      return; /*0xb803*/
    }
    v5 = v4 - 8; /*0xb7a3*/
    if ( !v5 ) /*0xb7a6*/
    {
      a1[37] = 50; /*0xb7ee*/
      return; /*0xb7f8*/
    }
    v6 = v5 - 16; /*0xb7a8*/
    if ( !v6 ) /*0xb7ab*/
    {
      a1[37] = 51; /*0xb7e3*/
      return; /*0xb7ed*/
    }
    v7 = v6 - 32; /*0xb7ad*/
    if ( !v7 ) /*0xb7b0*/
    {
      a1[37] = 52; /*0xb7d8*/
      return; /*0xb7e2*/
    }
    n128 = v7 - 64; /*0xb7b2*/
    if ( !n128 ) /*0xb7b5*/
    {
      a1[37] = 53; /*0xb7cd*/
      return; /*0xb7d7*/
    }
    if ( n128 == 128 ) /*0xb7bc*/
    {
      a1[37] = 54; /*0xb7c2*/
      return; /*0xb7cc*/
    }
    goto LABEL_28; /*0xb7bc*/
  }
  switch ( n512 ) /*0xb82a*/
  {
    case 0x400u: /*0xb82a*/
      a1[37] = 56; /*0xb8a3*/
      break;
    case 0x800u: /*0xb82a*/
      a1[37] = 57; /*0xb898*/
      break;
    case 0x1000u: /*0xb82a*/
      a1[37] = 58; /*0xb88d*/
      break;
    case 0x2000u: /*0xb82a*/
      a1[37] = 59; /*0xb882*/
      break;
    case 0x4000u: /*0xb82a*/
      a1[37] = 60; /*0xb877*/
      break;
    case 0x8000u: /*0xb82a*/
      a1[37] = 61; /*0xb86c*/
      break;
    default:
      if ( n512 != (_DWORD)&loc_FFFE + 2 ) /*0xb854*/
      {
LABEL_28:
        a1[37] = 46; /*0xb856*/
        return; /*0xb860*/
      }
      a1[37] = 62; /*0xb861*/
      break;
  }
}

// Function: RstDeviceCapFilterByType @ 0xb8b0 (0x32 bytes)
// Index: 317/906

__int16 __fastcall RstDeviceCapFilterByType(__int64 n5)
{
  int n5_1; // ebx
  __int16 v2; // ax

  n5_1 = (unsigned __int16)n5; /*0xb8b6*/
  v2 = *((_WORD *)RstGetGlobalContext() + 9); /*0xb8be*/
  if ( n5_1 == 5 ) /*0xb8c5*/
    return v2 & 0x7E; /*0xb8d8*/
  if ( n5_1 == 10 ) /*0xb8ca*/
    return v2 & 0x3F; /*0xb8d2*/
  return v2 & 0x7F; /*0xb8dc*/
}

// Function: Assert_102 @ 0xb8e4 (0x58 bytes)
// Index: 318/906

char __fastcall Assert_102(__int16 a1, unsigned __int16 n5, char a3)
{
  _QWORD *v5; // rax
  __int64 v6; // r8
  char v7; // bl

  v5 = RstLinkedListSkipN(*(_QWORD *)(Source_16 + 216), a1); /*0xb90a*/
  v7 = 0; /*0xb90f*/
  if ( v5 ) /*0xb914*/
  {
    LOBYTE(v6) = a3; /*0xb916*/
    return Assert_31((__int64)v5, n5, v6) != 0; /*0xb928*/
  }
  return v7; /*0xb936*/
}

// Function: RstDeviceCountConfigured @ 0xb93c (0x93 bytes)
// Index: 319/906

__int64 __fastcall RstDeviceCountConfigured()
{
  unsigned int v0; // edi
  __int64 v2; // rsi
  unsigned __int8 i_1; // bp
  unsigned __int8 i; // bl
  __int64 v5; // rax

  v0 = 0; /*0xb95c*/
  if ( !Source_16 ) /*0xb964*/
    return 0; /*0xb964*/
  v2 = *(_QWORD *)(Source_16 + 216); /*0xb96a*/
  if ( !v2 ) /*0xb974*/
    return 0; /*0xb966*/
  i_1 = *(_BYTE *)(v2 + 48); /*0xb976*/
  for ( i = 0; i < i_1; ++i ) /*0xb97f*/
  {
    v5 = RstArrayEntryLookup(v2, i); /*0xb987*/
    if ( v5 ) /*0xb98f*/
    {
      if ( RstDeviceMemberIsNvme(v5) ) /*0xb997*/
        v0 |= 1 << i; /*0xb9a9*/
    }
  }
  return v0; /*0xb9c8*/
}

// Function: RstDeviceFindMemberSlot @ 0xb9d0 (0x42 bytes)
// Index: 320/906

_QWORD *__fastcall RstDeviceFindMemberSlot(__int64 a1, __int64 a2)
{
  unsigned __int8 n23_1; // r8
  int n23; // ecx
  _QWORD *result; // rax

  n23_1 = 0; /*0xb9d0*/
  if ( !a2 || !*(_BYTE *)(a2 + 42) ) /*0xb9db*/
    return 0; /*0xba0f*/
  while ( 1 ) /*0xb9e9*/
  {
    n23 = 23; /*0xb9e9*/
    if ( n23_1 < 0x18u ) /*0xb9ee*/
      n23 = n23_1; /*0xb9ee*/
    result = (_QWORD *)(a2 + 16 * (n23 + 7LL)); /*0xb9fc*/
    if ( result ) /*0xb9ff*/
    {
      if ( *result == a1 ) /*0xba04*/
        break; /*0xba04*/
    }
    if ( ++n23_1 >= *(_BYTE *)(a2 + 42) ) /*0xba0d*/
      return 0; /*0xba0d*/
  }
  return result; /*0xba11*/
}

// Function: RstDeviceIsMemberOrActive @ 0xba14 (0x55 bytes)
// Index: 321/906

char __fastcall RstDeviceIsMemberOrActive(__int64 a1, __int64 a2)
{
  __int64 v4; // rax

  if ( a2 ) /*0xba27*/
  {
    if ( RstDeviceGetNthActive(a2) == a1 || RstRaidMemberFindLastActive(a2) == a1 ) /*0xba41*/
      return 1; /*0xba5a*/
    v4 = RstDeviceFindMemberSlot(a1, a2); /*0xba49*/
    if ( v4 ) /*0xba51*/
      return *(_BYTE *)(v4 + 8); /*0xba56*/
  }
  return 0; /*0xba63*/
}

// Function: RstRaidMemberFindCompatible @ 0xba6c (0x12c bytes)
// Index: 322/906

char __fastcall RstRaidMemberFindCompatible(__int64 a1)
{
  __int16 v2; // bp
  __int64 v4; // rax
  char v5; // di
  unsigned __int16 v6; // bx
  __int64 v7; // r12
  __int64 v8; // rax
  __int64 v9; // rsi
  char v10; // di
  char v11; // di
  __int64 v12; // r10
  __int64 v13; // rax
  int v14; // r11d

  v2 = *(_WORD *)(Source_16 + 192); /*0xba9d*/
  if ( !RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), a1) ) /*0xbaa4*/
    return 0; /*0xbab1*/
  v4 = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), a1); /*0xbac9*/
  v5 = 0; /*0xbace*/
  v6 = 0; /*0xbad1*/
  v7 = *(_QWORD *)(v4 + 48); /*0xbad5*/
  do /*0xbb70*/
  {
    if ( (__int16)v6 >= v2 ) /*0xbae2*/
      break; /*0xbae2*/
    v8 = RstDeviceContextGetNth(Source_16, v6); /*0xbaf2*/
    v9 = v8; /*0xbaf7*/
    if ( v8 ) /*0xbafd*/
    {
      v10 = RstDeviceIsMemberOrActive(v7, *(_QWORD *)(*(_QWORD *)(v8 + 160) + 16LL)) | v5; /*0xbb20*/
      v11 = RstDeviceIsMemberOrActive(v7, *(_QWORD *)(*(_QWORD *)(v9 + 160) + 24LL)) | v10; /*0xbb36*/
      RstDeviceFindMemberSlot(v7, *(_QWORD *)(*(_QWORD *)(v9 + 160) + 24LL)); /*0xbb39*/
      v13 = RstDeviceFindMemberSlot(v7, *(_QWORD *)(v12 + 16)); /*0xbb4f*/
      v5 = ((v13 != 0) + v14 == 1) | v11; /*0xbb66*/
    }
    ++v6; /*0xbb69*/
  }
  while ( !v5 ); /*0xbb70*/
  return v5; /*0xbb8d*/
}

// Function: RstDeviceFindByIndexAndKey @ 0xbb98 (0x3a bytes)
// Index: 323/906

_QWORD *__fastcall RstDeviceFindByIndexAndKey(__int16 n24, const char *en)
{
  _QWORD *result; // rax

  result = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source_16 + 216) + 16LL), n24); /*0xbbb6*/
  if ( result ) /*0xbbbe*/
    return (_QWORD *)RstProtocolReadVariable(result[6], en); /*0xbbc7*/
  return result; /*0xbbcc*/
}

// Function: RstDeviceGetProperty @ 0xbbd4 (0x83 bytes)
// Index: 324/906

__int64 __fastcall RstDeviceGetProperty(__int64 a1, __int64 n24, char *en)
{
  __int64 v6; // rcx
  __int64 v7; // rax
  __int64 v8; // rcx

  if ( !a1 || !en ) /*0xbbec*/
    return 0x8000000000000002uLL; /*0xbc42*/
  if ( !Source_16 ) /*0xbbf8*/
    return 0x8000000000000007uLL; /*0xbbf8*/
  v6 = *(_QWORD *)(Source_16 + 216); /*0xbc06*/
  if ( !v6 ) /*0xbc10*/
    return 0x8000000000000007uLL; /*0xbbfa*/
  v7 = RstLinkedListGetNth(v6 + 16, n24); /*0xbc16*/
  if ( v7 && (v8 = *(_QWORD *)(v7 + 48)) != 0 ) /*0xbc33*/
    return RstHiiGetString(v8, a1, en); /*0xbc3b*/
  else
    return 0x800000000000000EuLL; /*0xbc20*/
}

// Function: Assert_107 @ 0xbc58 (0x3a bytes)
// Index: 325/906

__int64 Assert_107unsigned __int8 a1, unsigned int n4)
{
  __int64 *v3; // rax

  v3 = (__int64 *)RstArrayEntryLookup(*(_QWORD *)(Source_16 + 216), a1); /*0xbc71*/
  if ( v3 ) /*0xbc79*/
    return Assert_6(v3, n4); /*0xbc87*/
  else
    return 14; /*0xbc7b*/
}

// Function: RstDeviceGetFieldCount @ 0xbc94 (0x67 bytes)
// Index: 326/906

char __fastcall RstDeviceGetFieldCount(unsigned __int8 a1)
{
  __int64 v2; // rcx
  __int64 v3; // rbx
  _QWORD *v4; // rax
  __int64 v5; // rdx
  __int64 Destination; // rax

  if ( Source_16 /*0xbce5*/
    && (v2 = *(_QWORD *)(Source_16 + 216), v3 = Source_16 + 224, Source_16 != -224)
    && v2
    && (v4 = RstLinkedListGetNth((_QWORD **)(v2 + 16), a1)) != 0
    && (v5 = v4[6]) != 0
    && (Destination = RstBufferPoolFindEntry(v3, v5)) != 0 )
  {
    return RstGetFieldCount(Destination, 1); /*0xbcec*/
  }
  else
  {
    return 0; /*0xbcf3*/
  }
}

// Function: j_j_HiiBlockCompare @ 0xbcfc (0x5 bytes)
// Index: 327/906

// attributes: thunk
__int64 __fastcall j_j_HiiBlockCompare()
{
  return j_HiiBlockCompare();
}

// Function: j_j_HiiBlockCompareConst @ 0xbd04 (0x5 bytes)
// Index: 328/906

// attributes: thunk
__int64 j_j_HiiBlockCompareConst()
{
  return j_HiiBlockCompareConst();
}

// Function: j_j_HiiLibGuidIsZero @ 0xbd0c (0x5 bytes)
// Index: 329/906

// attributes: thunk
__int64 __fastcall j_j_HiiLibGuidIsZero(unsigned int a1)
{
  return j_HiiLibGuidIsZero(a1);
}

// Function: j_j_HiiLibGuidToStr @ 0xbd14 (0x5 bytes)
// Index: 330/906

// attributes: thunk
__int64 __fastcall j_j_HiiLibGuidToStr(unsigned int a1, const char *en)
{
  return j_HiiLibGuidToStr(a1, en);
}

// Function: RstHelper_bd1c @ 0xbd1c (0x4a bytes)
// Index: 331/906

__int64 RstHelper_bd1c_int16 n24, const char *en)
{
  _QWORD *v3; // rax
  unsigned int v4; // eax

  v3 = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source_16 + 216) + 16LL), n24); /*0xbd3a*/
  if ( !v3 ) /*0xbd42*/
    return 0; /*0xbd42*/
  v4 = RstHelper_02c0(v3[6]); /*0xbd48*/
  if ( v4 == -1 ) /*0xbd50*/
    return 0; /*0xbd5e*/
  else
    return j_HiiLibGuidToStr(v4, en); /*0xbd57*/
}

// Function: RstDeviceGetRaidLevelByIndex @ 0xbd68 (0x45 bytes)
// Index: 332/906

__int64 __fastcall RstDeviceGetRaidLevelByIndex(unsigned __int16 a1)
{
  __int64 v1; // rdx
  __int64 v3; // rcx
  __int64 v4; // rax
  __int64 v5; // rcx

  v1 = a1; /*0xbd73*/
  if ( Source_16 /*0xbda1*/
    && (v3 = *(_QWORD *)(Source_16 + 216)) != 0
    && (v4 = RstLinkedListGetNth(v3 + 16, v1)) != 0
    && (v5 = *(_QWORD *)(v4 + 48)) != 0 )
  {
    return RstHelper_02c0(v5); /*0xbda3*/
  }
  else
  {
    return 0xFFFFFFFFLL; /*0xbd7b*/
  }
}

// Function: RstDeviceBlockSizeToStripe @ 0xbdb0 (0x51 bytes)
// Index: 333/906

__int16 __fastcall RstDeviceBlockSizeToStripe(__int16 n3)
{
  __int16 n8; // ax

  if ( n3 != 3 && (n3 & 1) != 0 ) /*0xbdc1*/
    return 128; /*0xbdc3*/
  n8 = 8; /*0xbdce*/
  if ( n3 != 16 ) /*0xbdd4*/
  {
    if ( n3 == 8 || n3 == 24 ) /*0xbddf*/
    {
      return 16; /*0xbdfd*/
    }
    else if ( n3 == 4 || n3 == 12 || n3 == 20 ) /*0xbdf1*/
    {
      return 32; /*0xbdf7*/
    }
    else
    {
      return 64; /*0xbdf3*/
    }
  }
  return n8; /*0xbdc8*/
}

// Function: RstHelper_be04 @ 0xbe04 (0x34f bytes)
// Index: 334/906

__int64 __fastcall RstHelper_be04(unsigned __int8 j, unsigned __int8 n24, char a3)
{
  unsigned int n20; // r13d
  __int64 v5; // rbx
  _QWORD *v7; // rax
  __int64 v8; // r12
  __int64 v9; // rax
  __int64 v10; // rax
  __int64 *v11; // rbp
  __int64 v12; // rax
  __int64 v13; // rsi
  __int64 v14; // rdx
  int v15; // ebx
  __int64 v16; // rdx
  __int64 v17; // rsi
  unsigned __int64 v18; // rbx
  __int64 v19; // rax
  unsigned __int8 n24_2; // bl
  bool v21; // r14
  int n24_1; // ecx
  __int64 v23; // r15
  int v24; // ecx
  unsigned __int8 i; // r14
  unsigned __int8 n2; // cl
  int i_1; // ecx
  __int64 *v28; // rax
  __int64 v29; // rax
  __int64 v30; // r15
  __int64 v31; // rbx
  __int64 v32; // rbx
  int v33; // eax
  __int64 v34; // rdx

  n20 = 0; /*0xbe2a*/
  if ( !Source_16 ) /*0xbe30*/
    return 1; /*0xbe30*/
  v5 = *(_QWORD *)(Source_16 + 216); /*0xbe36*/
  if ( !v5 ) /*0xbe40*/
    return 1; /*0xc139*/
  if ( j >= *(_BYTE *)(v5 + 48) ) /*0xbe49*/
    return 14; /*0xbe50*/
  v7 = RstLinkedListGetNth((_QWORD **)(v5 + 16), n24); /*0xbe5c*/
  v8 = (__int64)v7; /*0xbe61*/
  if ( !v7 ) /*0xbe67*/
    return 15; /*0xbe67*/
  v9 = v7[6]; /*0xbe6d*/
  if ( !v9 ) /*0xbe74*/
    return 15; /*0xc132*/
  if ( (*(_BYTE *)(v9 + 136) & 0x41) == 0 /*0xbed5*/
    || RstDeviceCheckReservedSuffix(v8)
    || (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 34) & 0x400) == 0 && *(_WORD *)(*(_QWORD *)(v8 + 48) + 172LL) != 0x8086
    || (*(_DWORD *)(*(_QWORD *)(v8 + 48) + 136LL) & 0x200) != 0 )
  {
    return 16; /*0xc12b*/
  }
  v10 = RstArrayEntryLookup(v5, j); /*0xbee2*/
  v11 = (__int64 *)v10; /*0xbee7*/
  if ( !v10 ) /*0xbeed*/
    return 14; /*0xbeed*/
  v12 = *(_QWORD *)(v10 + 56); /*0xbef3*/
  if ( !v12 ) /*0xbefa*/
    return 14; /*0xbefa*/
  v13 = *v11; /*0xbf00*/
  if ( !*v11 ) /*0xbf00*/
    return 14; /*0xbf07*/
  v14 = *(_QWORD *)(v12 + 40); /*0xbf0d*/
  if ( !v14 || !*(_WORD *)(v14 + 4) ) /*0xbf1a*/
    return 20; /*0xc124*/
  v15 = HiiLibReturnZero(*(_QWORD *)(v8 + 48)); /*0xbf32*/
  if ( (unsigned int)HiiLibReturnZero(v13) != v15 ) /*0xbf3b*/
    return 43; /*0xbf3d*/
  v17 = v11[1]; /*0xbf47*/
  if ( !v17 || !*(_QWORD *)(v17 + 248) ) /*0xbf54*/
    return 14; /*0xbf5b*/
  v18 = *(_QWORD *)(*(_QWORD *)(v8 + 48) + 88LL); /*0xbf69*/
  if ( v18 < Assert_35(v11[1], v16) ) /*0xbf75*/
    return 13; /*0xbf77*/
  v19 = *(_QWORD *)(*(_QWORD *)(*v11 + 160) + 16LL); /*0xbf91*/
  if ( v19 && *(_DWORD *)(v19 + 8) == 2 && (unsigned int)RstCfgCheckVolumeType(v17) == 2 ) /*0xbfab*/
    n20 = 20; /*0xbfab*/
  n24_2 = 0; /*0xbfb4*/
  v21 = (*(_DWORD *)(*(_QWORD *)(v8 + 48) + 100LL) & 8) == 8; /*0xbfc0*/
  if ( *(_BYTE *)(v17 + 20) ) /*0xbfc4*/
  {
    while ( 1 ) /*0xbfcd*/
    {
      n24_1 = 24; /*0xbfcd*/
      if ( n24_2 < 0x19u ) /*0xbfd5*/
        n24_1 = n24_2; /*0xbfd5*/
      v23 = *(_QWORD *)(v17 + 8LL * n24_1 + 24); /*0xbfdb*/
      if ( !RstStringLastColonIndex((CHAR16 *)(v23 + 18)) ) /*0xbfe4*/
      {
        v24 = (*(_DWORD *)(*(_QWORD *)(v23 + 48) + 100LL) >> 3) & 1; /*0xbff9*/
        if ( v24 ) /*0xbffb*/
        {
          if ( !v21 ) /*0xc000*/
            return 21; /*0xc08c*/
        }
        if ( v24 != 1 && v21 ) /*0xc00d*/
          return 21; /*0xc08c*/
      }
      if ( ++n24_2 >= *(_BYTE *)(v17 + 20) ) /*0xc015*/
        goto LABEL_36; /*0xc015*/
    }
  }
  else
  {
LABEL_36:
    for ( i = 0; ; ++i ) /*0xc01a*/
    {
      n2 = *(_BYTE *)(v17 + 224); /*0xc023*/
      if ( n2 >= 2u ) /*0xc028*/
        n2 = 2; /*0xc02a*/
      if ( i >= n2 ) /*0xc032*/
        break; /*0xc032*/
      i_1 = 1; /*0xc040*/
      if ( i < 2u ) /*0xc042*/
        i_1 = i; /*0xc042*/
      v28 = *(__int64 **)(v17 + 8LL * i_1 + 232); /*0xc048*/
      if ( !v28 ) /*0xc053*/
        return 1; /*0xc053*/
      v29 = *v28; /*0xc059*/
      if ( !v29 ) /*0xc05f*/
        return 1; /*0xc05f*/
      v30 = *(_QWORD *)(v29 + 160); /*0xc065*/
      v31 = *(_QWORD *)(v30 + 16); /*0xc06e*/
      if ( !v31 ) /*0xc075*/
        return 1; /*0xc122*/
      if ( *(_DWORD *)(v31 + 8) == 2 || !*(_WORD *)(v31 + 40) ) /*0xc081*/
      {
        if ( !RstRaidMemberFindLastActive(*(_QWORD *)(v30 + 16)) && !RstDeviceGetNthActive(v31) ) /*0xc0ae*/
        {
          n20 = 20; /*0xc0ea*/
          break; /*0xc0ea*/
        }
        if ( !a3 ) /*0xc0b5*/
        {
          RstDeviceClearFlags(*(_QWORD *)(v8 + 48), 64); /*0xc0c1*/
          RstDeviceSetFlags(*(_QWORD *)(v8 + 48), 1u); /*0xc0cd*/
          Assert_79(v30, *(_QWORD *)(v8 + 48)); /*0xc0da*/
        }
      }
      else
      {
        n20 = 20; /*0xc087*/
      }
    }
    if ( !a3 && !n20 ) /*0xc0fa*/
    {
      v32 = *(_QWORD *)(v17 + 248); /*0xc0fc*/
      v33 = RstGetUefiTime(); /*0xc103*/
      LOBYTE(v34) = 1; /*0xc108*/
      *(_DWORD *)(v32 + 24) += v33; /*0xc10b*/
      (***(void (__fastcall ****)(_QWORD, __int64))(v17 + 248))(*(_QWORD *)(v17 + 248), v34); /*0xc118*/
    }
    return n20; /*0xc11b*/
  }
}

// Function: RstDeviceSetDegraded @ 0xc154 (0x87 bytes)
// Index: 335/906

__int64 __fastcall RstDeviceSetDegraded(__int64 a1, unsigned __int8 n0x18)
{
  __int64 Source; // rax
  unsigned __int8 n24; // di

  *(_DWORD *)(a1 + 152) = 1; /*0xc168*/
  Source = Source_16; /*0xc172*/
  n24 = 0; /*0xc188*/
  if ( **(_WORD **)(Source_16 + 216) ) /*0xc18b*/
  {
    while ( 1 ) /*0xc19a*/
    {
      Source = RstHelper_be04(n0x18, n24, 1); /*0xc19a*/
      if ( !(_DWORD)Source ) /*0xc1a1*/
        break; /*0xc1a1*/
      Source = ++n24; /*0xc1b4*/
      if ( n24 >= (unsigned int)**(_WORD **)(Source_16 + 216) ) /*0xc1bb*/
        return Source; /*0xc1bb*/
    }
    *(_DWORD *)(a1 + 152) |= 0x20u; /*0xc1bf*/
  }
  return Source; /*0xc1d5*/
}

// Function: RstDeviceGetCapability @ 0xc1dc (0x71 bytes)
// Index: 336/906

__int64 __fastcall RstDeviceGetCapability(unsigned __int16 n5, __int64 a2)
{
  int v2; // ecx
  __int64 n4; // rax
  int v4; // ecx

  switch ( n5 ) /*0xc1e3*/
  {
    case 0u: /*0xc1e3*/
      LOBYTE(v2) = *((_BYTE *)RstGetGlobalContext() + 26); /*0xc1ea*/
      goto LABEL_5; /*0xc1ed*/
    case 1u: /*0xc1e3*/
      v2 = *(_DWORD *)((char *)RstGetGlobalContext() + 26) >> 1; /*0xc1fd*/
LABEL_5:
      if ( (v2 & 1) != 0 ) /*0xc202*/
        return 2; /*0xc209*/
      return 0xFFFF; /*0xc202*/
    case 5u: /*0xc1e3*/
      if ( (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 26) & 0x10) != 0 ) /*0xc21f*/
        return 3; /*0xc226*/
      return 0xFFFF; /*0xc21f*/
  }
  if ( n5 != 10 ) /*0xc22c*/
    return 0xFFFF; /*0xc22c*/
  v4 = *(_DWORD *)((char *)RstGetGlobalContext() + 26); /*0xc233*/
  n4 = 4; /*0xc236*/
  if ( (v4 & 4) == 0 ) /*0xc241*/
    return 0xFFFF; /*0xc243*/
  return n4; /*0xc248*/
}

// Function: RstRaidGetStripeWidth @ 0xc250 (0xad bytes)
// Index: 337/906

__int16 __fastcall RstRaidGetStripeWidth(unsigned __int16 n5, char a2)
{
  switch ( n5 ) /*0xc267*/
  {
    case 0u: /*0xc267*/
      if ( (*((_BYTE *)RstGetGlobalContext() + 26) & 1) != 0 ) /*0xc276*/
        return *((_WORD *)RstGetGlobalContext() + 10); /*0xc281*/
      return a2 && (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 26) & 0x2000000) != 0; /*0xc295*/
    case 1u: /*0xc267*/
      if ( (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 26) & 2) != 0 ) /*0xc2b2*/
        return 2; /*0xc2b7*/
      return 0; /*0xc2b2*/
    case 5u: /*0xc267*/
      if ( (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 26) & 0x10) != 0 ) /*0xc2cc*/
        return *((_WORD *)RstGetGlobalContext() + 10); /*0xc2cc*/
      return 0; /*0xc2cc*/
  }
  if ( n5 != 10 || (*(_DWORD *)((_BYTE *)RstGetGlobalContext() + 26) & 4) == 0 ) /*0xc2f4*/
    return 0; /*0xc2ce*/
  return 4; /*0xc2db*/
}

// Function: RstRaidCheckDiskCountValid @ 0xc300 (0xc2 bytes)
// Index: 338/906

__int64 __fastcall RstRaidCheckDiskCountValid(unsigned __int16 n2, __int64 n5, char a3)
{
  unsigned __int16 n5_1; // di
  unsigned __int16 n2_1; // si
  unsigned __int16 n2_2; // ax
  unsigned __int16 n4; // r11
  __int64 n35; // rax

  n5_1 = n5; /*0xc314*/
  LOBYTE(n5) = a3; /*0xc31a*/
  n2_1 = RstDeviceGetCapability(n5_1, n5); /*0xc32d*/
  n2_2 = RstRaidGetStripeWidth(n5_1, a3); /*0xc330*/
  n4 = n2_2; /*0xc335*/
  if ( n2 >= n2_1 && n2 <= n2_2 ) /*0xc341*/
    return 0; /*0xc345*/
  if ( n2_1 == n2_2 ) /*0xc350*/
  {
    if ( n2_1 == 2 ) /*0xc358*/
      return 36; /*0xc368*/
    if ( n2_1 == 4 ) /*0xc35c*/
      return 37; /*0xc361*/
  }
  if ( n2 <= n2_2 ) /*0xc36e*/
  {
    switch ( n2_1 ) /*0xc387*/
    {
      case 1u: /*0xc387*/
        return 32; /*0xc3a8*/
      case 2u: /*0xc387*/
        return 33; /*0xc3a1*/
      case 3u: /*0xc387*/
        return 34; /*0xc39a*/
      default:
        return 9; /*0xc393*/
    }
  }
  else
  {
    n35 = 35; /*0xc370*/
    if ( n4 != 4 ) /*0xc37c*/
      return 10; /*0xc37c*/
  }
  return n35; /*0xc3bc*/
}

// Function: RstDeviceSetMode @ 0xc3c4 (0x2fe bytes)
// Index: 339/906

void *__fastcall RstDeviceSetMode(__int64 i)
{
  int v1; // edi
  void *result; // rax

  v1 = *(_DWORD *)(i + 60); /*0xc3d3*/
  result = (void *)RstDeviceGetFeatureFlagBit(11); /*0xc3de*/
  if ( !(_BYTE)result && (v1 & 1) != 0 /*0xc40e*/
    || (result = RstGetGlobalContext(), (*(_DWORD *)((_BYTE *)result + 26) & 0x10) == 0)
    && *(_BYTE *)(i + 162) == 1
    && (v1 & 0x2000000) != 0 )
  {
    *(_DWORD *)(i + 148) = 0; /*0xc410*/
    *(_DWORD *)(i + 152) = 5; /*0xc417*/
    *(_DWORD *)(i + 144) = 12; /*0xc421*/
    *(_DWORD *)(i + 60) = (_DWORD)&loc_1000F + 1; /*0xc42b*/
  }
  else if ( (v1 & 0x1000000) != 0 ) /*0xc43b*/
  {
    *(_QWORD *)(i + 148) = 1; /*0xc444*/
    *(_DWORD *)(i + 144) = 3; /*0xc44a*/
  }
  else if ( (v1 & 0x10000) != 0 ) /*0xc45d*/
  {
    *(_DWORD *)(i + 148) = 0; /*0xc45f*/
    *(_DWORD *)(i + 152) = 5; /*0xc466*/
    result = RstGetGlobalContext(); /*0xc470*/
    if ( (*(_DWORD *)((_BYTE *)result + 34) & 0x400) != 0 /*0xc492*/
      || (result = &loc_8086, *(_WORD *)(i + 170) == 0x8086)
      || (v1 & 0x40) == 0 )
    {
      *(_DWORD *)(i + 144) = 12; /*0xc4a3*/
    }
    else
    {
      *(_DWORD *)(i + 144) = 19; /*0xc494*/
    }
  }
  else if ( (v1 & 0x40) != 0 ) /*0xc4b6*/
  {
    *(_DWORD *)(i + 148) = 1; /*0xc4bc*/
    if ( (v1 & 0x200) != 0 ) /*0xc4c2*/
    {
      *(_DWORD *)(i + 152) = 6; /*0xc4c4*/
      *(_DWORD *)(i + 144) = 1; /*0xc4ce*/
    }
    else
    {
      *(_DWORD *)(i + 152) = 0; /*0xc4d9*/
      *(_DWORD *)(i + 144) = 0; /*0xc4e0*/
    }
  }
  else
  {
    result = &word_2; /*0xc4ec*/
    if ( (v1 & 2) != 0 ) /*0xc4f4*/
    {
      if ( (v1 & 0x8000) != 0 ) /*0xc4fe*/
      {
        *(_DWORD *)(i + 148) = 7; /*0xc500*/
        *(_DWORD *)(i + 152) = 3; /*0xc50a*/
        *(_DWORD *)(i + 144) = 11; /*0xc514*/
      }
      else
      {
        *(_DWORD *)(i + 148) = 2; /*0xc523*/
        *(_DWORD *)(i + 144) = 5; /*0xc529*/
        if ( (v1 & 0x80u) == 0 ) /*0xc536*/
        {
          if ( (v1 & 0x10) != 0 ) /*0xc555*/
          {
            if ( (v1 & 0x800) != 0 ) /*0xc574*/
            {
              if ( (v1 & 0x1000) != 0 ) /*0xc57a*/
              {
                *(_DWORD *)(i + 152) = 7; /*0xc57c*/
                *(_DWORD *)(i + 144) = 15; /*0xc586*/
              }
              else if ( (v1 & 0x2000) != 0 ) /*0xc599*/
              {
                if ( (v1 & 0x40000) != 0 ) /*0xc59f*/
                {
                  *(_DWORD *)(i + 152) = 11; /*0xc5a1*/
                  *(_DWORD *)(i + 144) = 20; /*0xc5ab*/
                }
                else
                {
                  *(_DWORD *)(i + 152) = 8; /*0xc5b7*/
                  *(_DWORD *)(i + 144) = 16; /*0xc5c1*/
                }
              }
              else
              {
                *(_DWORD *)(i + 152) = 9; /*0xc5cd*/
                *(_DWORD *)(i + 144) = 17; /*0xc5d7*/
              }
            }
            else if ( (v1 & 4) != 0 ) /*0xc5e7*/
            {
              *(_DWORD *)(i + 152) = 2; /*0xc5e9*/
              *(_DWORD *)(i + 144) = 2; /*0xc5ef*/
            }
            else if ( (v1 & 0x200) != 0 ) /*0xc5fb*/
            {
              *(_DWORD *)(i + 152) = 6; /*0xc5fd*/
              *(_DWORD *)(i + 144) = 1; /*0xc607*/
            }
            else
            {
              *(_DWORD *)(i + 152) = 0; /*0xc60f*/
              *(_DWORD *)(i + 144) = 5; /*0xc616*/
            }
          }
          else
          {
            *(_DWORD *)(i + 152) = 4; /*0xc557*/
            *(_DWORD *)(i + 144) = 14; /*0xc561*/
          }
        }
        else
        {
          *(_DWORD *)(i + 152) = 3; /*0xc538*/
          *(_DWORD *)(i + 144) = 10; /*0xc542*/
        }
        if ( *(_DWORD *)(i + 144) == 5 ) /*0xc627*/
        {
          result = (void *)RstRaidMemberFindCompatible(i + 4); /*0xc631*/
          if ( (_BYTE)result ) /*0xc638*/
            *(_DWORD *)(i + 144) = 6; /*0xc63a*/
        }
      }
    }
    else if ( *(_BYTE *)(i + 162) == 1 && (v1 & 0x2000000) != 0 ) /*0xc653*/
    {
      *(_DWORD *)(i + 152) = 0; /*0xc655*/
      *(_DWORD *)(i + 148) = 5; /*0xc65c*/
      *(_DWORD *)(i + 144) = 18; /*0xc666*/
    }
    else if ( (v1 & 1) != 0 ) /*0xc675*/
    {
      *(_DWORD *)(i + 152) = 0; /*0xc677*/
      *(_DWORD *)(i + 148) = 3; /*0xc67e*/
      *(_DWORD *)(i + 144) = 9; /*0xc688*/
    }
    else
    {
      *(_DWORD *)(i + 148) = 6; /*0xc694*/
      *(_DWORD *)(i + 152) = 11; /*0xc69e*/
      *(_DWORD *)(i + 144) = 20; /*0xc6a8*/
    }
  }
  return result; /*0xc6bc*/
}

// Function: Assert_116 @ 0xc6c4 (0x1e1 bytes)
// Index: 340/906

__int64 __fastcall Assert_116(__int64 a1, unsigned __int16 a2, char a3, char a4)
{
  char v4; // r14
  unsigned __int16 n2; // r12
  __int64 result; // rax
  _BYTE *v10; // rcx
  __int64 v11; // rsi
  __int64 v12; // r13
  __int16 v13; // bx
  _QWORD *v14; // rax
  __int16 n10; // ax
  unsigned int v16; // eax
  unsigned int v17; // ebx

  v4 = a4; /*0xc6e6*/
  n2 = 0; /*0xc6f2*/
  if ( !a1 ) /*0xc6f9*/
    return 1; /*0xc700*/
  v10 = *(_BYTE **)a1; /*0xc705*/
  if ( !v10 || !StrLenA(v10) ) /*0xc711*/
    return 4; /*0xc883*/
  if ( RstStringFindChar(*(_BYTE **)a1, 92) || **(_BYTE **)a1 == 32 ) /*0xc740*/
    return 7; /*0xc72f*/
  if ( !Source_16 ) /*0xc74c*/
    return 1; /*0xc74c*/
  v11 = *(_QWORD *)(Source_16 + 216); /*0xc74e*/
  if ( !v11 || a2 != 0xFFFF && a2 >= *(_WORD *)(v11 + 256) ) /*0xc767*/
    return 1; /*0xc767*/
  v12 = RstArrayEntryLookup(v11, *(unsigned __int8 *)(v11 + 48)); /*0xc775*/
  if ( !v12 ) /*0xc77b*/
    return 1; /*0xc77b*/
  *(_WORD *)(v11 + 342) = a2; /*0xc781*/
  v13 = 0; /*0xc78c*/
  *(_WORD *)(v11 + 348) = *(_WORD *)(a1 + 16); /*0xc78f*/
  *(_DWORD *)(v11 + 352) = *(_DWORD *)(a1 + 8); /*0xc79e*/
  *(_BYTE *)(v11 + 340) = *(_BYTE *)(a1 + 20); /*0xc7a7*/
  *(_DWORD *)(v11 + 356) = *(_DWORD *)(a1 + 12); /*0xc7b0*/
  *(_WORD *)(v11 + 346) = *(_WORD *)(a1 + 18); /*0xc7ba*/
  *(_DWORD *)(v11 + 336) = *(_DWORD *)(a1 + 24); /*0xc7c4*/
  if ( *(_WORD *)v11 ) /*0xc7cc*/
  {
    while ( 1 ) /*0xc7db*/
    {
      v14 = RstLinkedListGetNth((_QWORD **)(v11 + 16), v13); /*0xc7db*/
      if ( !v14 ) /*0xc7e5*/
        return 1; /*0xc832*/
      if ( *((_WORD *)v14 + 28) && *((_BYTE *)v14 + 58) != 3 ) /*0xc7f1*/
        ++n2; /*0xc7f3*/
      if ( (unsigned __int16)++v13 >= *(_WORD *)v11 ) /*0xc7fd*/
      {
        v4 = a4; /*0xc7ff*/
        goto LABEL_20; /*0xc7ff*/
      }
    }
  }
  else
  {
LABEL_20:
    result = RstRaidCheckDiskCountValid(n2, *(unsigned __int16 *)(v11 + 346), 0); /*0xc804*/
    if ( !(_DWORD)result ) /*0xc81d*/
    {
      n10 = *(_WORD *)(a1 + 18); /*0xc81f*/
      if ( n10 == 10 ) /*0xc827*/
        *(_WORD *)(v11 + 346) = 1; /*0xc829*/
      else
        *(_WORD *)(v11 + 346) = n10; /*0xc836*/
      StrnCpy((CHAR16 *)(v12 + 16), *(const CHAR16 **)a1, 0x10u); /*0xc84b*/
      *(_BYTE *)(v12 + 32) = 0; /*0xc856*/
      v16 = RstDeviceGetProperty(v11, a3); /*0xc85a*/
      *(_DWORD *)(a1 + 8) = *(_DWORD *)(v11 + 352); /*0xc865*/
      v17 = v16; /*0xc868*/
      if ( !v16 && a3 == 1 ) /*0xc872*/
        Assert_76(v11, v4); /*0xc87a*/
      return v17; /*0xc87f*/
    }
  }
  return result; /*0xc897*/
}

// Function: RstHelper_c8a8 @ 0xc8a8 (0x201 bytes)
// Index: 341/906

__int64 __fastcall RstHelper_c8a8(unsigned __int8 n0x18, __int64 i)
{
  __int64 v5; // rcx
  __int64 *v6; // rax
  __int64 v7; // rsi
  const CHAR16 *Source; // rbx
  __int64 v9; // rbp
  __int64 v10; // r14
  __int64 v11; // r13
  __int64 v12; // r15
  int v13; // eax
  int v14; // ebx
  unsigned __int8 n24; // al
  int n3; // eax
  int v17; // eax
  bool v18; // zf
  __int64 v19; // rcx
  unsigned int *v20; // rcx
  _DWORD *v21; // rcx
  __int64 v22; // rcx
  int n2; // eax
  __int64 v24; // [rsp+60h] [rbp+18h]

  if ( !Source_16 || !i ) /*0xc8dd*/
    return 1; /*0xc8dd*/
  if ( n0x18 >= *(__int16 *)(Source_16 + 192) ) /*0xc8ed*/
    return 14; /*0xc8f4*/
  v5 = *(_QWORD *)(Source_16 + 216); /*0xc8f9*/
  if ( !v5 ) /*0xc903*/
    return 1; /*0xc903*/
  v6 = (__int64 *)RstArrayEntryLookup(v5, n0x18); /*0xc90d*/
  v7 = (__int64)v6; /*0xc912*/
  if ( !v6 ) /*0xc918*/
    return 1; /*0xc918*/
  Source = (const CHAR16 *)(v6 + 2); /*0xc91e*/
  if ( v6 == (__int64 *)-16LL ) /*0xc925*/
    return 1; /*0xca87*/
  v9 = *v6; /*0xc92b*/
  if ( !*v6 ) /*0xc92b*/
    return 14; /*0xc92b*/
  v10 = v6[1]; /*0xc933*/
  if ( !v10 ) /*0xc93a*/
    return 14; /*0xc93a*/
  v11 = v6[7]; /*0xc93c*/
  if ( !v11 ) /*0xc943*/
    return 14; /*0xc943*/
  v12 = *(_QWORD *)(v11 + 40); /*0xc945*/
  if ( !v12 ) /*0xc94c*/
    return 14; /*0xc94c*/
  v24 = *(_QWORD *)(v9 + 160); /*0xc955*/
  if ( !v24 ) /*0xc95d*/
    return 14; /*0xc95d*/
  MemZero((_BYTE *)i, 0, 168); /*0xc96a*/
  StrnCpy((CHAR16 *)(i + 4), Source, 0x10u); /*0xc97c*/
  v13 = RstCallGetUint108(v9); /*0xc984*/
  *(_DWORD *)i = 168; /*0xc989*/
  *(_DWORD *)(i + 28) = v13; /*0xc992*/
  *(_QWORD *)(i + 40) = *(_QWORD *)(v7 + 40); /*0xc999*/
  *(_DWORD *)(i + 96) = *(_DWORD *)(v24 + 12); /*0xc9a5*/
  *(_DWORD *)(i + 32) = *(unsigned __int16 *)(v12 + 4); /*0xc9ad*/
  *(_DWORD *)(i + 108) = RstLinkedListCountToNode((_QWORD *)v10); /*0xc9b8*/
  v14 = *(unsigned __int16 *)(v12 + 16); /*0xc9bb*/
  *(_DWORD *)(i + 48) = (v14 * (unsigned int)HiiLibReturnZero(v9)) >> 10; /*0xc9ce*/
  n24 = 24; /*0xc9d1*/
  if ( *(_BYTE *)(v12 + 6) <= 0x18u ) /*0xc9da*/
    n24 = *(_BYTE *)(v12 + 6); /*0xc9dc*/
  *(_DWORD *)(i + 52) = n24; /*0xc9e7*/
  n3 = RstConfigArrayGetMaxBlockSize(v7); /*0xc9ea*/
  *(_DWORD *)(i + 88) = n3; /*0xc9ef*/
  *(_DWORD *)(i + 24) = *(__int16 *)(v9 + 130); /*0xc9f9*/
  if ( n3 == 3 ) /*0xc9ff*/
    *(_DWORD *)(i + 96) = 0; /*0xca01*/
  *(_DWORD *)(i + 132) = *(_DWORD *)(v11 + 12); /*0xca0c*/
  *(_DWORD *)(i + 92) = *(unsigned __int8 *)(v12 + 40); /*0xca17*/
  *(_DWORD *)(i + 116) = *(_DWORD *)(v7 + 48); /*0xca1d*/
  v17 = HiiLibReturnZero(v9); /*0xca20*/
  v18 = *(_DWORD *)(i + 32) == 1; /*0xca25*/
  *(_DWORD *)(i + 36) = v17; /*0xca29*/
  if ( v18 && *(_BYTE *)(v10 + 20) > 3u ) /*0xca33*/
    *(_DWORD *)(i + 32) = 10; /*0xca35*/
  RstDeviceSetNotDegraded(i); /*0xca3f*/
  RstDeviceGetStatusStringId(v19); /*0xca44*/
  RstDeviceStatusCodeMap(v20); /*0xca49*/
  RstBlockSizeToStatusCode(v21); /*0xca4e*/
  RstDeviceSetDegraded(v22, n0x18); /*0xca56*/
  n2 = *(_DWORD *)(v7 + 80); /*0xca5b*/
  *(_BYTE *)(i + 160) = -1; /*0xca5e*/
  *(_DWORD *)(i + 156) = n2; /*0xca65*/
  if ( n2 == 2 || n2 == 4 ) /*0xca73*/
    *(_BYTE *)(i + 160) = RstCfgRaidDevLookup(v7); /*0xca7d*/
  return 0; /*0xca9b*/
}

// Function: RstDeviceIsRaidLevel @ 0xcaac (0x88 bytes)
// Index: 342/906

char __fastcall RstDeviceIsRaidLevel(__int16 a1)
{
  unsigned __int8 n0x18; // di
  unsigned int v3; // ebx
  bool j; // zf
  __int64 i[4]; // [rsp+20h] [rbp-B8h] BYREF
  int n5; // [rsp+40h] [rbp-98h]
  int n2; // [rsp+BCh] [rbp-1Ch]
  unsigned __int8 v9; // [rsp+C0h] [rbp-18h]

  n0x18 = 0; /*0xcac3*/
  v3 = RstDeviceCountConfigured(); /*0xcacb*/
  for ( j = v3 == 0; !j; j = v3 == 0 ) /*0xcacd*/
  {
    if ( (v3 & 1) != 0 /*0xcb10*/
      && !(unsigned int)RstHelper_c8a8(n0x18, (__int64)i)
      && n5 == 5
      && (n2 == 2 || n2 == 4)
      && v9 == a1 )
    {
      return 1; /*0xcb1b*/
    }
    ++n0x18; /*0xcb12*/
    v3 >>= 1; /*0xcb15*/
  }
  return 0; /*0xcb2f*/
}

// Function: RstDeviceComputeCapabilityFlags @ 0xcb34 (0x11d bytes)
// Index: 343/906

__int64 __fastcall RstDeviceComputeCapabilityFlags(__int64 i, unsigned __int16 a2)
{
  __int64 result; // rax

  *(_DWORD *)(i + 156) = 0; /*0xcb43*/
  result = (__int64)RstGetGlobalContext(); /*0xcb50*/
  if ( (*(_DWORD *)(result + 34) & 0x400) != 0 || *(_WORD *)(i + 170) == 0x8086 || (*(_BYTE *)(i + 60) & 0x40) == 0 ) /*0xcb75*/
  {
    result = (__int64)RstGetGlobalContext(); /*0xcb84*/
    if ( (*(_DWORD *)(result + 34) & 0x400) != 0 || *(_WORD *)(i + 170) == 0x8086 ) /*0xcb9b*/
    {
      result = *(unsigned int *)(i + 148); /*0xcba9*/
      switch ( (_DWORD)result ) /*0xcbb2*/
      {
        case 3: /*0xcbb2*/
          *(_DWORD *)(i + 156) |= 4u; /*0xcbb4*/
          break;
        case 5: /*0xcbb2*/
          *(_DWORD *)(i + 156) |= 8u; /*0xcbc2*/
          result = RstDeviceIsRaidLevel(a2); /*0xcbcc*/
          if ( (_BYTE)result ) /*0xcbd3*/
            *(_DWORD *)(i + 156) |= 0x20u; /*0xcbd5*/
          break;
        case 1: /*0xcbb2*/
          *(_DWORD *)(i + 156) |= 1u; /*0xcbe3*/
          result = (__int64)RstGetGlobalContext(); /*0xcbe9*/
          if ( (*(_DWORD *)(result + 26) & 0x10) != 0 ) /*0xcbf7*/
            *(_DWORD *)(i + 156) |= 0x40u; /*0xcbf9*/
          if ( !*(_BYTE *)(i + 168) ) /*0xcc00*/
          {
            result = RstDeviceGetFeatureFlagBit(11); /*0xcc0e*/
            if ( (_BYTE)result ) /*0xcc15*/
              *(_DWORD *)(i + 156) |= 0x10u; /*0xcc17*/
          }
          break;
        default:
          if ( *(_DWORD *)(i + 152) != 4 ) /*0xcc27*/
            *(_DWORD *)(i + 156) |= 2u; /*0xcc29*/
          break;
      }
      if ( !*(_BYTE *)(i + 208) ) /*0xcc30*/
        *(_DWORD *)(i + 156) |= 0x100u; /*0xcc39*/
    }
    else
    {
      *(_DWORD *)(i + 156) |= 2u; /*0xcb9d*/
    }
  }
  else
  {
    *(_DWORD *)(i + 156) |= 0x80u; /*0xcb77*/
  }
  return result; /*0xcc4b*/
}

// Function: RstHelper_cc54 @ 0xcc54 (0xda bytes)
// Index: 344/906

__int64 __fastcall RstHelper_cc54(_BYTE *i, unsigned __int16 n16)
{
  __int16 v2; // di
  __int64 v3; // r8
  __int16 n0x18_1; // si
  __int16 n0x18; // bx
  __int16 v8; // ax
  __int64 ia; // [rsp+30h] [rbp-C8h] BYREF
  unsigned __int8 v11[166]; // [rsp+3Ah] [rbp-BEh] BYREF

  v2 = -1; /*0xcc7b*/
  v3 = *(_QWORD *)(Source_16 + 216); /*0xcc81*/
  n0x18_1 = *(unsigned __int8 *)(v3 + 48); /*0xcc8e*/
  n0x18 = 0; /*0xcc93*/
  if ( *(_BYTE *)(v3 + 48) ) /*0xcc8e*/
  {
    do /*0xcce7*/
    {
      RstHelper_c8a8(n0x18, (__int64)&ia); /*0xcca8*/
      if ( !StrnCpy16( /*0xccbf*/
              (_BYTE *)&ia + 4,
              aVolume, // "Volume"
              6) )
      {
        v8 = RstStringToUnsignedInt(v11, 0, 0); /*0xccd4*/
        if ( v8 > v2 ) /*0xccdc*/
          v2 = v8; /*0xccdc*/
      }
      ++n0x18; /*0xcce0*/
    }
    while ( n0x18 < n0x18_1 ); /*0xcce7*/
  }
  return RstHelper_8da8( /*0xcd24*/
           (__int64)i,
           n16,
           "%s%d",
           aVolume, // "Volume"
           v2 + 1);
}

// Function: Assert_29 @ 0xcd30 (0x13a bytes)
// Index: 345/906

__int64 __fastcall Assert_29(unsigned __int8 n24, unsigned __int8 a2, _BYTE *i, unsigned __int8 n0x11)
{
  __int64 v8; // rcx
  _QWORD *v9; // rax
  _QWORD *v10; // rbx
  __int64 v11; // rdx
  __int64 v12; // rbx
  __int64 v13; // rdx
  __int64 v14; // rcx
  __int64 result; // rax
  unsigned __int8 v16[16]; // [rsp+20h] [rbp-C8h] BYREF
  __int64 ia[22]; // [rsp+30h] [rbp-B8h] BYREF

  if ( !Source_16 ) /*0xcd5c*/
    return 2; /*0xcd5c*/
  v8 = *(_QWORD *)(Source_16 + 216); /*0xcd62*/
  if ( !v8 ) /*0xcd6c*/
    return 2; /*0xcd6c*/
  v9 = RstLinkedListGetNth((_QWORD **)(v8 + 16), n24); /*0xcd79*/
  v10 = v9; /*0xcd7e*/
  if ( !v9 ) /*0xcd84*/
    return 2; /*0xcd84*/
  if ( !RstDeviceIsActive((__int64)v9) ) /*0xcd8d*/
    return 2; /*0xcd8d*/
  v11 = v10[6]; /*0xcd9a*/
  if ( (*(_BYTE *)(v11 + 139) & 1) != 0 || Source_16 == -224 ) /*0xcdb9*/
    return 2; /*0xce4c*/
  v12 = RstBufferPoolFindEntry(Source_16 + 224, v11); /*0xcdc4*/
  if ( (unsigned __int8)RstDebugEnabled(v14, v13) && !v12 ) /*0xcdd3*/
    DebugAssert("IsmApi.cpp", 0x1223u, "pJd"); /*0xcde8*/
  v16[0] = -1; /*0xcdf8*/
  result = RstRaidGetPhysicalDiskIndex(v12, a2, v16); /*0xcdfd*/
  if ( !(_DWORD)result && v16[0] != 0xFF ) /*0xce0b*/
  {
    if ( i && n0x11 ) /*0xce15*/
    {
      MemZero(i, 0, n0x11); /*0xce20*/
      if ( !(unsigned int)RstHelper_c8a8(v16[0], (__int64)ia) ) /*0xce2e*/
        RstStringCopyN((__int64)i, (__int64)ia + 4, n0x11); /*0xce43*/
    }
    return 0; /*0xce48*/
  }
  return result; /*0xce65*/
}

// Function: RstHelper_ce6c @ 0xce6c (0x239 bytes)
// Index: 346/906

__int64 RstHelper_ce6cunsigned __int16 a1, __int64 i)
{
  __int64 v5; // rcx
  __int64 v6; // rax
  __int64 v7; // rsi
  __int64 v8; // rdi
  __int64 v9; // rcx
  unsigned int v10; // eax
  __int64 IsEqual; // rax

  if ( !i ) /*0xce89*/
    return 15; /*0xce89*/
  if ( !Source_16 ) /*0xce9f*/
    return 15; /*0xce9f*/
  v5 = *(_QWORD *)(Source_16 + 216); /*0xcea1*/
  if ( !v5 ) /*0xceab*/
    return 15; /*0xceab*/
  v6 = RstLinkedListGetNth(v5 + 16, a1); /*0xceb4*/
  v7 = v6; /*0xceb9*/
  if ( !v6 ) /*0xcebf*/
    return 15; /*0xcebf*/
  v8 = *(_QWORD *)(v6 + 48); /*0xcec1*/
  if ( !v8 ) /*0xcec8*/
    return 15; /*0xce8b*/
  MemZero((_BYTE *)i, 0, 240); /*0xced5*/
  *(_DWORD *)i = 240; /*0xcee8*/
  StrnCpy((CHAR16 *)(i + 4), (const CHAR16 *)(v7 + 18), 0x10u); /*0xceee*/
  *(_QWORD *)(i + 24) = *(_QWORD *)(*(_QWORD *)(v7 + 48) + 88LL); /*0xcefe*/
  *(_DWORD *)(i + 172) = HiiLibReturnZero(v8); /*0xcf07*/
  *(_DWORD *)(i + 60) = *(_DWORD *)(*(_QWORD *)(v7 + 48) + 136LL); /*0xcf17*/
  *(_DWORD *)(i + 132) = *(unsigned __int8 *)(v7 + 58); /*0xcf21*/
  *(_DWORD *)(i + 136) = *(_DWORD *)(v8 + 100); /*0xcf2a*/
  *(_DWORD *)(i + 64) = *(_DWORD *)(v8 + 96); /*0xcf33*/
  *(_DWORD *)(i + 68) = *(_DWORD *)(v8 + 164); /*0xcf3c*/
  *(_WORD *)(i + 72) = *(_WORD *)(v8 + 168); /*0xcf46*/
  *(_DWORD *)(i + 76) = RstGetUint108(v8); /*0xcf53*/
  *(_BYTE *)(i + 208) = *(_BYTE *)(v8 + 201); /*0xcf66*/
  StrnCpy((CHAR16 *)(i + 80), (const CHAR16 *)(v8 + 45), 0x29u); /*0xcf6c*/
  *(_BYTE *)(i + 140) = (*(_DWORD *)(v8 + 100) & 0x10) == 16; /*0xcf80*/
  v9 = *(_QWORD *)(v7 + 40); /*0xcf86*/
  if ( v9 ) /*0xcf8d*/
    *(_DWORD *)(i + 128) = (__int16)RstLinkedListCountToNode(v9); /*0xcfa0*/
  else
    *(_DWORD *)(i + 128) = -1; /*0xcf8f*/
  *(_WORD *)(i + 160) = *(_WORD *)(v8 + 170); /*0xcfb0*/
  *(_BYTE *)(i + 162) = RstDeviceGetCount(v7); /*0xcfbf*/
  *(_WORD *)(i + 170) = *(_WORD *)(v8 + 172); /*0xcfcc*/
  RstDeviceSetMode(i); /*0xcfd3*/
  v10 = RstHelper_02c0(v8); /*0xcfdb*/
  *(_DWORD *)(i + 164) = j_HiiLibGuidIsZero(v10); /*0xcfea*/
  *(_BYTE *)(i + 168) = RstDeviceCheckReservedSuffix(v7); /*0xcff5*/
  IsEqual = HiiLibGuidIsEqual(*(_QWORD *)(v8 + 128)); /*0xd002*/
  if ( IsEqual ) /*0xd00d*/
  {
    *(_DWORD *)(i + 176) = *(_DWORD *)(IsEqual + 28); /*0xd012*/
    *(_DWORD *)(i + 180) = *(_DWORD *)(IsEqual + 36); /*0xd01b*/
    *(_DWORD *)(i + 184) = *(_DWORD *)(IsEqual + 44); /*0xd024*/
    *(_DWORD *)(i + 188) = *(_DWORD *)(IsEqual + 24); /*0xd02d*/
    *(_DWORD *)(i + 192) = *(_DWORD *)(IsEqual + 16); /*0xd036*/
    *(_DWORD *)(i + 196) = *(_DWORD *)IsEqual; /*0xd03e*/
    *(_WORD *)(i + 200) = *(_WORD *)(IsEqual + 83); /*0xd048*/
    *(_DWORD *)(i + 204) = *(_DWORD *)(IsEqual + 8); /*0xd053*/
  }
  *(_QWORD *)(i + 216) = *(_QWORD *)(v8 + 176); /*0xd066*/
  *(_QWORD *)(i + 224) = *(_QWORD *)(v8 + 184); /*0xd074*/
  *(_QWORD *)(i + 232) = *(_QWORD *)(v8 + 192); /*0xd082*/
  RstDeviceComputeCapabilityFlags(i, a1); /*0xd089*/
  return 0; /*0xd09f*/
}

// Function: Assert_115 @ 0xd0a8 (0x216 bytes)
// Index: 347/906

__int64 __fastcall Assert_115(int n5, unsigned __int16 n5_2, char a3, char a4)
{
  __int64 n5_1; // rdx
  __int64 Source; // rcx
  __int64 v7; // rbx
  __int64 v8; // rsi
  __int64 v9; // r12
  __int64 v10; // r14
  unsigned __int16 v11; // r15
  unsigned __int16 v12; // r13
  __int16 v13; // di
  _QWORD *v14; // rax
  __int64 v15; // rax
  unsigned __int16 v16; // di
  unsigned __int16 v18; // [rsp+20h] [rbp-158h]
  unsigned __int16 v19; // [rsp+22h] [rbp-156h]
  __int64 i[7]; // [rsp+30h] [rbp-148h] BYREF
  signed __int32 v21[17]; // [rsp+6Ch] [rbp-10Ch] BYREF
  __int16 v22; // [rsp+B0h] [rbp-C8h]
  char v23; // [rsp+B8h] [rbp-C0h]
  int n2; // [rsp+C4h] [rbp-B4h]
  char v25; // [rsp+D8h] [rbp-A0h]
  __int64 i_1[11]; // [rsp+120h] [rbp-58h] BYREF

  n5_1 = (unsigned int)n5; /*0xd0d2*/
  Source = Source_16; /*0xd0d4*/
  v7 = 0; /*0xd0db*/
  v8 = 0; /*0xd0de*/
  v18 = 0; /*0xd0e8*/
  v9 = 0; /*0xd0ee*/
  v10 = 0; /*0xd0f4*/
  v11 = 0; /*0xd0f7*/
  v12 = 0; /*0xd0fb*/
  v13 = 0; /*0xd0ff*/
  v19 = **(_WORD **)(Source_16 + 216); /*0xd103*/
  if ( v19 ) /*0xd10c*/
  {
    while ( 1 ) /*0xd112*/
    {
      if ( !(_DWORD)n5_1 /*0xd135*/
        || (v14 = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source + 216) + 16LL), v13), RstHelper_02b4(v14[6], n5)) )
      {
        if ( (unsigned int)RstHelper_ce6c(v13, (__int64)i) != 15 /*0xd192*/
          && v21[1] != -1
          && (!n5_2 || !v25)
          && (v23 & 4) == 0
          && !_bittest(v21, 9u) )
        {
          if ( n2 == 2 ) /*0xd1a0*/
          {
            if ( !a3 ) /*0xd1aa*/
            {
              Assert_121(v22, (__int64)i_1); /*0xd1c3*/
              if ( Assert_102(v22, n5_2, a4) ) /*0xd1db*/
                v7 |= 1LL << v13; /*0xd1f5*/
            }
          }
          else if ( n2 == 1 ) /*0xd208*/
          {
            ++v18; /*0xd20a*/
            v15 = 1LL << v13; /*0xd216*/
            v8 |= 1LL << v13; /*0xd219*/
            if ( (v23 & 8) != 0 ) /*0xd224*/
            {
              v10 |= v15; /*0xd226*/
              ++v11; /*0xd229*/
            }
            else
            {
              v9 |= v15; /*0xd22f*/
              ++v12; /*0xd232*/
            }
          }
        }
      }
      if ( (unsigned __int16)++v13 >= v19 ) /*0xd247*/
        break; /*0xd247*/
      Source = Source_16; /*0xd249*/
      LODWORD(n5_1) = n5; /*0xd250*/
    }
  }
  LOBYTE(n5_1) = a4; /*0xd25c*/
  v16 = RstDeviceGetCapability(n5_2, n5_1); /*0xd26b*/
  if ( v18 >= v16 ) /*0xd273*/
  {
    if ( (*((_BYTE *)RstGetGlobalContext() + 30) & 1) == 0 || n5_2 == 1 ) /*0xd287*/
    {
      return v8 | v7; /*0xd29d*/
    }
    else
    {
      if ( v11 >= v16 ) /*0xd28d*/
        v7 |= v10; /*0xd28f*/
      if ( v12 >= v16 ) /*0xd296*/
        return v9 | v7; /*0xd298*/
    }
  }
  return v7; /*0xd2ab*/
}

// Function: RstRaidCheckLevelSupport @ 0xd2c0 (0x8c bytes)
// Index: 348/906

__int16 __fastcall RstRaidCheckLevelSupport(int n5)
{
  __int16 v2; // bx

  v2 = Assert_115(n5, 0, 0, 0) != 0; /*0xd2eb*/
  if ( Assert_115(n5, 1u, 0, 0) ) /*0xd2f5*/
    v2 |= 2u; /*0xd2ff*/
  if ( Assert_115(n5, 5u, 0, 0) ) /*0xd310*/
    v2 |= 4u; /*0xd31a*/
  if ( Assert_115(n5, 0xAu, 0, 0) ) /*0xd32b*/
    return v2 | 8; /*0xd335*/
  return v2; /*0xd346*/
}

// Function: RstRaidLevelToBitmap @ 0xd34c (0x42 bytes)
// Index: 349/906

__int16 __fastcall RstRaidLevelToBitmap(int n5)
{
  char v1; // al
  __int16 n2; // cx

  v1 = RstRaidCheckLevelSupport(n5); /*0xd350*/
  n2 = 1; /*0xd355*/
  if ( (v1 & 1) != 0 ) /*0xd35c*/
    return n2; /*0xd35c*/
  n2 = 2; /*0xd363*/
  if ( (v1 & 2) != 0 ) /*0xd36a*/
    return n2; /*0xd36a*/
  n2 = 4; /*0xd36c*/
  if ( (v1 & 4) != 0 ) /*0xd373*/
    return n2; /*0xd373*/
  n2 = 8; /*0xd375*/
  if ( (v1 & 8) != 0 ) /*0xd37c*/
    return n2; /*0xd37c*/
  n2 = 16; /*0xd37e*/
  if ( (v1 & 0x10) != 0 ) /*0xd385*/
    return n2; /*0xd35e*/
  else
    return 0; /*0xd387*/
}

// Function: Assert_23 @ 0xd390 (0x172 bytes)
// Index: 350/906

__int64 __fastcall Assert_23(int n5, __int64 a2)
{
  __int64 Source; // rcx
  unsigned __int8 v4; // r13
  unsigned int v5; // edi
  unsigned __int16 v6; // bp
  __int16 v7; // bx
  _QWORD *v8; // rax
  __int64 v9; // rsi
  __int64 v10; // rax
  __int64 i[7]; // [rsp+20h] [rbp-118h] BYREF
  signed __int32 v13[19]; // [rsp+5Ch] [rbp-DCh] BYREF
  char v14; // [rsp+A8h] [rbp-90h]
  int n5_1; // [rsp+B4h] [rbp-84h]

  Source = Source_16; /*0xd3b5*/
  v4 = a2; /*0xd3c3*/
  v5 = 0; /*0xd3c6*/
  v6 = **(_WORD **)(Source_16 + 216); /*0xd3c9*/
  v7 = 0; /*0xd3cc*/
  if ( v6 ) /*0xd3d4*/
  {
    while ( 1 ) /*0xd3de*/
    {
      if ( !n5 || (v8 = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source + 216) + 16LL), v7), RstHelper_02b4(v8[6], n5)) ) /*0xd3fd*/
      {
        if ( (unsigned int)RstHelper_ce6c(v7, (__int64)i) != 15 /*0xd44e*/
          && v13[1] != -1
          && (v14 & 4) == 0
          && !_bittest(v13, 9u)
          && n5_1 == 5 )
        {
          v9 = RstLinkedListGetNth((_QWORD **)(*(_QWORD *)(Source_16 + 216) + 16LL), v7)[6]; /*0xd46a*/
          if ( RstDebugEnabled() && !v9 ) /*0xd47b*/
            DebugAssert("IsmApi.cpp", 0x1186u, "pDisk"); /*0xd490*/
          v10 = RstBufferPoolFindEntry(Source_16 + 224, v9); /*0xd4a6*/
          if ( RstConfigBufferSlotIsEmpty(v10) || v7 == v4 ) /*0xd4bf*/
            v5 |= 1 << v7; /*0xd4c8*/
        }
      }
      if ( (unsigned __int16)++v7 >= v6 ) /*0xd4d1*/
        break; /*0xd4d1*/
      Source = Source_16; /*0xd4d3*/
    }
  }
  return v5; /*0xd4f5*/
}

// Function: RstVolumeCheckMixedRaidType @ 0xd504 (0xfa bytes)
// Index: 351/906

__int64 RstVolumeCheckMixedRaidType()
{
  unsigned int v0; // ebx
  unsigned __int8 j; // di
  int v2; // r13d
  unsigned int v3; // r12d
  unsigned __int16 v4; // si
  unsigned int v5; // ebp
  bool k; // zf
  __int64 i_1[3]; // [rsp+20h] [rbp-1B8h] BYREF
  unsigned int v9; // [rsp+3Ch] [rbp-19Ch]
  __int64 i[30]; // [rsp+D0h] [rbp-108h] BYREF

  v0 = 0; /*0xd535*/
  for ( j = 0; j < *(_BYTE *)(*(_QWORD *)(Source_16 + 216) + 48LL); ++j ) /*0xd53b*/
  {
    v2 = -1; /*0xd54d*/
    RstHelper_c8a8(j, (__int64)i_1); /*0xd551*/
    if ( (unsigned int)RstHelper_c8a8(j, (__int64)i_1) ) /*0xd55e*/
      break; /*0xd566*/
    v3 = v9; /*0xd568*/
    v4 = 0; /*0xd56d*/
    v5 = v9; /*0xd571*/
    for ( k = v9 == 0; !k; k = v5 == 0 ) /*0xd574*/
    {
      if ( (v5 & 1) != 0 && !(unsigned int)RstHelper_ce6c(v4, (__int64)i) ) /*0xd58a*/
      {
        if ( v2 != -1 && v2 != (unsigned int)RstDeviceGetRaidLevelByIndex(v4) ) /*0xd5a5*/
        {
          v0 |= v3; /*0xd5bc*/
          break; /*0xd5bc*/
        }
        v2 = RstDeviceGetRaidLevelByIndex(v4); /*0xd5af*/
      }
      v5 >>= 1; /*0xd5b2*/
      ++v4; /*0xd5b4*/
    }
  }
  return v0; /*0xd5f4*/
}

// Function: RstVolCheckMemberSameLevel @ 0xd600 (0xc9 bytes)
// Index: 352/906

char __fastcall RstVolCheckMemberSameLevel(unsigned __int8 j)
{
  char v2; // bl
  char v3; // di
  unsigned __int8 v4; // si
  unsigned __int16 v5; // r8
  __int64 i[7]; // [rsp+20h] [rbp-1A8h] BYREF
  char v7; // [rsp+5Ch] [rbp-16Ch]
  int v8; // [rsp+A0h] [rbp-128h]
  char v9; // [rsp+ACh] [rbp-11Ch]
  _DWORD i_1[44]; // [rsp+110h] [rbp-B8h] BYREF

  if ( (unsigned int)RstHelper_c8a8(j, (__int64)i_1) ) /*0xd61e*/
    return 0; /*0xd629*/
  v2 = 0; /*0xd637*/
  v3 = 0; /*0xd63a*/
  v4 = 0; /*0xd644*/
  if ( **(_WORD **)(Source_16 + 216) ) /*0xd647*/
  {
    v5 = 0; /*0xd64c*/
    do /*0xd6ac*/
    {
      if ( !(unsigned int)RstHelper_ce6c(v5, (__int64)i) && (v7 & 0x10) != 0 && v8 == i_1[27] ) /*0xd676*/
      {
        if ( v2 ) /*0xd67b*/
        {
          if ( v3 != v9 ) /*0xd691*/
            return 0; /*0xd691*/
        }
        else
        {
          v3 = v9; /*0xd67d*/
          v2 = 1; /*0xd685*/
        }
      }
      v5 = ++v4; /*0xd6a4*/
    }
    while ( v4 < (unsigned int)**(_WORD **)(Source_16 + 216) ); /*0xd6ac*/
  }
  return 1; /*0xd6c4*/
}

// Function: RstVolFindFirstMember @ 0xd6cc (0x98 bytes)
// Index: 353/906

char __fastcall RstVolFindFirstMember(unsigned __int8 j)
{
  unsigned __int8 v1; // bl
  unsigned __int16 v2; // r8
  __int64 i[7]; // [rsp+20h] [rbp-1A8h] BYREF
  char v5; // [rsp+5Ch] [rbp-16Ch]
  int v6; // [rsp+A0h] [rbp-128h]
  char v7; // [rsp+ACh] [rbp-11Ch]
  __int64 i_1[13]; // [rsp+110h] [rbp-B8h] BYREF
  int v9; // [rsp+17Ch] [rbp-4Ch]

  if ( (unsigned int)RstHelper_c8a8(j, (__int64)i_1) ) /*0xd6e1*/
    return 0; /*0xd6e1*/
  v1 = 0; /*0xd6f3*/
  if ( !**(_WORD **)(Source_16 + 216) ) /*0xd6fd*/
    return 0; /*0xd748*/
  v2 = 0; /*0xd702*/
  while ( (unsigned int)RstHelper_ce6c(v2, (__int64)i) || (v5 & 0x10) == 0 || v6 != v9 ) /*0xd72c*/
  {
    v2 = ++v1; /*0xd73e*/
    if ( v1 >= (unsigned int)**(_WORD **)(Source_16 + 216) ) /*0xd746*/
      return 0; /*0xd746*/
  }
  return v7; /*0xd752*/
}

// Function: RstVolFindSmallestCapacity @ 0xd764 (0xaf bytes)
// Index: 354/906

unsigned __int64 __fastcall RstVolFindSmallestCapacity(unsigned __int8 j)
{
  unsigned __int64 v1; // rbx
  unsigned __int8 v3; // di
  unsigned __int16 v4; // ax
  __int64 i[3]; // [rsp+20h] [rbp-1A8h] BYREF
  unsigned __int64 v6; // [rsp+38h] [rbp-190h]
  char v7; // [rsp+5Ch] [rbp-16Ch]
  int v8; // [rsp+A0h] [rbp-128h]
  __int64 i_1[13]; // [rsp+110h] [rbp-B8h] BYREF
  int v10; // [rsp+17Ch] [rbp-4Ch]

  v1 = 0; /*0xd780*/
  if ( (unsigned int)RstHelper_c8a8(j, (__int64)i_1) ) /*0xd783*/
    return 0; /*0xd78c*/
  v3 = 0; /*0xd797*/
  if ( **(_WORD **)(Source_16 + 216) ) /*0xd7a1*/
  {
    v4 = 0; /*0xd7a6*/
    do /*0xd7f9*/
    {
      if ( !(unsigned int)RstHelper_ce6c(v4, (__int64)i) && (v7 & 0x10) != 0 && v8 == v10 && (!v1 || v1 > v6) ) /*0xd7da*/
        v1 = v6; /*0xd7dc*/
      v4 = ++v3; /*0xd7f2*/
    }
    while ( v3 < (unsigned int)**(_WORD **)(Source_16 + 216) ); /*0xd7f9*/
  }
  return v1; /*0xd80e*/
}

// Function: DxeInstall_3 @ 0xd814 (0xc4 bytes)
// Index: 355/906

__int64 DxeInstall_3unsigned __int8 a1, char a2)
{
  unsigned __int64 v4; // rbx
  bool v5; // zf
  unsigned __int16 j; // si
  __int64 v7; // rdx
  __int64 v8; // rcx
  __int64 i[8]; // [rsp+20h] [rbp-F8h] BYREF
  int v11; // [rsp+64h] [rbp-B4h]

  v4 = RstVolGetOnlineMemberMask(); /*0xd83e*/
  v5 = v4 == 0; /*0xd841*/
  for ( j = 0; ; ++j ) /*0xd844*/
  {
    if ( v5 ) /*0xd848*/
      return 15; /*0xd848*/
    if ( !(unsigned int)RstHelper_ce6c(j, (__int64)i) && v11 == a1 ) /*0xd864*/
      break; /*0xd864*/
    v4 >>= 1; /*0xd866*/
    v5 = v4 == 0; /*0xd86c*/
  }
  v8 = *(_QWORD *)(RstLinkedListGetNth(*(_QWORD *)(Source_16 + 216) + 16LL, j) + 48); /*0xd88b*/
  if ( !v8 ) /*0xd892*/
    return 15; /*0xd8b5*/
  *(_BYTE *)(v8 + 201) = a2; /*0xd894*/
  LOBYTE(v8) = a1; /*0xd89b*/
  if ( a2 ) /*0xd8a1*/
  {
    LOBYTE(v7) = 1; /*0xd8a3*/
    DxeInstall_2(v8, v7); /*0xd8a5*/
  }
  else
  {
    DxeInstall_1(v8); /*0xd8ac*/
  }
  return 0; /*0xd8d2*/
}

// Function: Assert_19 @ 0xd8d8 (0x1a5 bytes)
// Index: 356/906

__int64 __fastcall Assert_19(unsigned __int8 n24)
{
  __int64 v2; // rcx
  unsigned __int16 n24_1; // bx
  _QWORD *v4; // rax
  __int64 v5; // rdi
  int v6; // eax
  unsigned __int64 v8; // rbx
  unsigned int n0x96; // eax
  _BYTE *Source; // rbx
  __int64 v11; // rdx
  __int64 i[21]; // [rsp+30h] [rbp-F8h] BYREF
  unsigned int v13; // [rsp+DCh] [rbp-4Ch]

  if ( !Source_16 ) /*0xd8f1*/
    return 1; /*0xd8f1*/
  v2 = *(_QWORD *)(Source_16 + 216); /*0xd8f7*/
  if ( !v2 || Source_16 == -224 ) /*0xd90d*/
    return 1; /*0xd90d*/
  n24_1 = n24; /*0xd913*/
  v4 = RstLinkedListGetNth((_QWORD **)(v2 + 16), n24); /*0xd91d*/
  v5 = (__int64)v4; /*0xd922*/
  if ( !v4 ) /*0xd928*/
    return 18; /*0xd928*/
  if ( !v4[8] ) /*0xd92a*/
    return 18; /*0xd92a*/
  v6 = *(_DWORD *)(v4[6] + 136LL); /*0xd935*/
  if ( (v6 & 0x40) == 0 || (v6 & 0x1000000) != 0 || (unsigned int)RstHelper_ce6c(n24_1, (__int64)i) ) /*0xd954*/
    return 18; /*0xd95b*/
  v8 = 3 * (0x1000 / v13 + 384 * (0x100000 / v13)) + ((unsigned int)&loc_1FFFA + 6) / v13 + 161; /*0xd9a0*/
  n0x96 = RstFormatDiskSize(0, *(_QWORD *)(*(_QWORD *)(v5 + 48) + 88LL), v13, 0, 0); /*0xd9b1*/
  if ( *(_QWORD *)(*(_QWORD *)(v5 + 48) + 88LL) < v8 || n0x96 < 0x96 ) /*0xd9c9*/
    return 12; /*0xda76*/
  RstJournalDeviceSetMode(v5, 1); /*0xd9d4*/
  Source = Assert_51((_BYTE *)(Source_16 + 224), *(_QWORD *)(v5 + 48), 1); /*0xd9f3*/
  if ( !RstDebugEnabled() ) /*0xd9fd*/
    goto LABEL_15; /*0xd9fd*/
  if ( !Source ) /*0xda02*/
  {
    DebugAssert("IsmApi.cpp", 0x543u, "pJd"); /*0xda17*/
LABEL_15:
    if ( !Source ) /*0xda1f*/
      return 18; /*0xd962*/
  }
  if ( !Assert_48((__int64)Source) ) /*0xda28*/
  {
    Assert_130((_BYTE *)(Source_16 + 224), Source); /*0xda42*/
    RstJournalDeviceSetMode(v5, 0); /*0xda4c*/
    return 1; /*0xda51*/
  }
  LOBYTE(v11) = 1; /*0xda6b*/
  (***(void (__fastcall ****)(_QWORD, __int64))(v5 + 64))(*(_QWORD *)(v5 + 64), v11); /*0xda70*/
  return 0; /*0xda5e*/
}

// Function: RstRaidCheckLevelConfigurable @ 0xda80 (0x2c bytes)
// Index: 357/906

bool __fastcall RstRaidCheckLevelConfigurable(unsigned int n5)
{
  return *(_BYTE *)(*(_QWORD *)(Source_16 + 216) + 48LL) < 0x18u && RstRaidCheckLevelSupport(n5) != 0; /*0xdaa7*/
}

// Function: RstRaidMemberRemove @ 0xdaac (0xdb bytes)
// Index: 358/906

__int64 __fastcall RstRaidMemberRemove(unsigned __int8 n0x18, unsigned __int8 n24)
{
  __int64 v4; // rcx
  __int64 v5; // rax
  __int64 v7; // rbx
  int n24_1; // ecx
  __int64 v9; // rdi
  __int64 v10; // rcx
  int v11; // r8d

  if ( !Source_16 ) /*0xdac5*/
    return 1; /*0xdac5*/
  v4 = *(_QWORD *)(Source_16 + 216); /*0xdacb*/
  if ( !v4 ) /*0xdad5*/
    return 1; /*0xdb77*/
  v5 = RstArrayEntryLookup(v4, n0x18); /*0xdade*/
  if ( !v5 ) /*0xdae6*/
    return 14; /*0xdae6*/
  v7 = *(_QWORD *)(v5 + 8); /*0xdaf2*/
  if ( !v7 ) /*0xdaf9*/
    return 14; /*0xdae8*/
  n24_1 = 24; /*0xdb03*/
  if ( n24 < 0x19u ) /*0xdb08*/
    n24_1 = n24; /*0xdb08*/
  v9 = *(_QWORD *)(v7 + 8LL * n24_1 + 24); /*0xdb0e*/
  if ( !v9 ) /*0xdb16*/
    return 15; /*0xdb16*/
  v10 = *(_QWORD *)(v9 + 48); /*0xdb18*/
  if ( !v10 ) /*0xdb1f*/
    return 15; /*0xdb70*/
  v11 = *(_DWORD *)(v10 + 136); /*0xdb21*/
  if ( (v11 & 0x10) == 0 || (v11 & 0x40) != 0 || (v11 & 0x84) != 0 ) /*0xdb44*/
    return 16; /*0xdb69*/
  RstDeviceSetFlags(v10, 0x84u); /*0xdb46*/
  RstDeviceClearFlags(*(_QWORD *)(v9 + 48), 1); /*0xdb54*/
  RstConfigArrayNotifyRemove(v7, *(_QWORD *)(v9 + 48)); /*0xdb60*/
  return 0; /*0xdb81*/
}

// Function: RstRaidMemberAdd @ 0xdb88 (0xdd bytes)
// Index: 359/906

__int64 __fastcall RstRaidMemberAdd(unsigned __int8 n0x18, unsigned __int8 n24)
{
  __int64 v4; // rcx
  __int64 v5; // rax
  __int64 v7; // rbx
  int n24_1; // ecx
  __int64 v9; // rbx
  int v10; // ecx
  int n132; // edx
  __int64 v12; // rdx

  if ( !Source_16 ) /*0xdba1*/
    return 1; /*0xdba1*/
  v4 = *(_QWORD *)(Source_16 + 216); /*0xdba7*/
  if ( !v4 ) /*0xdbb1*/
    return 1; /*0xdc55*/
  v5 = RstArrayEntryLookup(v4, n0x18); /*0xdbba*/
  if ( !v5 ) /*0xdbc2*/
    return 14; /*0xdbc2*/
  v7 = *(_QWORD *)(v5 + 8); /*0xdbce*/
  if ( !v7 ) /*0xdbd5*/
    return 14; /*0xdbc9*/
  n24_1 = 24; /*0xdbdf*/
  if ( n24 < 0x19u ) /*0xdbe4*/
    n24_1 = n24; /*0xdbe4*/
  v9 = *(_QWORD *)(v7 + 8LL * n24_1 + 24); /*0xdbea*/
  if ( !v9 || !*(_QWORD *)(v9 + 64) ) /*0xdbf4*/
    return 15; /*0xdc4e*/
  v10 = *(_DWORD *)(*(_QWORD *)(v9 + 48) + 136LL); /*0xdbff*/
  if ( (v10 & 4) != 0 && (v10 & 0x80) == 0 ) /*0xdc16*/
    return 16; /*0xdc16*/
  n132 = 132; /*0xdc1f*/
  if ( (v10 & 0x84) == 0 ) /*0xdc26*/
  {
    if ( (v10 & 0x10) != 0 ) /*0xdc45*/
      return 16; /*0xdc1d*/
    n132 = 128; /*0xdc47*/
  }
  RstDeviceClearFlags(*(_QWORD *)(v9 + 48), n132); /*0xdc2b*/
  LOBYTE(v12) = 1; /*0xdc34*/
  (***(void (__fastcall ****)(_QWORD, __int64))(v9 + 64))(*(_QWORD *)(v9 + 64), v12); /*0xdc39*/
  return 0; /*0xdc5f*/
}

// Function: RstRaidMemberSetActiveOrRemove @ 0xdc68 (0x36 bytes)
// Index: 360/906

__int64 __fastcall RstRaidMemberSetActiveOrRemove(__int64 a1, unsigned __int8 n0x18)
{
  __int64 Source; // rax

  Source = Source_16; /*0xdc6e*/
  if ( *(_WORD *)(Source_16 + 2720) ) /*0xdc78*/
  {
    Source = RstRaidSetMemberActive(a1, n0x18); /*0xdc82*/
    if ( !*(_WORD *)(a1 + 40) ) /*0xdc87*/
      return RstRaidMemberMarkRemoving(a1, 0xFFu); /*0xdc93*/
  }
  return Source; /*0xdc98*/
}

// Function: RstStringLastColonIndex @ 0xdca0 (0x43 bytes)
// Index: 361/906

char __fastcall RstStringLastColonIndex(CHAR16 *Destination)
{
  CHAR16 *Destination_1; // rax
  unsigned __int8 n0x30; // dl

  Destination_1 = (CHAR16 *)((char *)Destination + (unsigned __int16)StrLenA(Destination) - 1); /*0xdcb2*/
  n0x30 = *(_BYTE *)Destination_1; /*0xdcb7*/
  if ( *(_BYTE *)Destination_1 == 58 ) /*0xdcbc*/
    return 0; /*0xdcbc*/
  while ( n0x30 >= 0x30u && n0x30 <= 0x39u && Destination_1 > Destination ) /*0xdcce*/
  {
    Destination_1 = (CHAR16 *)((char *)Destination_1 - 1); /*0xdcd0*/
    n0x30 = *(_BYTE *)Destination_1; /*0xdcd3*/
  }
  if ( *(_BYTE *)Destination_1 != 58 ) /*0xdcdd*/
    return 0; /*0xdcbe*/
  else
    return (_BYTE)Destination_1 - (_BYTE)Destination; /*0xdcdf*/
}

// Function: RstFormatStringCopy @ 0xdce4 (0x15f bytes)
// Index: 362/906

CHAR16 *__fastcall RstFormatStringCopy(__int64 a1, const CHAR16 *Source, unsigned __int8 n0x11, unsigned __int8 Length, char a5)
{
  UINTN Length_1; // rsi
  __int64 Length_2; // r13
  CHAR16 *Destination; // rax
  unsigned __int8 v11; // bp
  CHAR16 *i; // rdi
  CHAR16 *i_1; // rdx
  __int64 v14; // r8
  char v15; // cl
  CHAR16 *i_2; // rbx
  CHAR16 *i_3; // rax
  __int64 Length_3; // rdx
  char v19; // si

  Length_1 = Length; /*0xdd01*/
  Length_2 = Length; /*0xdd11*/
  Destination = (CHAR16 *)MemAllocPages(Length); /*0xdd14*/
  v11 = 0; /*0xdd19*/
  i = Destination; /*0xdd1c*/
  if ( (_BYTE)Length_1 && n0x11 && Source && Destination ) /*0xdd3d*/
  {
    StrnCpy(Destination, Source, Length_1); /*0xdd4c*/
    if ( a5 ) /*0xdd5c*/
    {
      i_1 = i; /*0xdd66*/
      v14 = (unsigned __int8)(((unsigned __int8)(Length_1 - 1) >> 1) + 1); /*0xdd71*/
      do /*0xdd86*/
      {
        v15 = *(_BYTE *)i_1; /*0xdd75*/
        *(_BYTE *)i_1 = *((_BYTE *)i_1 + 1); /*0xdd7a*/
        *((_BYTE *)i_1++ + 1) = v15; /*0xdd7c*/
        --v14; /*0xdd83*/
      }
      while ( v14 ); /*0xdd86*/
    }
    i_2 = i; /*0xdd88*/
    i_3 = i; /*0xdd8b*/
    Length_3 = (unsigned __int8)Length_1; /*0xdd93*/
    do /*0xddb6*/
    {
      if ( *(_BYTE *)i_3 > 0x20u ) /*0xdd9c*/
      {
        *(_BYTE *)i_2 = *(_BYTE *)i_3; /*0xdd9e*/
        i_2 = (CHAR16 *)((char *)i_2 + 1); /*0xdda0*/
        ++v11; /*0xdda3*/
      }
      if ( *((_BYTE *)i_2 - 1) == 58 ) /*0xddaa*/
        *((_BYTE *)i_2 - 1) = 59; /*0xddac*/
      i_3 = (CHAR16 *)((char *)i_3 + 1); /*0xddb0*/
      --Length_3; /*0xddb3*/
    }
    while ( Length_3 ); /*0xddb6*/
    v19 = *(_BYTE *)i_2; /*0xddb8*/
    *(_BYTE *)i_2 = 0; /*0xddc6*/
    if ( v11 <= n0x11 - 1 ) /*0xddcb*/
    {
      RstStringCopyN(a1, (__int64)i, v11); /*0xddfe*/
      *(_BYTE *)(v11 + a1) = 0; /*0xde07*/
    }
    else
    {
      RstStringCopyN(a1, (__int64)i + v11 - n0x11 + 1, n0x11 - 1); /*0xdde3*/
      *(_BYTE *)(n0x11 + a1 - 1) = 0; /*0xddec*/
    }
    *(_BYTE *)i_2 = v19; /*0xde14*/
    MemZero(i, 0, Length_2); /*0xde17*/
    return (CHAR16 *)MemFree(); /*0xde1f*/
  }
  return Destination; /*0xde38*/
}

// Function: RstLinkedListPopFront @ 0xde44 (0x24 bytes)
// Index: 363/906

__int64 *__fastcall RstLinkedListPopFront(__int64 a1)
{
  __int64 *result; // rax
  __int64 v2; // r8

  result = *(__int64 **)a1; /*0xde44*/
  if ( *(_QWORD *)a1 ) /*0xde44*/
  {
    if ( result == *(__int64 **)(a1 + 8) ) /*0xde50*/
      *(_QWORD *)(a1 + 8) = 0; /*0xde52*/
    v2 = *result; /*0xde57*/
    *(_QWORD *)a1 = *result; /*0xde5a*/
    if ( v2 ) /*0xde60*/
      *(_QWORD *)(v2 + 8) = 0; /*0xde62*/
  }
  return result; /*0xde67*/
}

// Function: RstLinkedListGetNth @ 0xde68 (0x24 bytes)
// Index: 364/906

_QWORD *__fastcall RstLinkedListGetNth(_QWORD **a1, __int16 a2)
{
  _QWORD *result; // rax

  if ( a2 < 0 ) /*0xde6f*/
    return 0; /*0xde71*/
  result = *a1; /*0xde74*/
  while ( result && a2 > 0 ) /*0xde7d*/
  {
    result = (_QWORD *)*result; /*0xde7f*/
    --a2; /*0xde82*/
  }
  return result; /*0xde73*/
}

// Function: RstLinkedListPrepend @ 0xde8c (0x2a bytes)
// Index: 365/906

_QWORD *__fastcall RstLinkedListPrepend(_QWORD *a1, _QWORD *a2)
{
  _QWORD *v2; // rax

  v2 = (_QWORD *)a1[1]; /*0xde8c*/
  if ( v2 ) /*0xde93*/
  {
    *v2 = a2; /*0xde95*/
    a2[1] = a1[1]; /*0xde9c*/
  }
  else
  {
    *a1 = a2; /*0xdea2*/
    a2[1] = 0; /*0xdea5*/
  }
  *a2 = 0; /*0xdeaa*/
  a1[1] = a2; /*0xdeb1*/
  return a1; /*0xdeb5*/
}

// Function: RstLinkedListInsertAfter @ 0xdeb8 (0x2e bytes)
// Index: 366/906

_QWORD *__fastcall RstLinkedListInsertAfter(_QWORD *a1, _QWORD *a2, _QWORD *j)
{
  if ( (_QWORD *)*a1 == j ) /*0xdebb*/
    *a1 = a2; /*0xdebd*/
  else
    *(_QWORD *)j[1] = a2; /*0xdec6*/
  *a2 = j; /*0xdec9*/
  a2[1] = j[1]; /*0xded0*/
  j[1] = a2; /*0xded4*/
  if ( a2 == (_QWORD *)a1[1] ) /*0xdedc*/
    *a2 = 0; /*0xdede*/
  return a1; /*0xdee5*/
}

// Function: RstLinkedListRemove @ 0xdee8 (0x42 bytes)
// Index: 367/906

__int64 __fastcall RstLinkedListRemove(__int64 a1, _QWORD *a2)
{
  _QWORD *v2; // rax
  _QWORD *v3; // r8

  if ( a2 == *(_QWORD **)a1 ) /*0xdeee*/
    *(_QWORD *)a1 = **(_QWORD **)a1; /*0xdef3*/
  v2 = *(_QWORD **)(a1 + 8); /*0xdef6*/
  if ( a2 == v2 ) /*0xdefd*/
    *(_QWORD *)(a1 + 8) = v2[1]; /*0xdf03*/
  if ( *a2 ) /*0xdf07*/
    *(_QWORD *)(*a2 + 8LL) = a2[1]; /*0xdf13*/
  v3 = (_QWORD *)a2[1]; /*0xdf17*/
  if ( v3 ) /*0xdf1e*/
    *v3 = *a2; /*0xdf23*/
  return a1; /*0xdf29*/
}

// Function: RstLinkedListInsert @ 0xdf2c (0xa bytes)
// Index: 368/906

__int64 __fastcall RstLinkedListInsert(__int64 *a1, __int64 *a2)
{
  __int64 result; // rax

  result = *a1; /*0xdf2c*/
  *a2 = *a1; /*0xdf2f*/
  *a1 = (__int64)a2; /*0xdf32*/
  return result; /*0xdf35*/
}

// Function: RstLinkedListPop @ 0xdf38 (0xf bytes)
// Index: 369/906

_QWORD *__fastcall RstLinkedListPop(_QWORD **a1)
{
  _QWORD *result; // rax

  result = *a1; /*0xdf38*/
  if ( *a1 ) /*0xdf38*/
    *a1 = (_QWORD *)*result; /*0xdf43*/
  return result; /*0xdf46*/
}

// Function: Assert_82 @ 0xdf48 (0xec bytes)
// Index: 370/906

char __fastcall Assert_82(__int64 Source, _QWORD *NewContext, _BYTE *i)
{
  char result; // al
  int v7; // edi
  __int64 v8; // rbx
  int n132; // edx

  result = RstArrayAllSlotsEmpty(Source + 2984); /*0xdf75*/
  if ( !result && *(__int16 *)(Source + 32936) < 48 ) /*0xdf8a*/
  {
    v7 = ((*((_DWORD *)i + 5) & 2) << 9) | 0x8038; /*0xdf99*/
    if ( (i[20] & 4) != 0 ) /*0xdfa3*/
      v7 = ((*((_DWORD *)i + 5) & 2) << 9) | 0x1008038; /*0xdfa5*/
    v8 = RstDeviceArrayFindByName(Source + 2984, i + 69); /*0xdfb9*/
    if ( !v8 ) /*0xdfbf*/
      v8 = RstConfigArrayAddEntry(Source + 2984, i + 69, v7, *(_QWORD *)i); /*0xdfd8*/
    Assert_21(v8, NewContext, i, v7); /*0xdfe7*/
    n132 = 132; /*0xdfec*/
    if ( (*(_BYTE *)(v8 + 136) & 0x84) == 0 ) /*0xdffa*/
      n132 = 128; /*0xdffc*/
    RstDeviceClearFlags(v8, n132); /*0xe001*/
    return RstJournalAddDevice(*(_QWORD *)(Source + 216), v8); /*0xe010*/
  }
  return result; /*0xe029*/
}

// Function: Assert_136 @ 0xe034 (0x43 bytes)
// Index: 371/906

__int64 Assert_136__int64 Source)
{
  __int64 v2; // rcx
  __int64 result; // rax

  if ( !*(_BYTE *)(Source + 32944) ) /*0xe03a*/
  {
    Assert_74(*(_QWORD *)(Source + 208)); /*0xe04d*/
    v2 = *(_QWORD *)(Source + 208); /*0xe052*/
    *(_BYTE *)(Source + 32944) = 1; /*0xe059*/
    Assert_128(v2); /*0xe060*/
    return RstConfigBlockFlushAll(*(_QWORD *)(Source + 216)); /*0xe06c*/
  }
  return result; /*0xe071*/
}

// Function: Assert_86 @ 0xe078 (0xd0 bytes)
// Index: 372/906

__int64 __fastcall Assert_86(__int64 Source, __int64 a2)
{
  __int64 v2; // rsi
  __int16 n24_1; // cx
  __int16 n24; // bx
  __int64 v8; // rax

  v2 = 0; /*0xe08c*/
  n24_1 = *(_WORD *)(Source + 192); /*0xe091*/
  n24 = 0; /*0xe09e*/
  if ( n24_1 > 0 ) /*0xe0a5*/
  {
    do /*0xe0c1*/
    {
      if ( *(_QWORD *)(Source + 8LL * n24) == 4294871467LL ) /*0xe0b4*/
        break; /*0xe0b4*/
      ++n24; /*0xe0b6*/
    }
    while ( n24 < *(__int16 *)(Source + 192) ); /*0xe0c1*/
  }
  if ( n24 == n24_1 ) /*0xe0c6*/
  {
    if ( n24 >= 24 ) /*0xe0cc*/
      return 0; /*0xe0d0*/
    *(_WORD *)(Source + 192) = n24_1 + 1; /*0xe0d6*/
  }
  ++*(_BYTE *)(*(_QWORD *)(Source + 216) + 48LL); /*0xe0e7*/
  if ( !RstBufferPoolGetBuffer(*(_QWORD **)(Source + 200), 1) ) /*0xe0fa*/
    return 0; /*0xe0fa*/
  v8 = RstMemPoolAlloc(192); /*0xe101*/
  if ( v8 ) /*0xe109*/
    v2 = Assert_49(v8, n24, a2); /*0xe119*/
  *(_QWORD *)(Source + 8LL * n24) = v2; /*0xe120*/
  RstConfigBlockResetCount(); /*0xe12b*/
  return v2; /*0xe142*/
}

// Function: Assert_119 @ 0xe148 (0x148 bytes)
// Index: 373/906

__int64 __fastcall Assert_119(__int64 Source, __int64 a2)
{
  __int64 v2; // r13
  __int16 n0x19_1; // bp
  bool v6; // zf
  unsigned __int8 n0x19; // r12
  int n24_1; // ecx
  int n24; // eax
  unsigned __int8 n0x19_2; // si
  int n24_3; // ecx
  int n24_2; // eax
  __int64 v13; // rcx
  __int64 result; // rax

  v2 = *(_QWORD *)(a2 + 144); /*0xe167*/
  n0x19_1 = *(unsigned __int8 *)(v2 + 20); /*0xe175*/
  *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a2 + 160) + 16LL) + 8LL) = 3; /*0xe17d*/
  Assert_104(a2); /*0xe188*/
  v6 = *(_BYTE *)(a2 + 188) == 0; /*0xe18d*/
  *(_BYTE *)(a2 + 185) = 1; /*0xe194*/
  if ( !v6 ) /*0xe19b*/
  {
    n0x19 = 0; /*0xe1a0*/
    if ( n0x19_1 > 0 ) /*0xe1a5*/
    {
      n24_1 = 0; /*0xe1a7*/
      do /*0xe1d3*/
      {
        n24 = 24; /*0xe1a9*/
        if ( n0x19 < 0x19u ) /*0xe1b7*/
          n24 = n24_1; /*0xe1b7*/
        RstDeviceClearFlags(*(_QWORD *)(*(_QWORD *)(v2 + 8LL * n24 + 24) + 48LL), 12714663); /*0xe1c5*/
        n24_1 = ++n0x19; /*0xe1cd*/
      }
      while ( n0x19 < n0x19_1 ); /*0xe1d3*/
    }
  }
  RstConfigArrayRemoveEntryByIndex(*(_QWORD *)(Source + 216), *(_QWORD *)(a2 + 136)); /*0xe1e3*/
  if ( *(_BYTE *)(a2 + 188) ) /*0xe1e8*/
  {
    n0x19_2 = 0; /*0xe1f4*/
    if ( n0x19_1 > 0 ) /*0xe1f9*/
    {
      n24_3 = 0; /*0xe1fb*/
      do /*0xe234*/
      {
        n24_2 = 24; /*0xe1fd*/
        if ( n0x19_2 < 0x19u ) /*0xe206*/
          n24_2 = n24_3; /*0xe206*/
        v13 = *(_QWORD *)(*(_QWORD *)(v2 + 8LL * n24_2 + 24) + 48LL); /*0xe210*/
        if ( (*(_DWORD *)(v13 + 136) & 0x10) != 0 ) /*0xe21f*/
          RstDeviceSetFlags(v13, 0x40u); /*0xe226*/
        n24_3 = ++n0x19_2; /*0xe22e*/
      }
      while ( n0x19_2 < n0x19_1 ); /*0xe234*/
    }
  }
  RstLinkedListInsertAt(*(__int64 ***)(Source + 200), 1, a2); /*0xe245*/
  result = 4294871467LL; /*0xe252*/
  *(_QWORD *)(Source + 8LL * *(__int16 *)(a2 + 130)) = 4294871467LL; /*0xe257*/
  if ( *(_BYTE *)(a2 + 188) ) /*0xe25b*/
    return RstConfigBlockRemoveAndFree(*(_QWORD *)(Source + 216), *(_QWORD **)(a2 + 144)); /*0xe272*/
  return result; /*0xe286*/
}

// Function: Assert_89 @ 0xe290 (0xa3 bytes)
// Index: 374/906

__int64 __fastcall Assert_89(__int64 a1, __int64 a2, char a3, __int64 a4, int a5, unsigned int a6)
{
  _BYTE Source[80]; // [rsp+30h] [rbp-58h] BYREF

  if ( (*(_DWORD *)(a2 + 136) & 8) != 0 ) /*0xe2b6*/
  {
    RstConfigBlockZero((__int64)Source); /*0xe2d7*/
    RstConfigBlockInit((__int64)Source, a2, a3, a4, a5, a6); /*0xe302*/
    j_Assert_18(a2, (__int64)Source); /*0xe30f*/
    return RstConfigBufferSetSize(Source); /*0xe319*/
  }
  else
  {
    *(_WORD *)(a1 + 2720) = 5; /*0xe2bd*/
    *(_WORD *)(a1 + 2722) = 4; /*0xe2c9*/
    return 4; /*0xe2c4*/
  }
}

// Function: RstDeviceContextGetNth @ 0xe334 (0x47 bytes)
// Index: 375/906

__int64 __fastcall RstDeviceContextGetNth(__int64 Source, __int16 n0x18)
{
  __int16 v2; // r10
  __int64 v3; // r9
  bool v4; // cc
  __int16 v5; // r8

  v2 = *(_WORD *)(Source + 192); /*0xe334*/
  v3 = 0; /*0xe33c*/
  v4 = v2 > 0; /*0xe33f*/
  v5 = 0; /*0xe343*/
  while ( v4 ) /*0xe347*/
  {
    if ( *(_QWORD *)(Source + 8LL * v5) != 4294871467LL && !n0x18-- ) /*0xe359*/
      return *(_QWORD *)(Source + 8LL * v5); /*0xe373*/
    v4 = ++v5 < v2; /*0xe369*/
  }
  return v3; /*0xe37a*/
}

// Function: Assert_56 @ 0xe37c (0xa0 bytes)
// Index: 376/906

__int64 __fastcall Assert_56(__int64 Source, _WORD *a2)
{
  bool i; // cc
  __int16 n0x18; // dx
  __int64 v6; // rbx
  __int64 v7; // rax

  for ( i = *a2 < *(_WORD *)(Source + 192); i; i = *a2 < *(_WORD *)(Source + 192) ) /*0xe398*/
  {
    n0x18 = (*a2)++; /*0xe39d*/
    v6 = RstDeviceContextGetNth(Source, n0x18); /*0xe3ae*/
    if ( v6 ) /*0xe3b4*/
    {
      if ( RstDebugEnabled() && !*(_QWORD *)(v6 + 136) ) /*0xe3bf*/
        DebugAssert("RaidIsm.cpp", 0x16Du, "rDev->getCfgRaidDev()"); /*0xe3dc*/
      v7 = *(_QWORD *)(v6 + 136); /*0xe3e1*/
      if ( v7 ) /*0xe3eb*/
      {
        if ( *(_DWORD *)(v7 + 80) == 2 || *(_DWORD *)(v7 + 80) == 4 ) /*0xe3f7*/
          return v6; /*0xe408*/
      }
    }
  }
  return 0; /*0xe416*/
}

// Function: RstDeviceListFindByDevice @ 0xe41c (0x48 bytes)
// Index: 377/906

char __fastcall RstDeviceListFindByDevice(__int64 Source, __int64 a2)
{
  __int64 v2; // rax
  __int64 v4; // r8
  __int64 v5; // rcx
  __int64 *v6; // rax

  v2 = *(_QWORD *)(Source + 216); /*0xe41c*/
  v4 = *(_QWORD *)(v2 + 16); /*0xe426*/
  *(_QWORD *)(v2 + 8) = v4; /*0xe42a*/
  while ( v4 ) /*0xe431*/
  {
    if ( *(_QWORD *)(v4 + 48) == a2 && *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(v4 + 40) + 248LL) + 36LL) ) /*0xe444*/
      return 1; /*0xe460*/
    v5 = *(_QWORD *)(Source + 216); /*0xe44a*/
    v6 = *(__int64 **)(v5 + 8); /*0xe451*/
    v4 = *v6; /*0xe455*/
    *(_QWORD *)(v5 + 8) = *v6; /*0xe458*/
  }
  return 0; /*0xe460*/
}

// Function: RstConfigBlockInitFrom @ 0xe464 (0x28 bytes)
// Index: 378/906

__int64 __fastcall RstConfigBlockInitFrom(__int64 Source, char n42, __int64 a3, int a4, _BYTE *i, _BYTE *Sourcea)
{
  return RstConfigBlockInit((__int64)Sourcea, 0, n42, a3, a4, (unsigned int)i); /*0xe487*/
}

// Function: RstLinkedListFindByKey @ 0xe48c (0x7e bytes)
// Index: 379/906

__int64 __fastcall RstLinkedListFindByKey(__int64 Source, _BYTE *a2)
{
  bool v4; // cc
  __int16 v5; // bx
  __int64 v6; // rcx

  v4 = *(_WORD *)(Source + 192) > 0; /*0xe4a8*/
  v5 = 0; /*0xe4af*/
  while ( v4 ) /*0xe4b2*/
  {
    v6 = *(_QWORD *)(Source + 8LL * v5); /*0xe4b8*/
    if ( v6 != 4294871467LL && !StrnCpy16((_BYTE *)(v6 + 112), a2, 0xFFFF) ) /*0xe4db*/
      return *(_QWORD *)(Source + 8LL * v5); /*0xe4f1*/
    v4 = ++v5 < *(_WORD *)(Source + 192); /*0xe4e0*/
  }
  return 0; /*0xe504*/
}

// Function: RstDriverContextInit @ 0xe50c (0xa5 bytes)
// Index: 380/906

__int64 __fastcall RstDriverContextInit(__int64 Source)
{
  __int64 v1; // rbx
  __int64 v3; // rax
  __int64 v4; // rax
  __int64 v5; // rax
  __int64 result; // rax

  v1 = 0; /*0xe516*/
  *(_WORD *)(Source + 192) = 0; /*0xe520*/
  *(_QWORD *)Source = 4294871467LL; /*0xe527*/
  *(_BYTE *)(Source + 32944) = 0; /*0xe52a*/
  RstBufferPoolInit(); /*0xe530*/
  *(_BYTE *)(Source + 34256) = 0; /*0xe538*/
  v3 = RstMemPoolAlloc(80); /*0xe53e*/
  if ( v3 ) /*0xe546*/
    v4 = RstPplRecoveryLogInitEx(v3); /*0xe54b*/
  else
    v4 = 0; /*0xe552*/
  *(_QWORD *)(Source + 208) = v4; /*0xe55a*/
  v5 = RstMemPoolAlloc(368); /*0xe561*/
  if ( v5 ) /*0xe569*/
    v1 = RstDevicePoolInit(v5); /*0xe573*/
  *(_QWORD *)(Source + 216) = v1; /*0xe580*/
  RstBufferPoolInitEntries((_BYTE *)(Source + 224)); /*0xe587*/
  result = RstArrayInitAllSlots(Source + 2984); /*0xe593*/
  i_2 = i_1; /*0xe5a4*/
  return result; /*0xe5ab*/
}

// Function: RstGetData88 @ 0xe5b4 (0x5 bytes)
// Index: 381/906

__int64 __fastcall RstGetData88(__int64 a1)
{
  return *(_QWORD *)(a1 + 88); /*0xe5b8*/
}

// Function: RstGetOffset45 @ 0xe5bc (0x5 bytes)
// Index: 382/906

__int64 __fastcall RstGetOffset45(__int64 a1)
{
  return a1 + 45; /*0xe5c0*/
}

// Function: RstGetUint108 @ 0xe5c4 (0x4 bytes)
// Index: 383/906

__int64 __fastcall RstGetUint108(__int64 a1)
{
  return *(unsigned int *)(a1 + 108); /*0xe5c7*/
}

// Function: RstSetUint108 @ 0xe5c8 (0x4 bytes)
// Index: 384/906

void __fastcall RstSetUint108(__int64 a1, int a2)
{
  *(_DWORD *)(a1 + 108) = a2; /*0xe5c8*/
}

// Function: RstDevicePoolInit @ 0xe5cc (0x14d bytes)
// Index: 385/906

__int64 __fastcall RstDevicePoolInit(__int64 a1)
{
  __int64 n144; // rdi
  _QWORD *v3; // rax
  _QWORD *v4; // rax
  __int64 *v5; // rdi
  __int64 n25; // rsi
  __int64 v7; // rax
  __int64 v8; // rax
  __int64 n12; // rdi
  __int64 v10; // rax
  __int64 *v11; // rax

  n144 = 144; /*0xe5eb*/
  *(_QWORD *)(a1 + 24) = 0; /*0xe5f0*/
  *(_QWORD *)(a1 + 16) = 0; /*0xe5f4*/
  *(_QWORD *)(a1 + 40) = 0; /*0xe5f8*/
  *(_QWORD *)(a1 + 32) = 0; /*0xe5fc*/
  *(_QWORD *)(a1 + 272) = 0; /*0xe600*/
  *(_QWORD *)(a1 + 264) = 0; /*0xe607*/
  *(_QWORD *)(a1 + 280) = 0; /*0xe60e*/
  *(_QWORD *)(a1 + 296) = 0; /*0xe615*/
  *(_QWORD *)(a1 + 288) = 0; /*0xe61c*/
  *(_WORD *)a1 = 0; /*0xe623*/
  do /*0xe653*/
  {
    v3 = (_QWORD *)RstMemPoolAlloc(80); /*0xe62c*/
    if ( v3 ) /*0xe634*/
      v4 = RstIoCompletionNodeInit(v3); /*0xe639*/
    else
      v4 = 0; /*0xe640*/
    RstLinkedListPrepend((_QWORD *)(a1 + 32), v4); /*0xe64a*/
    --n144; /*0xe64f*/
  }
  while ( n144 ); /*0xe653*/
  *(_BYTE *)(a1 + 48) = 0; /*0xe655*/
  v5 = (__int64 *)(a1 + 56); /*0xe659*/
  n25 = 25; /*0xe65d*/
  do /*0xe689*/
  {
    v7 = RstMemPoolAlloc(104); /*0xe667*/
    if ( v7 ) /*0xe66f*/
      v8 = RstNvCacheRaidConfigInit(v7); /*0xe674*/
    else
      v8 = 0; /*0xe67b*/
    *v5++ = v8; /*0xe67e*/
    --n25; /*0xe685*/
  }
  while ( n25 ); /*0xe689*/
  *(_WORD *)(a1 + 256) = 0; /*0xe68b*/
  n12 = 12; /*0xe693*/
  do /*0xe6c5*/
  {
    v10 = RstMemPoolAlloc(512); /*0xe69b*/
    if ( v10 ) /*0xe6a3*/
      v11 = (__int64 *)RstJournalInit(v10); /*0xe6a8*/
    else
      v11 = 0; /*0xe6af*/
    RstLinkedListInsert((__int64 *)(a1 + 280), v11); /*0xe6bc*/
    --n12; /*0xe6c1*/
  }
  while ( n12 ); /*0xe6c5*/
  *(_BYTE *)(a1 + 340) = 1; /*0xe6d6*/
  *(_QWORD *)(a1 + 312) = 0; /*0xe6dd*/
  *(_DWORD *)(a1 + 320) = 0; /*0xe6e4*/
  *(_DWORD *)(a1 + 336) = 5; /*0xe6eb*/
  *(_QWORD *)(a1 + 328) = 0; /*0xe6f5*/
  *(_QWORD *)(a1 + 296) = 0; /*0xe6ff*/
  *(_QWORD *)(a1 + 288) = 0; /*0xe706*/
  return a1; /*0xe712*/
}

// Function: RstLinkedListInsertSorted @ 0xe71c (0x74 bytes)
// Index: 386/906

__int64 *__fastcall RstLinkedListInsertSorted(__int64 i, unsigned int a2)
{
  __int64 *v4; // rax
  __int64 *v5; // rbx
  _QWORD *j; // r8

  v4 = RstLinkedListPopFront(i + 32); /*0xe734*/
  v5 = v4; /*0xe739*/
  if ( v4 ) /*0xe73f*/
  {
    RstDeviceClearCounts(v4); /*0xe744*/
    for ( j = *(_QWORD **)(i + 16); ; j = (_QWORD *)*j ) /*0xe749*/
    {
      if ( !j ) /*0xe75e*/
      {
        RstLinkedListPrepend((_QWORD *)(i + 16), v5); /*0xe767*/
        goto LABEL_7; /*0xe767*/
      }
      if ( a2 < *(_DWORD *)(j[6] + 96LL) ) /*0xe756*/
        break; /*0xe756*/
    }
    RstLinkedListInsertAfter((_QWORD *)(i + 16), v5, (__int64)j); /*0xe789*/
LABEL_7:
    ++*(_WORD *)i; /*0xe76c*/
  }
  return v5; /*0xe77c*/
}

// Function: RstLinkedListContains @ 0xe790 (0x1b bytes)
// Index: 387/906

char __fastcall RstLinkedListContains(__int64 a1, _QWORD *i)
{
  _QWORD *j; // rax

  for ( j = *(_QWORD **)(a1 + 264); j; j = (_QWORD *)*j ) /*0xe790*/
  {
    if ( j == i ) /*0xe79c*/
    {
      LOBYTE(j) = 1; /*0xe7a8*/
      return (char)j; /*0xe7a8*/
    }
  }
  return (char)j; /*0xe7a6*/
}

// Function: RstEntryBufferAllocSorted @ 0xe7ac (0x6e bytes)
// Index: 388/906

__int64 __fastcall RstEntryBufferAllocSorted(__int64 a1, __int64 a2)
{
  __int64 v2; // r9
  __int64 v4; // rdx
  __int64 v5; // r8
  __int64 v6; // r8
  __int64 v7; // r8

  v2 = a1 + 288; /*0xe7b0*/
  v4 = 0; /*0xe7ba*/
  v5 = *(_QWORD *)(a1 + 288); /*0xe7bc*/
  if ( v5 ) /*0xe7c2*/
    v6 = v5 - 8; /*0xe7c4*/
  else
    v6 = 0; /*0xe7ca*/
  if ( v6 ) /*0xe7d0*/
  {
    while ( *(_DWORD *)(a2 + 24) >= *(_DWORD *)(v6 + 24) ) /*0xe7d9*/
    {
      v7 = *(_QWORD *)(v6 + 8); /*0xe7db*/
      if ( v7 ) /*0xe7e2*/
        v6 = v7 - 8; /*0xe7e4*/
      else
        v6 = 0; /*0xe7ea*/
      if ( !v6 ) /*0xe7f0*/
        goto LABEL_10; /*0xe7f0*/
    }
    return RstLinkedListInsertAfter(v2, a2 + 8); /*0xe813*/
  }
  else
  {
LABEL_10:
    if ( a2 ) /*0xe7f5*/
      v4 = a2 + 8; /*0xe7f7*/
    return RstLinkedListPrepend(v2, v4); /*0xe7fe*/
  }
}

// Function: RstConfigBlockFlushAll @ 0xe81c (0x48 bytes)
// Index: 389/906

__int64 __fastcall RstConfigBlockFlushAll(__int64 a1)
{
  __int64 i; // rbx
  __int64 result; // rax
  __int64 v3; // rbx

  for ( i = *(_QWORD *)(a1 + 288); ; i = *(_QWORD *)(v3 + 8) )
  {
    v3 = i ? i - 8 : 0LL;
    if ( !v3 ) /*0xe85c*/
      break; /*0xe85c*/
    if ( (*(_BYTE *)(v3 + 100) & 4) == 0 ) /*0xe82f*/
    {
      result = RstProtocolEfiDispatch(v3); /*0xe834*/
      *(_BYTE *)(Source_16 + 34256) = 1; /*0xe840*/
    }
  }
  return result; /*0xe85e*/
}

// Function: RstConfigBlockRemoveEntry @ 0xe864 (0x48 bytes)
// Index: 390/906

char __fastcall RstConfigBlockRemoveEntry(_WORD *a1, __int64 a2)
{
  RstDeviceClearFlags(*(_QWORD *)(a2 + 48)); /*0xe878*/
  RstLinkedListRemove(a1 + 8, a2); /*0xe884*/
  RstLinkedListPrepend(a1 + 16, a2); /*0xe890*/
  --*a1; /*0xe8a0*/
  return 1; /*0xe8a6*/
}

// Function: RstConfigBlockClone @ 0xe8ac (0x48 bytes)
// Index: 391/906

__int64 __fastcall RstConfigBlockClone(__int64 a1)
{
  __int64 v2; // rbx

  v2 = RstLinkedListPop(a1 + 280); /*0xe8c8*/
  RstConfigBlockReset(v2); /*0xe8cb*/
  ++*(_WORD *)(a1 + 256); /*0xe8d0*/
  RstLinkedListPrepend(a1 + 264, v2); /*0xe8e1*/
  return v2; /*0xe8ee*/
}

// Function: RstLinkedListSkipN @ 0xe8f4 (0x1d bytes)
// Index: 392/906

_QWORD *__fastcall RstLinkedListSkipN(__int64 a1, __int16 a2)
{
  _QWORD *result; // rax

  result = *(_QWORD **)(a1 + 264); /*0xe8f4*/
  while ( result && a2 ) /*0xe902*/
  {
    result = (_QWORD *)*result; /*0xe904*/
    --a2; /*0xe907*/
  }
  return result; /*0xe90f*/
}

// Function: RstLinkedListFindFirstUnused @ 0xe914 (0x77 bytes)
// Index: 393/906

__int64 __fastcall RstLinkedListFindFirstUnused(__int64 a1, _BYTE *a2)
{
  __int16 v4; // bx

  v4 = 0; /*0xe930*/
  if ( !*(_BYTE *)(a1 + 48) ) /*0xe933*/
    return 0; /*0xe969*/
  while ( !a2 || StrnCpy16(a2, (_BYTE *)(*(_QWORD *)(a1 + 8LL * v4 + 56) + 16LL), 16) ) /*0xe95b*/
  {
    if ( ++v4 >= *(unsigned __int8 *)(a1 + 48) ) /*0xe967*/
      return 0; /*0xe967*/
  }
  return *(_QWORD *)(a1 + 8LL * v4 + 56); /*0xe97a*/
}

// Function: Assert_10 @ 0xe98c (0x1e2 bytes)
// Index: 394/906

__int64 __fastcall Assert_10(__int64 a1)
{
  __int64 v2; // rsi
  __int64 v3; // rbx
  __int64 v5; // r11
  char n2; // al
  int n3; // eax
  __int64 Destination; // rax
  __int64 v9; // rbp
  __int64 v10; // rdi

  v2 = *(_QWORD *)(a1 + 8LL * *(unsigned __int8 *)(a1 + 48) + 56); /*0xe9a7*/
  v3 = Assert_86(Source_16, v2); /*0xe9bb*/
  if ( !v3 ) /*0xe9c1*/
    return 2; /*0xe9c6*/
  Assert_132((__int64 *)v2); /*0xe9ce*/
  v5 = *(_QWORD *)(v3 + 144); /*0xe9d3*/
  n2 = *(_BYTE *)(v5 + 224); /*0xe9da*/
  if ( (unsigned __int8)n2 >= 2u ) /*0xe9e6*/
    n2 = 2; /*0xe9e8*/
  if ( n2 == 1 ) /*0xe9f4*/
    *(_BYTE *)(*(_QWORD *)(*(_QWORD *)(v5 + 248) + 8LL) + 58LL) = 0; /*0xea01*/
  *(_WORD *)(v2 + 64) = ++*(_WORD *)(*(_QWORD *)(v5 + 248) + 32LL); /*0xea1b*/
  if ( *(_WORD *)(a1 + 346) != 5 ) /*0xea2b*/
    return 0; /*0xea2b*/
  n3 = *(_DWORD *)(a1 + 336); /*0xea2d*/
  if ( n3 < 0 ) /*0xea35*/
    goto LABEL_14; /*0xea35*/
  if ( n3 <= 1 ) /*0xea39*/
    return 0; /*0xea72*/
  if ( n3 != 2 ) /*0xea3e*/
  {
    if ( n3 == 3 ) /*0xea43*/
      return 0; /*0xea43*/
    if ( n3 != 4 ) /*0xea48*/
    {
      if ( n3 != 5 ) /*0xea4c*/
      {
LABEL_14:
        if ( RstDebugEnabled() ) /*0xea4e*/
          DebugAssert("RaidCfgMgr.cpp", 0x337u, "((BOOLEAN)(0==1))"); /*0xea6a*/
        *(_DWORD *)(v2 + 80) = 1; /*0xea6f*/
        return 0; /*0xea6f*/
      }
      return 0; /*0xea4c*/
    }
  }
  if ( RstDebugEnabled() && !*(_QWORD *)(a1 + 328) ) /*0xea92*/
    DebugAssert("RaidCfgMgr.cpp", 0x312u, "m_pRwhJd"); /*0xeaaf*/
  Destination = RstBufferPoolFindEntry(Source_16 + 224, *(_QWORD *)(*(_QWORD *)(a1 + 328) + 48LL)); /*0xeacd*/
  if ( Destination ) /*0xead5*/
  {
    v9 = RstRaidEntryLookup(Destination); /*0xeadf*/
    if ( v9 ) /*0xeae5*/
    {
      v10 = *(_QWORD *)(a1 + 328); /*0xeae7*/
      MemZero((_BYTE *)(v2 + 84), 0, 16); /*0xeaf8*/
      RstStringCopyN(v2 + 84, v10 + 18, 16); /*0xeb0b*/
      *(_QWORD *)(v2 + 72) = v9; /*0xeb10*/
    }
    else if ( RstDebugEnabled() ) /*0xeb19*/
    {
      DebugAssert("RaidCfgMgr.cpp", 0x32Au, "((BOOLEAN)(0==1))"); /*0xeb39*/
    }
    return 0; /*0xeb14*/
  }
  if ( RstDebugEnabled() ) /*0xeb43*/
    DebugAssert("RaidCfgMgr.cpp", 0x31Du, "((BOOLEAN)(0==1))"); /*0xeb5f*/
  return 39; /*0xea83*/
}

// Function: RstConfigArrayRemoveEntryByIndex @ 0xeb70 (0x94 bytes)
// Index: 395/906

__int64 __fastcall RstConfigArrayRemoveEntryByIndex(__int64 a1, __int64 a2)
{
  __int64 v2; // rsi
  __int64 v5; // rdx
  __int64 v6; // r8
  __int64 v7; // rax
  __int64 v8; // rax
  __int64 v9; // r9

  v2 = *(_QWORD *)(a2 + 8); /*0xeb7f*/
  RstConfigArrayRemoveEntry(v2, a2); /*0xeb8c*/
  v7 = (unsigned __int8)--*(_BYTE *)(a1 + 48); /*0xeb94*/
  if ( a2 != *(_QWORD *)(a1 + 8 * v7 + 56) ) /*0xeb9d*/
  {
    v6 = 0; /*0xeba2*/
    if ( (_BYTE)v7 ) /*0xeba9*/
    {
      do /*0xebe4*/
      {
        if ( a2 == *(_QWORD *)(a1 + 8LL * (__int16)v6 + 56) ) /*0xebb4*/
        {
          v8 = *(unsigned __int8 *)(a1 + 48); /*0xebb6*/
          v9 = *(_QWORD *)(a1 + 8 * v8 + 56); /*0xebba*/
          *(_QWORD *)(a1 + 8 * v8 + 56) = a2; /*0xebbf*/
          *(_QWORD *)(a1 + 8LL * (__int16)v6 + 56) = v9; /*0xebc4*/
          if ( *(_QWORD *)v9 ) /*0xebc9*/
            *(_QWORD *)(*(_QWORD *)v9 + 136LL) = v9; /*0xebd1*/
        }
        LOWORD(v6) = v6 + 1; /*0xebdc*/
      }
      while ( (__int16)v6 < *(unsigned __int8 *)(a1 + 48) ); /*0xebe4*/
    }
  }
  LOBYTE(v5) = 1; /*0xebed*/
  return (***(__int64 (__fastcall ****)(_QWORD, __int64, __int64))(v2 + 248))(*(_QWORD *)(v2 + 248), v5, v6);
}

// Function: RstConfigBlockRemoveAndFree @ 0xec04 (0x42 bytes)
// Index: 396/906

__int64 __fastcall RstConfigBlockRemoveAndFree(__int64 a1, _QWORD *a2)
{
  RstLinkedListRemove(a1 + 264, a2); /*0xec1b*/
  RstLinkedListInsert(a1 + 280, a2); /*0xec2a*/
  --*(_WORD *)(a1 + 256); /*0xec39*/
  return 0xFFFF; /*0xec40*/
}

// Function: Assert_1 @ 0xec48 (0x315 bytes)
// Index: 397/906

__int64 __fastcall Assert_1(__int64 a1, char a2, char a3)
{
  __int16 v3; // ax
  __int64 i_1; // r13
  char v6; // r12
  char v7; // r14
  char v8; // r15
  __int64 n24; // rsi
  _QWORD *v10; // rcx
  __int64 i; // rsi
  __int64 v13; // rbp
  __int64 v14; // rbx
  int v15; // ebx
  int v16; // ecx
  __int64 v17; // rcx
  int v18; // ebp
  __int64 i_2; // rbx
  __int64 v20; // rcx
  __int64 n24_1; // rax
  bool v22; // zf
  __int64 *v23; // rbx
  int n2; // eax
  _QWORD v25[31]; // [rsp+20h] [rbp-F8h] BYREF

  v3 = *(_WORD *)(a1 + 342); /*0xec68*/
  i_1 = 0; /*0xec77*/
  v6 = 0; /*0xec7a*/
  v7 = 0; /*0xec7d*/
  v8 = 0; /*0xec80*/
  LOWORD(n24) = 0; /*0xec83*/
  if ( v3 < 0 || (unsigned __int16)v3 >= *(_WORD *)(a1 + 256) ) /*0xec93*/
  {
    if ( v3 != -1 ) /*0xed6d*/
      return 19; /*0xed74*/
    v16 = *(unsigned __int16 *)(a1 + 256); /*0xed79*/
    if ( v16 + 1 > 12 ) /*0xed86*/
      return 3; /*0xed8d*/
    *(_WORD *)(a1 + 342) = v16; /*0xed92*/
    v17 = *(_QWORD *)(a1 + 280); /*0xed99*/
    *(_QWORD *)(a1 + 304) = v17; /*0xeda0*/
    RstConfigBlockReset(v17); /*0xeda7*/
    v18 = 0; /*0xedac*/
    i_2 = *(_QWORD *)(a1 + 16); /*0xedae*/
    *(_QWORD *)(a1 + 8) = i_2; /*0xedb4*/
    if ( !i_2 ) /*0xedbb*/
      return 8; /*0xedbb*/
    do /*0xee60*/
    {
      if ( *(_WORD *)(i_2 + 56) ) /*0xedc1*/
      {
        if ( v18 && (unsigned int)HiiLibReturnZero(*(_QWORD *)(i_2 + 48)) != v18 ) /*0xedda*/
          return 43; /*0xed64*/
        v18 = HiiLibReturnZero(*(_QWORD *)(i_2 + 48)); /*0xedec*/
        if ( *(_BYTE *)(i_2 + 58) == 3 ) /*0xedee*/
        {
          if ( !RstDeviceIsActive(i_2) ) /*0xedf9*/
            return 18; /*0xedf9*/
          i_1 = i_2; /*0xee02*/
          ++v6; /*0xee05*/
        }
        else
        {
          if ( RstDeviceIsActive(i_2) ) /*0xee0a*/
            return 18; /*0xee0a*/
          v20 = *(_QWORD *)(i_2 + 48); /*0xee19*/
          if ( (*(_BYTE *)(v20 + 136) & 3) != 0 ) /*0xee24*/
            return 18; /*0xed5a*/
          n24_1 = (__int16)n24; /*0xee2a*/
          LOWORD(n24) = n24 + 1; /*0xee33*/
          v22 = (*(_BYTE *)(v20 + 100) & 8) == 0; /*0xee36*/
          v25[n24_1] = i_2; /*0xee3a*/
          if ( v22 ) /*0xee3f*/
            v7 = 1; /*0xee46*/
          else
            v8 = 1; /*0xee41*/
        }
      }
      i_2 = **(_QWORD **)(a1 + 8); /*0xee54*/
      *(_QWORD *)(a1 + 8) = i_2; /*0xee59*/
    }
    while ( i_2 ); /*0xee60*/
    if ( !(_WORD)n24 ) /*0xee6b*/
      return 8; /*0xef3d*/
    if ( (_WORD)n24 == 1 ) /*0xee74*/
    {
      if ( !a3 ) /*0xee7d*/
        return 9; /*0xee82*/
    }
    else if ( (__int16)n24 > 24 ) /*0xee8b*/
    {
      return 10; /*0xee92*/
    }
    if ( !_bittest((const signed __int32 *)(a1 + 356), 0xAu) && v7 && v8 && a2 ) /*0xeeb2*/
      return 21; /*0xeeb9*/
    if ( (__int16)n24 > 0 ) /*0xeec1*/
    {
      v23 = v25; /*0xeec3*/
      n24 = (unsigned __int16)n24; /*0xeec8*/
      do /*0xeee6*/
      {
        Assert_58(*(_QWORD *)(a1 + 304), *v23++); /*0xeed5*/
        --n24; /*0xeee3*/
      }
      while ( n24 ); /*0xeee6*/
    }
  }
  else
  {
    v10 = *(_QWORD **)(a1 + 264); /*0xec99*/
    while ( v10 && v3 ) /*0xeca5*/
    {
      v10 = (_QWORD *)*v10; /*0xeca7*/
      --v3; /*0xecaa*/
    }
    *(_QWORD *)(a1 + 304) = v10; /*0xecb2*/
    if ( !RstRaidVolumeTypeValid((__int64)v10) ) /*0xecb9*/
      return 11; /*0xecc7*/
    for ( i = *(_QWORD *)(a1 + 16); ; i = **(_QWORD **)(a1 + 8) ) /*0xeccc*/
    {
      *(_QWORD *)(a1 + 8) = i; /*0xecd0*/
      if ( !i ) /*0xecd7*/
        break; /*0xecd7*/
      if ( *(_WORD *)(i + 56) ) /*0xecdd*/
      {
        v13 = *(_QWORD *)(i + 48); /*0xece3*/
        v14 = *(_QWORD *)(a1 + 304); /*0xece7*/
        if ( RstDebugEnabled() ) /*0xecee*/
        {
          if ( !*(_DWORD *)(v14 + 280) ) /*0xecf9*/
            DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0xed14*/
        }
        v15 = *(_DWORD *)(v14 + 280); /*0xed19*/
        if ( (unsigned int)HiiLibReturnZero(v13) != v15 ) /*0xed29*/
          return 43; /*0xed29*/
        if ( *(_BYTE *)(i + 58) == 3 ) /*0xed2f*/
        {
          if ( !RstDeviceIsActive(i) ) /*0xed3d*/
            return 18; /*0xed3d*/
          i_1 = i; /*0xed3f*/
          ++v6; /*0xed42*/
        }
      }
    }
  }
  n2 = *(_DWORD *)(a1 + 336); /*0xeef1*/
  if ( *(_WORD *)(a1 + 346) == 5 ) /*0xef03*/
  {
    if ( n2 == 2 || n2 == 4 ) /*0xef0d*/
    {
      if ( v6 == 1 && i_1 ) /*0xef25*/
        return 0; /*0xef25*/
    }
    else if ( !v6 && !i_1 ) /*0xef17*/
    {
      return 0; /*0xef1b*/
    }
    return 42; /*0xef27*/
  }
  else
  {
    if ( !n2 || n2 == 5 ) /*0xef34*/
      return 0; /*0xef34*/
    return 41; /*0xef36*/
  }
}

// Function: RstDeviceListClearActive @ 0xef60 (0x4d bytes)
// Index: 398/906

__int64 __fastcall RstDeviceListClearActive(__int64 a1, __int64 n2)
{
  __int64 i; // rax
  __int64 v4; // rcx
  unsigned __int8 v5; // [rsp+30h] [rbp+8h] BYREF

  i = *(unsigned __int16 *)(a1 + 342); /*0xef66*/
  if ( *(_WORD *)(a1 + 344) != (_WORD)i ) /*0xef77*/
  {
    v4 = *(_QWORD *)(a1 + 304); /*0xef79*/
    v5 = 0; /*0xef80*/
    while ( 1 ) /*0xef9d*/
    {
      i = RstSmallArrayPop(v4, &v5); /*0xef9d*/
      if ( !i ) /*0xefa5*/
        break; /*0xefa5*/
      RstDeviceListEntrySetActive(i, 0); /*0xef8c*/
      v4 = *(_QWORD *)(a1 + 304); /*0xef91*/
    }
  }
  return i; /*0xefa7*/
}

// Function: RstLinkedListIndexOf @ 0xefb0 (0x25 bytes)
// Index: 399/906

char __fastcall RstLinkedListIndexOf(__int64 a1, _QWORD *a2)
{
  _QWORD *v2; // rax
  char v3; // cl

  v2 = *(_QWORD **)(a1 + 16); /*0xefb0*/
  if ( !a2 || !v2 ) /*0xefbc*/
    return -1; /*0xefcf*/
  v3 = 0; /*0xefbe*/
  while ( v2 != a2 ) /*0xefc3*/
  {
    v2 = (_QWORD *)*v2; /*0xefc5*/
    ++v3; /*0xefc8*/
    if ( !v2 ) /*0xefcd*/
      return -1; /*0xefcd*/
  }
  return v3; /*0xefd1*/
}

// Function: RstLinkedListFindData @ 0xefd8 (0x16 bytes)
// Index: 400/906

_QWORD *__fastcall RstLinkedListFindData(__int64 a1, __int64 a2)
{
  _QWORD *result; // rax

  for ( result = *(_QWORD **)(a1 + 16); result && result[6] != a2; result = (_QWORD *)*result ) /*0xefd8*/
    ; /*0xefe4*/
  return result; /*0xefec*/
}

// Function: RstLinkedListFindByName @ 0xeff0 (0x51 bytes)
// Index: 401/906

__int64 *__fastcall RstLinkedListFindByName(__int64 a1, _BYTE *a2)
{
  __int64 *v2; // rbx

  v2 = *(__int64 **)(a1 + 16); /*0xefff*/
  if ( a2 ) /*0xf00b*/
  {
    while ( v2 && StrnCpy16(a2, (_BYTE *)v2 + 18, 16) ) /*0xf027*/
      v2 = (__int64 *)*v2; /*0xf029*/
  }
  return v2; /*0xf03b*/
}

// Function: RstArrayEntryLookup @ 0xf044 (0x12 bytes)
// Index: 402/906

__int64 __fastcall RstArrayEntryLookup(__int64 a1, unsigned __int16 n0x18)
{
  if ( n0x18 <= 0x18u ) /*0xf048*/
    return *(_QWORD *)(a1 + 8LL * n0x18 + 56); /*0xf050*/
  else
    return 0; /*0xf04a*/
}

// Function: RstDeviceGetProperty @ 0xf058 (0x7dd bytes)
// Index: 403/906

__int64 __fastcall RstDeviceGetProperty(__int64 a1, char a2)
{
  unsigned int n0x30000000_1; // eax
  __int64 n0x18; // rcx
  __int64 v6; // r12
  int v7; // esi
  __int64 v8; // rax
  __int64 v9; // rdi
  __int64 result; // rax
  __int64 v11; // rbx
  unsigned int v12; // eax
  __int64 n2_2; // rdx
  unsigned int n2; // ebx
  char n2_1; // cl
  __int16 v16; // r13
  char v17; // al
  __int64 v18; // rbx
  __int16 v19; // r15
  unsigned __int64 v20; // rax
  __int64 v21; // rbx
  unsigned __int64 v22; // rdi
  unsigned int v23; // r12d
  __int64 v24; // rbx
  unsigned int v25; // eax
  __int64 v26; // rbx
  unsigned __int64 v27; // rdi
  __int64 v28; // rbx
  unsigned __int64 v29; // r13
  __int64 v30; // rbx
  unsigned int v31; // r14d
  __int64 v32; // rbx
  unsigned __int64 v33; // rdi
  __int64 v34; // rbx
  unsigned int v35; // edi
  __int64 v36; // rbx
  __int64 v37; // rbx
  __int64 n2_3; // rdx
  unsigned __int64 v39; // rbx
  __int64 v40; // rdi
  __int64 v41; // rbx
  __int64 v42; // rdi... [12091 chars total]

// Function: RstJournalAddDevice @ 0xf838 (0x80 bytes)
// Index: 404/906

__int64 __fastcall RstJournalAddDevice(__int64 i, __int64 a2)
{
  __int64 *i_1; // rax
  __int64 i_3; // rbx
  __int64 *i_2; // rax

  i_1 = RstLinkedListFindByName(i, (_BYTE *)(a2 + 28)); /*0xf856*/
  i_3 = (__int64)i_1; /*0xf85b*/
  if ( i_1 ) /*0xf861*/
  {
    RstJournalEntryInit(i_1, (const CHAR16 *)(a2 + 28), a2); /*0xf86d*/
  }
  else
  {
    i_2 = RstLinkedListInsertSorted(i, *(_DWORD *)(a2 + 96)); /*0xf87a*/
    i_3 = (__int64)i_2; /*0xf87f*/
    if ( i_2 ) /*0xf885*/
    {
      RstJournalEntryInit(i_2, (const CHAR16 *)(a2 + 28), a2); /*0xf891*/
      RstDeviceListEntrySetActive(i_3, 0); /*0xf89b*/
    }
  }
  return i_3; /*0xf8b2*/
}

// Function: RstDeviceListUpdateStatus @ 0xf8b8 (0xcd bytes)
// Index: 405/906

void __fastcall RstDeviceListUpdateStatus(__int64 a1)
{
  _QWORD *v1; // rbx
  _QWORD *v3; // rbp
  __int64 v4; // rdx
  __int64 v5; // rsi
  __int64 v6; // rcx
  __int64 v7; // rdx
  void (__fastcall ***v8)(_QWORD, __int64); // rcx

  v1 = *(_QWORD **)(a1 + 16); /*0xf8cc*/
  if ( v1 ) /*0xf8d6*/
  {
    do /*0xf96a*/
    {
      v3 = (_QWORD *)*v1; /*0xf8e0*/
      v4 = *(unsigned int *)(v1[6] + 136LL); /*0xf8e3*/
      if ( (*(_DWORD *)(v1[6] + 136LL) & 0x10) != 0 ) /*0xf8f0*/
      {
        v5 = v1[6]; /*0xf916*/
        if ( (*(_DWORD *)(v5 + 136) & 0x400) != 0 ) /*0xf925*/
        {
          LOBYTE(v4) = -38; /*0xf92e*/
          if ( (unsigned int)RstProtocolCallEntry5(*(_QWORD *)(v5 + 128), v4) == 2 ) /*0xf938*/
          {
            RstDeviceSetFlags(v5, 512); /*0xf942*/
            v6 = v1[5]; /*0xf947*/
            LOBYTE(v7) = 1; /*0xf94b*/
            if ( v6 ) /*0xf950*/
              v8 = *(void (__fastcall ****)(_QWORD, __int64))(v6 + 248); /*0xf952*/
            else
              v8 = (void (__fastcall ***)(_QWORD, __int64))v1[8]; /*0xf95b*/
            (**v8)(v8, v7); /*0xf962*/
          }
        }
      }
      else if ( ((v4 & 2) == 0 || !v1[5]) && (v4 & 0x40) == 0 ) /*0xf907*/
      {
        RstConfigBlockRemoveEntry(a1, v1); /*0xf90f*/
      }
      v1 = v3; /*0xf964*/
    }
    while ( v3 ); /*0xf96a*/
  }
}

// Function: Assert_27 @ 0xf988 (0x156 bytes)
// Index: 406/906

__int64 __fastcall Assert_27(__int64 a1, _BYTE *Source, __int64 a3)
{
  __int64 v6; // rax
  __int64 v7; // rbx
  __int64 v8; // rdi
  __int64 v9; // rbp

  *(_BYTE *)(a1 + 362) = 1; /*0xf9a4*/
  *(_WORD *)(a1 + 360) = 0; /*0xf9ae*/
  v6 = RstLinkedListFindByKey(Source_16, Source); /*0xf9c3*/
  if ( v6 ) /*0xf9cb*/
    v7 = *(_QWORD *)(v6 + 136); /*0xf9cd*/
  else
    v7 = *(_QWORD *)(a1 + 8LL * *(unsigned __int8 *)(a1 + 48) + 56); /*0xf9da*/
  RstCfgRaidDevCopy(v7, (__int64)Source, a3); /*0xf9e8*/
  if ( !*(_WORD *)(a1 + 360) ) /*0xf9ed*/
    return 0; /*0xf9ed*/
  if ( !*(_BYTE *)(a1 + 362) ) /*0xf9fb*/
    return 0; /*0xf9fb*/
  v8 = Assert_86(Source_16, v7); /*0xfa17*/
  if ( !v8 ) /*0xfa1d*/
    return 0; /*0xfac1*/
  Assert_132((__int64 *)v7); /*0xfa26*/
  v9 = *(_QWORD *)(v8 + 144); /*0xfa2b*/
  if ( RstDebugEnabled() && !*(_DWORD *)(v9 + 280) ) /*0xfa3c*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0xfa58*/
  *(_DWORD *)(v8 + 104) = *(_DWORD *)(v9 + 280); /*0xfa63*/
  if ( RstDebugEnabled() && !*(_DWORD *)(v8 + 104) ) /*0xfa70*/
    DebugAssert("RaidCfgMgr.cpp", 0x252u, "raidDev->logBlockSize != ( 0 )"); /*0xfa89*/
  RstConfigArrayGetMinWriteSize(v8); /*0xfa91*/
  if ( (*(_DWORD *)(v7 + 48) & 0x20) == 0 && (unsigned int)RstConfigArrayGetMaxBlockSize(v7) != 3 ) /*0xfaaf*/
    RstEntryBufferAllocSorted(a1, v8); /*0xfab7*/
  return v7; /*0xfad7*/
}

// Function: Assert_28 @ 0xfae0 (0x14f bytes)
// Index: 407/906

__int64 __fastcall Assert_28(__int64 a1, __int64 a2, __int64 a3)
{
  _BYTE *i_1; // rbp
  __int64 v6; // rdi
  unsigned int v7; // edi
  _BYTE *i_2; // [rsp+20h] [rbp-78h]
  _BYTE *i; // [rsp+30h] [rbp-68h] BYREF
  char v11; // [rsp+38h] [rbp-60h]
  __int16 v12; // [rsp+3Ah] [rbp-5Eh]
  __int64 Source[10]; // [rsp+40h] [rbp-58h] BYREF

  i = 0; /*0xfaf7*/
  v11 = 0; /*0xfafc*/
  v12 = 1; /*0xfb0f*/
  RstBufferPoolRealloc((__int64)&i, 0); /*0xfb17*/
  if ( RstDebugEnabled() && !i ) /*0xfb2b*/
    DebugAssert("RaidCfgMgr.cpp", 0x3A7u, "sbuf.ptr()"); /*0xfb40*/
  i_1 = i; /*0xfb45*/
  if ( a2 ) /*0xfb4d*/
  {
    v6 = *(_QWORD *)(a2 + 144); /*0xfb4f*/
    if ( RstDebugEnabled() && !*(_DWORD *)(v6 + 280) ) /*0xfb5f*/
      DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0xfb7b*/
    v7 = *(_DWORD *)(v6 + 280); /*0xfb80*/
  }
  else
  {
    v7 = HiiLibReturnZero(a3); /*0xfb90*/
  }
  if ( RstDebugEnabled() && !v7 ) /*0xfb9d*/
    DebugAssert("RaidCfgMgr.cpp", 0x3AAu, "nBlkSz != ( 0 )"); /*0xfbb2*/
  MemZero(i_1, 0, v7); /*0xfbbf*/
  RstConfigBlockZero((__int64)Source); /*0xfbc9*/
  LODWORD(i_2) = (_DWORD)i_1; /*0xfbe7*/
  RstConfigBlockInitFrom(Source_16, 42, 0, v7, i_2, Source); /*0xfbeb*/
  if ( a2 ) /*0xfbf8*/
    (**(void (__fastcall ***)(__int64, __int64 *))a2)(a2, Source); /*0xfc00*/
  else
    j_Assert_18(a3, (__int64)Source); /*0xfc07*/
  return RstBufferPoolLock((__int64)i); /*0xfc2a*/
}

// Function: Assert_108 @ 0xfc30 (0x3a bytes)
// Index: 408/906

__int64 Assert_108__int64 a1, __int64 *a2)
{
  __int64 v2; // rbx
  __int64 result; // rax

  v2 = *a2; /*0xfc3a*/
  result = RstDeviceSetStatusBits(*a2); /*0xfc43*/
  if ( byte_2794F == 1 ) /*0xfc4f*/
    return Assert_28(a1, v2, 0); /*0xfc5a*/
  return result; /*0xfc64*/
}

// Function: RstDeviceListInsertUnique @ 0xfc6c (0x53 bytes)
// Index: 409/906

__int64 *__fastcall RstDeviceListInsertUnique(__int64 i, __int64 Source)
{
  __int64 *i_2; // rbx
  __int64 *i_1; // rax

  i_2 = RstLinkedListFindByName(i, (_BYTE *)Source); /*0xfc86*/
  if ( !i_2 ) /*0xfc8c*/
  {
    i_1 = RstLinkedListInsertSorted(i, *(_DWORD *)(Source + 20)); /*0xfc94*/
    i_2 = i_1; /*0xfc99*/
    if ( i_1 ) /*0xfc9f*/
      RstConfigArrayAddDevice((__int64)i_1, Source); /*0xfca7*/
  }
  return i_2; /*0xfcb9*/
}

// Function: Assert_76 @ 0xfcc0 (0x160 bytes)
// Index: 410/906

__int64 __fastcall Assert_76(__int64 a1, char a2)
{
  bool v3; // cf
  __int16 v4; // si
  _QWORD *v5; // rax
  _QWORD *v6; // rdi
  int v8; // eax
  __int64 v9; // rdx
  __int64 *v10; // rdi
  __int64 v11; // rsi
  char n24; // al
  __int64 v13; // rbp

  *(_QWORD *)(a1 + 328) = 0; /*0xfcdf*/
  byte_2794F = a2; /*0xfce6*/
  v3 = *(_WORD *)a1 != 0; /*0xfcec*/
  v4 = 0; /*0xfcf0*/
  while ( v3 ) /*0xfcf4*/
  {
    v5 = RstLinkedListGetNth((_QWORD **)(a1 + 16), v4); /*0xfcfd*/
    v6 = v5; /*0xfd02*/
    if ( *((_WORD *)v5 + 28) ) /*0xfd05*/
    {
      if ( *((_BYTE *)v5 + 58) == 3 ) /*0xfd10*/
      {
        *(_QWORD *)(a1 + 328) = v5; /*0xfd12*/
      }
      else
      {
        RstDeviceClearFlags(v5[6], 64); /*0xfd24*/
        RstDeviceSetFlags(v6[6], 0x20u); /*0xfd32*/
        if ( byte_2794F && !v6[5] && !Assert_14(v6[6]) ) /*0xfd52*/
          return 18; /*0xfd61*/
      }
    }
    v3 = (unsigned __int16)++v4 < *(_WORD *)a1; /*0xfd57*/
  }
  v8 = Assert_10(a1); /*0xfd69*/
  *(_DWORD *)(a1 + 320) = v8; /*0xfd6e*/
  if ( !v8 ) /*0xfd77*/
  {
    v10 = *(__int64 **)(a1 + 8LL * *(unsigned __int8 *)(a1 + 48) + 48); /*0xfd81*/
    v11 = *(_QWORD *)(v10[7] + 40); /*0xfd8a*/
    if ( *(_WORD *)(v11 + 4) > 1u ) /*0xfd93*/
    {
      n24 = 24; /*0xfd95*/
      if ( *(_BYTE *)(v11 + 6) <= 0x18u ) /*0xfd9d*/
        n24 = *(_BYTE *)(v11 + 6); /*0xfd9f*/
      if ( (unsigned __int8)n24 > 4u ) /*0xfda5*/
        RstDeviceInitOperation(*(_QWORD *)(*v10 + 160), 0); /*0xfdb3*/
    }
    v13 = v10[1]; /*0xfdb8*/
    LOBYTE(v9) = 1; /*0xfdbc*/
    (***(void (__fastcall ****)(_QWORD, __int64))(v13 + 248))(*(_QWORD *)(v13 + 248), v9); /*0xfdc8*/
    Assert_108(a1, v10); /*0xfdd0*/
    if ( *((_DWORD *)v10 + 20) == 2 || *((_DWORD *)v10 + 20) == 4 ) /*0xfddf*/
      Assert_38(v13); /*0xfde4*/
    if ( *(_WORD *)(v11 + 4) == 5 ) /*0xfdee*/
      Assert_114(*(_QWORD *)(*v10 + 160)); /*0xfdfa*/
  }
  return *(unsigned int *)(a1 + 320); /*0xfe19*/
}

// Function: Assert_87 @ 0xfe20 (0xb2 bytes)
// Index: 411/906

__int64 __fastcall Assert_87(__int64 a1, __int64 a2)
{
  __int64 v2; // rsi
  __int64 v5; // rbx
  _BYTE *Source; // rax

  v2 = *(_QWORD *)a2; /*0xfe38*/
  v5 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)a2 + 160LL) + 16LL); /*0xfe48*/
  if ( (*(_DWORD *)(a2 + 80) == 2 || *(_DWORD *)(a2 + 80) == 4) && (unsigned __int8)RstCfgRaidDevLookup(a2) != -1 ) /*0xfe64*/
  {
    Source = (_BYTE *)RstDeviceDerefPtr(*(_QWORD *)(a2 + 72)); /*0xfe6a*/
    Assert_55(Source, a2); /*0xfe75*/
  }
  if ( (*(_WORD *)(v5 + 40) != 1 || *(_BYTE *)(v5 + 100) != *(_BYTE *)(v5 + 42)) && !RstVolCheckAllMembersReady(*(_QWORD *)(a2 + 8)) ) /*0xfe8d*/
    Assert_28(a1, v2, 0); /*0xfe9f*/
  Assert_119(Source_16, v2); /*0xfeae*/
  RstDeviceListUpdateStatus(a1); /*0xfeb6*/
  return 0; /*0xfecc*/
}

// Function: RstCountDecrement @ 0xfed4 (0x8 bytes)
// Index: 412/906

__int64 __fastcall RstCountDecrement(__int64 a1)
{
  return *(_QWORD *)(a1 + 88) - 1LL; /*0xfedb*/
}

// Function: RstLinkedListNodeInit @ 0xfedc (0x1c bytes)
// Index: 413/906

__int64 __fastcall RstLinkedListNodeInit(__int64 a1)
{
  __int64 result; // rax

  result = RstBufferEntryInit(a1 + 112); /*0xfee9*/
  *(_BYTE *)(a1 + 45) = 0; /*0xfeee*/
  return result; /*0xfef2*/
}

// Function: RstDeviceSetExtFlag @ 0xfef8 (0x33 bytes)
// Index: 414/906

__int64 __fastcall RstDeviceSetExtFlag(__int64 a1, char a2)
{
  __int64 v3; // rbx
  __int64 result; // rax

  v3 = a1; /*0xff0c*/
  if ( (*(_BYTE *)(a1 + 136) & 0x10) != 0 ) /*0xff0f*/
  {
    LOBYTE(a1) = *(_BYTE *)(a1 + 96); /*0xff11*/
    result = RstProtocolSetFlag(a1); /*0xff14*/
    *(_BYTE *)(v3 + 200) = a2; /*0xff19*/
  }
  return result; /*0xff25*/
}

// Function: RstDeviceCompareEntries @ 0xff2c (0x131 bytes)
// Index: 415/906

bool __fastcall RstDeviceCompareEntries(__int64 a1, __int64 a2, char a3)
{
  int n17_1; // ebx
  _QWORD *v7; // rax
  int v8; // eax
  __int16 n17; // r11
  __int64 v10; // rbx

  n17_1 = (unsigned __int8)RstStringLastColonIndex((CHAR16 *)(a1 + 28)); /*0xff59*/
  v7 = RstLinkedListFindData(*(_QWORD *)(Source_16 + 216), a2); /*0xff6a*/
  if ( (__int16)n17_1 > 0 && (*(_DWORD *)(a2 + 136) & 0x10) != 0 && !RstDeviceIsActive((__int64)v7) ) /*0xff91*/
  {
    v8 = *(_DWORD *)(a2 + 136); /*0xff9b*/
    if ( (((unsigned int)&loc_10041 + 2) & v8) == 0 || (v8 & 0x1000000) != 0 ) /*0xffad*/
    {
      n17 = StrLenA((_BYTE *)(a2 + 28)); /*0xffbc*/
      if ( n17 <= 17 && n17_1 <= 17 ) /*0xffc5*/
      {
        do /*0xffea*/
        {
          if ( n17 > 0 ) /*0xffcb*/
          {
            --n17; /*0xffcd*/
            LOWORD(n17_1) = n17_1 - 1; /*0xffd1*/
            if ( *(_BYTE *)((__int16)n17_1 + a1 + 28) != *(_BYTE *)(n17 + a2 + 28) ) /*0xffe4*/
              return 0; /*0xffe4*/
          }
        }
        while ( (__int16)n17_1 > 0 ); /*0xffea*/
        v10 = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), (_BYTE *)(a1 + 28))[5]; /*0x10003*/
        if ( !v10 ) /*0x1000a*/
          return a3 != 0; /*0x1000f*/
        if ( a3 /*0x10052*/
          || (*(_DWORD *)(a2 + 136) & 4) == 0
          || RstArrayHasActiveMemberWrite(v10)
          || _bittest((const signed __int32 *)(*(_QWORD *)(v10 + 232) + 48LL), 0xAu) )
        {
          return 1; /*0x10059*/
        }
      }
    }
  }
  return 0; /*0x10022*/
}

// Function: RstDeviceCopy @ 0x10060 (0x8b bytes)
// Index: 416/906

__int64 __fastcall RstDeviceCopy(__int64 a1, __int64 a2)
{
  const __m128i *v2; // rax
  __m128i v5; // xmm0
  const CHAR16 *Source; // rdx
  CHAR16 *Destination; // rcx

  v2 = 0; /*0x1006a*/
  if ( a2 ) /*0x10075*/
    v2 = (const __m128i *)(a2 + 8); /*0x10077*/
  v5 = _mm_loadu_si128(v2); /*0x1007b*/
  Source = (const CHAR16 *)(a2 + 45); /*0x10086*/
  *(_QWORD *)a1 = off_23BD8; /*0x1008a*/
  Destination = (CHAR16 *)(a1 + 45); /*0x1008d*/
  *(__m128i *)((char *)Destination - 37) = v5; /*0x10097*/
  *(_DWORD *)((char *)Destination - 21) = *(_DWORD *)((char *)Source - 21); /*0x1009f*/
  *(_QWORD *)((char *)Destination - 17) = *(_QWORD *)((char *)Source - 17); /*0x100a6*/
  *(_QWORD *)((char *)Destination - 9) = *(_QWORD *)((char *)Source - 9); /*0x100ae*/
  *((_BYTE *)Destination - 1) = *((_BYTE *)Source - 1); /*0x100b5*/
  StrnCpy(Destination, Source, 0x29u); /*0x100b8*/
  *(_QWORD *)(a1 + 88) = *(_QWORD *)(a2 + 88); /*0x100c1*/
  *(_DWORD *)(a1 + 96) = *(_DWORD *)(a2 + 96); /*0x100c8*/
  *(_DWORD *)(a1 + 100) = *(_DWORD *)(a2 + 100); /*0x100ce*/
  *(_DWORD *)(a1 + 104) = *(_DWORD *)(a2 + 104); /*0x100d4*/
  *(_DWORD *)(a1 + 108) = *(_DWORD *)(a2 + 108); /*0x100df*/
  return a1; /*0x100e5*/
}

// Function: RstDevKeyCtxCopy @ 0x100ec (0x78 bytes)
// Index: 417/906

__int64 __fastcall RstDevKeyCtxCopy(__int64 a1, __int64 a2)
{
  const __m128i *v2; // rax
  _BYTE *v3; // r8
  __int64 v4; // r10
  __int64 n17; // r9
  _BYTE *v6; // r8
  __int64 n41; // r9

  v2 = 0; /*0x100ec*/
  if ( a2 ) /*0x100f1*/
    v2 = (const __m128i *)(a2 + 8); /*0x100f3*/
  v3 = (_BYTE *)(a1 + 28); /*0x100fe*/
  v4 = a2 - a1; /*0x10102*/
  n17 = 17; /*0x10105*/
  *(__m128i *)(a1 + 8) = _mm_loadu_si128(v2); /*0x1010b*/
  *(_DWORD *)(a1 + 24) = *(_DWORD *)(a2 + 24); /*0x10113*/
  do /*0x10124*/
  {
    *v3 = v3[v4]; /*0x1011a*/
    ++v3; /*0x1011d*/
    --n17; /*0x10120*/
  }
  while ( n17 ); /*0x10124*/
  v6 = (_BYTE *)(a1 + 45); /*0x10126*/
  n41 = 41; /*0x1012a*/
  do /*0x1013e*/
  {
    *v6 = v6[v4]; /*0x10134*/
    ++v6; /*0x10137*/
    --n41; /*0x1013a*/
  }
  while ( n41 ); /*0x1013e*/
  *(_QWORD *)(a1 + 88) = *(_QWORD *)(a2 + 88); /*0x10144*/
  *(_DWORD *)(a1 + 96) = *(_DWORD *)(a2 + 96); /*0x1014b*/
  *(_DWORD *)(a1 + 100) = *(_DWORD *)(a2 + 100); /*0x10151*/
  *(_DWORD *)(a1 + 104) = *(_DWORD *)(a2 + 104); /*0x10157*/
  *(_DWORD *)(a1 + 108) = *(_DWORD *)(a2 + 108); /*0x1015d*/
  return a1; /*0x10163*/
}

// Function: RstDeviceClearFlags @ 0x10164 (0x13 bytes)
// Index: 418/906

void __fastcall RstDeviceClearFlags(__int64 a1)
{
  *(_DWORD *)(a1 + 136) = 0; /*0x10164*/
  *(_BYTE *)(a1 + 28) = 0; /*0x1016b*/
  *(_BYTE *)(a1 + 152) = 1; /*0x1016f*/
}

// Function: RstDeviceFlagsUpdate @ 0x10178 (0x57 bytes)
// Index: 419/906

__int64 __fastcall RstDeviceFlagsUpdate(__int64 a1)
{
  int v1; // edx
  __int64 v2; // rdx
  __int64 result; // rax

  v1 = *(_DWORD *)(a1 + 136); /*0x1017c*/
  if ( (v1 & 0x1008D0) == 0x10 && *(__int16 *)(a1 + 116) <= 10 ) /*0x10199*/
    v2 = v1 | 8u; /*0x1019b*/
  else
    v2 = v1 & 0xFFFFFFF7; /*0x101a0*/
  *(_DWORD *)(a1 + 136) = v2; /*0x101a7*/
  result = (unsigned int)v2; /*0x101ad*/
  if ( (v2 & 0x1000000) != 0 ) /*0x101af*/
  {
    result = (unsigned int)v2 & 0xFFFFFFF7; /*0x101b1*/
    *(_DWORD *)(a1 + 136) = result; /*0x101b4*/
  }
  if ( (*(_BYTE *)(a1 + 136) & 4) != 0 ) /*0x101c1*/
  {
    LOBYTE(v2) = 2; /*0x101c3*/
    return RstDeviceSetExtFlag(a1, v2); /*0x101c5*/
  }
  return result; /*0x101ca*/
}

// Function: RstDeviceIncrementEvent @ 0x101d0 (0x25 bytes)
// Index: 420/906

__int64 __fastcall RstDeviceIncrementEvent(__int64 a1, __int64 Source, __int16 n3)
{
  __int64 result; // rax

  ++*(_WORD *)(a1 + 114); /*0x101d4*/
  *(_WORD *)(a1 + 120) = n3; /*0x101d8*/
  *(_BYTE *)(a1 + 122) = Source; /*0x101dd*/
  if ( n3 == 3 ) /*0x101e5*/
  {
    ++*(_WORD *)(a1 + 116); /*0x101e7*/
    return RstDeviceFlagsUpdate(a1); /*0x101eb*/
  }
  return result; /*0x101f0*/
}

// Function: j_Assert_18 @ 0x101f8 (0x5 bytes)
// Index: 421/906

// attributes: thunk
__int64 __fastcall j_Assert_18(__int64 a1, __int64 Source)
{
  return Assert_18(a1, Source);
}

// Function: RstCountDecrementBy2 @ 0x10200 (0x9 bytes)
// Index: 422/906

__int64 __fastcall RstCountDecrementBy2(__int64 a1)
{
  return *(_QWORD *)(a1 + 88) - 2LL; /*0x10208*/
}

// Function: RstDeviceCheckOnline @ 0x1020c (0x1d bytes)
// Index: 423/906

bool __fastcall RstDeviceCheckOnline(__int64 a1)
{
  int v1; // eax

  v1 = *(_DWORD *)(a1 + 136); /*0x1020c*/
  if ( (v1 & 0x1000000) != 0 ) /*0x10216*/
    return 0; /*0x10218*/
  return (v1 & 8) == 0 || (v1 & 4) != 0; /*0x1021a*/
}

// Function: RstDeviceSetFlags @ 0x1022c (0x28 bytes)
// Index: 424/906

__int64 __fastcall RstDeviceSetFlags(__int64 a1, unsigned int a2)
{
  __int64 result; // rax

  result = a2 & *(_DWORD *)(a1 + 136); /*0x1023a*/
  if ( (_DWORD)result != a2 ) /*0x1023e*/
  {
    *(_DWORD *)(a1 + 136) |= a2; /*0x10243*/
    return RstDeviceFlagsUpdate(a1); /*0x1024a*/
  }
  return result; /*0x1024f*/
}

// Function: RstDeviceClearFlags @ 0x10254 (0x22 bytes)
// Index: 425/906

__int64 __fastcall RstDeviceClearFlags(__int64 a1, int a2)
{
  __int64 result; // rax

  result = *(unsigned int *)(a1 + 136); /*0x10258*/
  if ( ((unsigned int)result & a2) != 0 ) /*0x10260*/
  {
    *(_DWORD *)(a1 + 136) = result & ~a2; /*0x10266*/
    return RstDeviceFlagsUpdate(a1); /*0x1026c*/
  }
  return result; /*0x10271*/
}

// Function: RstDeviceUpdateFlagsMask @ 0x10278 (0x1b bytes)
// Index: 426/906

__int64 __fastcall RstDeviceUpdateFlagsMask(__int64 a1, int a2, unsigned int n513)
{
  *(_DWORD *)(a1 + 136) = n513 & a2 | *(_DWORD *)(a1 + 136) & ~n513; /*0x10288*/
  return RstDeviceFlagsUpdate(a1);
}

// Function: RstProtocolReadVariable @ 0x10294 (0xc bytes)
// Index: 427/906

__int64 __fastcall RstProtocolReadVariable(__int64 a1, const char *en)
{
  return RstProtocolVariableRead(*(__int64 **)(a1 + 128), (__int64)en);
}

// Function: RstHiiGetString @ 0x102a0 (0x12 bytes)
// Index: 428/906

__int64 __fastcall RstHiiGetString(__int64 a1, __int64 a2, char *en)
{
  return RstHiiProtocolGetString(a2, *(_QWORD *)(a1 + 128), en);
}

// Function: RstHelper_02b4 @ 0x102b4 (0xc bytes)
// Index: 429/906

char __fastcall RstHelper_02b4(__int64 a1, int n5)
{
  return HiiLibStrToGuid(*(_QWORD *)(a1 + 128), n5);
}

// Function: RstHelper_02c0 @ 0x102c0 (0xc bytes)
// Index: 430/906

__int64 __fastcall RstHelper_02c0(__int64 a1)
{
  return HiiLibGuidCmp(*(_QWORD *)(a1 + 128));
}

// Function: RstHelper_02cc @ 0x102cc (0xc bytes)
// Index: 431/906

__int64 __fastcall RstHelper_02cc(__int64 a1, int a2, __int64 *a3)
{
  __int64 v4; // rbx
  __int64 result; // rax
  __int64 v6; // rcx

  v6 = *(_QWORD *)(a1 + 128); /*0x102cc*/
  if ( v6 ) /*0x41cb*/
  {
    v4 = v6; /*0x41da*/
    if ( a2 ) /*0x41df*/
    {
      if ( a2 == 1 ) /*0x41e4*/
      {
        RstReturnInvalid(v6, 0); /*0x41e8*/
        return (*(__int64 (__fastcall **)(__int64, __int64))(*(_QWORD *)v4 + 128LL))(v4, *a3); /*0x41f6*/
      }
    }
    else
    {
      RstReturnInvalid(v6, *a3); /*0x4202*/
      return (*(__int64 (__fastcall **)(__int64, __int64))(*(_QWORD *)v4 + 120LL))(v4, *a3); /*0x4210*/
    }
  }
  return result; /*0x421e*/
}

// Function: RstDiskInit @ 0x102d8 (0x35 bytes)
// Index: 432/906

__int64 __fastcall RstDiskInit(__int64 a1)
{
  RstBufferEntryInitPtr(a1 + 112); /*0x102e5*/
  *(_QWORD *)(a1 + 16) = 0; /*0x102f3*/
  *(_QWORD *)(a1 + 8) = 0; /*0x102f7*/
  *(_QWORD *)a1 = &off_23BF0; /*0x102fb*/
  *(_DWORD *)(a1 + 136) = 0; /*0x10301*/
  return a1; /*0x10307*/
}

// Function: Assert_21 @ 0x10310 (0x1a0 bytes)
// Index: 433/906

__int64 __fastcall Assert_21(__int64 a1, _QWORD *NewContext, _BYTE *i, int a4)
{
  __int64 v7; // rdx
  __int64 v8; // rcx
  unsigned int v9; // eax
  int v10; // ecx
  __int64 result; // rax

  *(_DWORD *)(a1 + 136) |= a4; /*0x1031f*/
  RstDeviceFlagsUpdate(a1); /*0x1032f*/
  *(_BYTE *)(a1 + 200) = 0; /*0x10334*/
  *(_BYTE *)(a1 + 201) = 0; /*0x1033b*/
  *(_QWORD *)(a1 + 128) = NewContext; /*0x10342*/
  *(_QWORD *)(a1 + 88) = *(_QWORD *)i; /*0x1035a*/
  StrnCpy((CHAR16 *)(a1 + 45), (const CHAR16 *)i + 14, 0x29u); /*0x1035e*/
  StrnCpy((CHAR16 *)(a1 + 28), (const CHAR16 *)(i + 69), 0x11u); /*0x10371*/
  *(_DWORD *)(a1 + 104) = *((_DWORD *)i + 6); /*0x10379*/
  if ( (unsigned __int8)RstDebugEnabled(v8, v7) && !*(_DWORD *)(a1 + 104) ) /*0x10385*/
    DebugAssert("Disk.cpp", 0x5Bu, "logBlockSize != ( 0 )"); /*0x1039e*/
  *(_DWORD *)(a1 + 96) = *((_DWORD *)i + 2); /*0x103a9*/
  *(_DWORD *)(a1 + 164) = *((_DWORD *)i + 3); /*0x103af*/
  *(_WORD *)(a1 + 168) = *((_WORD *)i + 8); /*0x103b9*/
  *(_QWORD *)(a1 + 153) = *(_QWORD *)(i + 86); /*0x103c4*/
  *(_DWORD *)(a1 + 100) = *((_DWORD *)i + 5) & 0x7FFFFFFF; /*0x103d2*/
  v9 = HiiLibReturnZero(a1); /*0x103d5*/
  v10 = *(_DWORD *)(a1 + 96); /*0x103f4*/
  *(_QWORD *)(a1 + 144) = *(_QWORD *)(a1 + 88) - (((unsigned int)&loc_1FFFA + 6) / v9 + 161); /*0x103f7*/
  *(_DWORD *)(a1 + 108) = 1 << v10; /*0x1040a*/
  *(_WORD *)(a1 + 172) = *((_WORD *)i + 51); /*0x10411*/
  *(_QWORD *)(a1 + 176) = *((_QWORD *)i + 13); /*0x1041c*/
  *(_QWORD *)(a1 + 184) = *((_QWORD *)i + 14); /*0x10427*/
  *(_QWORD *)(a1 + 192) = *((_QWORD *)i + 15); /*0x10432*/
  if ( RstDeviceGetFeatureFlagBit(13) || *(_WORD *)(a1 + 172) == 0x8086 ) /*0x1044e*/
  {
    if ( !RstDeviceGetFeatureFlagBit(11) && (*(_BYTE *)(a1 + 136) & 1) != 0 /*0x10481*/
      || !RstDeviceGetFeatureFlagBit(12) && _bittest((const signed __int32 *)(a1 + 136), 0x19u) )
    {
      *(_DWORD *)(a1 + 136) = 65552; /*0x1048b*/
    }
  }
  else
  {
    *(_DWORD *)(a1 + 136) = (_DWORD)&loc_18018; /*0x10450*/
  }
  result = *((unsigned __int16 *)i + 50); /*0x10495*/
  *(_WORD *)(a1 + 170) = result; /*0x104a3*/
  return result; /*0x104aa*/
}

// Function: RstDiskStateReset @ 0x104b0 (0x102 bytes)
// Index: 434/906

__int64 __fastcall RstDiskStateReset(__int64 a1, __int64 a2)
{
  __int64 v3; // rdx

  v3 = 0; /*0x104bd*/
  if ( a2 ) /*0x104c5*/
    v3 = a2 + 112; /*0x104c7*/
  *(_QWORD *)(a1 + 112) = *(_QWORD *)v3; /*0x104ce*/
  *(_DWORD *)(a1 + 120) = *(_DWORD *)(v3 + 8); /*0x104d8*/
  RstDeviceCopy(a1, a2); /*0x104db*/
  *(_QWORD *)a1 = &off_23BF0; /*0x104e7*/
  *(_QWORD *)(a1 + 128) = *(_QWORD *)(a2 + 128); /*0x104f1*/
  *(_DWORD *)(a1 + 136) = *(_DWORD *)(a2 + 136); /*0x104fe*/
  *(_QWORD *)(a1 + 144) = *(_QWORD *)(a2 + 144); /*0x1050b*/
  *(_BYTE *)(a1 + 152) = *(_BYTE *)(a2 + 152); /*0x10518*/
  *(_QWORD *)(a1 + 153) = *(_QWORD *)(a2 + 153); /*0x10525*/
  *(_DWORD *)(a1 + 164) = *(_DWORD *)(a2 + 164); /*0x10532*/
  *(_WORD *)(a1 + 168) = *(_WORD *)(a2 + 168); /*0x1053f*/
  *(_WORD *)(a1 + 170) = *(_WORD *)(a2 + 170); /*0x1054d*/
  *(_WORD *)(a1 + 172) = *(_WORD *)(a2 + 172); /*0x1055b*/
  *(_QWORD *)(a1 + 176) = *(_QWORD *)(a2 + 176); /*0x10569*/
  *(_QWORD *)(a1 + 184) = *(_QWORD *)(a2 + 184); /*0x10577*/
  *(_QWORD *)(a1 + 192) = *(_QWORD *)(a2 + 192); /*0x10585*/
  *(_BYTE *)(a1 + 200) = *(_BYTE *)(a2 + 200); /*0x10592*/
  *(_BYTE *)(a1 + 201) = *(_BYTE *)(a2 + 201); /*0x105a3*/
  return a1; /*0x105ac*/
}

// Function: RstDiskCopyState @ 0x105b4 (0xf8 bytes)
// Index: 435/906

__int64 __fastcall RstDiskCopyState(__int64 a1, __int64 a2)
{
  __int64 v3; // rdx

  v3 = 0; /*0x105c1*/
  if ( a2 ) /*0x105c9*/
    v3 = a2 + 112; /*0x105cb*/
  *(_QWORD *)(a1 + 112) = *(_QWORD *)v3; /*0x105d2*/
  *(_DWORD *)(a1 + 120) = *(_DWORD *)(v3 + 8); /*0x105dc*/
  RstDevKeyCtxCopy(a1, a2); /*0x105df*/
  *(_QWORD *)(a1 + 128) = *(_QWORD *)(a2 + 128); /*0x105eb*/
  *(_DWORD *)(a1 + 136) = *(_DWORD *)(a2 + 136); /*0x105f8*/
  *(_QWORD *)(a1 + 144) = *(_QWORD *)(a2 + 144); /*0x10605*/
  *(_BYTE *)(a1 + 152) = *(_BYTE *)(a2 + 152); /*0x10612*/
  *(_QWORD *)(a1 + 153) = *(_QWORD *)(a2 + 153); /*0x1061f*/
  *(_DWORD *)(a1 + 164) = *(_DWORD *)(a2 + 164); /*0x1062c*/
  *(_WORD *)(a1 + 168) = *(_WORD *)(a2 + 168); /*0x10639*/
  *(_WORD *)(a1 + 170) = *(_WORD *)(a2 + 170); /*0x10647*/
  *(_WORD *)(a1 + 172) = *(_WORD *)(a2 + 172); /*0x10655*/
  *(_QWORD *)(a1 + 176) = *(_QWORD *)(a2 + 176); /*0x10663*/
  *(_QWORD *)(a1 + 184) = *(_QWORD *)(a2 + 184); /*0x10671*/
  *(_QWORD *)(a1 + 192) = *(_QWORD *)(a2 + 192); /*0x1067f*/
  *(_BYTE *)(a1 + 200) = *(_BYTE *)(a2 + 200); /*0x1068c*/
  *(_BYTE *)(a1 + 201) = *(_BYTE *)(a2 + 201); /*0x1069d*/
  return a1; /*0x106a6*/
}

// Function: RstDiskSetFlagBit2 @ 0x106ac (0x1f bytes)
// Index: 436/906

__int64 __fastcall RstDiskSetFlagBit2(__int64 a1, char a2)
{
  if ( a2 ) /*0x106b0*/
  {
    *(_DWORD *)(a1 + 136) |= 4u; /*0x106b2*/
  }
  else
  {
    *(_DWORD *)(a1 + 136) &= ~4u; /*0x106bb*/
    *(_WORD *)(a1 + 116) = 0; /*0x106c2*/
  }
  return RstDeviceFlagsUpdate(a1);
}

// Function: Assert_14 @ 0x106cc (0x1cf bytes)
// Index: 437/906

char __fastcall Assert_14(__int64 a1)
{
  char v1; // bl
  _BYTE *i_1; // rbp
  unsigned int v4; // eax
  int v5; // eax
  __int64 v6; // rsi
  int v7; // eax
  unsigned __int64 n0x21; // rax
  __int64 v9; // rsi
  int v10; // eax
  _BYTE *i; // [rsp+30h] [rbp-68h] BYREF
  char v13; // [rsp+38h] [rbp-60h]
  __int16 v14; // [rsp+3Ah] [rbp-5Eh]
  _BYTE Source[80]; // [rsp+40h] [rbp-58h] BYREF

  v1 = 0; /*0x106e8*/
  i = 0; /*0x106f7*/
  v14 = 1; /*0x106fb*/
  v13 = 0; /*0x10700*/
  RstBufferPoolRealloc((__int64)&i, 0); /*0x10703*/
  if ( RstDebugEnabled() && !i ) /*0x10716*/
    DebugAssert("Disk.cpp", 0x166u, "sbuf.ptr()"); /*0x1072b*/
  i_1 = i; /*0x10730*/
  if ( RstDebugEnabled() ) /*0x10735*/
  {
    if ( (unsigned int)HiiLibReturnZero(a1) >= 0x2000 ) /*0x1074b*/
      DebugAssert("Disk.cpp", 0x168u, "getBlockSize() < ( 8 << 10 )"); /*0x10760*/
  }
  v4 = HiiLibReturnZero(a1); /*0x10768*/
  MemZero(i_1, 0, v4); /*0x10775*/
  RstConfigBlockZero((__int64)Source); /*0x1077f*/
  v5 = HiiLibReturnZero(a1); /*0x10787*/
  RstConfigBlockInit((__int64)Source, a1, 42, 0, v5, (unsigned int)i_1); /*0x107a2*/
  Assert_18(a1, (__int64)Source); /*0x107af*/
  if ( !Source[0] ) /*0x107b8*/
  {
    v6 = 1; /*0x107be*/
    while ( 1 ) /*0x107c6*/
    {
      RstConfigBlockZero((__int64)Source); /*0x107c6*/
      v7 = HiiLibReturnZero(a1); /*0x107ce*/
      RstConfigBlockInit((__int64)Source, a1, 42, v6, v7, (unsigned int)i_1); /*0x107e9*/
      Assert_18(a1, (__int64)Source); /*0x107f6*/
      if ( Source[0] ) /*0x107ff*/
        break; /*0x107ff*/
      if ( (unsigned __int64)++v6 >= 0x22 ) /*0x10808*/
      {
        n0x21 = *(_QWORD *)(a1 + 88); /*0x1080a*/
        v9 = n0x21 - 33; /*0x1080e*/
        if ( n0x21 < 0x21 ) /*0x10815*/
        {
LABEL_14:
          v1 = 1; /*0x10860*/
        }
        else
        {
          while ( 1 ) /*0x1081c*/
          {
            RstConfigBlockZero((__int64)Source); /*0x1081c*/
            v10 = HiiLibReturnZero(a1); /*0x10824*/
            RstConfigBlockInit((__int64)Source, a1, 42, v9, v10, (unsigned int)i_1); /*0x1083f*/
            Assert_18(a1, (__int64)Source); /*0x1084c*/
            if ( Source[0] ) /*0x10855*/
              break; /*0x10855*/
            if ( (unsigned __int64)++v9 >= *(_QWORD *)(a1 + 88) ) /*0x1085e*/
              goto LABEL_14; /*0x1085e*/
          }
        }
        RstBufferPoolLock((__int64)i); /*0x10868*/
        return v1; /*0x1086f*/
      }
    }
  }
  RstBufferPoolLock((__int64)i); /*0x10876*/
  return 0; /*0x10895*/
}

// Function: RstDiskSwapState @ 0x1089c (0x49 bytes)
// Index: 438/906

__int64 __fastcall RstDiskSwapState(__int64 a1, __int64 a2)
{
  _BYTE v5[216]; // [rsp+20h] [rbp-D8h] BYREF

  RstDiskStateReset((__int64)v5, a1); /*0x108b7*/
  RstDiskCopyState(a1, a2); /*0x108c2*/
  return RstDiskCopyState(a2, (__int64)v5); /*0x108dc*/
}

// Function: RstDeviceAddAndJournal @ 0x108e8 (0xcc bytes)
// Index: 439/906

CHAR16 *__fastcall RstDeviceAddAndJournal(__int64 a1, __int64 a2)
{
  _WORD *v4; // rsi
  int v5; // eax
  int v6; // ecx
  __int64 *v7; // r13
  __int64 *v8; // r12

  v4 = *(_WORD **)(Source_16 + 216); /*0x1090d*/
  v5 = *(_DWORD *)(a1 + 136); /*0x10914*/
  if ( (v5 & 4) != 0 ) /*0x1091c*/
  {
    *(_DWORD *)(a1 + 136) = v5 & 0xFFFFFFFB; /*0x10921*/
    RstDeviceFlagsUpdate(a1); /*0x10927*/
  }
  v6 = *(_DWORD *)(a1 + 136) | 0x100; /*0x10938*/
  if ( (v6 & *(_DWORD *)(a2 + 136)) != v6 ) /*0x10942*/
  {
    *(_DWORD *)(a2 + 136) |= v6; /*0x10949*/
    RstDeviceFlagsUpdate(a2); /*0x1094f*/
  }
  v7 = RstLinkedListFindByName((__int64)v4, (_BYTE *)(a1 + 28)); /*0x10967*/
  v8 = RstLinkedListFindByName((__int64)v4, (_BYTE *)(a2 + 28)); /*0x10975*/
  RstDiskSwapState(a2, a1); /*0x10978*/
  if ( v8 ) /*0x10980*/
    RstConfigBlockRemoveEntry(v4, (__int64)v8); /*0x10988*/
  return RstJournalEntryInit((__int64)v7, (const CHAR16 *)(a1 + 28), a1); /*0x109a6*/
}

// Function: RstBufferPoolGetBuffer @ 0x109b4 (0x46 bytes)
// Index: 440/906

__int64 __fastcall RstBufferPoolGetBuffer(_QWORD *a1, int a2)
{
  __int64 v4; // rax
  __int64 result; // rax

  v4 = RstLinkedListPop(*a1); /*0x109c6*/
  if ( v4 ) /*0x109ce*/
  {
    dword_35460 = a2; /*0x109d0*/
    result = v4 + 16; /*0x109d6*/
    a1[2] = 1360; /*0x109da*/
    a1[1] = result; /*0x109e2*/
  }
  else
  {
    a1[2] = 0; /*0x109e8*/
    return 0; /*0x109ed*/
  }
  return result; /*0x109f4*/
}

// Function: RstConfigBlockResetCount @ 0x109fc (0x8 bytes)
// Index: 441/906

void RstConfigBlockResetCount()
{
  dword_35460 = 0; /*0x109fc*/
}

// Function: RstLinkedListInsertAt @ 0x10a04 (0xc bytes)
// Index: 442/906

__int64 __fastcall RstLinkedListInsertAt(__int64 **a1, __int64 a2, __int64 a3)
{
  return RstLinkedListInsert(*a1, (__int64 *)(a3 - 16));
}

// Function: RstMemPoolAlloc @ 0x10a10 (0x58 bytes)
// Index: 443/906

__int64 __fastcall RstMemPoolAlloc(__int64 a1)
{
  __int64 i; // r8
  unsigned __int64 i_1; // rcx
  __int64 v4; // rdx

  i = 0; /*0x10a16*/
  if ( dword_35460 == 1 ) /*0x10a1f*/
  {
    v4 = *(_QWORD *)(Source_16 + 200); /*0x10a4e*/
    i = *(_QWORD *)(v4 + 8); /*0x10a55*/
    *(_QWORD *)(v4 + 16) -= a1; /*0x10a5c*/
    *(_QWORD *)(v4 + 8) = i + a1; /*0x10a60*/
  }
  else
  {
    i_1 = i_1 + a1; /*0x10a28*/
    if ( i_1 < i_2 ) /*0x10a32*/
    {
      qword_35478 += a1; /*0x10a34*/
      i = i_1; /*0x10a3b*/
      i_1 = i_1; /*0x10a3e*/
    }
  }
  return i; /*0x10a67*/
}

// Function: RstInitArray @ 0x10a68 (0x82 bytes)
// Index: 444/906

__int64 **__fastcall RstInitArray(__int64 **a1)
{
  __int64 *v2; // rax
  __int64 n24; // rdi
  __int64 *v4; // rax

  qword_35478 = 0; /*0x10a72*/
  qword_35470 = 0; /*0x10a7a*/
  dword_35460 = 0; /*0x10a82*/
  v2 = (__int64 *)RstMemPoolAlloc(8); /*0x10a91*/
  if ( v2 ) /*0x10a99*/
    *v2 = 0; /*0x10a9b*/
  else
    v2 = 0; /*0x10aa1*/
  *a1 = v2; /*0x10aa3*/
  n24 = 24; /*0x10aa6*/
  do /*0x10ad6*/
  {
    v4 = (__int64 *)RstMemPoolAlloc(1376); /*0x10ab0*/
    if ( v4 ) /*0x10ab8*/
    {
      v4[1] = 0; /*0x10aba*/
      *v4 = 0; /*0x10abf*/
    }
    else
    {
      v4 = 0; /*0x10ac5*/
    }
    RstLinkedListInsert(*a1, v4); /*0x10acd*/
    --n24; /*0x10ad2*/
  }
  while ( n24 ); /*0x10ad6*/
  a1[2] = 0; /*0x10ad8*/
  return a1; /*0x10ae4*/
}

// Function: RstConfigBlockZero @ 0x10aec (0x11 bytes)
// Index: 445/906

__int64 __fastcall RstConfigBlockZero(__int64 a1)
{
  *(_QWORD *)(a1 + 40) = 0; /*0x10aee*/
  *(_QWORD *)(a1 + 32) = 0; /*0x10af2*/
  *(_BYTE *)(a1 + 72) = 0; /*0x10af6*/
  return a1; /*0x10afc*/
}

// Function: RstHelper_0b00 @ 0x10b00 (0x182 bytes)
// Index: 446/906

char RstHelper_0b00__int64 Source, __int64 a2)
{
  char v4; // bl
  unsigned __int8 v5; // r13
  __int64 v6; // rdi
  unsigned __int8 v8; // si
  unsigned __int8 v9; // si
  _DWORD *v10; // rax
  _DWORD *v11; // rdi
  bool v12; // cf
  unsigned __int16 i; // si
  unsigned __int64 v14; // rbp

  v4 = 0; /*0x10b30*/
  v5 = -1; /*0x10b32*/
  v6 = *(_QWORD *)(*(_QWORD *)(Source_16 + 208) + 8LL); /*0x10b35*/
  if ( !RstDeviceListFindByDevice(Source_16, a2) ) /*0x10b39*/
    return 0; /*0x10b44*/
  v8 = 0; /*0x10b49*/
  if ( *(_BYTE *)(v6 + 56) ) /*0x10b52*/
  {
    while ( StrnCpy16((_BYTE *)(v6 + 48LL * v8 + 216), (_BYTE *)(a2 + 28), 16) ) /*0x10b7d*/
    {
      if ( ++v8 >= *(_BYTE *)(v6 + 56) ) /*0x10b86*/
        goto LABEL_6; /*0x10b86*/
    }
  }
  else
  {
LABEL_6:
    RstHelper_89a4(*(_QWORD *)(Source_16 + 208), a2); /*0x10b88*/
  }
  if ( *(_DWORD *)(v6 + 72) ) /*0x10b9e*/
  {
    v9 = 0; /*0x10ba7*/
    if ( *(_BYTE *)(v6 + 56) ) /*0x10baa*/
    {
      while ( a2 == -28 || StrnCpy16((_BYTE *)(a2 + 28), (_BYTE *)(v6 + 48LL * v9 + 216), 16) ) /*0x10bdd*/
      {
        if ( ++v9 >= *(_BYTE *)(v6 + 56) ) /*0x10be6*/
          goto LABEL_14; /*0x10be6*/
      }
      v5 = v9; /*0x10bea*/
    }
LABEL_14:
    v10 = RstRaidSuperblockFind(v6); /*0x10bed*/
    v11 = v10; /*0x10bf5*/
    if ( !v10 ) /*0x10bfb*/
      return 0; /*0x10bfb*/
    v12 = *((_WORD *)v10 + 2) != 0; /*0x10c01*/
    for ( i = 0; v12 && BYTE1(v11[2 * i + 2]) <= v5; v12 = i < *((_WORD *)v11 + 2) ) /*0x10c05*/
    {
      if ( BYTE1(v11[2 * i + 2]) == v5 ) /*0x10c14*/
      {
        v14 = *(unsigned int *)((char *)&v11[2 * i + 2] + 2) + ((unsigned __int64)HIWORD(v11[2 * i + 3]) << 32); /*0x10c23*/
        if ( v14 + LOBYTE(v11[2 * i + 2]) >= *(_QWORD *)(Source + 8) /*0x10c54*/
          && *(_QWORD *)(Source + 8)
           + (unsigned __int64)(*(_DWORD *)(Source + 16) / (unsigned int)HiiLibReturnZero(a2) - 1) >= v14 )
        {
          return 1; /*0x10c60*/
        }
      }
      ++i; /*0x10c56*/
    }
  }
  return v4; /*0x10c74*/
}

// Function: RstConfigBlockInit @ 0x10c84 (0x1f bytes)
// Index: 447/906

__int64 __fastcall RstConfigBlockInit(__int64 a1, __int64 a2, char a3, __int64 a4, int a5, unsigned int a6)
{
  *(_BYTE *)(a1 + 24) = a3; /*0x10c88*/
  *(_QWORD *)(a1 + 64) = a4; /*0x10c8c*/
  *(_DWORD *)(a1 + 16) = a5; /*0x10c90*/
  *(_QWORD *)(a1 + 8) = a4; /*0x10c97*/
  *(_DWORD *)(a1 + 20) = a6; /*0x10c9b*/
  *(_QWORD *)(a1 + 48) = a2; /*0x10c9e*/
  return a6; /*0x10ca2*/
}

// Function: RstConfigBufferSetSize @ 0x10ca4 (0x44 bytes)
// Index: 448/906

__int64 __fastcall RstConfigBufferSetSize(_BYTE *Source)
{
  __int64 Source_1; // rdx
  __int16 v2; // r8
  __int64 result; // rax

  Source_1 = Source_16; /*0x10cab*/
  v2 = *((_WORD *)Source + 1); /*0x10cb2*/
  *(_WORD *)(Source_16 + 2720) = *(_WORD *)Source; /*0x10cb7*/
  result = 0; /*0x10cbe*/
  *(_WORD *)(Source_1 + 2722) = v2; /*0x10cc0*/
  if ( *((_QWORD *)Source + 6) ) /*0x10cc8*/
  {
    if ( *(_WORD *)Source ) /*0x10cce*/
    {
      LOBYTE(Source_1) = *Source; /*0x10cd8*/
      return RstDeviceIncrementEvent(*((_QWORD *)Source + 6), Source_1, *((_WORD *)Source + 1)); /*0x10cde*/
    }
  }
  return result; /*0x10ce3*/
}

// Function: Assert_88 @ 0x10ce8 (0xa4 bytes)
// Index: 449/906

__int64 __fastcall Assert_88(__int64 Source, __int64 n23)
{
  __int64 v3; // rcx
  __int64 v4; // rax
  __int64 v5; // rdi
  __int64 n3; // rax

  v3 = *(_QWORD *)(Source + 48); /*0x10cf5*/
  v4 = *(_QWORD *)(Source + 56); /*0x10cf9*/
  v5 = *(_QWORD *)v3; /*0x10cfd*/
  *(_BYTE *)(Source + 24) = n23; /*0x10d00*/
  *(_QWORD *)(Source + 8) = *(_QWORD *)(Source + 64) /*0x10d13*/
                          + *(_QWORD *)(*(_QWORD *)(v4 + 32) + 48LL)
                          + *(_QWORD *)(*(_QWORD *)(v4 + 32) + 56LL);
  if ( (*(_BYTE *)(v3 + 8) || RstDeviceCheckOnline(*(_QWORD *)v3)) /*0x10d43*/
    && (*(_WORD *)(*(_QWORD *)(*(_QWORD *)(Source + 56) + 40LL) + 40LL) || (*(_DWORD *)(v5 + 136) & 8) == 0) )
  {
    *(_WORD *)Source = 5; /*0x10d75*/
    n3 = 3; /*0x10d78*/
  }
  else
  {
    if ( !RstHelper_0b00(Source, v5) ) /*0x10d52*/
      return j_Assert_18(v5, Source); /*0x10d6e*/
    *(_WORD *)Source = 5; /*0x10d59*/
    n3 = 2; /*0x10d5c*/
  }
  *(_WORD *)(Source + 2) = n3; /*0x10d7d*/
  return n3; /*0x10d86*/
}

// Function: RstListNodeInit @ 0x10d8c (0x1c bytes)
// Index: 450/906

_QWORD *__fastcall RstListNodeInit(_QWORD *a1)
{
  a1[1] = 0; /*0x10d8e*/
  *a1 = 0; /*0x10d92*/
  a1[13] = 0; /*0x10d95*/
  a1[12] = 0; /*0x10d99*/
  a1[16] = a1; /*0x10d9d*/
  return a1; /*0x10da7*/
}

// Function: Assert_5 @ 0x10da8 (0x26a bytes)
// Index: 451/906

__int64 __fastcall Assert_5(
        __int64 a1,
        __int64 a2,
        unsigned int i,
        __int64 a4,
        int n0x2000,
        unsigned __int8 n0xFF,
        unsigned __int8 a7,
        unsigned __int8 n0xFFa,
        __int16 n2)
{
  unsigned __int8 n0xFFa_1; // dl
  unsigned __int8 n0xFF_1; // cl
  __int16 v15; // r8
  char v16; // r12
  __int64 v17; // r9
  unsigned int i_1; // eax
  __int16 n2_1; // cx
  __int16 n2_2; // ax
  unsigned int *p_i; // rax
  __int16 v22; // cx
  __int64 i_2; // [rsp+40h] [rbp-38h] BYREF
  char v25; // [rsp+48h] [rbp-30h]
  __int16 n16; // [rsp+4Ah] [rbp-2Eh]
  unsigned int ia; // [rsp+80h] [rbp+8h] BYREF
  unsigned int i_4; // [rsp+84h] [rbp+Ch] BYREF

  i_2 = 0; /*0x10dcc*/
  v25 = 0; /*0x10dd0*/
  n16 = 16; /*0x10ddd*/
  RstBufferPoolRealloc((__int64)&i_2, 0); /*0x10de5*/
  if ( RstDebugEnabled() && !i_2 ) /*0x10df9*/
    DebugAssert("RaidDgReq.cpp", 0x5Bu, "oromBuff2.ptr()"); /*0x10e0d*/
  n0xFFa_1 = n0xFFa; /*0x10e12*/
  n0xFF_1 = n0xFF; /*0x10e1a*/
  v15 = a7; /*0x10e21*/
  *(_BYTE *)(a1 + 67) = 0; /*0x10e2a*/
  *(_QWORD *)(a1 + 40) = *(_QWORD *)(a2 + 40); /*0x10e38*/
  v16 = 1; /*0x10e3f*/
  *(_BYTE *)(a1 + 68) = *(_BYTE *)(a2 + 68); /*0x10e42*/
  v17 = *(_QWORD *)(a2 + 32); /*0x10e45*/
  *(_DWORD *)(a1 + 392) = n0x2000; /*0x10e50*/
  i_1 = i_2; /*0x10e56*/
  *(_QWORD *)(a1 + 32) = v17; /*0x10e5a*/
  i_4 = i_1; /*0x10e5e*/
  *(_QWORD *)(a1 + 384) = a4; /*0x10e65*/
  *(_BYTE *)(a1 + 400) = n0xFFa_1; /*0x10e6c*/
  *(_BYTE *)(a1 + 401) = n0xFF_1; /*0x10e74*/
  *(_BYTE *)(a1 + 66) = 0; /*0x10e7a*/
  *(_WORD *)(a1 + 64) = 0; /*0x10e7e*/
  *(_WORD *)(a1 + 398) = 2; /*0x10e83*/
  ia = i; /*0x10e8b*/
  *(_WORD *)(a1 + 396) = v15; /*0x10e92*/
  if ( n0xFFa_1 < n0xFF_1 ) /*0x10ea1*/
    n0xFFa_1 += *(_BYTE *)(v17 + 42); /*0x10ea3*/
  if ( n0xFFa_1 < a7 + n0xFF_1 ) /*0x10eb9*/
    *(_WORD *)(a1 + 396) = v15 - 1; /*0x10ebf*/
  if ( *(__int16 *)(a1 + 396) <= 2 ) /*0x10ed2*/
    n2_1 = *(_WORD *)(a1 + 396); /*0x10ed9*/
  else
    n2_1 = 2; /*0x10ed4*/
  n2_2 = n2; /*0x10edc*/
  *(_WORD *)(a1 + 402) = n2_1; /*0x10ee4*/
  if ( n2_2 < n2_1 ) /*0x10eee*/
    n2_2 = n2_1; /*0x10eee*/
  *(_WORD *)(a1 + 398) = n2_2; /*0x10ef2*/
  while ( *(__int16 *)(a1 + 396) > 0 ) /*0x10fc8*/
  {
    p_i = &ia; /*0x10f0e*/
    if ( !v16 ) /*0x10f22*/
      p_i = &i_4; /*0x10f22*/
    Assert_117( /*0x10f4f*/
      a1 + 96,
      40,
      (_BYTE *)(a1 + 401),
      *(_WORD *)(a1 + 402),
      *(_BYTE *)(a1 + 400),
      *(_QWORD *)(a1 + 384),
      *(_DWORD *)(a1 + 392),
      p_i);
    if ( *(_WORD *)(a1 + 170) ) /*0x10f54*/
    {
      if ( *(_WORD *)(*(_QWORD *)(a1 + 112) + 2LL) == 2 ) /*0x10fd9*/
        *(_WORD *)(a1 + 64) = 2; /*0x10fe6*/
      else
        *(_WORD *)(a1 + 64) = 7; /*0x10fe0*/
      *(_BYTE *)(a1 + 66) = 6; /*0x10feb*/
      return RstBufferPoolLock(i_2); /*0x10feb*/
    }
    if ( *(__int16 *)(a1 + 402) > 1 || !v16 ) /*0x10f6b*/
      RstBufferXor(*(_DWORD *)(a1 + 392), (_BYTE *)i_4, ia, (_BYTE *)ia); /*0x10f85*/
    *(_WORD *)(a1 + 396) -= *(_WORD *)(a1 + 402); /*0x10f91*/
    v22 = *(_WORD *)(a1 + 396); /*0x10f98*/
    if ( v22 > 0 ) /*0x10fa3*/
    {
      if ( *(__int16 *)(a1 + 398) - 1 < v22 ) /*0x10fb3*/
        v22 = *(_WORD *)(a1 + 398) - 1; /*0x10fb3*/
      *(_WORD *)(a1 + 402) = v22; /*0x10fb6*/
    }
    v16 = 0; /*0x10fbd*/
  }
  return RstBufferPoolLock(i_2); /*0x11006*/
}

// Function: Assert_20 @ 0x11014 (0x1a3 bytes)
// Index: 452/906

__int64 __fastcall Assert_20(__int64 a1, __int64 a2)
{
  char v3; // al
  __int64 v4; // rcx
  char n0xFF_3; // r11
  char n0xFF_2; // r8
  int v8; // ecx
  int i_2; // eax
  __int64 i_3; // r9
  __int64 n0xFF; // [rsp+28h] [rbp-50h]
  _BYTE *i; // [rsp+50h] [rbp-28h] BYREF
  char v14; // [rsp+58h] [rbp-20h]
  __int16 n16; // [rsp+5Ah] [rbp-1Eh]
  unsigned __int8 n0xFF_1; // [rsp+80h] [rbp+8h] BYREF
  char n0xFF_4; // [rsp+88h] [rbp+10h] BYREF
  __int64 i_1; // [rsp+90h] [rbp+18h] BYREF
  __int64 i_4; // [rsp+98h] [rbp+20h] BYREF

  i = 0; /*0x1101d*/
  n16 = 16; /*0x1102a*/
  v3 = *(_BYTE *)(a2 + 68); /*0x1102f*/
  v14 = 0; /*0x11032*/
  *(_BYTE *)(a1 + 404) = v3; /*0x11037*/
  v4 = *(_QWORD *)(a2 + 32); /*0x1103d*/
  *(_QWORD *)(a1 + 408) = a2; /*0x11041*/
  *(_QWORD *)(a1 + 32) = v4; /*0x11048*/
  RstVtableDispatch34(v4, 0, *(_QWORD *)(a2 + 704), (__int64)&n0xFF_4, (__int64)&i_1); /*0x11064*/
  (*(void (__fastcall **)(_QWORD, _QWORD, unsigned __int8 *, __int64 *))(**(_QWORD **)(a1 + 32) + 32LL))( /*0x1108e*/
    *(_QWORD *)(a1 + 32),
    *(_QWORD *)(*(_QWORD *)(a1 + 408) + 704LL),
    &n0xFF_1,
    &i_4);
  n0xFF_3 = *(_BYTE *)(a1 + 404); /*0x11091*/
  n0xFF_2 = n0xFF_4; /*0x11098*/
  if ( n0xFF_4 == n0xFF_3 ) /*0x110a3*/
  {
    RstBufferPoolRealloc((__int64)&i, 0); /*0x110b0*/
    if ( RstDebugEnabled() && !i ) /*0x110c4*/
      DebugAssert("RaidDgReq.cpp", 0xD8u, "oromBuff1.ptr()"); /*0x110d9*/
    v8 = *(unsigned __int8 *)(*(_QWORD *)(a1 + 32) + 42LL); /*0x110e8*/
    Assert_5( /*0x11137*/
      a1,
      a1,
      (unsigned int)i,
      i_1,
      *(_DWORD *)(a1 + 392),
      ((unsigned __int8)n0xFF_4 + 1) % v8,
      v8 - 1,
      n0xFF_1,
      1);
    RstBufferXor(*(_DWORD *)(a1 + 392), (_BYTE *)*(unsigned int *)(a2 + 716), (__int64)i, i); /*0x11150*/
    i_2 = (int)i; /*0x11155*/
    i_3 = i_4; /*0x11159*/
    n0xFF_2 = n0xFF_1; /*0x11161*/
  }
  else
  {
    if ( n0xFF_1 != n0xFF_3 ) /*0x11173*/
    {
      RstHelper_197c(a2); /*0x111a1*/
      return RstBufferPoolLock((__int64)i); /*0x111a1*/
    }
    i_2 = *(_DWORD *)(a2 + 716); /*0x11175*/
    i_3 = i_1; /*0x1117b*/
  }
  LODWORD(n0xFF) = i_2; /*0x11183*/
  Assert_139(a1 + 96, 42, n0xFF_2, i_3, *(_DWORD *)(a1 + 392), n0xFF); /*0x11197*/
  return RstBufferPoolLock((__int64)i); /*0x111b0*/
}

// Function: RstTransferBlockSizeInit @ 0x111b8 (0x61 bytes)
// Index: 453/906

__int64 __fastcall RstTransferBlockSizeInit(__int64 a1, unsigned int n0x2000)
{
  __int64 v2; // rax
  int v3; // r8d
  __int64 n0x2000_1; // rax

  if ( !*(_DWORD *)(a1 + 672) ) /*0x111b8*/
  {
    v2 = *(_QWORD *)(a1 + 704); /*0x111c1*/
    v3 = *(_DWORD *)(a1 + 712); /*0x111c8*/
    *(_DWORD *)(a1 + 672) = 1; /*0x111cf*/
    *(_QWORD *)(a1 + 680) = v2; /*0x111d9*/
    LODWORD(v2) = *(_DWORD *)(a1 + 716); /*0x111e0*/
    *(_DWORD *)(a1 + 716) = 0; /*0x111e6*/
    *(_DWORD *)(a1 + 692) = v2; /*0x111ed*/
    *(_DWORD *)(a1 + 676) = v3; /*0x111f3*/
    *(_DWORD *)(a1 + 696) = v3; /*0x111fa*/
  }
  n0x2000_1 = *(unsigned int *)(a1 + 676); /*0x11201*/
  if ( n0x2000 < (unsigned int)n0x2000_1 ) /*0x11209*/
    n0x2000_1 = n0x2000; /*0x11209*/
  *(_DWORD *)(a1 + 688) = n0x2000_1; /*0x1120c*/
  *(_DWORD *)(a1 + 712) = n0x2000_1; /*0x11212*/
  return n0x2000_1; /*0x11218*/
}

// Function: RstIoCompleteTransfer @ 0x1121c (0x80 bytes)
// Index: 454/906

void __fastcall RstIoCompleteTransfer(__int64 a1)
{
  int v2; // eax
  bool v3; // zf
  __int64 v4; // rax

  if ( *(_DWORD *)(a1 + 672) ) /*0x11222*/
  {
    v2 = *(_DWORD *)(a1 + 688); /*0x1122e*/
    v3 = *(_DWORD *)(a1 + 676) == v2; /*0x11234*/
    *(_DWORD *)(a1 + 676) -= v2; /*0x11234*/
    if ( v3 || *(_BYTE *)(a1 + 66) ) /*0x1123c*/
    {
      *(_DWORD *)(a1 + 672) = 0; /*0x1128f*/
    }
    else
    {
      *(_BYTE *)(a1 + 67) = 0; /*0x11242*/
      *(_QWORD *)(a1 + 680) += *(_DWORD *)(a1 + 688) / (unsigned int)RstHelper_525c(*(_QWORD *)(a1 + 32)); /*0x1125f*/
      v4 = *(_QWORD *)(a1 + 680); /*0x11266*/
      *(_DWORD *)(a1 + 716) = 0; /*0x1126d*/
      *(_QWORD *)(a1 + 704) = v4; /*0x11274*/
      LODWORD(v4) = *(_DWORD *)(a1 + 676); /*0x1127b*/
      *(_DWORD *)(a1 + 688) = v4; /*0x11281*/
      *(_DWORD *)(a1 + 712) = v4; /*0x11287*/
    }
  }
}

// Function: RstRaidStatusDetermine @ 0x1129c (0x56 bytes)
// Index: 455/906

__int64 __fastcall RstRaidStatusDetermine(__int64 a1)
{
  __int64 n7; // rax

  n7 = 0; /*0x112a0*/
  if ( !*(_BYTE *)(a1 + 67) ) /*0x112a5*/
  {
    *(_BYTE *)(a1 + 66) = 0; /*0x112aa*/
LABEL_5:
    *(_WORD *)(a1 + 64) = n7; /*0x112c2*/
    return n7; /*0x112c6*/
  }
  if ( *(_DWORD *)(*(_QWORD *)(a1 + 32) + 8LL) == 3 ) /*0x112b7*/
  {
    *(_BYTE *)(a1 + 66) = 6; /*0x112b9*/
    n7 = 7; /*0x112bd*/
    goto LABEL_5; /*0x112bd*/
  }
  n7 = 2; /*0x112d0*/
  if ( *(_WORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 40) + 16LL) + 2LL) != 2 ) /*0x112d9*/
    return RstRaidOpDispatch(a1, a1); /*0x112e8*/
  *(_BYTE *)(a1 + 66) = 5; /*0x112db*/
  *(_WORD *)(a1 + 64) = 2; /*0x112df*/
  return n7; /*0x112ed*/
}

// Function: RstRaidEntryFinalizeTransfer @ 0x112f4 (0xae bytes)
// Index: 456/906

__int64 __fastcall RstRaidEntryFinalizeTransfer(__int64 a1)
{
  __int64 result; // rax

  Assert_120(a1 + 96, 42, 0, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), *(_DWORD *)(a1 + 716), 255); /*0x1132a*/
  result = Assert_120(a1 + 384, 42, 1, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), *(_DWORD *)(a1 + 716), 255); /*0x1135e*/
  *(_BYTE *)(a1 + 66) = 0; /*0x11365*/
  if ( *(_BYTE *)(a1 + 67) /*0x11384*/
    && (result = RstRaidNotifyDiskDone(*(_QWORD *)(a1 + 32), a1), *(_DWORD *)(*(_QWORD *)(a1 + 32) + 8LL) == 3) )
  {
    *(_BYTE *)(a1 + 66) = 6; /*0x11389*/
    *(_WORD *)(a1 + 64) = 7; /*0x1138d*/
    return 7; /*0x11386*/
  }
  else
  {
    *(_WORD *)(a1 + 64) = 0; /*0x11393*/
  }
  return result; /*0x1139c*/
}

// Function: RstRaidEntryFinalizeWithSize @ 0x113a4 (0x9a bytes)
// Index: 457/906

void __fastcall RstRaidEntryFinalizeWithSize(__int64 a1)
{
  int n23_2; // r8d
  __int64 v2; // r10
  int n23; // edx
  int n23_1; // eax
  __int64 v5; // rax

  if ( *(_WORD *)(a1 + 170) ) /*0x113ad*/
  {
    if ( *(_WORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 40) + 16LL) + 2LL) == 2 ) /*0x113d0*/
    {
      *(_BYTE *)(a1 + 66) = 5; /*0x113d2*/
      *(_WORD *)(a1 + 64) = 2; /*0x113d7*/
    }
    else
    {
      n23_2 = *(unsigned __int8 *)(a1 + 68); /*0x113de*/
      v2 = *(_QWORD *)(a1 + 32); /*0x113e3*/
      *(_BYTE *)(a1 + 66) = 6; /*0x113e7*/
      n23 = 23; /*0x113f0*/
      n23_1 = 23; /*0x113f5*/
      if ( (unsigned __int8)n23_2 < 0x18u ) /*0x113f7*/
        n23_1 = n23_2; /*0x113f7*/
      v5 = *(_QWORD *)(v2 + 16 * (n23_1 + 7LL)); /*0x11408*/
      if ( (unsigned __int8)n23_2 < 0x18u ) /*0x1140c*/
        n23 = n23_2; /*0x1140c*/
      *(_WORD *)(a1 + 64) = *(_WORD *)(v5 + 120); /*0x1141b*/
      if ( *(__int16 *)(*(_QWORD *)(v2 + 16 * (n23 + 7LL)) + 114LL) >= 4 ) /*0x1142c*/
        RstRaidNotifyDiskDone(v2, a1); /*0x11434*/
    }
  }
  else
  {
    *(_BYTE *)(a1 + 66) = 0; /*0x113b6*/
    *(_WORD *)(a1 + 64) = 0; /*0x113b9*/
  }
}

// Function: RstConfigBlockCopyState @ 0x11440 (0x1d bytes)
// Index: 458/906

__int64 __fastcall RstConfigBlockCopyState(__int64 a1, __int64 a2)
{
  __int64 result; // rax

  *(_QWORD *)(a2 + 48) = *(_QWORD *)(a1 + 48); /*0x11444*/
  *(_QWORD *)(a2 + 56) = *(_QWORD *)(a1 + 56); /*0x1144c*/
  result = *(unsigned int *)(a1 + 712); /*0x11450*/
  *(_DWORD *)(a2 + 392) = result; /*0x11456*/
  return result; /*0x1145c*/
}

// Function: Assert_12 @ 0x11460 (0x1d0 bytes)
// Index: 459/906

__int64 __fastcall Assert_12(__int64 a1)
{
  __int64 v2; // rcx
  __int64 v3; // rdx
  __int64 v4; // rcx
  __int64 n0xFF; // [rsp+28h] [rbp-60h]
  __int64 n0xFFa; // [rsp+28h] [rbp-60h]
  _BYTE *i; // [rsp+50h] [rbp-38h] BYREF
  char v9; // [rsp+58h] [rbp-30h]
  __int16 n16; // [rsp+5Ah] [rbp-2Eh]
  char n0xFF_2; // [rsp+90h] [rbp+8h] BYREF
  char n0xFF_1; // [rsp+98h] [rbp+10h] BYREF
  __int64 i_1; // [rsp+A0h] [rbp+18h] BYREF
  __int64 i_2; // [rsp+A8h] [rbp+20h] BYREF

  i = 0; /*0x11478*/
  n16 = 16; /*0x1147d*/
  v9 = 0; /*0x11482*/
  RstBufferPoolRealloc((__int64)&i, 0); /*0x11487*/
  if ( RstDebugEnabled() && !i ) /*0x1149b*/
    DebugAssert("RaidReq.cpp", 0x1FAu, "oromBuff1.ptr()"); /*0x114b0*/
  v2 = *(_QWORD *)(a1 + 32); /*0x114b5*/
  v3 = *(_QWORD *)(a1 + 704); /*0x114b9*/
  *(_BYTE *)(a1 + 66) = 0; /*0x114c0*/
  *(_WORD *)(a1 + 64) = 0; /*0x114c4*/
  (*(void (__fastcall **)(__int64, __int64, char *, __int64 *))(*(_QWORD *)v2 + 24LL))(v2, v3, &n0xFF_2, &i_1); /*0x114db*/
  (*(void (__fastcall **)(_QWORD, _QWORD, char *, __int64 *))(**(_QWORD **)(a1 + 32) + 32LL))( /*0x114fc*/
    *(_QWORD *)(a1 + 32),
    *(_QWORD *)(a1 + 704),
    &n0xFF_1,
    &i_2);
  v4 = Source_16 + 33680; /*0x1150a*/
  *(_QWORD *)(Source_16 + 33728) = *(_QWORD *)(a1 + 48); /*0x11516*/
  *(_QWORD *)(v4 + 56) = *(_QWORD *)(a1 + 56); /*0x11523*/
  *(_DWORD *)(v4 + 392) = *(_DWORD *)(a1 + 712); /*0x1152d*/
  Assert_5( /*0x1157e*/
    v4,
    a1,
    (unsigned int)i,
    i_1,
    *(_DWORD *)(a1 + 712),
    ((unsigned __int8)n0xFF_2 + 1) % *(unsigned __int8 *)(*(_QWORD *)(a1 + 32) + 42LL),
    *(_BYTE *)(*(_QWORD *)(a1 + 32) + 42LL) - 1,
    n0xFF_1,
    1);
  RstBufferXor(*(_DWORD *)(a1 + 712), (_BYTE *)*(unsigned int *)(a1 + 716), (__int64)i, i); /*0x11597*/
  LODWORD(n0xFF) = *(_DWORD *)(a1 + 716); /*0x115b2*/
  Assert_139(a1 + 96, 42, n0xFF_2, i_1, *(_DWORD *)(a1 + 712), n0xFF); /*0x115c6*/
  LODWORD(n0xFFa) = (_DWORD)i; /*0x115e6*/
  Assert_139(a1 + 96, 42, n0xFF_1, i_2, *(_DWORD *)(a1 + 712), n0xFFa); /*0x115f5*/
  if ( *(_BYTE *)(a1 + 67) ) /*0x115fa*/
  {
    RstRaidNotifyDiskDone(*(_QWORD *)(a1 + 32), a1); /*0x11607*/
    if ( *(_BYTE *)(a1 + 67) > 1u ) /*0x11610*/
    {
      *(_BYTE *)(a1 + 66) = 6; /*0x11615*/
      *(_WORD *)(a1 + 64) = 7; /*0x11619*/
    }
  }
  return RstBufferPoolLock((__int64)i); /*0x11627*/
}

// Function: RstRaidIoRequestInit @ 0x11630 (0x59 bytes)
// Index: 460/906

unsigned __int64 __fastcall RstRaidIoRequestInit(__int64 a1, __int64 a2, char a3, __int64 Source)
{
  __int64 v4; // rax
  unsigned __int64 result; // rax

  *(_QWORD *)(a1 + 32) = a2; /*0x11630*/
  v4 = *(_QWORD *)(a2 + 32); /*0x11634*/
  *(_DWORD *)(a1 + 672) = 0; /*0x11638*/
  *(_QWORD *)(a1 + 48) = v4; /*0x1163f*/
  *(_BYTE *)(a1 + 700) = a3; /*0x11643*/
  *(_BYTE *)(a1 + 67) = 0; /*0x1164a*/
  *(_DWORD *)(a1 + 712) = *(_DWORD *)(Source + 16); /*0x11658*/
  *(_DWORD *)(a1 + 716) = *(_DWORD *)(Source + 20); /*0x11662*/
  result = *(_QWORD *)(Source + 8) / (unsigned __int64)*(unsigned int *)(a2 + 84); /*0x11672*/
  *(_QWORD *)(a1 + 704) = *(_QWORD *)(Source + 8) % (unsigned __int64)*(unsigned int *)(a2 + 84); /*0x11675*/
  *(_QWORD *)(a1 + 56) = result * *(unsigned int *)(a2 + 88); /*0x11684*/
  return result; /*0x11688*/
}

// Function: RstRaidOpSetRetryState @ 0x1168c (0xe bytes)
// Index: 461/906

__int64 __fastcall RstRaidOpSetRetryState(__int64 a1)
{
  *(_BYTE *)(a1 + 66) = 6; /*0x11691*/
  *(_WORD *)(a1 + 64) = 7; /*0x11695*/
  return 7; /*0x11699*/
}

// Function: RstRaidOpStateInit @ 0x1169c (0x34 bytes)
// Index: 462/906

__int64 __fastcall RstRaidOpStateInit(__int64 a1)
{
  *(_QWORD *)(a1 + 8) = 0; /*0x1169e*/
  *(_QWORD *)a1 = 0; /*0x116a2*/
  *(_QWORD *)(a1 + 104) = 0; /*0x116a5*/
  *(_QWORD *)(a1 + 96) = 0; /*0x116a9*/
  *(_QWORD *)(a1 + 392) = 0; /*0x116ad*/
  *(_QWORD *)(a1 + 384) = 0; /*0x116b4*/
  *(_DWORD *)(a1 + 16) = 0; /*0x116bb*/
  *(_QWORD *)(a1 + 128) = a1; /*0x116be*/
  *(_QWORD *)(a1 + 416) = a1; /*0x116c5*/
  return a1; /*0x116cf*/
}

// Function: RstArrayIoAdvance @ 0x116d0 (0x4b bytes)
// Index: 463/906

void __fastcall RstArrayIoAdvance(_DWORD *a1)
{
  unsigned int v1; // r8d
  int v2; // eax
  unsigned int v3; // edx

  if ( a1[168] && !a1[179] ) /*0x116d9*/
  {
    v1 = a1[174]; /*0x116e2*/
    v2 = a1[173]; /*0x116e9*/
    v3 = a1[172]; /*0x116ef*/
    a1[179] = v2; /*0x116f8*/
    if ( v1 < v3 ) /*0x116fe*/
      v3 = v1; /*0x116fe*/
    a1[178] = v3; /*0x11707*/
    a1[174] = v1 - v3; /*0x1170d*/
    a1[173] = v3 + v2; /*0x11714*/
  }
}

// Function: RstRaidStatusAssertAndDetermine @ 0x1171c (0x45 bytes)
// Index: 464/906

__int64 __fastcall RstRaidStatusAssertAndDetermine(__int64 a1, __int16 a2)
{
  Assert_120(a1 + 96, 40, a2, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), *(_DWORD *)(a1 + 716), 255); /*0x1174f*/
  return RstRaidStatusDetermine(a1); /*0x11757*/
}

// Function: RstRaidOpStep @ 0x11764 (0xb4 bytes)
// Index: 465/906

__int64 __fastcall RstRaidOpStep(__int64 a1, __int64 a2)
{
  __int64 v2; // rax
  __int64 v4; // r8
  __int64 v5; // rcx
  char v7; // [rsp+50h] [rbp+8h] BYREF
  __int64 v8; // [rsp+58h] [rbp+10h] BYREF

  v2 = *(_QWORD *)(a1 + 40); /*0x1176a*/
  *(_BYTE *)(a1 + 67) = 0; /*0x1176e*/
  v4 = *(_QWORD *)(v2 + 16); /*0x11775*/
  v8 = *(_QWORD *)(v4 + 64); /*0x1177d*/
  LOBYTE(a2) = *(_BYTE *)(v4 + 72); /*0x11782*/
  v7 = a2; /*0x11786*/
  if ( *(_WORD *)(v4 + 2) != 2 ) /*0x11790*/
    RstRaidMemberRetryOrActivate(*(_QWORD *)(a1 + 32), a2); /*0x11796*/
  v5 = *(_QWORD *)(a1 + 32); /*0x1179b*/
  if ( *(__int16 *)(a1 + 720) < (__int16)(*(unsigned __int8 *)(v5 + 100) - 1) /*0x117b9*/
    && RstRaidTryMapToNextRow(v5, &v8, (unsigned __int8 *)&v7) )
  {
    Assert_120( /*0x117f6*/
      a1 + 384,
      40,
      *(_DWORD *)(*(_QWORD *)(a1 + 32) + 104LL),
      *(_QWORD *)(a1 + 704),
      *(_DWORD *)(a1 + 712),
      *(_DWORD *)(a1 + 716),
      v7);
    return RstRaidOpDispatchOrStep(a1); /*0x117fe*/
  }
  else
  {
    *(_BYTE *)(a1 + 66) = 6; /*0x1180a*/
    *(_WORD *)(a1 + 64) = 7; /*0x1180e*/
    return 7; /*0x11805*/
  }
}

// Function: Assert_75 @ 0x11818 (0x162 bytes)
// Index: 466/906

__int64 __fastcall Assert_75(__int64 a1)
{
  __int64 Source; // rdi
  unsigned int i_1; // r12d
  __int64 v4; // rdx
  unsigned int n0x2000_1; // esi
  __int64 i; // rbp
  unsigned int n0x2000; // r13d
  int v8; // ecx
  __int64 v9; // rcx
  __int64 result; // rax

  Source = Source_16; /*0x11839*/
  *(_QWORD *)(Source_16 + 33728) = *(_QWORD *)(a1 + 48); /*0x11843*/
  *(_QWORD *)(Source + 33736) = *(_QWORD *)(a1 + 56); /*0x1184e*/
  *(_DWORD *)(Source + 34072) = *(_DWORD *)(a1 + 712); /*0x1185b*/
  i_1 = *(_DWORD *)(a1 + 716); /*0x11865*/
  v4 = *(_QWORD *)(*(_QWORD *)(a1 + 40) + 16LL); /*0x1186c*/
  n0x2000_1 = *(_DWORD *)(v4 + 16); /*0x11870*/
  for ( i = *(_QWORD *)(v4 + 64); n0x2000_1; n0x2000_1 -= n0x2000 ) /*0x11879*/
  {
    n0x2000 = 0x2000; /*0x1188f*/
    if ( n0x2000_1 < 0x2000 ) /*0x118ab*/
      n0x2000 = n0x2000_1; /*0x118ab*/
    v8 = *(unsigned __int8 *)(*(_QWORD *)(a1 + 32) + 42LL); /*0x11895*/
    Assert_5(Source + 33680, a1, i_1, i, n0x2000, (*(unsigned __int8 *)(a1 + 68) + 1) % v8, v8 - 1, 0xFFu, 1); /*0x118d3*/
    if ( *(_BYTE *)(Source + 33747) ) /*0x118d8*/
      break; /*0x118df*/
    i_1 += n0x2000; /*0x118ec*/
    i += n0x2000 / (unsigned int)RstHelper_525c(*(_QWORD *)(a1 + 32)); /*0x118fa*/
  }
  if ( *(_BYTE *)(Source + 33747) || (v9 = *(_QWORD *)(a1 + 32), *(_DWORD *)(v9 + 8) == 2) ) /*0x11917*/
  {
    if ( *(_WORD *)(Source + 33744) != 2 ) /*0x1192a*/
    {
      RstBufferProcessByteArray(a1, Source + 33680); /*0x11936*/
      RstRaidNotifyDiskDone(*(_QWORD *)(a1 + 32), a1); /*0x11942*/
    }
  }
  else
  {
    RstRaidMemberRetryOrActivate(v9, *(_BYTE *)(a1 + 68)); /*0x1191c*/
  }
  *(_BYTE *)(a1 + 66) = *(_BYTE *)(Source + 33746); /*0x1195a*/
  result = *(unsigned __int16 *)(Source + 33744); /*0x1195d*/
  *(_WORD *)(a1 + 64) = result; /*0x11968*/
  return result; /*0x11970*/
}

// Function: RstHelper_197c @ 0x1197c (0x1f7 bytes)
// Index: 467/906

__int64 __fastcall RstHelper_197c(__int64 a1)
{
  __int64 v2; // r9
  int v3; // eax
  __int64 v4; // rcx
  int v6; // [rsp+28h] [rbp-40h]
  __int64 v7; // [rsp+40h] [rbp-28h] BYREF
  char v8; // [rsp+48h] [rbp-20h]
  __int16 n16_1; // [rsp+4Ah] [rbp-1Eh]
  _DWORD *v10; // [rsp+50h] [rbp-18h] BYREF
  char v11; // [rsp+58h] [rbp-10h]
  __int16 n16; // [rsp+5Ah] [rbp-Eh]

  v10 = 0; /*0x11998*/
  v7 = 0; /*0x1199c*/
  v11 = 0; /*0x119a2*/
  v8 = 0; /*0x119a7*/
  n16 = 16; /*0x119ac*/
  n16_1 = 16; /*0x119b1*/
  RstBufferPoolRealloc((__int64)&v10, 0); /*0x119b6*/
  RstBufferPoolRealloc((__int64)&v7, 0); /*0x119c2*/
  if ( RstDebugEnabled() && !v10 ) /*0x119d6*/
    DebugAssert("RaidReq.cpp", 0x19Fu, "oldDataBuffer.ptr()"); /*0x119eb*/
  if ( RstDebugEnabled() && !v7 ) /*0x119ff*/
    DebugAssert("RaidReq.cpp", 0x1A0u, "parityBuffer.ptr()"); /*0x11a14*/
  v2 = *(_QWORD *)(a1 + 704); /*0x11a1d*/
  v6 = (int)v10; /*0x11a29*/
  v3 = *(_DWORD *)(a1 + 712); /*0x11a2d*/
  *(_BYTE *)(a1 + 66) = 0; /*0x11a3c*/
  *(_WORD *)(a1 + 64) = 0; /*0x11a44*/
  Assert_120(a1 + 96, 40, 0, v2, v3, v6, 255); /*0x11a48*/
  Assert_120(a1 + 96, 40, 1, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), v7, 255); /*0x11a77*/
  Assert_120(a1 + 96, 42, 0, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), *(_DWORD *)(a1 + 716), 255); /*0x11aa5*/
  RstXorBufferTransform(*(_DWORD *)(a1 + 712), *(unsigned int *)(a1 + 716), v10, v7, v7); /*0x11ac5*/
  Assert_120(a1 + 96, 42, 1, *(_QWORD *)(a1 + 704), *(_DWORD *)(a1 + 712), v7, 255); /*0x11af4*/
  if ( *(_BYTE *)(a1 + 67) ) /*0x11af9*/
  {
    if ( *(_BYTE *)(a1 + 67) == 1 ) /*0x11b06*/
    {
      v4 = Source_16 + 33680; /*0x11b13*/
      *(_QWORD *)(Source_16 + 33728) = *(_QWORD *)(a1 + 48); /*0x11b1a*/
      *(_QWORD *)(v4 + 56) = *(_QWORD *)(a1 + 56); /*0x11b22*/
      *(_DWORD *)(v4 + 392) = *(_DWORD *)(a1 + 712); /*0x11b2c*/
      Assert_20(v4, a1); /*0x11b32*/
    }
    else
    {
      RstRaidNotifyDiskDone(*(_QWORD *)(a1 + 32), a1); /*0x11b3d*/
      *(_BYTE *)(a1 + 66) = 6; /*0x11b47*/
      *(_WORD *)(a1 + 64) = 7; /*0x11b4b*/
    }
  }
  RstBufferPoolLock(v7); /*0x11b54*/
  return RstBufferPoolLock((__int64)v10); /*0x11b6d*/
}

// Function: Assert_127 @ 0x11b74 (0x61 bytes)
// Index: 468/906

char __fastcall Assert_127(__int64 a1)
{
  __int16 n2; // ax

  LOBYTE(n2) = *(_BYTE *)(a1 + 67); /*0x11b7a*/
  if ( (_BYTE)n2 ) /*0x11b84*/
  {
    if ( (_BYTE)n2 == 1 ) /*0x11b91*/
    {
      n2 = 2; /*0x11b9b*/
      if ( *(_WORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 40) + 16LL) + 2LL) != 2 ) /*0x11ba4*/
      {
        LOBYTE(n2) = Assert_75(a1); /*0x11ba9*/
        return n2; /*0x11bae*/
      }
      *(_BYTE *)(a1 + 66) = 5; /*0x11bb0*/
    }
    else
    {
      RstRaidNotifyDiskDone(*(_QWORD *)(a1 + 32), a1); /*0x11bbd*/
      *(_BYTE *)(a1 + 66) = 6; /*0x11bc2*/
      n2 = 7; /*0x11bc6*/
    }
    *(_WORD *)(a1 + 64) = n2; /*0x11bcb*/
    return n2; /*0x11bcb*/
  }
  *(_BYTE *)(a1 + 66) = 0; /*0x11b86*/
  *(_WORD *)(a1 + 64) = 0; /*0x11b89*/
  return n2; /*0x11bcf*/
}

// Function: RstRaidOpDispatch @ 0x11bd8 (0x2c bytes)
// Index: 469/906

__int64 __fastcall RstRaidOpDispatch(__int64 a1, __int64 a2)
{
  if ( !*(_QWORD *)(a1 + 112) ) /*0x11bde*/
    return RstRaidStatusDetermine(a1); /*0x11bfa*/
  *(_WORD *)(a1 + 720) = 0; /*0x11be4*/
  *(_QWORD *)(a1 + 40) = a1 + 96; /*0x11bef*/
  return RstRaidOpStep(a1, a2); /*0x11bff*/
}

// Function: RstRaidOpDispatchOrStep @ 0x11c04 (0x27 bytes)
// Index: 470/906

__int64 __fastcall RstRaidOpDispatchOrStep(__int64 a1, __int64 a2)
{
  if ( *(_BYTE *)(a1 + 67) ) /*0x11c08*/
  {
    ++*(_WORD *)(a1 + 720); /*0x11c1a*/
    return RstRaidOpStep(a1, a2); /*0x11c21*/
  }
  else
  {
    *(_QWORD *)(a1 + 112) = 0; /*0x11c0e*/
    return RstRaidOpDispatch(a1, a2); /*0x11c13*/
  }
}

// Function: RstDeviceFindByType @ 0x11c2c (0x57 bytes)
// Index: 471/906

char __fastcall RstDeviceFindByType(__int64 a1, char a2)
{
  unsigned __int8 v3; // bl
  __int64 i[20]; // [rsp+20h] [rbp-B8h] BYREF
  char v6; // [rsp+C0h] [rbp-18h]

  v3 = 0; /*0x11c3c*/
  if ( !(unsigned __int8)RstDeviceGetStatusByte() ) /*0x11c3e*/
    return -1; /*0x11c6c*/
  while ( (unsigned int)RstHelper_c8a8(v3, (__int64)i) || v6 != a2 ) /*0x11c5f*/
  {
    if ( ++v3 >= (unsigned __int8)RstDeviceGetStatusByte() ) /*0x11c6a*/
      return -1; /*0x11c6a*/
  }
  return v3; /*0x11c76*/
}

// Function: RstDeviceMatchEntry @ 0x11c84 (0x82 bytes)
// Index: 472/906

char __fastcall RstDeviceMatchEntry(_BYTE *Destination, __int64 a2, __int64 a3)
{
  char v3; // bl
  _QWORD *v5; // rax

  v3 = 0; /*0x11c95*/
  if ( *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a2 + 144) + 248LL) + 28LL) == *(_DWORD *)(a3 + 36) /*0x11cbc*/
    && *(_WORD *)(*(_QWORD *)(a2 + 136) + 64LL) == *(_WORD *)(a3 + 40) )
  {
    v5 = RstLinkedListFindData(*(_QWORD *)(Source_16 + 216), *((_QWORD *)Destination + 11)); /*0x11cd0*/
    if ( v5 != (_QWORD *)-18LL ) /*0x11ce3*/
      return StrnCpy16((_BYTE *)v5 + 18, (_BYTE *)(*(_QWORD *)(a2 + 136) + 84LL), 16) == 0; /*0x11cf7*/
  }
  return v3; /*0x11d00*/
}

// Function: RstHelper_1d08 @ 0x11d08 (0x80 bytes)
// Index: 473/906

__int64 __fastcall RstHelper_1d08(__int64 Destination)
{
  __int64 v2; // rcx
  unsigned int n512; // r9d
  __int64 result; // rax

  *(_DWORD *)Destination = 0; /*0x11d0e*/
  *(_DWORD *)(Destination + 20) = 0; /*0x11d11*/
  *(_DWORD *)(Destination + 4) = 1; /*0x11d18*/
  *(_DWORD *)(Destination + 12) = 24; /*0x11d1f*/
  v2 = *(_QWORD *)(Destination + 88); /*0x11d26*/
  n512 = 512; /*0x11d2a*/
  if ( v2 ) /*0x11d33*/
  {
    n512 = HiiLibReturnZero(v2); /*0x11d47*/
    *(_DWORD *)(Destination + 20) = *(_QWORD *)(*(_QWORD *)(Destination + 88) + 144LL) /*0x11d62*/
                                  - 0x1000
                                  / n512
                                  * (*(_QWORD *)(*(_QWORD *)(Destination + 88) + 144LL)
                                   / (unsigned __int64)(0x1000 / n512));
  }
  result = 576 * (0x100000 / n512); /*0x11d79*/
  *(_DWORD *)(Destination + 16) = result; /*0x11d7c*/
  *(_DWORD *)(Destination + 8) = 24 * (0x100000 / n512); /*0x11d7f*/
  return result; /*0x11d82*/
}

// Function: RstGetFieldCount @ 0x11d88 (0x12 bytes)
// Index: 474/906

__int64 __fastcall RstGetFieldCount(__int64 Destination, char a2)
{
  __int64 result; // rax

  result = *(unsigned int *)(Destination + 4); /*0x11d88*/
  if ( a2 ) /*0x11d8d*/
  {
    if ( (unsigned int)result > 1 ) /*0x11d96*/
      return 1; /*0x11d96*/
  }
  return result; /*0x11d99*/
}

// Function: RstHelper_1d9c @ 0x11d9c (0x47 bytes)
// Index: 475/906

__int64 __fastcall RstHelper_1d9c(CHAR16 *Destination, char a2)
{
  __int64 v3; // rcx
  unsigned int n512; // r8d
  __int64 result; // rax
  unsigned int v6; // ecx

  if ( !a2 ) /*0x11da7*/
    return *((unsigned int *)Destination + 2); /*0x11dda*/
  v3 = *((_QWORD *)Destination + 11); /*0x11da9*/
  n512 = 512; /*0x11dad*/
  if ( v3 ) /*0x11db6*/
    n512 = HiiLibReturnZero(v3); /*0x11dbd*/
  result = *((unsigned int *)Destination + 2); /*0x11dcd*/
  v6 = 24 * (0x100000 / n512); /*0x11dd0*/
  if ( (unsigned int)result > v6 ) /*0x11dd5*/
    return v6; /*0x11dd5*/
  return result; /*0x11ddd*/
}

// Function: RstGetFieldSize @ 0x11de4 (0x12 bytes)
// Index: 476/906

__int64 __fastcall RstGetFieldSize(CHAR16 *Destination, char a2)
{
  __int64 n0x18; // rax

  n0x18 = *((unsigned int *)Destination + 3); /*0x11de4*/
  if ( a2 ) /*0x11de9*/
  {
    if ( (unsigned int)n0x18 > 0x18 ) /*0x11df2*/
      return 24; /*0x11df2*/
  }
  return n0x18; /*0x11df5*/
}

// Function: RstGetFieldBlockSize @ 0x11df8 (0x4 bytes)
// Index: 477/906

__int64 __fastcall RstGetFieldBlockSize(CHAR16 *Destination)
{
  return *((unsigned int *)Destination + 4); /*0x11dfb*/
}

// Function: RstHelper_1dfc @ 0x11dfc (0x39 bytes)
// Index: 478/906

__int64 RstHelper_1dfcHAR16 *Destination)
{
  __int64 v1; // rbx
  __int64 v2; // rcx
  __int64 v3; // rbx

  v1 = 0; /*0x11e02*/
  if ( *((_QWORD *)Destination + 11) ) /*0x11e04*/
  {
    v2 = *((_QWORD *)Destination + 11); /*0x11e0a*/
    v3 = *(_QWORD *)(v2 + 144); /*0x11e0e*/
    return v3 - 0x1000 / (unsigned int)HiiLibReturnZero(v2); /*0x11e29*/
  }
  return v1; /*0x11e2f*/
}

// Function: RstHiiStringGetId @ 0x11e38 (0x4 bytes)
// Index: 479/906

__int64 __fastcall RstHiiStringGetId(CHAR16 *Destination)
{
  return *((unsigned int *)Destination + 5); /*0x11e3b*/
}

// Function: RstHiiStringResetBuffer @ 0x11e3c (0x2a bytes)
// Index: 480/906

__int64 __fastcall RstHiiStringResetBuffer(__int64 Destination)
{
  *(_QWORD *)(Destination + 88) = 0; /*0x11e42*/
  RstHelper_1d08(Destination); /*0x11e4a*/
  *(_BYTE *)(Destination + 24) = 0; /*0x11e58*/
  return RstHelperInitAndLink(Destination + 32, 0, Destination); /*0x11e5c*/
}

// Function: RstRaidGetPhysicalDiskIndex @ 0x11e68 (0x99 bytes)
// Index: 481/906

__int64 __fastcall RstRaidGetPhysicalDiskIndex(__int64 a1, unsigned __int8 a2, _BYTE *a3)
{
  unsigned int v3; // esi
  __int64 v4; // rbx
  __int64 v7; // rax
  char v8; // al
  __int64 v9; // rdx

  *a3 = -1; /*0x11e7c*/
  v3 = a2; /*0x11e87*/
  v4 = *(_QWORD *)(Source_16 + 216); /*0x11e8a*/
  v7 = RstLinkedListFindData(v4, *(_QWORD *)(a1 + 88)); /*0x11e9e*/
  v8 = RstLinkedListIndexOf(v4, v7); /*0x11ea9*/
  v9 = *(unsigned int *)(a1 + 4); /*0x11eae*/
  if ( (unsigned int)v9 > 1 ) /*0x11eba*/
    v9 = 1; /*0x11eba*/
  if ( v3 >= (unsigned int)v9 ) /*0x11ec0*/
    return 2; /*0x11ee7*/
  if ( !*(_BYTE *)(((unsigned __int64)(unsigned __int8)v3 << 6) + a1 + 24) ) /*0x11eca*/
    return 1; /*0x11ee2*/
  LOBYTE(v9) = v8; /*0x11ed1*/
  *a3 = RstDeviceFindByType(a1, v9); /*0x11edb*/
  return 0; /*0x11efb*/
}

// Function: RstRaidEntryLookup @ 0x11f04 (0x5a bytes)
// Index: 482/906

__int64 __fastcall RstRaidEntryLookup(__int64 Destination)
{
  unsigned int v1; // r9d
  _BYTE *i; // rdx
  unsigned int v3; // eax
  unsigned __int64 v4; // rax
  __int64 v5; // rbx

  v1 = 0; /*0x11f0a*/
  for ( i = (_BYTE *)(Destination + 24); ; i += 64 ) /*0x11f0d*/
  {
    v3 = *(_DWORD *)(Destination + 4); /*0x11f15*/
    if ( v3 > 1 ) /*0x11f1b*/
      v3 = 1; /*0x11f1b*/
    if ( v1 >= v3 ) /*0x11f22*/
      break; /*0x11f22*/
    if ( !*i ) /*0x11f27*/
    {
      v4 = (unsigned __int64)v1 << 6; /*0x11f38*/
      *(_BYTE *)(v4 + Destination + 24) = 1; /*0x11f3c*/
      v5 = v4 + Destination + 32; /*0x11f41*/
      RstHelperInitAndLink(v5, v1, Destination); /*0x11f4c*/
      return v5; /*0x11f54*/
    }
    ++v1; /*0x11f29*/
  }
  return 0; /*0x11f58*/
}

// Function: RstConfigBufferSlotIsEmpty @ 0x11f60 (0x31 bytes)
// Index: 483/906

char __fastcall RstConfigBufferSlotIsEmpty(__int64 a1)
{
  unsigned int v1; // r8d
  unsigned int v2; // edx
  _BYTE *i; // rcx
  unsigned int v4; // eax

  v1 = *(_DWORD *)(a1 + 4); /*0x11f60*/
  v2 = 0; /*0x11f64*/
  for ( i = (_BYTE *)(a1 + 24); ; i += 64 ) /*0x11f66*/
  {
    v4 = v1; /*0x11f71*/
    if ( v1 > 1 ) /*0x11f74*/
      v4 = 1; /*0x11f74*/
    if ( v2 >= v4 ) /*0x11f7a*/
      break; /*0x11f7a*/
    if ( !*i ) /*0x11f7f*/
      return 1; /*0x11f8d*/
    ++v2; /*0x11f81*/
  }
  return 0; /*0x11f8d*/
}

// Function: RstConfigBufferClearEntry @ 0x11f94 (0x39 bytes)
// Index: 484/906

__int64 __fastcall RstConfigBufferClearEntry(_BYTE *Source, _BYTE *p_Destination)
{
  unsigned int v2; // r8d
  _BYTE *i; // r9
  __int64 result; // rax

  v2 = 0; /*0x11f94*/
  for ( i = Source + 24; ; i += 64 ) /*0x11f97*/
  {
    result = *((unsigned int *)Source + 1); /*0x11f9f*/
    if ( (unsigned int)result > 1 ) /*0x11fa5*/
      result = 1; /*0x11fa5*/
    if ( v2 >= (unsigned int)result ) /*0x11fac*/
      break; /*0x11fac*/
    if ( &Source[64 * (unsigned __int64)v2 + 32] == p_Destination ) /*0x11fbd*/
      *i = 0; /*0x11fbf*/
    ++v2; /*0x11fc3*/
  }
  return result; /*0x11fcc*/
}

// Function: Assert_92 @ 0x11fd0 (0x95 bytes)
// Index: 485/906

char __fastcall Assert_92(_BYTE *Destination, CHAR16 **p_Destination)
{
  char v4; // bl
  CHAR16 **v5; // rax
  __int64 v6; // rdi
  __int16 v8; // [rsp+40h] [rbp+18h] BYREF

  v4 = 0; /*0x11ff2*/
  if ( Assert_111((__int64)p_Destination) ) /*0x11fed*/
  {
    v8 = 0; /*0x11ff8*/
    do /*0x12010*/
    {
      v6 = Assert_56(Source_16, &v8); /*0x1202a*/
      if ( !v6 ) /*0x12030*/
      {
        v4 = 1; /*0x12032*/
        goto LABEL_6; /*0x12032*/
      }
      v5 = RstBufferAdvancePtr(p_Destination); /*0x12002*/
    }
    while ( !RstDeviceMatchEntry((__int64)Destination, v6, (__int64)v5) ); /*0x12010*/
    *(_QWORD *)(*(_QWORD *)(v6 + 136) + 72LL) = p_Destination; /*0x1205d*/
    return 1; /*0x12061*/
  }
  else
  {
LABEL_6:
    RstConfigBufferClearEntry(Destination, p_Destination); /*0x12034*/
    return v4; /*0x1203f*/
  }
}

// Function: Assert_39 @ 0x12068 (0xfb bytes)
// Index: 486/906

bool __fastcall Assert_39(CHAR16 *Source)
{
  char v2; // al
  CHAR16 *i_1; // rbx
  unsigned int v4; // eax
  int v5; // eax
  int v6; // eax
  __int64 v7; // rax
  _BYTE *i; // [rsp+30h] [rbp-18h] BYREF
  char v10; // [rsp+38h] [rbp-10h]
  __int16 n16; // [rsp+3Ah] [rbp-Eh]

  i = 0; /*0x12082*/
  v10 = 0; /*0x12086*/
  n16 = 16; /*0x1208f*/
  RstBufferPoolRealloc((__int64)&i, 0); /*0x12094*/
  v2 = RstDebugEnabled(); /*0x12099*/
  i_1 = (CHAR16 *)i; /*0x1209e*/
  if ( v2 && !i ) /*0x120ab*/
  {
    DebugAssert("JournalDisk.cpp", 0x11Du, "framebuf.ptr()"); /*0x120c0*/
    i_1 = (CHAR16 *)i; /*0x120c5*/
  }
  MemZero(i_1, 0, 4096); /*0x120d5*/
  *(_DWORD *)Source = 0; /*0x120e6*/
  StrnCpy(i_1, Source, 0x18u); /*0x120e8*/
  v4 = RstReturnAllOnes(); /*0x120ed*/
  v5 = RstCrc32(v4, (unsigned int *)i_1, 4096); /*0x120fd*/
  v6 = RstBitwiseNot(v5); /*0x12104*/
  *(_DWORD *)Source = v6; /*0x1210c*/
  *(_DWORD *)i_1 = v6; /*0x1210e*/
  v7 = RstHelper_1dfc(Source); /*0x12110*/
  Assert_89(Source_16, *((_QWORD *)Source + 11), 42, v7, 4096, (unsigned int)i_1); /*0x12132*/
  RstBufferPoolLock((__int64)i); /*0x1213c*/
  return *(_WORD *)(Source_16 + 2720) == 0; /*0x1215d*/
}

// Function: Assert_33 @ 0x12164 (0x109 bytes)
// Index: 487/906

bool __fastcall Assert_33(CHAR16 *Destination)
{
  unsigned int *Source_1; // rbp
  __int64 v3; // rax
  unsigned int v5; // edi
  unsigned int v6; // eax
  int v7; // eax
  int v8; // ebx
  CHAR16 *Source; // [rsp+30h] [rbp-18h] BYREF
  char v10; // [rsp+38h] [rbp-10h]
  __int16 n16; // [rsp+3Ah] [rbp-Eh]

  Source = 0; /*0x12182*/
  v10 = 0; /*0x12186*/
  n16 = 16; /*0x1218e*/
  RstBufferPoolRealloc((__int64)&Source, 0); /*0x12193*/
  if ( RstDebugEnabled() && !Source ) /*0x121a6*/
    DebugAssert("JournalDisk.cpp", 0x13Au, "framebuf.ptr()"); /*0x121bb*/
  Source_1 = (unsigned int *)Source; /*0x121c0*/
  v3 = RstHelper_1dfc(Destination); /*0x121c8*/
  Assert_89(Source_16, *((_QWORD *)Destination + 11), 40, v3, 4096, (unsigned int)Source); /*0x121ee*/
  if ( *(_WORD *)(Source_16 + 2720) ) /*0x121fa*/
  {
    RstBufferPoolLock((__int64)Source); /*0x12209*/
    return 0; /*0x1220e*/
  }
  else
  {
    v5 = *Source_1; /*0x12212*/
    *Source_1 = 0; /*0x12215*/
    v6 = RstReturnAllOnes(); /*0x12218*/
    v7 = RstCrc32(v6, Source_1, 4096); /*0x12228*/
    v8 = RstBitwiseNot(v7); /*0x12240*/
    StrnCpy(Destination, (const CHAR16 *)Source_1, 0x18u); /*0x12242*/
    RstBufferPoolLock((__int64)Source); /*0x1224c*/
    *(_DWORD *)Destination = v8; /*0x12253*/
    return v5 == v8; /*0x12255*/
  }
}

// Function: Assert_103 @ 0x12270 (0x53 bytes)
// Index: 488/906

bool __fastcall Assert_103(__int64 Destination, __int64 a2, char a3)
{
  CHAR16 *Destination_1; // rcx
  bool result; // al

  *(_QWORD *)(Destination + 88) = a2; /*0x12280*/
  RstHelper_1d08(Destination); /*0x12284*/
  Destination_1 = (CHAR16 *)Destination; /*0x12289*/
  if ( !a3 ) /*0x1228e*/
  {
    if ( Assert_33((CHAR16 *)Destination) ) /*0x122a0*/
      return 1; /*0x122a7*/
    RstHelper_1d08(Destination); /*0x122ac*/
    Destination_1 = (CHAR16 *)Destination; /*0x122b1*/
  }
  result = Assert_39(Destination_1); /*0x12290*/
  if ( !result ) /*0x12297*/
  {
    *(_QWORD *)(Destination + 88) = 0; /*0x12299*/
    return result; /*0x1229e*/
  }
  return 1; /*0x122bd*/
}

// Function: Assert_55 @ 0x122c4 (0xa3 bytes)
// Index: 489/906

void __fastcall Assert_55(_BYTE *Source, __int64 a2)
{
  CHAR16 *v2; // rbx
  __int64 v5; // rdx
  __int64 v6; // rcx
  __int64 v7; // rdx

  v2 = *(CHAR16 **)(a2 + 72); /*0x122d3*/
  if ( (unsigned __int8)RstDebugEnabled(Source, a2) ) /*0x122dd*/
  {
    if ( v2 ) /*0x122e9*/
    {
LABEL_7:
      *(_BYTE *)(RstBufferAdvancePtr(v2) + 4) = 0; /*0x1232b*/
      Assert_40(v2); /*0x1233a*/
      v7 = *(_QWORD *)(a2 + 72); /*0x1233f*/
      *(_DWORD *)(a2 + 80) = 5; /*0x12346*/
      RstConfigBufferClearEntry((__int64)Source, v7); /*0x1234d*/
      *(_QWORD *)(a2 + 72) = 0; /*0x12352*/
      return; /*0x12352*/
    }
    DebugAssert("JournalDisk.cpp", 0xB2u, "jdPplMpbMgr != 0"); /*0x122fe*/
  }
  if ( v2 ) /*0x12306*/
    goto LABEL_7; /*0x12306*/
  if ( (unsigned __int8)RstDebugEnabled(v6, v5) ) /*0x12308*/
    DebugAssert("JournalDisk.cpp", 0xB4u, "((BOOLEAN)(0==1))"); /*0x12324*/
}

// Function: Assert_50 @ 0x12368 (0xad bytes)
// Index: 490/906

__int64 __fastcall Assert_50(__int64 Destination)
{
  unsigned int v1; // esi
  _BYTE *i; // rdi
  __int64 result; // rax
  CHAR16 *p_Destination; // rbx

  v1 = 0; /*0x12381*/
  for ( i = (_BYTE *)(Destination + 24); ; i += 64 ) /*0x12386*/
  {
    result = *(unsigned int *)(Destination + 4); /*0x1238e*/
    if ( (unsigned int)result > 1 ) /*0x12394*/
      result = 1; /*0x12394*/
    if ( v1 >= (unsigned int)result ) /*0x1239a*/
      break; /*0x1239a*/
    if ( *i ) /*0x1239c*/
    {
      if ( RstDebugEnabled() ) /*0x123d0*/
        DebugAssert("JournalDisk.cpp", 0xD2u, "((BOOLEAN)(0==1))"); /*0x123ec*/
    }
    else
    {
      p_Destination = (CHAR16 *)(((unsigned __int64)v1 << 6) + Destination + 32); /*0x123ac*/
      RstHelperInitAndLink((__int64)p_Destination, v1, Destination); /*0x123b4*/
      Assert_43(p_Destination); /*0x123bc*/
      *i = Assert_92((_BYTE *)Destination, (CHAR16 **)p_Destination); /*0x123cc*/
    }
    ++v1; /*0x123f1*/
  }
  return result; /*0x1240e*/
}

// Function: Assert_48 @ 0x12418 (0xb5 bytes)
// Index: 491/906

char __fastcall Assert_48(__int64 Source)
{
  char v2; // di
  __int64 v3; // rdx
  __int64 v4; // rcx
  unsigned int v5; // r12d
  _BYTE *v6; // rbp
  unsigned int v7; // eax
  char v8; // al

  v2 = 0; /*0x12433*/
  if ( Assert_39((CHAR16 *)Source) ) /*0x12436*/
  {
    v5 = 0; /*0x12445*/
    v6 = (_BYTE *)(Source + 24); /*0x12448*/
    v2 = 1; /*0x1244c*/
    do /*0x124af*/
    {
      v7 = *(_DWORD *)(Source + 4); /*0x1244f*/
      if ( v7 > 1 ) /*0x12455*/
        v7 = 1; /*0x12455*/
      if ( v5 >= v7 ) /*0x1245c*/
        break; /*0x1245c*/
      if ( (unsigned __int8)RstDebugEnabled(v4, v3) && *v6 ) /*0x12467*/
        DebugAssert("JournalDisk.cpp", 0x10Du, "!m_jmm[ n ].m_bUsed"); /*0x12480*/
      *(_BYTE *)(RstBufferAdvancePtr(((unsigned __int64)v5 << 6) + Source + 32) + 4) = 0; /*0x1249c*/
      v8 = Assert_40((CHAR16 *)(((unsigned __int64)v5++ << 6) + Source + 32)); /*0x124a0*/
      v6 += 64; /*0x124a8*/
      v2 &= v8; /*0x124ac*/
    }
    while ( v2 ); /*0x124af*/
  }
  return v2; /*0x124c3*/
}

// Function: Assert_93 @ 0x124d0 (0x8f bytes)
// Index: 492/906

__int64 __fastcall Assert_93(_BYTE *Source)
{
  __int64 v2; // rsi
  __int64 v3; // rbx
  _QWORD *v4; // rax
  __int64 result; // rax
  __int16 v6; // [rsp+38h] [rbp+10h] BYREF

  v6 = 0; /*0x124e9*/
  while ( 1 ) /*0x12540*/
  {
    result = Assert_56(Source_16, &v6); /*0x12540*/
    if ( !result ) /*0x12548*/
      break; /*0x12548*/
    v2 = *(_QWORD *)(result + 136); /*0x124ef*/
    v3 = *(_QWORD *)(Source_16 + 216); /*0x12501*/
    v4 = RstLinkedListFindData(v3, *((_QWORD *)Source + 11)); /*0x1250b*/
    LOBYTE(v3) = RstLinkedListIndexOf(v3, v4); /*0x1251e*/
    if ( RstCfgRaidDevLookup(v2) == (_BYTE)v3 ) /*0x12527*/
      Assert_55(Source, v2); /*0x1252f*/
  }
  return result; /*0x12559*/
}

// Function: RstBufferPoolInitEntries @ 0x12560 (0x44 bytes)
// Index: 493/906

__int64 __fastcall RstBufferPoolInitEntries(_BYTE *a1)
{
  _BYTE *v1; // rbx
  _BYTE *Destination; // rdi
  __int64 n24; // rsi
  __int64 result; // rax

  v1 = a1; /*0x1256f*/
  Destination = a1 + 8; /*0x12572*/
  n24 = 24; /*0x12576*/
  do /*0x12592*/
  {
    *v1 = 0; /*0x1257e*/
    result = RstHiiStringResetBuffer((__int64)Destination); /*0x12581*/
    Destination += 104; /*0x12586*/
    v1 += 104; /*0x1258a*/
    --n24; /*0x1258e*/
  }
  while ( n24 ); /*0x12592*/
  return result; /*0x1259e*/
}

// Function: Assert_106 @ 0x125a4 (0x46 bytes)
// Index: 494/906

__int64 __fastcall Assert_106(_BYTE *a1)
{
  _BYTE *v1; // rbx
  _BYTE *Destination; // rdi
  __int64 n24; // rsi
  __int64 result; // rax

  v1 = a1; /*0x125b3*/
  Destination = a1 + 8; /*0x125b6*/
  n24 = 24; /*0x125ba*/
  do /*0x125d8*/
  {
    if ( *v1 ) /*0x125bf*/
      result = Assert_50((__int64)Destination); /*0x125c7*/
    Destination += 104; /*0x125cc*/
    v1 += 104; /*0x125d0*/
    --n24; /*0x125d4*/
  }
  while ( n24 ); /*0x125d8*/
  return result; /*0x125e4*/
}

// Function: Assert_130 @ 0x125ec (0x5b bytes)
// Index: 495/906

__int64 __fastcall Assert_130(_BYTE *a1, _BYTE *Source)
{
  _BYTE *v3; // rbx
  _BYTE *Source_1; // rdi
  __int64 n24; // rsi
  __int64 result; // rax

  v3 = a1; /*0x12603*/
  Source_1 = a1 + 8; /*0x12606*/
  n24 = 24; /*0x1260a*/
  do /*0x12630*/
  {
    if ( !*v3 && Source_1 == Source ) /*0x12617*/
    {
      result = Assert_93(Source_1); /*0x1261c*/
      *v3 = 0; /*0x12621*/
    }
    Source_1 += 104; /*0x12624*/
    v3 += 104; /*0x12628*/
    --n24; /*0x1262c*/
  }
  while ( n24 ); /*0x12630*/
  return result; /*0x12641*/
}

// Function: RstBufferPoolFindEntry @ 0x12648 (0x39 bytes)
// Index: 496/906

__int64 __fastcall RstBufferPoolFindEntry(__int64 a1, __int64 a2)
{
  int v3; // eax
  __int64 v4; // rdx
  __int64 n24; // r9

  if ( !a2 ) /*0x1264e*/
    return 0; /*0x12672*/
  v3 = 0; /*0x12650*/
  v4 = a1; /*0x12652*/
  n24 = 0; /*0x12655*/
  while ( !*(_BYTE *)v4 || *(_QWORD *)(v4 + 96) != a2 ) /*0x12661*/
  {
    ++n24; /*0x12663*/
    ++v3; /*0x12666*/
    v4 += 104; /*0x12668*/
    if ( n24 >= 24 ) /*0x12670*/
      return 0; /*0x12670*/
  }
  return 104LL * v3 + a1 + 8; /*0x12674*/
}

// Function: RstJournalDiskFindEntry @ 0x12684 (0x68 bytes)
// Index: 497/906

char __fastcall RstJournalDiskFindEntry(_BYTE *i, __int64 a2)
{
  __int64 n24; // rdi

  n24 = 0; /*0x126a0*/
  while ( !*i || StrnCpy16((_BYTE *)(a2 + 28), (_BYTE *)(*((_QWORD *)i + 12) + 28LL), 0xFFFF) ) /*0x126c2*/
  {
    ++n24; /*0x126c4*/
    i += 104; /*0x126c7*/
    if ( n24 >= 24 ) /*0x126cf*/
      return 0; /*0x126d1*/
  }
  return 1; /*0x126e2*/
}

// Function: Assert_51 @ 0x126ec (0xad bytes)
// Index: 498/906

_BYTE *__fastcall Assert_51(_BYTE *i, __int64 a2, char a3)
{
  __int64 v6; // rdx
  __int64 v7; // rcx
  int v8; // ebx
  _BYTE *j; // rsi
  __int64 v10; // rax

  if ( RstJournalDiskFindEntry((__int64)i, a2) ) /*0x1270e*/
  {
    if ( (unsigned __int8)RstDebugEnabled(v7, v6) ) /*0x1275b*/
      DebugAssert("JournalDisksMgr.cpp", 0x46u, "((BOOLEAN)(0==1))"); /*0x12777*/
    return 0; /*0x1277c*/
  }
  else
  {
    v8 = 0; /*0x12717*/
    for ( j = i; *j || !Assert_103((__int64)&i[104 * v8 + 8], a2, a3); j += 104 ) /*0x12719*/
    {
      if ( ++v8 >= 24 ) /*0x12745*/
        return 0; /*0x12745*/
    }
    v10 = 104LL * v8; /*0x1274c*/
    i[v10] = 1; /*0x12750*/
    return &i[v10 + 8]; /*0x12754*/
  }
}

// Function: RstIoCompletionNodeInit @ 0x1279c (0x47 bytes)
// Index: 499/906

_QWORD *__fastcall RstIoCompletionNodeInit(_QWORD *a1)
{
  _QWORD *v1; // rdi
  _QWORD *v3; // rax

  v1 = 0; /*0x127a6*/
  a1[1] = 0; /*0x127ab*/
  *a1 = 0; /*0x127af*/
  a1[5] = 0; /*0x127b2*/
  v3 = (_QWORD *)RstMemPoolAlloc(64); /*0x127b9*/
  if ( v3 ) /*0x127c1*/
    v1 = RstDeviceNodeInit(v3, (__int64)a1); /*0x127ce*/
  a1[8] = v1; /*0x127d1*/
  return a1; /*0x127dd*/
}

// Function: RstDeviceClearCounts @ 0x127e4 (0xa bytes)
// Index: 500/906

__int64 __fastcall RstDeviceClearCounts(__int64 a1)
{
  *(_WORD *)(a1 + 56) = 0; /*0x127e6*/
  *(_DWORD *)(a1 + 76) = 0; /*0x127ea*/
  return 0; /*0x127ed*/
}

// Function: RstDeviceSetFlagsFiltered @ 0x127f0 (0x11 bytes)
// Index: 501/906

__int64 __fastcall RstDeviceSetFlagsFiltered(__int64 a1, int a2, unsigned int n513)
{
  if ( (a2 & 4) != 0 ) /*0x127f3*/
    a2 &= ~1u; /*0x127f5*/
  return RstDeviceUpdateFlagsMask(*(_QWORD *)(a1 + 48), a2, n513);
}

// Function: RstJournalDeviceSetMode @ 0x12804 (0x53 bytes)
// Index: 502/906

__int64 __fastcall RstJournalDeviceSetMode(__int64 a1, char a2)
{
  if ( a2 ) /*0x12814*/
  {
    *(_DWORD *)(a1 + 76) = 1; /*0x12816*/
    RstDeviceSetFlags(*(_QWORD *)(a1 + 48), 33554720); /*0x12821*/
    return RstDeviceClearFlags(*(_QWORD *)(a1 + 48), 64); /*0x1282f*/
  }
  else
  {
    *(_DWORD *)(a1 + 76) = 0; /*0x12836*/
    RstDeviceClearFlags(*(_QWORD *)(a1 + 48), 33554720); /*0x1283e*/
    return RstDeviceSetFlags(*(_QWORD *)(a1 + 48), 64); /*0x1284c*/
  }
}

// Function: RstDeviceGetCount @ 0x12858 (0x4 bytes)
// Index: 503/906

__int64 __fastcall RstDeviceGetCount(__int64 a1)
{
  return *(unsigned int *)(a1 + 76); /*0x1285b*/
}

// Function: RstDeviceListEntrySetActive @ 0x1285c (0x50 bytes)
// Index: 504/906

__int64 __fastcall RstDeviceListEntrySetActive(__int64 i, __int64 a2)
{
  __int64 result; // rax

  if ( a2 ) /*0x12874*/
  {
    RstDeviceSetFlags(*(_QWORD *)(i + 48), 2); /*0x1288a*/
    result = RstDeviceClearFlags(*(_QWORD *)(i + 48), 1); /*0x12898*/
    *(_QWORD *)(i + 40) = a2; /*0x1289d*/
  }
  else
  {
    *(_QWORD *)(i + 40) = 0; /*0x12876*/
    return RstDeviceClearFlags(*(_QWORD *)(i + 48), 2); /*0x1287f*/
  }
  return result; /*0x128a6*/
}

// Function: RstDeviceSetOnlineFlag @ 0x128ac (0xe bytes)
// Index: 505/906

__int64 __fastcall RstDeviceSetOnlineFlag(__int64 a1)
{
  return RstDeviceSetFlags(*(_QWORD *)(a1 + 48), 4u);
}

// Function: RstDeviceIsActive @ 0x128bc (0x20 bytes)
// Index: 506/906

char __fastcall RstDeviceIsActive(__int64 a1)
{
  char v1; // dl

  v1 = 1; /*0x128bc*/
  if ( *(_DWORD *)(a1 + 76) != 1 || (*(_DWORD *)(*(_QWORD *)(a1 + 48) + 136LL) & 0x2000000) == 0 ) /*0x128d5*/
    return 0; /*0x128d7*/
  return v1; /*0x128db*/
}

// Function: RstDeviceCheckReservedSuffix @ 0x128dc (0xa7 bytes)
// Index: 507/906

char __fastcall RstDeviceCheckReservedSuffix(__int64 a1)
{
  __int16 n2; // ax
  __int64 v3; // rdi
  char v4; // bl

  n2 = StrLenA((_BYTE *)(a1 + 18)); /*0x128f2*/
  if ( (unsigned __int16)n2 < 2u ) /*0x128ff*/
    return 0; /*0x12971*/
  v3 = (unsigned __int16)(n2 - 2) + a1 + 18; /*0x12916*/
  v4 = 0; /*0x12923*/
  if ( RstStringFindInBuffer(v3, "-A", 2u) || RstStringFindInBuffer(v3, "-1", 2u) || RstStringFindInBuffer(v3, "-B", 2u) || RstStringFindInBuffer(v3, "-2", 2u) ) /*0x12962*/
    return 1; /*0x1296b*/
  return v4; /*0x1297d*/
}

// Function: RstJournalEntryInit @ 0x12984 (0x7e bytes)
// Index: 508/906

unsigned __int8 __fastcall RstJournalEntryInit(__int64 *i, const CHAR16 *Source, __int64 a3)
{
  unsigned __int8 result; // al
  _QWORD *i_1; // rdx
  __int64 v7; // rcx

  *((_WORD *)i + 28) = 0; /*0x129a0*/
  *((_DWORD *)i + 19) = 0; /*0x129a4*/
  result = (unsigned __int8)StrnCpy((CHAR16 *)i + 9, Source, 0x10u); /*0x129af*/
  *((_BYTE *)i + 34) = 0; /*0x129b4*/
  i_1 = (_QWORD *)i[5]; /*0x129b8*/
  i[6] = a3; /*0x129bc*/
  if ( i_1 ) /*0x129c3*/
  {
    result = RstLinkedListContains(*(_QWORD *)(Source_16 + 216), i_1); /*0x129d3*/
    if ( !result ) /*0x129db*/
    {
      v7 = i[6]; /*0x129dd*/
      i[5] = 0; /*0x129e4*/
      return RstDeviceClearFlags(v7, 2); /*0x129e8*/
    }
  }
  return result; /*0x129fc*/
}

// Function: RstConfigArrayAddDevice @ 0x12a04 (0xe3 bytes)
// Index: 509/906

unsigned __int8 __fastcall RstConfigArrayAddDevice(__int64 i, __int64 Source)
{
  int v2; // ebx
  int v5; // esi
  __int64 v6; // rax
  __int64 Source_1; // rbx
  unsigned __int64 v8; // rax

  v2 = *(_DWORD *)(Source + 24); /*0x12a1d*/
  v5 = v2 & ((unsigned __int8)RstDeviceFindAndRemove((_BYTE *)Source) != 0 ? 46269063 : 12714631);
  *(_DWORD *)(i + 76) = (unsigned __int8)RstDeviceFindAndRemove((_BYTE *)Source) != 0; /*0x12a58*/
  StrnCpy((CHAR16 *)(i + 18), (const CHAR16 *)Source, 0x10u); /*0x12a5f*/
  *(_BYTE *)(i + 34) = 0; /*0x12a64*/
  v6 = RstDeviceArrayFindByName(Source_16 + 2984, (_BYTE *)(i + 18)); /*0x12a7a*/
  *(_QWORD *)(i + 48) = v6; /*0x12a7f*/
  if ( v6 ) /*0x12a86*/
  {
    RstDeviceSetFlags(v6, v5); /*0x12a8d*/
  }
  else
  {
    Source_1 = Source_16; /*0x12a94*/
    v8 = RstBufferCombine32to64(Source); /*0x12a9e*/
    *(_QWORD *)(i + 48) = RstConfigArrayAddEntry(Source_1 + 2984, (_BYTE *)(i + 18), v5, v8); /*0x12ab9*/
  }
  return RstJournalEntryInit((__int64 *)i, (const CHAR16 *)(i + 18), *(_QWORD *)(i + 48)); /*0x12adc*/
}

// Function: RstVolCheckAllMembersReady @ 0x12ae8 (0x3e bytes)
// Index: 510/906

char __fastcall RstVolCheckAllMembersReady(__int64 a1)
{
  __int16 v1; // r8

  v1 = 0; /*0x12aed*/
  if ( !*(_BYTE *)(a1 + 20) ) /*0x12ae8*/
    return 1; /*0x12b20*/
  while ( (*(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 8LL * v1 + 24) + 48LL) + 136LL) & 0x10) == 0 ) /*0x12b11*/
  {
    if ( ++v1 >= (int)*(unsigned __int8 *)(a1 + 20) ) /*0x12b1e*/
      return 1; /*0x12b1e*/
  }
  return 0; /*0x12b22*/
}

// Function: RstArrayHasActiveMemberWrite @ 0x12b28 (0x45 bytes)
// Index: 511/906

char __fastcall RstArrayHasActiveMemberWrite(__int64 a1)
{
  __int16 v1; // r8

  v1 = 0; /*0x12b39*/
  if ( !*(_BYTE *)(a1 + 224) ) /*0x12b28*/
    return 0; /*0x12b67*/
  while ( *(_WORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 8LL * v1 + 232) + 56LL) + 40LL) + 4LL) ) /*0x12b58*/
  {
    if ( ++v1 >= (int)*(unsigned __int8 *)(a1 + 224) ) /*0x12b65*/
      return 0; /*0x12b65*/
  }
  return 1; /*0x12b69*/
}

// Function: RstArrayRegionFindEntry @ 0x12b70 (0x3f bytes)
// Index: 512/906

__int64 __fastcall RstArrayRegionFindEntry(__int64 a1, __int64 a2)
{
  __int16 i_1; // cx
  __int16 i; // r9

  i_1 = *(_WORD *)(a1 + 408); /*0x12b73*/
  for ( i = 0; ; ++i ) /*0x12b7a*/
  {
    if ( i >= i_1 ) /*0x12b99*/
      return 0; /*0x12b9d*/
    if ( *(_QWORD *)(a1 + 24LL * i + 416) == a2 ) /*0x12b8f*/
      break; /*0x12b8f*/
  }
  return a1 + 24LL * i + 416; /*0x12b9d*/
}

// Function: RstConfigArrayRemoveEntry @ 0x12bb0 (0xdd bytes)
// Index: 513/906

__int64 __fastcall RstConfigArrayRemoveEntry(__int64 a1, __int64 a2)
{
  __int64 result; // rax
  __int64 v5; // r11
  int n3; // eax
  _QWORD *v7; // r10
  int v8; // edx
  __int64 v9; // rcx

  result = RstArrayRegionFindEntry(a1, a2); /*0x12bc0*/
  v5 = 0; /*0x12bc5*/
  while ( 1 ) /*0x12c1a*/
  {
    v7 = (_QWORD *)result; /*0x12c1a*/
    if ( result == v5 ) /*0x12c20*/
      break; /*0x12c20*/
    --*(_WORD *)(a1 + 408); /*0x12bca*/
    n3 = 3; /*0x12bd9*/
    if ( *(__int16 *)(a1 + 408) < 4 ) /*0x12be5*/
      n3 = *(__int16 *)(a1 + 408); /*0x12be5*/
    *v7 = *(_QWORD *)(a1 + 24LL * n3 + 416); /*0x12bf7*/
    v7[1] = *(_QWORD *)(a1 + 24LL * n3 + 424); /*0x12c02*/
    v7[2] = *(_QWORD *)(a1 + 24LL * n3 + 432); /*0x12c11*/
    result = RstArrayRegionFindEntry(a1, a2); /*0x12c15*/
  }
  v8 = *(unsigned __int8 *)(a1 + 224); /*0x12c22*/
  if ( v8 > (int)v5 ) /*0x12c2c*/
  {
    while ( 1 ) /*0x12c2e*/
    {
      result = (__int16)v5; /*0x12c2e*/
      LOWORD(v5) = v5 + 1; /*0x12c32*/
      if ( a2 == *(_QWORD *)(a1 + 8 * result + 232) ) /*0x12c3e*/
        break; /*0x12c3e*/
      if ( (__int16)v5 >= *(unsigned __int8 *)(a1 + 224) ) /*0x12c4b*/
        return result; /*0x12c4b*/
    }
    result = (unsigned int)(__int16)v5; /*0x12c4f*/
    if ( (int)result < v8 ) /*0x12c55*/
    {
      do /*0x12c7a*/
      {
        v9 = (__int16)v5; /*0x12c57*/
        LOWORD(v5) = v5 + 1; /*0x12c5b*/
        result = *(_QWORD *)(a1 + 8 * v9 + 232); /*0x12c5f*/
        *(_QWORD *)(a1 + 8 * v9 + 224) = result; /*0x12c67*/
      }
      while ( (__int16)v5 < *(unsigned __int8 *)(a1 + 224) ); /*0x12c7a*/
    }
    --*(_BYTE *)(a1 + 224); /*0x12c7c*/
  }
  return result; /*0x12c87*/
}

// Function: RstVolGetFirstStripeSize @ 0x12c90 (0x2b bytes)
// Index: 514/906

unsigned __int8 __fastcall RstVolGetFirstStripeSize(__int64 a1)
{
  unsigned __int8 n24; // al
  unsigned __int8 n0x18; // cl

  if ( !*(_BYTE *)(a1 + 224) ) /*0x12c90*/
    return 0; /*0x12c99*/
  n0x18 = *(_BYTE *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 232) + 56LL) + 40LL) + 6LL); /*0x12cab*/
  n24 = 24; /*0x12cae*/
  if ( n0x18 <= 0x18u ) /*0x12cb5*/
    return n0x18; /*0x12cb7*/
  return n24; /*0x12c9b*/
}

// Function: RstLinkedListCountToNode @ 0x12cbc (0x2e bytes)
// Index: 515/906

__int16 __fastcall RstLinkedListCountToNode(_QWORD *a1)
{
  _QWORD *v1; // r8
  __int16 result; // ax

  v1 = *(_QWORD **)(*(_QWORD *)(Source_16 + 216) + 264LL); /*0x12cca*/
  result = 0; /*0x12cd3*/
  while ( v1 && v1 != a1 ) /*0x12cdb*/
  {
    v1 = (_QWORD *)*v1; /*0x12cdd*/
    ++result; /*0x12ce0*/
  }
  return result; /*0x12ce8*/
}

// Function: Assert_26 @ 0x12cec (0x15d bytes)
// Index: 516/906

__int64 __fastcall Assert_26(__int64 a1, unsigned __int64 a2, unsigned __int8 a3)
{
  __int64 v6; // rdx
  __int64 v7; // rcx
  int v8; // r12d
  unsigned int v9; // esi
  __int64 v10; // rdx
  __int64 v11; // rcx
  unsigned int v12; // edi

  if ( (unsigned __int8)RstDebugEnabled(a1, a2) ) /*0x12d0d*/
  {
    if ( (unsigned __int8)RstDebugEnabled(v7, v6) ) /*0x12d1c*/
    {
      if ( *(_DWORD *)(a1 + 280) ) /*0x12d25*/
        goto LABEL_7; /*0x12d2c*/
      DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x12d3f*/
    }
    if ( !*(_DWORD *)(a1 + 280) ) /*0x12d44*/
      DebugAssert("CfgArray.cpp", 0x124u, "GetBlockSize() != ( 0 )"); /*0x12d60*/
  }
LABEL_7:
  if ( (unsigned __int8)RstDebugEnabled(v7, v6) && !*(_DWORD *)(a1 + 280) ) /*0x12d6e*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x12d88*/
  v8 = a3; /*0x12d94*/
  v9 = a3 * (unsigned int)(a2 / (0x100000u / *(_DWORD *)(a1 + 280))); /*0x12dab*/
  if ( (unsigned __int8)RstDebugEnabled(0x100000u / *(_DWORD *)(a1 + 280), a2 % (0x100000u / *(_DWORD *)(a1 + 280))) /*0x12db8*/
    && !*(_DWORD *)(a1 + 280) )
  {
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x12dd2*/
  }
  v12 = *(_DWORD *)(a1 + 280); /*0x12dd7*/
  if ( (unsigned __int8)RstDebugEnabled(v11, v10) && !*(_DWORD *)(a1 + 280) ) /*0x12de6*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x12e00*/
  return v9 + v8 * ((unsigned int)a2 & (0x100000 / v12 - 1)) / (0x100000u / *(_DWORD *)(a1 + 280)); /*0x12e3f*/
}

// Function: RstCfgCheckVolumeType @ 0x12e4c (0xa9 bytes)
// Index: 517/906

__int64 __fastcall RstCfgCheckVolumeType(__int64 a1)
{
  __int16 v2; // r9
  __int64 v3; // rcx
  __int64 v4; // r8
  int v5; // ecx
  int v6; // ecx
  int v7; // ecx
  int v8; // ecx

  *(_DWORD *)(a1 + 16) = 0; /*0x12e56*/
  v2 = 0; /*0x12e59*/
  if ( !*(_BYTE *)(a1 + 224) ) /*0x12e63*/
    return 0; /*0x12ebc*/
  while ( 1 ) /*0x12e6d*/
  {
    v3 = *(_QWORD *)(a1 + 8LL * v2 + 232); /*0x12e6d*/
    v4 = *(_QWORD *)(*(_QWORD *)v3 + 160LL); /*0x12e78*/
    if ( *(_DWORD *)(v4 + 12) != 1 ) /*0x12e83*/
      goto LABEL_8; /*0x12e83*/
    v5 = *(_DWORD *)(*(_QWORD *)v3 + 156LL); /*0x12e85*/
    if ( !v5 ) /*0x12e8e*/
      goto LABEL_16; /*0x12e8e*/
    v6 = v5 - 1; /*0x12e90*/
    if ( !v6 ) /*0x12e93*/
      break; /*0x12e93*/
    v7 = v6 - 1; /*0x12e95*/
    if ( !v7 ) /*0x12e98*/
      goto LABEL_16; /*0x12e98*/
    v8 = v7 - 1; /*0x12e9a*/
    if ( !v8 ) /*0x12e9d*/
    {
      *(_DWORD *)(a1 + 16) = 1; /*0x12ebd*/
      return 1; /*0x12ec4*/
    }
    if ( v8 == 1 ) /*0x12ea2*/
    {
LABEL_16:
      *(_DWORD *)(a1 + 16) = 5; /*0x12eeb*/
      return 5; /*0x12eeb*/
    }
LABEL_8:
    if ( ++v2 >= *(unsigned __int8 *)(a1 + 224) ) /*0x12eb3*/
      return 0; /*0x12eb3*/
  }
  if ( *(int *)(*(_QWORD *)(v4 + 24) + 8LL) < 2 && *(_DWORD *)(v4 + 68) ) /*0x12ed0*/
    *(_DWORD *)(a1 + 16) = 6; /*0x12ed6*/
  else
    *(_DWORD *)(a1 + 16) = 2; /*0x12edf*/
  return *(unsigned int *)(a1 + 16); /*0x12ebc*/
}

// Function: RstArrayEntryInsert @ 0x12ef8 (0x45 bytes)
// Index: 518/906

void __fastcall RstArrayEntryInsert(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
  __int16 n4; // r11

  n4 = *(_WORD *)(a1 + 408); /*0x12efe*/
  if ( n4 < 4 ) /*0x12f11*/
  {
    *(_WORD *)(a1 + 408) = n4 + 1; /*0x12f1f*/
    RstBufferSetTriple((_QWORD *)(a1 + 24LL * n4 + 416), a2, a3, a4); /*0x12f32*/
  }
}

// Function: RstArrayRegionFind @ 0x12f40 (0x78 bytes)
// Index: 519/906

__int64 __fastcall RstArrayRegionFind(__int64 a1, __int64 a2, unsigned __int64 a3, unsigned __int64 a4)
{
  __int64 v4; // r10
  bool v6; // cc
  __int16 v7; // dx

  v4 = 0; /*0x12f45*/
  v6 = *(_WORD *)(a1 + 408) > 0; /*0x12f4e*/
  v7 = 0; /*0x12f56*/
  while ( v6 ) /*0x12f5a*/
  {
    if ( *(_QWORD *)(a1 + 24LL * v7 + 424) < a4 /*0x12f81*/
      && *(_QWORD *)(a1 + 24LL * v7 + 424) + *(_QWORD *)(a1 + 24LL * v7 + 432) > a3 )
    {
      return a1 + 24LL * v7 + 416; /*0x12fa7*/
    }
    if ( *(_QWORD *)(a1 + 24LL * v7 + 416) == a2 ) /*0x12f8e*/
      v4 = a1 + 24LL * v7 + 416; /*0x12f8e*/
    v6 = ++v7 < *(_WORD *)(a1 + 408); /*0x12f95*/
  }
  return v4; /*0x12fb7*/
}

// Function: RstArraySortEntries @ 0x12fb8 (0x143 bytes)
// Index: 520/906

__int64 __fastcall RstArraySortEntries(__int64 a1)
{
  __int16 v1; // dx
  __int16 v3; // r8
  __int64 result; // rax
  __int16 v5; // r9
  __int16 v6; // r10
  __int16 v7; // bx
  __int64 *v8; // rdi
  __int64 v9; // rdx
  __int64 v10; // rcx
  __int64 v11; // [rsp+0h] [rbp-28h]
  __int64 v12; // [rsp+8h] [rbp-20h]
  __int64 v13; // [rsp+10h] [rbp-18h]

  v1 = *(_WORD *)(a1 + 408); /*0x12fc7*/
  if ( v1 > 1 ) /*0x12fd9*/
  {
    v3 = 0; /*0x12fe2*/
    result = (unsigned int)(v1 - 1); /*0x12fe5*/
    if ( (int)result > 0 ) /*0x12fea*/
    {
      do /*0x130e5*/
      {
        v5 = v3 + 1; /*0x12ff0*/
        v6 = v3; /*0x12ff4*/
        v7 = v3 + 1; /*0x12ffc*/
        if ( (__int16)(v3 + 1) < v1 ) /*0x13000*/
        {
          v8 = (__int64 *)(a1 + 24LL * v5 + 424); /*0x1300e*/
          do /*0x13038*/
          {
            result = *v8; /*0x1301e*/
            if ( *(_QWORD *)(a1 + 24LL * v6 + 424) > (unsigned __int64)*v8 ) /*0x13029*/
              v6 = v7; /*0x13029*/
            ++v7; /*0x1302e*/
            v8 += 3; /*0x13031*/
          }
          while ( v7 < v1 ); /*0x13038*/
          if ( v6 != v3 ) /*0x1303e*/
          {
            v9 = 3LL * v3; /*0x1304c*/
            v11 = *(_QWORD *)(a1 + 24LL * v3 + 416); /*0x13058*/
            v12 = *(_QWORD *)(a1 + 24LL * v3 + 424); /*0x13063*/
            v13 = *(_QWORD *)(a1 + 24LL * v3 + 432); /*0x1306f*/
            v10 = 3LL * v6; /*0x13077*/
            *(_QWORD *)(a1 + 8 * v9 + 416) = *(_QWORD *)(a1 + 24LL * v6 + 416); /*0x13083*/
            *(_QWORD *)(a1 + 8 * v9 + 424) = *(_QWORD *)(a1 + 24LL * v6 + 424); /*0x13093*/
            *(_QWORD *)(a1 + 8 * v9 + 432) = *(_QWORD *)(a1 + 24LL * v6 + 432); /*0x130a3*/
            *(_QWORD *)(a1 + 8 * v10 + 416) = v11; /*0x130b2*/
            *(_QWORD *)(a1 + 8 * v10 + 424) = v12; /*0x130be*/
            result = v13; /*0x130c6*/
            *(_QWORD *)(a1 + 8 * v10 + 432) = v13; /*0x130ca*/
          }
        }
        v1 = *(_WORD *)(a1 + 408); /*0x130d2*/
        ++v3; /*0x130da*/
      }
      while ( v5 < v1 - 1 ); /*0x130e5*/
    }
  }
  return result; /*0x130f5*/
}

// Function: Assert_35 @ 0x130fc (0x104 bytes)
// Index: 521/906

__int64 __fastcall Assert_35(__int64 a1)
{
  unsigned __int64 v1; // rbp
  unsigned __int8 i; // si
  unsigned __int8 n2; // cl
  int i_1; // ecx
  __int64 v6; // rax
  __int64 v7; // rbx
  unsigned __int64 v8; // rax
  unsigned int v9; // ebx

  v1 = 0; /*0x13110*/
  for ( i = 0; ; ++i ) /*0x13115*/
  {
    n2 = *(_BYTE *)(a1 + 224); /*0x1311e*/
    if ( n2 >= 2u ) /*0x13123*/
      n2 = 2; /*0x13125*/
    if ( i >= n2 ) /*0x1312d*/
      break; /*0x1312d*/
    i_1 = 1; /*0x13133*/
    if ( i < 2u ) /*0x1313c*/
      i_1 = i; /*0x1313c*/
    v6 = RstDeviceGetParentOrSpare(*(_QWORD *)(a1 + 8LL * i_1 + 232), 0); /*0x1314c*/
    v7 = *(_QWORD *)(v6 + 8); /*0x13154*/
    v8 = v7 + RstDeviceGetBuffer(v6); /*0x1315d*/
    if ( v1 < v8 ) /*0x13163*/
      v1 = v8; /*0x13163*/
  }
  if ( RstDebugEnabled() && !*(_DWORD *)(a1 + 280) ) /*0x1317a*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13194*/
  v9 = *(_DWORD *)(a1 + 280); /*0x13199*/
  if ( RstDebugEnabled() && !*(_DWORD *)(a1 + 280) ) /*0x131a8*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x131c2*/
  return v1 + 3 * (0x100000u / *(_DWORD *)(a1 + 280)) + ((unsigned int)&loc_1FFFA + 6) / v9 + 161; /*0x131fa*/
}

// Function: RstSmallArrayPop @ 0x13200 (0x1c bytes)
// Index: 522/906

__int64 __fastcall RstSmallArrayPop(__int64 a1, unsigned __int8 *a2)
{
  unsigned __int8 v2; // r8
  __int64 result; // rax

  v2 = *a2; /*0x13200*/
  if ( *a2 >= *(_BYTE *)(a1 + 20) ) /*0x13207*/
    return 0; /*0x13219*/
  result = *(_QWORD *)(a1 + 8LL * v2 + 24); /*0x13210*/
  *a2 = v2 + 1; /*0x13215*/
  return result; /*0x13218*/
}

// Function: Assert_58 @ 0x1321c (0x9c bytes)
// Index: 523/906

void __fastcall Assert_58(__int64 a1, __int64 a2)
{
  __int64 v4; // rcx
  __int64 v5; // rcx

  if ( *(_BYTE *)(a1 + 20) < 0x19u ) /*0x13230*/
  {
    if ( (unsigned __int8)RstDebugEnabled(a1, a2) ) /*0x13232*/
    {
      if ( *(_DWORD *)(a1 + 280) ) /*0x1323b*/
      {
        v4 = *(_QWORD *)(a2 + 48); /*0x13244*/
        if ( (*(_DWORD *)(v4 + 136) & 0x10) != 0 && *(_DWORD *)(a1 + 280) != (unsigned int)HiiLibReturnZero(v4) ) /*0x13260*/
          DebugAssert( /*0x13275*/
            "CfgArray.cpp",
            0x3B3u,
            "( m_nBlockSize == ( 0 ) ) || ( !cdisk->hasStatus( 0x10 )) || ( m_nBlockSize == cdisk->getCldev()->getBlockSize())");
      }
    }
    *(_QWORD *)(a1 + 8LL * (unsigned __int8)(*(_BYTE *)(a1 + 20))++ + 24) = a2; /*0x13284*/
    RstDeviceListEntrySetActive(a2, a1); /*0x1328c*/
    v5 = *(_QWORD *)(a2 + 48); /*0x13291*/
    if ( (*(_DWORD *)(v5 + 136) & 0x10) != 0 ) /*0x132a0*/
      *(_DWORD *)(a1 + 280) = HiiLibReturnZero(v5); /*0x132a7*/
  }
}

// Function: RstLargeArrayPop @ 0x132b8 (0x22 bytes)
// Index: 524/906

__int64 __fastcall RstLargeArrayPop(__int64 a1, unsigned __int8 *a2)
{
  unsigned __int8 v2; // r8
  __int64 result; // rax

  v2 = *a2; /*0x132b8*/
  if ( *a2 >= *(_BYTE *)(a1 + 224) ) /*0x132c2*/
    return 0; /*0x132d7*/
  result = *(_QWORD *)(a1 + 8LL * v2 + 232); /*0x132cb*/
  *a2 = v2 + 1; /*0x132d3*/
  return result; /*0x132d6*/
}

// Function: RstConfigArrayNotifyRemove @ 0x132dc (0x8f bytes)
// Index: 525/906

__int64 __fastcall RstConfigArrayNotifyRemove(__int64 a1, __int64 a2)
{
  __int64 result; // rax
  __int16 v5; // di
  __int64 v6; // rdx

  result = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), a2 + 28); /*0x13303*/
  v5 = 0; /*0x13308*/
  if ( result ) /*0x1330d*/
  {
    RstDeviceSetOnlineFlag(result); /*0x13312*/
    if ( *(_BYTE *)(a1 + 224) ) /*0x13317*/
    {
      do /*0x1334b*/
        RstRaidOpMarkMemberFailed(*(_QWORD *)(**(_QWORD **)(a1 + 8LL * v5++ + 232) + 160LL), a2); /*0x13339*/
      while ( v5 < *(unsigned __int8 *)(a1 + 224) ); /*0x1334b*/
    }
    LOBYTE(v6) = 1; /*0x13354*/
    return (***(__int64 (__fastcall ****)(_QWORD, __int64))(a1 + 248))(*(_QWORD *)(a1 + 248), v6); /*0x13359*/
  }
  return result; /*0x13365*/
}

// Function: RstConfigBlockReset @ 0x1336c (0x71 bytes)
// Index: 526/906

__int64 __fastcall RstConfigBlockReset(__int64 a1)
{
  __int64 v2; // rcx

  *(_BYTE *)(a1 + 20) = 0; /*0x1337d*/
  MemZero((_BYTE *)(a1 + 24), 0, 200); /*0x1338b*/
  *(_BYTE *)(a1 + 224) = 0; /*0x13390*/
  *(_QWORD *)(a1 + 232) = 0; /*0x13397*/
  *(_QWORD *)(a1 + 240) = 0; /*0x1339e*/
  v2 = *(_QWORD *)(a1 + 248); /*0x133a5*/
  *(_DWORD *)(a1 + 280) = 0; /*0x133ac*/
  *(_WORD *)(a1 + 284) = 0; /*0x133b2*/
  *(_WORD *)(a1 + 408) = 0; /*0x133b9*/
  *(_QWORD *)(a1 + 256) = 0; /*0x133c0*/
  *(_BYTE *)(a1 + 264) = 0; /*0x133c7*/
  return RstBufferReset(v2); /*0x133d3*/
}

// Function: Assert_118 @ 0x133e0 (0x158 bytes)
// Index: 527/906

__int64 __fastcall Assert_118(_QWORD *i)
{
  unsigned __int8 j; // bp
  unsigned __int8 n2; // cl
  int v4; // r13d
  __int64 v5; // r12
  __int64 v6; // rsi
  __int64 v7; // rbx
  __int64 v8; // rax
  __int64 v9; // rdx
  unsigned __int8 k; // bl
  int n24; // ecx
  __int64 v12; // rcx

  for ( j = 0; ; ++j ) /*0x133fb*/
  {
    n2 = *((_BYTE *)i + 224); /*0x13404*/
    if ( n2 >= 2u ) /*0x13409*/
      n2 = 2; /*0x1340b*/
    if ( j >= n2 ) /*0x13413*/
      break; /*0x13413*/
    v4 = 0; /*0x1341d*/
    v5 = *(_QWORD *)i[j + 29]; /*0x13428*/
    RstDeviceSetStatusBits(v5); /*0x1342e*/
    v6 = *(_QWORD *)(v5 + 160); /*0x1343b*/
    if ( (*(_DWORD *)(i[j + 29] + 48LL) & 0x200) == 0 ) /*0x1344c*/
    {
      RstRaidDegradedStateHandler(*(_QWORD *)(v6 + 16)); /*0x13452*/
      RstRaidDegradedStateHandler(*(_QWORD *)(v6 + 24)); /*0x1345b*/
    }
    v7 = *(_QWORD *)(v6 + 16); /*0x13460*/
    if ( *(_DWORD *)(v7 + 8) != 3 ) /*0x13468*/
      RstEntryBufferAllocSorted(*(_QWORD *)(Source_16 + 216), v5); /*0x1347b*/
    if ( *(_DWORD *)(v7 + 8) == 2 && *(_DWORD *)(v6 + 12) != 1 ) /*0x1348a*/
    {
      if ( RstDeviceCanRemove(v7) ) /*0x1348f*/
      {
        v8 = RstDeviceGetNthActive(v7); /*0x1349b*/
        if ( v8 ) /*0x134a3*/
        {
          Assert_79(v6, v8); /*0x134ab*/
          LOBYTE(v9) = 1; /*0x134b7*/
          (**(void (__fastcall ***)(_QWORD, __int64))i[31])(i[31], v9); /*0x134bc*/
        }
      }
      else
      {
        RstLinkedListFindNth(v7, j); /*0x134c3*/
      }
    }
    for ( k = 0; k < *((_BYTE *)i + 20); ++k ) /*0x134ca*/
    {
      n24 = 24; /*0x134d2*/
      if ( k < 0x19u ) /*0x134da*/
        n24 = k; /*0x134da*/
      v12 = *(_QWORD *)(i[n24 + 3] + 48LL); /*0x134e5*/
      if ( (*(_DWORD *)(v12 + 136) & 0x10) != 0 ) /*0x134f4*/
        v4 |= RstGetUint108(v12); /*0x134fb*/
    }
    RstSetUint108(v5, v4); /*0x1350b*/
  }
  return RstCfgCheckVolumeType((__int64)i); /*0x1352a*/
}

// Function: RstVolGetStripeSize @ 0x13538 (0x3c bytes)
// Index: 528/906

char __fastcall RstVolGetStripeSize(__int64 a1)
{
  char n24; // al

  if ( (unsigned int)RstCfgCheckVolumeType(a1) != 2 ) /*0x13549*/
    return *(_BYTE *)(a1 + 20); /*0x1356b*/
  n24 = 24; /*0x1355d*/
  if ( *(_BYTE *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 232) + 56LL) + 40LL) + 6LL) <= 0x18u ) /*0x13564*/
    return *(_BYTE *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 232) + 56LL) + 40LL) + 6LL); /*0x13566*/
  return n24; /*0x1356e*/
}

// Function: RstRaidVolumeTypeValid @ 0x13574 (0x22 bytes)
// Index: 529/906

bool __fastcall RstRaidVolumeTypeValid(__int64 a1)
{
  int n5; // eax

  n5 = RstCfgCheckVolumeType(a1); /*0x13578*/
  return !n5 || n5 == 5 || n5 == 2; /*0x13591*/
}

// Function: Assert_38 @ 0x13598 (0xfd bytes)
// Index: 530/906

void __fastcall Assert_38(__int64 a1)
{
  unsigned __int8 v1; // si
  __int64 v3; // rdi
  __int64 v4; // rdx
  __int64 v5; // rcx
  __int64 v6; // r12
  __int64 v7; // rbx
  __int64 v8; // rax
  __int64 v9; // rax

  v1 = 0; /*0x135b1*/
  if ( !*(_BYTE *)(a1 + 224) ) /*0x135be*/
    goto LABEL_13; /*0x135be*/
  v3 = *(_QWORD *)(a1 + 232); /*0x135c4*/
  v1 = 1; /*0x135cb*/
  while ( v3 ) /*0x13674*/
  {
    if ( RstLinkedListFindByKey(Source_16, v3 + 16) && (*(_DWORD *)(v3 + 80) == 2 || *(_DWORD *)(v3 + 80) == 4) ) /*0x135f2*/
    {
      v6 = *(_QWORD *)(v3 + 72); /*0x135f4*/
      if ( v6 ) /*0x135fb*/
      {
        v7 = *(_QWORD *)(*(_QWORD *)(a1 + 248) + 8LL); /*0x13607*/
        v8 = RstBufferAdvancePtr(*(_QWORD *)(v3 + 72)); /*0x1360b*/
        RstBufferCopyEntry(v8, v7, v3); /*0x13619*/
        if ( (unsigned __int8)Assert_64(v6) ) /*0x13621*/
          Assert_40(v6); /*0x1362d*/
      }
      else if ( (unsigned __int8)RstDebugEnabled(v5, v4) ) /*0x13634*/
      {
        DebugAssert("CfgArray.cpp", 0x265u, "((BOOLEAN)(0==1))"); /*0x13650*/
      }
    }
    if ( v1 >= *(_BYTE *)(a1 + 224) ) /*0x1365c*/
    {
LABEL_13:
      v3 = 0; /*0x1366f*/
    }
    else
    {
      v9 = v1++; /*0x1365e*/
      v3 = *(_QWORD *)(a1 + 8 * v9 + 232); /*0x13665*/
    }
  }
}

// Function: RstMemRangeCoalesce @ 0x13698 (0xa3 bytes)
// Index: 531/906

__int64 __fastcall RstMemRangeCoalesce(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
  unsigned __int64 v4; // r12
  unsigned __int64 v6; // rbx
  __int64 result; // rax
  unsigned __int64 v10; // r8
  __int64 v11; // r8
  unsigned __int64 v12; // r9
  unsigned __int64 v13; // rdx

  v4 = a3 + a4; /*0x136b1*/
  v6 = a3; /*0x136b8*/
  result = RstArrayRegionFind(a1, a2, a3, a3 + a4); /*0x136c4*/
  if ( !result ) /*0x136cc*/
    return RstArrayEntryInsert(a1, a2, v10, a4); /*0x136cc*/
  v11 = *(_QWORD *)(result + 16); /*0x136ce*/
  v12 = *(_QWORD *)(result + 8); /*0x136d2*/
  v13 = v11 + v12; /*0x136d6*/
  if ( v11 == a4 && v12 == v6 ) /*0x136e2*/
    return result; /*0x136e2*/
  if ( v13 <= v6 || v4 <= v12 ) /*0x136ec*/
  {
    v10 = v6; /*0x1370f*/
    return RstArrayEntryInsert(a1, a2, v10, a4); /*0x1371b*/
  }
  if ( v12 < v6 ) /*0x136f4*/
    v6 = *(_QWORD *)(result + 8); /*0x136f4*/
  if ( v13 < v4 ) /*0x136fb*/
    v13 = v4; /*0x136fb*/
  return RstBufferSetDouble(result, v6, v13 - v6); /*0x13734*/
}

// Function: RstJournalFindMinLba @ 0x1373c (0x43 bytes)
// Index: 532/906

unsigned __int64 __fastcall RstJournalFindMinLba(__int64 a1)
{
  unsigned __int8 v1; // dl
  unsigned __int64 v2; // r8
  __int64 v3; // rax
  __int64 v4; // rax
  unsigned __int64 v5; // r9
  __int64 v6; // rax

  v1 = 0; /*0x1373c*/
  v2 = -1; /*0x1373e*/
  if ( !*(_BYTE *)(a1 + 20) ) /*0x13745*/
    goto LABEL_8; /*0x13745*/
  v3 = *(_QWORD *)(a1 + 24); /*0x13747*/
  v1 = 1; /*0x1374b*/
  while ( v3 ) /*0x13779*/
  {
    v4 = *(_QWORD *)(v3 + 48); /*0x1374f*/
    v5 = *(_QWORD *)(v4 + 88); /*0x13753*/
    if ( v5 && v5 < v2 ) /*0x1375f*/
      v2 = *(_QWORD *)(v4 + 88); /*0x1375f*/
    if ( v1 >= *(_BYTE *)(a1 + 20) ) /*0x13766*/
    {
LABEL_8:
      v3 = 0; /*0x13774*/
    }
    else
    {
      v6 = v1++; /*0x13768*/
      v3 = *(_QWORD *)(a1 + 8 * v6 + 24); /*0x1376d*/
    }
  }
  return v2; /*0x1377e*/
}

// Function: Assert_68 @ 0x13780 (0x5d bytes)
// Index: 533/906

__int64 __fastcall Assert_68(__int64 a1, __int64 a2)
{
  if ( (unsigned __int8)RstDebugEnabled(a1, a2) && !*(_DWORD *)(a1 + 280) ) /*0x13792*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x137ae*/
  return RstJournalFindMinLba(a1) - (((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(a1 + 280) + 161); /*0x137d7*/
}

// Function: RstJournalInit @ 0x137e0 (0x51 bytes)
// Index: 534/906

__int64 __fastcall RstJournalInit(__int64 a1)
{
  __int64 v1; // rdi
  __int64 v3; // rax

  v1 = 0; /*0x137ea*/
  *(_QWORD *)(a1 + 8) = 0; /*0x137ef*/
  *(_QWORD *)a1 = 0; /*0x137f3*/
  *(_DWORD *)(a1 + 16) = 0; /*0x137f6*/
  v3 = RstMemPoolAlloc(64); /*0x137fc*/
  if ( v3 ) /*0x13804*/
    v1 = RstJournalSuperblockInit(v3, a1); /*0x13811*/
  *(_QWORD *)(a1 + 248) = v1; /*0x13817*/
  RstConfigBlockReset(a1); /*0x1381e*/
  return a1; /*0x1382b*/
}

// Function: Assert_109 @ 0x13834 (0x34 bytes)
// Index: 535/906

__int64 Assert_109__int64 a1)
{
  unsigned __int8 v2; // bl
  __int64 v3; // rdx
  unsigned __int64 v4; // rax

  v2 = RstVolGetFirstStripeSize(); /*0x13849*/
  v4 = Assert_68(a1, v3); /*0x1384b*/
  return Assert_26(a1, v4, v2); /*0x1385e*/
}

// Function: Assert_11 @ 0x13868 (0x1da bytes)
// Index: 536/906

void __fastcall Assert_11(__int64 a1)
{
  unsigned __int64 n3_3; // rsi
  __int64 v3; // rdx
  unsigned __int64 n3_6; // rdi
  __int16 v5; // dx
  __int16 n3_1; // dx
  int n3; // ecx
  __int16 i; // r12
  int n3_2; // ecx
  unsigned __int64 n3_4; // r13
  __int64 v11; // rax
  unsigned __int64 n3_5; // rbp
  __int16 n4; // cx
  __int64 v14; // r14
  __int16 n5; // r9
  __int64 v16; // rbp

  RstArraySortEntries(a1); /*0x13887*/
  *(_WORD *)(a1 + 284) = 0; /*0x13892*/
  n3_3 = 0; /*0x1389a*/
  n3_6 = Assert_68(a1, v3); /*0x138a2*/
  if ( !n3_6 ) /*0x138a8*/
  {
    v5 = *(_WORD *)(a1 + 408); /*0x138aa*/
    if ( !v5 ) /*0x138b5*/
      return; /*0x138b5*/
    n3_1 = v5 - 1; /*0x138bb*/
    n3 = 3; /*0x138be*/
    if ( n3_1 < 4 ) /*0x138c9*/
      n3 = n3_1; /*0x138c9*/
    n3_6 = *(_QWORD *)(a1 + 24LL * n3 + 424) + *(_QWORD *)(a1 + 24LL * n3 + 432); /*0x138db*/
  }
  for ( i = 0; i < *(__int16 *)(a1 + 408); ++i ) /*0x138ef*/
  {
    n3_2 = 3; /*0x138fe*/
    if ( i < 4 ) /*0x13903*/
      n3_2 = i; /*0x13903*/
    n3_4 = *(_QWORD *)(a1 + 24LL * n3_2 + 424); /*0x1390d*/
    v11 = *(_QWORD *)(a1 + 24LL * n3_2 + 432); /*0x13915*/
    n3_5 = n3_4 + v11; /*0x1391d*/
    if ( n3_4 + v11 <= n3_6 ) /*0x13925*/
    {
      if ( n3_4 + v11 == n3_6 ) /*0x13927*/
        break; /*0x13927*/
      if ( n3_5 >= n3_3 ) /*0x13930*/
      {
        if ( n3_4 > n3_3 ) /*0x13935*/
        {
          n4 = *(_WORD *)(a1 + 284); /*0x13939*/
          if ( n4 >= 4 ) /*0x13944*/
            break; /*0x13944*/
          *(_WORD *)(a1 + 284) = n4 + 1; /*0x13952*/
          v14 = a1 + 8 * (3LL * n4 + 36); /*0x13959*/
          if ( RstDebugEnabled() && !*(_DWORD *)(a1 + 280) ) /*0x13967*/
            DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13983*/
          RstBufferSetRange(v14, n3_3, n3_4 - n3_3, *(_DWORD *)(a1 + 280)); /*0x1399b*/
        }
        n3_3 = n3_5; /*0x139a0*/
      }
    }
  }
  n5 = *(_WORD *)(a1 + 284); /*0x139b5*/
  if ( n5 < 5 && n3_3 < n3_6 ) /*0x139c7*/
  {
    *(_WORD *)(a1 + 284) = n5 + 1; /*0x139d6*/
    v16 = a1 + 8 * (3LL * n5 + 36); /*0x139de*/
    if ( RstDebugEnabled() ) /*0x139e2*/
    {
      if ( !*(_DWORD *)(a1 + 280) ) /*0x139ec*/
        DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13a08*/
    }
    RstBufferSetRange(v16, n3_3, n3_6 - n3_3, *(_DWORD *)(a1 + 280)); /*0x13a20*/
  }
}

// Function: Assert_95 @ 0x13a44 (0x8d bytes)
// Index: 537/906

__int64 Assert_95__int64 a1, unsigned __int64 a2)
{
  __int64 v4; // rdi
  unsigned __int64 v5; // rbp
  __int16 i; // bx
  unsigned __int64 v7; // rax

  Assert_11(a1); /*0x13a62*/
  v4 = 0; /*0x13a67*/
  v5 = -1; /*0x13a69*/
  for ( i = 0; i < *(__int16 *)(a1 + 284); ++i ) /*0x13a77*/
  {
    v7 = *(_QWORD *)(a1 + 8 * (3LL * i + 36) + 8) - (unsigned int)RstBufferGetAvailable(a1 + 8 * (3LL * i + 36)); /*0x13a96*/
    if ( v7 >= a2 && v7 < v5 ) /*0x13aa1*/
    {
      v4 = a1 + 8 * (3LL * i + 36); /*0x13aa3*/
      v5 = v7; /*0x13aa6*/
    }
  }
  return v4; /*0x13ac7*/
}

// Function: Assert_91 @ 0x13ad4 (0x9e bytes)
// Index: 538/906

unsigned __int64 Assert_91__int64 a1)
{
  unsigned __int64 v2; // rsi
  __int16 i; // di
  _QWORD *v4; // rbp
  unsigned __int64 v5; // r12

  Assert_11(a1); /*0x13af0*/
  *(_QWORD *)(a1 + 256) = -1; /*0x13af5*/
  v2 = 0; /*0x13afd*/
  for ( i = 0; i < *(__int16 *)(a1 + 284); ++i ) /*0x13b09*/
  {
    v4 = (_QWORD *)(a1 + 8 * (3LL * i + 36)); /*0x13b14*/
    v5 = v4[1] - (unsigned int)RstBufferGetAvailable(v4); /*0x13b27*/
    if ( v5 > v2 ) /*0x13b2d*/
    {
      v2 = v5; /*0x13b37*/
      *(_QWORD *)(a1 + 256) = *v4 + (unsigned int)RstBufferGetAvailable(v4); /*0x13b41*/
    }
  }
  return v2; /*0x13b6b*/
}

// Function: Assert_94 @ 0x13b74 (0x8e bytes)
// Index: 539/906

void __fastcall Assert_94(__int64 a1)
{
  __int16 i; // dx
  __int64 n2; // r8
  __int16 n2_1; // r9
  __int64 v5; // r10

  Assert_11(a1); /*0x13b7d*/
  for ( i = 0; i < *(__int16 *)(a1 + 408); ++i ) /*0x13b91*/
  {
    n2 = *(unsigned __int8 *)(a1 + 224); /*0x13b93*/
    n2_1 = 0; /*0x13b9f*/
    v5 = *(_QWORD *)(a1 + 24LL * i + 416); /*0x13baa*/
    if ( *(_BYTE *)(a1 + 224) ) /*0x13b93*/
    {
      do /*0x13bd1*/
      {
        if ( *(_QWORD *)(a1 + 8LL * n2_1 + 232) == v5 ) /*0x13bc0*/
          break; /*0x13bc0*/
        ++n2_1; /*0x13bc9*/
      }
      while ( n2_1 < *(unsigned __int8 *)(a1 + 224) ); /*0x13bd1*/
    }
    if ( n2_1 == (_DWORD)n2 && (unsigned __int8)n2 < 2u ) /*0x13be0*/
    {
      *(_QWORD *)(a1 + 8 * n2 + 232) = v5; /*0x13be2*/
      ++*(_BYTE *)(a1 + 224); /*0x13bea*/
    }
  }
}

// Function: Assert_123 @ 0x13c04 (0xc6 bytes)
// Index: 540/906

char Assert_123__int64 a1)
{
  __int16 v2; // bx
  char result; // al
  __int16 v4; // si
  _QWORD *v5; // rbx

  v2 = 0; /*0x13c1d*/
  if ( *(_BYTE *)(a1 + 20) ) /*0x13c20*/
  {
    do /*0x13c47*/
      RstDeviceClearFlags(*(_QWORD *)(*(_QWORD *)(a1 + 8LL * v2++ + 24) + 48LL), 32770); /*0x13c38*/
    while ( v2 < *(unsigned __int8 *)(a1 + 20) ); /*0x13c47*/
  }
  result = *(_BYTE *)(a1 + 224); /*0x13c49*/
  if ( result ) /*0x13c52*/
  {
    *(_BYTE *)(a1 + 20) = 0; /*0x13c54*/
    *(_WORD *)(a1 + 284) = 0; /*0x13c58*/
    *(_WORD *)(a1 + 408) = 0; /*0x13c5f*/
    *(_QWORD *)(a1 + 256) = 0; /*0x13c66*/
    v4 = 0; /*0x13c6d*/
    do /*0x13ca4*/
    {
      v5 = *(_QWORD **)(a1 + 8LL * v4 + 232); /*0x13c74*/
      RstRaidMemberFindFirstActiveEx(v5); /*0x13c7f*/
      RstDeviceLinkRaidConfig(v5, *v5); /*0x13c8a*/
      Assert_131(v5); /*0x13c92*/
      ++v4; /*0x13c9e*/
    }
    while ( v4 < *(unsigned __int8 *)(a1 + 224) ); /*0x13ca4*/
    *(_BYTE *)(a1 + 224) = 0; /*0x13ca9*/
    return Assert_94(a1); /*0x13cb0*/
  }
  return result; /*0x13cc4*/
}

// Function: Assert_110 @ 0x13ccc (0x34 bytes)
// Index: 541/906

__int64 Assert_110__int64 a1)
{
  unsigned __int8 v2; // bl
  unsigned __int64 v3; // rax

  v2 = RstVolGetFirstStripeSize(); /*0x13ce1*/
  v3 = Assert_91(a1); /*0x13ce3*/
  return Assert_26(a1, v3, v2); /*0x13cf6*/
}

// Function: Assert_2 @ 0x13d00 (0x2c8 bytes)
// Index: 542/906

unsigned __int64 __fastcall Assert_2(__int64 a1, unsigned __int16 n5)
{
  unsigned __int16 v4; // bp
  __int64 v5; // rdx
  __int64 v6; // rcx
  __int64 v7; // rdx
  __int64 v8; // rcx
  unsigned int v9; // esi
  unsigned int v10; // ebx
  __int64 v11; // rdx
  __int64 v12; // rcx
  unsigned __int64 v13; // rsi
  unsigned __int64 v15; // rsi
  __int64 v16; // rcx
  unsigned __int64 v17; // rbx
  unsigned __int8 v18; // al
  unsigned __int64 v19; // r12
  __int64 v20; // rcx
  __int64 v21; // rdx
  __int64 v22; // rcx
  unsigned int v23; // esi
  __int64 v24; // rcx
  unsigned __int64 v25; // rbx
  __int64 v26; // rdx
  __int64 v27; // rdx
  __int64 v28; // rcx
  unsigned int v29; // ebx

  v4 = (unsigned __int8)RstVolGetStripeSize(a1); /*0x13d29*/
  if ( (unsigned __int8)RstDebugEnabled(v6, v5) && !*(_DWORD *)(a1 + 280) ) /*0x13d42*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13d58*/
  v9 = *(_DWORD *)(a1 + 280); /*0x13d5d*/
  if ( (unsigned __int8)RstDebugEnabled(v8, v7) && !*(_DWORD *)(a1 + 280) ) /*0x13d6c*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13d82*/
  v10 = 0x100000 / v9 + 3 * (0x100000u / *(_DWORD *)(a1 + 280)); /*0x13da2*/
  v13 = Assert_91(a1); /*0x13da9*/
  if ( v13 < v10 ) /*0x13db1*/
    return 0; /*0x13db1*/
  v15 = v13 - v10; /*0x13dba*/
  if ( *(_QWORD *)(a1 + 256) ) /*0x13dbd*/
  {
    if ( (unsigned __int8)RstDebugEnabled(v12, v11) && !*(_DWORD *)(a1 + 280) ) /*0x13dd0*/
      DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13de6*/
    if ( v15 < 3 * (0x100000u / *(_DWORD *)(a1 + 280)) ) /*0x13e00*/
      return 0; /*0x13db5*/
    if ( (unsigned __int8)RstDebugEnabled(v16, 0x100000u % *(_DWORD *)(a1 + 280)) && !*(_DWORD *)(a1 + 280) ) /*0x13e0b*/
      DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13e21*/
    v11 = 0x100000u % *(_DWORD *)(a1 + 280); /*0x13e2a*/
    v15 -= 3 * (0x100000u / *(_DWORD *)(a1 + 280)); /*0x13e33*/
  }
  if ( (unsigned __int8)RstDebugEnabled(v12, v11) && !*(_DWORD *)(a1 + 280) ) /*0x13e3f*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13e55*/
  v17 = v15 / (((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(a1 + 280)); /*0x13e71*/
  if ( n5 == 5 ) /*0x13e79*/
    --v4; /*0x13e80*/
  v18 = RstBlockSizeToStatus(n5); /*0x13e87*/
  v19 = v17 / v18; /*0x13e98*/
  if ( (unsigned __int8)RstDebugEnabled(v20, v17 % v18) && !*(_DWORD *)(a1 + 280) ) /*0x13ea4*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13eba*/
  v23 = *(_DWORD *)(a1 + 280); /*0x13ebf*/
  if ( (unsigned __int8)RstDebugEnabled(v22, v21) && !*(_DWORD *)(a1 + 280) ) /*0x13ece*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13ee4*/
  v25 = v19 * v4; /*0x13ef9*/
  v26 = 0x100000 / v23 % *(_DWORD *)(a1 + 280); /*0x13efd*/
  if ( v25 >= 805306368 * (0x100000 / v23 / *(_DWORD *)(a1 + 280)) - 1 ) /*0x13f0e*/
  {
    if ( (unsigned __int8)RstDebugEnabled(v24, v26) && !*(_DWORD *)(a1 + 280) ) /*0x13f19*/
      DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13f2f*/
    v29 = *(_DWORD *)(a1 + 280); /*0x13f34*/
    if ( (unsigned __int8)RstDebugEnabled(v28, v27) && !*(_DWORD *)(a1 + 280) ) /*0x13f43*/
      DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13f59*/
    v26 = 0x100000 / v29 % *(_DWORD *)(a1 + 280); /*0x13f66*/
    v25 = 805306368 * (0x100000 / v29 / *(_DWORD *)(a1 + 280)) - 1; /*0x13f72*/
  }
  if ( (unsigned __int8)RstDebugEnabled(v24, v26) ) /*0x13f74*/
  {
    if ( !*(_DWORD *)(a1 + 280) ) /*0x13f7d*/
      DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x13f93*/
  }
  return v25 * (((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(a1 + 280)); /*0x13fbd*/
}

// Function: Assert_31 @ 0x13fc8 (0x136 bytes)
// Index: 543/906

char __fastcall Assert_31(__int64 a1, unsigned __int16 n5, char a3)
{
  unsigned __int8 n24_1; // bl
  unsigned __int64 v7; // rsi
  unsigned __int8 v8; // r8
  unsigned __int8 n2; // dl
  int n2_1; // ecx
  _DWORD *v11; // rcx
  int n5_1; // eax
  int n24; // ecx

  if ( *(_BYTE *)(a1 + 224) >= 2u ) /*0x13fe4*/
    return 0; /*0x13fe4*/
  n24_1 = 0; /*0x13ff9*/
  if ( (unsigned int)RstRaidCheckDiskCountValid(*(unsigned __int8 *)(a1 + 20), n5, a3) ) /*0x13ff4*/
    return 0; /*0x13ff4*/
  v7 = Assert_2(a1, n5); /*0x1400a*/
  if ( RstDebugEnabled() && !*(_DWORD *)(a1 + 280) ) /*0x14016*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x14031*/
  if ( (unsigned int)(v7 / (0x100000u / *(_DWORD *)(a1 + 280))) < 0x66 ) /*0x14050*/
    return 0; /*0x14050*/
  v8 = *(_BYTE *)(a1 + 224); /*0x14052*/
  n2 = 0; /*0x14059*/
  if ( v8 ) /*0x14063*/
  {
    do /*0x14068*/
    {
      n2_1 = 1; /*0x14068*/
      if ( n2 < 2u ) /*0x1406d*/
        n2_1 = n2; /*0x1406d*/
      v11 = *(_DWORD **)(*(_QWORD *)(*(_QWORD *)(a1 + 8LL * n2_1 + 232) + 56LL) + 40LL); /*0x1407f*/
      if ( *v11 == 2 || *v11 == 3 ) /*0x1408f*/
        return 0; /*0x1408f*/
    }
    while ( ++n2 < v8 ); /*0x14068*/
  }
  n5_1 = RstCfgCheckVolumeType(a1); /*0x140a0*/
  if ( n5_1 ) /*0x140a7*/
  {
    if ( n5_1 != 5 ) /*0x140ac*/
      return 0; /*0x13fe8*/
  }
  if ( *(_BYTE *)(a1 + 20) ) /*0x140b2*/
  {
    while ( 1 ) /*0x140ba*/
    {
      n24 = 24; /*0x140ba*/
      if ( n24_1 < 0x19u ) /*0x140c2*/
        n24 = n24_1; /*0x140c2*/
      if ( (*(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 8LL * n24 + 24) + 48LL) + 136LL) & 0x200) != 0 ) /*0x140dd*/
        break; /*0x140dd*/
      if ( ++n24_1 >= *(_BYTE *)(a1 + 20) ) /*0x140e9*/
        return 1; /*0x140e9*/
    }
    return 0; /*0x140dd*/
  }
  return 1; /*0x140f8*/
}

// Function: RstDeviceSetDataPtr @ 0x14100 (0x5 bytes)
// Index: 544/906

void __fastcall RstDeviceSetDataPtr(__int64 a1, __int64 a2)
{
  *(_QWORD *)(a1 + 40) = a2; /*0x14100*/
}

// Function: RstNvCacheEntryInit @ 0x14108 (0x50 bytes)
// Index: 545/906

__int64 __fastcall RstNvCacheEntryInit(__int64 a1)
{
  __int64 v1; // rbx

  v1 = a1 + 84; /*0x14110*/
  *(_DWORD *)(a1 + 48) = 12; /*0x14114*/
  *(_DWORD *)(a1 + 80) = 5; /*0x1411b*/
  *(_QWORD *)a1 = 0; /*0x14122*/
  *(_DWORD *)(a1 + 36) = 0; /*0x14125*/
  *(_WORD *)(a1 + 52) = 0; /*0x14128*/
  *(_QWORD *)(a1 + 72) = 0; /*0x1412c*/
  MemZero((_BYTE *)(a1 + 84), 0, 16); /*0x14139*/
  return RstStringCopyN(v1, &unk_2515A, 16); /*0x1414e*/
}

// Function: RstNvCacheEntryInitAndReset @ 0x14158 (0x2b bytes)
// Index: 546/906

__int64 __fastcall RstNvCacheEntryInitAndReset(__int64 a1)
{
  RstNvCacheEntryInit(a1); /*0x14168*/
  return RstRaidEntryReset(*(_QWORD *)(a1 + 56)); /*0x14179*/
}

// Function: RstConfigArrayGetMaxBlockSize @ 0x14184 (0x44 bytes)
// Index: 547/906

__int64 __fastcall RstConfigArrayGetMaxBlockSize(__int64 a1)
{
  __int64 v1; // rdi
  int v2; // ebx

  v1 = *(_QWORD *)(*(_QWORD *)a1 + 160LL); /*0x14191*/
  v2 = RstDeviceCheckNotSpare(*(_QWORD *)(v1 + 16)); /*0x141a5*/
  if ( v2 < (int)RstDeviceCheckNotSpare(*(_QWORD *)(v1 + 24)) ) /*0x141ae*/
    return (unsigned int)RstDeviceCheckNotSpare(*(_QWORD *)(v1 + 24)); /*0x141b9*/
  return (unsigned int)v2; /*0x141c2*/
}

// Function: Assert_6 @ 0x141c8 (0x255 bytes)
// Index: 548/906

__int64 __fastcall Assert_6(__int64 *a1, __int64 n2)
{
  int n2_1; // r12d
  __int64 Source; // rcx
  __int64 v6; // rax
  _QWORD *v7; // rsi
  unsigned __int8 v8; // bl
  __int16 v9; // dx
  _QWORD *v10; // rax
  _BYTE *Source_1; // rbx
  __int64 Source_2; // rax
  __int64 v13; // rdx
  __int64 v14; // rax
  __int64 Destination; // rbp
  __int64 v16; // rbp
  __int64 v17; // rax
  __int64 v18; // rdx

  n2_1 = n2; /*0x141e4*/
  if ( *(_WORD *)(*(_QWORD *)(a1[7] + 40) + 4LL) != 5 ) /*0x141f4*/
    return 41; /*0x141fb*/
  Source = Source_16; /*0x14200*/
  v6 = *(_QWORD *)(Source_16 + 216); /*0x1420a*/
  v7 = 0; /*0x14211*/
  v8 = 0; /*0x14214*/
  if ( *(_WORD *)v6 ) /*0x14217*/
  {
    v9 = 0; /*0x1421d*/
    do /*0x1424e*/
    {
      v10 = RstLinkedListGetNth((_QWORD **)(v6 + 16), v9); /*0x14224*/
      if ( *((_WORD *)v10 + 28) && *((_BYTE *)v10 + 58) == 3 ) /*0x14234*/
        v7 = v10; /*0x14234*/
      Source = Source_16; /*0x14238*/
      ++v8; /*0x1423f*/
      v6 = *(_QWORD *)(Source_16 + 216); /*0x14241*/
      v9 = v8; /*0x14248*/
    }
    while ( v8 < (unsigned int)*(_WORD *)v6 ); /*0x1424e*/
  }
  Source_1 = 0; /*0x14250*/
  if ( a1[9] ) /*0x14253*/
  {
    Source_2 = RstDeviceDerefPtr(a1[9]); /*0x1425d*/
    Source = Source_16; /*0x14262*/
    Source_1 = (_BYTE *)Source_2; /*0x14269*/
  }
  if ( n2_1 != 2 && n2_1 != 4 ) /*0x1427a*/
  {
    if ( Source_1 ) /*0x14283*/
    {
      if ( RstDebugEnabled() && *((_DWORD *)a1 + 20) != 2 && *((_DWORD *)a1 + 20) != 4 ) /*0x14299*/
        DebugAssert( /*0x142ae*/
          "CfgRaidDev.cpp",
          0x1FCu,
          "rwhPolicy == RwhOnJournalDrive || rwhPolicy == RwhJournalingDriveCircular");
      Assert_55(Source_1, (__int64)a1); /*0x142b9*/
    }
    if ( RstDebugEnabled() ) /*0x142be*/
    {
      if ( v7 ) /*0x142cb*/
        DebugAssert("CfgRaidDev.cpp", 0x200u, "pRwhJd == 0"); /*0x142e0*/
    }
    v14 = *a1; /*0x142e5*/
    *((_DWORD *)a1 + 20) = n2_1; /*0x142e8*/
    LOBYTE(v13) = 1; /*0x142ec*/
    (***(void (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(v14 + 144) + 248LL))( /*0x142ff*/
      *(_QWORD *)(*(_QWORD *)(v14 + 144) + 248LL),
      v13);
LABEL_35:
    Assert_114(*(_QWORD *)(*a1 + 160)); /*0x143ec*/
    return 0; /*0x143fd*/
  }
  if ( !v7 ) /*0x14309*/
    return 42; /*0x14309*/
  Destination = RstBufferPoolFindEntry(Source + 224, v7[6]); /*0x1431f*/
  if ( !RstDebugEnabled() ) /*0x1432a*/
    goto LABEL_27; /*0x1432a*/
  if ( !Destination ) /*0x1432f*/
  {
    DebugAssert("CfgRaidDev.cpp", 0x1D3u, "pNewJd"); /*0x14344*/
LABEL_27:
    if ( !Destination ) /*0x1434c*/
      return 42; /*0x1434c*/
  }
  v16 = RstRaidEntryLookup(Destination); /*0x14352*/
  if ( RstDebugEnabled() ) /*0x1435d*/
  {
    if ( v16 ) /*0x1436a*/
    {
LABEL_32:
      if ( Source_1 ) /*0x1438c*/
        Assert_55(Source_1, (__int64)a1); /*0x14394*/
      *((_DWORD *)a1 + 20) = n2_1; /*0x14399*/
      MemZero((_BYTE *)a1 + 84, 0, 16); /*0x143ac*/
      RstStringCopyN((__int64)a1 + 84, (__int64)v7 + 18, 16); /*0x143bc*/
      v17 = *a1; /*0x143c1*/
      a1[9] = v16; /*0x143c4*/
      LOBYTE(v18) = 1; /*0x143cf*/
      (***(void (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(v17 + 144) + 248LL))( /*0x143db*/
        *(_QWORD *)(*(_QWORD *)(v17 + 144) + 248LL),
        v18);
      Assert_38(*(_QWORD *)(*a1 + 144)); /*0x143e7*/
      goto LABEL_35; /*0x143e7*/
    }
    DebugAssert("CfgRaidDev.cpp", 0x1DCu, "pNewJdPplMpbMgr"); /*0x1437f*/
  }
  if ( v16 ) /*0x14387*/
    goto LABEL_32; /*0x14387*/
  return 42; /*0x14413*/
}

// Function: RstCfgRaidDevLookup @ 0x14420 (0x4b bytes)
// Index: 549/906

char __fastcall RstCfgRaidDevLookup(__int64 a1)
{
  __int64 v1; // rdx
  __int64 v2; // rbx
  __int64 v3; // rax

  if ( *(_QWORD *)(a1 + 72) ) /*0x14426*/
    v1 = RstDeviceGetContext88(); /*0x14434*/
  else
    v1 = 0; /*0x14439*/
  if ( !v1 ) /*0x1443e*/
    return -1; /*0x14463*/
  v2 = *(_QWORD *)(Source_16 + 216); /*0x14447*/
  v3 = RstLinkedListFindData(v2, v1); /*0x14451*/
  return RstLinkedListIndexOf(v2, v3); /*0x14465*/
}

// Function: RstDeviceLinkRaidConfig @ 0x1446c (0x26 bytes)
// Index: 550/906

char __fastcall RstDeviceLinkRaidConfig(__int64 a1, __int64 a2)
{
  char result; // al

  result = RstRaidConfigFromDiskInfo(*(_QWORD *)(a1 + 56), *(_QWORD *)(a2 + 160)); /*0x14480*/
  **(_QWORD **)(a1 + 56) = a1; /*0x14489*/
  return result; /*0x1448c*/
}

// Function: RstRaidMemberFindFirstActiveEx @ 0x14494 (0x2c bytes)
// Index: 551/906

__int64 __fastcall RstRaidMemberFindFirstActiveEx(__int64 a1)
{
  __int64 v1; // rbx
  __int64 result; // rax

  v1 = *(_QWORD *)(a1 + 56); /*0x1449a*/
  result = RstRaidMemberFirstActive(*(_QWORD *)(v1 + 40)); /*0x144a2*/
  if ( !result ) /*0x144aa*/
  {
    if ( *(_DWORD *)(v1 + 8) ) /*0x144ac*/
      return RstRaidMemberFirstActive(*(_QWORD *)(v1 + 48)); /*0x144b5*/
  }
  return result; /*0x144ba*/
}

// Function: RstDeviceGetParentOrSpare @ 0x144c0 (0x18 bytes)
// Index: 552/906

__int64 __fastcall RstDeviceGetParentOrSpare(__int64 a1, int a2)
{
  __int64 v2; // rax

  v2 = *(_QWORD *)(a1 + 56); /*0x144c0*/
  if ( *(_DWORD *)(v2 + 8) && a2 ) /*0x144cc*/
    return *(_QWORD *)(v2 + 48); /*0x144ce*/
  else
    return *(_QWORD *)(v2 + 40); /*0x144d3*/
}

// Function: RstDeviceMemberIsNvme @ 0x144d8 (0x9 bytes)
// Index: 553/906

char __fastcall RstDeviceMemberIsNvme(__int64 a1)
{
  return RstRaidMemberIsNvme(*(_QWORD *)(a1 + 56));
}

// Function: RstNvCacheRaidConfigInit @ 0x144e4 (0x37 bytes)
// Index: 554/906

__int64 __fastcall RstNvCacheRaidConfigInit(__int64 a1)
{
  __int64 v2; // rcx
  __int64 v3; // rax

  v2 = RstMemPoolAlloc(64); /*0x144f7*/
  v3 = 0; /*0x144fa*/
  if ( v2 ) /*0x144ff*/
    v3 = RstRaidConfigInfoInit(v2); /*0x14501*/
  *(_QWORD *)(a1 + 56) = v3; /*0x14509*/
  RstNvCacheEntryInit(a1); /*0x1450d*/
  return a1; /*0x14515*/
}

// Function: RstCfgRaidDevCopy @ 0x1451c (0xcc bytes)
// Index: 555/906

__int64 __fastcall RstCfgRaidDevCopy(__int64 a1, __int64 Source, __int64 a3)
{
  RstNvCacheEntryInitAndReset(a1); /*0x1453d*/
  StrnCpy((CHAR16 *)(a1 + 16), (const CHAR16 *)Source, 0x10u); /*0x1454f*/
  *(_BYTE *)(a1 + 32) = 0; /*0x14554*/
  *(_DWORD *)(a1 + 36) = *(unsigned __int8 *)(Source + 32); /*0x1455c*/
  *(_QWORD *)(a1 + 40) = *(unsigned int *)(Source + 16) + ((unsigned __int64)*(unsigned int *)(Source + 20) << 32); /*0x14576*/
  *(_DWORD *)(a1 + 48) = *(_DWORD *)(Source + 24); /*0x1457d*/
  *(_WORD *)(a1 + 64) = *(_WORD *)(Source + 40); /*0x14584*/
  *(_WORD *)(a1 + 52) = *(_WORD *)(Source + 36); /*0x1458c*/
  **(_QWORD **)(a1 + 56) = a1; /*0x14594*/
  RstRaidConfigFromHiiEntry(*(_QWORD *)(a1 + 56), Source + 80, a3, 0); /*0x1459b*/
  *(_QWORD *)(a1 + 8) = 0; /*0x145a0*/
  *(_BYTE *)(a1 + 66) = *(_BYTE *)(Source + 34); /*0x145aa*/
  *(_DWORD *)(a1 + 80) = *(unsigned __int8 *)(Source + 50); /*0x145b9*/
  MemZero((_BYTE *)(a1 + 84), 0, 16); /*0x145bc*/
  return RstStringCopyN(a1 + 84, Source + 51, 16); /*0x145de*/
}

// Function: Assert_131 @ 0x145e8 (0x54 bytes)
// Index: 556/906

__int64 Assert_131__int64 *a1)
{
  __int64 v2; // rdi
  __int64 result; // rax

  RstRaidConfigFromDiskInfo(a1[7], *(_QWORD *)(*a1 + 160)); /*0x14603*/
  *(_QWORD *)a1[7] = a1; /*0x1460f*/
  v2 = a1[7]; /*0x14612*/
  result = Assert_99(*(_QWORD *)(v2 + 40), (__int64)a1); /*0x1461a*/
  if ( *(_DWORD *)(v2 + 8) ) /*0x1461f*/
    return Assert_99(*(_QWORD *)(v2 + 48), (__int64)a1); /*0x1462c*/
  return result; /*0x14636*/
}

// Function: Assert_132 @ 0x1463c (0x53 bytes)
// Index: 557/906

__int64 Assert_132__int64 *a1)
{
  __int64 v2; // rax
  __int64 result; // rax

  v2 = RstRaidMemberFindFirstActiveEx(a1); /*0x14645*/
  a1[1] = v2; /*0x1464a*/
  if ( !v2 ) /*0x14651*/
    a1[1] = RstConfigBlockClone(*(_QWORD *)(Source_16 + 216)); /*0x14666*/
  Assert_131(a1); /*0x1466d*/
  Assert_94(a1[1]); /*0x14676*/
  result = a1[1]; /*0x1467e*/
  *(_QWORD *)(*a1 + 144) = result; /*0x14682*/
  return result; /*0x14689*/
}

// Function: Assert_83 @ 0x14690 (0xdc bytes)
// Index: 558/906

__int64 Assert_83__int64 a1, __int64 a2)
{
  __int64 v4; // rax
  __int64 v5; // r11
  __int64 v6; // rcx
  int v7; // eax

  *(_QWORD *)(a1 + 136) = a2; /*0x1469f*/
  *(_QWORD *)a2 = a1; /*0x146a6*/
  RstStringCopyN(a1 + 112, a2 + 16, 16); /*0x146bc*/
  *(_BYTE *)(a1 + 128) = 0; /*0x146c6*/
  v4 = RstMemPoolAlloc(96); /*0x146cd*/
  if ( v4 ) /*0x146d5*/
    v5 = Assert_17(v4, a1, *(_QWORD *)(a2 + 56), 0); /*0x146ee*/
  else
    v5 = 0; /*0x146f3*/
  *(_QWORD *)(a1 + 160) = v5; /*0x146f6*/
  v6 = *(_QWORD *)(a2 + 40); /*0x146fd*/
  *(_QWORD *)(a1 + 168) = v6; /*0x14708*/
  *(_QWORD *)(a1 + 176) = v6; /*0x1470f*/
  *(_DWORD *)(a1 + 152) = *(_DWORD *)(a2 + 36); /*0x14719*/
  v7 = *(_DWORD *)(v5 + 64); /*0x1471f*/
  *(_QWORD *)(a1 + 88) = v6; /*0x14723*/
  *(_BYTE *)(a1 + 189) = 0; /*0x14731*/
  *(_DWORD *)(a1 + 156) = v7; /*0x14738*/
  *(_BYTE *)(a1 + 190) = 0; /*0x1473e*/
  RstStringCopyN(a1 + 45, "Intel ", 6); /*0x14745*/
  return RstStringCopyN(a1 + 51, a1 + 112, 17); /*0x14762*/
}

// Function: Assert_104 @ 0x1476c (0x50 bytes)
// Index: 559/906

void __fastcall Assert_104(__int64 a1)
{
  char n2; // al
  __int64 v2; // rbx
  __int64 v3; // rcx
  _BYTE *Source; // rax

  n2 = 2; /*0x1477f*/
  if ( *(_BYTE *)(*(_QWORD *)(a1 + 144) + 224LL) < 2u ) /*0x14786*/
    n2 = *(_BYTE *)(*(_QWORD *)(a1 + 144) + 224LL); /*0x14788*/
  v2 = *(_QWORD *)(a1 + 136); /*0x1478b*/
  *(_BYTE *)(a1 + 188) = n2 == 1; /*0x14797*/
  v3 = *(_QWORD *)(v2 + 72); /*0x1479d*/
  if ( v3 ) /*0x147a4*/
  {
    Source = (_BYTE *)RstDeviceDerefPtr(v3); /*0x147a6*/
    Assert_55(Source, v2); /*0x147b1*/
  }
}

// Function: RstDeviceSetStatusBits @ 0x147bc (0x1a bytes)
// Index: 560/906

__int64 __fastcall RstDeviceSetStatusBits(__int64 a1)
{
  *(_BYTE *)(a1 + 186) = 1; /*0x147bc*/
  *(_BYTE *)(a1 + 187) = 1; /*0x147c3*/
  return Assert_90(*(_QWORD *)(a1 + 160));
}

// Function: RstConfigArrayGetMinWriteSize @ 0x147d8 (0x47 bytes)
// Index: 561/906

void __fastcall RstConfigArrayGetMinWriteSize(__int64 a1)
{
  __int64 v1; // r9
  unsigned __int8 i; // dl
  int n24; // ecx
  unsigned int v5; // ecx

  v1 = *(_QWORD *)(a1 + 144); /*0x147d8*/
  *(_DWORD *)(a1 + 24) = -1; /*0x147df*/
  for ( i = 0; i < *(_BYTE *)(v1 + 20); ++i ) /*0x147e8*/
  {
    n24 = 24; /*0x147f1*/
    if ( i < 0x19u ) /*0x147f9*/
      n24 = i; /*0x147f9*/
    v5 = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(v1 + 8LL * n24 + 24) + 48LL) + 96LL); /*0x14808*/
    if ( *(_DWORD *)(a1 + 24) > v5 ) /*0x1480f*/
      *(_DWORD *)(a1 + 24) = v5; /*0x14811*/
  }
}

// Function: RstDeviceSetNotificationFlag @ 0x14820 (0x15 bytes)
// Index: 562/906

__int64 __fastcall RstDeviceSetNotificationFlag(__int64 a1, char a2)
{
  __int64 result; // rax

  result = *(_QWORD *)(a1 + 136); /*0x14820*/
  if ( a2 ) /*0x14829*/
    *(_DWORD *)(result + 48) |= 0x10u; /*0x1482b*/
  else
    *(_DWORD *)(result + 48) &= ~0x10u; /*0x14830*/
  return result; /*0x1482f*/
}

// Function: RstDeviceGetMemberId @ 0x14838 (0xc bytes)
// Index: 563/906

__int16 __fastcall RstDeviceGetMemberId(__int64 a1)
{
  return *(_WORD *)(*(_QWORD *)(a1 + 136) + 64LL); /*0x14843*/
}

// Function: RstDeviceSetMemberInfo @ 0x14844 (0x13 bytes)
// Index: 564/906

__int64 __fastcall RstDeviceSetMemberInfo(__int64 a1, __int64 a2, unsigned __int8 a3, __int16 a4)
{
  __int64 result; // rax

  *(_WORD *)(a2 + 2) = a4; /*0x14848*/
  *(_WORD *)a2 = a3; /*0x1484d*/
  result = *(unsigned int *)(a2 + 16); /*0x14850*/
  *(_DWORD *)(a2 + 4) = result; /*0x14853*/
  return result; /*0x14856*/
}

// Function: RstCfgRaidDevCheckFlagBit4 @ 0x14858 (0x10 bytes)
// Index: 565/906

bool __fastcall RstCfgRaidDevCheckFlagBit4(__int64 a1)
{
  return (*(_DWORD *)(*(_QWORD *)(a1 + 136) + 48LL) & 0x10) != 0; /*0x14867*/
}

// Function: RstHelper_4868 @ 0x14868 (0x76 bytes)
// Index: 566/906

__int64 RstHelper_4868gBit4__int64 a1, __int64 Source)
{
  unsigned __int64 v2; // rsi

  v2 = *(_QWORD *)(Source + 8); /*0x14877*/
  if ( *(_QWORD *)(a1 + 176) < v2 /*0x148a7*/
    || *(_QWORD *)(a1 + 176) < v2 + *(_DWORD *)(Source + 16) / (unsigned int)HiiLibReturnZero(a1) )
  {
    return RstBufferSetHeader(Source, 5, 8, 0); /*0x148c9*/
  }
  else
  {
    return RstConfigReadDispatch(*(_QWORD *)(a1 + 160), Source); /*0x148b3*/
  }
}

// Function: Assert_49 @ 0x148e0 (0xb1 bytes)
// Index: 567/906

__int64 __fastcall Assert_49(__int64 a1, __int16 n24, __int64 a3)
{
  int v5; // eax
  __int64 v6; // rdx
  __int64 v7; // rcx

  *(_QWORD *)(a1 + 16) = 0; /*0x148ea*/
  *(_QWORD *)(a1 + 8) = 0; /*0x148ef*/
  *(_QWORD *)(a1 + 160) = 0; /*0x148f4*/
  *(_WORD *)(a1 + 130) = n24; /*0x148fc*/
  *(_BYTE *)(a1 + 186) = 0; /*0x14903*/
  *(_BYTE *)(a1 + 184) = 0; /*0x1490a*/
  *(_BYTE *)(a1 + 185) = 0; /*0x14911*/
  *(_QWORD *)a1 = off_23E90; /*0x14922*/
  v5 = RstHelper_7a90(*(_QWORD *)(*(_QWORD *)(a3 + 56) + 40LL)); /*0x14930*/
  *(_DWORD *)(a1 + 104) = v5; /*0x14935*/
  if ( !v5 ) /*0x1493a*/
  {
    v7 = *(_QWORD *)(a3 + 56); /*0x1493c*/
    if ( *(_DWORD *)(v7 + 8) ) /*0x14940*/
      *(_DWORD *)(a1 + 104) = RstHelper_7a90(*(_QWORD *)(v7 + 48)); /*0x1494e*/
  }
  if ( (unsigned __int8)RstDebugEnabled(v7, v6) && !*(_DWORD *)(a1 + 104) ) /*0x1495a*/
    DebugAssert("RaidDev.cpp", 0x4Au, "logBlockSize > 0"); /*0x14973*/
  Assert_83(a1, a3); /*0x1497e*/
  return a1; /*0x1498b*/
}

// Function: StrnCpy_w @ 0x14994 (0xb bytes)
// Index: 568/906

CHAR16 *StrnCpy_wCHAR16 *Destination, const CHAR16 *Source)
{
  return StrnCpy(Destination, Source, 0x208u);
}

// Function: RstRaidMemberCheckActive @ 0x149a0 (0x34 bytes)
// Index: 569/906

char __fastcall RstRaidMemberCheckActive(__int64 a1, __int64 a2)
{
  unsigned __int8 v2; // r8

  v2 = 0; /*0x149a0*/
  if ( !*(_BYTE *)(a1 + 42) ) /*0x149a3*/
    return 1; /*0x149c4*/
  while ( *(_QWORD *)(16 * (v2 + 7LL) + a1) != a2 ) /*0x149b9*/
  {
    if ( ++v2 >= *(_BYTE *)(a1 + 42) ) /*0x149c2*/
      return 1; /*0x149c2*/
  }
  return *(_BYTE *)(16LL * v2 + a1 + 120); /*0x149c6*/
}

// Function: RstDeviceGetNthActive @ 0x149d4 (0x70 bytes)
// Index: 570/906

__int64 __fastcall RstDeviceGetNthActive(__int64 a1)
{
  unsigned __int8 v1; // bl
  __int64 i; // rsi

  v1 = 0; /*0x149e8*/
  for ( i = 0; v1 < *(_BYTE *)(a1 + 42); ++v1 ) /*0x149ef*/
  {
    if ( *(_BYTE *)(a1 + 16 * (v1 + 7LL) + 8) || (unsigned __int8)RstDeviceCheckOnline(*(_QWORD *)(a1 + 16 * (v1 + 7LL))) ) /*0x14a09*/
    {
      i = *(_QWORD *)(a1 + 16 * (v1 + 7LL)); /*0x14a12*/
      *(_BYTE *)(a1 + 92) = v1; /*0x14a16*/
      if ( !(unsigned __int8)RstDeviceCheckOnline(i) ) /*0x14a1c*/
        break; /*0x14a23*/
    }
  }
  return i; /*0x14a3e*/
}

// Function: RstDeviceMemberExists @ 0x14a44 (0x2a bytes)
// Index: 571/906

char __fastcall RstDeviceMemberExists(__int64 a1, __int64 a2)
{
  unsigned __int8 v2; // r8

  v2 = 0; /*0x14a44*/
  if ( !*(_BYTE *)(a1 + 42) ) /*0x14a47*/
    return 0; /*0x14a68*/
  while ( a2 != *(_QWORD *)(16 * (v2 + 7LL) + a1) ) /*0x14a5d*/
  {
    if ( ++v2 >= *(_BYTE *)(a1 + 42) ) /*0x14a66*/
      return 0; /*0x14a66*/
  }
  return 1; /*0x14a6a*/
}

// Function: RstDeviceGetMemberIndex @ 0x14a70 (0x78 bytes)
// Index: 572/906

unsigned __int8 __fastcall RstDeviceGetMemberIndex(__int64 a1, __int64 a2)
{
  __int64 v2; // r9
  unsigned __int8 v3; // r10
  unsigned __int8 v4; // r11
  __int64 v5; // rcx
  char v6; // bl
  __int64 v7; // rdi
  char v8; // r10
  unsigned __int8 result; // al
  __int64 v10; // rcx

  v2 = a1; /*0x14a7e*/
  v3 = 0; /*0x14a81*/
  v4 = *(_BYTE *)(a1 + 42); /*0x14a84*/
  v5 = *(_QWORD *)(*(_QWORD *)(a1 + 16) + 24LL); /*0x14a88*/
  v6 = a2; /*0x14a8c*/
  if ( v4 ) /*0x14a91*/
  {
    while ( 1 ) /*0x14a9e*/
    {
      v7 = *(_QWORD *)(v2 + 16 * (v3 + 7LL)); /*0x14a9e*/
      if ( !(unsigned __int8)RstDeviceMemberExists(v5, v7) ) /*0x14aa5*/
        break; /*0x14aa5*/
      v3 = v8 + 1; /*0x14aae*/
      if ( v3 >= v4 ) /*0x14ab4*/
        goto LABEL_4; /*0x14ab4*/
    }
    v10 = v7; /*0x14ae3*/
    goto LABEL_7; /*0x14ae6*/
  }
LABEL_4:
  result = *(_BYTE *)(v2 + 92); /*0x14ab6*/
  if ( result != 0xFF && result < v4 ) /*0x14ac1*/
  {
    v10 = *(_QWORD *)(v2 + 16 * (result + 7LL)); /*0x14acd*/
LABEL_7:
    LOBYTE(a2) = v6; /*0x14ad1*/
    return RstDeviceSetExtFlag(v10, a2); /*0x14ad3*/
  }
  return result; /*0x14add*/
}

// Function: RstRaidMemberFindLastActive @ 0x14ae8 (0x39 bytes)
// Index: 573/906

__int64 __fastcall RstRaidMemberFindLastActive(__int64 a1)
{
  __int64 v1; // r8
  unsigned __int8 i; // dl

  v1 = 0; /*0x14ae8*/
  for ( i = 0; i < *(_BYTE *)(a1 + 42); ++i ) /*0x14aee*/
  {
    if ( (*(_DWORD *)(*(_QWORD *)(a1 + 16 * (i + 7LL)) + 136LL) & 0x10) == 0 ) /*0x14b0e*/
    {
      v1 = *(_QWORD *)(a1 + 16 * (i + 7LL)); /*0x14b10*/
      *(_BYTE *)(a1 + 92) = i; /*0x14b13*/
    }
  }
  return v1; /*0x14b20*/
}

// Function: RstRaidDegradedStateHandler @ 0x14b24 (0xd4 bytes)
// Index: 574/906

void __fastcall RstRaidDegradedStateHandler(__int64 a1)
{
  unsigned __int8 i; // di
  int n23; // ecx
  __int64 n23_1; // rdx
  __int64 v5; // r8
  int v6; // ecx
  __int64 v7; // rdx
  __int64 v8; // rax
  __int64 v9; // rdx
  void (__fastcall ***v10)(_QWORD, __int64); // rcx

  if ( *(_DWORD *)(a1 + 8) == 3 ) /*0x14b3a*/
  {
    for ( i = 0; i < *(_BYTE *)(a1 + 42); ++i ) /*0x14b45*/
    {
      n23 = 23; /*0x14b53*/
      if ( i < 0x18u ) /*0x14b58*/
        n23 = i; /*0x14b58*/
      n23_1 = n23; /*0x14b5b*/
      v5 = 2 * (n23 + 7LL); /*0x14b62*/
      v6 = *(_DWORD *)(*(_QWORD *)(a1 + 16 * (n23 + 7LL)) + 136LL); /*0x14b69*/
      if ( (v6 & 4) == 0 && (v6 & 0x10) != 0 ) /*0x14b7e*/
      {
        v7 = 2 * n23_1; /*0x14b80*/
        if ( *(_BYTE *)(a1 + 8 * v7 + 120) ) /*0x14b83*/
        {
          if ( !*(_WORD *)(a1 + 40) || *(_BYTE *)(a1 + 92) != i ) /*0x14b94*/
          {
            *(_BYTE *)(a1 + 8 * v7 + 120) = 0; /*0x14b96*/
            RstDeviceClearFlags(*(_QWORD *)(a1 + 8 * v5), 64); /*0x14ba4*/
          }
        }
      }
    }
    v8 = *(_QWORD *)(a1 + 16); /*0x14bb2*/
    *(_DWORD *)(a1 + 8) = 0; /*0x14bb6*/
    *(_BYTE *)(v8 + 82) = 0; /*0x14bbc*/
    (**(void (__fastcall ***)(__int64))a1)(a1); /*0x14bc3*/
    if ( *(_DWORD *)(a1 + 8) != 3 ) /*0x14bc9*/
    {
      LOBYTE(v9) = 1; /*0x14bcf*/
      v10 = *(void (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 32LL) + 144LL) /*0x14bdc*/
                                                     + 248LL);
      (**v10)(v10, v9); /*0x14be6*/
    }
  }
}

// Function: RstRaidOpFindFailedDisk @ 0x14bf8 (0xb3 bytes)
// Index: 575/906

char __fastcall RstRaidOpFindFailedDisk(__int64 a1)
{
  unsigned __int8 n23_1; // bl
  char i; // si
  int n23; // ecx
  __int64 v5; // rdx
  int v6; // ecx
  __int64 v7; // rbx
  _QWORD *v8; // rax

  n23_1 = 0; /*0x14c07*/
  for ( i = -1; n23_1 < *(_BYTE *)(a1 + 42); ++n23_1 ) /*0x14c0f*/
  {
    n23 = 23; /*0x14c1a*/
    if ( n23_1 < 0x18u ) /*0x14c1f*/
      n23 = n23_1; /*0x14c1f*/
    v5 = *(_QWORD *)(a1 + 16 * (n23 + 7LL)); /*0x14c2c*/
    v6 = *(_DWORD *)(v5 + 136); /*0x14c30*/
    if ( (v6 & 0x10) != 0 ) /*0x14c3d*/
    {
      if ( (v6 & 4) != 0 ) /*0x14c45*/
      {
        if ( *(_BYTE *)(a1 + 92) != n23_1 ) /*0x14c4a*/
        {
          v7 = *(_QWORD *)(Source_16 + 216); /*0x14c53*/
          v8 = RstLinkedListFindData(v7, v5); /*0x14c5d*/
          return RstLinkedListIndexOf(v7, v8); /*0x14c6d*/
        }
      }
      else if ( *(_WORD *)(a1 + 40) == 5 && RstCfgRaidDevCheckFlagBit4(*(_QWORD *)(a1 + 24)) ) /*0x14c8e*/
      {
        i = n23_1; /*0x14c9c*/
      }
    }
  }
  return i; /*0x14c7d*/
}

// Function: RstDeviceCountFailedMembers @ 0x14cac (0x77 bytes)
// Index: 576/906

char __fastcall RstDeviceCountFailedMembers(__int64 a1, _BYTE *a2)
{
  char v3; // r8
  unsigned __int16 i; // r9
  int v5; // ecx

  v3 = 0; /*0x14cb9*/
  for ( i = 0; i < *(unsigned __int8 *)(a1 + 42); ++i ) /*0x14cc0*/
  {
    v5 = *(_DWORD *)(*(_QWORD *)(a1 + 16 * (i + 7LL)) + 136LL); /*0x14cd5*/
    if ( (v5 & 0x10) == 0 || (v5 & 4) != 0 || (v5 & 0x1000000) != 0 ) /*0x14cf5*/
      ++v3; /*0x14cf7*/
    if ( (v5 & 0x10) != 0 && (v5 & 0x1000000) != 0 ) /*0x14d05*/
      *a2 = 1; /*0x14d07*/
  }
  return v3; /*0x14d22*/
}

// Function: RstLinkedListFindNth @ 0x14d24 (0x155 bytes)
// Index: 577/906

__int64 __fastcall RstLinkedListFindNth(__int64 a1, unsigned __int8 j)
{
  unsigned __int8 j_1; // si
  __int64 v3; // r14
  unsigned __int8 n24; // di
  __int16 v5; // ax
  _QWORD *v6; // rax
  _QWORD *v7; // rbx
  __int64 v8; // rax
  __int64 v9; // r15
  __int64 v10; // r13
  bool v11; // si
  int v12; // ebp
  __int64 v13; // r12
  int v14; // eax
  __int64 v16; // rax
  unsigned __int8 v18; // [rsp+70h] [rbp+18h] BYREF
  unsigned __int16 n24_1; // [rsp+78h] [rbp+20h]

  j_1 = j; /*0x14d46*/
  v3 = *(_QWORD *)(Source_16 + 216); /*0x14d49*/
  n24 = 0; /*0x14d50*/
  n24_1 = *(_WORD *)v3; /*0x14d57*/
  if ( n24_1 ) /*0x14d60*/
  {
    v5 = 0; /*0x14d66*/
    while ( 1 ) /*0x14d70*/
    {
      v6 = RstLinkedListGetNth((_QWORD **)(v3 + 16), v5); /*0x14d70*/
      v7 = v6; /*0x14d75*/
      if ( v6 ) /*0x14d7b*/
      {
        if ( (*(_BYTE *)(v6[6] + 136LL) & 1) != 0 ) /*0x14d8c*/
        {
          v8 = RstArrayEntryLookup(v3, j_1); /*0x14d99*/
          v9 = v7[6]; /*0x14d9e*/
          if ( v8 ) /*0x14da5*/
          {
            if ( v9 ) /*0x14dae*/
            {
              v10 = *(_QWORD *)(v8 + 8); /*0x14db4*/
              if ( v10 ) /*0x14dbb*/
                break; /*0x14dbb*/
            }
          }
        }
      }
LABEL_22:
      v5 = ++n24; /*0x14e50*/
      if ( n24 >= n24_1 ) /*0x14e59*/
        return 15; /*0x14e59*/
    }
    v11 = 0; /*0x14dc1*/
    v12 = -1; /*0x14dc4*/
    v18 = 0; /*0x14dc7*/
    while ( 1 ) /*0x14e3e*/
    {
      v16 = RstSmallArrayPop(v10, &v18); /*0x14e3e*/
      if ( !v16 ) /*0x14e46*/
      {
        j_1 = j; /*0x14e48*/
        goto LABEL_22; /*0x14e48*/
      }
      v13 = *(_QWORD *)(v16 + 48); /*0x14dce*/
      v14 = RstHelper_02c0(v13); /*0x14dd5*/
      if ( !v11 ) /*0x14ddf*/
      {
        if ( v12 == v14 ) /*0x14de3*/
        {
          if ( v12 != -1 ) /*0x14de8*/
            goto LABEL_15; /*0x14de8*/
        }
        else
        {
          v11 = v12 != -1; /*0x14df8*/
        }
        v12 = v14; /*0x14dfb*/
      }
LABEL_15:
      if ( v13 && ((unsigned int)RstHelper_02c0(v9) == v14 || v11) && !(unsigned int)RstHelper_be04(j, n24, 0) ) /*0x14e20*/
      {
        RstProtocolCallback42(); /*0x14e2a*/
        return 0; /*0x14e31*/
      }
    }
  }
  return 15; /*0x14e69*/
}

// Function: RstDeviceCanRemove @ 0x14e7c (0x88 bytes)
// Index: 578/906

bool __fastcall RstDeviceCanRemove(__int64 a1)
{
  char v2; // bl
  unsigned __int8 v3; // al
  __int64 v4; // rax
  char v6; // [rsp+30h] [rbp+8h] BYREF

  v2 = 1; /*0x14e95*/
  v6 = 0; /*0x14e99*/
  v3 = RstDeviceCountFailedMembers(a1, &v6); /*0x14e9d*/
  if ( *(_BYTE *)(a1 + 42) != 4 || *(_WORD *)(a1 + 40) != 1 ) /*0x14eaf*/
    return v3 == 0; /*0x14eef*/
  if ( v3 > 1u || v6 ) /*0x14eba*/
    return 0; /*0x14eba*/
  v4 = RstDeviceGetNthActive(a1); /*0x14ebf*/
  if ( v4 ) /*0x14ec7*/
  {
    if ( !(unsigned __int8)RstDeviceCheckOnline(v4) ) /*0x14ecc*/
    {
      *(_BYTE *)(a1 + 16LL * *(unsigned __int8 *)(a1 + 92) + 120) = 0; /*0x14edd*/
      return v2; /*0x14ee2*/
    }
    return 0; /*0x14ee4*/
  }
  return v2; /*0x14efe*/
}

// Function: RstDeviceCheckNotSpare @ 0x14f04 (0x14 bytes)
// Index: 579/906

__int64 __fastcall RstDeviceCheckNotSpare(__int64 a1)
{
  if ( *(_WORD *)(a1 + 40) && *(_DWORD *)(a1 + 8) == 1 ) /*0x14f0f*/
    return 0; /*0x14f11*/
  else
    return *(unsigned int *)(a1 + 8); /*0x14f14*/
}

// Function: RstSectorDivide @ 0x14f18 (0xd bytes)
// Index: 580/906

unsigned __int64 __fastcall RstSectorDivide(__int64 a1, unsigned __int64 Source_)
{
  return Source_ / *(unsigned int *)(a1 + 80); /*0x14f24*/
}

// Function: RstRaidVolCreateWorker @ 0x14f28 (0x127 bytes)
// Index: 581/906

void __fastcall RstRaidVolCreateWorker(__int64 a1, __int64 a2, __int64 Source)
{
  __int64 v6; // rdx
  __int64 v7; // rcx
  char v8; // r12
  char v9; // si
  void (__fastcall ***v10)(_QWORD, __int64); // rcx
  __int64 v11; // rdx
  void (__fastcall ***v12)(_QWORD, __int64); // rcx

  *(_QWORD *)(a2 + 24) = Source; /*0x14f40*/
  *(_BYTE *)(a2 + 67) = 0; /*0x14f44*/
  RstRaidIoRequestInit(a2, a1, *(_BYTE *)(Source + 24), Source); /*0x14f5e*/
  v7 = *(_QWORD *)(a1 + 16); /*0x14f67*/
  v8 = *(_BYTE *)(v7 + 82); /*0x14f6b*/
  if ( *(_BYTE *)(Source + 24) == 42 /*0x14f9c*/
    && !v8
    && (*(_WORD *)(*(_QWORD *)(v7 + 16) + 40LL) > 1u
     || *(_DWORD *)(v7 + 12) == 1 && *(_WORD *)(*(_QWORD *)(v7 + 24) + 40LL) > 1u)
    && *(int *)(a1 + 8) <= 1 )
  {
    *(_BYTE *)(v7 + 82) = 1; /*0x14f9e*/
    LOBYTE(v6) = 1; /*0x14fa6*/
    v9 = 1; /*0x14fb0*/
    v10 = *(void (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(*(_QWORD *)(a1 + 24) + 144LL) + 248LL); /*0x14fb3*/
    (**v10)(v10, v6); /*0x14fbd*/
  }
  else
  {
    v9 = 0; /*0x14fc1*/
  }
  do /*0x15006*/
  {
    if ( *(_BYTE *)(Source + 24) == 40 ) /*0x14fcb*/
    {
      (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)a1 + 8LL))(a1, a2); /*0x14fd3*/
    }
    else
    {
      ++*(_BYTE *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 32LL) + 190LL); /*0x14fe0*/
      (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)a1 + 16LL))(a1, a2); /*0x14fed*/
      --*(_BYTE *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 32LL) + 190LL); /*0x14ff8*/
    }
    RstIoCompleteTransfer(a2); /*0x15001*/
  }
  while ( *(_DWORD *)(a2 + 672) ); /*0x15006*/
  if ( v9 ) /*0x15012*/
  {
    LOBYTE(v11) = 1; /*0x15018*/
    *(_BYTE *)(*(_QWORD *)(a1 + 16) + 82LL) = v8; /*0x1501b*/
    v12 = *(void (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(*(_QWORD *)(a1 + 24) + 144LL) + 248LL); /*0x1502a*/
    (**v12)(v12, v11); /*0x15034*/
  }
}

// Function: RstRaidSetMemberActive @ 0x15050 (0x77 bytes)
// Index: 582/906

__int64 __fastcall RstRaidSetMemberActive(__int64 a1, unsigned __int8 n0x18)
{
  __int64 result; // rax

  if ( n0x18 < 0x18u ) /*0x15053*/
  {
    result = 2LL * n0x18; /*0x1506b*/
    if ( !*(_BYTE *)(a1 + 16LL * n0x18 + 120) ) /*0x1506e*/
    {
      *(_BYTE *)(a1 + 16LL * n0x18 + 120) = 1; /*0x15075*/
      result = RstConfigArrayNotifyRemove( /*0x15094*/
                 *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 32LL) + 144LL),
                 *(_QWORD *)(a1 + 16 * (n0x18 + 7LL)));
    }
    if ( *(_WORD *)(a1 + 40) ) /*0x15099*/
    {
      if ( *(int *)(a1 + 8) < 2 ) /*0x150af*/
      {
        *(_DWORD *)(a1 + 8) = 2; /*0x150b1*/
        *(_BYTE *)(a1 + 92) = n0x18; /*0x150b8*/
      }
    }
    else
    {
      return *(unsigned __int8 *)(a1 + 92); /*0x150a0*/
    }
  }
  return result; /*0x150c6*/
}

// Function: RstRaidMemberMarkRemoving @ 0x150c8 (0x50 bytes)
// Index: 583/906

__int64 __fastcall RstRaidMemberMarkRemoving(__int64 a1, unsigned __int8 n0x18)
{
  __int64 n0x18_1; // rax
  __int64 v3; // rdx
  __int64 result; // rax

  if ( *(_DWORD *)(a1 + 8) != 3 ) /*0x150d3*/
  {
    *(_DWORD *)(a1 + 8) = 3; /*0x150d5*/
    if ( n0x18 < 0x18u ) /*0x150df*/
    {
      n0x18_1 = n0x18; /*0x150e9*/
      v3 = *(_QWORD *)(a1 + 16 * (n0x18 + 7LL)); /*0x150f6*/
      *(_BYTE *)(a1 + 16 * n0x18_1 + 120) = 1; /*0x150fa*/
      return RstConfigArrayNotifyRemove(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 16) + 32LL) + 144LL), v3); /*0x1510e*/
    }
  }
  return result; /*0x15113*/
}

// Function: RstRaidMemberMarkFailed @ 0x15118 (0x55 bytes)
// Index: 584/906

__int64 __fastcall RstRaidMemberMarkFailed(__int64 a1, __int64 a2)
{
  unsigned __int8 n0x18; // dl

  RstDiskSetFlagBit2(a2, 1); /*0x1512d*/
  n0x18 = 0; /*0x15132*/
  if ( *(_BYTE *)(a1 + 42) ) /*0x15134*/
  {
    while ( *(_QWORD *)(a1 + 16 * (n0x18 + 7LL)) != a2 ) /*0x15147*/
    {
      if ( ++n0x18 >= *(_BYTE *)(a1 + 42) ) /*0x1514e*/
        return (**(__int64 (__fastcall ***)(__int64))a1)(a1); /*0x1514e*/
    }
    RstRaidSetMemberActive(a1, n0x18); /*0x15155*/
  }
  return (**(__int64 (__fastcall ***)(__int64))a1)(a1);
}

// Function: RstRaidNotifyDiskDone @ 0x15170 (0x52 bytes)
// Index: 585/906

void __fastcall RstRaidNotifyDiskDone(__int64 a1, __int64 a2)
{
  unsigned __int8 i; // bl
  int n23; // eax

  for ( i = 0; i < *(_BYTE *)(a2 + 67); ++i ) /*0x15187*/
  {
    n23 = 23; /*0x15190*/
    if ( i < 0x18u ) /*0x1519c*/
      n23 = i; /*0x1519c*/
    RstRaidSetMemberActive(a1, *(_BYTE *)(n23 + a2 + 68)); /*0x151a6*/
  }
}

// Function: RstVtableDispatch34 @ 0x151c4 (0x3c bytes)
// Index: 586/906

__int64 __fastcall RstVtableDispatch34(__int64 a1, int a2, __int64 a3, __int64 a4, __int64 a5)
{
  __int64 result; // rax

  if ( !a2 ) /*0x151d0*/
    return (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64))(*(_QWORD *)a1 + 24LL))(a1, a3, a4, a5); /*0x151f8*/
  if ( a2 == 1 ) /*0x151d5*/
    return (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64))(*(_QWORD *)a1 + 32LL))(a1, a3, a4, a5); /*0x151e5*/
  return result; /*0x151fb*/
}

// Function: RstSizeToBlocks @ 0x15200 (0x1d bytes)
// Index: 587/906

unsigned __int64 __fastcall RstSizeToBlocks(__int64 a1, unsigned __int64 a2)
{
  __int16 v4; // cx

  v4 = *(_WORD *)(a1 + 74); /*0x15206*/
  if ( v4 ) /*0x1520d*/
    return a2 >> v4; /*0x1520f*/
  else
    return a2 / *(unsigned __int16 *)(a1 + 72); /*0x15219*/
}

// Function: RstBlocksToSize @ 0x15220 (0x1b bytes)
// Index: 588/906

__int64 __fastcall RstBlocksToSize(__int64 a1, __int64 a2)
{
  __int16 v2; // ax

  v2 = *(_WORD *)(a1 + 74); /*0x15220*/
  if ( v2 ) /*0x15227*/
    return a2 << v2; /*0x1522e*/
  else
    return a2 * *(unsigned __int16 *)(a1 + 72); /*0x15236*/
}

// Function: RstRaidMapTranslateAddress @ 0x1523c (0x20 bytes)
// Index: 589/906

unsigned __int64 __fastcall RstRaidMapTranslateAddress(unsigned __int16 *a1, unsigned __int64 a2)
{
  if ( a1[37] ) /*0x1523c*/
    return a2 & a1[38]; /*0x1524a*/
  else
    return a2 % a1[36]; /*0x15259*/
}

// Function: RstHelper_525c @ 0x1525c (0x9 bytes)
// Index: 590/906

__int64 __fastcall RstHelper_525c(__int64 a1)
{
  return HiiLibReturnZero(*(_QWORD *)(a1 + 24));
}

// Function: Assert_8 @ 0x15268 (0x22a bytes)
// Index: 591/906

__int64 __fastcall Assert_8(__int64 a1, __int64 a2, __int64 a3, unsigned int a4)
{
  unsigned int v4; // r15d
  unsigned __int8 n0x20; // di
  char n24; // cl
  unsigned __int8 n23_1; // bp
  int n23; // eax
  __int64 v11; // rax
  __int64 v12; // r14
  int n23_2; // ecx
  int n5; // eax
  int v15; // eax
  int v16; // r8d
  int v17; // eax

  *(_QWORD *)(a1 + 16) = a2; /*0x15288*/
  v4 = a4; /*0x15293*/
  *(_QWORD *)a1 = off_23EC8; /*0x15296*/
  *(_QWORD *)(a1 + 24) = *(_QWORD *)(a2 + 32); /*0x152a0*/
  *(_WORD *)(a1 + 40) = *(_WORD *)(a3 + 4); /*0x152ac*/
  *(_DWORD *)(a1 + 8) = *(_DWORD *)a3; /*0x152b3*/
  *(_DWORD *)(a1 + 44) = a4 * *(unsigned __int16 *)(a3 + 16); /*0x152bf*/
  n0x20 = 0; /*0x152c7*/
  if ( RstDebugEnabled() && !*(_DWORD *)(a1 + 44) ) /*0x152ce*/
    DebugAssert("RaidMap.cpp", 0x46u, "stripSize > 0"); /*0x152e4*/
  *(_QWORD *)(a1 + 64) = RstDeviceGetBuffer(a3); /*0x152f6*/
  if ( *(_BYTE *)(a3 + 6) > 0x18u ) /*0x152fd*/
    n24 = 24; /*0x15305*/
  else
    n24 = *(_BYTE *)(a3 + 6); /*0x152ff*/
  *(_BYTE *)(a1 + 42) = n24; /*0x15307*/
  n23_1 = 0; /*0x1530e*/
  *(_QWORD *)(a1 + 56) = *(_QWORD *)(a3 + 32); /*0x15311*/
  *(_QWORD *)(a1 + 32) = *(_QWORD *)(a3 + 8); /*0x1531f*/
  *(_BYTE *)(a1 + 92) = *(_BYTE *)(a3 + 41); /*0x15326*/
  if ( n24 ) /*0x1532c*/
  {
    do /*0x153dc*/
    {
      n23 = 23; /*0x15340*/
      if ( n23_1 < 0x18u ) /*0x15349*/
        n23 = n23_1; /*0x15349*/
      v11 = RstDeviceArrayFindByName(Source_16 + 2984, (_BYTE *)(*(_QWORD *)(a3 + 8LL * n23 + 48) + 18LL)); /*0x1535f*/
      v12 = v11; /*0x15364*/
      if ( v11 ) /*0x1536a*/
      {
        RstBufferSetPointer(a1 + 16 * (n23_1 + 7LL), v11); /*0x1537f*/
        if ( RstDeviceCheckOnline(v12) || *(_DWORD *)(a1 + 8) == 2 && n23_1 == *(_BYTE *)(a1 + 92) ) /*0x1539b*/
          goto LABEL_17; /*0x1539b*/
        n23_2 = 23; /*0x1539d*/
        if ( n23_1 < 0x18u ) /*0x153ad*/
          n23_2 = n23_1; /*0x153ad*/
        if ( *(_BYTE *)(n23_2 + a3 + 240) ) /*0x153b3*/
        {
LABEL_17:
          *(_BYTE *)(a1 + 16LL * n23_1 + 120) = 1; /*0x153c6*/
          RstRaidSetMemberActive(a1, n23_1); /*0x153cb*/
        }
      }
      ++n23_1; /*0x153d5*/
    }
    while ( n23_1 < *(_BYTE *)(a1 + 42) ); /*0x153dc*/
    v4 = a4; /*0x153e2*/
  }
  n5 = *(unsigned __int16 *)(a1 + 40); /*0x153ed*/
  *(_DWORD *)(a1 + 48) = 0; /*0x153f1*/
  if ( n5 <= 1 ) /*0x153fb*/
  {
    v15 = *(unsigned __int8 *)(a1 + 42); /*0x1540b*/
  }
  else
  {
    if ( n5 != 5 ) /*0x15400*/
      goto LABEL_25; /*0x15400*/
    v15 = *(unsigned __int8 *)(a1 + 42) - 1; /*0x15406*/
  }
  *(_DWORD *)(a1 + 48) = *(_DWORD *)(a1 + 44) * v15; /*0x15413*/
LABEL_25:
  *(_BYTE *)(a1 + 43) = *(_BYTE *)(a1 + 42) - 1; /*0x15416*/
  v16 = *(_DWORD *)(a1 + 44) / v4; /*0x15429*/
  *(_WORD *)(a1 + 72) = v16; /*0x1542c*/
  v17 = *(_DWORD *)(a1 + 48) / v4; /*0x15433*/
  *(_DWORD *)(a1 + 88) = (unsigned __int16)v16; /*0x1543a*/
  *(_DWORD *)(a1 + 80) = v17; /*0x15441*/
  *(_DWORD *)(a1 + 84) = v17; /*0x15448*/
  *(_WORD *)(a1 + 76) = v16 - 1; /*0x1544b*/
  if ( ((unsigned __int16)(v16 - 1) & (unsigned __int16)v16) != 0 ) /*0x15453*/
  {
    *(_WORD *)(a1 + 74) = 0; /*0x1546e*/
  }
  else
  {
    do /*0x15462*/
    {
      LOWORD(v16) = (__int16)v16 >> 1; /*0x15455*/
      if ( !(_WORD)v16 ) /*0x15459*/
        break; /*0x15459*/
      ++n0x20; /*0x1545b*/
    }
    while ( n0x20 < 0x20u ); /*0x15462*/
    *(_WORD *)(a1 + 74) = n0x20; /*0x15468*/
  }
  return a1; /*0x15484*/
}

// Function: RstRoundUpToBlock @ 0x15494 (0x22 bytes)
// Index: 592/906

unsigned __int64 __fastcall RstRoundUpToBlock(__int64 a1, __int64 Source_)
{
  __int64 v2; // rax
  __int16 v4; // cx
  unsigned __int64 v5; // rax

  v2 = *(unsigned int *)(a1 + 80); /*0x15494*/
  v4 = *(_WORD *)(a1 + 74); /*0x1549a*/
  v5 = Source_ * v2; /*0x1549e*/
  if ( v4 ) /*0x154a5*/
    return v5 >> v4; /*0x154a7*/
  else
    return v5 / *(unsigned __int16 *)(a1 + 72); /*0x154b2*/
}

// Function: RstRaidMemberRetryOrActivate @ 0x154b8 (0x2e bytes)
// Index: 593/906

__int64 __fastcall RstRaidMemberRetryOrActivate(__int64 a1, unsigned __int8 n0x18)
{
  __int64 result; // rax
  __int64 v3; // r8

  if ( n0x18 < 0x18u ) /*0x154bf*/
  {
    result = 2 * (n0x18 + 7LL); /*0x154c8*/
    v3 = *(_QWORD *)(a1 + 16 * (n0x18 + 7LL)); /*0x154cb*/
    if ( (__int16)++*(_WORD *)(v3 + 112) >= 2 ) /*0x154da*/
      return RstRaidSetMemberActive(a1, n0x18); /*0x154dc*/
  }
  return result; /*0x154e1*/
}

// Function: RstHelper_54e8 @ 0x154e8 (0x67 bytes)
// Index: 594/906

void __fastcall RstHelper_54e8(__int64 a1, __int64 a2)
{
  int v4; // r11d
  unsigned __int64 v5; // rdx
  unsigned int n0x2000; // edx

  v4 = HiiLibReturnZero(*(_QWORD *)(a1 + 24)); /*0x15506*/
  if ( *(_WORD *)(a1 + 74) ) /*0x15501*/
    LODWORD(v5) = *(_QWORD *)(a2 + 704) & *(unsigned __int16 *)(a1 + 76); /*0x15516*/
  else
    v5 = *(_QWORD *)(a2 + 704) % (unsigned __int64)*(unsigned __int16 *)(a1 + 72); /*0x15520*/
  n0x2000 = *(_DWORD *)(a1 + 44) - v5 * v4; /*0x1552a*/
  if ( *(_DWORD *)(a2 + 712) > n0x2000 ) /*0x15533*/
    RstTransferBlockSizeInit(a2, n0x2000); /*0x15538*/
  RstArrayIoAdvance((_DWORD *)a2); /*0x1554a*/
}

// Function: RstRaidMapAddress @ 0x15550 (0x89 bytes)
// Index: 595/906

unsigned __int64 __fastcall RstRaidMapAddress(__int64 a1, unsigned __int64 a2, unsigned __int8 a3)
{
  __int16 v3; // r10
  unsigned __int64 v6; // rdx
  int v7; // ecx
  unsigned __int64 v8; // r8
  unsigned __int64 v9; // r8
  unsigned __int64 v10; // rdx

  v3 = *(_WORD *)(a1 + 74); /*0x15550*/
  if ( v3 ) /*0x1555f*/
    v6 = a2 >> v3; /*0x15564*/
  else
    v6 = a2 / *(unsigned __int16 *)(a1 + 72); /*0x15575*/
  v7 = (a3 + v6 * *(unsigned __int8 *)(a1 + 42)) % *(unsigned __int8 *)(a1 + 100); /*0x15592*/
  v8 = (a3 + v6 * *(unsigned __int8 *)(a1 + 42)) / *(unsigned __int8 *)(a1 + 100); /*0x15595*/
  *(_DWORD *)(a1 + 104) = v7; /*0x15598*/
  if ( v3 ) /*0x155a0*/
    v9 = v8 << v3; /*0x155a5*/
  else
    v9 = v8 * *(unsigned __int16 *)(a1 + 72); /*0x155b3*/
  if ( v3 ) /*0x155ba*/
    LODWORD(v10) = a2 & *(_WORD *)(a1 + 76); /*0x155c1*/
  else
    v10 = a2 % *(unsigned __int16 *)(a1 + 72); /*0x155d0*/
  return v9 + (unsigned int)v10; /*0x155d8*/
}

// Function: RstRaidTryMapToNextRow @ 0x155dc (0xb7 bytes)
// Index: 596/906

bool __fastcall RstRaidTryMapToNextRow(__int64 a1, _QWORD *a2, unsigned __int8 *a3)
{
  unsigned __int8 *v3; // rsi
  unsigned __int8 v6; // bl
  int i; // r12d
  int v8; // edx

  v3 = a3; /*0x155f5*/
  LOBYTE(a3) = *a3; /*0x155f8*/
  v6 = 0; /*0x1560e*/
  for ( i = RstRaidMapAddress(a1, *a2, a3); v6 < *(unsigned __int8 *)(a1 + 100) - 1; ++v6 ) /*0x15619*/
  {
    v8 = (*(_DWORD *)(a1 + 104) + 1) % *(unsigned __int8 *)(a1 + 100); /*0x15630*/
    *(_DWORD *)(a1 + 104) = v8; /*0x15635*/
    RstVtableDispatch34(a1, v8, i, (_DWORD)v3, (__int64)a2); /*0x15638*/
    if ( !*(_BYTE *)(a1 + 16 * (*v3 + 7LL) + 8) && !(unsigned __int8)RstDeviceCheckOnline(*(_QWORD *)(a1 + 16 * (*v3 + 7LL))) ) /*0x15652*/
      break; /*0x15659*/
  }
  return v6 != *(unsigned __int8 *)(a1 + 100) - 1; /*0x1568c*/
}

// Function: j_HiiBlockCompare @ 0x15694 (0x5 bytes)
// Index: 597/906

// attributes: thunk
__int64 __fastcall j_HiiBlockCompare()
{
  return HiiBlockCompare();
}

// Function: j_HiiBlockCompareConst @ 0x1569c (0x5 bytes)
// Index: 598/906

// attributes: thunk
__int64 j_HiiBlockCompareConst()
{
  return HiiBlockCompareConst();
}

// Function: j_HiiLibGuidIsZero @ 0x156a4 (0x5 bytes)
// Index: 599/906

// attributes: thunk
__int64 __fastcall j_HiiLibGuidIsZero(unsigned int a1)
{
  return HiiLibGuidIsZero(a1);
}

// Function: j_HiiLibGuidToStr @ 0x156ac (0x5 bytes)
// Index: 600/906

// attributes: thunk
__int64 __fastcall j_HiiLibGuidToStr(unsigned int a1, const char *en)
{
  return HiiLibGuidToStr(a1, (__int64)en);
}

// Function: Assert_18 @ 0x156b4 (0x1ad bytes)
// Index: 601/906

__int64 __fastcall Assert_18(__int64 a1, __int64 Source)
{
  UINTN Length; // rsi
  CHAR16 *Sourcea_1; // r13
  unsigned int v6; // r15d
  unsigned int Source_1; // ebp
  unsigned int v8; // r12d
  _DWORD *v9; // rcx
  __int64 result; // rax
  bool v11; // zf
  _DWORD *v12; // rcx
  unsigned int v13; // eax
  CHAR16 *Sourcea; // [rsp+20h] [rbp-78h] BYREF
  char v15; // [rsp+28h] [rbp-70h]
  __int16 v16; // [rsp+2Ah] [rbp-6Eh]
  __int64 v17; // [rsp+30h] [rbp-68h] BYREF
  unsigned int v18; // [rsp+38h] [rbp-60h]
  int Sourcea_3; // [rsp+3Ch] [rbp-5Ch]
  bool v20; // [rsp+40h] [rbp-58h]
  CHAR16 Destination[2]; // [rsp+48h] [rbp-50h] BYREF
  int v22; // [rsp+4Ch] [rbp-4Ch]
  __int64 v23; // [rsp+50h] [rbp-48h]
  unsigned int Length_1; // [rsp+58h] [rbp-40h]
  int Sourcea_2; // [rsp+5Ch] [rbp-3Ch]
  char n40; // [rsp+60h] [rbp-38h]

  *(_WORD *)Source = 5; /*0x156db*/
  *(_WORD *)(Source + 2) = 8; /*0x156e3*/
  Length = (unsigned int)HiiLibReturnZero(a1); /*0x156f1*/
  if ( (*(_DWORD *)(Source + 20) & 1) != 0 ) /*0x156f8*/
  {
    v16 = 1; /*0x156fe*/
    Sourcea = 0; /*0x1570c*/
    v15 = 0; /*0x15711*/
    RstBufferPoolRealloc((__int64)&Sourcea, 0); /*0x15716*/
    if ( RstDebugEnabled() && !Sourcea ) /*0x1572a*/
      DebugAssert("HostIsmIntf.cpp", 0x4Cu, "sbuf.ptr()"); /*0x1573d*/
    Sourcea_1 = Sourcea; /*0x15745*/
    v6 = *(_DWORD *)(Source + 16) / (unsigned int)Length; /*0x1575c*/
    StrnCpy(Destination, (const CHAR16 *)Source, 0x20u); /*0x1575f*/
    Source_1 = *(_DWORD *)(Source + 20); /*0x15764*/
    Length_1 = Length; /*0x15767*/
    Sourcea_2 = (int)Sourcea_1; /*0x1576b*/
    v8 = 0; /*0x15770*/
    if ( v6 ) /*0x15776*/
    {
      while ( 1 ) /*0x15778*/
      {
        if ( *(_BYTE *)(Source + 24) == 42 ) /*0x1577c*/
          StrnCpy(Sourcea_1, (const CHAR16 *)Source_1, Length); /*0x15786*/
        v9 = *(_DWORD **)(a1 + 128); /*0x15794*/
        Sourcea_3 = Sourcea_2; /*0x1579b*/
        v20 = n40 != 40; /*0x157a3*/
        v18 = Length_1 / (unsigned int)Length; /*0x157b1*/
        v17 = v23; /*0x157ba*/
        if ( (unsigned int)Assert_63(v9, &v17) ) /*0x157bf*/
          break; /*0x157bf*/
        if ( *(_BYTE *)(Source + 24) == 40 ) /*0x157cc*/
          StrnCpy((CHAR16 *)Source_1, Sourcea_1, Length); /*0x157d6*/
        ++v23; /*0x157df*/
        ++v8; /*0x157e4*/
        *(_DWORD *)(Source + 4) += v22; /*0x157e7*/
        Source_1 += Length; /*0x157ea*/
        if ( v8 >= v6 ) /*0x157ef*/
          goto LABEL_12; /*0x157ef*/
      }
    }
    else
    {
LABEL_12:
      *(_WORD *)Source = 0; /*0x157f1*/
      *(_WORD *)(Source + 2) = 0; /*0x157f4*/
    }
    return RstBufferPoolLock((__int64)Sourcea); /*0x157fd*/
  }
  else
  {
    v11 = *(_BYTE *)(Source + 24) == 40; /*0x15804*/
    v12 = *(_DWORD **)(a1 + 128); /*0x15808*/
    Sourcea_3 = *(_DWORD *)(Source + 20); /*0x1580f*/
    v13 = *(_DWORD *)(Source + 16); /*0x15813*/
    v20 = !v11; /*0x15816*/
    v18 = v13 / (unsigned int)Length; /*0x15824*/
    v17 = *(_QWORD *)(Source + 8); /*0x1582c*/
    result = Assert_63(v12, &v17); /*0x15831*/
    if ( !(_DWORD)result ) /*0x1583a*/
    {
      *(_WORD *)Source = 0; /*0x1583c*/
      *(_WORD *)(Source + 2) = 0; /*0x1583f*/
    }
  }
  return result; /*0x15854*/
}

// Function: Assert_124 @ 0x15864 (0xc3 bytes)
// Index: 602/906

__int64 Assert_124__int64 a1, __int64 a2, unsigned int a3)
{
  __int64 v3; // rbx
  __int64 v7; // rax
  __int64 v8; // rax
  __int64 v9; // rax
  __int64 v10; // rax

  v3 = 0; /*0x1587d*/
  if ( !*(_WORD *)(a2 + 4) ) /*0x15890*/
    goto LABEL_8; /*0x15890*/
  if ( *(_WORD *)(a2 + 4) != 1 ) /*0x15896*/
  {
    if ( *(_WORD *)(a2 + 4) == 5 ) /*0x1589c*/
    {
      v7 = RstMemPoolAlloc(520); /*0x1589e*/
      if ( v7 ) /*0x158a6*/
      {
        v8 = Assert_134(v7, a1, a2, a3); /*0x158b4*/
LABEL_10:
        v3 = v8; /*0x158f3*/
        goto LABEL_11; /*0x158f3*/
      }
      goto LABEL_11; /*0x158a6*/
    }
LABEL_8:
    v10 = RstMemPoolAlloc(520); /*0x158d8*/
    if ( v10 ) /*0x158e0*/
    {
      v8 = Assert_112(v10, a1, a2, a3); /*0x158ee*/
      goto LABEL_10; /*0x158ee*/
    }
    goto LABEL_11; /*0x158e0*/
  }
  v9 = RstMemPoolAlloc(520); /*0x158bb*/
  if ( v9 ) /*0x158c3*/
  {
    v8 = Assert_100(v9, a1, a2, a3); /*0x158d1*/
    goto LABEL_10; /*0x158d6*/
  }
LABEL_11:
  (**(void (__fastcall ***)(__int64))v3)(v3); /*0x158f6*/
  if ( *(int *)a2 < 2 && *(_DWORD *)(v3 + 8) == 3 ) /*0x15907*/
    *(_BYTE *)(v3 + 92) = *(_BYTE *)(a2 + 41); /*0x1590c*/
  return v3; /*0x15921*/
}

// Function: RstDeviceInitOperation @ 0x15928 (0x26 bytes)
// Index: 603/906

__int64 __fastcall RstDeviceInitOperation(__int64 a1, int a2)
{
  __int64 v2; // rax
  __int64 result; // rax

  v2 = *(_QWORD *)(a1 + 32); /*0x15928*/
  *(_QWORD *)(a1 + 56) = 0; /*0x1592c*/
  *(_DWORD *)(a1 + 12) = 1; /*0x15931*/
  *(_BYTE *)(a1 + 48) = 1; /*0x15938*/
  *(_DWORD *)(a1 + 64) = a2; /*0x1593c*/
  *(_DWORD *)(v2 + 156) = a2; /*0x1593f*/
  result = *(_QWORD *)(a1 + 16); /*0x15945*/
  *(_DWORD *)(result + 8) = 0; /*0x15949*/
  return result; /*0x1594d*/
}

// Function: RstHelper_5950 @ 0x15950 (0x7e bytes)
// Index: 604/906

__int64 RstHelper_5950__int64 a1, unsigned __int64 Source_, unsigned int a3)
{
  __int64 v5; // rdx
  char v6; // al
  unsigned __int64 v7; // rdx
  __int64 v8; // rcx
  __int64 result; // rax

  v5 = a3 / (unsigned int)HiiLibReturnZero(*(_QWORD *)(a1 + 32)) - 1; /*0x1597d*/
  v6 = *(_BYTE *)(a1 + 48); /*0x1597f*/
  v7 = Source_ + v5; /*0x15982*/
  if ( v6 ) /*0x15987*/
    v8 = *(_QWORD *)(a1 + 16); /*0x15989*/
  else
    v8 = *(_QWORD *)(a1 + 24); /*0x1598f*/
  if ( v6 ) /*0x15995*/
    result = *(_QWORD *)(a1 + 24); /*0x15997*/
  else
    result = *(_QWORD *)(a1 + 16); /*0x1599d*/
  if ( !*(_DWORD *)(a1 + 12) ) /*0x159a1*/
    return *(_QWORD *)(a1 + 16); /*0x159a7*/
  if ( v7 < *(_QWORD *)(a1 + 40) ) /*0x159bf*/
    return v8; /*0x159c1*/
  if ( Source_ < *(_QWORD *)(a1 + 40) ) /*0x159ca*/
  {
    while ( 1 ) /*0x159cc*/
      ; /*0x159cc*/
  }
  return result; /*0x159b5*/
}

// Function: RstDevicePathGetNameFromConfig @ 0x159d0 (0x33 bytes)
// Index: 605/906

__int64 __fastcall RstDevicePathGetNameFromConfig(__int64 a1)
{
  return (unsigned __int8)RstDevicePathFindName( /*0x159fe*/
                            *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 32) + 144LL) + 248LL) + 8LL),
                            (_BYTE *)(*(_QWORD *)(*(_QWORD *)(a1 + 32) + 136LL) + 16LL))[50];
}

// Function: Assert_114 @ 0x15a04 (0x26 bytes)
// Index: 606/906

__int64 Assert_114__int64 a1)
{
  _QWORD v2[21]; // [rsp+20h] [rbp-A8h] BYREF

  Assert_52((__int64)v2, a1); /*0x15a13*/
  return Assert_96(v2); /*0x15a22*/
}

// Function: Assert_113 @ 0x15a2c (0x2f bytes)
// Index: 607/906

__int64 Assert_113__int64 a1, __int64 a2)
{
  _QWORD v4[21]; // [rsp+20h] [rbp-A8h] BYREF

  Assert_52((__int64)v4, a1); /*0x15a40*/
  return Assert_22(v4, a2); /*0x15a52*/
}

// Function: RstDeviceGetDataPtr @ 0x15a5c (0x5 bytes)
// Index: 608/906

__int64 __fastcall RstDeviceGetDataPtr(__int64 a1)
{
  return *(_QWORD *)(a1 + 56); /*0x15a60*/
}

// Function: RstHelper_5a64 @ 0x15a64 (0x104 bytes)
// Index: 609/906

void RstHelper_5a64int64 a1, __int64 a2, __int64 Source)
{
  unsigned int v6; // eax
  unsigned __int64 v7; // r13
  char v8; // cl
  unsigned int v9; // r14d
  __int64 v10; // r12
  __int64 v11; // rsi
  __int64 v12; // rcx
  int v13; // eax
  CHAR16 Destination; // [rsp+20h] [rbp-38h] BYREF
  __int64 v15; // [rsp+28h] [rbp-30h]
  int v16; // [rsp+30h] [rbp-28h]
  int v17; // [rsp+34h] [rbp-24h]

  v6 = HiiLibReturnZero(*(_QWORD *)(a1 + 32)); /*0x15a8e*/
  v7 = *(_QWORD *)(Source + 8); /*0x15a93*/
  v8 = *(_BYTE *)(a1 + 48); /*0x15a97*/
  v9 = v6; /*0x15a9c*/
  if ( v8 ) /*0x15aad*/
    v10 = *(_QWORD *)(a1 + 16); /*0x15aaf*/
  else
    v10 = *(_QWORD *)(a1 + 24); /*0x15ab5*/
  if ( v8 ) /*0x15abb*/
    v11 = *(_QWORD *)(a1 + 24); /*0x15abd*/
  else
    v11 = *(_QWORD *)(a1 + 16); /*0x15ac3*/
  if ( v7 + *(_DWORD *)(Source + 16) / v6 - 1 < *(_QWORD *)(a1 + 40) ) /*0x15acb*/
  {
    v12 = v10; /*0x15acd*/
LABEL_11:
    RstRaidVolCreateWorker(v12, a2, Source); /*0x15adb*/
    return; /*0x15ae6*/
  }
  if ( v7 >= *(_QWORD *)(a1 + 40) ) /*0x15ad6*/
  {
    v12 = v11; /*0x15ad8*/
    goto LABEL_11; /*0x15ad8*/
  }
  StrnCpy(&Destination, (const CHAR16 *)Source, 0x20u); /*0x15af6*/
  *(_DWORD *)(Source + 16) = v9 * (*(_DWORD *)(a1 + 40) - v7); /*0x15b0f*/
  RstRaidVolCreateWorker(v10, a2, Source); /*0x15b13*/
  if ( !*(_BYTE *)(a2 + 66) ) /*0x15b18*/
  {
    v15 = *(_QWORD *)(a1 + 40); /*0x15b2a*/
    v13 = *(_DWORD *)(Source + 16); /*0x15b2f*/
    v16 -= v13; /*0x15b35*/
    v17 += v13; /*0x15b39*/
    RstRaidVolCreateWorker(v11, a2, (__int64)&Destination); /*0x15b3d*/
  }
  *(_DWORD *)(Source + 16) += v16; /*0x15b46*/
}

// Function: RstRaidOpMarkMemberFailed @ 0x15b68 (0x36 bytes)
// Index: 610/906

__int64 __fastcall RstRaidOpMarkMemberFailed(__int64 a1, __int64 a2)
{
  __int64 result; // rax

  result = RstRaidMemberMarkFailed(*(_QWORD *)(a1 + 16), a2); /*0x15b7c*/
  if ( *(_DWORD *)(a1 + 12) == 1 ) /*0x15b85*/
    return RstRaidMemberMarkFailed(*(_QWORD *)(a1 + 24), a2); /*0x15b8e*/
  return result; /*0x15b98*/
}

// Function: Assert_17 @ 0x15ba0 (0x1b6 bytes)
// Index: 611/906

__int64 __fastcall Assert_17(__int64 a1, __int64 a2, __int64 a3, int a4)
{
  __int64 v8; // rdx
  __int64 v9; // rcx
  unsigned int v10; // ebx
  __int64 v11; // rbp
  __int64 v12; // rax
  __int64 v13; // rdx
  __int64 v14; // rax
  __int64 v15; // rax
  __int64 v16; // rcx
  __int64 v17; // rcx

  RstBufferEntryInitPtr(); /*0x15bc5*/
  *(_QWORD *)(a1 + 32) = a2; /*0x15bca*/
  *(_WORD *)(a1 + 74) = 0; /*0x15bd1*/
  *(_WORD *)(a1 + 76) = 0; /*0x15bd6*/
  *(_WORD *)(a1 + 78) = 32; /*0x15be0*/
  *(_WORD *)(a1 + 80) = 32; /*0x15be4*/
  *(_BYTE *)(a1 + 82) = *(_BYTE *)(a3 + 16); /*0x15beb*/
  *(_QWORD *)(a1 + 56) = *(_QWORD *)(a3 + 24); /*0x15bf2*/
  *(_DWORD *)(a1 + 68) = *(_DWORD *)(a3 + 32); /*0x15bf9*/
  *(_DWORD *)(a1 + 12) = *(_DWORD *)(a3 + 8); /*0x15bff*/
  *(_DWORD *)(a1 + 64) = *(_DWORD *)(a3 + 12); /*0x15c05*/
  v10 = RstHelper_7a90(*(_QWORD *)(a3 + 40)); /*0x15c11*/
  if ( !v10 && *(_DWORD *)(a1 + 12) ) /*0x15c18*/
    v10 = RstHelper_7a90(*(_QWORD *)(a3 + 48)); /*0x15c27*/
  if ( (unsigned __int8)RstDebugEnabled(v9, v8) && !v10 ) /*0x15c36*/
    DebugAssert("RaidVol.cpp", 0x5Cu, "nBlkSz > 0"); /*0x15c4b*/
  if ( a4 ) /*0x15c53*/
    v11 = *(_QWORD *)(a3 + 48); /*0x15c5b*/
  else
    v11 = *(_QWORD *)(a3 + 40); /*0x15c55*/
  v12 = Assert_124(a1, v11, v10); /*0x15c68*/
  *(_QWORD *)(a1 + 16) = v12; /*0x15c73*/
  *(_WORD *)(a1 + 72) = 1 << *(_DWORD *)(v12 + 96); /*0x15c81*/
  if ( *(_DWORD *)(a1 + 12) ) /*0x15c89*/
  {
    v14 = Assert_124(a1, *(_QWORD *)(a3 + 48), v10); /*0x15ca1*/
    v13 = 1; /*0x15ca6*/
    *(_QWORD *)(a1 + 24) = v14; /*0x15cab*/
    LOWORD(v13) = 1 << *(_DWORD *)(v14 + 96); /*0x15cb2*/
    *(_WORD *)(a1 + 72) |= v13; /*0x15cb5*/
  }
  else
  {
    *(_QWORD *)(a1 + 24) = Assert_124(a1, v11, v10); /*0x15c97*/
  }
  if ( *(_DWORD *)(a1 + 12) == 1 ) /*0x15cc2*/
  {
    if ( *(_DWORD *)(*(_QWORD *)(a1 + 24) + 8LL) == 3 ) /*0x15ccb*/
    {
      v15 = *(_QWORD *)(a1 + 16); /*0x15ccd*/
      if ( *(_DWORD *)(v15 + 8) != 3 ) /*0x15cd4*/
      {
        *(_DWORD *)(v15 + 8) = 3; /*0x15cd6*/
        *(_BYTE *)(*(_QWORD *)(a1 + 16) + 92LL) = *(_BYTE *)(*(_QWORD *)(a1 + 24) + 92LL); /*0x15ce4*/
      }
    }
    if ( *(_DWORD *)(a1 + 12) == 1 ) /*0x15ceb*/
    {
      if ( *(_DWORD *)(a1 + 64) <= 1u ) /*0x15cf1*/
      {
        v16 = *(_QWORD *)(a1 + 16); /*0x15cf9*/
        if ( (*(_DWORD *)(v16 + 8) == 2 || *(_DWORD *)(v16 + 8) == 3) && !(unsigned __int8)RstDeviceCanRemove() ) /*0x15d08*/
        {
          v17 = *(_QWORD *)(a1 + 16); /*0x15d12*/
          *(_DWORD *)(a1 + 12) = 0; /*0x15d18*/
          RstDeviceGetMemberIndex(v17, 0); /*0x15d1c*/
        }
      }
      if ( *(_DWORD *)(a1 + 12) == 1 && *(_DWORD *)(a1 + 64) == 1 ) /*0x15d2b*/
      {
        LOBYTE(v13) = 3; /*0x15d31*/
        RstDeviceGetMemberIndex(*(_QWORD *)(a1 + 16), v13); /*0x15d33*/
      }
    }
  }
  return a1; /*0x15d4f*/
}

// Function: Assert_4 @ 0x15d58 (0x28f bytes)
// Index: 612/906

__int64 __fastcall Assert_4(__int64 a1)
{
  __int64 n6; // rax
  bool v3; // r12
  __int64 v4; // rdx
  int v5; // eax
  int v6; // ecx
  __int64 v7; // rsi
  unsigned __int8 i; // bp
  __int64 v9; // rdx
  unsigned int n2; // eax
  int n23; // eax
  __int64 v12; // r13
  int v13; // ebx
  __int64 v14; // rax
  bool v15; // al
  bool v16; // zf
  __int64 v17; // rax
  __int64 v18; // rcx
  __int64 v19; // rax
  int v20; // ecx
  int v21; // edx
  int v22; // ebx
  __int64 v23; // rax
  unsigned __int64 v24; // rcx
  char v25; // al
  unsigned __int64 v26; // rdx
  __int64 v27; // [rsp+30h] [rbp-38h] BYREF
  char v28; // [rsp+38h] [rbp-30h]
  __int16 v29; // [rsp+3Ah] [rbp-2Eh]

  n6 = RstCfgCheckVolumeType(*(_QWORD *)(*(_QWORD *)(a1 + 32) + 144LL)); /*0x15d82*/
  v3 = (_DWORD)n6 == 6; /*0x15d8a*/
  if ( *(_DWORD *)(a1 + 12) ) /*0x15d91*/
  {
    v27 = 0; /*0x15da6*/
    v28 = 0; /*0x15dab*/
    v29 = 1; /*0x15db0*/
    RstBufferPoolRealloc((__int64)&v27, 0); /*0x15db6*/
    if ( RstDebugEnabled() && !v27 ) /*0x15dca*/
      DebugAssert("RaidVol.cpp", 0x106u, "sbuf.ptr()"); /*0x15ddf*/
    if ( *(_DWORD *)(a1 + 64) == 3 || v3 ) /*0x15ded*/
    {
      v7 = v27; /*0x15e26*/
      for ( i = 0; ; ++i ) /*0x15e2b*/
      {
        v9 = *(_QWORD *)(a1 + 16); /*0x15e2e*/
        n2 = 2; /*0x15e32*/
        if ( *(_BYTE *)(v9 + 42) <= 2u ) /*0x15e3b*/
          n2 = *(unsigned __int8 *)(v9 + 42); /*0x15e3d*/
        if ( i >= n2 ) /*0x15e47*/
        {
          RstRaidMemberMarkRemoving(*(_QWORD *)(a1 + 16), 0xFFu); /*0x15fb6*/
          goto LABEL_31; /*0x15fb6*/
        }
        n23 = 23; /*0x15e51*/
        if ( i < 0x18u ) /*0x15e56*/
          n23 = i; /*0x15e56*/
        v12 = *(_QWORD *)(v9 + 16 * (n23 + 7LL)); /*0x15e63*/
        if ( (*(_DWORD *)(v12 + 136) & 8) != 0 ) /*0x15e74*/
        {
          v13 = HiiLibReturnZero(v12); /*0x15e81*/
          v14 = RstCountDecrement(v12); /*0x15e83*/
          Assert_89(Source_16, v12, 40, v14, v13, v7); /*0x15ea0*/
          if ( !*(_WORD *)(Source_16 + 2720) ) /*0x15eac*/
            break; /*0x15eac*/
        }
      }
      v15 = RstDeviceCheckCapacityNonZero((_DWORD *)v7, *(_QWORD *)(a1 + 16)) == 0; /*0x15ecd*/
      if ( v3 ) /*0x15ed3*/
      {
        v16 = !v15; /*0x15ed5*/
        v17 = *(unsigned int *)(a1 + 68); /*0x15ed8*/
        if ( v16 ) /*0x15edb*/
          v18 = *(unsigned int *)(v7 + 4 * v17); /*0x15ee3*/
        else
          v18 = *(_QWORD *)(v7 + 8 * v17); /*0x15edd*/
        v19 = *(_QWORD *)(a1 + 16); /*0x15ee6*/
        *(_QWORD *)(a1 + 56) = v18; /*0x15eea*/
        v20 = *(unsigned __int8 *)(v19 + 93); /*0x15eee*/
        LODWORD(v19) = *(unsigned __int16 *)(v19 + 72); /*0x15ef2*/
        *(_BYTE *)(a1 + 48) = 1; /*0x15ef6*/
        *(_QWORD *)(a1 + 40) = *(_QWORD *)(a1 + 56) * (unsigned int)(v19 * v20); /*0x15f04*/
      }
      else
      {
        v21 = *(_DWORD *)(v7 + 8); /*0x15f11*/
        if ( (v21 == *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 32) + 144LL) + 248LL) + 24LL) /*0x15f32*/
           || v21 == -1412436263)
          && *(_DWORD *)v7 == 1 )
        {
          Assert_13((_DWORD *)v7, a1); /*0x15f3a*/
          *(_DWORD *)v7 = 0; /*0x15f42*/
          v22 = HiiLibReturnZero(v12); /*0x15f4d*/
          v23 = RstCountDecrement(v12); /*0x15f4f*/
          Assert_89(Source_16, v12, 42, v23, v22, v7); /*0x15f6c*/
          RstRaidMemberSetActiveOrRemove(*(_QWORD *)(a1 + 16), i); /*0x15f78*/
        }
        v24 = *(unsigned int *)(v7 + 4) + ((unsigned __int64)*(unsigned int *)(v7 + 48) << 32); /*0x15f87*/
        *(_QWORD *)(a1 + 56) = v24; /*0x15f8a*/
        v25 = *(_BYTE *)(v7 + 12); /*0x15f8e*/
        *(_BYTE *)(a1 + 48) = v25; /*0x15f91*/
        v26 = v24 * *(unsigned int *)(v7 + 16); /*0x15f97*/
        *(_QWORD *)(a1 + 40) = v26; /*0x15f9b*/
        if ( !v25 ) /*0x15fa2*/
          *(_QWORD *)(a1 + 40) = v26 + *(unsigned int *)(v7 + 16); /*0x15faa*/
      }
    }
    else
    {
      v4 = *(_QWORD *)(a1 + 16); /*0x15def*/
      v5 = *(unsigned __int16 *)(v4 + 72); /*0x15df3*/
      v6 = *(unsigned __int8 *)(v4 + 93); /*0x15df7*/
      *(_BYTE *)(a1 + 48) = 1; /*0x15dfb*/
      *(_QWORD *)(a1 + 40) = *(_QWORD *)(a1 + 56) * (unsigned int)(v5 * v6); /*0x15e09*/
      if ( *(int *)(v4 + 8) >= 2 && !*(_DWORD *)(a1 + 64) ) /*0x15e17*/
LABEL_31:
        *(_DWORD *)(a1 + 12) = 0; /*0x15fbb*/
    }
    return RstBufferPoolLock(v27); /*0x15fc4*/
  }
  return n6; /*0x15fda*/
}

// Function: Assert_79 @ 0x15fe8 (0x11d bytes)
// Index: 613/906

void __fastcall Assert_79(__int64 a1, __int64 a2)
{
  __int64 Source; // rdx
  unsigned __int8 n23_2; // si
  __int64 v6; // r11
  int n23; // edx
  int n23_1; // ecx
  __int64 v9; // rax
  __int64 v10[20]; // [rsp+20h] [rbp-A8h] BYREF

  Source = *(_QWORD *)(a1 + 16); /*0x15ffd*/
  n23_2 = *(_BYTE *)(Source + 92); /*0x16008*/
  StrnCpy_w(*(CHAR16 **)(a1 + 24), (const CHAR16 *)Source); /*0x1600c*/
  v6 = *(_QWORD *)(a1 + 16); /*0x16011*/
  n23 = 23; /*0x16018*/
  if ( *(_WORD *)(v6 + 40) ) /*0x1601d*/
    goto LABEL_5; /*0x1601d*/
  n23_1 = 23; /*0x1602c*/
  if ( n23_2 < 0x18u ) /*0x1602e*/
    n23_1 = n23_2; /*0x1602e*/
  if ( a2 != *(_QWORD *)(v6 + 16 * (n23_1 + 7LL)) ) /*0x1603f*/
  {
LABEL_5:
    v9 = *(_QWORD *)(a1 + 32); /*0x16041*/
    *(_QWORD *)(a1 + 56) = 0; /*0x1604a*/
    *(_DWORD *)(a1 + 12) = 1; /*0x1604e*/
    *(_BYTE *)(a1 + 48) = 1; /*0x16051*/
    *(_DWORD *)(a1 + 64) = 1; /*0x16054*/
    *(_DWORD *)(v9 + 156) = 1; /*0x16057*/
    *(_DWORD *)(*(_QWORD *)(a1 + 16) + 8LL) = 0; /*0x16065*/
    if ( n23_2 < 0x18u ) /*0x1606d*/
      n23 = n23_2; /*0x1606d*/
    *(_BYTE *)(*(_QWORD *)(a1 + 16) + 16LL * n23 + 120) = 0; /*0x1607a*/
    if ( n23_2 < 0x18u ) /*0x16086*/
      *(_QWORD *)(*(_QWORD *)(a1 + 16) + 16 * (n23_2 + 7LL)) = a2; /*0x16097*/
    (***(void (__fastcall ****)(_QWORD))(a1 + 16))(*(_QWORD *)(a1 + 16)); /*0x160a2*/
  }
  if ( *(_WORD *)(*(_QWORD *)(a1 + 16) + 40LL) == 5 ) /*0x160ad*/
  {
    if ( (unsigned int)RstDevicePathGetNameFromConfig(a1) == 2 || (unsigned int)RstDevicePathGetNameFromConfig(a1) == 4 ) /*0x160c7*/
    {
      Assert_52((__int64)v10, a1); /*0x160de*/
      Assert_37(v10, a2); /*0x160eb*/
    }
    else
    {
      Assert_113(a1, a2); /*0x160cf*/
    }
  }
}

// Function: RstConfigReadDispatch @ 0x16108 (0x5d bytes)
// Index: 614/906

__int64 __fastcall RstConfigReadDispatch(__int64 a1, __int64 Source)
{
  __int64 v4; // rbx
  __int64 v5; // rdx

  v4 = Source_16 + 32952; /*0x1611f*/
  v5 = Source_16 + 32952; /*0x1612a*/
  if ( *(_DWORD *)(a1 + 12) ) /*0x16126*/
    RstHelper_5a64(a1, v5, Source); /*0x1613a*/
  else
    RstRaidVolCreateWorker(*(_QWORD *)(a1 + 16), v5, Source); /*0x16133*/
  return RstDeviceSetMemberInfo(*(_QWORD *)(a1 + 32), *(_QWORD *)(v4 + 24), *(_BYTE *)(v4 + 66), *(_WORD *)(v4 + 64)); /*0x1615f*/
}

// Function: Assert_90 @ 0x16168 (0xa1 bytes)
// Index: 615/906

__int64 Assert_90__int64 a1)
{
  __int64 result; // rax
  __int64 v3; // rdx
  _QWORD v4[21]; // [rsp+30h] [rbp-A8h] BYREF
  __int64 v5; // [rsp+E0h] [rbp+8h] BYREF
  char v6; // [rsp+E8h] [rbp+10h] BYREF

  Assert_4(a1); /*0x16174*/
  result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, char *, __int64 *))(qword_58070 + 312))( /*0x161a3*/
             2,
             &unk_27950,
             0,
             &v6,
             &v5);
  if ( result ) /*0x161ac*/
  {
    if ( *(_BYTE *)(a1 + 82) > 1u ) /*0x161b2*/
    {
      Assert_52((__int64)v4, a1); /*0x161bc*/
      result = Assert_34(v4); /*0x161c6*/
    }
  }
  else
  {
    result = *(_QWORD *)(a1 + 32); /*0x161cd*/
    *(_BYTE *)(result + 187) = 0; /*0x161d1*/
  }
  if ( v5 ) /*0x161e3*/
    result = (*(__int64 (**)(void))(qword_58070 + 72))(); /*0x161ec*/
  if ( *(_BYTE *)(a1 + 82) ) /*0x161ef*/
  {
    LOBYTE(v3) = 1; /*0x161f9*/
    return RstDeviceSetNotificationFlag(*(_QWORD *)(a1 + 32), v3); /*0x161fb*/
  }
  return result; /*0x16200*/
}

// Function: RstArrayInitAllSlots @ 0x1620c (0x32 bytes)
// Index: 616/906

__int64 __fastcall RstArrayInitAllSlots(__int64 a1)
{
  __int64 n144; // rdi
  __int64 result; // rax

  n144 = 144; /*0x16219*/
  do /*0x16231*/
  {
    result = RstLinkedListNodeInit(a1); /*0x16221*/
    a1 += 208; /*0x16226*/
    --n144; /*0x1622d*/
  }
  while ( n144 ); /*0x16231*/
  return result; /*0x16238*/
}

// Function: RstArrayAllSlotsEmpty @ 0x16240 (0x44 bytes)
// Index: 617/906

char __fastcall RstArrayAllSlotsEmpty(__int64 a1)
{
  __int16 n144; // dx
  __int16 v4; // cx

  n144 = *(_WORD *)(a1 + 29952); /*0x16240*/
  if ( n144 >= 144 ) /*0x16252*/
  {
    v4 = 0; /*0x1625e*/
    while ( !*(_BYTE *)(208LL * v4 + a1 + 152) ) /*0x16277*/
    {
      if ( ++v4 >= n144 ) /*0x1627f*/
        return 1; /*0x16281*/
    }
  }
  return 0; /*0x16256*/
}

// Function: RstConfigArrayAddEntry @ 0x16284 (0x10f bytes)
// Index: 618/906

__int64 __fastcall RstConfigArrayAddEntry(__int64 a1, _BYTE *a2, int a3, __int64 a4)
{
  __int16 n144; // r10
  __int16 n144_1; // cx
  __int16 n144_2; // r11
  __int64 v12; // rdi
  __int64 v13; // rsi
  unsigned __int16 n16_1; // ax
  unsigned __int16 n16; // bx

  n144 = *(_WORD *)(a1 + 29952); /*0x162a0*/
  n144_1 = n144; /*0x162bb*/
  n144_2 = 0; /*0x162bf*/
  if ( n144 > 0 ) /*0x162c3*/
  {
    while ( !*(_BYTE *)(208LL * n144_2 + a1 + 152) ) /*0x162d8*/
    {
      if ( ++n144_2 >= *(__int16 *)(a1 + 29952) ) /*0x162e6*/
        goto LABEL_6; /*0x162e6*/
    }
    n144_1 = n144_2; /*0x162ea*/
  }
LABEL_6:
  if ( n144_1 == n144 ) /*0x162f2*/
  {
    if ( n144 == 144 ) /*0x162fd*/
      return 0; /*0x16301*/
    *(_WORD *)(a1 + 29952) = n144 + 1; /*0x16307*/
  }
  v12 = 208LL * n144_1; /*0x16313*/
  v13 = v12 + a1; /*0x1631a*/
  RstLinkedListNodeInit(v12 + a1); /*0x16321*/
  n16_1 = StrLenA(a2); /*0x16329*/
  n16 = 16; /*0x1632e*/
  if ( n16_1 < 0x10u ) /*0x16339*/
    n16 = n16_1; /*0x16339*/
  RstStringCopyN(v13 + 28, (__int64)&a2[n16_1 - n16], n16); /*0x16350*/
  *(_BYTE *)(v12 + n16 + a1 + 28) = 0; /*0x1635f*/
  *(_DWORD *)(v13 + 136) = a3; /*0x16364*/
  *(_QWORD *)(v13 + 88) = a4; /*0x1636b*/
  *(_BYTE *)(v13 + 152) = 0; /*0x1636f*/
  return v12 + a1; /*0x16385*/
}

// Function: RstConfigArrayMergeDuplicates @ 0x16394 (0xee bytes)
// Index: 619/906

__int16 __fastcall RstConfigArrayMergeDuplicates(__int64 a1)
{
  __int16 i_2; // dx
  __int16 v3; // bp
  __int16 i; // bx
  __int64 v5; // r15
  __int16 v6; // r13
  __int16 i_1; // si

  i_2 = *(_WORD *)(a1 + 29952); /*0x163b5*/
  v3 = 0; /*0x163bc*/
  for ( i = 0; i < i_2; ++i ) /*0x163c5*/
  {
    if ( !*(_BYTE *)(a1 + 208LL * i + 152) ) /*0x163d9*/
    {
      v5 = 0; /*0x163e5*/
      v6 = 0; /*0x163e8*/
      i_1 = 0; /*0x163ec*/
      if ( i_2 > 0 ) /*0x163ef*/
      {
        do /*0x16433*/
        {
          if ( !*(_BYTE *)(a1 + 208LL * i_1 + 152) && i != i_1 && RstDeviceCompareEntries(a1 + 208LL * i_1, a1 + 208LL * i, 0) ) /*0x16417*/
          {
            v5 = a1 + 208LL * i_1; /*0x16422*/
            ++v6; /*0x16425*/
          }
          ++i_1; /*0x16429*/
        }
        while ( i_1 < *(__int16 *)(a1 + 29952) ); /*0x16433*/
        if ( v6 == 1 ) /*0x1643a*/
        {
          RstDeviceAddAndJournal(v5, a1 + 208LL * i); /*0x16442*/
          ++v3; /*0x16447*/
        }
      }
    }
    i_2 = *(_WORD *)(a1 + 29952); /*0x1644a*/
  }
  return v3; /*0x16474*/
}

// Function: RstDeviceArrayFindByName @ 0x16484 (0x88 bytes)
// Index: 620/906

__int64 __fastcall RstDeviceArrayFindByName(__int64 a1, _BYTE *a2)
{
  bool v4; // cc
  __int16 v5; // bx
  __int64 v6; // rax

  v4 = *(_WORD *)(a1 + 29952) > 0; /*0x164a0*/
  v5 = 0; /*0x164a7*/
  while ( v4 ) /*0x164aa*/
  {
    v6 = 208LL * v5; /*0x164b0*/
    if ( !*(_BYTE *)(v6 + a1 + 152) && !StrnCpy16(a2, (_BYTE *)(v6 + a1 + 28), 16) ) /*0x164d7*/
      return a1 + 208LL * v5; /*0x164f3*/
    v4 = ++v5 < *(_WORD *)(a1 + 29952); /*0x164dc*/
  }
  return 0; /*0x16506*/
}

// Function: RstPplRecoveryLogInitEx @ 0x1650c (0x35 bytes)
// Index: 621/906

__int64 __fastcall RstPplRecoveryLogInitEx(__int64 a1)
{
  __int64 v2; // rcx
  __int64 v3; // rax

  RstPplRecoveryLogInit((_QWORD *)a1); /*0x16515*/
  v2 = *(unsigned int *)(a1 + 20); /*0x1651a*/
  *(_QWORD *)a1 = off_23F20; /*0x16524*/
  v3 = RstMemPoolAlloc(v2); /*0x16527*/
  *(_QWORD *)(a1 + 8) = v3; /*0x1652f*/
  RstBufferMetaZero(v3); /*0x16533*/
  return a1; /*0x1653b*/
}

// Function: Assert_128 @ 0x16544 (0x61 bytes)
// Index: 622/906

__int64 sub_16544()
{
  __int64 result; // rax
  _QWORD *i; // rbx

  MemZero((_BYTE *)(Source_16 + 2724), 0, 256); /*0x16560*/
  Assert_106(Source_16 + 224); /*0x16573*/
  result = *(_QWORD *)(Source_16 + 216); /*0x1657f*/
  for ( i = *(_QWORD **)(result + 264); i; i = (_QWORD *)*i ) /*0x16586*/
    result = Assert_118((__int64)i); /*0x16592*/
  return result; /*0x1659f*/
}

// Function: RstStringFormatAppendIndex @ 0x165a8 (0xd8 bytes)
// Index: 623/906

__int64 __fastcall RstStringFormatAppendIndex(__int64 Source, CHAR16 *Destination, __int16 a3)
{
  __int16 v5; // r12
  __int16 i; // bx
  _BYTE v8[24]; // [rsp+20h] [rbp-18h] BYREF

  RstHelper_8da8(v8, 10, ":%d", (unsigned int)a3); /*0x165de*/
  v5 = StrLenA(v8); /*0x165ed*/
  for ( i = 0; i < 16; ++i ) /*0x165f6*/
  {
    if ( !*((_BYTE *)Destination + i) ) /*0x165fd*/
      break; /*0x16600*/
  }
  if ( i + v5 >= 16 ) /*0x16615*/
  {
    RstStringCopyN(Source, (char *)Destination + i - (__int16)(16 - v5), (unsigned __int16)(16 - v5)); /*0x1664b*/
    return RstStringCopyN(Source + (__int16)(16 - v5), v8, (unsigned __int16)v5); /*0x16660*/
  }
  else
  {
    RstStrCopy(Source, Destination); /*0x1661d*/
    return RstStrCopy(Source + i, v8); /*0x1662e*/
  }
}

// Function: RstDeviceFindByConfig @ 0x16680 (0xcc bytes)
// Index: 624/906

__int64 __fastcall RstDeviceFindByConfig(__int64 a1, CHAR16 *Destination, int a3)
{
  __int64 v4; // rsi
  __int16 v7; // di
  __int64 v8; // rbx
  __int64 v9; // rax
  __int64 v11; // rax

  v4 = Source_16 + 2984; /*0x166aa*/
  v7 = 0; /*0x166be*/
  if ( *(__int16 *)(Source_16 + 32936) <= 0 ) /*0x166c6*/
    return 0; /*0x166c6*/
  while ( 1 ) /*0x166d9*/
  {
    v8 = v4 + 208LL * v7; /*0x166d9*/
    v9 = RstDeviceArrayFindByName(v4, Destination); /*0x166e7*/
    if ( RstDeviceCompareEntries(v9, v8, 1) ) /*0x166f5*/
      break; /*0x166f5*/
    if ( ++v7 >= *(__int16 *)(v4 + 29952) ) /*0x1670c*/
      return 0; /*0x1670c*/
  }
  v11 = RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), (_BYTE *)(v8 + 28)); /*0x16738*/
  if ( v11 && *(_DWORD *)(v11 + 28) == a3 ) /*0x16745*/
    return v4 + 208LL * v7; /*0x16747*/
  else
    return 0; /*0x1670e*/
}

// Function: RstPplRecoveryLogInit @ 0x1674c (0x4b bytes)
// Index: 625/906

_QWORD *__fastcall RstPplRecoveryLogInit(_QWORD *a1)
{
  __int64 v2; // rcx
  __int64 v3; // rax

  RstBufferInit(a1, 0x2000); /*0x1675a*/
  *a1 = off_23F20; /*0x1676b*/
  v2 = RstMemPoolAlloc(1384); /*0x16773*/
  v3 = 0; /*0x16776*/
  if ( v2 ) /*0x1677b*/
    v3 = RstConfigArrayAllocPool(); /*0x1677d*/
  a1[9] = v3; /*0x16785*/
  RstBufferZeroExt(v3); /*0x16789*/
  return a1; /*0x16791*/
}

// Function: Assert_42 @ 0x16798 (0xe6 bytes)
// Index: 626/906

__int64 __fastcall Assert_42(__int64 *a1, __int64 a2)
{
  __int64 v3; // rcx
  __int64 v4; // rax
  int v5; // edi
  __int64 result; // rax

  v3 = *(unsigned int *)(a1[8] + 136); /*0x167a9*/
  if ( (v3 & 0x100) != 0 ) /*0x167b6*/
  {
    v3 = WORD1(v3); /*0x167b8*/
    if ( (v3 & 1) == 0 ) /*0x167be*/
    {
      v4 = a1[1]; /*0x167c0*/
      if ( !_bittest((const signed __int32 *)(v4 + 52), 0x1Fu) /*0x167d8*/
        || (v5 = *(_DWORD *)(v4 + 32), v5 == (unsigned int)RstBufferChecksum(a1[1])) )
      {
        RstDeviceUpdateConfig(a1[9], a1[8], a1[1]); /*0x167f6*/
      }
      else
      {
        RstDeviceClearFlags(a1[8], 524544); /*0x167e3*/
      }
    }
  }
  result = a1[8]; /*0x167fb*/
  if ( (*(_DWORD *)(result + 136) & 0x1000100) == 0 ) /*0x16809*/
  {
    if ( (unsigned __int8)RstDebugEnabled(v3, a2) ) /*0x1680b*/
    {
      if ( !*(_DWORD *)(a1[8] + 104) ) /*0x16818*/
        DebugAssert("ReadCfgMgr.cpp", 0x10Du, "currDisk->logBlockSize > ( 0 )"); /*0x16831*/
    }
    *(_DWORD *)(a1[8] + 24) = *(_DWORD *)(a1[8] + 96); /*0x1683d*/
    RstEntryBufferAllocSorted(*(_QWORD *)(Source_16 + 216), a1[8]); /*0x16852*/
    RstDeviceSetFlags(a1[8], 64); /*0x16860*/
    return RstDeviceClearFlags(a1[8], 524323); /*0x1686e*/
  }
  return result; /*0x16878*/
}

// Function: Assert @ 0x16880 (0x399 bytes)
// Index: 627/906

__int64 __fastcall Assert(__int64 a1, int a2)
{
  __int64 v2; // r9
  __int64 v4; // rsi
  __int64 Source_1; // rax
  unsigned int Source_4; // ecx
  char v8; // r12
  char v9; // r13
  __int64 Source; // rbp
  __int16 Source_3; // r14
  __int64 v12; // rdx
  CHAR16 *Destination; // rdi
  __int64 v14; // rax
  bool v15; // zf
  __int64 v16; // rax
  __int64 v17; // rdi
  __int64 v18; // rax
  _QWORD *v19; // rax
  _BYTE *v20; // rsi
  __int64 v21; // rdx
  __int16 Source_2; // si
  CHAR16 *Destination_2; // rdi
  __int64 v24; // rax
  __int64 v25; // rcx
  __int64 *v26; // rax
  __int64 v27; // rcx
  unsigned __int16 v28; // di
  __int16 v29; // si
  __int64 v30; // rax
  CHAR16 Destination_1[8]; // [rsp+20h] [rbp-58h] BYREF
  char v32; // [rsp+30h] [rbp-48h]
  __int64 v33; // [rsp+80h] [rbp+8h]

  v2 = *(_QWORD *)(a1 + 8); /*0x16894*/
  v4 = *(_QWORD *)(Source_16 + 216); /*0x168a2*/
  Source_1 = *(unsigned __int8 *)(v2 + 56); /*0x168a9*/
  Source_4 = 0; /*0x168ae*/
  v8 = 0; /*0x168b7*/
  v33 = v4; /*0x168bd*/
  v9 = 0; /*0x168c5*/
  Source = v2 + 48 * Source_1 + 216; /*0x168c8*/
  Source_3 = 0; /*0x168d0*/
  v12 = v2; /*0x168d4*/
  if ( *(_BYTE *)(v2 + 56) ) /*0x168df*/
  {
    while ( 1 ) /*0x168f4*/
    {
      Destination = (CHAR16 *)(v12 + 48LL * Source_4 + 216); /*0x168f4*/
      if ( !RstStringLastColonIndex(Destination) ) /*0x168ff*/
        break; /*0x168ff*/
      v14 = RstDeviceFindByConfig(a1, (__int64)Destination, a2); /*0x16912*/
      if ( v14 ) /*0x1691a*/
      {
        v15 = (*(_BYTE *)(v14 + 100) & 8) == 0; /*0x16920*/
        goto LABEL_17; /*0x16924*/
      }
LABEL_20:
      v12 = *(_QWORD *)(a1 + 8); /*0x16a0c*/
      ++Source_3; /*0x16a10*/
      Source_1 = *(unsigned __int8 *)(v12 + 56); /*0x16a14*/
      Source_4 = Source_3; /*0x16a18*/
      if ( Source_3 >= (int)Source_1 ) /*0x16a1e*/
      {
        Source_4 = 0; /*0x16a2c*/
        goto LABEL_22; /*0x16a2c*/
      }
    }
    v16 = RstDeviceArrayFindByName(Source_16 + 2984, Destination); /*0x16937*/
    v17 = v16; /*0x1693c*/
    if ( !v16 ) /*0x16942*/
      goto LABEL_20; /*0x16942*/
    if ( (*(_DWORD *)(v16 + 136) & 0x10) == 0 ) /*0x16954*/
      goto LABEL_20; /*0x16954*/
    v18 = RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), (_BYTE *)(v16 + 28)); /*0x16962*/
    if ( v18 ) /*0x1696a*/
    {
      if ( *(_DWORD *)(v18 + 28) != a2 ) /*0x16970*/
        goto LABEL_20; /*0x16970*/
    }
    v19 = RstLinkedListFindData(v4, v17); /*0x1697c*/
    if ( !RstDeviceIsActive((__int64)v19) ) /*0x1698c*/
    {
LABEL_16:
      v15 = (*(_BYTE *)(v17 + 100) & 8) == 0; /*0x169f8*/
LABEL_17:
      if ( v15 ) /*0x169fc*/
        v8 = 1; /*0x16a06*/
      else
        v9 = 1; /*0x169fe*/
      goto LABEL_20; /*0x16a04*/
    }
    v20 = Assert_51((_BYTE *)(Source_16 + 224), v17, 0); /*0x169a7*/
    if ( RstDebugEnabled() ) /*0x169aa*/
    {
      if ( v20 ) /*0x169b7*/
      {
LABEL_15:
        v4 = v33; /*0x169f0*/
        goto LABEL_16; /*0x169f0*/
      }
      DebugAssert("ReadCfgMgr.cpp", 0x191u, "pJd"); /*0x169cc*/
    }
    if ( !v20 ) /*0x169d4*/
    {
      RstDeviceClearFlags(v17, 33554720); /*0x169de*/
      RstDeviceSetFlags(v17, 0x40u); /*0x169eb*/
    }
    goto LABEL_15; /*0x169eb*/
  }
LABEL_22:
  if ( ((unsigned __int8)v9 & (unsigned __int8)v8) == 0 || _bittest((const signed __int32 *)(Source + 24), 0xAu) ) /*0x16a3c*/
  {
    Source_1 = *(_QWORD *)(a1 + 8); /*0x16b15*/
    v28 = 0; /*0x16b19*/
    if ( *(_BYTE *)(Source_1 + 57) ) /*0x16b1c*/
    {
      do /*0x16bfb*/
      {
        RstStringCopyN((__int64)Destination_1, Source, 16); /*0x16b42*/
        v32 = 0; /*0x16b47*/
        v29 = 1; /*0x16b4c*/
        while ( RstLinkedListFindByKey(Source_16, (_BYTE *)Source) ) /*0x16b79*/
          RstStringFormatAppendIndex(Source, Destination_1, v29++); /*0x16b5e*/
        *(_WORD *)(*(_QWORD *)(a1 + 72) + 1376LL) = 0; /*0x16b85*/
        *(_WORD *)(*(_QWORD *)(a1 + 72) + 1378LL) = *(_WORD *)(*(_QWORD *)(a1 + 72) + 1168LL); /*0x16b98*/
        v30 = Assert_27(v33, (_BYTE *)Source, a1); /*0x16ba2*/
        if ( v30 ) /*0x16baa*/
        {
          RstArrayStateCopy( /*0x16bd0*/
            *(_QWORD *)(*(_QWORD *)(v30 + 8) + 248LL),
            *(_QWORD *)(a1 + 8),
            *(_QWORD *)(*(_QWORD *)(a1 + 72) + 24LL * *(__int16 *)(*(_QWORD *)(a1 + 72) + 1170LL) - 24));
          RstConfigArrayUpdateSequenceCounters(*(_QWORD *)(a1 + 72)); /*0x16bd9*/
        }
        Source_1 = RstConfigBlockGetDataOffset(Source + 80, 0); /*0x16be4*/
        ++v28; /*0x16bed*/
        Source = Source_1; /*0x16bf5*/
      }
      while ( v28 < *(unsigned __int8 *)(*(_QWORD *)(a1 + 8) + 57LL) ); /*0x16bfb*/
    }
  }
  else
  {
    v21 = *(_QWORD *)(a1 + 8); /*0x16a42*/
    Source_2 = 0; /*0x16a46*/
    if ( *(_BYTE *)(v21 + 56) ) /*0x16a49*/
    {
      do /*0x16b0a*/
      {
        Destination_2 = (CHAR16 *)(v21 + 48LL * Source_4 + 216); /*0x16a70*/
        if ( RstStringLastColonIndex(Destination_2) ) /*0x16a7b*/
        {
          v24 = RstDeviceFindByConfig(a1, (__int64)Destination_2, a2); /*0x16a8e*/
          if ( v24 ) /*0x16a96*/
          {
            v25 = RstLinkedListFindByName(v33, (_BYTE *)(v24 + 28))[6]; /*0x16aa4*/
            if ( (*(_DWORD *)(v25 + 136) & 0x100) != 0 ) /*0x16ab4*/
              RstDeviceSetFlags(v25, 0x10000u); /*0x16ab9*/
          }
        }
        if ( a2 == *(_DWORD *)(RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), Destination_2) + 28) ) /*0x16ace*/
        {
          v26 = RstLinkedListFindByName(v33, Destination_2); /*0x16ad6*/
          if ( v26 ) /*0x16ade*/
          {
            v27 = v26[6]; /*0x16ae0*/
            if ( (*(_DWORD *)(v27 + 136) & 0x100) != 0 ) /*0x16af0*/
              RstDeviceSetFlags(v27, 0x10000u); /*0x16af5*/
          }
        }
        v21 = *(_QWORD *)(a1 + 8); /*0x16afa*/
        ++Source_2; /*0x16afe*/
        Source_1 = *(unsigned __int8 *)(v21 + 56); /*0x16b01*/
        Source_4 = Source_2; /*0x16b05*/
      }
      while ( Source_2 < (int)Source_1 ); /*0x16b0a*/
    }
  }
  return Source_1; /*0x16c09*/
}

// Function: RstDeviceClearInitFlags @ 0x16c1c (0x25b bytes)
// Index: 628/906

void __fastcall RstDeviceClearInitFlags(__int64 a1)
{
  __int64 *v2; // rbx
  __int64 v3; // rdx
  __int64 n24_1; // r8
  char v5; // r12
  unsigned __int8 v6; // r10
  int n24; // eax
  unsigned __int8 j; // r9
  unsigned __int8 n2; // cl
  int j_1; // ecx
  __int64 v11; // rcx
  __int64 v12; // rax
  unsigned __int8 i; // di
  int n24_2; // ecx
  __int64 v15; // rsi
  __int64 v16; // rcx
  __int64 v17; // rcx
  unsigned __int8 k; // di
  __int64 v19; // rbx
  __int64 v20; // rax
  int v21; // edx

  if ( !*(_BYTE *)(a1 + 56) ) /*0x16c45*/
  {
    v2 = *(__int64 **)(*(_QWORD *)(Source_16 + 216) + 264LL); /*0x16c64*/
    RstConfigArrayMergeDuplicates(Source_16 + 2984); /*0x16c6b*/
    while ( 1 ) /*0x16da0*/
    {
      if ( !v2 ) /*0x16da3*/
      {
        RstDeviceListUpdateStatus(*(_QWORD *)(Source_16 + 216)); /*0x16db7*/
        goto LABEL_33; /*0x16db7*/
      }
      v5 = 0; /*0x16c75*/
      v6 = 0; /*0x16c78*/
      LOBYTE(n24_1) = 0; /*0x16c7b*/
      if ( *((_BYTE *)v2 + 20) ) /*0x16c7e*/
      {
        do /*0x16cbb*/
        {
          n24 = 24; /*0x16c88*/
          if ( (unsigned __int8)n24_1 < 0x19u ) /*0x16c95*/
            n24 = (unsigned __int8)n24_1; /*0x16c95*/
          v3 = v2[n24 + 3]; /*0x16c9a*/
          if ( (*(_BYTE *)(*(_QWORD *)(v3 + 48) + 139LL) & 1) != 0 ) /*0x16caa*/
            v6 |= 1 << n24_1; /*0x16cb1*/
          LOBYTE(n24_1) = n24_1 + 1; /*0x16cb4*/
        }
        while ( (unsigned __int8)n24_1 < *((_BYTE *)v2 + 20) ); /*0x16cbb*/
        if ( v6 ) /*0x16cc0*/
          break; /*0x16cc0*/
      }
LABEL_23:
      for ( i = 0; i < *((_BYTE *)v2 + 20); ++i ) /*0x16d3d*/
      {
        n24_2 = 24; /*0x16d47*/
        if ( i < 0x19u ) /*0x16d50*/
          n24_2 = i; /*0x16d50*/
        v15 = v2[n24_2 + 3]; /*0x16d56*/
        v16 = *(_QWORD *)(v15 + 48); /*0x16d5b*/
        if ( (*(_BYTE *)(v16 + 139) & 1) == 0 ) /*0x16d66*/
        {
          RstDeviceClearFlags(v16, 0x8000); /*0x16d6d*/
          if ( v5 ) /*0x16d75*/
            RstDeviceSetFlags(*(_QWORD *)(v15 + 48), 0x80u); /*0x16d80*/
        }
      }
      LOBYTE(v3) = 1; /*0x16d95*/
      (**(void (__fastcall ***)(__int64, __int64, __int64))v2[31])(v2[31], v3, n24_1); /*0x16d9b*/
      v2 = (__int64 *)*v2; /*0x16d9d*/
    }
    for ( j = 0; ; ++j ) /*0x16cc2*/
    {
      n2 = *((_BYTE *)v2 + 224); /*0x16ccb*/
      if ( n2 >= 2u ) /*0x16cd0*/
        n2 = 2; /*0x16cd2*/
      if ( j >= n2 ) /*0x16cda*/
        goto LABEL_23; /*0x16cda*/
      j_1 = 1; /*0x16ce0*/
      if ( j < 2u ) /*0x16ce7*/
        j_1 = j; /*0x16ce7*/
      n24_1 = v2[j_1 + 29]; /*0x16ced*/
      v11 = *(_QWORD *)(*(_QWORD *)(n24_1 + 56) + 40LL); /*0x16cf9*/
      if ( *(_DWORD *)v11 == 2 || *(_DWORD *)v11 == 3 ) /*0x16d05*/
      {
        v3 = ~(unsigned __int8)(1 << *(_BYTE *)(v11 + 41)); /*0x16d1e*/
        if ( ((unsigned __int8)~(1 << *(_BYTE *)(v11 + 41)) & v6) == 0 ) /*0x16d23*/
          continue; /*0x16d23*/
      }
      else if ( *(_DWORD *)v11 > 1u ) /*0x16d0a*/
      {
        continue; /*0x16d0a*/
      }
      v12 = *(_QWORD *)n24_1; /*0x16d25*/
      *(_DWORD *)(n24_1 + 48) |= 0x2000u; /*0x16d28*/
      v5 = 1; /*0x16d2e*/
      *(_DWORD *)(v12 + 100) |= 4u; /*0x16d31*/
    }
  }
LABEL_33:
  v17 = *(_QWORD *)(a1 + 72); /*0x16dbc*/
  for ( k = 0; k < *(__int16 *)(v17 + 1168); ++k ) /*0x16dcb*/
  {
    v19 = *(_QWORD *)(v17 + 1160) + 48LL * k; /*0x16ddd*/
    v20 = RstDeviceArrayFindByName(Source_16 + 2984, (_BYTE *)v19); /*0x16df5*/
    if ( (*(_DWORD *)(v19 + 24) & 2) != 0 ) /*0x16e05*/
    {
      if ( v20 ) /*0x16e0a*/
      {
        v21 = *(_DWORD *)(v20 + 136); /*0x16e0c*/
        if ( (v21 & 0x10) != 0 && (v21 & 0x10000) == 0 && (v21 & 1) == 0 && (v21 & 0x40) == 0 ) /*0x16e31*/
          RstDeviceSetFlags(v20, 2u); /*0x16e3b*/
      }
    }
    v17 = *(_QWORD *)(a1 + 72); /*0x16e40*/
  }
}

// Function: RstConfigDeviceListAddIfNew @ 0x16e78 (0x52 bytes)
// Index: 629/906

__int64 __fastcall RstConfigDeviceListAddIfNew(__int64 a1, __int64 a2)
{
  __int64 result; // rax
  __int64 v5; // rcx
  CHAR16 i[12]; // [rsp+20h] [rbp-38h] BYREF
  int v7; // [rsp+38h] [rbp-20h]

  result = RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), (_BYTE *)(a2 + 28)); /*0x16e90*/
  if ( !result ) /*0x16e98*/
  {
    RstDeviceInfoToBuffer((__int64)i, (_DWORD *)a2); /*0x16ea2*/
    v5 = *(_QWORD *)(a1 + 72); /*0x16ea7*/
    v7 |= 0x80000u; /*0x16eab*/
    return RstConfigDeviceListAdd(v5, i, -1); /*0x16eba*/
  }
  return result; /*0x16ec4*/
}

// Function: RstDeviceFindByScsiId @ 0x16ecc (0x1a8 bytes)
// Index: 630/906

__int64 *__fastcall RstDeviceFindByScsiId(__int64 a1, unsigned int a2)
{
  __int64 v3; // rcx
  __int64 i; // rbp
  __int64 *v5; // rdi
  unsigned __int16 v6; // bx
  __int64 Source; // rsi
  _BYTE *v8; // rax
  __int64 v9; // r13
  __int64 *v10; // rax
  __int16 v11; // r14
  bool v12; // r12
  int v13; // ecx
  int v14; // ebx
  unsigned __int8 v15; // al
  CHAR16 Destination[8]; // [rsp+20h] [rbp-48h] BYREF
  char v18; // [rsp+30h] [rbp-38h]

  v3 = *(_QWORD *)(a1 + 72); /*0x16ef2*/
  i = *(_QWORD *)(Source_16 + 216); /*0x16ef6*/
  v5 = 0; /*0x16f0e*/
  v6 = *(_WORD *)(v3 + 1170) - 1; /*0x16f13*/
  Source = *(_QWORD *)(a1 + 8) + 48LL * a2 + 216; /*0x16f16*/
  v8 = (_BYTE *)RstConfigDeviceListFind(v3, (_BYTE *)Source); /*0x16f21*/
  v9 = (__int64)v8; /*0x16f26*/
  if ( !v8 ) /*0x16f2c*/
    goto LABEL_19; /*0x16f2c*/
  v10 = RstLinkedListFindByName(i, v8); /*0x16f38*/
  v11 = v6; /*0x16f3d*/
  v5 = v10; /*0x16f41*/
  v12 = *(_DWORD *)(v9 + 28) == v6 || *(_DWORD *)(v9 + 28) == -1; /*0x16f56*/
  if ( !v10 || (v13 = *(_DWORD *)(v10[6] + 136), (v13 & 0x10) == 0) || (v13 & 0x10040) != 0 ) /*0x16f77*/
  {
    StrnCpy(Destination, (const CHAR16 *)Source, 0x10u); /*0x16fc1*/
    v18 = 0; /*0x16fcb*/
    if ( RstStringLastColonIndex(Destination) ) /*0x16fd0*/
    {
      if ( v5 ) /*0x17015*/
        goto LABEL_16; /*0x17015*/
    }
    else
    {
      do /*0x16ff4*/
        RstStringFormatAppendIndex(Source, Destination, v6++); /*0x16fe5*/
      while ( RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), (_BYTE *)Source) ); /*0x16ff4*/
      v9 = RstConfigDeviceListAdd(*(_QWORD *)(a1 + 72), (const CHAR16 *)Source, v11); /*0x1700d*/
    }
    v5 = RstDeviceListInsertUnique(i, Source); /*0x17022*/
    if ( !v5 ) /*0x17028*/
      goto LABEL_17; /*0x17028*/
LABEL_16:
    *(_DWORD *)(v5[6] + 96) = -1; /*0x1702a*/
    goto LABEL_17; /*0x1702e*/
  }
  v14 = *(_DWORD *)(Source + 24); /*0x16f79*/
  v15 = (unsigned __int8)RstDeviceFindAndRemove((_BYTE *)Source); /*0x16f7f*/
  RstDeviceSetFlagsFiltered((__int64)v5, v14, v15 != 0 ? 46269063 : 12714631);
  if ( !v12 ) /*0x16fa4*/
    *(_BYTE *)(i + 362) = 0; /*0x16faa*/
LABEL_17:
  RstConfigArrayFindOrInsertEntry(*(_QWORD *)(a1 + 72), v9); /*0x17032*/
  if ( !v5 || (*(_DWORD *)(Source + 24) & 2) == 0 ) /*0x1704a*/
LABEL_19:
    *(_BYTE *)(i + 362) = 0; /*0x1704c*/
  return v5; /*0x17067*/
}

// Function: RstNotifySpareRebuild @ 0x17074 (0x4d bytes)
// Index: 631/906

__int64 __fastcall RstNotifySpareRebuild(__int64 a1)
{
  __int64 result; // rax
  _QWORD *i; // rbx
  __int64 v4; // rdx

  result = Source_16; /*0x1707e*/
  for ( i = *(_QWORD **)(*(_QWORD *)(Source_16 + 216) + 16LL); i; i = (_QWORD *)*i ) /*0x1708f*/
  {
    v4 = i[6]; /*0x17095*/
    result = *(_DWORD *)(v4 + 136) >> 15; /*0x1709f*/
    if ( (*(_DWORD *)(v4 + 136) & 0x8000) != 0 ) /*0x170a4*/
      result = RstConfigDeviceListAddIfNew(a1, v4); /*0x170a9*/
  }
  return result; /*0x170bb*/
}

// Function: Assert_74 @ 0x170c4 (0x1ca bytes)
// Index: 632/906

__int64 Assert_74__int64 a1)
{
  __int64 v2; // rax
  __int64 v3; // rdx
  __int64 v4; // rax
  __int64 v5; // rcx
  __int16 v6; // di
  __int64 i; // rsi
  __int64 v8; // rdi
  __int64 v9; // rax

  *(_BYTE *)(a1 + 56) = 1; /*0x170db*/
  RstNotifySpareRebuild(); /*0x170df*/
  v2 = *(_QWORD *)(a1 + 72); /*0x170e4*/
  *(_WORD *)(a1 + 58) = 0; /*0x170ea*/
  if ( *(__int16 *)(v2 + 1168) > 0 ) /*0x170f5*/
  {
    do /*0x1719d*/
    {
      v3 = *(_QWORD *)(*(_QWORD *)(a1 + 72) + 1160LL) + 48LL * *(__int16 *)(a1 + 58); /*0x1710c*/
      if ( (*(_DWORD *)(v3 + 24) & 0x80000) != 0 ) /*0x1711b*/
      {
        v4 = RstDeviceArrayFindByName(Source_16 + 2984, v3); /*0x1712b*/
        *(_QWORD *)(a1 + 64) = v4; /*0x17136*/
        RstHelper_89a4(a1, v4); /*0x1713a*/
        Assert_42(a1); /*0x17142*/
        if ( !(unsigned __int8)RstDeviceGetFeatureFlagBit(13) ) /*0x1714c*/
        {
          v5 = *(_QWORD *)(a1 + 64); /*0x17156*/
          if ( *(_WORD *)(v5 + 172) != 0x8086 && (*(_DWORD *)(v5 + 136) & 0x100) != 0 ) /*0x17175*/
          {
            RstDeviceClearFlags(v5, *(unsigned int *)(v5 + 136)); /*0x17177*/
            RstDeviceSetFlags(*(_QWORD *)(a1 + 64), (char *)&loc_1000F + 1); /*0x17185*/
          }
        }
      }
      ++*(_WORD *)(a1 + 58); /*0x1718a*/
    }
    while ( *(_WORD *)(a1 + 58) < *(_WORD *)(*(_QWORD *)(a1 + 72) + 1168LL) ); /*0x1719d*/
  }
  v6 = 0; /*0x171aa*/
  for ( i = *(_QWORD *)(Source_16 + 216); v6 < *(__int16 *)(*(_QWORD *)(a1 + 72) + 1168LL); ++v6 ) /*0x171bf*/
    RstDeviceListInsertUnique(i, *(_QWORD *)(*(_QWORD *)(a1 + 72) + 1160LL) + 48LL * v6); /*0x171db*/
  v8 = RstCfgListFindNextOnlineEntry(*(_QWORD *)(a1 + 72)); /*0x171f9*/
  if ( v8 ) /*0x171ff*/
  {
    do /*0x1726c*/
    {
      RstHelper_89a4(a1, v8); /*0x17212*/
      if ( (*(_DWORD *)(v8 + 136) & 0x100) != 0 /*0x17243*/
        && *(__int16 *)(Source_16 + 192) + *(unsigned __int8 *)(*(_QWORD *)(a1 + 8) + 57LL) <= 24 )
      {
        v9 = RstConfigDeviceListFind(*(_QWORD *)(a1 + 72), v8 + 28); /*0x1724d*/
        Assert(a1, *(_DWORD *)(v9 + 28)); /*0x17258*/
      }
      v8 = RstCfgListFindNextOnlineEntry(*(_QWORD *)(a1 + 72)); /*0x17266*/
    }
    while ( v8 ); /*0x1726c*/
  }
  else
  {
    RstBufferMetaZero(*(_QWORD *)(a1 + 8)); /*0x17205*/
  }
  *(_BYTE *)(a1 + 56) = 0; /*0x17271*/
  return RstDeviceClearInitFlags(a1); /*0x17284*/
}

// Function: RstAllocTableAlloc @ 0x17290 (0x62 bytes)
// Index: 633/906

__int64 __fastcall RstAllocTableAlloc(_BYTE *i, unsigned __int16 n2, int a3)
{
  unsigned __int16 v3; // r9
  int v4; // r8d
  int v6; // eax

  v3 = 0; /*0x17290*/
  if ( !a3 ) /*0x17299*/
    return 0; /*0x17299*/
  v4 = a3 & 0x7FFFFFFF; /*0x1729b*/
  if ( !n2 ) /*0x172a4*/
    return 0; /*0x172c8*/
  while ( (*(_DWORD *)&i[16 * v3] & 0x7FFFFFFF) != v4 ) /*0x172bc*/
  {
    if ( ++v3 >= n2 ) /*0x172c6*/
      return 0; /*0x172c6*/
  }
  v6 = dword_574D0 + 1; /*0x172d8*/
  *(_DWORD *)&i[16 * v3] |= 0x80000000; /*0x172db*/
  dword_574D0 = v6; /*0x172e1*/
  *(_DWORD *)&i[16 * v3 + 4] = v6; /*0x172e7*/
  return *(_QWORD *)&i[16 * v3 + 8]; /*0x172ca*/
}

// Function: RstAllocTableFindMinSeq @ 0x172f4 (0x9b bytes)
// Index: 634/906

__int64 __fastcall RstAllocTableFindMinSeq(_BYTE *i, unsigned __int16 n2, int a3)
{
  __int64 result; // rax
  unsigned __int16 n2_2; // r8
  unsigned __int16 n2_1; // cx
  unsigned int v9; // edx
  unsigned int *v10; // rax
  __int64 v11; // rcx

  result = RstAllocTableAlloc(i, n2, a3); /*0x1730c*/
  n2_2 = 0; /*0x17311*/
  if ( !result ) /*0x17317*/
  {
    n2_1 = 0; /*0x1731d*/
    v9 = -1; /*0x17321*/
    if ( !n2 ) /*0x17328*/
      return 0; /*0x17328*/
    v10 = (unsigned int *)(i + 4); /*0x1732a*/
    do /*0x1734e*/
    {
      if ( !_bittest((const signed __int32 *)v10 - 1, 0x1Fu) && *v10 < v9 ) /*0x1733b*/
      {
        v9 = *v10; /*0x1733d*/
        n2_2 = n2_1; /*0x1733f*/
      }
      ++n2_1; /*0x17343*/
      v10 += 4; /*0x17347*/
    }
    while ( n2_1 < n2 ); /*0x1734e*/
    if ( v9 == -1 ) /*0x17353*/
    {
      return 0; /*0x1737d*/
    }
    else
    {
      v11 = 2LL * n2_2; /*0x17363*/
      *(_DWORD *)&i[8 * v11 + 4] = ++dword_574D0; /*0x1736f*/
      result = *(_QWORD *)&i[16 * n2_2 + 8]; /*0x17373*/
      *(_DWORD *)&i[8 * v11] = a3 | 0x80000000; /*0x17378*/
    }
  }
  return result; /*0x17389*/
}

// Function: RstAllocTableAllocBySize @ 0x17390 (0x36 bytes)
// Index: 635/906

__int64 __fastcall RstAllocTableAllocBySize(__int16 n16, int a2)
{
  _BYTE *i; // rcx

  if ( n16 == 16 ) /*0x1739b*/
  {
    i = &i__3; /*0x1739d*/
    return RstAllocTableAlloc(i, 2u, a2); /*0x173ae*/
  }
  if ( n16 == 1 ) /*0x173b4*/
  {
    i = &i__4; /*0x173b6*/
    return RstAllocTableAlloc(i, 2u, a2); /*0x173bd*/
  }
  return 0; /*0x173c1*/
}

// Function: RstAllocTableFindBySize @ 0x173c8 (0x36 bytes)
// Index: 636/906

__int64 __fastcall RstAllocTableFindBySize(__int16 n16, int a2)
{
  _BYTE *i; // rcx

  if ( n16 == 16 ) /*0x173d3*/
  {
    i = &i__3; /*0x173d5*/
    return RstAllocTableFindMinSeq(i, 2u, a2); /*0x173e6*/
  }
  if ( n16 == 1 ) /*0x173ec*/
  {
    i = &i__4; /*0x173ee*/
    return RstAllocTableFindMinSeq(i, 2u, a2); /*0x173f5*/
  }
  return 0; /*0x173f9*/
}

// Function: RstBufferPoolLock @ 0x17400 (0x67 bytes)
// Index: 637/906

__int64 __fastcall RstBufferPoolLock(__int64 a1)
{
  unsigned __int16 v1; // dx
  unsigned __int16 i; // r8
  __int64 result; // rax

  v1 = 0; /*0x17400*/
  for ( i = 0; i < 2u; ++i ) /*0x17409*/
  {
    if ( qword_574B8[2 * i] == a1 ) /*0x1741c*/
    {
      *(_DWORD *)(&i__3 + (_QWORD)&_ImageBase[8 * i]) &= ~0x80000000; /*0x1745c*/
      return 2LL * i; /*0x17459*/
    }
  }
  while ( 1 ) /*0x1742c*/
  {
    result = 2LL * v1; /*0x1742c*/
    if ( qword_57498[2 * v1] == a1 ) /*0x17437*/
      break; /*0x17437*/
    if ( ++v1 >= 2u ) /*0x17440*/
      return result; /*0x17440*/
  }
  *(_DWORD *)(&i__4 + (_QWORD)&_ImageBase[8 * v1]) &= ~0x80000000; /*0x1744a*/
  return 2LL * v1; /*0x17442*/
}

// Function: RstBufferPoolInit @ 0x17468 (0x8f bytes)
// Index: 638/906

unsigned __int64 RstBufferPoolInit()
{
  __int64 n2; // rdx
  unsigned __int64 result; // rax
  __int64 *v2; // rcx
  __int64 n2_1; // r8
  __int64 *v4; // rcx

  MemZero(&i__2, 0, (__int64)&loc_2200F + 1); /*0x1747b*/
  MemZero(&i__3, 0, 32); /*0x1748d*/
  MemZero(&i__4, 0, 32); /*0x1749f*/
  dword_574D0 = 0; /*0x174a4*/
  n2 = 2; /*0x174b2*/
  result = (unsigned __int64)&unk_35490 & 0xFFFFFFFFFFFFFFF0uLL; /*0x174b7*/
  v2 = qword_574B8; /*0x174bb*/
  n2_1 = 2; /*0x174c2*/
  do /*0x174d6*/
  {
    *v2 = result; /*0x174c5*/
    result += 0x10000LL; /*0x174c8*/
    v2 += 2; /*0x174ce*/
    --n2_1; /*0x174d2*/
  }
  while ( n2_1 ); /*0x174d6*/
  v4 = qword_57498; /*0x174d8*/
  do /*0x174f0*/
  {
    *v4 = result; /*0x174df*/
    result += 4096LL; /*0x174e2*/
    v4 += 2; /*0x174e8*/
    --n2; /*0x174ec*/
  }
  while ( n2 ); /*0x174f0*/
  return result; /*0x174f2*/
}

// Function: RstBufferGetAvailable @ 0x174f8 (0x27 bytes)
// Index: 639/906

__int64 __fastcall RstBufferGetAvailable(__int64 a1)
{
  unsigned int v1; // r8d

  v1 = (((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(a1 + 16) - 1) /*0x1750d*/
     & (((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(a1 + 16) - *(_DWORD *)a1);
  if ( (unsigned __int64)v1 > *(_QWORD *)(a1 + 8) ) /*0x17517*/
    return 0; /*0x17517*/
  return v1; /*0x1751e*/
}

// Function: RstBufferSetRange @ 0x17520 (0xc bytes)
// Index: 640/906

void __fastcall RstBufferSetRange(__int64 a1, unsigned __int64 n3, __int64 a3, int a4)
{
  *(_QWORD *)a1 = n3; /*0x17520*/
  *(_QWORD *)(a1 + 8) = a3; /*0x17523*/
  *(_DWORD *)(a1 + 16) = a4; /*0x17527*/
}

// Function: RstBufferEntryZero @ 0x1752c (0x3e bytes)
// Index: 641/906

__int64 __fastcall RstBufferEntryZero(__int64 a1)
{
  _BYTE *v1; // rax
  _QWORD *v2; // rdx
  __int64 n24; // r8

  v1 = (_BYTE *)(a1 + 240); /*0x1752f*/
  v2 = (_QWORD *)(a1 + 48); /*0x17536*/
  n24 = 24; /*0x1753a*/
  *(_WORD *)(a1 + 4) = 0; /*0x1753e*/
  *(_DWORD *)a1 = 0; /*0x17543*/
  *(_WORD *)(a1 + 16) = 0; /*0x17546*/
  *(_QWORD *)(a1 + 24) = 0; /*0x1754b*/
  *(_BYTE *)(a1 + 6) = 0; /*0x1754f*/
  do /*0x17564*/
  {
    *v2 = 0; /*0x17553*/
    *v1++ = 0; /*0x17556*/
    ++v2; /*0x1755c*/
    --n24; /*0x17560*/
  }
  while ( n24 ); /*0x17564*/
  return a1; /*0x17569*/
}

// Function: RstBufferSetSize @ 0x1756c (0x5 bytes)
// Index: 642/906

void __fastcall RstBufferSetSize(__int64 a1, __int64 a2)
{
  *(_QWORD *)(a1 + 8) = a2; /*0x1756c*/
}

// Function: RstRaidConfigFromDiskInfoPopulate @ 0x17574 (0x10b bytes)
// Index: 643/906

char __fastcall RstRaidConfigFromDiskInfoPopulate(__int64 a1, __int64 a2, __int64 a3)
{
  __int64 v5; // r12
  bool v7; // cc
  __int64 v8; // rax
  __int16 v9; // di
  __int64 v10; // rsi
  __int64 v11; // rax

  v5 = *(_QWORD *)(Source_16 + 216); /*0x1759e*/
  *(_DWORD *)a1 = *(unsigned __int8 *)(a2 + 14); /*0x175ac*/
  *(_WORD *)(a1 + 4) = *(unsigned __int8 *)(a2 + 15); /*0x175b2*/
  *(_WORD *)(a1 + 16) = *(_WORD *)(a2 + 12); /*0x175ba*/
  *(_QWORD *)(a1 + 24) = RstBufferGetBlockOffset(a2); /*0x175c9*/
  *(_BYTE *)(a1 + 6) = *(_BYTE *)(a2 + 16); /*0x175d0*/
  *(_QWORD *)(a1 + 32) = RstBufferGetBlockCount(a2); /*0x175db*/
  *(_BYTE *)(a1 + 40) = *(_BYTE *)(a2 + 17); /*0x175e2*/
  v8 = RstBufferGetBlockIndex(a2); /*0x175e5*/
  v7 = *(_BYTE *)(a1 + 6) <= 0x18u; /*0x175ea*/
  *(_QWORD *)(a1 + 8) = v8; /*0x175ee*/
  LOBYTE(v8) = *(_BYTE *)(a2 + 18); /*0x175f2*/
  *(_BYTE *)(a1 + 41) = v8; /*0x175f5*/
  if ( !v7 ) /*0x175f8*/
    *(_BYTE *)(a1 + 6) = 24; /*0x175fa*/
  v9 = 0; /*0x17601*/
  if ( *(_BYTE *)(a1 + 6) ) /*0x17605*/
  {
    do /*0x1765e*/
    {
      v10 = v9; /*0x1760b*/
      v11 = RstDeviceFindByScsiId(a3, *(_DWORD *)(a2 + 4LL * v9 + 48) & 0xFFF); /*0x1761c*/
      if ( v11 && (*(_DWORD *)(*(_QWORD *)(v11 + 48) + 136LL) & 0x10) != 0 ) /*0x17636*/
        ++*(_WORD *)(v5 + 360); /*0x17638*/
      *(_QWORD *)(a1 + 8LL * v9 + 48) = v11; /*0x17641*/
      v8 = (unsigned __int16)v9++; /*0x17646*/
      *(_BYTE *)(v10 + a1 + 240) = *(_BYTE *)(a2 + 4 * v8 + 51); /*0x17650*/
      LOWORD(v8) = *(unsigned __int8 *)(a1 + 6); /*0x17657*/
    }
    while ( v9 < (__int16)v8 ); /*0x1765e*/
  }
  return v8; /*0x17674*/
}

// Function: RstBufferInitEntry @ 0x17680 (0x18 bytes)
// Index: 644/906

__int64 __fastcall RstBufferInitEntry(__int64 a1, __int16 a2)
{
  *(_WORD *)(a1 + 4) = a2; /*0x17682*/
  *(_DWORD *)a1 = 1; /*0x17686*/
  *(_BYTE *)(a1 + 6) = 0; /*0x1768c*/
  *(_QWORD *)(a1 + 8) = 0; /*0x1768f*/
  *(_WORD *)(a1 + 16) = 0; /*0x17693*/
  return 0; /*0x17697*/
}

// Function: RstRaidCalcStripeLayout @ 0x17698 (0x188 bytes)
// Index: 645/906

__int64 __fastcall RstRaidCalcStripeLayout(
        __int64 a1,
        __int64 *a2,
        unsigned __int16 n3,
        __int64 a4,
        unsigned int a5,
        __int64 a6,
        __int16 a7)
{
  int n5; // edi
  unsigned int v12; // esi
  unsigned int v13; // ebx
  unsigned __int64 v14; // rcx
  int n3_1; // eax
  unsigned __int64 v16; // r8
  unsigned __int64 v17; // r8
  __int64 v18; // r8
  __int16 v19; // cx
  __int64 n3_2; // rdx
  __int64 v21; // rax

  n5 = *(unsigned __int16 *)(a1 + 4); /*0x176ac*/
  *(_QWORD *)(a1 + 24) = 0; /*0x176b6*/
  if ( !n5 ) /*0x176ca*/
    goto LABEL_11; /*0x176ca*/
  if ( n5 == 1 ) /*0x176cf*/
  {
    n3_1 = *(unsigned __int8 *)(a1 + 40); /*0x17701*/
    if ( (__int16)n3 < n3_1 ) /*0x1770c*/
      return 9; /*0x17713*/
    if ( (__int16)n3 == n3_1 ) /*0x17718*/
      *(_QWORD *)(a1 + 24) = a4; /*0x1771a*/
LABEL_11:
    v12 = a5; /*0x1771e*/
    v13 = ((unsigned int)&loc_1FFFA + 6) / a5; /*0x1772f*/
    v14 = ((unsigned int)&loc_1FFFA + 6) / a5 * (__int16)n3; /*0x17731*/
    if ( n3 == 1 ) /*0x17738*/
      *(_QWORD *)(a1 + 24) = a4; /*0x1773a*/
    goto LABEL_13; /*0x1773a*/
  }
  if ( n5 != 5 ) /*0x176d4*/
    return 17; /*0x176da*/
  if ( (__int16)n3 < 3 ) /*0x176e4*/
    return 9; /*0x176e4*/
  v12 = a5; /*0x176e6*/
  v13 = ((unsigned int)&loc_1FFFA + 6) / a5; /*0x176fa*/
  v14 = ((unsigned int)&loc_1FFFA + 6) / a5 * ((__int16)n3 - 1); /*0x176fc*/
LABEL_13:
  v16 = (a4 + (unsigned __int64)(unsigned int)(v14 - 1)) / v14; /*0x1773e*/
  if ( (_WORD)n5 == 1 ) /*0x17750*/
    v16 *= *(unsigned __int8 *)(a1 + 40); /*0x17757*/
  v17 = v13 / a7 * v16; /*0x17770*/
  *(_QWORD *)(a1 + 32) = v17; /*0x17774*/
  if ( *(_WORD *)(a1 + 4) == 1 ) /*0x1777d*/
    *(_QWORD *)(a1 + 32) = v17 / *(unsigned __int8 *)(a1 + 40); /*0x1778c*/
  if ( !*(_QWORD *)(a1 + 24) ) /*0x17790*/
    *(_QWORD *)(a1 + 24) = v17 * a7; /*0x1779e*/
  *(_QWORD *)(a1 + 24) += 0x100000 / v12; /*0x177b2*/
  v18 = *a2; /*0x177ba*/
  *(_QWORD *)(a1 + 8) = a6; /*0x177be*/
  v19 = 1; /*0x177c2*/
  *(_WORD *)(a1 + 16) = a7; /*0x177c6*/
  *(_BYTE *)(a1 + 6) = 0; /*0x177cb*/
  if ( (__int16)n3 > 0 ) /*0x177cf*/
  {
    n3_2 = n3; /*0x177d1*/
    do /*0x17807*/
    {
      if ( *(_BYTE *)(a1 + 6) < 0x18u ) /*0x177da*/
      {
        *(_BYTE *)(*(unsigned __int8 *)(a1 + 6) + a1 + 240) = 0; /*0x177e1*/
        *(_QWORD *)(a1 + 8LL * (unsigned __int8)(*(_BYTE *)(a1 + 6))++ + 48) = v18; /*0x177ee*/
      }
      v21 = v19++; /*0x177f7*/
      --n3_2; /*0x177ff*/
      v18 = a2[v21]; /*0x17802*/
    }
    while ( n3_2 ); /*0x17807*/
  }
  return 0; /*0x1781a*/
}

// Function: RstDeviceGetBuffer @ 0x17820 (0x5 bytes)
// Index: 646/906

__int64 __fastcall RstDeviceGetBuffer(__int64 a1)
{
  return *(_QWORD *)(a1 + 24); /*0x17824*/
}

// Function: RstRaidArrayCopyState @ 0x17828 (0xee bytes)
// Index: 647/906

char __fastcall RstRaidArrayCopyState(__int64 a1, __int64 a2)
{
  __int16 v3; // r8
  char v5; // al
  __int64 *v6; // rax
  unsigned __int8 n23_1; // di
  __int64 i; // r12
  int n23; // ecx
  __int64 v10; // rbp

  *(_DWORD *)a1 = *(_DWORD *)(a2 + 8); /*0x1784c*/
  v3 = *(_WORD *)(a2 + 40); /*0x1784e*/
  *(_WORD *)(a1 + 4) = v3; /*0x17856*/
  *(_BYTE *)(a1 + 6) = *(_BYTE *)(a2 + 42); /*0x1785e*/
  *(_QWORD *)(a1 + 8) = *(_QWORD *)(a2 + 32); /*0x17865*/
  *(_WORD *)(a1 + 16) = *(_WORD *)(a2 + 72); /*0x1786d*/
  *(_QWORD *)(a1 + 24) = *(_QWORD *)(a2 + 64); /*0x17875*/
  *(_QWORD *)(a1 + 32) = *(_QWORD *)(a2 + 56); /*0x1787d*/
  *(_BYTE *)(a1 + 41) = *(_BYTE *)(a2 + 92); /*0x17884*/
  if ( v3 == 1 ) /*0x1788b*/
    v5 = *(_BYTE *)(a2 + 100); /*0x1788d*/
  else
    v5 = 1; /*0x17893*/
  *(_BYTE *)(a1 + 40) = v5; /*0x17896*/
  LOBYTE(v6) = Source_16; /*0x17899*/
  n23_1 = 0; /*0x178a0*/
  for ( i = *(_QWORD *)(Source_16 + 216); n23_1 < *(_BYTE *)(a1 + 6); ++n23_1 ) /*0x178aa*/
  {
    n23 = 23; /*0x178b4*/
    if ( n23_1 < 0x18u ) /*0x178bd*/
      n23 = n23_1; /*0x178bd*/
    v10 = 2 * (n23 + 7LL); /*0x178ca*/
    v6 = RstLinkedListFindByName(i, (_BYTE *)(*(_QWORD *)(a2 + 16 * (n23 + 7LL)) + 28LL)); /*0x178d5*/
    if ( n23_1 < 0x18u ) /*0x178de*/
    {
      *(_QWORD *)(a1 + 8LL * n23_1 + 48) = v6; /*0x178e4*/
      LOBYTE(v6) = *(_BYTE *)(a2 + 8 * v10 + 8); /*0x178e9*/
      *(_BYTE *)(n23_1 + a1 + 240) = (_BYTE)v6; /*0x178ed*/
    }
  }
  return (char)v6; /*0x1790c*/
}

// Function: RstRaidMemberFirstActive @ 0x17918 (0x4c bytes)
// Index: 648/906

__int64 __fastcall RstRaidMemberFirstActive(__int64 a1)
{
  __int16 i; // dx
  unsigned __int8 i_1; // al
  int n23; // eax
  __int64 result; // rax

  for ( i = 0; ; ++i )
  {
    i_1 = *(_BYTE *)(a1 + 6) > 0x18u ? 24 : *(_BYTE *)(a1 + 6);
    if ( i >= (int)i_1 ) /*0x1793e*/
      break; /*0x1793e*/
    n23 = 23; /*0x17940*/
    if ( i < 24 ) /*0x17949*/
      n23 = i; /*0x17949*/
    result = *(_QWORD *)(*(_QWORD *)(a1 + 8LL * n23 + 48) + 40LL); /*0x17953*/
    if ( result ) /*0x1795a*/
      return result; /*0x1795a*/
  }
  return 0; /*0x17963*/
}

// Function: RstArrayGetNextEntry @ 0x17964 (0x21 bytes)
// Index: 649/906

__int64 __fastcall RstArrayGetNextEntry(__int64 a1)
{
  __int16 v1; // dx
  __int64 result; // rax

  v1 = *(_WORD *)(a1 + 44); /*0x17964*/
  if ( v1 >= *(unsigned __int8 *)(a1 + 6) ) /*0x1796f*/
    return 0; /*0x17982*/
  result = *(_QWORD *)(a1 + 8LL * v1 + 48); /*0x17978*/
  *(_WORD *)(a1 + 44) = v1 + 1; /*0x1797d*/
  return result; /*0x17981*/
}

// Function: Assert_45 @ 0x17988 (0xb7 bytes)
// Index: 650/906

char __fastcall Assert_45(__int64 a1)
{
  __int64 v1; // rax
  __int64 v2; // rbx
  __int64 v3; // rcx
  __int64 v4; // rdi

  *(_WORD *)(a1 + 44) = 0; /*0x179a1*/
  while ( 1 ) /*0x179a5*/
  {
    v1 = RstArrayGetNextEntry(); /*0x179a5*/
    v2 = v1; /*0x179aa*/
    if ( !v1 ) /*0x179b0*/
      break; /*0x179b0*/
    v3 = *(_QWORD *)(v1 + 48); /*0x179b2*/
    if ( (*(_DWORD *)(v3 + 136) & 0x10) != 0 ) /*0x179c2*/
    {
      v4 = *(_QWORD *)(v1 + 40); /*0x179c4*/
      if ( (unsigned __int8)RstDebugEnabled(v3, *(_DWORD *)(v3 + 136) >> 4) && !*(_DWORD *)(v4 + 280) ) /*0x179d2*/
        DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x179ed*/
      if ( *(_DWORD *)(v4 + 280) == 4096 && *(_DWORD *)(*(_QWORD *)(v2 + 48) + 88LL) >= 0x20000000u /*0x17a1d*/
        || (*(_QWORD *)(*(_QWORD *)(v2 + 48) + 88LL) & 0xFFFFFFFF00000000uLL) != 0 )
      {
        return 1; /*0x17a26*/
      }
    }
  }
  return 0; /*0x17a39*/
}

// Function: RstDeviceListScanForType @ 0x17a40 (0x4f bytes)
// Index: 651/906

char __fastcall RstDeviceListScanForType(__int64 a1, unsigned int a2)
{
  __int64 v3; // rbx
  __int64 v4; // rax

  v3 = a1; /*0x17a53*/
  *(_WORD *)(a1 + 44) = 0; /*0x17a56*/
  while ( 1 ) /*0x17a6f*/
  {
    v4 = RstArrayGetNextEntry(a1); /*0x17a6f*/
    if ( !v4 ) /*0x17a77*/
      return 0; /*0x17a79*/
    if ( (unsigned __int8)RstHelper_02b4(*(_QWORD *)(v4 + 48), a2) ) /*0x17a62*/
      break; /*0x17a62*/
    a1 = v3; /*0x17a6c*/
  }
  return 1; /*0x17a85*/
}

// Function: RstHelper_7a90 @ 0x17a90 (0x58 bytes)
// Index: 652/906

__int64 RstHelper_7a90__int64 a1)
{
  __int16 v1; // di
  __int64 v2; // rbx
  __int64 v3; // rax
  __int64 v4; // r8
  __int64 v5; // rcx

  v1 = *(_WORD *)(a1 + 44); /*0x17a9a*/
  v2 = a1; /*0x17aa1*/
  *(_WORD *)(a1 + 44) = 0; /*0x17aa4*/
  while ( 1 ) /*0x17aa9*/
  {
    v3 = RstArrayGetNextEntry(a1); /*0x17aa9*/
    if ( v3 == v4 ) /*0x17ab1*/
      break; /*0x17ab1*/
    v5 = *(_QWORD *)(v3 + 48); /*0x17ab3*/
    if ( v5 != v4 && (*(_DWORD *)(v5 + 136) & 0x10) != 0 ) /*0x17ac7*/
    {
      LODWORD(v4) = HiiLibReturnZero(v5); /*0x17ad3*/
      break; /*0x17ad3*/
    }
    a1 = v2; /*0x17ac9*/
  }
  *(_WORD *)(v2 + 44) = v1; /*0x17ad6*/
  return (unsigned int)v4; /*0x17ae2*/
}

// Function: Assert_99 @ 0x17ae8 (0x6d bytes)
// Index: 653/906

__int64 Assert_99__int64 a1, __int64 a2)
{
  __int64 v2; // rdi
  __int64 result; // rax

  v2 = *(_QWORD *)(a2 + 8); /*0x17af7*/
  RstMemRangeCoalesce(v2, a2, *(_QWORD *)(a1 + 8), *(_QWORD *)(a1 + 24)); /*0x17b09*/
  *(_WORD *)(a1 + 44) = 0; /*0x17b10*/
  while ( 1 ) /*0x17b3b*/
  {
    result = RstArrayGetNextEntry(a1); /*0x17b3b*/
    if ( !result ) /*0x17b43*/
      break; /*0x17b43*/
    if ( (*(_DWORD *)(*(_QWORD *)(result + 48) + 136LL) & 2) == 0 || !*(_QWORD *)(result + 40) ) /*0x17b27*/
      Assert_58(v2, result); /*0x17b33*/
  }
  return result; /*0x17b4f*/
}

// Function: RstBufferPoolRealloc @ 0x17b58 (0x52 bytes)
// Index: 654/906

__int64 __fastcall RstBufferPoolRealloc(__int64 a1, int a2)
{
  __int64 v3; // rcx
  __int16 n16; // cx
  __int64 result; // rax

  v3 = *(_QWORD *)a1; /*0x17b65*/
  if ( v3 ) /*0x17b6d*/
    RstBufferPoolLock(v3); /*0x17b6f*/
  n16 = *(_WORD *)(a1 + 10); /*0x17b74*/
  *(_BYTE *)(a1 + 8) = 0; /*0x17b7a*/
  result = RstAllocTableAllocBySize(n16, a2); /*0x17b7e*/
  *(_QWORD *)a1 = result; /*0x17b83*/
  if ( result ) /*0x17b89*/
  {
    *(_BYTE *)(a1 + 8) = 1; /*0x17b8b*/
  }
  else
  {
    result = RstAllocTableFindBySize(*(_WORD *)(a1 + 10), a2); /*0x17b97*/
    *(_QWORD *)a1 = result; /*0x17b9c*/
  }
  return result; /*0x17ba4*/
}

// Function: RstHelperInitAndLink @ 0x17bac (0xf bytes)
// Index: 655/906

CHAR16 *__fastcall RstHelperInitAndLink(CHAR16 *p_Destination, int a2, __int64 Destination)
{
  *((_DWORD *)p_Destination + 13) = a2; /*0x17bac*/
  *(_QWORD *)p_Destination = Destination; /*0x17baf*/
  return RstHelper_955c((__int64)(p_Destination + 4));
}

// Function: Assert_111 @ 0x17bbc (0x33 bytes)
// Index: 656/906

bool __fastcall Assert_111(CHAR16 **p_Destination)
{
  CHAR16 **v1; // rdi
  int v2; // ebx

  v1 = p_Destination + 1; /*0x17bc6*/
  v2 = *((_DWORD *)p_Destination + 2); /*0x17bcd*/
  return v2 == (unsigned int)Assert_46((CHAR16 *)p_Destination + 4) && StrnCpy16_w((__int64)v1); /*0x17be9*/
}

// Function: RstBufferAdvancePtr @ 0x17bf0 (0x5 bytes)
// Index: 657/906

CHAR16 **__fastcall RstBufferAdvancePtr(CHAR16 **p_Destination)
{
  return p_Destination + 1; /*0x17bf4*/
}

// Function: RstDeviceGetContext88 @ 0x17bf8 (0x8 bytes)
// Index: 658/906

__int64 __fastcall RstDeviceGetContext88(__int64 a1)
{
  return *(_QWORD *)(*(_QWORD *)a1 + 88LL); /*0x17bff*/
}

// Function: RstDeviceDerefPtr @ 0x17c00 (0x4 bytes)
// Index: 659/906

__int64 __fastcall RstDeviceDerefPtr(__int64 a1)
{
  return *(_QWORD *)a1; /*0x17c03*/
}

// Function: Assert_54 @ 0x17c04 (0xa8 bytes)
// Index: 660/906

__int64 __fastcall Assert_54(CHAR16 **p_Destination, __int64 a2)
{
  __int64 v3; // rdi
  int v4; // ebx
  __int64 v5; // rbx
  __int64 v6; // rdi
  __int64 v7; // rbx

  if ( (unsigned __int8)RstDebugEnabled(p_Destination, a2) && !*p_Destination ) /*0x17c1f*/
    DebugAssert("JdPplMpbMgr.cpp", 0xC3u, "jDisk"); /*0x17c38*/
  v3 = *((_QWORD *)*p_Destination + 11); /*0x17c42*/
  v4 = RstGetFieldSize(*p_Destination, 0); /*0x17c50*/
  v5 = (unsigned int)RstHelper_1d9c(*p_Destination, 0) * v4; /*0x17c5a*/
  v6 = (unsigned int)(*((_DWORD *)p_Destination + 13) + 1) * (v5 + 0x1000 / (unsigned int)HiiLibReturnZero(v3)); /*0x17c79*/
  v7 = RstHelper_1dfc(*p_Destination) - v6; /*0x17c8b*/
  return v7 - (unsigned int)RstHiiStringGetId(*p_Destination); /*0x17ca6*/
}

// Function: Assert_65 @ 0x17cac (0x65 bytes)
// Index: 661/906

__int64 __fastcall Assert_65(CHAR16 **p_Destination, __int64 a2)
{
  unsigned int v3; // eax

  if ( (unsigned __int8)RstDebugEnabled(p_Destination, a2) && !*p_Destination ) /*0x17cc2*/
    DebugAssert("JdPplMpbMgr.cpp", 0xD2u, "jDisk"); /*0x17cdb*/
  v3 = HiiLibReturnZero(*((_QWORD *)*p_Destination + 11)); /*0x17ce7*/
  return 0x1000 / v3 + Assert_54(p_Destination, 0x1000 % v3); /*0x17d0b*/
}

// Function: Assert_62 @ 0x17d14 (0x7f bytes)
// Index: 662/906

unsigned __int64 __fastcall Assert_62(__int64 p_Destination)
{
  int v2; // edi
  __int64 v3; // rdx
  __int64 v4; // rax
  CHAR16 *Destination; // rcx

  if ( RstDebugEnabled() && !*(_QWORD *)p_Destination ) /*0x17d2f*/
    DebugAssert("JdPplMpbMgr.cpp", 0xDBu, "jDisk"); /*0x17d48*/
  v2 = *(_DWORD *)(p_Destination + 52); /*0x17d50*/
  *(_DWORD *)(p_Destination + 52) = RstGetFieldCount(*(_QWORD *)p_Destination, 0); /*0x17d5d*/
  v4 = Assert_54((CHAR16 **)p_Destination, v3); /*0x17d60*/
  Destination = *(CHAR16 **)p_Destination; /*0x17d65*/
  *(_DWORD *)(p_Destination + 52) = v2; /*0x17d6b*/
  return v4 - (unsigned int)(v2 + 1) * (unsigned __int64)(unsigned int)RstGetFieldBlockSize(Destination); /*0x17d8d*/
}

// Function: Assert_15 @ 0x17d94 (0x1c3 bytes)
// Index: 663/906

char __fastcall Assert_15(CHAR16 **p_Destination, int n23, int a3)
{
  unsigned int v6; // esi
  unsigned int v7; // ebx
  __int64 v8; // rdx
  __int64 v9; // r15
  unsigned int v10; // r12d
  unsigned int v11; // eax
  char v12; // bl
  unsigned int v13; // r13d
  _BYTE *i_1; // rdi
  unsigned int v15; // eax
  int v16; // eax
  unsigned int v18; // esi
  __int64 Source; // rax
  unsigned int v20; // ebp
  _BYTE *i; // [rsp+30h] [rbp-38h] BYREF
  char v22; // [rsp+38h] [rbp-30h]
  __int16 n16; // [rsp+3Ah] [rbp-2Eh]

  v6 = HiiLibReturnZero(*((_QWORD *)*p_Destination + 11)); /*0x17dc9*/
  v7 = RstHelper_1d9c(*p_Destination, 1); /*0x17dd3*/
  v9 = Assert_65(p_Destination, v8) + n23 * v7; /*0x17de8*/
  v10 = 0x1000 / v6; /*0x17df4*/
  v11 = v7; /*0x17df7*/
  v12 = 0; /*0x17df9*/
  i = 0; /*0x17e00*/
  v13 = v11 / (0x1000 / v6); /*0x17e05*/
  v22 = 0; /*0x17e0b*/
  n16 = 16; /*0x17e0f*/
  RstBufferPoolRealloc((__int64)&i, 0); /*0x17e14*/
  i_1 = i; /*0x17e19*/
  if ( RstDebugEnabled() ) /*0x17e1e*/
  {
    if ( !i_1 ) /*0x17e2a*/
      DebugAssert("JdPplMpbMgr.cpp", 0x46u, "pplHdr"); /*0x17e3d*/
  }
  MemZero(i_1, 0, 4096); /*0x17e4f*/
  MemZero(i_1, 255, 512); /*0x17e62*/
  *((_DWORD *)i_1 + 128) = a3; /*0x17e67*/
  v15 = RstReturnAllOnes(); /*0x17e6d*/
  v16 = RstCrc32(v15, (unsigned int *)i_1, 4096); /*0x17e7a*/
  *((_DWORD *)i_1 + 133) = RstBitwiseNot(v16); /*0x17e8c*/
  Assert_89(Source_16, *((_QWORD *)*p_Destination + 11), 42, v9, 4096, (unsigned int)i_1); /*0x17ea8*/
  if ( *(_WORD *)(Source_16 + 2720) ) /*0x17eb4*/
  {
    RstBufferPoolLock((__int64)i); /*0x17ec3*/
    return 0; /*0x17ec8*/
  }
  else
  {
    MemZero(i_1, 0, 4096); /*0x17ed4*/
    v18 = 1; /*0x17ed9*/
    if ( v13 <= 1 ) /*0x17ee1*/
    {
LABEL_10:
      v12 = 1; /*0x17f2b*/
    }
    else
    {
      Source = Source_16; /*0x17ee3*/
      v20 = v10; /*0x17eea*/
      while ( 1 ) /*0x17f0c*/
      {
        Assert_89(Source, *((_QWORD *)*p_Destination + 11), 42, v9 + v20, 4096, (unsigned int)i_1); /*0x17f0c*/
        Source = Source_16; /*0x17f11*/
        if ( *(_WORD *)(Source_16 + 2720) ) /*0x17f18*/
          break; /*0x17f18*/
        ++v18; /*0x17f21*/
        v20 += v10; /*0x17f23*/
        if ( v18 >= v13 ) /*0x17f29*/
          goto LABEL_10; /*0x17f29*/
      }
    }
    RstBufferPoolLock((__int64)i); /*0x17f32*/
    return v12; /*0x17f37*/
  }
}

// Function: Assert_40 @ 0x17f58 (0xfb bytes)
// Index: 664/906

char __fastcall Assert_40(CHAR16 *p_Destination)
{
  char v2; // di
  char v3; // al
  CHAR16 *Destination_1; // rsi
  __int64 v5; // rbx
  __int64 v6; // rdx
  __int64 v7; // rax
  CHAR16 *Destination; // [rsp+30h] [rbp-18h] BYREF
  char v10; // [rsp+38h] [rbp-10h]
  __int16 n16; // [rsp+3Ah] [rbp-Eh]

  Assert_46(p_Destination + 4); /*0x17f73*/
  v2 = 0; /*0x17f78*/
  Destination = 0; /*0x17f84*/
  n16 = 16; /*0x17f89*/
  v10 = 0; /*0x17f8e*/
  RstBufferPoolRealloc((__int64)&Destination, 0); /*0x17f93*/
  v3 = RstDebugEnabled(); /*0x17f98*/
  Destination_1 = Destination; /*0x17f9d*/
  if ( v3 && !Destination ) /*0x17faa*/
  {
    DebugAssert("JdPplMpbMgr.cpp", 0x80u, "framebuf.ptr()"); /*0x17fbf*/
    Destination_1 = Destination; /*0x17fc4*/
  }
  StrnCpy(Destination_1, p_Destination + 4, 0x2Au); /*0x17fd6*/
  MemZero((_BYTE *)Destination_1 + 42, 0, 4054); /*0x17fe7*/
  v5 = *(_QWORD *)(*(_QWORD *)p_Destination + 88LL); /*0x17ff3*/
  v7 = Assert_54((CHAR16 **)p_Destination, v6); /*0x17ff7*/
  Assert_89(Source_16, v5, 42, v7, 4096, (unsigned int)Destination_1); /*0x18018*/
  if ( !*(_WORD *)(Source_16 + 2720) ) /*0x18024*/
    v2 = 1; /*0x1802e*/
  RstBufferPoolLock((__int64)Destination); /*0x18036*/
  return v2; /*0x1804d*/
}

// Function: Assert_43 @ 0x18054 (0xdf bytes)
// Index: 665/906

char __fastcall Assert_43(CHAR16 *p_Destination)
{
  char v1; // di
  __int64 v3; // rdx
  CHAR16 *Source_1; // rbp
  __int64 v5; // rbx
  __int64 v6; // rax
  CHAR16 *Source; // [rsp+30h] [rbp-18h] BYREF
  char v9; // [rsp+38h] [rbp-10h]
  __int16 n16; // [rsp+3Ah] [rbp-Eh]

  v1 = 0; /*0x18068*/
  Source = 0; /*0x18072*/
  v9 = 0; /*0x18076*/
  n16 = 16; /*0x1807f*/
  RstBufferPoolRealloc((__int64)&Source, 0); /*0x18084*/
  if ( RstDebugEnabled() && !Source ) /*0x18098*/
    DebugAssert("JdPplMpbMgr.cpp", 0x93u, "framebuf.ptr()"); /*0x180ad*/
  Source_1 = Source; /*0x180b5*/
  v5 = *(_QWORD *)(*(_QWORD *)p_Destination + 88LL); /*0x180bd*/
  v6 = Assert_54((CHAR16 **)p_Destination, v3); /*0x180c1*/
  Assert_89(Source_16, v5, 40, v6, 4096, (unsigned int)Source); /*0x180e6*/
  if ( !*(_WORD *)(Source_16 + 2720) ) /*0x180f2*/
  {
    StrnCpy(p_Destination + 4, Source_1, 0x2Au); /*0x18109*/
    v1 = 1; /*0x1810e*/
  }
  RstBufferPoolLock((__int64)Source); /*0x18116*/
  return v1; /*0x1812d*/
}

// Function: Assert_64 @ 0x18134 (0x6c bytes)
// Index: 666/906

char __fastcall Assert_64(__int64 p_Destination)
{
  unsigned int v2; // ebx

  v2 = 0; /*0x18146*/
  if ( RstDebugEnabled() && !*(_QWORD *)p_Destination ) /*0x1814c*/
    DebugAssert("JdPplMpbMgr.cpp", 0x2Eu, "jDisk"); /*0x18162*/
  if ( (unsigned int)RstGetFieldSize(*(CHAR16 **)p_Destination, 1) ) /*0x1816c*/
  {
    do /*0x18191*/
      Assert_15((CHAR16 **)p_Destination, v2++, *(_DWORD *)(p_Destination + 44)); /*0x1817e*/
    while ( v2 < (unsigned int)RstGetFieldSize(*(CHAR16 **)p_Destination, 1) ); /*0x18191*/
  }
  return 1; /*0x1819a*/
}

// Function: RstBufferEntryInit @ 0x181a0 (0x19 bytes)
// Index: 667/906

__int64 __fastcall RstBufferEntryInit(__int64 a1)
{
  *(_WORD *)(a1 + 2) = 0; /*0x181a2*/
  *(_WORD *)(a1 + 4) = 0; /*0x181a6*/
  *(_WORD *)(a1 + 8) = 0; /*0x181aa*/
  *(_BYTE *)(a1 + 10) = 0; /*0x181b1*/
  *(_WORD *)(a1 + 6) = 1; /*0x181b4*/
  return 1; /*0x181b8*/
}

// Function: RstBufferEntryInitPtr @ 0x181bc (0x1c bytes)
// Index: 668/906

__int64 __fastcall RstBufferEntryInitPtr(__int64 a1)
{
  *(_WORD *)(a1 + 2) = 0; /*0x181be*/
  *(_WORD *)(a1 + 4) = 0; /*0x181c2*/
  *(_WORD *)(a1 + 8) = 0; /*0x181c6*/
  *(_BYTE *)(a1 + 10) = 0; /*0x181cd*/
  *(_WORD *)(a1 + 6) = 1; /*0x181d0*/
  return a1; /*0x181d7*/
}

// Function: RstBufferMetaZero @ 0x181d8 (0x2e bytes)
// Index: 669/906

_BYTE *__fastcall RstBufferMetaZero(__int64 a1)
{
  _BYTE *i; // rcx

  i = (_BYTE *)(a1 + 80); /*0x181da*/
  *((_DWORD *)i - 12) = 0; /*0x181e0*/
  *((_DWORD *)i - 11) = 0; /*0x181e3*/
  *(i - 24) = 0; /*0x181e6*/
  *(i - 23) = 0; /*0x181e9*/
  *((_DWORD *)i - 10) = 0; /*0x181ec*/
  *((_DWORD *)i - 4) = 0; /*0x181ef*/
  *((_DWORD *)i - 9) = 0; /*0x181f2*/
  *(i - 22) = 0; /*0x181f5*/
  *((_DWORD *)i - 2) = 0; /*0x181f8*/
  return MemZero(i, 0, 136);
}

// Function: RstBufferChecksum @ 0x18208 (0x29 bytes)
// Index: 670/906

__int64 __fastcall RstBufferChecksum(_DWORD *a1)
{
  __int64 result; // rax
  bool v2; // zf
  _DWORD *v3; // r8
  unsigned __int64 v4; // rdx

  result = 0; /*0x18208*/
  v2 = (a1[9] & 0xFFFFFFFC) == 0; /*0x1820a*/
  v3 = a1 + 8; /*0x18211*/
  a1[8] = 0; /*0x18215*/
  if ( !v2 ) /*0x18218*/
  {
    v4 = (unsigned __int64)(unsigned int)a1[9] >> 2; /*0x1821d*/
    do /*0x1822b*/
    {
      result = (unsigned int)(*a1++ + result); /*0x18221*/
      --v4; /*0x18227*/
    }
    while ( v4 ); /*0x1822b*/
  }
  *v3 = result; /*0x1822d*/
  return result; /*0x18230*/
}

// Function: RstDevicePathFindName @ 0x18234 (0x97 bytes)
// Index: 671/906

_BYTE *__fastcall RstDevicePathFindName(__int64 a1, _BYTE *a2)
{
  unsigned __int16 v4; // bp
  _BYTE *v5; // rbx

  if ( !a2 ) /*0x18259*/
    return 0; /*0x18259*/
  v4 = 0; /*0x1825f*/
  v5 = (_BYTE *)(a1 + 48LL * *(unsigned __int8 *)(a1 + 56) + 216); /*0x1826a*/
  if ( !*(_BYTE *)(a1 + 57) ) /*0x18272*/
    return 0; /*0x182a9*/
  while ( StrnCpy16(a2, v5, 16) ) /*0x1828d*/
  {
    ++v4; /*0x1829e*/
    v5 = (_BYTE *)RstConfigBlockGetDataOffset(v5 + 80, 0); /*0x182a1*/
    if ( v4 >= *(unsigned __int8 *)(a1 + 57) ) /*0x182a7*/
      return 0; /*0x182a7*/
  }
  return v5; /*0x182bf*/
}

// Function: RstRaidSuperblockFind @ 0x182cc (0x63 bytes)
// Index: 672/906

_DWORD *__fastcall RstRaidSuperblockFind(__int64 a1)
{
  __int64 v1; // rbx
  __int16 v3; // si
  _DWORD *v4; // rax

  v1 = 0; /*0x182df*/
  v3 = 0; /*0x182e8*/
  v4 = (_DWORD *)(a1 + 48LL * *(unsigned __int8 *)(a1 + 56) + 216); /*0x182ee*/
  if ( *(_BYTE *)(a1 + 57) ) /*0x182f6*/
  {
    do /*0x18310*/
    {
      v4 = (_DWORD *)RstConfigBlockGetDataOffset(v4 + 20, 0); /*0x18301*/
      ++v3; /*0x1830a*/
    }
    while ( v3 < *(unsigned __int8 *)(a1 + 57) ); /*0x18310*/
  }
  if ( *v4 == -1414680308 ) /*0x1831d*/
    return v4; /*0x1831d*/
  return (_DWORD *)v1; /*0x18329*/
}

// Function: RstDeviceValidatePath @ 0x18330 (0x15d bytes)
// Index: 673/906

char __fastcall RstDeviceValidatePath(__int64 a1)
{
  char v2; // bl
  unsigned __int16 v3; // si
  char *v4; // rbp
  __int64 v5; // r9
  int v6; // edx
  __int64 v7; // rcx

  v2 = 0; /*0x1834e*/
  v3 = 0; /*0x1835e*/
  v4 = (char *)RstGetGlobalContext(); /*0x18369*/
  v5 = a1 + 48LL * *(unsigned __int8 *)(a1 + 56) + 216; /*0x1836c*/
  if ( !*(_BYTE *)(a1 + 57) ) /*0x18374*/
    return 1; /*0x1846d*/
  while ( 1 ) /*0x1837e*/
  {
    v6 = *(_DWORD *)(v4 + 26); /*0x1837e*/
    v7 = v5 + 80; /*0x18381*/
    if ( (v6 & 1) == 0 ) /*0x18388*/
    {
      if ( *(_BYTE *)(v5 + 127) ) /*0x1838a*/
      {
        if ( *(_BYTE *)(v5 + 88) == 1 /*0x183b2*/
          && !*(_BYTE *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 95)
          && *(_BYTE *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 96) > 1u )
        {
          v2 = 1; /*0x183b2*/
        }
      }
      else
      {
        v2 = 1; /*0x18390*/
      }
    }
    if ( (v6 & 4) == 0 && *(_BYTE *)(v5 + 127) == 1 && *(_BYTE *)(v5 + 128) > 3u ) /*0x183c8*/
      v2 = 1; /*0x183c8*/
    if ( (v6 & 2) == 0 /*0x18407*/
      && (*(_BYTE *)(v5 + 127) == 1 && *(_BYTE *)(v5 + 128) < 4u && !_bittest((const signed __int32 *)(v5 + 24), 0xAu)
       || *(_BYTE *)(v5 + 88) == 1
       && *(_BYTE *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 95) == 1
       && *(_BYTE *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 96) < 4u
       && !_bittest((const signed __int32 *)(v5 + 24), 0xAu)) )
    {
      v2 = 1; /*0x18409*/
    }
    if ( (v6 & 0x10) == 0 /*0x18426*/
      && (*(_BYTE *)(v5 + 127) == 5
       || *(_BYTE *)(v5 + 88) == 1 && *(_BYTE *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 95) == 5) )
    {
      v2 = 1; /*0x18428*/
    }
    if ( *(unsigned __int8 *)(v5 + 128) > (unsigned int)*((_WORD *)v4 + 10) /*0x18448*/
      || *(_BYTE *)(v5 + 88) == 1
      && *(unsigned __int8 *)(v7 + 4LL * *(unsigned __int8 *)(v5 + 128) + 96) > (unsigned int)*((_WORD *)v4 + 10) )
    {
      v2 = 1; /*0x1844a*/
    }
    if ( v2 ) /*0x18450*/
      break; /*0x18450*/
    ++v3; /*0x1845d*/
    v5 = RstConfigBlockGetDataOffset(v7, 0); /*0x18461*/
    if ( v3 >= *(unsigned __int8 *)(a1 + 57) ) /*0x18467*/
      return 1; /*0x18467*/
  }
  return 0; /*0x1847f*/
}

// Function: RstHelper_8490 @ 0x18490 (0x41 bytes)
// Index: 674/906

bool RstHelper_8490_BYTE *a1)
{
  __int16 v2; // ax

  v2 = StrLenA("Intel Raid ISM Cfg Sig. "); /*0x184a0*/
  return !byte_574D4 && StrnCpy16("Intel Raid ISM Cfg Sig. ", a1, v2) == 0; /*0x184ae*/
}

// Function: RstHelper_84d4 @ 0x184d4 (0x44 bytes)
// Index: 675/906

bool __fastcall RstHelper_84d4(__int64 a1)
{
  __int16 n31; // ax

  n31 = StrLenA("Intel Raid ISM Cfg Sig. "); /*0x184e4*/
  return n31 <= 31 && StrnCpy16("2.0.00", (_BYTE *)(a1 + n31), 0xFFFF) == 0; /*0x18512*/
}

// Function: RstHelper_8518 @ 0x18518 (0x15b bytes)
// Index: 676/906

bool __fastcall RstHelper_8518(__int64 a1)
{
  __int16 n31; // ax
  _BYTE *v4; // rdi
  void *v5; // rsi

  n31 = StrLenA("Intel Raid ISM Cfg Sig. "); /*0x18536*/
  if ( n31 > 31 ) /*0x1853f*/
    return 0; /*0x1853f*/
  v4 = (_BYTE *)(a1 + n31); /*0x1854c*/
  v5 = RstGetGlobalContext(); /*0x18557*/
  if ( !RstHelper_8490((_BYTE *)a1) ) /*0x1855a*/
    return 0; /*0x18541*/
  if ( !StrnCpy16("1.0.00", v4, 0xFFFF) /*0x1862b*/
    || !StrnCpy16("1.0.00", v4, 0xFFFF) && *(_BYTE *)(a1 + 56) == 1 && !*(_BYTE *)(a1 + 57)
    || !StrnCpy16("1.1.00", v4, 0xFFFF)
    || !StrnCpy16("1.2.00", v4, 0xFFFF)
    || !StrnCpy16("1.2.02", v4, 0xFFFF)
    || !StrnCpy16("1.2.04", v4, 0xFFFF) && *((_WORD *)v5 + 10) > 4u
    || !StrnCpy16("1.2.01", v4, 0xFFFF) && *((_WORD *)v5 + 10) > 2u )
  {
    return 1; /*0x1857f*/
  }
  if ( StrnCpy16("1.3.00", v4, 0xFFFF) ) /*0x1863e*/
    return RstHelper_84d4(a1); /*0x18659*/
  return (*(_DWORD *)(a1 + 52) & *(_DWORD *)((_BYTE *)v5 + 26)) == *(_DWORD *)(a1 + 52); /*0x1866d*/
}

// Function: RstBufferReset @ 0x18674 (0x17 bytes)
// Index: 677/906

__int64 __fastcall RstBufferReset(__int64 a1)
{
  *(_DWORD *)(a1 + 24) = 0; /*0x18676*/
  *(_DWORD *)(a1 + 28) = 0; /*0x18679*/
  *(_DWORD *)(a1 + 48) = 0; /*0x1867c*/
  *(_WORD *)(a1 + 32) = 0; /*0x1867f*/
  *(_DWORD *)(a1 + 36) = 0; /*0x18683*/
  *(_QWORD *)(a1 + 40) = 0; /*0x18686*/
  return 0; /*0x1868a*/
}

// Function: RstArrayStateCopy @ 0x1868c (0x5c bytes)
// Index: 678/906

__int64 __fastcall RstArrayStateCopy(__int64 a1, __int64 Source, __int64 a3)
{
  __int64 result; // rax
  CHAR16 *Destination; // rcx
  unsigned int Length; // eax

  *(_DWORD *)(a1 + 24) = *(_DWORD *)(Source + 40); /*0x18698*/
  *(_DWORD *)(a1 + 28) = *(_DWORD *)(Source + 64); /*0x1869e*/
  *(_DWORD *)(a1 + 48) = *(_DWORD *)(Source + 44); /*0x186a4*/
  *(_WORD *)(a1 + 32) = *(_WORD *)(Source + 76); /*0x186ab*/
  result = *(unsigned int *)(Source + 72); /*0x186af*/
  *(_QWORD *)(a1 + 40) = a3; /*0x186b2*/
  *(_DWORD *)(a1 + 36) = result; /*0x186b6*/
  Destination = *(CHAR16 **)(a1 + 8); /*0x186b9*/
  if ( Destination != (CHAR16 *)Source ) /*0x186c0*/
  {
    Length = *(_DWORD *)(a1 + 20); /*0x186c2*/
    if ( *(_DWORD *)(Source + 36) < Length ) /*0x186c8*/
      Length = *(_DWORD *)(Source + 36); /*0x186c8*/
    *(_DWORD *)(a1 + 16) = Length; /*0x186cf*/
    StrnCpy(Destination, (const CHAR16 *)Source, Length); /*0x186d2*/
    result = *(unsigned int *)(a1 + 16); /*0x186db*/
    *(_DWORD *)(*(_QWORD *)(a1 + 8) + 36LL) = result; /*0x186de*/
  }
  return result; /*0x186e2*/
}

// Function: RstHelper_86e8 @ 0x186e8 (0x148 bytes)
// Index: 679/906

char __fastcall RstHelper_86e8(__int64 a1, __int64 a2)
{
  char Source; // al
  unsigned int v5; // r13d
  __int64 v6; // r11
  unsigned int v7; // eax
  unsigned int v8; // ebx
  unsigned int v9; // esi
  __int64 v10; // rax
  int n12747655; // edx

  Source = Source_16; /*0x18700*/
  if ( !*(_WORD *)(Source_16 + 2720) )
  {
    if ( !RstHelper_8518(*(_QWORD *)(a1 + 8)) || *(_DWORD *)(*(_QWORD *)(a1 + 8) + 36LL) > 0x2000u )
    {
      if ( !RstHelper_8490(*(_BYTE **)(a1 + 8)) ) /*0x18801*/
      {
        n12747655 = 12747655; /*0x1880a*/
        return RstDeviceClearFlags(a2, n12747655); /*0x1880a*/
      }
LABEL_8:
      RstDeviceSetFlags(a2, 0x10100u); /*0x187d3*/
      n12747655 = RstHelper_84d4(*(_QWORD *)(a1 + 8)) ? 46269063 : 12714631;
      return RstDeviceClearFlags(a2, n12747655); /*0x18812*/
    }
    v5 = HiiLibReturnZero(a2); /*0x1874e*/
    RstDeviceSetFlags(a2, 0x100u); /*0x18751*/
    v6 = *(_QWORD *)(a1 + 8); /*0x18756*/
    v7 = *(_DWORD *)(v6 + 36); /*0x1875b*/
    if ( v7 > v5 ) /*0x18762*/
    {
      v8 = v5 + v6; /*0x18771*/
      v9 = (v7 + v5 - 1) / v5 - 1; /*0x18776*/
      v10 = RstCountDecrementBy2(a2); /*0x1877f*/
      Assert_89(Source_16, a2, 40, v10 - v9, v5 * v9, v8); /*0x187a1*/
      if ( *(_WORD *)(Source_16 + 2720) ) /*0x187ad*/
        RstDeviceClearFlags(a2, 256); /*0x187c0*/
    }
    Source = RstDeviceValidatePath(*(_QWORD *)(a1 + 8)); /*0x187ca*/
    if ( !Source ) /*0x187d1*/
      goto LABEL_8; /*0x187d1*/
  }
  return Source; /*0x18826*/
}

// Function: RstHelper_8830 @ 0x18830 (0x6a bytes)
// Index: 680/906

__int64 __fastcall RstHelper_8830(__int64 a1)
{
  __int64 n80; // rcx
  __int64 n34; // rdx
  __int64 result; // rax

  RstStrCopy(*(_BYTE **)(a1 + 8), "Intel Raid ISM Cfg Sig. "); /*0x18844*/
  RstStrCopy((_BYTE *)(*(_QWORD *)(a1 + 8) + 24LL), "1.0.00"); /*0x18858*/
  *(_BYTE *)(*(_QWORD *)(a1 + 8) + 56LL) = 0; /*0x18864*/
  n80 = 80; /*0x1886c*/
  *(_BYTE *)(*(_QWORD *)(a1 + 8) + 57LL) = 0; /*0x18870*/
  n34 = 34; /*0x18878*/
  *(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) = 0x80000000; /*0x1887b*/
  do /*0x18892*/
  {
    result = *(_QWORD *)(a1 + 8); /*0x18882*/
    *(_DWORD *)(n80 + result) = 0; /*0x18886*/
    n80 += 4; /*0x1888a*/
    --n34; /*0x1888e*/
  }
  while ( n34 ); /*0x18892*/
  return result; /*0x18894*/
}

// Function: Assert_135 @ 0x1889c (0x46 bytes)
// Index: 681/906

__int64 Assert_135__int64 a1, __int64 a2)
{
  int v4; // eax

  v4 = RstCountDecrementBy2(a2, a2); /*0x188af*/
  return Assert_89(Source_16, a2, 42, v4, *(_DWORD *)(a1 + 16), *(_DWORD *)(a1 + 8)); /*0x188dc*/
}

// Function: RstProgressUpdate @ 0x188e4 (0x91 bytes)
// Index: 682/906

__int64 __fastcall RstProgressUpdate(__int64 a1)
{
  __int64 v1; // rdx
  int v2; // eax
  __int64 result; // rax
  __int64 v5; // rax
  __int64 v6; // rbx
  int v7; // edx
  __int64 v8; // rcx

  v1 = *(_QWORD *)(a1 + 8); /*0x188ee*/
  v2 = *(_DWORD *)(a1 + 24); /*0x188f2*/
  ++*(_DWORD *)(a1 + 48); /*0x188f5*/
  *(_DWORD *)(v1 + 40) = v2; /*0x188f8*/
  *(_DWORD *)(*(_QWORD *)(a1 + 8) + 64LL) = *(_DWORD *)(a1 + 28); /*0x18902*/
  *(_DWORD *)(*(_QWORD *)(a1 + 8) + 44LL) = *(_DWORD *)(a1 + 48); /*0x1890c*/
  *(_WORD *)(*(_QWORD *)(a1 + 8) + 76LL) = *(_WORD *)(a1 + 32); /*0x1891a*/
  result = RstBufferChecksum(*(_QWORD *)(a1 + 8)); /*0x18922*/
  if ( !*(_DWORD *)(a1 + 24) ) /*0x1892a*/
  {
    v5 = *(_QWORD *)(a1 + 8); /*0x18930*/
    *(_DWORD *)(a1 + 48) = 0; /*0x18934*/
    *(_DWORD *)(v5 + 44) = 0; /*0x18938*/
    v6 = *(_QWORD *)(a1 + 8); /*0x1893c*/
    v7 = RstGetUefiTime() + *(_DWORD *)(v6 + 32); /*0x18948*/
    *(_DWORD *)(a1 + 24) = v7; /*0x1894b*/
    *(_DWORD *)(v6 + 40) = v7; /*0x1894e*/
    *(_DWORD *)(*(_QWORD *)(a1 + 8) + 64LL) = *(_DWORD *)(a1 + 24); /*0x18958*/
    v8 = *(_QWORD *)(a1 + 8); /*0x1895e*/
    *(_DWORD *)(a1 + 28) = *(_DWORD *)(a1 + 24); /*0x18962*/
    return RstBufferChecksum(v8); /*0x18965*/
  }
  return result; /*0x1896f*/
}

// Function: RstBufferInit @ 0x18978 (0x2a bytes)
// Index: 683/906

__int64 __fastcall RstBufferInit(__int64 a1, __int16 n4096)
{
  *(_QWORD *)a1 = off_23F20; /*0x1897f*/
  *(_DWORD *)(a1 + 20) = n4096; /*0x18985*/
  *(_DWORD *)(a1 + 24) = 0; /*0x1898a*/
  *(_DWORD *)(a1 + 28) = 0; /*0x1898d*/
  *(_DWORD *)(a1 + 48) = 0; /*0x18990*/
  *(_WORD *)(a1 + 32) = 0; /*0x18993*/
  *(_DWORD *)(a1 + 36) = 0; /*0x18997*/
  *(_QWORD *)(a1 + 40) = 0; /*0x1899a*/
  return a1; /*0x189a1*/
}

// Function: RstHelper_89a4 @ 0x189a4 (0x63 bytes)
// Index: 684/906

char RstHelper_89a4__int64 a1, __int64 a2)
{
  int v4; // ebx
  __int64 v5; // rdx
  int v6; // eax

  v4 = HiiLibReturnZero(a2); /*0x189c4*/
  v6 = RstCountDecrementBy2(a2, v5); /*0x189c6*/
  Assert_89(Source_16, a2, 40, v6, v4, *(_DWORD *)(a1 + 8)); /*0x189e8*/
  return RstHelper_86e8(a1, a2); /*0x189fd*/
}

// Function: Assert_134 @ 0x18a08 (0x4d bytes)
// Index: 685/906

__int64 Assert_134__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
  int v5; // edx
  char v6; // al

  Assert_112(a1, a2, a3, a4); /*0x18a11*/
  v5 = *(unsigned __int8 *)(a1 + 42); /*0x18a16*/
  *(_DWORD *)(a1 + 96) = 1; /*0x18a26*/
  *(_WORD *)(a1 + 40) = 5; /*0x18a2d*/
  v6 = *(_BYTE *)(a1 + 43); /*0x18a31*/
  *(_QWORD *)a1 = off_23FE8; /*0x18a34*/
  *(_BYTE *)(a1 + 93) = v6; /*0x18a37*/
  *(_DWORD *)(a1 + 84) *= v5; /*0x18a40*/
  *(_DWORD *)(a1 + 88) *= v5; /*0x18a49*/
  return a1; /*0x18a4f*/
}

// Function: RstBufferXor @ 0x18a58 (0x23 bytes)
// Index: 686/906

__int64 __fastcall RstBufferXor(unsigned int a1, _BYTE *i, __int64 ia, _BYTE *a4)
{
  unsigned int v4; // ecx
  __int64 v5; // rdx
  __int64 v6; // r8
  __int64 result; // rax

  v4 = a1 >> 2; /*0x18a58*/
  if ( v4 ) /*0x18a5d*/
  {
    v5 = i - a4; /*0x18a5f*/
    v6 = ia - (_QWORD)a4; /*0x18a62*/
    do /*0x18a77*/
    {
      result = (unsigned int)(*(_DWORD *)&a4[v5] ^ *(_DWORD *)&a4[v6]); /*0x18a69*/
      *(_DWORD *)a4 = result; /*0x18a6d*/
      a4 += 4; /*0x18a70*/
      --v4; /*0x18a74*/
    }
    while ( v4 ); /*0x18a77*/
  }
  return result; /*0x18a79*/
}

// Function: RstXorBufferTransform @ 0x18a7c (0x2f bytes)
// Index: 687/906

__int64 __fastcall RstXorBufferTransform(unsigned int a1, __int64 a2, _DWORD *a3, __int64 a4, __int64 a5)
{
  unsigned int v5; // ecx
  __int64 v6; // rdx
  __int64 v7; // r10
  __int64 v8; // r9
  __int64 result; // rax

  v5 = a1 >> 2; /*0x18a7c*/
  if ( v5 ) /*0x18a81*/
  {
    v6 = a2 - (_QWORD)a3; /*0x18a88*/
    v7 = a5 - (_QWORD)a3; /*0x18a8b*/
    v8 = a4 - (_QWORD)a3; /*0x18a8e*/
    do /*0x18aa7*/
    {
      result = *a3 ^ (unsigned int)(*(_DWORD *)((char *)a3 + v6) ^ *(_DWORD *)((char *)a3 + v8)); /*0x18a99*/
      *(_DWORD *)((char *)a3++ + v7) = result; /*0x18a9c*/
      --v5; /*0x18aa4*/
    }
    while ( v5 ); /*0x18aa7*/
  }
  return result; /*0x18aa9*/
}

// Function: RstRaidStripeMapLogical @ 0x18aac (0x89 bytes)
// Index: 688/906

unsigned __int64 __fastcall RstRaidStripeMapLogical(__int64 a1, unsigned __int64 a2, _BYTE *a3, _QWORD *a4)
{
  __int16 v5; // cx
  unsigned __int64 v7; // r10
  __int16 v8; // r8
  unsigned __int64 result; // rax
  unsigned __int64 v10; // rdx

  v5 = *(_WORD *)(a1 + 74); /*0x18ac6*/
  v7 = (a2 >> v5) / *(unsigned __int8 *)(a1 + 43); /*0x18ae0*/
  *a4 = (v7 << v5) + (a2 & *(_WORD *)(a1 + 76)); /*0x18af7*/
  v8 = *(unsigned __int8 *)(a1 + 43) - v7 % *(unsigned __int8 *)(a1 + 42); /*0x18b0d*/
  result = (a2 >> v5) / *(unsigned __int8 *)(a1 + 43); /*0x18b13*/
  v10 = (a2 >> v5) % *(unsigned __int8 *)(a1 + 43); /*0x18b13*/
  *a3 = v10; /*0x18b19*/
  if ( v8 <= (unsigned __int8)v10 ) /*0x18b1f*/
    *a3 = v10 + 1; /*0x18b23*/
  return result; /*0x18b34*/
}

// Function: RstRaidStripeMapPhysical @ 0x18b38 (0x63 bytes)
// Index: 689/906

unsigned __int64 __fastcall RstRaidStripeMapPhysical(__int64 a1, unsigned __int64 a2, _BYTE *a3, _QWORD *a4)
{
  unsigned __int64 v5; // r9
  unsigned __int64 v7; // rtt

  v5 = *(unsigned __int8 *)(a1 + 42); /*0x18b60*/
  v7 = (a2 >> *(_BYTE *)(a1 + 74)) / *(unsigned __int8 *)(a1 + 43); /*0x18b74*/
  *a3 = *(_BYTE *)(a1 + 43) - v7 % v5; /*0x18b7a*/
  *a4 = (v7 << *(_BYTE *)(a1 + 74)) + (a2 & *(_WORD *)(a1 + 76)); /*0x18b92*/
  return v7 / v5; /*0x18b9a*/
}

// Function: RstRaidCountActiveMembers @ 0x18b9c (0x8e bytes)
// Index: 690/906

void __fastcall RstRaidCountActiveMembers(__int64 a1)
{
  __int16 v2; // di
  unsigned __int16 i; // si

  v2 = 0; /*0x18bb7*/
  for ( i = 0; i < *(unsigned __int8 *)(a1 + 42); ++i ) /*0x18bbf*/
  {
    if ( *(_BYTE *)(a1 + 16 * (i + 7LL) + 8) || RstDeviceCheckOnline(*(_QWORD *)(a1 + 16 * (i + 7LL))) ) /*0x18bda*/
      ++v2; /*0x18be4*/
  }
  if ( *(_DWORD *)(a1 + 8) != 3 ) /*0x18bf7*/
  {
    if ( v2 == 1 ) /*0x18bfd*/
    {
      *(_DWORD *)(a1 + 8) = 2; /*0x18bff*/
    }
    else if ( v2 > 1 ) /*0x18c08*/
    {
      RstRaidMemberMarkRemoving(a1, 0xFFu); /*0x18c0f*/
    }
  }
}

// Function: RstRaidStateTransition @ 0x18c2c (0x65 bytes)
// Index: 691/906

char __fastcall RstRaidStateTransition(__int64 a1, __int64 a2)
{
  int n3; // eax

  n3 = *(_DWORD *)(a1 + 8); /*0x18c32*/
  if ( n3 >= 0 ) /*0x18c3a*/
  {
    if ( n3 <= 2 ) /*0x18c3f*/
    {
      RstHelper_54e8(a1, a2); /*0x18c50*/
      Assert_120(a2 + 96, 40, 0, *(_QWORD *)(a2 + 704), *(_DWORD *)(a2 + 712), *(_DWORD *)(a2 + 716), 255); /*0x18c7e*/
      LOBYTE(n3) = Assert_127(a2); /*0x18c86*/
    }
    else if ( n3 == 3 ) /*0x18c44*/
    {
      LOBYTE(n3) = RstRaidOpSetRetryState(a2); /*0x18c49*/
    }
  }
  return n3; /*0x18c8b*/
}

// Function: Assert_78 @ 0x18c94 (0x121 bytes)
// Index: 692/906

__int64 __fastcall Assert_78(__int64 a1, __int64 a2)
{
  unsigned __int64 v2; // rbx
  unsigned __int64 v5; // rbp
  int v6; // eax
  unsigned int n0x2000; // edx
  unsigned int n0x2000_1; // eax
  int v9; // eax
  int v10; // eax
  __int64 result; // rax
  __int64 Source; // rbx
  __int64 v13; // rcx
  unsigned __int64 v14; // rbx
  unsigned __int64 v15; // rax

  v2 = *(_QWORD *)(a2 + 704); /*0x18ca8*/
  v5 = *(_DWORD *)(a2 + 712) / (unsigned int)RstHelper_525c(a1) + v2 - 1; /*0x18cce*/
  LODWORD(v2) = RstRaidMapTranslateAddress((unsigned __int16 *)a1, v2); /*0x18cdb*/
  v6 = RstHelper_525c(a1); /*0x18cdd*/
  n0x2000 = 0x2000; /*0x18ce2*/
  n0x2000_1 = *(_DWORD *)(a1 + 44) - v6 * v2; /*0x18ced*/
  if ( n0x2000_1 < 0x2000 ) /*0x18cf1*/
    n0x2000 = n0x2000_1; /*0x18cf1*/
  if ( *(_DWORD *)(a2 + 712) > n0x2000 ) /*0x18cfa*/
    RstTransferBlockSizeInit(a2, n0x2000); /*0x18cff*/
  RstArrayIoAdvance((_DWORD *)a2); /*0x18d07*/
  v9 = *(_DWORD *)(a1 + 8); /*0x18d0c*/
  if ( !v9 ) /*0x18d11*/
  {
    if ( !RstCfgRaidDevCheckFlagBit4(*(_QWORD *)(a1 + 24)) ) /*0x18d64*/
    {
      v14 = RstSizeToBlocks(a1, *(_QWORD *)(a2 + 704)); /*0x18d85*/
      v15 = RstSizeToBlocks(a1, v5); /*0x18d88*/
      v13 = a2; /*0x18d8d*/
      if ( v14 != v15 || *(_BYTE *)(a1 + 42) != 3 ) /*0x18d99*/
        return RstHelper_197c(a2); /*0x18d9b*/
      return Assert_12(v13); /*0x18d6e*/
    }
LABEL_12:
    v13 = a2; /*0x18d66*/
    return Assert_12(v13); /*0x18d66*/
  }
  v10 = v9 - 1; /*0x18d13*/
  if ( !v10 ) /*0x18d16*/
    goto LABEL_12; /*0x18d16*/
  result = (unsigned int)(v10 - 1); /*0x18d18*/
  if ( (_DWORD)result ) /*0x18d1b*/
  {
    if ( (_DWORD)result == 1 ) /*0x18d20*/
      return RstRaidOpSetRetryState(a2); /*0x18d25*/
  }
  else
  {
    *(_BYTE *)(a2 + 68) = *(_BYTE *)(a1 + 92); /*0x18d32*/
    Source = Source_16; /*0x18d35*/
    RstConfigBlockCopyState(a2, Source_16 + 33680); /*0x18d43*/
    return Assert_20(Source + 33680, a2); /*0x18d52*/
  }
  return result; /*0x18daf*/
}

// Function: RstCallbackAddMenuEntry @ 0x18db8 (0xaf bytes)
// Index: 693/906

CHAR16 *__fastcall RstCallbackAddMenuEntry(__int64 a1, __int64 Source, unsigned __int8 a3, __int16 n3, char a5)
{
  __int64 Source_1; // rdi
  __int64 *v9; // rcx
  CHAR16 *result; // rax
  __int64 v11; // rax
  CHAR16 *Destination; // rcx

  Source_1 = Source; /*0x18dd8*/
  if ( a5 ) /*0x18dde*/
  {
    v9 = *(__int64 **)(Source + 48); /*0x18de0*/
    LOBYTE(Source) = a3; /*0x18de8*/
    RstDeviceIncrementEvent(*v9, Source, n3); /*0x18dee*/
  }
  ++*(_WORD *)(a1 + 74); /*0x18df3*/
  *(_WORD *)(Source_1 + 2) = n3; /*0x18df7*/
  *(_WORD *)Source_1 = a3; /*0x18dff*/
  *(_QWORD *)(*(_QWORD *)(a1 + 32) + 40LL) = a1; /*0x18e06*/
  LOBYTE(Source) = *(_BYTE *)(Source_1 + 72); /*0x18e0a*/
  result = (CHAR16 *)RstBufferAddByteUnique(*(_QWORD *)(a1 + 32), Source); /*0x18e11*/
  if ( !*(_QWORD *)(a1 + 16) ) /*0x18e16*/
  {
    v11 = Source_16 + 34096; /*0x18e2d*/
    *(_QWORD *)(Source_16 + 34152) = a1; /*0x18e33*/
    *(_QWORD *)(a1 + 80) = v11; /*0x18e37*/
    Destination = (CHAR16 *)(Source_16 + 34176); /*0x18e42*/
    *(_QWORD *)(a1 + 16) = Source_16 + 34176; /*0x18e49*/
    return StrnCpy(Destination, (const CHAR16 *)Source_1, 0x50u); /*0x18e4d*/
  }
  return result; /*0x18e61*/
}

// Function: RstCallbackIoHandler @ 0x18e68 (0x7a bytes)
// Index: 694/906

char __fastcall RstCallbackIoHandler(__int64 a1, __int64 Source)
{
  __int64 v3; // rcx
  int v5; // eax
  __int64 v6; // rcx

  v3 = *(_QWORD *)(Source + 48); /*0x18e75*/
  if ( (*(_BYTE *)(v3 + 8) || (LOBYTE(v5) = RstDeviceCheckOnline(*(_QWORD *)v3), (_BYTE)v5)) /*0x18eab*/
    && (*(_WORD *)(*(_QWORD *)(a1 + 40) + 40LL)
     || (v6 = **(_QWORD **)(Source + 48), v5 = *(_DWORD *)(v6 + 136) >> 3, (*(_DWORD *)(v6 + 136) & 8) == 0)) )
  {
    LOBYTE(v5) = (unsigned __int8)RstCallbackAddMenuEntry(a1, Source, 0, 0, 0); /*0x18ed2*/
  }
  else if ( *(_BYTE *)Source ) /*0x18ead*/
  {
    LOBYTE(v5) = (unsigned __int8)RstCallbackAddMenuEntry(a1, Source, *(_BYTE *)Source, *(_WORD *)(Source + 2), 1); /*0x18ebf*/
  }
  return v5; /*0x18edc*/
}

// Function: Assert_120 @ 0x18ee4 (0x126 bytes)
// Index: 695/906

char __fastcall Assert_120(__int64 a1, char a2, int a3, __int64 a4, int a5, int a6, char a7)
{
  __int64 v11; // rcx
  int v12; // eax
  __int64 n23_4; // rcx
  __int64 v14; // rax
  __int64 Source; // rdi
  int n23; // ecx
  __int64 *v17; // rbx
  unsigned __int8 n23_2; // r11
  __int64 n23_3; // rdx
  _BYTE v21[56]; // [rsp+30h] [rbp-68h] BYREF
  __int64 v22; // [rsp+68h] [rbp-30h]
  __int64 v23; // [rsp+A0h] [rbp+8h] BYREF
  unsigned __int8 n23_1; // [rsp+A8h] [rbp+10h] BYREF

  RstConfigBlockZero((__int64)v21); /*0x18f03*/
  v11 = *(_QWORD *)(*(_QWORD *)(a1 + 32) + 32LL); /*0x18f17*/
  v12 = a5; /*0x18f1b*/
  *(_BYTE *)(a1 + 48) = a2; /*0x18f22*/
  *(_DWORD *)(a1 + 64) = v12; /*0x18f25*/
  *(_DWORD *)(a1 + 92) = a6; /*0x18f31*/
  *(_BYTE *)(a1 + 72) = a7; /*0x18f3d*/
  *(_QWORD *)(a1 + 40) = v11; /*0x18f45*/
  *(_QWORD *)(a1 + 80) = v21; /*0x18f49*/
  *(_DWORD *)(a1 + 24) = a3; /*0x18f55*/
  *(_QWORD *)(a1 + 56) = a4; /*0x18f58*/
  *(_WORD *)(a1 + 74) = 0; /*0x18f5c*/
  *(_DWORD *)(a1 + 68) = 0; /*0x18f60*/
  v22 = a1; /*0x18f68*/
  RstVtableDispatch34(v11, a3, a4, (__int64)&n23_1, (__int64)&v23); /*0x18f6d*/
  n23_4 = n23_1; /*0x18f72*/
  v14 = *(_QWORD *)(a1 + 80); /*0x18f7a*/
  *(_QWORD *)(a1 + 16) = 0; /*0x18f7e*/
  *(_QWORD *)(a1 + 8 * n23_4 + 96) = v14; /*0x18f82*/
  Source = *(_QWORD *)(a1 + 8LL * n23_1 + 96); /*0x18f92*/
  n23 = 23; /*0x18fa3*/
  if ( n23_1 < 0x18u ) /*0x18fb0*/
    n23 = n23_1; /*0x18fb0*/
  v17 = (__int64 *)(*(_QWORD *)(a1 + 40) + 16 * (n23 + 7LL)); /*0x18fc5*/
  RstConfigBlockInit(Source, *v17, *(_BYTE *)(a1 + 48), v23, *(_DWORD *)(a1 + 64), *(_DWORD *)(a1 + 92)); /*0x18fcc*/
  n23_2 = n23_1; /*0x18fd1*/
  *(_QWORD *)(Source + 48) = v17; /*0x18fd9*/
  *(_BYTE *)(Source + 72) = n23_2; /*0x18fdd*/
  LOBYTE(n23_3) = *(_BYTE *)(a1 + 48); /*0x18fe1*/
  Assert_88(Source, n23_3); /*0x18fe7*/
  return RstCallbackIoHandler(a1, Source); /*0x18fff*/
}

// Function: Assert_117 @ 0x1900c (0x17b bytes)
// Index: 696/906

__int64 __fastcall Assert_117(
        __int64 a1,
        char n40,
        _BYTE *p_n0xFF,
        __int16 a4,
        char n255,
        __int64 i,
        int a7,
        unsigned int *p_i)
{
  __int64 v12; // rax
  __int64 v13; // r10
  __int64 result; // rax
  __int16 j; // di
  int n23; // ecx
  __int64 n0xFF; // rdx
  int n23_1; // eax
  _WORD Source[24]; // [rsp+30h] [rbp-78h] BYREF
  __int64 v21; // [rsp+60h] [rbp-48h]
  __int64 v22; // [rsp+68h] [rbp-40h]
  char n0xFF_1; // [rsp+78h] [rbp-30h]

  RstConfigBlockZero((__int64)Source); /*0x1903c*/
  v12 = *(_QWORD *)(a1 + 32); /*0x19041*/
  v22 = a1; /*0x19045*/
  v13 = *(_QWORD *)(v12 + 32); /*0x1904a*/
  result = 0; /*0x1904e*/
  *(_QWORD *)(a1 + 40) = v13; /*0x19053*/
  *(_DWORD *)(a1 + 68) = 0; /*0x19057*/
  *(_WORD *)(a1 + 74) = 0; /*0x1905a*/
  for ( j = 0; a4 > 0; *p_n0xFF = ((unsigned __int8)*p_n0xFF + 1) % *(unsigned __int8 *)(*(_QWORD *)(a1 + 40) + 42LL) ) /*0x19064*/
  {
    if ( *p_n0xFF != n255 ) /*0x19085*/
    {
      n23 = 23; /*0x190a6*/
      if ( *p_n0xFF < 0x18u ) /*0x190b3*/
        n23 = (unsigned __int8)*p_n0xFF; /*0x190b3*/
      RstConfigBlockInit((__int64)Source, *(_QWORD *)(*(_QWORD *)(a1 + 40) + 16 * (n23 + 7LL)), n40, i, a7, *p_i); /*0x190c9*/
      n0xFF = (unsigned __int8)*p_n0xFF; /*0x190ce*/
      n23_1 = 23; /*0x190d1*/
      n0xFF_1 = n0xFF; /*0x190d6*/
      ++p_i; /*0x190da*/
      if ( (unsigned __int8)n0xFF < 0x18u ) /*0x190e1*/
        n23_1 = n0xFF; /*0x190e1*/
      LOBYTE(n0xFF) = n40; /*0x190e9*/
      v21 = *(_QWORD *)(a1 + 40) + 16 * (n23_1 + 7LL); /*0x190fa*/
      Assert_88((__int64)Source, n0xFF); /*0x190ff*/
      RstCallbackIoHandler(a1, (__int64)Source); /*0x1910c*/
      result = 0; /*0x19111*/
      --a4; /*0x19113*/
      if ( LOBYTE(Source[0]) && Source[1] != 2 ) /*0x19124*/
        break; /*0x19124*/
      if ( Source[1] == 2 ) /*0x1912b*/
        ++j; /*0x1912d*/
    }
    result = 0; /*0x19142*/
  }
  if ( *(__int16 *)(a1 + 74) > 0 && j == *(_WORD *)(a1 + 74) ) /*0x1915c*/
  {
    result = *(_QWORD *)(a1 + 16); /*0x1915e*/
    *(_WORD *)(result + 2) = 2; /*0x19162*/
  }
  return result; /*0x1917a*/
}

// Function: Assert_139 @ 0x19188 (0x3b bytes)
// Index: 697/906

__int64 Assert_139(__int64 a1, char n42, char n0xFF, __int64 i, int a5, ...)
{
  char n0xFF_1; // [rsp+60h] [rbp+18h] BYREF
  va_list va; // [rsp+78h] [rbp+30h] BYREF

  va_start(va, a5);
  n0xFF_1 = n0xFF; /*0x1918b*/
  return Assert_117(a1, n42, &n0xFF_1, 1, 255, i, a5, (unsigned int *)va); /*0x191be*/
}

// Function: RstBufferAddByteUnique @ 0x191c4 (0x2d bytes)
// Index: 698/906

__int64 __fastcall RstBufferAddByteUnique(__int64 a1, __int64 Source)
{
  __int16 v2; // r9
  __int64 result; // rax

  v2 = 0; /*0x191c4*/
  if ( *(_BYTE *)(a1 + 67) ) /*0x191c7*/
  {
    while ( 1 ) /*0x191cd*/
    {
      result = v2; /*0x191cd*/
      if ( *(_BYTE *)(v2 + a1 + 68) == (_BYTE)Source ) /*0x191d5*/
        break; /*0x191d5*/
      if ( ++v2 >= *(unsigned __int8 *)(a1 + 67) ) /*0x191e3*/
        goto LABEL_4; /*0x191e3*/
    }
  }
  else
  {
LABEL_4:
    result = *(unsigned __int8 *)(a1 + 67); /*0x191e5*/
    *(_BYTE *)(result + a1 + 68) = Source; /*0x191e9*/
    ++*(_BYTE *)(a1 + 67); /*0x191ed*/
  }
  return result; /*0x191f0*/
}

// Function: RstBufferProcessByteArray @ 0x191f4 (0x38 bytes)
// Index: 699/906

__int64 __fastcall RstBufferProcessByteArray(__int64 a1, __int64 Source)
{
  __int16 v2; // r8
  __int64 Source_1; // r10
  __int64 v4; // r11
  __int64 result; // rax
  __int16 v6; // r8

  v2 = 0; /*0x191f8*/
  Source_1 = Source; /*0x191fb*/
  v4 = a1; /*0x191fe*/
  if ( *(_BYTE *)(Source + 67) ) /*0x19201*/
  {
    do /*0x19225*/
    {
      LOBYTE(Source) = *(_BYTE *)(v2 + Source_1 + 68); /*0x1920e*/
      RstBufferAddByteUnique(v4, Source); /*0x19213*/
      result = *(unsigned __int8 *)(Source_1 + 67); /*0x19218*/
      v2 = v6 + 1; /*0x1921d*/
    }
    while ( v2 < (__int16)result ); /*0x19225*/
  }
  return result; /*0x19227*/
}

// Function: RstReturnAllOnes @ 0x1922c (0x4 bytes)
// Index: 700/906

__int64 RstReturnAllOnes()
{
  return 0xFFFFFFFFLL; /*0x1922f*/
}

// Function: RstCrc32 @ 0x19230 (0x34 bytes)
// Index: 701/906

__int64 __fastcall RstCrc32(unsigned int a1, unsigned int *a2, int n4)
{
  int n4_1; // ebx
  unsigned int v5; // eax
  bool v6; // zf

  n4_1 = n4; /*0x1923a*/
  if ( n4 ) /*0x19243*/
  {
    do /*0x19255*/
    {
      v5 = mm_crc32_u32_w(a1, *a2++); /*0x19247*/
      v6 = n4_1 == 4; /*0x19250*/
      n4_1 -= 4; /*0x19250*/
      a1 = v5; /*0x19253*/
    }
    while ( !v6 ); /*0x19255*/
  }
  return a1; /*0x1925e*/
}

// Function: RstBitwiseNot @ 0x19264 (0x5 bytes)
// Index: 702/906

__int64 __fastcall RstBitwiseNot(int a1)
{
  return (unsigned int)~a1; /*0x19268*/
}

// Function: RstDeviceNodeInit @ 0x1926c (0x4c bytes)
// Index: 703/906

_QWORD *__fastcall RstDeviceNodeInit(_QWORD *a1, __int64 a2)
{
  RstBufferInit(a1, 4096); /*0x19281*/
  a1[7] = a2; /*0x19286*/
  *a1 = &off_24010; /*0x19296*/
  a1[1] = *(_QWORD *)(*(_QWORD *)(Source_16 + 208) + 8LL); /*0x192ab*/
  return a1; /*0x192b2*/
}

// Function: RstHelper_92b8 @ 0x192b8 (0xf6 bytes)
// Index: 704/906

__int64 RstHelper_92b8__int64 a1)
{
  __int64 result; // rax
  __int64 v3; // rdi

  RstHelper_8830(a1); /*0x192c5*/
  result = *(_QWORD *)(a1 + 56); /*0x192ca*/
  v3 = *(_QWORD *)(result + 48); /*0x192ce*/
  if ( v3 ) /*0x192d5*/
  {
    *(_DWORD *)(a1 + 16) = HiiLibReturnZero(*(_QWORD *)(result + 48)); /*0x192e3*/
    *(_DWORD *)(*(_QWORD *)(a1 + 8) + 36LL) = 264; /*0x192ea*/
    if ( (((unsigned int)&loc_202A4 + 1) & *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 56) + 48LL) + 136LL)) != 0 ) /*0x19303*/
    {
      RstDeviceSetFlags(v3, 256); /*0x1930d*/
      RstDeviceClearFlags(v3, 32770); /*0x1931a*/
      RstDeviceInfoCopy((CHAR16 *)(*(_QWORD *)(a1 + 8) + 216LL), *(_QWORD *)(a1 + 56)); /*0x1932e*/
      *(_BYTE *)(*(_QWORD *)(a1 + 8) + 56LL) = 1; /*0x19337*/
      if ( (unsigned __int8)RstDeviceIsActive(*(_QWORD *)(a1 + 56)) ) /*0x19340*/
        RstStrCopy(*(_QWORD *)(a1 + 8) + 24LL, "2.0.00"); /*0x19358*/
      RstProgressUpdate(a1); /*0x19360*/
    }
    else
    {
      if ( (*(_DWORD *)(v3 + 136) & 0x118930) != 0x110 ) /*0x19377*/
        return (*(__int64 (__fastcall **)(__int64, __int64))(*(_QWORD *)a1 + 8LL))(a1, v3); /*0x193a0*/
      RstDeviceClearFlags(v3, 259); /*0x1937f*/
      **(_BYTE **)(a1 + 8) = 0; /*0x19388*/
    }
    Assert_135(a1, v3); /*0x19392*/
    return (*(__int64 (__fastcall **)(__int64, __int64))(*(_QWORD *)a1 + 8LL))(a1, v3); /*0x19392*/
  }
  return result; /*0x193a8*/
}

// Function: j_nullsub_1 @ 0x193b0 (0x5 bytes)
// Index: 705/906

// attributes: thunk
__int64 __fastcall j_nullsub_1(__int64 a1)
{
  return nullsub_1(a1);
}

// Function: RstDeviceInfoToBuffer @ 0x193b8 (0x65 bytes)
// Index: 706/906

__int64 __fastcall RstDeviceInfoToBuffer(__int64 i, _DWORD *a2)
{
  __int64 result; // rax

  MemZero((_BYTE *)i, 0, 16); /*0x193ce*/
  RstStringCopyN(i, (__int64)(a2 + 7), 16); /*0x193e0*/
  *(_DWORD *)(i + 16) = a2[22]; /*0x193e8*/
  *(_DWORD *)(i + 32) = HIDWORD(*((_QWORD *)a2 + 11)); /*0x193f3*/
  *(_DWORD *)(i + 20) = a2[24]; /*0x193f9*/
  result = (unsigned int)a2[34]; /*0x193fc*/
  *(_DWORD *)(i + 28) = -1; /*0x19402*/
  *(_DWORD *)(i + 24) = result; /*0x1940b*/
  *(_QWORD *)(i + 36) = 0; /*0x1940e*/
  *(_DWORD *)(i + 44) = 0; /*0x19413*/
  return result; /*0x19417*/
}

// Function: RstBufferCombine32to64 @ 0x19420 (0xe bytes)
// Index: 707/906

unsigned __int64 __fastcall RstBufferCombine32to64(__int64 Source)
{
  return *(unsigned int *)(Source + 16) + ((unsigned __int64)*(unsigned int *)(Source + 32) << 32); /*0x1942d*/
}

// Function: RstDeviceSetJournalMode @ 0x19430 (0x57 bytes)
// Index: 708/906

__int64 __fastcall RstDeviceSetJournalMode(__int64 a1, char a2)
{
  __int64 result; // rax
  __int64 v5; // rax
  __int64 v6; // rdx

  result = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), a1); /*0x19451*/
  if ( result ) /*0x19459*/
  {
    v5 = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), a1); /*0x1946c*/
    LOBYTE(v6) = a2; /*0x19471*/
    return RstJournalDeviceSetMode(v5, v6); /*0x19477*/
  }
  return result; /*0x19481*/
}

// Function: RstDeviceFindAndRemove @ 0x19488 (0x48 bytes)
// Index: 709/906

__int64 *__fastcall RstDeviceFindAndRemove(_BYTE *Source)
{
  __int64 *result; // rax
  __int64 *v3; // rax

  result = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), Source); /*0x194a2*/
  if ( result ) /*0x194aa*/
  {
    v3 = RstLinkedListFindByName(*(_QWORD *)(Source_16 + 216), Source); /*0x194bd*/
    return (__int64 *)RstDeviceIsActive(v3); /*0x194c5*/
  }
  return result; /*0x194ca*/
}

// Function: RstDeviceInfoCopy @ 0x194d0 (0x73 bytes)
// Index: 710/906

__int64 __fastcall RstDeviceInfoCopy(CHAR16 *Destination, __int64 i)
{
  __int64 result; // rax

  MemZero(Destination, 0, 16); /*0x194e6*/
  RstStringCopyN(Destination, i + 18, 16); /*0x194f8*/
  *((_DWORD *)Destination + 4) = *(_DWORD *)(*(_QWORD *)(i + 48) + 88LL); /*0x19505*/
  *((_DWORD *)Destination + 8) = HIDWORD(*(_QWORD *)(*(_QWORD *)(i + 48) + 88LL)); /*0x19515*/
  *((_DWORD *)Destination + 5) = *(_DWORD *)(*(_QWORD *)(i + 48) + 96LL); /*0x1951f*/
  result = *(_QWORD *)(i + 48); /*0x19522*/
  *((_DWORD *)Destination + 6) = *(_DWORD *)(result + 136); /*0x19531*/
  *(_QWORD *)(Destination + 18) = 0; /*0x19534*/
  *((_DWORD *)Destination + 11) = 0; /*0x19539*/
  return result; /*0x1953d*/
}

// Function: RstBufferSetTriple @ 0x19544 (0xc bytes)
// Index: 711/906

void __fastcall RstBufferSetTriple(_QWORD *a1, __int64 a2, __int64 a3, __int64 a4)
{
  *a1 = a2; /*0x19544*/
  a1[1] = a3; /*0x19547*/
  a1[2] = a4; /*0x1954b*/
}

// Function: RstBufferSetDouble @ 0x19550 (0x9 bytes)
// Index: 712/906

void __fastcall RstBufferSetDouble(__int64 a1, __int64 a2, __int64 a3)
{
  *(_QWORD *)(a1 + 8) = a2; /*0x19550*/
  *(_QWORD *)(a1 + 16) = a3; /*0x19554*/
}

// Function: RstHelper_955c @ 0x1955c (0x2c bytes)
// Index: 713/906

CHAR16 *RstHelper_955cnt64 a1)
{
  CHAR16 *result; // rax

  *(_DWORD *)a1 = 0; /*0x19562*/
  result = StrnCpy((CHAR16 *)(a1 + 4), "Intel Raid ISM Journaling Sig   ", 0x20u); /*0x19579*/
  *(_DWORD *)(a1 + 36) = 0; /*0x1957e*/
  return result; /*0x19582*/
}

// Function: RstBufferCopyEntry @ 0x19588 (0x19 bytes)
// Index: 714/906

__int64 __fastcall RstBufferCopyEntry(__int64 a1, __int64 a2, __int64 a3)
{
  __int64 result; // rax

  *(_DWORD *)(a1 + 36) = *(_DWORD *)(a2 + 64); /*0x1958b*/
  result = *(unsigned __int16 *)(*(_QWORD *)(*(_QWORD *)a3 + 136LL) + 64LL); /*0x19598*/
  *(_WORD *)(a1 + 40) = result; /*0x1959c*/
  return result; /*0x195a0*/
}

// Function: StrnCpy16_w @ 0x195a4 (0x25 bytes)
// Index: 715/906

bool StrnCpy16_w__int64 a1)
{
  return StrnCpy16("Intel Raid ISM Journaling Sig   ", (_BYTE *)(a1 + 4), 32) == 0; /*0x195c4*/
}

// Function: Assert_46 @ 0x195cc (0xb7 bytes)
// Index: 716/906

__int64 __fastcall Assert_46(CHAR16 *Source)
{
  char v2; // al
  CHAR16 *i_1; // rbx
  unsigned int v4; // eax
  int v5; // eax
  unsigned int v6; // eax
  _BYTE *i_2; // rcx
  unsigned int v8; // ebx
  _BYTE *i; // [rsp+20h] [rbp-18h] BYREF
  char v11; // [rsp+28h] [rbp-10h]
  __int16 n16; // [rsp+2Ah] [rbp-Eh]

  *(_DWORD *)Source = 0; /*0x195d6*/
  i = 0; /*0x195d9*/
  v11 = 0; /*0x195ee*/
  n16 = 16; /*0x195f3*/
  RstBufferPoolRealloc((__int64)&i, 0); /*0x195f8*/
  v2 = RstDebugEnabled(); /*0x195fd*/
  i_1 = (CHAR16 *)i; /*0x19602*/
  if ( v2 && !i ) /*0x1960e*/
  {
    DebugAssert("JdPplMpb.cpp", 0x43u, "framebuf.ptr()"); /*0x19621*/
    i_1 = (CHAR16 *)i; /*0x19626*/
  }
  MemZero(i_1, 0, 4096); /*0x19636*/
  StrnCpy(i_1, Source, 0x2Au); /*0x19647*/
  v4 = RstReturnAllOnes(); /*0x1964c*/
  v5 = RstCrc32(v4, (unsigned int *)i_1, 4096); /*0x1965c*/
  v6 = RstBitwiseNot(v5); /*0x19663*/
  i_2 = i; /*0x19668*/
  v8 = v6; /*0x1966d*/
  *(_DWORD *)Source = v6; /*0x1966f*/
  RstBufferPoolLock((__int64)i_2); /*0x19671*/
  return v8; /*0x1967d*/
}

// Function: RstJournalSuperblockInit @ 0x19684 (0x4c bytes)
// Index: 717/906

_QWORD *__fastcall RstJournalSuperblockInit(_QWORD *a1, __int64 a2)
{
  RstBufferInit(a1, 0x2000); /*0x19699*/
  a1[7] = a2; /*0x1969e*/
  *a1 = off_24058; /*0x196ae*/
  a1[1] = *(_QWORD *)(*(_QWORD *)(Source_16 + 208) + 8LL); /*0x196c3*/
  return a1; /*0x196ca*/
}

// Function: RstHelper_96d0 @ 0x196d0 (0x10e bytes)
// Index: 718/906

__int64 __fastcall RstHelper_96d0(__int64 a1, __int64 a2)
{
  int v4; // esi
  int v5; // esi
  __int64 v6; // rbx
  int v7; // edi
  __int64 v8; // rax
  int v9; // edi
  int v10; // ebx
  __int64 v11; // rax
  _BYTE *i; // [rsp+20h] [rbp-68h]
  _BYTE Source[80]; // [rsp+30h] [rbp-58h] BYREF

  RstConfigBlockZero((__int64)Source); /*0x196f6*/
  if ( *(_DWORD *)(a1 + 16) > (unsigned int)HiiLibReturnZero(a2) ) /*0x19708*/
  {
    v4 = *(_DWORD *)(a1 + 8); /*0x1970a*/
    v5 = HiiLibReturnZero(a2) + v4; /*0x1971a*/
    v6 = *(_DWORD *)(a1 + 16) / (unsigned int)HiiLibReturnZero(a2) - 1; /*0x19731*/
    v7 = *(_DWORD *)(a1 + 16) - HiiLibReturnZero(a2); /*0x19741*/
    v8 = RstCountDecrementBy2(a2); /*0x19743*/
    LODWORD(i) = v5; /*0x19764*/
    RstConfigBlockInitFrom(Source_16, 42, v8 - v6, v7, i, Source); /*0x19768*/
    j_Assert_18(a2, (__int64)Source); /*0x19775*/
  }
  v9 = *(_DWORD *)(a1 + 8); /*0x1977a*/
  v10 = HiiLibReturnZero(a2); /*0x1978a*/
  v11 = RstCountDecrementBy2(a2); /*0x1978c*/
  LODWORD(i) = v9; /*0x197aa*/
  RstConfigBlockInitFrom(Source_16, 42, v11, v10, i, Source); /*0x197ae*/
  return j_Assert_18(a2, (__int64)Source); /*0x197d8*/
}

// Function: RstDeviceNotifyRemoved @ 0x197e0 (0x7f bytes)
// Index: 719/906

__int64 *__fastcall RstDeviceNotifyRemoved(__int64 a1, __int64 a2)
{
  __int64 *result; // rax
  __int64 v4; // rdi
  __int64 i; // rbx
  int v6; // ecx

  result = (__int64 *)Source_16; /*0x197ef*/
  v4 = *(_QWORD *)(Source_16 + 216); /*0x197f9*/
  for ( i = *(_QWORD *)(v4 + 16); ; i = *result ) /*0x19800*/
  {
    *(_QWORD *)(v4 + 8) = i; /*0x19846*/
    if ( !i ) /*0x1984d*/
      break; /*0x1984d*/
    if ( *(_QWORD *)(i + 40) == *(_QWORD *)(a1 + 56) ) /*0x1980e*/
    {
      v6 = *(_DWORD *)(*(_QWORD *)(i + 48) + 136LL); /*0x19814*/
      if ( (v6 & 2) == 0 ) /*0x19820*/
      {
        if ( (v6 & 8) != 0 ) /*0x19828*/
        {
          LOBYTE(a2) = 1; /*0x1982e*/
          (***(void (__fastcall ****)(_QWORD, __int64))(i + 64))(*(_QWORD *)(i + 64), a2); /*0x19833*/
        }
        RstDeviceListEntrySetActive(i, 0); /*0x1983a*/
      }
    }
    result = *(__int64 **)(v4 + 8); /*0x1983f*/
  }
  return result; /*0x19859*/
}

// Function: RstDevicePathUpdateStatus @ 0x19860 (0x5e bytes)
// Index: 720/906

__int64 __fastcall RstDevicePathUpdateStatus(__int64 a1)
{
  __int64 v2; // rcx
  _BYTE *v3; // rax
  char v5; // [rsp+30h] [rbp+8h] BYREF

  v2 = *(_QWORD *)(a1 + 56); /*0x1986d*/
  v5 = 0; /*0x19871*/
  while ( 1 ) /*0x1989e*/
  {
    v3 = (_BYTE *)RstLargeArrayPop(v2, &v5); /*0x1989e*/
    if ( !v3 ) /*0x198a9*/
      break; /*0x198a9*/
    *(_BYTE *)(*(_QWORD *)(*(_QWORD *)v3 + 160LL) + 82LL) = RstDevicePathFindName(*(_QWORD *)(a1 + 8), v3 + 16)[90]; /*0x19892*/
    v2 = *(_QWORD *)(a1 + 56); /*0x19895*/
  }
  return nullsub_1(a1); /*0x198b8*/
}

// Function: RstDeviceSetOnlineFlags @ 0x198c0 (0xb7 bytes)
// Index: 721/906

__int64 __fastcall RstDeviceSetOnlineFlags(__int64 a1)
{
  __int64 v1; // rdx
  __int64 result; // rax
  __int64 v3; // rbp
  unsigned __int16 v5; // bx
  __int64 v6; // rax
  __int64 v7; // rsi
  int v8; // edx

  v1 = *(_QWORD *)(a1 + 8); /*0x198d9*/
  result = Source_16; /*0x198dd*/
  v3 = *(_QWORD *)(Source_16 + 216); /*0x198e7*/
  v5 = 0; /*0x198f1*/
  if ( *(_BYTE *)(v1 + 56) ) /*0x198f5*/
  {
    do /*0x1995a*/
    {
      v6 = RstLinkedListFindByName(v3, v1 + 48LL * v5 + 216); /*0x19910*/
      if ( v6 ) /*0x19918*/
      {
        v7 = *(_QWORD *)(v6 + 48); /*0x1991a*/
        v8 = *(_DWORD *)(v7 + 136); /*0x1991e*/
        if ( (v8 & 8) != 0 && (v8 & 2) != 0 ) /*0x19932*/
        {
          RstHelper_96d0(a1, v7); /*0x1993a*/
          RstDeviceSetFlags(v7, 256); /*0x19947*/
        }
      }
      v1 = *(_QWORD *)(a1 + 8); /*0x1994c*/
      ++v5; /*0x19950*/
      result = *(unsigned __int8 *)(v1 + 56); /*0x19953*/
    }
    while ( v5 < (unsigned __int16)result ); /*0x1995a*/
  }
  return result; /*0x19970*/
}

// Function: Assert_0 @ 0x19978 (0x345 bytes)
// Index: 722/906

__int64 *__fastcall Assert_0(__int64 a1)
{
  __int64 v2; // rcx
  UINTN Length; // rbx
  const CHAR16 *Source; // rax
  __int64 v5; // rcx
  CHAR16 *Destination; // rsi
  unsigned __int8 v7; // bl
  __int64 i; // rax
  __int64 v9; // rax
  __int16 n5; // r13
  __int64 v11; // r11
  unsigned __int8 n2; // cl
  __int16 n2_1; // r12
  unsigned __int8 n24; // al
  int n24_1; // ebx
  char *_1.0.00; // r12
  _BYTE *v17; // rbx
  __int64 Destination_1; // rax
  __int64 v19; // rax
  __int64 v20; // rbp
  __int64 v21; // rcx
  __int64 v22; // rbx
  int n4096; // eax
  unsigned int n6144; // eax
  unsigned int n6144_1; // ecx
  __int64 v26; // rdx
  unsigned __int8 v28; // [rsp+50h] [rbp+8h] BYREF

  if ( *(_DWORD *)(a1 + 36) ) /*0x1999a*/
  {
    RstHelper_89a4(a1, *(_QWORD *)(a1 + 40)); /*0x199a4*/
    v2 = *(_QWORD *)(a1 + 8); /*0x199a9*/
    Length = *(unsigned __int16 *)(v2 + 72); /*0x199ad*/
    Source = (const CHAR16 *)RstRaidSuperblockFind(v2); /*0x199b1*/
    StrnCpy(&Destination, Source, Length); /*0x199c3*/
  }
  RstHelper_8830(a1); /*0x199cb*/
  v5 = *(_QWORD *)(a1 + 56); /*0x199d4*/
  Destination = (CHAR16 *)(*(_QWORD *)(a1 + 8) + 216LL); /*0x199dd*/
  v7 = 0; /*0x199e4*/
  v28 = 0; /*0x199e7*/
  for ( i = RstSmallArrayPop(v5, &v28); i; i = RstSmallArrayPop(*(_QWORD *)(a1 + 56), &v28) ) /*0x199ec*/
  {
    *(_WORD *)(i + 16) = v7; /*0x199ff*/
    RstDeviceInfoCopy(Destination, i); /*0x19a06*/
    ++v7; /*0x19a14*/
    Destination += 24; /*0x19a17*/
  }
  *(_BYTE *)(*(_QWORD *)(a1 + 8) + 56LL) = v7; /*0x19a29*/
  v28 = 0; /*0x19a2c*/
  while ( 1 ) /*0x19bbe*/
  {
    v19 = RstLargeArrayPop(*(_QWORD *)(a1 + 56), &v28); /*0x19bbe*/
    v20 = v19; /*0x19bc3*/
    if ( !v19 ) /*0x19bc9*/
      break; /*0x19bc9*/
    if ( RstLinkedListFindByKey(Source_16, (_BYTE *)(v19 + 16)) ) /*0x19a41*/
    {
      v9 = RstDeviceGetParentOrSpare(v20, 0); /*0x19a54*/
      n5 = *(_WORD *)(v9 + 4); /*0x19a63*/
      v11 = v9; /*0x19a68*/
      n2 = *(_BYTE *)(*(_QWORD *)(a1 + 56) + 224LL); /*0x19a6b*/
      if ( n2 >= 2u ) /*0x19a71*/
        n2 = 2; /*0x19a73*/
      n2_1 = n2; /*0x19a7c*/
      if ( *(_BYTE *)(v9 + 6) > 0x18u ) /*0x19a80*/
        n24 = 24; /*0x19a88*/
      else
        n24 = *(_BYTE *)(v9 + 6); /*0x19a82*/
      n24_1 = n24; /*0x19a90*/
      if ( Assert_45(v11) ) /*0x19a93*/
        *(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 0x4000000u; /*0x19aa1*/
      if ( HIDWORD(*(_QWORD *)(v20 + 40)) ) /*0x19aaa*/
        *(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 0x20000000u; /*0x19ab7*/
      if ( *(_DWORD *)(a1 + 36) ) /*0x19abc*/
        *(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 0x8000000u; /*0x19ac6*/
      if ( n2_1 <= 1 && *(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) == 0x80000000 ) /*0x19ad5*/
      {
        _1.0.00 = "1.0.00"; /*0x19ae9*/
        if ( n5 == 1 ) /*0x19af0*/
          _1.0.00 = "1.1.00"; /*0x19af0*/
        if ( n24_1 >= 3 ) /*0x19afe*/
          _1.0.00 = "1.2.01"; /*0x19afe*/
        if ( n5 == 5 ) /*0x19b0e*/
          _1.0.00 = "1.2.02"; /*0x19b0e*/
        if ( n24_1 >= 5 ) /*0x19b1c*/
          _1.0.00 = "1.2.04"; /*0x19b1c*/
        goto LABEL_38; /*0x19b1c*/
      }
      _1.0.00 = "1.3.00"; /*0x19b22*/
      if ( !n5 ) /*0x19b2d*/
        *(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 1u; /*0x19b33*/
      if ( n5 != 1 ) /*0x19b3b*/
        goto LABEL_36; /*0x19b3b*/
      if ( (__int16)n24_1 < 4 ) /*0x19b45*/
        *(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 2u; /*0x19b4b*/
      if ( n24_1 > 3 ) /*0x19b52*/
      {
        *(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 4u; /*0x19b58*/
LABEL_36:
        if ( n5 == 5 ) /*0x19b60*/
          *(_DWORD *)(*(_QWORD *)(a1 + 8) + 52LL) |= 0x10u; /*0x19b66*/
      }
LABEL_38:
      v17 = (_BYTE *)(*(_QWORD *)(a1 + 8) + 24LL); /*0x19b6a*/
      if ( StrnCpy16(_1.0.00, v17, 0xFFFF) > 0 ) /*0x19b87*/
        RstStrCopy(v17, _1.0.00); /*0x19b8f*/
      RstDeviceCopyToConfigEntry(Destination, v20); /*0x19b9a*/
      Destination_1 = RstConfigBlockGetDataOffset((__int64)(Destination + 40), 0); /*0x19ba5*/
      ++*(_BYTE *)(*(_QWORD *)(a1 + 8) + 57LL); /*0x19bae*/
      Destination = (CHAR16 *)Destination_1; /*0x19bb2*/
    }
  }
  *(_DWORD *)(*(_QWORD *)(a1 + 8) + 72LL) = *(_DWORD *)(a1 + 36); /*0x19bd6*/
  v21 = *(_QWORD *)(a1 + 8); /*0x19bd9*/
  *(_DWORD *)(a1 + 16) = (_DWORD)Destination + *(_DWORD *)(v21 + 72) - v21; /*0x19be4*/
  if ( *(_DWORD *)(a1 + 36) ) /*0x19be7*/
    StrnCpy(Destination, &Destination, *(unsigned __int16 *)(v21 + 72)); /*0x19bfc*/
  *(_DWORD *)(*(_QWORD *)(a1 + 8) + 36LL) = *(_DWORD *)(a1 + 16); /*0x19c08*/
  RstProgressUpdate(a1); /*0x19c0e*/
  v22 = *(_QWORD *)(a1 + 56); /*0x19c13*/
  if ( RstDebugEnabled() && !*(_DWORD *)(v22 + 280) ) /*0x19c21*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x19c3d*/
  n4096 = *(_DWORD *)(v22 + 280); /*0x19c42*/
  if ( n4096 == 512 ) /*0x19c4d*/
  {
    n6144 = 6144; /*0x19c6f*/
    n6144_1 = (*(_DWORD *)(a1 + 16) + 511) & 0xFFFFFE00; /*0x19c7a*/
LABEL_51:
    if ( n6144_1 < n6144 ) /*0x19c82*/
      n6144 = n6144_1; /*0x19c82*/
    *(_DWORD *)(a1 + 16) = n6144; /*0x19c85*/
  }
  else if ( n4096 == 4096 ) /*0x19c54*/
  {
    n6144 = 0x2000; /*0x19c59*/
    n6144_1 = (*(_DWORD *)(a1 + 16) + 4095) & 0xFFFFF000; /*0x19c64*/
    goto LABEL_51; /*0x19c6a*/
  }
  RstDeviceSetOnlineFlags(a1); /*0x19c8b*/
  RstDevicePathUpdateStatus(a1); /*0x19c93*/
  return RstDeviceNotifyRemoved(a1, v26); /*0x19caf*/
}

// Function: Assert_97 @ 0x19cc0 (0x7f bytes)
// Index: 723/906

__int64 *__fastcall Assert_97(__int64 a1)
{
  __int64 v1; // r9
  unsigned __int8 i; // r8
  unsigned __int8 n2; // al
  int i_1; // ecx
  __int64 v6; // rcx
  __int64 *result; // rax

  v1 = *(_QWORD *)(a1 + 56); /*0x19cca*/
  for ( i = 0; ; ++i ) /*0x19cd4*/
  {
    n2 = *(_BYTE *)(v1 + 224); /*0x19cd7*/
    if ( n2 >= 2u ) /*0x19ce3*/
      n2 = 2; /*0x19ce5*/
    if ( i >= n2 ) /*0x19ced*/
      break; /*0x19ced*/
    i_1 = 1; /*0x19cf3*/
    if ( i < 2u ) /*0x19cfc*/
      i_1 = i; /*0x19cfc*/
    v6 = *(_QWORD *)(v1 + 8LL * i_1 + 232); /*0x19d02*/
    result = (__int64 *)(*(_DWORD *)(v6 + 48) >> 13); /*0x19d0d*/
    if ( (*(_DWORD *)(v6 + 48) & 0x2000) != 0 ) /*0x19d12*/
      return result; /*0x19d12*/
  }
  Assert_123(v1); /*0x19d1c*/
  return Assert_0(a1); /*0x19d39*/
}

// Function: RstRaidConfigFromHiiEntry @ 0x19d40 (0xa0 bytes)
// Index: 724/906

char __fastcall RstRaidConfigFromHiiEntry(__int64 a1, __int64 a2, __int64 a3, char a4)
{
  __int64 v8; // rax
  __int64 v9; // rcx
  __int64 v10; // rdx

  *(_DWORD *)(a1 + 8) = *(unsigned __int8 *)(a2 + 8); /*0x19d5e*/
  *(_DWORD *)(a1 + 12) = *(unsigned __int8 *)(a2 + 9); /*0x19d68*/
  *(_BYTE *)(a1 + 16) = *(_BYTE *)(a2 + 10); /*0x19d71*/
  v8 = RstBufferCombineLowHigh(a2); /*0x19d77*/
  v9 = *(_QWORD *)(a1 + 40); /*0x19d7c*/
  *(_QWORD *)(a1 + 24) = v8; /*0x19d84*/
  *(_DWORD *)(a1 + 32) = *(_DWORD *)(a2 + 4); /*0x19d8e*/
  *(_WORD *)(a1 + 36) = *(_WORD *)(a2 + 12); /*0x19d95*/
  *(_WORD *)(a1 + 38) = *(_WORD *)(a2 + 14); /*0x19d9d*/
  RstRaidConfigFromDiskInfoPopulate(v9, a2 + 32, a3); /*0x19da1*/
  if ( a4 || *(_DWORD *)(a1 + 8) ) /*0x19dab*/
    v10 = a2 + 4LL * *(unsigned __int8 *)(a2 + 48) + 80; /*0x19dbb*/
  else
    v10 = a2 + 32; /*0x19db1*/
  return RstRaidConfigFromDiskInfoPopulate(*(_QWORD *)(a1 + 48), v10, a3); /*0x19dd6*/
}

// Function: RstRaidConfigFromDiskInfo @ 0x19de0 (0x5f bytes)
// Index: 725/906

char __fastcall RstRaidConfigFromDiskInfo(__int64 a1, __int64 a2)
{
  __int64 v4; // rax
  __int64 v5; // rcx
  char result; // al

  *(_DWORD *)(a1 + 8) = *(_DWORD *)(a2 + 12); /*0x19df3*/
  *(_DWORD *)(a1 + 12) = *(_DWORD *)(a2 + 64); /*0x19df9*/
  *(_BYTE *)(a1 + 16) = *(_BYTE *)(a2 + 82); /*0x19dff*/
  v4 = RstDeviceGetDataPtr(a2); /*0x19e05*/
  v5 = *(_QWORD *)(a1 + 40); /*0x19e0a*/
  *(_QWORD *)(a1 + 24) = v4; /*0x19e0e*/
  *(_DWORD *)(a1 + 32) = *(_DWORD *)(a2 + 68); /*0x19e15*/
  result = RstRaidArrayCopyState(v5, *(_QWORD *)(a2 + 16)); /*0x19e1c*/
  if ( *(_DWORD *)(a1 + 8) ) /*0x19e21*/
    return RstRaidArrayCopyState(*(_QWORD *)(a1 + 48), *(_QWORD *)(a2 + 24)); /*0x19e2f*/
  return result; /*0x19e39*/
}

// Function: RstRaidMemberIsNvme @ 0x19e40 (0x51 bytes)
// Index: 726/906

char __fastcall RstRaidMemberIsNvme(__int64 a1)
{
  char v2; // bl
  __int64 v3; // rcx

  v2 = 0; /*0x19e5d*/
  if ( (unsigned __int8)RstDeviceListScanForType(*(_QWORD *)(a1 + 40)) ) /*0x19e58*/
    return 1; /*0x19e58*/
  if ( *(_DWORD *)(a1 + 8) == 1 ) /*0x19e67*/
  {
    v3 = *(_QWORD *)(a1 + 48); /*0x19e69*/
    if ( v3 ) /*0x19e70*/
    {
      if ( (unsigned __int8)RstDeviceListScanForType(v3) ) /*0x19e74*/
        return 1; /*0x19e7d*/
    }
  }
  return v2; /*0x19e8b*/
}

// Function: RstRaidConfigInfoInit @ 0x19e94 (0x65 bytes)
// Index: 727/906

__int64 __fastcall RstRaidConfigInfoInit(__int64 a1)
{
  __int64 v2; // rax
  __int64 v3; // rax
  __int64 v4; // rax
  __int64 v5; // rax

  v2 = RstMemPoolAlloc(264); /*0x19ea2*/
  if ( v2 ) /*0x19eaa*/
    v3 = RstBufferEntryZero(v2); /*0x19eaf*/
  else
    v3 = 0; /*0x19eb6*/
  *(_QWORD *)(a1 + 40) = v3; /*0x19ebd*/
  v4 = RstMemPoolAlloc(264); /*0x19ec1*/
  if ( v4 ) /*0x19ec9*/
    v5 = RstBufferEntryZero(v4); /*0x19ece*/
  else
    v5 = 0; /*0x19ed5*/
  *(_QWORD *)a1 = 0; /*0x19ed7*/
  *(_DWORD *)(a1 + 8) = 0; /*0x19edb*/
  *(_DWORD *)(a1 + 12) = 0; /*0x19edf*/
  *(_QWORD *)(a1 + 24) = 0; /*0x19ee3*/
  *(_QWORD *)(a1 + 48) = v5; /*0x19ee8*/
  *(_BYTE *)(a1 + 16) = 0; /*0x19eec*/
  return a1; /*0x19ef3*/
}

// Function: RstRaidEntryReset @ 0x19efc (0x41 bytes)
// Index: 728/906

__int64 __fastcall RstRaidEntryReset(__int64 a1)
{
  *(_DWORD *)(a1 + 8) = 0; /*0x19f0e*/
  *(_DWORD *)(a1 + 12) = 0; /*0x19f11*/
  *(_BYTE *)(a1 + 16) = 0; /*0x19f14*/
  *(_QWORD *)(a1 + 24) = 0; /*0x19f17*/
  *(_DWORD *)(a1 + 32) = 0; /*0x19f1b*/
  RstBufferInitEntry(*(_QWORD *)(a1 + 40)); /*0x19f22*/
  return RstBufferInitEntry(*(_QWORD *)(a1 + 48)); /*0x19f33*/
}

// Function: RstBufferSetHeader @ 0x19f40 (0xd bytes)
// Index: 729/906

void __fastcall RstBufferSetHeader(__int64 Source, __int16 n5, __int16 n8, int a4)
{
  *(_WORD *)Source = n5; /*0x19f40*/
  *(_WORD *)(Source + 2) = n8; /*0x19f43*/
  *(_DWORD *)(Source + 4) = a4; /*0x19f48*/
}

// Function: RstBufferSetPointer @ 0x19f50 (0x8 bytes)
// Index: 730/906

void __fastcall RstBufferSetPointer(__int64 a1, __int64 a2)
{
  *(_QWORD *)a1 = a2; /*0x19f50*/
  *(_BYTE *)(a1 + 8) = 0; /*0x19f53*/
}

// Function: Assert_112 @ 0x19f58 (0x30 bytes)
// Index: 731/906

__int64 Assert_112int64 a1, __int64 a2, __int64 a3, unsigned int a4)
{
  Assert_8(a1, a2, a3, a4); /*0x19f61*/
  *(_WORD *)(a1 + 40) = 0; /*0x19f68*/
  *(_DWORD *)(a1 + 96) = 0; /*0x19f6c*/
  *(_BYTE *)(a1 + 93) = *(_BYTE *)(a1 + 42); /*0x19f79*/
  *(_QWORD *)a1 = off_24068; /*0x19f7f*/
  return a1; /*0x19f82*/
}

// Function: RstRaidMemberMapLinearIndex @ 0x19f88 (0x42 bytes)
// Index: 732/906

unsigned __int64 __fastcall RstRaidMemberMapLinearIndex(__int64 a1, unsigned __int64 a2, _BYTE *a3, _QWORD *a4)
{
  unsigned __int64 v4; // rax
  unsigned __int64 result; // rax

  v4 = (a2 >> *(_BYTE *)(a1 + 74)) / *(unsigned __int8 *)(a1 + 42); /*0x19fa9*/
  *a3 = (a2 >> *(_BYTE *)(a1 + 74)) % *(unsigned __int8 *)(a1 + 42); /*0x19fac*/
  result = v4 << *(_BYTE *)(a1 + 74); /*0x19fbb*/
  *a4 = result + (a2 & *(_WORD *)(a1 + 76)); /*0x19fc1*/
  return result; /*0x19fc9*/
}

// Function: RstProtocolCallEntry @ 0x19fcc (0x7 bytes)
// Index: 733/906

__int64 __fastcall RstProtocolCallEntry(__int64 a1)
{
  return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 24LL))(a1);
}

// Function: RstRaidConfigUpdateDevices @ 0x19fd4 (0x61 bytes)
// Index: 734/906

void __fastcall RstRaidConfigUpdateDevices(__int64 a1)
{
  unsigned __int16 i; // di

  for ( i = 0; i < *(unsigned __int8 *)(a1 + 42); ++i ) /*0x19feb*/
  {
    if ( RstDeviceCheckOnline(*(_QWORD *)(a1 + 16 * (i + 7LL))) && *(_DWORD *)(a1 + 8) != 3 ) /*0x1a00d*/
      RstRaidMemberMarkRemoving(a1, 0xFFu); /*0x1a014*/
  }
}

// Function: RstRaidEntryFinalizeFromConfig @ 0x1a038 (0x60 bytes)
// Index: 735/906

__int64 __fastcall RstRaidEntryFinalizeFromConfig(__int64 a1, __int64 a2)
{
  if ( *(_DWORD *)(a1 + 8) == 3 ) /*0x1a045*/
    return RstRaidOpSetRetryState(a2); /*0x1a04a*/
  if ( *(_BYTE *)(a1 + 93) > 1u ) /*0x1a055*/
    RstHelper_54e8(a1, a2); /*0x1a057*/
  Assert_120(a2 + 96, 40, 0, *(_QWORD *)(a2 + 704), *(_DWORD *)(a2 + 712), *(_DWORD *)(a2 + 716), 255); /*0x1a085*/
  return RstRaidEntryFinalizeWithSize(a2); /*0x1a092*/
}

// Function: RstRaidEntryFinalizeWithAssert @ 0x1a098 (0x60 bytes)
// Index: 736/906

__int64 __fastcall RstRaidEntryFinalizeWithAssert(__int64 a1, __int64 a2)
{
  if ( *(_DWORD *)(a1 + 8) == 3 ) /*0x1a0a5*/
    return RstRaidOpSetRetryState(a2); /*0x1a0aa*/
  if ( *(_BYTE *)(a1 + 93) > 1u ) /*0x1a0b5*/
    RstHelper_54e8(a1, a2); /*0x1a0b7*/
  Assert_120(a2 + 96, 42, 0, *(_QWORD *)(a2 + 704), *(_DWORD *)(a2 + 712), *(_DWORD *)(a2 + 716), 255); /*0x1a0e5*/
  return RstRaidEntryFinalizeWithSize(a2); /*0x1a0f2*/
}

// Function: Assert_100 @ 0x1a0f8 (0x60 bytes)
// Index: 737/906

__int64 Assert_100__int64 a1, __int64 a2, __int64 a3, unsigned int a4)
{
  int v6; // ecx
  int v7; // edx

  Assert_8(a1, a2, a3, a4); /*0x1a108*/
  v6 = *(_DWORD *)(a1 + 88); /*0x1a10d*/
  *(_WORD *)(a1 + 40) = 1; /*0x1a118*/
  *(_DWORD *)(a1 + 96) = 0; /*0x1a123*/
  *(_QWORD *)a1 = off_24090; /*0x1a127*/
  v7 = *(unsigned __int8 *)(a3 + 40); /*0x1a12a*/
  *(_DWORD *)(a1 + 88) = v7 * v6; /*0x1a136*/
  LOBYTE(v6) = *(_BYTE *)(a1 + 42); /*0x1a139*/
  *(_BYTE *)(a1 + 100) = v7; /*0x1a13e*/
  *(_WORD *)(a1 + 108) = 0; /*0x1a141*/
  *(_BYTE *)(a1 + 93) = v6; /*0x1a149*/
  *(_BYTE *)(a1 + 110) = (_BYTE)v6 != (unsigned __int8)v7; /*0x1a14c*/
  return a1; /*0x1a152*/
}

// Function: RstRaidMemberMapContinuousIndex @ 0x1a158 (0x4b bytes)
// Index: 738/906

unsigned __int64 __fastcall RstRaidMemberMapContinuousIndex(__int64 a1, unsigned __int64 a2, _BYTE *a3, _QWORD *a4)
{
  unsigned __int64 v4; // rax
  unsigned __int64 v5; // rtt
  unsigned __int64 result; // rax

  v5 = *(unsigned __int8 *)(a1 + 100) * (a2 >> *(_BYTE *)(a1 + 74)); /*0x1a182*/
  v4 = v5 / *(unsigned __int8 *)(a1 + 42); /*0x1a182*/
  *a3 = v5 % *(unsigned __int8 *)(a1 + 42); /*0x1a185*/
  result = v4 << *(_BYTE *)(a1 + 74); /*0x1a194*/
  *a4 = result + (a2 & *(_WORD *)(a1 + 76)); /*0x1a19a*/
  return result; /*0x1a1a2*/
}

// Function: RstRaidMemberMapStripedIndex @ 0x1a1a4 (0x56 bytes)
// Index: 739/906

unsigned __int64 __fastcall RstRaidMemberMapStripedIndex(__int64 a1, unsigned __int64 a2, _BYTE *a3, _QWORD *a4)
{
  unsigned __int64 v5; // r9
  unsigned __int64 v6; // rtt
  unsigned __int64 result; // rax

  v5 = *(unsigned __int8 *)(a1 + 42); /*0x1a1c7*/
  v6 = *(unsigned __int8 *)(a1 + 100) * (a2 >> *(_BYTE *)(a1 + 74)) + 1; /*0x1a1d6*/
  *a3 = v6 % v5; /*0x1a1d9*/
  result = (v6 / v5) << *(_BYTE *)(a1 + 74); /*0x1a1eb*/
  *a4 = result + (a2 & *(_WORD *)(a1 + 76)); /*0x1a1f1*/
  return result; /*0x1a1f9*/
}

// Function: RstRaidMemberOnlineCount @ 0x1a1fc (0xf8 bytes)
// Index: 740/906

__int64 __fastcall RstRaidMemberOnlineCount(__int64 a1)
{
  unsigned __int8 v1; // r8
  __int64 result; // rax
  unsigned __int16 v4; // di
  unsigned __int8 v5; // r13
  int v6; // esi
  unsigned __int16 v7; // bp
  unsigned __int8 v8; // r12
  int v9; // edx
  int v10; // et2
  __int64 v11; // rcx

  v1 = *(_BYTE *)(a1 + 100); /*0x1a219*/
  result = *(unsigned __int8 *)(a1 + 42); /*0x1a21e*/
  v4 = 0; /*0x1a22b*/
  v5 = 0; /*0x1a22f*/
  if ( (int)(result * v1) > 0 ) /*0x1a238*/
  {
    v6 = 0; /*0x1a23a*/
    do /*0x1a2ab*/
    {
      v7 = 0; /*0x1a241*/
      v8 = v5; /*0x1a245*/
      if ( v6 < v6 + v1 ) /*0x1a24c*/
      {
        v9 = v6; /*0x1a24e*/
        do /*0x1a28a*/
        {
          v10 = v9 % *(unsigned __int8 *)(a1 + 42); /*0x1a257*/
          v11 = 2 * (v10 + 7LL); /*0x1a260*/
          if ( *(_BYTE *)(a1 + 16 * (v10 + 7LL) + 8) || RstDeviceCheckOnline(*(_QWORD *)(a1 + 8 * v11)) ) /*0x1a26e*/
            ++v7; /*0x1a278*/
          v9 = ++v8; /*0x1a284*/
        }
        while ( v8 < v6 + *(unsigned __int8 *)(a1 + 100) ); /*0x1a28a*/
      }
      v1 = *(_BYTE *)(a1 + 100); /*0x1a28c*/
      result = *(unsigned __int8 *)(a1 + 42); /*0x1a290*/
      if ( v4 < v7 ) /*0x1a297*/
        v4 = v7; /*0x1a297*/
      v5 += v1; /*0x1a29b*/
      v6 = v5; /*0x1a2a2*/
    }
    while ( v5 < (int)(result * v1) ); /*0x1a2ab*/
  }
  if ( *(_DWORD *)(a1 + 8) != 3 ) /*0x1a2b1*/
  {
    result = *(unsigned __int8 *)(a1 + 100); /*0x1a2b3*/
    if ( v4 == (_WORD)result ) /*0x1a2ba*/
    {
      return RstRaidMemberMarkRemoving(a1, 0xFFu); /*0x1a2c1*/
    }
    else if ( v4 ) /*0x1a2cc*/
    {
      *(_DWORD *)(a1 + 8) = 2; /*0x1a2ce*/
    }
  }
  return result; /*0x1a2e9*/
}

// Function: RstRaidEntryFinalizeTransferEx @ 0x1a2f4 (0x32 bytes)
// Index: 741/906

__int64 __fastcall RstRaidEntryFinalizeTransferEx(__int64 a1, __int64 a2)
{
  if ( *(_DWORD *)(a1 + 8) == 3 ) /*0x1a301*/
    return RstRaidOpSetRetryState(a2); /*0x1a306*/
  if ( *(_BYTE *)(a1 + 110) ) /*0x1a30d*/
    RstHelper_54e8(a1, a2); /*0x1a313*/
  return RstRaidEntryFinalizeTransfer(a2); /*0x1a320*/
}

// Function: RstRaidMapTransferEntry @ 0x1a328 (0x177 bytes)
// Index: 742/906

__int64 __fastcall RstRaidMapTransferEntry(__int64 a1, __int64 a2)
{
  int n3; // eax
  int v6; // ebx
  unsigned int v7; // eax
  unsigned __int16 v8; // bp
  unsigned __int64 i; // r12
  __int16 v10; // cx
  unsigned __int64 i_1; // rbx
  unsigned __int8 v12; // al
  __int16 v13; // ax
  unsigned __int8 v14; // [rsp+60h] [rbp+8h] BYREF
  char v15; // [rsp+70h] [rbp+18h] BYREF

  if ( *(_BYTE *)(a1 + 110) ) /*0x1a347*/
    RstHelper_54e8(a1, a2); /*0x1a34d*/
  n3 = *(_DWORD *)(a1 + 8); /*0x1a352*/
  if ( n3 >= 0 ) /*0x1a358*/
  {
    if ( n3 <= 1 ) /*0x1a367*/
    {
      v13 = *(unsigned __int8 *)(a1 + 100); /*0x1a468*/
      if ( ++*(_WORD *)(a1 + 108) == v13 ) /*0x1a475*/
        *(_WORD *)(a1 + 108) = 0; /*0x1a477*/
    }
    else if ( n3 == 2 ) /*0x1a370*/
    {
      v6 = RstRaidMapTranslateAddress((unsigned __int16 *)a1, *(_QWORD *)(a2 + 704)); /*0x1a39a*/
      v7 = RstHelper_525c(a1); /*0x1a39c*/
      v8 = 0; /*0x1a3bf*/
      for ( i = RstSizeToBlocks(a1, v6 + *(_DWORD *)(a2 + 712) / v7 + *(unsigned __int16 *)(a1 + 76)); /*0x1a3c6*/
            v8 < *(unsigned __int8 *)(a1 + 100);
            ++v8 )
      {
        v10 = *(unsigned __int8 *)(a1 + 100); /*0x1a3d0*/
        if ( ++*(_WORD *)(a1 + 108) == v10 ) /*0x1a3dd*/
          *(_WORD *)(a1 + 108) = 0; /*0x1a3df*/
        RstVtableDispatch34(a1, *(unsigned __int16 *)(a1 + 108), *(_QWORD *)(a2 + 704), (__int64)&v14, (__int64)&v15); /*0x1a401*/
        i_1 = 0; /*0x1a406*/
        if ( i ) /*0x1a40c*/
        {
          v12 = v14; /*0x1a40e*/
          do /*0x1a44e*/
          {
            if ( *(_BYTE *)(a1 + 16 * (v12 + 7LL) + 8) || RstDeviceCheckOnline(*(_QWORD *)(a1 + 16 * (v12 + 7LL))) ) /*0x1a427*/
              break; /*0x1a42f*/
            v12 = *(_BYTE *)(a1 + 100) + v14; /*0x1a435*/
            v14 = v12; /*0x1a438*/
            if ( v12 >= *(_BYTE *)(a1 + 42) ) /*0x1a43f*/
            {
              v12 -= *(_BYTE *)(a1 + 42); /*0x1a441*/
              v14 = v12; /*0x1a444*/
            }
            ++i_1; /*0x1a448*/
          }
          while ( i_1 < i ); /*0x1a44e*/
        }
        if ( i_1 == i ) /*0x1a453*/
          break; /*0x1a453*/
      }
    }
    else if ( n3 == 3 ) /*0x1a375*/
    {
      return RstRaidOpSetRetryState(a2); /*0x1a383*/
    }
  }
  return RstRaidStatusAssertAndDetermine(a2, *(_WORD *)(a1 + 108)); /*0x1a492*/
}

// Function: Assert_52 @ 0x1a4a0 (0xad bytes)
// Index: 743/906

__int64 __fastcall Assert_52(__int64 a1, __int64 a2)
{
  __int64 v2; // r8
  __int64 v4; // rdx
  unsigned __int64 v5; // rcx
  __int64 v6; // rbx

  *(_DWORD *)(a1 + 76) = 0; /*0x1a4aa*/
  *(_QWORD *)(a1 + 80) = 0; /*0x1a4ae*/
  *(_QWORD *)(a1 + 88) = 0; /*0x1a4b3*/
  *(_QWORD *)a1 = a2; /*0x1a4b8*/
  v2 = *(_QWORD *)(a2 + 16); /*0x1a4bb*/
  *(_QWORD *)(a1 + 8) = v2; /*0x1a4c2*/
  if ( *(_DWORD *)(a2 + 12) ) /*0x1a4c6*/
    v2 = *(_QWORD *)(a2 + 24); /*0x1a4cc*/
  v4 = *(_QWORD *)(a1 + 8); /*0x1a4d0*/
  *(_QWORD *)(a1 + 16) = v2; /*0x1a4d4*/
  v5 = *(_QWORD *)(v2 + 32) + *(_QWORD *)(v2 + 56) * *(unsigned __int16 *)(v2 + 72); /*0x1a4e6*/
  if ( *(_QWORD *)(v4 + 32) + *(_QWORD *)(v4 + 56) * (unsigned __int64)*(unsigned __int16 *)(v4 + 72) >= v5 ) /*0x1a4f6*/
    v6 = *(_QWORD *)(v4 + 32) + *(_QWORD *)(v4 + 56) * *(unsigned __int16 *)(v4 + 72); /*0x1a511*/
  else
    v6 = *(_QWORD *)(v2 + 32) + *(_QWORD *)(v2 + 56) * *(unsigned __int16 *)(v2 + 72); /*0x1a502*/
  if ( (unsigned __int8)RstDebugEnabled(v5, v4) && (v6 & 7) != 0 ) /*0x1a521*/
    DebugAssert("DsMgr.cpp", 0x58u, "( dsRecPba & (U64)7 ) == 0"); /*0x1a536*/
  *(_QWORD *)(a1 + 32) = v6; /*0x1a53b*/
  return a1; /*0x1a547*/
}

// Function: RstRaidCollectActiveDisks @ 0x1a550 (0xc7 bytes)
// Index: 744/906

__int64 __fastcall RstRaidCollectActiveDisks(__int64 *Length, _BYTE *a2, __int64 a3)
{
  __int64 result; // rax
  unsigned __int8 i; // di
  int n23; // ecx
  __int64 v9; // rbp
  unsigned __int8 v10; // cl
  _UNKNOWN *retaddr; // [rsp+28h] [rbp+0h] BYREF

  result = (__int64)&retaddr; /*0x1a550*/
  for ( i = 0; i < *(_BYTE *)(a3 + 42); ++i ) /*0x1a575*/
  {
    n23 = 23; /*0x1a583*/
    if ( i < 0x18u ) /*0x1a588*/
      n23 = i; /*0x1a588*/
    result = 2 * (n23 + 7LL); /*0x1a592*/
    v9 = *(_QWORD *)(a3 + 16 * (n23 + 7LL)); /*0x1a595*/
    if ( (*(_BYTE *)(v9 + 136) & 0x18) != 0 ) /*0x1a5a0*/
    {
      if ( *(_DWORD *)(a3 + 8) != 2 /*0x1a5cc*/
        || !RstRaidMemberCheckActive(a3, *(_QWORD *)(a3 + 16 * (n23 + 7LL)))
        || (*(_DWORD *)(v9 + 136) & 4) != 0
        || (result = *(_QWORD *)(a3 + 16), *(_DWORD *)(result + 12) == 1) )
      {
        v10 = 0; /*0x1a5ce*/
        if ( *a2 ) /*0x1a5d0*/
        {
          while ( 1 ) /*0x1a5d4*/
          {
            result = v10; /*0x1a5d4*/
            if ( Length[v10] == v9 ) /*0x1a5db*/
              break; /*0x1a5db*/
            if ( ++v10 >= *a2 ) /*0x1a5e1*/
              goto LABEL_12; /*0x1a5e1*/
          }
        }
        else
        {
LABEL_12:
          if ( *a2 >= 0x18u ) /*0x1a5e6*/
          {
            while ( 1 ) /*0x1a615*/
              ; /*0x1a615*/
          }
          result = (unsigned __int8)*a2; /*0x1a5e8*/
          Length[result] = v9; /*0x1a5eb*/
          ++*a2; /*0x1a5ef*/
        }
      }
    }
  }
  return result; /*0x1a60e*/
}

// Function: RstRaidMemberFindAndSetActive @ 0x1a618 (0x50 bytes)
// Index: 745/906

void __fastcall RstRaidMemberFindAndSetActive(__int64 a1, __int64 a2)
{
  unsigned __int8 n23_1; // dl
  int n23; // r8d

  n23_1 = 0; /*0x1a621*/
  if ( *(_BYTE *)(a1 + 42) ) /*0x1a626*/
  {
    while ( 1 ) /*0x1a631*/
    {
      n23 = 23; /*0x1a631*/
      if ( n23_1 < 0x18u ) /*0x1a637*/
        n23 = n23_1; /*0x1a637*/
      if ( *(_QWORD *)(a1 + 16 * (n23 + 7LL)) == a2 ) /*0x1a649*/
        break; /*0x1a649*/
      if ( ++n23_1 >= *(_BYTE *)(a1 + 42) ) /*0x1a650*/
        return; /*0x1a650*/
    }
    RstRaidSetMemberActive(a1, n23_1); /*0x1a654*/
    (**(void (__fastcall ***)(__int64))a1)(a1); /*0x1a65f*/
  }
}

// Function: RstRaidMemberNotifyChange @ 0x1a668 (0x52 bytes)
// Index: 746/906

__int64 __fastcall RstRaidMemberNotifyChange(_QWORD *a1)
{
  __int64 v2; // rdx
  __int64 v3; // rcx
  __int64 (__fastcall ***v4)(_QWORD, __int64); // rcx

  RstRaidMemberFindAndSetActive(a1[1]); /*0x1a67c*/
  v3 = a1[2]; /*0x1a681*/
  if ( a1[1] != v3 ) /*0x1a689*/
    RstRaidMemberFindAndSetActive(v3); /*0x1a68e*/
  LOBYTE(v2) = 1; /*0x1a696*/
  v4 = *(__int64 (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(*(_QWORD *)(*a1 + 32LL) + 144LL) + 248LL); /*0x1a6a3*/
  return (**v4)(v4, v2);
}

// Function: Assert_37 @ 0x1a6bc (0x100 bytes)
// Index: 747/906

void __fastcall Assert_37(__int64 *a1, __int64 a2)
{
  int v4; // ebp
  unsigned __int8 n23_3; // bl
  __int64 v6; // r8
  int n23_1; // edx
  __int64 v8; // r9
  int n23; // ecx
  _QWORD *v10; // rax
  __int64 v11; // rdx
  int n23_2; // ecx
  _QWORD *v13; // rax

  v4 = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(*a1 + 32) + 144LL) + 248LL) + 28LL); /*0x1a6eb*/
  n23_3 = 0; /*0x1a6f4*/
  if ( RstDebugEnabled() && !a2 ) /*0x1a6fd*/
    DebugAssert("DsMgr.cpp", 0x153u, "a_pDisk"); /*0x1a712*/
  v6 = *a1; /*0x1a717*/
  LOBYTE(n23_1) = 0; /*0x1a71a*/
  v8 = *(_QWORD *)(*a1 + 16); /*0x1a722*/
  if ( *(_BYTE *)(v8 + 42) ) /*0x1a726*/
  {
    while ( 1 ) /*0x1a732*/
    {
      n23 = 23; /*0x1a732*/
      if ( (unsigned __int8)n23_1 < 0x18u ) /*0x1a735*/
        n23 = (unsigned __int8)n23_1; /*0x1a735*/
      v10 = (_QWORD *)(v8 + 16 * (n23 + 7LL)); /*0x1a743*/
      if ( v10 ) /*0x1a746*/
      {
        if ( *v10 == a2 ) /*0x1a74b*/
          break; /*0x1a74b*/
      }
      LOBYTE(n23_1) = n23_1 + 1; /*0x1a74d*/
      if ( (unsigned __int8)n23_1 >= *(_BYTE *)(v8 + 42) ) /*0x1a753*/
        goto LABEL_10; /*0x1a753*/
    }
    n23_1 = (unsigned __int8)n23_1; /*0x1a788*/
  }
  else
  {
LABEL_10:
    v11 = *(_QWORD *)(v6 + 24); /*0x1a755*/
    if ( !*(_BYTE *)(v11 + 42) ) /*0x1a75c*/
      return; /*0x1a75c*/
    while ( 1 ) /*0x1a764*/
    {
      n23_2 = 23; /*0x1a764*/
      if ( n23_3 < 0x18u ) /*0x1a767*/
        n23_2 = n23_3; /*0x1a767*/
      v13 = (_QWORD *)(v11 + 16 * (n23_2 + 7LL)); /*0x1a775*/
      if ( v13 ) /*0x1a778*/
      {
        if ( *v13 == a2 ) /*0x1a77d*/
          break; /*0x1a77d*/
      }
      if ( ++n23_3 >= *(_BYTE *)(v11 + 42) ) /*0x1a784*/
        return; /*0x1a784*/
    }
    n23_1 = n23_3; /*0x1a78d*/
  }
  Assert_15(*(CHAR16 ***)(*(_QWORD *)(*(_QWORD *)(v6 + 32) + 136LL) + 72LL), n23_1, v4); /*0x1a7a2*/
}

// Function: Assert_126 @ 0x1a7bc (0x62 bytes)
// Index: 748/906

char Assert_126__int64 a1, __int64 a2, __int64 Length)
{
  Assert_89(Source_16, Length, 40, a2, 4096, *(_DWORD *)(a1 + 104)); /*0x1a7eb*/
  if ( !*(_WORD *)(Source_16 + 2720) ) /*0x1a7f7*/
    return 1; /*0x1a811*/
  RstRaidMemberNotifyChange((_QWORD *)a1); /*0x1a808*/
  return 0; /*0x1a818*/
}

// Function: Assert_61 @ 0x1a820 (0x80 bytes)
// Index: 749/906

void __fastcall Assert_61(_QWORD *a1)
{
  __int64 v2; // rdi
  __int64 v3; // rcx
  CHAR16 *Destination; // rax

  v2 = *(_QWORD *)(*(_QWORD *)(*a1 + 32LL) + 136LL); /*0x1a834*/
  if ( v2 && (v3 = *(_QWORD *)(v2 + 72)) != 0 && RstDeviceDerefPtr(v3) ) /*0x1a849*/
  {
    Destination = (CHAR16 *)RstDeviceDerefPtr(*(_QWORD *)(v2 + 72)); /*0x1a857*/
    a1[14] = (unsigned int)RstHelper_1d9c(Destination, 1); /*0x1a869*/
  }
  else
  {
    if ( RstDebugEnabled() ) /*0x1a86f*/
      DebugAssert("DsMgr.cpp", 0x18Au, "((BOOLEAN)(0==1))"); /*0x1a88b*/
    a1[14] = 0; /*0x1a890*/
  }
}

// Function: Assert_3 @ 0x1a8a0 (0x29a bytes)
// Index: 750/906

void __fastcall Assert_3(_QWORD *a1)
{
  unsigned __int8 n2_1; // r14
  __int64 v3; // rbp
  __int64 v4; // rdi
  unsigned int v5; // ebx
  unsigned __int64 v6; // r12
  char v7; // r15
  unsigned __int64 v8; // r13
  unsigned __int8 n2; // cl
  int n2_2; // ecx
  __int64 v11; // rdx
  __int64 v12; // rdx
  __int64 v13; // rcx
  unsigned __int64 v14; // r8
  unsigned __int64 v15; // rbx
  unsigned __int64 v16; // rax
  unsigned int v17; // ebx
  unsigned __int64 v18; // rdi
  __int64 v19; // rax
  unsigned __int64 v20; // rdi

  n2_1 = 0; /*0x1a8bf*/
  v3 = *(_QWORD *)(*(_QWORD *)(*a1 + 32LL) + 136LL); /*0x1a8c9*/
  if ( !v3 || !*(_QWORD *)(v3 + 8) ) /*0x1a8d5*/
  {
    if ( RstDebugEnabled() ) /*0x1a8db*/
      DebugAssert("DsMgr.cpp", 0x195u, "((BOOLEAN)(0==1))"); /*0x1a8f8*/
    a1[14] = 0; /*0x1a8fd*/
  }
  v4 = *(_QWORD *)(v3 + 8); /*0x1a901*/
  if ( RstDebugEnabled() && !*(_DWORD *)(v4 + 280) ) /*0x1a91c*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x1a932*/
  v5 = *(_DWORD *)(v4 + 280); /*0x1a937*/
  if ( RstDebugEnabled() && !*(_DWORD *)(v4 + 280) ) /*0x1a947*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x1a95d*/
  v6 = 0x1000 / v5 + ((unsigned int)&loc_1FFFA + 6) / *(_DWORD *)(v4 + 280); /*0x1a97b*/
  if ( RstDebugEnabled() && !*(_DWORD *)(v4 + 280) ) /*0x1a988*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x1a99e*/
  v7 = 0; /*0x1a9aa*/
  v8 = 0x100000u / *(_DWORD *)(v4 + 280); /*0x1a9b3*/
  while ( 1 ) /*0x1a9bc*/
  {
    n2 = *(_BYTE *)(v4 + 224); /*0x1a9bc*/
    if ( n2 >= 2u ) /*0x1a9c1*/
      n2 = 2; /*0x1a9c3*/
    if ( n2_1 >= n2 ) /*0x1a9cb*/
      break; /*0x1a9cb*/
    n2_2 = 1; /*0x1a9d9*/
    if ( n2_1 < 2u ) /*0x1a9de*/
      n2_2 = n2_1; /*0x1a9de*/
    v11 = *(_QWORD *)(v4 + 8LL * n2_2 + 232); /*0x1a9e4*/
    if ( v11 != v3 ) /*0x1a9ef*/
    {
      v12 = *(_QWORD *)(v11 + 56); /*0x1a9f5*/
      v13 = *(_QWORD *)(v12 + 48); /*0x1a9f9*/
      if ( v13 ) /*0x1aa00*/
        v14 = *(_QWORD *)(v13 + 8); /*0x1aa02*/
      else
        v14 = *(_QWORD *)(*(_QWORD *)(v12 + 40) + 8LL); /*0x1aa0c*/
      v15 = *(_QWORD *)(*(_QWORD *)(v12 + 40) + 8LL); /*0x1aa14*/
      if ( v15 >= v14 && v13 ) /*0x1aa20*/
        v15 = *(_QWORD *)(v13 + 8); /*0x1aa22*/
      if ( v15 > a1[4] ) /*0x1aa2a*/
      {
        v7 = 1; /*0x1aa2f*/
        v16 = v15 - a1[4]; /*0x1aa32*/
        if ( v16 >= v8 ) /*0x1aa39*/
        {
          a1[14] = v8; /*0x1aa71*/
        }
        else if ( v16 >= v6 ) /*0x1aa3e*/
        {
          a1[14] = v6; /*0x1aa6b*/
        }
        else
        {
          if ( RstDebugEnabled() ) /*0x1aa40*/
            DebugAssert("DsMgr.cpp", 0x1ADu, "((BOOLEAN)(0==1))"); /*0x1aa5c*/
          a1[14] = v15 - a1[4]; /*0x1aa65*/
        }
      }
    }
    ++n2_1; /*0x1aa75*/
  }
  if ( !v7 ) /*0x1aa80*/
  {
    if ( RstDebugEnabled() && !*(_DWORD *)(v4 + 280) ) /*0x1aa8f*/
      DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\ism\\CfgArray.h", 0x8Cu, "m_nBlockSize != ( 0 )"); /*0x1aaab*/
    v17 = *(_DWORD *)(v4 + 280); /*0x1aab0*/
    v18 = RstJournalFindMinLba(v4); /*0x1aac0*/
    v19 = a1[4]; /*0x1aad0*/
    v20 = v18 - (((unsigned int)&loc_1FFFA + 6) / v17 + 161); /*0x1aad8*/
    if ( v19 + v8 <= v20 ) /*0x1aade*/
    {
      a1[14] = v8; /*0x1ab19*/
    }
    else if ( v6 + v19 <= v20 ) /*0x1aae6*/
    {
      a1[14] = v6; /*0x1ab13*/
    }
    else
    {
      if ( RstDebugEnabled() ) /*0x1aae8*/
        DebugAssert("DsMgr.cpp", 0x1C6u, "((BOOLEAN)(0==1))"); /*0x1ab04*/
      a1[14] = v20 - a1[4]; /*0x1ab0d*/
    }
  }
}

// Function: RstHelper_ab3c @ 0x1ab3c (0xd6 bytes)
// Index: 751/906

__int64 RstHelper_ab3c_QWORD *a1, __int64 a2, __int64 Length, _BYTE *a4)
{
  unsigned int v7; // eax
  unsigned int v8; // edx
  __int64 v9; // r12
  __int64 v10; // rbp
  __int64 v11; // rax
  int v12; // ebx
  __int64 v13; // rcx
  unsigned int v14; // eax
  unsigned int v15; // eax
  __int64 v16; // rax
  __int64 result; // rax
  unsigned __int64 v18; // rdx

  v7 = HiiLibReturnZero(Length); /*0x1ab60*/
  v8 = 0x1000 % v7; /*0x1ab65*/
  v9 = 0; /*0x1ab6f*/
  v10 = 0x1000 / v7; /*0x1ab75*/
  v11 = a1[13]; /*0x1ab77*/
  v12 = *(_DWORD *)(v11 + 532); /*0x1ab7b*/
  *(_DWORD *)(v11 + 532) = 0; /*0x1ab81*/
  v14 = RstReturnAllOnes(v13, v8); /*0x1ab88*/
  v15 = RstCrc32(v14, (unsigned int *)a1[13], 4096); /*0x1ab99*/
  if ( v12 == (unsigned int)RstBitwiseNot(v15) ) /*0x1aba7*/
  {
    *a4 = 1; /*0x1abd2*/
    v18 = a1[4] + a1[14]; /*0x1abdf*/
    result = -1; /*0x1abe3*/
    a1[16] = a2; /*0x1abee*/
    if ( a2 + v10 + v10 <= v18 ) /*0x1abf5*/
      return a2 + v10; /*0x1abf5*/
  }
  else
  {
    v16 = a1[4]; /*0x1aba9*/
    if ( a2 == v16 ) /*0x1abb4*/
    {
      return 0; /*0x1abb6*/
    }
    else
    {
      if ( a2 + 1 + v10 <= (unsigned __int64)(v16 + a1[14]) ) /*0x1abc9*/
        return a2 + 1; /*0x1abc9*/
      return v9; /*0x1abcd*/
    }
  }
  return result; /*0x1ac08*/
}

// Function: Assert_138 @ 0x1ac14 (0xe8 bytes)
// Index: 752/906

bool __fastcall Assert_138(_QWORD *a1, __int64 Length)
{
  __int64 v2; // rbp
  unsigned __int64 v4; // r12
  _QWORD *v5; // rbx
  __int64 Length_1; // r8
  __int64 v7; // rsi
  __int64 v8; // rdx
  char v9; // di
  __int64 v11; // rax
  char v12; // [rsp+40h] [rbp+8h] BYREF

  a1[17] = 0; /*0x1ac2c*/
  v2 = a1[4]; /*0x1ac34*/
  v4 = 0; /*0x1ac3b*/
  v5 = a1; /*0x1ac3e*/
  Length_1 = Length; /*0x1ac41*/
  while ( 1 ) /*0x1acbe*/
  {
    v9 = Assert_126((__int64)a1, v2, Length_1); /*0x1acbe*/
    if ( !v9 ) /*0x1acc3*/
      return 0; /*0x1acc3*/
    v7 = v2; /*0x1ac54*/
    v12 = 0; /*0x1ac57*/
    v2 = RstHelper_ab3c(v5, v2, Length, &v12); /*0x1ac61*/
    if ( !v2 ) /*0x1ac67*/
      break; /*0x1ac67*/
    v8 = v5[13]; /*0x1ac6c*/
    if ( *(_DWORD *)(v8 + 512) == *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(*v5 + 32LL) + 144LL) + 248LL) + 28LL) /*0x1ac97*/
      && *(_QWORD *)(v8 + 520) > v4 )
    {
      if ( v12 ) /*0x1ac9e*/
      {
        v4 = *(_QWORD *)(v8 + 520); /*0x1aca0*/
        v5[17] = v7; /*0x1aca3*/
      }
    }
    if ( v2 == -1 ) /*0x1acae*/
      return v9 != 0; /*0x1acae*/
    Length_1 = Length; /*0x1acb0*/
    a1 = v5; /*0x1acb3*/
  }
  v11 = v5[4]; /*0x1ace0*/
  if ( v7 == v11 ) /*0x1ace7*/
  {
    v9 = 0; /*0x1ace9*/
    v5[17] = v11; /*0x1acec*/
  }
  return v9 != 0; /*0x1acf6*/
}

// Function: RstHelper_acfc @ 0x1acfc (0xe1 bytes)
// Index: 753/906

__int64 __fastcall RstHelper_acfc(__int64 a1, int a2, __int64 a3, unsigned int n4, __int64 Length, unsigned int *i)
{
  unsigned int v9; // r12d
  unsigned int v10; // ebx
  unsigned int n4_2; // r14d
  unsigned int n4_1; // edi

  v9 = RstReturnAllOnes(); /*0x1ad2e*/
  v10 = 0; /*0x1ad36*/
  n4_2 = HiiLibReturnZero(Length); /*0x1ad38*/
  if ( !n4 ) /*0x1ad3d*/
    return 1; /*0x1ad3f*/
  while ( 1 ) /*0x1ad5b*/
  {
    n4_1 = n4_2; /*0x1ad5b*/
    if ( n4 < n4_2 ) /*0x1ad67*/
      n4_1 = n4; /*0x1ad67*/
    Assert_89(Source_16, Length, 40, a3, n4_1, (unsigned int)i); /*0x1ad72*/
    if ( *(_WORD *)(Source_16 + 2720) ) /*0x1ad7e*/
      break; /*0x1ad7e*/
    v9 = RstCrc32(v9, i, n4_1); /*0x1ad98*/
    a3 += n4_1 / n4_2; /*0x1ada2*/
    n4 -= n4_1; /*0x1ada5*/
    if ( !n4 ) /*0x1ada7*/
    {
      LOBYTE(v10) = (unsigned int)RstBitwiseNot(v9) == a2; /*0x1adb4*/
      return v10; /*0x1adb9*/
    }
  }
  return 2; /*0x1adcf*/
}

// Function: RstConfigBlockSetActive @ 0x1ade0 (0x3f bytes)
// Index: 754/906

__int64 __fastcall RstConfigBlockSetActive(__int64 *a1, __int64 a2)
{
  __int64 v2; // rax
  __int64 (__fastcall ***v3)(_QWORD, __int64); // rcx

  v2 = *a1; /*0x1ade0*/
  if ( (_BYTE)a2 ) /*0x1ade8*/
  {
    *(_BYTE *)(v2 + 82) = 0; /*0x1adea*/
  }
  else
  {
    *(_BYTE *)(v2 + 82) = 1; /*0x1adf0*/
    *(_BYTE *)(*(_QWORD *)(*a1 + 32) + 187LL) = 0; /*0x1adfb*/
  }
  LOBYTE(a2) = 1; /*0x1ae05*/
  v3 = *(__int64 (__fastcall ****)(_QWORD, __int64))(*(_QWORD *)(*(_QWORD *)(*a1 + 32) + 144LL) + 248LL); /*0x1ae12*/
  return (**v3)(v3, a2);
}

// Function: Assert_22 @ 0x1ae20 (0x184 bytes)
// Index: 755/906

__int64 __fastcall Assert_22(_QWORD *a1, __int64 a2)
{
  unsigned int v4; // ebp
  unsigned __int64 v5; // rdi
  _BYTE *i_1; // rsi
  unsigned int v7; // eax
  int v8; // eax
  unsigned int v9; // ebx
  __int64 v10; // rdi
  _BYTE *i; // [rsp+30h] [rbp-28h] BYREF
  char v13; // [rsp+38h] [rbp-20h]
  __int16 n16; // [rsp+3Ah] [rbp-1Eh]

  Assert_3(a1); /*0x1ae43*/
  i = 0; /*0x1ae50*/
  v13 = 0; /*0x1ae69*/
  v4 = 0x1000 / (unsigned int)HiiLibReturnZero(a2); /*0x1ae73*/
  v5 = a1[14] / (unsigned __int64)v4; /*0x1ae7f*/
  n16 = 16; /*0x1ae87*/
  RstBufferPoolRealloc((__int64)&i, 0); /*0x1ae8c*/
  i_1 = i; /*0x1ae91*/
  if ( RstDebugEnabled() && !i_1 ) /*0x1aea2*/
    DebugAssert("DsMgr.cpp", 0x12Au, "pplHdr"); /*0x1aeb7*/
  MemZero(i_1, 0, 4096); /*0x1aec4*/
  MemZero(i_1, 255, 512); /*0x1aed7*/
  *((_DWORD *)i_1 + 128) = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)(*a1 + 32LL) + 144LL) + 248LL) + 28LL); /*0x1aef5*/
  v7 = RstReturnAllOnes(); /*0x1aefb*/
  v8 = RstCrc32(v7, (unsigned int *)i_1, 4096); /*0x1af08*/
  *((_DWORD *)i_1 + 133) = RstBitwiseNot(v8); /*0x1af1a*/
  Assert_89(Source_16, a2, 42, a1[4], 4096, (unsigned int)i_1); /*0x1af35*/
  MemZero(i_1, 0, 4096); /*0x1af42*/
  if ( (unsigned int)v5 > 1 ) /*0x1af4a*/
  {
    v9 = v4; /*0x1af4c*/
    v10 = (unsigned int)(v5 - 1); /*0x1af4e*/
    do /*0x1af79*/
    {
      Assert_89(Source_16, a2, 42, a1[4] + v9, 4096, (unsigned int)i_1); /*0x1af6e*/
      v9 += v4; /*0x1af73*/
      --v10; /*0x1af75*/
    }
    while ( v10 ); /*0x1af79*/
  }
  return RstBufferPoolLock((__int64)i); /*0x1af99*/
}

// Function: RstAssertFormat @ 0x1afa4 (0x8f4 bytes)
// Index: 756/906

char __fastcall RstAssertFormat(__int64 *a1, __int64 a2, __int64 Length, __int64 a4)
{
  __int64 Length_1; // rbx
  char v8; // r12
  unsigned int v9; // eax
  __int64 v10; // r14
  __int64 v11; // rcx
  char v12; // al
  unsigned int *i_1; // rsi
  char v14; // r15
  unsigned int v15; // eax
  unsigned int *p_n4; // r13
  int n2; // eax
  unsigned __int64 Source__1; // rbx
  unsigned int v19; // r8d
  __int64 v20; // rcx
  __int64 v21; // r12
  unsigned __int64 Source__2; // rax
  __int64 Source__4; // rbx
  __int64 Source__13; // rax
  __int64 Source__5; // r8
  __int64 Source__16; // r9
  __int64 v27; // rcx
  bool v28; // zf
  unsigned int n4; // eax
  unsigned __int64 Source__14; // rbx
  unsigned __int64 v31; // rbx
  __int64 Source__15; // rax
  unsigned __int64 v33; // rbx
  unsigned int Source__8; // ebx
  unsigned __int64 Source__11; // rbx
  __int16 v36; // cx
  int n23_1; // ecx
  __int64 v38; // r12
  char v39; // al
  int n23_5; // ecx
  __int64 Length_2; // rbx
  __int64 v42; ... [11961 chars total]

// Function: Assert_96 @ 0x1b898 (0x82 bytes)
// Index: 757/906

__int64 Assert_96_QWORD *a1)
{
  __int64 v1; // r8
  __int64 result; // rax
  __int64 *v4; // rbx
  __int64 v5; // rdi
  _BYTE v6[192]; // [rsp+20h] [rbp-C8h] BYREF
  unsigned __int8 v7; // [rsp+F0h] [rbp+8h] BYREF

  v1 = a1[1]; /*0x1b8ab*/
  v7 = 0; /*0x1b8bb*/
  RstRaidCollectActiveDisks((__int64)v6, &v7, v1); /*0x1b8bf*/
  result = RstRaidCollectActiveDisks((__int64)v6, &v7, a1[2]); /*0x1b8d5*/
  if ( v7 ) /*0x1b8e5*/
  {
    v4 = (__int64 *)v6; /*0x1b8e7*/
    v5 = v7; /*0x1b8ec*/
    do /*0x1b903*/
    {
      result = Assert_22(a1, *v4++); /*0x1b8f6*/
      --v5; /*0x1b8ff*/
    }
    while ( v5 ); /*0x1b903*/
  }
  return result; /*0x1b915*/
}

// Function: Assert_80 @ 0x1b91c (0xfb bytes)
// Index: 758/906

char __fastcall Assert_80(__int64 a1, __int64 p_Destination, __int64 a3, __int64 Length)
{
  __int64 v5; // rdx
  char result; // al
  unsigned int v9; // ebx
  __int64 v10; // rdx
  __int64 v11; // rax
  char v12; // bl
  __int64 v13[6]; // [rsp+30h] [rbp-38h] BYREF

  v5 = *(_QWORD *)(a1 + 136); /*0x1b933*/
  *(_QWORD *)(a1 + 120) = v5; /*0x1b940*/
  if ( !v5 ) /*0x1b947*/
    return 1; /*0x1b9ff*/
  result = Assert_126(a1, v5, Length); /*0x1b950*/
  if ( result ) /*0x1b957*/
  {
    RstBufferListInitExt((__int64)v13); /*0x1b962*/
    v9 = RstGetFieldBlockSize(*(CHAR16 **)(a1 + 88)); /*0x1b973*/
    v11 = Assert_62(p_Destination, v10); /*0x1b975*/
    if ( RstPplRecoveryLogAddEntry((__int64)v13, Length, v11, v9, *(_QWORD *)(a1 + 144)) ) /*0x1b994*/
    {
      RstConfigStreamWriteNewline((__int64)v13); /*0x1b9a2*/
      RstConfigStreamWriteFieldMeta((__int64)v13, *(CHAR16 **)(a1 + 88)); /*0x1b9b0*/
      RstConfigStreamWriteBuffer((__int64)v13, *(_QWORD *)(a1 + 80)); /*0x1b9be*/
    }
    RstConfigStreamWriteField((__int64)v13, *(_DWORD *)(a1 + 76), *(_QWORD *)(a1 + 120), Length); /*0x1b9d2*/
    v12 = RstAssertFormat((__int64 *)a1, (__int64)v13, Length, *(_QWORD *)(a1 + 104)); /*0x1b9f4*/
    RstConfigStreamWriteArrayEntry((__int64)v13, *(_QWORD *)(a1 + 120)); /*0x1b9f6*/
    return v12; /*0x1b9fb*/
  }
  return result; /*0x1ba12*/
}

// Function: RstAssertFormatEntry @ 0x1ba18 (0x56 bytes)
// Index: 759/906

char __fastcall RstAssertFormatEntry(__int64 *a1, __int64 a2, __int64 Length)
{
  __int64 v3; // rdx
  char result; // al
  __int64 v7[7]; // [rsp+20h] [rbp-38h] BYREF

  v3 = a1[17]; /*0x1ba22*/
  a1[15] = v3; /*0x1ba2f*/
  if ( !v3 ) /*0x1ba36*/
    return 1; /*0x1ba61*/
  result = Assert_126((__int64)a1, v3, Length); /*0x1ba38*/
  if ( result ) /*0x1ba3f*/
  {
    RstBufferListInit((__int64)v7); /*0x1ba46*/
    return RstAssertFormat(a1, (__int64)v7, Length, a1[13]); /*0x1ba5a*/
  }
  return result; /*0x1ba68*/
}

// Function: Assert_81 @ 0x1ba70 (0xed bytes)
// Index: 760/906

__int64 __fastcall Assert_81(__int64 a1)
{
  __int64 v1; // r8
  char v3; // di
  __int64 v4; // rdx
  unsigned __int8 v5; // si
  char v6; // bp
  __int64 Length_1; // r12
  __int64 v9[6]; // [rsp+20h] [rbp-108h] BYREF
  __int64 Length[24]; // [rsp+50h] [rbp-D8h] BYREF
  unsigned __int8 v11; // [rsp+130h] [rbp+8h] BYREF

  v1 = *(_QWORD *)(a1 + 8); /*0x1ba86*/
  v3 = 0; /*0x1ba96*/
  v11 = 0; /*0x1ba99*/
  RstRaidCollectActiveDisks((__int64)Length, &v11, v1); /*0x1ba9d*/
  RstRaidCollectActiveDisks((__int64)Length, &v11, *(_QWORD *)(a1 + 16)); /*0x1bab3*/
  RstBufferListInit((__int64)v9); /*0x1babd*/
  v5 = 0; /*0x1bac2*/
  *(_BYTE *)(a1 + 96) = 0; /*0x1bac5*/
  v6 = 1; /*0x1bac9*/
  if ( !v11 ) /*0x1bad4*/
    goto LABEL_11; /*0x1bad4*/
  while ( 1 ) /*0x1bad9*/
  {
    Assert_3((_QWORD *)a1); /*0x1bad9*/
    Length_1 = Length[v5]; /*0x1bae5*/
    if ( Assert_138((_QWORD *)a1, Length_1) ) /*0x1baed*/
    {
      v3 = RstAssertFormatEntry((__int64 *)a1, (__int64)v9, Length_1); /*0x1bb18*/
      if ( !v3 ) /*0x1bb1d*/
        goto LABEL_9; /*0x1bb1d*/
      goto LABEL_6; /*0x1bb1d*/
    }
    if ( *(_QWORD *)(a1 + 136) != *(_QWORD *)(a1 + 32) ) /*0x1bb01*/
      break; /*0x1bb01*/
    v6 = 0; /*0x1bb03*/
LABEL_6:
    if ( ++v5 >= v11 ) /*0x1bb2a*/
      goto LABEL_9; /*0x1bb2a*/
  }
  v3 = 0; /*0x1bb2e*/
LABEL_9:
  if ( v6 ) /*0x1bb34*/
  {
LABEL_11:
    LOBYTE(v4) = v3; /*0x1bb3a*/
    return RstConfigBlockSetActive((__int64 *)a1, v4); /*0x1bb3a*/
  }
  v4 = 0; /*0x1bb36*/
  return RstConfigBlockSetActive((__int64 *)a1, v4); /*0x1bb55*/
}

// Function: Assert_32 @ 0x1bb60 (0x124 bytes)
// Index: 761/906

char __fastcall Assert_32(__int64 *a1, CHAR16 **p_Destination, __int64 a3)
{
  __int64 Length; // r12
  CHAR16 **v8; // rdi
  __int64 v9; // rdx
  __int64 v10; // rax
  __int64 v11; // rcx
  __int64 v12; // rdi
  char v13; // bp

  Length = *(_QWORD *)(a1[11] + 88); /*0x1bb82*/
  if ( !Length ) /*0x1bb8c*/
    return 0; /*0x1bb8e*/
  if ( RstDebugEnabled() && !p_Destination ) /*0x1bba1*/
    DebugAssert("DsMgr.cpp", 0x2B2u, "a_pJdPplMpbMgr"); /*0x1bbb6*/
  v8 = RstBufferAdvancePtr(p_Destination); /*0x1bbc3*/
  if ( RstDebugEnabled() ) /*0x1bbc6*/
  {
    if ( !v8 ) /*0x1bbd2*/
      DebugAssert("DsMgr.cpp", 0x2B4u, "pJdPplMpb"); /*0x1bbe7*/
  }
  v10 = Assert_65(p_Destination, v9); /*0x1bbef*/
  *((_DWORD *)a1 + 19) = 0; /*0x1bbf4*/
  v11 = *a1; /*0x1bbf8*/
  a1[4] = v10; /*0x1bbfb*/
  v12 = v10; /*0x1bc03*/
  v13 = 1; /*0x1bc0a*/
  if ( *(_BYTE *)(*(_QWORD *)(v11 + 24) + 42LL) ) /*0x1bc06*/
  {
    do /*0x1bc66*/
    {
      v12 += a1[14]; /*0x1bc0f*/
      if ( Assert_138(a1, Length) ) /*0x1bc19*/
      {
        if ( !Assert_80((__int64)a1, (__int64)p_Destination, a3, Length) ) /*0x1bc35*/
          return 0; /*0x1bc35*/
      }
      else
      {
        if ( a1[17] != a1[4] ) /*0x1bc48*/
          return 0; /*0x1bc48*/
        v13 = 0; /*0x1bc4e*/
      }
      ++*((_DWORD *)a1 + 19); /*0x1bc51*/
      a1[4] = v12; /*0x1bc54*/
    }
    while ( *((_DWORD *)a1 + 19) < (unsigned int)*(unsigned __int8 *)(*(_QWORD *)(*a1 + 24) + 42LL) ); /*0x1bc66*/
  }
  return v13; /*0x1bc7a*/
}

// Function: Assert_98 @ 0x1bc84 (0x7b bytes)
// Index: 762/906

CHAR16 *__fastcall Assert_98(__int64 *a1)
{
  __int64 v2; // rdx
  CHAR16 **p_Destination; // rbx
  CHAR16 *result; // rax
  __int64 v5; // rdx
  char v6; // bl
  __int64 v7[7]; // [rsp+20h] [rbp-38h] BYREF

  Assert_61(a1); /*0x1bc91*/
  v2 = *(_QWORD *)(*(_QWORD *)(*a1 + 32) + 136LL); /*0x1bc9d*/
  p_Destination = *(CHAR16 ***)(v2 + 72); /*0x1bca4*/
  if ( p_Destination ) /*0x1bcab*/
    result = (CHAR16 *)RstDeviceDerefPtr(*(_QWORD *)(v2 + 72)); /*0x1bcb0*/
  else
    result = 0; /*0x1bcb7*/
  a1[11] = (__int64)result; /*0x1bcb9*/
  if ( result ) /*0x1bcc0*/
  {
    RstBufferListInitExt((__int64)v7); /*0x1bcc7*/
    LOBYTE(v5) = Assert_32(a1, p_Destination, (__int64)v7); /*0x1bcdf*/
    v6 = v5; /*0x1bce1*/
    RstConfigBlockSetActive(a1, v5); /*0x1bce3*/
    return RstConfigStreamWriteBooleanEntry((__int64)v7, v6); /*0x1bcef*/
  }
  return result; /*0x1bcf9*/
}

// Function: Assert_34 @ 0x1bd00 (0x109 bytes)
// Index: 763/906

__int64 __fastcall Assert_34(__int64 *a1)
{
  __int64 v1; // rax
  __int64 v3; // rax
  __int64 v4; // rcx
  int v5; // eax
  int v6; // eax
  int v7; // eax
  int v8; // eax
  int v9; // eax
  __int64 v11; // [rsp+20h] [rbp-18h] BYREF
  char v12; // [rsp+28h] [rbp-10h]
  __int16 n16; // [rsp+2Ah] [rbp-Eh]

  v1 = a1[4]; /*0x1bd0a*/
  v11 = 0; /*0x1bd0e*/
  a1[15] = v1; /*0x1bd17*/
  v12 = 0; /*0x1bd27*/
  n16 = 16; /*0x1bd2c*/
  RstBufferPoolRealloc((__int64)&v11, 0); /*0x1bd31*/
  if ( RstDebugEnabled() && !v11 ) /*0x1bd45*/
    DebugAssert("DsMgr.cpp", 0x74u, "framebuf.ptr()"); /*0x1bd5a*/
  v3 = v11; /*0x1bd5f*/
  v4 = a1[1]; /*0x1bd64*/
  a1[13] = v11; /*0x1bd6d*/
  a1[18] = v3 + 4096; /*0x1bd77*/
  if ( *(_WORD *)(v4 + 40) <= 1u && *(_WORD *)(a1[2] + 40) <= 1u /*0x1bd9c*/
    || *(_DWORD *)(v4 + 8) == 3
    || *(_DWORD *)(a1[2] + 8) == 3 )
  {
    return RstBufferPoolLock(v11); /*0x1bd9c*/
  }
  v5 = RstDevicePathGetNameFromConfig(*a1); /*0x1bda1*/
  if ( v5 ) /*0x1bda8*/
  {
    v6 = v5 - 1; /*0x1bdaa*/
    if ( v6 ) /*0x1bdac*/
    {
      v7 = v6 - 1; /*0x1bdae*/
      if ( !v7 ) /*0x1bdb0*/
        goto LABEL_15; /*0x1bdb0*/
      v8 = v7 - 1; /*0x1bdb2*/
      if ( v8 ) /*0x1bdb4*/
      {
        v9 = v8 - 1; /*0x1bdb6*/
        if ( v9 ) /*0x1bdb8*/
        {
          if ( v9 != 1 ) /*0x1bdbc*/
          {
            *(_BYTE *)(*(_QWORD *)(*a1 + 32) + 187LL) = 0; /*0x1bdc5*/
            return RstBufferPoolLock(v11); /*0x1bdcc*/
          }
          goto LABEL_16; /*0x1bdbc*/
        }
LABEL_15:
        Assert_98(a1); /*0x1bdce*/
        return RstBufferPoolLock(v11); /*0x1bdd6*/
      }
    }
LABEL_18:
    Assert_81((__int64)a1); /*0x1bdec*/
    return RstBufferPoolLock(v11); /*0x1bdef*/
  }
LABEL_16:
  if ( *(_DWORD *)(a1[1] + 8) == 2 || *(_DWORD *)(a1[2] + 8) == 2 ) /*0x1bdea*/
    goto LABEL_18; /*0x1bdea*/
  return RstBufferPoolLock(v11); /*0x1be03*/
}

// Function: RstDeviceCheckCapacityNonZero @ 0x1be0c (0x65 bytes)
// Index: 764/906

char __fastcall RstDeviceCheckCapacityNonZero(_DWORD *a1, __int64 a2)
{
  unsigned __int8 n23_1; // r9
  int n23; // r8d
  __int64 v4; // r8

  n23_1 = 0; /*0x1be0f*/
  if ( *(_BYTE *)(a2 + 42) ) /*0x1be12*/
  {
    while ( 1 ) /*0x1be1c*/
    {
      n23 = 23; /*0x1be1c*/
      if ( n23_1 < 0x18u ) /*0x1be26*/
        n23 = n23_1; /*0x1be26*/
      v4 = *(_QWORD *)(a2 + 16 * (n23 + 7LL)); /*0x1be34*/
      if ( (*(_DWORD *)(v4 + 136) & 0x10) != 0 && (*(_QWORD *)(v4 + 88) & 0xFFFFFFFF00000000uLL) != 0 ) /*0x1be54*/
        return 0; /*0x1be6e*/
      if ( ++n23_1 >= *(_BYTE *)(a2 + 42) ) /*0x1be5d*/
        goto LABEL_7; /*0x1be5d*/
    }
  }
  else
  {
LABEL_7:
    a1[13] = 0; /*0x1be5f*/
    a1[14] = 0; /*0x1be63*/
    a1[12] = 0; /*0x1be67*/
    return 1; /*0x1be6b*/
  }
}

// Function: Assert_13 @ 0x1be74 (0x1d0 bytes)
// Index: 765/906

__int64 __fastcall Assert_13(_DWORD *a1, __int64 a2)
{
  _DWORD *v2; // rdi
  int v4; // eax
  int v5; // r12d
  __int64 v6; // r15
  __int64 v7; // rsi
  int v8; // r14d
  __int64 v9; // rbp
  unsigned __int8 n23_1; // di
  __int16 v11; // r13
  int n23; // ecx
  __int64 v13; // rbx
  int v14; // eax
  bool v15; // zf
  __int64 v17; // [rsp+30h] [rbp-48h] BYREF
  char v18; // [rsp+38h] [rbp-40h]
  __int16 v19; // [rsp+3Ah] [rbp-3Eh]
  int v21; // [rsp+88h] [rbp+10h]
  unsigned int v22; // [rsp+90h] [rbp+18h]

  v2 = a1; /*0x1be91*/
  v17 = 0; /*0x1be9b*/
  v18 = 0; /*0x1be9f*/
  v19 = 1; /*0x1bea9*/
  RstBufferPoolRealloc((__int64)&v17, 0); /*0x1beae*/
  if ( RstDebugEnabled() && !v17 ) /*0x1bec2*/
    DebugAssert("MigrRecord.cpp", 0x5Fu, "sbuf.ptr()"); /*0x1bed6*/
  v22 = v17; /*0x1bee4*/
  v4 = HiiLibReturnZero(*(_QWORD *)(a2 + 32)); /*0x1beec*/
  v5 = v4 * v2[5]; /*0x1befe*/
  v6 = *(_QWORD *)(a2 + 16); /*0x1bf02*/
  v7 = (unsigned int)v2[6] + ((unsigned __int64)(unsigned int)v2[13] << 32); /*0x1bf0e*/
  v8 = v4; /*0x1bf14*/
  v9 = (unsigned int)v2[7] + ((unsigned __int64)(unsigned int)v2[14] << 32); /*0x1bf17*/
  v21 = v5; /*0x1bf1a*/
  if ( v5 ) /*0x1bf25*/
  {
    do /*0x1bff4*/
    {
      n23_1 = 0; /*0x1bf2b*/
      v11 = *(unsigned __int8 *)(v6 + 42); /*0x1bf2e*/
      if ( *(_BYTE *)(v6 + 42) ) /*0x1bf2e*/
      {
        do /*0x1bfcc*/
        {
          n23 = 23; /*0x1bf4b*/
          if ( n23_1 < 0x18u ) /*0x1bf54*/
            n23 = n23_1; /*0x1bf54*/
          v13 = *(_QWORD *)(v6 + 16 * (n23 + 7LL)); /*0x1bf78*/
          Assert_89(Source_16, v13, 40, v7, v8, v22); /*0x1bf7f*/
          RstRaidMemberSetActiveOrRemove(v6, n23_1); /*0x1bf8a*/
          Assert_89(Source_16, v13, 42, v9, v8, v22); /*0x1bfa9*/
          RstRaidMemberSetActiveOrRemove(v6, n23_1); /*0x1bfb4*/
          --v11; /*0x1bfc1*/
          ++n23_1; /*0x1bfc5*/
        }
        while ( v11 ); /*0x1bfcc*/
        v5 = v21; /*0x1bfd2*/
      }
      v14 = 1; /*0x1bfda*/
      ++v7; /*0x1bfdf*/
      ++v9; /*0x1bfe2*/
      v5 -= v8; /*0x1bfe5*/
      v21 = v5; /*0x1bfe8*/
    }
    while ( v5 ); /*0x1bff4*/
    v2 = a1; /*0x1bffa*/
  }
  else
  {
    v14 = 1; /*0x1c004*/
  }
  if ( v2[3] ) /*0x1c009*/
  {
    v15 = v2[1]++ == -1; /*0x1c00f*/
  }
  else
  {
    v14 = -1; /*0x1c014*/
    v15 = --v2[1] == -1; /*0x1c01a*/
  }
  if ( v15 ) /*0x1c01d*/
    v2[12] += v14; /*0x1c01f*/
  return RstBufferPoolLock(v17); /*0x1c034*/
}

// Function: RstBufferCombineLowHigh @ 0x1c044 (0xd bytes)
// Index: 766/906

unsigned __int64 __fastcall RstBufferCombineLowHigh(unsigned int *a1)
{
  return *a1 + ((unsigned __int64)a1[4] << 32); /*0x1c050*/
}

// Function: RstConfigBlockGetDataOffset @ 0x1c054 (0x1c bytes)
// Index: 767/906

__int64 __fastcall RstConfigBlockGetDataOffset(__int64 a1, char a2)
{
  __int64 result; // rax

  result = a1 + 4LL * *(unsigned __int8 *)(a1 + 48) + 80; /*0x1c058*/
  if ( a2 || *(_BYTE *)(a1 + 8) ) /*0x1c061*/
    result += 4LL * *(unsigned __int8 *)(a1 + 4LL * *(unsigned __int8 *)(a1 + 48) + 96) + 48; /*0x1c06a*/
  return result; /*0x1c06f*/
}

// Function: RstConfigEntryDeserialize @ 0x1c070 (0x9b bytes)
// Index: 768/906

char __fastcall RstConfigEntryDeserialize(__int64 a1, __int64 a2, char a3)
{
  __int64 v6; // rcx
  char result; // al

  *(_BYTE *)(a1 + 8) = *(_BYTE *)(a2 + 8); /*0x1c08d*/
  *(_BYTE *)(a1 + 9) = *(_BYTE *)(a2 + 12); /*0x1c096*/
  *(_BYTE *)(a1 + 10) = *(_BYTE *)(a2 + 16); /*0x1c09c*/
  *(_DWORD *)a1 = *(_DWORD *)(a2 + 24); /*0x1c0a2*/
  v6 = a1 + 32; /*0x1c0a8*/
  *(_DWORD *)(v6 - 16) = HIDWORD(*(_QWORD *)(a2 + 24)); /*0x1c0b0*/
  *(_DWORD *)(v6 - 28) = *(_DWORD *)(a2 + 32); /*0x1c0b6*/
  *(_WORD *)(v6 - 20) = *(_WORD *)(a2 + 36); /*0x1c0bd*/
  *(_WORD *)(v6 - 18) = *(_WORD *)(a2 + 38); /*0x1c0c5*/
  *(_QWORD *)(v6 - 12) = 0; /*0x1c0c9*/
  *(_DWORD *)(v6 - 4) = 0; /*0x1c0ce*/
  result = RstConfigEntrySerialize(v6, *(_QWORD *)(a2 + 40)); /*0x1c0d6*/
  if ( a3 || *(_BYTE *)(a1 + 8) ) /*0x1c0df*/
    return RstConfigEntrySerialize(a1 + 4LL * *(unsigned __int8 *)(a1 + 48) + 80, *(_QWORD *)(a2 + 48)); /*0x1c0f1*/
  return result; /*0x1c105*/
}

// Function: RstSplit64To32 @ 0x1c10c (0xa bytes)
// Index: 769/906

void __fastcall RstSplit64To32(_DWORD *a1, __int64 a2)
{
  *a1 = a2; /*0x1c10c*/
  a1[4] = HIDWORD(a2); /*0x1c112*/
}

// Function: RstConfigArrayAllocPool @ 0x1c118 (0x2c bytes)
// Index: 770/906

__int64 __fastcall RstConfigArrayAllocPool(__int64 a1)
{
  *(_WORD *)(a1 + 1168) = 0; /*0x1c123*/
  *(_QWORD *)(a1 + 1160) = RstMemPoolAlloc(6912); /*0x1c134*/
  return a1; /*0x1c13e*/
}

// Function: RstBufferZeroExt @ 0x1c144 (0x18 bytes)
// Index: 771/906

__int64 __fastcall RstBufferZeroExt(_WORD *a1)
{
  a1[576] = 0; /*0x1c146*/
  a1[585] = 0; /*0x1c14d*/
  a1[584] = 0; /*0x1c154*/
  return 0; /*0x1c15b*/
}

// Function: RstConfigArrayUpdateSequenceCounters @ 0x1c15c (0x3d bytes)
// Index: 772/906

__int64 __fastcall RstConfigArrayUpdateSequenceCounters(__int64 a1)
{
  unsigned __int16 i; // r8
  __int64 result; // rax

  for ( i = 0; /*0x1c162*/
        i < *(_WORD *)(a1 + 1376);
        *(_DWORD *)(*(_QWORD *)(a1 + 8 * result + 1176) + 28LL) = (__int16)(*(_WORD *)(a1 + 1170) - 1) )
  {
    result = i++; /*0x1c17a*/
  }
  return result; /*0x1c197*/
}

// Function: RstConfigArrayFindOrInsertEntry @ 0x1c19c (0x41 bytes)
// Index: 773/906

__int64 __fastcall RstConfigArrayFindOrInsertEntry(__int64 a1, __int64 a2)
{
  __int16 v2; // r9
  unsigned __int16 v3; // r8
  __int64 result; // rax

  v2 = *(_WORD *)(a1 + 1376); /*0x1c19c*/
  v3 = 0; /*0x1c1a4*/
  if ( v2 ) /*0x1c1ab*/
  {
    while ( 1 ) /*0x1c1ad*/
    {
      result = v3; /*0x1c1ad*/
      if ( *(_QWORD *)(a1 + 8LL * v3 + 1176) == a2 ) /*0x1c1b9*/
        break; /*0x1c1b9*/
      if ( ++v3 >= *(_WORD *)(a1 + 1376) ) /*0x1c1c7*/
        goto LABEL_4; /*0x1c1c7*/
    }
  }
  else
  {
LABEL_4:
    *(_QWORD *)(a1 + 8LL * v2 + 1176) = a2; /*0x1c1c9*/
    ++*(_WORD *)(a1 + 1376); /*0x1c1d5*/
    return v2; /*0x1c1c9*/
  }
  return result; /*0x1c1dc*/
}

// Function: RstConfigDeviceListAdd @ 0x1c1e0 (0x8e bytes)
// Index: 774/906

__int64 __fastcall RstConfigDeviceListAdd(__int64 a1, const CHAR16 *Source, __int16 a3)
{
  __int16 n144; // ax
  __int64 v6; // rcx
  __int64 result; // rax

  n144 = *(_WORD *)(a1 + 1168); /*0x1c1ea*/
  if ( n144 >= 144 ) /*0x1c1ff*/
    return 0; /*0x1c261*/
  StrnCpy((CHAR16 *)(*(_QWORD *)(a1 + 1160) + 48LL * n144), Source, 0x30u); /*0x1c21a*/
  *(_DWORD *)(*(_QWORD *)(a1 + 1160) + 48LL * *(__int16 *)(a1 + 1168) + 28) = a3; /*0x1c239*/
  v6 = *(__int16 *)(a1 + 1168); /*0x1c23e*/
  result = *(_QWORD *)(a1 + 1160) + 48 * v6; /*0x1c24e*/
  *(_WORD *)(a1 + 1168) = v6 + 1; /*0x1c258*/
  return result; /*0x1c268*/
}

// Function: RstConfigDeviceListFind @ 0x1c270 (0x89 bytes)
// Index: 775/906

__int64 __fastcall RstConfigDeviceListFind(__int64 a1, _BYTE *a2)
{
  bool v4; // cf
  unsigned __int16 v5; // bx

  v4 = *(_WORD *)(a1 + 1168) != 0; /*0x1c28c*/
  v5 = 0; /*0x1c293*/
  while ( v4 ) /*0x1c296*/
  {
    if ( a2 && !StrnCpy16(a2, (_BYTE *)(*(_QWORD *)(a1 + 1160) + 48LL * v5), 16) ) /*0x1c2c0*/
      return *(_QWORD *)(a1 + 1160) + 48LL * v5; /*0x1c2e0*/
    v4 = ++v5 < *(_WORD *)(a1 + 1168); /*0x1c2c5*/
  }
  return 0; /*0x1c2f3*/
}

// Function: RstDeviceUpdateConfig @ 0x1c2fc (0x324 bytes)
// Index: 776/906

__int16 __fastcall RstDeviceUpdateConfig(__int64 a1, __int64 a2, __int64 a3)
{
  __int64 v5; // rdi
  __int64 v6; // rbp
  __int16 v7; // r12
  __int64 v8; // rcx
  __int64 v9; // rax
  unsigned __int16 v10; // r14
  _BYTE *v11; // rbx
  __int64 v12; // rbp
  int v13; // ebx
  int v14; // eax
  int v15; // ecx
  __int64 v16; // rax
  unsigned __int16 v17; // bx
  _BYTE *v18; // r14
  int v19; // ebx
  int v20; // eax
  int v21; // ecx
  unsigned int n513; // ebx
  _QWORD *v23; // rax

  v5 = a1; /*0x1c331*/
  v6 = 0; /*0x1c334*/
  v7 = 0; /*0x1c337*/
  if ( *(__int16 *)(a1 + 1152) <= 0 ) /*0x1c33b*/
    goto LABEL_4; /*0x1c33b*/
  while ( *(_DWORD *)(a1 + 24LL * v7 + 12) != *(_DWORD *)(a3 + 40) ) /*0x1c34d*/
  {
    if ( ++v7 >= *(__int16 *)(a1 + 1152) ) /*0x1c35f*/
      goto LABEL_4; /*0x1c35f*/
  }
  if ( *(_DWORD *)(a1 + 24LL * v7 + 8) == *(_DWORD *)(a3 + 32) ) /*0x1c455*/
    goto LABEL_4; /*0x1c455*/
  if ( *(_DWORD *)(a1 + 24LL * v7 + 16) < *(_DWORD *)(a3 + 44) )
  {
    v16 = RstConfigDeviceListFind(a1, (_BYTE *)(*(_QWORD *)(a1 + 24LL * v7) + 28LL)); /*0x1c470*/
    if ( v16 ) /*0x1c478*/
      RstDeviceSetFlags(*(_QWORD *)(v5 + 24LL * v7), *(_DWORD *)(v16 + 24) & 0x400004); /*0x1c48b*/
LABEL_4:
    v8 = 3LL * v7; /*0x1c361*/
    *(_QWORD *)(v5 + 8 * v8) = a2; /*0x1c369*/
    *(_DWORD *)(v5 + 8 * v8 + 8) = *(_DWORD *)(a3 + 32); /*0x1c370*/
    *(_DWORD *)(v5 + 8 * v8 + 12) = *(_DWORD *)(a3 + 40); /*0x1c377*/
    *(_DWORD *)(v5 + 8 * v8 + 16) = *(_DWORD *)(a3 + 44); /*0x1c37e*/
    LOWORD(v9) = *(_WORD *)(v5 + 1152); /*0x1c382*/
    if ( v7 == (_WORD)v9 ) /*0x1c38d*/
    {
      LOWORD(v9) = v9 + 1; /*0x1c38f*/
      *(_WORD *)(v5 + 1152) = v9; /*0x1c393*/
    }
    v10 = 0; /*0x1c39a*/
    if ( *(_BYTE *)(a3 + 56) )
    {
      v11 = (_BYTE *)(a2 + 28); /*0x1c3a8*/
      do
      {
        v12 = RstConfigDeviceListFind(v5, (_BYTE *)(a3 + 48LL * v10 + 216)); /*0x1c3ca*/
        if ( v12 )
        {
          v13 = *(_DWORD *)(v12 + 24) | *(_DWORD *)(a3 + 48LL * v10 + 240); /*0x1c3dc*/
          if ( ((*(_BYTE *)(v12 + 24) | *(_BYTE *)(a3 + 48LL * v10 + 240)) & 0x40) != 0 )
            v13 &= ~((RstHelper_84d4(a3) ? 0x2000000 : 0) | 0x87);
          if ( (v13 & 0x86) != 0 )
            v13 &= ~((RstHelper_84d4(a3) ? 0x2000000 : 0) | 1);
          v14 = RstHelper_84d4(a3) ? 46269063 : 12714631;
          v15 = v13 & v14; /*0x1c438*/
          v11 = (_BYTE *)(a2 + 28); /*0x1c43a*/
          *(_DWORD *)(v12 + 24) = v15 | *(_DWORD *)(v12 + 24) & ~v14; /*0x1c445*/
        }
        else
        {
          if ( RstHelper_84d4(a3) ) /*0x1c52e*/
            RstDeviceSetJournalMode(a3 + 48LL * v10 + 216, 1); /*0x1c53e*/
          v12 = RstConfigDeviceListAdd(v5, (const CHAR16 *)(a3 + 48LL * v10 + 216), -1); /*0x1c552*/
        }
        if ( v11 && !StrnCpy16(v11, (_BYTE *)v12, 16) )
        {
          v19 = *(_DWORD *)(a3 + 48LL * v10 + 240); /*0x1c576*/
          v20 = RstHelper_84d4(a3) ? 46269063 : 12714631;
          v21 = v19 & v20; /*0x1c594*/
          n513 = 513; /*0x1c596*/
          *(_DWORD *)(v12 + 24) = v21 | *(_DWORD *)(v12 + 24) & ~v20; /*0x1c5a5*/
          *(_DWORD *)(v12 + 28) = v7; /*0x1c5ac*/
          if ( RstHelper_84d4(a3) ) /*0x1c5af*/
          {
            v23 = RstLinkedListFindData(*(_QWORD *)(Source_16 + 216), a2); /*0x1c5cb*/
            RstJournalDeviceSetMode((__int64)v23, 1); /*0x1c5d5*/
            n513 = 33554945; /*0x1c5da*/
          }
          RstDeviceUpdateFlagsMask(a2, *(_DWORD *)(v12 + 24), n513); /*0x1c5e8*/
          v11 = (_BYTE *)(a2 + 28); /*0x1c5ed*/
        }
        LOWORD(v9) = *(unsigned __int8 *)(a3 + 56); /*0x1c5f1*/
        ++v10; /*0x1c5f5*/
      }
      while ( v10 < (unsigned __int16)v9 );
    }
    return v9; /*0x1c5fd*/
  }
  v17 = 0; /*0x1c495*/
  if ( *(_BYTE *)(a3 + 56) ) /*0x1c499*/
  {
    v18 = (_BYTE *)(a2 + 28); /*0x1c49f*/
    do /*0x1c4f1*/
    {
      v6 = a3 + 48LL * v17 + 216; /*0x1c4b2*/
      if ( v18 && !StrnCpy16(v18, (_BYTE *)(a3 + 48LL * v17 + 216), 16) ) /*0x1c4cb*/
        RstDeviceSetFlags(a2, *(_DWORD *)(a3 + 48LL * v17 + 240) & 0x400004); /*0x1c4e2*/
      ++v17; /*0x1c4eb*/
    }
    while ( v17 < *(unsigned __int8 *)(a3 + 56) ); /*0x1c4f1*/
    v5 = a1; /*0x1c4f3*/
  }
  v9 = RstConfigDeviceListFind(v5, (_BYTE *)(a2 + 28)); /*0x1c4ff*/
  if ( v9 && v6 ) /*0x1c510*/
  {
    *(_DWORD *)(v9 + 28) = v7; /*0x1c51a*/
    *(_DWORD *)(v9 + 24) |= *(_DWORD *)(v6 + 24) & 2; /*0x1c523*/
  }
  return v9; /*0x1c612*/
}

// Function: RstCfgListFindNextOnlineEntry @ 0x1c620 (0xa5 bytes)
// Index: 777/906

__int64 __fastcall RstCfgListFindNextOnlineEntry(__int64 a1)
{
  __int64 v2; // r8
  __int64 v3; // rdi
  __int64 v4; // r11

  if ( *(_WORD *)(a1 + 1170) >= *(_WORD *)(a1 + 1152) ) /*0x1c640*/
    return 0; /*0x1c6ae*/
  while ( 1 ) /*0x1c647*/
  {
    v2 = *(__int16 *)(a1 + 1170); /*0x1c647*/
    v3 = *(_QWORD *)(a1 + 24 * v2); /*0x1c65a*/
    *(_WORD *)(a1 + 1170) = v2 + 1; /*0x1c65e*/
    v4 = RstConfigDeviceListFind(a1, v3 + 28); /*0x1c66f*/
    if ( (*(_DWORD *)(v3 + 136) & 0x40) == 0 /*0x1c69c*/
      && (*(_DWORD *)(v4 + 24) & 0x80000) != 0
      && *(__int16 *)(v4 + 28) == *(__int16 *)(a1 + 1170) - 1 )
    {
      break; /*0x1c69c*/
    }
    if ( *(_WORD *)(a1 + 1170) >= *(_WORD *)(a1 + 1152) ) /*0x1c6ac*/
      return 0; /*0x1c6ac*/
  }
  return v3; /*0x1c6ba*/
}

// Function: RstBufferGetBlockOffset @ 0x1c6c8 (0xe bytes)
// Index: 778/906

unsigned __int64 __fastcall RstBufferGetBlockOffset(__int64 a1)
{
  return *(unsigned int *)(a1 + 4) + ((unsigned __int64)*(unsigned int *)(a1 + 24) << 32); /*0x1c6d5*/
}

// Function: RstBufferGetBlockCount @ 0x1c6d8 (0xe bytes)
// Index: 779/906

unsigned __int64 __fastcall RstBufferGetBlockCount(__int64 a1)
{
  return *(unsigned int *)(a1 + 8) + ((unsigned __int64)*(unsigned int *)(a1 + 28) << 32); /*0x1c6e5*/
}

// Function: RstBufferGetBlockIndex @ 0x1c6e8 (0xd bytes)
// Index: 780/906

unsigned __int64 __fastcall RstBufferGetBlockIndex(unsigned int *a1)
{
  return *a1 + ((unsigned __int64)a1[5] << 32); /*0x1c6f4*/
}

// Function: RstConfigEntrySerialize @ 0x1c6f8 (0xe9 bytes)
// Index: 781/906

char __fastcall RstConfigEntrySerialize(__int64 a1, __int64 a2)
{
  char n24; // al
  __int16 n23_1; // r8
  __int64 n23_2; // rax
  int n23; // ecx

  *(_BYTE *)(a1 + 14) = *(_BYTE *)a2; /*0x1c711*/
  *(_BYTE *)(a1 + 15) = *(_BYTE *)(a2 + 4); /*0x1c71a*/
  if ( *(_BYTE *)(a2 + 6) > 0x18u ) /*0x1c721*/
    n24 = 24; /*0x1c729*/
  else
    n24 = *(_BYTE *)(a2 + 6); /*0x1c723*/
  *(_BYTE *)(a1 + 16) = n24; /*0x1c72b*/
  *(_WORD *)(a1 + 12) = *(_WORD *)(a2 + 16); /*0x1c732*/
  *(_DWORD *)a1 = *(_DWORD *)(a2 + 8); /*0x1c739*/
  *(_DWORD *)(a1 + 20) = HIDWORD(*(_QWORD *)(a2 + 8)); /*0x1c743*/
  *(_DWORD *)(a1 + 4) = RstDeviceGetBuffer(a2); /*0x1c751*/
  n23_2 = RstDeviceGetBuffer(a2); /*0x1c754*/
  n23_1 = 0; /*0x1c759*/
  *(_DWORD *)(a1 + 24) = HIDWORD(n23_2); /*0x1c760*/
  *(_DWORD *)(a1 + 8) = *(_DWORD *)(a2 + 32); /*0x1c766*/
  *(_DWORD *)(a1 + 28) = HIDWORD(*(_QWORD *)(a2 + 32)); /*0x1c771*/
  *(_BYTE *)(a1 + 17) = *(_BYTE *)(a2 + 40); /*0x1c777*/
  LOBYTE(n23_2) = *(_BYTE *)(a2 + 41); /*0x1c77a*/
  *(_BYTE *)(a1 + 19) = 1; /*0x1c77d*/
  *(_BYTE *)(a1 + 18) = n23_2; /*0x1c781*/
  *(_QWORD *)(a1 + 32) = 0; /*0x1c784*/
  *(_QWORD *)(a1 + 40) = 0; /*0x1c788*/
  if ( *(_BYTE *)(a1 + 16) ) /*0x1c78c*/
  {
    do /*0x1c7cf*/
    {
      n23 = 23; /*0x1c79a*/
      if ( n23_1 < 24 ) /*0x1c79f*/
        n23 = n23_1; /*0x1c79f*/
      n23_2 = (unsigned __int16)n23_1++; /*0x1c7bb*/
      *(_DWORD *)(a1 + 4 * n23_2 + 48) = (*(unsigned __int8 *)(n23 + a2 + 240) << 24) /*0x1c7c3*/
                                       | *(__int16 *)(*(_QWORD *)(a2 + 8LL * n23 + 48) + 16LL);
      LOWORD(n23_2) = *(unsigned __int8 *)(a1 + 16); /*0x1c7c7*/
    }
    while ( (unsigned __int16)n23_1 < (unsigned __int16)n23_2 ); /*0x1c7cf*/
  }
  return n23_2; /*0x1c7db*/
}

// Function: RstDeviceCopyToConfigEntry @ 0x1c7f0 (0x162 bytes)
// Index: 782/906

__int64 __fastcall RstDeviceCopyToConfigEntry(CHAR16 *Destination, __int64 a2)
{
  CHAR16 *Source; // rdi
  __int64 result; // rax
  __int64 v6; // rsi
  int v7; // eax
  __int64 v8; // rcx
  __int64 v9; // rax

  Source = (CHAR16 *)(a2 + 16); /*0x1c808*/
  result = RstLinkedListFindByKey(Source_16, (_BYTE *)(a2 + 16)); /*0x1c81c*/
  v6 = result; /*0x1c824*/
  if ( result ) /*0x1c82a*/
  {
    if ( !Source || StrnCpy16(Source, Destination, 16) ) /*0x1c843*/
      StrnCpy(Destination, Source, 0x10u); /*0x1c857*/
    *((_BYTE *)Destination + 32) = *(_BYTE *)(a2 + 36); /*0x1c866*/
    *((_QWORD *)Destination + 2) = *(_QWORD *)(a2 + 40); /*0x1c877*/
    v7 = *(_DWORD *)(a2 + 48); /*0x1c87a*/
    *((_DWORD *)Destination + 7) = 0; /*0x1c87d*/
    *((_DWORD *)Destination + 6) = v7; /*0x1c881*/
    Destination[18] = *(_WORD *)(a2 + 52); /*0x1c888*/
    *(_QWORD *)(Destination + 34) = 0; /*0x1c88c*/
    *((_DWORD *)Destination + 19) = 0; /*0x1c890*/
    *((_BYTE *)Destination + 38) = 0; /*0x1c894*/
    *((_BYTE *)Destination + 39) = 0; /*0x1c898*/
    *((_BYTE *)Destination + 35) = 0; /*0x1c89c*/
    LOWORD(v7) = *(_WORD *)(a2 + 64); /*0x1c8a0*/
    *((_BYTE *)Destination + 42) = 0; /*0x1c8a4*/
    *((_BYTE *)Destination + 43) = 0; /*0x1c8a8*/
    *((_DWORD *)Destination + 11) = 0; /*0x1c8ac*/
    Destination[24] = 0; /*0x1c8b0*/
    Destination[20] = v7; /*0x1c8b5*/
    *((_BYTE *)Destination + 34) = *(_BYTE *)(a2 + 66); /*0x1c8bc*/
    RstConfigEntryDeserialize((__int64)(Destination + 40), *(_QWORD *)(a2 + 56), 0); /*0x1c8c3*/
    v8 = *(_QWORD *)(v6 + 160); /*0x1c8c8*/
    if ( *(_BYTE *)(v6 + 186) && !*(_BYTE *)(v6 + 190) && *(_BYTE *)(v6 + 187) ) /*0x1c8e1*/
    {
      *((_BYTE *)Destination + 90) = 0; /*0x1c8ea*/
      *(_BYTE *)(v8 + 82) = 0; /*0x1c8ee*/
    }
    else
    {
      *(_BYTE *)(v8 + 82) = *((_BYTE *)Destination + 90); /*0x1c8f7*/
      *((_BYTE *)Destination + 90) = *((_BYTE *)Destination + 90); /*0x1c8fd*/
    }
    v9 = RstDeviceGetDataPtr(v8); /*0x1c900*/
    RstSplit64To32((_DWORD *)Destination + 20, v9); /*0x1c90c*/
    *((_BYTE *)Destination + 33) = 0; /*0x1c911*/
    *((_BYTE *)Destination + 50) = *(_BYTE *)(a2 + 80); /*0x1c921*/
    MemZero((_BYTE *)Destination + 51, 0, 16); /*0x1c924*/
    return RstStringCopyN((__int64)Destination + 51, a2 + 84, 16); /*0x1c934*/
  }
  return result; /*0x1c948*/
}

// Function: RstBufferListInit @ 0x1c954 (0x20 bytes)
// Index: 783/906

__int64 __fastcall RstBufferListInit(__int64 a1)
{
  *(_QWORD *)a1 = off_24280; /*0x1c95b*/
  *(_QWORD *)(a1 + 16) = 0; /*0x1c960*/
  *(_QWORD *)(a1 + 8) = 0; /*0x1c964*/
  *(_QWORD *)(a1 + 24) = 0; /*0x1c968*/
  *(_WORD *)(a1 + 32) = 0; /*0x1c96c*/
  return a1; /*0x1c973*/
}

// Function: RstPplRecoveryLogSetOffset @ 0x1c974 (0x47 bytes)
// Index: 784/906

void __fastcall RstPplRecoveryLogSetOffset(__int64 a1, __int64 a2)
{
  if ( (unsigned __int8)RstDebugEnabled(a1, a2) && *(_WORD *)(a1 + 32) ) /*0x1c98d*/
    DebugAssert("PplRecoveryLog.cpp", 0x5Au, "m_nOffs == 0"); /*0x1c9a7*/
  *(_QWORD *)(a1 + 24) = a2; /*0x1c9ac*/
}

// Function: nullsub_1 @ 0x1c9bc (0x3 bytes)
// Index: 785/906

void nullsub_1()
{
  ; /*0x1c9bc*/
}

// Function: RstBufferListInitExt @ 0x1c9c0 (0x24 bytes)
// Index: 786/906

__int64 __fastcall RstBufferListInitExt(__int64 a1)
{
  *(_QWORD *)a1 = off_242B8; /*0x1c9c9*/
  *(_QWORD *)(a1 + 16) = 0; /*0x1c9cf*/
  *(_QWORD *)(a1 + 8) = 0; /*0x1c9d3*/
  *(_QWORD *)(a1 + 24) = 0; /*0x1c9d7*/
  *(_WORD *)(a1 + 32) = 0; /*0x1c9db*/
  *(_QWORD *)(a1 + 40) = 0; /*0x1c9df*/
  return a1; /*0x1c9e3*/
}

// Function: RstPplRecoveryLogAddEntry @ 0x1c9e4 (0x42 bytes)
// Index: 787/906

char __fastcall RstPplRecoveryLogAddEntry(__int64 a1, __int64 Length, __int64 a3, unsigned int a4, __int64 a5)
{
  if ( *(_QWORD *)(a1 + 40) ) /*0x1c9eb*/
  {
    RstPplRecoveryLogSetOffset(a1, a5); /*0x1ca1a*/
    return 0; /*0x1ca1f*/
  }
  else
  {
    *(_QWORD *)(a1 + 8) = a3; /*0x1c9f4*/
    *(_WORD *)(a1 + 32) = 0; /*0x1c9f8*/
    *(_QWORD *)(a1 + 40) = Length; /*0x1ca00*/
    *(_QWORD *)(a1 + 16) = a3 + a4; /*0x1ca04*/
    *(_QWORD *)(a1 + 24) = a5; /*0x1ca0d*/
    return 1; /*0x1ca11*/
  }
}

// Function: Assert_133 @ 0x1ca28 (0x53 bytes)
// Index: 788/906

void Assert_133__int64 *a1, int a2, int a3)
{
  int v6; // eax

  if ( a1[5] ) /*0x1ca37*/
  {
    v6 = (*(__int64 (__fastcall **)(__int64 *))(*a1 + 8))(a1); /*0x1ca4a*/
    Assert_89(Source_16, a1[5], 42, a2, v6, a3); /*0x1ca66*/
  }
}

// Function: RstHelper_ca7c @ 0x1ca7c (0x19 bytes)
// Index: 789/906

__int64 RstHelper_ca7c__int64 a1)
{
  __int64 v1; // rcx
  __int64 result; // rax

  v1 = *(_QWORD *)(a1 + 40); /*0x1ca80*/
  result = 0; /*0x1ca84*/
  if ( v1 ) /*0x1ca89*/
    return HiiLibReturnZero(v1); /*0x1ca8b*/
  return result; /*0x1ca90*/
}

// Function: RstConfigStreamWriteString @ 0x1ca98 (0xdb bytes)
// Index: 790/906

CHAR16 *__fastcall RstConfigStreamWriteString(__int64 a1, const CHAR16 *Source, unsigned __int16 Length)
{
  CHAR16 *result; // rax
  __int16 v7; // ax
  CHAR16 *Destination; // rcx
  unsigned __int16 Length_1; // si
  unsigned __int64 v10; // rdx
  unsigned __int64 v11; // rdx

  result = *(CHAR16 **)(a1 + 16); /*0x1cab0*/
  if ( *(_QWORD *)(a1 + 8) < (unsigned __int64)result ) /*0x1cac2*/
  {
    while ( 1 ) /*0x1cad1*/
    {
      v7 = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 8LL))(a1); /*0x1cad1*/
      Destination = (CHAR16 *)(*(_QWORD *)(a1 + 24) + *(unsigned __int16 *)(a1 + 32)); /*0x1cadb*/
      Length_1 = v7 - *(_WORD *)(a1 + 32); /*0x1cae1*/
      if ( Length_1 >= Length ) /*0x1cae8*/
        break; /*0x1cae8*/
      StrnCpy(Destination, Source, Length_1); /*0x1caf1*/
      v10 = *(_QWORD *)(a1 + 8); /*0x1caf6*/
      if ( v10 < *(_QWORD *)(a1 + 16) ) /*0x1cafe*/
        (**(void (__fastcall ***)(__int64, unsigned __int64, _QWORD))a1)(a1, v10, *(_QWORD *)(a1 + 24)); /*0x1cb0a*/
      ++*(_QWORD *)(a1 + 8); /*0x1cb0c*/
      *(_WORD *)(a1 + 32) = 0; /*0x1cb10*/
      result = *(CHAR16 **)(a1 + 16); /*0x1cb15*/
      Length -= Length_1; /*0x1cb19*/
      Source = (const CHAR16 *)((char *)Source + Length_1); /*0x1cb1c*/
      if ( *(_QWORD *)(a1 + 8) >= (unsigned __int64)result ) /*0x1cb23*/
        return result; /*0x1cb23*/
    }
    result = StrnCpy(Destination, Source, Length); /*0x1cb2b*/
    if ( Length_1 == Length ) /*0x1cb33*/
    {
      v11 = *(_QWORD *)(a1 + 8); /*0x1cb35*/
      if ( v11 < *(_QWORD *)(a1 + 16) ) /*0x1cb3d*/
        result = (CHAR16 *)(**(__int64 (__fastcall ***)(__int64, unsigned __int64, _QWORD))a1)( /*0x1cb49*/
                             a1,
                             v11,
                             *(_QWORD *)(a1 + 24));
      ++*(_QWORD *)(a1 + 8); /*0x1cb4b*/
      *(_WORD *)(a1 + 32) = 0; /*0x1cb4f*/
    }
    else
    {
      *(_WORD *)(a1 + 32) += Length; /*0x1cb56*/
    }
  }
  return result; /*0x1cb69*/
}

// Function: RstConfigStreamWriteNewline @ 0x1cb74 (0x2d bytes)
// Index: 791/906

CHAR16 *__fastcall RstConfigStreamWriteNewline(__int64 a1)
{
  unsigned __int16 Length; // ax

  Length = StrLenA(Source_17); /*0x1cb84*/
  return RstConfigStreamWriteString(a1, Source_17, Length); /*0x1cb97*/
}

// Function: RstConfigStreamWriteFieldMeta @ 0x1cba4 (0xbc bytes)
// Index: 792/906

CHAR16 *__fastcall RstConfigStreamWriteFieldMeta(__int64 a1, CHAR16 *Destination)
{
  unsigned __int16 Length; // ax
  int Source; // [rsp+40h] [rbp+18h] BYREF

  Length = StrLenA(Source_4); /*0x1cbbb*/
  RstConfigStreamWriteString(a1, Source_4, Length); /*0x1cbce*/
  Source = RstGetFieldCount((__int64)Destination, 0); /*0x1cbeb*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cbef*/
  Source = RstHelper_1d9c(Destination, 0); /*0x1cc0c*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cc10*/
  Source = RstGetFieldSize(Destination, 0); /*0x1cc2d*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cc31*/
  Source = RstGetFieldBlockSize(Destination); /*0x1cc4c*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cc5a*/
}

// Function: RstConfigStreamWriteBuffer @ 0x1cc60 (0x45 bytes)
// Index: 793/906

CHAR16 *__fastcall RstConfigStreamWriteBuffer(__int64 a1, __int64 Source_)
{
  unsigned __int16 Length; // ax
  __int64 Source; // [rsp+38h] [rbp+10h] BYREF

  Source = Source_; /*0x1cc60*/
  Length = StrLenA(Source_15); /*0x1cc74*/
  RstConfigStreamWriteString(a1, Source_15, Length); /*0x1cc87*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 8u); /*0x1cc9f*/
}

// Function: RstConfigStreamWriteField @ 0x1cca8 (0x7b bytes)
// Index: 794/906

CHAR16 *__fastcall RstConfigStreamWriteField(__int64 a1, int Source_, __int64 Source__2, __int64 Length)
{
  unsigned __int16 Length_1; // ax
  int Source; // [rsp+38h] [rbp+10h] BYREF
  __int64 Source__1; // [rsp+40h] [rbp+18h] BYREF

  Source__1 = Source__2; /*0x1ccad*/
  Source = Source_; /*0x1ccb2*/
  Length_1 = StrLenA(Source_10); /*0x1ccc8*/
  RstConfigStreamWriteString(a1, Source_10, Length_1); /*0x1ccdb*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1ccee*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1cd01*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)(Length + 28), 0x11u); /*0x1cd1d*/
}

// Function: RstConfigStreamWriteArrayEntry @ 0x1cd24 (0x65 bytes)
// Index: 795/906

__int64 __fastcall RstConfigStreamWriteArrayEntry(__int64 a1, __int64 Source_)
{
  unsigned __int16 Length; // ax
  unsigned __int64 v4; // rdx
  __int64 Source; // [rsp+38h] [rbp+10h] BYREF

  Source = Source_; /*0x1cd24*/
  Length = StrLenA(Source_12); /*0x1cd38*/
  RstConfigStreamWriteString(a1, Source_12, Length); /*0x1cd4b*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 8u); /*0x1cd5e*/
  v4 = *(_QWORD *)(a1 + 8); /*0x1cd63*/
  if ( v4 < *(_QWORD *)(a1 + 16) ) /*0x1cd6b*/
    (**(void (__fastcall ***)(__int64, unsigned __int64, _QWORD))a1)(a1, v4, *(_QWORD *)(a1 + 24)); /*0x1cd77*/
  ++*(_QWORD *)(a1 + 8); /*0x1cd79*/
  *(_WORD *)(a1 + 32) = 0; /*0x1cd7f*/
  return 0; /*0x1cd83*/
}

// Function: RstConfigStreamWriteBlob @ 0x1cd8c (0x7b bytes)
// Index: 796/906

CHAR16 *__fastcall RstConfigStreamWriteBlob(__int64 a1, __int64 a2)
{
  unsigned __int16 Length; // ax
  CHAR16 *Length_2; // rax
  unsigned int n0x1000; // ebx
  int Length_1; // edi

  Length = StrLenA(Source_11); /*0x1cdad*/
  RstConfigStreamWriteString(a1, Source_11, Length); /*0x1cdc0*/
  Length_2 = (CHAR16 *)(*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 8LL))(a1); /*0x1cdcb*/
  n0x1000 = 0; /*0x1cdcf*/
  Length_1 = (int)Length_2; /*0x1cdd1*/
  if ( (_DWORD)Length_2 ) /*0x1cdd5*/
  {
    do /*0x1cdf0*/
    {
      Length_2 = RstConfigStreamWriteString(a1, (const CHAR16 *)(a2 + n0x1000), Length_1); /*0x1cde3*/
      n0x1000 += Length_1; /*0x1cde8*/
    }
    while ( n0x1000 < 0x1000 ); /*0x1cdf0*/
  }
  return Length_2; /*0x1ce01*/
}

// Function: RstConfigStreamWriteVaList @ 0x1ce08 (0xcd bytes)
// Index: 797/906

CHAR16 *RstConfigStreamWriteVaList(__int64 a1, int Source_, __int64 Source__4, int Source__3, ...)
{
  unsigned __int16 Length; // ax
  int Source; // [rsp+38h] [rbp+10h] BYREF
  __int64 Source__1; // [rsp+40h] [rbp+18h] BYREF
  int Source__2; // [rsp+48h] [rbp+20h] BYREF
  __int64 v10; // [rsp+50h] [rbp+28h] BYREF
  va_list va; // [rsp+50h] [rbp+28h]
  void *v12; // [rsp+58h] [rbp+30h] BYREF
  va_list va1; // [rsp+58h] [rbp+30h]
  void *v14; // [rsp+60h] [rbp+38h] BYREF
  va_list va2; // [rsp+60h] [rbp+38h]
  void *v16; // [rsp+68h] [rbp+40h] BYREF
  va_list va3; // [rsp+68h] [rbp+40h]
  va_list va4; // [rsp+70h] [rbp+48h] BYREF

  va_start(va4, Source__3);
  va_start(va3, Source__3);
  va_start(va2, Source__3);
  va_start(va1, Source__3);
  va_start(va, Source__3);
  v10 = va_arg(va1, _QWORD); /*0x1ce08*/
  va_copy(va2, va1); /*0x1ce08*/
  v12 = va_arg(va2, void *); /*0x1ce08*/
  va_copy(va3, va2); /*0x1ce08*/
  v14 = va_arg(va3, void *); /*0x1ce08*/
  va_copy(va4, va3); /*0x1ce08*/
  v16 = va_arg(va4, void *); /*0x1ce08*/
  Source__2 = Source__3; /*0x1ce0f*/
  Source__1 = Source__4; /*0x1ce13*/
  Source = Source_; /*0x1ce17*/
  Length = StrLenA(Source_0); /*0x1ce29*/
  RstConfigStreamWriteString(a1, Source_0, Length); /*0x1ce3c*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1ce4f*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1ce64*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__2, 4u); /*0x1ce75*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1ce85*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va1, 8u); /*0x1ce95*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va2, 8u); /*0x1cea5*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va3, 8u); /*0x1ceb5*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)va4, 8u); /*0x1cecf*/
}

// Function: RstConfigStreamWriteStringVa1 @ 0x1ced8 (0xcd bytes)
// Index: 798/906

CHAR16 *RstConfigStreamWriteStringVa1(__int64 a1, int Source_, __int64 Source__4, int Source__3, ...)
{
  unsigned __int16 Length; // ax
  int Source; // [rsp+38h] [rbp+10h] BYREF
  __int64 Source__1; // [rsp+40h] [rbp+18h] BYREF
  int Source__2; // [rsp+48h] [rbp+20h] BYREF
  __int64 v10; // [rsp+50h] [rbp+28h] BYREF
  va_list va; // [rsp+50h] [rbp+28h]
  void *v12; // [rsp+58h] [rbp+30h] BYREF
  va_list va1; // [rsp+58h] [rbp+30h]
  void *v14; // [rsp+60h] [rbp+38h] BYREF
  va_list va2; // [rsp+60h] [rbp+38h]
  void *v16; // [rsp+68h] [rbp+40h] BYREF
  va_list va3; // [rsp+68h] [rbp+40h]
  va_list va4; // [rsp+70h] [rbp+48h] BYREF

  va_start(va4, Source__3);
  va_start(va3, Source__3);
  va_start(va2, Source__3);
  va_start(va1, Source__3);
  va_start(va, Source__3);
  v10 = va_arg(va1, _QWORD); /*0x1ced8*/
  va_copy(va2, va1); /*0x1ced8*/
  v12 = va_arg(va2, void *); /*0x1ced8*/
  va_copy(va3, va2); /*0x1ced8*/
  v14 = va_arg(va3, void *); /*0x1ced8*/
  va_copy(va4, va3); /*0x1ced8*/
  v16 = va_arg(va4, void *); /*0x1ced8*/
  Source__2 = Source__3; /*0x1cedf*/
  Source__1 = Source__4; /*0x1cee3*/
  Source = Source_; /*0x1cee7*/
  Length = StrLenA(Source_1); /*0x1cef9*/
  RstConfigStreamWriteString(a1, Source_1, Length); /*0x1cf0c*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cf1f*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1cf34*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__2, 4u); /*0x1cf45*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1cf55*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va1, 8u); /*0x1cf65*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va2, 8u); /*0x1cf75*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va3, 8u); /*0x1cf85*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)va4, 8u); /*0x1cf9f*/
}

// Function: RstConfigStreamWriteStringVa2 @ 0x1cfa8 (0xcd bytes)
// Index: 799/906

CHAR16 *RstConfigStreamWriteStringVa2(__int64 a1, int Source_, __int64 Source__4, int Source__3, ...)
{
  unsigned __int16 Length; // ax
  int Source; // [rsp+38h] [rbp+10h] BYREF
  __int64 Source__1; // [rsp+40h] [rbp+18h] BYREF
  int Source__2; // [rsp+48h] [rbp+20h] BYREF
  __int64 v10; // [rsp+50h] [rbp+28h] BYREF
  va_list va; // [rsp+50h] [rbp+28h]
  void *v12; // [rsp+58h] [rbp+30h] BYREF
  va_list va1; // [rsp+58h] [rbp+30h]
  void *v14; // [rsp+60h] [rbp+38h] BYREF
  va_list va2; // [rsp+60h] [rbp+38h]
  void *v16; // [rsp+68h] [rbp+40h] BYREF
  va_list va3; // [rsp+68h] [rbp+40h]
  va_list va4; // [rsp+70h] [rbp+48h] BYREF

  va_start(va4, Source__3);
  va_start(va3, Source__3);
  va_start(va2, Source__3);
  va_start(va1, Source__3);
  va_start(va, Source__3);
  v10 = va_arg(va1, _QWORD); /*0x1cfa8*/
  va_copy(va2, va1); /*0x1cfa8*/
  v12 = va_arg(va2, void *); /*0x1cfa8*/
  va_copy(va3, va2); /*0x1cfa8*/
  v14 = va_arg(va3, void *); /*0x1cfa8*/
  va_copy(va4, va3); /*0x1cfa8*/
  v16 = va_arg(va4, void *); /*0x1cfa8*/
  Source__2 = Source__3; /*0x1cfaf*/
  Source__1 = Source__4; /*0x1cfb3*/
  Source = Source_; /*0x1cfb7*/
  Length = StrLenA(Source_2); /*0x1cfc9*/
  RstConfigStreamWriteString(a1, Source_2, Length); /*0x1cfdc*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1cfef*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1d004*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__2, 4u); /*0x1d015*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d025*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va1, 8u); /*0x1d035*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va2, 8u); /*0x1d045*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va3, 8u); /*0x1d055*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)va4, 8u); /*0x1d06f*/
}

// Function: RstConfigStreamWriteStringVa3 @ 0x1d078 (0xcd bytes)
// Index: 800/906

CHAR16 *RstConfigStreamWriteStringVa3(__int64 a1, int Source_, __int64 Source__4, int Source__3, ...)
{
  unsigned __int16 Length; // ax
  int Source; // [rsp+38h] [rbp+10h] BYREF
  __int64 Source__1; // [rsp+40h] [rbp+18h] BYREF
  int Source__2; // [rsp+48h] [rbp+20h] BYREF
  __int64 v10; // [rsp+50h] [rbp+28h] BYREF
  va_list va; // [rsp+50h] [rbp+28h]
  void *v12; // [rsp+58h] [rbp+30h] BYREF
  va_list va1; // [rsp+58h] [rbp+30h]
  void *v14; // [rsp+60h] [rbp+38h] BYREF
  va_list va2; // [rsp+60h] [rbp+38h]
  void *v16; // [rsp+68h] [rbp+40h] BYREF
  va_list va3; // [rsp+68h] [rbp+40h]
  va_list va4; // [rsp+70h] [rbp+48h] BYREF

  va_start(va4, Source__3);
  va_start(va3, Source__3);
  va_start(va2, Source__3);
  va_start(va1, Source__3);
  va_start(va, Source__3);
  v10 = va_arg(va1, _QWORD); /*0x1d078*/
  va_copy(va2, va1); /*0x1d078*/
  v12 = va_arg(va2, void *); /*0x1d078*/
  va_copy(va3, va2); /*0x1d078*/
  v14 = va_arg(va3, void *); /*0x1d078*/
  va_copy(va4, va3); /*0x1d078*/
  v16 = va_arg(va4, void *); /*0x1d078*/
  Source__2 = Source__3; /*0x1d07f*/
  Source__1 = Source__4; /*0x1d083*/
  Source = Source_; /*0x1d087*/
  Length = StrLenA(Source_3); /*0x1d099*/
  RstConfigStreamWriteString(a1, Source_3, Length); /*0x1d0ac*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1d0bf*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1d0d4*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__2, 4u); /*0x1d0e5*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d0f5*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va1, 8u); /*0x1d105*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va2, 8u); /*0x1d115*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)va3, 8u); /*0x1d125*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)va4, 8u); /*0x1d13f*/
}

// Function: RstConfigStreamWriteIntEntry @ 0x1d148 (0x5c bytes)
// Index: 801/906

CHAR16 *__fastcall RstConfigStreamWriteIntEntry(__int64 a1, int Source_, __int64 Source__2)
{
  unsigned __int16 Length; // ax
  int Source; // [rsp+38h] [rbp+10h] BYREF
  __int64 Source__1; // [rsp+40h] [rbp+18h] BYREF

  Source__1 = Source__2; /*0x1d148*/
  Source = Source_; /*0x1d14d*/
  Length = StrLenA(Source_14); /*0x1d160*/
  RstConfigStreamWriteString(a1, Source_14, Length); /*0x1d173*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 4u); /*0x1d186*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1d19e*/
}

// Function: RstConfigStreamWriteChar @ 0x1d1a4 (0x7c bytes)
// Index: 802/906

CHAR16 *RstConfigStreamWriteChar(__int64 a1, __int64 a2, char n23, ...)
{
  unsigned __int16 Length; // ax
  CHAR16 Source; // [rsp+40h] [rbp+18h] BYREF
  va_list va; // [rsp+48h] [rbp+20h] BYREF

  va_start(va, n23);
  LOBYTE(Source) = n23; /*0x1d1ae*/
  Length = StrLenA(Source_6); /*0x1d1c5*/
  RstConfigStreamWriteString(a1, Source_6, Length); /*0x1d1d8*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)(a2 + 28), 0x11u); /*0x1d1ea*/
  RstConfigStreamWriteString(a1, &Source, 1u); /*0x1d1fd*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d21a*/
}

// Function: RstConfigStreamWriteChar2 @ 0x1d220 (0x7c bytes)
// Index: 803/906

CHAR16 *RstConfigStreamWriteChar2(__int64 a1, __int64 a2, char n23, ...)
{
  unsigned __int16 Length; // ax
  CHAR16 Source; // [rsp+40h] [rbp+18h] BYREF
  va_list va; // [rsp+48h] [rbp+20h] BYREF

  va_start(va, n23);
  LOBYTE(Source) = n23; /*0x1d22a*/
  Length = StrLenA(Source_7); /*0x1d241*/
  RstConfigStreamWriteString(a1, Source_7, Length); /*0x1d254*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)(a2 + 28), 0x11u); /*0x1d266*/
  RstConfigStreamWriteString(a1, &Source, 1u); /*0x1d279*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d296*/
}

// Function: RstConfigStreamWriteNamedEntry @ 0x1d29c (0x9d bytes)
// Index: 804/906

CHAR16 *__fastcall RstConfigStreamWriteNamedEntry(__int64 a1, __int64 Length, __int64 Source_, const CHAR16 *i, const CHAR16 *Source)
{
  unsigned __int16 Length_1; // ax
  __int64 Source__1; // [rsp+40h] [rbp+18h] BYREF

  Source__1 = Source_; /*0x1d2a6*/
  Length_1 = StrLenA(Source_5); /*0x1d2c0*/
  RstConfigStreamWriteString(a1, Source_5, Length_1); /*0x1d2d3*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)(Length + 28), 0x11u); /*0x1d2e5*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)&Source__1, 8u); /*0x1d2f8*/
  LOWORD(Length) = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 8LL))(a1); /*0x1d311*/
  RstConfigStreamWriteString(a1, i, Length); /*0x1d313*/
  return RstConfigStreamWriteString(a1, Source, Length); /*0x1d333*/
}

// Function: RstConfigStreamWriteNameEntry @ 0x1d33c (0x64 bytes)
// Index: 805/906

CHAR16 *__fastcall RstConfigStreamWriteNameEntry(__int64 a1, __int64 Length, __int64 Source_)
{
  unsigned __int16 Length_1; // ax
  __int64 Source; // [rsp+40h] [rbp+18h] BYREF

  Source = Source_; /*0x1d341*/
  Length_1 = StrLenA(Source_13); /*0x1d358*/
  RstConfigStreamWriteString(a1, Source_13, Length_1); /*0x1d36b*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)(Length + 28), 0x11u); /*0x1d37d*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)&Source, 8u); /*0x1d39a*/
}

// Function: RstConfigStreamWriteChar3 @ 0x1d3a0 (0x7c bytes)
// Index: 806/906

CHAR16 *RstConfigStreamWriteChar3(__int64 a1, __int64 Length, char n23, ...)
{
  unsigned __int16 Length_1; // ax
  CHAR16 Source; // [rsp+40h] [rbp+18h] BYREF
  va_list va; // [rsp+48h] [rbp+20h] BYREF

  va_start(va, n23);
  LOBYTE(Source) = n23; /*0x1d3aa*/
  Length_1 = StrLenA(Source_8); /*0x1d3c1*/
  RstConfigStreamWriteString(a1, Source_8, Length_1); /*0x1d3d4*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)(Length + 28), 0x11u); /*0x1d3e6*/
  RstConfigStreamWriteString(a1, &Source, 1u); /*0x1d3f9*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d416*/
}

// Function: RstConfigStreamWriteChar4 @ 0x1d41c (0x7c bytes)
// Index: 807/906

CHAR16 *RstConfigStreamWriteChar4(__int64 a1, __int64 Length, char n23, ...)
{
  unsigned __int16 Length_1; // ax
  CHAR16 Source; // [rsp+40h] [rbp+18h] BYREF
  va_list va; // [rsp+48h] [rbp+20h] BYREF

  va_start(va, n23);
  LOBYTE(Source) = n23; /*0x1d426*/
  Length_1 = StrLenA(Source_9); /*0x1d43d*/
  RstConfigStreamWriteString(a1, Source_9, Length_1); /*0x1d450*/
  RstConfigStreamWriteString(a1, (const CHAR16 *)(Length + 28), 0x11u); /*0x1d462*/
  RstConfigStreamWriteString(a1, &Source, 1u); /*0x1d475*/
  return RstConfigStreamWriteString(a1, (const CHAR16 *)va, 8u); /*0x1d492*/
}

// Function: RstConfigStreamWriteBooleanEntry @ 0x1d498 (0x6e bytes)
// Index: 808/906

CHAR16 *__fastcall RstConfigStreamWriteBooleanEntry(__int64 a1, char a2)
{
  CHAR16 *Source; // rbx
  unsigned __int16 Length; // ax
  CHAR16 *result; // rax
  unsigned __int64 v6; // rdx

  Source = (CHAR16 *)&unk_2430C; /*0x1d4b6*/
  if ( a2 ) /*0x1d4bd*/
    Source = (CHAR16 *)&word_24310; /*0x1d4bd*/
  Length = StrLenA(Source); /*0x1d4c4*/
  result = RstConfigStreamWriteString(a1, Source, Length); /*0x1d4d3*/
  v6 = *(_QWORD *)(a1 + 8); /*0x1d4d8*/
  if ( v6 < *(_QWORD *)(a1 + 16) ) /*0x1d4e0*/
    result = (CHAR16 *)(**(__int64 (__fastcall ***)(__int64, unsigned __int64, _QWORD))a1)(a1, v6, *(_QWORD *)(a1 + 24)); /*0x1d4ec*/
  ++*(_QWORD *)(a1 + 8); /*0x1d4ee*/
  *(_WORD *)(a1 + 32) = 0; /*0x1d4f7*/
  return result; /*0x1d500*/
}

// Function: RstDeviceTypeToHiiStringId @ 0x1d508 (0x2e6 bytes)
// Index: 809/906

__int64 __fastcall RstDeviceTypeToHiiStringId(int n55)
{
  int v1; // ecx
  int v2; // ecx
  int v3; // ecx
  int v4; // ecx
  int v5; // ecx
  int v7; // ecx
  int v8; // ecx
  int v9; // ecx
  int v10; // ecx
  int v11; // ecx
  int v12; // ecx
  int v13; // ecx
  int v14; // ecx
  int v15; // ecx
  int v16; // ecx
  int v17; // ecx
  int v18; // ecx
  int v19; // ecx
  int v20; // ecx
  int v21; // ecx
  int v22; // ecx
  int v23; // ecx
  int v24; // ecx
  int v25; // ecx
  int v26; // ecx
  int v27; // ecx
  int v28; // ecx
  int v29; // ecx
  int v30; // ecx
  int v31; // ecx
  int v32; // ecx
  int v33; // ecx
  int v34; // ecx
  int v35; // ecx
  int v36; // ecx
  int v37; // ecx
  int v38; // ecx
  int v39; // ecx
  int v40; // ecx
  int v41; // ecx
  int v42; // ecx
  int v43; // ecx
  int v44; // ecx
  int v45; // ecx
  int v46; // ecx
  int v47; // ecx
  int v48; // ecx

  if ( n55 > 31 ) /*0x1d50b*/
  {
    if ( n55 > 47 ) /*0x1d682*/
    {
      if ( n55 > 55 ) /*0x1d744*/
      {
        v43 = n55 - 56; /*0x1d79e*/
        if ( !v43 ) /*0x1d7a1*/
          return 580; /*0x1d7e8*/
        v44 = v43 - 1; /*0x1d7a8*/
        if ( !v44 ) /*0x1d7aa*/
          return 581; /*0x1d7e7*/
        v45 = v44 - 1; /*0x1d7ac*/
        if ( !v45 ) /*0x1d7ae*/
          return 582; /*0x1d7e1*/
        v46 = v45 - 1; /*0x1d7b0*/
        if ( !v46 ) /*0x1d7b2*/
          return 583; /*0x1d7db*/
        v47 = v46 - 1; /*0x1d7b4*/
        if ( !v47 ) /*0x1d7b6*/
          return 584; /*0x1d7d5*/
        v48 = v47 - 1; /*0x1d7b8*/
        if ( !v48 ) /*0x1d7ba*/
          return 585; /*0x1d7cf*/
        if ( v48 == 1 ) /*0x1d7be*/
          return 586; /*0x1d7c9*/
      }
      else
      {
        if ( n55 == 55 ) /*0x1d746*/
          return 579; /*0x1d79d*/
        v37 = n55 - 48; /*0x1d748*/
        if ( !v37 ) /*0x1d74b*/
          return 572; /*0x1d797*/
        v38 = v37 - 1; /*0x1d752*/
        if ( !v38 ) /*0x1d754*/
          return 573; /*0x1d791*/
        v39 = v38 - 1; /*0x1d756*/
        if ( !v39 ) /*0x1d758*/
          return 574; /*0x1d78b*/
        v40 = v39 - 1; /*0x1d75a*/
        if ( !v40 ) /*0x1d75c*/
          return 575; /*0x1d785*/
        v41 = v40 - 1; /*0x1d75e*/
        if ( !v41 ) /*0x1d760*/
          return 576; /*0x1d77f*/
        v42 = v41 - 1; /*0x1d762*/
        if ( !v42 ) /*0x1d764*/
          return 577; /*0x1d779*/
        if ( v42 == 1 ) /*0x1d768*/
          return 578; /*0x1d773*/
      }
    }
    else
    {
      if ( n55 == 47 ) /*0x1d688*/
        return 571; /*0x1d740*/
      if ( n55 > 39 ) /*0x1d691*/
      {
        v31 = n55 - 40; /*0x1d6eb*/
        if ( !v31 ) /*0x1d6ee*/
          return 635; /*0x1d73a*/
        v32 = v31 - 1; /*0x1d6f5*/
        if ( !v32 ) /*0x1d6f7*/
          return 636; /*0x1d734*/
        v33 = v32 - 1; /*0x1d6f9*/
        if ( !v33 ) /*0x1d6fb*/
          return 638; /*0x1d72e*/
        v34 = v33 - 1; /*0x1d6fd*/
        if ( !v34 ) /*0x1d6ff*/
          return 639; /*0x1d728*/
        v35 = v34 - 1; /*0x1d701*/
        if ( !v35 ) /*0x1d703*/
          return 640; /*0x1d722*/
        v36 = v35 - 1; /*0x1d705*/
        if ( !v36 ) /*0x1d707*/
          return 637; /*0x1d71c*/
        if ( v36 == 1 ) /*0x1d70b*/
          return 570; /*0x1d716*/
      }
      else
      {
        if ( n55 == 39 ) /*0x1d693*/
          return 634; /*0x1d6ea*/
        v25 = n55 - 32; /*0x1d695*/
        if ( !v25 ) /*0x1d698*/
          return 627; /*0x1d6e4*/
        v26 = v25 - 1; /*0x1d69f*/
        if ( !v26 ) /*0x1d6a1*/
          return 628; /*0x1d6de*/
        v27 = v26 - 1; /*0x1d6a3*/
        if ( !v27 ) /*0x1d6a5*/
          return 629; /*0x1d6d8*/
        v28 = v27 - 1; /*0x1d6a7*/
        if ( !v28 ) /*0x1d6a9*/
          return 630; /*0x1d6d2*/
        v29 = v28 - 1; /*0x1d6ab*/
        if ( !v29 ) /*0x1d6ad*/
          return 631; /*0x1d6cc*/
        v30 = v29 - 1; /*0x1d6af*/
        if ( !v30 ) /*0x1d6b1*/
          return 632; /*0x1d6c6*/
        if ( v30 == 1 ) /*0x1d6b5*/
          return 633; /*0x1d6c0*/
      }
    }
    return 614; /*0x1d60e*/
  }
  if ( n55 == 31 ) /*0x1d511*/
    return 626; /*0x1d67e*/
  if ( n55 <= 15 ) /*0x1d51a*/
  {
    if ( n55 == 15 ) /*0x1d520*/
      return 610; /*0x1d5d3*/
    if ( n55 > 7 ) /*0x1d529*/
    {
      v7 = n55 - 8; /*0x1d582*/
      if ( !v7 ) /*0x1d585*/
        return 603; /*0x1d5cd*/
      v8 = v7 - 1; /*0x1d58c*/
      if ( !v8 ) /*0x1d58e*/
        return 604; /*0x1d5c7*/
      v9 = v8 - 1; /*0x1d590*/
      if ( !v9 ) /*0x1d592*/
        return 605; /*0x1d5c1*/
      v10 = v9 - 1; /*0x1d594*/
      if ( !v10 ) /*0x1d596*/
        return 606; /*0x1d5bb*/
      v11 = v10 - 1; /*0x1d598*/
      if ( !v11 ) /*0x1d59a*/
        return 607; /*0x1d5b5*/
      v12 = v11 - 1; /*0x1d59c*/
      if ( !v12 ) /*0x1d59e*/
        return 608; /*0x1d5af*/
      if ( v12 == 1 ) /*0x1d5a2*/
        return 609; /*0x1d5a9*/
    }
    else
    {
      if ( n55 == 7 ) /*0x1d52b*/
        return 602; /*0x1d581*/
      if ( !n55 ) /*0x1d52f*/
        return 595; /*0x1d57b*/
      v1 = n55 - 1; /*0x1d536*/
      if ( !v1 ) /*0x1d538*/
        return 596; /*0x1d575*/
      v2 = v1 - 1; /*0x1d53a*/
      if ( !v2 ) /*0x1d53c*/
        return 597; /*0x1d56f*/
      v3 = v2 - 1; /*0x1d53e*/
      if ( !v3 ) /*0x1d540*/
        return 598; /*0x1d569*/
      v4 = v3 - 1; /*0x1d542*/
      if ( !v4 ) /*0x1d544*/
        return 599; /*0x1d563*/
      v5 = v4 - 1; /*0x1d546*/
      if ( !v5 ) /*0x1d548*/
        return 600; /*0x1d55d*/
      if ( v5 == 1 ) /*0x1d54c*/
        return 601; /*0x1d557*/
    }
    return 614; /*0x1d54c*/
  }
  if ( n55 > 23 ) /*0x1d5d7*/
  {
    v19 = n55 - 24; /*0x1d62d*/
    if ( !v19 ) /*0x1d630*/
      return 619; /*0x1d678*/
    v20 = v19 - 1; /*0x1d637*/
    if ( !v20 ) /*0x1d639*/
      return 620; /*0x1d672*/
    v21 = v20 - 1; /*0x1d63b*/
    if ( !v21 ) /*0x1d63d*/
      return 621; /*0x1d66c*/
    v22 = v21 - 1; /*0x1d63f*/
    if ( !v22 ) /*0x1d641*/
      return 622; /*0x1d666*/
    v23 = v22 - 1; /*0x1d643*/
    if ( !v23 ) /*0x1d645*/
      return 623; /*0x1d660*/
    v24 = v23 - 1; /*0x1d647*/
    if ( !v24 ) /*0x1d649*/
      return 624; /*0x1d65a*/
    if ( v24 == 1 ) /*0x1d64d*/
      return 625; /*0x1d654*/
    return 614; /*0x1d64d*/
  }
  if ( n55 == 23 ) /*0x1d5d9*/
    return 618; /*0x1d627*/
  v13 = n55 - 16; /*0x1d5db*/
  if ( !v13 ) /*0x1d5de*/
    return 611; /*0x1d621*/
  v14 = v13 - 1; /*0x1d5e5*/
  if ( !v14 ) /*0x1d5e7*/
    return 612; /*0x1d61b*/
  v15 = v14 - 1; /*0x1d5e9*/
  if ( !v15 ) /*0x1d5eb*/
    return 613; /*0x1d615*/
  v16 = v15 - 1; /*0x1d5ed*/
  if ( v16 ) /*0x1d5ef*/
  {
    v17 = v16 - 1; /*0x1d5f1*/
    if ( v17 ) /*0x1d5f3*/
    {
      v18 = v17 - 1; /*0x1d5f5*/
      if ( !v18 ) /*0x1d5f7*/
        return 616; /*0x1d608*/
      if ( v18 == 1 ) /*0x1d5fb*/
        return 617; /*0x1d602*/
    }
    return 614; /*0x1d5fb*/
  }
  return 615; /*0x1d557*/
}

// Function: RstInitMethodToHiiStringId @ 0x1d7f0 (0x256 bytes)
// Index: 810/906

__int16 __fastcall RstInitMethodToHiiStringId(unsigned __int8 n24)
{
  if ( n24 <= 0x18u ) /*0x1d7f8*/
  {
    if ( n24 == 24 ) /*0x1d7fe*/
      return 371; /*0x1d92e*/
    if ( n24 > 0xCu ) /*0x1d807*/
    {
      if ( n24 > 0x12u ) /*0x1d8a9*/
      {
        switch ( n24 ) /*0x1d8f1*/
        {
          case 0x13u: /*0x1d8f1*/
            return 366; /*0x1d928*/
          case 0x14u: /*0x1d8f1*/
            return 367; /*0x1d922*/
          case 0x15u: /*0x1d8f1*/
            return 368; /*0x1d91c*/
          case 0x16u: /*0x1d8f1*/
            return 369; /*0x1d916*/
          case 0x17u: /*0x1d8f1*/
            return 370; /*0x1d910*/
        }
      }
      else
      {
        switch ( n24 ) /*0x1d8ab*/
        {
          case 0x12u: /*0x1d8ab*/
            return 365; /*0x1d8ed*/
          case 0xDu: /*0x1d8ab*/
            return 360; /*0x1d8e7*/
          case 0xEu: /*0x1d8ab*/
            return 361; /*0x1d8e1*/
          case 0xFu: /*0x1d8ab*/
            return 362; /*0x1d8db*/
          case 0x10u: /*0x1d8ab*/
            return 363; /*0x1d8d5*/
          case 0x11u: /*0x1d8ab*/
            return 364; /*0x1d8cf*/
        }
      }
    }
    else
    {
      if ( n24 == 12 ) /*0x1d80d*/
        return 359; /*0x1d8a5*/
      if ( n24 > 6u ) /*0x1d816*/
      {
        switch ( n24 ) /*0x1d868*/
        {
          case 7u: /*0x1d868*/
            return 354; /*0x1d89f*/
          case 8u: /*0x1d868*/
            return 355; /*0x1d899*/
          case 9u: /*0x1d868*/
            return 356; /*0x1d893*/
          case 0xAu: /*0x1d868*/
            return 357; /*0x1d88d*/
          case 0xBu: /*0x1d868*/
            return 358; /*0x1d887*/
        }
      }
      else
      {
        switch ( n24 ) /*0x1d818*/
        {
          case 6u: /*0x1d818*/
            return 353; /*0x1d864*/
          case 0u: /*0x1d818*/
            return 347; /*0x1d85e*/
          case 1u: /*0x1d818*/
            return 348; /*0x1d858*/
          case 2u: /*0x1d818*/
            return 349; /*0x1d852*/
          case 3u: /*0x1d818*/
            return 350; /*0x1d84c*/
          case 4u: /*0x1d818*/
            return 351; /*0x1d846*/
          case 5u: /*0x1d818*/
            return 352; /*0x1d840*/
        }
      }
    }
    return 0; /*0x1d835*/
  }
  if ( n24 <= 0x24u ) /*0x1d932*/
  {
    if ( n24 == 36 ) /*0x1d938*/
      return 383; /*0x1d9c6*/
    if ( n24 > 0x1Eu ) /*0x1d941*/
    {
      switch ( n24 ) /*0x1d989*/
      {
        case 0x1Fu: /*0x1d989*/
          return 378; /*0x1d9c0*/
        case 0x20u: /*0x1d989*/
          return 379; /*0x1d9ba*/
        case 0x21u: /*0x1d989*/
          return 380; /*0x1d9b4*/
        case 0x22u: /*0x1d989*/
          return 381; /*0x1d9ae*/
        case 0x23u: /*0x1d989*/
          return 382; /*0x1d9a8*/
      }
    }
    else
    {
      switch ( n24 ) /*0x1d943*/
      {
        case 0x1Eu: /*0x1d943*/
          return 377; /*0x1d985*/
        case 0x19u: /*0x1d943*/
          return 372; /*0x1d97f*/
        case 0x1Au: /*0x1d943*/
          return 373; /*0x1d979*/
        case 0x1Bu: /*0x1d943*/
          return 374; /*0x1d973*/
        case 0x1Cu: /*0x1d943*/
          return 375; /*0x1d96d*/
        case 0x1Du: /*0x1d943*/
          return 376; /*0x1d967*/
      }
    }
    return 0; /*0x1d95c*/
  }
  if ( n24 <= 0x2Au ) /*0x1d9ca*/
  {
    switch ( n24 ) /*0x1d9cc*/
    {
      case '*': /*0x1d9cc*/
        return 389; /*0x1da0a*/
      case '%': /*0x1d9cc*/
        return 384; /*0x1da04*/
      case '&': /*0x1d9cc*/
        return 385; /*0x1d9fe*/
      case '\'': /*0x1d9cc*/
        return 386; /*0x1d9f8*/
      case '(': /*0x1d9cc*/
        return 387; /*0x1d9f2*/
      case ')': /*0x1d9cc*/
        return 388; /*0x1d9ec*/
    }
    return 0; /*0x1d9e5*/
  }
  switch ( n24 ) /*0x1da0e*/
  {
    case '+': /*0x1da0e*/
      return 390; /*0x1da40*/
    case ',': /*0x1da0e*/
      return 391; /*0x1da3a*/
    case '-': /*0x1da0e*/
      return 392; /*0x1da34*/
    case '.': /*0x1da0e*/
      return 393; /*0x1da2e*/
  }
  if ( n24 != 47 ) /*0x1da22*/
    return 0; /*0x1da27*/
  return 394; /*0x1d840*/
}

// Function: RstSpareTypeToHiiStringId @ 0x1da48 (0x256 bytes)
// Index: 811/906

__int16 __fastcall RstSpareTypeToHiiStringId(unsigned __int8 n24)
{
  if ( n24 <= 0x18u ) /*0x1da50*/
  {
    if ( n24 == 24 ) /*0x1da56*/
      return 419; /*0x1db86*/
    if ( n24 > 0xCu ) /*0x1da5f*/
    {
      if ( n24 > 0x12u ) /*0x1db01*/
      {
        switch ( n24 ) /*0x1db49*/
        {
          case 0x13u: /*0x1db49*/
            return 414; /*0x1db80*/
          case 0x14u: /*0x1db49*/
            return 415; /*0x1db7a*/
          case 0x15u: /*0x1db49*/
            return 416; /*0x1db74*/
          case 0x16u: /*0x1db49*/
            return 417; /*0x1db6e*/
          case 0x17u: /*0x1db49*/
            return 418; /*0x1db68*/
        }
      }
      else
      {
        switch ( n24 ) /*0x1db03*/
        {
          case 0x12u: /*0x1db03*/
            return 413; /*0x1db45*/
          case 0xDu: /*0x1db03*/
            return 408; /*0x1db3f*/
          case 0xEu: /*0x1db03*/
            return 409; /*0x1db39*/
          case 0xFu: /*0x1db03*/
            return 410; /*0x1db33*/
          case 0x10u: /*0x1db03*/
            return 411; /*0x1db2d*/
          case 0x11u: /*0x1db03*/
            return 412; /*0x1db27*/
        }
      }
    }
    else
    {
      if ( n24 == 12 ) /*0x1da65*/
        return 407; /*0x1dafd*/
      if ( n24 > 6u ) /*0x1da6e*/
      {
        switch ( n24 ) /*0x1dac0*/
        {
          case 7u: /*0x1dac0*/
            return 402; /*0x1daf7*/
          case 8u: /*0x1dac0*/
            return 403; /*0x1daf1*/
          case 9u: /*0x1dac0*/
            return 404; /*0x1daeb*/
          case 0xAu: /*0x1dac0*/
            return 405; /*0x1dae5*/
          case 0xBu: /*0x1dac0*/
            return 406; /*0x1dadf*/
        }
      }
      else
      {
        switch ( n24 ) /*0x1da70*/
        {
          case 6u: /*0x1da70*/
            return 401; /*0x1dabc*/
          case 0u: /*0x1da70*/
            return 395; /*0x1dab6*/
          case 1u: /*0x1da70*/
            return 396; /*0x1dab0*/
          case 2u: /*0x1da70*/
            return 397; /*0x1daaa*/
          case 3u: /*0x1da70*/
            return 398; /*0x1daa4*/
          case 4u: /*0x1da70*/
            return 399; /*0x1da9e*/
          case 5u: /*0x1da70*/
            return 400; /*0x1da98*/
        }
      }
    }
    return 0; /*0x1da8d*/
  }
  if ( n24 <= 0x24u ) /*0x1db8a*/
  {
    if ( n24 == 36 ) /*0x1db90*/
      return 431; /*0x1dc1e*/
    if ( n24 > 0x1Eu ) /*0x1db99*/
    {
      switch ( n24 ) /*0x1dbe1*/
      {
        case 0x1Fu: /*0x1dbe1*/
          return 426; /*0x1dc18*/
        case 0x20u: /*0x1dbe1*/
          return 427; /*0x1dc12*/
        case 0x21u: /*0x1dbe1*/
          return 428; /*0x1dc0c*/
        case 0x22u: /*0x1dbe1*/
          return 429; /*0x1dc06*/
        case 0x23u: /*0x1dbe1*/
          return 430; /*0x1dc00*/
      }
    }
    else
    {
      switch ( n24 ) /*0x1db9b*/
      {
        case 0x1Eu: /*0x1db9b*/
          return 425; /*0x1dbdd*/
        case 0x19u: /*0x1db9b*/
          return 420; /*0x1dbd7*/
        case 0x1Au: /*0x1db9b*/
          return 421; /*0x1dbd1*/
        case 0x1Bu: /*0x1db9b*/
          return 422; /*0x1dbcb*/
        case 0x1Cu: /*0x1db9b*/
          return 423; /*0x1dbc5*/
        case 0x1Du: /*0x1db9b*/
          return 424; /*0x1dbbf*/
      }
    }
    return 0; /*0x1dbb4*/
  }
  if ( n24 <= 0x2Au ) /*0x1dc22*/
  {
    switch ( n24 ) /*0x1dc24*/
    {
      case '*': /*0x1dc24*/
        return 437; /*0x1dc62*/
      case '%': /*0x1dc24*/
        return 432; /*0x1dc5c*/
      case '&': /*0x1dc24*/
        return 433; /*0x1dc56*/
      case '\'': /*0x1dc24*/
        return 434; /*0x1dc50*/
      case '(': /*0x1dc24*/
        return 435; /*0x1dc4a*/
      case ')': /*0x1dc24*/
        return 436; /*0x1dc44*/
    }
    return 0; /*0x1dc3d*/
  }
  switch ( n24 ) /*0x1dc66*/
  {
    case '+': /*0x1dc66*/
      return 438; /*0x1dc98*/
    case ',': /*0x1dc66*/
      return 439; /*0x1dc92*/
    case '-': /*0x1dc66*/
      return 440; /*0x1dc8c*/
    case '.': /*0x1dc66*/
      return 441; /*0x1dc86*/
  }
  if ( n24 != 47 ) /*0x1dc7a*/
    return 0; /*0x1dc7f*/
  return 442; /*0x1da98*/
}

// Function: RstHelper_dca0 @ 0x1dca0 (0x97 bytes)
// Index: 812/906

CHAR8 *__fastcall RstHelper_dca0(EFI_STRING_ID StringId, _BYTE *a2)
{
  int v4; // ebp
  __int64 v5; // rdi
  CHAR8 *i; // rax
  CHAR8 *Language; // rbx

  v4 = (unsigned __int16)StrLenA(a2); /*0x1dcc8*/
  v5 = (unsigned int)(2 * v4 + 2); /*0x1dcd1*/
  i = (CHAR8 *)MemAllocPages(v5); /*0x1dcd3*/
  Language = i; /*0x1dcd8*/
  if ( i ) /*0x1dcde*/
  {
    MemZero(i, 0, v5); /*0x1dce8*/
    RstAsciiStrnToUnicodeStrn(Language, v4 + 1, a2); /*0x1dcf6*/
    HiiGetString(HiiHandle, StringId, Language); /*0x1dd0c*/
    return (CHAR8 *)MemZeroThenFree(Language, v5); /*0x1dd17*/
  }
  return i; /*0x1dd30*/
}

// Function: RstHelper_dd38 @ 0x1dd38 (0x32 bytes)
// Index: 813/906

EFI_STRING RstHelper_dd38EFI_STRING_ID StringId, unsigned __int16 a2)
{
  const CHAR8 *StringToLanguage; // rax

  StringToLanguage = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, a2, 0); /*0x1dd4b*/
  return HiiGetString(HiiHandle, StringId, StringToLanguage); /*0x1dd60*/
}

// Function: RstHelper_dd6c @ 0x1dd6c (0x5c bytes)
// Index: 814/906

CHAR8 *RstHelper_dd6cunsigned __int8 n24)
{
  __int64 StringToLanguage; // rax

  if ( n24 == 0xFF ) /*0x1dd73*/
    StringToLanguage = 0; /*0x1dd86*/
  else
    StringToLanguage = RstDeviceFindByIndexAndKey(n24, "en"); /*0x1dd7f*/
  if ( !StringToLanguage ) /*0x1dd8b*/
    StringToLanguage = HiiGetStringToLanguage(HiiHandle, 0x266u, 0); /*0x1dd9c*/
  HiiCfgArrayGet(StartOfBuffer, 0x12Cu, (unsigned __int8 *)L"%s", StringToLanguage); /*0x1ddb7*/
  return StartOfBuffer; /*0x1ddc3*/
}

// Function: RstHelper_ddc8 @ 0x1ddc8 (0x116 bytes)
// Index: 815/906

CHAR8 *__fastcall RstHelper_ddc8(unsigned __int64 n0x90)
{
  unsigned __int8 n0x90_1; // bl
  _QWORD *StringToLanguage; // rbp
  __int64 v3; // rsi
  __int64 v4; // rax
  int v5; // edi
  __int64 v6; // rbx
  __int64 v7; // rax
  __int64 i[24]; // [rsp+60h] [rbp-F8h] BYREF
  int v10; // [rsp+120h] [rbp-38h]
  int v11; // [rsp+124h] [rbp-34h]
  unsigned __int16 v12; // [rsp+128h] [rbp-30h]
  int v13; // [rsp+12Ch] [rbp-2Ch]

  n0x90_1 = n0x90; /*0x1dddf*/
  if ( (_BYTE)n0x90 == 0xFF ) /*0x1dde4*/
    StringToLanguage = 0; /*0x1ddfa*/
  else
    StringToLanguage = RstDeviceFindByIndexAndKey((unsigned __int8)n0x90, "en"); /*0x1ddf5*/
  RstHelper_ce6c(n0x90_1, (__int64)i); /*0x1de04*/
  if ( !StringToLanguage ) /*0x1de0c*/
    StringToLanguage = (_QWORD *)HiiGetStringToLanguage(HiiHandle, 0x266u, 0); /*0x1de22*/
  v3 = HiiGetStringToLanguage(HiiHandle, 0x94u, 0); /*0x1de48*/
  v4 = HiiGetStringToLanguage(HiiHandle, 0xEu, 0); /*0x1de4b*/
  v5 = v12; /*0x1de57*/
  v6 = v4; /*0x1de67*/
  v7 = HiiGetStringToLanguage(HiiHandle, 0xBu, 0); /*0x1de6a*/
  HiiCfgArrayGet( /*0x1deb9*/
    StartOfBuffer,
    0x12Cu,
    (unsigned __int8 *)L"%s %s %d:%d %s%d %s%d",
    StringToLanguage,
    v7,
    v10,
    v5,
    v6,
    v11,
    v3,
    v13);
  return StartOfBuffer; /*0x1ded9*/
}

// Function: RstHelper_dee0 @ 0x1dee0 (0x148 bytes)
// Index: 816/906

CHAR8 *__fastcall RstHelper_dee0(unsigned __int8 n24)
{
  __int64 StringToLanguage; // r12
  __int64 v2; // rbp
  __int64 v3; // rsi
  __int64 v4; // rax
  int v5; // edi
  __int64 v6; // rbx
  __int64 v7; // rax
  int v9; // [rsp+20h] [rbp-158h]
  int v10; // [rsp+28h] [rbp-150h]
  int v11; // [rsp+38h] [rbp-140h]
  int v12; // [rsp+48h] [rbp-130h]
  int v13; // [rsp+58h] [rbp-120h]
  int v14; // [rsp+68h] [rbp-110h]
  int v15; // [rsp+70h] [rbp-108h]
  int v16; // [rsp+78h] [rbp-100h]
  _DWORD i[50]; // [rsp+80h] [rbp-F8h] BYREF
  unsigned __int16 v18; // [rsp+148h] [rbp-30h]
  int v19; // [rsp+14Ch] [rbp-2Ch]

  RstHelper_ce6c(n24, (__int64)i); /*0x1df06*/
  StringToLanguage = HiiGetStringToLanguage(HiiHandle, 0xDu, 0); /*0x1df2e*/
  v2 = HiiGetStringToLanguage(HiiHandle, 0x94u, 0); /*0x1df45*/
  v3 = HiiGetStringToLanguage(HiiHandle, 0xEu, 0); /*0x1df5c*/
  v4 = HiiGetStringToLanguage(HiiHandle, 0xCu, 0); /*0x1df5f*/
  v5 = v18; /*0x1df6b*/
  v6 = v4; /*0x1df7b*/
  v7 = HiiGetStringToLanguage(HiiHandle, 0xBu, 0); /*0x1df7e*/
  v16 = i[46]; /*0x1df91*/
  v15 = i[45]; /*0x1dfa6*/
  v14 = i[44]; /*0x1dfb1*/
  v13 = v19; /*0x1dfc1*/
  v12 = i[49]; /*0x1dfca*/
  v11 = i[47]; /*0x1dfe1*/
  v10 = v5; /*0x1dff6*/
  v9 = i[48]; /*0x1dffa*/
  HiiCfgArrayGet( /*0x1dffe*/
    StartOfBuffer,
    0x12Cu,
    (unsigned __int8 *)L"%s %2d:%d, %s %3d, %s%d, %s%d, %s %02x:%02x.%x",
    v7,
    v9,
    v10,
    v6,
    v11,
    v3,
    v12,
    v2,
    v13,
    StringToLanguage,
    v14,
    v15,
    v16);
  return StartOfBuffer; /*0x1e022*/
}

// Function: RstVolSpareDriveCount @ 0x1e028 (0x7c bytes)
// Index: 817/906

char RstVolSpareDriveCount()
{
  int v0; // esi
  unsigned __int64 v1; // rbx
  unsigned __int16 n0x90; // di
  int v3; // eax

  v0 = -1; /*0x1e043*/
  v1 = RstVolGetOnlineMemberMask(); /*0x1e046*/
  n0x90 = 0; /*0x1e049*/
  while ( 1 ) /*0x1e04c*/
  {
    if ( !v1 ) /*0x1e04f*/
      return 0; /*0x1e089*/
    if ( (v1 & 1) != 0 && i__0[n0x90] == 2 ) /*0x1e064*/
      break; /*0x1e064*/
LABEL_8:
    ++n0x90; /*0x1e079*/
    v1 >>= 1; /*0x1e081*/
    if ( n0x90 >= 0x90u ) /*0x1e087*/
      return 0; /*0x1e087*/
  }
  v3 = RstDeviceGetRaidLevelByIndex(n0x90); /*0x1e069*/
  if ( v0 == -1 || v0 == v3 ) /*0x1e075*/
  {
    v0 = v3; /*0x1e077*/
    goto LABEL_8; /*0x1e077*/
  }
  return 1; /*0x1e09a*/
}

// Function: RstSecurityStatusToHiiStringId @ 0x1e0a4 (0x24f bytes)
// Index: 818/906

__int64 __fastcall RstSecurityStatusToHiiStringId(unsigned int n42)
{
  __int64 result; // rax
  int v2; // ecx
  int v3; // ecx
  int v4; // ecx
  int v5; // ecx
  int v6; // ecx
  int v7; // ecx
  int v8; // ecx
  int v9; // ecx
  int v10; // ecx
  int v11; // ecx
  int v12; // ecx
  int v13; // ecx
  int v14; // ecx
  int v15; // ecx
  int v16; // ecx
  int v17; // ecx
  int v18; // ecx
  int v19; // ecx
  int v20; // ecx
  int v21; // ecx
  int v22; // ecx
  int v23; // ecx
  int v24; // ecx
  int v25; // ecx
  int v26; // ecx
  int v27; // ecx
  int v28; // ecx
  int v29; // ecx
  int v30; // ecx
  int v31; // ecx
  int v32; // ecx
  int v33; // ecx

  result = 0; /*0x1e0a4*/
  if ( n42 > 0x18 ) /*0x1e0a9*/
  {
    if ( n42 > 0x24 ) /*0x1e1e3*/
    {
      if ( n42 > 0x2A ) /*0x1e27b*/
      {
        v30 = n42 - 43; /*0x1e2bc*/
        if ( v30 ) /*0x1e2bf*/
        {
          v31 = v30 - 1; /*0x1e2c1*/
          if ( v31 ) /*0x1e2c4*/
          {
            v32 = v31 - 1; /*0x1e2c6*/
            if ( v32 ) /*0x1e2c9*/
            {
              v33 = v32 - 1; /*0x1e2cb*/
              if ( v33 ) /*0x1e2ce*/
              {
                if ( v33 == 1 ) /*0x1e2d3*/
                  return 566; /*0x1e2d5*/
              }
              else
              {
                return 565; /*0x1e2db*/
              }
            }
            else
            {
              return 564; /*0x1e2e1*/
            }
          }
          else
          {
            return 563; /*0x1e2e7*/
          }
        }
        else
        {
          return 562; /*0x1e2ed*/
        }
      }
      else if ( n42 == 42 ) /*0x1e27d*/
      {
        return 561; /*0x1e2b6*/
      }
      else
      {
        v26 = n42 - 37; /*0x1e27f*/
        if ( v26 ) /*0x1e282*/
        {
          v27 = v26 - 1; /*0x1e284*/
          if ( v27 ) /*0x1e287*/
          {
            v28 = v27 - 1; /*0x1e289*/
            if ( v28 ) /*0x1e28c*/
            {
              v29 = v28 - 1; /*0x1e28e*/
              if ( v29 ) /*0x1e291*/
              {
                if ( v29 == 1 ) /*0x1e296*/
                  return 560; /*0x1e298*/
              }
              else
              {
                return 559; /*0x1e29e*/
              }
            }
            else
            {
              return 558; /*0x1e2a4*/
            }
          }
          else
          {
            return 557; /*0x1e2aa*/
          }
        }
        else
        {
          return 556; /*0x1e2b0*/
        }
      }
    }
    else if ( n42 == 36 ) /*0x1e1e9*/
    {
      return 555; /*0x1e272*/
    }
    else if ( n42 > 0x1E ) /*0x1e1f2*/
    {
      v22 = n42 - 31; /*0x1e237*/
      if ( v22 ) /*0x1e23a*/
      {
        v23 = v22 - 1; /*0x1e23c*/
        if ( v23 ) /*0x1e23f*/
        {
          v24 = v23 - 1; /*0x1e241*/
          if ( v24 ) /*0x1e244*/
          {
            v25 = v24 - 1; /*0x1e246*/
            if ( v25 ) /*0x1e249*/
            {
              if ( v25 == 1 ) /*0x1e24e*/
                return 554; /*0x1e254*/
            }
            else
            {
              return 553; /*0x1e25a*/
            }
          }
          else
          {
            return 552; /*0x1e260*/
          }
        }
        else
        {
          return 551; /*0x1e266*/
        }
      }
      else
      {
        return 550; /*0x1e26c*/
      }
    }
    else if ( n42 == 30 ) /*0x1e1f4*/
    {
      return 549; /*0x1e231*/
    }
    else
    {
      v18 = n42 - 25; /*0x1e1f6*/
      if ( v18 ) /*0x1e1f9*/
      {
        v19 = v18 - 1; /*0x1e1fb*/
        if ( v19 ) /*0x1e1fe*/
        {
          v20 = v19 - 1; /*0x1e200*/
          if ( v20 ) /*0x1e203*/
          {
            v21 = v20 - 1; /*0x1e205*/
            if ( v21 ) /*0x1e208*/
            {
              if ( v21 == 1 ) /*0x1e20d*/
                return 548; /*0x1e213*/
            }
            else
            {
              return 547; /*0x1e219*/
            }
          }
          else
          {
            return 546; /*0x1e21f*/
          }
        }
        else
        {
          return 545; /*0x1e225*/
        }
      }
      else
      {
        return 544; /*0x1e22b*/
      }
    }
  }
  else if ( n42 == 24 ) /*0x1e0af*/
  {
    return 543; /*0x1e1da*/
  }
  else if ( n42 > 0xC ) /*0x1e0b8*/
  {
    if ( n42 > 0x12 ) /*0x1e15a*/
    {
      v14 = n42 - 19; /*0x1e19f*/
      if ( v14 ) /*0x1e1a2*/
      {
        v15 = v14 - 1; /*0x1e1a4*/
        if ( v15 ) /*0x1e1a7*/
        {
          v16 = v15 - 1; /*0x1e1a9*/
          if ( v16 ) /*0x1e1ac*/
          {
            v17 = v16 - 1; /*0x1e1ae*/
            if ( v17 ) /*0x1e1b1*/
            {
              if ( v17 == 1 ) /*0x1e1b6*/
                return 542; /*0x1e1bc*/
            }
            else
            {
              return 541; /*0x1e1c2*/
            }
          }
          else
          {
            return 540; /*0x1e1c8*/
          }
        }
        else
        {
          return 539; /*0x1e1ce*/
        }
      }
      else
      {
        return 538; /*0x1e1d4*/
      }
    }
    else if ( n42 == 18 ) /*0x1e15c*/
    {
      return 537; /*0x1e199*/
    }
    else
    {
      v10 = n42 - 13; /*0x1e15e*/
      if ( v10 ) /*0x1e161*/
      {
        v11 = v10 - 1; /*0x1e163*/
        if ( v11 ) /*0x1e166*/
        {
          v12 = v11 - 1; /*0x1e168*/
          if ( v12 ) /*0x1e16b*/
          {
            v13 = v12 - 1; /*0x1e16d*/
            if ( v13 ) /*0x1e170*/
            {
              if ( v13 == 1 ) /*0x1e175*/
                return 536; /*0x1e17b*/
            }
            else
            {
              return 535; /*0x1e181*/
            }
          }
          else
          {
            return 534; /*0x1e187*/
          }
        }
        else
        {
          return 533; /*0x1e18d*/
        }
      }
      else
      {
        return 532; /*0x1e193*/
      }
    }
  }
  else if ( n42 == 12 ) /*0x1e0be*/
  {
    return 531; /*0x1e151*/
  }
  else if ( n42 > 6 ) /*0x1e0c7*/
  {
    v6 = n42 - 7; /*0x1e116*/
    if ( v6 ) /*0x1e119*/
    {
      v7 = v6 - 1; /*0x1e11b*/
      if ( v7 ) /*0x1e11e*/
      {
        v8 = v7 - 1; /*0x1e120*/
        if ( v8 ) /*0x1e123*/
        {
          v9 = v8 - 1; /*0x1e125*/
          if ( v9 ) /*0x1e128*/
          {
            if ( v9 == 1 ) /*0x1e12d*/
              return 530; /*0x1e133*/
          }
          else
          {
            return 529; /*0x1e139*/
          }
        }
        else
        {
          return 528; /*0x1e13f*/
        }
      }
      else
      {
        return 527; /*0x1e145*/
      }
    }
    else
    {
      return 526; /*0x1e14b*/
    }
  }
  else if ( n42 == 6 ) /*0x1e0c9*/
  {
    return 525; /*0x1e110*/
  }
  else if ( n42 ) /*0x1e0cd*/
  {
    v2 = n42 - 1; /*0x1e0cf*/
    if ( v2 ) /*0x1e0d2*/
    {
      v3 = v2 - 1; /*0x1e0d4*/
      if ( v3 ) /*0x1e0d7*/
      {
        v4 = v3 - 1; /*0x1e0d9*/
        if ( v4 ) /*0x1e0dc*/
        {
          v5 = v4 - 1; /*0x1e0de*/
          if ( v5 ) /*0x1e0e1*/
          {
            if ( v5 == 1 ) /*0x1e0e6*/
              return 524; /*0x1e0ec*/
          }
          else
          {
            return 523; /*0x1e0f2*/
          }
        }
        else
        {
          return 522; /*0x1e0f8*/
        }
      }
      else
      {
        return 521; /*0x1e0fe*/
      }
    }
    else
    {
      return 520; /*0x1e104*/
    }
  }
  else
  {
    return 519; /*0x1e10a*/
  }
  return result; /*0x1e0f1*/
}

// Function: RstRaidLevelToHiiStringId @ 0x1e2f4 (0x269 bytes)
// Index: 819/906

__int16 __fastcall RstRaidLevelToHiiStringId(unsigned int n24)
{
  __int16 n24_1; // ax
  int v2; // ecx
  int v3; // ecx
  int v4; // ecx
  int v5; // ecx
  int v6; // ecx
  int v7; // ecx
  int v8; // ecx
  int v9; // ecx
  int v10; // ecx
  int v11; // ecx
  int v12; // ecx
  int v13; // ecx
  int v14; // ecx
  int v15; // ecx
  int v16; // ecx
  int v17; // ecx
  int v18; // ecx
  int v19; // ecx
  int v20; // ecx
  int v21; // ecx
  int v22; // ecx
  int v23; // ecx
  int v24; // ecx
  int v25; // ecx
  int v26; // ecx
  int v27; // ecx
  int v28; // ecx
  int v29; // ecx
  int v30; // ecx
  int v31; // ecx
  int v32; // ecx
  int v33; // ecx

  n24_1 = 24; /*0x1e2f6*/
  if ( n24 <= 0x18 ) /*0x1e2fb*/
  {
    if ( n24 == 24 ) /*0x1e301*/
      return 41; /*0x1e42f*/
    if ( n24 > 0xC ) /*0x1e30a*/
    {
      if ( n24 > 0x12 ) /*0x1e3aa*/
      {
        v14 = n24 - 19; /*0x1e3f2*/
        if ( !v14 ) /*0x1e3f4*/
          return 36; /*0x1e429*/
        v15 = v14 - 1; /*0x1e3f6*/
        if ( !v15 ) /*0x1e3f9*/
          return 37; /*0x1e423*/
        v16 = v15 - 1; /*0x1e3fb*/
        if ( !v16 ) /*0x1e3fe*/
          return 38; /*0x1e41d*/
        v17 = v16 - 1; /*0x1e400*/
        if ( !v17 ) /*0x1e403*/
          return 39; /*0x1e417*/
        if ( v17 == 1 ) /*0x1e408*/
          return 40; /*0x1e411*/
      }
      else
      {
        if ( n24 == 18 ) /*0x1e3ac*/
          return 35; /*0x1e3ec*/
        v10 = n24 - 13; /*0x1e3ae*/
        if ( !v10 ) /*0x1e3b1*/
          return 30; /*0x1e3e6*/
        v11 = v10 - 1; /*0x1e3b3*/
        if ( !v11 ) /*0x1e3b6*/
          return 31; /*0x1e3e0*/
        v12 = v11 - 1; /*0x1e3b8*/
        if ( !v12 ) /*0x1e3bb*/
          return 32; /*0x1e3da*/
        v13 = v12 - 1; /*0x1e3bd*/
        if ( !v13 ) /*0x1e3c0*/
          return 33; /*0x1e3d4*/
        if ( v13 == 1 ) /*0x1e3c5*/
          return 34; /*0x1e3ce*/
      }
    }
    else
    {
      if ( n24 == 12 ) /*0x1e310*/
        return 29; /*0x1e3a2*/
      if ( n24 > 6 ) /*0x1e319*/
      {
        v6 = n24 - 7; /*0x1e366*/
        if ( !v6 ) /*0x1e369*/
          return n24_1; /*0x1e369*/
        v7 = v6 - 1; /*0x1e36f*/
        if ( !v7 ) /*0x1e372*/
          return 25; /*0x1e39c*/
        v8 = v7 - 1; /*0x1e374*/
        if ( !v8 ) /*0x1e377*/
          return 26; /*0x1e396*/
        v9 = v8 - 1; /*0x1e379*/
        if ( !v9 ) /*0x1e37c*/
          return 27; /*0x1e390*/
        if ( v9 == 1 ) /*0x1e381*/
          return 28; /*0x1e38a*/
      }
      else
      {
        if ( n24 == 6 ) /*0x1e31b*/
          return 23; /*0x1e365*/
        if ( !n24 ) /*0x1e31f*/
          return 17; /*0x1e35f*/
        v2 = n24 - 1; /*0x1e321*/
        if ( !v2 ) /*0x1e324*/
          return 18; /*0x1e359*/
        v3 = v2 - 1; /*0x1e326*/
        if ( !v3 ) /*0x1e329*/
          return 19; /*0x1e353*/
        v4 = v3 - 1; /*0x1e32b*/
        if ( !v4 ) /*0x1e32e*/
          return 20; /*0x1e34d*/
        v5 = v4 - 1; /*0x1e330*/
        if ( !v5 ) /*0x1e333*/
          return 21; /*0x1e347*/
        if ( v5 == 1 ) /*0x1e338*/
          return 22; /*0x1e341*/
      }
    }
    return 0; /*0x1e338*/
  }
  if ( n24 <= 0x24 ) /*0x1e437*/
  {
    if ( n24 == 36 ) /*0x1e43d*/
      return 53; /*0x1e4d3*/
    if ( n24 > 0x1E ) /*0x1e44a*/
    {
      v22 = n24 - 31; /*0x1e496*/
      if ( !v22 ) /*0x1e498*/
        return 48; /*0x1e4cd*/
      v23 = v22 - 1; /*0x1e49a*/
      if ( !v23 ) /*0x1e49d*/
        return 49; /*0x1e4c7*/
      v24 = v23 - 1; /*0x1e49f*/
      if ( !v24 ) /*0x1e4a2*/
        return 50; /*0x1e4c1*/
      v25 = v24 - 1; /*0x1e4a4*/
      if ( !v25 ) /*0x1e4a7*/
        return 51; /*0x1e4bb*/
      if ( v25 == 1 ) /*0x1e4ac*/
        return 52; /*0x1e4b5*/
    }
    else
    {
      if ( n24 == 30 ) /*0x1e44c*/
        return 47; /*0x1e490*/
      v18 = n24 - 25; /*0x1e453*/
      if ( !v18 ) /*0x1e455*/
        return 42; /*0x1e48a*/
      v19 = v18 - 1; /*0x1e457*/
      if ( !v19 ) /*0x1e45a*/
        return 43; /*0x1e484*/
      v20 = v19 - 1; /*0x1e45c*/
      if ( !v20 ) /*0x1e45f*/
        return 44; /*0x1e47e*/
      v21 = v20 - 1; /*0x1e461*/
      if ( !v21 ) /*0x1e464*/
        return 45; /*0x1e478*/
      if ( v21 == 1 ) /*0x1e469*/
        return 46; /*0x1e472*/
    }
    return 0; /*0x1e469*/
  }
  if ( n24 <= 0x2A ) /*0x1e4db*/
  {
    if ( n24 == 42 ) /*0x1e4dd*/
      return 59; /*0x1e51d*/
    v26 = n24 - 37; /*0x1e4e4*/
    if ( !v26 ) /*0x1e4e6*/
      return 54; /*0x1e517*/
    v27 = v26 - 1; /*0x1e4e8*/
    if ( !v27 ) /*0x1e4eb*/
      return 55; /*0x1e511*/
    v28 = v27 - 1; /*0x1e4ed*/
    if ( !v28 ) /*0x1e4f0*/
      return 56; /*0x1e50b*/
    v29 = v28 - 1; /*0x1e4f2*/
    if ( !v29 ) /*0x1e4f5*/
      return 57; /*0x1e505*/
    if ( v29 == 1 ) /*0x1e4fa*/
      return 58; /*0x1e4ff*/
    return 0; /*0x1e4fa*/
  }
  v30 = n24 - 43; /*0x1e523*/
  if ( !v30 ) /*0x1e525*/
    return 60; /*0x1e557*/
  v31 = v30 - 1; /*0x1e527*/
  if ( !v31 ) /*0x1e52a*/
    return 61; /*0x1e551*/
  v32 = v31 - 1; /*0x1e52c*/
  if ( !v32 ) /*0x1e52f*/
    return 62; /*0x1e54b*/
  v33 = v32 - 1; /*0x1e531*/
  if ( !v33 ) /*0x1e534*/
    return 63; /*0x1e545*/
  if ( v33 != 1 ) /*0x1e539*/
    return 0; /*0x1e53e*/
  return 64; /*0x1e341*/
}

// Function: RstSecurityCapToHiiStringId @ 0x1e560 (0x23b bytes)
// Index: 820/906

__int64 __fastcall RstSecurityCapToHiiStringId(unsigned int n42)
{
  __int64 result; // rax
  int v2; // ecx
  int v3; // ecx
  int v4; // ecx
  int v5; // ecx
  int v6; // ecx
  int v7; // ecx
  int v8; // ecx
  int v9; // ecx
  int v10; // ecx
  int v11; // ecx
  int v12; // ecx
  int v13; // ecx
  int v14; // ecx
  int v15; // ecx
  int v16; // ecx
  int v17; // ecx
  int v18; // ecx
  int v19; // ecx
  int v20; // ecx
  int v21; // ecx
  int v22; // ecx
  int v23; // ecx
  int v24; // ecx
  int v25; // ecx
  int v26; // ecx
  int v27; // ecx
  int v28; // ecx
  int v29; // ecx
  int v30; // ecx
  int v31; // ecx
  int v32; // ecx
  int v33; // ecx

  result = 0; /*0x1e560*/
  if ( n42 > 0x18 ) /*0x1e565*/
  {
    if ( n42 > 0x24 ) /*0x1e697*/
    {
      if ( n42 > 0x2A ) /*0x1e727*/
      {
        v30 = n42 - 43; /*0x1e766*/
        if ( v30 ) /*0x1e769*/
        {
          v31 = v30 - 1; /*0x1e76b*/
          if ( v31 ) /*0x1e76e*/
          {
            v32 = v31 - 1; /*0x1e770*/
            if ( v32 ) /*0x1e773*/
            {
              v33 = v32 - 1; /*0x1e775*/
              if ( v33 ) /*0x1e778*/
              {
                if ( v33 == 1 ) /*0x1e77d*/
                  return 112; /*0x1e77f*/
              }
              else
              {
                return 111; /*0x1e783*/
              }
            }
            else
            {
              return 110; /*0x1e789*/
            }
          }
          else
          {
            return 109; /*0x1e78f*/
          }
        }
        else
        {
          return 108; /*0x1e795*/
        }
      }
      else if ( n42 == 42 ) /*0x1e729*/
      {
        return 107; /*0x1e760*/
      }
      else
      {
        v26 = n42 - 37; /*0x1e72b*/
        if ( v26 ) /*0x1e72e*/
        {
          v27 = v26 - 1; /*0x1e730*/
          if ( v27 ) /*0x1e733*/
          {
            v28 = v27 - 1; /*0x1e735*/
            if ( v28 ) /*0x1e738*/
            {
              v29 = v28 - 1; /*0x1e73a*/
              if ( v29 ) /*0x1e73d*/
              {
                if ( v29 == 1 ) /*0x1e742*/
                  return 106; /*0x1e744*/
              }
              else
              {
                return 105; /*0x1e748*/
              }
            }
            else
            {
              return 104; /*0x1e74e*/
            }
          }
          else
          {
            return 103; /*0x1e754*/
          }
        }
        else
        {
          return 102; /*0x1e75a*/
        }
      }
    }
    else if ( n42 == 36 ) /*0x1e69d*/
    {
      return 101; /*0x1e71e*/
    }
    else if ( n42 > 0x1E ) /*0x1e6a2*/
    {
      v22 = n42 - 31; /*0x1e6e5*/
      if ( v22 ) /*0x1e6e8*/
      {
        v23 = v22 - 1; /*0x1e6ea*/
        if ( v23 ) /*0x1e6ed*/
        {
          v24 = v23 - 1; /*0x1e6ef*/
          if ( v24 ) /*0x1e6f2*/
          {
            v25 = v24 - 1; /*0x1e6f4*/
            if ( v25 ) /*0x1e6f7*/
            {
              if ( v25 == 1 ) /*0x1e6fc*/
                return 100; /*0x1e702*/
            }
            else
            {
              return 99; /*0x1e706*/
            }
          }
          else
          {
            return 98; /*0x1e70c*/
          }
        }
        else
        {
          return 97; /*0x1e712*/
        }
      }
      else
      {
        return 96; /*0x1e718*/
      }
    }
    else if ( n42 == 30 ) /*0x1e6a4*/
    {
      return 95; /*0x1e6df*/
    }
    else
    {
      v18 = n42 - 25; /*0x1e6a6*/
      if ( v18 ) /*0x1e6a9*/
      {
        v19 = v18 - 1; /*0x1e6ab*/
        if ( v19 ) /*0x1e6ae*/
        {
          v20 = v19 - 1; /*0x1e6b0*/
          if ( v20 ) /*0x1e6b3*/
          {
            v21 = v20 - 1; /*0x1e6b5*/
            if ( v21 ) /*0x1e6b8*/
            {
              if ( v21 == 1 ) /*0x1e6bd*/
                return 94; /*0x1e6c3*/
            }
            else
            {
              return 93; /*0x1e6c7*/
            }
          }
          else
          {
            return 92; /*0x1e6cd*/
          }
        }
        else
        {
          return 91; /*0x1e6d3*/
        }
      }
      else
      {
        return 90; /*0x1e6d9*/
      }
    }
  }
  else if ( n42 == 24 ) /*0x1e56b*/
  {
    return 89; /*0x1e68e*/
  }
  else if ( n42 > 0xC ) /*0x1e574*/
  {
    if ( n42 > 0x12 ) /*0x1e612*/
    {
      v14 = n42 - 19; /*0x1e655*/
      if ( v14 ) /*0x1e658*/
      {
        v15 = v14 - 1; /*0x1e65a*/
        if ( v15 ) /*0x1e65d*/
        {
          v16 = v15 - 1; /*0x1e65f*/
          if ( v16 ) /*0x1e662*/
          {
            v17 = v16 - 1; /*0x1e664*/
            if ( v17 ) /*0x1e667*/
            {
              if ( v17 == 1 ) /*0x1e66c*/
                return 88; /*0x1e672*/
            }
            else
            {
              return 87; /*0x1e676*/
            }
          }
          else
          {
            return 86; /*0x1e67c*/
          }
        }
        else
        {
          return 85; /*0x1e682*/
        }
      }
      else
      {
        return 84; /*0x1e688*/
      }
    }
    else if ( n42 == 18 ) /*0x1e614*/
    {
      return 83; /*0x1e64f*/
    }
    else
    {
      v10 = n42 - 13; /*0x1e616*/
      if ( v10 ) /*0x1e619*/
      {
        v11 = v10 - 1; /*0x1e61b*/
        if ( v11 ) /*0x1e61e*/
        {
          v12 = v11 - 1; /*0x1e620*/
          if ( v12 ) /*0x1e623*/
          {
            v13 = v12 - 1; /*0x1e625*/
            if ( v13 ) /*0x1e628*/
            {
              if ( v13 == 1 ) /*0x1e62d*/
                return 82; /*0x1e633*/
            }
            else
            {
              return 81; /*0x1e637*/
            }
          }
          else
          {
            return 80; /*0x1e63d*/
          }
        }
        else
        {
          return 79; /*0x1e643*/
        }
      }
      else
      {
        return 78; /*0x1e649*/
      }
    }
  }
  else if ( n42 == 12 ) /*0x1e57a*/
  {
    return 77; /*0x1e609*/
  }
  else if ( n42 > 6 ) /*0x1e583*/
  {
    v6 = n42 - 7; /*0x1e5d0*/
    if ( v6 ) /*0x1e5d3*/
    {
      v7 = v6 - 1; /*0x1e5d5*/
      if ( v7 ) /*0x1e5d8*/
      {
        v8 = v7 - 1; /*0x1e5da*/
        if ( v8 ) /*0x1e5dd*/
        {
          v9 = v8 - 1; /*0x1e5df*/
          if ( v9 ) /*0x1e5e2*/
          {
            if ( v9 == 1 ) /*0x1e5e7*/
              return 76; /*0x1e5ed*/
          }
          else
          {
            return 75; /*0x1e5f1*/
          }
        }
        else
        {
          return 74; /*0x1e5f7*/
        }
      }
      else
      {
        return 73; /*0x1e5fd*/
      }
    }
    else
    {
      return 72; /*0x1e603*/
    }
  }
  else if ( n42 == 6 ) /*0x1e585*/
  {
    return 71; /*0x1e5ca*/
  }
  else if ( n42 ) /*0x1e589*/
  {
    v2 = n42 - 1; /*0x1e58b*/
    if ( v2 ) /*0x1e58e*/
    {
      v3 = v2 - 1; /*0x1e590*/
      if ( v3 ) /*0x1e593*/
      {
        v4 = v3 - 1; /*0x1e595*/
        if ( v4 ) /*0x1e598*/
        {
          v5 = v4 - 1; /*0x1e59a*/
          if ( v5 ) /*0x1e59d*/
          {
            if ( v5 == 1 ) /*0x1e5a2*/
              return 70; /*0x1e5a8*/
          }
          else
          {
            return 69; /*0x1e5ac*/
          }
        }
        else
        {
          return 68; /*0x1e5b2*/
        }
      }
      else
      {
        return 67; /*0x1e5b8*/
      }
    }
    else
    {
      return 66; /*0x1e5be*/
    }
  }
  else
  {
    return 65; /*0x1e5c4*/
  }
  return result; /*0x1e5ab*/
}

// Function: RstRaidRoundDownCapacity @ 0x1e79c (0xaf bytes)
// Index: 821/906

__int16 __fastcall RstRaidRoundDownCapacity(unsigned __int16 n64)
{
  int n64_1; // edx
  __int16 n256; // ax
  __int16 n1024; // cx

  n64_1 = n64; /*0x1e79c*/
  n256 = 256; /*0x1e79f*/
  if ( n64 > 0x100u ) /*0x1e7a6*/
  {
    if ( n64 == 512 ) /*0x1e803*/
      return n256; /*0x1e803*/
    n1024 = 1024; /*0x1e805*/
    if ( n64_1 == 1024 ) /*0x1e80c*/
      return 512; /*0x1e846*/
    n256 = 2048; /*0x1e80e*/
    if ( n64_1 == 2048 ) /*0x1e815*/
      return n1024; /*0x1e815*/
    n1024 = 4096; /*0x1e817*/
    if ( n64_1 == 4096 ) /*0x1e81e*/
      return n256; /*0x1e81e*/
    n256 = 0x2000; /*0x1e820*/
    switch ( n64_1 ) /*0x1e827*/
    {
      case 0x2000: /*0x1e827*/
        return n1024; /*0x1e845*/
      case 0x3FDC: /*0x1e827*/
        return n256; /*0x1e82f*/
      case 0x8000: /*0x1e827*/
        return 0x4000; /*0x1e841*/
    }
    return 0; /*0x1e83b*/
  }
  if ( n64 == 256 ) /*0x1e7a8*/
    return 128; /*0x1e7f9*/
  n256 = 2; /*0x1e7aa*/
  if ( n64 == 2 ) /*0x1e7b1*/
    return 1; /*0x1e7f3*/
  if ( n64 != 4 ) /*0x1e7b5*/
  {
    n256 = 4; /*0x1e7bb*/
    if ( n64 != 8 ) /*0x1e7c2*/
    {
      n256 = 8; /*0x1e7c8*/
      if ( n64 != 16 ) /*0x1e7cf*/
      {
        n256 = 16; /*0x1e7d1*/
        if ( n64 != 32 ) /*0x1e7d8*/
        {
          n256 = 32; /*0x1e7da*/
          if ( n64 != 64 ) /*0x1e7e1*/
          {
            n256 = 64; /*0x1e7e3*/
            if ( n64 != 128 ) /*0x1e7ea*/
              return 0; /*0x1e7ea*/
          }
        }
      }
    }
  }
  return n256; /*0x1e7ec*/
}

// Function: RstDiskNumberToStatusCode @ 0x1e84c (0x39 bytes)
// Index: 822/906

__int64 __fastcall RstDiskNumberToStatusCode(__int16 n32)
{
  __int64 result; // rax

  result = 1; /*0x1e84f*/
  if ( n32 != 1 ) /*0x1e856*/
  {
    switch ( n32 ) /*0x1e85a*/
    {
      case 2: /*0x1e85a*/
        return result; /*0x1e85a*/
      case 4: /*0x1e85a*/
        return 5; /*0x1e881*/
      case 8: /*0x1e85a*/
        return 10; /*0x1e87b*/
      case 16: /*0x1e85a*/
        return result; /*0x1e869*/
    }
    if ( n32 != 32 ) /*0x1e86e*/
      return 0xFFFF; /*0x1e875*/
  }
  return 0; /*0x1e875*/
}

// Function: RstHelper_e888 @ 0x1e888 (0x45 bytes)
// Index: 823/906

bool sub_1E888()
{
  bool result; // al

  if ( !byte_58030 ) /*0x1e893*/
  {
    byte_58030 = 1; /*0x1e8b6*/
    result = HiiBlockToConfig((__int64)&qword_24318, (__int64)L"RstHiiConfig", 310, (__int64)&i__5, 0); /*0x1e8bd*/
    --byte_58030; /*0x1e8c2*/
  }
  return result; /*0x1e8c8*/
}

// Function: RstHiiGetBlockConfig @ 0x1e8d0 (0xcb bytes)
// Index: 824/906

bool RstHiiGetBlockConfig()
{
  unsigned __int64 v0; // rdi
  unsigned __int16 n0x90; // bx
  unsigned __int64 v2; // rbp
  unsigned __int64 v3; // rsi
  __int64 i[3]; // [rsp+20h] [rbp-F8h] BYREF
  unsigned __int64 v6; // [rsp+38h] [rbp-E0h]

  v0 = RstVolGetOnlineMemberMask(); /*0x1e8f4*/
  n0x90 = 0; /*0x1e8f7*/
  v2 = 0; /*0x1e8fb*/
  v3 = 0; /*0x1e8fe*/
  while ( v0 ) /*0x1e904*/
  {
    if ( (v0 & 1) != 0 && i__0[n0x90] == 2 ) /*0x1e91a*/
    {
      RstHelper_ce6c(n0x90, (__int64)i); /*0x1e924*/
      if ( v2 ) /*0x1e931*/
      {
        if ( v2 > v6 ) /*0x1e943*/
          v2 = v6; /*0x1e943*/
LABEL_10:
        if ( v3 < v6 ) /*0x1e94a*/
          v3 = v6; /*0x1e94a*/
        goto LABEL_12; /*0x1e94a*/
      }
      if ( v3 ) /*0x1e936*/
        goto LABEL_10; /*0x1e936*/
      v2 = v6; /*0x1e938*/
      v3 = v6; /*0x1e93b*/
    }
LABEL_12:
    ++n0x90; /*0x1e94e*/
    v0 >>= 1; /*0x1e956*/
    if ( n0x90 >= 0x90u ) /*0x1e95c*/
      return v3 && 100 * (v3 - v2) / v3 > 0xA; /*0x1e95c*/
  }
  return v3 && 100 * (v3 - v2) / v3 > 0xA; /*0x1e976*/
}

// Function: RstRaidVolCheckCapability @ 0x1e99c (0x1b2 bytes)
// Index: 825/906

bool __fastcall RstRaidVolCheckCapability(__int64 n18, __int64 n127)
{
  unsigned __int16 n8; // di
  unsigned __int16 n8_1; // si
  unsigned __int16 n8_2; // bp
  unsigned __int16 n8_3; // bx
  unsigned __int16 n8_4; // r12
  unsigned __int64 v7; // rbx
  __int64 i[3]; // [rsp+20h] [rbp-F8h] BYREF
  unsigned __int64 v10; // [rsp+38h] [rbp-E0h]

  n8 = 8; /*0x1e9b8*/
  n8_1 = 8; /*0x1e9c3*/
  n8_2 = 8; /*0x1e9c6*/
  n8_3 = 8; /*0x1e9c9*/
  n8_4 = 8; /*0x1e9cc*/
  if ( (unsigned __int16)n18 >= 0x11u ) /*0x1e9d0*/
  {
    if ( (unsigned __int16)n18 <= 0x12u ) /*0x1e9d9*/
    {
      if ( (_WORD)n127 ) /*0x1ea7e*/
      {
        if ( (unsigned __int16)n127 <= 2u ) /*0x1ea83*/
        {
          n8 = 290; /*0x1eadc*/
          n8_1 = 292; /*0x1eae1*/
          n8_2 = 293; /*0x1eae4*/
          n8_3 = 294; /*0x1eae7*/
        }
        else if ( (unsigned __int16)n127 == 7 ) /*0x1ea88*/
        {
          n8 = 295; /*0x1ea91*/
          n8_1 = 296; /*0x1ea96*/
          v7 = RstVolFindSmallestCapacity(n0x18); /*0x1eaaa*/
          RstHelper_ce6c(n24, (__int64)i); /*0x1eaad*/
          if ( v10 > v7 && 100 * (v10 - v7) / v10 > 0xA ) /*0x1eacf*/
            n8_4 = 297; /*0x1ead1*/
          n8_3 = 298; /*0x1ead5*/
        }
      }
    }
    else if ( (unsigned __int16)n18 == 21 && (_WORD)n127 ) /*0x1e9ed*/
    {
      if ( (unsigned __int16)n127 <= 3u ) /*0x1e9f6*/
      {
        n8 = 448; /*0x1ea69*/
        n8_1 = 449; /*0x1ea6e*/
        n8_2 = 450; /*0x1ea71*/
        n8_3 = 447; /*0x1ea74*/
      }
      else
      {
        switch ( (unsigned __int16)n127 ) /*0x1e9fb*/
        {
          case 4u: /*0x1e9fb*/
            n8 = 452; /*0x1ea56*/
            n8_1 = 453; /*0x1ea5b*/
            n8_2 = 454; /*0x1ea5e*/
            n8_3 = 451; /*0x1ea61*/
            break;
          case 7u: /*0x1e9fb*/
            n8 = 456; /*0x1ea43*/
            n8_1 = 457; /*0x1ea48*/
            n8_2 = 458; /*0x1ea4b*/
            n8_3 = 455; /*0x1ea4e*/
            break;
          case 0xAu: /*0x1e9fb*/
            n8_2 = 757; /*0x1ea12*/
            n8_3 = 754; /*0x1ea17*/
            n8 = 755; /*0x1ea1a*/
            if ( n2 == 1 && RstVolSpareDriveCount() == 1 ) /*0x1ea26*/
              n8_1 = 756; /*0x1ea28*/
            if ( RstHiiGetBlockConfig() ) /*0x1ea2b*/
              n8_4 = 299; /*0x1ea38*/
            break;
        }
      }
    }
  }
  RstHelper_dd38(0x117u, n8); /*0x1eaf2*/
  RstHelper_dd38(0x118u, n8_1); /*0x1eaff*/
  RstHelper_dd38(0x119u, n8_2); /*0x1eb0c*/
  RstHelper_dd38(0x11Cu, n8_3); /*0x1eb19*/
  RstHelper_dd38(0x11Au, n8_4); /*0x1eb27*/
  return RstHelper_e888(); /*0x1eb44*/
}

// Function: RstRaidCalcStripeBlockSize @ 0x1eb50 (0xef bytes)
// Index: 826/906

__int16 __fastcall RstRaidCalcStripeBlockSize(__int64 n24, unsigned __int64 i)
{
  char n24_1; // r12
  unsigned __int16 n5; // di
  _BYTE *i_; // rbp
  __int16 n2; // bx
  unsigned __int16 n0x90; // si
  int n0x4000; // eax
  unsigned __int16 n64; // ax
  __int64 ia[30]; // [rsp+20h] [rbp-108h] BYREF

  n24_1 = n24; /*0x1eb70*/
  n5 = RstDiskNumberToStatusCode(n2_0); /*0x1eb82*/
  i_ = i__0; /*0x1eb8d*/
  n2 = 0; /*0x1eb94*/
  n0x90 = 0; /*0x1eb98*/
  word_57EFF = RstDeviceCapFilterByType(n5); /*0x1eb9c*/
  do /*0x1ebd2*/
  {
    if ( *i_ != 1 && !(unsigned int)RstHelper_ce6c(n0x90, (__int64)ia) ) /*0x1ebb5*/
      ++n2; /*0x1ebbf*/
    ++n0x90; /*0x1ebc3*/
    ++i_; /*0x1ebcc*/
  }
  while ( n0x90 < 0x90u ); /*0x1ebd2*/
  n0x4000 = RstRaidCheckDiskCountValid(n2, n5, 0); /*0x1ebdd*/
  if ( !n0x4000 || n24_1 ) /*0x1ebea*/
  {
    if ( n5 ) /*0x1ebf0*/
    {
      if ( n5 == 5 ) /*0x1ebfd*/
        n64 = RstDeviceBlockSizeToStripe(n2); /*0x1ec02*/
      else
        n64 = 64; /*0x1ec09*/
    }
    else
    {
      n64 = 128; /*0x1ebf2*/
    }
    LOWORD(n0x4000) = RstRaidRoundDownCapacity(n64); /*0x1ec11*/
    n0x4000 = n0x4000; /*0x1ec16*/
  }
  return n0x4000; /*0x1ec35*/
}

// Function: Assert_67 @ 0x1ec40 (0x5e bytes)
// Index: 827/906

__int64 Assert_67()
{
  if ( n2_0 != 4 ) /*0x1ec50*/
    return 5; /*0x1ec92*/
  if ( n4 == 1 ) /*0x1ec5c*/
    return 3; /*0x1ec97*/
  if ( n4 != 2 ) /*0x1ec61*/
  {
    if ( n4 != 4 ) /*0x1ec66*/
    {
      if ( (unsigned __int8)RstDebugEnabled((unsigned int)(unsigned __int8)n4 - 2, 4) ) /*0x1ec68*/
        DebugAssert("HiiStandalone.cpp", 0x5B7u, "((BOOLEAN)(0==1))"); /*0x1ec84*/
    }
    return 5; /*0x1ec84*/
  }
  return 4; /*0x1ec8e*/
}

// Function: RstHelper_eca0 @ 0x1eca0 (0x50b bytes)
// Index: 828/906

__int64 __fastcall RstHelper_eca0(char a1, char a2)
{
  unsigned __int16 v3; // bp
  unsigned __int16 n0x90; // bx
  unsigned __int64 v5; // rdi
  __int16 v6; // dx
  unsigned __int16 n5; // r8
  __int16 n512; // ax
  unsigned __int8 v9; // al
  __int64 v10; // rdx
  __int64 n12; // rdi
  char *v12; // rax
  const CHAR8 *Language; // rbx
  __int16 n49; // ax
  CHAR8 *Language_1; // rcx
  unsigned __int64 v16; // r9
  const CHAR8 *StringToLanguage; // rax
  const CHAR8 *StringToLanguage_1; // rbx
  unsigned __int64 v19; // r10
  char *v21; // [rsp+30h] [rbp-188h] BYREF
  __int64 v22; // [rsp+38h] [rbp-180h]
  __int64 v23; // [rsp+40h] [rbp-178h]
  __int64 n4; // [rsp+48h] [rbp-170h]
  _BYTE v25[16]; // [rsp+50h] [rbp-168h] BYREF
  char v26[16]; // [rsp+60h] [rbp-158h] BYREF
  char v27; // [rsp+70h] [rbp-148h]
  _BYTE v28[24]; // [rsp+78h] [rbp-140h] BYREF
  __int64 i[16]; // [rsp+90h] [rbp-128h] BYREF
  unsigned __int16 v30; // [rsp+110h] [rbp-A8h]
  unsigned __int64 v32; // [rsp+1D0h] [rbp+18h] BYREF
  unsigned __int64 v33; // [rsp+1D8h] [rbp+20h] BYREF

  v21 = 0; /*0x1ecc3*/
  v22 = 0; /*0x1ecc8*/
  v23 = 0; /*0x1eccd*/
  n4 = 0; /*0x1ecd2*/
  v3 = -1; /*0x1ecd7*/
  n0x90 = 0; /*0x1ece1*/
  v5 = RstVolGetOnlineMemberMask(); /*0x1ecec*/
  while ( v5 ) /*0x1ecf2*/
  {
    if ( (v5 & 1) != 0 ) /*0x1ecf7*/
    {
      if ( i__0[n0x90] == 1 ) /*0x1ed0a*/
      {
        v6 = 0; /*0x1ed16*/
LABEL_8:
        RstDeviceSetPropertyByIndex(n0x90, v6, 0); /*0x1ed18*/
      }
      else if ( i__0[n0x90] == 2 ) /*0x1ed0f*/
      {
        v6 = 1; /*0x1ed11*/
        goto LABEL_8; /*0x1ed14*/
      }
      if ( v3 == 0xFFFF && i__0[n0x90] != 1 ) /*0x1ed34*/
      {
        RstHelper_ce6c(n0x90, (__int64)i); /*0x1ed41*/
        v3 = v30; /*0x1ed46*/
      }
    }
    ++n0x90; /*0x1ed4e*/
    v5 >>= 1; /*0x1ed57*/
    if ( n0x90 >= 0x90u ) /*0x1ed5d*/
      break; /*0x1ed5d*/
  }
  RstUnicodeStrnToAsciiStrn(v26, 0x10u, (char *)&i__5 + 1); /*0x1ed5f*/
  v21 = v26; /*0x1ed83*/
  v27 = 0; /*0x1ed88*/
  n5 = RstDiskNumberToStatusCode(n2_0); /*0x1eda3*/
  WORD1(v23) = n5; /*0x1eda7*/
  if ( (unsigned __int16)n0x4000 > 0x80u ) /*0x1edaf*/
  {
    n512 = 512; /*0x1ee18*/
    if ( n0x4000 != 256 ) /*0x1ee1d*/
    {
      n512 = 1024; /*0x1ee21*/
      if ( n0x4000 != 512 ) /*0x1ee26*/
      {
        n512 = 2048; /*0x1ee2a*/
        if ( n0x4000 != 1024 ) /*0x1ee2f*/
        {
          n512 = 4096; /*0x1ee33*/
          if ( n0x4000 != 2048 ) /*0x1ee38*/
          {
            n512 = 0x2000; /*0x1ee3c*/
            if ( n0x4000 != 4096 ) /*0x1ee41*/
            {
              n512 = 0x4000; /*0x1ee45*/
              if ( n0x4000 != 0x2000 ) /*0x1ee4a*/
              {
                if ( n0x4000 != 0x4000 ) /*0x1ee4e*/
                  goto LABEL_37; /*0x1ee4e*/
                n512 = 0x8000; /*0x1ee58*/
              }
            }
          }
        }
      }
    }
    goto LABEL_39; /*0x1ee58*/
  }
  switch ( n0x4000 ) /*0x1edb1*/
  {
    case 128: /*0x1edb1*/
      n512 = 256; /*0x1ee0a*/
      goto LABEL_39; /*0x1ee0f*/
    case 1: /*0x1edb1*/
      LOWORD(v23) = 2; /*0x1ee03*/
      goto LABEL_40; /*0x1ee08*/
    case 2: /*0x1edb1*/
      LOWORD(v23) = 4; /*0x1edfc*/
      goto LABEL_40; /*0x1ee01*/
    case 4: /*0x1edb1*/
      n512 = 8; /*0x1edf5*/
      goto LABEL_39; /*0x1edfa*/
    case 8: /*0x1edb1*/
      LOWORD(v23) = 16; /*0x1edee*/
      goto LABEL_40; /*0x1edf3*/
    case 16: /*0x1edb1*/
      n512 = 32; /*0x1ede7*/
      goto LABEL_39; /*0x1edec*/
    case 32: /*0x1edb1*/
      n512 = 64; /*0x1ede0*/
LABEL_39:
      LOWORD(v23) = n512; /*0x1ee5d*/
      goto LABEL_40; /*0x1ee5d*/
    case 64: /*0x1edb1*/
      LOWORD(v23) = 128; /*0x1edd5*/
      goto LABEL_40; /*0x1eddb*/
  }
LABEL_37:
  LOWORD(v23) = 0; /*0x1ee50*/
LABEL_40:
  v9 = RstBlockSizeToStatus(n5); /*0x1ee62*/
  v32 = 0; /*0x1ee8e*/
  v33 = 0; /*0x1ee96*/
  WORD2(v23) = v9; /*0x1eea3*/
  RstParseDecimalString((__int64)dword_57E41, 9u, 2u, &v32, &v33); /*0x1eea9*/
  if ( a2 ) /*0x1eebb*/
  {
    LODWORD(v22) = 0; /*0x1eebd*/
  }
  else
  {
    v10 = ((v33 << 10) * (unsigned __int128)0x47AE147AE147AE15uLL) >> 64; /*0x1eed0*/
    LODWORD(v22) = ((_DWORD)v32 << 10) + ((v10 + (((v33 << 10) - v10) >> 1)) >> 6); /*0x1eeec*/
  }
  LODWORD(n4) = Assert_67(); /*0x1eefd*/
  if ( (_DWORD)n4 == 4 ) /*0x1ef03*/
    RstDeviceSetPropertyByIndex((unsigned __int8)n0x90, 1, 3); /*0x1ef12*/
  n12 = (unsigned int)Assert_116((__int64)&v21, v3, a1 == 0, 1); /*0x1ef30*/
  v12 = (char *)RstErrorCodeToString(n12); /*0x1ef32*/
  RstAsciiStrnToUnicodeStrn(StartOfBuffer, 0x96u, v12); /*0x1ef46*/
  HiiGetString(HiiHandle, 0x24Fu, StartOfBuffer); /*0x1ef61*/
  if ( (_DWORD)n12 ) /*0x1ef70*/
  {
    if ( (_DWORD)n12 != 12 ) /*0x1f06d*/
    {
      StringToLanguage = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, 0x24Du, 0); /*0x1f07e*/
      StringToLanguage_1 = StringToLanguage; /*0x1f083*/
      if ( StringToLanguage ) /*0x1f089*/
      {
        HiiGetString(HiiHandle, 0x24Cu, StringToLanguage); /*0x1f09d*/
        (*(void (__fastcall **)(const CHAR8 *))(qword_58070 + 72))(StringToLanguage_1); /*0x1f0ac*/
      }
    }
    goto LABEL_59; /*0x1f0ac*/
  }
  if ( !a2 ) /*0x1ef79*/
  {
LABEL_59:
    LODWORD(v16) = v22; /*0x1f0af*/
    goto LABEL_60; /*0x1f0af*/
  }
  Language = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, 0x24Eu, 0); /*0x1ef9d*/
  if ( Language ) /*0x1efa3*/
  {
    RstHelper_8da8( /*0x1efef*/
      (__int64)v28,
      0x13u,
      "%d.%02d",
      (unsigned int)v22 >> 10,
      ((100 * (unsigned __int64)(unsigned int)v22) >> 10) % 0x64);
    n49 = *(_WORD *)Language; /*0x1eff4*/
    Language_1 = (CHAR8 *)Language; /*0x1eff7*/
    while ( n49 && n49 != 49 ) /*0x1f000*/
    {
      Language_1 += 2; /*0x1f002*/
      n49 = *(_WORD *)Language_1; /*0x1f005*/
    }
    if ( *(_WORD *)Language_1 ) /*0x1f00e*/
    {
      RstAsciiStrnToUnicodeStrn(Language_1, 0x14u, v28); /*0x1f01e*/
      HiiGetString(HiiHandle, 0x24Cu, Language); /*0x1f035*/
    }
    (*(void (__fastcall **)(const CHAR8 *))(qword_58070 + 72))(Language); /*0x1f044*/
  }
  v16 = 95 * (unsigned __int64)(unsigned int)v22 / 0x64; /*0x1f05f*/
  LODWORD(v22) = v16; /*0x1f063*/
LABEL_60:
  v25[0] = 0; /*0x1f0be*/
  *(_QWORD *)&v25[1] = 0; /*0x1f0c8*/
  if ( (10000 * (unsigned __int64)(unsigned int)v16) >> 10 != 100 /*0x1f10c*/
                                                            * (((10000 * (unsigned __int64)(unsigned int)v16) >> 10)
                                                             / 0x64)
    && v32
    && v33 )
  {
    LODWORD(v19) = ((100 * (unsigned __int64)(unsigned int)v16) >> 10) % 0x64 + 1; /*0x1f133*/
  }
  else
  {
    v19 = ((100 * (unsigned __int64)(unsigned int)v16) >> 10) % 0x64; /*0x1f15a*/
  }
  RstHelper_8da8((__int64)v25, 9u, "%d.%02d", (unsigned int)v16 >> 10, v19); /*0x1f176*/
  RstAsciiStrnToUnicodeStrn(dword_57E41, 9u, v25); /*0x1f189*/
  return (unsigned int)n12; /*0x1f198*/
}

// Function: RstHelper_f1ac @ 0x1f1ac (0x248 bytes)
// Index: 829/906

bool __fastcall RstHelper_f1ac(unsigned __int16 a1)
{
  unsigned int i_2; // eax
  unsigned int i_3; // ebx
  unsigned __int16 n5; // ax
  __int64 i_1; // rax
  unsigned __int64 j; // rdx
  unsigned __int16 v7; // bx
  unsigned __int16 n5_1; // ax
  __int64 j_1; // rax
  unsigned __int64 v10; // r12
  unsigned __int16 k; // bp
  int v12; // ebx
  bool v13; // al
  __int64 i[16]; // [rsp+20h] [rbp-108h] BYREF
  __int16 v16; // [rsp+A0h] [rbp-88h]
  int n2; // [rsp+B4h] [rbp-74h]

  HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1f1e9*/
  RstHelper_ce6c(a1, (__int64)i); /*0x1f1f7*/
  if ( n2 == 2 ) /*0x1f204*/
  {
    i_2 = RstVolFindDevicesByLevel(v16); /*0x1f212*/
    i_3 = i_2; /*0x1f220*/
    if ( *((_BYTE *)&i__5 + a1 + 71) == 1 ) /*0x1f227*/
    {
      byte_57F34 = 0; /*0x1f230*/
      n5 = RstDiskNumberToStatusCode(n2_0); /*0x1f237*/
      i_1 = Assert_115(n5_0, n5, 0, 0); /*0x1f24b*/
      i_0 = i_1; /*0x1f257*/
      if ( n2 == 2 ) /*0x1f25e*/
        i_0 = ~dword_57F1F & (unsigned int)i_1; /*0x1f26b*/
    }
    else
    {
      i_0 = i_2; /*0x1f274*/
      byte_57F34 = 1; /*0x1f27b*/
    }
    for ( j = 0; i_3; i_3 >>= 1 ) /*0x1f287*/
    {
      if ( (i_3 & 1) != 0 ) /*0x1f290*/
        *((_BYTE *)&i__5 + (unsigned __int16)j + 71) = *((_BYTE *)&i__5 + a1 + 71); /*0x1f29a*/
      LOWORD(j) = j + 1; /*0x1f29f*/
    }
  }
  else if ( *((_BYTE *)&i__5 + a1 + 71) == 1 ) /*0x1f2b9*/
  {
    v7 = 0; /*0x1f2c4*/
    n5_1 = RstDiskNumberToStatusCode(n2_0); /*0x1f2c7*/
    j_1 = Assert_115(n5_0, n5_1, 0, 0); /*0x1f2db*/
    j = j_1; /*0x1f2e0*/
    if ( j_1 ) /*0x1f2e6*/
    {
      while ( (j & 1) == 0 || *((_BYTE *)&i__5 + v7 + 71) == 1 ) /*0x1f2f5*/
      {
        j >>= 1; /*0x1f2fb*/
        ++v7; /*0x1f2fe*/
        if ( !j ) /*0x1f304*/
          goto LABEL_16; /*0x1f304*/
      }
    }
    else
    {
LABEL_16:
      i_0 = j_1; /*0x1f306*/
      if ( n2 == 2 ) /*0x1f314*/
        i_0 = (unsigned int)j_1 & ~dword_57F1F; /*0x1f321*/
    }
  }
  else
  {
    v10 = RstVolGetOnlineMemberMask(); /*0x1f331*/
    for ( k = 0; v10; ++k ) /*0x1f33a*/
    {
      if ( !(unsigned int)RstHelper_ce6c(k, (__int64)i) ) /*0x1f344*/
      {
        if ( n2 == 2 || n2 == 2 && (v12 = RstDeviceGetRaidLevelByIndex(k), v12 != (unsigned int)RstDeviceGetRaidLevelByIndex(a1)) ) /*0x1f375*/
          i_0 &= ~(1LL << k); /*0x1f383*/
      }
      v10 >>= 1; /*0x1f38a*/
    }
  }
  RstRaidCalcStripeBlockSize(0, j); /*0x1f397*/
  byte_57F08 = (unsigned int)RstHelper_eca0(1, 1) == 0; /*0x1f3a9*/
  if ( RstVolSpareDriveCount() || (v13 = RstHiiGetBlockConfig(), byte_57F55 = 0, v13) ) /*0x1f3c9*/
    byte_57F55 = 1; /*0x1f3cb*/
  return RstHelper_e888(); /*0x1f3eb*/
}

// Function: RstHelper_f3f4 @ 0x1f3f4 (0xa3 bytes)
// Index: 830/906

bool __fastcall RstHelper_f3f4(unsigned __int16 n24)
{
  __int64 n24_1; // rcx
  unsigned __int64 i; // rdx
  unsigned __int16 n5; // ax
  __int64 i_1; // rax

  HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1f413*/
  LOBYTE(n24_1) = 1; /*0x1f418*/
  RstRaidCalcStripeBlockSize(n24_1, i); /*0x1f41a*/
  byte_57F33 = 0; /*0x1f42e*/
  MemZero(i__0, 1, 144); /*0x1f435*/
  n5 = RstDiskNumberToStatusCode(n2_0); /*0x1f441*/
  i_1 = Assert_115(n5_0, n5, 0, 0); /*0x1f455*/
  i_0 = i_1; /*0x1f461*/
  if ( n2 == 2 ) /*0x1f468*/
    i_0 = ~dword_57F1F & (unsigned int)i_1; /*0x1f475*/
  byte_57F08 = (unsigned int)RstHelper_eca0(1, 1) == 0; /*0x1f487*/
  return RstHelper_e888(); /*0x1f48e*/
}

// Function: RstHelper_f498 @ 0x1f498 (0x164 bytes)
// Index: 831/906

__int16 __fastcall RstHelper_f498(__int64 i, unsigned int n5)
{
  int v4; // eax
  unsigned int v5; // ecx
  int v6; // r11d
  __int16 n8; // ax
  int v8; // r11d
  int v9; // r11d
  int v10; // r11d
  int n8_1; // r11d
  unsigned __int16 n5_1; // ax
  __int16 result; // ax
  _BYTE ia[16]; // [rsp+20h] [rbp-38h] BYREF
  CHAR16 Source[20]; // [rsp+30h] [rbp-28h] BYREF

  MemZero((_BYTE *)i, 0, 310); /*0x1f4b9*/
  *(_DWORD *)(i + 215) = n5; /*0x1f4c5*/
  *(_BYTE *)(i + 269) = -1; /*0x1f4cb*/
  *(_BYTE *)(i + 283) = 2; /*0x1f4d2*/
  *(_BYTE *)(i + 270) = -1; /*0x1f4d9*/
  *(_BYTE *)i = RstRaidCheckLevelConfigurable(n5); /*0x1f4eb*/
  v4 = RstDeviceCountConfigured(); /*0x1f4ed*/
  v5 = *(_DWORD *)(i + 215); /*0x1f4f2*/
  *(_DWORD *)(i + 259) = v4; /*0x1f4f8*/
  *(_QWORD *)(i + 239) = RstVolFindDevicesByProperty(v5); /*0x1f503*/
  *(_DWORD *)(i + 255) = RstVolumeCheckMixedRaidType(); /*0x1f50f*/
  *(_DWORD *)(i + 219) = HiiBlockCompareConst(); /*0x1f527*/
  MemZero(ia, 0, 16); /*0x1f52d*/
  MemZero(Source, 0, 32); /*0x1f53f*/
  RstHelper_cc54(ia, 0x10u); /*0x1f54b*/
  RstAsciiStrnToUnicodeStrn(Source, 0x10u, ia); /*0x1f55c*/
  StrnCpy((CHAR16 *)(i + 1), Source, 0x20u); /*0x1f56d*/
  word_57E53 = RstRaidCheckLevelSupport(*(_DWORD *)(i + 215)); /*0x1f57d*/
  v6 = (unsigned __int16)RstRaidLevelToBitmap(*(_DWORD *)(i + 215)); /*0x1f58f*/
  n8 = 1; /*0x1f593*/
  v8 = v6 - 1; /*0x1f596*/
  if ( v8 ) /*0x1f599*/
  {
    v9 = v8 - 1; /*0x1f59b*/
    if ( v9 ) /*0x1f59e*/
    {
      v10 = v9 - 2; /*0x1f5a0*/
      if ( v10 ) /*0x1f5a3*/
      {
        n8_1 = v10 - 4; /*0x1f5a5*/
        n8 = 8; /*0x1f5a9*/
        if ( n8_1 ) /*0x1f5ac*/
        {
          if ( n8_1 == 8 ) /*0x1f5b1*/
            n8 = 16; /*0x1f5ba*/
          else
            n8 = -1; /*0x1f5b3*/
        }
      }
      else
      {
        n8 = 4; /*0x1f5bf*/
      }
    }
    else
    {
      n8 = 2; /*0x1f5c6*/
    }
  }
  n2_0 = n8; /*0x1f5cc*/
  n5_1 = RstDiskNumberToStatusCode(n8); /*0x1f5d3*/
  result = RstDeviceCapFilterByType(n5_1); /*0x1f5db*/
  word_57EFF = result; /*0x1f5ef*/
  return result; /*0x1f5f6*/
}

// Function: RstHelper_f5fc @ 0x1f5fc (0x24d bytes)
// Index: 832/906

EFI_STRING __fastcall RstHelper_f5fc(char a1)
{
  int v2; // eax
  int v3; // eax
  int v4; // eax
  unsigned __int16 n750; // ax
  __int64 StringToLanguage; // rbx
  __int64 v7; // rax
  EFI_STRING result; // rax
  unsigned int v9; // esi
  unsigned __int8 n0x18; // bp
  unsigned __int16 v11; // di
  unsigned __int16 v12; // ax
  __int64 v13; // rbx
  __int64 v14; // rax
  EFI_STRING_ID _stuvwxyz_____; // cx
  _BYTE i_3[16]; // [rsp+40h] [rbp-118h] BYREF
  _WORD i_2[12]; // [rsp+50h] [rbp-108h] BYREF
  _WORD i[20]; // [rsp+68h] [rbp-F0h] BYREF
  __int64 i_1[4]; // [rsp+90h] [rbp-C8h] BYREF
  unsigned int v20; // [rsp+B4h] [rbp-A4h]
  unsigned __int64 v21; // [rsp+B8h] [rbp-A0h]
  int n55_1; // [rsp+11Ch] [rbp-3Ch]
  int n55; // [rsp+120h] [rbp-38h]

  RstHelper_f498((__int64)&i__5, 0); /*0x1f622*/
  if ( a1 ) /*0x1f629*/
    RstHelper_e888(); /*0x1f62b*/
  v2 = RstGetGlobalMode(); /*0x1f630*/
  if ( v2 ) /*0x1f637*/
  {
    v3 = v2 - 1; /*0x1f639*/
    if ( !v3 ) /*0x1f63c*/
    {
      n750 = 750; /*0x1f656*/
      goto LABEL_11; /*0x1f65b*/
    }
    v4 = v3 - 1; /*0x1f63e*/
    if ( !v4 ) /*0x1f641*/
    {
      n750 = 751; /*0x1f64f*/
      goto LABEL_11; /*0x1f654*/
    }
    if ( v4 == 1 ) /*0x1f646*/
    {
      n750 = 752; /*0x1f648*/
      goto LABEL_11; /*0x1f64d*/
    }
  }
  n750 = 749; /*0x1f65d*/
LABEL_11:
  StringToLanguage = HiiGetStringToLanguage(HiiHandle, n750, 0); /*0x1f662*/
  v7 = HiiGetStringToLanguage(HiiHandle, 0x2ECu, 0); /*0x1f686*/
  HiiCfgArrayGet(StartOfBuffer, 0x12Cu, (unsigned __int8 *)L"%s %s", v7, StringToLanguage); /*0x1f6ad*/
  result = HiiGetString(HiiHandle, 0x2F1u, StartOfBuffer); /*0x1f6c4*/
  v9 = dword_57F23; /*0x1f6c9*/
  if ( dword_57F23 ) /*0x1f6d1*/
  {
    n0x18 = 0; /*0x1f6d7*/
    do /*0x1f826*/
    {
      if ( (v9 & 1) != 0 ) /*0x1f6e6*/
      {
        RstHelper_c8a8(n0x18, (__int64)i_1); /*0x1f6f7*/
        MemZero(StartOfBuffer, 0, 300); /*0x1f704*/
        MemZero(i, 0, 34); /*0x1f714*/
        MemZero(i_2, 0, 20); /*0x1f724*/
        MemZero(i_3, 0, 10); /*0x1f734*/
        RstAsciiStrnToUnicodeStrn(i, 0x11u, (_BYTE *)i_1 + 4); /*0x1f74b*/
        RstFormatDiskSize((__int64)i_3, v21, v20, 1, 0); /*0x1f76d*/
        RstAsciiStrnToUnicodeStrn(i_2, 0xAu, i_3); /*0x1f781*/
        v11 = RstDeviceTypeToHiiStringId(n55); /*0x1f799*/
        v12 = RstDeviceTypeToHiiStringId(n55_1); /*0x1f79c*/
        v13 = HiiGetStringToLanguage(HiiHandle, v12, 0); /*0x1f7c0*/
        v14 = HiiGetStringToLanguage(HiiHandle, v11, 0); /*0x1f7c3*/
        HiiCfgArrayGet(StartOfBuffer, 0x12Cu, (unsigned __int8 *)L"%s, %s, %s, %s", i, v14, i_2, v13); /*0x1f7ee*/
        if ( n0x18 >= 0x18u ) /*0x1f7f7*/
          _stuvwxyz_____ = 0; /*0x1f80a*/
        else
          _stuvwxyz_____ = aStuvwxyz[n0x18]; // "stuvwxyz{|}~" /*0x1f804*/
        result = HiiGetString(HiiHandle, _stuvwxyz_____, StartOfBuffer); /*0x1f81c*/
      }
      ++n0x18; /*0x1f821*/
      v9 >>= 1; /*0x1f824*/
    }
    while ( v9 ); /*0x1f826*/
  }
  return result; /*0x1f840*/
}

// Function: RstHelper_f84c @ 0x1f84c (0x255 bytes)
// Index: 833/906

EFI_STRING __fastcall RstHelper_f84c(unsigned int n5)
{
  EFI_STRING result; // rax
  unsigned int v2; // esi
  unsigned __int8 n0x18; // bp
  unsigned __int16 v4; // di
  unsigned __int16 v5; // ax
  __int64 StringToLanguage; // rbx
  __int64 v7; // rax
  EFI_STRING_ID StringId; // cx
  unsigned __int64 v9; // rdi
  unsigned __int8 n0x30; // bl
  EFI_STRING_ID StringId_1; // si
  const CHAR8 *Language; // rax
  EFI_STRING_ID StringId_2; // si
  const CHAR8 *Language_1; // rax
  _BYTE i_3[16]; // [rsp+40h] [rbp-108h] BYREF
  _WORD i_2[12]; // [rsp+50h] [rbp-F8h] BYREF
  _WORD i[20]; // [rsp+68h] [rbp-E0h] BYREF
  __int64 i_1[4]; // [rsp+90h] [rbp-B8h] BYREF
  unsigned int v19; // [rsp+B4h] [rbp-94h]
  unsigned __int64 v20; // [rsp+B8h] [rbp-90h]
  int n55_1; // [rsp+11Ch] [rbp-2Ch]
  int n55; // [rsp+120h] [rbp-28h]

  RstHelper_f498((__int64)&i__5, n5); /*0x1f871*/
  RstHelper_e888(); /*0x1f876*/
  result = RstHelper_dd38(0x96u, 0x90u); /*0x1f883*/
  v2 = dword_57F23; /*0x1f888*/
  if ( dword_57F23 ) /*0x1f897*/
  {
    n0x18 = 0; /*0x1f89d*/
    do /*0x1f9fb*/
    {
      if ( (v2 & 1) != 0 ) /*0x1f8ac*/
      {
        RstHelper_c8a8(n0x18, (__int64)i_1); /*0x1f8bd*/
        MemZero(StartOfBuffer, 0, 300); /*0x1f8d1*/
        MemZero(i, 0, 34); /*0x1f8e1*/
        MemZero(i_2, 0, 20); /*0x1f8f1*/
        MemZero(i_3, 0, 10); /*0x1f901*/
        RstAsciiStrnToUnicodeStrn(i, 0x11u, (_BYTE *)i_1 + 4); /*0x1f918*/
        RstFormatDiskSize((__int64)i_3, v20, v19, 1, 0); /*0x1f93a*/
        RstAsciiStrnToUnicodeStrn(i_2, 0xAu, i_3); /*0x1f94e*/
        v4 = RstDeviceTypeToHiiStringId(n55); /*0x1f966*/
        v5 = RstDeviceTypeToHiiStringId(n55_1); /*0x1f969*/
        StringToLanguage = HiiGetStringToLanguage(HiiHandle, v5, 0); /*0x1f98d*/
        v7 = HiiGetStringToLanguage(HiiHandle, v4, 0); /*0x1f990*/
        HiiCfgArrayGet(StartOfBuffer, 0x12Cu, (unsigned __int8 *)L"%s, %s, %s, %s", i, v7, i_2, StringToLanguage); /*0x1f9c1*/
        if ( n0x18 >= 0x18u ) /*0x1f9ca*/
          StringId = 0; /*0x1f9db*/
        else
          StringId = *(__int16 *)((char *)&word_27A00 + (_QWORD)&_ImageBase[n0x18]); /*0x1f9d0*/
        result = HiiGetString(HiiHandle, StringId, StartOfBuffer); /*0x1f9f1*/
      }
      ++n0x18; /*0x1f9f6*/
      v2 >>= 1; /*0x1f9f9*/
    }
    while ( v2 ); /*0x1f9fb*/
  }
  v9 = qword_57F0F; /*0x1fa01*/
  if ( qword_57F0F ) /*0x1fa0b*/
  {
    n0x30 = 0; /*0x1fa0d*/
    do /*0x1fa81*/
    {
      if ( (v9 & 1) != 0 ) /*0x1fa18*/
      {
        if ( n0x30 >= 0x30u ) /*0x1fa1d*/
          StringId_1 = 0; /*0x1fa2d*/
        else
          StringId_1 = *(__int16 *)((char *)&word_27A30 + (_QWORD)&_ImageBase[n0x30]); /*0x1fa22*/
        Language = RstHelper_dd6c(n0x30); /*0x1fa31*/
        HiiGetString(HiiHandle, StringId_1, Language); /*0x1fa46*/
        if ( n0x30 >= 0x30u ) /*0x1fa4e*/
          StringId_2 = 0; /*0x1fa5e*/
        else
          StringId_2 = *(__int16 *)((char *)&word_27A90 + (_QWORD)&_ImageBase[n0x30]); /*0x1fa53*/
        Language_1 = RstHelper_dee0(n0x30); /*0x1fa62*/
        result = HiiGetString(HiiHandle, StringId_2, Language_1); /*0x1fa77*/
      }
      ++n0x30; /*0x1fa7c*/
      v9 >>= 1; /*0x1fa7e*/
    }
    while ( v9 ); /*0x1fa81*/
  }
  return result; /*0x1fa9b*/
}

// Function: RstHelper_faa4 @ 0x1faa4 (0xf1 bytes)
// Index: 834/906

void __fastcall RstHelper_faa4(__int16 n10)
{
  unsigned int n12; // ebx
  char *v2; // rax
  __int64 StringToLanguage; // rax
  __int16 n23; // [rsp+50h] [rbp+8h] BYREF
  __int16 n13; // [rsp+52h] [rbp+Ah]

  if ( n10 == 1 || n10 == 10 ) /*0x1fac3*/
  {
    HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1fae4*/
    n12 = RstHelper_eca0(0, 0); /*0x1faf2*/
    if ( n12 ) /*0x1faf6*/
    {
      do /*0x1fb66*/
      {
        v2 = (char *)RstErrorCodeToString(n12); /*0x1fb0d*/
        RstAsciiStrnToUnicodeStrn(StartOfBuffer, 0x96u, v2); /*0x1fb1d*/
        StringToLanguage = HiiGetStringToLanguage(HiiHandle, 0x252u, 0); /*0x1fb31*/
        ConsolePrintBoxed(23, &n23, &unk_2442C, StringToLanguage, StartOfBuffer, &unk_2442C, 0); /*0x1fb54*/
      }
      while ( n23 != 23 && n13 != 13 ); /*0x1fb66*/
    }
    ((void (*)(void))qword_35418[42])(); /*0x1fb6f*/
    RstHelper_f84c(n5_0); /*0x1fb7b*/
  }
}

// Function: RstHelper_fb98 @ 0x1fb98 (0x2da bytes)
// Index: 835/906

char __fastcall RstHelper_fb98(__int16 j)
{
  int n14; // eax
  unsigned __int16 v3; // ax
  unsigned __int8 n0x30; // bl
  unsigned __int16 v5; // ax
  unsigned __int16 v6; // ax
  unsigned __int64 v7; // rsi
  unsigned __int8 n24; // di
  EFI_STRING_ID StringId; // ax
  const CHAR8 *Language; // r8
  EFI_STRING_ID StringId_1; // ax
  const CHAR8 *Language_1; // r8
  __int64 n5; // rdx
  __int16 n8; // ax
  _WORD *n0x90; // rcx
  unsigned int v16; // edi
  EFI_STRING_ID n744; // si
  CHAR8 *Language_2; // rax
  _BYTE i[112]; // [rsp+30h] [rbp-78h] BYREF

  n14 = RstHelper_c8a8(j, (__int64)&i__1); /*0x1fbbe*/
  if ( n14 != 14 ) /*0x1fbc6*/
  {
    dword_57F09 = dword_58008; /*0x1fbde*/
    n0x18 = j; /*0x1fbe4*/
    RstHelper_dca0(0x132u, (_BYTE *)&i__1 + 4); /*0x1fbeb*/
    v3 = RstDeviceTypeToHiiStringId(n55); /*0x1fbf6*/
    RstHelper_dd38(0x135u, v3); /*0x1fc03*/
    MemZero(i, 0, 100); /*0x1fc13*/
    n0x30 = 0; /*0x1fc2b*/
    RstFormatDiskSize((__int64)i, qword_57F98, dword_57F94, 1, 0); /*0x1fc34*/
    RstHelper_dca0(0x13Au, i); /*0x1fc43*/
    v5 = RstDeviceTypeToHiiStringId(n55_0); /*0x1fc4e*/
    RstHelper_dd38(0x13Du, v5); /*0x1fc5b*/
    RstHelper_dd38(0x140u, 10 - (byte_57FF8 != 0)); /*0x1fc76*/
    RstHelper_8da8((__int64)i, 0x63u, "%ld", dword_57F94); /*0x1fc96*/
    RstHelper_dca0(0x143u, i); /*0x1fca5*/
    v6 = RstDeviceTypeToHiiStringId(n55_1); /*0x1fcb0*/
    RstHelper_dd38(0x137u, v6); /*0x1fcbd*/
    v7 = RstRaidMemberOnlineBitmask(j); /*0x1fcca*/
    qword_57F17 = v7; /*0x1fccd*/
    if ( v7 ) /*0x1fcd7*/
    {
      n24 = 0; /*0x1fcd9*/
      do /*0x1fd35*/
      {
        if ( (v7 & 1) != 0 ) /*0x1fce0*/
        {
          RstHelper_dd6c(n24); /*0x1fce5*/
          StringId = RstInitMethodToHiiStringId(n24); /*0x1fcf0*/
          HiiGetString(HiiHandle, StringId, Language); /*0x1fd02*/
          RstHelper_dee0(n24); /*0x1fd0a*/
          StringId_1 = RstSpareTypeToHiiStringId(n24); /*0x1fd15*/
          HiiGetString(HiiHandle, StringId_1, Language_1); /*0x1fd27*/
        }
        v7 >>= 1; /*0x1fd2c*/
        ++n24; /*0x1fd2f*/
      }
      while ( v7 ); /*0x1fd35*/
    }
    n5 = (unsigned int)n5; /*0x1fd37*/
    if ( (_WORD)n5 ) /*0x1fd4d*/
    {
      switch ( (unsigned __int16)n5 ) /*0x1fd52*/
      {
        case 1u: /*0x1fd52*/
          n2_0 = 2; /*0x1fd76*/
          goto LABEL_17; /*0x1fd7e*/
        case 5u: /*0x1fd52*/
          n2_0 = 4; /*0x1fd6c*/
          goto LABEL_17; /*0x1fd74*/
        case 0xAu: /*0x1fd52*/
          n8 = 8; /*0x1fd65*/
          break;
        default:
          n8 = -1; /*0x1fd5e*/
          break;
      }
    }
    else
    {
      n8 = 32; /*0x1fd80*/
    }
    n2_0 = n8; /*0x1fd85*/
LABEL_17:
    if ( n5 != 5 ) /*0x1fd8f*/
    {
      dword_57F35 = 0; /*0x1fe49*/
      goto LABEL_35; /*0x1fe49*/
    }
    LOBYTE(n5) = n0x90_0; /*0x1fd95*/
    v16 = Assert_23(n5_0, n5); /*0x1fda6*/
    dword_57F35 = v16; /*0x1fda8*/
    if ( v16 ) /*0x1fdb0*/
    {
      do /*0x1fdf2*/
      {
        if ( (v16 & 1) != 0 ) /*0x1fdb6*/
        {
          if ( n0x30 >= 0x30u ) /*0x1fdbb*/
          {
            n744 = 744; /*0x1fdcd*/
          }
          else
          {
            n0x90 = n0x90_2; /*0x1fdbd*/
            n744 = n0x90_2[n0x30]; /*0x1fdc7*/
          }
          LOBYTE(n0x90) = n0x30; /*0x1fdd2*/
          Language_2 = RstHelper_ddc8((unsigned __int64)n0x90); /*0x1fdd4*/
          HiiGetString(HiiHandle, n744, Language_2); /*0x1fde9*/
        }
        ++n0x30; /*0x1fdee*/
        v16 >>= 1; /*0x1fdf0*/
      }
      while ( v16 ); /*0x1fdf2*/
      v16 = dword_57F35; /*0x1fdf4*/
    }
    if ( n2_1 != 1 ) /*0x1fe03*/
    {
      if ( n2_1 == 2 ) /*0x1fe08*/
        goto LABEL_31; /*0x1fe08*/
      if ( n2_1 != 3 ) /*0x1fe0d*/
      {
        if ( n2_1 != 4 ) /*0x1fe12*/
        {
          n4 = 4; /*0x1fe14*/
LABEL_35:
          LOBYTE(n14) = RstHelper_e888(); /*0x1fe4f*/
          return n14; /*0x1fe4f*/
        }
LABEL_31:
        n4 = 2; /*0x1fe1d*/
        n0x90 = n0x90_0; /*0x1fe2a*/
        if ( (_BYTE)n0x90_0 == 0xFF ) /*0x1fe32*/
          dword_57F35 = v16 | 0x80000000; /*0x1fe38*/
        goto LABEL_35; /*0x1fe3e*/
      }
    }
    n4 = 1; /*0x1fe40*/
    goto LABEL_35; /*0x1fe47*/
  }
  return n14; /*0x1fe6c*/
}

// Function: RstHelper_fe74 @ 0x1fe74 (0xed bytes)
// Index: 836/906

bool RstHelper_fe74()
{
  unsigned int n2; // eax
  char n0x90; // bl
  unsigned int v3; // eax

  HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1fe95*/
  dword_57F09 &= ~0x80000000; /*0x1fe9a*/
  if ( n5 == 5 ) /*0x1fea9*/
  {
    n2 = Assert_67(); /*0x1feab*/
    n0x90 = 0; /*0x1feb0*/
    if ( n2 < 2 || n2 == 3 ) /*0x1fec0*/
      goto LABEL_6; /*0x1fec0*/
    if ( n2 != 4 ) /*0x1fec5*/
    {
      if ( n2 != 5 ) /*0x1feca*/
      {
LABEL_8:
        n0x90 = n0x90_0; /*0x1fedc*/
        return RstHelper_e888(); /*0x1fee2*/
      }
LABEL_6:
      if ( n2_1 != n2 ) /*0x1fed2*/
        dword_57F09 |= 0x80000000; /*0x1fed4*/
      goto LABEL_8; /*0x1fed4*/
    }
    if ( n2_1 != 4 || (_BYTE)n0x90_0 != n0x90 ) /*0x1ff09*/
    {
      dword_57F09 |= 0x80000000; /*0x1ff0b*/
      if ( n2_1 != 4 ) /*0x1ff16*/
      {
        if ( RstDebugEnabled() && _bittest(&dword_57F35, 0x1Fu) ) /*0x1ff21*/
          DebugAssert("HiiStandalone.cpp", 0x932u, "( hii_g_Configuration.RwhJournalDisksBitMap & 0x80000000 ) == 0"); /*0x1ff3e*/
        v3 = dword_57F35; /*0x1ff43*/
        if ( dword_57F35 ) /*0x1ff4b*/
        {
          while ( (v3 & 1) == 0 ) /*0x1ff4f*/
          {
            ++n0x90; /*0x1ff51*/
            v3 >>= 1; /*0x1ff53*/
            if ( !v3 ) /*0x1ff55*/
              return RstHelper_e888(); /*0x1ff55*/
          }
          n0x90 = n0x90; /*0x1ff59*/
        }
      }
    }
  }
  return RstHelper_e888(); /*0x1fee8*/
}

// Function: RstHelper_ff64 @ 0x1ff64 (0xf5 bytes)
// Index: 837/906

bool RstHelper_ff64()
{
  unsigned int n4; // ebx
  unsigned int n12; // ebx
  char *v2; // rax
  __int64 StringToLanguage; // rax
  __int16 n23; // [rsp+50h] [rbp+8h] BYREF
  __int16 n13; // [rsp+52h] [rbp+Ah]

  HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1ff93*/
  n4 = Assert_67(); /*0x1ff9d*/
  if ( n4 == 4 && n0x90 != -1 ) /*0x1ffad*/
    RstDeviceSetPropertyByIndex((unsigned __int8)n0x90, 1, 3); /*0x1ffb8*/
  n12 = Assert_107(byte_57F88, n4); /*0x1ffca*/
  if ( n12 ) /*0x1ffce*/
  {
    do /*0x2003e*/
    {
      v2 = (char *)RstErrorCodeToString(n12); /*0x1ffe5*/
      RstAsciiStrnToUnicodeStrn(StartOfBuffer, 0x96u, v2); /*0x1fff5*/
      StringToLanguage = HiiGetStringToLanguage(HiiHandle, 0x2EBu, 0); /*0x20009*/
      ConsolePrintBoxed(23, &n23, &unk_2442C, StringToLanguage, StartOfBuffer, &unk_2442C, 0); /*0x2002c*/
    }
    while ( n23 != 23 && n13 != 13 ); /*0x2003e*/
  }
  return RstHelper_e888(); /*0x2004f*/
}

// Function: Assert_77 @ 0x2005c (0x12c bytes)
// Index: 838/906

void __fastcall Assert_77(__int64 n2)
{
  unsigned int n12; // ebx
  char *v2; // rax
  __int16 n23; // [rsp+40h] [rbp+8h] BYREF
  __int16 n13; // [rsp+42h] [rbp+Ah]

  if ( (_WORD)n2 ) /*0x20070*/
  {
    if ( (unsigned __int16)n2 <= 2u ) /*0x20079*/
    {
      Assert_24(n24); /*0x2015a*/
    }
    else
    {
      if ( (unsigned __int16)n2 == 3 ) /*0x20082*/
      {
        Assert_24(n24); /*0x20138*/
        ((void (*)(void))qword_35418[42])(); /*0x20144*/
        RstHelper_f5fc(1); /*0x2014d*/
        return; /*0x20152*/
      }
      if ( (unsigned __int16)n2 == 4 ) /*0x2008b*/
      {
        LOBYTE(n2) = n24; /*0x20125*/
        RstDeviceStartOp(n2); /*0x2012b*/
      }
      else
      {
        if ( (unsigned __int16)n2 != 7 ) /*0x20094*/
        {
          if ( (unsigned __int16)n2 == 10 ) /*0x2009d*/
            RstHelper_faa4(10); /*0x200a3*/
          return; /*0x200a8*/
        }
        n12 = Assert_19(n24); /*0x200b8*/
        if ( n12 ) /*0x200bc*/
        {
          do /*0x20114*/
          {
            v2 = (char *)RstErrorCodeToString(n12); /*0x200cc*/
            RstAsciiStrnToUnicodeStrn(StartOfBuffer, 0x96u, v2); /*0x200e0*/
            ConsolePrintBoxed(23, &n23, &unk_2442C, StartOfBuffer, &unk_2442C, 0); /*0x20102*/
          }
          while ( n23 != 23 && n13 != 13 ); /*0x20114*/
        }
      }
    }
    ((void (*)(void))qword_35418[42])(); /*0x20166*/
    RstHelper_f84c(n5_0); /*0x20173*/
  }
}

// Function: RstHelper_0188 @ 0x20188 (0x15b bytes)
// Index: 839/906

bool RstHelper_0188()
{
  unsigned __int8 n24; // si
  unsigned __int64 j; // rdi
  EFI_STRING_ID StringId; // ax
  const CHAR8 *Language; // r8
  EFI_STRING_ID StringId_1; // ax
  const CHAR8 *Language_1; // r8
  unsigned __int64 v6; // rbx
  __int64 i[3]; // [rsp+20h] [rbp-F8h] BYREF
  unsigned __int64 v9; // [rsp+38h] [rbp-E0h]
  char v10; // [rsp+ACh] [rbp-6Ch]

  dword_57F2F = 0; /*0x2019f*/
  n24 = 0; /*0x201a6*/
  for ( j = RstVolGetOnlineMemberMask(); j; j >>= 1 ) /*0x201b4*/
  {
    if ( (j & 1) != 0 && !(unsigned int)RstHelper_be04(n0x18, n24, 1) ) /*0x201d7*/
    {
      RstHelper_ce6c(n24, (__int64)i); /*0x201ed*/
      RstHelper_dd6c(n24); /*0x201f9*/
      StringId = RstRaidLevelToHiiStringId(n24); /*0x20203*/
      HiiGetString(HiiHandle, StringId, Language); /*0x20215*/
      RstHelper_dee0(n24); /*0x2021d*/
      StringId_1 = RstSecurityCapToHiiStringId(n24); /*0x20227*/
      HiiGetString(HiiHandle, StringId_1, Language_1); /*0x20239*/
      dword_57F2F |= 1 << n24; /*0x2024e*/
      v6 = RstVolFindSmallestCapacity(n0x18); /*0x20260*/
      *((_BYTE *)&i__5 + n24 + 285) = RstVolCheckMemberSameLevel(n0x18) && RstVolFindFirstMember(n0x18) != v10 || v9 > v6 && 100 * (v9 - v6) / v9 > 0xA; /*0x202b2*/
    }
    ++n24; /*0x202ba*/
  }
  return RstHelper_e888(); /*0x202da*/
}

// Function: RstHiiQuestionHandler @ 0x202e4 (0x54 bytes)
// Index: 840/906

EFI_STRING __fastcall RstHiiQuestionHandler(unsigned __int16 n19, __int64 n24)
{
  int n19_1; // ebx
  EFI_STRING result; // rax

  n19_1 = n19; /*0x202ea*/
  RstHelper_be04(n0x18, n24, 0); /*0x202f6*/
  result = (EFI_STRING)((__int64 (*)(void))qword_35418[42])(); /*0x20302*/
  if ( n19_1 == 19 ) /*0x20310*/
    return RstHelper_f5fc(1); /*0x20320*/
  if ( n19_1 != 20 ) /*0x20316*/
  {
    if ( n19_1 != 26 ) /*0x2031c*/
      return result; /*0x2031c*/
    return RstHelper_f5fc(1); /*0x2031c*/
  }
  return RstHelper_f84c(n5_0); /*0x20325*/
}

// Function: Assert_53 @ 0x20338 (0xaa bytes)
// Index: 841/906

CHAR8 *__fastcall Assert_53(__int64 n24, unsigned __int8 a2)
{
  unsigned __int8 n24_1; // si
  EFI_STRING_ID StringId; // bx
  int v5; // eax
  unsigned __int16 n501; // dx
  _BYTE i[40]; // [rsp+20h] [rbp-28h] BYREF

  n24_1 = n24; /*0x2034a*/
  if ( RstDebugEnabled() && a2 ) /*0x2035a*/
    DebugAssert("HiiStandalone.cpp", 0xA6Au, "a_nJdPplMpbId < sizeof( arrJdPplMpbStat ) / sizeof( EFI_STRING_ID )"); /*0x2036f*/
  StringId = word_27BB0[a2]; /*0x20384*/
  i[0] = 0; /*0x20391*/
  v5 = Assert_29(n24_1, a2, i, 0x11u); /*0x20396*/
  if ( v5 ) /*0x203a0*/
  {
    if ( v5 == 1 ) /*0x203a5*/
      n501 = 501; /*0x203ae*/
    else
      n501 = 502; /*0x203a7*/
  }
  else
  {
    if ( i[0] ) /*0x203ba*/
      return RstHelper_dca0(StringId, i); /*0x203c6*/
    n501 = 500; /*0x203c8*/
  }
  return (CHAR8 *)RstHelper_dd38(StringId, n501); /*0x203dc*/
}

// Function: RstHelper_03e4 @ 0x203e4 (0x306 bytes)
// Index: 842/906

char __fastcall RstHelper_03e4(__int64 n24)
{
  unsigned __int16 n24_1; // di
  int n15; // eax
  unsigned __int8 v3; // bl
  const CHAR8 *Language; // rax
  const CHAR8 *Language_1; // rax
  unsigned __int16 v6; // ax
  _BYTE i[112]; // [rsp+30h] [rbp-188h] BYREF
  _BYTE v9[32]; // [rsp+A0h] [rbp-118h] BYREF
  unsigned __int64 i_1[8]; // [rsp+C0h] [rbp-F8h] BYREF
  int v11; // [rsp+100h] [rbp-B8h]
  _BYTE v12[64]; // [rsp+110h] [rbp-A8h] BYREF
  int n55; // [rsp+150h] [rbp-68h]
  int n5; // [rsp+154h] [rbp-64h]
  int v15; // [rsp+158h] [rbp-60h]
  int v16; // [rsp+15Ch] [rbp-5Ch]
  unsigned int v17; // [rsp+16Ch] [rbp-4Ch]
  int v18; // [rsp+170h] [rbp-48h]
  int v19; // [rsp+174h] [rbp-44h]
  int v20; // [rsp+178h] [rbp-40h]
  int v21; // [rsp+17Ch] [rbp-3Ch]
  int v22; // [rsp+180h] [rbp-38h]
  int v23; // [rsp+184h] [rbp-34h]
  unsigned __int16 v24; // [rsp+188h] [rbp-30h]
  int v25; // [rsp+18Ch] [rbp-2Ch]
  __int64 v26; // [rsp+198h] [rbp-20h]
  __int64 v27; // [rsp+1A0h] [rbp-18h]
  __int64 v28; // [rsp+1A8h] [rbp-10h]

  n24_1 = n24; /*0x20402*/
  n15 = RstHelper_ce6c(n24, (__int64)i_1); /*0x20405*/
  if ( n15 != 15 && v11 != -1 ) /*0x2041b*/
  {
    if ( n24_1 != 255 ) /*0x20430*/
      RstDeviceGetProperty((__int64)v9, n24_1, "en"); /*0x20440*/
    ::n24 = n24_1; /*0x20457*/
    dword_57F27 = v16; /*0x2045e*/
    MemZero(i, 0, 100); /*0x20464*/
    v3 = 0; /*0x2047e*/
    RstFormatDiskSize((__int64)i, i_1[3], v17, 1, 0); /*0x20487*/
    RstHelper_dca0(0x1D6u, i); /*0x20496*/
    RstHelper_dca0(0x1D3u, v12); /*0x204a8*/
    RstHelper_dca0(0x1D0u, v9); /*0x204ba*/
    Language = (const CHAR8 *)RstHelper_bd1c(n24_1, "en"); /*0x204c5*/
    HiiGetString(HiiHandle, 0x1CDu, Language); /*0x204dc*/
    Language_1 = (const CHAR8 *)RstDeviceFindByIndexAndKey(n24_1, "en"); /*0x204e7*/
    HiiGetString(HiiHandle, 0x1BCu, Language_1); /*0x204fe*/
    v6 = RstDeviceTypeToHiiStringId(n55); /*0x2050a*/
    RstHelper_dd38(0x1D9u, v6); /*0x20517*/
    RstHelper_8da8((__int64)i, 0x63u, "%ld", v17); /*0x20536*/
    RstHelper_dca0(0x1DCu, i); /*0x20545*/
    RstHelper_8da8((__int64)i, 0x63u, "%d", v23); /*0x20564*/
    RstHelper_dca0(0x1DFu, i); /*0x20573*/
    RstHelper_8da8((__int64)i, 0x63u, "%d", v22); /*0x2058b*/
    RstHelper_dca0(0x1E5u, i); /*0x2059a*/
    RstHelper_8da8((__int64)i, 0x63u, "%d", v24); /*0x205b3*/
    RstHelper_dca0(0x1EBu, i); /*0x205c2*/
    RstHelper_8da8((__int64)i, 0x63u, "%d", v21); /*0x205da*/
    RstHelper_dca0(0x1E8u, i); /*0x205e9*/
    RstHelper_8da8((__int64)i, 0x63u, "%02x:%02x.%x", v18, v19, v20); /*0x2061b*/
    RstHelper_dca0(0x1EEu, i); /*0x2062a*/
    RstHelper_8da8((__int64)i, 0x63u, "%d", v25); /*0x20642*/
    RstHelper_dca0(0x1E2u, i); /*0x20651*/
    RstHelper_8da8((__int64)i, 0x63u, "%02x:%02x.%x", v26, v27, v28); /*0x20687*/
    RstHelper_dca0(0x1F1u, i); /*0x20696*/
    if ( n5 == 5 && !v15 && RstNoop() ) /*0x206ae*/
    {
      do /*0x206ca*/
        Assert_53(n24_1, v3++); /*0x206bc*/
      while ( v3 < (unsigned __int8)RstNoop() ); /*0x206ca*/
    }
    LOBYTE(n15) = RstHelper_e888(); /*0x206cc*/
  }
  return n15; /*0x206e5*/
}

// Function: RstHelper_06ec @ 0x206ec (0x1eb bytes)
// Index: 843/906

bool RstHelper_06ec()
{
  unsigned __int16 v0; // ax
  int n8; // r11d
  __int16 n2; // ax
  unsigned __int16 n5; // ax
  __int64 i; // rax
  __int64 n5_1; // rdx
  int v6; // eax
  unsigned __int64 i_1; // rdx
  int v8; // eax
  unsigned __int64 n0x90; // rcx
  unsigned __int64 v10; // rbx
  unsigned __int8 n42; // di
  EFI_STRING_ID StringId; // ax
  const CHAR8 *Language; // r8
  unsigned int v14; // edi
  unsigned __int8 n0x90_3; // bl
  unsigned __int64 n0x90_1; // rcx
  char n0x90_2; // dl
  EFI_STRING_ID StringId_1; // si
  CHAR8 *Language_1; // rax

  qword_57E57 = RstVolGetOnlineMemberMask(); /*0x2070b*/
  word_57E53 = RstRaidCheckLevelSupport(n5_0); /*0x2071d*/
  v0 = RstRaidLevelToBitmap(n5_0); /*0x20724*/
  switch ( v0 ) /*0x2073b*/
  {
    case 1u: /*0x2073b*/
      n2 = 1; /*0x20773*/
      break;
    case 2u: /*0x2073b*/
      n2 = 2; /*0x20767*/
      n2_0 = 2; /*0x2076a*/
      goto LABEL_12; /*0x20771*/
    case 4u: /*0x2073b*/
      n2 = 4; /*0x20762*/
      break;
    default:
      n8 = v0 - 8; /*0x20747*/
      n2 = 8; /*0x2074a*/
      if ( n8 ) /*0x2074d*/
      {
        if ( n8 == 8 ) /*0x20752*/
          n2 = 16; /*0x2075b*/
        else
          n2 = -1; /*0x20754*/
      }
      break;
  }
  n2_0 = n2; /*0x20776*/
LABEL_12:
  dword_57F03 = 0; /*0x2077d*/
  byte_57F34 = 0; /*0x20787*/
  n5 = RstDiskNumberToStatusCode(n2); /*0x2078e*/
  i = Assert_115(n5_0, n5, 0, 0); /*0x207a2*/
  i_0 = i; /*0x207a7*/
  if ( n2 == 2 ) /*0x207b4*/
    i_0 = ~dword_57F1F & (unsigned int)i; /*0x207c1*/
  LOBYTE(n5_1) = -1; /*0x207ce*/
  v6 = Assert_23(n5_0, n5_1); /*0x207d0*/
  n4 = 4; /*0x207d7*/
  dword_57F35 = v6; /*0x207de*/
  n0x90 = -1; /*0x207e4*/
  RstRaidCalcStripeBlockSize(0, i_1); /*0x207eb*/
  MemZero(i__0, 1, 144); /*0x20800*/
  v8 = RstHelper_eca0(1, 1); /*0x2080b*/
  v10 = qword_57E57; /*0x20810*/
  byte_57F08 = v8 == 0; /*0x20819*/
  n42 = 0; /*0x20820*/
  if ( qword_57E57 ) /*0x20826*/
  {
    do /*0x20859*/
    {
      if ( (v10 & 1) != 0 ) /*0x2082b*/
      {
        LOBYTE(n0x90) = n42; /*0x2082d*/
        RstHelper_ddc8(n0x90); /*0x20830*/
        StringId = RstSecurityStatusToHiiStringId(n42); /*0x2083c*/
        HiiGetString(HiiHandle, StringId, Language); /*0x2084e*/
      }
      ++n42; /*0x20853*/
      v10 >>= 1; /*0x20856*/
    }
    while ( v10 ); /*0x20859*/
  }
  v14 = dword_57F35; /*0x2085b*/
  n0x90_3 = 0; /*0x20861*/
  if ( dword_57F35 ) /*0x20865*/
  {
    do /*0x208bc*/
    {
      if ( (v14 & 1) != 0 ) /*0x2086a*/
      {
        n0x90_1 = (unsigned __int8)n0x90; /*0x2086c*/
        n0x90_2 = n0x90; /*0x20879*/
        if ( n0x90 == -1 ) /*0x2087b*/
          n0x90_2 = n0x90_3; /*0x2087b*/
        n0x90 = n0x90_2; /*0x2087e*/
        if ( n0x90_3 >= 0x30u ) /*0x20887*/
        {
          StringId_1 = 0; /*0x20899*/
        }
        else
        {
          n0x90_1 = (unsigned __int64)n0x90_1; /*0x20889*/
          StringId_1 = n0x90_1[n0x90_3]; /*0x20893*/
        }
        LOBYTE(n0x90_1) = n0x90_3; /*0x2089b*/
        Language_1 = RstHelper_ddc8(n0x90_1); /*0x2089d*/
        HiiGetString(HiiHandle, StringId_1, Language_1); /*0x208b2*/
      }
      ++n0x90_3; /*0x208b7*/
      v14 >>= 1; /*0x208ba*/
    }
    while ( v14 ); /*0x208bc*/
  }
  return RstHelper_e888(); /*0x208cd*/
}

// Function: RstHelper_08d8 @ 0x208d8 (0x1e3 bytes)
// Index: 844/906

__int64 __fastcall RstHelper_08d8(__int64 a1, CHAR8 *i, __int64 *a3, __int64 a4)
{
  CHAR8 *i_1; // rbx
  _WORD *v7; // rdi
  unsigned __int64 v8; // r12
  char v9; // r12
  unsigned __int64 v10; // rax
  CHAR16 *v11; // rax
  CHAR16 *v12; // rdi
  unsigned __int64 n0xF4240; // rax
  unsigned __int64 v15; // rax
  unsigned __int64 v16; // rax
  const CHAR16 *v17; // rax
  __int64 v18; // rdi
  unsigned __int64 v19; // rax

  i_1 = i; /*0x208f7*/
  if ( !a3 || !a4 ) /*0x20906*/
    return 0x8000000000000002uLL; /*0x20906*/
  if ( !i ) /*0x20916*/
  {
    v7 = (_WORD *)HiiConfigRoutingExtract((__int64)&qword_24318, L"RstHiiConfig", qword_35418[78]); /*0x20939*/
    v8 = 2 * StrLenSafe_w(v7) + 66; /*0x20941*/
    i_1 = (CHAR8 *)MemAllocPages(v8); /*0x2094e*/
    if ( RstDebugEnabled() && !i_1 ) /*0x2095d*/
      DebugAssert("HiiStandalone.cpp", 0xB90u, "ConfigRequest != 0"); /*0x20972*/
    MemZero(i_1, 0, v8); /*0x2097f*/
    HiiCfgArrayGet(i_1, v8, (unsigned __int8 *)L"%s&OFFSET=0&WIDTH=%016LX", v7, 310); /*0x2099d*/
    *a3 = (__int64)i_1; /*0x209a5*/
    v9 = 1; /*0x209a8*/
    v10 = StrLenSafe_w(v7); /*0x209ab*/
    MemZeroThenFree(v7, 2 * v10); /*0x209b7*/
    goto LABEL_14; /*0x209bc*/
  }
  *a3 = (__int64)i; /*0x209c1*/
  v9 = 0; /*0x209d2*/
  v11 = (CHAR16 *)HiiConfigRoutingExtract((__int64)&qword_24318, L"RstHiiConfig", ImageHandle); /*0x209d5*/
  v12 = v11; /*0x209da*/
  if ( !v11 ) /*0x209e0*/
    return 0x800000000000000EuLL; /*0x209ec*/
  n0xF4240 = StrLenSafe_w(v11); /*0x209f4*/
  if ( StrCpyOrCat((const CHAR16 *)i_1, v12, n0xF4240) ) /*0x20a02*/
  {
    v15 = StrLenSafe_w(v12); /*0x20a0f*/
    MemZeroThenFree(v12, 2 * v15); /*0x20a1b*/
    return 0x800000000000000EuLL; /*0x20a20*/
  }
  v16 = StrLenSafe_w(v12); /*0x20a22*/
  MemZeroThenFree(v12, 2 * v16); /*0x20a2e*/
  v17 = Assert_44((const CHAR16 *)i_1 + 8, L"&GUID"); /*0x20a3e*/
  *a3 = (__int64)v17; /*0x20a43*/
  if ( v17 ) /*0x20a49*/
    return 0x8000000000000002uLL; /*0x20a96*/
  *a3 = (__int64)i_1; /*0x20a4b*/
LABEL_14:
  v18 = (*(__int64 (__fastcall **)(__int64, CHAR8 *, __int64 *, __int64, __int64, __int64 *))(qword_57E18 + 24))( /*0x20a4e*/
          qword_57E18,
          i_1,
          &i__5,
          310,
          a4,
          a3);
  if ( v9 ) /*0x20a7b*/
  {
    v19 = StrLenSafe_w(i_1); /*0x20a80*/
    MemZeroThenFree(i_1, 2 * v19); /*0x20a8c*/
  }
  return v18; /*0x20ab4*/
}

// Function: RstHelper_0abc @ 0x20abc (0x10b bytes)
// Index: 845/906

__int64 __fastcall RstHelper_0abc(__int64 a1, const CHAR16 *i, const CHAR16 **a3)
{
  CHAR16 *v5; // rax
  CHAR16 *v6; // rdi
  __int64 result; // rax
  unsigned __int64 n0xF4240; // rax
  unsigned __int64 v9; // rax
  unsigned __int64 v10; // rax
  _BYTE v11[320]; // [rsp+30h] [rbp-148h] BYREF
  __int64 n310; // [rsp+188h] [rbp+10h] BYREF

  if ( !i || !a3 ) /*0x20ae7*/
    return 0x8000000000000002uLL; /*0x20ba4*/
  v5 = (CHAR16 *)HiiConfigRoutingExtract((__int64)&qword_24318, L"RstHiiConfig", ImageHandle); /*0x20b02*/
  v6 = v5; /*0x20b07*/
  if ( !v5 ) /*0x20b0d*/
    return 0x800000000000000EuLL; /*0x20b19*/
  n0xF4240 = StrLenSafe_w(v5); /*0x20b21*/
  if ( StrCpyOrCat(i, v6, n0xF4240) ) /*0x20b2f*/
  {
    v9 = StrLenSafe_w(v6); /*0x20b3c*/
    MemZeroThenFree(v6, 2 * v9); /*0x20b48*/
    return 0x800000000000000EuLL; /*0x20b4d*/
  }
  v10 = StrLenSafe_w(v6); /*0x20b4f*/
  MemZeroThenFree(v6, 2 * v10); /*0x20b5b*/
  n310 = 310; /*0x20b7a*/
  result = (*(__int64 (__fastcall **)(__int64, const CHAR16 *, _BYTE *, __int64 *, const CHAR16 **))(qword_57E18 + 32))( /*0x20b8b*/
             qword_57E18,
             i,
             v11,
             &n310,
             a3);
  for ( *a3 = i; **a3; ++*a3 ) /*0x20b91*/
    ; /*0x20b96*/
  return result; /*0x20bc2*/
}

// Function: RstHiiDriverBindingOpen @ 0x20bc8 (0x54c bytes)
// Index: 846/906

unsigned __int64 __fastcall RstHiiDriverBindingOpen(
        __int64 a1,
        unsigned __int64 n3,
        unsigned __int16 n24,
        __int64 a4,
        __int64 a5,
        _QWORD *a6)
{
  __int64 n24_1; // rcx
  unsigned int n0x17; // edx
  __int64 n24_2; // rdx
  __int16 n7; // bx
  unsigned int n5_1; // ecx
  unsigned int v14; // edx
  unsigned int v15; // edx
  char v16; // dl
  int n6; // eax
  unsigned __int16 n5; // ax
  __int64 i_1; // rax
  int v20; // ecx
  unsigned int n7_1; // eax
  __int64 n127; // rdx
  __int64 n18; // rcx
  __int64 i[8]; // [rsp+20h] [rbp-1B8h] BYREF
  unsigned __int8 v25; // [rsp+60h] [rbp-178h]
  char i_2[176]; // [rsp+110h] [rbp-C8h] BYREF

  if ( a5 && a6 ) /*0x20c0b*/
  {
    *a6 = 0; /*0x20c11*/
    if ( n3 == 3 ) /*0x20c28*/
    {
      if ( (n24 & 0x8000) != 0 && (n24 & 7) == 1 && (n24 & 0xF8) == 8 && (n24 & 0x7F00) == 0 ) /*0x20c4d*/
      {
        RstHelper_f5fc(0); /*0x20c51*/
        RstHelper_e888(); /*0x20c56*/
      }
      if ( (n24 & 0x8000) =... [8535 chars total]

// Function: RstHelper_1114 @ 0x21114 (0x1f3 bytes)
// Index: 847/906

__int64 __fastcall RstHelper_1114(__int64 a1)
{
  __int64 result; // rax
  void *HiiHandle; // rax
  __int64 v4; // [rsp+48h] [rbp+10h] BYREF

  result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_279A0, 0, &v4); /*0x21136*/
  if ( result >= 0 ) /*0x21141*/
  {
    qword_58018 = v4; /*0x21158*/
    result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27960, 0, &v4); /*0x21168*/
    if ( result >= 0 ) /*0x21171*/
    {
      qword_58020 = v4; /*0x21188*/
      result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27990, 0, &v4); /*0x21198*/
      if ( result >= 0 ) /*0x211a1*/
      {
        qword_57E10 = v4; /*0x211b8*/
        result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27970, 0, &v4); /*0x211c8*/
        if ( result >= 0 ) /*0x211d1*/
        {
          qword_57E18 = v4; /*0x211ea*/
          LocateHandleBuffer(qword_35418[78], SystemTable); /*0x211f8*/
          p_sub_20ABC = (__int64)RstHelper_0abc; /*0x2120b*/
          pRstHiiDriverBindingOpen = (__int64)RstHiiDriverBindingOpen; /*0x21220*/
          p_sub_208D8 = (__int64)RstHelper_08d8; /*0x21257*/
          (*(void (__fastcall **)(_QWORD *, void *, __int64, void *, __int64 *, _QWORD))(qword_58070 + 328))( /*0x2125e*/
            qword_35418 + 78,
            &unk_27730,
            a1,
            &unk_27980,
            &p_sub_208D8,
            0);
          RstHelper_f498((__int64)&i__5, 0); /*0x2126d*/
          HiiHandle = (void *)HiiPackageListBuild((__int64)&qword_24318, qword_35418[78], &unk_27BC0, &unk_2B230, 0); /*0x2129a*/
          HiiHandle = HiiHandle; /*0x2129f*/
          if ( HiiHandle /*0x212e9*/
            && (unsigned __int16)HiiGetString(HiiHandle, 5u, L"Intel(R) VROC with VMD Technology 6.2.0.1034")
            && (unsigned __int16)HiiGetString(HiiHandle, 2u, L"Intel(R) Virtual RAID on CPU") )
          {
            RstHelper_f5fc(1); /*0x212f5*/
            return 0; /*0x212fa*/
          }
          else
          {
            return 0x8000000000000009uLL; /*0x212ab*/
          }
        }
      }
    }
  }
  return result; /*0x21301*/
}

// Function: RstHelper_1308 @ 0x21308 (0x66 bytes)
// Index: 848/906

__int64 RstHelper_1308__int64 a1)
{
  if ( HiiHandle ) /*0x2131b*/
  {
    HiiNewString((__int64)HiiHandle); /*0x2131d*/
    HiiHandle = 0; /*0x21322*/
  }
  return (*(__int64 (__fastcall **)(_QWORD, void *, __int64, void *, __int64 *, _QWORD))(qword_58070 + 336))( /*0x21368*/
           *(_QWORD *)(qword_35418 + 624),
           &unk_27730,
           a1,
           &unk_27980,
           &p_sub_208D8,
           0);
}

// Function: RstProtocolCallback42 @ 0x21370 (0xe bytes)
// Index: 849/906

__int64 RstProtocolCallback42()
{
  return ((__int64 (*)(void))qword_35418[42])();
}

// Function: RstProtocolSetFlag @ 0x21380 (0x1c bytes)
// Index: 850/906

__int64 __fastcall RstProtocolSetFlag(unsigned __int8 a1, char a2)
{
  __int64 result; // rax

  result = a1; /*0x21380*/
  if ( *(_BYTE *)(a1 + qword_35418 + 632) != 2 ) /*0x21392*/
    *(_BYTE *)(a1 + qword_35418 + 632) = a2; /*0x21394*/
  return result; /*0x2139b*/
}

// Function: DxeInstall_1 @ 0x2139c (0x5a bytes)
// Index: 851/906

__int64 DxeInstall_1unsigned __int8 a1, __int64 a2, __int64 a3)
{
  __int64 v3; // rbx
  _BYTE v5[72]; // [rsp+20h] [rbp-48h] BYREF

  v3 = a1; /*0x213a9*/
  LOBYTE(a3) = 1; /*0x213b8*/
  RstHiiStringInit(v5, *(_QWORD *)(qword_35418 + 624), a3); /*0x213bb*/
  DxeInstall(v5, (unsigned int)v3, *(unsigned __int8 *)(v3 + qword_35418 + 632)); /*0x213d7*/
  RstLedSetDeviceState((__int64)v5); /*0x213e1*/
  return DxeInstall_0(v5); /*0x213f0*/
}

// Function: DxeInstall_2 @ 0x213f8 (0x59 bytes)
// Index: 852/906

__int64 __fastcall DxeInstall_2(unsigned __int8 i, unsigned __int8 a2)
{
  int v2; // ebx
  int i_1; // edi
  __int64 v5[9]; // [rsp+20h] [rbp-48h] BYREF

  v2 = a2; /*0x21402*/
  i_1 = i; /*0x2140c*/
  RstHiiStringInit((__int64)v5, qword_35418[78], 1); /*0x2141e*/
  DxeInstall((__int64)v5, i_1, v2); /*0x2142d*/
  RstLedSetDeviceState((__int64)v5); /*0x21437*/
  return DxeInstall_0((__int64)v5); /*0x2144b*/
}

// Function: Assert_63 @ 0x21454 (0x7c bytes)
// Index: 853/906

__int64 __fastcall Assert_63(_DWORD *a1, __int64 *a2)
{
  unsigned int v4; // ebx
  __int64 v5; // r9
  __int64 v6; // rdx
  __int64 v7; // r8
  __int64 v8; // rax

  v4 = 0; /*0x2146e*/
  if ( (unsigned __int8)RstDebugEnabled(a1, a2) && !a1[25] ) /*0x21474*/
    DebugAssert("d:\\qba1\\workspace\\27822\\src\\lib\\efidriver\\BaseDevice.h", 0xD3u, "mBlkMedia.BlockSize != ( 0 )"); /*0x2148c*/
  v5 = *((unsigned int *)a2 + 3); /*0x21495*/
  v6 = *a2; /*0x21499*/
  v7 = (unsigned int)(*((_DWORD *)a2 + 2) * a1[25]); /*0x2149c*/
  if ( *((_BYTE *)a2 + 16) ) /*0x214a4*/
    v8 = (*(__int64 (__fastcall **)(_DWORD *, __int64, __int64, __int64))(*(_QWORD *)a1 + 40LL))(a1, v6, v7, v5); /*0x214b4*/
  else
    v8 = (*(__int64 (__fastcall **)(_DWORD *, __int64, __int64, __int64))(*(_QWORD *)a1 + 32LL))(a1, v6, v7, v5); /*0x214ac*/
  LOBYTE(v4) = v8 < 0; /*0x214c0*/
  return v4; /*0x214ca*/
}

// Function: RstProtocolVariableRead @ 0x214d0 (0x2b bytes)
// Index: 854/906

__int64 __fastcall RstProtocolVariableRead(__int64 *a1, const char *en)
{
  __int64 v2; // rax
  __int64 result; // rax
  __int64 v4; // [rsp+30h] [rbp+8h] BYREF

  v2 = *a1; /*0x214d4*/
  v4 = 0; /*0x214d7*/
  if ( (*(__int64 (__fastcall **)(__int64 *, const char *, __int64 *))(v2 + 64))(a1, en, &v4) < 0 ) /*0x214e8*/
    return 0; /*0x214e8*/
  result = v4; /*0x214ea*/
  if ( !v4 ) /*0x214f2*/
    return 0; /*0x214f4*/
  return result; /*0x214f6*/
}

// Function: RstHiiProtocolGetString @ 0x214fc (0x56 bytes)
// Index: 855/906

signed __int64 __fastcall RstHiiProtocolGetString(__int64 a1, __int64 a2, char *en)
{
  signed __int64 result; // rax

  if ( !a2 ) /*0x2150e*/
    return 0x800000000000000EuLL; /*0x21510*/
  result = (*(__int64 (__fastcall **)(__int64, char *, __int64, __int64))(*(_QWORD *)a2 + 72LL))(a2, en, a1, 21); /*0x2152e*/
  if ( result >= 0 ) /*0x21534*/
    return -(__int64)(a1 == 0) & 0x8000000000000002uLL; /*0x21549*/
  return result; /*0x2154c*/
}

// Function: RstProtocolCallEntry6 @ 0x21554 (0x7 bytes)
// Index: 856/906

__int64 __fastcall RstProtocolCallEntry6(_QWORD *NewContext)
{
  return (*(__int64 (__fastcall **)(_QWORD *))(*NewContext + 80LL))(NewContext);
}

// Function: RstProtocolCallEntry5 @ 0x2155c (0x7 bytes)
// Index: 857/906

__int64 __fastcall RstProtocolCallEntry5(__int64 a1)
{
  return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 56LL))(a1);
}

// Function: DxeInstall_4 @ 0x21564 (0x46 bytes)
// Index: 858/906

char DxeInstall_4()
{
  char i_1; // al
  unsigned __int8 i_2; // bl
  unsigned __int16 i; // di

  i_1 = RstDeviceCountOnline(); /*0x2156e*/
  i_2 = 0; /*0x21573*/
  for ( i = (unsigned __int8)i_1; i_2 < i; i_1 = ++i_2 ) /*0x2157b*/
    DxeInstall_2(i_2, *((_BYTE *)qword_35418 + i_2 + 632)); /*0x21590*/
  return i_1; /*0x215a4*/
}

// Function: RstProtocolEfiDispatch @ 0x215ac (0x1f bytes)
// Index: 859/906

__int64 __fastcall RstProtocolEfiDispatch(__int64 a1)
{
  return (*(__int64 (__fastcall **)(_QWORD, __int64))(**(_QWORD **)(*(_QWORD *)(qword_35418 + 704) + 16LL) + 16LL))(
           *(_QWORD *)(*(_QWORD *)(qword_35418 + 704) + 16LL),
           a1);
}

// Function: RstChecksum16 @ 0x215cc (0x1f bytes)
// Index: 860/906

__int16 __fastcall RstChecksum16(unsigned __int8 *a1, __int64 n38)
{
  __int16 result; // ax
  __int16 v4; // cx

  result = 0; /*0x215cc*/
  if ( (_WORD)n38 ) /*0x215d4*/
  {
    n38 = (unsigned __int16)n38; /*0x215d6*/
    do /*0x215e7*/
    {
      v4 = *a1++; /*0x215d9*/
      result += v4; /*0x215e0*/
      --n38; /*0x215e3*/
    }
    while ( n38 ); /*0x215e7*/
  }
  return result; /*0x215e9*/
}

// Function: RstCpuid @ 0x2163d (0x19 bytes)
// Index: 861/906

__int64 __fastcall RstCpuid(unsigned int *p_n24682)
{
  __int64 result; // rax

  _RAX = 1; /*0x21646*/
  __asm { cpuid } /*0x2164b*/
  *p_n24682 = result; /*0x2164d*/
  return result; /*0x21655*/
}

// Function: RstStringToUnsignedInt @ 0x21658 (0xf5 bytes)
// Index: 862/906

__int64 __fastcall RstStringToUnsignedInt(unsigned __int8 *a1, unsigned __int8 **a2, unsigned __int16 n16)
{
  unsigned __int8 *v4; // r9
  unsigned int v6; // r10d
  __int16 v7; // bx
  unsigned __int16 n16_1; // dx
  unsigned __int8 n0x61; // al

  v4 = a1; /*0x21668*/
  v6 = 0; /*0x2166e*/
  v7 = 0; /*0x21671*/
  if ( !a1 ) /*0x21677*/
    return 0; /*0x21679*/
  while ( *v4 == 32 || *v4 == 9 ) /*0x2168a*/
    ++v4; /*0x2168c*/
  if ( *v4 == 45 ) /*0x21695*/
  {
    v7 = 1; /*0x21697*/
    ++v4; /*0x2169c*/
  }
  if ( *v4 == 43 ) /*0x216a3*/
    ++v4; /*0x216a5*/
  if ( !n16 ) /*0x216ac*/
  {
    if ( *v4 == 48 ) /*0x216b2*/
    {
      if ( *++v4 == 120 || *v4 == 88 ) /*0x216c1*/
      {
        ++v4; /*0x216cb*/
        n16 = 16; /*0x216ce*/
      }
      else
      {
        n16 = 8; /*0x216c3*/
      }
    }
    else
    {
      n16 = 10; /*0x216d6*/
    }
  }
  while ( 1 ) /*0x21727*/
  {
    n0x61 = *v4; /*0x21727*/
    if ( !*v4 ) /*0x21727*/
      break; /*0x21727*/
    if ( n0x61 < 0x30u || n0x61 > 0x39u ) /*0x216e4*/
    {
      if ( n0x61 < 0x41u || n0x61 > 0x5Au ) /*0x216f5*/
      {
        if ( n0x61 < 0x61u || n0x61 > 0x7Au ) /*0x21706*/
          break; /*0x21706*/
        n16_1 = n0x61 - 87; /*0x2170b*/
      }
      else
      {
        n16_1 = n0x61 - 55; /*0x216fa*/
      }
    }
    else
    {
      n16_1 = n0x61 - 48; /*0x216e9*/
    }
    if ( n16_1 >= n16 ) /*0x21713*/
      break; /*0x21713*/
    ++v4; /*0x21719*/
    v6 = n16_1 + v6 * n16; /*0x21723*/
  }
  if ( v7 ) /*0x21732*/
    v6 = -v6; /*0x21734*/
  if ( a2 ) /*0x2173a*/
    *a2 = v4; /*0x2173c*/
  return v6; /*0x2174c*/
}

// Function: RstHelper_1750 @ 0x21750 (0x3c bytes)
// Index: 863/906

__int64 RstHelper_1750()
{
  __int64 n3; // rax
  __int64 v1; // rax

  n3 = (unsigned int)n3; /*0x21754*/
  if ( n3 == 3 ) /*0x2175d*/
  {
    v1 = RstHelper_2738(0, 31, 0, 1); /*0x2176a*/
    HiiGetBlockSize((unsigned __int16 *)(v1 + 2)); /*0x21773*/
    n3 = 1; /*0x21778*/
    return 1; /*0x21782*/
  }
  return n3; /*0x21787*/
}

// Function: RstHelper_178c @ 0x2178c (0xa3 bytes)
// Index: 864/906

__int64 __fastcall RstHelper_178c(unsigned __int16 *a1, __int64 n6)
{
  __int64 v3; // rax
  unsigned __int16 BlockSize; // ax
  unsigned int n4; // ecx

  v3 = RstHelper_2738(0, 31, 0, n6); /*0x217a1*/
  BlockSize = HiiGetBlockSize((unsigned __int16 *)(v3 + 2)); /*0x217aa*/
  n4 = 4; /*0x217af*/
  *a1 = BlockSize; /*0x217b4*/
  if ( n4_0 != 4 ) /*0x217bf*/
    return (unsigned int)n4_0; /*0x217c1*/
  if ( BlockSize >= 0xA1C0u && BlockSize <= 0xA1CFu /*0x217ff*/
    || BlockSize == 0xA243
    || BlockSize >= 0xA240u && BlockSize <= 0xA24Fu )
  {
    n4 = 1; /*0x2181c*/
  }
  else if ( BlockSize == 0xA2D3 || BlockSize == 0xA2D2 ) /*0x21813*/
  {
    n4 = 2; /*0x21815*/
  }
  n4_0 = n4; /*0x21821*/
  return n4; /*0x21829*/
}

// Function: DebugLogPrint_0 @ 0x21830 (0xb0 bytes)
// Index: 865/906

bool __fastcall DebugLogPrint_0(unsigned int a1, unsigned int a2)
{
  __int64 v4; // rbp
  unsigned __int64 v5; // rbx
  unsigned int v6; // eax
  unsigned int v7; // eax
  unsigned __int64 v9; // [rsp+40h] [rbp+18h] BYREF

  v4 = RstUefiGetAuthVariableInfo(&v9); /*0x21853*/
  v5 = (unsigned int)RstPassthroughByte(a1); /*0x2185b*/
  if ( v5 < v9 )
  {
    v6 = RstGetBlockSize(); /*0x21878*/
    if ( (unsigned int)v5 >= (unsigned int)RstPassthroughByte(v6) ) /*0x21886*/
    {
      v7 = RstGetBlockSizeAlt(); /*0x21888*/
      if ( (unsigned int)v5 <= (unsigned int)RstPassthroughByte(v7) ) /*0x21896*/
        return a2 <= (unsigned int)(*(_DWORD *)(60 * v5 + v4 + 56) - 1) >> 5; /*0x218aa*/
    }
    if ( (unsigned __int8)RstDebugEnabled2() )
      DebugPrintSerial(
        0x80000000,
        "GPIO ERROR: Group argument (%d) is not within range of possible groups for this PCH\n",
        (unsigned int)v5);
  }
  else if ( (unsigned __int8)RstDebugEnabled2() )
  {
    DebugPrintSerial(0x80000000, "GPIO ERROR: Group argument (%d) exceeds GPIO group range\n", (unsigned int)v5);
  }
  return 0; /*0x218da*/
}

// Function: RstHelper_18e0 @ 0x218e0 (0x7d bytes)
// Index: 866/906

__int64 RstHelper_18e0__int64 a1, unsigned __int8 a2, _DWORD *a3)
{
  __int16 v4; // si
  unsigned int v5; // ebx
  __int64 v6; // rdi
  __int64 v7; // rax
  __int64 result; // rax
  char v9; // [rsp+40h] [rbp+18h] BYREF

  v4 = a2; /*0x218f7*/
  v5 = a1; /*0x218fa*/
  v6 = (unsigned int)BYTE2_w(a1); /*0x21903*/
  LOWORD(v5) = RstPassthroughWord(v5); /*0x2190f*/
  v7 = RstUefiGetAuthVariableInfo(&v9); /*0x21911*/
  result = HiiWriteBlock((unsigned int *)((unsigned __int16)(*(_WORD *)(60 * v6 + v7 + 52) + 4 * (v4 + 2 * v5)) /*0x21940*/
                                        | (unsigned __int64)(*(unsigned __int8 *)(60 * v6 + v7) << 16)
                                        | 0xFD000000));
  *a3 = result; /*0x2194f*/
  return result; /*0x21957*/
}

// Function: RstHelper_1960 @ 0x21960 (0x91 bytes)
// Index: 867/906

__int64 __fastcall RstHelper_1960(__int64 n16908298, unsigned __int8 a2, int a3, int n257)
{
  __int16 v6; // si
  unsigned __int16 n16908298_1; // bx
  __int64 v8; // rdi
  __int16 v9; // bx
  _WORD *v10; // rax
  _QWORD v12[3]; // [rsp+20h] [rbp-18h] BYREF

  v6 = a2; /*0x2197f*/
  n16908298_1 = n16908298; /*0x21982*/
  v8 = (unsigned int)BYTE2_w(n16908298); /*0x2198b*/
  v9 = RstPassthroughWord(n16908298_1); /*0x21997*/
  v10 = RstUefiGetAuthVariableInfo(v12); /*0x21999*/
  return HiiSetBlockToVal( /*0x219ea*/
           (unsigned int *)((LOBYTE(v10[30 * v8]) << 16)
                          | (unsigned __int64)(unsigned __int16)(v10[30 * v8 + 26] + 4 * (v6 + 2 * v9))
                          | 0xFD000000),
           a3,
           n257);
}

// Function: Assert_25 @ 0x219f4 (0x15e bytes)
// Index: 868/906

__int64 __fastcall Assert_25(int n6, unsigned int a2, __int16 a3, _DWORD *a4)
{
  __int64 v7; // rbx
  __int64 v8; // rax
  __int64 v9; // rdx
  __int64 v10; // rcx
  _DWORD *v11; // rcx
  int v12; // eax
  unsigned __int16 v14; // dx
  _BYTE v15[24]; // [rsp+20h] [rbp-18h] BYREF

  v7 = (unsigned int)RstPassthroughByte(a2); /*0x21a1c*/
  v8 = RstUefiGetAuthVariableInfo(v15); /*0x21a1e*/
  if ( n6 ) /*0x21a2b*/
  {
    switch ( n6 ) /*0x21a39*/
    {
      case 1: /*0x21a39*/
        v11 = (_DWORD *)(v8 + 60 * v7); /*0x21ae9*/
        v12 = v11[6]; /*0x21aec*/
        break;
      case 2: /*0x21a39*/
        v11 = (_DWORD *)(v8 + 60 * v7); /*0x21ada*/
        v12 = v11[5]; /*0x21add*/
        break;
      case 3: /*0x21a39*/
        v11 = (_DWORD *)(v8 + 60 * v7); /*0x21acb*/
        v12 = v11[8]; /*0x21ace*/
        break;
      case 4: /*0x21a39*/
        v11 = (_DWORD *)(v8 + 60 * v7); /*0x21abc*/
        v12 = v11[7]; /*0x21abf*/
        break;
      case 5: /*0x21a39*/
        v11 = (_DWORD *)(v8 + 60 * v7); /*0x21aad*/
        v12 = v11[10]; /*0x21ab0*/
        break;
      case 6: /*0x21a39*/
        v11 = (_DWORD *)(v8 + 60 * v7); /*0x21a9e*/
        v12 = v11[11]; /*0x21aa1*/
        break;
      case 7: /*0x21a39*/
        v11 = (_DWORD *)(v8 + 60 * v7); /*0x21a8f*/
        v12 = v11[12]; /*0x21a92*/
        break;
      default:
        if ( (unsigned __int8)RstDebugEnabled(v10, v9) ) /*0x21a61*/
          DebugAssert("GpioLib.c", 0x161u, "((BOOLEAN)(0==1))"); /*0x21a81*/
        return 0x8000000000000003uLL; /*0x21a86*/
    }
  }
  else
  {
    v11 = (_DWORD *)(v8 + 60 * v7); /*0x21af8*/
    v12 = v11[2]; /*0x21afb*/
  }
  if ( v12 == -1 ) /*0x21b01*/
    return 0x8000000000000003uLL; /*0x21b0d*/
  if ( n6 == 6 || (v14 = v12 + 4 * a3, n6 == 7) ) /*0x21b1a*/
    v14 = v12 + 8 * a3; /*0x21b1c*/
  *a4 = HiiWriteBlock((unsigned int *)(v14 | (unsigned __int64)(*(unsigned __int8 *)v11 << 16) | 0xFD000000)); /*0x21b38*/
  return 0; /*0x21b4c*/
}

// Function: Assert_30 @ 0x21b54 (0x139 bytes)
// Index: 869/906

__int64 __fastcall Assert_30(int n5, unsigned __int8 a2, __int16 a3, int a4, int n257)
{
  __int64 v8; // rdi
  char *v9; // rax
  UINTN n444; // rdx
  char *v11; // rdx
  int v12; // eax
  _QWORD v14[3]; // [rsp+20h] [rbp-18h] BYREF

  v8 = (unsigned int)RstPassthroughByte(a2); /*0x21b7c*/
  v9 = (char *)RstUefiGetAuthVariableInfo(v14); /*0x21b7e*/
  if ( n5 ) /*0x21b85*/
  {
    switch ( n5 ) /*0x21b8e*/
    {
      case 1: /*0x21b8e*/
        v11 = &v9[60 * v8]; /*0x21c29*/
        v12 = *((_DWORD *)v11 + 6); /*0x21c2c*/
        break;
      case 2: /*0x21b8e*/
        v11 = &v9[60 * v8]; /*0x21c1a*/
        v12 = *((_DWORD *)v11 + 5); /*0x21c1d*/
        break;
      case 3: /*0x21b8e*/
        v11 = &v9[60 * v8]; /*0x21c0b*/
        v12 = *((_DWORD *)v11 + 8); /*0x21c0e*/
        break;
      case 4: /*0x21b8e*/
        v11 = &v9[60 * v8]; /*0x21bfc*/
        v12 = *((_DWORD *)v11 + 7); /*0x21bff*/
        break;
      case 5: /*0x21b8e*/
        v11 = &v9[60 * v8]; /*0x21bed*/
        v12 = *((_DWORD *)v11 + 10); /*0x21bf0*/
        break;
      default:
        if ( n5 <= 5 || n5 > 7 ) /*0x21bad*/
        {
          if ( !RstDebugEnabled() ) /*0x21bdd*/
            return 0x8000000000000003uLL; /*0x21bdd*/
          n444 = 444; /*0x21bdf*/
        }
        else
        {
          if ( !RstDebugEnabled() ) /*0x21bb6*/
            return 0x8000000000000003uLL; /*0x21c4d*/
          n444 = 441; /*0x21bbc*/
        }
        DebugAssert("GpioLib.c", n444, "((BOOLEAN)(0==1))"); /*0x21bcf*/
        return 0x8000000000000003uLL; /*0x21bd4*/
    }
  }
  else
  {
    v11 = &v9[60 * v8]; /*0x21c38*/
    v12 = *((_DWORD *)v11 + 2); /*0x21c3b*/
  }
  if ( v12 == -1 ) /*0x21c41*/
    return 0x8000000000000003uLL; /*0x21c41*/
  HiiSetBlockToVal( /*0x21c71*/
    (unsigned int *)(((unsigned __int8)*v11 << 16) | (unsigned __int64)(unsigned __int16)(v12 + 4 * a3) | 0xFD000000),
    a4,
    n257);
  return 0; /*0x21c87*/
}

// Function: Assert_60 @ 0x21c90 (0x8b bytes)
// Index: 870/906

__int64 __fastcall Assert_60(__int64 n16908298, unsigned int n4)
{
  __int64 n4_1; // rbx
  int n519; // eax

  n4_1 = n4; /*0x21c96*/
  n519 = WORD1_w(n16908298); /*0x21c98*/
  if ( n519 == 519 || n519 == 268 ) /*0x21ca9*/
  {
    if ( RstDebugEnabled() && (unsigned int)n4_1 >= 4 ) /*0x21ced*/
      DebugAssert("GpioLib.c", 0x24Au, "PadRstCfg < 4"); /*0x21d02*/
    return *(unsigned int *)((char *)&dword_34AA8 + (_QWORD)&_ImageBase[2 * n4_1]); /*0x21d0e*/
  }
  else
  {
    if ( RstDebugEnabled() ) /*0x21cab*/
    {
      if ( (unsigned int)n4_1 >= 3 ) /*0x21cb7*/
        DebugAssert("GpioLib.c", 0x24Du, "PadRstCfg < 3"); /*0x21ccc*/
    }
    return *(unsigned int *)((char *)&dword_34A98 + (_QWORD)&_ImageBase[2 * n4_1]); /*0x21cd8*/
  }
}

// Function: DebugLogPrint @ 0x21d1c (0x148 bytes)
// Index: 871/906

unsigned __int64 __fastcall DebugLogPrint(__int64 n16908298, int a2, _DWORD *a3)
{
  unsigned int n16908298_1; // esi
  int n519; // eax
  int v7; // ebx
  int v8; // ebx
  int v9; // ebx
  int v10; // ebx
  int v11; // ebx
  int v12; // ebx
  int n2; // ebx
  unsigned int v14; // ebx
  unsigned int v15; // eax
  unsigned int v17; // ebx
  unsigned int v18; // eax

  n16908298_1 = n16908298; /*0x21d30*/
  n519 = WORD1_w(n16908298); /*0x21d32*/
  if ( !a2 ) /*0x21d39*/
    goto LABEL_26; /*0x21d39*/
  v7 = a2 - 1; /*0x21d3f*/
  if ( !v7 ) /*0x21d42*/
  {
    if ( n519 == 519 || n519 == 268 ) /*0x21e45*/
    {
LABEL_25:
      *a3 = 3; /*0x21e47*/
      return 0; /*0x21e4d*/
    }
    goto LABEL_26; /*0x21e45*/
  }
  v8 = v7 - 2; /*0x21d4d*/
  if ( !v8 ) /*0x21d4f*/
    goto LABEL_22; /*0x21d4f*/
  v9 = v8 - 2; /*0x21d55*/
  if ( v9 )
  {
    v10 = v9 - 2; /*0x21d5d*/
    if ( v10 )
    {
      v11 = v10 - 2; /*0x21d65*/
      if ( v11 )
      {
        v12 = v11 - 2; /*0x21d6d*/
        if ( v12 )
        {
          n2 = v12 - 2; /*0x21d75*/
          if ( n2 )
          {
            if ( n2 != 2 ) /*0x21d7f*/
            {
              if ( RstDebugEnabled() ) /*0x21d81*/
                DebugAssert("GpioLib.c", 0x291u, "((BOOLEAN)(0==1))"); /*0x21da1*/
              return 0; /*0x21da6*/
            }
            if ( n519 != 519 && n519 != 268 )
            {
              if ( RstDebugEnabled2() )
              {
                v14 = RstPassthroughWord(n16908298_1); /*0x21dd3*/
                v15 = BYTE2_w(n16908298_1); /*0x21dd5*/
                DebugPrintSerial(
                  0x80000000,
                  "GPIO ERROR: Only GPD group pads can use GpioResetResume (Group=%d, Pad=%d)!\n",
                  v15,
                  v14);
              }
              return 0x8000000000000002uLL; /*0x21dfb*/
            }
            goto LABEL_25; /*0x21dbb*/
          }
          goto LABEL_21; /*0x21d77*/
        }
LABEL_22:
        *a3 = 1; /*0x21e31*/
        return 0; /*0x21e37*/
      }
    }
    else if ( n519 != 519 && n519 != 268 )
    {
      if ( RstDebugEnabled2() )
      {
        v17 = RstPassthroughWord(n16908298_1); /*0x21e1d*/
        v18 = BYTE2_w(n16908298_1); /*0x21e1f*/
        DebugPrintSerial(
          0x80000000,
          "GPIO ERROR: Only GPD group pads can use GpioDswReset (Group=%d, Pad=%d)!\n",
          v18,
          v17);
      }
      return 0x8000000000000002uLL; /*0x21e2b*/
    }
LABEL_26:
    *a3 = 0; /*0x21e4f*/
    return 0; /*0x21e4f*/
  }
LABEL_21:
  *a3 = 2; /*0x21e2d*/
  return 0; /*0x21e5e*/
}

// Function: Assert_7 @ 0x21e64 (0x254 bytes)
// Index: 872/906

__int64 __fastcall Assert_7(__int64 n16908298, __int64 a2)
{
  unsigned int n16908298_1; // edi
  unsigned int v4; // r13d
  unsigned int v5; // r12d
  char v6; // bp
  unsigned int v7; // ebx
  char v8; // al
  unsigned int v9; // r12d
  unsigned int v10; // eax
  __int64 v11; // rbx
  unsigned int v12; // eax
  __int64 v13; // rbx
  unsigned int v14; // eax
  __int64 v15; // rbx
  unsigned int v17; // [rsp+48h] [rbp+10h] BYREF
  unsigned int v18; // [rsp+4Ch] [rbp+14h] BYREF

  n16908298_1 = n16908298; /*0x21e7f*/
  v4 = WORD1_w(n16908298); /*0x21e88*/
  v5 = RstPassthroughWord(n16908298_1); /*0x21e9b*/
  v6 = v5 & 0x1F; /*0x21e9e*/
  RstHelper_18e0(n16908298_1, 0, &v17); /*0x21ea1*/
  RstHelper_18e0(n16908298_1, 1u, &v18); /*0x21eaf*/
  v7 = v17; /*0x21eb4*/
  v8 = Assert_60(n16908298_1, v17 >> 30); /*0x21ec0*/
  *(_DWORD *)(a2 + 4) &= 0xFFFFBE21; /*0x21ec5*/
  *(_BYTE *)(a2 + 3) = v8; /*0x21ed1*/
  *(_DWORD *)a2 &= 0xFF10A4E1; /*0x21ed4*/
  v9 = v5 >> 5; /*0x21ee1*/
  v10 = v18; /*0x21f2f*/
  *(_DWORD *)a2 |= v7 & 0x300 /*0x21f33*/
                 | ((v7 & 1) << 14)
                 | ((v7 & 0x1E0000 | ((v7 & 0x6000000 | ((v7 & 0x1C00 | (v7 >> 3) & 0x100000 | 0x21490200) >> 5)) >> 3)) >> 1);
  *(_DWORD *)(a2 + 4) |= (v10 & 0x3C00 | ((v7 & 0x10000000 | (v10 >> 5) & 0x100000 | 0x8084000) >> 5)) >> 9; /*0x21f54*/
  v11 = Assert_25(0, v4, v9, &v17); /*0x21f5e*/
  if ( RstDebugEnabled() && v11 < 0 ) /*0x21f74*/
  {
    if ( RstDebugEnabled2() ) /*0x21f76*/
      DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v11); /*0x21f8e*/
    DebugAssert("GpioLib.c", 0x335u, "!EFI_ERROR (Status)"); /*0x21fa2*/
  }
  v12 = v17; /*0x21fa7*/
  *(_DWORD *)a2 &= ~0x40u; /*0x21fab*/
  *(_DWORD *)a2 |= (((v12 >> v6) & 1) << 6) | 0x20; /*0x21fcb*/
  v13 = Assert_25(6, v4, v9, &v17); /*0x21fd2*/
  if ( RstDebugEnabled() && v13 < 0 ) /*0x21fe1*/
  {
    if ( RstDebugEnabled2() ) /*0x21fe3*/
      DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v13); /*0x21ffb*/
    DebugAssert("GpioLib.c", 0x346u, "!EFI_ERROR (Status)"); /*0x2200f*/
  }
  v14 = v17; /*0x22014*/
  *(_DWORD *)(a2 + 4) &= 0xFFFFE3FF; /*0x22018*/
  *(_DWORD *)(a2 + 4) |= (((v14 >> v6) & 1) << 10) | 0x200; /*0x2203d*/
  v15 = Assert_25(7, v4, v9, &v17); /*0x22045*/
  if ( RstDebugEnabled() && v15 < 0 ) /*0x22054*/
  {
    if ( RstDebugEnabled2() ) /*0x22056*/
      DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v15); /*0x2206e*/
    DebugAssert("GpioLib.c", 0x357u, "!EFI_ERROR (Status)"); /*0x22082*/
  }
  *(_DWORD *)(a2 + 4) |= (((v17 >> v6) & 1) << 11) | 0x200; /*0x2209e*/
  return v15; /*0x220ae*/
}

// Function: Assert_16 @ 0x220b8 (0x1b8 bytes)
// Index: 873/906

__int64 __fastcall Assert_16(__int64 n16908298, __int64 a2, _DWORD *i, _DWORD *p_i)
{
  __int64 v7; // rdi
  int v8; // ebx
  int v10; // [rsp+48h] [rbp+10h] BYREF

  v7 = DebugLogPrint(n16908298, *(unsigned __int8 *)(a2 + 3), &v10); /*0x220e1*/
  v8 = 0; /*0x220e9*/
  if ( RstDebugEnabled() && v7 < 0 ) /*0x220f2*/
  {
    if ( RstDebugEnabled2() ) /*0x220f4*/
      DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v7); /*0x2210c*/
    DebugAssert("GpioLib.c", 0x382u, "!EFI_ERROR (Status)"); /*0x22124*/
  }
  *p_i |= (*(_BYTE *)(a2 + 3) & 0x3F) != 0 ? 0xC0000000 : 0;
  *i |= v10 << 30; /*0x22146*/
  *p_i |= (*(_DWORD *)a2 & 0x700000) != 0 ? 0x6000000 : 0;
  *i |= 16 * (*(_DWORD *)a2 & 0x600000); /*0x22167*/
  *p_i |= (*(_DWORD *)a2 & 0xF8000) != 0 ? 0x1E0000 : 0;
  *i |= 2 * (*(_DWORD *)a2 & 0xF0000); /*0x22187*/
  *p_i |= (*(_DWORD *)a2 & 0x380) != 0 ? 0x300 : 0;
  *i |= 2 * (*(_DWORD *)a2 & 0x180); /*0x221a7*/
  *p_i |= (*(_DWORD *)a2 & 0xC00) != 0 ? 0x800000 : 0;
  *i |= (*(_DWORD *)a2 & 0x800) << 12; /*0x221c8*/
  LOBYTE(v8) = (*(_DWORD *)a2 & 0x6000) != 0; /*0x221ce*/
  *p_i |= v8; /*0x221d1*/
  *i |= (*(_DWORD *)a2 >> 14) & 1; /*0x221dc*/
  *p_i |= (*(_DWORD *)(a2 + 4) & 0x6000) != 0 ? 0x10000000 : 0;
  *i |= (*(_DWORD *)(a2 + 4) & 0x4000) << 14; /*0x221fc*/
  *p_i |= (*(_BYTE *)a2 & 0xF) != 0 ? 0x1C00 : 0;
  *i |= (*(_DWORD *)a2 & 0xE) << 9; /*0x22218*/
  p_i[1] |= (*(_BYTE *)(a2 + 4) & 0x1F) != 0 ? 0x3C00 : 0;
  i[1] |= (*(_DWORD *)(a2 + 4) & 0x1E) << 9; /*0x2223b*/
  p_i[1] |= (*(_BYTE *)(a2 + 4) & 0x60) != 0 ? 0x2000000 : 0;
  i[1] |= (*(_DWORD *)(a2 + 4) & 0x40) << 19; /*0x2225f*/
  return v7; /*0x22267*/
}

// Function: RstHelper1960Wrapper @ 0x22270 (0x1b bytes)
// Index: 874/906

__int64 __fastcall RstHelper1960Wrapper(__int64 n16908298, int n257)
{
  RstHelper_1960(n16908298, 0, -258, n257); /*0x2227f*/
  return 0; /*0x22286*/
}

// Function: RstHelper18e0Wrapper @ 0x2228c (0x29 bytes)
// Index: 875/906

__int64 __fastcall RstHelper18e0Wrapper(__int64 n16908298, int *a2)
{
  int v4; // [rsp+38h] [rbp+10h] BYREF

  RstHelper_18e0(n16908298, 0, &v4); /*0x2229c*/
  *a2 = v4 & 1; /*0x222ac*/
  return 0; /*0x222af*/
}

// Function: RstNvramReadBit @ 0x222b8 (0x2c bytes)
// Index: 876/906

__int64 __fastcall RstNvramReadBit(__int64 n16908298, unsigned int *a2)
{
  unsigned int v4; // [rsp+38h] [rbp+10h] BYREF

  RstHelper_18e0(n16908298, 0, &v4); /*0x222c8*/
  *a2 = (v4 >> 1) & 1; /*0x222db*/
  return 0; /*0x222de*/
}

// Function: Assert_47 @ 0x222e4 (0xb7 bytes)
// Index: 877/906

unsigned __int64 __fastcall Assert_47(unsigned int a1, __int16 a2, _DWORD *a3)
{
  __int64 v6; // rdx
  __int64 v7; // rcx
  __int64 v9; // rbx
  __int64 v10; // rdx
  __int64 v11; // rcx

  if ( (unsigned __int8)DebugLogPrint_0() ) /*0x222fa*/
  {
    v9 = Assert_25(6, a1, a2, a3); /*0x22342*/
    if ( (unsigned __int8)RstDebugEnabled(v11, v10) && v9 < 0 ) /*0x22351*/
    {
      if ( (unsigned __int8)RstDebugEnabled2() ) /*0x22353*/
        DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9); /*0x2236b*/
      DebugAssert("GpioLib.c", 0x74Au, "!EFI_ERROR (Status)"); /*0x22383*/
    }
    return v9; /*0x22388*/
  }
  else
  {
    if ( (unsigned __int8)RstDebugEnabled(v7, v6) ) /*0x22303*/
      DebugAssert("GpioLib.c", 0x73Fu, "((BOOLEAN)(0==1))"); /*0x2231f*/
    return 0x8000000000000002uLL; /*0x22324*/
  }
}

// Function: Assert_41 @ 0x2239c (0xf7 bytes)
// Index: 878/906

__int64 __fastcall Assert_41(int n6, unsigned int a2, unsigned int a3)
{
  __int64 v6; // rdi
  int v7; // ebx
  __int64 v8; // rdx
  __int64 v9; // rcx
  __int64 v10; // r11
  int v11; // ecx
  __int64 v13; // rdx
  __int64 v14; // rcx
  _BYTE v15[24]; // [rsp+20h] [rbp-18h] BYREF
  char v16; // [rsp+40h] [rbp+8h] BYREF

  v6 = (unsigned int)RstPassthroughByte(a2); /*0x223c3*/
  v7 = n6 - 6; /*0x223ca*/
  v10 = RstUefiGetAuthVariableInfo(v15); /*0x223cd*/
  if ( v7 ) /*0x223d0*/
  {
    if ( v7 != 1 ) /*0x223d5*/
    {
      if ( (unsigned __int8)RstDebugEnabled(v9, v8) ) /*0x223d7*/
        DebugAssert("GpioLib.c", 0x203u, "((BOOLEAN)(0==1))"); /*0x223f3*/
      return 0x8000000000000003uLL; /*0x223f8*/
    }
    v11 = *(_DWORD *)(60 * v6 + v10 + 48); /*0x22401*/
  }
  else
  {
    v11 = *(_DWORD *)(60 * v6 + v10 + 44); /*0x2240f*/
  }
  if ( v11 == -1 ) /*0x22417*/
    return 0x8000000000000003uLL; /*0x22423*/
  Assert_47(a2, a3, &v16); /*0x2242e*/
  if ( (unsigned __int8)RstDebugEnabled(v14, v13) ) /*0x22433*/
  {
    if ( (unsigned __int8)RstDebugEnabled2() ) /*0x22446*/
      DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", 0x8000000000000003uLL); /*0x2245e*/
    DebugAssert("GpioLib.c", 0x228u, "!EFI_ERROR (Status)"); /*0x22476*/
  }
  return 0x8000000000000003uLL; /*0x2248d*/
}

// Function: AssertCpuDeadLoop @ 0x22494 (0x2a2 bytes)
// Index: 879/906

__int64 __fastcall AssertCpuDeadLoop(unsigned int n16908298, _DWORD *a2)
{
  unsigned int v4; // r14d
  int v5; // r15d
  unsigned int v6; // eax
  char v7; // si
  unsigned int v8; // r13d
  __int64 v9; // rbx
  __int64 v10; // rbx
  int n257_1; // ebx
  __int64 v12; // rbp
  int i; // [rsp+78h] [rbp+10h] BYREF
  int i_4; // [rsp+7Ch] [rbp+14h]
  int i_; // [rsp+80h] [rbp+18h] BYREF
  int n257; // [rsp+84h] [rbp+1Ch]

  RstMemZero((__int64)&i_, 8u); /*0x224bb*/
  RstMemZero((__int64)&i, 8u); /*0x224c8*/
  v4 = WORD1_w(n16908298); /*0x224d6*/
  v5 = BYTE2_w(n16908298); /*0x224e0*/
  v6 = RstPassthroughWord(n16908298); /*0x224e3*/
  v7 = v6 & 0x1F; /*0x224ff*/
  v8 = v6 >> 5; /*0x22502*/
  Assert_16(n16908298, (__int64)a2, &i_, &i); /*0x22506*/
  RstHelper_1960(n16908298, 0, ~i, i_); /*0x2251f*/
  RstHelper_1960(n16908298, 1u, ~i_4, n257); /*0x2253e*/
  v9 = Assert_30(0, v4, v8, ~(((*a2 >> 5) & 1u) << v7), ((*a2 >> 6) & 1u) << v7); /*0x22575*/
  if ( RstDebugEnabled() && v9 < 0 ) /*0x22589*/
  {
    if ( RstDebugEnabled2() ) /*0x2258b*/
      DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9); /*0x225a1*/
    DebugAssert("GpioLib.c", 0x427u, "!EFI_ERROR (Status)"); /*0x225b9*/
  }
  v10 = Assert_30(1, v4, v8, ~(((*a2 >> 15) & 1u) << v7), ((*a2 >> 18) & 1u) << v7); /*0x225ec*/
  if ( RstDebugEnabled() && v10 < 0 ) /*0x225fb*/
  {
    if ( RstDebugEnabled2() ) /*0x225fd*/
      DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v10); /*0x22613*/
    DebugAssert("GpioLib.c", 0x439u, "!EFI_ERROR (Status)"); /*0x2262b*/
  }
  n257_1 = (HIWORD(*a2) & 1) << v7; /*0x2264b*/
  v12 = Assert_30(5, v4, v8, ~(((*a2 >> 15) & 1u) << v7), n257_1); /*0x22661*/
  if ( v12 != 0x8000000000000003uLL ) /*0x22671*/
    goto LABEL_14; /*0x22671*/
  if ( !n257_1 ) /*0x22675*/
  {
    v12 = 0; /*0x22677*/
LABEL_14:
    if ( (a2[1] & 0x600) == 0x600 ) /*0x2268a*/
      Assert_41(6, v4, v8); /*0x226a4*/
    if ( (a2[1] & 0xA00) == 0xA00 ) /*0x226b7*/
      Assert_41(7, v4, v8); /*0x226cf*/
    return v12; /*0x226d4*/
  }
  if ( RstDebugEnabled2() )
    DebugPrintSerial(0x80000000, "GPIO ERROR: Group %d has no pads supporting NMI\n", v5);
  if ( RstDebugEnabled() ) /*0x22709*/
    DebugAssert("GpioLib.c", 0x451u, "((BOOLEAN)(0==1))"); /*0x22725*/
  return 0x8000000000000003uLL; /*0x226dc*/
}

// Function: RstHelper_2738 @ 0x22738 (0xd1 bytes)
// Index: 880/906

__int64 __fastcall RstHelper_2738(__int64 n0xFF, __int64 n0x1F, unsigned int n7, char n6)
{
  unsigned int n0x1F_1; // r12d
  unsigned int n0xFF_1; // ebx
  __int64 v8; // rdi
  bool v9; // al
  unsigned int v10; // edx
  char v11; // si
  unsigned int v12; // edx

  n0x1F_1 = n0x1F; /*0x22756*/
  n0xFF_1 = n0xFF; /*0x22759*/
  if ( RstDebugEnabled() && (n0xFF_1 > 0xFF || n0x1F_1 > 0x1F || n7 > 7) ) /*0x22775*/
    DebugAssert("MmPciBaseLib.c", 0x38u, "(Bus <= 0xFF) && (Device <= 0x1F) && (Function <= 0x7)"); /*0x2278a*/
  v8 = qword_58038; /*0x2278f*/
  if ( !qword_58038 ) /*0x22799*/
  {
    v9 = HiiLibSuccess(); /*0x2279b*/
    v10 = n0xFF_1 << 16; /*0x227a7*/
    v11 = v9; /*0x227aa*/
    if ( n6 ) /*0x227b0*/
      v12 = v10 | 0x80002890; /*0x227b2*/
    else
      v12 = v10 | 0x80000090; /*0x227ba*/
    HiiConfigStringToBlock2(0xCF8u, v12); /*0x227c0*/
    v8 = HiiConfigStringToBlock(0xCFCu); /*0x227d2*/
    HiiLibFailure(v11); /*0x227d4*/
    qword_58038 = v8; /*0x227d9*/
  }
  return v8 + ((n7 + 8 * (n0x1F_1 + 32 * n0xFF_1)) << 12); /*0x227ff*/
}

// Function: RstUefiGetAuthVariableInfo @ 0x2280c (0x37 bytes)
// Index: 881/906

void *__fastcall RstUefiGetAuthVariableInfo(_QWORD *a1)
{
  if ( (unsigned int)RstHelper_1750() == 2 ) /*0x2281d*/
  {
    *a1 = 8; /*0x2281f*/
    return &unk_34AC0; /*0x22826*/
  }
  else
  {
    *a1 = 13; /*0x2282f*/
    return &unk_34CA0; /*0x22836*/
  }
}

// Function: RstGetBlockSize @ 0x22844 (0x20 bytes)
// Index: 882/906

__int64 RstGetBlockSize()
{
  int n2; // eax
  unsigned int n256; // ecx

  n2 = RstHelper_1750(); /*0x22848*/
  n256 = 256; /*0x2284d*/
  if ( n2 == 2 ) /*0x2285a*/
    return 512; /*0x2285a*/
  return n256; /*0x2285f*/
}

// Function: RstGetBlockSizeAlt @ 0x22864 (0x20 bytes)
// Index: 883/906

__int64 RstGetBlockSizeAlt()
{
  int n2; // eax
  unsigned int n268; // ecx

  n2 = RstHelper_1750(); /*0x22868*/
  n268 = 268; /*0x2286d*/
  if ( n2 == 2 ) /*0x2287a*/
    return 519; /*0x2287a*/
  return n268; /*0x2287f*/
}

// Function: WORD1_w @ 0x22884 (0x6 bytes)
// Index: 884/906

__int64 WORD1_w__int64 n16908298)
{
  return WORD1(n16908298); /*0x22889*/
}

// Function: BYTE2_w @ 0x2288c (0x7 bytes)
// Index: 885/906

__int64 BYTE2_w__int64 n16908298)
{
  return BYTE2(n16908298); /*0x22892*/
}

// Function: RstPassthroughByte @ 0x22894 (0x4 bytes)
// Index: 886/906

__int64 __fastcall RstPassthroughByte(unsigned __int8 a1)
{
  return a1; /*0x22897*/
}

// Function: RstPassthroughWord @ 0x22898 (0x4 bytes)
// Index: 887/906

__int64 __fastcall RstPassthroughWord(unsigned __int16 a1)
{
  return a1; /*0x2289b*/
}

// Function: RstNvmPassthruSetData @ 0x2289c (0x4a bytes)
// Index: 888/906

__int64 __fastcall RstNvmPassthruSetData(_QWORD *a1, __int64 a2)
{
  __int64 result; // rax
  __int64 v3; // [rsp+50h] [rbp+18h] BYREF

  if ( (*(__int64 (__fastcall **)(__int64, void *, __int64 *, _QWORD, _QWORD, int))(qword_58070 + 280))( /*0x228d3*/
         a2,
         &unk_278A0,
         &v3,
         *a1,
         0,
         1) < 0 )
    return 0; /*0x228d3*/
  result = v3; /*0x228d5*/
  if ( !v3 ) /*0x228dd*/
    return 0; /*0x228df*/
  return result; /*0x228e1*/
}

// Function: RstNvmPassthruGetData @ 0x228e8 (0x50 bytes)
// Index: 889/906

__int64 __fastcall RstNvmPassthruGetData(__int64 *a1, __int64 a2)
{
  __int64 v2; // r9
  __int64 result; // rax
  __int64 v4; // [rsp+50h] [rbp+18h] BYREF

  v2 = *a1; /*0x228ec*/
  v4 = 0; /*0x228ef*/
  if ( (*(__int64 (__fastcall **)(__int64, void *, __int64 *, __int64, _QWORD, int))(qword_58070 + 280))( /*0x22925*/
         a2,
         &unk_352F0,
         &v4,
         v2,
         0,
         1) < 0 )
    return 0; /*0x22925*/
  result = v4; /*0x22927*/
  if ( !v4 ) /*0x2292f*/
    return 0; /*0x22931*/
  return result; /*0x22933*/
}

// Function: Assert_84 @ 0x22938 (0xdc bytes)
// Index: 890/906

char __fastcall Assert_84(__int64 a1, __int64 a2, __int64 a3)
{
  const CHAR16 *FirstString; // r12
  __int64 FirstString_2; // rax
  const CHAR16 *FirstString_1; // rsi
  char v7; // bp
  unsigned __int64 Length_2; // rdi
  unsigned __int64 Length_1; // rax
  UINTN Length; // r8

  FirstString = (const CHAR16 *)RstUefiReadVariable(a2); /*0x2295e*/
  FirstString_2 = RstUefiReadVariable(a3); /*0x22961*/
  FirstString_1 = (const CHAR16 *)FirstString_2; /*0x22969*/
  if ( !FirstString || !FirstString_2 ) /*0x22978*/
    return 0; /*0x229f9*/
  v7 = 1; /*0x2297a*/
  do /*0x229f2*/
  {
    if ( !FirstString_1 || Assert_66(FirstString) || Assert_66(FirstString_1) ) /*0x22992*/
      break; /*0x2299a*/
    Length_2 = Assert_72((__int64)FirstString); /*0x229a7*/
    Length_1 = Assert_72((__int64)FirstString_1); /*0x229aa*/
    Length = Length_1; /*0x229b2*/
    if ( Length_2 < Length_1 ) /*0x229bb*/
      Length = Length_2; /*0x229bb*/
    v7 &= (Length_2 == Length_1) & ((unsigned __int16)StrnCmp(FirstString, FirstString_1, Length) == 0); /*0x229d9*/
    FirstString = (const CHAR16 *)Assert_71((__int64)FirstString); /*0x229e4*/
    FirstString_1 = (const CHAR16 *)Assert_71((__int64)FirstString_1); /*0x229ec*/
  }
  while ( FirstString ); /*0x229f2*/
  return v7; /*0x22a0a*/
}

// Function: RstGetHiiString @ 0x22a14 (0x82 bytes)
// Index: 891/906

__int64 __fastcall RstGetHiiString(__int64 a1)
{
  __int64 result; // rax
  __int64 v3; // rcx
  CHAR16 *Destination; // rax
  CHAR16 *Source_1; // rdx
  UINTN Length; // r8
  __int64 v7; // [rsp+48h] [rbp+10h] BYREF
  CHAR16 *Source; // [rsp+50h] [rbp+18h] BYREF

  v7 = 0; /*0x22a1c*/
  result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, __int64 *, CHAR16 **))(qword_58070 + 312))( /*0x22a45*/
             2,
             &unk_27890,
             0,
             &v7,
             &Source);
  if ( result >= 0 ) /*0x22a4e*/
  {
    v3 = v7; /*0x22a50*/
    if ( v7 ) /*0x22a58*/
    {
      *(_QWORD *)(a1 + 16) = v7; /*0x22a5a*/
      Destination = (CHAR16 *)MemAllocPages(8 * v3); /*0x22a62*/
      Source_1 = Source; /*0x22a6c*/
      Length = 8 * v7; /*0x22a71*/
      *(_QWORD *)(a1 + 8) = Destination; /*0x22a78*/
      StrnCpy(Destination, Source_1, Length); /*0x22a7c*/
      return (*(__int64 (__fastcall **)(CHAR16 *))(qword_58070 + 72))(Source); /*0x22a8d*/
    }
  }
  return result; /*0x22a90*/
}

// Function: RstGetHiiStringDefault @ 0x22a98 (0x82 bytes)
// Index: 892/906

__int64 __fastcall RstGetHiiStringDefault(__int64 a1)
{
  __int64 result; // rax
  __int64 v3; // rcx
  CHAR16 *Destination; // rax
  CHAR16 *Source_1; // rdx
  UINTN Length; // r8
  __int64 v7; // [rsp+48h] [rbp+10h] BYREF
  CHAR16 *Source; // [rsp+50h] [rbp+18h] BYREF

  v7 = 0; /*0x22aa0*/
  result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, __int64 *, CHAR16 **))(qword_58070 + 312))( /*0x22ac9*/
             2,
             &unk_278A0,
             0,
             &v7,
             &Source);
  if ( result >= 0 ) /*0x22ad2*/
  {
    v3 = v7; /*0x22ad4*/
    if ( v7 ) /*0x22adc*/
    {
      *(_QWORD *)(a1 + 32) = v7; /*0x22ade*/
      Destination = (CHAR16 *)MemAllocPages(8 * v3); /*0x22ae6*/
      Source_1 = Source; /*0x22af0*/
      Length = 8 * v7; /*0x22af5*/
      *(_QWORD *)(a1 + 24) = Destination; /*0x22afc*/
      StrnCpy(Destination, Source_1, Length); /*0x22b00*/
      return (*(__int64 (__fastcall **)(CHAR16 *))(qword_58070 + 72))(Source); /*0x22b11*/
    }
  }
  return result; /*0x22b14*/
}

// Function: RstHiiStringInit @ 0x22b1c (0x49 bytes)
// Index: 893/906

__int64 __fastcall RstHiiStringInit(__int64 a1, __int64 a2, char a3)
{
  *(_QWORD *)a1 = a2; /*0x22b24*/
  *(_QWORD *)(a1 + 8) = 0; /*0x22b2a*/
  *(_QWORD *)(a1 + 16) = 0; /*0x22b2e*/
  *(_QWORD *)(a1 + 24) = 0; /*0x22b32*/
  *(_QWORD *)(a1 + 32) = 0; /*0x22b36*/
  *(_QWORD *)(a1 + 40) = 0; /*0x22b3a*/
  *(_QWORD *)(a1 + 48) = 0; /*0x22b3e*/
  *(_BYTE *)(a1 + 58) = a3; /*0x22b47*/
  *(_WORD *)(a1 + 56) = -1; /*0x22b4b*/
  RstGetHiiString(a1); /*0x22b4f*/
  RstGetHiiStringDefault(a1); /*0x22b57*/
  return a1; /*0x22b5f*/
}

// Function: Assert_125 @ 0x22b68 (0x76 bytes)
// Index: 894/906

__int64 Assert_125__int64 a1, __int64 a2)
{
  __int64 v4; // rdi
  __int64 i; // rsi
  __int64 v6; // rdx

  if ( !a2 ) /*0x22b85*/
    return 0; /*0x22b85*/
  v4 = 0; /*0x22b87*/
  if ( !*(_QWORD *)(a1 + 16) ) /*0x22b89*/
    return 0; /*0x22bbd*/
  for ( i = 0; ; i += 8 ) /*0x22b8f*/
  {
    v6 = *(_QWORD *)(a1 + 8); /*0x22b91*/
    if ( *(_QWORD *)(i + v6) ) /*0x22b95*/
    {
      if ( Assert_84(a1, *(_QWORD *)(i + v6), a2) ) /*0x22ba6*/
        break; /*0x22ba6*/
    }
    v4 = (unsigned int)(v4 + 1); /*0x22baf*/
    if ( (unsigned __int64)(unsigned int)v4 >= *(_QWORD *)(a1 + 16) ) /*0x22bbb*/
      return 0; /*0x22bbb*/
  }
  return *(_QWORD *)(*(_QWORD *)(a1 + 8) + 8 * v4); /*0x22bce*/
}

// Function: DxeInstall @ 0x22be0 (0x48 bytes)
// Index: 895/906

RST_LIST_ENTRY *__fastcall DxeInstall(__int64 a1, int i, int a3)
{
  _DWORD *Context; // rax

  Context = (_DWORD *)MemAlloc(8); /*0x22c03*/
  *Context = i; /*0x22c0f*/
  Context[1] = a3; /*0x22c11*/
  return RstInstallClass((RST_PRIVATE_DATA *)(a1 + 40), Context); /*0x22c1e*/
}

// Function: RstCompareUint32Values @ 0x22c28 (0xba bytes)
// Index: 896/906

bool __fastcall RstCompareUint32Values(_QWORD *a1, __int64 a2, int a3)
{
  __int64 v5; // rax
  __int64 v6; // rbp
  __int64 v7; // rbx
  __int64 v8; // rax
  bool v9; // bl
  int v11; // [rsp+40h] [rbp+18h] BYREF

  v11 = a3; /*0x22c37*/
  v5 = Assert_125(); /*0x22c46*/
  v6 = v5; /*0x22c4b*/
  if ( !a2 ) /*0x22c51*/
    return 0; /*0x22c51*/
  if ( !v5 ) /*0x22c56*/
    return 0; /*0x22c56*/
  v7 = RstNvmPassthruGetData(a1, v5); /*0x22c63*/
  if ( !v7 ) /*0x22c69*/
    return 0; /*0x22c69*/
  v8 = RstNvmPassthruSetData(a1, a2); /*0x22c71*/
  if ( !v8 ) /*0x22c79*/
    return 0; /*0x22ccb*/
  v9 = (*(unsigned __int8 (__fastcall **)(__int64, int *))(v7 + 8))(v8, &v11) == 1; /*0x22c9c*/
  (*(void (__fastcall **)(__int64, void *, _QWORD, _QWORD))(qword_58070 + 288))(v6, &unk_352F0, *a1, 0); /*0x22ca2*/
  (*(void (__fastcall **)(__int64, void *, _QWORD, _QWORD))(qword_58070 + 288))(a2, &unk_278A0, *a1, 0); /*0x22cc0*/
  return v9; /*0x22cdc*/
}

// Function: DxeInstall_0 @ 0x22ce4 (0x48 bytes)
// Index: 897/906

__int64 __fastcall DxeInstall_0(__int64 a1)
{
  __int64 result; // rax
  _QWORD *p_i; // [rsp+30h] [rbp+8h] BYREF

  MemFree(); /*0x22cf1*/
  MemFree(); /*0x22cfa*/
  while ( 1 ) /*0x22d1d*/
  {
    result = *(_QWORD *)(a1 + 40); /*0x22d1d*/
    if ( !result ) /*0x22d24*/
      break; /*0x22d24*/
    p_i = *(_QWORD **)(a1 + 40); /*0x22d05*/
    MemFree(); /*0x22d0a*/
    RstInstallConfigAccess((_QWORD *)(a1 + 40), &p_i); /*0x22d18*/
  }
  return result; /*0x22d26*/
}

// Function: RstLedSetDeviceState @ 0x22d2c (0x175 bytes)
// Index: 898/906

void __fastcall RstLedSetDeviceState(__int64 a1)
{
  _QWORD *v1; // rbx
  int v3; // edx
  int v4; // edx
  int v5; // edx
  unsigned int *v6; // rcx
  unsigned __int64 v7; // rax
  __int64 v8; // rdx
  __int64 v9; // rdx
  __int64 **i; // rbx
  unsigned __int64 v11; // rcx
  __int64 v12; // rdx
  __int64 v13; // rdx

  v1 = *(_QWORD **)(a1 + 40); /*0x22d36*/
  if ( v1 ) /*0x22d40*/
  {
    do /*0x22e13*/
    {
      if ( !*(_BYTE *)(a1 + 58) ) /*0x22d57*/
      {
        RstHelper_309c("Setting \""); /*0x22d64*/
        v3 = *(_DWORD *)(v1[2] + 4LL); /*0x22d6d*/
        if ( v3 ) /*0x22d72*/
        {
          v4 = v3 - 1; /*0x22d74*/
          if ( v4 ) /*0x22d77*/
          {
            v5 = v4 - 1; /*0x22d79*/
            if ( v5 ) /*0x22d7c*/
            {
              if ( v5 == 1 ) /*0x22d81*/
                RstHelper_309c("REBUILD"); /*0x22d8a*/
            }
            else
            {
              RstHelper_309c("FAULT"); /*0x22d93*/
            }
          }
          else
          {
            RstHelper_309c("LOCATE"); /*0x22d9c*/
          }
        }
        else
        {
          RstHelper_309c("LED_OFF"); /*0x22da5*/
        }
        RstHelper_309c("\" state for device %d.\n", *(_DWORD *)v1[2]); /*0x22db7*/
      }
      v6 = (unsigned int *)v1[2]; /*0x22dbc*/
      v7 = *v6; /*0x22dc0*/
      if ( v7 < *(_QWORD *)(a1 + 32) && (v8 = *(_QWORD *)(a1 + 24)) != 0 ) /*0x22dcf*/
        v9 = *(_QWORD *)(v8 + 8 * v7); /*0x22dd1*/
      else
        v9 = 0; /*0x22dd7*/
      if ( v9 ) /*0x22ddc*/
      {
        if ( !RstCompareUint32Values((_QWORD *)a1, v9, v6[1]) && !*(_BYTE *)(a1 + 58) ) /*0x22dfc*/
          RstHelper_309c("Failed to set led state for selected device.\n"); /*0x22e08*/
      }
      else if ( !*(_BYTE *)(a1 + 58) ) /*0x22dde*/
      {
        RstHelper_309c("Failed to get selected device.\n"); /*0x22dea*/
      }
      v1 = (_QWORD *)*v1; /*0x22e0d*/
    }
    while ( v1 ); /*0x22e13*/
    if ( *(_WORD *)(a1 + 56) != 0xFFFF ) /*0x22e22*/
    {
      RstHelper_309c("Waiting %d seconds...\n", *(unsigned __int16 *)(a1 + 56)); /*0x22e2f*/
      RstMicrosecondsToTime(*(_WORD *)(a1 + 56)); /*0x22e38*/
      RstHelper_309c("Resetting device states.\n"); /*0x22e44*/
      for ( i = *(__int64 ***)(a1 + 40); i; i = (__int64 **)*i ) /*0x22e49*/
      {
        v11 = *(unsigned int *)i[2]; /*0x22e53*/
        if ( v11 < *(_QWORD *)(a1 + 32) && (v12 = *(_QWORD *)(a1 + 24)) != 0 ) /*0x22e62*/
          v13 = *(_QWORD *)(v12 + 8 * v11); /*0x22e64*/
        else
          v13 = 0; /*0x22e6a*/
        if ( v13 ) /*0x22e6f*/
          RstCompareUint32Values((_QWORD *)a1, v13, 0); /*0x22e77*/
      }
    }
    if ( !*(_BYTE *)(a1 + 58) ) /*0x22e84*/
      RstHelper_309c("\n"); /*0x22e91*/
  }
  else if ( !*(_BYTE *)(a1 + 58) ) /*0x22d42*/
  {
    RstHelper_309c("No device selected.\n"); /*0x22d52*/
  }
}

// Function: RstErrorCodeToString @ 0x22ea4 (0x1d bytes)
// Index: 899/906

const char *__fastcall RstErrorCodeToString(__int64 n12)
{
  if ( (unsigned __int16)n12 < 0x2Du ) /*0x22ea8*/
    // "Ok" /*0x22ebc*/
    return off_35170[(int)n12]; /*0x22ebc*/
  else
    return "Invalid error code"; /*0x22eaa*/
}

// Function: _disable_w @ 0x22ed0 (0x2 bytes)
// Index: 900/906

void sub_22ED0()
{
  _disable(); /*0x22ed0*/
}

// Function: _enable_w @ 0x22ee0 (0x2 bytes)
// Index: 901/906

void sub_22EE0()
{
  _enable(); /*0x22ee0*/
}

// Function: __getcallerseflags_w @ 0x22ef0 (0x3 bytes)
// Index: 902/906

unsigned __int64 sub_22EF0()
{
  return __getcallerseflags(); /*0x22ef2*/
}

// Function: RstAsciiToUnicodeSerialPrint @ 0x22ef4 (0xde bytes)
// Index: 903/906

__int64 __fastcall RstAsciiToUnicodeSerialPrint(__int64 a1, _BYTE *a2, unsigned __int16 n255)
{
  unsigned __int16 n255_1; // r9
  unsigned __int16 i; // r8
  __int16 v5; // cx
  __int64 v6; // rax
  __int64 SystemTable; // rcx
  __int64 result; // rax
  _WORD v9[260]; // [rsp+20h] [rbp-208h] BYREF

  n255_1 = 255; /*0x22efd*/
  if ( n255 < 0xFFu ) /*0x22f07*/
    n255_1 = n255; /*0x22f07*/
  for ( i = 0; i < n255_1; v9[v6] = v5 ) /*0x22f16*/
  {
    if ( !*a2 ) /*0x22f1c*/
      break; /*0x22f1e*/
    v5 = (unsigned __int8)*a2; /*0x22f20*/
    v6 = i++; /*0x22f23*/
    ++a2; /*0x22f2b*/
  }
  SystemTable = SystemTable; /*0x22f39*/
  v9[i] = 0; /*0x22f44*/
  result = qword_58048; /*0x22f4d*/
  if ( *(_QWORD *)(SystemTable + 64) ) /*0x22f49*/
  {
    result = *(_QWORD *)(SystemTable + 64); /*0x22f89*/
    qword_58048 = result; /*0x22f8c*/
  }
  else if ( !qword_58048 ) /*0x22f5c*/
  {
    (*(void (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27750, 0, &qword_58048); /*0x22f75*/
    result = qword_58048; /*0x22f7b*/
  }
  if ( result ) /*0x22f96*/
  {
    (*(void (__fastcall **)(__int64, _QWORD))(result + 40))(result, (unsigned __int8)byte_352E2); /*0x22fa2*/
    (*(void (__fastcall **)(__int64, _WORD *))(qword_58048 + 8))(qword_58048, v9); /*0x22fb4*/
    return (*(__int64 (__fastcall **)(__int64, __int64))(qword_58048 + 40))(qword_58048, 7); /*0x22fc6*/
  }
  return result; /*0x22fc9*/
}

// Function: RstVideoOutputProcessEscCodes @ 0x22fd4 (0xc7 bytes)
// Index: 904/906

__int64 __fastcall RstVideoOutputProcessEscCodes(unsigned __int16 a1, _BYTE *a2)
{
  __int64 n0xFFFF; // rax
  _BYTE *v3; // rbx
  signed __int16 n255; // di
  char v6; // si
  int n255_1; // eax

  n0xFFFF = 0xFFFF; /*0x22ff0*/
  v3 = a2; /*0x22ff5*/
  n255 = 0; /*0x22ffb*/
  if ( word_58040 != -1 && a2 ) /*0x2300b*/
  {
    if ( *a2 ) /*0x2300d*/
    {
      do /*0x2306b*/
      {
        if ( v3[n255] == 0xF0 ) /*0x2301a*/
        {
          v6 = v3[n255 + 1]; /*0x2301c*/
          RstAsciiToUnicodeSerialPrint(a1, v3, n255); /*0x2302b*/
          if ( (v6 & 0xF0) == 0xE0 ) /*0x2303b*/
            v6 = byte_352E2 ^ (byte_352E2 ^ v6) & 0xF; /*0x2304a*/
          n255_1 = n255; /*0x2304d*/
          byte_352E2 = v6; /*0x23050*/
          n255 = 0; /*0x23057*/
          v3 += n255_1 + 2; /*0x2305f*/
        }
        else
        {
          ++n255; /*0x23064*/
        }
      }
      while ( v3[n255] ); /*0x2306b*/
    }
    return RstAsciiToUnicodeSerialPrint(a1, v3, n255); /*0x2307b*/
  }
  return n0xFFFF; /*0x23094*/
}

// Function: RstHelper_309c @ 0x2309c (0x49 bytes)
// Index: 905/906

__int64 sub_2309C(char *a1, ...)
{
  _BYTE v2[264]; // [rsp+20h] [rbp-108h] BYREF
  va_list va; // [rsp+138h] [rbp+10h] BYREF

  va_start(va, a1);
  HiiGetStringOrNull((__int64)v2, 0x100u, a1, va); /*0x230c7*/
  return RstVideoOutputProcessEscCodes(word_58040, v2); /*0x230dd*/
}

// Function: _mm_crc32_u32_w @ 0x23100 (0xd bytes)
// Index: 906/906

__int64 _mm_crc32_u32_wunsigned int a1, unsigned int a2)
{
  return _mm_crc32_u32(a1, a2); /*0x2310b*/
}