Newer
Older
AMI-Aptio-BIOS-Reversed / ACPI / ACPI.c
@Ajax Dong Ajax Dong 2 days ago 119 KB Init
#include "ACPI.h"

//
// ACPI - UEFI Module
// Total functions: 81
//

// Function: _ModuleEntryPoint @ 0x370 (0x1c bytes)

EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  __int64 ImageHandle_1; // rcx

  InitUefiServices((__int64)ImageHandle, (__int64)SystemTable); /*0x379*/
  return AcpiCoreEntryPoint(ImageHandle_1, SystemTable); /*0x386*/
}


// Function: InitUefiServices @ 0x38c (0xcb bytes)

__int64 __fastcall InitUefiServices(__int64 ImageHandle, __int64 SystemTable)
{
  __int64 RuntimeServices; // rax

  ::ImageHandle = ImageHandle; /*0x392*/
  if ( !ImageHandle ) /*0x39f*/
    AssertWithProtocol( /*0x3b2*/
      (__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
      51,
      (__int64)"gImageHandle != ((void *) 0)");
  SystemTable_0 = SystemTable; /*0x3b7*/
  if ( !SystemTable ) /*0x3c1*/
    AssertWithProtocol( /*0x3d4*/
      (__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
      57,
      (__int64)"gST != ((void *) 0)");
  qword_8768 = *(_QWORD *)(SystemTable + 96); /*0x3dd*/
  if ( !qword_8768 ) /*0x3e7*/
    AssertWithProtocol( /*0x3fa*/
      (__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
      63,
      (__int64)"gBS != ((void *) 0)");
  qword_8778 = *(_QWORD *)(SystemTable + 88); /*0x403*/
  if ( !qword_8778 ) /*0x40d*/
    AssertWithProtocol( /*0x420*/
      (__int64)"e:\\hs\\MdePkg\\Library\\UefiRuntimeServicesTableLib\\UefiRuntimeServicesTableLib.c",
      47,
      (__int64)"gRT != ((void *) 0)");
  RuntimeServices = AssertCpuDeadLoop_1(ImageHandle); /*0x425*/
  if ( !::SystemTable ) /*0x432*/
  {
    ::SystemTable = SystemTable; /*0x434*/
    BootServices = *(_QWORD *)(SystemTable + 96); /*0x43f*/
    RuntimeServices = *(_QWORD *)(SystemTable + 88); /*0x446*/
    RuntimeServices = RuntimeServices; /*0x44a*/
  }
  return RuntimeServices; /*0x451*/
}


// Function: AcpiProcessRsdtHandlers @ 0x458 (0x4b bytes)

__int64 __fastcall AcpiProcessRsdtHandlers(unsigned __int64 RsdtBase)
{
  __int64 (__fastcall *v1)(unsigned __int64); // rax
  __int64 v3; // rdx
  __int64 v4; // rbx

  v1 = (__int64 (__fastcall *)(unsigned __int64))AcpiRsdtHandlerTable[0]; /*0x462*/
  v3 = 0x8000000000000003uLL; /*0x46c*/
  v4 = 0; /*0x476*/
  while ( v1 ) /*0x493*/
  {
    v3 = v1(RsdtBase); /*0x47f*/
    v1 = (__int64 (__fastcall *)(unsigned __int64))AcpiRsdtHandlerTable[++v4]; /*0x48c*/
  }
  return v3; /*0x49d*/
}


// Function: AcpiGetTable @ 0x4a4 (0x107 bytes)

unsigned __int64 __fastcall AcpiGetTable(__int64 *p_psub_4A4, __int64 a2, __int64 *a3, _DWORD *a4, _QWORD *a5)
{
  __int64 v10; // rdi
  __int64 v11; // rax
  __int64 v12; // rsi

  if ( !AcpiDeprecatedWarningFlag ) /*0x4d0*/
    DebugPrint( /*0x4de*/
      0x80000000LL,
      "!!!WARNING!!! Deprecated AcpiSupport protocol is used. Use AcpiSdt/AcpiTable protocols instead. \n");
  if ( p_psub_4A4 != &psub_4A4 ) /*0x4ed*/
    return 0x8000000000000002uLL; /*0x4ef*/
  if ( a2 > j_0 - 1 ) /*0x50b*/
    return 0x800000000000000EuLL; /*0x50d*/
  v10 = **(_QWORD **)(AcpiTableList + 8 * a2); /*0x524*/
  v11 = AllocatePool(*(unsigned int *)(v10 + 4)); /*0x52a*/
  v12 = v11; /*0x52f*/
  if ( v11 ) /*0x535*/
  {
    *a4 = *(_DWORD *)(*(_QWORD *)(AcpiTableList + 8 * a2) + 8LL); /*0x56f*/
    *a5 = v10; /*0x577*/
    (*(void (__fastcall **)(__int64, __int64, _QWORD))(BootServices + 352))(v11, v10, *(unsigned int *)(v10 + 4)); /*0x585*/
    *a3 = v12; /*0x58d*/
    return 0; /*0x58b*/
  }
  else
  {
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 208, (__int64)"Ptr"); /*0x54a*/
    return 0x8000000000000009uLL; /*0x54f*/
  }
}


// Function: AcpiProcessTable @ 0x5ac (0x6c7 bytes)

unsigned __int64 __fastcall AcpiProcessTable(
        __int64 *p_psub_4A4,
        unsigned __int8 *TableAddr,
        char a3,
        int n2,
        __int64 *p_TableSize)
{
  __int64 Status; // r12
  __int64 TableResult; // rbx
  bool IsRootTable; // r14
  _DWORD *TableHeader; // rax
  __int64 TableSize; // r9
  int TableType; // r8d
  __int64 AllocStatus; // rax
  __int64 ErrLine304; // rdx
  const char *_EFI_ERROR_(Status); // r8
  unsigned int SigValue; // ecx
  __int64 ProcessStatus; // rax
  unsigned __int64 RsdtBase_1; // rax
  __int64 Status_1; // rax
  unsigned __int64 i_1; // r8
  char CheckByteAcpi; // dl
  unsigned __int64 i; // rax
  bool IsRootTable_1; // di
  signed __int64 TableResult_1; // rax
  unsigned __int64 ByteIdx; // rcx
  unsigned __int64 ByteIdx_1; // r8
  char CheckByte; // al
  _DWORD *DataPtr; // r14
  unsigned __int64 DataSize; // rdi
  unsigned __int64 j; // rdi
  __int64 TableResult_2; // rax
  __int64 ErrLine267; // rdx
  __int64 DynTableSize; // [rsp... [11106 chars total]


// Function: AcpiCoreNotify @ 0xc74 (0xc6 bytes)

unsigned __int64 __fastcall AcpiCoreNotify(__int64 *p_psub_4A4, unsigned int n2)
{
  bool v3; // cc
  unsigned __int8 v5; // cl
  signed __int64 v6; // rax

  if ( n2 - 2 > 0x1C || p_psub_4A4 != &psub_4A4 ) /*0xc8e*/
    return 0x8000000000000003uLL; /*0xc8e*/
  v3 = n2 <= 2; /*0xc90*/
  if ( n2 == 2 ) /*0xc93*/
  {
    if ( MemPages && *(_QWORD *)(MemPages + 24) ) /*0xca1*/
    {
      AcpiPublishTables(1u, 1u); /*0xcac*/
      return 0x8000000000000003uLL; /*0xcc0*/
    }
    AcpiPublishTables(1u, 0); /*0xcc5*/
    v3 = n2 <= 2; /*0xcca*/
  }
  if ( v3 || AcpiTablesPublished ) /*0xcd6*/
    return 0x8000000000000003uLL; /*0xcd6*/
  v5 = MemPages && *(_DWORD *)(MemPages + 16); /*0xcec*/
  v6 = AcpiPublishTables(v5, 1u); /*0xcf4*/
  if ( v6 >= 0 ) /*0xcfc*/
    return 0; /*0xd36*/
  DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v6); /*0xd0d*/
  AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 500, (__int64)"!EFI_ERROR (Status)"); /*0xd25*/
  return 0x8000000000000015uLL; /*0xcbb*/
}


// Function: AcpiInstallTable @ 0xd3c (0xfe bytes)

__int64 __fastcall AcpiInstallTable(__int64 *p_psub_D3C, unsigned __int64 *p_RsdtBase, __int64 n40, _QWORD *a4)
{
  __int64 v5; // rax
  __int64 v6; // rbx
  __int64 result; // rax
  bool v8; // zf
  __int64 TableSize; // [rsp+48h] [rbp+10h] BYREF

  TableSize = 0; /*0xd48*/
  if ( !p_RsdtBase || n40 != *((_DWORD *)p_RsdtBase + 1) || !a4 ) /*0xd68*/
    return 0x8000000000000002uLL; /*0xe25*/
  AcpiDeprecatedWarningFlag = 1; /*0xd72*/
  v5 = AcpiProcessTable(&psub_4A4, (unsigned __int8 *)p_RsdtBase, 1, -2, &TableSize); /*0xd8d*/
  v6 = v5; /*0xd92*/
  if ( v5 < 0 ) /*0xd98*/
  {
    DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v5); /*0xda9*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 542, (__int64)"!EFI_ERROR (Status)"); /*0xdc1*/
  }
  AcpiDeprecatedWarningFlag = 0; /*0xdc6*/
  if ( v6 >= 0 ) /*0xdd0*/
  {
    v8 = AcpiTableInstalled == 0; /*0xdef*/
    *a4 = TableSize; /*0xdfb*/
    if ( v8 ) /*0xdfe*/
    {
      if ( AcpiTablesPublished ) /*0xe07*/
        AcpiPublishTables(1u, 0); /*0xe1b*/
      else
        return AcpiPublishTables(1u, 1u); /*0xe12*/
    }
    return v6; /*0xe20*/
  }
  else
  {
    result = 0x8000000000000009uLL; /*0xddc*/
    if ( v6 == 0x800000000000000FuLL ) /*0xde9*/
      return 0x800000000000000FuLL; /*0xde9*/
  }
  return result; /*0xe34*/
}


// Function: AcpiRemoveTable @ 0xe3c (0x4e bytes)

__int64 __fastcall AcpiRemoveTable(__int64 *p_psub_D3C, __int64 a2)
{
  __int64 result; // rax
  __int64 v3; // [rsp+48h] [rbp+10h] BYREF

  v3 = a2; /*0xe3c*/
  AcpiDeprecatedWarningFlag = 1; /*0xe4a*/
  result = AcpiProcessTable(&psub_4A4, 0, 0, -2, &v3); /*0xe68*/
  AcpiDeprecatedWarningFlag = 0; /*0xe70*/
  if ( result < 0 ) /*0xe81*/
    return 0x800000000000000EuLL; /*0xe81*/
  return result; /*0xe85*/
}


// Function: AcpiGetTableEx @ 0xe8c (0x31 bytes)

unsigned __int64 __fastcall AcpiGetTableEx(__int64 a1, __int64 *a2, _DWORD *a3, _QWORD *a4)
{
  unsigned __int64 result; // rax

  AcpiDeprecatedWarningFlag = 1; /*0xe9b*/
  result = AcpiGetTable(&psub_4A4, a1, a2, a3, a4); /*0xeac*/
  AcpiDeprecatedWarningFlag = 0; /*0xeb1*/
  return result; /*0xeb8*/
}


// Function: AcpiFindTableInList @ 0xec0 (0x58 bytes)

unsigned __int64 __fastcall AcpiFindTableInList(char a1, __int64 a2)
{
  unsigned __int64 DataSize; // rdx

  DataSize = 0; /*0xec3*/
  if ( !a2 ) /*0xec8*/
    return 0x8000000000000002uLL; /*0xec8*/
  if ( a1 ) /*0xecc*/
    return TableHandleListAppend((__int64)&AcpiTableHandleList, a2); /*0xed8*/
  if ( !j ) /*0xee7*/
    return 0x8000000000000002uLL; /*0xefe*/
  while ( *(_QWORD *)(AcpiTableHandleArray + 8 * DataSize) != a2 ) /*0xef4*/
  {
    if ( ++DataSize >= j ) /*0xefc*/
      return 0x8000000000000002uLL; /*0xefc*/
  }
  return SataGetInfo(&AcpiTableHandleList, DataSize, 0); /*0xf08*/
}


// Function: AcpiFindFvTables @ 0xf18 (0x236 bytes)

__int64 AcpiFindFvTables()
{
  __int64 InstanceCount; // rsi
  __int64 FvStatus_1; // rax
  __int64 SectionType; // r8
  __int64 FvStatus; // rdi
  __int64 FvIndex; // rbx
  __int64 HandleStatus; // rax
  __int64 FfsFile; // rbx
  __int64 FvStatus_2; // rdi
  unsigned __int8 *TableAddr_1; // rdx
  unsigned __int8 *TableAddr; // [rsp+40h] [rbp-29h] BYREF
  _DWORD SearchedSig[4]; // [rsp+48h] [rbp-21h] BYREF
  _DWORD TableGuid[4]; // [rsp+58h] [rbp-11h] BYREF
  unsigned __int64 NumHandles; // [rsp+68h] [rbp-1h] BYREF
  __int64 FfsFile_2; // [rsp+70h] [rbp+7h] BYREF
  __int64 HandleBuffer; // [rsp+78h] [rbp+Fh] BYREF
  __int64 TableSize; // [rsp+80h] [rbp+17h] BYREF
  unsigned __int64 BufferSize; // [rsp+88h] [rbp+1Fh] BYREF
  _BYTE SectionBuffer[48]; // [rsp+90h] [rbp+27h] BYREF
  __int64 FfsFile_1; // [rsp+D0h] [rbp+67h] BYREF
  int AuthStatus; // [rsp+D8h] [rbp+6Fh] BYREF
  char ReadFlag; // [rsp+E0h] [rbp+77h] BYREF
  char AuthFlag; // [rsp+E8h] [rbp+7Fh] BYREF

  InstanceCount = 0; /*0xf2b*/
  TableGuid[1] = 1136466893; /*0xf2d*/
  TableAddr = 0; /*0xf34*/
  TableSize = 0; /*0xf3c*/
  AuthStatus = 0; /*0xf44*/
  TableGuid[0] = 1889428594; /*0xf62*/
  SearchedSig[0] = 1889428594; /*0xf65*/
  TableGuid[2] = 768437131; /*0xf6b*/
  TableGuid[3] = 1740179565; /*0xf72*/
  SearchedSig[1] = 1136466893; /*0xf79*/
  SearchedSig[2] = 768437131; /*0xf80*/
  SearchedSig[3] = 1740179565; /*0xf87*/
  FvStatus_1 = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, unsigned __int64 *, __int64 *))(BootServices + 312))( /*0xf8e*/
                 2,
                 &unk_7160,
                 0,
                 &NumHandles,
                 &HandleBuffer);
  FvStatus = FvStatus_1; /*0xf94*/
  if ( FvStatus_1 < 0 ) /*0xfa0*/
  {
    FfsFile = FfsFile_1; /*0x1060*/
  }
  else
  {
    FvIndex = 0; /*0xfa6*/
    if ( NumHandles ) /*0xfac*/
    {
      while ( 1 ) /*0xfcc*/
      {
        HandleStatus = (*(__int64 (__fastcall **)(_QWORD, void *, __int64 *))(BootServices + 152))( /*0xfcc*/
                         *(_QWORD *)(HandleBuffer + 8 * FvIndex),
                         &unk_7160,
                         &FfsFile_2);
        if ( HandleStatus < 0 ) /*0xfd5*/
        {
          DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", HandleStatus); /*0xfe4*/
          AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 717, (__int64)"!EFI_ERROR (Status)"); /*0xffc*/
        }
        FvStatus = (*(__int64 (__fastcall **)(__int64, _DWORD *, _QWORD, _BYTE *, __int64 *, char *, int *))(FfsFile_2 + 16))( /*0x1031*/
                     FfsFile_2,
                     SearchedSig,
                     0,
                     SectionBuffer,
                     &FfsFile_1,
                     &ReadFlag,
                     &AuthStatus);
        if ( !FvStatus ) /*0x1037*/
          break; /*0x1037*/
        if ( ++FvIndex >= NumHandles ) /*0x1040*/
          goto LABEL_7; /*0x1040*/
      }
      FfsFile = FfsFile_2; /*0x105a*/
    }
    else
    {
LABEL_7:
      FfsFile = FfsFile_1; /*0x1046*/
    }
    FvStatus_1 = (*(__int64 (__fastcall **)(__int64))(BootServices + 72))(HandleBuffer); /*0x1055*/
  }
  if ( FvStatus < 0 )
    return DebugPrint(0x80000000LL, "ACPI: FoundFvWithAcpiTables Fails with a Status = %r\n", FvStatus);
  if ( !FvStatus ) /*0x1080*/
  {
    do /*0x109a*/
    {
      LOBYTE(SectionType) = 25; /*0x109a*/
      FvStatus_1 = (*(__int64 (__fastcall **)(__int64, _DWORD *, __int64, __int64, unsigned __int8 **, unsigned __int64 *, char *))(FfsFile + 24))( /*0x10ae*/
                     FfsFile,
                     TableGuid,
                     SectionType,
                     InstanceCount,
                     &TableAddr,
                     &BufferSize,
                     &AuthFlag);
      FvStatus_2 = FvStatus_1; /*0x10b1*/
      if ( FvStatus_1 >= 0 ) /*0x10b7*/
      {
        TableSize = 0; /*0x10b9*/
        TableAddr_1 = TableAddr; /*0x10be*/
        if ( BufferSize < *((unsigned int *)TableAddr + 1) ) /*0x10c9*/
        {
          AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 797, (__int64)"Size >= TableSize"); /*0x10de*/
          TableAddr_1 = TableAddr; /*0x10e3*/
        }
        FvStatus_2 = AcpiProcessTable(&psub_4A4, TableAddr_1, 1, -2, &TableSize); /*0x1109*/
        FvStatus_1 = (*(__int64 (__fastcall **)(unsigned __int8 *))(BootServices + 72))(TableAddr); /*0x1113*/
        if ( FvStatus_2 < 0 ) /*0x1119*/
          return FvStatus_1; /*0x1119*/
        FvStatus_1 = DebugPrint(64, "SubmitAcpiTablesFromFile Acpi Tbl submitted Instance = 0x%X\n ", ++InstanceCount); /*0x112d*/
        TableAddr = 0; /*0x1132*/
      }
    }
    while ( !FvStatus_2 ); /*0x109a*/
  }
  return FvStatus_1; /*0x1140*/
}


// Function: AssertCpuDeadLoop @ 0x1150 (0x14a bytes)

signed __int64 AssertCpuDeadLoop()
{
  __int64 v0; // rdi
  signed __int64 Table; // rsi
  _DWORD *v2; // rbx
  __int64 v3; // rax
  signed __int64 result; // rax
  signed __int64 v5; // rbx
  _DWORD *v6; // [rsp+20h] [rbp-30h] BYREF
  unsigned __int64 RsdtBase; // [rsp+28h] [rbp-28h] BYREF
  char v8; // [rsp+30h] [rbp-20h]
  int n65555; // [rsp+48h] [rbp-8h]
  int n7; // [rsp+4Ch] [rbp-4h]
  int v11; // [rsp+80h] [rbp+30h] BYREF
  __int64 v12; // [rsp+88h] [rbp+38h] BYREF

  v0 = 0; /*0x115f*/
  while ( 1 ) /*0x1175*/
  {
    Table = AcpiGetTableEx(v0, (__int64 *)&v6, &v11, &v12); /*0x1175*/
    if ( Table == 0x800000000000000EuLL ) /*0x1185*/
      break; /*0x1185*/
    v2 = v6; /*0x1187*/
    if ( *v6 != 1414353751 ) /*0x1191*/
      (*(void (__fastcall **)(_DWORD *))(BootServices + 72))(v6); /*0x119d*/
    ++v0; /*0x11a0*/
    if ( *v2 == 1414353751 ) /*0x11a9*/
      goto LABEL_8; /*0x11a9*/
  }
  DebugPrint(64, "FindAcpiTable - Table not Found!!!\n"); /*0x11b9*/
LABEL_8:
  DebugPrint(64, "WSMT table search.  Status = %r\n", Table); /*0x11be*/
  if ( Table >= 0 ) /*0x11da*/
  {
    v3 = AcpiRemoveTable(&psub_D3C, v12); /*0x11e7*/
    if ( v3 < 0 ) /*0x11ef*/
      DebugPrint(0x80000000LL, "Can not uninstall WSMT table.  Status = %r\n", v3); /*0x11fd*/
  }
  AcpiConfig_4(1414353751, (unsigned __int64)&RsdtBase, 4u); /*0x1211*/
  v8 = 1; /*0x121c*/
  HIDWORD(RsdtBase) = 40; /*0x1224*/
  n65555 = 65555; /*0x122c*/
  n7 = 7; /*0x123a*/
  result = AcpiInstallTable(&psub_D3C, &RsdtBase, 40, &v12); /*0x1241*/
  v5 = result; /*0x1246*/
  if ( result < 0 ) /*0x124c*/
  {
    DebugPrint(0x80000000LL, "Can not not install WSMT table.  Status = %r\n", result); /*0x125b*/
    DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v5); /*0x126d*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 945, (__int64)"!EFI_ERROR (Status)"); /*0x1285*/
    return v5; /*0x128a*/
  }
  return result; /*0x1292*/
}


// Function: AcpiCoreEntryPoint @ 0x129c (0x321 bytes)

__int64 __fastcall AcpiCoreEntryPoint(__int64 ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  __int64 StartStatus; // rbx
  __int64 result; // rax
  __int64 ContextPtr; // rax
  __int64 NotifyStatus; // rbx
  __int64 ErrLine1054; // rdx
  __int64 InstallStatus; // rax
  __int64 PublishStatus; // rax
  __int64 NotifyStatus_1; // rax
  __int64 ImageHandle_1; // [rsp+60h] [rbp+8h] BYREF
  char NotifyTag; // [rsp+70h] [rbp+18h] BYREF

  ImageHandle_1 = ImageHandle; /*0x129c*/
  if ( !::SystemTable ) /*0x12b1*/
  {
    ::SystemTable = (__int64)SystemTable; /*0x12b3*/
    BootServices = (__int64)SystemTable->BootServices; /*0x12be*/
    RuntimeServices = (__int64)SystemTable->RuntimeServices; /*0x12c9*/
  }
  DriverEntryPoint_0(ImageHandle, SystemTable); /*0x12d0*/
  StartStatus = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))( /*0x12ff*/
                  &unk_71E0,
                  0,
                  &ImageHandle_1);
  DebugPrint(64, "IN ACPI Start: %r\n", StartStatus);
  if ( StartStatus >= 0 ) /*0x130a*/
    return 0x8000000000000014uLL; /*0x1316*/
  result = AcpiCoreInitialize(); /*0x131b*/
  if ( result >= 0 ) /*0x1323*/
  {
    ContextPtr = AllocateZeroPool(80); /*0x132e*/
    ::ContextPtr = ContextPtr; /*0x1333*/
    if ( ContextPtr ) /*0x133d*/
    {
      NotifyStatus = (*(__int64 (__fastcall **)(__int64, __int64, signed __int64 (__fastcall *)(__int64, __int64), __int64, void *, char *))(BootServices + 368))( /*0x1382*/
                       512,
                       8,
                       AcpiCollectAmlInfo,
                       ContextPtr,
                       &unk_8630,
                       &NotifyTag);
      if ( NotifyStatus >= 0 ) /*0x1388*/
      {
        qword_86E4 = 0; /*0x13a8*/
        psub_4A4 = (__int64)AcpiGetTable; /*0x13b7*/
        psub_5AC = (__int64)AcpiProcessTable; /*0x13c5*/
        psub_C74 = (__int64)AcpiCoreNotify; /*0x13d3*/
        psub_D3C = (__int64)AcpiInstallTable; /*0x13e1*/
        psub_E3C = (__int64)AcpiRemoveTable; /*0x13ef*/
        psub_E8C = (__int64)AcpiGetTableEx; /*0x13fd*/
        psub_EC0 = (__int64)AcpiFindTableInList; /*0x140b*/
        psub_17D4 = (__int64)AcpiSdtOpenTable; /*0x1419*/
        psub_16CC = (__int64)AcpiCreateSdtHandle; /*0x1427*/
        psub_1814 = (__int64)AcpiFreeAmlNode; /*0x1435*/
        psub_1A88 = (__int64)AcpiConfig_13; /*0x1443*/
        psub_1888 = (__int64)AcpiConfig_7; /*0x1451*/
        psub_1994 = (__int64)AcpiConfig_8; /*0x145f*/
        psub_1C48 = (__int64)AcpiConfig_6; /*0x146d*/
        n126 = 126; /*0x1474*/
        AcpiFindFvTables(); /*0x147e*/
        InstallStatus = (*(__int64 (__fastcall **)(__int64 *, void *, __int64 *, void *, __int64 *, void *, int *, _QWORD))(BootServices + 328))( /*0x14d0*/
                          &qword_86E4,
                          &unk_71E0,
                          &psub_4A4,
                          &unk_71A0,
                          &psub_D3C,
                          &unk_71B0,
                          &n126,
                          0);
        if ( InstallStatus < 0 ) /*0x14de*/
        {
          DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", InstallStatus); /*0x14ec*/
          AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 1043, (__int64)"!EFI_ERROR (Status)"); /*0x1504*/
        }
        PublishStatus = AcpiPublishTables(1u, AcpiTablesPublished == 0); /*0x151c*/
        if ( PublishStatus < 0 ) /*0x1524*/
        {
          DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", PublishStatus); /*0x1533*/
          AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 1046, (__int64)"!EFI_ERROR (Status)"); /*0x154b*/
        }
        NotifyStatus_1 = (*(__int64 (__fastcall **)(__int64, __int64, signed __int64 (*)()))(BootServices + 368))( /*0x1579*/
                           512,
                           8,
                           AssertCpuDeadLoop);
        NotifyStatus = NotifyStatus_1; /*0x157f*/
        if ( NotifyStatus_1 >= 0 ) /*0x1585*/
          return NotifyStatus; /*0x1585*/
        DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", NotifyStatus_1); /*0x1594*/
        ErrLine1054 = 1054; /*0x1599*/
LABEL_16:
        AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", ErrLine1054, (__int64)"!EFI_ERROR (Status)"); /*0x159e*/
        return NotifyStatus; /*0x15b1*/
      }
    }
    else
    {
      NotifyStatus = 0x8000000000000009uLL; /*0x133f*/
    }
    DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", NotifyStatus); /*0x1399*/
    ErrLine1054 = 1007; /*0x139e*/
    goto LABEL_16; /*0x13a3*/
  }
  return result; /*0x15b4*/
}


// Function: AcpiConfig_20 @ 0x15c0 (0x3c bytes)

__int64 __fastcall AcpiConfig_20(unsigned __int64 a1)
{
  __int64 v1; // rdx
  unsigned __int64 v2; // r8

  v1 = 0; /*0x15c7*/
  if ( !j_0 ) /*0x15cc*/
    return 0; /*0x15f5*/
  while ( 1 ) /*0x15d9*/
  {
    v2 = **(_QWORD **)(AcpiTableList + 8 * v1); /*0x15d9*/
    if ( v2 <= a1 && v2 + *(unsigned int *)(v2 + 4) > a1 ) /*0x15eb*/
      break; /*0x15eb*/
    if ( ++v1 >= (unsigned __int64)j_0 ) /*0x15f3*/
      return 0; /*0x15f3*/
  }
  return **(_QWORD **)(AcpiTableList + 8 * v1); /*0x15f7*/
}


// Function: AcpiConfig_14 @ 0x15fc (0xcd bytes)

unsigned __int64 __fastcall AcpiConfig_14(__int64 a1, __int64 *a2)
{
  __int64 v2; // r8
  _DWORD **v5; // rax
  _DWORD *v6; // rbx
  __int64 v7; // rax
  __int64 v8; // rcx
  __int64 v9; // rax

  v2 = 0; /*0x160d*/
  if ( j_0 ) /*0x161d*/
  {
    while ( a1 != **(_QWORD **)(AcpiTableList + 8 * v2) ) /*0x1626*/
    {
      if ( ++v2 >= (unsigned __int64)j_0 ) /*0x162e*/
        goto LABEL_4; /*0x162e*/
    }
  }
  else
  {
LABEL_4:
    v2 = -1; /*0x1630*/
  }
  if ( v2 == -1 ) /*0x1638*/
    return 0x800000000000000EuLL; /*0x1638*/
  v5 = *(_DWORD ***)(AcpiTableList + 8 * v2); /*0x1646*/
  v6 = *v5; /*0x164a*/
  if ( **v5 != 1413763908 && *v6 != 1413763923 ) /*0x165b*/
    return 0x800000000000000EuLL; /*0x163a*/
  v7 = AllocateZeroPool(48); /*0x1662*/
  v8 = v7; /*0x1667*/
  if ( v7 ) /*0x166d*/
  {
    *(_DWORD *)v7 = 1213350213; /*0x1693*/
    *(_QWORD *)(v7 + 8) = v6 + 9; /*0x169d*/
    v9 = (unsigned int)v6[1]; /*0x16a1*/
    *(_QWORD *)(v8 + 24) = 0; /*0x16a4*/
    *(_QWORD *)(v8 + 16) = v9 - 36; /*0x16ad*/
    *(_BYTE *)(v8 + 40) = 0; /*0x16b3*/
    *(_QWORD *)(v8 + 32) = v6; /*0x16b7*/
    *a2 = v8; /*0x16bb*/
    return 0; /*0x16b1*/
  }
  else
  {
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 135, (__int64)"AmlHandle != ((void *) 0)"); /*0x1682*/
    return 0x8000000000000009uLL; /*0x1687*/
  }
}


// Function: AcpiCreateSdtHandle @ 0x16cc (0x15 bytes)

unsigned __int64 __fastcall AcpiCreateSdtHandle(__int64 a1, __int64 *a2)
{
  if ( a2 ) /*0x16cf*/
    return AcpiConfig_14(a1, a2); /*0x16dc*/
  else
    return 0x8000000000000002uLL; /*0x16d1*/
}


// Function: AcpiConfig_9 @ 0x16e4 (0xed bytes)

unsigned __int64 __fastcall AcpiConfig_9(char *n6, unsigned __int64 a2, __int64 *a3)
{
  char *v6; // rax
  __int64 v7; // rdi
  __int64 v9; // rbx
  __int64 v10; // rax
  unsigned __int64 v11; // rcx
  unsigned __int64 v12; // [rsp+78h] [rbp+20h] BYREF

  v6 = AmlGetOpcodeInfo(n6); /*0x1705*/
  v7 = (__int64)v6; /*0x170d*/
  if ( !v6 || (v6[32] & 2) != 0 ) /*0x1728*/
    return 0x8000000000000002uLL; /*0x1728*/
  v9 = AllocatePool(48); /*0x1734*/
  if ( !v9 ) /*0x173a*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 217, (__int64)"AmlHandle != ((void *) 0)"); /*0x174f*/
  *(_DWORD *)v9 = 1397244229; /*0x1759*/
  *(_QWORD *)(v9 + 8) = n6; /*0x177b*/
  *(_QWORD *)(v9 + 24) = v7; /*0x177f*/
  *(_BYTE *)(v9 + 40) = 0; /*0x1783*/
  v10 = AcpiConfig(v7, n6, a2, 0xFFFFFFFF, 0, 0, &v12); /*0x1787*/
  v11 = v12; /*0x178c*/
  if ( v10 < 0 ) /*0x1794*/
    v11 = 0; /*0x1794*/
  *(_QWORD *)(v9 + 16) = v11; /*0x1798*/
  if ( !v11 ) /*0x179f*/
  {
    (*(void (__fastcall **)(__int64))(BootServices + 72))(v9); /*0x17ab*/
    return 0x8000000000000002uLL; /*0x171f*/
  }
  *a3 = v9; /*0x17b3*/
  return 0; /*0x17c7*/
}


// Function: AcpiSdtOpenTable @ 0x17d4 (0x3f bytes)

unsigned __int64 __fastcall AcpiSdtOpenTable(unsigned __int64 a1, __int64 a2)
{
  __int64 v2; // rax
  _BYTE *v3; // rcx
  __int64 *v4; // r11

  if ( a1 && a2 && (v2 = AcpiConfig_20(a1)) != 0 ) /*0x17ed*/
    return AcpiConfig_9(v3, v2 + *(unsigned int *)(v2 + 4) - (_QWORD)v3, v4); /*0x17ff*/
  else
    return 0x8000000000000002uLL; /*0x1804*/
}


// Function: AcpiFreeAmlNode @ 0x1814 (0x74 bytes)

unsigned __int64 __fastcall AcpiFreeAmlNode(__int64 a1)
{
  __int64 v1; // r11
  __int64 v3; // rax
  char v4; // cl
  unsigned __int64 v5; // rdx

  v1 = a1; /*0x1818*/
  if ( !a1 || *(_DWORD *)a1 != 1213350213 && *(_DWORD *)a1 != 1397244229 ) /*0x183a*/
    return 0x8000000000000002uLL; /*0x183a*/
  if ( *(_BYTE *)(a1 + 40) ) /*0x183c*/
  {
    v3 = AcpiConfig_20(*(_QWORD *)(a1 + 8)); /*0x1846*/
    if ( v3 ) /*0x184e*/
    {
      v4 = *(_BYTE *)v3; /*0x1850*/
      v5 = 1; /*0x1852*/
      *(_BYTE *)(v3 + 9) = 0; /*0x1857*/
      if ( *(_DWORD *)(v3 + 4) > 1u ) /*0x185e*/
      {
        do /*0x186d*/
        {
          v4 += *(_BYTE *)(v5 + v3); /*0x1864*/
          ++v5; /*0x1867*/
        }
        while ( v5 < *(unsigned int *)(v3 + 4) ); /*0x186d*/
      }
      *(_BYTE *)(v3 + 9) = -v4; /*0x1871*/
      goto LABEL_10; /*0x1871*/
    }
    return 0x8000000000000002uLL; /*0x182a*/
  }
LABEL_10:
  (*(void (__fastcall **)(__int64))(BootServices + 72))(v1); /*0x1874*/
  return 0; /*0x1883*/
}


// Function: AcpiConfig_7 @ 0x1888 (0x10a bytes)

__int64 __fastcall AcpiConfig_7(__int64 a1, unsigned __int64 i, _DWORD *a3, char **a4, unsigned __int64 *a5)
{
  __int64 v5; // rbx
  __int64 v11; // rcx

  v5 = 0; /*0x18a0*/
  if ( !a3 ) /*0x18b1*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 350, (__int64)"DataType != ((void *) 0)"); /*0x18c6*/
  if ( !a4 ) /*0x18ce*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 351, (__int64)"Data != ((void *) 0)"); /*0x18e3*/
  if ( !a5 ) /*0x18f3*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 352, (__int64)"DataSize != ((void *) 0)"); /*0x1908*/
  if ( !a1 || *(_DWORD *)a1 != 1397244229 || !AcpiConfig_20(*(_QWORD *)(a1 + 8)) ) /*0x192a*/
    return 0x8000000000000002uLL; /*0x1912*/
  v11 = *(_QWORD *)(a1 + 24); /*0x1934*/
  if ( i <= *(unsigned int *)(v11 + 4) ) /*0x193e*/
  {
    if ( (AcpiConfig(v11, *(char **)(a1 + 8), *(_QWORD *)(a1 + 16), i, a3, a4, a5) & 0x8000000000000000uLL) != 0LL ) /*0x1972*/
      return 0x8000000000000002uLL; /*0x1972*/
    return v5; /*0x1976*/
  }
  else
  {
    *a3 = 0; /*0x1940*/
    return 0; /*0x1942*/
  }
}


// Function: AcpiConfig_8 @ 0x1994 (0xf3 bytes)

unsigned __int64 __fastcall AcpiConfig_8(__int64 a1, unsigned __int64 i, __int64 a3, unsigned __int64 a4)
{
  __int64 v9; // rcx
  unsigned __int64 v10; // [rsp+40h] [rbp-18h] BYREF
  char *v11; // [rsp+48h] [rbp-10h] BYREF
  int v12; // [rsp+60h] [rbp+8h] BYREF

  if ( !a3 ) /*0x19b7*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 420, (__int64)"Data != ((void *) 0)"); /*0x19cc*/
  if ( !a1 ) /*0x19d4*/
    return 0x8000000000000002uLL; /*0x19d4*/
  if ( *(_DWORD *)a1 != 1397244229 ) /*0x19eb*/
    return 0x8000000000000002uLL; /*0x19eb*/
  if ( !AcpiConfig_20(*(_QWORD *)(a1 + 8)) ) /*0x19f1*/
    return 0x8000000000000002uLL; /*0x19f1*/
  v9 = *(_QWORD *)(a1 + 24); /*0x19fb*/
  if ( i > *(unsigned int *)(v9 + 4) /*0x1a3f*/
    || (AcpiConfig(v9, *(char **)(a1 + 8), *(_QWORD *)(a1 + 16), i, &v12, &v11, &v10) & 0x8000000000000000uLL) != 0LL
    || !v12 )
  {
    return 0x8000000000000002uLL; /*0x19d6*/
  }
  if ( a4 > v10 ) /*0x1a46*/
    return 0x8000000000000004uLL; /*0x1a48*/
  (*(void (__fastcall **)(char *, __int64, unsigned __int64))(BootServices + 352))(v11, a3, a4); /*0x1a66*/
  *(_BYTE *)(a1 + 40) = 1; /*0x1a6e*/
  return 0; /*0x1a81*/
}


// Function: AcpiConfig_13 @ 0x1a88 (0xd4 bytes)

unsigned __int64 __fastcall AcpiConfig_13(_QWORD *a1, __int64 *a2)
{
  char *n6_1; // rcx
  _QWORD *v5; // r11
  __int64 v6; // rax
  char *n6; // [rsp+30h] [rbp+8h] BYREF

  if ( !a2 ) /*0x1a9b*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 495, (__int64)"Handle != ((void *) 0)"); /*0x1ab0*/
  if ( !a1 || *a2 && *(_DWORD *)*a2 != 1397244229 || !AcpiConfig_20(a1[1]) ) /*0x1ad3*/
    return 0x8000000000000002uLL; /*0x1adb*/
  if ( *(_DWORD *)a1 == 1213350213 ) /*0x1ae3*/
  {
    if ( v5 ) /*0x1ae8*/
      n6_1 = (char *)(v5[1] + v5[2]); /*0x1aee*/
    v6 = AmlGetFirstChild((__int64)a1, n6_1, &n6); /*0x1afd*/
  }
  else
  {
    if ( *(_DWORD *)a1 != 1397244229 ) /*0x1b0a*/
      return 0x8000000000000002uLL; /*0x1b47*/
    v6 = AmlFindNextChild(a1, v5, &n6); /*0x1b17*/
  }
  if ( v6 < 0 ) /*0x1b1f*/
    return 0x8000000000000002uLL; /*0x1b1f*/
  if ( n6 ) /*0x1b29*/
    return AcpiConfig_9(n6, a1[1] + a1[2] - (_QWORD)n6, a2); /*0x1b40*/
  *a2 = 0; /*0x1b2b*/
  return 0; /*0x1b56*/
}


// Function: AcpiConfig_10 @ 0x1b5c (0xeb bytes)

unsigned __int64 __fastcall AcpiConfig_10(_QWORD *a1, _BYTE *j, __int64 *a3)
{
  _QWORD *v5; // rbp
  __int64 v6; // rbx
  __int64 v8; // rbx
  __int64 v9; // [rsp+40h] [rbp+8h] BYREF
  char *n6; // [rsp+48h] [rbp+10h] BYREF

  n6 = 0; /*0x1b68*/
  v5 = a1; /*0x1b77*/
  if ( *(_WORD *)j == 92 ) /*0x1b7a*/
  {
    v6 = AllocatePool(48); /*0x1b8e*/
    if ( !v6 ) /*0x1b94*/
      AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 599, (__int64)"DstAmlHandle != ((void *) 0)"); /*0x1ba9*/
    (*(void (__fastcall **)(__int64, _QWORD *, __int64))(BootServices + 352))(v6, v5, 48); /*0x1bbe*/
    *a3 = v6; /*0x1bc5*/
    return 0; /*0x1bc8*/
  }
  else
  {
    v9 = 0; /*0x1bcc*/
    while ( (AcpiConfig_13(a1, &v9) & 0x8000000000000000uLL) == 0LL ) /*0x1bd7*/
    {
      v8 = v9; /*0x1be1*/
      if ( !v9 ) /*0x1be9*/
      {
        *a3 = 0; /*0x1c2a*/
        return 0; /*0x1c2e*/
      }
      if ( (AcpiConfig_3(v9, j, (__int64 *)&n6, 1) & 0x8000000000000000uLL) != 0LL ) /*0x1c01*/
        break; /*0x1c01*/
      if ( n6 /*0x1c23*/
        && (AcpiConfig_9(n6, *(_QWORD *)(v8 + 8) + *(_QWORD *)(v8 + 16) - (_QWORD)n6, a3) & 0x8000000000000000uLL) == 0LL )
      {
        return 0; /*0x1c23*/
      }
      a1 = v5; /*0x1c25*/
    }
    return 0x8000000000000002uLL; /*0x1c30*/
  }
}


// Function: AcpiConfig_6 @ 0x1c48 (0x110 bytes)

unsigned __int64 __fastcall AcpiConfig_6(_QWORD *a1, __int64 a2, __int64 *a3)
{
  unsigned __int64 v3; // rbx
  char *v7; // r11
  int *j; // rsi
  unsigned __int64 v9; // rax
  char *n6; // [rsp+30h] [rbp+8h] BYREF

  v3 = 0; /*0x1c5d*/
  if ( !a1 ) /*0x1c6b*/
    return 0x8000000000000002uLL; /*0x1c6b*/
  if ( !AcpiConfig_20(a1[1]) ) /*0x1c80*/
    return 0x8000000000000002uLL; /*0x1c80*/
  j = AcpiConfig_1(v7); /*0x1c92*/
  if ( !j ) /*0x1c98*/
    return 0x8000000000000002uLL; /*0x1c77*/
  DebugPrint(64, "AcpiSdt: FindPath - ");
  AmlDebugPrintPath((unsigned __int8 *)j); /*0x1cae*/
  DebugPrint(64, "\n"); /*0x1cbf*/
  if ( *(_DWORD *)a1 == 1213350213 ) /*0x1cca*/
  {
    v9 = AcpiConfig_10(a1, j, a3); /*0x1cd5*/
LABEL_12:
    v3 = v9; /*0x1d23*/
    goto LABEL_14; /*0x1d26*/
  }
  if ( *(_DWORD *)a1 != 1397244229 /*0x1cff*/
    || (n6 = 0, (AcpiConfig_3((__int64)a1, j, (__int64 *)&n6, 0) & 0x8000000000000000uLL) != 0LL) )
  {
    v3 = 0x8000000000000002uLL; /*0x1d28*/
    goto LABEL_14; /*0x1d28*/
  }
  if ( n6 ) /*0x1d09*/
  {
    v9 = AcpiConfig_9(n6, a1[1] + a1[2] - (_QWORD)n6, a3); /*0x1d1e*/
    goto LABEL_12; /*0x1d1e*/
  }
  *a3 = 0; /*0x1d0b*/
LABEL_14:
  (*(void (__fastcall **)(int *))(BootServices + 72))(j); /*0x1d32*/
  return v3; /*0x1d51*/
}


