уни-патч для линукса и для макоси - Страница 4
X

Привет дорогой друг

Наш сайт существует и развиваетется за счет рекламы. Пожалуйста, отключите блокировку рекламы AdBlock или подобное, для нашего сайта. Спасибо!
Страница 4 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 31 по 40 из 50
  1. #31
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1820 раз(а) в 398 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Цитата Сообщение от HPDX2300 Посмотреть сообщение
    при реализации пункта (2) обнаружил в коде изделия захардкоденую проверку вот этих SN:
    1B93C5D6
    5CEE77A1
    281DCF71
    08ED1E32
    так что не факт, что "наказание" связано с общением по адресу 185.12.152.33:443 (это может быть простой сбор статистики), вообчем дебагер всё покажет и расскажет :-)
    Чтобы убить у "афторофф" факапа 15.11 идею составления "чёрного" списка ключей, покажем им один придуманный ключик, с которым изделие стартует и не жужжит про звездец:
    в дампе ключа прописать эти данные
    Код:
    SN=12345678
    Data=
    01 00 00 00 00 00 00 80 D9 79 C5 23 3B E9 A2 53
    15 21 84 C1 57 3C 48 31 D6 50 2E B0 44 24 84 58
    23 B9 32 7A A1 33 26 41 30 09 70 30 C4 C1 28 38
    99 2A 56 04 CF DB 20 77 3D 2A AC E6 40 4C 6B 12
    D8 29 72 D6 E3 2C 82 DA B4 81 F2 6B AE 26 38 5A
    5B E1 C2 44 2C 33 31 81 2C 92 41 57 EC 5D C3 6C
    B5 C4 21 3D CB 50 C6 DE 27 42 81 C2 35 29 37 BB
    и далее как обычно
    0A 00 FF FF FF ................................
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  2. 18 пользователя(ей) сказали cпасибо:

    Alf500 (09.12.2022), asotel (04.12.2022), BabyChild (03.12.2022), deltaone (04.12.2022), garik-kg (15.12.2022), goodcat999 (15.12.2022), ilya.sh (12.12.2022), kelt44 (03.12.2022), mvl000 (02.02.2023), navisal (04.12.2022), olegtelec (05.12.2022), redhat2020 (03.12.2022), root7 (20.01.2024), Serg2008t (03.12.2022), ura188 (13.12.2022), vovashulga (04.12.2022), wlion (04.12.2022), _BigB_ (03.12.2022)

  3. #32
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1820 раз(а) в 398 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    И совсем уж приятный ключик:

    SN=3D1BB1B7
    Data=
    01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    проверка хаспа скажет про него ОК.
    И ,кстати, в алгоритме тока арифметика и никакой криптографии :-)
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  4. 18 пользователя(ей) сказали cпасибо:

    Alf500 (09.12.2022), asotel (04.12.2022), BabyChild (03.12.2022), deltaone (04.12.2022), garik-kg (15.12.2022), ilya.sh (12.12.2022), kelt44 (03.12.2022), navisal (04.12.2022), Nekii (20.08.2023), olegtelec (05.12.2022), redhat2020 (03.12.2022), root7 (20.01.2024), Serg2008t (03.12.2022), ura188 (13.12.2022), vovashulga (04.12.2022), wlion (04.12.2022), _BigB_ (03.12.2022), Сергей Новик (23.05.2023)

  5. #33
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1820 раз(а) в 398 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    прочитать SN и всю память ключа (в дампе она "Data") можно на любой ОС, где работает клиент изделия. Необходим тока дебагер:
    1) SN ключа возвращается в ответе на вызов "Service 6: HaspID" для локального ключа, и "Service 46: HaspID" для сетевого ключа
    2) память ключа изделие читает вызывая "Service 50: ReadBlock" для локального ключа, и "Service 52: ReadBlock" для сетевого ключа;
    ждать (недолго - секунды) когда случится вызов соответствующего HASP Service (50 или 52) и поменять в стэке параметры на свои
    скачать HASP4 Programmers Guide
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  6. 15 пользователя(ей) сказали cпасибо:

    Alf500 (09.12.2022), dobuza (06.12.2022), ilya.sh (12.12.2022), kelt44 (05.12.2022), navisal (05.12.2022), Nekii (20.08.2023), olegtelec (05.12.2022), redhat2020 (05.12.2022), root7 (20.01.2024), Serg2008t (06.12.2022), ura188 (13.12.2022), vomad (13.12.2022), vovashulga (22.01.2023), _BigB_ (05.12.2022), Сергей Новик (23.05.2023)

  7. #34
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1820 раз(а) в 398 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Продолжаем флудить вычисленными дампами ключей
    Код:
    SN=DEADBEEF
    DATA=
    01 00 00 00 00 00 00 07 CA AE 95 DB D7 F7 A8 B7
    D4 F7 BA 09 45 39 A8 E3 F2 BF EB D4 78 D4 39 57
    DA 68 8B 24 A7 47 32 38 BD 75 30 71 B3 B5 BA 25
    7D DC E5 00 F8 F4 35 E3 04 B0 55 27 EF 84 E6 C2
    F1 B5 A0 6E B5 AC 42 52 97 AF F2 F8 D0 D5 80 ED
    FA FD A2 C2 C9 F8 D5 B2 29 CF 12 57 71 04 0A D2
    E1 A0 03 20 1E 4C C3 8B D1 22 40 FA 27 38 99 54
    64 00 FF FF FF FF FF FF FF FF FF FF FF.........
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  8. 18 пользователя(ей) сказали cпасибо:

    Alf500 (09.12.2022), CDGR (07.12.2022), dobuza (07.12.2022), garik-kg (15.12.2022), ilya.sh (12.12.2022), kelt44 (07.12.2022), navisal (08.12.2022), Nekii (20.08.2023), olegtelec (07.12.2022), redhat2020 (12.02.2023), root7 (20.01.2024), Serg2008t (08.12.2022), Serrrgio (07.12.2022), ura188 (13.12.2022), vovashulga (22.01.2023), wlion (07.12.2022), _BigB_ (07.12.2022), Сергей Новик (23.05.2023)

  9. #35
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1820 раз(а) в 398 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Цитата Сообщение от HPDX2300 Посмотреть сообщение
    прочитать SN и всю память ключа (в дампе она "Data") можно на любой ОС, где работает клиент изделия. Необходим тока дебагер:
    1) SN ключа возвращается в ответе на вызов "Service 6: HaspID" для локального ключа, и "Service 46: HaspID" для сетевого ключа
    2) память ключа изделие читает вызывая "Service 50: ReadBlock" для локального ключа, и "Service 52: ReadBlock" для сетевого ключа;
    ждать (недолго - секунды) когда случится вызов соответствующего HASP Service (50 или 52) и поменять в стэке параметры на свои
    скачать HASP4 Programmers Guide
    маленький лик.без. на примере изделия 18-1563-win32:

    версия платформы может быть любая (даже любая последняя) т.к. код HASP API не меняется (и не будет меняться - проект закрыт аж в 2006 году) - я уже ранее писал об этом в теме про унипатч.
    про про функцию hasp( ): унипатч лечит либу в точке входа в функцию HASP_API_EP, у неё один входной параметр - ссылка на структуру, в которой уложены все параметры функции hasp( ). Если подняться по иерархии вызовов на 2 уровня, то увидим функцию wrap_HASP_API_Level_2, которая по своим входным 9-ти параметрам похожа на hasp( ) - вот её вызовы (не тело!) удобно дебажить, все её аргументы кладутся в стэк.
    wrap_HASP_API_Level_2 вызывает wrap_HASP_API_Level_1, она вызывает HASP_API_EP.

    в 32 битных версиях оригинальный код HASP API содержит много затруднений для неопытного кулхацкера (например, код HASP_API_EP начинается с команды EB FF т.е. JMP -1). Но если не заниматься его отладкой, а ограничиться отладкой вызовов wrap_HASP_API_Level_2, то всё будет в точности как в книжке "HASP4 Programmers Guide"

    левый столбец - адреса в памяти (не изменяются от сессии к сессии т.к. ASLR ещё не используется в этой версии изделия)
    Код:
    1BFA816E:     FF75 20              PUSH DWORD PTR SS:[EBP+20]
    1BFA8171:     FF75 1C              PUSH DWORD PTR SS:[EBP+1C]
    1BFA8174:     FF75 18              PUSH DWORD PTR SS:[EBP+18]
    1BFA8177:     FF75 14              PUSH DWORD PTR SS:[EBP+14]
    1BFA817A:     FF75 10              PUSH DWORD PTR SS:[EBP+10]
    1BFA817D:     FF75 0C              PUSH DWORD PTR SS:[EBP+C]
    1BFA8180:     FF75 08              PUSH DWORD PTR SS:[EBP+8]
    1BFA8183:     56                   PUSH ESI
    1BFA8184:     57                   PUSH EDI
    1BFA8185:     E8 F6960C00          CALL backbas.1C071880              ; это call wrap_HASP_API_Level_2 здесь точка останова
    
    при остановке на  точке останова смотрим в стэк:
    0012F400      00000032  Service ID =0x32=50   Service 50: ReadBlock
    0012F404      00000000  SeedCode
    0012F408      00000066  PortNum
    0012F40C      00003B6D  Password1
    0012F410      000070CB  Password2
    0012F414      0012F480  Param1 \
    0012F418      0012F484  Param2 |  они являются указателями, значение смотреть по адресам ниже
    0012F41C      0012F48C  Param3 |
    0012F420      0012F488  Param4 /
    0012F424      6BE0E632
    0012F428      044B5138
    0012F42C      00003B6D
    0012F430      0012F4D8    Pointer to next SEH record
    0012F434      1C354460    SE handler
    0012F438      00000000
    0012F43C     /0012F4E4
    0012F440     |1BFB6425    RETURN to backbas.1BFB6425 from backbas.1BFA8130
    0012F444     |00000066
    0012F448     |00003B6D
    0012F44C     |000070CB
    0012F450     |0012F480
    0012F454     |0012F484
    0012F458     |0012F48C
    0012F45C     |0012F488
    0012F460     |6BE0E6EA
    0012F464     |0447E310
    0012F468     |00000005
    0012F46C     |0440CB58
    0012F470     |0012F50C
    0012F474     |00000000
    0012F478     |000070CB
    0012F47C     |00000066
    0012F480     |00000038   значение Param1  (Start Address, in words - initial HASP memory address for reading the block)
    0012F484     |00000002   значение Param2  (Block Length, in words - The block size)
    0012F488     |04404F50   значение Param4  (Buffer Offset - address of a program buffer т.е. это указатель на buffer, куда будет прочитано 2 слова {38-e и 39-е} из памяти ключа)
    0012F48C     |00000000   значение Param3
    Последний раз редактировалось HPDX2300; 08.12.2022 в 00:08.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  10. 20 пользователя(ей) сказали cпасибо:

    Alf500 (09.12.2022), andrmit (09.12.2022), bnmbnmbnm (17.12.2022), garik-kg (15.12.2022), ilya.sh (12.12.2022), kelt44 (08.12.2022), navisal (08.12.2022), olegtelec (08.12.2022), PaIIItet (08.12.2022), redhat2020 (12.02.2023), rednomads (11.12.2022), Renzes (13.12.2022), root7 (20.01.2024), Serg2008t (08.12.2022), ura188 (13.12.2022), vovashulga (22.01.2023), wlion (08.12.2022), zed_ds (13.12.2022), _BigB_ (08.12.2022), Сергей Новик (23.05.2023)

  11. #36
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1820 раз(а) в 398 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Цитата Сообщение от HPDX2300 Посмотреть сообщение
    при реализации пункта (2) обнаружил в коде изделия захардкоденую проверку вот этих SN:
    1B93C5D6
    5CEE77A1
    281DCF71
    08ED1E32
    годится тока для изделий под линукс-х64:
    1) берём МС и находим в модулях четыре процитированных выше SN
    2) в модулях изделия hex редактором забиваем эти SN нулями (00 00 00 00)
    3) применяем унипатч со старыми дампами (см. пост #21 от 21.06.2022)
    усё будет шуршать. А "придуманные" дампы нехороши тем, что примерно через 73мин будет крах (или segfault, или "ключ больше не доступен") - я пока занят изучением этих "шестерёнок", но изложенное выше тоже хорошая пилюля.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  12. 19 пользователя(ей) сказали cпасибо:

    bnmbnmbnm (28.12.2022), detect (29.12.2022), dimbor2 (15.01.2023), freeraider (05.01.2023), garik-kg (28.12.2022), ilya.sh (08.01.2023), kelt44 (28.12.2022), olegtelec (30.12.2022), redhat2020 (12.02.2023), root7 (20.01.2024), sanek_potapov (03.01.2023), Serg2008t (28.12.2022), Timothy6551 (04.01.2023), tria (06.01.2023), ura188 (28.12.2022), vovashulga (22.01.2023), z8491 (29.12.2022), _BigB_ (28.12.2022), Сергей Новик (23.05.2023)

  13. #37
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1820 раз(а) в 398 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Алгоритм вычисления Data=function(SN) "придуманных" дампов доработан.
    Используйте ТГ-бота https://t.me/mimomutagen_bot на свой страх и риск (я не его автор).
    Не следует ожидать совпадения поля Data с реальными данными из физических ключей с таким же SN - секта не давала посмотреть исходники.
    Данные в поле Data созданы так, чтобы они прошли 2-х этапную проверку в коде изделия.

    Унипатч доработан так, чтобы можно было легко изменять в текстовом редакторе используемые им дампы.
    В первых строках скрипта меняете пары {SERVER_KEY_SN, SERVER_KEY_Data} и {CLIENT_KEY_SN, CLIENT_KEY_Data}.

    Унипатч теперь правильно эмулирует сетевой HASP-API, в диалоге "About" отображается число спартанцев сетевого ключа.
    Это на практике проявляется так: сперва вы запускали изделие с помощью парочки эмулятор+HASPLM, изделие запомнило в файле 1cv8conn.pfl последний успешный путь получения лицензии на запуск (от сетевого HASPLM), при следующем запуске читается файл 1cv8conn.pfl и выполняется попытка получить лицензию также как прошлый раз. Если теперь либа патчена унипатчем, то унипатч честно выполнит эмуляцию сетевого HASPLM, и в диалоге "О программе" --> "Лицензия:" будет написано "Текущая: Сетевой HASP4 ORGL8 100" (Сетевой, а не локальный)

    Порядок байтов во всех полях, и, в частности, в CLIENT_KEY_SN - как в исполняемых модулях для процессора Intel - младший байт идет первым

    Я подставил в скрипте данные из публичных дампов от мультика с непалёными SN.
    Внимание: не все поля в дампе надо менять. Впрочем, делайте как хотите, ибо это допускается.
    Выхлоп скрипта в stdout будет содержать инфу о дампах SERVER_KEY и CLIENT_KEY.

    повторим для "чайников":
    это патчер изделия для линукса-x64
    код ниже сохранить в файл unipatch.py
    запускать так (либа бэкбейс должна быть рядом - в том же каталоге):
    python3 unipatch.py
    если предварительно выполнить:
    chmod +x unipatch.py
    , то запускать можно будеть так:
    ./unipatch.py
    Код:
    #!/usr/bin/env python3
    import sys, os, glob, mmap
    
    SERVER_KEY_PASSWORD = bytearray(b'\x7A\x23\x25\x41')
    SERVER_KEY_SN       = bytearray(b'\x9E\xAE\xA3\x33')
    SERVER_KEY_HASPTYPE = bytearray(b'\x01\x00\x00\x00')
    SERVER_KEY_MEMORYSIZE=bytearray(b'\x01\x00\x00\x00')
    SERVER_KEY_SecTable  =bytearray(b'\x15\xea\x8f\xea\x73\xea\xeb\xea')
    SERVER_KEY_Data=bytearray(b'\
    \x01\x00\x00\x00\x00\x00\x00\xE0\x6E\xF3\x62\xF8\x08\x0A\xEF\x77\
    \xCB\x1E\xFD\xDD\xFA\x76\xFF\x43\xF9\x3E\xC9\xEF\xA5\x61\xA1\xC3\
    \x72\x9F\x8C\xCA\x35\xD4\x3E\x66\x79\x1F\x3F\x32\x51\x36\x5C\x00\
    \x03\xCD\xBE\x20\x2E\x72\x54\xE9\xEC\x7E\x5C\xC3\xD6\x3F\xCA\x4B\
    \x4B\x8D\xED\xEA\x13\xCA\xA5\xA8\x5E\x4C\xD6\x4D\x60\xAF\xF1\xAD\
    \xD7\x80\x15\xB8\xEE\xA9\x8B\x4A\xAB\xA7\x29\xA0\x55\x9A\x55\xE0\
    \x30\xD7\xDA\x1C\xD8\x83\xBB\xF6\x6A\x03\xB1\x05\xBF\x2B\x9A\x93')
    SERVER_KEY_LicNum = bytearray(b'\x01\x00')
    
    CLIENT_KEY_PASSWORD = bytearray(b'\xCB\x70\x6D\x3B')
    CLIENT_KEY_SN       = bytearray(b'\xD5\x77\xDD\x26')
    CLIENT_KEY_HASPTYPE = bytearray(b'\x0A\x00\x00\x00')
    CLIENT_KEY_MEMORYSIZE=bytearray(b'\x04\x00\x00\x00')
    CLIENT_KEY_SecTable  =bytearray(b'\x9A\x21\x2C\x25\xDE\x65\x6C\x65')
    CLIENT_KEY_Data=bytearray(b'\
    \x01\x00\x00\x00\x00\x00\x00\x40\xDF\xAF\x94\xAE\x97\x17\x47\xD5\
    \x08\x77\xC3\x10\xA2\x8E\xFE\xA6\xFF\x39\x40\x01\x57\xA4\x9B\xBD\
    \xFE\xBA\x1D\x82\xED\xFF\xA3\x50\xA7\x6F\x97\x74\x38\x02\x78\xCA\
    \x89\xCC\x65\x98\x61\x2C\x7D\x94\xB4\x5A\x52\xD4\x93\xF7\x25\x5F\
    \x50\xCB\xDB\xC3\x62\xAA\x4D\x44\x61\x66\x56\xAA\x75\xA6\x07\x70\
    \x0A\x35\x03\xB7\x65\x4F\x07\xB2\x84\x7B\xB6\xEF\x4D\x65\x1B\x45\
    \x12\x19\x0C\x96\xEE\xAF\x57\x91\x50\x21\x07\xD4\xAC\x20\x55\xCB')
    CLIENT_KEY_LicNum = bytearray(b'\x64\x00')
    
    pattern = bytearray(b'\x41\x81\x78\x08\x6C\x68\x73\x68')
    unipatch = bytearray(b'\x51\x53\x52\x57\x56\xE8\x88\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA0\x00\x00\x00\x00\x00\x00\x00\xA4\x00\x00\x00\x00\x00\x00\x00\xA8\x00\x00\x00\x00\x00\x00\x00\xAC\x00\x00\x00\x00\x00\x00\x00\xB0\x00\x00\x00\x00\x00\x00\x00\xB1\x00\x00\x00\x00\x00\x00\x00\xB2\x00\x00\x00\x00\x00\x00\x00\xFA\x00\x00\x00\x00\x00\x00\x00\xFA\x10\x00\x00\x00\x00\x00\x00\x06\x11\x00\x00\x00\x00\x00\x00\xC4\x10\x00\x00\x00\x00\x00\x00\xC8\x10\x00\x00\x00\x00\x00\x00\xCC\x10\x00\x00\x00\x00\x00\x00\xD0\x10\x00\x00\x00\x00\x00\x00\xD4\x10\x00\x00\x00\x00\x00\x00\xD5\x10\x00\x00\x00\x00\x00\x00\xD6\x10\x00\x00\x00\x00\x00\x00\x1E\x11\x00\x00\x00\x00\x00\x00\x0E\x13\x00\x00\x00\x00\x00\x00\x1A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFB\x13\\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x57\x42\x50\x54\x01\x00\x00\x00\x70\x00\x00\x00\x00\x00\x21\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x01\x02\x4A\x1F\x01\x18\x02\x08\x01\x14\x2C\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xDB\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\xFE\xFF\x00\x01\x02\x4A\x1F\x01\x04\x07\x08\x01\x10\x34\x07\x00\x5E\x48\x89\xC9\x48\x31\xC0\x48\x31\xD2\x8A\x41\x16\x89\x06\x48\x89\xF3\x48\x83\xC6\x10\x48\x83\xF8\x01\x75\x0D\xC6\x41\x28\x01\xC6\x41\x30\x00\xE9\x32\x02\x00\x00\x66\x8B\x51\x20\xC1\xE2\x10\x66\x8B\x51\x24\x48\x8B\x3E\x3B\x14\x3E\x75\x02\x74\x10\x48\x83\xC6\x50\x48\x8B\x3E\x3B\x14\x3E\x0F\x85\x0D\x02\x00\x00\x89\x53\x04\x48\x89\x73\x08\x48\x83\xF8\x03\x74\x06\x48\x83\xF8\x2C\x75\x21\x48\x03\x76\x38\x48\x31\xC0\x8B\x41\x28\x48\xD1\xE0\x48\x0F\xB7\x04\x06\x89\x41\x2C\xC7\x41\x30\x00\x00\x00\x00\xE9\xD9\x01\x00\x00\x48\x83\xF8\x68\x75\x27\x48\x03\x76\x38\xB8\x70\x00\x00\x00\x48\x0F\xB7\x04\x06\xC7\x41\x28\x01\x00\x00\x00\x89\x41\x2C\x89\x41\x30\xC7\x41\x34\xFF\xFF\x00\x00\xE9\xAC\x01\x00\x00\x48\x83\xF8\x05\x75\x2A\x48\x31\xC0\x48\x8B\x56\x18\x8B\x04\x16\x89\x41\x28\x48\x8B\x56\x10\x8B\x04\x16\x89\x41\x2C\xC7\x41\x30\xDE\x00\x00\x00\xC7\x41\x34\x3C\x23\x00\x00\xE9\x7C\x01\x00\x00\x48\x83\xF8\x06\x74\x05\x83\xF8\x2E\x75\x22\x48\x03\x76\x08\x48\x31\xC0\x8B\x06\x48\x0F\xB7\xF8\xC1\xE8\x10\x89\x79\x28\x89\x41\x2C\xC7\x41\x30\x00\x00\x00\x00\xE9\x4F\x01\x00\x00\x48\x83\xF8\x28\x75\x1A\xC7\x41\x28\x00\x00\x00\x00\xC7\x41\x2C\x00\x00\x00\x00\xC7\x41\x30\x00\x00\x00\x00\xE9\x2F\x01\x00\x00\x48\x83\xF8\x2A\x75\x0C\xC7\x41\x30\x00\x00\x00\x00\xE9\x1D\x01\x00\x00\x48\x83\xF8\x2B\x75\x0C\xC7\x41\x30\x00\x00\x00\x00\xE9\x0B\x01\x00\x00\x48\x83\xF8\x30\x75\x05\xE9\x00\x01\x00\x00\x48\x83\xF8\x32\x74\x06\x48\x83\xF8\x34\x75\x32\x48\x03\x76\x38\x48\x31\xC0\x48\x8B\x79\x40\x8B\x41\x28\x48\xD1\xE0\x48\x01\xC6\x48\x89\xC8\x48\x31\xC9\x8B\x48\x2C\x9C\xFC\xF3\x66\xA5\x9D\x48\x89\xC1\xC7\x41\x30\x00\x00\x00\x00\xE9\xC2\x00\x00\x00\x83\xF8\x33\x74\x06\x48\x83\xF8\x33\x75\x35\x48\x03\x76\x38\x48\x31\xC0\x48\x8B\x79\x40\x8B\x41\x28\x48\xD1\xE0\x48\x01\xC6\x48\x89\xC8\x48\x31\xC9\x8B\x48\x2C\x48\x87\xF7\x9C\xFC\xF3\x66\xA5\x9D\x48\x89\xC1\xC7\x41\x30\x00\x00\x00\x00\xE9\x82\x00\x00\x00\x83\xF8\x3C\x74\x05\x83\xF8\x58\x75\x31\x83\x79\x2C\x08\x72\x72\x51\x48\x81\xEC\x00\x01\x00\x00\x49\x89\xE0\x48\x31\xD2\x8B\x51\x2C\x48\x8B\x49\x40\xE8\x85\x0B\x00\x00\x48\x81\xC4\x00\x01\x00\x00\x59\xC7\x41\x30\x00\x00\x00\x00\xEB\x47\x83\xF8\x3D\x74\x05\x83\xF8\x59\x75\x31\x83\x79\x2C\x08\x72\x37\x51\x48\x31\xD2\x8B\x51\x2C\x48\x8B\x49\x40\x48\x81\xEC\x00\x01\x00\x00\x49\x89\xE0\xE8\x34\x10\x00\x00\x48\x81\xC4\x00\x01\x00\x00\x59\xC7\x41\x30\x00\x00\x00\x00\xEB\x0C\x83\xF8\x55\x75\x02\xEB\x05\xB8\x78\x56\x34\x12\x5E\x5F\x5A\x5B\x59\xC3\x56\x57\x48\x89\xD6\x48\x89\xCF\x31\xC9\x44\x89\xC1\xF3\xA4\x5F\x5E\xC3\x48\x89\x54\x24\x10\x89\x4C\x24\x08\x48\x83\xEC\x18\x8B\x44\x24\x20\x83\xE0\x1F\x89\x44\x24\x20\x8B\x44\x24\x20\xC1\xE8\x02\x25\xFE\x00\x00\x00\x48\x8B\x4C\x24\x28\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x20\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x88\x44\x24\x04\x0F\xB6\x44\x24\x04\x83\xF0\x01\x8B\x4C\x24\x20\xC1\xE9\x03\x21\xC8\x8B\x4C\x24\x20\x31\xC1\x89\xC8\x8B\x4C\x24\x20\xC1\xE9\x04\x31\xC8\x89\x04\x24\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x0A\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x07\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x02\x85\xC0\x74\x15\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x05\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x04\x85\xC0\x74\x15\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x08\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x04\x24\x83\xE0\x01\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x01\xC1\xE0\x02\x48\x8B\x4C\x24\x28\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x40\x0F\xD1\xE0\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x0C\x24\x8B\x40\x0F\x09\xC8\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x0B\x0F\xB6\x4C\x24\x04\x31\xC8\x83\xE0\x01\x48\x83\xC4\x18\xC3\x48\x89\x54\x24\x10\x48\x89\x4C\x24\x08\x48\x83\xEC\x48\xC7\x44\x24\x30\x1F\x00\x00\x00\x48\x8B\x44\x24\x58\x8B\x40\x14\x89\x44\x24\x20\x8B\x44\x24\x20\x35\x89\x19\x08\x01\x89\x44\x24\x20\x8B\x44\x24\x20\xC1\xE8\x0C\x89\x44\x24\x20\xC7\x44\x24\x24\x0A\x00\x00\x00\xEB\x0A\x8B\x44\x24\x24\xFF\xC8\x89\x44\x24\x24\x83\x7C\x24\x24\x05\x76\x69\x0F\xB6\x44\x24\x20\x83\xE0\x0F\x89\x44\x24\x2C\x83\x7C\x24\x2C\x00\x74\x0A\xC7\x44\x24\x38\x01\x00\x00\x00\xEB\x08\xC7\x44\x24\x38\x00\x00\x00\x00\x83\x7C\x24\x2C\x0B\x73\x0A\xC7\x44\x24\x3C\x01\x00\x00\x00\xEB\x08\xC7\x44\x24\x3C\x00\x00\x00\x00\x8B\x44\x24\x3C\x8B\x4C\x24\x38\x21\xC1\x89\xC8\x8B\x4C\x24\x24\xD3\xE0\x8B\x4C\x24\x30\x09\xC1\x89\xC8\x89\x44\x24\x30\x8B\x44\x24\x20\xC1\xE8\x04\x89\x44\x24\x20\xEB\x86\x8B\x44\x24\x30\xC1\xE8\x06\x48\x8B\x4C\x24\x58\x88\x41\x13\x48\x8B\x44\x24\x58\x0F\xB6\x40\x13\xC1\xE0\x06\x83\xC8\x1F\x48\x8B\x4C\x24\x58\x89\x41\x0F\xC7\x44\x24\x24\x01\x00\x00\x00\xC7\x44\x24\x28\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x24\xFF\xC0\x89\x44\x24\x24\x83\x7C\x24\x24\x27\x77\x6A\x8B\x44\x24\x28\x48\x8B\x4C\x24\x50\x0F\xB6\x04\x01\x48\x8B\x54\x24\x58\x89\xC1\xE8\xA6\xFD\xFF\xFF\x89\x44\x24\x34\x48\x8B\x44\x24\x50\x8B\x00\x83\xE0\x01\xD1\xE0\x0B\x44\x24\x34\x89\x44\x24\x28\x48\x8B\x44\x24\x50\x8B\x00\x83\xE0\x01\x3B\x44\x24\x34\x75\x12\x48\x8B\x44\x24\x50\x8B\x00\xD1\xE8\x48\x8B\x4C\x24\x50\x89\x01\xEB\x15\x48\x8B\x44\x24\x50\x8B\x00\xD1\xE8\x35\x62\x00\x50\x80\x48\x8B\x4C\x24\x50\x89\x01\xEB\x85\x48\x83\xC4\x48\xC3\x48\x89\x4C\x24\x08\x48\x83\xEC\x48\x48\x8B\x44\x24\x50\x0F\xB6\x40\x01\xC1\xF8\x05\x83\xE0\x01\x48\x8B\x4C\x24\x50\x88\x41\x0A\x48\x8B\x44\x24\x50\x0F\xB6\x40\x02\xC1\xF8\x07\x83\xE0\x01\x83\xF0\x01\x88\x44\x24\x24\x0F\xB6\x44\x24\x24\x85\xC0\x74\x0E\x48\x8B\x44\x24\x50\x0F\xB6\x00\x89\x44\x24\x3C\xEB\x0E\x48\x8B\x44\x24\x50\x0F\xB6\x00\xF7\xD0\x89\x44\x24\x3C\x0F\xB6\x44\x24\x3C\x88\x44\x24\x26\xC7\x44\x24\x28\x00\x00\x00\x00\x48\x8B\x44\x24\x50\x0F\xB6\x40\x01\x83\xE0\x1F\x88\x44\x24\x25\xC7\x44\x24\x2C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x2C\xFF\xC0\x89\x44\x24\x2C\x83\x7C\x24\x2C\x04\x7D\x3D\x0F\xB6\x44\x24\x28\xC0\xE0\x02\x88\x44\x24\x28\x0F\xB6\x44\x24\x25\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x83\xF1\x01\x83\xE1\x01\xD1\xE1\x09\xC8\x0F\xB6\x4C\x24\x28\x09\xC1\x89\xC8\x88\x44\x24\x28\x0F\xB6\x44\x24\x25\xD0\xE8\x88\x44\x24\x25\xEB\xB2\x0F\xB6\x44\x24\x28\x35\xFF\x00\x00\x00\x88\x44\x24\x2A\x0F\xB6\x44\x24\x28\x88\x44\x24\x29\x0F\xB6\x44\x24\x2A\x88\x44\x24\x2B\xC7\x44\x24\x2C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x2C\xFF\xC0\x89\x44\x24\x2C\x83\x7C\x24\x2C\x08\x0F\x8D\x9F\x00\x00\x00\x8B\x44\x24\x2C\x83\xC0\x08\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\x8B\x4C\x24\x2C\x83\xC1\x08\xBA\x1F\x00\x00\x00\x29\xCA\x89\xD1\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x31\xC8\x8B\x4C\x24\x2C\xD3\xE0\x0F\xB6\x4C\x24\x29\x31\xC1\x89\xC8\x88\x44\x24\x29\x8B\x44\x24\x2C\x83\xC0\x18\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\x8B\x4C\x24\x2C\x83\xC1\x18\xBA\x1F\x00\x00\x00\x29\xCA\x89\xD1\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x31\xC8\x8B\x4C\x24\x2C\xD3\xE0\x0F\xB6\x4C\x24\x2B\x31\xC1\x89\xC8\x88\x44\x24\x2B\xE9\x4C\xFF\xFF\xFF\x48\x8B\x44\x24\x50\xC7\x40\x0B\x00\x00\x00\x00\xC7\x44\x24\x20\x00\x00\x00\x00\xC7\x44\x24\x30\x1F\x00\x00\x00\xEB\x0A\x8B\x44\x24\x30\xFF\xC8\x89\x44\x24\x30\x83\x7C\x24\x30\x00\x0F\x8C\xA4\x00\x00\x00\x0F\xB6\x44\x24\x26\xC1\xE0\x03\x48\x8B\x4C\x24\x50\x89\x41\x0F\xC7\x44\x24\x38\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x38\xFF\xC0\x89\x44\x24\x38\x83\x7C\x24\x38\x0C\x7D\x14\x48\x8B\x54\x24\x50\x8B\x4C\x24\x30\xE8\xA6\x00\x00\x00\x88\x44\x24\x34\xEB\xDB\x8B\x44\x24\x20\xD1\xE0\x89\x44\x24\x20\x8B\x44\x24\x30\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x30\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x8B\x4C\x24\x30\x83\xE1\x01\x31\xC8\x8B\x4C\x24\x30\x8B\x54\x24\x28\xD3\xEA\x89\xD1\x83\xE1\x01\x31\xC8\x0F\xB6\x4C\x24\x34\x31\xC8\x8B\x4C\x24\x20\x09\xC1\x89\xC8\x89\x44\x24\x20\xE9\x47\xFF\xFF\xFF\x48\x8B\x44\x24\x50\x8B\x4C\x24\x20\x89\x48\x0B\x0F\xB6\x44\x24\x26\xC1\xE0\x03\x0F\xB6\x4C\x24\x24\xC1\xE1\x02\x09\xC8\x0F\xB6\x4C\x24\x24\xD1\xE1\x09\xC8\x0F\xB6\x4C\x24\x24\x09\xC8\x48\x8B\x4C\x24\x50\x89\x41\x0F\x48\x83\xC4\x48\xC3\x48\x89\x54\x24\x10\x89\x4C\x24\x08\x48\x83\xEC\x28\x8B\x44\x24\x30\x83\xE0\x1F\x89\x44\x24\x30\x8B\x44\x24\x30\xD1\xE8\x83\xE0\x03\xE8\x10\x00\x00\x00\x80\x04\x00\x00\xA0\x04\x00\x00\x80\x05\x00\x00\xA0\x05\x00\x00\x59\x8B\x04\x81\x89\x44\x24\x04\xC7\x44\x24\x08\x00\x00\x00\x00\xC7\x44\x24\x0C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x0C\xFF\xC0\x89\x44\x24\x0C\x83\x7C\x24\x0C\x0C\x7D\x3D\x8B\x44\x24\x0C\x0F\xB6\xC8\x8B\x44\x24\x04\xD3\xE8\x83\xE0\x01\x85\xC0\x74\x27\x8B\x44\x24\x0C\x48\x8B\x4C\x24\x38\x48\x89\x4C\x24\x10\x0F\xB6\xC8\x48\x8B\x44\x24\x10\x8B\x40\x0F\xD3\xE8\x8B\x4C\x24\x08\x31\xC1\x89\xC8\x89\x44\x24\x08\xEB\xB2\x8B\x44\x24\x30\x83\xE0\x01\xC1\xE0\x02\x48\x8B\x4C\x24\x38\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x8B\x44\x24\x30\xC1\xE8\x02\x25\xFE\x00\x00\x00\x48\x8B\x4C\x24\x38\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x30\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x48\x8B\x4C\x24\x38\x0F\xB6\x49\x0A\x31\xC8\x88\x04\x24\x48\x8B\x44\x24\x38\x8B\x40\x0F\xD1\xE0\x0F\xB6\x0C\x24\x8B\x54\x24\x08\x31\xCA\x89\xD1\x83\xE1\x01\x09\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x8B\x44\x24\x30\x48\x8B\x4C\x24\x38\x48\x89\x4C\x24\x18\x0F\xB6\xC8\x48\x8B\x44\x24\x18\x8B\x40\x0B\xD3\xE8\x83\xE0\x01\x48\x8B\x4C\x24\x38\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x48\x8B\x44\x24\x38\x8B\x40\x0F\xC1\xE8\x0B\x0F\xB6\x0C\x24\x31\xC8\x83\xE0\x01\x48\x83\xC4\x28\xC3\x48\x89\x54\x24\x10\x48\x89\x4C\x24\x08\x48\x83\xEC\x38\x48\x8B\x44\x24\x48\x83\x78\x14\x00\x74\x14\x48\x8B\x54\x24\x48\x48\x8B\x4C\x24\x40\xE8\x3F\xFA\xFF\xFF\xE9\x97\x00\x00\x00\x48\x8B\x4C\x24\x48\xE8\xA6\xFB\xFF\xFF\xC7\x44\x24\x20\x01\x00\x00\x00\xC7\x44\x24\x24\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x20\xFF\xC0\x89\x44\x24\x20\x83\x7C\x24\x20\x27\x77\x6A\x8B\x44\x24\x24\x48\x8B\x4C\x24\x40\x0F\xB6\x04\x01\x48\x8B\x54\x24\x48\x89\xC1\xE8\x2E\xFE\xFF\xFF\x89\x44\x24\x28\x48\x8B\x44\x24\x40\x8B\x00\x83\xE0\x01\xD1\xE0\x0B\x44\x24\x28\x89\x44\x24\x24\x48\x8B\x44\x24\x40\x8B\x00\x83\xE0\x01\x3B\x44\x24\x28\x75\x12\x48\x8B\x44\x24\x40\x8B\x00\xD1\xE8\x48\x8B\x4C\x24\x40\x89\x01\xEB\x15\x48\x8B\x44\x24\x40\x8B\x00\xD1\xE8\x35\x62\x00\x50\x80\x48\x8B\x4C\x24\x40\x89\x01\xEB\x85\x48\x83\xC4\x38\xC3\x49\x89\xE3\x48\x83\xEC\x68\x45\x85\xC0\x49\x89\x5B\xF8\x49\x89\x6B\xF0\x49\x89\x73\xE8\x49\x89\x7B\xE0\x4D\x89\x63\xD8\x44\x8B\x61\x04\x44\x89\xC5\x48\x89\xD6\x48\x89\xCB\x45\x89\xE1\x45\x89\x63\xC8\x74\x26\x49\x8D\x4B\xC8\x49\x89\x4B\xB8\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\xD0\x1D\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\xE2\xFE\xFF\xFF\x44\x8B\x4C\x24\x30\x8B\x03\x44\x31\xC8\x89\xC1\x44\x31\xE0\x35\xC3\x25\x34\x80\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x02\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x04\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x06\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x08\x33\x03\x89\xC2\x35\xC3\x25\x34\x80\xC1\xC0\x0A\x89\x13\x31\xC8\x85\xED\x48\x8B\x6C\x24\x58\x89\x43\x04\x41\x89\xC4\x89\xC2\x89\x44\x24\x34\x74\x27\x48\x8D\x4C\x24\x34\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\x5D\x1E\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\x55\xFE\xFF\xFF\x8B\x54\x24\x34\x44\x8B\x4C\x24\x30\x8B\x03\x48\x8B\x7C\x24\x48\x31\xD0\x89\xC1\x44\x31\xE0\x4C\x8B\x64\x24\x40\x35\x4A\x00\x2C\x5B\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x05\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0A\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0F\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x14\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x19\x33\x03\x48\x85\xF6\x89\x0B\x89\x43\x04\x48\x8B\x5C\x24\x60\x74\x06\x44\x89\x0E\x89\x56\x04\x48\x8B\x74\x24\x50\x48\x83\xC4\x68\xC3\x48\x83\xEC\x08\x4C\x8D\x0C\x24\x41\xB8\x01\x00\x00\x00\x49\x89\x09\x8B\x41\x5C\x48\xC1\xE0\x20\x8B\x49\x12\x48\x09\xC1\x48\x89\xCA\x48\x83\xC2\x08\xE8\x6E\xFE\xFF\xFF\x48\x83\xC4\x08\xC3\x49\x89\xE3\x48\x83\xEC\x68\x49\x89\x5B\xF8\x48\x89\xCB\x49\x89\x6B\xF0\x49\x89\x73\xE8\x49\x89\x7B\xE0\x4C\x89\xCF\x44\x8B\x09\x4D\x89\x63\xD8\x45\x89\xC4\x44\x89\xC8\x48\x89\xD6\x35\x4A\x00\x2C\x5B\xC1\xC0\x19\x33\x41\x04\x44\x89\x49\x04\x89\x01\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x14\x89\x4B\x04\x44\x31\xC8\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0F\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0A\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x05\x33\x43\x04\x89\x4B\x04\x89\xC1\x8B\x43\x04\x31\xC8\x89\x4B\x04\x35\x4A\x00\x2C\x5B\x45\x85\xE4\x89\x03\x89\xC5\x41\x89\xC0\x89\x44\x24\x34\x74\x37\x48\x8B\x07\x49\x8D\x4B\xCC\x44\x0F\xB7\x48\x1E\x44\x0F\xB7\x40\x0C\x0F\xB7\x50\x08\x49\x89\x4B\xB8\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\xE1\x1F\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\xD1\xFC\xFF\xFF\x44\x8B\x44\x24\x34\x8B\x43\x04\x44\x31\xC0\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x0A\x89\x4B\x04\x31\xE8\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x08\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x06\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x04\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x02\x33\x43\x04\x89\xC2\x89\xC8\x31\xD0\x89\x53\x04\x35\xC3\x25\x34\x80\x45\x85\xE4\x4C\x8B\x64\x24\x40\x89\x03\x89\xC5\x89\xC1\x89\x44\x24\x30\x74\x3D\x48\x8B\x07\x48\x8D\x4C\x24\x30\x44\x0F\xB7\x48\x1E\x44\x0F\xB7\x40\x0C\x0F\xB7\x50\x08\x48\x89\x4C\x24\x20\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\x8E\x20\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\x24\xFC\xFF\xFF\x44\x8B\x44\x24\x34\x8B\x4C\x24\x30\x8B\x43\x04\x48\x8B\x7C\x24\x48\x89\x6B\x04\x48\x8B\x6C\x24\x58\x31\xC8\x48\x85\xF6\x89\x03\x48\x8B\x5C\x24\x60\x74\x06\x89\x0E\x44\x89\x46\x04\x48\x8B\x74\x24\x50\x48\x83\xC4\x68\xC3\x48\x83\xEC\x08\x4C\x8D\x0C\x24\x41\xB8\x01\x00\x00\x00\x49\x89\x09\x8B\x41\x5C\x48\xC1\xE0\x20\x8B\x49\x12\x48\x09\xC1\x48\x89\xCA\x48\x83\xC2\x08\xE8\x23\xFE\xFF\xFF\x48\x83\xC4\x08\xC3\x48\x89\xE0\x48\x81\xEC\xE8\x00\x00\x00\x48\x89\x58\x08\x48\x89\x68\x10\x48\x89\x70\x18\x48\x89\x78\x20\x4C\x89\x60\xF8\x4C\x89\x68\xF0\x4C\x89\x70\xE8\x4C\x89\x78\xE0\xB8\x08\x00\x00\x00\x44\x8D\x72\x07\x41\x89\xD7\x4C\x89\xC5\x41\xC1\xEE\x03\x41\x83\xE7\x07\x48\x89\xCB\x44\x0F\x44\xF8\x45\x31\xC9\x41\x8D\x46\xFF\x85\xC0\x44\x89\x7C\x24\x28\x44\x89\x4C\x24\x24\x45\x89\xC8\x44\x89\x4C\x24\x20\x45\x89\xCD\x45\x8D\x51\x02\x0F\x84\x7A\x02\x00\x00\x48\x8B\x7C\x24\x30\x44\x8B\x64\x24\x54\x4D\x89\xD7\x44\x31\x03\x44\x31\x4B\x04\x45\x85\xED\x8B\x0B\x8B\x53\x04\x0F\x85\x16\x01\x00\x00\x45\x39\xFE\x0F\x86\xDB\x00\x00\x00\x66\x44\x89\x6D\x10\x48\x8B\x03\x48\x89\xE9\x48\x89\x44\x24\x38\x48\x8D\x44\x24\x38\x48\x89\x7C\x24\x40\x89\x45\x12\x48\x8D\x44\x24\x38\x66\x44\x89\x7D\x16\x48\xC1\xE8\x20\x66\x44\x89\x6D\x3E\x89\x45\x5C\xE8\x1C\xFD\xFF\xFF\x48\x8B\x7C\x24\x40\x48\x8B\x44\x24\x38\x48\x89\x7C\x24\x30\x8B\x74\x24\x34\x48\x89\x03\x89\x7C\x24\x50\x48\x8D\x54\x24\x54\x66\x44\x89\x6D\x16\x45\x8D\x45\x05\x8B\x4A\xFC\x48\x83\xC2\x14\x8D\x04\x31\x83\xE1\x1F\x89\x42\xEC\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xEC\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF0\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF0\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF4\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF4\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF8\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF8\x8D\x04\x31\x83\xE1\x1F\x89\x42\xFC\x44\x8B\x64\x24\x54\x89\xF8\xD3\xC8\x41\x31\xC4\x49\xFF\xC8\x44\x89\x64\x24\x54\x75\x8A\xE9\x42\x01\x00\x00\x48\x89\xD8\x48\x89\xE9\x66\xC7\x45\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x45\x16\x01\x00\x66\xC7\x45\x3E\x00\x00\x89\x45\x5C\x89\x5D\x12\xE8\x52\xFC\xFF\xFF\x66\xC7\x45\x16\x00\x00\xE9\x10\x01\x00\x00\x8B\x44\x24\x50\x46\x8D\x04\x21\x4C\x8D\x4C\x24\x5C\x8D\x34\x02\x44\x89\x03\x4D\x89\xFA\x89\x73\x04\x44\x89\xC1\x44\x89\xC2\x49\x83\xC1\x30\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xCC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xD0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xD4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xD8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xDC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xE0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xE4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xE8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xEC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xF0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xF4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xF8\x49\xFF\xCA\x0F\x85\x0F\xFF\xFF\xFF\x44\x89\x03\x89\x73\x04\x44\x8B\x03\x44\x8B\x4B\x04\x41\x8D\x46\xFF\x41\xFF\xC5\x48\x83\xC3\x08\x44\x89\x44\x24\x20\x41\x39\xC5\x44\x89\x4C\x24\x24\x0F\x82\xA0\xFD\xFF\xFF\x44\x8B\x7C\x24\x28\x41\xBA\x02\x00\x00\x00\xEB\x05\x44\x8B\x64\x24\x54\x45\x85\xFF\x4C\x8B\xAC\x24\xD8\x00\x00\x00\x74\x2C\x48\x8D\x44\x24\x20\x48\x89\xDF\x48\x8D\x4C\x24\x20\x48\x29\xC7\x44\x89\xFA\x0F\xB6\x04\x0F\x48\xFF\xC1\x30\x41\xFF\x48\xFF\xCA\x75\xF1\x44\x8B\x4C\x24\x24\x44\x8B\x44\x24\x20\x41\x83\xFE\x02\x0F\x86\xFF\x00\x00\x00\x44\x03\x4C\x24\x50\x48\x8D\x74\x24\x5C\x45\x01\xE0\x44\x89\xC1\x44\x89\xC2\x48\x83\xC6\x30\xC1\xE9\x04\x44\x31\xCA\x83\xE1\x1F\xD3\xC2\x2B\x56\xCC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xD0\x44\x89\xC1\x44\x89\xC7\xC1\xE9\x04\x31\xD7\x83\xE1\x1F\xD3\xC7\x2B\x7E\xD4\x41\x31\xF8\x89\xF9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xD8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xFA\x83\xE1\x1F\xD3\xC2\x2B\x56\xDC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xE0\x44\x89\xC1\x44\x89\xC7\xC1\xE9\x04\x31\xD7\x83\xE1\x1F\xD3\xC7\x2B\x7E\xE4\x41\x31\xF8\x89\xF9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xE8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xFA\x83\xE1\x1F\xD3\xC2\x2B\x56\xEC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xF0\x44\x89\xC1\x45\x89\xC1\xC1\xE9\x04\x41\x31\xD1\x83\xE1\x1F\x41\xD3\xC1\x44\x2B\x4E\xF4\x45\x31\xC8\x44\x89\xC9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xF8\x49\xFF\xCA\x0F\x85\x10\xFF\xFF\xFF\xEB\x51\x41\x83\xFE\x01\x75\x0D\x8B\x03\x89\x44\x24\x20\x8B\x43\x04\x89\x44\x24\x24\x48\x8D\x44\x24\x20\x48\x89\xE9\x66\xC7\x45\x10\x00\x00\x89\x45\x12\x48\x8D\x44\x24\x20\x66\xC7\x45\x16\x01\x00\x48\xC1\xE8\x20\x66\xC7\x45\x3E\x00\x00\x89\x45\x5C\xE8\x7D\xF9\xFF\xFF\x44\x8B\x4C\x24\x24\x44\x8B\x44\x24\x20\x66\xC7\x45\x16\x00\x00\x4C\x8B\xA4\x24\xE0\x00\x00\x00\x48\x8B\xAC\x24\xF8\x00\x00\x00\x41\x83\xFE\x01\x4C\x8B\xB4\x24\xD0\x00\x00\x00\x76\x1B\x45\x85\xFF\x74\x0C\x48\x8D\x73\xF8\x44\x89\xF9\x48\x89\xDF\xF3\xA4\x44\x89\x43\xF8\x44\x89\x4B\xFC\xEB\x07\x44\x89\x03\x44\x89\x4B\x04\x4C\x8B\xBC\x24\xC8\x00\x00\x00\x48\x8B\xBC\x24\x08\x01\x00\x00\x48\x8B\xB4\x24\x00\x01\x00\x00\x48\x8B\x9C\x24\xF0\x00\x00\x00\x48\x81\xC4\xE8\x00\x00\x00\xC3\x48\x89\xE0\x48\x81\xEC\xF8\x00\x00\x00\x48\x89\x58\x08\x48\x89\x68\x10\x48\x89\x70\x18\x48\x89\x78\x20\x4C\x89\x60\xF8\x4C\x89\x68\xF0\x4C\x89\x70\xE8\x4C\x89\x78\xE0\x48\x89\xCB\x8D\x4A\x07\x89\xD0\xBA\x08\x00\x00\x00\xC1\xE9\x03\x83\xE0\x07\x4C\x89\xC7\x0F\x44\xC2\x45\x31\xFF\x83\xF9\x01\x89\x4C\x24\x30\x44\x8D\x62\x04\x44\x89\x7C\x24\x2C\x44\x89\x7C\x24\x34\x44\x89\x7C\x24\x28\x45\x89\xFE\x89\x44\x24\x38\x0F\x86\x9F\x01\x00\x00\x83\xC1\xFE\x44\x89\xFE\x89\x4C\x24\x20\x0F\x84\x8F\x01\x00\x00\x48\x8B\x44\x24\x40\x44\x8B\x6C\x24\x64\x8B\x6C\x24\x60\x85\xF6\x44\x8B\x03\x44\x8B\x73\x04\x45\x89\xC7\x44\x89\x44\x24\x28\x0F\x85\xEE\x00\x00\x00\x48\x89\x44\x24\x50\x48\x8D\x44\x24\x48\x66\x89\x77\x10\x48\x8B\x0B\x89\x47\x12\x48\x8D\x44\x24\x48\x48\xC1\xE8\x20\x48\x89\x4C\x24\x48\x48\x89\xF9\x66\xC7\x47\x16\x02\x00\x66\x89\x77\x3E\x89\x47\x5C\xE8\x0E\xFA\xFF\xFF\x48\x8B\x44\x24\x48\x4C\x8D\x44\x24\x64\x48\x89\x03\x48\x8B\x44\x24\x50\x44\x8D\x56\x05\x48\x89\x44\x24\x40\x44\x8B\x4C\x24\x44\x66\x89\x77\x16\x89\x44\x24\x60\x41\x8B\x48\xFC\x49\x83\xC0\x14\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xEC\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xEC\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF0\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF0\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF4\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF4\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF8\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF8\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xFC\x44\x8B\x6C\x24\x64\x89\xC2\xD3\xCA\x41\x31\xD5\x49\xFF\xCA\x44\x89\x6C\x24\x64\x0F\x85\x77\xFF\xFF\xFF\x8B\x6C\x24\x60\xEB\x4B\x45\x89\xE3\x45\x89\xF1\x4C\x8D\x94\x24\xC0\x00\x00\x00\x45\x2B\x42\x04\x44\x89\xC9\x49\x83\xEA\x08\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC8\x45\x31\xC8\x45\x03\x4A\x08\x44\x89\xC1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC9\x45\x31\xC1\x41\x83\xC3\xFF\x75\xD0\x45\x29\xE8\x41\x29\xE9\x44\x89\x4B\x04\x44\x89\x03\x8B\x4C\x24\x34\xFF\xC6\x48\x83\xC3\x08\x31\x4B\xF8\x8B\x4C\x24\x2C\x44\x89\x7C\x24\x34\x31\x4B\xFC\x3B\x74\x24\x20\x44\x89\x74\x24\x2C\x0F\x82\x88\xFE\xFF\xFF\x8B\x44\x24\x38\x45\x31\xFF\xEB\x09\x44\x8B\x6C\x24\x64\x8B\x6C\x24\x60\x85\xC0\x44\x89\x7C\x24\x20\x44\x89\xFE\x44\x89\x7C\x24\x24\x74\x1A\x48\x8D\x53\x08\x48\x8D\x4C\x24\x20\x41\x89\xC0\xE8\xB8\xED\xFF\xFF\x8B\x74\x24\x24\x44\x8B\x7C\x24\x20\x44\x8B\x5C\x24\x30\x41\x83\xFB\x01\x75\x32\x48\x89\xD8\x48\x89\xF9\x66\xC7\x47\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x47\x16\x01\x00\x66\xC7\x47\x3E\x00\x00\x89\x47\x5C\x89\x5F\x12\xE8\x75\xF8\xFF\xFF\x66\xC7\x47\x16\x00\x00\xE9\x29\x01\x00\x00\x41\x83\xFB\x02\x75\x34\x48\x89\xD8\x48\x89\xF9\x66\xC7\x47\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x47\x16\x01\x00\x66\xC7\x47\x3E\x00\x00\x89\x47\x5C\x89\x5F\x12\xE8\x3D\xF8\xFF\xFF\x44\x8B\x5C\x24\x30\x66\xC7\x47\x16\x00\x00\xEB\x55\x8B\x13\x44\x8B\x43\x04\x45\x89\xE2\x4C\x8D\x8C\x24\xC0\x00\x00\x00\x41\x2B\x51\x04\x44\x89\xC1\x49\x83\xE9\x08\xC1\xE9\x07\x83\xE1\x1F\xD3\xCA\x44\x31\xC2\x45\x03\x41\x08\x89\xD1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC8\x41\x31\xD0\x41\x83\xC2\xFF\x75\xD2\x44\x29\xEA\x41\x29\xE8\x41\x83\xFB\x01\x89\x13\x44\x89\x43\x04\x0F\x86\x9A\x00\x00\x00\x44\x33\x3B\x33\x73\x04\x8B\x44\x24\x38\x85\xC0\x44\x89\x7C\x24\x20\x89\x74\x24\x24\x74\x31\x4C\x8D\x44\x24\x20\x49\x89\xD9\x48\x8D\x4B\x08\x4D\x29\xC1\x49\x89\xC0\x48\x8D\x54\x24\x20\x0F\xB6\x01\x48\xFF\xC1\x48\xFF\xC2\x49\xFF\xC8\x41\x88\x44\x11\xFF\x0F\xB6\x42\xFF\x88\x41\xFF\x75\xE6\x41\x83\xFB\x02\x0F\x84\xED\xFE\xFF\xFF\x8B\x13\x44\x8B\x43\x04\x4C\x8D\x8C\x24\xC0\x00\x00\x00\x41\x2B\x51\x04\x44\x89\xC1\x49\x83\xE9\x08\xC1\xE9\x07\x83\xE1\x1F\xD3\xCA\x44\x31\xC2\x45\x03\x41\x08\x89\xD1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC8\x41\x31\xD0\x41\x83\xC4\xFF\x75\xD2\x44\x29\xEA\x41\x29\xE8\x44\x89\x43\x04\x89\x13\x8B\x44\x24\x28\x4C\x8B\xBC\x24\xD8\x00\x00\x00\x4C\x8B\xAC\x24\xE8\x00\x00\x00\x31\x03\x44\x31\x73\x04\x4C\x8B\xA4\x24\xF0\x00\x00\x00\x4C\x8B\xB4\x24\xE0\x00\x00\x00\x48\x8B\x9C\x24\x00\x01\x00\x00\x48\x8B\xBC\x24\x18\x01\x00\x00\x48\x8B\xB4\x24\x10\x01\x00\x00\x48\x8B\xAC\x24\x08\x01\x00\x00\x48\x81\xC4\xF8\x00\x00\x00\xC3\xCC\xCC\xCC\xCC\x57\x59\xE9\xF9\xD5\xFF\xFF')
    
    fullfname=os.getcwd()+'/backbas.so'
    
    
    a=0xBA
    unipatch[a:a+4]=SERVER_KEY_PASSWORD
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_SN
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_HASPTYPE
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_MEMORYSIZE
    a=a+6
    unipatch[a:a+8]=SERVER_KEY_SecTable
    a=a+0x48
    unipatch[a:a+0x70]=SERVER_KEY_Data
    a=a+0x70
    unipatch[a:a+2]=SERVER_KEY_LicNum
    
    
    a=0x112E
    unipatch[a:a+4]=CLIENT_KEY_PASSWORD
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_SN
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_HASPTYPE
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_MEMORYSIZE
    a=a+6
    unipatch[a:a+8]=CLIENT_KEY_SecTable
    a=a+0x48
    unipatch[a:a+0x70]=CLIENT_KEY_Data
    a=a+0x70
    unipatch[a:a+2]=CLIENT_KEY_LicNum
    
    
    try:
      fp = open(fullfname, 'r+')
      if os.stat(fp.name).st_size > 0:
        mm = mmap.mmap(fp.fileno(), 0)
    
      # WTF? "to smoke": man 5 elf
      if mm[0]!=0x7f or mm[1]!=0x45 or mm[2]!=0x4C or mm[3]!=0x46 or mm[4]!=2 or mm[5]!=1 or mm[6]!=1 or mm[16]!=3 or mm[17]!=0 or mm[18]!=0x3E or mm[19]!=0:
        print ("what a fuck are you giving me?")
        sys.exit()
      e_phoff = mm[0x20]+(mm[0x21]+(mm[0x22]+(mm[0x23]<<8)<<8)<<8)
      print (f"e_phoff = {hex(e_phoff)}")
      e_phentsize = mm[0x36]+(mm[0x37]<<8)
      print (f"e_phentsize = {hex(e_phentsize)}")
      e_phnum = mm[0x38]+(mm[0x39]<<8)
      print (f"e_phnum = {hex(e_phnum)}")
      for i in range(e_phnum):
        p = e_phoff + i * e_phentsize
        p_type  = mm[p]+(mm[p+1]+(mm[p+2]+(mm[p+3]<<8)<<8)<<8)
        p_flags = mm[p+4]+(mm[p+5]+(mm[p+6]+(mm[p+7]<<8)<<8)<<8)
        if (p_type==1 and p_flags==5):
          print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}")
          print(f"mm[{hex(p+4)}] += PF_W")
          mm[p+4] = 7
          break
        else:
          print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}")
      pattern_addr = mm.find(pattern)
      if pattern_addr != -1:
        unipatch_addr=pattern_addr-0x2A75
        print (f"patching  {fullfname}  at offset={hex(unipatch_addr)}")
        mm[unipatch_addr:unipatch_addr+0x2A07] = unipatch
    
      mm.close()
    except IOError as e:
      print (f"I/O error({e.errno}): {e.strerror}, filename={fullfname}")
    
    
    
    print ('#############_SERVER_KEY_INFO_#################', sep='', end='')
    print ('')
    a=0xBA
    print ('SERVER_KEY_PASSWORD:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('SERVER_KEY_SN:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('SERVER_KEY_HASPTYPE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('SERVER_KEY_MEMORYSIZE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+6
    print ('SERVER_KEY_SecTable:', sep='', end=' ')
    for i in range(a,a+8):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+0x48
    print ('SERVER_KEY_Data:', sep='', end='\n')
    for i in range(a,a+0x70,16):  
      for k in range(0,16):
        print (format(unipatch[i+k],'02X'), sep='', end=' ')
      print ('')
    a=a+0x70
    print ('SERVER_KEY_LicNum:', sep='', end=' ')
    for i in range(a,a+2):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    
    print ('#############_CLIENT_KEY_INFO_#################', sep='', end='')
    print ('')
    a=0x112E
    print ('CLIENT_KEY_PASSWORD:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('CLIENT_KEY_SN:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('CLIENT_KEY_HASPTYPE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('CLIENT_KEY_MEMORYSIZE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+6
    print ('CLIENT_KEY_SecTable:', sep='', end=' ')
    for i in range(a,a+8):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+0x48
    print ('CLIENT_KEY_Data:', sep='', end='\n')
    for i in range(a,a+0x70,16):  
      for k in range(0,16):
        print (format(unipatch[i+k],'02X'), sep='', end=' ')
      print ('')
    
    a=a+0x70
    print ('CLIENT_KEY_LicNum:', sep='', end=' ')
    for i in range(a,a+2):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    Последний раз редактировалось HPDX2300; 17.01.2023 в 22:19.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  14. 16 пользователя(ей) сказали cпасибо:

    asotel (17.01.2023), bnmbnmbnm (18.01.2023), g0ga (18.01.2023), garik-kg (18.01.2023), ilya.sh (18.01.2023), kelt44 (18.01.2023), m491c (10.05.2023), olegtelec (18.01.2023), redhat2020 (17.01.2023), root7 (20.01.2024), Serg2008t (18.01.2023), Serrrgio (18.01.2023), ura188 (17.01.2023), vovashulga (22.01.2023), _BigB_ (17.01.2023), Сергей Новик (23.05.2023)

  15. #38
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1820 раз(а) в 398 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Цитата Сообщение от HPDX2300 Посмотреть сообщение
    годится тока для изделий под линукс-х64:
    1) берём МС и находим в модулях четыре процитированных выше SN
    2) в модулях изделия hex редактором забиваем эти SN нулями (00 00 00 00)
    3) применяем унипатч со старыми дампами (см. пост #21 от 21.06.2022)
    речь шла о backbas.so и vrsbase.so
    Код:
    #!/usr/bin/env python3
    import sys, os, glob, mmap
    
    try:
      fullfname=os.getcwd()+'/backbas.so'
      fp = open(fullfname, 'r+')
      mm = mmap.mmap(fp.fileno(), 0)
    
      pattern_addr = mm.find(b'\x32\x1E\xED\x08')
      if pattern_addr != -1:
        print (f"patching SN=08ED1E32 in {fullfname}  at offset={hex(pattern_addr)}")
        mm[pattern_addr:pattern_addr+4] = b'\x00\x00\x00\x00'
    
      pattern_addr = mm.find(b'\xD6\xC5\x93\x1B')
      if pattern_addr != -1:
        print (f"patching SN=1B93C5D6 in {fullfname}  at offset={hex(pattern_addr)}")
        mm[pattern_addr:pattern_addr+4] = b'\x00\x00\x00\x00'
    
      pattern_addr = mm.find(b'\x71\xCF\x1D\x28')
      if pattern_addr != -1:
        print (f"patching SN=281DCF71 in {fullfname}  at offset={hex(pattern_addr)}")
        mm[pattern_addr:pattern_addr+4] = b'\x00\x00\x00\x00'
    
      pattern_addr = mm.find(b'\xA1\x77\xEE\x5C')
      if pattern_addr != -1:
        print (f"patching SN=5CEE77A1 in {fullfname}  at offset={hex(pattern_addr)}")
        mm[pattern_addr:pattern_addr+4] = b'\x00\x00\x00\x00'
    
      mm.close()
    
    
    
    
      fullfname=os.getcwd()+'/vrsbase.so'
      fp = open(fullfname, 'r+')
      mm = mmap.mmap(fp.fileno(), 0)
    
      pattern_addr = mm.find(b'\x32\x1E\xED\x08')
      if pattern_addr != -1:
        print (f"patching SN=08ED1E32 in {fullfname}  at offset={hex(pattern_addr)}")
        mm[pattern_addr:pattern_addr+4] = b'\x00\x00\x00\x00'
    
      pattern_addr = mm.find(b'\xD6\xC5\x93\x1B')
      if pattern_addr != -1:
        print (f"patching SN=1B93C5D6 in {fullfname}  at offset={hex(pattern_addr)}")
        mm[pattern_addr:pattern_addr+4] = b'\x00\x00\x00\x00'
    
      pattern_addr = mm.find(b'\x71\xCF\x1D\x28')
      if pattern_addr != -1:
        print (f"patching SN=281DCF71 in {fullfname}  at offset={hex(pattern_addr)}")
        mm[pattern_addr:pattern_addr+4] = b'\x00\x00\x00\x00'
    
      pattern_addr = mm.find(b'\xA1\x77\xEE\x5C')
      if pattern_addr != -1:
        print (f"patching SN=5CEE77A1 in {fullfname}  at offset={hex(pattern_addr)}")
        mm[pattern_addr:pattern_addr+4] = b'\x00\x00\x00\x00'
    
      mm.close()
    
    except IOError as e:
      print (f"I/O error({e.errno}): {e.strerror}, filename={fullfname}")
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  16. 12 пользователя(ей) сказали cпасибо:

    g0ga (18.01.2023), garik-kg (18.01.2023), ilya.sh (18.01.2023), kelt44 (18.01.2023), olegtelec (18.01.2023), redhat2020 (12.02.2023), root7 (20.01.2024), Serg2008t (18.01.2023), Serrrgio (18.01.2023), vovashulga (22.01.2023), _BigB_ (17.01.2023), Сергей Новик (23.05.2023)

  17. #39
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1820 раз(а) в 398 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    в скрипте была опечатка (\\x вместо \x), редактировать уже не дает - повторим его
    Цитата Сообщение от HPDX2300 Посмотреть сообщение
    Алгоритм вычисления Data=function(SN) "придуманных" дампов доработан.
    Используйте ТГ-бота https://t.me/mimomutagen_bot на свой страх и риск (я не его автор).
    Не следует ожидать совпадения поля Data с реальными данными из физических ключей с таким же SN - секта не давала посмотреть исходники.
    Данные в поле Data созданы так, чтобы они прошли 2-х этапную проверку в коде изделия.

    Унипатч доработан так, чтобы можно было легко изменять в текстовом редакторе используемые им дампы.
    В первых строках скрипта меняете пары {SERVER_KEY_SN, SERVER_KEY_Data} и {CLIENT_KEY_SN, CLIENT_KEY_Data}.

    Унипатч теперь правильно эмулирует сетевой HASP-API, в диалоге "About" отображается число спартанцев сетевого ключа.
    Это на практике проявляется так: сперва вы запускали изделие с помощью парочки эмулятор+HASPLM, изделие запомнило в файле 1cv8conn.pfl последний успешный путь получения лицензии на запуск (от сетевого HASPLM), при следующем запуске читается файл 1cv8conn.pfl и выполняется попытка получить лицензию также как прошлый раз. Если теперь либа патчена унипатчем, то унипатч честно выполнит эмуляцию сетевого HASPLM, и в диалоге "О программе" --> "Лицензия:" будет написано "Текущая: Сетевой HASP4 ORGL8 100" (Сетевой, а не локальный)

    Порядок байтов во всех полях, и, в частности, в CLIENT_KEY_SN - как в исполняемых модулях для процессора Intel - младший байт идет первым

    Я подставил в скрипте данные из публичных дампов от мультика с непалёными SN.
    Внимание: не все поля в дампе надо менять. Впрочем, делайте как хотите, ибо это допускается.
    Выхлоп скрипта в stdout будет содержать инфу о дампах SERVER_KEY и CLIENT_KEY.

    повторим для "чайников":
    это патчер изделия для линукса-x64
    код ниже сохранить в файл unipatch.py
    запускать так (либа бэкбейс должна быть рядом - в том же каталоге):
    python3 unipatch.py
    если предварительно выполнить:
    chmod +x unipatch.py
    , то запускать можно будеть так:
    ./unipatch.py
    Код:
    #!/usr/bin/env python3
    import sys, os, glob, mmap
    
    SERVER_KEY_PASSWORD = bytearray(b'\x7A\x23\x25\x41')
    SERVER_KEY_SN       = bytearray(b'\x9E\xAE\xA3\x33')
    SERVER_KEY_HASPTYPE = bytearray(b'\x01\x00\x00\x00')
    SERVER_KEY_MEMORYSIZE=bytearray(b'\x01\x00\x00\x00')
    SERVER_KEY_SecTable  =bytearray(b'\x15\xea\x8f\xea\x73\xea\xeb\xea')
    SERVER_KEY_Data=bytearray(b'\
    \x01\x00\x00\x00\x00\x00\x00\xE0\x6E\xF3\x62\xF8\x08\x0A\xEF\x77\
    \xCB\x1E\xFD\xDD\xFA\x76\xFF\x43\xF9\x3E\xC9\xEF\xA5\x61\xA1\xC3\
    \x72\x9F\x8C\xCA\x35\xD4\x3E\x66\x79\x1F\x3F\x32\x51\x36\x5C\x00\
    \x03\xCD\xBE\x20\x2E\x72\x54\xE9\xEC\x7E\x5C\xC3\xD6\x3F\xCA\x4B\
    \x4B\x8D\xED\xEA\x13\xCA\xA5\xA8\x5E\x4C\xD6\x4D\x60\xAF\xF1\xAD\
    \xD7\x80\x15\xB8\xEE\xA9\x8B\x4A\xAB\xA7\x29\xA0\x55\x9A\x55\xE0\
    \x30\xD7\xDA\x1C\xD8\x83\xBB\xF6\x6A\x03\xB1\x05\xBF\x2B\x9A\x93')
    SERVER_KEY_LicNum = bytearray(b'\x01\x00')
    
    CLIENT_KEY_PASSWORD = bytearray(b'\xCB\x70\x6D\x3B')
    CLIENT_KEY_SN       = bytearray(b'\xD5\x77\xDD\x26')
    CLIENT_KEY_HASPTYPE = bytearray(b'\x0A\x00\x00\x00')
    CLIENT_KEY_MEMORYSIZE=bytearray(b'\x04\x00\x00\x00')
    CLIENT_KEY_SecTable  =bytearray(b'\x9A\x21\x2C\x25\xDE\x65\x6C\x65')
    CLIENT_KEY_Data=bytearray(b'\
    \x01\x00\x00\x00\x00\x00\x00\x40\xDF\xAF\x94\xAE\x97\x17\x47\xD5\
    \x08\x77\xC3\x10\xA2\x8E\xFE\xA6\xFF\x39\x40\x01\x57\xA4\x9B\xBD\
    \xFE\xBA\x1D\x82\xED\xFF\xA3\x50\xA7\x6F\x97\x74\x38\x02\x78\xCA\
    \x89\xCC\x65\x98\x61\x2C\x7D\x94\xB4\x5A\x52\xD4\x93\xF7\x25\x5F\
    \x50\xCB\xDB\xC3\x62\xAA\x4D\x44\x61\x66\x56\xAA\x75\xA6\x07\x70\
    \x0A\x35\x03\xB7\x65\x4F\x07\xB2\x84\x7B\xB6\xEF\x4D\x65\x1B\x45\
    \x12\x19\x0C\x96\xEE\xAF\x57\x91\x50\x21\x07\xD4\xAC\x20\x55\xCB')
    CLIENT_KEY_LicNum = bytearray(b'\x64\x00')
    
    pattern = bytearray(b'\x41\x81\x78\x08\x6C\x68\x73\x68')
    unipatch = bytearray(b'\x51\x53\x52\x57\x56\xE8\x88\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA0\x00\x00\x00\x00\x00\x00\x00\xA4\x00\x00\x00\x00\x00\x00\x00\xA8\x00\x00\x00\x00\x00\x00\x00\xAC\x00\x00\x00\x00\x00\x00\x00\xB0\x00\x00\x00\x00\x00\x00\x00\xB1\x00\x00\x00\x00\x00\x00\x00\xB2\x00\x00\x00\x00\x00\x00\x00\xFA\x00\x00\x00\x00\x00\x00\x00\xFA\x10\x00\x00\x00\x00\x00\x00\x06\x11\x00\x00\x00\x00\x00\x00\xC4\x10\x00\x00\x00\x00\x00\x00\xC8\x10\x00\x00\x00\x00\x00\x00\xCC\x10\x00\x00\x00\x00\x00\x00\xD0\x10\x00\x00\x00\x00\x00\x00\xD4\x10\x00\x00\x00\x00\x00\x00\xD5\x10\x00\x00\x00\x00\x00\x00\xD6\x10\x00\x00\x00\x00\x00\x00\x1E\x11\x00\x00\x00\x00\x00\x00\x0E\x13\x00\x00\x00\x00\x00\x00\x1A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFB\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x57\x42\x50\x54\x01\x00\x00\x00\x70\x00\x00\x00\x00\x00\x21\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x01\x02\x4A\x1F\x01\x18\x02\x08\x01\x14\x2C\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xDB\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\xFE\xFF\x00\x01\x02\x4A\x1F\x01\x04\x07\x08\x01\x10\x34\x07\x00\x5E\x48\x89\xC9\x48\x31\xC0\x48\x31\xD2\x8A\x41\x16\x89\x06\x48\x89\xF3\x48\x83\xC6\x10\x48\x83\xF8\x01\x75\x0D\xC6\x41\x28\x01\xC6\x41\x30\x00\xE9\x32\x02\x00\x00\x66\x8B\x51\x20\xC1\xE2\x10\x66\x8B\x51\x24\x48\x8B\x3E\x3B\x14\x3E\x75\x02\x74\x10\x48\x83\xC6\x50\x48\x8B\x3E\x3B\x14\x3E\x0F\x85\x0D\x02\x00\x00\x89\x53\x04\x48\x89\x73\x08\x48\x83\xF8\x03\x74\x06\x48\x83\xF8\x2C\x75\x21\x48\x03\x76\x38\x48\x31\xC0\x8B\x41\x28\x48\xD1\xE0\x48\x0F\xB7\x04\x06\x89\x41\x2C\xC7\x41\x30\x00\x00\x00\x00\xE9\xD9\x01\x00\x00\x48\x83\xF8\x68\x75\x27\x48\x03\x76\x38\xB8\x70\x00\x00\x00\x48\x0F\xB7\x04\x06\xC7\x41\x28\x01\x00\x00\x00\x89\x41\x2C\x89\x41\x30\xC7\x41\x34\xFF\xFF\x00\x00\xE9\xAC\x01\x00\x00\x48\x83\xF8\x05\x75\x2A\x48\x31\xC0\x48\x8B\x56\x18\x8B\x04\x16\x89\x41\x28\x48\x8B\x56\x10\x8B\x04\x16\x89\x41\x2C\xC7\x41\x30\xDE\x00\x00\x00\xC7\x41\x34\x3C\x23\x00\x00\xE9\x7C\x01\x00\x00\x48\x83\xF8\x06\x74\x05\x83\xF8\x2E\x75\x22\x48\x03\x76\x08\x48\x31\xC0\x8B\x06\x48\x0F\xB7\xF8\xC1\xE8\x10\x89\x79\x28\x89\x41\x2C\xC7\x41\x30\x00\x00\x00\x00\xE9\x4F\x01\x00\x00\x48\x83\xF8\x28\x75\x1A\xC7\x41\x28\x00\x00\x00\x00\xC7\x41\x2C\x00\x00\x00\x00\xC7\x41\x30\x00\x00\x00\x00\xE9\x2F\x01\x00\x00\x48\x83\xF8\x2A\x75\x0C\xC7\x41\x30\x00\x00\x00\x00\xE9\x1D\x01\x00\x00\x48\x83\xF8\x2B\x75\x0C\xC7\x41\x30\x00\x00\x00\x00\xE9\x0B\x01\x00\x00\x48\x83\xF8\x30\x75\x05\xE9\x00\x01\x00\x00\x48\x83\xF8\x32\x74\x06\x48\x83\xF8\x34\x75\x32\x48\x03\x76\x38\x48\x31\xC0\x48\x8B\x79\x40\x8B\x41\x28\x48\xD1\xE0\x48\x01\xC6\x48\x89\xC8\x48\x31\xC9\x8B\x48\x2C\x9C\xFC\xF3\x66\xA5\x9D\x48\x89\xC1\xC7\x41\x30\x00\x00\x00\x00\xE9\xC2\x00\x00\x00\x83\xF8\x33\x74\x06\x48\x83\xF8\x33\x75\x35\x48\x03\x76\x38\x48\x31\xC0\x48\x8B\x79\x40\x8B\x41\x28\x48\xD1\xE0\x48\x01\xC6\x48\x89\xC8\x48\x31\xC9\x8B\x48\x2C\x48\x87\xF7\x9C\xFC\xF3\x66\xA5\x9D\x48\x89\xC1\xC7\x41\x30\x00\x00\x00\x00\xE9\x82\x00\x00\x00\x83\xF8\x3C\x74\x05\x83\xF8\x58\x75\x31\x83\x79\x2C\x08\x72\x72\x51\x48\x81\xEC\x00\x01\x00\x00\x49\x89\xE0\x48\x31\xD2\x8B\x51\x2C\x48\x8B\x49\x40\xE8\x85\x0B\x00\x00\x48\x81\xC4\x00\x01\x00\x00\x59\xC7\x41\x30\x00\x00\x00\x00\xEB\x47\x83\xF8\x3D\x74\x05\x83\xF8\x59\x75\x31\x83\x79\x2C\x08\x72\x37\x51\x48\x31\xD2\x8B\x51\x2C\x48\x8B\x49\x40\x48\x81\xEC\x00\x01\x00\x00\x49\x89\xE0\xE8\x34\x10\x00\x00\x48\x81\xC4\x00\x01\x00\x00\x59\xC7\x41\x30\x00\x00\x00\x00\xEB\x0C\x83\xF8\x55\x75\x02\xEB\x05\xB8\x78\x56\x34\x12\x5E\x5F\x5A\x5B\x59\xC3\x56\x57\x48\x89\xD6\x48\x89\xCF\x31\xC9\x44\x89\xC1\xF3\xA4\x5F\x5E\xC3\x48\x89\x54\x24\x10\x89\x4C\x24\x08\x48\x83\xEC\x18\x8B\x44\x24\x20\x83\xE0\x1F\x89\x44\x24\x20\x8B\x44\x24\x20\xC1\xE8\x02\x25\xFE\x00\x00\x00\x48\x8B\x4C\x24\x28\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x20\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x88\x44\x24\x04\x0F\xB6\x44\x24\x04\x83\xF0\x01\x8B\x4C\x24\x20\xC1\xE9\x03\x21\xC8\x8B\x4C\x24\x20\x31\xC1\x89\xC8\x8B\x4C\x24\x20\xC1\xE9\x04\x31\xC8\x89\x04\x24\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x0A\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x07\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x02\x85\xC0\x74\x15\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x05\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x04\x85\xC0\x74\x15\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x08\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x04\x24\x83\xE0\x01\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x01\xC1\xE0\x02\x48\x8B\x4C\x24\x28\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x40\x0F\xD1\xE0\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x0C\x24\x8B\x40\x0F\x09\xC8\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x0B\x0F\xB6\x4C\x24\x04\x31\xC8\x83\xE0\x01\x48\x83\xC4\x18\xC3\x48\x89\x54\x24\x10\x48\x89\x4C\x24\x08\x48\x83\xEC\x48\xC7\x44\x24\x30\x1F\x00\x00\x00\x48\x8B\x44\x24\x58\x8B\x40\x14\x89\x44\x24\x20\x8B\x44\x24\x20\x35\x89\x19\x08\x01\x89\x44\x24\x20\x8B\x44\x24\x20\xC1\xE8\x0C\x89\x44\x24\x20\xC7\x44\x24\x24\x0A\x00\x00\x00\xEB\x0A\x8B\x44\x24\x24\xFF\xC8\x89\x44\x24\x24\x83\x7C\x24\x24\x05\x76\x69\x0F\xB6\x44\x24\x20\x83\xE0\x0F\x89\x44\x24\x2C\x83\x7C\x24\x2C\x00\x74\x0A\xC7\x44\x24\x38\x01\x00\x00\x00\xEB\x08\xC7\x44\x24\x38\x00\x00\x00\x00\x83\x7C\x24\x2C\x0B\x73\x0A\xC7\x44\x24\x3C\x01\x00\x00\x00\xEB\x08\xC7\x44\x24\x3C\x00\x00\x00\x00\x8B\x44\x24\x3C\x8B\x4C\x24\x38\x21\xC1\x89\xC8\x8B\x4C\x24\x24\xD3\xE0\x8B\x4C\x24\x30\x09\xC1\x89\xC8\x89\x44\x24\x30\x8B\x44\x24\x20\xC1\xE8\x04\x89\x44\x24\x20\xEB\x86\x8B\x44\x24\x30\xC1\xE8\x06\x48\x8B\x4C\x24\x58\x88\x41\x13\x48\x8B\x44\x24\x58\x0F\xB6\x40\x13\xC1\xE0\x06\x83\xC8\x1F\x48\x8B\x4C\x24\x58\x89\x41\x0F\xC7\x44\x24\x24\x01\x00\x00\x00\xC7\x44\x24\x28\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x24\xFF\xC0\x89\x44\x24\x24\x83\x7C\x24\x24\x27\x77\x6A\x8B\x44\x24\x28\x48\x8B\x4C\x24\x50\x0F\xB6\x04\x01\x48\x8B\x54\x24\x58\x89\xC1\xE8\xA6\xFD\xFF\xFF\x89\x44\x24\x34\x48\x8B\x44\x24\x50\x8B\x00\x83\xE0\x01\xD1\xE0\x0B\x44\x24\x34\x89\x44\x24\x28\x48\x8B\x44\x24\x50\x8B\x00\x83\xE0\x01\x3B\x44\x24\x34\x75\x12\x48\x8B\x44\x24\x50\x8B\x00\xD1\xE8\x48\x8B\x4C\x24\x50\x89\x01\xEB\x15\x48\x8B\x44\x24\x50\x8B\x00\xD1\xE8\x35\x62\x00\x50\x80\x48\x8B\x4C\x24\x50\x89\x01\xEB\x85\x48\x83\xC4\x48\xC3\x48\x89\x4C\x24\x08\x48\x83\xEC\x48\x48\x8B\x44\x24\x50\x0F\xB6\x40\x01\xC1\xF8\x05\x83\xE0\x01\x48\x8B\x4C\x24\x50\x88\x41\x0A\x48\x8B\x44\x24\x50\x0F\xB6\x40\x02\xC1\xF8\x07\x83\xE0\x01\x83\xF0\x01\x88\x44\x24\x24\x0F\xB6\x44\x24\x24\x85\xC0\x74\x0E\x48\x8B\x44\x24\x50\x0F\xB6\x00\x89\x44\x24\x3C\xEB\x0E\x48\x8B\x44\x24\x50\x0F\xB6\x00\xF7\xD0\x89\x44\x24\x3C\x0F\xB6\x44\x24\x3C\x88\x44\x24\x26\xC7\x44\x24\x28\x00\x00\x00\x00\x48\x8B\x44\x24\x50\x0F\xB6\x40\x01\x83\xE0\x1F\x88\x44\x24\x25\xC7\x44\x24\x2C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x2C\xFF\xC0\x89\x44\x24\x2C\x83\x7C\x24\x2C\x04\x7D\x3D\x0F\xB6\x44\x24\x28\xC0\xE0\x02\x88\x44\x24\x28\x0F\xB6\x44\x24\x25\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x83\xF1\x01\x83\xE1\x01\xD1\xE1\x09\xC8\x0F\xB6\x4C\x24\x28\x09\xC1\x89\xC8\x88\x44\x24\x28\x0F\xB6\x44\x24\x25\xD0\xE8\x88\x44\x24\x25\xEB\xB2\x0F\xB6\x44\x24\x28\x35\xFF\x00\x00\x00\x88\x44\x24\x2A\x0F\xB6\x44\x24\x28\x88\x44\x24\x29\x0F\xB6\x44\x24\x2A\x88\x44\x24\x2B\xC7\x44\x24\x2C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x2C\xFF\xC0\x89\x44\x24\x2C\x83\x7C\x24\x2C\x08\x0F\x8D\x9F\x00\x00\x00\x8B\x44\x24\x2C\x83\xC0\x08\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\x8B\x4C\x24\x2C\x83\xC1\x08\xBA\x1F\x00\x00\x00\x29\xCA\x89\xD1\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x31\xC8\x8B\x4C\x24\x2C\xD3\xE0\x0F\xB6\x4C\x24\x29\x31\xC1\x89\xC8\x88\x44\x24\x29\x8B\x44\x24\x2C\x83\xC0\x18\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\x8B\x4C\x24\x2C\x83\xC1\x18\xBA\x1F\x00\x00\x00\x29\xCA\x89\xD1\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x31\xC8\x8B\x4C\x24\x2C\xD3\xE0\x0F\xB6\x4C\x24\x2B\x31\xC1\x89\xC8\x88\x44\x24\x2B\xE9\x4C\xFF\xFF\xFF\x48\x8B\x44\x24\x50\xC7\x40\x0B\x00\x00\x00\x00\xC7\x44\x24\x20\x00\x00\x00\x00\xC7\x44\x24\x30\x1F\x00\x00\x00\xEB\x0A\x8B\x44\x24\x30\xFF\xC8\x89\x44\x24\x30\x83\x7C\x24\x30\x00\x0F\x8C\xA4\x00\x00\x00\x0F\xB6\x44\x24\x26\xC1\xE0\x03\x48\x8B\x4C\x24\x50\x89\x41\x0F\xC7\x44\x24\x38\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x38\xFF\xC0\x89\x44\x24\x38\x83\x7C\x24\x38\x0C\x7D\x14\x48\x8B\x54\x24\x50\x8B\x4C\x24\x30\xE8\xA6\x00\x00\x00\x88\x44\x24\x34\xEB\xDB\x8B\x44\x24\x20\xD1\xE0\x89\x44\x24\x20\x8B\x44\x24\x30\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x30\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x8B\x4C\x24\x30\x83\xE1\x01\x31\xC8\x8B\x4C\x24\x30\x8B\x54\x24\x28\xD3\xEA\x89\xD1\x83\xE1\x01\x31\xC8\x0F\xB6\x4C\x24\x34\x31\xC8\x8B\x4C\x24\x20\x09\xC1\x89\xC8\x89\x44\x24\x20\xE9\x47\xFF\xFF\xFF\x48\x8B\x44\x24\x50\x8B\x4C\x24\x20\x89\x48\x0B\x0F\xB6\x44\x24\x26\xC1\xE0\x03\x0F\xB6\x4C\x24\x24\xC1\xE1\x02\x09\xC8\x0F\xB6\x4C\x24\x24\xD1\xE1\x09\xC8\x0F\xB6\x4C\x24\x24\x09\xC8\x48\x8B\x4C\x24\x50\x89\x41\x0F\x48\x83\xC4\x48\xC3\x48\x89\x54\x24\x10\x89\x4C\x24\x08\x48\x83\xEC\x28\x8B\x44\x24\x30\x83\xE0\x1F\x89\x44\x24\x30\x8B\x44\x24\x30\xD1\xE8\x83\xE0\x03\xE8\x10\x00\x00\x00\x80\x04\x00\x00\xA0\x04\x00\x00\x80\x05\x00\x00\xA0\x05\x00\x00\x59\x8B\x04\x81\x89\x44\x24\x04\xC7\x44\x24\x08\x00\x00\x00\x00\xC7\x44\x24\x0C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x0C\xFF\xC0\x89\x44\x24\x0C\x83\x7C\x24\x0C\x0C\x7D\x3D\x8B\x44\x24\x0C\x0F\xB6\xC8\x8B\x44\x24\x04\xD3\xE8\x83\xE0\x01\x85\xC0\x74\x27\x8B\x44\x24\x0C\x48\x8B\x4C\x24\x38\x48\x89\x4C\x24\x10\x0F\xB6\xC8\x48\x8B\x44\x24\x10\x8B\x40\x0F\xD3\xE8\x8B\x4C\x24\x08\x31\xC1\x89\xC8\x89\x44\x24\x08\xEB\xB2\x8B\x44\x24\x30\x83\xE0\x01\xC1\xE0\x02\x48\x8B\x4C\x24\x38\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x8B\x44\x24\x30\xC1\xE8\x02\x25\xFE\x00\x00\x00\x48\x8B\x4C\x24\x38\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x30\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x48\x8B\x4C\x24\x38\x0F\xB6\x49\x0A\x31\xC8\x88\x04\x24\x48\x8B\x44\x24\x38\x8B\x40\x0F\xD1\xE0\x0F\xB6\x0C\x24\x8B\x54\x24\x08\x31\xCA\x89\xD1\x83\xE1\x01\x09\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x8B\x44\x24\x30\x48\x8B\x4C\x24\x38\x48\x89\x4C\x24\x18\x0F\xB6\xC8\x48\x8B\x44\x24\x18\x8B\x40\x0B\xD3\xE8\x83\xE0\x01\x48\x8B\x4C\x24\x38\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x48\x8B\x44\x24\x38\x8B\x40\x0F\xC1\xE8\x0B\x0F\xB6\x0C\x24\x31\xC8\x83\xE0\x01\x48\x83\xC4\x28\xC3\x48\x89\x54\x24\x10\x48\x89\x4C\x24\x08\x48\x83\xEC\x38\x48\x8B\x44\x24\x48\x83\x78\x14\x00\x74\x14\x48\x8B\x54\x24\x48\x48\x8B\x4C\x24\x40\xE8\x3F\xFA\xFF\xFF\xE9\x97\x00\x00\x00\x48\x8B\x4C\x24\x48\xE8\xA6\xFB\xFF\xFF\xC7\x44\x24\x20\x01\x00\x00\x00\xC7\x44\x24\x24\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x20\xFF\xC0\x89\x44\x24\x20\x83\x7C\x24\x20\x27\x77\x6A\x8B\x44\x24\x24\x48\x8B\x4C\x24\x40\x0F\xB6\x04\x01\x48\x8B\x54\x24\x48\x89\xC1\xE8\x2E\xFE\xFF\xFF\x89\x44\x24\x28\x48\x8B\x44\x24\x40\x8B\x00\x83\xE0\x01\xD1\xE0\x0B\x44\x24\x28\x89\x44\x24\x24\x48\x8B\x44\x24\x40\x8B\x00\x83\xE0\x01\x3B\x44\x24\x28\x75\x12\x48\x8B\x44\x24\x40\x8B\x00\xD1\xE8\x48\x8B\x4C\x24\x40\x89\x01\xEB\x15\x48\x8B\x44\x24\x40\x8B\x00\xD1\xE8\x35\x62\x00\x50\x80\x48\x8B\x4C\x24\x40\x89\x01\xEB\x85\x48\x83\xC4\x38\xC3\x49\x89\xE3\x48\x83\xEC\x68\x45\x85\xC0\x49\x89\x5B\xF8\x49\x89\x6B\xF0\x49\x89\x73\xE8\x49\x89\x7B\xE0\x4D\x89\x63\xD8\x44\x8B\x61\x04\x44\x89\xC5\x48\x89\xD6\x48\x89\xCB\x45\x89\xE1\x45\x89\x63\xC8\x74\x26\x49\x8D\x4B\xC8\x49\x89\x4B\xB8\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\xD0\x1D\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\xE2\xFE\xFF\xFF\x44\x8B\x4C\x24\x30\x8B\x03\x44\x31\xC8\x89\xC1\x44\x31\xE0\x35\xC3\x25\x34\x80\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x02\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x04\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x06\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x08\x33\x03\x89\xC2\x35\xC3\x25\x34\x80\xC1\xC0\x0A\x89\x13\x31\xC8\x85\xED\x48\x8B\x6C\x24\x58\x89\x43\x04\x41\x89\xC4\x89\xC2\x89\x44\x24\x34\x74\x27\x48\x8D\x4C\x24\x34\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\x5D\x1E\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\x55\xFE\xFF\xFF\x8B\x54\x24\x34\x44\x8B\x4C\x24\x30\x8B\x03\x48\x8B\x7C\x24\x48\x31\xD0\x89\xC1\x44\x31\xE0\x4C\x8B\x64\x24\x40\x35\x4A\x00\x2C\x5B\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x05\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0A\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0F\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x14\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x19\x33\x03\x48\x85\xF6\x89\x0B\x89\x43\x04\x48\x8B\x5C\x24\x60\x74\x06\x44\x89\x0E\x89\x56\x04\x48\x8B\x74\x24\x50\x48\x83\xC4\x68\xC3\x48\x83\xEC\x08\x4C\x8D\x0C\x24\x41\xB8\x01\x00\x00\x00\x49\x89\x09\x8B\x41\x5C\x48\xC1\xE0\x20\x8B\x49\x12\x48\x09\xC1\x48\x89\xCA\x48\x83\xC2\x08\xE8\x6E\xFE\xFF\xFF\x48\x83\xC4\x08\xC3\x49\x89\xE3\x48\x83\xEC\x68\x49\x89\x5B\xF8\x48\x89\xCB\x49\x89\x6B\xF0\x49\x89\x73\xE8\x49\x89\x7B\xE0\x4C\x89\xCF\x44\x8B\x09\x4D\x89\x63\xD8\x45\x89\xC4\x44\x89\xC8\x48\x89\xD6\x35\x4A\x00\x2C\x5B\xC1\xC0\x19\x33\x41\x04\x44\x89\x49\x04\x89\x01\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x14\x89\x4B\x04\x44\x31\xC8\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0F\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0A\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x05\x33\x43\x04\x89\x4B\x04\x89\xC1\x8B\x43\x04\x31\xC8\x89\x4B\x04\x35\x4A\x00\x2C\x5B\x45\x85\xE4\x89\x03\x89\xC5\x41\x89\xC0\x89\x44\x24\x34\x74\x37\x48\x8B\x07\x49\x8D\x4B\xCC\x44\x0F\xB7\x48\x1E\x44\x0F\xB7\x40\x0C\x0F\xB7\x50\x08\x49\x89\x4B\xB8\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\xE1\x1F\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\xD1\xFC\xFF\xFF\x44\x8B\x44\x24\x34\x8B\x43\x04\x44\x31\xC0\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x0A\x89\x4B\x04\x31\xE8\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x08\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x06\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x04\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x02\x33\x43\x04\x89\xC2\x89\xC8\x31\xD0\x89\x53\x04\x35\xC3\x25\x34\x80\x45\x85\xE4\x4C\x8B\x64\x24\x40\x89\x03\x89\xC5\x89\xC1\x89\x44\x24\x30\x74\x3D\x48\x8B\x07\x48\x8D\x4C\x24\x30\x44\x0F\xB7\x48\x1E\x44\x0F\xB7\x40\x0C\x0F\xB7\x50\x08\x48\x89\x4C\x24\x20\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\x8E\x20\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\x24\xFC\xFF\xFF\x44\x8B\x44\x24\x34\x8B\x4C\x24\x30\x8B\x43\x04\x48\x8B\x7C\x24\x48\x89\x6B\x04\x48\x8B\x6C\x24\x58\x31\xC8\x48\x85\xF6\x89\x03\x48\x8B\x5C\x24\x60\x74\x06\x89\x0E\x44\x89\x46\x04\x48\x8B\x74\x24\x50\x48\x83\xC4\x68\xC3\x48\x83\xEC\x08\x4C\x8D\x0C\x24\x41\xB8\x01\x00\x00\x00\x49\x89\x09\x8B\x41\x5C\x48\xC1\xE0\x20\x8B\x49\x12\x48\x09\xC1\x48\x89\xCA\x48\x83\xC2\x08\xE8\x23\xFE\xFF\xFF\x48\x83\xC4\x08\xC3\x48\x89\xE0\x48\x81\xEC\xE8\x00\x00\x00\x48\x89\x58\x08\x48\x89\x68\x10\x48\x89\x70\x18\x48\x89\x78\x20\x4C\x89\x60\xF8\x4C\x89\x68\xF0\x4C\x89\x70\xE8\x4C\x89\x78\xE0\xB8\x08\x00\x00\x00\x44\x8D\x72\x07\x41\x89\xD7\x4C\x89\xC5\x41\xC1\xEE\x03\x41\x83\xE7\x07\x48\x89\xCB\x44\x0F\x44\xF8\x45\x31\xC9\x41\x8D\x46\xFF\x85\xC0\x44\x89\x7C\x24\x28\x44\x89\x4C\x24\x24\x45\x89\xC8\x44\x89\x4C\x24\x20\x45\x89\xCD\x45\x8D\x51\x02\x0F\x84\x7A\x02\x00\x00\x48\x8B\x7C\x24\x30\x44\x8B\x64\x24\x54\x4D\x89\xD7\x44\x31\x03\x44\x31\x4B\x04\x45\x85\xED\x8B\x0B\x8B\x53\x04\x0F\x85\x16\x01\x00\x00\x45\x39\xFE\x0F\x86\xDB\x00\x00\x00\x66\x44\x89\x6D\x10\x48\x8B\x03\x48\x89\xE9\x48\x89\x44\x24\x38\x48\x8D\x44\x24\x38\x48\x89\x7C\x24\x40\x89\x45\x12\x48\x8D\x44\x24\x38\x66\x44\x89\x7D\x16\x48\xC1\xE8\x20\x66\x44\x89\x6D\x3E\x89\x45\x5C\xE8\x1C\xFD\xFF\xFF\x48\x8B\x7C\x24\x40\x48\x8B\x44\x24\x38\x48\x89\x7C\x24\x30\x8B\x74\x24\x34\x48\x89\x03\x89\x7C\x24\x50\x48\x8D\x54\x24\x54\x66\x44\x89\x6D\x16\x45\x8D\x45\x05\x8B\x4A\xFC\x48\x83\xC2\x14\x8D\x04\x31\x83\xE1\x1F\x89\x42\xEC\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xEC\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF0\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF0\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF4\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF4\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF8\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF8\x8D\x04\x31\x83\xE1\x1F\x89\x42\xFC\x44\x8B\x64\x24\x54\x89\xF8\xD3\xC8\x41\x31\xC4\x49\xFF\xC8\x44\x89\x64\x24\x54\x75\x8A\xE9\x42\x01\x00\x00\x48\x89\xD8\x48\x89\xE9\x66\xC7\x45\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x45\x16\x01\x00\x66\xC7\x45\x3E\x00\x00\x89\x45\x5C\x89\x5D\x12\xE8\x52\xFC\xFF\xFF\x66\xC7\x45\x16\x00\x00\xE9\x10\x01\x00\x00\x8B\x44\x24\x50\x46\x8D\x04\x21\x4C\x8D\x4C\x24\x5C\x8D\x34\x02\x44\x89\x03\x4D\x89\xFA\x89\x73\x04\x44\x89\xC1\x44\x89\xC2\x49\x83\xC1\x30\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xCC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xD0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xD4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xD8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xDC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xE0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xE4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xE8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xEC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xF0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xF4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xF8\x49\xFF\xCA\x0F\x85\x0F\xFF\xFF\xFF\x44\x89\x03\x89\x73\x04\x44\x8B\x03\x44\x8B\x4B\x04\x41\x8D\x46\xFF\x41\xFF\xC5\x48\x83\xC3\x08\x44\x89\x44\x24\x20\x41\x39\xC5\x44\x89\x4C\x24\x24\x0F\x82\xA0\xFD\xFF\xFF\x44\x8B\x7C\x24\x28\x41\xBA\x02\x00\x00\x00\xEB\x05\x44\x8B\x64\x24\x54\x45\x85\xFF\x4C\x8B\xAC\x24\xD8\x00\x00\x00\x74\x2C\x48\x8D\x44\x24\x20\x48\x89\xDF\x48\x8D\x4C\x24\x20\x48\x29\xC7\x44\x89\xFA\x0F\xB6\x04\x0F\x48\xFF\xC1\x30\x41\xFF\x48\xFF\xCA\x75\xF1\x44\x8B\x4C\x24\x24\x44\x8B\x44\x24\x20\x41\x83\xFE\x02\x0F\x86\xFF\x00\x00\x00\x44\x03\x4C\x24\x50\x48\x8D\x74\x24\x5C\x45\x01\xE0\x44\x89\xC1\x44\x89\xC2\x48\x83\xC6\x30\xC1\xE9\x04\x44\x31\xCA\x83\xE1\x1F\xD3\xC2\x2B\x56\xCC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xD0\x44\x89\xC1\x44\x89\xC7\xC1\xE9\x04\x31\xD7\x83\xE1\x1F\xD3\xC7\x2B\x7E\xD4\x41\x31\xF8\x89\xF9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xD8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xFA\x83\xE1\x1F\xD3\xC2\x2B\x56\xDC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xE0\x44\x89\xC1\x44\x89\xC7\xC1\xE9\x04\x31\xD7\x83\xE1\x1F\xD3\xC7\x2B\x7E\xE4\x41\x31\xF8\x89\xF9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xE8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xFA\x83\xE1\x1F\xD3\xC2\x2B\x56\xEC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xF0\x44\x89\xC1\x45\x89\xC1\xC1\xE9\x04\x41\x31\xD1\x83\xE1\x1F\x41\xD3\xC1\x44\x2B\x4E\xF4\x45\x31\xC8\x44\x89\xC9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xF8\x49\xFF\xCA\x0F\x85\x10\xFF\xFF\xFF\xEB\x51\x41\x83\xFE\x01\x75\x0D\x8B\x03\x89\x44\x24\x20\x8B\x43\x04\x89\x44\x24\x24\x48\x8D\x44\x24\x20\x48\x89\xE9\x66\xC7\x45\x10\x00\x00\x89\x45\x12\x48\x8D\x44\x24\x20\x66\xC7\x45\x16\x01\x00\x48\xC1\xE8\x20\x66\xC7\x45\x3E\x00\x00\x89\x45\x5C\xE8\x7D\xF9\xFF\xFF\x44\x8B\x4C\x24\x24\x44\x8B\x44\x24\x20\x66\xC7\x45\x16\x00\x00\x4C\x8B\xA4\x24\xE0\x00\x00\x00\x48\x8B\xAC\x24\xF8\x00\x00\x00\x41\x83\xFE\x01\x4C\x8B\xB4\x24\xD0\x00\x00\x00\x76\x1B\x45\x85\xFF\x74\x0C\x48\x8D\x73\xF8\x44\x89\xF9\x48\x89\xDF\xF3\xA4\x44\x89\x43\xF8\x44\x89\x4B\xFC\xEB\x07\x44\x89\x03\x44\x89\x4B\x04\x4C\x8B\xBC\x24\xC8\x00\x00\x00\x48\x8B\xBC\x24\x08\x01\x00\x00\x48\x8B\xB4\x24\x00\x01\x00\x00\x48\x8B\x9C\x24\xF0\x00\x00\x00\x48\x81\xC4\xE8\x00\x00\x00\xC3\x48\x89\xE0\x48\x81\xEC\xF8\x00\x00\x00\x48\x89\x58\x08\x48\x89\x68\x10\x48\x89\x70\x18\x48\x89\x78\x20\x4C\x89\x60\xF8\x4C\x89\x68\xF0\x4C\x89\x70\xE8\x4C\x89\x78\xE0\x48\x89\xCB\x8D\x4A\x07\x89\xD0\xBA\x08\x00\x00\x00\xC1\xE9\x03\x83\xE0\x07\x4C\x89\xC7\x0F\x44\xC2\x45\x31\xFF\x83\xF9\x01\x89\x4C\x24\x30\x44\x8D\x62\x04\x44\x89\x7C\x24\x2C\x44\x89\x7C\x24\x34\x44\x89\x7C\x24\x28\x45\x89\xFE\x89\x44\x24\x38\x0F\x86\x9F\x01\x00\x00\x83\xC1\xFE\x44\x89\xFE\x89\x4C\x24\x20\x0F\x84\x8F\x01\x00\x00\x48\x8B\x44\x24\x40\x44\x8B\x6C\x24\x64\x8B\x6C\x24\x60\x85\xF6\x44\x8B\x03\x44\x8B\x73\x04\x45\x89\xC7\x44\x89\x44\x24\x28\x0F\x85\xEE\x00\x00\x00\x48\x89\x44\x24\x50\x48\x8D\x44\x24\x48\x66\x89\x77\x10\x48\x8B\x0B\x89\x47\x12\x48\x8D\x44\x24\x48\x48\xC1\xE8\x20\x48\x89\x4C\x24\x48\x48\x89\xF9\x66\xC7\x47\x16\x02\x00\x66\x89\x77\x3E\x89\x47\x5C\xE8\x0E\xFA\xFF\xFF\x48\x8B\x44\x24\x48\x4C\x8D\x44\x24\x64\x48\x89\x03\x48\x8B\x44\x24\x50\x44\x8D\x56\x05\x48\x89\x44\x24\x40\x44\x8B\x4C\x24\x44\x66\x89\x77\x16\x89\x44\x24\x60\x41\x8B\x48\xFC\x49\x83\xC0\x14\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xEC\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xEC\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF0\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF0\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF4\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF4\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF8\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF8\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xFC\x44\x8B\x6C\x24\x64\x89\xC2\xD3\xCA\x41\x31\xD5\x49\xFF\xCA\x44\x89\x6C\x24\x64\x0F\x85\x77\xFF\xFF\xFF\x8B\x6C\x24\x60\xEB\x4B\x45\x89\xE3\x45\x89\xF1\x4C\x8D\x94\x24\xC0\x00\x00\x00\x45\x2B\x42\x04\x44\x89\xC9\x49\x83\xEA\x08\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC8\x45\x31\xC8\x45\x03\x4A\x08\x44\x89\xC1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC9\x45\x31\xC1\x41\x83\xC3\xFF\x75\xD0\x45\x29\xE8\x41\x29\xE9\x44\x89\x4B\x04\x44\x89\x03\x8B\x4C\x24\x34\xFF\xC6\x48\x83\xC3\x08\x31\x4B\xF8\x8B\x4C\x24\x2C\x44\x89\x7C\x24\x34\x31\x4B\xFC\x3B\x74\x24\x20\x44\x89\x74\x24\x2C\x0F\x82\x88\xFE\xFF\xFF\x8B\x44\x24\x38\x45\x31\xFF\xEB\x09\x44\x8B\x6C\x24\x64\x8B\x6C\x24\x60\x85\xC0\x44\x89\x7C\x24\x20\x44\x89\xFE\x44\x89\x7C\x24\x24\x74\x1A\x48\x8D\x53\x08\x48\x8D\x4C\x24\x20\x41\x89\xC0\xE8\xB8\xED\xFF\xFF\x8B\x74\x24\x24\x44\x8B\x7C\x24\x20\x44\x8B\x5C\x24\x30\x41\x83\xFB\x01\x75\x32\x48\x89\xD8\x48\x89\xF9\x66\xC7\x47\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x47\x16\x01\x00\x66\xC7\x47\x3E\x00\x00\x89\x47\x5C\x89\x5F\x12\xE8\x75\xF8\xFF\xFF\x66\xC7\x47\x16\x00\x00\xE9\x29\x01\x00\x00\x41\x83\xFB\x02\x75\x34\x48\x89\xD8\x48\x89\xF9\x66\xC7\x47\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x47\x16\x01\x00\x66\xC7\x47\x3E\x00\x00\x89\x47\x5C\x89\x5F\x12\xE8\x3D\xF8\xFF\xFF\x44\x8B\x5C\x24\x30\x66\xC7\x47\x16\x00\x00\xEB\x55\x8B\x13\x44\x8B\x43\x04\x45\x89\xE2\x4C\x8D\x8C\x24\xC0\x00\x00\x00\x41\x2B\x51\x04\x44\x89\xC1\x49\x83\xE9\x08\xC1\xE9\x07\x83\xE1\x1F\xD3\xCA\x44\x31\xC2\x45\x03\x41\x08\x89\xD1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC8\x41\x31\xD0\x41\x83\xC2\xFF\x75\xD2\x44\x29\xEA\x41\x29\xE8\x41\x83\xFB\x01\x89\x13\x44\x89\x43\x04\x0F\x86\x9A\x00\x00\x00\x44\x33\x3B\x33\x73\x04\x8B\x44\x24\x38\x85\xC0\x44\x89\x7C\x24\x20\x89\x74\x24\x24\x74\x31\x4C\x8D\x44\x24\x20\x49\x89\xD9\x48\x8D\x4B\x08\x4D\x29\xC1\x49\x89\xC0\x48\x8D\x54\x24\x20\x0F\xB6\x01\x48\xFF\xC1\x48\xFF\xC2\x49\xFF\xC8\x41\x88\x44\x11\xFF\x0F\xB6\x42\xFF\x88\x41\xFF\x75\xE6\x41\x83\xFB\x02\x0F\x84\xED\xFE\xFF\xFF\x8B\x13\x44\x8B\x43\x04\x4C\x8D\x8C\x24\xC0\x00\x00\x00\x41\x2B\x51\x04\x44\x89\xC1\x49\x83\xE9\x08\xC1\xE9\x07\x83\xE1\x1F\xD3\xCA\x44\x31\xC2\x45\x03\x41\x08\x89\xD1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC8\x41\x31\xD0\x41\x83\xC4\xFF\x75\xD2\x44\x29\xEA\x41\x29\xE8\x44\x89\x43\x04\x89\x13\x8B\x44\x24\x28\x4C\x8B\xBC\x24\xD8\x00\x00\x00\x4C\x8B\xAC\x24\xE8\x00\x00\x00\x31\x03\x44\x31\x73\x04\x4C\x8B\xA4\x24\xF0\x00\x00\x00\x4C\x8B\xB4\x24\xE0\x00\x00\x00\x48\x8B\x9C\x24\x00\x01\x00\x00\x48\x8B\xBC\x24\x18\x01\x00\x00\x48\x8B\xB4\x24\x10\x01\x00\x00\x48\x8B\xAC\x24\x08\x01\x00\x00\x48\x81\xC4\xF8\x00\x00\x00\xC3\xCC\xCC\xCC\xCC\x57\x59\xE9\xF9\xD5\xFF\xFF')
    
    fullfname=os.getcwd()+'/backbas.so'
    
    
    a=0xBA
    unipatch[a:a+4]=SERVER_KEY_PASSWORD
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_SN
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_HASPTYPE
    a=a+4
    unipatch[a:a+4]=SERVER_KEY_MEMORYSIZE
    a=a+6
    unipatch[a:a+8]=SERVER_KEY_SecTable
    a=a+0x48
    unipatch[a:a+0x70]=SERVER_KEY_Data
    a=a+0x70
    unipatch[a:a+2]=SERVER_KEY_LicNum
    
    
    a=0x112E
    unipatch[a:a+4]=CLIENT_KEY_PASSWORD
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_SN
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_HASPTYPE
    a=a+4
    unipatch[a:a+4]=CLIENT_KEY_MEMORYSIZE
    a=a+6
    unipatch[a:a+8]=CLIENT_KEY_SecTable
    a=a+0x48
    unipatch[a:a+0x70]=CLIENT_KEY_Data
    a=a+0x70
    unipatch[a:a+2]=CLIENT_KEY_LicNum
    
    
    try:
      fp = open(fullfname, 'r+')
      if os.stat(fp.name).st_size > 0:
        mm = mmap.mmap(fp.fileno(), 0)
    
      # WTF? "to smoke": man 5 elf
      if mm[0]!=0x7f or mm[1]!=0x45 or mm[2]!=0x4C or mm[3]!=0x46 or mm[4]!=2 or mm[5]!=1 or mm[6]!=1 or mm[16]!=3 or mm[17]!=0 or mm[18]!=0x3E or mm[19]!=0:
        print ("what a fuck are you giving me?")
        sys.exit()
      e_phoff = mm[0x20]+(mm[0x21]+(mm[0x22]+(mm[0x23]<<8)<<8)<<8)
      print (f"e_phoff = {hex(e_phoff)}")
      e_phentsize = mm[0x36]+(mm[0x37]<<8)
      print (f"e_phentsize = {hex(e_phentsize)}")
      e_phnum = mm[0x38]+(mm[0x39]<<8)
      print (f"e_phnum = {hex(e_phnum)}")
      for i in range(e_phnum):
        p = e_phoff + i * e_phentsize
        p_type  = mm[p]+(mm[p+1]+(mm[p+2]+(mm[p+3]<<8)<<8)<<8)
        p_flags = mm[p+4]+(mm[p+5]+(mm[p+6]+(mm[p+7]<<8)<<8)<<8)
        if (p_type==1 and p_flags==5):
          print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}")
          print(f"mm[{hex(p+4)}] += PF_W")
          mm[p+4] = 7
          break
        else:
          print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}")
      pattern_addr = mm.find(pattern)
      if pattern_addr != -1:
        unipatch_addr=pattern_addr-0x2A75
        print (f"patching  {fullfname}  at offset={hex(unipatch_addr)}")
        mm[unipatch_addr:unipatch_addr+0x2A07] = unipatch
    
      mm.close()
    except IOError as e:
      print (f"I/O error({e.errno}): {e.strerror}, filename={fullfname}")
    
    
    
    print ('#############_SERVER_KEY_INFO_#################', sep='', end='')
    print ('')
    a=0xBA
    print ('SERVER_KEY_PASSWORD:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('SERVER_KEY_SN:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('SERVER_KEY_HASPTYPE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('SERVER_KEY_MEMORYSIZE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+6
    print ('SERVER_KEY_SecTable:', sep='', end=' ')
    for i in range(a,a+8):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+0x48
    print ('SERVER_KEY_Data:', sep='', end='\n')
    for i in range(a,a+0x70,16):  
      for k in range(0,16):
        print (format(unipatch[i+k],'02X'), sep='', end=' ')
      print ('')
    a=a+0x70
    print ('SERVER_KEY_LicNum:', sep='', end=' ')
    for i in range(a,a+2):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    
    print ('#############_CLIENT_KEY_INFO_#################', sep='', end='')
    print ('')
    a=0x112E
    print ('CLIENT_KEY_PASSWORD:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('CLIENT_KEY_SN:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('CLIENT_KEY_HASPTYPE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+4
    print ('CLIENT_KEY_MEMORYSIZE:', sep='', end=' ')
    for i in range(a,a+4):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+6
    print ('CLIENT_KEY_SecTable:', sep='', end=' ')
    for i in range(a,a+8):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    a=a+0x48
    print ('CLIENT_KEY_Data:', sep='', end='\n')
    for i in range(a,a+0x70,16):  
      for k in range(0,16):
        print (format(unipatch[i+k],'02X'), sep='', end=' ')
      print ('')
    
    a=a+0x70
    print ('CLIENT_KEY_LicNum:', sep='', end=' ')
    for i in range(a,a+2):
       print (format(unipatch[i],'02X'), sep='', end=' ')
    print ('')
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  18. 21 пользователя(ей) сказали cпасибо:

    bnmbnmbnm (18.01.2023), D@nge1 (19.01.2023), DenAst78 (31.01.2023), dimbor2 (19.01.2023), freeraider (14.02.2023), g0ga (18.01.2023), garik-kg (18.01.2023), ilya.sh (19.01.2023), mvl000 (02.02.2023), olegtelec (18.01.2023), redhat2020 (12.02.2023), root7 (20.01.2024), Serg2008t (18.01.2023), swinaky (26.02.2023), Timothy6551 (18.01.2023), ura188 (18.01.2023), vovashulga (22.01.2023), wild_rabbit (14.03.2023), wlion (18.01.2023), youdjcommon (24.01.2023), Сергей Новик (23.05.2023)

  19. #40
    Помогает людям
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    270
    Сказал(а) спасибо
    69
    Поблагодарили 1820 раз(а) в 398 сообщениях

    По умолчанию Re: уни-патч для линукса и для макоси

    Цитата Сообщение от HPDX2300 Посмотреть сообщение
    Алгоритм вычисления Data=function(SN) "придуманных" дампов доработан.
    Данные в поле Data созданы так, чтобы они прошли 2-х этапную проверку в коде изделия.
    Рассказываю медленно и два раза:
    Алгоритм вычисления Data=function(SN) "придуманных" дампов доработан. Это означает, что решена проблема падения толстого клиента через 73 мин при запуске с "придуманным" дампом.

    Воспользовался последней версией унипатча и проверил дамп, полученный от бота, - прописал в унипатче в клиентский дамп SN=0x1C83DEAD (CLIENT_KEY_SN = bytearray(b'\xAD\xDE\x83\x1C')) и его Data, применил унипатч к хитро-патченной (отладочной) либе backbas.so, в которой я сделал исправления 8-ми машинных команд, в командах меняются только константы, они все суть время в мсек, отчего все рандомизированные интервалы по 60-90 сек "курения бамбука" сократились до 5мсек и вторая проверка памяти ключа выполняется через 5 сек после запуска толстого клиента. Т.е. на проверку дампа SN=0x1C83DEAD ушло 5 сек после запуска толстого клиента - с ним всё хорошо, падения не случилось.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  20. 22 пользователя(ей) сказали cпасибо:

    blademaster (22.01.2023), bnmbnmbnm (19.01.2023), CDGR (20.01.2023), DenAst78 (31.01.2023), dobuza (22.01.2023), g0ga (19.01.2023), garik-kg (20.01.2023), ilya.sh (19.01.2023), kelt44 (19.01.2023), Megakiller (25.01.2023), mvl000 (02.02.2023), olegtelec (19.01.2023), Pependos (20.01.2023), redhat2020 (12.02.2023), root7 (20.01.2024), Serg2008t (19.01.2023), Serrrgio (20.01.2023), Sova24 (06.02.2023), Timothy6551 (19.01.2023), vovashulga (22.01.2023), youdjcommon (24.01.2023), _BigB_ (19.01.2023)

Страница 4 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 07.02.2012, 23:43
  2. Патч для Warcraft III 1.26 rus
    от GHoSt444 в разделе Игры (games)
    Ответов: 0
    Последнее сообщение: 30.06.2011, 18:18
  3. Патч к AMS Enterprise 2.9
    от kryak_er в разделе Полезности
    Ответов: 2
    Последнее сообщение: 09.06.2009, 23:06
  4. Установка Линукса.
    от Большой Брат в разделе LINUX
    Ответов: 18
    Последнее сообщение: 09.11.2007, 05:26

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •