From 7b7c0aa91533e22a53d141cbc2f06f0ccd407831 Mon Sep 17 00:00:00 2001 From: dkeruza Date: Sat, 30 Dec 2023 19:38:07 -0500 Subject: [PATCH] ID4 Exp / Hummer and other stuff --- src/lindbergh/config.c | 46 ++++ src/lindbergh/config.h | 1 + src/lindbergh/eeprom_settings.c | 3 +- src/lindbergh/hook.c | 32 ++- src/lindbergh/patch.c | 294 ++++++++++++++++++++++--- src/lindbergh/pcidata.h | 378 +++++++++++++++++++++++++++++++- 6 files changed, 717 insertions(+), 37 deletions(-) mode change 100755 => 100644 src/lindbergh/hook.c diff --git a/src/lindbergh/config.c b/src/lindbergh/config.c index ace2783..7e5de66 100644 --- a/src/lindbergh/config.c +++ b/src/lindbergh/config.c @@ -149,6 +149,20 @@ static int detectGame(uint32_t elf_crc) return 0; } + if (elf_crc == 0x5c18953c) + { + config.game = AFTER_BURNER_CLIMAX_SDX; + config.gameStatus = WORKING; + return 0; + } + + if (elf_crc == 0x9af7cb29) + { + config.game = AFTER_BURNER_CLIMAX_CE; + config.gameStatus = WORKING; + return 0; + } + if (elf_crc == 0x4e9ccf33) { config.game = INITIALD_4; @@ -221,6 +235,34 @@ static int detectGame(uint32_t elf_crc) return 0; } + if (elf_crc == 0xcdbc8069) + { + config.game = PRIMEVAL_HUNT; + config.gameStatus = NOT_WORKING; + return 0; + } + + if (elf_crc == 0xe60d8e04) + { + config.game = GHOST_SQUAD_EVOLUTION; + config.gameStatus = NOT_WORKING; + return 0; + } + + if (elf_crc == 0x14d1292a) + { + config.game = INITIALD_5; + config.gameStatus = NOT_WORKING; + return 0; + } + + if (elf_crc == 0xc85f106a) + { + config.game = HUMMER_EXTREME; + config.gameStatus = NOT_WORKING; + return 0; + } + config.game = UNKNOWN; return 1; } @@ -240,6 +282,8 @@ char *getGameName() return "After Burner Climax SDX"; case AFTER_BURNER_CLIMAX_SDX_REVA: return "After Burner Climax SDX Rev A"; + case AFTER_BURNER_CLIMAX_CE: + return "After Burner Climax CE2"; case GHOST_SQUAD_EVOLUTION: return "Ghost Squad Evolution"; case HARLEY_DAVIDSON: @@ -252,6 +296,8 @@ char *getGameName() return "Hummer Extreme MDX"; case INITIALD_4: return "Initial D Arcade Stage 4"; + case INITIALD_4_REVE: + return "Initial D Arcade Stage 4 EXP"; case INITIALD_5: return "Initial D Arcade Stage 5"; case LETS_GO_JUNGLE: diff --git a/src/lindbergh/config.h b/src/lindbergh/config.h index d5e20b3..51fa823 100644 --- a/src/lindbergh/config.h +++ b/src/lindbergh/config.h @@ -9,6 +9,7 @@ typedef enum AFTER_BURNER_CLIMAX_REVB, AFTER_BURNER_CLIMAX_SDX, AFTER_BURNER_CLIMAX_SDX_REVA, + AFTER_BURNER_CLIMAX_CE, GHOST_SQUAD_EVOLUTION, HARLEY_DAVIDSON, HUMMER, diff --git a/src/lindbergh/eeprom_settings.c b/src/lindbergh/eeprom_settings.c index 1c9bae6..0051978 100644 --- a/src/lindbergh/eeprom_settings.c +++ b/src/lindbergh/eeprom_settings.c @@ -91,7 +91,8 @@ int createStaticSection() unsigned char *buff = &eepromBuffer[eepromOffsetTable[STATIC].offset]; memset(buff, 0, eepromOffsetTable[STATIC].size); buff[14] = 0; - memcpy(buff + 15, "AAGX-01A00009999", 16); + //memcpy(buff + 15, "AAGX-01A00009999", 16); + memcpy(buff + 15, "AALG-TG-933F3904", 16); return 0; } diff --git a/src/lindbergh/hook.c b/src/lindbergh/hook.c old mode 100755 new mode 100644 index dedc090..c5b667c --- a/src/lindbergh/hook.c +++ b/src/lindbergh/hook.c @@ -37,12 +37,13 @@ #define EEPROM 1 #define SERIAL0 2 #define SERIAL1 3 +#define PCI_CARD_000 4 #define CPUINFO 0 #define OSRELEASE 1 #define PCI_CARD_1F0 2 -int hooks[5] = {-1, -1, -1, -1}; +int hooks[5] = {-1, -1, -1, -1, -1}; FILE *fileHooks[3] = {NULL, NULL, NULL}; int fileRead[3] = {0, 0, 0}; char envpath[100]; @@ -238,6 +239,12 @@ int open(const char *pathname, int flags) return _open(pathname + 1, flags); } + if (strcmp(pathname, "/proc/bus/pci/01/00.0") == 0) + { + hooks[PCI_CARD_000] = _open(HOOK_FILE_NAME, flags); + return hooks[PCI_CARD_000]; + } + return _open(pathname, flags); } @@ -297,6 +304,17 @@ FILE *fopen(const char *restrict pathname, const char *restrict mode) fileHooks[PCI_CARD_1F0] = _fopen(HOOK_FILE_NAME, mode); return fileHooks[PCI_CARD_1F0]; } + + char* result; + if((result = strstr(pathname, "/home/disk0")) != NULL) + { + memmove(result + 2, result + 11, strlen(result + 11) + 1); + memcpy(result, "..", 2); + return _fopen(result, mode); + } + + //printf("Path= %s\n", pathname); + return _fopen(pathname, mode); } @@ -438,6 +456,12 @@ ssize_t read(int fd, void *buf, size_t count) return -1; } + if (fd == hooks[PCI_CARD_000]) + { + memcpy(buf, pci_000, count); + return count; + } + return _read(fd, buf, count); } @@ -447,8 +471,8 @@ size_t fread(void *buf, size_t size, size_t count, FILE *stream) if (stream == fileHooks[PCI_CARD_1F0]) { - memcpy(buf, pcidata, 68); - return 68; + memcpy(buf, pci_1f0, size*count); + return size*count; } return _fread(buf, size, count, stream); } @@ -488,6 +512,8 @@ int ioctl(int fd, unsigned int request, void *data) if (fd == hooks[EEPROM]) { + if(request == 0xC04064A0) + return _ioctl(fd, request, data); return eepromIoctl(fd, request, data); } diff --git a/src/lindbergh/patch.c b/src/lindbergh/patch.c index be6d1ca..f8ef5b6 100644 --- a/src/lindbergh/patch.c +++ b/src/lindbergh/patch.c @@ -30,19 +30,18 @@ static void setVariable(uint32_t address, uint32_t value) static void patchMemory(uint32_t address, char *value) { - - size_t size = strlen((void*)value); - printf("Size=%d\n", size); - if(size % 2 != 0) + + size_t size = strlen((void *)value); + if (size % 2 != 0) { printf("Patch value should be even.\n"); exit(1); } - char buf[size/2]; + char buf[size / 2]; char tmpchr[3]; char *p = value; - for(int i=0; i < size; i++) + for (int i = 0; i < size; i++) { memcpy(tmpchr, p, 2); tmpchr[2] = '\0'; @@ -61,7 +60,7 @@ static void patchMemory(uint32_t address, char *value) return; } - memcpy((uint32_t *)address, buf, size/2); + memcpy((uint32_t *)address, buf, size / 2); } static void detourFunction(uint32_t address, void *function) @@ -114,19 +113,30 @@ int amDongleUpdate() return 0; } +int amDongleUserInfoEx(int a, int b, char *_arcadeContext) +{ + if (getConfig()->game == INITIALD_4_REVE) + memcpy(_arcadeContext, "SBNK",4); + else if (getConfig()->game == INITIALD_5) + memcpy(_arcadeContext, "SBPF",4); + else if (getConfig()->game == HUMMER_EXTREME) + memcpy(_arcadeContext, "SBST",4); + return 0; +} + int amLibInit() { - uint32_t *amLibContext = (uint32_t *)0x08dfa2c0; // 0x0809cb00; + uint32_t *amLibContext = (uint32_t *)0x080986c0; // 0x0809cb00; *amLibContext = 1; - uint32_t *amLibInitializad = (uint32_t *)0x08dfa2c4; // 0x0809cb04; - uint16_t *amLibPort1 = (uint16_t *)(0x08dfa2c4 + 4); //(0x0809cb04 + 4); - uint16_t *amLibPort2 = (uint16_t *)(0x08dfa2c4 + 4); //(0x0809cb04 + 6); - uint32_t *bcLibInitialized = (uint32_t *)(0x08dfa2c4 + 8); // 0x0809cb0c; - *amLibInitializad = 1; + uint32_t *amLibInitialized = (uint32_t *)0x080986c4; // 0x0809cb04; + uint16_t *amLibPort1 = (uint16_t *)(0x080986c4 + 4); //(0x0809cb04 + 4); + uint16_t *amLibPort2 = (uint16_t *)(0x080986c4 + 6); //(0x0809cb04 + 6); + uint32_t *bcLibInitialized = (uint32_t *)(0x080986c4 + 8); // 0x0809cb0c; + *amLibInitialized = 1; *amLibPort1 = 0xd000; *amLibPort2 = 0x0004; *bcLibInitialized = 0; - int res = ((int (*)(void))0x084dedc4)(); // 0x08065d80)(); + int res = ((int (*)(void))0x084dedc4)(); // 0x08065d80)(); IDK what it was. if (res == 1) *bcLibInitialized = 1; return 0; @@ -134,10 +144,10 @@ int amLibInit() int amDipswInit() { - uint32_t *amDipswContext = (uint32_t *)0x08df9cec; // 0x0809c12c; - uint32_t *amDipswContext1 = (uint32_t *)(0x08df9cec + 4); //(0x0809c12c + 4); - uint32_t *amDipswContext2 = (uint32_t *)(0x08df9cec + 8); //(0x0809c12c + 8); - uint32_t *amDipswContext3 = (uint32_t *)(0x08df9cec + 12); //(0x0809c12c + 12); + uint32_t *amDipswContext = (uint32_t *)0x080980e8; // 0x0809c12c; + uint32_t *amDipswContext1 = (uint32_t *)(0x080980e8 + 4); //(0x0809c12c + 4); + uint32_t *amDipswContext2 = (uint32_t *)(0x080980e8 + 8); //(0x0809c12c + 8); + uint32_t *amDipswContext3 = (uint32_t *)(0x080980e8 + 12); //(0x0809c12c + 12); // typedef void *(*___constant_c_and_count_memset)(uint32_t *, int, size_t); //___constant_c_and_count_memset func = (___constant_c_and_count_memset)//0x0805c3d5; // func(amDipswContext, 0, 4); @@ -159,7 +169,6 @@ void print_binary(unsigned int number) int amDipswGetData(uint8_t *dip) { - // printf("amDipswGetData Called!!!!!\n"); uint8_t result; uint32_t data; @@ -287,7 +296,7 @@ int initPatch() detourFunction(0x081e48b6, amDipswGetData); detourFunction(0x081e492e, stubRetZero); // Stub amDipswSetLed // Does not work - //setVariable(0x08061c31, 0x0000000c); // Force HD resolution + // setVariable(0x08061c31, 0x0000000c); // Force HD resolution } break; case AFTER_BURNER_CLIMAX_REVB: @@ -317,6 +326,32 @@ int initPatch() detourFunction(0x081e33d2, stubRetZero); // Stub amDipswSetLed } break; + case AFTER_BURNER_CLIMAX_SDX: + { + // Security + detourFunction(0x081e4968, amDongleInit); + detourFunction(0x081e4cb6, amDongleIsAvailable); + detourFunction(0x081e4be2, amDongleUpdate); + patchMemory(0x08064dc4, "9090909090"); + patchMemory(0x08064dca, "00"); + // Fixes + detourFunction(0x081e489e, amDipswGetData); + detourFunction(0x081e4916, stubRetZero); // Stub amDipswSetLed + } + break; + case AFTER_BURNER_CLIMAX_CE: + { + // Security + detourFunction(0x081e3458, amDongleInit); + detourFunction(0x081e37a6, amDongleIsAvailable); + detourFunction(0x081e36d2, amDongleUpdate); + patchMemory(0x08064cfe, "9090909090"); + patchMemory(0x08064d04, "00"); + // Fixes + detourFunction(0x081e338e, amDipswGetData); + detourFunction(0x081e3406, stubRetZero); // Stub amDipswSetLed + } + break; case OUTRUN_2_SP_SDX_REVA: { if (config->debug_msgs == 1) @@ -344,7 +379,18 @@ int initPatch() detourFunction(0x08190e2e, stubRetZero); // Stub amDipswSetLed } break; - + case OUTRUN_2_SP_SDX_REVA_TEST: + { + // Security + detourFunction(0x08066220, amDongleInit); + detourFunction(0x080665a1, amDongleIsAvailable); + detourFunction(0x080664c5, amDongleUpdate); + // Fixes + detourFunction(0x08066156, amDipswGetData); + detourFunction(0x080661ce, stubRetZero); // Stub amDipswSetLed + detourFunction(0x08066044, amDipswInit); + } + break; case THE_HOUSE_OF_THE_DEAD_4: { if (config->debug_msgs == 1) @@ -529,7 +575,7 @@ int initPatch() detourFunction(0x084e50d8, amDongleInit); detourFunction(0x084e5459, amDongleIsAvailable); detourFunction(0x084e537d, amDongleUpdate); - patchMemory(0x0807b76a, "9090"); // Patch initializeArcadeBackup + patchMemory(0x0807b76a, "9090"); // Patch initializeArcadeBackup // Fixes detourFunction(0x084e500e, amDipswGetData); detourFunction(0x084e5086, stubRetZero); // Stub amDipswSetLed @@ -596,7 +642,7 @@ int initPatch() setVariable(0x08d719e0, 2); // bcLibDebugLevel setVariable(0x08d719d4, 2); // amOsinfoDebugLevel setVariable(0x08d719e4, 0x0FFFFFFF); // s_logMask - detourFunction(0x0808f9a8, _putConsole); // Crashes the game sometimes. + //detourFunction(0x0808f9a8, _putConsole); // Crashes the game sometimes. } // Security detourFunction(0x086e2336, amDongleInit); @@ -609,10 +655,32 @@ int initPatch() patchMemory(0x082cb412, "c0270900"); // tickInitStoreNetwork patchMemory(0x082cb6d9, "e950010000"); // tickWaitDHCP // Set Resolution - //patchMemory(0x0835664d, "e9f000"); // Force resolution set + patchMemory(0x0835664d, "e9f000"); // Force resolution set //setVariable(0x08356743, 0x00000780); // Set ResX //setVariable(0x08356748, 0x00000438); // Set ResY - + + // AMDFIX + //uint32_t a = (uint32_t)glProgramEnvParameters4fvEXT; + //uint32_t b = ((a & 0xFF) << 24) | (((a >> 8) & 0xFF) << 16) | (((a >> 16) & 0xFF) << 8) | ((a >> 24) & 0xFF); + + //printf("Address Orig = %p - Address in a = %08x\n", (void*)glProgramEnvParameters4fvEXT, b); + //printf("Address %08x\n", (uint32_t)glProgramEnvParameters4fvEXT); + + //const char *glProgramEnvParameters4fvEXT = "glProgramEnvParameters4fvEXT"; + //memset((void*)0x08813035,0, 28); + patchMemory(0x08812fcc, "676C50726F6772616D456E76506172616D657465727334667645585400"); + //setVariable(0x08524247, 0x08813035); + patchMemory(0x08524247, "CC2F8108"); // glProgramParameters4fvNV + patchMemory(0x08524258, "9090"); // jnz + patchMemory(0x0852443a, "CC2F8108"); // glProgramParameters4fvNV + //setVariable(0x0852443a, a); + patchMemory(0x0852444a, "CC2F8108"); // glProgramParameters4fvNV + //setVariable(0x0852444a, a); + + //FILE *f = fopen("dump.elf", "w+b"); + //fwrite((void*)0x8048000, 0xc23632, 1, f); + //fclose(f); + // FrameBuffer Resolution (No effect that I know) /* setVariable(0x08248037, 0x00000780); // Set ResX @@ -639,8 +707,20 @@ int initPatch() { if (config->debug_msgs == 1) { - // Debug - detourFunction(0x08090478, _putConsole); // Crashes the game sometimes. + setVariable(0x08d972d0, 2); // amBackupDebugLevel + setVariable(0x08d972e0, 2); // amCreditDebugLevel + setVariable(0x08d97538, 2); // amDipswDebugLevel + setVariable(0x08d9753c, 2); // amDongleDebugLevel + setVariable(0x08d97540, 2); // amEepromDebugLevel + setVariable(0x08d97544, 2); // amHwmonitorDebugLevel + setVariable(0x08d97548, 2); // amJvsDebugLevel + setVariable(0x08d9754c, 2); // amLibDebugLevel + setVariable(0x08d97550, 2); // amMiscDebugLevel + setVariable(0x08d97554, 2); // amSysDataDebugLevel + setVariable(0x08d97558, 2); // bcLibDebugLevel + setVariable(0x08d97560, 2); // amOsinfoDebugLevel + setVariable(0x08d97564, 0x0FFFFFFF); // s_logMask + //detourFunction(0x08090478, _putConsole); // Crashes the game sometimes. } // Security detourFunction(0x087106e6, amDongleInit); @@ -652,12 +732,76 @@ int initPatch() detourFunction(0x08230fde, stubRetOne); // isEthLinkUp patchMemory(0x082df87d, "e954010000"); // tickWaitDHCP patchMemory(0x082e0ec9, "eb60"); // tickInitAddress - // setVariable(0x08580979, 0x000126e9); // Avoid Full Screen set from Game + setVariable(0x08580979, 0x000126e9); // Avoid Full Screen set from Game // Set Resolution - // setVariable(0x0837b12d, 0x0000f0e9); // Force set resolution - // setVariable(0x0837b223, 0x00000550); // Set ResX - // setVariable(0x0837b228, 0x00000300); // Set ResY + setVariable(0x0837b12d, 0x0000f0e9); // Force set resolution + setVariable(0x0837b223, 0x00000550); // Set ResX + setVariable(0x0837b228, 0x00000300); // Set ResY // setVariable(0x085700d3, 0x8990c031); // Fix something with the Shaders?? + //Tests + patchMemory(0x081944e7, "9090909090"); // Closedir + patchMemory(0x082082e8, "88fa79"); // ~cRealCardIF + patchMemory(0x087beb6c, "5b"); // seqInitCard::typeinfo + patchMemory(0x087beb7c, "d4"); // seqInitCard::typeinfo + + detourFunction(0x087105ad, amDongleUserInfoEx); + } + break; + case INITIALD_5: + { + + if (config->debug_msgs == 1) + { + setVariable(0x093f6fa0, 2); // amBackupDebugLevel + setVariable(0x093f6fc0, 2); // amCreditDebugLevel + setVariable(0x093f7218, 2); // amDipswDebugLevel + setVariable(0x093f721c, 2); // amDongleDebugLevel + setVariable(0x093f7220, 2); // amEepromDebugLevel + setVariable(0x093f7224, 2); // amHwmonitorDebugLevel + setVariable(0x093f7228, 2); // amJvsDebugLevel + setVariable(0x093f722c, 2); // amLibDebugLevel + setVariable(0x093f7230, 2); // amMiscDebugLevel + setVariable(0x093f7238, 2); // amSysDataDebugLevel + setVariable(0x093f7240, 2); // bcLibDebugLevel + setVariable(0x093f7234, 2); // amOsinfoDebugLevel + setVariable(0x093f7244, 0x0FFFFFFF); // s_logMask + // detourFunction(0x0808f9a8, _putConsole); // Crashes the game sometimes. + patchMemory(0x08942d91, "E912ffffff"); + patchMemory(0x0894375b, "EB29"); + } + // Security + detourFunction(0x0893dd25, amDongleInit); + detourFunction(0x0893c5b1, amDongleIsAvailable); + detourFunction(0x0893d0d2, amDongleUpdate); + // Fixes + detourFunction(0x0893c43d, amDipswGetData); + detourFunction(0x0893c4b3, stubRetZero); // amDipswSetLed + detourFunction(0x0832fca6, stubRetOne); // isEthLinkUp + patchMemory(0x08456348, "e954010000"); // tickWaitDHCP + patchMemory(0x0845843b, "eb60"); // tickInitAddress + patchMemory(0x08455584, "C0270900"); // tickInitStoreNetwork + detourFunction(0x08943eb6, stubRetZero); // amOsinfoExecDhcpNic + detourFunction(0x085135e0, stubRetZero); // isUseServerBox + // Set Resolution + patchMemory(0x0855a48d, "E9f000"); // Accept different Resolutions + setVariable(0x0855a583, 0x00000550); // Set ResX + setVariable(0x0855a588, 0x00000300); // Set ResY + // Tests + patchMemory(0x08a0f78c, "95"); // seqInitialize::childTerminationHandler + patchMemory(0x082923ad, "4851"); // ~cRealCardIF + patchMemory(0x081d7f69, "9090909090"); // closedir function skiped???? + + // amsInit + patchMemory(0x08938437, "00"); // Avoids strBBBlackList + patchMemory(0x089385cb, "e9e7000000"); // Eliminate Dongle Challenges + patchMemory(0x0893871e, "74"); // // Returns 1 + patchMemory(0x0893871a, "01000000"); // Returns 1 + // amsCheckKeyDataVerify + patchMemory(0x08939696, "00000000"); // amsCheckKeyDataVerify + patchMemory(0x0893962b, "00000000"); // amsCheckKeyDataVerify + + detourFunction(0x0893dbeb, amDongleUserInfoEx); + } break; case SEGABOOT_2_4_SYM: @@ -725,6 +869,94 @@ int initPatch() } } break; + case PRIMEVAL_HUNT: + { + // Security + detourFunction(0x08141770, amDongleInit); + detourFunction(0x08140229, amDongleIsAvailable); + detourFunction(0x08140c1f, amDongleUpdate); + patchMemory(0x08055264, "EB"); + // Fixes + detourFunction(0x081400b5, amDipswGetData); + detourFunction(0x0814012c, stubRetZero); + patchMemory(0x08052cb2, "9090909090"); + patchMemory(0x0805206a, "00"); + //test + //patchMemory(0x0804d8be, "909090909090909090909090909090"); + //patchMemory(0x0804e5cf, "909090909090909090909090909090"); + //Res + //setVariable(0x0805af8b, 0x00000438); + //setVariable(0x0805af93, 0x000003c0); + //setVariable(0x0805afa2, 0x000003c0); + //setVariable(0x0805b0ed, 0x00000438); + //setVariable(0x0805aff5, 0x000003c0); + + } + break; + case GHOST_SQUAD_EVOLUTION: + { + if (config->debug_msgs == 1) + { + // Debug + detourFunction(0x080984fe, _putConsole); // Crashes the game sometimes. + } + // Security + detourFunction(0x08183046, amDongleInit); + detourFunction(0x08181a91, amDongleIsAvailable); + detourFunction(0x081824f5, amDongleUpdate); + // Fixes + detourFunction(0x0818191d, amDipswGetData); + detourFunction(0x08181994, stubRetZero); + //patchMemory(0x807c9ec, "01"); + //detourFunction(0x080f3f94, stubRetZero); //eliminates init_heap function. + } + break; + case HUMMER_EXTREME: + { + /* if (config->debug_msgs == 1) + { + setVariable(0x093f6fa0, 2); // amBackupDebugLevel + setVariable(0x093f6fc0, 2); // amCreditDebugLevel + setVariable(0x093f7218, 2); // amDipswDebugLevel + setVariable(0x093f721c, 2); // amDongleDebugLevel + setVariable(0x093f7220, 2); // amEepromDebugLevel + setVariable(0x093f7224, 2); // amHwmonitorDebugLevel + setVariable(0x093f7228, 2); // amJvsDebugLevel + setVariable(0x093f722c, 2); // amLibDebugLevel + setVariable(0x093f7230, 2); // amMiscDebugLevel + setVariable(0x093f7238, 2); // amSysDataDebugLevel + setVariable(0x093f7240, 2); // bcLibDebugLevel + setVariable(0x093f7234, 2); // amOsinfoDebugLevel + setVariable(0x093f7244, 0x0FFFFFFF); // s_logMask + // detourFunction(0x0808f9a8, _putConsole); // Crashes the game sometimes. + patchMemory(0x08942d91, "E912ffffff"); + patchMemory(0x0894375b, "EB29"); + }*/ + // Security + detourFunction(0x0831c0d1, amDongleInit); + detourFunction(0x0831a95d, amDongleIsAvailable); + detourFunction(0x0831b47e, amDongleUpdate); + // Fixes + detourFunction(0x0831a7e9, amDipswGetData); + detourFunction(0x0831a85f, stubRetZero); // amDipswSetLed + + // from TP + //patchMemory(0x080a0ef8, "C3000000"); // smpGlxSetCursos + //patchMemory(0x080a872b, "909090909090909090909090909090"); // glShaderSource + patchMemory(0x080cf7b8, "C3000000"); // iserror + patchMemory(0x080e8b40, "C3000000"); // clSteerErrorDisp::run + patchMemory(0x08171396, "C3000000"); // clErrorDisp::update_ + detourFunction(0x08322dec, stubRetZero); // amOsinfoModifyNetworkAdrNic + detourFunction(0x083238a8, stubRetZero); // amOsinfoGetNetworkPropertyNicEx + patchMemory(0x08361aff, "C3000000"); // ADXM_SetupFramework + patchMemory(0x0836fa92, "C3000000"); // LXSYNC_Init + + detourFunction(0x0831bf97, amDongleUserInfoEx); + + //Force Test for debug + patchMemory(0x0807d4cf, "01"); + } + break; default: // Don't do any patches for random games break; diff --git a/src/lindbergh/pcidata.h b/src/lindbergh/pcidata.h index b9614ee..433303e 100644 --- a/src/lindbergh/pcidata.h +++ b/src/lindbergh/pcidata.h @@ -1,4 +1,4 @@ -const char pcidata[256] = { +const char pci_1f0[256] = { 0x86, 0x80, 0x18, 0x29, 0x03, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x06, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -25,4 +25,378 @@ const char pcidata[256] = { 0x00, 0x00, 0x00 }; -const int pcidata_length = 256; \ No newline at end of file +const char pci_000[4096] = { + 0x02, 0x10, 0x78, 0x14, 0x07, 0x00, 0x10, 0x00, 0xc2, 0x00, 0x04, + 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0xf1, 0xf1, 0x00, 0x00, 0xa0, + 0xfc, 0xb0, 0xfc, 0x01, 0x00, 0xf1, 0x0f, 0x7c, 0x00, 0x00, 0x00, + 0xde, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x12, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x50, 0x08, 0x00, 0x43, + 0x10, 0xec, 0x1d, 0x01, 0x58, 0x03, 0xc8, 0x08, 0x00, 0x00, 0x00, + 0x10, 0xa0, 0x52, 0x00, 0x22, 0x80, 0x2c, 0x01, 0x3f, 0x29, 0x09, + 0x00, 0x84, 0x78, 0x43, 0x00, 0x40, 0x00, 0x84, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x08, 0x33, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x1e, 0x00, 0x80, 0x01, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0x00, 0x01, 0x15, 0x01, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x27, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x20, 0x46, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xa0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x01, + 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x01, + 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x01, 0x40, 0x1f, 0xfa, 0x89, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x25, 0x00, 0x01, 0x41, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x01, 0x44, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0xf1, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, + 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x38, 0x9c, 0x00, 0x00, + 0x38, 0x9c, 0x00, 0x00, 0x38, 0x9c, 0x00, 0x00, 0x38, 0x9c, 0x00, + 0x00, 0x38, 0x9c, 0x00, 0x00, 0x38, 0x9c, 0x00, 0x00, 0x38, 0x9c, + 0x00, 0x00, 0x38, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 +};