// Function: AmlGetFirstChild @ 0x1d58 (0xa9 bytes)

unsigned __int64 __fastcall AmlGetFirstChild(__int64 a1, char *n6, char **p_n6)
{
  char *n6_1; // rbx
  bool i; // cf
  char *v7; // rax
  __int64 v8; // r10
  unsigned __int64 v10; // [rsp+50h] [rbp+8h] BYREF

  n6_1 = n6; /*0x1d72*/
  for ( i = (unsigned __int64)n6 < *(_QWORD *)(a1 + 16) + *(_QWORD *)(a1 + 8); /*0x1d75*/
        i;
        i = (unsigned __int64)n6_1 < *(_QWORD *)(a1 + 16) + *(_QWORD *)(a1 + 8) )
  {
    v7 = AmlGetOpcodeInfo(n6_1); /*0x1d80*/
    if ( !v7 ) /*0x1d88*/
      return 0x8000000000000002uLL; /*0x1d88*/
    if ( (v7[32] & 2) == 0 ) /*0x1d8e*/
    {
      *p_n6 = n6_1; /*0x1dda*/
      return 0; /*0x1ddd*/
    }
    if ( (AcpiConfig((__int64)v7, n6_1, v8 - (_QWORD)n6_1, 0xFFFFFFFF, 0, 0, &v10) & 0x8000000000000000uLL) != 0LL /*0x1dc8*/
      || !v10 )
    {
      return 0x8000000000000002uLL; /*0x1de9*/
    }
    n6_1 += v10; /*0x1dce*/
  }
  *p_n6 = 0; /*0x1deb*/
  return 0; /*0x1dfb*/
}


// Function: AmlFindNextChild @ 0x1e04 (0x121 bytes)

__int64 __fastcall AmlFindNextChild(_QWORD *a1, _QWORD *a2, char **p_n6)
{
  __int64 v3; // rbx
  _QWORD *v4; // rbp
  unsigned int v7; // r15d
  unsigned int i; // r14d
  char *v9; // rax
  __int64 v10; // rax
  unsigned __int64 p_n6a_2; // rcx
  char *p_n6a_1; // rdx
  char *p_n6a; // [rsp+70h] [rbp+8h] BYREF
  char *v15; // [rsp+78h] [rbp+10h] BYREF
  unsigned __int64 v16; // [rsp+88h] [rbp+20h] BYREF

  v3 = 0; /*0x1e18*/
  v4 = a1; /*0x1e1d*/
  if ( a2 ) /*0x1e26*/
    v4 = a2; /*0x1e26*/
  v7 = *(_DWORD *)(a1[3] + 4LL); /*0x1e2a*/
  i = 1; /*0x1e2e*/
  if ( !v7 ) /*0x1e35*/
  {
LABEL_9:
    *p_n6 = 0; /*0x1e91*/
LABEL_10:
    v10 = a1[3]; /*0x1e94*/
    p_n6a = 0; /*0x1e98*/
    if ( (*(_BYTE *)(v10 + 32) & 4) != 0 ) /*0x1ea1*/
    {
      if ( AmlGetSiblingTail((__int64)a1, &p_n6a) < 0 ) /*0x1ed0*/
        return 0x8000000000000002uLL; /*0x1edc*/
      p_n6a_2 = v4[1]; /*0x1ede*/
      p_n6a_1 = p_n6a; /*0x1ee2*/
      if ( p_n6a_2 < (unsigned __int64)p_n6a ) /*0x1eea*/
        return AmlGetFirstChild((__int64)a1, p_n6a_1, p_n6); /*0x1eea*/
      p_n6a_1 = (char *)(p_n6a_2 + v4[2]); /*0x1ef4*/
      if ( (unsigned __int64)p_n6a_1 < a1[1] + a1[2] ) /*0x1efe*/
        return AmlGetFirstChild((__int64)a1, p_n6a_1, p_n6); /*0x1f0b*/
    }
    *p_n6 = 0; /*0x1ea3*/
    return v3; /*0x1f0e*/
  }
  while ( 1 ) /*0x1e37*/
  {
    if ( (AcpiConfig(a1[3], (char *)a1[1], a1[2], i, &p_n6a, &v15, &v16) & 0x8000000000000000uLL) != 0LL ) /*0x1e6f*/
      return 0x8000000000000002uLL; /*0x1ebe*/
    if ( !(_DWORD)p_n6a ) /*0x1e75*/
      goto LABEL_9; /*0x1e75*/
    if ( (_DWORD)p_n6a == 6 ) /*0x1e7c*/
    {
      v9 = v15; /*0x1e7e*/
      if ( v4[1] < (unsigned __int64)v15 ) /*0x1e87*/
        break; /*0x1e87*/
    }
    if ( ++i > v7 ) /*0x1e8f*/
      goto LABEL_9; /*0x1e8f*/
  }
  *p_n6 = v15; /*0x1ea8*/
  if ( !v9 ) /*0x1eae*/
    goto LABEL_10; /*0x1eae*/
  return 0; /*0x1f19*/
}


// Function: AmlGetOpcodeInfo @ 0x1f28 (0x45 bytes)

char *__fastcall AmlGetOpcodeInfo(char *n6)
{
  char v1; // r8
  __int64 v2; // rax
  char v3; // dl
  unsigned __int64 n0x141C; // rcx

  v1 = *n6; /*0x1f28*/
  v2 = 0; /*0x1f2b*/
  if ( *n6 == 91 ) /*0x1f31*/
    v3 = n6[1]; /*0x1f33*/
  else
    v3 = 0; /*0x1f38*/
  n0x141C = 0; /*0x1f3a*/
  while ( byte_71F0[n0x141C] != v1 || byte_71F0[n0x141C + 1] != v3 ) /*0x1f4f*/
  {
    ++v2; /*0x1f51*/
    n0x141C += 36LL; /*0x1f54*/
    if ( n0x141C >= 0x141C ) /*0x1f5f*/
      return 0; /*0x1f63*/
  }
  return &byte_71F0[36 * v2]; /*0x1f63*/
}


// Function: AmlDecodeLength @ 0x1f70 (0x69 bytes)

__int64 __fastcall AmlDecodeLength(unsigned __int8 *a1, unsigned __int64 *a2)
{
  unsigned __int64 v2; // r8
  int v3; // r9d
  __int64 v4; // r10
  int v5; // r9d
  int v6; // r9d
  __int64 v7; // r8
  unsigned __int64 v8; // r8

  v2 = 0; /*0x1f74*/
  v3 = *a1 >> 6; /*0x1f77*/
  v4 = (unsigned int)(v3 + 1); /*0x1f7b*/
  if ( !v3 ) /*0x1f82*/
  {
    v2 = *a1; /*0x1fce*/
    goto LABEL_11; /*0x1fce*/
  }
  v5 = v3 - 1; /*0x1f84*/
  if ( !v5 ) /*0x1f88*/
  {
    v8 = a1[1]; /*0x1fba*/
    goto LABEL_9; /*0x1fba*/
  }
  v6 = v5 - 1; /*0x1f8a*/
  if ( !v6 ) /*0x1f8e*/
  {
    v7 = a1[2]; /*0x1fa8*/
    goto LABEL_7; /*0x1fa8*/
  }
  if ( v6 == 1 ) /*0x1f94*/
  {
    v7 = *((unsigned __int16 *)a1 + 1); /*0x1fa3*/
LABEL_7:
    v8 = a1[1] | (unsigned __int64)(v7 << 8); /*0x1fad*/
LABEL_9:
    v2 = *a1 & 0xF | (16 * v8); /*0x1fbf*/
  }
LABEL_11:
  *a2 = v2; /*0x1fd2*/
  return v4; /*0x1fd8*/
}


// Function: AmlParseNamespacePath @ 0x1fdc (0xd4 bytes)

unsigned __int64 __fastcall AmlParseNamespacePath(_BYTE *n6, __int64 *a2)
{
  __int64 v2; // r9
  __int64 v4; // r8
  unsigned __int64 n2; // r10
  unsigned __int8 *v6; // rcx
  __int64 v7; // rdx
  unsigned __int8 n0x2F; // al
  __int64 v9; // rbx

  v2 = 0; /*0x1fe6*/
  v4 = 0; /*0x1fef*/
  switch ( *n6 ) /*0x1ff6*/
  {
    case '\\': /*0x1ff6*/
      ++n6; /*0x1ff8*/
      v4 = 1; /*0x1ffb*/
      break;
    case '.': /*0x1ff6*/
      ++n6; /*0x2010*/
      n2 = 2; /*0x2013*/
      ++v4; /*0x2019*/
LABEL_14:
      if ( *n6 == 95 || (unsigned __int8)(*n6 - 65) <= 0x19u ) /*0x2059*/
      {
        v7 = 1; /*0x205b*/
        while ( 1 ) /*0x2061*/
        {
          n0x2F = n6[v7] - 48; /*0x2061*/
          if ( n0x2F > 0x2Fu ) /*0x2065*/
            break; /*0x2065*/
          v9 = 0x87FFFFFE03FFLL; /*0x206b*/
          if ( !_bittest64(&v9, (char)n0x2F) ) /*0x2075*/
            break; /*0x2075*/
          if ( (unsigned __int64)++v7 >= 4 ) /*0x2082*/
          {
            n6 += 4; /*0x2084*/
            v4 += 4; /*0x2088*/
            if ( ++v2 < n2 ) /*0x2092*/
              goto LABEL_14; /*0x2092*/
            *a2 = v4; /*0x2094*/
            return 0; /*0x2094*/
          }
        }
      }
      return 0x8000000000000002uLL; /*0x2079*/
    case '/': /*0x1ff6*/
      v6 = n6 + 1; /*0x2023*/
      n2 = *v6; /*0x2026*/
      n6 = v6 + 1; /*0x202a*/
      v4 += 2; /*0x202d*/
      goto LABEL_14; /*0x2031*/
    default:
      while ( *n6 == 94 ) /*0x2009*/
      {
        ++n6; /*0x2000*/
        ++v4; /*0x2003*/
      }
      break;
  }
  if ( *n6 ) /*0x2033*/
  {
    n2 = 1; /*0x204c*/
    goto LABEL_14; /*0x204c*/
  }
  if ( v4 != 1 || *(n6 - 1) != 92 ) /*0x2041*/
    return 0x8000000000000002uLL; /*0x209b*/
  *a2 = 2; /*0x2043*/
  return 0; /*0x20af*/
}


// Function: AmlParseNameSegment @ 0x20b0 (0x87 bytes)

__int64 __fastcall AmlParseNameSegment(_BYTE *a1)
{
  __int64 v2; // rdx
  unsigned __int8 n0x39; // al
  __int64 v4; // r8
  __int64 v5; // r9
  _BYTE *v6; // rcx
  char v7; // r8
  __int64 v8; // r10
  char n46; // al

  if ( !*a1 ) /*0x20b0*/
    return 0; /*0x20b5*/
  v2 = 0; /*0x20ba*/
  n0x39 = *a1 - 65; /*0x20bc*/
  if ( n0x39 <= 0x39u ) /*0x20c4*/
  {
    v4 = 0x3FFFFFF43FFFFFFLL; /*0x20ca*/
    if ( _bittest64(&v4, (char)n0x39) ) /*0x20d4*/
    {
      v2 = 1; /*0x20da*/
      ++a1; /*0x20dd*/
    }
  }
  if ( *a1 && *a1 != 46 ) /*0x20e8*/
  {
    v5 = 0; /*0x20ea*/
    v6 = &a1[-v2]; /*0x20ed*/
    while ( 1 ) /*0x20f0*/
    {
      v7 = v6[v2]; /*0x20f0*/
      if ( (unsigned __int8)(v7 - 48) <= 0x2Fu && (v8 = 0x87FFFFFE03FFLL, _bittest64(&v8, (char)(v7 - 48))) /*0x2118*/
        || (unsigned __int8)(v7 - 97) <= 0x19u )
      {
        ++v2; /*0x211a*/
      }
      n46 = v6[v2]; /*0x211d*/
      if ( !n46 || n46 == 46 ) /*0x2126*/
        break; /*0x2126*/
      if ( (unsigned __int64)++v5 >= 3 ) /*0x212f*/
        return 0; /*0x212f*/
    }
  }
  return v2; /*0x20b7*/
}


// Function: AcpiConfig_1 @ 0x2138 (0x1cb bytes)

