diff --git a/README.txt b/README.txt index 9f01d29c..c6f05414 100644 --- a/README.txt +++ b/README.txt @@ -12,9 +12,16 @@ Features: - 100% Free Software (GPL v3) Compilation: - Use either Visual Studio 2012, WDK 7.1 (Windows Driver Kit) or MinGW and then + Use either Visual Studio 2013, WDK 7.1 (Windows Driver Kit) or MinGW and then invoke the .sln, wdk_build.cmd or configure/make respectively. - + + Note that, since Rufus is a OSI compliant Open Source project, you are entitled to + download and use the *freely available* Visual Studio 2013 Community Edition to + build, run or develop for Rufus. As per the Visual Studio Community Edition license + this applies regardless of whether you are an individual or a corporate user. + For details, see http://www.visualstudio.com/products/visual-studio-community-vs + or http://pete.akeo.ie/2014/11/visual-studio-2013-has-now-become.html + Additional information: Rufus provides extensive information about what it is doing, either through its easily accessible log, or through the Windows debug facility. diff --git a/res/localization/ChangeLog.txt b/res/localization/ChangeLog.txt index 68faddd0..86fed74a 100644 --- a/res/localization/ChangeLog.txt +++ b/res/localization/ChangeLog.txt @@ -15,6 +15,13 @@ content. PLEASE, do not just look at this Changelog when updating your translation, but always use the English section of rufus.loc as your base. For instance, MSG_114, that was introduced in v1.0.8 is MORE than one line! +o Version 1.0.13 (2014.11.14) + - Changed MSG_104 "Syslinux v5.0 or later requires a '%s' file to be installed.\n" + "Because this file is more than 100 KB in size, and always present on Syslinux v5+ ISO images (...)" + -> "%s or later requires a '%s' file to be installed.\n" + "Because this file is more than 100 KB in size, and always present on %s ISO images (...)" + Note: since this doesn't require translator involvement, I have applied the change to existing translations. + o Version 1.0.12 (2014.05.19) - *NEW* MSG_079 "The device is not ready." - *NEW* MSG_189 "This ISO image is not compatible with the selected filesystem" diff --git a/res/localization/rufus.loc b/res/localization/rufus.loc index 434247f9..2b087f1d 100644 --- a/res/localization/rufus.loc +++ b/res/localization/rufus.loc @@ -271,8 +271,10 @@ t MSG_102 "Your platform cannot extract files from WIM archives. WIM extraction "is required to create EFI bootable Windows 7 and Windows Vista USB drives. You can fix that " "by installing a recent version of 7-Zip.\nDo you want to visit the 7-zip download page?" t MSG_103 "Download %s?" -t MSG_104 "Syslinux v5.0 or later requires a '%s' file to be installed.\n" - "Because this file is more than 100 KB in size, and always present on Syslinux v5+ ISO images, " +# Eg. "Grub4DOS v0.4 or later requires a 'grldr' file to be installed. Because this file +# is more than 100 KB in size, and always present on Grub4DOS ISO images, etc." +t MSG_104 "%s or later requires a '%s' file to be installed.\n" + "Because this file is more than 100 KB in size, and always present on %s ISO images, " "it is not embedded in Rufus.\n\nRufus can download the missing file for you:\n" "- Select 'Yes' to connect to the internet and download the file\n" "- Select 'No' if you want to manually copy this file on the drive later\n\n" @@ -662,8 +664,8 @@ t MSG_102 "نظامك لا يمكنه إستخراج الملفات من محف "مطلوب لخلق محركات الأقراص USB EFI تمهيدي ويندوز7 و ويندوز فيستا. يمكن إصلاح ذلك " "بواسطة تثبيت نسخة مستحدثة من برنامج 7-Zip. \nهل تريد زيارة صفحة تحميل 7-zip؟" t MSG_103 "تحميل %s؟" -t MSG_104 "Syslinux v5.0 أو أحدث تتطلّب ملف '%s' ليتم التثبيت.\n" - "لأن هذا الملف هو أكثر من 100KB في الحجم، ومتوفّر دائماً في ملفات ISO Syslinux v5+, " +t MSG_104 "%s أو أحدث تتطلّب ملف '%s' ليتم التثبيت.\n" + "لأن هذا الملف هو أكثر من 100KB في الحجم، ومتوفّر دائماً في ملفات ISO %s, " "ليس متوفّر في روفوس. \n\nروفوس يمكنه تحميل الملف المفقود لك: \n" "- إختر ‘نعم’ للإتصال بالإنترنت وتحميل الملف\n" "- إختر ‘لا’ إذا كنت تريد نسخ هذا الملف على محرك الأقراص يدوياً في وقت لاحق\n\n" @@ -1095,8 +1097,8 @@ t MSG_102 "Вашата платформа не може да извлече ф "е необходимо за създаване на EFI стартиращи Windows 7 и Windows Vista USB устройства. Може да поправите това " "като инсталирате настоящата версия на 7-Zip.\nИскате ли да посетите страницата за изтегляне на 7-zip?" t MSG_103 "Изтегляне %s?" -t MSG_104 "Syslinux v5.0 или по нова е необходима за '%s' файлът да бъде инсталиран.\n" - "Тъй като този файл е повече от 100 KB в размер, и винаги присъства на Syslinux v5+ ISO образи, " +t MSG_104 "%s или по нова е необходима за '%s' файлът да бъде инсталиран.\n" + "Тъй като този файл е повече от 100 KB в размер, и винаги присъства на %s ISO образи, " "не е включен в Rufus.\n\nRufus може да изтегли липсващият файл за вас:\n" "- Изберете 'Да' за да се свържете с интернет и да изтеглите файлът\n" "- Изберете 'Не' ако искате ръчно да копирате този файл\n\n" @@ -1470,8 +1472,8 @@ t MSG_102 "目前系统不支持解压 WIM 镜像。" "创建 Windows 7 或 Windows Vista 支持 EFI 的启动盘必要此功能。" "安装免费开源的 7-Zip 软件可以解决此问题。\n是否前往 7-Zip 网站下载?" t MSG_103 "是否下载 %s ?" -t MSG_104 "Syslinux v5.0 或更新版本需要同时安装 '%s' 文件支持。\n" - "此文件由于大于 100 KB 且包含在所有 Syslinux v5+ ISO 镜像中,而未内置于此程序中。\n\n" +t MSG_104 "%s 或更新版本需要同时安装 '%s' 文件支持。\n" + "此文件由于大于 100 KB 且包含在所有 %s ISO 镜像中,而未内置于此程序中。\n\n" "Rufus 提供此文件可以下载:\n" "- 选择 '是' 连接网络下载文件\n" "- 选择 '否' 自行下载到磁盘\n\n" @@ -1842,8 +1844,8 @@ t MSG_101 "缺少 WIM 支援" t MSG_102 "目前系統環境不支援解壓縮 WIM 檔案,此功能為製作 EFI Win7/Vista 開機片之要件。" "此問題可利用 7-Zip (免費的開放軟體) 解決,是否要立即前往 7-Zip 網站下載?" t MSG_103 "是否下載 %s?" -t MSG_104 "Syslinux v5.0 或更新版本需要同時安裝 '%s' 檔案方可支援。\n" - "由於這個檔案大於 100KB 且存在於每一版 Syslinux v5+ ISO 映像檔,故 Rufus 未預載。" +t MSG_104 "%s 或更新版本需要同時安裝 '%s' 檔案方可支援。\n" + "由於這個檔案大於 100KB 且存在於每一版 %s ISO 映像檔,故 Rufus 未預載。" "\n\n如欲下載這份檔案,請選擇「是」,Rufus 將會自動上網下載。若要自行手動下載安裝,請選擇「否」\n\n" "注意: 一經下載後,Rufus 未來會自動套用 '%s'\n" t MSG_105 "現在取消可能導致裝置異常,請再次確認是否確定取消?" @@ -2222,8 +2224,8 @@ t MSG_102 "Vaša platforma nemože vaditi datoteke iz WIM arhiva. WIM raspakiran "je potrebno da se naprave EFI bootable Windows 7 i Windows Vista USB pogoni. Preuzmite najnoviju " "verziju programa 7-Zip.\nŽelite li otvoriti 7-zip stranicu?" t MSG_103 "Preuzmi %s?" -t MSG_104 "Syslinux v5.0 ili noviji zahtijeva '%s' za instalaciju.\n" - "Zato šta je veća od 100 KB, i uvijek prisutna na Syslinux v5+ ISO slikama, " +t MSG_104 "%s ili noviji zahtijeva '%s' za instalaciju.\n" + "Zato šta je veća od 100 KB, i uvijek prisutna na %s ISO slikama, " "nije ugrađena u Rufus.\n\nRufus je može preuzeti:\n" "- Odaberite 'Da' kako bi se datoteka preuzela\n" "- Odaberite 'Ne' ako ne želite preuzeti datoteku\n\n" @@ -2623,8 +2625,8 @@ t MSG_102 "Váš systém neumí rozbalit soubory z WIM archivu. Rozbalení WIM j "k vytvoření USB disků Windows 7 a Windows Vista spustitelných pomocí EFI. Problém lze vyřešit " "nainstalováním aktuální verze programu 7-Zip.\nChcete přejít na stránku pro stažení 7-Zip?" t MSG_103 "Stáhnout %s?" -t MSG_104 "Syslinux v5.0 nebo vyšší vyžaduje instalaci souboru %s.\n" - "Protože tento soubor je větší než 100 KB a vždy je součástí Syslinux v5+ ISO obrazech, " +t MSG_104 "%s nebo vyšší vyžaduje instalaci souboru %s.\n" + "Protože tento soubor je větší než 100 KB a vždy je součástí %s ISO obrazech, " "není součástí programu Rufus.\n\nProgram Rufus může chybějící soubor stáhnout za vás:\n" "- Zvolte 'Ano' pro připojení na internet a stážení souboru\n" "- Zvolte 'Ne' pokud chcete tento soubor na disk později zkopírovat ručně\n\n" @@ -3019,8 +3021,8 @@ t MSG_102 "Din platform kan ikke udpakke filer fra et WIM arkiv. WIM udpakning " "er påkrævet for at oprette en EFI Windows 7 og Windows Vista USB boot-disk. Du kan fikse det " "ved at hente og installere 7-Zip.\nØnsker du at gå til 7-zip download-siden?" t MSG_103 "Hent %s?" -t MSG_104 "Syslinux v5.0 eller senere kræver en '%s' fil bliver installeret.\n" - "Fordi denne fil er mere end 100 KB i størrelse, og altid er at finde i Syslinux v5+ ISO image-filer, " +t MSG_104 "%s eller senere kræver en '%s' fil bliver installeret.\n" + "Fordi denne fil er mere end 100 KB i størrelse, og altid er at finde i %s ISO image-filer, " "er den ikke indbygget i Rufus.\n\nRufus kan downloade den manglede fil for dig:\n" "- Vælg 'Ja' for at tilsluttet internet og hente filen\n" "- Vælg 'Nej' hvis du selv ønsker at kopiere filen til drevet senere\n\n" @@ -3411,8 +3413,8 @@ t MSG_101 "WIM ondersteuning ontbreekt." t MSG_102 " Uw OS kan geen bestanden uitpakken van WIM archieven. WIM extractie is nodig om EFI opstartbare Windows 7 en Windows Vista USB drives te maken. U kunt dit oplossen" "door een recente versie van 7-Zip te installeren.\nWilt u de 7-Zip download pagina openen?" t MSG_103 "Download %s?" -t MSG_104 "Syslinux v5.0 of hoger vereist een '%s' bestand om het te kunnen installeren.\n" - "Omdat dit bestand groter is dan 100 KB en altijd aanwezig is op Syslinux v5+ ISO images," +t MSG_104 "%s of hoger vereist een '%s' bestand om het te kunnen installeren.\n" + "Omdat dit bestand groter is dan 100 KB en altijd aanwezig is op %s ISO images," "is het niet in Rufus ingebouwd.\n\nRufus kan het missende bestand voor u downloaden:\n" "- Selecteer 'Ja' om verbinding met het internet te maken en het bestand te downloaden\n" "- Selecteer 'Nee' als u later dit bestand handmatig naar de drive wilt kopiëren\n\n" @@ -3801,8 +3803,8 @@ t MSG_102 "Käytössä oleva alusta ei kykene purkamaan tiedostoja WIM-arkistois "on välttämätöntä EFI-bootattavien Windows 7 ja Windows Vista USB-asemien luomisessa. Voit korjata tilanteen" "asentamalla viimeaikaisen version 7-Zip-ohjelmasta.\nHaluatko vierailla 7-Zip-lataussivustolla?" t MSG_103 "Ladataanko %s?" -t MSG_104 "Syslinux v5.0 tai uudempi vaatii '%s'-tiedoston asennuksen.\n" - "Koska kyseinen tiedosto on kooltaan aina yli 100 KB, ja se löytyy aina Syslinux v5+ ISO-levykuvista, " +t MSG_104 "%s tai uudempi vaatii '%s'-tiedoston asennuksen.\n" + "Koska kyseinen tiedosto on kooltaan aina yli 100 KB, ja se löytyy aina %s ISO-levykuvista, " "sitä ei ole sisällytetty Rufukseen.\n\nRufus voi ladata puuttuvan tiedoston puolestasi:\n" "- Valitse 'Kyllä' yhdistääksesi internetiin ja ladataksesi tiedoston\n" "- Valitse 'Ei' jos haluat manuaalisesti kopioida tämän tiedoston asemalle myöhemmin\n\n" @@ -4183,8 +4185,8 @@ t MSG_102 "Votre plateforme ne peut pas extraire les fichiers depuis les archive "est nécessaire pour créer des médias USB démarrable avec EFI pour Windows 7/8 ou Windows Vista. Vous pouvez adresser " "ce problème en téléchargeant une version récente de l'utilitaire 7-Zip.\nVoulez-vous visiter la page de téléchargements de 7-zip?" t MSG_103 "Télécharger %s?" -t MSG_104 "Syslinux v5.0 ou plus récent requiert l'installation d'un fichier '%s'.\n" - "Puisque ce fichier fait plus de 100 Ko et est toujours présent sur les images ISO à base de Syslinux v5+, " +t MSG_104 "%s ou plus récent requiert l'installation d'un fichier '%s'.\n" + "Puisque ce fichier fait plus de 100 Ko et est toujours présent sur les images ISO à base de %s, " "il n'est pas inclus dans l'application.\n\nRufus peut télécharger ce fichier pour vous :\n" "- Choisissez 'Oui' pour télécharger le fichier depuis Internet\n" "- Choisissez 'Non' si vous compter copier ce fichier manuellement\n" @@ -4565,8 +4567,8 @@ t MSG_102 "Ihre Plattform kann keine Dateien aus WIM-Containern extrahieren. WIM "ist erforderlich, um EFI-startbare Windows 7 und Windows Vista USB-Laufwerke zu erzeugen. Sie können " "das durch die Installation der aktuellen 7-ZIP Version beheben.\nMöchten Sie die 7-ZIP Download-Seite aufrufen?" t MSG_103 "Download %s?" -t MSG_104 "Syslinux v5.0 oder neuer erfordert, dass eine '%s' installiert ist.\n" - "Weil diese Datei größer als 100 kB ist, und in Syslinux v5+ ISO-Abbildern immer enthalten ist, " +t MSG_104 "%s oder neuer erfordert, dass eine '%s' installiert ist.\n" + "Weil diese Datei größer als 100 kB ist, und in %s ISO-Abbildern immer enthalten ist, " "ist sie in Rufus nicht enthalten.\n\nRufus kann die fehlende Datei für Sie herunterladen:\n" "- Wählen Sie 'Ja', um die Datei herunterzuladen\n" "- Wählen Sie 'Nein', wenn Sie diese Datei später selbst auf das Laufwerk kopieren wollen\n\n" @@ -4991,8 +4993,8 @@ t MSG_102 "Η πλατφόρμα σας δεν μπορεί να αποσυμπ "Windows 7 και Windows Vista δίσκων με δυνατότητα εκκίνησης τύπου EFI." "Μπορείτε να διορθώσετε αυτό το πρόβλημα με την χρήση μίας πρόσφατης έκδοσης του 7-Zip.\n Θα θέλατε να επισκεφθείτε την σελίδα λήψης του 7-Zip;"" t MSG_103 "Λήψη %s?" -t MSG_104 "Το Syslinux v5.0 ή κάποια νεότερη έκδοση χρειάζεται το αρχείο '%s' να είναι εγκατεστημένο.\n" - "Επειδή αυτό το αρχείο είναι μεγαλύτερο από 100 KB σε μέγεθος, και υπάρχει πάντα σε είδωλα ISO Syslinux v5+, " +t MSG_104 "Το %s ή κάποια νεότερη έκδοση χρειάζεται το αρχείο '%s' να είναι εγκατεστημένο.\n" + "Επειδή αυτό το αρχείο είναι μεγαλύτερο από 100 KB σε μέγεθος, και υπάρχει πάντα σε είδωλα ISO %s, " "δεν είναι ενσωματωμένο στο Rufus .\n\nΤο Rufus είναι σε θέση να κάνει λήψη αυτού το αρχείου για εσάς:\n" "- Επιλέξτε το 'Ναι' για να συνδεθείτε στο διαδίκτυο και να κάνετε λήψη του αρχείου\n" "- Επιλέξτε το 'Όχι' αν θέλετε να αντιγράψετε με μη αυτόματο τρόπο το αρχείο στο δίσκο αργότερα.\n\n" @@ -5356,8 +5358,8 @@ t MSG_102 "A platformod nem használ WIM archívumokat. A WIM kicsomagolása " "szükséges EFI-s Windows 7 és Windows Vista USB eszközök készítéséhez. Ezt megoldhatod " "a jelenlegi 7-Zip telepítésével.\nMegszeretnéd látogatni a 7-zip letöltési odlalát?" t MSG_103 "Letöltöd ezt: %s?" -t MSG_104 "Syslinux v5.0 vagy későbbi verzió szükséges a(z) '%s' telepítéséhez.\n" - "Az ok az, emrt a fájl nagyobb, mint 100 KB, és ez szükséges Syslinux v5+ verziójú ISO képekhez, " +t MSG_104 "%s vagy későbbi verzió szükséges a(z) '%s' telepítéséhez.\n" + "Az ok az, emrt a fájl nagyobb, mint 100 KB, és ez szükséges %s verziójú ISO képekhez, " "ami nics a Rufushoz mellékelve.\n\nA Rufus letöltheti a hiányzó fájlt:\n" "- Nyomj 'Igen' gombot az internethez csatlakozáshoz és a letöltéshez\n" "- Nyomj 'Nem' gombot, ha majd később kézileg szeretnéd felmásolni a fájlt az eszközre\n\n" @@ -5753,8 +5755,8 @@ t MSG_102 "Platform tidak dapat mengekstrak file dari arsip WIM. ekstraksi WIM " "diperlukan untuk membuat EFI USB bootable Windows 7 dan Windows Vista. Anda dapat memperbaikinya " "dengan memasang versi terbaru dari 7-Zip.\nApakah Anda ingin mengunjungi halaan download 7-zip?" t MSG_103 "Download %s?" -t MSG_104 "Syslinux v5.0 membutuhkan '%s' file yang akan diinstal.\n" - "Karena ukuran file ini kurang lebih 100 KB, dan selalu ada dalam Syslinux v5+ ISO images, " +t MSG_104 "%s membutuhkan '%s' file yang akan diinstal.\n" + "Karena ukuran file ini kurang lebih 100 KB, dan selalu ada dalam %s ISO images, " "ini tidak ada dalam Rufus.\n\nRufus dapat mengunduh file yang hilang untuk Anda:\n" "- Select 'Yes' untuk terhubung ke internet dan mengunduh file\n" "- Select 'No' jika Anda ingin secara manual menyalin file ini pada drive\n\n" @@ -6132,8 +6134,8 @@ t MSG_102 "Il tuo sistema operativo non può estrarre file dall'archivio WIM. L' "è necessaria per creare una unità USB avviabile EFI Windows 7 e Windows Vista. Puoi correggere ciò " "installando una versione recente di 7-Zip.\nVuoi visitare la pagina di downlaod di 7-zip download page?" t MSG_103 "Download %s?" -t MSG_104 "Syslinux 5.0 o successivo richiedono l'installazione di un file '%s'.\n" - "Poichè questo file è più grande di 100 KB, ed è sempre presente nell'immagine ISO di Syslinux v5+, " +t MSG_104 "%s o successivo richiedono l'installazione di un file '%s'.\n" + "Poichè questo file è più grande di 100 KB, ed è sempre presente nell'immagine ISO di %s, " "il file non è incluso in Rufus.\n\nRufus può scaricare per te il file mancante:\n" "- Seleziona 'Sì' per collegarti a internet e scaricare il file\n" "- Seleziona 'No' se vuoi copiare manualmente questo file nell'unità più tardi\n\n" @@ -6537,8 +6539,8 @@ t MSG_102 "ごプラットフォームはWIM引き出せません。Windows 7と "を作るためにWIM引き出しは必要です。 " "7-zipの最近バージョンとインストールでそれは直せます。\n7-zipダウンロードページに行きたいですか?" t MSG_103 "%s? ダウンロード中" -t MSG_104 "Syslinux v5.0以降のために '%s' ファイルがインストールしなければなれません。\n" - "このファイルは100KBより大きいそしてSyslinux v5+ISOにいつもあるから、 " +t MSG_104 "%s以降のために '%s' ファイルがインストールしなければなれません。\n" + "このファイルは100KBより大きいそして%s ISOにいつもあるから、 " "Rufusに埋め込みません。\n\nRufusは不足しているファイルをダウンロードしてあげます:\n" "- インタネットに接続しファイルをダウンロードするために、「Yes」を選択して下さい。\n" "- 後にファイルを手動でコピーするために、「No」を選択して下さい。\n\n" @@ -6933,8 +6935,8 @@ t MSG_102 "이 플랫폼은 WIM 아카이브에서 파일을 추출 할 수 없 "EFI 부팅 가능한 Windows 7 및 Windows Vista의 USB 드라이브를 생성해야합니다. 최신 버전의 " "7-Zip으로 이 문제를 해결할 수 있습니다.\n지금 7-ZIP을 다운로드 하시겠습니까?" t MSG_103 "%s 다운로드?" -t MSG_104 "Syslinux v5.0과 그 이후의 버전의 설치에는 '%s' 파일이 필요합니다.\n" - "그러나 파일의 크기가 100KB 이상으로 크고 Syslinux v5+ ISO 이미지에는 항상 들어있는 파일이므로, " +t MSG_104 "%s과 그 이후의 버전의 설치에는 '%s' 파일이 필요합니다.\n" + "그러나 파일의 크기가 100KB 이상으로 크고 %s ISO 이미지에는 항상 들어있는 파일이므로, " "이 프로그램에는 포함시키지 않았습니다.\n\n필요하다면 지금 이 파일을 다운로드할 수 있습니다:\n" "- 인터넷에 연결하여 이 파일을 다운로드하려면 '예'를 선택하고\n" "- 나중에 이 파일을 직접 드라이브에 복사하려면 '아니오'를 선택하십시오.\n\n" @@ -7353,8 +7355,8 @@ t MSG_102 "Jūsu OS nevar atpakot failus no WIM arhīviem. Savukārt tas " "nepieciešams EFI ielādes diska izveidei OS Windows 7 vai Windows Vista USB diskiem. To var izlabot " "instalējot pēdējo 7-Zip versiju.\nVai vēlaties apmeklēt 7-zip ielādes saitu?" t MSG_103 "Lejuplādēts %s?" -t MSG_104 "Faila '%s' instalācijai nepieciešama Syslinux v5.0 vai jaunāka versija.\n" - "Par cik fails ir lielāks par 100 KB, un pieder Syslinux v5+ ISO imidžiem, " +t MSG_104 "Nepieciešama %s vai jaunāka versija faila '%s' instalācijai.\n" + "Par cik fails ir lielāks par 100 KB, un pieder %s ISO imidžiem, " "tas netika iekļauts programmā Rufus.\n\nRufus var ielādēt nepieciešamo failu:\n" "- Izvēlieties 'Jā' lai pieslēgties internetam un ielādētu failu\n" "- Izvēlieties 'Nē' ja vēlaties failu ielādēt vēlāk patstāvīgi\n\n" @@ -7770,8 +7772,8 @@ t MSG_102 "Jūsų platforma negali išskleisti failų iš WIM archyvų. WIM išs "būtinas norint sukurti EFI įkeliamus Windows 7 ir Windows Vista USB diskus. Jūs galite tai sutvarkyti " "įdiegdami dabartinę 7-Zip versiją.\nAr norite apsilankyti 7-zip atsisiuntimo puslapyje?" t MSG_103 "Atsiųsti %s?" -t MSG_104 "Syslinux v5.0 ar vėlesniam reikia, kad '%s' failas būtų įdiegtas.\n" - "Kadangi šis failas didesnis nei 100 KB ir yra visada įtrauktas į Syslinux v5+ ISO atvaizdus, " +t MSG_104 "%s ar vėlesniam reikia, kad '%s' failas būtų įdiegtas.\n" + "Kadangi šis failas didesnis nei 100 KB ir yra visada įtrauktas į %s ISO atvaizdus, " "jis nėra įjungtas į Rufus.\n\nRufus gali jums atsiųsti trūkstamą failą:\n" "- Pasirinkite 'Taip' norėdami prisijungti prie interneto ir atsisiųsti failą\n" "- Pasirinkite 'Ne' norėdami rankiniu būdu nukopijuoti šį failą į diską vėliau\n\n" @@ -8194,8 +8196,8 @@ t MSG_102 "Platform anda tidak boleh mengekstrak fail daripada arkib WIM. Ini di "untuk mencipta cakera boleh boot EFI Windows 7 dan Windows Vista. Anda boleh membaikinya dengan " "cara mendapatkan versi 7-Zip terbaharu.\nAdakah anda mahu ke halaman muat turun 7-zip?" t MSG_103 "Muat turun %s?" -t MSG_104 "Syslinux v5.0 atau kemudian memerlukan fail '%s' di komputer anda.\n" - "Oleh sebab fail tersebut lebih besar daripada 100 KB dan sentiasa ada dalam imej Syslinux v5+, " +t MSG_104 "%s atau kemudian memerlukan fail '%s' di komputer anda.\n" + "Oleh sebab fail tersebut lebih besar daripada 100 KB dan sentiasa ada dalam imej %s, " "Ia tidak termasuk dalam Rufus.\n\nRufus boleh memuat turunkan fail tersebut untuk anda:\n" "- Pilih 'Ya' untuk muat turun fail tersebut\n" "- Pilih 'Tidak' jika anda mahu menyalin fail tersebut secara manual ke cakera ini pada masa lain\n\n" @@ -8615,8 +8617,8 @@ t MSG_102 "Twoja platforma nie może wypakować plików z archiwów WIM. Wypakow "jest wymagane aby utworzyć bootowalny dysk USB EFI z Windows 7 i Windows Vista. Możesz to naprawić " "instalując aktualną wersję 7-Zip.\nCzy chcesz odwiedzić stronę pobierania 7-zip?" t MSG_103 "Pobrać %s?" -t MSG_104 "Syslinux v5.0 lub późniejszy wymaga zainstalowania pliku '%s' .\n" - "Ponieważ ten plik jest większy niż 100 KB i zawsze jest obecny na obrazach ISO Syslinux v5+, " +t MSG_104 "%s lub późniejszy wymaga zainstalowania pliku '%s' .\n" + "Ponieważ ten plik jest większy niż 100 KB i zawsze jest obecny na obrazach ISO %s, " "nie jest dołączony do Rufusa.\n\nRufus może pobrać brakujący plik dla ciebie:\n" "- Wybierz 'Yes' aby połączyć sie z internetem i pobrać plik\n" "- Wybierz 'No' jeśli chcesz ręcznie skopiować ten plik na dysk później\n\n" @@ -8862,9 +8864,9 @@ t MSG_102 "A sua plataforma não pode extrair arquivos compactado WIM. A extraç "é requerida para criar dispositivos USB bootável tipo EFI com Windows 7 e Windows Vista. " "Para corrigir isto instale uma versão recente do 7-Zip.\nQuer visitar a página para baixar o 7-zip?" t MSG_103 "Baixar %s?" -t MSG_104 "Syslinux v5.0 ou posterior requer que esteja instalado um arquivo '%s' .\n" +t MSG_104 "%s ou posterior requer que esteja instalado um arquivo '%s' .\n" "Dado que este arquivo tem mais de 100 KB e está sempre presente nas \n" - "imagens ISO Syslinux v5+, Rufus não o inclui na sua distribuição.\n\n" + "imagens ISO %s, Rufus não o inclui na sua distribuição.\n\n" "Rufus pode baixar o arquivo em falta:\n" "- Selecione 'Sim' para se conectar à Internet e baixar o arquivo\n" "- Selecione 'Não' se deseja deixar para depois a cópia deste arquivo na sua unidade\n\n" @@ -9202,9 +9204,9 @@ t MSG_102 "A sua plataforma não pode extrair arquivos comprimidos WIM. A extra "é requerida para criar dispositivos USB bootable tipo EFI com Windows 7 e Windows Vista. " "Para corrigir isto instale uma versão recente do 7-Zip.\nQuer visitar a página de Downloads do 7-zip?" t MSG_103 "Download %s?" -t MSG_104 "Syslinux v5.0 ou posterior requer que esteja instalado um arquivo '%s' .\n" +t MSG_104 "%s ou posterior requer que esteja instalado um arquivo '%s' .\n" "Dado que este arquivo tem mais de 100 KB e está sempre presente nas \n" - "imagens ISO Syslinux v5+, Rufus não o inclui na sua distribuição.\n\n" + "imagens ISO %s, Rufus não o inclui na sua distribuição.\n\n" "Rufus pode descarregar o arquivo em falta:\n" "- Selecione 'Sim' para se conectar à Internet e descarregar o arquivo\n" "- Selecione 'Não' se deseja copiar manualmente este arquivo na sua unidade depois\n\n" @@ -9588,8 +9590,8 @@ t MSG_102 "Sistemul de operare nu poate extrage fişierele de WIM. Extragerea WI "este necesar pentru a crea un dispozitiv USB bootabil UEFI Windows 7 şi Windows Vista. Puteţi corecta aceasta " "instalaţi o versiune recentă a 7-Zip.\n Doriţi să vizitaţi pagina de Descărcare a 7-Zip?" t MSG_103 "Descărcare %s?" -t MSG_104 "Syslinux 5.0 sau mai mare, necesită instalarea unui fişier'%s'.\n" - "Deoarece acest fişier este mai mare de 100 KB, şi este prezentă în imaginea ISO Syslinux v5+, " +t MSG_104 "%s sau mai mare, necesită instalarea unui fişier'%s'.\n" + "Deoarece acest fişier este mai mare de 100 KB, şi este prezentă în imaginea ISO %s, " "fişierul nu este inclus în Rufus.\n\n Rufus poate descărca fişierul lipsă pentru tine:\n" "- Selectaţi "Da" pentru a vă conecta la Internet şi a descărca fişierul\n" "- Selectaţi "Nu" dacă doriţi să copiaţi manual acest fişier mai tîrziu\n\n" @@ -9989,8 +9991,8 @@ t MSG_101 "Отсутствует поддержка WIM" t MSG_102 "Ваша система не может извлекать файлы из WIM-архивов, но это необходимо для создания загрузочного USB-диска с Windows 7 или Windows Vista." "Вы можете исправить это установив последнюю версию 7-Zip"\nХотите посетить страницу загрузки 7-zip?" t MSG_103 "Скачивание %s?" -t MSG_104 "Syslinux v5.0 или поздней версии требует наличия '%s'.\n" - "Поскольку этот файл >100 Кб, и всегда присутствует в Syslinux v5+ ISO-образах, " +t MSG_104 "%s или поздней версии требует наличия '%s'.\n" + "Поскольку этот файл >100 Кб, и всегда присутствует в %s ISO-образах, " "он не был встроен в Rufus.\n\nRufus может скачать недостающий файл:\n" "- Выберите 'Да', если хотите скачать этот файл\n" "- Выберите 'Нет', если хотите скачать его вручную позже\n\n" @@ -10375,8 +10377,8 @@ t MSG_102 "Vaša platforma nedokáže rozbaliť súbory z WIM archívov. WIM ext "požaduje vytvorenie EFI bootovateľnej USB jednotky s Windows 7 a Windows Vista " "nainštalovaním novej verzie programu 7-Zip.\nChcete navštíviť webstránku 7-Zip?" t MSG_103 "Stiahnúť %s?" -t MSG_104 "Syslinux v5.0 alebo vyššie požadujú nainštalovať súbor %s.\n" - "Pretože tento súbor je väčší ako 100 KB a vždy prítomný v Syslinux v5+ ISO obrazoch, " +t MSG_104 "%s alebo vyššie požadujú nainštalovať súbor %s.\n" + "Pretože tento súbor je väčší ako 100 KB a vždy prítomný v %s ISO obrazoch, " "nie je implementovaný v programe Rufus.\n\nProgram Rufus môže za vás stiahnuť chýbajúci súbor:\n" "- Stlačte 'Áno' pre pripojenie na internet a stiahnutie súboru\n" "- Stlačte 'Nie' ak chcete manuálne skopírovať tento súbor na jednotku neskôr\n\n" @@ -10782,8 +10784,8 @@ t MSG_102 "Vaš sistem ne more vleči datotek iz arhivov WIM. To je potrebno " "za ustvarjanje zagonskih pogonov USB z operacijskim sistemom Windows Vista ali Windows 7. " "To lahko popravite, če namestite nedavno verzijo programa 7-Zip.\nŽelite obiskati spletno stran, kjer lahko 7-Zip prenesete?" t MSG_103 "Prenesem %s?" -t MSG_104 "Syslinux 5.0 ali novejši zahteva, da je nameščena datoteka \"%s\".\n" - "Ker je ta datoteka večja od 100 KB in je vedno prisotna na ISO slikah s Syslinux 5.0 ali novejšim, " +t MSG_104 "%s ali novejši zahteva, da je nameščena datoteka \"%s\".\n" + "Ker je ta datoteka večja od 100 KB in je vedno prisotna na ISO slikah s %s ali novejšim, " "ni vgrajena v Rufus.\n\nRufus jo lahko prenese namesto vas.\n" "- Izberite \"Da\", da se povežete na internet in prenesete datoteko.\n" "- Izberite \"Ne\", če želite to datoteko pozneje sami kopirati na pogon.\n\n" @@ -11176,9 +11178,9 @@ t MSG_102 "Su plataforma no puede extraer archivos de comprimidos WIM. La extrac "se requiere para crear dispositivos USB booteables tipo EFI con Windows 7 y Windows Vista. " "Para esto podría instalar una versión reciente de 7-Zip.\n¿Desea visitar el sitio de descargas de 7-zip?" t MSG_103 "¿Descargar %s?" -t MSG_104 "Syslinux v5.0 o posterior requiere que esté instalado un archivo '%s' .\n" +t MSG_104 "%s o posterior requiere que esté instalado un archivo '%s' .\n" "Dado que este archivo pesa más de 100 KB y siempre está presente en las \n" - " imágenes ISO Syslinux v5+, Rufus no lo incluye en su distribución.\n\n" + " imágenes ISO %s, Rufus no lo incluye en su distribución.\n\n" "Rufus puede descargar el archivo faltante:\n" "- Seleccione 'Sí' para conectarse a Internet y descargar el archivo\n" "- Seleccione 'No' si desea copiar manualmente este archivo en la unidad después\n\n" @@ -11581,8 +11583,8 @@ t MSG_102 "Din dator kan inte packa upp filer från ett WIM-arkiv. WIM-uppacknin "krävs för att skapa EFI-startbar Windows 7 och Windows Vista USB-enheter. Du kan lösa detta " "genom att installera 7-Zip.\nVill du besöka 7-zip nedladdningssida?" t MSG_103 "Ladda ned %s?" -t MSG_104 "Syslinux v5.0 eller senare kräver en '%s' fil för att bli installerad.\n" - "Eftersom filen är större än 100 KB, och alltid finns på Syslinux v5+ ISO-avbilder, " +t MSG_104 "%s eller senare kräver en '%s' fil för att bli installerad.\n" + "Eftersom filen är större än 100 KB, och alltid finns på %s ISO-avbilder, " "finns den inte inbyggd i Rufus.\n\nRufus kan ladda ned denna filen åt dig:\n" "- Välj 'Ja' för att ansluta till internet och ladda ned filen\n" "- Välj 'Nej' om du själv senare vill kopiera in filen på enheten\n\n" @@ -11997,8 +11999,8 @@ t MSG_102 "Platformunuz WIM arşivlerinden dosyaları ayrıştıramaz. WIM ayrı "EFI açılabilir Windows 7 ve Windows Vista USB sürücüleri oluşturmak için ereklidir. Bu durumu " "7-Zip son sürümünü yükleyerek aşabilirsiniz.\n7-zip indirme sayfasına gitmek istiyor musunuz?" t MSG_103 "%s indirilsin mi?" -t MSG_104 "Syslinux v5.0 yada daha üstünün yüklenebilmesi için '%s' dosyası gerekir.\n" - "Çünkü bu dosyanın boyutu 100 KB tan daha büyüktür ve Syslinux v5+ ISO yansımalarında mutlaka bulunur, " +t MSG_104 "%s yada daha üstünün yüklenebilmesi için '%s' dosyası gerekir.\n" + "Çünkü bu dosyanın boyutu 100 KB tan daha büyüktür ve %s ISO yansımalarında mutlaka bulunur, " "Rufus'a gömülü değildir.\n\nRufus eksik dosyayı sizin için indirebilir:\n" "- İnternete bağlanıp dosyayı indirmek için 'Evet'i ssçin\n" "- Dosyayı daha sonra sürücüye elle kopyalamak istiyorsanız 'Hayır'ı seçin\n\n" @@ -12423,8 +12425,8 @@ t MSG_101 "Відсутня підтримка WIM" t MSG_102 "Ваша система не може видобувати файли з WIM-архівів, однак це необхідно для створення завантажувального USB-диску з Windows 7 чи Windows Vista." "Ви можете виправити це встановивши останню версію 7-Zip"\nХочете відвідати сторінку завантаження 7-zip?" t MSG_103 "Завантаження %s?" -t MSG_104 "Syslinux v5.0 чи більш пізньої версії потребує наявності '%s'.\n" - "Оскільки цей файл >100 Кб, і завжди присутній в Syslinux v5+ ISO-образах, " +t MSG_104 "%s чи більш пізньої версії потребує наявності '%s'.\n" + "Оскільки цей файл >100 Кб, і завжди присутній в %s ISO-образах, " "він не був вбудований в Rufus.\n\nRufus може завантажити бракуючий файл:\n" "- Оберіть 'Так', якщо хочете завантажити даний файл\n" "- Оберіть 'Ні', якщо хочете завантажити його вручну пізніше\n\n" diff --git a/src/drive.c b/src/drive.c index ac4afc59..7a385b6f 100644 --- a/src/drive.c +++ b/src/drive.c @@ -567,6 +567,8 @@ const struct {int (*fn)(FILE *fp); char* str;} known_mbr[] = { { is_syslinux_mbr, "Syslinux" }, { is_reactos_mbr, "ReactOS" }, { is_kolibri_mbr, "KolibriOS" }, + { is_grub_mbr, "Grub4DOS" }, + { is_grub2_mbr, "Grub 2.0" }, { is_zero_mbr, "Zeroed" }, }; diff --git a/src/format.c b/src/format.c index 968148bd..bb98d84b 100644 --- a/src/format.c +++ b/src/format.c @@ -911,12 +911,18 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive) } else if ( (dt == DT_ISO) && (iso_report.has_kolibrios) && (fs == FS_FAT32)) { uprintf(using_msg, "KolibriOS"); r = write_kolibri_mbr(&fake_fd); - } else if ( (dt == DT_SYSLINUX_V4) || (dt == DT_SYSLINUX_V6) || ((dt == DT_ISO) && ((fs == FS_FAT16) || (fs == FS_FAT32))) ) { - uprintf(using_msg, "Syslinux"); - r = write_syslinux_mbr(&fake_fd); + } else if (((dt == DT_ISO) && (iso_report.has_grub4dos)) || (dt == DT_GRUB4DOS)) { + uprintf(using_msg, "Grub4DOS"); + r = write_grub_mbr(&fake_fd); + } else if (dt == DT_GRUB2) { + uprintf(using_msg, "Grub 2.0"); + r = write_grub2_mbr(&fake_fd); } else if (dt == DT_REACTOS) { uprintf(using_msg, "ReactOS"); r = write_reactos_mbr(&fake_fd); + } else if ( (dt == DT_SYSLINUX_V4) || (dt == DT_SYSLINUX_V6) || ((dt == DT_ISO) && ((fs == FS_FAT16) || (fs == FS_FAT32))) ) { + uprintf(using_msg, "Syslinux"); + r = write_syslinux_mbr(&fake_fd); } else { if ((IS_WINPE(iso_report.winpe) && !iso_report.uses_minint) || (IsChecked(IDC_RUFUS_MBR))) { uprintf(using_msg, APPLICATION_NAME); @@ -1229,6 +1235,7 @@ DWORD WINAPI FormatThread(void* param) char wim_image[] = "?:\\sources\\install.wim"; char efi_dst[] = "?:\\efi\\boot\\bootx64.efi"; char kolibri_dst[] = "?:\\MTLD_F32"; + char grub4dos_dst[] = "?:\\grldr"; PF_TYPE_DECL(WINAPI, LANGID, GetThreadUILanguage, (void)); PF_TYPE_DECL(WINAPI, LANGID, SetThreadUILanguage, (LANGID)); @@ -1533,8 +1540,8 @@ DWORD WINAPI FormatThread(void* param) FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; goto out; } - } else if ((((dt == DT_WINME) || (dt == DT_FREEDOS) || (dt == DT_REACTOS)) && - (!use_large_fat32)) || ((dt == DT_ISO) && ((fs == FS_NTFS)||(iso_report.has_kolibrios)))) { + } else if ((((dt == DT_WINME) || (dt == DT_FREEDOS) || (dt == DT_GRUB4DOS) || (dt == DT_REACTOS)) && + (!use_large_fat32)) || ((dt == DT_ISO) && ((fs == FS_NTFS)||(iso_report.has_kolibrios||iso_report.has_grub4dos)))) { // We still have a lock, which we need to modify the volume boot record // => no need to reacquire the lock... hLogicalVolume = GetLogicalHandle(DriveIndex, TRUE, FALSE); @@ -1580,6 +1587,12 @@ DWORD WINAPI FormatThread(void* param) FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_CANNOT_COPY; goto out; } + } else if (dt == DT_GRUB4DOS) { + grub4dos_dst[0] = drive_name[0]; + uprintf("Installing: %s (Grub4DOS loader)\n", grub4dos_dst); + IGNORE_RETVAL(_chdirU(app_dir)); + if (!CopyFileU(FILES_DIR "\\grub4dos\\grldr", grub4dos_dst, FALSE)) + uprintf("Failed to copy file: %s", WindowsErrorString()); } else if (dt == DT_ISO) { if (image_path != NULL) { UpdateProgress(OP_DOS, 0.0f); diff --git a/src/iso.c b/src/iso.c index 7fbd510e..d35d2ee6 100644 --- a/src/iso.c +++ b/src/iso.c @@ -58,6 +58,7 @@ BOOL enable_iso = TRUE, enable_joliet = TRUE, enable_rockridge = TRUE, has_ldlin #define ISO_BLOCKING(x) do {x; iso_blocking_status++; } while(0) static const char* psz_extract_dir; static const char* bootmgr_efi_name = "bootmgr.efi"; +static const char* grldr_name = "grldr"; static const char* ldlinux_name = "ldlinux.sys"; static const char* ldlinux_c32 = "ldlinux.c32"; static const char* efi_dirname = "/efi/boot"; @@ -146,12 +147,15 @@ static BOOL check_iso_props(const char* psz_dirname, BOOL* is_syslinux_cfg, BOOL if (safe_strnicmp(psz_basename, bootmgr_efi_name, safe_strlen(bootmgr_efi_name)-5) == 0) { iso_report.has_bootmgr = TRUE; } - if (safe_stricmp(psz_basename, bootmgr_efi_name) == 0) { - iso_report.has_win7_efi = TRUE; + if (safe_stricmp(psz_basename, grldr_name) == 0) { + iso_report.has_grub4dos = TRUE; } if (safe_stricmp(psz_basename, kolibri_name) == 0) { iso_report.has_kolibrios = TRUE; } + if (safe_stricmp(psz_basename, bootmgr_efi_name) == 0) { + iso_report.has_win7_efi = TRUE; + } } // Check for ReactOS' setupldr.sys anywhere diff --git a/src/ms-sys/.msvc/ms-sys.vcxproj b/src/ms-sys/.msvc/ms-sys.vcxproj index cf3ed0dc..9643a8c7 100644 --- a/src/ms-sys/.msvc/ms-sys.vcxproj +++ b/src/ms-sys/.msvc/ms-sys.vcxproj @@ -50,6 +50,8 @@ + + diff --git a/src/ms-sys/.msvc/ms-sys.vcxproj.filters b/src/ms-sys/.msvc/ms-sys.vcxproj.filters index a96c8fa2..945108d4 100644 --- a/src/ms-sys/.msvc/ms-sys.vcxproj.filters +++ b/src/ms-sys/.msvc/ms-sys.vcxproj.filters @@ -131,6 +131,12 @@ Header Files + + Header Files + + + Header Files + diff --git a/src/ms-sys/br.c b/src/ms-sys/br.c index a2dd2081..868cd139 100644 --- a/src/ms-sys/br.c +++ b/src/ms-sys/br.c @@ -120,6 +120,27 @@ int is_reactos_mbr(FILE *fp) contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); } /* is_reactos_mbr */ +int is_grub_mbr(FILE *fp) +{ + #include "mbr_grub.h" + unsigned char aucRef[] = {0x55, 0xAA}; + (void)mbr_grub_0x200; /* silence unused variable warning */ + + return + contains_data(fp, 0x0, mbr_grub_0x0, sizeof(mbr_grub_0x0)) && + contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); +} /* is_grub_mbr */ + +int is_grub2_mbr(FILE *fp) +{ + #include "mbr_grub2.h" + unsigned char aucRef[] = {0x55, 0xAA}; + + return + contains_data(fp, 0x0, mbr_grub2_0x0, sizeof(mbr_grub2_0x0)) && + contains_data(fp, 0x1FE, aucRef, sizeof(aucRef)); +} /* is_grub2_mbr */ + int is_kolibri_mbr(FILE *fp) { #include "mbr_kolibri.h" @@ -240,6 +261,27 @@ int write_syslinux_mbr(FILE *fp) write_data(fp, 0x1FE, aucRef, sizeof(aucRef)); } /* write_syslinux_mbr */ +int write_grub_mbr(FILE *fp) +{ + #include "mbr_grub.h" + unsigned char aucRef[] = {0x55, 0xAA}; + + return + write_data(fp, 0x0, mbr_grub_0x0, sizeof(mbr_grub_0x0)) && + write_data(fp, 0x1FE, aucRef, sizeof(aucRef)) && + write_data(fp, 0x200, mbr_grub_0x200, sizeof(mbr_grub_0x200)); +} + +int write_grub2_mbr(FILE *fp) +{ + #include "mbr_grub2.h" + unsigned char aucRef[] = {0x55, 0xAA}; + + return + write_data(fp, 0x0, mbr_grub2_0x0, sizeof(mbr_grub2_0x0)) && + write_data(fp, 0x1FE, aucRef, sizeof(aucRef)); +} + int write_zero_mbr(FILE *fp) { #include "mbr_zero.h" diff --git a/src/ms-sys/inc/br.h b/src/ms-sys/inc/br.h index 1eb0babd..b879ae5e 100644 --- a/src/ms-sys/inc/br.h +++ b/src/ms-sys/inc/br.h @@ -44,6 +44,14 @@ int is_rufus_mbr(FILE *fp); FALSE.The file position will change when this function is called! */ int is_reactos_mbr(FILE *fp); +/* returns TRUE if the file has a Grub4DOS master boot record, otherwise + FALSE.The file position will change when this function is called! */ +int is_grub_mbr(FILE *fp); + +/* returns TRUE if the file has a Grub 2.0 master boot record, otherwise + FALSE.The file position will change when this function is called! */ +int is_grub2_mbr(FILE *fp); + /* returns TRUE if the file has a KolibriOS master boot record, otherwise FALSE.The file position will change when this function is called! */ int is_kolibri_mbr(FILE *fp); @@ -84,6 +92,14 @@ int write_rufus_mbr(FILE *fp); FALSE */ int write_reactos_mbr(FILE *fp); +/* Writes a Grub4DOS master boot record to a file, returns TRUE on success, otherwise + FALSE */ +int write_grub_mbr(FILE *fp); + +/* Writes a Grub 2.0 master boot record to a file, returns TRUE on success, otherwise + FALSE */ +int write_grub2_mbr(FILE *fp); + /* Writes a KolibriOS master boot record to a file, returns TRUE on success, otherwise FALSE */ int write_kolibri_mbr(FILE *fp); diff --git a/src/ms-sys/inc/file.h b/src/ms-sys/inc/file.h index 71164152..b04370ab 100644 --- a/src/ms-sys/inc/file.h +++ b/src/ms-sys/inc/file.h @@ -4,7 +4,7 @@ #include /* Max valid value of uiLen for contains_data */ -#define MAX_DATA_LEN 8192 +#define MAX_DATA_LEN 16384 /* Checks if a file contains a data pattern of length Len at position Position. The file pointer will change when calling this function! */ diff --git a/src/ms-sys/inc/mbr_grub.h b/src/ms-sys/inc/mbr_grub.h new file mode 100644 index 00000000..e9298d59 --- /dev/null +++ b/src/ms-sys/inc/mbr_grub.h @@ -0,0 +1,769 @@ +/* First 432 bytes of MBR from Grub4DOS */ +unsigned char mbr_grub_0x0[] = { + 0xEB, 0x5E, 0x80, 0x00, 0x20, 0x39, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFA, 0x31, 0xDB, 0x8E, 0xD3, 0xBC, 0x80, 0x05, 0xE8, 0x00, 0x00, 0x5B, + 0x81, 0xEB, 0x6B, 0x00, 0xC1, 0xEB, 0x04, 0x8C, 0xC8, 0x01, 0xC3, 0x8E, + 0xDB, 0x53, 0x6A, 0x7D, 0xCB, 0x68, 0x00, 0x20, 0x17, 0xBC, 0x00, 0x90, + 0xFB, 0x16, 0x07, 0xB9, 0x12, 0x00, 0xB8, 0x01, 0x02, 0x89, 0xCB, 0x4B, + 0xC1, 0xE3, 0x09, 0xBA, 0x80, 0x00, 0x51, 0x53, 0xE8, 0xA4, 0x00, 0x5B, + 0x59, 0x72, 0x04, 0xE2, 0xE9, 0xF6, 0xDC, 0x0E, 0x1F, 0x9C, 0x31, 0xF6, + 0x31, 0xFF, 0xB9, 0xDF, 0x00, 0xFC, 0xF3, 0xA5, 0xBB, 0xFC, 0x1F, 0x66, + 0xB8, 0x05, 0x4D, 0xCB, 0x93, 0x66, 0x39, 0x07, 0x75, 0x03, 0xE8, 0x39, + 0x1C, 0xEA, 0xC6, 0x00, 0x00, 0x20, 0x16, 0x1F, 0x66, 0x39, 0x07, 0x74, + 0x28, 0x66, 0x60, 0xBF, 0x03, 0x00, 0xB8, 0x11, 0x02, 0x99, 0xBB, 0x00, + 0x02, 0xB9, 0x02, 0x00, 0xE8, 0x80, 0x00, 0x73, 0x02, 0x75, 0xEF, 0x66, + 0x61, 0x66, 0x39, 0x07, 0x75, 0x4D, 0xC7, 0x06, 0x06, 0x00, 0x00, 0xFF, + 0x80, 0x26, 0x02, 0x00, 0xFE, 0x9D, 0x72, 0x33, 0x0E, 0x1F, 0xAD, 0x88, + 0xE6, 0xAD, 0x89, 0xC1, 0x24, 0x3F, 0x74, 0x14, 0xB0, 0x01, 0xBF, 0x03, + 0x00, 0xB4, 0x02, 0x68, 0x00, 0x0D, 0x07, 0x31, 0xDB, 0xE8, 0x4B, 0x00, + 0x73, 0x03, 0x75, 0xF1, 0xF9, 0xE8, 0x5C, 0x11, 0x0F, 0x87, 0xF3, 0x1B, + 0x83, 0xC6, 0x0C, 0x81, 0xFE, 0xFE, 0x01, 0x72, 0xCF, 0x77, 0x0C, 0xBE, + 0xB2, 0x31, 0xB0, 0x04, 0xB9, 0x01, 0x00, 0x31, 0xD2, 0xEB, 0xCF, 0xBE, + 0x91, 0x01, 0xE8, 0x4D, 0x00, 0xEB, 0xFE, 0x1E, 0x06, 0x52, 0x56, 0x57, + 0x55, 0xF9, 0xCD, 0x13, 0x5D, 0x5F, 0x5E, 0x5A, 0x07, 0x1F, 0xC3, 0xFA, + 0xB8, 0x00, 0x20, 0x8E, 0xD0, 0xBC, 0xDC, 0x8F, 0xFB, 0x66, 0x61, 0x07, + 0x1F, 0xEB, 0xC1, 0x60, 0x50, 0x53, 0x51, 0xFE, 0xC8, 0x00, 0xC1, 0xD0, + 0xE0, 0x00, 0xC7, 0xB0, 0x01, 0xE8, 0xCF, 0xFF, 0x59, 0x5B, 0x58, 0x72, + 0x04, 0xFE, 0xC8, 0x75, 0xE7, 0x61, 0x73, 0x09, 0x60, 0x31, 0xC0, 0xE8, + 0xBD, 0xFF, 0x61, 0x4F, 0xF9, 0xC3, 0xB4, 0x0E, 0xCD, 0x10, 0x2E, 0xAC, + 0x3C, 0x00, 0x75, 0xF6, 0xC3, 0x0D, 0x0A, 0x4D, 0x69, 0x73, 0x73, 0x69, + 0x6E, 0x67, 0x20, 0x4D, 0x42, 0x52, 0x2D, 0x68, 0x65, 0x6C, 0x70, 0x65, + 0x72, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +/* Remaining 8704 bytes from the higher GRUB MBR data */ +unsigned char mbr_grub_0x200[] = { + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0xB2, 0x7F, + 0xE9, 0x91, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x58, 0x90, 0x47, + 0x52, 0x4C, 0x44, 0x52, 0x20, 0x20, 0x20, 0x00, 0x02, 0x01, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x12, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x29, 0x63, 0xAF, 0xC4, 0x0A, 0x4E, 0x4F, 0x20, 0x4E, 0x41, + 0x4D, 0x45, 0x20, 0x20, 0x20, 0x20, 0x46, 0x41, 0x54, 0x33, 0x32, 0x20, + 0x20, 0x20, 0xFA, 0xFC, 0xB6, 0xFF, 0x80, 0xFE, 0xFF, 0x75, 0x02, 0xB2, + 0x00, 0x31, 0xC0, 0xBD, 0x00, 0x7C, 0x8E, 0xD0, 0x8D, 0x66, 0xE0, 0xFB, + 0x89, 0x56, 0x40, 0x16, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xCD, 0x13, 0x1F, + 0x72, 0x10, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x0A, 0xF6, 0xC1, 0x01, 0x74, + 0x05, 0xC6, 0x06, 0x90, 0x7D, 0x42, 0x16, 0x07, 0x66, 0x31, 0xC0, 0x66, + 0x89, 0x46, 0x44, 0x8B, 0x46, 0x0E, 0x66, 0x03, 0x46, 0x1C, 0x66, 0x89, + 0x46, 0x48, 0x66, 0x89, 0x46, 0x4C, 0x66, 0x8B, 0x46, 0x10, 0x66, 0xF7, + 0x66, 0x24, 0x66, 0x01, 0x46, 0x4C, 0x66, 0x8B, 0x46, 0x2C, 0x66, 0x50, + 0xE8, 0x8B, 0x00, 0xBE, 0xBD, 0x7D, 0x0F, 0x82, 0x2F, 0x01, 0xC4, 0x9E, + 0xE8, 0x01, 0xE8, 0x99, 0x00, 0x31, 0xFF, 0xB9, 0x0B, 0x00, 0xBE, 0xC0, + 0x7D, 0xF3, 0xA6, 0x74, 0x15, 0x83, 0xC7, 0x20, 0x83, 0xE7, 0xE0, 0x3B, + 0x7E, 0x0B, 0x75, 0xEB, 0x4A, 0x75, 0xDF, 0x66, 0x58, 0xE8, 0x2A, 0x00, + 0xEB, 0xCC, 0x26, 0xFF, 0x75, 0x09, 0x26, 0xFF, 0x75, 0x0F, 0x66, 0x58, + 0x31, 0xDB, 0x66, 0x50, 0xE8, 0x4B, 0x00, 0x73, 0x08, 0x8B, 0x56, 0x40, + 0x52, 0xFF, 0xAE, 0xE8, 0x01, 0xE8, 0x5A, 0x00, 0x4A, 0x75, 0xFA, 0x66, + 0x58, 0xE8, 0x02, 0x00, 0xEB, 0xE4, 0x06, 0x53, 0x66, 0xC1, 0xE0, 0x02, + 0x66, 0x0F, 0xB7, 0x5E, 0x0B, 0x66, 0xF7, 0xF3, 0x66, 0x03, 0x46, 0x48, + 0xBB, 0x60, 0x00, 0x8E, 0xC3, 0x31, 0xDB, 0x66, 0x3B, 0x46, 0x44, 0x74, + 0x07, 0x66, 0x89, 0x46, 0x44, 0xE8, 0x2A, 0x00, 0x26, 0x67, 0x80, 0x62, + 0x03, 0x0F, 0x26, 0x67, 0x66, 0x8B, 0x02, 0x5B, 0x07, 0xC3, 0x66, 0x3D, + 0xF8, 0xFF, 0xFF, 0x0F, 0xF5, 0x72, 0x12, 0x66, 0x48, 0x66, 0x48, 0x66, + 0x0F, 0xB6, 0x56, 0x0D, 0x52, 0x66, 0xF7, 0xE2, 0x5A, 0x66, 0x03, 0x46, + 0x4C, 0xC3, 0x66, 0x60, 0x66, 0x31, 0xD2, 0x66, 0x52, 0x66, 0x50, 0x06, + 0x53, 0x6A, 0x01, 0x6A, 0x10, 0x66, 0x31, 0xC9, 0x66, 0xFF, 0x76, 0x18, + 0x59, 0x66, 0xF7, 0xF1, 0x42, 0x59, 0x52, 0x31, 0xD2, 0x66, 0xF7, 0xF1, + 0x86, 0xD6, 0x59, 0x86, 0xC5, 0xC0, 0xE4, 0x06, 0x08, 0xE1, 0xB8, 0x01, + 0x02, 0x89, 0xE6, 0x8A, 0x56, 0x40, 0x06, 0x1E, 0xCD, 0x13, 0x1F, 0x07, + 0x61, 0x66, 0x61, 0x72, 0x4D, 0x66, 0x40, 0x03, 0x5E, 0x0B, 0x73, 0x09, + 0x52, 0x8C, 0xC2, 0x80, 0xC6, 0x10, 0x8E, 0xC2, 0x5A, 0xC3, 0x64, 0x69, + 0x73, 0x6B, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x4E, 0x6F, 0x20, + 0x47, 0x52, 0x4C, 0x44, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xC0, 0x59, 0xBE, 0xB2, + 0x7D, 0xAC, 0xB4, 0x0E, 0xCD, 0x10, 0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE, + 0x00, 0x00, 0x55, 0xAA, 0xEB, 0x3C, 0x90, 0x47, 0x52, 0x4C, 0x44, 0x52, + 0x20, 0x20, 0x20, 0x00, 0x02, 0x01, 0x01, 0x00, 0x02, 0xE0, 0x00, 0x40, + 0x0B, 0xF0, 0x09, 0x00, 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x63, 0xAF, 0xC4, 0x0A, 0x4E, + 0x4F, 0x20, 0x4E, 0x41, 0x4D, 0x45, 0x20, 0x20, 0x20, 0x20, 0x46, 0x41, + 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0xFA, 0xFC, 0xB6, 0xFF, 0x80, 0xFE, + 0xFF, 0x75, 0x02, 0xB2, 0x00, 0x31, 0xC0, 0xBD, 0x00, 0x7C, 0x8E, 0xD0, + 0x8D, 0x66, 0xE0, 0xFB, 0x89, 0x56, 0x24, 0x60, 0xB4, 0x41, 0xBB, 0xAA, + 0x55, 0x52, 0xCD, 0x13, 0x5A, 0x16, 0x1F, 0x72, 0x14, 0x81, 0xFB, 0x55, + 0xAA, 0x75, 0x0E, 0xF6, 0xC1, 0x01, 0x74, 0x09, 0x84, 0xD2, 0x79, 0x05, + 0xC6, 0x06, 0x98, 0x7D, 0x42, 0x61, 0x8E, 0xC0, 0x8B, 0x76, 0x1C, 0x8B, + 0x7E, 0x1E, 0x03, 0x76, 0x0E, 0x11, 0xC7, 0x89, 0x76, 0x28, 0x89, 0x7E, + 0x2A, 0x8A, 0x46, 0x10, 0xF7, 0x66, 0x16, 0x01, 0xC6, 0x11, 0xD7, 0x89, + 0x76, 0x2C, 0x89, 0x7E, 0x2E, 0x8B, 0x5E, 0x0B, 0xB1, 0x05, 0xD3, 0xEB, + 0x8B, 0x46, 0x11, 0x01, 0xD8, 0x48, 0xF7, 0xF3, 0x99, 0x89, 0x46, 0x26, + 0x01, 0xC6, 0x11, 0xD7, 0x89, 0x76, 0x30, 0x89, 0x7E, 0x32, 0xC7, 0x46, + 0x36, 0xFF, 0xFF, 0x8B, 0x46, 0x16, 0xF7, 0x66, 0x0B, 0x72, 0x03, 0x89, + 0x46, 0x36, 0x8B, 0x46, 0x2C, 0x8B, 0x56, 0x2E, 0x8B, 0x4E, 0x26, 0xC4, + 0x9E, 0xE8, 0x01, 0xE8, 0x8D, 0x00, 0xC4, 0xBE, 0xE8, 0x01, 0xBE, 0xC3, + 0x7D, 0xB1, 0x0B, 0x57, 0xF3, 0xA6, 0x5F, 0x74, 0x10, 0x83, 0xC7, 0x20, + 0x74, 0x05, 0x26, 0x38, 0x2D, 0x75, 0xEB, 0xBE, 0xC0, 0x7D, 0xE9, 0xF8, + 0x00, 0x26, 0xFF, 0x75, 0x1A, 0x8B, 0x4E, 0x16, 0x8B, 0x46, 0x28, 0x8B, + 0x56, 0x2A, 0x06, 0xE8, 0x5D, 0x00, 0x1F, 0x58, 0x1E, 0x16, 0x07, 0xBF, + 0x00, 0x20, 0xAB, 0x89, 0xC6, 0x5A, 0x52, 0x01, 0xF6, 0x73, 0x03, 0x80, + 0xC6, 0x10, 0x81, 0x7E, 0x36, 0x01, 0x18, 0x73, 0x13, 0x01, 0xC6, 0xD1, + 0xEE, 0xAD, 0x73, 0x04, 0xB1, 0x04, 0xD3, 0xE8, 0x80, 0xE4, 0x0F, 0x3D, + 0xF7, 0x0F, 0xEB, 0x06, 0x8E, 0xDA, 0xAD, 0x83, 0xF8, 0xF7, 0x76, 0xD2, + 0x31, 0xC0, 0xAB, 0x07, 0x16, 0x1F, 0xBE, 0x00, 0x20, 0xAD, 0x83, 0xE8, + 0x02, 0x72, 0x10, 0x8A, 0x4E, 0x0D, 0xF7, 0xE1, 0x03, 0x46, 0x30, 0x13, + 0x56, 0x32, 0xE8, 0x0A, 0x00, 0xEB, 0xEA, 0x8B, 0x56, 0x24, 0x52, 0xFF, + 0xAE, 0xE8, 0x01, 0x9C, 0x60, 0x31, 0xC9, 0x51, 0x51, 0x52, 0x50, 0x06, + 0x53, 0x41, 0x51, 0xB1, 0x10, 0x51, 0x91, 0x53, 0x52, 0x8B, 0x46, 0x18, + 0x89, 0xC3, 0xF7, 0x66, 0x1A, 0x91, 0x5A, 0xF7, 0xF1, 0x92, 0xF6, 0xF3, + 0x86, 0xC4, 0x40, 0x92, 0x91, 0x86, 0xCD, 0xD0, 0xC9, 0xD0, 0xC9, 0x08, + 0xD1, 0x5B, 0xB8, 0x01, 0x02, 0x89, 0xE6, 0x8A, 0x56, 0x24, 0x06, 0x1E, + 0xCD, 0x13, 0x1F, 0x72, 0x49, 0x5B, 0x8D, 0x5F, 0x20, 0x8E, 0xC3, 0x61, + 0x61, 0x9D, 0x40, 0x75, 0x01, 0x42, 0xE2, 0xB3, 0xC3, 0x64, 0x69, 0x73, + 0x6B, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x4E, 0x6F, 0x20, 0x47, + 0x52, 0x4C, 0x44, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0xC3, 0x59, 0xBE, 0xB5, 0x7D, 0xAC, 0xB4, 0x0E, + 0xCD, 0x10, 0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE, 0x00, 0x00, 0x55, 0xAA, + 0xEB, 0x2E, 0x02, 0x49, 0x2F, 0x4F, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, + 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0B, 0x00, 0x00, + 0x00, 0xFF, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xFC, 0x31, 0xC0, 0x90, 0x8E, 0xD0, 0xBC, 0x00, 0x7C, 0x89, 0xE5, 0x50, + 0xBB, 0x00, 0x10, 0x53, 0x50, 0x88, 0x56, 0x24, 0x16, 0xB4, 0x41, 0xBB, + 0xAA, 0x55, 0xCD, 0x13, 0x1F, 0x72, 0x09, 0xD0, 0xD9, 0x73, 0x05, 0xC6, + 0x06, 0xC5, 0x7D, 0x42, 0x66, 0x31, 0xC0, 0xB0, 0x02, 0x57, 0x16, 0x9C, + 0x66, 0x48, 0x66, 0x99, 0x66, 0xF7, 0x76, 0x28, 0x66, 0x52, 0x66, 0x99, + 0x66, 0xC1, 0xE0, 0x05, 0x66, 0xF7, 0x76, 0x0E, 0x52, 0x66, 0x03, 0x46, + 0x2C, 0xE8, 0x0B, 0x01, 0x5E, 0x66, 0x58, 0x8B, 0x56, 0x26, 0x66, 0xF7, + 0xE2, 0x66, 0xF7, 0x76, 0x0E, 0x52, 0x66, 0x03, 0x40, 0x08, 0xE8, 0xF6, + 0x00, 0x5E, 0x01, 0xDE, 0x16, 0x07, 0x8D, 0x7F, 0xA8, 0xB1, 0x2C, 0xF3, + 0xA5, 0x66, 0x89, 0x4D, 0xB4, 0x66, 0x8B, 0x45, 0xAC, 0x66, 0x48, 0x66, + 0xF7, 0x76, 0x0E, 0x66, 0x40, 0x66, 0x89, 0x45, 0xB0, 0x66, 0xAD, 0x66, + 0x85, 0xC0, 0x74, 0x1B, 0xB7, 0x80, 0xE8, 0xC7, 0x00, 0x66, 0xAD, 0x66, + 0x85, 0xC0, 0x74, 0x0F, 0xB7, 0xC0, 0xE8, 0xBB, 0x00, 0x66, 0xAD, 0x66, + 0x85, 0xC0, 0x74, 0x03, 0xE8, 0xB4, 0x00, 0x66, 0x8B, 0x5D, 0xB4, 0x66, + 0x83, 0xEB, 0x0C, 0x72, 0x4F, 0x53, 0x66, 0x2B, 0x5E, 0x14, 0x58, 0x73, + 0x05, 0x80, 0xC4, 0x1C, 0xEB, 0x41, 0x66, 0x53, 0x66, 0x2B, 0x5E, 0x10, + 0x72, 0x1C, 0x66, 0x58, 0x66, 0x93, 0x66, 0xF7, 0x76, 0x10, 0x66, 0x52, + 0x66, 0x85, 0xD2, 0x75, 0x0D, 0xC1, 0xE0, 0x02, 0x93, 0x66, 0x8B, 0x01, + 0xBB, 0x00, 0xC0, 0xE8, 0x76, 0x00, 0x66, 0x58, 0x66, 0x99, 0x66, 0xF7, + 0x76, 0x14, 0x52, 0x85, 0xD2, 0x75, 0x0F, 0xC1, 0xE0, 0x02, 0x93, 0x66, + 0x8B, 0x81, 0x00, 0xB0, 0xBB, 0x00, 0x80, 0xE8, 0x5A, 0x00, 0x58, 0x93, + 0xC1, 0xE3, 0x02, 0x66, 0x8B, 0x01, 0x9D, 0x5B, 0x07, 0x9C, 0xE8, 0x4E, + 0x00, 0x9D, 0x06, 0x53, 0x9C, 0x72, 0x2D, 0x31, 0xF6, 0x16, 0x07, 0x1E, + 0x8E, 0xDF, 0xBF, 0xE3, 0x7D, 0x56, 0x66, 0xAD, 0x66, 0x50, 0xAD, 0x92, + 0xAD, 0xFE, 0xCC, 0x91, 0xF3, 0xA6, 0x75, 0x02, 0x91, 0xAE, 0x66, 0x58, + 0x5E, 0x8C, 0xDF, 0x1F, 0xF9, 0x0F, 0x84, 0xF8, 0xFE, 0x01, 0xD6, 0x3B, + 0x76, 0x0E, 0x72, 0xD7, 0x66, 0xFF, 0x45, 0xB4, 0x66, 0xFF, 0x4D, 0xB0, + 0x0F, 0x85, 0x5B, 0xFF, 0xBE, 0xE0, 0x7D, 0x73, 0x76, 0x8B, 0x56, 0x24, + 0x52, 0x57, 0x16, 0xCB, 0x16, 0x07, 0xF9, 0x72, 0x08, 0xC4, 0x5E, 0xFC, + 0x75, 0x03, 0xC4, 0x5E, 0xFA, 0x66, 0x0F, 0xB6, 0x4E, 0x0D, 0x66, 0xF7, + 0xE1, 0x66, 0x03, 0x46, 0x1C, 0x66, 0x60, 0x66, 0x52, 0x66, 0x50, 0x06, + 0x53, 0x6A, 0x01, 0x6A, 0x10, 0x66, 0xFF, 0x76, 0x18, 0x59, 0x66, 0xF7, + 0xF1, 0x42, 0x59, 0x52, 0x31, 0xD2, 0x66, 0xF7, 0xF1, 0x86, 0xD6, 0x59, + 0x86, 0xC5, 0xC0, 0xE4, 0x06, 0x08, 0xE1, 0x40, 0xB4, 0x02, 0x89, 0xE6, + 0x8A, 0x56, 0x24, 0x06, 0x1E, 0xCD, 0x13, 0x1F, 0x5B, 0x72, 0x1D, 0x8D, + 0x5F, 0x20, 0x8E, 0xC3, 0x61, 0x66, 0x61, 0x66, 0x40, 0xE2, 0xBE, 0xC3, + 0x4E, 0x6F, 0x20, 0x67, 0x72, 0x6C, 0x64, 0x72, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE3, 0x51, 0xBE, 0x03, 0x7C, 0xAC, 0xB4, 0x0E, 0xCD, 0x10, + 0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE, 0x55, 0xAA, 0xEB, 0x52, 0x90, 0x4E, + 0x54, 0x46, 0x53, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFC, 0xB6, 0xFF, + 0x31, 0xC0, 0xBD, 0x00, 0x7C, 0x8E, 0xD0, 0x8D, 0x66, 0xE0, 0xFB, 0x89, + 0x56, 0xFE, 0x50, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xCD, 0x13, 0x1F, 0x72, + 0x10, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x0A, 0xF6, 0xC1, 0x01, 0x74, 0x05, + 0xC6, 0x86, 0xAA, 0x01, 0x42, 0x16, 0x07, 0x66, 0x81, 0xBE, 0xFC, 0x07, + 0x47, 0x52, 0x55, 0x42, 0x74, 0x13, 0xBB, 0x00, 0x7E, 0x66, 0x8B, 0x86, + 0x1C, 0x00, 0x66, 0x40, 0xE8, 0xE1, 0x00, 0xE8, 0xDE, 0x00, 0xE8, 0xDB, + 0x00, 0x66, 0x31, 0xC0, 0x8B, 0x46, 0x0B, 0x89, 0x46, 0xFC, 0xE8, 0x8C, + 0x00, 0x88, 0xCB, 0x8A, 0x46, 0x0D, 0xE8, 0x84, 0x00, 0x88, 0xCD, 0x00, + 0xDD, 0x80, 0xED, 0x09, 0x88, 0x6E, 0xFB, 0x8A, 0x46, 0x44, 0xE8, 0x65, + 0x00, 0x80, 0xF9, 0x03, 0x76, 0x05, 0xB0, 0x01, 0xE9, 0xFB, 0x00, 0x88, + 0x4E, 0xF9, 0x8A, 0x46, 0x40, 0xE8, 0x52, 0x00, 0x80, 0xF9, 0x01, 0x75, + 0xED, 0x88, 0x4E, 0xFA, 0x66, 0x8B, 0x46, 0x30, 0x88, 0xE9, 0x66, 0xD3, + 0xE0, 0x66, 0x03, 0x86, 0x1C, 0x00, 0x66, 0x89, 0x46, 0xF4, 0xBA, 0x01, + 0x00, 0x8A, 0x4E, 0xFA, 0xD3, 0xE2, 0x89, 0xD1, 0xBB, 0x00, 0x20, 0x53, + 0xE8, 0x79, 0x00, 0xE2, 0xFB, 0x5B, 0x81, 0x3F, 0x46, 0x49, 0x75, 0x6C, + 0x89, 0xD1, 0xE8, 0x34, 0x00, 0x89, 0xDF, 0xB0, 0x80, 0xE8, 0x40, 0x02, + 0x72, 0x5E, 0xBB, 0x00, 0x38, 0x66, 0x31, 0xC0, 0xB0, 0x05, 0xE8, 0x8A, + 0x03, 0x89, 0xDF, 0xE9, 0xD6, 0x00, 0x08, 0xC0, 0x78, 0x04, 0x88, 0xE9, + 0xEB, 0x09, 0xF6, 0xD8, 0x2C, 0x09, 0x88, 0xC1, 0xC3, 0x30, 0xC9, 0xFE, + 0xC1, 0x66, 0xD1, 0xE8, 0x73, 0xF9, 0xFE, 0xC9, 0xC3, 0x53, 0x57, 0x89, + 0xDF, 0x8B, 0x47, 0x06, 0x48, 0x89, 0xC3, 0xF7, 0x66, 0xFC, 0xC1, 0xE1, + 0x09, 0x39, 0xC1, 0x75, 0x1F, 0x89, 0xD9, 0x89, 0xFB, 0x03, 0x5F, 0x04, + 0x8B, 0x07, 0x83, 0xEF, 0x02, 0x03, 0x7E, 0xFC, 0x83, 0xC3, 0x02, 0x3B, + 0x05, 0x75, 0x09, 0x8B, 0x17, 0x89, 0x15, 0xE2, 0xF0, 0x5F, 0x5B, 0xC3, + 0xB0, 0x02, 0xEB, 0x4E, 0x66, 0x60, 0x66, 0x31, 0xD2, 0x66, 0x52, 0x66, + 0x50, 0x06, 0x53, 0x6A, 0x01, 0x6A, 0x10, 0x66, 0x31, 0xC9, 0x66, 0xFF, + 0x76, 0x18, 0x59, 0x66, 0xF7, 0xF1, 0x42, 0x59, 0x52, 0x31, 0xD2, 0x66, + 0xF7, 0xF1, 0x86, 0xD6, 0x59, 0x86, 0xC5, 0xC0, 0xE4, 0x06, 0x08, 0xE1, + 0xB8, 0x01, 0x02, 0x89, 0xE6, 0x8A, 0x56, 0xFE, 0xCD, 0x13, 0x61, 0x66, + 0x61, 0x72, 0x37, 0x66, 0x40, 0x03, 0x5E, 0x0B, 0x73, 0x09, 0x52, 0x8C, + 0xC2, 0x80, 0xC6, 0x10, 0x8E, 0xC2, 0x5A, 0xC3, 0x30, 0x00, 0x00, 0x86, + 0xC8, 0x01, 0xEB, 0x1E, 0x4E, 0x6F, 0x20, 0x67, 0x72, 0x6C, 0x64, 0x72, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD3, 0xA1, 0xBE, 0xC8, + 0x7D, 0xAC, 0xB4, 0x0E, 0xCD, 0x10, 0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE, + 0x00, 0x00, 0x55, 0xAA, 0xE8, 0x6F, 0x01, 0xB0, 0x90, 0xE8, 0x85, 0x01, + 0x0F, 0x82, 0xBE, 0x00, 0x66, 0x81, 0x7C, 0x08, 0x00, 0x04, 0x18, 0x00, + 0x75, 0xEF, 0x03, 0x74, 0x14, 0x80, 0x3C, 0x30, 0x75, 0xE7, 0x83, 0xC6, + 0x10, 0x03, 0x34, 0xE8, 0xF5, 0x00, 0x0F, 0x83, 0xA7, 0x00, 0xE8, 0x45, + 0x01, 0xB0, 0xB0, 0xE8, 0x5B, 0x01, 0x0F, 0x82, 0x94, 0x00, 0x8B, 0x5C, + 0x09, 0x80, 0xFB, 0x04, 0x75, 0xF1, 0x80, 0x7C, 0x08, 0x00, 0x75, 0x09, + 0xFF, 0x74, 0x10, 0x03, 0x74, 0x14, 0x56, 0xEB, 0x1B, 0xFF, 0x74, 0x30, + 0x66, 0x31, 0xD2, 0x66, 0x8B, 0x4C, 0x28, 0x81, 0xF9, 0x00, 0x10, 0x77, + 0x6D, 0x66, 0xC1, 0xE9, 0x09, 0xBB, 0x00, 0x60, 0x53, 0xE8, 0xB9, 0x02, + 0xB0, 0xA0, 0xE8, 0xEB, 0x00, 0x72, 0x5B, 0x66, 0x81, 0x7C, 0x08, 0x01, + 0x04, 0x40, 0x00, 0x75, 0xF1, 0x8A, 0x4E, 0xF9, 0x66, 0x31, 0xDB, 0xB3, + 0x01, 0x66, 0xD3, 0xE3, 0x66, 0x31, 0xD2, 0x5E, 0x59, 0x51, 0xAC, 0xB9, + 0x08, 0x00, 0x51, 0x50, 0xA8, 0x01, 0x74, 0x2A, 0x56, 0x66, 0x52, 0x66, + 0x53, 0x66, 0x89, 0xD9, 0xBB, 0x00, 0x50, 0xE8, 0x3A, 0x02, 0x72, 0x26, + 0x81, 0x3F, 0x49, 0x4E, 0x75, 0x20, 0xE8, 0x98, 0xFE, 0x89, 0xDE, 0x83, + 0xC6, 0x18, 0x03, 0x34, 0xE8, 0x64, 0x00, 0x73, 0x18, 0x66, 0x5B, 0x66, + 0x5A, 0x5E, 0x66, 0x01, 0xDA, 0x58, 0xD0, 0xE8, 0x59, 0xE2, 0xC7, 0x59, + 0xE2, 0xBF, 0x8D, 0xB6, 0xD0, 0x01, 0xE9, 0x20, 0xFF, 0x83, 0x7C, 0x04, + 0x00, 0x0F, 0x85, 0xF1, 0xFD, 0x66, 0x8B, 0x04, 0x89, 0xFB, 0xE8, 0xCE, + 0x01, 0xB0, 0x80, 0xE8, 0x72, 0x00, 0x72, 0x2E, 0x80, 0x7C, 0x08, 0x01, + 0x74, 0x0E, 0x8B, 0x4C, 0x10, 0xC4, 0xBE, 0xE8, 0x01, 0x03, 0x74, 0x14, + 0xF3, 0xA4, 0xEB, 0x12, 0x66, 0x31, 0xD2, 0x66, 0x8B, 0x4C, 0x28, 0x66, + 0xC1, 0xE9, 0x09, 0xC4, 0x9E, 0xE8, 0x01, 0xE8, 0x13, 0x02, 0x8B, 0x56, + 0xFE, 0x52, 0xFF, 0xAE, 0xE8, 0x01, 0xB0, 0x04, 0xE9, 0xAF, 0xFE, 0x89, + 0xF3, 0xF6, 0x47, 0x0C, 0x02, 0x74, 0x02, 0xF9, 0xC3, 0x30, 0xED, 0x56, + 0x8D, 0xB6, 0xD3, 0x01, 0x83, 0xC3, 0x52, 0x8A, 0x4F, 0xFE, 0xAC, 0x8A, + 0x27, 0x80, 0xFC, 0x41, 0x72, 0x08, 0x80, 0xFC, 0x5A, 0x77, 0x03, 0x80, + 0xC4, 0x20, 0x38, 0xE0, 0x75, 0x0C, 0x43, 0x43, 0xE2, 0xE8, 0x80, 0x3C, + 0x00, 0x75, 0x03, 0x5E, 0xF8, 0xC3, 0x5E, 0x03, 0x74, 0x08, 0xEB, 0xC3, + 0xE8, 0x17, 0x00, 0xE8, 0x2F, 0x00, 0x72, 0x11, 0xF6, 0x05, 0x04, 0x75, + 0x0B, 0xE8, 0x25, 0x00, 0x73, 0xF6, 0xE8, 0x05, 0x00, 0xE8, 0x1D, 0x00, + 0xF8, 0xC3, 0x50, 0x31, 0xC0, 0x89, 0x05, 0x89, 0x45, 0x06, 0x8B, 0x45, + 0x14, 0x01, 0xF8, 0x89, 0x45, 0x04, 0x58, 0x81, 0xFF, 0x00, 0x20, 0x75, + 0x03, 0x80, 0x0D, 0x02, 0xC3, 0x8B, 0x5D, 0x04, 0xF6, 0x05, 0x04, 0x75, + 0x66, 0x89, 0xDE, 0x80, 0x3C, 0xFF, 0x74, 0x16, 0x80, 0x3C, 0x20, 0x75, + 0x03, 0x89, 0x75, 0x06, 0x03, 0x5F, 0x04, 0x38, 0x04, 0x75, 0xEA, 0x89, + 0x5D, 0x04, 0x89, 0x75, 0x02, 0xC3, 0x83, 0x7D, 0x06, 0x01, 0x72, 0xF9, + 0x8B, 0x75, 0x06, 0x80, 0x7C, 0x08, 0x00, 0x75, 0x0A, 0x89, 0xF3, 0x03, + 0x5F, 0x14, 0x03, 0x74, 0x04, 0xEB, 0x22, 0x66, 0x8B, 0x4C, 0x28, 0x66, + 0xC1, 0xE9, 0x09, 0x83, 0xF9, 0x08, 0x0F, 0x87, 0x9E, 0xFD, 0x8D, 0x9D, + 0x00, 0x08, 0x50, 0x66, 0x31, 0xD2, 0xE8, 0x3C, 0x01, 0x58, 0x72, 0xC9, + 0x8B, 0x74, 0x30, 0x01, 0xDE, 0x89, 0x75, 0x06, 0x80, 0x0D, 0x04, 0xF6, + 0x05, 0x02, 0x74, 0x03, 0xE8, 0x5C, 0x00, 0x89, 0xDE, 0x3B, 0x5D, 0x06, + 0x72, 0x02, 0xF9, 0xC3, 0x03, 0x5F, 0x04, 0x38, 0x04, 0x75, 0xF0, 0x50, + 0x06, 0x1E, 0x07, 0x89, 0x75, 0x02, 0x89, 0x5D, 0x04, 0x66, 0x8B, 0x44, + 0x10, 0x8D, 0x9D, 0x00, 0x04, 0xF6, 0x05, 0x02, 0x75, 0x05, 0xE8, 0x8A, + 0x00, 0xEB, 0x1A, 0x53, 0xE8, 0x51, 0xFD, 0x66, 0x8B, 0x44, 0x14, 0xE8, + 0x4A, 0xFD, 0x5B, 0x81, 0x3F, 0x46, 0x49, 0x0F, 0x85, 0x3D, 0xFD, 0xB9, + 0x02, 0x00, 0xE8, 0x04, 0xFD, 0x07, 0x58, 0x03, 0x5F, 0x14, 0x80, 0x3F, + 0xFF, 0x74, 0xB7, 0x38, 0x07, 0x74, 0x05, 0x03, 0x5F, 0x04, 0xEB, 0xF2, + 0x89, 0xDE, 0xC3, 0x50, 0x80, 0x0D, 0x08, 0x3B, 0x5D, 0x06, 0x0F, 0x83, + 0x16, 0xFD, 0x38, 0x07, 0x74, 0x05, 0x03, 0x5F, 0x04, 0xEB, 0xF0, 0x89, + 0x5D, 0x02, 0x66, 0x8B, 0x46, 0xF4, 0x66, 0x89, 0x47, 0x10, 0x66, 0x40, + 0x66, 0x89, 0x47, 0x14, 0x03, 0x5F, 0x04, 0x3B, 0x5D, 0x06, 0x73, 0x23, + 0x80, 0x3F, 0x80, 0x75, 0x1E, 0x66, 0x8B, 0x57, 0x10, 0x8A, 0x4E, 0xFA, + 0x66, 0xD3, 0xE2, 0xE8, 0x46, 0x00, 0x66, 0x09, 0xC0, 0x0F, 0x84, 0xDB, + 0xFC, 0x66, 0x89, 0x47, 0x10, 0x66, 0x89, 0x57, 0x14, 0xEB, 0xD5, 0x8B, + 0x5D, 0x02, 0x80, 0x25, 0xF7, 0x58, 0xC3, 0x57, 0xBF, 0x00, 0x20, 0x8A, + 0x4E, 0xFA, 0x66, 0xD3, 0xE0, 0x66, 0x89, 0xC2, 0x66, 0xB8, 0x01, 0x00, + 0x00, 0x00, 0x66, 0xD3, 0xE0, 0x66, 0x89, 0xC1, 0xE8, 0x11, 0x00, 0x0F, + 0x82, 0xA9, 0xFC, 0x81, 0x3F, 0x46, 0x49, 0x0F, 0x85, 0xA1, 0xFC, 0xE8, + 0x6B, 0xFC, 0x5F, 0xC3, 0xFF, 0x75, 0x02, 0x66, 0x52, 0x66, 0x51, 0x53, + 0x8B, 0x75, 0x02, 0x8A, 0x04, 0xF6, 0x05, 0x04, 0x74, 0x1E, 0x89, 0xF3, + 0x8A, 0x4E, 0xFB, 0x66, 0xD3, 0xEA, 0x3B, 0x5D, 0x06, 0x73, 0x11, 0x38, + 0x07, 0x75, 0x0D, 0x66, 0x39, 0x57, 0x08, 0x77, 0x07, 0x89, 0xDE, 0x03, + 0x5F, 0x04, 0xEB, 0xEA, 0x89, 0x75, 0x04, 0xE8, 0x7B, 0xFE, 0x5B, 0x66, + 0x59, 0x66, 0x5A, 0x72, 0x04, 0xE8, 0x05, 0x00, 0xF8, 0x8F, 0x45, 0x02, + 0xC3, 0x51, 0x53, 0xF6, 0x44, 0x08, 0x01, 0x0F, 0x84, 0x4D, 0xFC, 0x8A, + 0x44, 0x0C, 0x24, 0x01, 0x08, 0x05, 0x66, 0x89, 0x4D, 0x1C, 0x8A, 0x4E, + 0xFB, 0x66, 0x89, 0xD0, 0x66, 0xD3, 0xE8, 0x66, 0x89, 0x45, 0x18, 0x66, + 0xD3, 0xE0, 0x66, 0x29, 0xC2, 0x66, 0x89, 0x55, 0x20, 0x31, 0xD2, 0x66, + 0x89, 0x55, 0x10, 0x66, 0x8B, 0x54, 0x10, 0x03, 0x74, 0x20, 0xE8, 0xC7, + 0x00, 0x66, 0x3B, 0x55, 0x18, 0x76, 0xF7, 0x8A, 0x4E, 0xFB, 0x66, 0x09, + 0xC0, 0x74, 0x47, 0x66, 0x8B, 0x45, 0x18, 0x66, 0x2B, 0x45, 0x08, 0x66, + 0x03, 0x45, 0x10, 0x66, 0xD3, 0xE0, 0x66, 0x03, 0x45, 0x20, 0xF6, 0x05, + 0x08, 0x74, 0x2A, 0x66, 0x50, 0x66, 0x40, 0x66, 0x2B, 0x55, 0x08, 0x66, + 0x03, 0x55, 0x10, 0x66, 0xD3, 0xE2, 0x66, 0x39, 0xC2, 0x75, 0x0C, 0x51, + 0xE8, 0x89, 0x00, 0x59, 0x66, 0x8B, 0x45, 0x10, 0x66, 0xD3, 0xE0, 0x66, + 0x89, 0xC2, 0x66, 0x58, 0x66, 0x03, 0x96, 0x1C, 0x00, 0x66, 0x03, 0x86, + 0x1C, 0x00, 0xF6, 0x05, 0x08, 0x75, 0x4A, 0x66, 0x53, 0x66, 0x89, 0xD3, + 0x66, 0x2B, 0x5D, 0x18, 0x66, 0xD3, 0xE3, 0x66, 0x89, 0xD9, 0x66, 0x5B, + 0x66, 0x2B, 0x4D, 0x20, 0x66, 0xC7, 0x45, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x3B, 0x4D, 0x1C, 0x76, 0x04, 0x66, 0x8B, 0x4D, 0x1C, 0x66, 0x51, + 0x66, 0x09, 0xC0, 0x75, 0x05, 0xE8, 0xC7, 0x00, 0xEB, 0x05, 0xE8, 0x8F, + 0xFB, 0xE2, 0xFB, 0x66, 0x59, 0x66, 0x29, 0x4D, 0x1C, 0x76, 0x0A, 0x66, + 0x89, 0x55, 0x18, 0xE8, 0x26, 0x00, 0xE9, 0x62, 0xFF, 0x5B, 0x59, 0xC3, + 0x66, 0x31, 0xC0, 0x84, 0xC9, 0x74, 0x13, 0x51, 0xAC, 0x66, 0xC1, 0xC8, + 0x08, 0xFE, 0xC9, 0x75, 0xF7, 0x59, 0xF6, 0xD9, 0x80, 0xC1, 0x04, 0xC0, + 0xE1, 0x03, 0xC3, 0xB0, 0x03, 0xE9, 0xA6, 0xFB, 0xAC, 0x88, 0xC1, 0x88, + 0xCD, 0x80, 0xE1, 0x0F, 0x74, 0x1D, 0xC0, 0xED, 0x04, 0xE8, 0xD0, 0xFF, + 0x66, 0xD3, 0xE8, 0x66, 0x89, 0x55, 0x08, 0x66, 0x01, 0xC2, 0x88, 0xE9, + 0xE8, 0xC1, 0xFF, 0x66, 0xD3, 0xF8, 0x66, 0x01, 0x45, 0x10, 0xC3, 0xF6, + 0x05, 0x04, 0x74, 0xCF, 0x66, 0x52, 0x53, 0x8B, 0x75, 0x02, 0x8A, 0x04, + 0xE8, 0x32, 0xFD, 0x72, 0xC2, 0x80, 0x7C, 0x08, 0x00, 0x74, 0xBC, 0x66, + 0xC7, 0x45, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x66, 0x5A, 0x03, 0x74, + 0x20, 0xEB, 0xB1, 0x55, 0x89, 0xE5, 0x66, 0x31, 0xC0, 0x87, 0x46, 0x06, + 0x66, 0xC1, 0xE0, 0x04, 0x66, 0x03, 0x46, 0x04, 0x5D, 0xC2, 0x04, 0x00, + 0x55, 0x89, 0xE5, 0x66, 0xC1, 0x66, 0x04, 0x0C, 0xC1, 0x6E, 0x04, 0x0C, + 0x5D, 0xC3, 0x1E, 0x56, 0xE8, 0xD8, 0xFF, 0x66, 0x50, 0xE8, 0xE8, 0xFF, + 0x5E, 0x1F, 0x06, 0x57, 0xE8, 0xCC, 0xFF, 0x66, 0x50, 0xE8, 0xDC, 0xFF, + 0x5F, 0x07, 0xC3, 0x57, 0x66, 0x52, 0x66, 0xC1, 0xE1, 0x09, 0xF6, 0x05, + 0x01, 0x74, 0x43, 0x66, 0x31, 0xD2, 0x8A, 0x55, 0x18, 0x80, 0xE2, 0x0F, + 0x74, 0x38, 0x89, 0xDF, 0x51, 0x8A, 0x4E, 0xFB, 0x80, 0xC1, 0x09, 0x66, + 0xD3, 0xE2, 0x06, 0x57, 0xE8, 0x9C, 0xFF, 0x66, 0x29, 0xD0, 0x66, 0xC7, + 0x46, 0xF0, 0x10, 0x00, 0x00, 0x00, 0x66, 0xD3, 0x66, 0xF0, 0x59, 0x66, + 0x01, 0xD1, 0x66, 0x2B, 0x4E, 0xF0, 0x66, 0x51, 0xE8, 0x39, 0x00, 0x66, + 0x59, 0x66, 0x03, 0x4E, 0xF0, 0x67, 0xE3, 0x2A, 0x89, 0xFB, 0x89, 0xDF, + 0x66, 0x89, 0xCA, 0x66, 0x31, 0xC0, 0x66, 0x89, 0xC1, 0xE8, 0x96, 0xFF, + 0xB9, 0x00, 0x80, 0x66, 0x39, 0xD1, 0x76, 0x02, 0x89, 0xD1, 0x51, 0xC1, + 0xE9, 0x02, 0x66, 0xF3, 0xAB, 0xE8, 0x82, 0xFF, 0x59, 0x66, 0x29, 0xCA, + 0x75, 0xE6, 0x89, 0xFB, 0x66, 0x5A, 0x5F, 0xC3, 0x1E, 0x56, 0xFC, 0x66, + 0x50, 0xE8, 0x54, 0xFF, 0x5E, 0x1F, 0x66, 0x8B, 0x56, 0xF0, 0x66, 0x01, + 0xD0, 0x66, 0x50, 0xE8, 0x46, 0xFF, 0x5F, 0x07, 0x06, 0x57, 0x1E, 0x56, + 0x66, 0x31, 0xC9, 0xB9, 0x00, 0x80, 0x66, 0x39, 0xD1, 0x76, 0x02, 0x89, + 0xD1, 0x51, 0xC1, 0xE9, 0x02, 0x66, 0xF3, 0xA5, 0xE8, 0x37, 0xFF, 0x59, + 0x66, 0x29, 0xCA, 0x75, 0xE6, 0x5F, 0x07, 0x5E, 0x1F, 0x66, 0x31, 0xD2, + 0xAD, 0xF6, 0xC4, 0x80, 0x75, 0x0A, 0xB9, 0x00, 0x08, 0xF3, 0xA5, 0xBA, + 0x00, 0x10, 0xEB, 0x5D, 0x89, 0xC1, 0x81, 0xE1, 0xFF, 0x0F, 0x41, 0x01, + 0xF1, 0x30, 0xFF, 0x81, 0xFA, 0x00, 0x10, 0x77, 0x5E, 0x08, 0xFF, 0x75, + 0x05, 0xAC, 0x88, 0xC3, 0xB7, 0x08, 0xF6, 0xC3, 0x01, 0x74, 0x34, 0x89, + 0xD0, 0x48, 0x51, 0x53, 0xB1, 0x0C, 0x83, 0xF8, 0x10, 0x72, 0x06, 0xD1, + 0xE8, 0xFE, 0xC9, 0xEB, 0xF5, 0xAD, 0x89, 0xC3, 0xD3, 0xEB, 0x52, 0xBA, + 0x01, 0x00, 0xD3, 0xE2, 0x4A, 0x21, 0xD0, 0x5A, 0x83, 0xC0, 0x03, 0x89, + 0xC1, 0xF7, 0xDB, 0x4B, 0x26, 0x8A, 0x01, 0xAA, 0x42, 0xE2, 0xF9, 0x5B, + 0x59, 0xEB, 0x02, 0xA4, 0x42, 0xD0, 0xEB, 0xFE, 0xCF, 0x39, 0xCE, 0x72, + 0xAE, 0xE8, 0xBA, 0xFE, 0x66, 0x29, 0x56, 0xF0, 0x74, 0x06, 0x81, 0xFA, + 0x00, 0x10, 0x74, 0x81, 0x5E, 0x1F, 0xC3, 0x16, 0x1F, 0xB0, 0x05, 0xE9, + 0xD8, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x47, 0x52, 0x55, 0x42, 0xE8, 0x00, 0x00, 0x5B, 0x8C, 0xC8, 0xC1, 0xEB, + 0x04, 0x01, 0xC3, 0x53, 0x68, 0x10, 0x00, 0xCB, 0x66, 0x31, 0xC0, 0x89, + 0xD8, 0x66, 0xC1, 0xE0, 0x04, 0x66, 0x05, 0x60, 0x00, 0x00, 0x00, 0x2E, + 0x66, 0xA3, 0x62, 0x00, 0xBB, 0x00, 0x20, 0x8E, 0xC3, 0x8C, 0xDB, 0xFA, + 0x2E, 0x0F, 0x01, 0x16, 0x60, 0x00, 0x0F, 0x20, 0xC0, 0x0C, 0x01, 0x0F, + 0x22, 0xC0, 0xBE, 0x08, 0x00, 0x8E, 0xDE, 0x66, 0x31, 0xF6, 0x66, 0x31, + 0xFF, 0x66, 0xB9, 0x00, 0x24, 0x00, 0x00, 0xFC, 0x66, 0xF3, 0xA5, 0xBE, + 0x10, 0x00, 0x8E, 0xDE, 0x24, 0xFE, 0x0F, 0x22, 0xC0, 0x8E, 0xDB, 0xEA, + 0x4F, 0x01, 0x00, 0x20, 0x17, 0x00, 0x60, 0x12, 0x02, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x20, 0x92, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x92, 0x00, 0x00, 0xFB, 0x0E, 0x1F, 0x68, 0x00, 0x0D, 0x07, 0x1E, + 0x06, 0x66, 0x60, 0x9C, 0x2E, 0xF6, 0x06, 0x02, 0x00, 0x0C, 0x74, 0x19, + 0x06, 0x31, 0xC0, 0x8E, 0xC0, 0xBF, 0xFC, 0x05, 0x66, 0xB8, 0x44, 0x55, + 0x43, 0x45, 0x2E, 0xA0, 0x02, 0x00, 0x24, 0x0C, 0x0C, 0x40, 0x66, 0xAB, + 0x07, 0x2E, 0xF6, 0x06, 0x02, 0x00, 0x80, 0x75, 0x24, 0x2E, 0x80, 0x3E, + 0x03, 0x00, 0x00, 0x74, 0x12, 0xBE, 0xA9, 0x1D, 0xE8, 0xCF, 0xEE, 0xBE, + 0xE8, 0x1F, 0xE8, 0xC9, 0xEE, 0xBE, 0xB2, 0x1D, 0xE8, 0xC3, 0xEE, 0xE8, + 0xFB, 0x08, 0x72, 0x2D, 0xE8, 0x00, 0x08, 0xEB, 0x28, 0x2E, 0x80, 0x3E, + 0x03, 0x00, 0x00, 0x74, 0x12, 0xBE, 0xA9, 0x1D, 0xE8, 0xAB, 0xEE, 0xBE, + 0xE8, 0x1F, 0xE8, 0xA5, 0xEE, 0xBE, 0xE9, 0x1D, 0xE8, 0x9F, 0xEE, 0xE8, + 0xD7, 0x08, 0x73, 0x09, 0x2E, 0x80, 0x26, 0x02, 0x00, 0x7F, 0xE8, 0xD6, + 0x07, 0xC7, 0x06, 0xD1, 0x12, 0xEB, 0x32, 0x2E, 0x80, 0x0E, 0x02, 0x00, + 0x80, 0x9D, 0x66, 0x61, 0x07, 0x1F, 0x1E, 0x06, 0x66, 0x60, 0x9C, 0xC6, + 0x06, 0x00, 0x00, 0x02, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xE8, 0x23, 0xEE, + 0x72, 0x10, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x0A, 0xF6, 0xC1, 0x01, 0x74, + 0x05, 0xC6, 0x06, 0x00, 0x00, 0x42, 0x9D, 0x66, 0x61, 0x07, 0x1F, 0x1E, + 0x06, 0x66, 0x60, 0x9C, 0x60, 0x81, 0xFE, 0xC2, 0x01, 0x75, 0x0C, 0xC7, + 0x06, 0xBC, 0x01, 0xFF, 0xFF, 0xC7, 0x06, 0xBA, 0x01, 0xFE, 0x01, 0x52, + 0x1E, 0x06, 0xE8, 0x1A, 0x0A, 0x07, 0x1F, 0x84, 0xD2, 0x79, 0x15, 0x81, + 0xFE, 0xF2, 0x01, 0x77, 0x0F, 0x66, 0x8B, 0x44, 0x04, 0x66, 0x89, 0x44, + 0x08, 0x66, 0x31, 0xC0, 0x66, 0x89, 0x44, 0x04, 0x60, 0x83, 0x3E, 0x08, + 0x00, 0xFF, 0x75, 0x1B, 0xC7, 0x06, 0x08, 0x00, 0x3F, 0xFE, 0xB4, 0x08, + 0x1E, 0x06, 0xCD, 0x13, 0x07, 0x1F, 0x72, 0x0B, 0x80, 0xE1, 0x3F, 0x74, + 0x06, 0x88, 0xF5, 0x89, 0x0E, 0x08, 0x00, 0x61, 0x66, 0x31, 0xDB, 0x84, + 0xD2, 0x79, 0x0E, 0x66, 0x8B, 0x5C, 0x04, 0x66, 0x03, 0x5C, 0x08, 0x66, + 0x85, 0xDB, 0xF9, 0x74, 0x5A, 0x80, 0x3E, 0x00, 0x00, 0x42, 0x74, 0x3C, + 0xBD, 0x00, 0x00, 0xA1, 0x08, 0x00, 0x89, 0xC2, 0xB6, 0x00, 0x89, 0x16, + 0x18, 0x00, 0x88, 0xE2, 0x42, 0x89, 0x16, 0x1A, 0x00, 0x58, 0x50, 0xA2, + 0x24, 0x00, 0xFF, 0x36, 0xA3, 0x07, 0xC7, 0x06, 0xA3, 0x07, 0xEB, 0x00, + 0x06, 0x66, 0x53, 0x66, 0x53, 0x31, 0xDB, 0xB9, 0x21, 0x00, 0x58, 0x5A, + 0xE8, 0x88, 0xF3, 0x66, 0x5B, 0x07, 0x8F, 0x06, 0xA3, 0x07, 0xEB, 0x17, + 0x58, 0x50, 0x31, 0xD2, 0x52, 0x52, 0x66, 0x53, 0x06, 0x52, 0x6A, 0x3F, + 0x6A, 0x10, 0x92, 0xB4, 0x42, 0x89, 0xE6, 0xE8, 0x41, 0xED, 0x61, 0x5A, + 0x61, 0x58, 0x66, 0x61, 0x07, 0x1F, 0x1E, 0x06, 0x66, 0x60, 0x9C, 0x56, + 0x9C, 0x06, 0x1E, 0x07, 0xFC, 0x31, 0xC0, 0x84, 0xD2, 0x79, 0x10, 0xFF, + 0x06, 0xBC, 0x01, 0xA1, 0xBC, 0x01, 0x3C, 0x04, 0x72, 0x05, 0xC6, 0x06, + 0x22, 0x01, 0xFC, 0x50, 0xBF, 0x37, 0x1F, 0x88, 0xD0, 0xC0, 0xE8, 0x07, + 0xD0, 0xE0, 0x05, 0x66, 0x64, 0xAB, 0x88, 0xD0, 0x24, 0x7F, 0xD4, 0x0A, + 0x84, 0xE4, 0x74, 0x06, 0x80, 0xC4, 0x30, 0x88, 0x25, 0x47, 0x04, 0x30, + 0xAA, 0x58, 0x84, 0xD2, 0x79, 0x13, 0xC6, 0x05, 0x2C, 0x47, 0xD4, 0x0A, + 0x84, 0xE4, 0x74, 0x06, 0x80, 0xC4, 0x30, 0x88, 0x25, 0x47, 0x04, 0x30, + 0xAA, 0x66, 0xC7, 0x05, 0x29, 0x3A, 0x20, 0x00, 0xBE, 0x30, 0x1F, 0xE8, + 0x1C, 0xED, 0x07, 0x9D, 0x0F, 0x82, 0x58, 0x04, 0x31, 0xF6, 0x06, 0x1F, + 0x81, 0x3E, 0x38, 0x04, 0x53, 0xEF, 0x0F, 0x85, 0x2C, 0x01, 0x66, 0x31, + 0xC0, 0x66, 0x39, 0x06, 0x00, 0x04, 0x0F, 0x84, 0x20, 0x01, 0x66, 0x39, + 0x06, 0x04, 0x04, 0x0F, 0x84, 0x17, 0x01, 0x66, 0x39, 0x06, 0x20, 0x04, + 0x0F, 0x84, 0x0E, 0x01, 0x66, 0x39, 0x06, 0x28, 0x04, 0x0F, 0x84, 0x05, + 0x01, 0x66, 0xA1, 0x14, 0x04, 0x89, 0xC3, 0x66, 0xD1, 0xE8, 0x0F, 0x85, + 0xF8, 0x00, 0x66, 0x8B, 0x0E, 0x18, 0x04, 0x66, 0x83, 0xF9, 0x04, 0x0F, + 0x87, 0xEB, 0x00, 0xF7, 0xD9, 0x11, 0xC3, 0x4B, 0x0F, 0x85, 0xE2, 0x00, + 0xB8, 0x80, 0x00, 0x2E, 0xA3, 0x26, 0x08, 0x66, 0x8B, 0x0E, 0x4C, 0x04, + 0x67, 0xE3, 0x29, 0xA1, 0x58, 0x04, 0x85, 0xC0, 0x0F, 0x84, 0xCA, 0x00, + 0x50, 0x52, 0x8A, 0x0E, 0x18, 0x04, 0x80, 0xC1, 0x0A, 0x31, 0xD2, 0x42, + 0xD3, 0xE2, 0x91, 0x92, 0x31, 0xD2, 0xF7, 0xF1, 0x85, 0xD2, 0x5A, 0x58, + 0x0F, 0x85, 0xAE, 0x00, 0x2E, 0xA3, 0x26, 0x08, 0xFC, 0xBE, 0x00, 0x08, + 0x31, 0xFF, 0xB9, 0x00, 0x02, 0x2E, 0xF3, 0xA5, 0x84, 0xD2, 0x79, 0x08, + 0xBF, 0x25, 0x00, 0x2E, 0xA1, 0xBC, 0x01, 0xAA, 0x5E, 0x56, 0x66, 0x31, + 0xC0, 0x84, 0xD2, 0x79, 0x0A, 0x2E, 0x66, 0x8B, 0x44, 0x04, 0x2E, 0x66, + 0x03, 0x44, 0x08, 0x26, 0x66, 0x89, 0x47, 0x1C, 0x2E, 0x8A, 0x07, 0x26, + 0x88, 0x47, 0x02, 0x26, 0x8A, 0x0E, 0x18, 0x04, 0x66, 0xB8, 0x02, 0x00, + 0x00, 0x00, 0xD3, 0xE0, 0x26, 0x88, 0x47, 0x0D, 0xC1, 0xE0, 0x09, 0x26, + 0x89, 0x47, 0x0E, 0xC1, 0xE8, 0x02, 0x26, 0x66, 0x89, 0x47, 0x14, 0x80, + 0xC1, 0x08, 0x66, 0xD3, 0xE0, 0x26, 0x66, 0x89, 0x47, 0x10, 0x2E, 0x8B, + 0x47, 0x08, 0x83, 0xF8, 0xFF, 0x74, 0x0C, 0x26, 0x88, 0x47, 0x18, 0xC1, + 0xE8, 0x08, 0x40, 0x26, 0x89, 0x47, 0x1A, 0x26, 0x66, 0xA1, 0x28, 0x04, + 0x26, 0x66, 0x89, 0x47, 0x28, 0x26, 0x66, 0xA1, 0x14, 0x04, 0x40, 0x26, + 0x66, 0x89, 0x47, 0x2C, 0xBE, 0xFC, 0x01, 0x89, 0xF7, 0xAD, 0x3D, 0xEB, + 0xFE, 0x75, 0x09, 0x48, 0xAA, 0xB8, 0x10, 0x84, 0xAB, 0x31, 0xC0, 0xAB, + 0xBE, 0x42, 0x1F, 0xE8, 0xE0, 0xEB, 0xF8, 0xE9, 0x25, 0x03, 0x84, 0xD2, + 0x78, 0x4D, 0x2E, 0xC6, 0x06, 0xBC, 0x01, 0xFF, 0x66, 0xA1, 0x1C, 0x40, + 0x66, 0x83, 0xF8, 0x20, 0x75, 0x3D, 0x31, 0xDB, 0xBF, 0xC6, 0x01, 0xB9, + 0x04, 0x00, 0xFC, 0x66, 0xAF, 0x75, 0x06, 0x46, 0x2E, 0x88, 0x1E, 0xBC, + 0x01, 0x83, 0xC7, 0x0C, 0x43, 0xE2, 0xEF, 0x4E, 0x75, 0x21, 0xB0, 0x00, + 0xBF, 0x0B, 0x00, 0xB9, 0x4F, 0x00, 0xFC, 0xF3, 0xAE, 0x75, 0x14, 0xBE, + 0x0B, 0x40, 0xBF, 0x0B, 0x00, 0xB9, 0x4F, 0x00, 0xFC, 0xF3, 0xA5, 0x86, + 0x06, 0x1C, 0x00, 0x01, 0x06, 0x0E, 0x00, 0x31, 0xF6, 0x81, 0x7C, 0x0B, + 0x00, 0x02, 0x0F, 0x85, 0xA2, 0x01, 0x8A, 0x44, 0x0D, 0x84, 0xC0, 0x0F, + 0x84, 0x99, 0x01, 0x88, 0xC1, 0xB8, 0x80, 0x00, 0xF6, 0xF1, 0x84, 0xE4, + 0x0F, 0x85, 0x8C, 0x01, 0x8B, 0x44, 0x18, 0x85, 0xC0, 0x0F, 0x84, 0x83, + 0x01, 0x83, 0xF8, 0x3F, 0x0F, 0x87, 0x7C, 0x01, 0x8B, 0x44, 0x1A, 0x48, + 0x84, 0xE4, 0x0F, 0x85, 0x72, 0x01, 0x80, 0x7C, 0x15, 0xF0, 0x0F, 0x82, + 0x6A, 0x01, 0x2E, 0x80, 0x3E, 0x00, 0x00, 0x42, 0x75, 0x04, 0xC6, 0x44, + 0x02, 0x0E, 0xFC, 0xBB, 0x00, 0x06, 0xB9, 0x3C, 0x00, 0x8A, 0x44, 0x10, + 0x3C, 0x02, 0x0F, 0x87, 0x4E, 0x01, 0x8B, 0x44, 0x11, 0x85, 0xC0, 0x0F, + 0x85, 0xC0, 0x00, 0x8B, 0x44, 0x13, 0x85, 0xC0, 0x0F, 0x85, 0x3C, 0x01, + 0x8B, 0x44, 0x16, 0x85, 0xC0, 0x0F, 0x85, 0x33, 0x01, 0x8A, 0x44, 0x10, + 0x84, 0xC0, 0x74, 0x22, 0x66, 0x8B, 0x44, 0x20, 0x66, 0x85, 0xC0, 0x0F, + 0x84, 0x21, 0x01, 0x66, 0x8B, 0x44, 0x24, 0x66, 0x85, 0xC0, 0x0F, 0x84, + 0x16, 0x01, 0xBB, 0x00, 0x04, 0xB9, 0x58, 0x00, 0xBE, 0x51, 0x1F, 0xE9, + 0xA0, 0x00, 0x66, 0x8B, 0x44, 0x20, 0x66, 0x85, 0xC0, 0x0F, 0x85, 0xFF, + 0x00, 0x8B, 0x44, 0x0E, 0x85, 0xC0, 0x0F, 0x85, 0xF6, 0x00, 0x2E, 0x8B, + 0x44, 0x08, 0x83, 0xF8, 0xFF, 0x74, 0x0A, 0x88, 0x44, 0x18, 0xC1, 0xE8, + 0x08, 0x40, 0x89, 0x44, 0x1A, 0x5E, 0x56, 0x66, 0x31, 0xC0, 0x84, 0xD2, + 0x79, 0x0A, 0x2E, 0x66, 0x8B, 0x44, 0x04, 0x2E, 0x66, 0x03, 0x44, 0x08, + 0x66, 0xA3, 0x1C, 0x00, 0x88, 0x16, 0x24, 0x00, 0xBE, 0x49, 0x1F, 0xE8, + 0xA0, 0xEA, 0xBB, 0x00, 0x0A, 0xB9, 0x52, 0x00, 0x0E, 0x1F, 0x89, 0xDE, + 0x31, 0xFF, 0xAD, 0xAB, 0x01, 0xCE, 0x01, 0xCF, 0xB9, 0x00, 0x08, 0x29, + 0xF9, 0xF3, 0xA4, 0x26, 0xA0, 0x01, 0x00, 0x04, 0x05, 0x98, 0x97, 0xA0, + 0xBC, 0x01, 0xAA, 0xBF, 0xFA, 0x01, 0x26, 0x8B, 0x05, 0x3D, 0xEB, 0xFE, + 0x75, 0x09, 0x48, 0xAA, 0xB8, 0x10, 0x84, 0xAB, 0x31, 0xC0, 0xAB, 0xF8, + 0xE9, 0xAC, 0x01, 0x31, 0xF6, 0x8A, 0x44, 0x10, 0x84, 0xC0, 0x74, 0x7C, + 0x8B, 0x44, 0x16, 0x85, 0xC0, 0x74, 0x75, 0xBE, 0x59, 0x1F, 0x83, 0xF8, + 0x0C, 0x77, 0x03, 0xBE, 0x61, 0x1F, 0x53, 0x51, 0xE8, 0x43, 0xEA, 0x59, + 0x5B, 0x31, 0xF6, 0x2E, 0x8B, 0x44, 0x08, 0x83, 0xF8, 0xFF, 0x74, 0x0A, + 0x88, 0x44, 0x18, 0xC1, 0xE8, 0x08, 0x40, 0x89, 0x44, 0x1A, 0x5F, 0x57, + 0x66, 0x31, 0xC0, 0x84, 0xD2, 0x79, 0x0A, 0x2E, 0x66, 0x8B, 0x45, 0x04, + 0x2E, 0x66, 0x03, 0x45, 0x08, 0x66, 0xA3, 0x1C, 0x00, 0x0E, 0x1F, 0x89, + 0xDE, 0x31, 0xFF, 0xAD, 0xAB, 0x01, 0xCE, 0x01, 0xCF, 0xB9, 0x00, 0x02, + 0x29, 0xF9, 0xF3, 0xA4, 0x26, 0xA0, 0x01, 0x00, 0x04, 0x05, 0x98, 0x97, + 0xA0, 0xBC, 0x01, 0xAA, 0xBF, 0xFA, 0x01, 0x26, 0x8B, 0x05, 0x3D, 0xEB, + 0xFE, 0x75, 0x09, 0x48, 0xAA, 0xB8, 0x10, 0x84, 0xAB, 0x31, 0xC0, 0xAB, + 0xF8, 0xE9, 0x27, 0x01, 0x0E, 0x07, 0x5E, 0x56, 0x26, 0x80, 0x3C, 0x05, + 0x74, 0x22, 0x26, 0x80, 0x3C, 0x0F, 0x74, 0x1C, 0x26, 0x80, 0x3C, 0x15, + 0x74, 0x16, 0x26, 0x80, 0x3C, 0x1F, 0x74, 0x10, 0x26, 0x80, 0x3C, 0x85, + 0x74, 0x0A, 0xBE, 0x69, 0x1F, 0xE8, 0xB6, 0xE9, 0xF9, 0xE9, 0xFB, 0x00, + 0x81, 0xFE, 0xFE, 0x01, 0x72, 0x05, 0x26, 0xFF, 0x0E, 0xBC, 0x01, 0xBE, + 0x77, 0x1F, 0xE8, 0xA1, 0xE9, 0xBE, 0xBE, 0x01, 0xB9, 0x04, 0x00, 0x66, + 0x8B, 0x04, 0x3B, 0x44, 0x02, 0x75, 0x16, 0x38, 0xC4, 0x75, 0x12, 0x66, + 0x39, 0x44, 0x04, 0x75, 0x0C, 0x66, 0x39, 0x44, 0x08, 0x75, 0x06, 0x66, + 0x39, 0x44, 0x0C, 0x74, 0x30, 0x8A, 0x04, 0xD0, 0xE0, 0x0F, 0x85, 0xB7, + 0x00, 0x8A, 0x44, 0x02, 0x24, 0x3F, 0x0F, 0x84, 0xAE, 0x00, 0x8A, 0x44, + 0x06, 0x24, 0x3F, 0x0F, 0x84, 0xA5, 0x00, 0x66, 0x8B, 0x44, 0x08, 0x66, + 0x85, 0xC0, 0x0F, 0x84, 0x9A, 0x00, 0x66, 0x8B, 0x44, 0x0C, 0x66, 0x85, + 0xC0, 0x0F, 0x84, 0x8F, 0x00, 0x83, 0xC6, 0x10, 0xE2, 0xAD, 0x81, 0x3C, + 0x55, 0xAA, 0x0F, 0x85, 0x82, 0x00, 0xBE, 0xBE, 0x01, 0xB9, 0x04, 0x00, + 0x5B, 0x53, 0x66, 0x8B, 0x04, 0x3B, 0x44, 0x02, 0x75, 0x16, 0x38, 0xC4, + 0x75, 0x12, 0x66, 0x39, 0x44, 0x04, 0x75, 0x0C, 0x66, 0x39, 0x44, 0x08, + 0x75, 0x06, 0x66, 0x39, 0x44, 0x0C, 0x74, 0x54, 0x26, 0x8B, 0x3E, 0xBA, + 0x01, 0x81, 0xFF, 0xF0, 0x83, 0x77, 0x49, 0x81, 0xFF, 0xFE, 0x03, 0x75, + 0x08, 0xBF, 0x00, 0x7E, 0x26, 0x89, 0x3E, 0xBA, 0x01, 0x26, 0x83, 0x06, + 0xBA, 0x01, 0x10, 0x66, 0xAD, 0x66, 0xAB, 0x66, 0xAD, 0x66, 0xAB, 0x92, + 0x66, 0xAD, 0x66, 0x92, 0x3C, 0x05, 0x74, 0x15, 0x3C, 0x0F, 0x74, 0x11, + 0x3C, 0x15, 0x74, 0x0D, 0x3C, 0x1F, 0x74, 0x09, 0x3C, 0x85, 0x74, 0x05, + 0x26, 0x66, 0x03, 0x57, 0x04, 0x66, 0x92, 0x66, 0xAB, 0x66, 0xAD, 0x26, + 0x66, 0x8B, 0x47, 0x08, 0x66, 0xAB, 0xEB, 0x03, 0x83, 0xC6, 0x10, 0xE2, + 0x89, 0xF9, 0xEB, 0x07, 0xBE, 0x82, 0x1F, 0xE8, 0xB8, 0xE8, 0xF9, 0x5E, + 0x9C, 0x0E, 0x1F, 0x0E, 0x07, 0x56, 0x81, 0xFE, 0x02, 0x02, 0x75, 0x37, + 0xBF, 0xFE, 0x01, 0xBE, 0x0E, 0x02, 0xB9, 0xF8, 0x00, 0xFC, 0xF3, 0xA5, + 0xBF, 0xEE, 0x03, 0xBE, 0x00, 0x7E, 0xB9, 0x08, 0x00, 0xFC, 0xF3, 0xA5, + 0xBF, 0x00, 0x7E, 0xBE, 0x10, 0x7E, 0xB9, 0xF8, 0x02, 0xFC, 0xF3, 0xA5, + 0x81, 0x3E, 0xBA, 0x01, 0x10, 0x7E, 0x75, 0x06, 0xC7, 0x06, 0xBA, 0x01, + 0x0E, 0x04, 0x83, 0x2E, 0xBA, 0x01, 0x10, 0x5E, 0xB8, 0xFE, 0x01, 0xBF, + 0x25, 0x01, 0x89, 0x05, 0x81, 0xFE, 0xB2, 0x31, 0x0F, 0x84, 0x2B, 0x01, + 0xFF, 0x05, 0x39, 0x06, 0xBA, 0x01, 0x0F, 0x85, 0x35, 0x01, 0xFF, 0x0D, + 0x81, 0xFE, 0xF2, 0x01, 0x77, 0x0D, 0x0F, 0x82, 0x29, 0x01, 0x83, 0x3E, + 0xBC, 0x01, 0x03, 0x0F, 0x87, 0x20, 0x01, 0x31, 0xC0, 0x8E, 0xD8, 0x8A, + 0x36, 0x75, 0x04, 0x0E, 0x1F, 0x80, 0xCE, 0x80, 0x89, 0xE5, 0x8A, 0x56, + 0x18, 0x73, 0x17, 0xE8, 0x2C, 0xE8, 0xBE, 0xC5, 0x1E, 0x88, 0xD0, 0x24, + 0x7F, 0xD4, 0x0A, 0x05, 0x30, 0x30, 0x86, 0xC4, 0x89, 0x44, 0x20, 0xE8, + 0x18, 0xE8, 0x42, 0x38, 0xF2, 0x0F, 0x83, 0xDA, 0x00, 0x53, 0xB4, 0x08, + 0xE8, 0xC0, 0xE7, 0x72, 0x19, 0x80, 0xE1, 0x3F, 0xF9, 0x74, 0x13, 0x5B, + 0x88, 0xD5, 0x51, 0xB8, 0x01, 0x02, 0xBB, 0x00, 0x7E, 0xB9, 0x01, 0x00, + 0x30, 0xF6, 0xE8, 0xA6, 0xE7, 0xFB, 0x5B, 0xBE, 0xA7, 0x1E, 0x72, 0xB9, + 0x84, 0xE4, 0xF9, 0x75, 0xB4, 0xBE, 0xBE, 0x7F, 0xBF, 0xBE, 0x01, 0x81, + 0xFF, 0xFE, 0x01, 0x73, 0x73, 0x66, 0x31, 0xC9, 0x66, 0xAD, 0x66, 0xAB, + 0x66, 0x09, 0xC1, 0x66, 0xAD, 0x66, 0xAB, 0x66, 0x09, 0xC1, 0x66, 0xAD, + 0x66, 0xAB, 0x66, 0x09, 0xC1, 0x66, 0xAD, 0x66, 0xAB, 0x66, 0x09, 0xC1, + 0x67, 0xE3, 0xD8, 0x8A, 0x44, 0xF0, 0xD0, 0xE0, 0xF9, 0x96, 0xBE, 0xEA, + 0x1E, 0x0F, 0x85, 0x78, 0xFF, 0x96, 0x8A, 0x44, 0xF2, 0x24, 0x3F, 0xF9, + 0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x84, 0x69, 0xFF, 0x96, 0x8A, 0x44, 0xF6, + 0x24, 0x3F, 0xF9, 0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x84, 0x5A, 0xFF, 0x96, + 0x66, 0x8B, 0x44, 0xF8, 0x66, 0x85, 0xC0, 0xF9, 0x96, 0xBE, 0xEA, 0x1E, + 0x0F, 0x84, 0x49, 0xFF, 0x96, 0x66, 0x8B, 0x44, 0xFC, 0x66, 0x85, 0xC0, + 0xF9, 0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x84, 0x38, 0xFF, 0x96, 0xEB, 0x87, + 0x81, 0x3C, 0x55, 0xAA, 0xF9, 0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x85, 0x28, + 0xFF, 0x96, 0x89, 0x5E, 0x0C, 0xC7, 0x46, 0x08, 0xB2, 0x01, 0xC6, 0x06, + 0x20, 0x01, 0xE8, 0xC7, 0x06, 0x21, 0x01, 0x78, 0x19, 0xC7, 0x06, 0xBC, + 0x01, 0xFF, 0xFF, 0xC7, 0x06, 0xBA, 0x01, 0xFE, 0x01, 0xEB, 0x14, 0xC6, + 0x06, 0x37, 0x01, 0xE9, 0xC7, 0x06, 0x38, 0x01, 0x74, 0x19, 0xA0, 0x02, + 0x00, 0x24, 0x01, 0x28, 0x06, 0x25, 0x01, 0x58, 0x9D, 0x9F, 0xC0, 0xE4, + 0x02, 0xC1, 0xC8, 0x02, 0x9E, 0x72, 0x23, 0x66, 0x61, 0x66, 0x60, 0x9C, + 0x2E, 0x80, 0x3E, 0x06, 0x00, 0xFF, 0x74, 0x15, 0x2E, 0x8A, 0x36, 0xBC, + 0x01, 0x84, 0xD2, 0x78, 0x02, 0xB6, 0xFF, 0x2E, 0x3B, 0x16, 0x06, 0x00, + 0x74, 0x03, 0x9D, 0xF9, 0x9C, 0x9D, 0x66, 0x61, 0x07, 0x1F, 0xC3, 0x83, + 0xC6, 0x0C, 0x89, 0xE8, 0x88, 0xE2, 0xC7, 0x06, 0x20, 0x01, 0x83, 0xC6, + 0xC6, 0x06, 0x22, 0x01, 0x0C, 0xC3, 0x2E, 0x80, 0x3E, 0x06, 0x00, 0xFF, + 0x74, 0x19, 0x2E, 0xC6, 0x06, 0x06, 0x00, 0xFF, 0xB2, 0x7F, 0xF9, 0x68, + 0x1C, 0x01, 0x0E, 0x68, 0x00, 0x0D, 0x66, 0x60, 0x9C, 0x9C, 0x0E, 0x07, + 0xE9, 0x78, 0xFE, 0x31, 0xC0, 0x8E, 0xC0, 0x8E, 0xD8, 0xB8, 0x02, 0x02, + 0xBB, 0x00, 0x7A, 0xB9, 0x01, 0x00, 0xBA, 0x80, 0x00, 0xE8, 0x5B, 0xE6, + 0xFB, 0x0F, 0x82, 0xB6, 0x00, 0x84, 0xE4, 0x0F, 0x85, 0xB0, 0x00, 0x81, + 0x3E, 0xFE, 0x7D, 0x55, 0xAA, 0x0F, 0x85, 0xA6, 0x00, 0x81, 0x3E, 0xFE, + 0x7B, 0x55, 0xAA, 0x0F, 0x85, 0x9C, 0x00, 0xBE, 0xBE, 0x7D, 0x81, 0xFE, + 0xFE, 0x7D, 0x73, 0x31, 0xB9, 0x04, 0x00, 0x89, 0xF7, 0x66, 0xAD, 0x66, + 0xF7, 0xD8, 0x72, 0x04, 0xE2, 0xF7, 0xEB, 0xEA, 0x89, 0xFE, 0xAD, 0xD0, + 0xE0, 0x75, 0x19, 0xAD, 0x24, 0x3F, 0x74, 0x14, 0xAD, 0xAD, 0x24, 0x3F, + 0x74, 0x0E, 0x66, 0xAD, 0x66, 0xF7, 0xD8, 0x73, 0x07, 0x66, 0xAD, 0x66, + 0xF7, 0xD8, 0x72, 0xCA, 0xF9, 0x9C, 0x2E, 0xF6, 0x06, 0x02, 0x00, 0x02, + 0x74, 0x04, 0x9D, 0x72, 0x56, 0x9C, 0x9D, 0x72, 0x0C, 0xBE, 0xB8, 0x7B, + 0xBF, 0xB8, 0x7D, 0xB9, 0x24, 0x00, 0xFC, 0xF3, 0xA5, 0x2E, 0xF6, 0x06, + 0x02, 0x00, 0x80, 0x74, 0x30, 0xBE, 0xF2, 0x1E, 0xE8, 0x23, 0xE6, 0xBE, + 0xD3, 0x0B, 0xE8, 0x1D, 0xE6, 0xBE, 0x97, 0x1D, 0x2E, 0xC7, 0x06, 0x04, + 0x00, 0x20, 0x39, 0x2E, 0xC6, 0x06, 0x03, 0x00, 0x0F, 0xE8, 0x0A, 0xE6, + 0xBE, 0x6B, 0x1E, 0xE8, 0x04, 0xE6, 0xE8, 0x3C, 0x00, 0x2E, 0xC6, 0x06, + 0x03, 0x00, 0xFF, 0x72, 0xF5, 0x66, 0xC7, 0x06, 0xFC, 0x05, 0x00, 0x00, + 0x00, 0x00, 0xEA, 0x00, 0x7C, 0x00, 0x00, 0x2E, 0xF6, 0x06, 0x02, 0x00, + 0x80, 0x75, 0x0A, 0xBE, 0x33, 0x1E, 0xE8, 0xDD, 0xE5, 0xE8, 0x15, 0x00, + 0xC3, 0xBE, 0xF2, 0x1E, 0xE8, 0xD3, 0xE5, 0xBE, 0xD3, 0x0B, 0xE8, 0xCD, + 0xE5, 0xBE, 0x01, 0x1F, 0xE8, 0xC7, 0xE5, 0xEB, 0xFE, 0x1E, 0x66, 0x56, + 0x66, 0x52, 0x66, 0xBA, 0xFF, 0xFF, 0xFF, 0xFF, 0x2E, 0x66, 0x0F, 0xB6, + 0x06, 0x03, 0x00, 0x3C, 0xFF, 0x74, 0x09, 0x66, 0xBA, 0x12, 0x00, 0x00, + 0x00, 0xF7, 0xE2, 0x92, 0x31, 0xC0, 0x8E, 0xD8, 0x66, 0xA1, 0x6C, 0x04, + 0x66, 0x89, 0xC1, 0x66, 0x85, 0xD2, 0x78, 0x2C, 0x66, 0x01, 0xD0, 0x66, + 0x50, 0x2E, 0x66, 0x0F, 0xB6, 0x06, 0x03, 0x00, 0x66, 0x09, 0xC0, 0x74, + 0x10, 0xBE, 0x20, 0x1E, 0x66, 0x50, 0xE8, 0x7D, 0xE5, 0x66, 0x58, 0xBE, + 0x2C, 0x1E, 0xE8, 0xCF, 0x00, 0x66, 0x89, 0xCE, 0x66, 0x83, 0xC6, 0x12, + 0x66, 0x58, 0xEB, 0x06, 0x66, 0x89, 0xD0, 0x66, 0x89, 0xD6, 0x66, 0x8B, + 0x1E, 0x6C, 0x04, 0x66, 0x39, 0xCB, 0x73, 0x0C, 0x66, 0x31, 0xC9, 0x66, + 0x89, 0xD0, 0x66, 0xBE, 0x12, 0x00, 0x00, 0x00, 0x66, 0x50, 0xB4, 0x01, + 0xCD, 0x16, 0x50, 0x9C, 0xB4, 0x11, 0xCD, 0x16, 0x75, 0x3F, 0x9D, 0x75, + 0x3D, 0x58, 0x66, 0x58, 0x66, 0x39, 0xF3, 0x72, 0x29, 0x66, 0x56, 0x66, + 0x50, 0x66, 0x52, 0x66, 0x29, 0xF0, 0x66, 0x31, 0xD2, 0x66, 0xBE, 0x12, + 0x00, 0x00, 0x00, 0x66, 0xF7, 0xF6, 0xBE, 0x2C, 0x1E, 0x66, 0x53, 0xE8, + 0x72, 0x00, 0x66, 0x5B, 0x66, 0x5A, 0x66, 0x58, 0x66, 0x5E, 0x66, 0x83, + 0xC6, 0x12, 0x66, 0x39, 0xC3, 0x76, 0xA3, 0x66, 0x5A, 0x66, 0x5E, 0x1F, + 0xC3, 0x9D, 0x2E, 0x33, 0x06, 0x04, 0x00, 0x58, 0x74, 0x0D, 0x2E, 0x33, + 0x06, 0x04, 0x00, 0x75, 0x0B, 0xB4, 0x00, 0xCD, 0x16, 0xEB, 0x04, 0xB4, + 0x10, 0xCD, 0x16, 0xF9, 0x66, 0x58, 0x66, 0x5A, 0x66, 0x5E, 0x1F, 0xC3, + 0x66, 0x52, 0x66, 0x51, 0x53, 0x66, 0xB9, 0x0A, 0x00, 0x00, 0x00, 0x89, + 0xF3, 0x66, 0x31, 0xD2, 0x66, 0xF7, 0xF1, 0x80, 0xC2, 0x30, 0x2E, 0x88, + 0x14, 0x46, 0x66, 0x09, 0xC0, 0x75, 0xEE, 0x56, 0x4E, 0x39, 0xDE, 0x76, + 0x0C, 0x2E, 0x8A, 0x04, 0x2E, 0x86, 0x07, 0x2E, 0x88, 0x04, 0x43, 0xEB, + 0xEF, 0x5E, 0x5B, 0x66, 0x59, 0x66, 0x5A, 0xC3, 0x56, 0xE8, 0xC4, 0xFF, + 0x2E, 0x80, 0x3C, 0x08, 0x74, 0x07, 0x2E, 0xC6, 0x04, 0x20, 0x46, 0xEB, + 0xF3, 0x5E, 0xE8, 0x91, 0xE4, 0xC3, 0x56, 0x53, 0x66, 0x50, 0xB8, 0x03, + 0x00, 0xCD, 0x10, 0xBE, 0x00, 0x02, 0x89, 0xF7, 0xB9, 0x00, 0x3E, 0xFC, + 0xF3, 0xA5, 0x66, 0x58, 0x5B, 0x5E, 0xC3, 0x1E, 0x06, 0x66, 0x60, 0x8C, + 0xC3, 0xFA, 0x0F, 0x01, 0x16, 0x60, 0x12, 0x0F, 0x20, 0xC0, 0x0C, 0x01, + 0x0F, 0x22, 0xC0, 0xBE, 0x08, 0x00, 0x8E, 0xC6, 0x66, 0x31, 0xF6, 0x66, + 0x31, 0xFF, 0x66, 0xB9, 0x00, 0x24, 0x00, 0x00, 0xFC, 0x66, 0xF3, 0xA5, + 0xBE, 0x10, 0x00, 0x8E, 0xC6, 0x24, 0xFE, 0x0F, 0x22, 0xC0, 0x8E, 0xC3, + 0xB9, 0x00, 0x04, 0x31, 0xF6, 0x56, 0xBF, 0x00, 0x7C, 0x57, 0x06, 0x1F, + 0x56, 0x07, 0xFC, 0xF3, 0xA5, 0xBF, 0x10, 0x84, 0xBE, 0x00, 0x12, 0xB9, + 0x1E, 0x00, 0xFC, 0x2E, 0x66, 0xF3, 0xA5, 0x06, 0x1F, 0xFB, 0xCB, 0x84, + 0xD2, 0x79, 0x06, 0x81, 0xFE, 0xC2, 0x01, 0x75, 0x21, 0xC7, 0x06, 0x08, + 0x00, 0xFF, 0xFF, 0x80, 0x3E, 0x00, 0x00, 0x42, 0x74, 0x14, 0xF6, 0x06, + 0x02, 0x00, 0x08, 0x75, 0x0D, 0x66, 0x81, 0x3E, 0xFC, 0x23, 0x47, 0x52, + 0x55, 0xAA, 0x0F, 0x84, 0x6A, 0x02, 0xC3, 0x0D, 0x0A, 0x50, 0x72, 0x65, + 0x73, 0x73, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x62, 0x61, 0x72, + 0x00, 0x0D, 0x0A, 0x50, 0x72, 0x65, 0x73, 0x73, 0x20, 0x00, 0x20, 0x74, + 0x6F, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x47, 0x52, 0x55, 0x42, + 0x2C, 0x20, 0x61, 0x6E, 0x79, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x20, + 0x6B, 0x65, 0x79, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x6F, 0x6F, 0x74, 0x20, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, 0x75, 0x73, 0x20, 0x4D, 0x42, 0x52, + 0x20, 0x2E, 0x2E, 0x2E, 0x00, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x6F, 0x6F, + 0x74, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, 0x75, 0x73, 0x20, 0x4D, + 0x42, 0x52, 0x2C, 0x20, 0x61, 0x6E, 0x79, 0x20, 0x6F, 0x74, 0x68, 0x65, + 0x72, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x20, 0x47, 0x52, 0x55, 0x42, 0x20, 0x2E, 0x2E, 0x2E, 0x00, + 0x0D, 0x0A, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x3A, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x08, 0x08, 0x08, 0x00, 0x0D, 0x0A, 0x49, 0x6E, 0x76, + 0x61, 0x6C, 0x69, 0x64, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, 0x75, + 0x73, 0x20, 0x4D, 0x42, 0x52, 0x2E, 0x20, 0x50, 0x72, 0x65, 0x73, 0x73, + 0x20, 0x61, 0x6E, 0x79, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x74, 0x6F, 0x20, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x47, 0x52, 0x55, 0x42, 0x20, 0x2E, + 0x2E, 0x2E, 0x00, 0x20, 0x74, 0x6F, 0x20, 0x68, 0x6F, 0x6C, 0x64, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6E, 0x2C, 0x20, + 0x61, 0x6E, 0x79, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6B, 0x65, + 0x79, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x6F, 0x6F, 0x74, 0x20, 0x70, 0x72, + 0x65, 0x76, 0x69, 0x6F, 0x75, 0x73, 0x20, 0x4D, 0x42, 0x52, 0x20, 0x2E, + 0x2E, 0x2E, 0x00, 0x0D, 0x0A, 0x45, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x77, + 0x68, 0x69, 0x6C, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6E, 0x67, + 0x20, 0x4D, 0x42, 0x52, 0x20, 0x6F, 0x66, 0x20, 0x00, 0x20, 0x69, 0x6E, + 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x74, + 0x61, 0x62, 0x6C, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x72, 0x69, 0x76, + 0x65, 0x20, 0x28, 0x68, 0x64, 0x30, 0x20, 0x29, 0x20, 0x00, 0x0D, 0x0A, + 0x45, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x0D, 0x0A, 0x43, 0x61, 0x6E, 0x6E, + 0x6F, 0x74, 0x20, 0x66, 0x69, 0x6E, 0x64, 0x20, 0x00, 0x20, 0x69, 0x6E, + 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x2E, + 0x20, 0x50, 0x72, 0x65, 0x73, 0x73, 0x20, 0x43, 0x74, 0x72, 0x6C, 0x2B, + 0x41, 0x6C, 0x74, 0x2B, 0x44, 0x65, 0x6C, 0x20, 0x74, 0x6F, 0x20, 0x72, + 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2E, 0x00, 0x0D, 0x0A, 0x54, 0x72, + 0x79, 0x20, 0x28, 0x68, 0x64, 0x30, 0x2C, 0x30, 0x20, 0x29, 0x20, 0x3A, + 0x20, 0x00, 0x45, 0x58, 0x54, 0x32, 0x3A, 0x20, 0x00, 0x4E, 0x54, 0x46, + 0x53, 0x35, 0x3A, 0x20, 0x00, 0x46, 0x41, 0x54, 0x33, 0x32, 0x3A, 0x20, + 0x00, 0x46, 0x41, 0x54, 0x31, 0x36, 0x3A, 0x20, 0x00, 0x46, 0x41, 0x54, + 0x31, 0x32, 0x3A, 0x20, 0x00, 0x6E, 0x6F, 0x6E, 0x2D, 0x4D, 0x53, 0x3A, + 0x20, 0x73, 0x6B, 0x69, 0x70, 0x20, 0x00, 0x45, 0x78, 0x74, 0x65, 0x6E, + 0x64, 0x65, 0x64, 0x3A, 0x20, 0x00, 0x69, 0x6E, 0x76, 0x61, 0x6C, 0x69, + 0x64, 0x20, 0x6F, 0x72, 0x20, 0x6E, 0x75, 0x6C, 0x6C, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x6F, 0x74, 0x2D, 0x6B, 0x65, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xB5, 0x00, 0x04, 0x00, 0x05, 0x4D, 0xCB, 0x93, + 0x60, 0x66, 0x31, 0xC0, 0x2E, 0x66, 0xA3, 0x14, 0x23, 0x2E, 0x66, 0xA3, + 0x18, 0x23, 0xB4, 0x08, 0xCD, 0x13, 0x72, 0x14, 0xF6, 0xC1, 0x3F, 0x74, + 0x0F, 0x80, 0xE1, 0x3F, 0x2E, 0x88, 0x0E, 0x14, 0x23, 0xFE, 0xC6, 0x2E, + 0x88, 0x36, 0x18, 0x23, 0x61, 0x2E, 0x0F, 0xB6, 0x0E, 0x14, 0x23, 0x51, + 0x2E, 0x0F, 0xB6, 0x0E, 0x18, 0x23, 0x51, 0x0F, 0xB6, 0xCA, 0x51, 0x68, + 0xD2, 0x22, 0xE8, 0x21, 0x02, 0x83, 0xC4, 0x08, 0x2E, 0x8B, 0x0E, 0x14, + 0x23, 0xE8, 0x1F, 0x00, 0x73, 0x02, 0x31, 0xC9, 0x83, 0xF9, 0x3F, 0x73, + 0x2D, 0x41, 0xE8, 0x12, 0x00, 0x72, 0x07, 0x83, 0xF9, 0x3F, 0x72, 0xF0, + 0xEB, 0x20, 0x49, 0x80, 0xF9, 0x02, 0x73, 0x1A, 0xB4, 0x01, 0xC3, 0xB8, + 0x00, 0x50, 0x8E, 0xC0, 0x8E, 0xD8, 0x31, 0xDB, 0xB8, 0x01, 0x02, 0xB6, + 0x00, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xCD, 0x13, 0x61, 0xC3, 0x83, 0xF9, + 0x3F, 0x76, 0x03, 0xB9, 0x3F, 0x00, 0x2E, 0x89, 0x0E, 0x1C, 0x23, 0x2E, + 0x8A, 0x36, 0x18, 0x23, 0x84, 0xF6, 0x74, 0x09, 0xE8, 0x92, 0x00, 0x0F, + 0x82, 0x8B, 0x00, 0x77, 0x0F, 0xB6, 0x01, 0xE8, 0x87, 0x00, 0x0F, 0x82, + 0x80, 0x00, 0x77, 0x04, 0xFE, 0xC6, 0x75, 0xF3, 0xFE, 0xCE, 0x2E, 0x88, + 0x36, 0x1E, 0x23, 0x80, 0xFE, 0xFF, 0x75, 0x12, 0x2E, 0x8A, 0x36, 0x18, + 0x23, 0x84, 0xF6, 0x75, 0x02, 0xFE, 0xCE, 0xFE, 0xCE, 0x2E, 0x88, 0x36, + 0x1E, 0x23, 0x2E, 0x8A, 0x0E, 0x14, 0x23, 0xE8, 0xEF, 0x00, 0x72, 0x52, + 0x77, 0x18, 0xB1, 0x08, 0xE8, 0xE6, 0x00, 0x72, 0x49, 0x77, 0x0F, 0x41, + 0x2E, 0x3A, 0x0E, 0x1C, 0x23, 0x72, 0xF1, 0x80, 0xF9, 0x3F, 0x76, 0x02, + 0xB1, 0x3F, 0x2E, 0x88, 0x0E, 0x1C, 0x23, 0x2E, 0x0F, 0xB6, 0x0E, 0x1C, + 0x23, 0x51, 0x2E, 0x0F, 0xB6, 0x0E, 0x1E, 0x23, 0x41, 0x51, 0x0F, 0xB6, + 0xCA, 0x51, 0x68, 0xF3, 0x22, 0xE8, 0x52, 0x01, 0x83, 0xC4, 0x08, 0x2E, + 0x8B, 0x0E, 0x1C, 0x23, 0x2E, 0x8A, 0x36, 0x1E, 0x23, 0x2E, 0x88, 0x0E, + 0x08, 0x00, 0x2E, 0x88, 0x36, 0x09, 0x00, 0xB4, 0x00, 0xC3, 0xB4, 0x01, + 0xC3, 0xB5, 0x00, 0xB1, 0x01, 0xB4, 0x02, 0x2E, 0xA0, 0x1C, 0x23, 0xBB, + 0x00, 0x50, 0x8E, 0xC3, 0x8E, 0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, + 0xDF, 0xCD, 0x13, 0x61, 0xFE, 0xC5, 0x72, 0x48, 0xFE, 0xCD, 0xB1, 0x01, + 0xB4, 0x02, 0x2E, 0xA0, 0x1C, 0x23, 0xBB, 0x00, 0x58, 0x8E, 0xC3, 0x8E, + 0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xB6, 0x00, 0xCD, 0x13, + 0x61, 0x72, 0x37, 0xFE, 0xC5, 0xE8, 0x34, 0x00, 0x74, 0x22, 0xB1, 0x01, + 0xB4, 0x02, 0x2E, 0xA0, 0x1C, 0x23, 0xBB, 0x00, 0x58, 0x8E, 0xC3, 0x8E, + 0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xB6, 0x00, 0xCD, 0x13, + 0x61, 0x72, 0x13, 0xE8, 0x12, 0x00, 0x75, 0x0B, 0x80, 0xFD, 0x05, 0x72, + 0x96, 0x80, 0xFE, 0x00, 0x74, 0x04, 0xC3, 0x38, 0xF6, 0xC3, 0xF9, 0xC3, + 0x51, 0x56, 0x57, 0x2E, 0x8B, 0x0E, 0x1C, 0x23, 0xC1, 0xE1, 0x07, 0xB8, + 0x00, 0x50, 0x8E, 0xD8, 0xB8, 0x00, 0x58, 0x8E, 0xC0, 0x31, 0xF6, 0x31, + 0xFF, 0xFC, 0x66, 0xF3, 0xA7, 0x5F, 0x5E, 0x59, 0xC3, 0x2E, 0xC7, 0x06, + 0x20, 0x23, 0x10, 0x00, 0xB5, 0x00, 0xB6, 0x00, 0xB8, 0x01, 0x02, 0xBB, + 0x00, 0x58, 0x8E, 0xC3, 0x8E, 0xDB, 0x31, 0xDB, 0x60, 0xB1, 0x01, 0x89, + 0xDE, 0x89, 0xDF, 0xCD, 0x13, 0x61, 0x72, 0x5C, 0xB8, 0x02, 0x02, 0xBB, + 0x00, 0x50, 0x8E, 0xC3, 0x8E, 0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, + 0xDF, 0xCD, 0x13, 0x61, 0x9C, 0x2E, 0x3A, 0x36, 0x1E, 0x23, 0x72, 0x04, + 0xB6, 0xFF, 0xFE, 0xC5, 0xFE, 0xC6, 0x9D, 0x72, 0x22, 0xE8, 0x36, 0x00, + 0x74, 0x1D, 0xB8, 0x01, 0x02, 0xBB, 0x00, 0x58, 0x8E, 0xC3, 0x8E, 0xDB, + 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xB1, 0x01, 0xCD, 0x13, 0x61, + 0x72, 0x1A, 0xE8, 0x19, 0x00, 0x75, 0x12, 0x2E, 0xFF, 0x0E, 0x20, 0x23, + 0x74, 0x05, 0x80, 0xFD, 0x07, 0x72, 0x95, 0x80, 0xF9, 0x01, 0x76, 0x04, + 0xC3, 0x38, 0xC9, 0xC3, 0xF9, 0xC3, 0x51, 0x56, 0x57, 0xB9, 0x80, 0x00, + 0xB8, 0x20, 0x50, 0x8E, 0xD8, 0xB8, 0x00, 0x58, 0x8E, 0xC0, 0x31, 0xF6, + 0x31, 0xFF, 0xFC, 0x66, 0xF3, 0xA7, 0x5F, 0x5E, 0x59, 0xC3, 0x60, 0x89, + 0xE5, 0x83, 0xC5, 0x12, 0x8B, 0x76, 0x00, 0x83, 0xC5, 0x02, 0x2E, 0xAC, + 0x84, 0xC0, 0x74, 0x5C, 0x3C, 0x25, 0x75, 0x50, 0x2E, 0xAC, 0x84, 0xC0, + 0x74, 0x52, 0x3C, 0x64, 0xBB, 0x0A, 0x00, 0x74, 0x0B, 0x3C, 0x78, 0x74, + 0x04, 0x3C, 0x58, 0x75, 0xE1, 0xBB, 0x10, 0x00, 0x66, 0x57, 0x66, 0x31, + 0xFF, 0x31, 0xC9, 0x8B, 0x46, 0x00, 0x31, 0xD2, 0xF7, 0xF3, 0x89, 0xD7, + 0x66, 0xC1, 0xCF, 0x04, 0x41, 0x85, 0xC0, 0x75, 0xF1, 0x31, 0xDB, 0x66, + 0xC1, 0xC7, 0x04, 0x89, 0xF8, 0x24, 0x0F, 0x3C, 0x09, 0x76, 0x02, 0x04, + 0x07, 0x04, 0x30, 0xB4, 0x0E, 0xCD, 0x10, 0xE2, 0xEA, 0x66, 0x5F, 0x83, + 0xC5, 0x02, 0xEB, 0xA6, 0x31, 0xDB, 0xB4, 0x0E, 0xCD, 0x10, 0xEB, 0x9E, + 0x61, 0xC3, 0x0D, 0x0A, 0x42, 0x49, 0x4F, 0x53, 0x3A, 0x20, 0x44, 0x72, + 0x69, 0x76, 0x65, 0x3D, 0x30, 0x78, 0x25, 0x58, 0x2C, 0x20, 0x48, 0x3D, + 0x25, 0x64, 0x2C, 0x20, 0x53, 0x3D, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x54, + 0x55, 0x4E, 0x45, 0x3A, 0x20, 0x44, 0x72, 0x69, 0x76, 0x65, 0x3D, 0x30, + 0x78, 0x25, 0x58, 0x2C, 0x20, 0x48, 0x3D, 0x25, 0x64, 0x2C, 0x20, 0x53, + 0x3D, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x66, 0x90, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x47, 0x52, 0x55, 0xAA +}; diff --git a/src/ms-sys/inc/mbr_grub2.h b/src/ms-sys/inc/mbr_grub2.h new file mode 100644 index 00000000..be359dd8 --- /dev/null +++ b/src/ms-sys/inc/mbr_grub2.h @@ -0,0 +1,47 @@ +/* + * First 432 bytes of MBR from Grub2 (boot.img), with 2 bytes NOPed @0x66 + * as per grub2's setup.c comments: + * + * If DEST_DRIVE is a hard disk, enable the workaround, which is + * for buggy BIOSes which don't pass boot drive correctly. Instead, + * they pass 0x00 or 0x01 even when booted from 0x80. + */ + +unsigned char mbr_grub2_0x0[432] = { + 0xEB, 0x63, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFA, 0x90, 0x90, 0xF6, 0xC2, 0x80, 0x74, + 0x05, 0xF6, 0xC2, 0x70, 0x74, 0x02, 0xB2, 0x80, 0xEA, 0x79, 0x7C, 0x00, + 0x00, 0x31, 0xC0, 0x8E, 0xD8, 0x8E, 0xD0, 0xBC, 0x00, 0x20, 0xFB, 0xA0, + 0x64, 0x7C, 0x3C, 0xFF, 0x74, 0x02, 0x88, 0xC2, 0x52, 0xBE, 0x80, 0x7D, + 0xE8, 0x17, 0x01, 0xBE, 0x05, 0x7C, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xCD, + 0x13, 0x5A, 0x52, 0x72, 0x3D, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x37, 0x83, + 0xE1, 0x01, 0x74, 0x32, 0x31, 0xC0, 0x89, 0x44, 0x04, 0x40, 0x88, 0x44, + 0xFF, 0x89, 0x44, 0x02, 0xC7, 0x04, 0x10, 0x00, 0x66, 0x8B, 0x1E, 0x5C, + 0x7C, 0x66, 0x89, 0x5C, 0x08, 0x66, 0x8B, 0x1E, 0x60, 0x7C, 0x66, 0x89, + 0x5C, 0x0C, 0xC7, 0x44, 0x06, 0x00, 0x70, 0xB4, 0x42, 0xCD, 0x13, 0x72, + 0x05, 0xBB, 0x00, 0x70, 0xEB, 0x76, 0xB4, 0x08, 0xCD, 0x13, 0x73, 0x0D, + 0x5A, 0x84, 0xD2, 0x0F, 0x83, 0xD8, 0x00, 0xBE, 0x8B, 0x7D, 0xE9, 0x82, + 0x00, 0x66, 0x0F, 0xB6, 0xC6, 0x88, 0x64, 0xFF, 0x40, 0x66, 0x89, 0x44, + 0x04, 0x0F, 0xB6, 0xD1, 0xC1, 0xE2, 0x02, 0x88, 0xE8, 0x88, 0xF4, 0x40, + 0x89, 0x44, 0x08, 0x0F, 0xB6, 0xC2, 0xC0, 0xE8, 0x02, 0x66, 0x89, 0x04, + 0x66, 0xA1, 0x60, 0x7C, 0x66, 0x09, 0xC0, 0x75, 0x4E, 0x66, 0xA1, 0x5C, + 0x7C, 0x66, 0x31, 0xD2, 0x66, 0xF7, 0x34, 0x88, 0xD1, 0x31, 0xD2, 0x66, + 0xF7, 0x74, 0x04, 0x3B, 0x44, 0x08, 0x7D, 0x37, 0xFE, 0xC1, 0x88, 0xC5, + 0x30, 0xC0, 0xC1, 0xE8, 0x02, 0x08, 0xC1, 0x88, 0xD0, 0x5A, 0x88, 0xC6, + 0xBB, 0x00, 0x70, 0x8E, 0xC3, 0x31, 0xDB, 0xB8, 0x01, 0x02, 0xCD, 0x13, + 0x72, 0x1E, 0x8C, 0xC3, 0x60, 0x1E, 0xB9, 0x00, 0x01, 0x8E, 0xDB, 0x31, + 0xF6, 0xBF, 0x00, 0x80, 0x8E, 0xC6, 0xFC, 0xF3, 0xA5, 0x1F, 0x61, 0xFF, + 0x26, 0x5A, 0x7C, 0xBE, 0x86, 0x7D, 0xEB, 0x03, 0xBE, 0x95, 0x7D, 0xE8, + 0x34, 0x00, 0xBE, 0x9A, 0x7D, 0xE8, 0x2E, 0x00, 0xCD, 0x18, 0xEB, 0xFE, + 0x47, 0x52, 0x55, 0x42, 0x20, 0x00, 0x47, 0x65, 0x6F, 0x6D, 0x00, 0x48, + 0x61, 0x72, 0x64, 0x20, 0x44, 0x69, 0x73, 0x6B, 0x00, 0x52, 0x65, 0x61, + 0x64, 0x00, 0x20, 0x45, 0x72, 0x72, 0x6F, 0x72, 0x0D, 0x0A, 0x00, 0xBB, + 0x01, 0x00, 0xB4, 0x0E, 0xCD, 0x10, 0xAC, 0x3C, 0x00, 0x75, 0xF4, 0xC3 +}; diff --git a/src/msapi_utf8.h b/src/msapi_utf8.h index 091a4f35..04acb4e7 100644 --- a/src/msapi_utf8.h +++ b/src/msapi_utf8.h @@ -339,6 +339,20 @@ static __inline HANDLE CreateFileU(const char* lpFileName, DWORD dwDesiredAccess return ret; } +static __inline BOOL CopyFileU(const char* lpExistingFileName, const char* lpNewFileName, BOOL bFailIfExists) +{ + BOOL ret = FALSE; + DWORD err = ERROR_INVALID_DATA; + wconvert(lpExistingFileName); + wconvert(lpNewFileName); + ret = CopyFileW(wlpExistingFileName, wlpNewFileName, bFailIfExists); + err = GetLastError(); + wfree(lpExistingFileName); + wfree(lpNewFileName); + SetLastError(err); + return ret; +} + static __inline BOOL DeleteFileU(const char* lpFileName) { BOOL ret = FALSE; diff --git a/src/rufus.c b/src/rufus.c index 7fbccd54..2a79d3ff 100644 --- a/src/rufus.c +++ b/src/rufus.c @@ -916,12 +916,44 @@ BOOL CALLBACK ISOProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) return FALSE; } +// Report the features of the selected ISO images +static const char* YesNo(BOOL b) { + return (b) ? "Yes" : "No"; +} +static void DisplayISOProps(void) +{ + int i; + char isolinux_str[16] = "No"; + + if (HAS_SYSLINUX(iso_report)) { + safe_sprintf(isolinux_str, sizeof(isolinux_str), "Yes (%s)", iso_report.sl_version_str); + } + + // TODO: Only report features that are present + uprintf("ISO label: %s", iso_report.label); + uprintf(" Size: %lld bytes", iso_report.projected_size); + uprintf(" Has a >64 chars filename: %s", YesNo(iso_report.has_long_filename)); + uprintf(" Has Symlinks: %s", YesNo(iso_report.has_symlinks)); + uprintf(" Has a >4GB file: %s", YesNo(iso_report.has_4GB_file)); + uprintf(" Uses Bootmgr: %s", YesNo(iso_report.has_bootmgr)); + uprintf(" Uses EFI: %s%s", YesNo(iso_report.has_efi || iso_report.has_win7_efi), (iso_report.has_win7_efi && (!iso_report.has_efi)) ? " (win7_x64)" : ""); + uprintf(" Uses Grub4DOS: %s", YesNo(iso_report.has_grub4dos)); + uprintf(" Uses isolinux: %s", isolinux_str); + if (HAS_SYSLINUX(iso_report) && (SL_MAJOR(iso_report.sl_version) < 5)) { + for (i = 0; i use a thread DWORD WINAPI ISOScanThread(LPVOID param) { int i; BOOL r; - char isolinux_str[16] = "No"; if (image_path == NULL) goto out; @@ -941,24 +973,10 @@ DWORD WINAPI ISOScanThread(LPVOID param) uprintf("Using bootable %s image: '%s'", iso_report.is_vhd?"VHD":"disk", image_path); selection_default = DT_IMG; } else { - if (HAS_SYSLINUX(iso_report)) { - safe_sprintf(isolinux_str, sizeof(isolinux_str), "Yes (%s)", iso_report.sl_version_str); - } - // TODO: This should become a DisplayISOProps() call or something - uprintf("ISO label: '%s'\r\n Size: %lld bytes\r\n Has a >64 chars filename: %s\r\n Has Symlinks: %s\r\n Has a >4GB file: %s\r\n" - " Uses ReactOS: %s\r\n Uses KolibriOS: %s\r\n Uses EFI: %s%s\r\n Uses Bootmgr: %s\r\n Uses WinPE: %s%s\r\n Uses isolinux: %s\r\n", - iso_report.label, iso_report.projected_size, iso_report.has_long_filename?"Yes":"No", iso_report.has_symlinks?"Yes":"No", - iso_report.has_4GB_file?"Yes":"No", IS_REACTOS(iso_report)?"Yes":"No", iso_report.has_kolibrios?"Yes":"No", (iso_report.has_efi || iso_report.has_win7_efi)?"Yes":"No", - (iso_report.has_win7_efi && (!iso_report.has_efi))?" (win7_x64)":"", iso_report.has_bootmgr?"Yes":"No", - IS_WINPE(iso_report.winpe)?"Yes":"No", (iso_report.uses_minint)?" (with /minint)":"", isolinux_str); - if (HAS_SYSLINUX(iso_report) && (SL_MAJOR(iso_report.sl_version) < 5)) { - for (i=0; i= DT_SYSLINUX_V4)) { selection_default = DT_FREEDOS; diff --git a/src/rufus.h b/src/rufus.h index 7d8ebc64..0fc2a11a 100644 --- a/src/rufus.h +++ b/src/rufus.h @@ -187,6 +187,8 @@ enum dos_type { DT_SYSLINUX_V4, // Start of indexes that only display in advanced mode DT_SYSLINUX_V6, DT_REACTOS, + DT_GRUB4DOS, + DT_GRUB2, DT_MAX }; @@ -248,6 +250,7 @@ typedef struct { BOOL has_old_c32[NB_OLD_C32]; BOOL has_old_vesamenu; BOOL has_efi_syslinux; + BOOL has_grub4dos; BOOL has_kolibrios; BOOL uses_minint; BOOL is_bootable_img; diff --git a/src/rufus.rc b/src/rufus.rc index c43afac9..2092fa00 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG DIALOGEX 12, 12, 227, 329 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Rufus 1.5.0.541" +CAPTION "Rufus 1.5.0.542" FONT 8, "Segoe UI", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Start",IDC_START,113,291,50,14 @@ -164,7 +164,7 @@ END IDD_DIALOG_XP DIALOGEX 12, 12, 227, 329 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Rufus 1.5.0.541" +CAPTION "Rufus 1.5.0.542" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Start",IDC_START,113,291,50,14 @@ -297,7 +297,7 @@ END IDD_DIALOG_RTL DIALOGEX 12, 12, 227, 329 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL -CAPTION "Rufus 1.5.0.541" +CAPTION "Rufus 1.5.0.542" FONT 8, "Segoe UI", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Start",IDC_START,113,291,50,14 @@ -437,7 +437,7 @@ END IDD_DIALOG_RTL_XP DIALOGEX 12, 12, 227, 329 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL -CAPTION "Rufus 1.5.0.541" +CAPTION "Rufus 1.5.0.542" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Start",IDC_START,113,291,50,14 @@ -699,8 +699,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,5,0,541 - PRODUCTVERSION 1,5,0,541 + FILEVERSION 1,5,0,542 + PRODUCTVERSION 1,5,0,542 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -717,13 +717,13 @@ BEGIN BEGIN VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "1.5.0.541" + VALUE "FileVersion", "1.5.0.542" VALUE "InternalName", "Rufus" VALUE "LegalCopyright", " 2011-2014 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" VALUE "OriginalFilename", "rufus.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "1.5.0.541" + VALUE "ProductVersion", "1.5.0.542" END END BLOCK "VarFileInfo"