int *__fastcall AcpiConfig_1(char *a1)
{
  unsigned __int64 n0xFF; // rsi
  __int64 v2; // r12
  unsigned __int64 n4_1; // r15
  char *v4; // rdi
  char *v5; // rbx
  unsigned __int64 n4; // rax
  char *v7; // rbx
  unsigned __int64 v8; // rax
  unsigned __int64 v9; // rbp
  int value; // r8d
  int *buf; // r14
  int *buf_1; // rbx
  __int64 v14; // rsi
  signed __int64 value_1; // r8
  char *v16; // rcx
  __int64 v17; // r9
  char v18; // dl
  char *v19; // rdi

  n0xFF = 0; /*0x2155*/
  v2 = 0; /*0x2157*/
  n4_1 = 0; /*0x215a*/
  v4 = a1; /*0x215d*/
  v5 = a1; /*0x2163*/
  if ( *a1 == 92 ) /*0x2169*/
  {
    v2 = 1; /*0x216b*/
    v5 = a1 + 1; /*0x216e*/
  }
  else if ( *a1 == 94 ) /*0x2177*/
  {
    do /*0x2182*/
    {
      ++v5; /*0x2179*/
      ++n4_1; /*0x217c*/
    }
    while ( *v5 == 94 ); /*0x2182*/
  }
  if ( *v5 ) /*0x2184*/
  {
    while ( 1 ) /*0x218c*/
    {
      n4 = AmlParseNameSegment(v5); /*0x218c*/
      if ( !n4 || n4 > 4 ) /*0x219a*/
        return 0; /*0x219a*/
      v7 = &v5[n4]; /*0x219c*/
      ++n0xFF; /*0x219f*/
      if ( *v7 ) /*0x21a2*/
      {
        v5 = v7 + 1; /*0x21a7*/
        if ( *v5 ) /*0x21aa*/
          continue; /*0x21aa*/
      }
      if ( n0xFF > 0xFF ) /*0x21b6*/
        return 0; /*0x21b6*/
      break; /*0x21b6*/
    }
  }
  v8 = n4_1 + v2 + 4 * n0xFF; /*0x21b8*/
  if ( n0xFF <= 2 ) /*0x21c3*/
  {
    if ( n0xFF == 2 ) /*0x21cb*/
      ++v8; /*0x21cd*/
  }
  else
  {
    v8 += 2LL; /*0x21c5*/
  }
  v9 = v8 + 1; /*0x21d0*/
  if ( v8 == -1 ) /*0x21d7*/
    return 0; /*0x21db*/
  buf = (int *)AllocatePool(v8 + 1); /*0x21e8*/
  if ( !buf ) /*0x21ee*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlString.c", 422, (__int64)"AmlPath != ((void *) 0)"); /*0x2203*/
  buf_1 = buf; /*0x2208*/
  if ( v2 == 1 ) /*0x220f*/
  {
    *(_BYTE *)buf = 92; /*0x2211*/
    buf_1 = (int *)((char *)buf + 1); /*0x2215*/
    ++v4; /*0x2219*/
  }
  else if ( n4_1 ) /*0x2221*/
  {
    LOBYTE(value) = 94; /*0x2223*/
    SetMem(buf, n4_1, value); /*0x222c*/
    v4 += n4_1; /*0x2231*/
    buf_1 = (int *)((char *)buf + n4_1); /*0x2234*/
  }
  if ( n0xFF <= 2 ) /*0x223c*/
  {
    if ( n0xFF == 2 ) /*0x224e*/
    {
      *(_BYTE *)buf_1 = 46; /*0x2254*/
      buf_1 = (int *)((char *)buf_1 + 1); /*0x2257*/
    }
  }
  else
  {
    *(_BYTE *)buf_1 = 47; /*0x223e*/
    *((_BYTE *)buf_1 + 1) = n0xFF; /*0x2241*/
    buf_1 = (int *)((char *)buf_1 + 2); /*0x2245*/
  }
  while ( *v4 ) /*0x22d6*/
  {
    v14 = AmlParseNameSegment(v4); /*0x2264*/
    if ( (unsigned __int64)(v14 - 1) > 3 ) /*0x226f*/
      AssertWithProtocol( /*0x2284*/
        (__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlString.c",
        458,
        (__int64)"(NameLength != 0) && (NameLength <= 4)");
    if ( v14 ) /*0x228c*/
    {
      v16 = v4; /*0x2291*/
      value_1 = (char *)buf_1 - v4; /*0x2294*/
      v17 = v14; /*0x2297*/
      do /*0x22b1*/
      {
        v18 = *v16; /*0x229a*/
        if ( (unsigned __int8)(*v16 - 97) <= 0x19u ) /*0x22a1*/
          v18 -= 32; /*0x22a3*/
        (v16++)[value_1] = v18; /*0x22a6*/
        --v17; /*0x22ad*/
      }
      while ( v17 ); /*0x22b1*/
    }
    LOBYTE(value_1) = 95; /*0x22bf*/
    SetMem((int *)((char *)buf_1 + v14), 4 - v14, value_1); /*0x22c2*/
    v19 = &v4[v14]; /*0x22c7*/
    ++buf_1; /*0x22ca*/
    if ( !*v19 ) /*0x22ce*/
      break; /*0x22ce*/
    v4 = v19 + 1; /*0x22d3*/
  }
  *((_BYTE *)buf + v9 - 1) = 0; /*0x22db*/
  return buf; /*0x22f8*/
}


// Function: AmlDebugPrintNameSeg @ 0x2304 (0x8f bytes)

__int64 __fastcall AmlDebugPrintNameSeg(unsigned __int8 *j)
{
  __int64 result; // rax

  result = DebugPrint(64, "%c", *j); /*0x2323*/
  if ( *(_WORD *)(j + 1) != 24415 || j[3] != 95 ) /*0x2338*/
  {
    result = DebugPrint(64, "%c", j[1]); /*0x2349*/
    if ( j[2] != 95 || j[3] != 95 ) /*0x2358*/
    {
      result = DebugPrint(64, "%c", j[2]); /*0x2369*/
      if ( j[3] != 95 ) /*0x2372*/
        return DebugPrint(64, "%c", j[3]); /*0x2383*/
    }
  }
  return result; /*0x238d*/
}


// Function: AmlDebugPrintPath @ 0x2394 (0xc7 bytes)

__int64 __fastcall AmlDebugPrintPath(unsigned __int8 *j)
{
  unsigned __int8 *j_1; // rbx
  __int64 result; // rax
  unsigned __int8 v3; // si
  unsigned __int8 n2; // di
  unsigned __int8 *j_2; // rbx
  int v6; // edi

  j_1 = j; /*0x23ab*/
  if ( *j == 92 ) /*0x23b3*/
  {
    j_1 = j + 1; /*0x23b5*/
    result = DebugPrint(64, "\\"); /*0x23c1*/
  }
  else if ( *j == 94 ) /*0x23cb*/
  {
    do /*0x23e2*/
    {
      ++j_1; /*0x23d7*/
      result = DebugPrint(64, "^"); /*0x23da*/
    }
    while ( *j_1 == 94 ); /*0x23e2*/
  }
  v3 = 0; /*0x23e4*/
  switch ( *j_1 ) /*0x23e9*/
  {
    case 0x2Eu: /*0x23e9*/
      ++j_1; /*0x23eb*/
      n2 = 2; /*0x23ee*/
      break;
    case 0x2Fu: /*0x23e9*/
      n2 = j_1[1]; /*0x23f8*/
      j_1 += 2; /*0x23fc*/
      break;
    case 0u: /*0x23e9*/
      return result; /*0x2405*/
    default:
      n2 = 1; /*0x2407*/
      break;
  }
  result = AmlDebugPrintNameSeg(j_1); /*0x240d*/
  j_2 = j_1 + 4; /*0x2416*/
  v6 = n2 - 1; /*0x241a*/
  if ( v6 > 0 ) /*0x241e*/
  {
    do /*0x2444*/
    {
      DebugPrint(64, "."); /*0x242a*/
      AmlDebugPrintNameSeg(j_2); /*0x2432*/
      ++v3; /*0x2437*/
      j_2 += 4; /*0x243a*/
      result = v3; /*0x243e*/
    }
    while ( v3 < v6 ); /*0x2444*/
  }
  return result; /*0x2455*/
}


// Function: AcpiConfig_0 @ 0x245c (0x1f3 bytes)

__int64 __fastcall AcpiConfig_0(
        __int64 a1,
        char *n6,
        unsigned __int64 a3,
        unsigned int i,
        _DWORD *a5,
        char **a6,
        __int64 *a7)
{
  _DWORD *v7; // rbx
  __int64 n9; // rax
  int v13; // eax
  char *v14; // rax
  int v15; // r10d
  __int64 *v16; // rbx
  __int64 v18; // rax
  _DWORD *v19; // rcx
  __int64 v20; // rax

  v7 = a5; /*0x2474*/
  if ( a5 ) /*0x248e*/
  {
    n9 = *(unsigned int *)(a1 + 4LL * (i - 1) + 8); /*0x2494*/
    if ( (unsigned int)n9 < 9 ) /*0x249b*/
    {
      v13 = dword_6460[n9]; /*0x24c1*/
    }
    else
    {
      AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\Aml.c", 250, (__int64)"((BOOLEAN)(0==1))"); /*0x24b0*/
      v13 = 0; /*0x24b5*/
    }
    *v7 = v13; /*0x24c4*/
  }
  if ( a6 ) /*0x24d1*/
    *a6 = n6; /*0x24d3*/
  switch ( *(_DWORD *)(a1 + 4LL * (i - 1) + 8) ) /*0x24e6*/
  {
    case 2: /*0x24e6*/
      v16 = a7; /*0x2614*/
      *a7 = 1; /*0x261c*/
      return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x261c*/
    case 3: /*0x24e6*/
      v16 = a7; /*0x2607*/
      *a7 = 2; /*0x260f*/
      return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x2612*/
    case 4: /*0x24e6*/
      v16 = a7; /*0x25f6*/
      *a7 = 4; /*0x25fe*/
      return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x2605*/
    case 5: /*0x24e6*/
      v16 = a7; /*0x25e5*/
      *a7 = 8; /*0x25ed*/
      return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x25f4*/
  }
  if ( *(_DWORD *)(a1 + 4LL * (i - 1) + 8) != 6 ) /*0x250a*/
  {
    if ( *(_DWORD *)(a1 + 4LL * (i - 1) + 8) == 7 ) /*0x250f*/
    {
      v20 = 0; /*0x25c4*/
      if ( *n6 ) /*0x25c7*/
      {
        do /*0x25cf*/
          ++v20; /*0x25cc*/
        while ( n6[v20] ); /*0x25cf*/
      }
      v16 = a7; /*0x25d5*/
      *a7 = v20 + 1; /*0x25e0*/
      return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x25e3*/
    }
    if ( *(_DWORD *)(a1 + 4LL * (i - 1) + 8) != 8 ) /*0x2518*/
    {
      AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c", 137, (__int64)"((BOOLEAN)(0==1))"); /*0x252d*/
      return 0x8000000000000002uLL; /*0x2575*/
    }
    v14 = AmlGetOpcodeInfo(n6); /*0x2537*/
    if ( !v14 ) /*0x253f*/
      return 0x8000000000000002uLL; /*0x253f*/
    if ( ((unsigned __int8)v15 & (unsigned __int8)v14[32]) == 0 ) /*0x2545*/
    {
      v18 = AcpiConfig((__int64)v14, n6, a3, 0xFFFFFFFF, 0, 0, (unsigned __int64 *)&a5); /*0x259e*/
      v19 = a5; /*0x25a3*/
      v16 = a7; /*0x25ae*/
      if ( v18 < 0 ) /*0x25b6*/
        v19 = 0; /*0x25b6*/
      *a7 = (__int64)v19; /*0x25ba*/
      if ( !v19 ) /*0x25c0*/
        return 0x8000000000000002uLL; /*0x25c0*/
      return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x25c0*/
    }
    if ( v7 ) /*0x254a*/
      *v7 = v15; /*0x254c*/
  }
  v16 = a7; /*0x254f*/
  if ( (AmlParseNamespacePath(n6, a7) & 0x8000000000000000uLL) != 0LL ) /*0x2565*/
    return 0x8000000000000002uLL; /*0x2565*/
  return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x2645*/
}


// Function: AcpiConfig @ 0x2650 (0x1f9 bytes)

unsigned __int64 __fastcall AcpiConfig(
        __int64 a1,
        char *n6,
        unsigned __int64 a3,
        unsigned int i,
        _DWORD *a5,
        char **a6,
        unsigned __int64 *a7)
{
  unsigned __int64 *v12; // rbx
  char **v13; // r11
  __int64 *v14; // r13
  unsigned __int64 v15; // r14
  __int64 v16; // rax
  char *n6_1; // rbx
  unsigned int j; // r12d
  unsigned __int64 v19; // [rsp+70h] [rbp+8h] BYREF

  if ( i > *(_DWORD *)(a1 + 4) && i != -1 ) /*0x2684*/
    AssertWithProtocol( /*0x2699*/
      (__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c",
      180,
      (__int64)"(Index <= AmlByteEncoding->MaxIndex) || (Index == (AML_OP_PARSE_INDEX)-1)");
  if ( (*(_BYTE *)(a1 + 32) & 2) != 0 ) /*0x26a6*/
  {
    if ( i == -1 ) /*0x26aa*/
    {
      v12 = a7; /*0x26bb*/
      if ( (AmlParseNamespacePath(n6, (__int64 *)a7) & 0x8000000000000000uLL) == 0LL ) /*0x26d1*/
        return -(__int64)(a3 < *v12) & 0x8000000000000002uLL; /*0x26e6*/
    }
    return 0x8000000000000002uLL; /*0x26b6*/
  }
  v13 = a6; /*0x26eb*/
  if ( i != -1 ) /*0x26f5*/
  {
    *a5 = 1; /*0x26ff*/
    *v13 = n6; /*0x2705*/
  }
  v14 = (__int64 *)a7; /*0x2708*/
  v15 = (*n6 == 91) + 1LL; /*0x271a*/
  *a7 = v15; /*0x271d*/
  if ( i ) /*0x2723*/
  {
    if ( v15 > a3 ) /*0x272c*/
      return 0x8000000000000002uLL; /*0x272c*/
    if ( (*(_BYTE *)(a1 + 32) & 1) != 0 ) /*0x273b*/
    {
      v16 = AmlDecodeLength((unsigned __int8 *)&n6[v15], &v19); /*0x2745*/
      if ( v15 + v19 > a3 ) /*0x275b*/
        return 0x8000000000000002uLL; /*0x275b*/
      a3 = v15 + v19; /*0x2761*/
    }
    else
    {
      v16 = 0; /*0x2766*/
      v19 = 0; /*0x2768*/
    }
    n6_1 = &n6[v15 + v16]; /*0x276d*/
    for ( j = 1; i >= j && j <= *(_DWORD *)(a1 + 4) && n6_1 < &n6[a3]; ++j ) /*0x2770*/
    {
      if ( AcpiConfig_0(a1, n6_1, a3 + n6 - n6_1, j, a5, v13, v14) < 0 ) /*0x27b8*/
        return 0x8000000000000002uLL; /*0x27b8*/
      if ( i == j ) /*0x27c1*/
        return 0; /*0x27c1*/
      n6_1 += *v14; /*0x27c3*/
      v13 = a6; /*0x27c7*/
    }
    if ( n6_1 > &n6[a3] ) /*0x27de*/
      return 0x8000000000000002uLL; /*0x27de*/
    if ( n6_1 == &n6[a3] ) /*0x27e4*/
    {
      if ( i != -1 ) /*0x27e9*/
        return 0x8000000000000002uLL; /*0x27e9*/
    }
    else if ( i != -1 ) /*0x27f3*/
    {
      AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c", 297, (__int64)"Index == (AML_OP_PARSE_INDEX)-1"); /*0x2808*/
    }
    if ( (*(_BYTE *)(a1 + 32) & 1) != 0 ) /*0x2812*/
      *v14 = v15 + v19; /*0x281c*/
    else
      *v14 = n6_1 - n6; /*0x2825*/
  }
  return 0; /*0x283c*/
}


// Function: AcpiConfig_16 @ 0x284c (0xca bytes)

char *__fastcall AcpiConfig_16(__int64 a1)
{
  __int64 v1; // rdi
  unsigned int i; // ebx
  __int64 v4; // rcx
  int n2; // [rsp+60h] [rbp+8h] BYREF
  char *v7; // [rsp+68h] [rbp+10h] BYREF
  unsigned __int64 v8; // [rsp+70h] [rbp+18h] BYREF

  v1 = *(_QWORD *)(a1 + 24); /*0x2854*/
  if ( (*(_DWORD *)(v1 + 32) & 0x10000) == 0 ) /*0x2862*/
    AssertWithProtocol( /*0x2877*/
      (__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c",
      363,
      (__int64)"(AmlByteEncoding->Attribute & 0x10000) != 0");
  i = *(_DWORD *)(v1 + 4); /*0x287c*/
  if ( !i ) /*0x2881*/
    goto LABEL_7; /*0x2881*/
  do /*0x2891*/
  {
    v4 = i - 1; /*0x2883*/
    if ( *(_DWORD *)(v1 + 4 * v4 + 8) == 6 ) /*0x288b*/
      break; /*0x288b*/
    --i; /*0x288d*/
  }
  while ( (_DWORD)v4 ); /*0x2891*/
  if ( !i ) /*0x2895*/
LABEL_7:
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c", 375, (__int64)"TermIndex != 0"); /*0x28aa*/
  if ( (AcpiConfig(*(_QWORD *)(a1 + 24), *(char **)(a1 + 8), *(_QWORD *)(a1 + 16), i, &n2, &v7, &v8) /*0x28e4*/
      & 0x8000000000000000uLL) != 0LL )
    return 0; /*0x28e6*/
  if ( n2 != 2 ) /*0x28ef*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c", 390, (__int64)"DataType == 2"); /*0x2904*/
  return v7; /*0x290e*/
}


// Function: AmlGetSiblingTail @ 0x2918 (0x75 bytes)

__int64 __fastcall AmlGetSiblingTail(__int64 a1, char **p_n6)
{
  unsigned __int8 *v4; // rcx
  bool v5; // zf
  int v6; // [rsp+50h] [rbp+8h] BYREF
  unsigned __int64 v7; // [rsp+60h] [rbp+18h] BYREF
  char *v8; // [rsp+68h] [rbp+20h] BYREF

  if ( (AcpiConfig( /*0x2956*/
          *(_QWORD *)(a1 + 24),
          *(char **)(a1 + 8),
          *(_QWORD *)(a1 + 16),
          *(_DWORD *)(*(_QWORD *)(a1 + 24) + 4LL),
          &v6,
          &v8,
          &v7)
      & 0x8000000000000000uLL) != 0LL )
    return 0x8000000000000002uLL; /*0x2958*/
  v4 = (unsigned __int8 *)&v8[v7]; /*0x2969*/
  v5 = v6 == 1; /*0x296e*/
  *p_n6 = &v8[v7]; /*0x2973*/
  if ( v5 ) /*0x2976*/
    *p_n6 += AmlDecodeLength(v4, &v7); /*0x2982*/
  return 0; /*0x2987*/
}


// Function: AcpiConfig_11 @ 0x2990 (0xdf bytes)

__int64 __fastcall AcpiConfig_11(__int16 *p_n92, __int64 i, __int64 a3)
{
  __int64 v6; // rbx
  __int64 BootServices; // rax

  v6 = AllocatePool(72); /*0x29b7*/
  if ( !v6 ) /*0x29bd*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 73, (__int64)"AmlNodeList != ((void *) 0)"); /*0x29d0*/
  BootServices = BootServices; /*0x29d5*/
  *(_DWORD *)v6 = 1280131397; /*0x29e6*/
  (*(void (__fastcall **)(__int64, __int16 *, __int64))(BootServices + 352))(v6 + 4, p_n92, 4); /*0x29ef*/
  *(_QWORD *)(v6 + 8) = 0; /*0x29f5*/
  *(_QWORD *)(v6 + 16) = 0; /*0x29fe*/
  if ( v6 == -24 ) /*0x2a06*/
    AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c", 193, (__int64)"ListHead != ((void *) 0)"); /*0x2a1b*/
  *(_QWORD *)(v6 + 24) = v6 + 24; /*0x2a20*/
  *(_QWORD *)(v6 + 32) = v6 + 24; /*0x2a23*/
  if ( v6 == -40 ) /*0x2a2e*/
    AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c", 193, (__int64)"ListHead != ((void *) 0)"); /*0x2a43*/
  *(_QWORD *)(v6 + 40) = v6 + 40; /*0x2a48*/
  *(_QWORD *)(v6 + 48) = v6 + 40; /*0x2a4e*/
  *(_QWORD *)(v6 + 56) = i; /*0x2a52*/
  *(_QWORD *)(v6 + 64) = a3; /*0x2a5b*/
  return v6; /*0x2a69*/
}


// Function: AcpiConfig_2 @ 0x2a70 (0x187 bytes)

__int64 __fastcall AcpiConfig_2(_BYTE *j, __int64 i, __int64 i_1, char a4)
{
  _BYTE *j_1; // rbx
  char n47; // al
  unsigned __int8 n2; // bp
  char v11; // r15
  _QWORD *k; // rsi
  __int64 k_1; // rdx
  _BYTE *v14; // rcx
  _BYTE *m; // r8
  __int64 v16; // rax
  __int64 i_2; // rax
  _QWORD *v18; // rcx

  j_1 = j; /*0x2a99*/
  if ( *j == 92 ) /*0x2a9c*/
  {
    i_1 = i; /*0x2a9e*/
    j_1 = j + 1; /*0x2aa1*/
  }
  else if ( *j == 94 ) /*0x2aa9*/
  {
    do /*0x2adc*/
    {
      if ( *(_QWORD *)(i_1 + 56) ) /*0x2aab*/
      {
        i_1 = *(_QWORD *)(i_1 + 56); /*0x2ab4*/
      }
      else if ( i_1 != i ) /*0x2abc*/
      {
        AssertWithProtocol( /*0x2ad1*/
          (__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c",
          182,
          (__int64)"AmlCurrentNodeList == AmlRootNodeList");
      }
      ++j_1; /*0x2ad6*/
    }
    while ( *j_1 == 94 ); /*0x2adc*/
  }
  n47 = *j_1; /*0x2ade*/
  if ( *j_1 == 46 ) /*0x2ae2*/
  {
    ++j_1; /*0x2ae4*/
    n2 = 2; /*0x2ae7*/
    goto LABEL_18; /*0x2aea*/
  }
  if ( n47 == 47 ) /*0x2aee*/
  {
    n2 = j_1[1]; /*0x2af0*/
    j_1 += 2; /*0x2af4*/
    goto LABEL_18; /*0x2af8*/
  }
  if ( n47 ) /*0x2afc*/
  {
    n2 = 1; /*0x2b23*/
LABEL_18:
    v11 = 0; /*0x2b26*/
LABEL_19:
    for ( k = *(_QWORD **)(i_1 + 40); k != (_QWORD *)(i_1 + 40); k = (_QWORD *)*k ) /*0x2b2d*/
    {
      k_1 = (__int64)(k - 3); /*0x2b32*/
      if ( *((_DWORD *)k - 6) != 1280131397 ) /*0x2b3c*/
      {
        AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 112, (__int64)"CR has Bad Signature"); /*0x2b51*/
        k_1 = (__int64)k; /*0x2b56*/
      }
      v14 = (_BYTE *)(k_1 + 4); /*0x2b59*/
      for ( m = j_1; ; ++m ) /*0x2b5d*/
      {
        if ( (unsigned __int64)v14 >= k_1 + 8 ) /*0x2b76*/
        {
          v16 = 0; /*0x2b78*/
          goto LABEL_27; /*0x2b78*/
        }
        if ( *v14 != *m ) /*0x2b6b*/
          break; /*0x2b6b*/
        ++v14; /*0x2b6d*/
      }
      v16 = (char)*v14 - (char)*m; /*0x2bcc*/
LABEL_27:
      if ( !v16 ) /*0x2b7d*/
      {
        i_1 = k_1; /*0x2bd1*/
LABEL_32:
        if ( i_1 ) /*0x2bac*/
        {
          j_1 += 4; /*0x2bae*/
          if ( (unsigned __int8)++v11 < n2 ) /*0x2bb8*/
            goto LABEL_19; /*0x2bb8*/
          return i_1; /*0x2bb8*/
        }
        return 0; /*0x2bd6*/
      }
    }
    if ( a4 ) /*0x2b8a*/
    {
      i_2 = AcpiConfig_11((__int16 *)j_1, i_1, 0); /*0x2b95*/
      v18 = (_QWORD *)(i_1 + 40); /*0x2b9a*/
      i_1 = i_2; /*0x2b9d*/
      LinkedListInsertEntry(v18, (_QWORD *)(i_2 + 24)); /*0x2ba4*/
      goto LABEL_32; /*0x2ba4*/
    }
    return 0; /*0x2b8a*/
  }
  if ( i_1 != i ) /*0x2b01*/
    AssertWithProtocol( /*0x2b16*/
      (__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c",
      204,
      (__int64)"AmlCurrentNodeList == AmlRootNodeList");
  return i_1; /*0x2bec*/
}


// Function: AcpiConfig_15 @ 0x2bf8 (0xcc bytes)

_QWORD *__fastcall AcpiConfig_15(_BYTE *j, char *n6, __int64 a3, __int64 i, __int64 ia)
{
  double v5; // xmm2_8
  _QWORD *result; // rax
  _QWORD *v9; // rbx

  result = (_QWORD *)AcpiConfig_2(j, i, ia, 1); /*0x2c23*/
  v9 = result; /*0x2c28*/
  if ( !result ) /*0x2c2e*/
  {
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 255, (__int64)"AmlNodeList != ((void *) 0)"); /*0x2c43*/
    return 0; /*0x2cad*/
  }
  if ( result[1] )
  {
    if ( *n6 == 16 ) /*0x2c72*/
      return result; /*0x2c72*/
    DebugPrint(0x80000000LL, "AML: Override Happen - %a!\n", v5);
    DebugPrint(0x80000000LL, "AML: Existing Node - %x\n", v9[1]);
    DebugPrint(0x80000000LL, "AML: New Buffer - %x\n", (_DWORD)n6);
    return 0; /*0x2ca8*/
  }
  if ( *n6 != 16 ) /*0x2c54*/
  {
    result[1] = n6; /*0x2c59*/
    result[2] = a3; /*0x2c5d*/
    result[8] = AmlGetOpcodeInfo(n6); /*0x2c66*/
  }
  return v9; /*0x2cbe*/
}


// Function: AmlProcessOverrides @ 0x2cc4 (0xbb bytes)

unsigned __int64 __fastcall AmlProcessOverrides(_QWORD *a1, __int64 i, __int64 i_1)
{
  __int64 v3; // rax
  __int64 v6; // rbp
  __int64 v7; // r14
  char *n6_1; // rbx
  __int64 v10; // rdi
  char *n6; // [rsp+50h] [rbp+8h] BYREF
  __int64 v12; // [rsp+68h] [rbp+20h] BYREF

  v3 = a1[3]; /*0x2cdb*/
  n6 = 0; /*0x2ce2*/
  v12 = 0; /*0x2cea*/
  v6 = a1[1]; /*0x2cef*/
  v7 = a1[2]; /*0x2cf7*/
  if ( (*(_BYTE *)(v3 + 32) & 4) != 0 ) /*0x2cfb*/
  {
    if ( AmlGetSiblingTail((__int64)a1, &n6) < 0 ) /*0x2d09*/
      return 0x8000000000000002uLL; /*0x2d15*/
    n6_1 = n6; /*0x2d17*/
    while ( (unsigned __int64)n6_1 < v7 + v6 ) /*0x2d64*/
    {
      if ( (AcpiConfig_9(n6_1, v6 + v7 - (_QWORD)n6_1, &v12) & 0x8000000000000000uLL) != 0LL ) /*0x2d3b*/
        break; /*0x2d3b*/
      v10 = v12; /*0x2d3d*/
      if ( (AcpiConfig_19(v12, i, i_1) & 0x8000000000000000uLL) != 0LL ) /*0x2d53*/
        break; /*0x2d53*/
      n6_1 += *(_QWORD *)(v10 + 16); /*0x2d55*/
      AcpiFreeAmlNode(v10); /*0x2d5c*/
    }
  }
  return 0; /*0x2d72*/
}


// Function: AcpiConfig_19 @ 0x2d80 (0x95 bytes)

unsigned __int64 __fastcall AcpiConfig_19(__int64 a1, __int64 i, __int64 i_1)
{
  char *j; // rax
  _QWORD *i_2; // rsi

  if ( (*(_DWORD *)(*(_QWORD *)(a1 + 24) + 32LL) & 0x10000) == 0 ) /*0x2da3*/
    return 0; /*0x2da5*/
  j = AcpiConfig_16(a1); /*0x2da9*/
  if ( !j ) /*0x2db1*/
    return 0x8000000000000002uLL; /*0x2db3*/
  i_2 = AcpiConfig_15(j, *(char **)(a1 + 8), *(_QWORD *)(a1 + 16), i, i_1); /*0x2dd7*/
  if ( !i_2 ) /*0x2ddd*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 433, (__int64)"AmlNodeList != ((void *) 0)"); /*0x2df2*/
  return AmlProcessOverrides((_QWORD *)a1, i, (__int64)i_2); /*0x2e0f*/
}


// Function: AcpiGetInfo @ 0x2e18 (0x82 bytes)

__int64 __fastcall AcpiGetInfo(__int64 i)
{
  _QWORD *i_3; // rsi
  _QWORD *i_2; // rbx
  __int64 i_1; // rdi

  i_3 = (_QWORD *)(i + 40); /*0x2e2c*/
  i_2 = *(_QWORD **)(i + 40); /*0x2e33*/
  while ( i_2 != i_3 ) /*0x2e76*/
  {
    i_1 = (__int64)(i_2 - 3); /*0x2e38*/
    if ( *((_DWORD *)i_2 - 6) != 1280131397 ) /*0x2e42*/
    {
      AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 468, (__int64)"CR has Bad Signature"); /*0x2e57*/
      i_1 = (__int64)i_2; /*0x2e5c*/
    }
    i_2 = (_QWORD *)*i_2; /*0x2e5f*/
    LinkedListRemoveEntry((_QWORD *)(i_1 + 24)); /*0x2e66*/
    AcpiGetInfo(i_1); /*0x2e6e*/
  }
  return (*(__int64 (__fastcall **)(__int64))(BootServices + 72))(i);
}


// Function: AcpiConfig_17 @ 0x2e9c (0xca bytes)

__int64 __fastcall AcpiConfig_17(__int64 i, __int64 a2)
{
  _QWORD *i_3; // rbp
  _QWORD *i_2; // rbx
  __int64 v5; // rbp
  __int64 result; // rax
  __int64 i_1; // rcx
  _QWORD *i_4; // [rsp+38h] [rbp+10h]

  i_3 = (_QWORD *)(i + 40); /*0x2eb0*/
  i_2 = *(_QWORD **)(i + 40); /*0x2eb7*/
  i_4 = (_QWORD *)(i + 40); /*0x2ebe*/
  if ( a2 ) /*0x2ec6*/
  {
    v5 = a2; /*0x2ede*/
    do /*0x2ef6*/
    {
      DebugPrint(64, "    "); /*0x2eed*/
      --v5; /*0x2ef2*/
    }
    while ( v5 ); /*0x2ef6*/
    i_3 = i_4; /*0x2ef8*/
    AmlDebugPrintNameSeg((unsigned __int8 *)(i + 4)); /*0x2f06*/
  }
  else
  {
    DebugPrint(64, "\\"); /*0x2ed2*/
  }
  result = DebugPrint(64, "\n"); /*0x2f17*/
  while ( i_2 != i_3 ) /*0x2f54*/
  {
    i_1 = (__int64)(i_2 - 3); /*0x2f1e*/
    if ( *((_DWORD *)i_2 - 6) != 1280131397 ) /*0x2f28*/
    {
      AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 515, (__int64)"CR has Bad Signature"); /*0x2f3d*/
      i_1 = (__int64)i_2; /*0x2f42*/
    }
    result = AcpiConfig_17(i_1, a2 + 1); /*0x2f49*/
    i_2 = (_QWORD *)*i_2; /*0x2f4e*/
  }
  return result; /*0x2f60*/
}


// Function: AcpiConfig_3 @ 0x2f68 (0x13e bytes)

unsigned __int64 __fastcall AcpiConfig_3(__int64 a1, _BYTE *j, __int64 *p_n6, char a4)
{
  __int64 i; // rdi
  __int64 i_1; // rbx
  __int64 v11; // rcx
  __int64 n6; // rax
  __int16 n92; // [rsp+40h] [rbp+8h] BYREF

  n92 = 92; /*0x2f83*/
  i = AcpiConfig_11(&n92, 0, *(_QWORD *)(a1 + 24)); /*0x2faa*/
  if ( (AcpiConfig_19(a1, i, i) & 0x8000000000000000uLL) != 0LL ) /*0x2fb5*/
    return 0x8000000000000002uLL; /*0x2fb7*/
  DebugPrint(64, "AcpiSdt: NameSpace:\n");
  AcpiConfig_17(i, 0); /*0x2fe0*/
  if ( a4 ) /*0x2fe8*/
  {
    i_1 = i; /*0x2fea*/
  }
  else
  {
    i_1 = *(_QWORD *)(i + 40); /*0x2ff3*/
    if ( i_1 == i + 40 ) /*0x2ff9*/
    {
      i_1 = 0; /*0x3024*/
    }
    else if ( *(_DWORD *)(i_1 - 24) == 1280131397 ) /*0x3002*/
    {
      i_1 -= 24; /*0x301e*/
    }
    else
    {
      AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 593, (__int64)"CR has Bad Signature"); /*0x3017*/
    }
  }
  if ( i_1 )
  {
    DebugPrint(64, "AcpiSdt: Search from: \\");
    AmlDebugPrintNameSeg((unsigned __int8 *)(i_1 + 4)); /*0x303e*/
    DebugPrint(64, "\n"); /*0x304d*/
    v11 = AcpiConfig_2(j, i, i_1, 0); /*0x3063*/
  }
  else
  {
    v11 = 0; /*0x3068*/
  }
  *p_n6 = 0; /*0x306a*/
  if ( v11 ) /*0x3071*/
  {
    n6 = *p_n6; /*0x3073*/
    if ( *(_QWORD *)(v11 + 8) ) /*0x3076*/
      n6 = *(_QWORD *)(v11 + 8); /*0x307b*/
    *p_n6 = n6; /*0x3080*/
  }
  AcpiGetInfo(i); /*0x3086*/
  return 0; /*0x309c*/
}


// Function: LinkedListIsValid @ 0x30a8 (0x69 bytes)

char __fastcall LinkedListIsValid(_QWORD *a1)
{
  if ( !a1 ) /*0x30b4*/
    AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c", 80, (__int64)"List != ((void *) 0)"); /*0x30c7*/
  if ( !*a1 ) /*0x30cc*/
    AssertWithProtocol( /*0x30e5*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c",
      81,
      (__int64)"List->ForwardLink != ((void *) 0)");
  if ( !a1[1] ) /*0x30ea*/
    AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c", 82, (__int64)"List->BackLink != ((void *) 0)"); /*0x3104*/
  return 1; /*0x310b*/
}


// Function: LinkedListInsertEntry @ 0x3114 (0x51 bytes)

_QWORD *__fastcall LinkedListInsertEntry(_QWORD *a1, _QWORD *a2)
{
  _QWORD *v4; // rax

  if ( !LinkedListIsValid(a1) ) /*0x3124*/
    AssertWithProtocol( /*0x3140*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c",
      273,
      (__int64)"InternalBaseLibIsListValid (ListHead)");
  *a2 = a1; /*0x3145*/
  v4 = (_QWORD *)a1[1]; /*0x3148*/
  a2[1] = v4; /*0x314c*/
  *v4 = a2; /*0x3150*/
  a1[1] = a2; /*0x3156*/
  return a1; /*0x315f*/
}


// Function: LinkedListRemoveEntry @ 0x3168 (0x65 bytes)

__int64 __fastcall LinkedListRemoveEntry(_QWORD *a1)
{
  if ( !LinkedListIsValid(a1) ) /*0x3171*/
    AssertWithProtocol( /*0x318d*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c",
      416,
      (__int64)"InternalBaseLibIsListValid (ListHead)");
  if ( (_QWORD *)*a1 == a1 ) /*0x3195*/
    AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c", 600, (__int64)"!IsListEmpty (Entry)"); /*0x31aa*/
  *(_QWORD *)(*a1 + 8LL) = a1[1]; /*0x31b6*/
  *(_QWORD *)a1[1] = *a1; /*0x31c1*/
  return *a1; /*0x31c7*/
}


// Function: GetReportStatusCodeProtocol @ 0x31d0 (0x7f bytes)

__int64 GetReportStatusCodeProtocol()
{
  __int64 result; // rax
  unsigned __int64 n0x10; // rbx
  __int64 v2; // rax
  __int64 v3; // rcx

  result = qword_8780; /*0x31da*/
  if ( !qword_8780 ) /*0x31e6*/
  {
    n0x10 = (*(__int64 (__fastcall **)(__int64))(qword_8768 + 24))(31); /*0x31ff*/
    (*(void (__fastcall **)(unsigned __int64))(qword_8768 + 32))(n0x10); /*0x3202*/
    if ( n0x10 <= 0x10 ) /*0x3209*/
    {
      v2 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_8768 + 320))(&unk_7140, 0, &qword_8780); /*0x3226*/
      v3 = qword_8780; /*0x322c*/
      if ( v2 < 0 ) /*0x3236*/
        v3 = 0; /*0x3236*/
      qword_8780 = v3; /*0x323a*/
      return v3; /*0x3241*/
    }
    else
    {
      return 0; /*0x320b*/
    }
  }
  return result; /*0x3249*/
}


// Function: DebugPrint @ 0x3250 (0x47 bytes)

__int64 DebugPrint(__int64 a1, const char *a2, ...)
{
  __int64 result; // rax
  __int64 (__fastcall **v4)(__int64, const char *, __int64 *); // r10
  va_list va; // [rsp+40h] [rbp+18h] BYREF

  va_start(va, a2);
  result = GetReportStatusCodeProtocol(); /*0x3267*/
  if ( result ) /*0x3272*/
  {
    result = GetDebugLevelFromCmos(); /*0x3274*/
    if ( ((unsigned int)result & (unsigned int)a1) != 0 ) /*0x327f*/
      return (*v4)(a1, a2, (__int64 *)va); /*0x328e*/
  }
  return result; /*0x3291*/
}


// Function: AssertWithProtocol @ 0x3298 (0x3e bytes)

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

  result = GetReportStatusCodeProtocol(); /*0x32b0*/
  if ( result ) /*0x32b8*/
    return (*(__int64 (__fastcall **)(__int64, __int64, __int64))(result + 8))(a1, a2, a3); /*0x32c3*/
  return result; /*0x32d0*/
}


// Function: AssertCpuDeadLoop_1 @ 0x32d8 (0xd6 bytes)

__int64 __fastcall AssertCpuDeadLoop_1(__int64 ImageHandle)
{
  __int64 result; // rax
  __int64 SystemTable; // rdi
  unsigned __int64 v3; // rbx
  __int64 v4; // rsi

  result = qword_8788; /*0x32e7*/
  if ( !qword_8788 ) /*0x32f1*/
  {
    SystemTable = SystemTable_0; /*0x32f7*/
    v3 = 0; /*0x32fe*/
    qword_8788 = 0; /*0x3300*/
    if ( *(_QWORD *)(SystemTable_0 + 104) ) /*0x3307*/
    {
      v4 = 0; /*0x330d*/
      while ( !CompareGuid(ImageHandle, v4 + *(_QWORD *)(SystemTable + 112)) ) /*0x331d*/
      {
        ++v3; /*0x331f*/
        v4 += 24; /*0x3322*/
        if ( v3 >= *(_QWORD *)(SystemTable + 104) ) /*0x332a*/
          goto LABEL_6; /*0x332a*/
      }
      result = *(_QWORD *)(*(_QWORD *)(SystemTable + 112) + 24 * v3 + 16); /*0x33a0*/
      qword_8788 = result; /*0x33a5*/
    }
    else
    {
LABEL_6:
      DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", 0x800000000000000EuLL); /*0x332c*/
      AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 54, (__int64)"!EFI_ERROR (Status)"); /*0x335a*/
      result = qword_8788; /*0x335f*/
    }
    if ( !result ) /*0x3369*/
    {
      AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 55, (__int64)"mHobList != ((void *) 0)"); /*0x337c*/
      return qword_8788; /*0x3381*/
    }
  }
  return result; /*0x3392*/
}


// Function: DriverEntryPoint @ 0x33b0 (0x88 bytes)

__int64 __fastcall DriverEntryPoint(__int64 ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  __int64 result; // rax

  result = 0; /*0x33b4*/
  if ( byte_8798 ) /*0x33bc*/
  {
    if ( qword_87A0 ) /*0x33c5*/
      return result; /*0x33c5*/
    if ( !byte_87A8 && qword_87C0 ) /*0x33d9*/
      return (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_87C0 + 208))(&unk_8620, 0, &qword_87A0); /*0x33ef*/
    return 0x8000000000000003uLL; /*0x33d9*/
  }
  if ( !qword_87B0 ) /*0x340c*/
  {
    if ( byte_87A8 ) /*0x3414*/
      return 0x8000000000000003uLL; /*0x3404*/
    return (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_8610, 0, &qword_87B0); /*0x342d*/
  }
  return result; /*0x3400*/
}


// Function: DriverEntryPoint_0 @ 0x3438 (0x72 bytes)

__int64 __fastcall DriverEntryPoint_0(__int64 ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  __int64 result; // rax

  if ( byte_8798 ) /*0x3443*/
  {
    if ( qword_87A0 ) /*0x344f*/
      return (*(__int64 (__fastcall **)(__int64, __int64, __int64))qword_87A0)(qword_87A0, 1, 50692096); /*0x3479*/
    else
      return 0x800000000000000EuLL; /*0x3451*/
  }
  else
  {
    result = DriverEntryPoint(ImageHandle, SystemTable); /*0x347d*/
    if ( result >= 0 ) /*0x3485*/
      return (*(__int64 (__fastcall **)(__int64, __int64, _QWORD))qword_87B0)(1, 50692096, 0); /*0x34a3*/
  }
  return result; /*0x34a5*/
}


// Function: AllocatePool @ 0x34ac (0x2b bytes)

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

  v2 = 0; /*0x34bc*/
  (*(void (__fastcall **)(__int64, __int64, __int64 *))(BootServices + 64))(4, a1, &v2); /*0x34ca*/
  return v2; /*0x34d2*/
}


// Function: AllocateZeroPool @ 0x34d8 (0x3e bytes)

__int64 __fastcall AllocateZeroPool(__int64 a1)
{
  __int64 result; // rax
  __int64 v3; // rbx

  result = AllocatePool(a1); /*0x34e5*/
  v3 = result; /*0x34ea*/
  if ( result ) /*0x34f0*/
  {
    (*(void (__fastcall **)(__int64, __int64, _QWORD))(BootServices + 360))(result, a1, 0); /*0x3502*/
    return v3; /*0x3508*/
  }
  return result; /*0x3510*/
}


// Function: ArrayGrow @ 0x3518 (0xa8 bytes)

unsigned __int64 __fastcall ArrayGrow(unsigned __int64 *a1)
{
  __int64 v1; // rbx
  unsigned __int64 n80; // rbx
  __int64 v4; // rax
  unsigned __int64 v5; // rsi

  v1 = *a1; /*0x3527*/
  if ( *a1 ) /*0x3527*/
  {
    if ( a1[2] ) /*0x3539*/
    {
      if ( (__int64)a1[1] <= v1 - 1 ) /*0x354e*/
        return 0; /*0x354e*/
      n80 = 8 * v1 + 80; /*0x3550*/
    }
    else
    {
      n80 = 8 * v1; /*0x3540*/
    }
    if ( !n80 ) /*0x355b*/
      return 0; /*0x355b*/
  }
  else
  {
    n80 = 80; /*0x3532*/
  }
  v4 = AllocateZeroPool(n80); /*0x3560*/
  v5 = v4; /*0x3565*/
  if ( !v4 ) /*0x356b*/
    return 0x8000000000000009uLL; /*0x3577*/
  (*(void (__fastcall **)(__int64, unsigned __int64, unsigned __int64))(BootServices + 352))(v4, a1[2], 8 * a1[1]); /*0x358f*/
  (*(void (__fastcall **)(unsigned __int64))(BootServices + 72))(a1[2]); /*0x35a0*/
  *a1 = n80 >> 3; /*0x35a7*/
  a1[2] = v5; /*0x35aa*/
  return 0; /*0x35ba*/
}


// Function: SataGetInfo @ 0x35c0 (0x6f bytes)

unsigned __int64 __fastcall SataGetInfo(__int64 *p_AcpiTableHandleList, unsigned __int64 DataSize, char a3)
{
  unsigned __int64 DataSize_1; // rdi

  DataSize_1 = DataSize; /*0x35cf*/
  if ( !p_AcpiTableHandleList[1] || p_AcpiTableHandleList[1] <= DataSize ) /*0x35db*/
    return 0x8000000000000002uLL; /*0x361a*/
  if ( a3 ) /*0x35e0*/
    (*(void (__fastcall **)(_QWORD))(BootServices + 72))(*(_QWORD *)(p_AcpiTableHandleList[2] + 8 * DataSize)); /*0x35f1*/
  while ( DataSize_1 < p_AcpiTableHandleList[1] - 1 ) /*0x3610*/
  {
    *(_QWORD *)(p_AcpiTableHandleList[2] + 8 * DataSize_1) = *(_QWORD *)(p_AcpiTableHandleList[2] + 8 * DataSize_1 + 8); /*0x35ff*/
    ++DataSize_1; /*0x3603*/
  }
  --p_AcpiTableHandleList[1]; /*0x3612*/
  return 0; /*0x3629*/
}


// Function: TableHandleListAppend @ 0x3630 (0x43 bytes)

unsigned __int64 __fastcall TableHandleListAppend(__int64 a1, __int64 a2)
{
  if ( ArrayGrow() < 0 ) /*0x3648*/
    return 0x8000000000000009uLL; /*0x364a*/
  *(_QWORD *)(*(_QWORD *)(a1 + 16) + 8LL * (*(_QWORD *)(a1 + 8))++) = a2; /*0x365e*/
  return 0; /*0x366d*/
}


// Function: AmlHashName @ 0x3674 (0x6d bytes)

__int64 __fastcall AmlHashName(__int64 a1, const char *_S3, unsigned __int64 a3)
{
  unsigned int v3; // ebx
  unsigned __int64 NameCount; // r8
  __int64 v7; // rcx
  int p_n1600085855; // [rsp+30h] [rbp+8h] BYREF

  v3 = 0; /*0x3683*/
  NameCount = 0; /*0x368b*/
  if ( *_S3 ) /*0x368e*/
  {
    do /*0x3695*/
      ++NameCount; /*0x3692*/
    while ( _S3[NameCount] ); /*0x3695*/
  }
  p_n1600085855 = 1600085855; /*0x36a0*/
  ComputeStringHash(&p_n1600085855, _S3, NameCount); /*0x36a8*/
  if ( !a3 ) /*0x36b0*/
    return 0; /*0x36ca*/
  v7 = 0; /*0x36b6*/
  while ( *(_DWORD *)(v7 + a1) != p_n1600085855 ) /*0x36bf*/
  {
    v7 = ++v3; /*0x36c3*/
    if ( v3 >= a3 ) /*0x36c8*/
      return 0; /*0x36c8*/
  }
  return v7 + a1; /*0x36d6*/
}


// Function: AmlParseNameInfo @ 0x36e4 (0x1ed bytes)

__int64 __fastcall AmlParseNameInfo(__int64 a1, unsigned __int64 a2, const char *_S3, int n3, __int64 *p_NameBuffer)
{
  __int64 v9; // rax
  __int64 v10; // rdi
  __int64 n6; // r11
  char n91; // dl
  char n16; // r8
  __int64 v14; // r10
  __int64 v15; // rax
  bool v16; // zf
  __int64 *p_NameBuffer_1; // rcx
  __int64 n2; // rax
  _BYTE *v19; // r9
  _BYTE *v20; // rcx
  __int64 v21; // rax
  unsigned __int8 v22; // al
  __int64 v23; // rdx
  __int64 v24; // rax
  int v25; // eax

  while ( 1 )
  {
    v9 = AmlHashName(a1, _S3, a2); /*0x3712*/
    v10 = v9; /*0x3717*/
    if ( !v9 ) /*0x371d*/
      return 0x800000000000000EuLL; /*0x38ca*/
    switch ( n3 ) /*0x3728*/
    {
      case 1: /*0x3728*/
        n16 = 16; /*0x3799*/
        goto LABEL_18; /*0x3799*/
      case 3: /*0x3728*/
        n16 = 8; /*0x3794*/
LABEL_18:
        n6 = 0; /*0x379c*/
        goto LABEL_19; /*0x379c*/
      case 4: /*0x3728*/
        n6 = 6; /*0x3787*/
        n91 = 91; /*0x378d*/
        n16 = -125; /*0x378f*/
        break; /*0x3792*/
      case 5: /*0x3728*/
        n6 = 0; /*0x377d*/
        n91 = 91; /*0x3780*/
        n16 = -123; /*0x3782*/
        break; /*0x3785*/
      case 6: /*0x3728*/
        n6 = 0; /*0x3773*/
        n91 = 91; /*0x3776*/
        n16 = -126; /*0x3778*/
        break; /*0x377b*/
      case 7: /*0x3728*/
        n6 = 1; /*0x3768*/
        n16 = 20; /*0x376e*/
LABEL_19:
        n91 = 0; /*0x379f*/
        break; /*0x379f*/
      case 8: /*0x3728*/
        n6 = 3; /*0x375b*/
        n91 = 91; /*0x3761*/
        n16 = -124; /*0x3763*/
        break;
      case 9: /*0x3728*/
        n6 = 0; /*0x3751*/
        n91 = 91; /*0x3754*/
        n16 = 0x80; /*0x3756*/
        break;
      default:
        return 0x800000000000000EuLL; /*0x374b*/
    }
    v14 = v9; /*0x37a1*/
    if ( ((*(_BYTE *)(v9 - 1) - 92) & 0xFD) == 0 ) /*0x37ae*/
      v14 = v9 - 1; /*0x37ae*/
    if ( n16 == 8 ) /*0x37b6*/
    {
      if ( n91 ) /*0x37ba*/
        goto LABEL_31; /*0x37ba*/
      v15 = v14 - 1; /*0x37bc*/
      v16 = *(_BYTE *)(v14 - 1) == 8; /*0x37c0*/
LABEL_25:
      if ( v16 ) /*0x37c3*/
      {
        p_NameBuffer_1 = p_NameBuffer; /*0x37c5*/
        *(__int64 *)((char *)p_NameBuffer + 28) = 0; /*0x37ca*/
        *p_NameBuffer = v15; /*0x37cf*/
        goto LABEL_53; /*0x37d2*/
      }
      goto LABEL_39; /*0x37c3*/
    }
    if ( n16 != (char)0x80 || !n91 )
    {
LABEL_31:
      n2 = 2; /*0x37ef*/
      v19 = (_BYTE *)(v14 - 2); /*0x37f4*/
      while ( 1 )
      {
        v20 = n91 ? v19 - 1 : 0LL;
        if ( (!v20 || *v20 == n91) && *v19 == n16 ) /*0x3810*/
          break; /*0x3810*/
        ++n2; /*0x3812*/
        --v19; /*0x3815*/
        if ( n2 >= 6 ) /*0x381c*/
          goto LABEL_39; /*0x381c*/
      }
      v21 = (__int64)v19; /*0x3834*/
      if ( v20 ) /*0x3837*/
        v21 = (__int64)v20; /*0x3837*/
      p_NameBuffer_1 = p_NameBuffer; /*0x383b*/
      *p_NameBuffer = v21; /*0x3840*/
      v22 = v19[1]; /*0x3843*/
      if ( (v22 & 0xC0) == 0 ) /*0x384c*/
      {
        v23 = v22 & 0x3F; /*0x384e*/
        goto LABEL_52; /*0x3851*/
      }
      v23 = v22 & 0xF; /*0x3857*/
      switch ( v22 >> 6 ) /*0x3862*/
      {
        case 1: /*0x3862*/
          v25 = (unsigned __int8)v19[2]; /*0x3885*/
          break;
        case 2: /*0x3862*/
          v25 = *((unsigned __int16 *)v19 + 1); /*0x387e*/
          break;
        case 3: /*0x3862*/
          v24 = 16 * (*(_DWORD *)(v19 + 2) & 0xFFFFFFu); /*0x3879*/
          goto LABEL_51; /*0x387c*/
        default:
          goto LABEL_52; /*0x386e*/
      }
      v24 = 16 * v25; /*0x388d*/
LABEL_51:
      v23 |= v24; /*0x388f*/
LABEL_52:
      *(__int64 *)((char *)p_NameBuffer + 28) = v23; /*0x3892*/
LABEL_53:
      p_NameBuffer_1[1] = v14; /*0x3896*/
      *((_DWORD *)p_NameBuffer_1 + 6) = n3; /*0x38a1*/
      p_NameBuffer_1[2] = n6 + v10 + 4; /*0x38a4*/
      return 0; /*0x38aa*/
    }
    v15 = v14 - 2; /*0x37e1*/
    if ( *(_BYTE *)(v14 - 2) == n91 ) /*0x37e7*/
    {
      v16 = *(_BYTE *)(v14 - 1) == (unsigned __int8)n16; /*0x37e9*/
      goto LABEL_25; /*0x37ed*/
    }
LABEL_39:
    a2 += a1 - v10 + 4; /*0x381e*/
    a1 = v10 + 4; /*0x3828*/
  }
}


// Function: AmlWriteData @ 0x38d4 (0x73 bytes)

__int64 __fastcall AmlWriteData(__int64 a1, __int64 a2, __int64 a3, unsigned __int64 n2)
{
  __int64 result; // rax
  __int64 v6[2]; // [rsp+30h] [rbp-38h] BYREF
  _BYTE *v7; // [rsp+40h] [rbp-28h]

  result = AmlParseNameInfo(a1, a2, a3, 3, v6); /*0x38ed*/
  if ( result >= 0 ) /*0x38f5*/
  {
    if ( *v7 <= 1u ) /*0x38ff*/
    {
      if ( n2 < 2 ) /*0x392f*/
      {
        *v7 = n2; /*0x393d*/
        return 0; /*0x393d*/
      }
    }
    else
    {
      switch ( *v7 ) /*0x3904*/
      {
        case 0xA: /*0x3904*/
          v7[1] = n2; /*0x3926*/
          return 0; /*0x3929*/
        case 0xB: /*0x3904*/
          *(_WORD *)(v7 + 1) = n2; /*0x3920*/
          return 0; /*0x3924*/
        case 0xC: /*0x3904*/
          *(_DWORD *)(v7 + 1) = n2; /*0x391b*/
          return 0; /*0x391e*/
        case 0xE: /*0x3904*/
          *(_QWORD *)(v7 + 1) = n2; /*0x3915*/
          return 0; /*0x393f*/
      }
    }
    return 0x8000000000000002uLL; /*0x3931*/
  }
  return result; /*0x3941*/
}


// Function: AcpiConfig_4 @ 0x3948 (0x11d bytes)

char __fastcall AcpiConfig_4(int n1413763908, unsigned __int64 RsdtBase, unsigned __int64 n2)
{
  __int64 v4; // rax
  _BYTE *v5; // rcx
  __int64 n8; // rdx

  *(_DWORD *)RsdtBase = n1413763908; /*0x3950*/
  switch ( n1413763908 ) /*0x395a*/
  {
    case 1128878145: /*0x395a*/
      *(_BYTE *)(RsdtBase + 8) = 4; /*0x3a36*/
      *(_DWORD *)(RsdtBase + 32) = 65560; /*0x3a3a*/
      break;
    case 1346584902: /*0x395a*/
      *(_BYTE *)(RsdtBase + 8) = 3; /*0x3a11*/
      *(_DWORD *)(RsdtBase + 32) = 65558; /*0x3a15*/
      if ( n2 > 2 ) /*0x3a20*/
      {
        *(_BYTE *)(RsdtBase + 8) = 4; /*0x3a26*/
        *(_DWORD *)(RsdtBase + 32) = 65559; /*0x3a2a*/
      }
      goto LABEL_9; /*0x3a31*/
    case 1380143187: /*0x395a*/
    case 1413759813: /*0x395a*/
      goto LABEL_8; /*0x3977*/
    case 1413763922: /*0x395a*/
      *(_BYTE *)(RsdtBase + 8) = 1; /*0x3a04*/
      *(_DWORD *)(RsdtBase + 32) = 65556; /*0x3a08*/
      *(_DWORD *)(RsdtBase + 28) = 1413894989; /*0x3a59*/
      goto LABEL_10; /*0x3a60*/
    case 1413763928: /*0x395a*/
      *(_BYTE *)(RsdtBase + 8) = 1; /*0x39f7*/
      *(_DWORD *)(RsdtBase + 32) = 65557; /*0x39fb*/
      goto LABEL_9; /*0x3a02*/
    case 1414742611: /*0x395a*/
LABEL_8:
      *(_BYTE *)(RsdtBase + 8) = 1; /*0x3994*/
LABEL_9:
      *(_DWORD *)(RsdtBase + 28) = 541674817; /*0x3998*/
LABEL_10:
      *(_DWORD *)(RsdtBase + 32) = 65555; /*0x399f*/
      *(_DWORD *)(RsdtBase + 24) = 17244169; /*0x39a6*/
      goto LABEL_11; /*0x39a6*/
  }
  if ( n1413763908 != 1413763908 ) /*0x3a47*/
    goto LABEL_9; /*0x3a47*/
LABEL_11:
  v4 = AcpiProcessRsdtHandlers(RsdtBase); /*0x39ad*/
  if ( v4 < 0 ) /*0x39b8*/
  {
    *(_DWORD *)(RsdtBase + 10) = 1330529612; /*0x39c7*/
    v5 = (_BYTE *)(RsdtBase + 16); /*0x39ca*/
    *(_WORD *)(RsdtBase + 14) = 20310; /*0x39d8*/
    n8 = 8; /*0x39dc*/
    do /*0x39ef*/
    {
      LOBYTE(v4) = v5[(_QWORD)&TableList - RsdtBase - 16]; /*0x39e1*/
      *v5++ = v4; /*0x39e6*/
      --n8; /*0x39eb*/
    }
    while ( n8 ); /*0x39ef*/
  }
  return v4; /*0x39f1*/
}


// Function: AcpiConfig_12 @ 0x3a68 (0xdc bytes)

__int64 __fastcall AcpiConfig_12(__int64 a1)
{
  __int64 result; // rax
  __int64 v3; // [rsp+30h] [rbp-28h] BYREF
  __int64 v4; // [rsp+38h] [rbp-20h] BYREF
  _BYTE v5[24]; // [rsp+40h] [rbp-18h] BYREF
  __int64 v6; // [rsp+70h] [rbp+18h] BYREF
  __int64 v7; // [rsp+78h] [rbp+20h]

  v6 = 0; /*0x3a7a*/
  if ( (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_7180, 0, &v3) >= 0 )
  {
    result = (*(__int64 (__fastcall **)(__int64, _QWORD, _BYTE *, __int64 *))(v3 + 48))(v3, 0, v5, &v4); /*0x3b08*/
    if ( result >= 0 )
    {
      *(_QWORD *)(FacsSize + 16) = v4; /*0x3b23*/
      DebugPrint(64, "Acpi BuildFPDT:  Cpu Protocol was found.\n");
      return (*(__int64 (__fastcall **)(__int64))(BootServices + 112))(a1); /*0x3b3b*/
    }
  }
  else
  {
    DebugPrint(0x80000000LL, "Acpi BuildFPDT: No Cpu Protocol was found.\n");
    result = (*(__int64 (__fastcall **)(__int64, __int64, __int64 (__fastcall *)(_QWORD, _QWORD)))(BootServices + 80))( /*0x3acc*/
               512,
               8,
               AcpiConfig_12);
    if ( result >= 0 ) /*0x3ad2*/
      return (*(__int64 (__fastcall **)(void *, __int64, __int64 *))(BootServices + 168))(&unk_7180, v7, &v6); /*0x3aec*/
  }
  return result; /*0x3b3e*/
}


// Function: AcpiCreateFacsTable @ 0x3b44 (0x2c9 bytes)

__int64 __fastcall AcpiCreateFacsTable(__int64 FacsSize, unsigned __int64 *FacsAllocResult)
{
  __int64 FacsSize_2; // rcx
  __int64 FreeStatus; // rax
  __int64 AllocStatus; // rax
  const char *_EFI_ERROR_(Status); // r8
  __int64 ErrLine445; // rdx
  __int64 TablePtr; // rax
  _DWORD *FacsEntry; // rdi
  _DWORD *FpdtEntry; // rsi
  _DWORD *FacsEntry2; // rax
  _DWORD *FacsSize_4; // rcx
  unsigned __int64 TableBase; // rbx
  char Checksum; // cl
  unsigned __int64 ByteIdx; // rax
  __int64 FpdtStatus; // rbx
  __int64 FpdtStatus_1; // rax
  __int64 VarSize4; // [rsp+30h] [rbp-10h] BYREF
  __int64 FacsSize_1; // [rsp+80h] [rbp+40h] BYREF
  __int64 FacsSize_3; // [rsp+90h] [rbp+50h] BYREF
  __int64 FacsSize_5; // [rsp+98h] [rbp+58h] BYREF

  FacsSize_1 = FacsSize; /*0x3b44*/
  FacsSize_5 = 0; /*0x3b6b*/
  VarSize4 = 4; /*0x3b7c*/
  if ( (*(__int64 (__fastcall **)(__int64, __int64, __int64 *))(BootServices + 64))(6, 112, &FacsSize_1) < 0 ) /*0x3b86*/
    return 0x8000000000000009uLL; /*0x3b86*/
  FacsSize_2 = FacsSize_1; /*0x3b97*/
  if ( (FacsSize_1 & 0xFFFFFFFF00000000uLL) != 0 ) /*0x3bb3*/
  {
    FacsSize_3 = 0xFFFFFFFFLL; /*0x3bbe*/
    FreeStatus = (*(__int64 (**)(void))(BootServices + 72))(); /*0x3bc9*/
    if ( FreeStatus < 0 ) /*0x3bcf*/
    {
      DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", FreeStatus); /*0x3bdd*/
      AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 443, (__int64)"!EFI_ERROR (Status)"); /*0x3bf5*/
    }
    AllocStatus = (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64 *))(BootServices + 40))( /*0x3c10*/
                    1,
                    6,
                    1,
                    &FacsSize_3);
    if ( AllocStatus < 0 ) /*0x3c16*/
    {
      DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", AllocStatus); /*0x3c25*/
      _EFI_ERROR_(Status) = "!EFI_ERROR (Status)"; /*0x3c2a*/
      ErrLine445 = 445; /*0x3c31*/
LABEL_8:
      AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", ErrLine445, (__int64)_EFI_ERROR_(Status)); /*0x3c36*/
      return 0x8000000000000009uLL; /*0x3b92*/
    }
    FacsSize_2 = FacsSize_3; /*0x3c47*/
    FacsSize_1 = FacsSize_3; /*0x3c4b*/
  }
  (*(void (__fastcall **)(__int64, __int64, _QWORD))(BootServices + 360))(FacsSize_2, 112, 0); /*0x3c5c*/
  TablePtr = AllocateZeroPool(68); /*0x3c67*/
  *FacsAllocResult = TablePtr; /*0x3c6c*/
  if ( !TablePtr ) /*0x3c72*/
  {
    _EFI_ERROR_(Status) = "*TablPtr"; /*0x3c74*/
    ErrLine445 = 457; /*0x3c7b*/
    goto LABEL_8; /*0x3c80*/
  }
  ::FacsSize = FacsSize_1; /*0x3c86*/
  FacsEntry = (_DWORD *)(FacsSize_1 + 24); /*0x3c8d*/
  FpdtEntry = (_DWORD *)(FacsSize_1 + 56); /*0x3c91*/
  FacsEntry2 = (_DWORD *)(FacsSize_1 + 32); /*0x3c95*/
  FacsSize_1 += 64; /*0x3c9d*/
  FacsSize_4 = (_DWORD *)FacsSize_1; /*0x3c99*/
  *FacsEntry = 1414542163; /*0x3ca1*/
  FacsEntry[1] = 32; /*0x3ca7*/
  *FacsEntry2 = 18350080; /*0x3cae*/
  *FpdtEntry = 1414545990; /*0x3cb4*/
  FpdtEntry[1] = 56; /*0x3cba*/
  *FacsSize_4 = 36700162; /*0x3cc1*/
  TableBase = *FacsAllocResult; /*0x3cc7*/
  if ( TableBase ) /*0x3ccd*/
    AcpiConfig_4(1413763142, TableBase, 4u); /*0x3cda*/
  Checksum = *(_BYTE *)TableBase; /*0x3cdf*/
  ByteIdx = 1; /*0x3ce1*/
  *(_DWORD *)(TableBase + 4) = 68; /*0x3ce4*/
  *(_BYTE *)(TableBase + 8) = 1; /*0x3ceb*/
  *(_DWORD *)(TableBase + 36) = 17825793; /*0x3cef*/
  *(_QWORD *)(TableBase + 44) = FacsEntry; /*0x3cf6*/
  *(_DWORD *)(TableBase + 52) = 17825792; /*0x3cfa*/
  *(_QWORD *)(TableBase + 60) = FpdtEntry; /*0x3d01*/
  do /*0x3d0f*/
  {
    Checksum += *(_BYTE *)(ByteIdx + TableBase); /*0x3d05*/
    ++ByteIdx; /*0x3d08*/
  }
  while ( ByteIdx < 0x44 ); /*0x3d0f*/
  *(_BYTE *)(TableBase + 9) = -Checksum; /*0x3d15*/
  AcpiConfig_12(0); /*0x3d1a*/
  *(_QWORD *)::FacsSize = *(_QWORD *)(TableBase + 44); /*0x3d49*/
  *(_QWORD *)(::FacsSize + 8) = *(_QWORD *)(TableBase + 60); /*0x3d57*/
  (*(void (__fastcall **)(const __int16 *, void *, __int64, __int64, __int64 *))(RuntimeServices + 88))( /*0x3d69*/
    L"FPDT_Volatile",
    &unk_71D0,
    6,
    4,
    &::FacsSize);
  FpdtStatus = (*(__int64 (__fastcall **)(const __int16 *, void *, _QWORD, __int64 *, __int64 *))(RuntimeServices + 72))( /*0x3d90*/
                 L"FPDT_Variable_NV",
                 &unk_71D0,
                 0,
                 &VarSize4,
                 &FacsSize_5);
  if ( FpdtStatus < 0 || ::FacsSize != FacsSize_5 ) /*0x3da3*/
  {
    FpdtStatus_1 = (*(__int64 (__fastcall **)(const __int16 *, void *, __int64, __int64, __int64 *))(RuntimeServices + 88))( /*0x3dc4*/
                     L"FPDT_Variable_NV",
                     &unk_71D0,
                     3,
                     4,
                     &::FacsSize);
    FpdtStatus = FpdtStatus_1; /*0x3dc7*/
    if ( FpdtStatus_1 < 0 ) /*0x3dcd*/
    {
      DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", FpdtStatus_1); /*0x3dde*/
      AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 527, (__int64)"!EFI_ERROR (Status)"); /*0x3df6*/
    }
  }
  return FpdtStatus; /*0x3dfe*/
}


// Function: AcpiCreateTable @ 0x3e10 (0x23c bytes)

__int64 __fastcall AcpiCreateTable(unsigned __int64 TableType, unsigned __int64 *DsdtResult)
{
  unsigned int TableSize; // esi
  unsigned __int64 AllocPtr; // rax
  unsigned __int64 AllocPtr_1; // rdi
  char *TableBase; // rax
  char Checksum; // cl
  unsigned __int64 ByteIdx84; // rdx
  unsigned __int64 TableSize_1; // rdx

  if ( TableType > 4 ) /*0x3e36*/
    return 0x8000000000000002uLL; /*0x3e38*/
  TableSize = 276; /*0x3e4d*/
  if ( TableType == 1 ) /*0x3e5b*/
    TableSize = 132; /*0x3e5b*/
  AllocPtr = AllocateZeroPool(TableSize); /*0x3e63*/
  *DsdtResult = AllocPtr; /*0x3e6b*/
  AllocPtr_1 = AllocPtr; /*0x3e6e*/
  if ( AllocPtr ) /*0x3e74*/
  {
    if ( TableType == 1 ) /*0x3ea8*/
    {
      AcpiConfig_4(1346584902, AllocPtr, 2u); /*0x3eb0*/
      *(_BYTE *)(AllocPtr_1 + 8) = 2; /*0x3eb5*/
    }
    else
    {
      AcpiConfig_4(1346584902, AllocPtr, TableType); /*0x3ebe*/
    }
    TableBase = (char *)*DsdtResult; /*0x3ec3*/
    *((_DWORD *)TableBase + 11) = 590848; /*0x3ed0*/
    *((_DWORD *)TableBase + 12) = 178; /*0x3edb*/
    Checksum = *TableBase; /*0x3ee5*/
    *((_QWORD *)TableBase + 10) = 1408; /*0x3eeb*/
    *((_DWORD *)TableBase + 13) = 41376; /*0x3ef3*/
    *((_QWORD *)TableBase + 7) = 1280; /*0x3efe*/
    *((_QWORD *)TableBase + 8) = 1284; /*0x3f02*/
    *((_DWORD *)TableBase + 18) = 1360; /*0x3f06*/
    *((_DWORD *)TableBase + 19) = 1288; /*0x3f0a*/
    *(_DWORD *)(TableBase + 90) = 2098177; /*0x3f0e*/
    *(_DWORD *)(TableBase + 94) = 6619136; /*0x3f15*/
    *((_WORD *)TableBase + 44) = 516; /*0x3f1c*/
    *(_DWORD *)(TableBase + 98) = 67109865; /*0x3f22*/
    *(_DWORD *)(TableBase + 102) = 65552; /*0x3f29*/
    *((_WORD *)TableBase + 53) = 13; /*0x3f30*/
    TableBase[108] = 50; /*0x3f36*/
    *(_WORD *)(TableBase + 109) = 3; /*0x3f3a*/
    *((_WORD *)TableBase + 58) = 2049; /*0x3f3e*/
    TableBase[118] = 0; /*0x3f44*/
    *((_QWORD *)TableBase + 15) = 3321; /*0x3f48*/
    TableBase[128] = 6; /*0x3f50*/
    *((_DWORD *)TableBase + 28) = 33957; /*0x3f57*/
    if ( TableType == 1 ) /*0x3f61*/
    {
      *((_DWORD *)TableBase + 1) = 132; /*0x3f63*/
      ByteIdx84 = 1; /*0x3f67*/
      TableBase[9] = 0; /*0x3f6a*/
      do /*0x3f77*/
        Checksum += TableBase[ByteIdx84++]; /*0x3f6e*/
      while ( ByteIdx84 < 0x84 ); /*0x3f77*/
    }
    else
    {
      *((_QWORD *)TableBase + 19) = 1280; /*0x3f7e*/
      TableSize_1 = 1; /*0x3f85*/
      *((_DWORD *)TableBase + 37) = 33562625; /*0x3f88*/
      *((_DWORD *)TableBase + 43) = 33558529; /*0x3f92*/
      *((_QWORD *)TableBase + 22) = 1284; /*0x3f9c*/
      *((_DWORD *)TableBase + 40) = 0; /*0x3fa3*/
      *(_QWORD *)(TableBase + 164) = 0; /*0x3faa*/
      *((_DWORD *)TableBase + 46) = 0; /*0x3fb1*/
      *(_QWORD *)(TableBase + 188) = 0; /*0x3fb8*/
      *((_DWORD *)TableBase + 49) = 16779265; /*0x3fbf*/
      *((_QWORD *)TableBase + 25) = 1360; /*0x3fc9*/
      *((_DWORD *)TableBase + 52) = 50339841; /*0x3fd0*/
      *(_QWORD *)(TableBase + 212) = 1288; /*0x3fda*/
      *((_DWORD *)TableBase + 55) = 16842497; /*0x3fe1*/
      *((_QWORD *)TableBase + 28) = 1408; /*0x3feb*/
      *((_DWORD *)TableBase + 58) = 0; /*0x3ff2*/
      *(_QWORD *)(TableBase + 236) = 0; /*0x3ff9*/
      *(_WORD *)(TableBase + 129) = 0; /*0x4000*/
      TableBase[131] = 2; /*0x4008*/
      *((_WORD *)TableBase + 4) = 6; /*0x400f*/
      for ( *((_DWORD *)TableBase + 1) = TableSize; TableSize_1 < TableSize; ++TableSize_1 ) /*0x401b*/
        Checksum += TableBase[TableSize_1]; /*0x401d*/
    }
    TableBase[9] = -Checksum; /*0x402a*/
    return 0; /*0x402d*/
  }
  else
  {
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 562, (__int64)"*TablPtr"); /*0x3e89*/
    return 0x8000000000000009uLL; /*0x3e8e*/
  }
}


// Function: AssertCpuDeadLoop_0 @ 0x404c (0x125 bytes)

__int64 __fastcall AssertCpuDeadLoop_0(char **p_DsdtData)
{
  __int64 v2; // rax
  __int64 v4; // rax
  __int64 v5; // rcx
  __int64 v6; // [rsp+38h] [rbp+10h] BYREF

  v6 = 0xFFFFFFFFLL; /*0x405a*/
  v2 = Assert(); /*0x405f*/
  if ( v2 < 0 )
  {
    DebugPrint(0x80000000LL, "AcpiCore: No AmiBoardInfo Found: Status=%r\n", v2);
    return 0x800000000000000EuLL; /*0x4087*/
  }
  AcpiData = (*(_DWORD *)(*(_QWORD *)(qword_8800 + 40) + 4LL) >> 12) /*0x40c0*/
           + (unsigned int)((*(_DWORD *)(*(_QWORD *)(qword_8800 + 40) + 4LL) & 0xFFF) != 0);
  v4 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64 *))(BootServices + 40))(1, 4, AcpiData, &v6); /*0x40ca*/
  if ( v4 < 0 ) /*0x40d0*/
  {
    DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v4); /*0x40e1*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 1417, (__int64)"!EFI_ERROR (Status)"); /*0x40f9*/
    AcpiData = 0; /*0x40fe*/
    return 0x8000000000000009uLL; /*0x4110*/
  }
  v5 = v6; /*0x4112*/
  *p_DsdtData = (char *)v6; /*0x4117*/
  if ( !v5 ) /*0x411d*/
    return 0x8000000000000009uLL; /*0x411d*/
  (*(void (__fastcall **)(__int64, _QWORD, _QWORD))(BootServices + 352))( /*0x4135*/
    v5,
    *(_QWORD *)(qword_8800 + 40),
    *(unsigned int *)(*(_QWORD *)(qword_8800 + 40) + 4LL));
  if ( !*p_DsdtData )
  {
    DebugPrint(0x80000000LL, "Acpi: No DSDT was FOUND: Status=EFI_NOT_FOUND\n");
    return 0x800000000000000EuLL; /*0x4154*/
  }
  AcpiConfig_4(1413763908, (__int64)*p_DsdtData, 2u); /*0x4164*/
  return 0; /*0x416b*/
}


// Function: AcpiConfig_5 @ 0x4174 (0x11a bytes)

__int64 AcpiConfig_5()
{
  _DWORD *v0; // rdx
  _DWORD *v1; // r9
  _DWORD *v2; // r8
  _DWORD *v3; // r10
  unsigned __int64 j; // rcx
  __int64 v5; // r11
  char v6; // al
  unsigned __int64 v7; // rcx
  bool v8; // zf
  char v9; // al
  unsigned __int64 v10; // rcx

  v0 = 0; /*0x417e*/
  v1 = 0; /*0x4180*/
  v2 = 0; /*0x4183*/
  v3 = 0; /*0x4186*/
  j = 0; /*0x4189*/
  if ( !j_0 ) /*0x4195*/
    goto LABEL_12; /*0x4195*/
  do /*0x41dd*/
  {
    v5 = *(_QWORD *)(AcpiTableList + 8 * j); /*0x419e*/
    if ( **(_DWORD **)v5 == 1346584902 ) /*0x41ab*/
    {
      if ( *(_DWORD *)(v5 + 8) == 2 ) /*0x41b2*/
        v1 = *(_DWORD **)v5; /*0x41b4*/
      else
        v0 = *(_DWORD **)v5; /*0x41b9*/
    }
    if ( **(_DWORD **)v5 == 1413763908 ) /*0x41c2*/
    {
      if ( *(_DWORD *)(v5 + 8) == 2 ) /*0x41c9*/
        v2 = *(_DWORD **)v5; /*0x41cb*/
      else
        v3 = *(_DWORD **)v5; /*0x41d0*/
    }
    ++j; /*0x41d3*/
  }
  while ( j < j_0 ); /*0x41dd*/
  if ( !v2 ) /*0x41e2*/
LABEL_12:
    v2 = v3; /*0x41e4*/
  if ( !v3 ) /*0x41ea*/
    v3 = v2; /*0x41ea*/
  if ( !v1 ) /*0x41f1*/
    goto LABEL_19; /*0x41f1*/
  v1[9] = BufferAddr; /*0x41f9*/
  *((_BYTE *)v1 + 9) = 0; /*0x4203*/
  v6 = *(_BYTE *)v1; /*0x4208*/
  v1[10] = v2 != 0 ? (unsigned int)v2 : 0;
  v7 = 1; /*0x4214*/
  if ( v1[1] > 1u ) /*0x421b*/
  {
    do /*0x422b*/
      v6 += *((_BYTE *)v1 + v7++); /*0x4221*/
    while ( v7 < (unsigned int)v1[1] ); /*0x422b*/
  }
  v8 = AcpiTablesPublished == 0; /*0x422f*/
  *((_BYTE *)v1 + 9) = -v6; /*0x4236*/
  if ( v8 )
  {
LABEL_19:
    if ( v0 )
    {
      v0[9] = TableBase; /*0x4247*/
      *(_QWORD *)(v0 + 35) = v3; /*0x4250*/
      v9 = *(_BYTE *)v0; /*0x4257*/
      *((_BYTE *)v0 + 9) = 0; /*0x425b*/
      v0[10] = v2 != 0 ? (unsigned int)v2 : 0;
      v10 = 1; /*0x4265*/
      if ( v0[1] > 1u ) /*0x426b*/
      {
        do /*0x427a*/
          v9 += *((_BYTE *)v0 + v10++); /*0x4271*/
        while ( v10 < (unsigned int)v0[1] ); /*0x427a*/
      }
      *((_BYTE *)v0 + 9) = -v9; /*0x427e*/
    }
  }
  return 0; /*0x428d*/
}


// Function: AcpiConfig_18 @ 0x4290 (0xc5 bytes)

unsigned __int64 __fastcall AcpiConfig_18(
        unsigned __int64 RsdtBase,
        unsigned __int64 XsdtBase,
        int *FacpX,
        unsigned __int64 Dsdt)
{
  __int64 v7; // rcx
  _DWORD *i; // rax
  __int64 v9; // rcx
  _QWORD *j; // rax

  if ( __PAIR128__(RsdtBase, XsdtBase) == 0 ) /*0x42ae*/
    return 0; /*0x42ae*/
  if ( !FacpX || !Dsdt ) /*0x42c1*/
  {
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 1549, (__int64)"((BOOLEAN)(0==1))"); /*0x433e*/
    return 0; /*0x4343*/
  }
  (*(void (__fastcall **)(unsigned __int64, int *, _QWORD))(BootServices + 352))(Dsdt, FacpX, (unsigned int)FacpX[1]); /*0x42d4*/
  if ( RsdtBase ) /*0x42dd*/
  {
    v7 = 0; /*0x42df*/
    for ( i = (_DWORD *)(RsdtBase + 36); *i; ++i ) /*0x42e5*/
      ++v7; /*0x42e9*/
    *(_DWORD *)(RsdtBase + 4 * v7 + 36) = Dsdt; /*0x42f5*/
  }
  if ( XsdtBase ) /*0x42fc*/
  {
    v9 = 0; /*0x42fe*/
    for ( j = (_QWORD *)(XsdtBase + 36); *j; ++j ) /*0x4304*/
      ++v9; /*0x4309*/
    *(_QWORD *)(XsdtBase + 8 * v9 + 36) = Dsdt; /*0x4316*/
  }
  return (Dsdt + *(unsigned int *)(Dsdt + 4) + 7LL) & 0xFFFFFFFFFFFFFFF8uLL; /*0x434f*/
}


// Function: AcpiPublishTables @ 0x4358 (0x9a6 bytes)

unsigned __int64 __fastcall AcpiPublishTables(unsigned __int8 RsdtBuildFlag, unsigned __int8 XsdtBuildFlag)
{
  int *FacpX; // r9
  int *FacpTable; // rbp
  int *Dsdt; // r13
  int *DsdtXTable; // r12
  __int64 XsdtBase; // r15
  __int64 FacpCount; // rsi
  __int64 DsdtCount; // r14
  unsigned __int64 XsdtAlign; // rdi
  __int64 GetVarStatus; // rax
  __int64 TableCount; // r8
  unsigned __int64 InnerIdx; // rdx
  int **TableEntry; // rcx
  bool SizeCheck; // cc
  int CurSig; // r10d
  unsigned __int64 InnerIdx2; // rcx
  __int64 OtherEntry; // r9
  unsigned __int64 RsdtBase; // rbx
  unsigned __int8 RsdtBuildEnable; // al
  unsigned __int8 XsdtBuildEnable; // r9
  unsigned __int64 TotalSize; // r14
  __int64 FreeStatus; // rax
  unsigned __int64 AllocPages; // r8
  __int64 MemType; // rdx
  __int64 AllocStatus; // rax
  __int64 AllocResult; // rsi
  unsigned __int64 RsdtEntryPtr; // r12
  unsigned __int64 DsdtXStack; // r14
  unsigned __int64 TableLength; // rdx
  char CheckByte; // a... [19712 chars total]


// Function: AcpiPatchAmlMethods @ 0x4d00 (0x32a bytes)

__int64 __fastcall AcpiPatchAmlMethods(__int64 *a1)
{
  __int64 Status; // rbx
  __int64 LoopIdx; // rbp
  __int64 AmlData; // rdi
  _BYTE *S3Ptr; // rax
  _BYTE *S1Ptr; // rax
  _BYTE *S4Ptr; // rax
  char CheckByte; // al
  unsigned __int64 ChecksumIdx; // rcx
  int ChecksumByte; // ecx
  __int64 TableBase; // rax
  __int64 ErrLine1972; // rdx

  Status = 0; /*0x4d18*/
  LoopIdx = 0; /*0x4d1d*/
  while ( 1 ) /*0x4d25*/
  {
    if ( LoopIdx ) /*0x4d28*/
      AmlData = *a1; /*0x4d2a*/
    else
      AmlData = a1[1]; /*0x4d2f*/
    if ( !AmlData ) /*0x4d36*/
      goto LABEL_30; /*0x4d36*/
    if ( !*((_BYTE *)a1 + 66) ) /*0x4d3c*/
    {
      S3Ptr = (_BYTE *)AmlHashName(AmlData + 36, "_S3", *(unsigned int *)(AmlData + 4) - 37LL); /*0x4d55*/
      if ( S3Ptr ) /*0x4d5d*/
        *S3Ptr = 88; /*0x4d5f*/
    }
    if ( !*((_BYTE *)a1 + 64) ) /*0x4d62*/
    {
      S1Ptr = (_BYTE *)AmlHashName(AmlData + 36, "_S1", *(unsigned int *)(AmlData + 4) - 37LL); /*0x4d7b*/
      if ( S1Ptr ) /*0x4d83*/
        *S1Ptr = 88; /*0x4d85*/
    }
    if ( !*((_BYTE *)a1 + 67) ) /*0x4d88*/
    {
      S4Ptr = (_BYTE *)AmlHashName(AmlData + 36, "_S4", *(unsigned int *)(AmlData + 4) - 37LL); /*0x4da1*/
      if ( S4Ptr ) /*0x4da9*/
        *S4Ptr = 88; /*0x4dab*/
    }
    if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4db5*/
    {
      Status = 0x8000000000000002uLL; /*0x4fd8*/
LABEL_43:
      DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4fe2*/
      ErrLine1972 = 1972; /*0x4ff6*/
      goto LABEL_44; /*0x4ff6*/
    }
    Status = AmlWriteData(AmlData + 36, *(unsigned int *)(AmlData + 4) - 37LL, (__int64)"TOPM", *((unsigned int *)a1 + 18)); /*0x4dd5*/
    if ( Status < 0 ) /*0x4ddb*/
      goto LABEL_43; /*0x4ddb*/
    if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4de9*/
    {
      Status = 0x8000000000000002uLL; /*0x4fb3*/
LABEL_41:
      DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4fbd*/
      ErrLine1972 = 1984; /*0x4fd1*/
      goto LABEL_44; /*0x4fd6*/
    }
    Status = AmlWriteData( /*0x4e05*/
               AmlData + 36,
               *(unsigned int *)(AmlData + 4) - 37LL,
               (__int64)"IOST",
               *((unsigned __int16 *)a1 + 38));
    if ( Status < 0 ) /*0x4e0b*/
      goto LABEL_41; /*0x4e0b*/
    if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4e19*/
    {
      Status = 0x8000000000000002uLL; /*0x4f8e*/
LABEL_39:
      DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4f98*/
      ErrLine1972 = 1989; /*0x4fac*/
      goto LABEL_44; /*0x4fb1*/
    }
    Status = AmlWriteData( /*0x4e35*/
               AmlData + 36,
               *(unsigned int *)(AmlData + 4) - 37LL,
               (__int64)"SS4",
               *((unsigned __int8 *)a1 + 67));
    if ( Status < 0 ) /*0x4e3b*/
      goto LABEL_39; /*0x4e3b*/
    if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4e49*/
    {
      Status = 0x8000000000000002uLL; /*0x4f69*/
LABEL_37:
      DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4f73*/
      ErrLine1972 = 1994; /*0x4f87*/
      goto LABEL_44; /*0x4f8c*/
    }
    Status = AmlWriteData( /*0x4e65*/
               AmlData + 36,
               *(unsigned int *)(AmlData + 4) - 37LL,
               (__int64)"SS3",
               *((unsigned __int8 *)a1 + 66));
    if ( Status < 0 ) /*0x4e6b*/
      goto LABEL_37; /*0x4e6b*/
    if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4e79*/
      break; /*0x4e79*/
    Status = AmlWriteData( /*0x4e95*/
               AmlData + 36,
               *(unsigned int *)(AmlData + 4) - 37LL,
               (__int64)"SS2",
               *((unsigned __int8 *)a1 + 65));
    if ( Status < 0 ) /*0x4e9b*/
      goto LABEL_35; /*0x4e9b*/
    if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4ea9*/
    {
      Status = 0x8000000000000002uLL; /*0x4f19*/
LABEL_33:
      DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4f23*/
      ErrLine1972 = 2004; /*0x4f37*/
      goto LABEL_44; /*0x4f3c*/
    }
    Status = AmlWriteData( /*0x4ec1*/
               AmlData + 36,
               *(unsigned int *)(AmlData + 4) - 37LL,
               (__int64)"SS1",
               *((unsigned __int8 *)a1 + 64));
    if ( Status < 0 ) /*0x4ec7*/
      goto LABEL_33; /*0x4ec7*/
    CheckByte = *(_BYTE *)AmlData; /*0x4ec9*/
    ChecksumIdx = 1; /*0x4ecb*/
    *(_BYTE *)(AmlData + 9) = 0; /*0x4ed0*/
    if ( *(_DWORD *)(AmlData + 4) > 1u ) /*0x4ed7*/
    {
      do /*0x4ee5*/
      {
        CheckByte += *(_BYTE *)(ChecksumIdx + AmlData); /*0x4edc*/
        ++ChecksumIdx; /*0x4edf*/
      }
      while ( ChecksumIdx < *(unsigned int *)(AmlData + 4) ); /*0x4ee5*/
    }
    ChecksumByte = (unsigned __int8)-CheckByte; /*0x4ee9*/
    TableBase = ::TableBase; /*0x4eec*/
    *(_BYTE *)(AmlData + 9) = ChecksumByte; /*0x4ef3*/
    *(_DWORD *)(TableBase + 8) = ChecksumByte; /*0x4ef6*/
    *(_DWORD *)(BufferAddr + 8) = *(unsigned __int8 *)(AmlData + 9); /*0x4f04*/
LABEL_30:
    if ( (unsigned __int64)++LoopIdx >= 2 ) /*0x4f0e*/
      return Status; /*0x4f0e*/
  }
  Status = 0x8000000000000002uLL; /*0x4f41*/
LABEL_35:
  DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4f4b*/
  ErrLine1972 = 1999; /*0x4f5f*/
LABEL_44:
  AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", ErrLine1972, (__int64)"!EFI_ERROR (Status)"); /*0x4ffb*/
  return Status; /*0x5020*/
}


// Function: AcpiHideSioObjects @ 0x502c (0x235 bytes)

__int64 __fastcall AcpiHideSioObjects(char **a1)
{
  __int64 result; // rax
  __int64 HandleBuffer; // rcx
  __int64 HandleIndex; // rsi
  __int64 SioProtocol; // r13
  __int64 SioDevice; // rax
  unsigned __int64 i; // rdi
  char *AmlDataDsdt; // rbx
  __int64 FindStatus; // rax
  __int64 FindStatus_1; // r12
  __int64 NameOffset; // rbx
  unsigned __int64 NameCount; // r8
  __int64 NameIndex; // rcx
  __int64 NameIndex_1; // rdx
  unsigned __int64 j; // rdx
  char *AmlData2; // rax
  char CheckByte; // cl
  unsigned __int64 ByteIdx; // r8
  __int64 SioHandle; // [rsp+30h] [rbp-30h] BYREF
  __int64 NameBuffer; // [rsp+38h] [rbp-28h] BYREF
  __int64 NameOffset_1; // [rsp+48h] [rbp-18h]
  _QWORD NameInfo[2]; // [rsp+50h] [rbp-10h] BYREF
  int p_n1600085855; // [rsp+A8h] [rbp+48h] BYREF
  __int64 HandleBuffer_1; // [rsp+B0h] [rbp+50h] BYREF
  unsigned __int64 HandleCount; // [rsp+B8h] [rbp+58h] BYREF

  HandleBuffer_1 = 0; /*0x503e*/
  NameOffset_1 = 0; /*0x5050*/
  memset(NameInfo, 0, 12); /*0x5057*/
  result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, unsigned __int64 *, __int64 *))(BootServices + 312))( /*0x5075*/
             2,
             &unk_7190,
             0,
             &HandleCount,
             &HandleBuffer_1);
  HandleBuffer = HandleBuffer_1; /*0x507b*/
  if ( HandleBuffer_1 )
  {
    HandleIndex = 0; /*0x5088*/
    if ( HandleCount )
    {
      while ( 1 )
      {
        if ( (*(__int64 (__fastcall **)(_QWORD, void *, __int64 *))(BootServices + 152))(
               *(_QWORD *)(HandleBuffer + 8 * HandleIndex),
               &unk_7190,
               &SioHandle) >= 0 )
        {
          SioProtocol = *(_QWORD *)(SioHandle + 40); /*0x50bd*/
          SioDevice = *(_QWORD *)(SioProtocol + 136); /*0x50c1*/
          if ( *(_BYTE *)(SioDevice + 11) )
            DebugPrint(64, "Found SIO Protocol. Name: %s\n", (const char *)(unsigned int)(SioDevice + 11));
          for ( i = 0; i < 2; ++i )
          {
            if ( i ) /*0x50e8*/
              AmlDataDsdt = *a1; /*0x50ea*/
            else
              AmlDataDsdt = a1[1]; /*0x50ef*/
            if ( AmlDataDsdt )
            {
              DebugPrint(64, "Looking DSDT for Name: %s\n", (const char *)(*(_QWORD *)(SioProtocol + 136) + 11LL));
              FindStatus = AmlParseNameInfo( /*0x513d*/
                             (__int64)(AmlDataDsdt + 36),
                             *((unsigned int *)AmlDataDsdt + 1) - 37LL,
                             (const char *)(*(_QWORD *)(SioProtocol + 136) + 11LL),
                             6,
                             &NameBuffer);
              FindStatus_1 = FindStatus; /*0x5142*/
              if ( FindStatus < 0 ) /*0x5148*/
              {
                DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", FindStatus); /*0x5159*/
                AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 2072, (__int64)"!EFI_ERROR (Status)"); /*0x5171*/
              }
              NameOffset = NameOffset_1; /*0x5176*/
              DebugPrint(64, "Going to hide object Data statr= %x, Length= %x\n", NameOffset_1, HIDWORD(NameInfo[0])); /*0x518d*/
              if ( FindStatus_1 >= 0 ) /*0x5195*/
              {
                NameCount = 0; /*0x5197*/
                do /*0x51a4*/
                  ++NameCount; /*0x51a1*/
                while ( aPrs[NameCount] ); /*0x51a4*/
                p_n1600085855 = 1600085855; /*0x51ae*/
                ComputeStringHash(&p_n1600085855, "_PRS", NameCount); /*0x51b9*/
                NameIndex = 0; /*0x51be*/
                if ( *(_QWORD *)((char *)NameInfo + 4) ) /*0x51c4*/
                {
                  NameIndex_1 = 0; /*0x51c9*/
                  while ( *(_DWORD *)(NameIndex_1 + NameOffset) != p_n1600085855 ) /*0x51ce*/
                  {
                    NameIndex = (unsigned int)(NameIndex + 1); /*0x51d0*/
                    NameIndex_1 = (unsigned int)NameIndex; /*0x51d2*/
                    if ( (unsigned __int64)(unsigned int)NameIndex >= *(_QWORD *)((char *)NameInfo + 4) ) /*0x51d8*/
                      goto LABEL_22; /*0x51d8*/
                  }
                  *(_BYTE *)(NameIndex + NameOffset) = 88; /*0x51dc*/
                }
              }
            }
LABEL_22:
            ; /*0x51e0*/
          }
        }
        if ( ++HandleIndex >= HandleCount ) /*0x51f4*/
          break; /*0x51f4*/
        HandleBuffer = HandleBuffer_1; /*0x51f6*/
      }
    }
    for ( j = 0; j < 2; ++j ) /*0x51ff*/
    {
      if ( j ) /*0x5204*/
        AmlData2 = *a1; /*0x5206*/
      else
        AmlData2 = a1[1]; /*0x520b*/
      if ( AmlData2 ) /*0x5212*/
      {
        CheckByte = *AmlData2; /*0x5214*/
        ByteIdx = 1; /*0x5216*/
        AmlData2[9] = 0; /*0x521c*/
        if ( *((_DWORD *)AmlData2 + 1) > 1u ) /*0x5224*/
        {
          do /*0x5234*/
            CheckByte += AmlData2[ByteIdx++]; /*0x522a*/
          while ( ByteIdx < *((unsigned int *)AmlData2 + 1) ); /*0x5234*/
        }
        AmlData2[9] = -CheckByte; /*0x5238*/
      }
    }
    return (*(__int64 (__fastcall **)(__int64))(BootServices + 72))(HandleBuffer_1); /*0x524f*/
  }
  return result; /*0x5252*/
}


// Function: AcpiCollectAmlInfo @ 0x5264 (0x3fc bytes)

signed __int64 __fastcall AcpiCollectAmlInfo(__int64 a1, __int64 a2)
{
  _DWORD *FacpTable; // rdi
  _DWORD *FacpXTable; // rsi
  __int64 SetupData; // r15
  unsigned __int64 i_1; // rcx
  __int64 TableEntry; // rdx
  _DWORD *TableData; // rax
  __int64 GetVarStatus; // rax
  __int64 SetupData_1; // rax
  _WORD *DevStatus; // r14
  __int64 SioStatus; // r12
  __int16 FlagsVal; // cx
  unsigned __int64 ChecksumIdx; // rdx
  char CheckByte; // al
  unsigned __int8 ResetAccessSize; // al
  unsigned __int64 ChecksumIdx2; // rcx
  char CheckByte2; // al
  __int64 PatchStatus; // rax
  signed __int64 result; // rax
  __int64 *ResetInfo; // [rsp+20h] [rbp-30h]
  __int64 ResetAddr; // [rsp+30h] [rbp-20h] BYREF
  __int16 ResetWidth; // [rsp+38h] [rbp-18h]
  _DWORD SioUuid[4]; // [rsp+40h] [rbp-10h] BYREF
  unsigned __int64 i; // [rsp+98h] [rbp+48h] BYREF
  __int64 VarSize2; // [rsp+A0h] [rbp+50h] BYREF

  SioUuid[0] = 1478549144; /*0x527e*/
  SioUuid[1] = 1259076750; /*0x5288*/
  SioUuid[2] = -1811236444; /*0x5296*/
  FacpTable = 0; /*0x529d*/
  SioUuid[3] = 2116687373; /*0x52a0*/
  ResetAddr = 0; /*0x52ab*/
  VarSize2 = 2; /*0x52b3*/
  FacpXTable = 0; /*0x52b7*/
  ResetWidth = 255; /*0x52ba*/
  SetupData = 0; /*0x52c0*/
  DebugPrint(64, "IN Collect AML Info.\n"); /*0x52c3*/
  i_1 = 0; /*0x52d3*/
  for ( i = 0; i_1 < j_0; i = i_1 ) /*0x52da*/
  {
    TableEntry = *(_QWORD *)(AcpiTableList + 8 * i_1); /*0x52e3*/
    TableData = *(_DWORD **)TableEntry; /*0x52e7*/
    if ( **(_DWORD **)TableEntry == 1346584902 ) /*0x52f0*/
    {
      if ( *(_DWORD *)(TableEntry + 8) == 2 ) /*0x52f6*/
        FacpXTable = *(_DWORD **)TableEntry; /*0x52f8*/
      else
        FacpTable = *(_DWORD **)TableEntry; /*0x52fd*/
    }
    if ( *TableData == 1413763908 ) /*0x5306*/
    {
      if ( *(_DWORD *)(TableEntry + 8) == 2 ) /*0x530c*/
        *(_QWORD *)a2 = TableData; /*0x530e*/
      else
        *(_QWORD *)(a2 + 8) = TableData; /*0x5313*/
    }
    ++i_1; /*0x5317*/
  }
  DebugPrint(64, "IN Collect AML Info after PT: %x\n", 0);
  *(_DWORD *)(a2 + 64) = 0; /*0x533a*/
  i = 0; /*0x5353*/
  GetVarStatus = (*(__int64 (__fastcall **)(const __int16 *, void *, _QWORD, unsigned __int64 *, _QWORD))(RuntimeServices + 72))( /*0x5363*/
                   L"Setup",
                   &unk_8668,
                   0,
                   &i,
                   0);
  if ( GetVarStatus >= 0 ) /*0x5369*/
    goto LABEL_62; /*0x5369*/
  if ( GetVarStatus == 0x8000000000000005uLL ) /*0x5378*/
  {
    SetupData_1 = AllocatePool(i); /*0x537e*/
    SetupData = SetupData_1; /*0x5383*/
    if ( !SetupData_1 ) /*0x5389*/
      goto LABEL_24; /*0x5389*/
    GetVarStatus = (*(__int64 (__fastcall **)(const __int16 *, void *, _QWORD, unsigned __int64 *, __int64))(RuntimeServices + 72))( /*0x53ac*/
                     L"Setup",
                     &unk_8668,
                     0,
                     &i,
                     SetupData_1);
  }
  if ( GetVarStatus >= 0 ) /*0x53b3*/
  {
LABEL_62:
    if ( !*(_BYTE *)(SetupData + 45) ) /*0x53b5*/
    {
      *(_BYTE *)(a2 + 67) = *(_BYTE *)(SetupData + 49); /*0x53bf*/
      if ( *(_WORD *)(SetupData + 46) ) /*0x53c2*/
      {
        if ( *(_WORD *)(SetupData + 46) == 1 ) /*0x53ce*/
        {
          *(_BYTE *)(a2 + 64) = 1; /*0x53db*/
          *(_BYTE *)(a2 + 66) = 0; /*0x53df*/
          goto LABEL_24; /*0x53e3*/
        }
        if ( *(_WORD *)(SetupData + 46) != 2 ) /*0x53d3*/
          goto LABEL_24; /*0x53d3*/
        *(_BYTE *)(a2 + 66) = 1; /*0x53d5*/
      }
      else
      {
        *(_BYTE *)(a2 + 66) = 0; /*0x53e5*/
      }
      *(_BYTE *)(a2 + 64) = 0; /*0x53e9*/
    }
  }
LABEL_24:
  DevStatus = (_WORD *)(a2 + 76); /*0x53ed*/
  ::FlagsVal &= 0xFFFCu; /*0x53f6*/
  SioStatus = (*(__int64 (__fastcall **)(const __int16 *, _DWORD *, _QWORD, __int64 *, __int64))(RuntimeServices + 72))( /*0x541e*/
                L"SIO_DEV_STATUS_VAR",
                SioUuid,
                0,
                &VarSize2,
                a2 + 76);
  if ( SioStatus < 0 ) /*0x5424*/
    *DevStatus = 0; /*0x5426*/
  FlagsVal = ::FlagsVal; /*0x542a*/
  if ( (*DevStatus & 0x30F) != 0 ) /*0x543a*/
  {
    FlagsVal = ::FlagsVal | 1; /*0x543c*/
    ::FlagsVal |= 1u; /*0x5440*/
  }
  if ( (*DevStatus & 0x4C00) != 0 ) /*0x5456*/
  {
    FlagsVal |= 2u; /*0x5458*/
    ::FlagsVal = FlagsVal; /*0x545c*/
  }
  if ( FacpTable ) /*0x546c*/
  {
    *(_WORD *)((char *)FacpTable + 109) &= FlagsVal; /*0x546e*/
    ChecksumIdx = 1; /*0x5472*/
    *((_BYTE *)FacpTable + 9) = 0; /*0x5475*/
    CheckByte = *(_BYTE *)FacpTable; /*0x5479*/
    if ( FacpTable[1] > 1u ) /*0x547f*/
    {
      do /*0x548e*/
        CheckByte += *((_BYTE *)FacpTable + ChecksumIdx++); /*0x5485*/
      while ( ChecksumIdx < (unsigned int)FacpTable[1] ); /*0x548e*/
    }
    *((_BYTE *)FacpTable + 9) = -CheckByte; /*0x5492*/
    if ( *((_QWORD *)FacpTable + 22) ) /*0x5495*/
    {
      ResetAddr = *((_QWORD *)FacpTable + 22); /*0x54a1*/
      HIBYTE(ResetWidth) = *((_BYTE *)FacpTable + 175); /*0x54ab*/
      ResetAccessSize = *((_BYTE *)FacpTable + 172); /*0x54ae*/
LABEL_35:
      LOBYTE(ResetWidth) = ResetAccessSize; /*0x54b4*/
      goto LABEL_39; /*0x54b7*/
    }
    if ( FacpTable[16] ) /*0x54b9*/
    {
      ResetAddr = (unsigned int)FacpTable[16]; /*0x54c2*/
      ResetAccessSize = 1; /*0x54c6*/
      HIBYTE(ResetWidth) = 2; /*0x54c9*/
      goto LABEL_35; /*0x54cd*/
    }
  }
  ResetAccessSize = ResetWidth; /*0x54cf*/
LABEL_39:
  if ( !FacpXTable ) /*0x54d5*/
    goto LABEL_48; /*0x54d5*/
  if ( *((_BYTE *)FacpXTable + 8) > 1u ) /*0x54db*/
  {
    *(_WORD *)((char *)FacpXTable + 109) &= FlagsVal; /*0x54dd*/
    ChecksumIdx2 = 1; /*0x54e1*/
    *((_BYTE *)FacpXTable + 9) = 0; /*0x54e4*/
    CheckByte2 = *(_BYTE *)FacpXTable; /*0x54e8*/
    if ( FacpXTable[1] > 1u ) /*0x54ee*/
    {
      do /*0x54fc*/
        CheckByte2 += *((_BYTE *)FacpXTable + ChecksumIdx2++); /*0x54f3*/
      while ( ChecksumIdx2 < (unsigned int)FacpXTable[1] ); /*0x54fc*/
    }
    *((_BYTE *)FacpXTable + 9) = -CheckByte2; /*0x5500*/
    ResetAccessSize = ResetWidth; /*0x5503*/
  }
  if ( !FacpTable || ResetAccessSize == 0xFF ) /*0x550d*/
  {
    if ( FacpXTable[16] ) /*0x550f*/
    {
      ResetAddr = (unsigned int)FacpXTable[16]; /*0x5518*/
      ResetAccessSize = 1; /*0x551c*/
      ResetWidth = 513; /*0x551f*/
    }
LABEL_48:
    if ( ResetAccessSize == 0xFF ) /*0x5528*/
      goto LABEL_50; /*0x5528*/
  }
  ResetInfo = &ResetAddr; /*0x552a*/
  SioStatus = (*(__int64 (__fastcall **)(const __int16 *, void *, __int64))(RuntimeServices + 88))( /*0x5555*/
                L"AcpiResetVar",
                &unk_71D0,
                3);
  ResetAccessSize = ResetWidth; /*0x5558*/
LABEL_50:
  LODWORD(ResetInfo) = HIBYTE(ResetWidth); /*0x555b*/
  DebugPrint(
    64,
    "AcpiResetVar: Status=%r Addess=%lx AccessSize=%x Type=%x \n",
    SioStatus,
    ResetAddr,
    ResetInfo,
    ResetAccessSize);
  if ( SioStatus < 0 ) /*0x5591*/
  {
    DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", SioStatus); /*0x559b*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 2301, (__int64)"!EFI_ERROR (Status)"); /*0x55b3*/
  }
  PatchStatus = AcpiPatchAmlMethods((__int64 *)a2); /*0x55bb*/
  if ( PatchStatus < 0 ) /*0x55c3*/
  {
    DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", PatchStatus); /*0x55ce*/
    AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 2303, (__int64)"!EFI_ERROR (Status)"); /*0x55e6*/
  }
  if ( SetupData && *(_BYTE *)(SetupData + 48) ) /*0x55f0*/
    AcpiHideSioObjects((char **)a2); /*0x55f9*/
  result = AcpiPublishTables(1u, AcpiTablesPublished == 0); /*0x5611*/
  if ( result < 0 ) /*0x5619*/
  {
    DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", result); /*0x5624*/
    result = AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 2311, (__int64)"!EFI_ERROR (Status)"); /*0x563c*/
  }
  AcpiTableInstalled = 1; /*0x5641*/
  return result; /*0x5650*/
}


// Function: AcpiCoreInitialize @ 0x5660 (0x50a bytes)

unsigned __int64 AcpiCoreInitialize()
{
  __int64 TableList; // rbx
  __int64 ProtocolPtr; // rax
  unsigned __int64 AlignSize; // rbx
  __int64 AllocStatus; // rax
  __int64 ErrLine1332; // rdx
  __int64 BufferAddr; // rcx
  __int64 FreeStatus; // rax
  __int64 ReallocStatus; // rax
  __int64 RsdtBuffer; // rax
  unsigned __int64 *DsdtResult; // rax
  __int64 DsdtResult_1; // rbx
  __int64 ErrLine2401; // rdx
  const char *AcpiTable; // r8
  __int64 Table; // rax
  signed __int64 AddStatus; // r8
  unsigned __int64 *DsdtResult_2; // rax
  __int64 DsdtResult_3; // rbx
  __int64 SsdtStatus; // rax
  __int64 FacsStatus; // rax
  __int64 ErrLine2444; // rdx
  char *DsdtData; // rbx
  unsigned __int64 ByteIdx; // rcx
  unsigned __int64 ByteIdx_1; // rdx
  char CheckByte; // al
  __int64 DsdtWrapEntry; // rax
  signed __int64 AddWrapStatus; // rax
  __int64 AddStatus2; // rax
  unsigned __int64 *FacsAllocResult; // rax
  __int64 FacsSize; // rcx
  __int64 FacsAllocResult_1; // rbx
  signed ... [8951 chars total]


// Function: GetDebugLevelFromCmos @ 0x5b6c (0x4e bytes)

__int64 GetDebugLevelFromCmos()
{
  unsigned __int8 v0; // al
  char n3_1; // al
  char n3; // cl
  __int64 result; // rax

  v0 = __inbyte(0x70u); /*0x5b71*/
  __outbyte(0x70u, v0 & 0x80 | 0x4B); /*0x5b76*/
  n3_1 = __inbyte(0x71u); /*0x5b7c*/
  n3 = n3_1; /*0x5b7d*/
  if ( (unsigned __int8)n3_1 > 3u ) /*0x5b84*/
  {
    n3 = n3; /*0x5b86*/
    if ( !n3 ) /*0x5b8e*/
      n3 = MEMORY[0xFDAF0490] & 2 | 1; /*0x5b9a*/
  }
  if ( (unsigned __int8)(n3 - 1) > 0xFDu ) /*0x5ba4*/
    return 0; /*0x5bb7*/
  result = 2147483718LL; /*0x5ba9*/
  if ( n3 == 1 ) /*0x5bb3*/
    return 2147483652LL; /*0x5bb3*/
  return result; /*0x5bb6*/
}


// Function: ReadUnaligned64 @ 0x5bbc (0x2f bytes)

__int64 __fastcall ReadUnaligned64(__int64 a1)
{
  if ( !a1 ) /*0x5bc8*/
    AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 192, (__int64)"Buffer != ((void *) 0)"); /*0x5bdd*/
  return *(_QWORD *)a1; /*0x5be5*/
}


// Function: CompareGuid @ 0x5bec (0x6e bytes)

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

  v3 = ReadUnaligned64((__int64)&unk_71C0); /*0x5c12*/
  v4 = ReadUnaligned64(a2); /*0x5c21*/
  v5 = ReadUnaligned64((__int64)&unk_71C8); /*0x5c2d*/
  v6 = ReadUnaligned64(a2 + 8); /*0x5c30*/
  return v3 == v4 && v5 == v6; /*0x5c54*/
}


// Function: AssertCpuDeadLoop_2 @ 0x5c5c (0x8c bytes)

__int64 AssertCpuDeadLoop_2()
{
  __int64 result; // rax
  __int64 v1; // rax

  result = qword_87F8; /*0x5c60*/
  if ( !qword_87F8 ) /*0x5c6a*/
  {
    v1 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_8768 + 320))(&unk_7150, 0, &qword_87F8); /*0x5c83*/
    if ( v1 < 0 ) /*0x5c8c*/
    {
      DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v1); /*0x5c9d*/
      AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\DxePcdLib\\DxePcdLib.c", 78, (__int64)"!EFI_ERROR (Status)"); /*0x5cb5*/
    }
    result = qword_87F8; /*0x5cba*/
    if ( !qword_87F8 ) /*0x5cc4*/
    {
      AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\DxePcdLib\\DxePcdLib.c", 79, (__int64)"mPcd != ((void *) 0)"); /*0x5cd7*/
      return qword_87F8; /*0x5cdc*/
    }
  }
  return result; /*0x5ce3*/
}


// Function: Assert @ 0x5ce8 (0x87 bytes)

__int64 Assert()
{
  __int64 v0; // rbx
  __int64 v1; // rax

  v0 = 0; /*0x5cf2*/
  if ( !qword_8800 )
  {
    v1 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_7170, 0, &qword_8800); /*0x5d14*/
    v0 = v1; /*0x5d1a*/
    if ( v1 < 0 )
    {
      DebugPrint(0x80000000LL, "ERROR: Failed to locate AMI_BOARD_INFO2_PROTOCOL. Status=%r\n", v1);
      DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v0); /*0x5d44*/
      AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\Library\\AmiSdlLib\\AmiSdlLib.c", 66, (__int64)"!EFI_ERROR (Status)"); /*0x5d5c*/
    }
  }
  return v0; /*0x5d69*/
}


// Function: SetMem @ 0x5dce (0x4f bytes)

int *__fastcall SetMem(int *buf, unsigned __int64 n4, int value)
{
  int *buf_1; // rdi
  unsigned __int64 n4_1; // rcx
  int value_1; // eax
  __int16 value_2; // bx
  int v7; // eax
  __int64 v8; // rdx
  char n4_2; // dl
  unsigned __int64 i; // rcx

  buf_1 = buf; /*0x5dd1*/
  n4_1 = n4; /*0x5dd4*/
  value_1 = value; /*0x5dd7*/
  BYTE1(value_1) = value; /*0x5dda*/
  value_2 = value_1; /*0x5ddc*/
  v7 = value_1 << 16; /*0x5ddf*/
  LOWORD(v7) = value_2; /*0x5de3*/
  if ( n4 >= 4 ) /*0x5dea*/
  {
    v8 = (unsigned __int8)buf_1 & 3; /*0x5def*/
    if ( ((unsigned __int8)buf_1 & 3) != 0 ) /*0x5df3*/
    {
      memset(buf_1, value_2, 4 - v8); /*0x5e02*/
      buf_1 = (int *)((char *)buf_1 + 4 - v8); /*0x5e02*/
      n4_1 -= 4 - v8; /*0x5e04*/
    }
    n4_2 = n4_1; /*0x5e07*/
    for ( i = n4_1 >> 2; i; --i ) /*0x5e0a*/
      *buf_1++ = v7; /*0x5e0e*/
    n4_1 = n4_2 & 3; /*0x5e14*/
  }
  memset(buf_1, value_2, n4_1); /*0x5e17*/
  return buf; /*0x5e1a*/
}


// Function: ComputeStringHash @ 0x5e20 (0xb0 bytes)

int *__fastcall ComputeStringHash(int *p_n1600085855, const char *_PRS, unsigned __int64 NameCount)
{
  unsigned __int64 p_n1600085855_1; // rdi
  unsigned __int64 NameCount_1; // rcx
  char v10; // dl
  const char *n8; // rax
  unsigned __int64 count; // rax
  unsigned __int64 count_1; // rbx
  char NameCount_2; // al
  unsigned __int64 v15; // rcx
  unsigned __int64 NameCount_3; // rax

  __asm { pushf } /*0x5e23*/
  p_n1600085855_1 = (unsigned __int64)p_n1600085855; /*0x5e29*/
  NameCount_1 = NameCount; /*0x5e2c*/
  v10 = 0; /*0x5e2f*/
  n8 = &_PRS[-p_n1600085855_1]; /*0x5e34*/
  if ( (unsigned __int64)_PRS < p_n1600085855_1 ) /*0x5e37*/
  {
    n8 = (const char *)(p_n1600085855_1 - (_QWORD)_PRS); /*0x5e3d*/
    if ( (unsigned __int64)&_PRS[NameCount] >= p_n1600085855_1 ) /*0x5e43*/
    {
      _PRS += NameCount; /*0x5e45*/
      p_n1600085855_1 += NameCount; /*0x5e48*/
      v10 = 1; /*0x5e4c*/
    }
  }
  if ( NameCount < 8 || (unsigned __int64)n8 < 8 ) /*0x5e59*/
    goto LABEL_19; /*0x5e59*/
  count = (unsigned __int8)_PRS & 7; /*0x5e61*/
  count_1 = p_n1600085855_1 & 7; /*0x5e65*/
  if ( v10 ) /*0x5e6b*/
  {
    --_PRS; /*0x5e6d*/
    --p_n1600085855_1; /*0x5e70*/
  }
  if ( count == count_1 && count ) /*0x5e7b*/
  {
    if ( !v10 ) /*0x5e7f*/
      count = 8 - count; /*0x5e84*/
    qmemcpy((void *)p_n1600085855_1, _PRS, count); /*0x5e8d*/
    _PRS += count; /*0x5e8d*/
    p_n1600085855_1 += count; /*0x5e8d*/
    NameCount_1 = NameCount - count; /*0x5e8f*/
  }
  if ( v10 ) /*0x5e94*/
  {
    _PRS -= 7; /*0x5e96*/
    p_n1600085855_1 -= 7LL; /*0x5e9a*/
  }
  NameCount_2 = NameCount_1; /*0x5e9e*/
  v15 = NameCount_1 >> 3; /*0x5ea1*/
  qmemcpy((void *)p_n1600085855_1, _PRS, 8 * v15); /*0x5ea5*/
  _PRS += 8 * v15; /*0x5ea5*/
  p_n1600085855_1 += 8 * v15; /*0x5ea5*/
  NameCount_3 = NameCount_2 & 7; /*0x5ea8*/
  if ( NameCount_3 ) /*0x5eac*/
  {
    if ( v10 ) /*0x5eb0*/
    {
      _PRS += 8; /*0x5eb2*/
      p_n1600085855_1 += 8LL; /*0x5eb6*/
    }
    NameCount_1 = NameCount_3; /*0x5eba*/
LABEL_19:
    if ( v10 ) /*0x5ebf*/
    {
      --_PRS; /*0x5ec1*/
      --p_n1600085855_1; /*0x5ec4*/
    }
    qmemcpy((void *)p_n1600085855_1, _PRS, NameCount_1); /*0x5ec7*/
  }
  __asm { popf } /*0x5ec9*/
  return p_n1600085855; /*0x5ecc*/
}