From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1E2ewY-0002FE-Sj for mharc-grub-devel@gnu.org; Tue, 09 Aug 2005 20:59:43 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1E2ewU-0002Dx-Rz for grub-devel@gnu.org; Tue, 09 Aug 2005 20:59:39 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1E2euz-0001dH-95 for grub-devel@gnu.org; Tue, 09 Aug 2005 20:58:24 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1E2euz-0001ZD-0P for grub-devel@gnu.org; Tue, 09 Aug 2005 20:58:05 -0400 Received: from [208.186.28.7] (helo=mail.nebonet.com) by monty-python.gnu.org with esmtp (Exim 4.34) id 1E2et4-0001gq-A7 for grub-devel@gnu.org; Tue, 09 Aug 2005 20:56:07 -0400 Received: from localhost (scanner.nebonet.com [208.186.28.8]) by mail.nebonet.com (Postfix) with ESMTP id AEBCD19D916 for ; Tue, 9 Aug 2005 18:38:19 -0600 (MDT) Received: from mail.nebonet.com ([208.186.28.7]) by localhost (scanner [208.186.28.8]) (amavisd-new, port 10024) with LMTP id 02925-01-7 for ; Tue, 9 Aug 2005 18:41:32 -0600 (MDT) Received: from [127.0.0.1] (f4s.dsl.xmission.com [166.70.40.38]) by mail.nebonet.com (Postfix) with ESMTP id 2E58319DC39 for ; Tue, 9 Aug 2005 18:38:15 -0600 (MDT) Message-ID: <42F94D30.7030204@omniflux.com> Date: Tue, 09 Aug 2005 18:41:20 -0600 From: Omniflux User-Agent: Mozilla Thunderbird 1.0 (Windows/20041206) X-Accept-Language: en-us, en MIME-Version: 1.0 To: The development of GRUB 2 References: <4219D62D.3000109@omniflux.com> <200503022233.18661.okuji@enbug.org> In-Reply-To: <200503022233.18661.okuji@enbug.org> Content-Type: multipart/mixed; boundary="------------030900040402010608060806" X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at nebonet.com Subject: Re: x86 serial support X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Aug 2005 00:59:39 -0000 This is a multi-part message in MIME format. --------------030900040402010608060806 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit It's been a few months, but here are some updated patches. The terminfo patch probably needs to be applied first. Yoshinori K. Okuji wrote: > - Naming issues. Since you copied the code from GRUB Legacy, some names > are not appropriate in GRUB 2. For example, the global function > declared in terminfo.h do not use the prefix 'grub_' at all. I think I have fixed these all correctly... > - Module separation. I think it would be better to have a separate > module for terminfo, because we might be able to use it for other > terminals as well as serial console, say, parallel console. Done. > - ChangeLog. Please write ChangeLog entries for your changes. Attached. > BTW, do you have any suggestion about the so-called "dumb terminal"? > Because supporting dumb terminal is horrible, I hesitate to support it > in GRUB 2, if there is no clean way to do it. The only thing I can think of is to disable the menu and replace clear screen with a newline, which is what Legacy does IIRC. I need some input on how to complete the function grub_terminfo_set_current in term/terminfo.c. Feedback on anything else would also be appreciated. Thanks! -- Omniflux --------------030900040402010608060806 Content-Type: text/plain; name="grub2.terminfo.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="grub2.terminfo.diff" ZGlmZiAtdU5yIGdydWIyL2NvbmYvaTM4Ni1wYy5ybWsgZ3J1YjIudGVybWluZm8vY29uZi9p Mzg2LXBjLnJtawotLS0gZ3J1YjIvY29uZi9pMzg2LXBjLnJtawkyMDA1LTA4LTA5IDA4OjM5 OjUwLjAwMDAwMDAwMCAtMDYwMAorKysgZ3J1YjIudGVybWluZm8vY29uZi9pMzg2LXBjLnJt awkyMDA1LTA4LTA5IDE3OjQ2OjQ1LjAwMDAwMDAwMCAtMDYwMApAQCAtMTEwLDcgKzExMCw3 IEBACiAJZm9udC5tb2QgX211bHRpYm9vdC5tb2QgbHMubW9kIGJvb3QubW9kIGNtcC5tb2Qg Y2F0Lm1vZAkJXAogCXRlcm1pbmFsLm1vZCBmc2hlbHAubW9kIGNoYWluLm1vZCBtdWx0aWJv b3QubW9kIGFtaWdhLm1vZAlcCiAJYXBwbGUubW9kIHBjLm1vZCBzdW4ubW9kIGxvb3BiYWNr Lm1vZCByZWJvb3QubW9kIGhhbHQubW9kCVwKLQloZWxwLm1vZCBkZWZhdWx0Lm1vZCB0aW1l b3V0Lm1vZCBjb25maWdmaWxlLm1vZAorCWhlbHAubW9kIGRlZmF1bHQubW9kIHRpbWVvdXQu bW9kIGNvbmZpZ2ZpbGUubW9kIHRlcm1pbmZvLm1vZAogCiAjIEZvciBfY2hhaW4ubW9kLgog X2NoYWluX21vZF9TT1VSQ0VTID0gbG9hZGVyL2kzODYvcGMvY2hhaW5sb2FkZXIuYwpAQCAt MjExLDYgKzIxMSwxMCBAQAogZm9udF9tb2RfU09VUkNFUyA9IGZvbnQvbWFuYWdlci5jCiBm b250X21vZF9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCiAKKyMgRm9yIHRlcm1pbmZvLm1v ZC4KK3Rlcm1pbmZvX21vZF9TT1VSQ0VTID0gdGVybS90ZXJtaW5mby5jIHRlcm0vdHBhcm0u YwordGVybWluZm9fbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKKwogIyBGb3IgX211 bHRpYm9vdC5tb2QuCiBfbXVsdGlib290X21vZF9TT1VSQ0VTID0gbG9hZGVyL2kzODYvcGMv bXVsdGlib290LmMKIF9tdWx0aWJvb3RfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykK ZGlmZiAtdU5yIGdydWIyL2luY2x1ZGUvZ3J1Yi90ZXJtaW5mby5oIGdydWIyLnRlcm1pbmZv L2luY2x1ZGUvZ3J1Yi90ZXJtaW5mby5oCi0tLSBncnViMi9pbmNsdWRlL2dydWIvdGVybWlu Zm8uaAkxOTY5LTEyLTMxIDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgZ3J1YjIudGVy bWluZm8vaW5jbHVkZS9ncnViL3Rlcm1pbmZvLmgJMjAwNS0wOC0wOSAxNzo0Njo0NS4wMDAw MDAwMDAgLTA2MDAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBHUlVCICAtLSAgR1JhbmQg VW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLDIwMDMsMjAwNSAg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggR1JVQjsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3 NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYg R1JVQl9URVJNSU5GT19IRUFERVIKKyNkZWZpbmUgR1JVQl9URVJNSU5GT19IRUFERVIJMQor CisjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4KKyNpbmNsdWRlIDxncnViL3N5bWJvbC5oPgorI2lu Y2x1ZGUgPGdydWIvdHlwZXMuaD4KKwordHlwZWRlZiBzdHJ1Y3QgdGVybWluZm8KK3sKKyAg Y2hhciAqbmFtZTsKKworICBjaGFyICpnb3RveHk7CisgIGNoYXIgKmNsczsKKyAgY2hhciAq cmV2ZXJzZV92aWRlb19vbjsKKyAgY2hhciAqcmV2ZXJzZV92aWRlb19vZmY7CisgIGNoYXIg KmN1cnNvcl9vbjsKKyAgY2hhciAqY3Vyc29yX29mZjsKK30gdGVybWluZm87CisKK2NoYXIg KiBFWFBPUlRfRlVOQyhncnViX3Rlcm1pbmZvX2dldF9jdXJyZW50KSAodm9pZCk7CitncnVi X2Vycl90IEVYUE9SVF9GVU5DKGdydWJfdGVybWluZm9fc2V0X2N1cnJlbnQpIChjb25zdCBj aGFyICopOworCit2b2lkIEVYUE9SVF9GVU5DKGdydWJfdGVybWluZm9fZ290b3h5KSAoY29u c3QgZ3J1Yl91aW50OF90IHgsIGNvbnN0IGdydWJfdWludDhfdCB5KTsKK3ZvaWQgRVhQT1JU X0ZVTkMoZ3J1Yl90ZXJtaW5mb19jbHMpICh2b2lkKTsKK3ZvaWQgRVhQT1JUX0ZVTkMoZ3J1 Yl90ZXJtaW5mb19yZXZlcnNlX3ZpZGVvX29uKSAodm9pZCk7Cit2b2lkIEVYUE9SVF9GVU5D KGdydWJfdGVybWluZm9fcmV2ZXJzZV92aWRlb19vZmYpICh2b2lkKTsKK3ZvaWQgRVhQT1JU X0ZVTkMoZ3J1Yl90ZXJtaW5mb19jdXJzb3Jfb24pICh2b2lkKTsKK3ZvaWQgRVhQT1JUX0ZV TkMoZ3J1Yl90ZXJtaW5mb19jdXJzb3Jfb2ZmKSAodm9pZCk7CisKKyNlbmRpZiAvKiAhIEdS VUJfVEVSTUlORk9fSEVBREVSICovCmRpZmYgLXVOciBncnViMi9pbmNsdWRlL2dydWIvdHBh cm0uaCBncnViMi50ZXJtaW5mby9pbmNsdWRlL2dydWIvdHBhcm0uaAotLS0gZ3J1YjIvaW5j bHVkZS9ncnViL3RwYXJtLmgJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAK KysrIGdydWIyLnRlcm1pbmZvL2luY2x1ZGUvZ3J1Yi90cGFybS5oCTIwMDUtMDgtMDkgMTc6 NDY6NDUuMDAwMDAwMDAwIC0wNjAwCkBAIC0wLDAgKzEsMjggQEAKKy8qIHRwYXJtLmggLSBw YXJhbWV0ZXIgZm9ybWF0dGluZyBvZiB0ZXJtaW5mbyAqLworLyoKKyAqICBHUlVCICAtLSAg R1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLDIwMDUg IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91 bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0Eu CisgKi8KKworI2lmbmRlZiBHUlVCX1RQQVJNX0hFQURFUgorI2RlZmluZSBHUlVCX1RQQVJN X0hFQURFUgkxCisKKwwKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMuICAqLworY2hhciAqZ3J1 Yl90ZXJtaW5mb190cGFybSAoY29uc3QgY2hhciAqc3RyaW5nLCAuLi4pOworCisjZW5kaWYg LyogISBHUlVCX1RQQVJNX0hFQURFUiAqLwpkaWZmIC11TnIgZ3J1YjIvdGVybS90ZXJtaW5m by5jIGdydWIyLnRlcm1pbmZvL3Rlcm0vdGVybWluZm8uYwotLS0gZ3J1YjIvdGVybS90ZXJt aW5mby5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBncnViMi50 ZXJtaW5mby90ZXJtL3Rlcm1pbmZvLmMJMjAwNS0wOC0wOSAxNzo0Njo0NS4wMDAwMDAwMDAg LTA2MDAKQEAgLTAsMCArMSwxNTcgQEAKKy8qIHRlcm1pbmZvLmMgLSBzaW1wbGUgdGVybWlu Zm8gbW9kdWxlICovCisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2Fk ZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsMjAwNCwyMDA1ICBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3 NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qCisgKiBU aGlzIGZpbGUgY29udGFpbnMgdmFyaW91cyBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIGRpZmZl cmVudAorICogdGVybWluYWwgY2FwYWJpbGl0aWVzLiBGb3IgZXhhbXBsZSwgdnQ1MiBhbmQg dnQxMDAuCisgKi8KKworI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KKyNpbmNsdWRlIDxncnVi L21pc2MuaD4KKyNpbmNsdWRlIDxncnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4K KyNpbmNsdWRlIDxncnViL2RsLmg+CisjaW5jbHVkZSA8Z3J1Yi9ub3JtYWwuaD4KKyNpbmNs dWRlIDxncnViL3Rlcm0uaD4KKyNpbmNsdWRlIDxncnViL3Rlcm1pbmZvLmg+CisjaW5jbHVk ZSA8Z3J1Yi90cGFybS5oPgorCitzdGF0aWMgc3RydWN0IHRlcm1pbmZvIHRlcm07CisKKy8q IEdldCBjdXJyZW50IHRlcm1pbmZvIG5hbWUuICAqLworaW5saW5lIGNoYXIgKgorZ3J1Yl90 ZXJtaW5mb19nZXRfY3VycmVudCAodm9pZCkKK3sKKyAgcmV0dXJuIHRlcm0ubmFtZTsKK30K KworLyogU2V0IGN1cnJlbnQgdGVybWluZm8gdHlwZS4gICovCitncnViX2Vycl90CitncnVi X3Rlcm1pbmZvX3NldF9jdXJyZW50IChjb25zdCBjaGFyICpzdHIpCit7CisgIC8qIFRPRE8K KyAgICogTG9va3VwIHVzZXIgc3BlY2lmaWVkIHRlcm1pbmZvIHR5cGUuIElmIGZvdW5kLCBz ZXQgdGVybSB2YXJpYWJsZXMKKyAgICogYXMgYXBwcm9wcmlhdGUuIE90aGVyd2lzZSByZXR1 cm4gYW4gZXJyb3IuCisgICAqCisgICAqIEhvdyBzaG91bGQgdGhpcyBiZSBkb25lPworICAg KiAgYS4gQSBzdGF0aWMgdGFibGUgaW5jbHVkZWQgaW4gdGhpcyBtb2R1bGUuCisgICAqICAg ICAtIEkgZG8gbm90IGxpa2UgdGhpcyBpZGVhLgorICAgKiAgYi4gQSB0YWJsZSBzdG9yZWQg aW4gdGhlIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LgorICAgKiAgICAgLSBVc2VycyBtdXN0 IGNvbnZlcnQgdGhlaXIgdGVybWluZm8gc2V0dGluZ3MgaWYgd2UgaGF2ZSBub3QgYWxyZWFk eS4KKyAgICogIGMuIExvb2sgZm9yIHRlcm1pbmZvIGZpbGVzIGluIHRoZSBjb25maWd1cmF0 aW9uIGRpcmVjdG9yeS4KKyAgICogICAgIC0gL3Vzci9zaGFyZS90ZXJtaW5mbyBpcyA2LjNN IG9uIG15IHN5c3RlbS4KKyAgICogICAgIC0gL3Vzci9zaGFyZS90ZXJtaW5mbyBpcyBub3Qg b24gbW9zdCB1c2VycyBib290IHBhcnRpdGlvbi4KKyAgICogICAgICsgQ29weWluZyB0aGUg dGVybWluZm8gZmlsZXMgeW91IHdhbnQgdG8gdXNlIHRvIHRoZSBncnViCisgICAqICAgICAg IGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IGlzIGVhc2llciB0aGVuIChiKS4KKyAgICogIGQu IFlvdXIgaWRlYSBoZXJlLgorICAgKi8KKworICBpZiAoZ3J1Yl9zdHJjbXAgKCJ2dDEwMCIs IHN0cikgPT0gMCkKKyAgICB7CisgICAgICB0ZXJtLm5hbWUgICAgICAgICAgICAgID0gZ3J1 Yl9zdHJkdXAgKCJ2dDEwMCIpOworICAgICAgdGVybS5nb3RveHkgICAgICAgICAgICA9IGdy dWJfc3RyZHVwICgiXGVbJWklcDElZDslcDIlZEgiKTsKKyAgICAgIHRlcm0uY2xzICAgICAg ICAgICAgICAgPSBncnViX3N0cmR1cCAoIlxlW0hcZVtKIik7CisgICAgICB0ZXJtLnJldmVy c2VfdmlkZW9fb24gID0gZ3J1Yl9zdHJkdXAgKCJcZVs3bSIpOworICAgICAgdGVybS5yZXZl cnNlX3ZpZGVvX29mZiA9IGdydWJfc3RyZHVwICgiXGVbbSIpOworICAgICAgdGVybS5jdXJz b3Jfb24gICAgICAgICA9IGdydWJfc3RyZHVwICgiXGVbPzI1bCIpOworICAgICAgdGVybS5j dXJzb3Jfb2ZmICAgICAgICA9IGdydWJfc3RyZHVwICgiXGVbPzI1aCIpOworICAgICAgcmV0 dXJuIEdSVUJfRVJSX05PTkU7CisgICAgfQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfQVJHVU1FTlQsICJ1bmtub3duIHRlcm1pbmZvIHR5cGUuIik7Cit9CisKKy8q IFdyYXBwZXIgZm9yIGdydWJfcHV0Y2hhciB0byB3cml0ZSBzdHJpbmdzLiAgKi8KK3N0YXRp YyB2b2lkIHB1dHN0ciAoY29uc3QgY2hhciAqc3RyKQoreworICB3aGlsZSAoKnN0cikKKyAg ICBncnViX3B1dGNoYXIgKCpzdHIrKyk7Cit9CisKKy8qIE1vdmUgdGhlIGN1cnNvciB0byB0 aGUgZ2l2ZW4gcG9zaXRpb24gc3RhcnRpbmcgd2l0aCAiMCIuICAqLwordm9pZAorZ3J1Yl90 ZXJtaW5mb19nb3RveHkgKGNvbnN0IGdydWJfdWludDhfdCB4LCBjb25zdCBncnViX3VpbnQ4 X3QgeSkKK3sKKyAgcHV0c3RyIChncnViX3Rlcm1pbmZvX3RwYXJtICh0ZXJtLmdvdG94eSwg eSwgeCkpOworfQorCisvKiBDbGVhciB0aGUgc2NyZWVuLiAgKi8KK3ZvaWQKK2dydWJfdGVy bWluZm9fY2xzICh2b2lkKQoreworICBwdXRzdHIgKGdydWJfdGVybWluZm9fdHBhcm0gKHRl cm0uY2xzKSk7Cit9CisKKy8qIFNldCByZXZlcnNlIHZpZGVvIG1vZGUgb24uICAqLwordm9p ZAorZ3J1Yl90ZXJtaW5mb19yZXZlcnNlX3ZpZGVvX29uICh2b2lkKQoreworICBwdXRzdHIg KGdydWJfdGVybWluZm9fdHBhcm0gKHRlcm0ucmV2ZXJzZV92aWRlb19vbikpOworfQorCisv KiBTZXQgcmV2ZXJzZSB2aWRlbyBtb2RlIG9mZi4gICovCit2b2lkCitncnViX3Rlcm1pbmZv X3JldmVyc2VfdmlkZW9fb2ZmICh2b2lkKQoreworICBwdXRzdHIgKGdydWJfdGVybWluZm9f dHBhcm0gKHRlcm0ucmV2ZXJzZV92aWRlb19vZmYpKTsKK30KKworLyogU2hvdyBjdXJzb3Iu ICAqLwordm9pZAorZ3J1Yl90ZXJtaW5mb19jdXJzb3Jfb24gKHZvaWQpCit7CisgIHB1dHN0 ciAoZ3J1Yl90ZXJtaW5mb190cGFybSAodGVybS5jdXJzb3Jfb24pKTsKK30KKworLyogSGlk ZSBjdXJzb3IuICAqLwordm9pZAorZ3J1Yl90ZXJtaW5mb19jdXJzb3Jfb2ZmICh2b2lkKQor eworICBwdXRzdHIgKGdydWJfdGVybWluZm9fdHBhcm0gKHRlcm0uY3Vyc29yX29mZikpOwor fQorCisvKiBHUlVCIENvbW1hbmQuICAqLworCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9j bWRfdGVybWluZm8gKHN0cnVjdCBncnViX2FyZ19saXN0ICpzdGF0ZSBfX2F0dHJpYnV0ZV9f ICgodW51c2VkKSksCisJCWludCBhcmdjLCBjaGFyICoqYXJncykKK3sKKyAgaWYgKGFyZ2Mg PT0gMCkKKyAgeworICAgIGdydWJfcHJpbnRmICgiQ3VycmVudCB0ZXJtaW5mbyB0eXBlOiAl c1xuIiwgZ3J1Yl90ZXJtaW5mb19nZXRfY3VycmVudCgpKTsKKyAgICByZXR1cm4gR1JVQl9F UlJfTk9ORTsKKyAgfQorICBlbHNlIGlmIChhcmdjICE9IDEpCisgICAgcmV0dXJuIGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgInRvbyBtYW55IHBhcmFtZXRlcnMuIik7 CisgIGVsc2UKKyAgICByZXR1cm4gZ3J1Yl90ZXJtaW5mb19zZXRfY3VycmVudCAoYXJnc1sw XSk7Cit9CisKK0dSVUJfTU9EX0lOSVQKK3sKKyAgKHZvaWQpbW9kOwkJCS8qIFRvIHN0b3Ag d2FybmluZy4gKi8KKyAgZ3J1Yl9yZWdpc3Rlcl9jb21tYW5kICgidGVybWluZm8iLCBncnVi X2NtZF90ZXJtaW5mbywgR1JVQl9DT01NQU5EX0ZMQUdfQk9USCwKKwkJCSAidGVybWluZm8g W1RFUk0uLi5dIiwgIlNldCB0ZXJtaW5mbyB0eXBlLiIsIDApOworICBncnViX3Rlcm1pbmZv X3NldF9jdXJyZW50ICgidnQxMDAiKTsKK30KKworR1JVQl9NT0RfRklOSQoreworICBncnVi X3VucmVnaXN0ZXJfY29tbWFuZCAoInRlcm1pbmZvIik7Cit9CmRpZmYgLXVOciBncnViMi90 ZXJtL3RwYXJtLmMgZ3J1YjIudGVybWluZm8vdGVybS90cGFybS5jCi0tLSBncnViMi90ZXJt L3RwYXJtLmMJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGdydWIy LnRlcm1pbmZvL3Rlcm0vdHBhcm0uYwkyMDA1LTA4LTA5IDE3OjQ2OjQ1LjAwMDAwMDAwMCAt MDYwMApAQCAtMCwwICsxLDc2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENv cHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4gICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUi KSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRp c3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAg ICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAg ICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgor ICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNI QU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBP UiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWlu ZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQg ICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90 aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRl YWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoK KyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAqIFRoaXMgY29kZSBpcyBhIG1vZGlmaWNhdGlvbiBvZiBs aWJfdHBhcm0uYyBmb3VuZCBpbiBuY3Vyc2VzLTUuMi4gVGhlCisgKiBtb2RpZmljYXRpb24g YXJlIGZvciB1c2UgaW4gZ3J1YiBieSByZXBsYWNpbmcgYWxsIGxpYmMgZnVuY3Rpb24gdGhy b3VnaAorICogc3BlY2lhbCBncnViIGZ1bmN0aW9ucy4gVGhpcyBhbHNvIG1lYW50IHRvIGRl bGV0ZSBhbGwgZHluYW1pYyBtZW1vcnkKKyAqIGFsbG9jYXRpb24gYW5kIHJlcGxhY2UgaXQg YnkgYSBudW1iZXIgb2YgZml4ZWQgYnVmZmVycy4KKyAqCisgKiBNb2RpZmljYXRpb25zIGJ5 IFRpbG1hbm4gQnViZWNrIDx0LmJ1YmVja0ByZWluZm9ybS5kZT4gMjAwMgorICoKKyAqIFJl c3luYyB3aXRoIG5jdXJzZXMtNS40IGJ5IE9tbmlmbHV4IDxvbW5pZmx1eCtkZXZlbEBvbW5p Zmx1eC5jb20+IDIwMDUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNv bS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4g UmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAg ICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5LCAxOTk2IG9uICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisKKy8qCisgKgl0cGFybS5jCisgKgorICovCisKKyNpbmNsdWRlIDxncnViL21pc2MuaD4K KyNpbmNsdWRlIDxncnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi90eXBlcy5oPgorI2luY2x1 ZGUgPGdydWIvdHBhcm0uaD4KKworLyoKKyAqIENvbW1vbi90cm91Ymxlc29tZSBjaGFyYWN0 ZXIgZGVmaW5pdGlvbnMKKyAqLwordHlwZWRlZiBjaGFyIGdydWJfYm9vbF90OworI2lmbmRl ZiBGQUxTRQorIyBkZWZpbmUgRkFMU0UgKDApCisjZW5kaWYKKyNpZm5kZWYgVFJVRQorIyBk ZWZpbmUgVFJVRSAoIUZBTFNFKQorI2VuZGlmCisKKyNkZWZpbmUgTlVNX1BBUk0gOQorI2Rl ZmluZSBOVU1fVkFSUyAyNgorI2RlZmluZSBTVEFDS1NJWkUgMjAKKyNkZWZpbmUgTUFYX0ZP Uk1BVF9MRU4gMjU2CisKKyNkZWZpbmUgbWF4KGEsYikgKChhKSA+IChiKSA/IChhKSA6IChi KSkKKyNkZWZpbmUgaXNkaWdpdChjKSAoKGMpID49ICcwJyAmJiAoYykgPD0gJzknKQorI2Rl ZmluZSBpc1VQUEVSKGMpICgoYykgPj0gJ0EnICYmIChjKSA8PSAnWicpCisjZGVmaW5lIGlz TE9XRVIoYykgKChjKSA+PSAnYScgJiYgKGMpIDw9ICd6JykKKworI2RlZmluZSBVQ2hhcihj KSAoKHVuc2lnbmVkIGNoYXIpKGMpKQorCisvL01PRFVMRV9JRCgiJElkOiB0cGFybS5jLHYg MS4xIDIwMDIvMTEvMjkgMjA6Mzk6MjQgb2t1amkgRXhwICQiKQorCisvKgorICoJY2hhciAq CisgKgl0cGFybShzdHJpbmcsIC4uLikKKyAqCisgKglTdWJzdGl0dXRlIHRoZSBnaXZlbiBw YXJhbWV0ZXJzIGludG8gdGhlIGdpdmVuIHN0cmluZyBieSB0aGUgZm9sbG93aW5nCisgKgly dWxlcyAodGFrZW4gZnJvbSB0ZXJtaW5mbyg1KSk6CisgKgorICoJICAgICBDdXJzb3IgYWRk cmVzc2luZyBhbmQgb3RoZXIgc3RyaW5ncyAgcmVxdWlyaW5nICBwYXJhbWUtCisgKgl0ZXJz IGluIHRoZSB0ZXJtaW5hbCBhcmUgZGVzY3JpYmVkIGJ5IGEgcGFyYW1ldGVyaXplZCBzdHJp bmcKKyAqCWNhcGFiaWxpdHksIHdpdGggbGlrZSBlc2NhcGVzICV4IGluICBpdC4gICBGb3Ig IGV4YW1wbGUsICB0bworICoJYWRkcmVzcyAgdGhlICBjdXJzb3IsIHRoZSBjdXAgY2FwYWJp bGl0eSBpcyBnaXZlbiwgdXNpbmcgdHdvCisgKglwYXJhbWV0ZXJzOiB0aGUgcm93IGFuZCBj b2x1bW4gdG8gIGFkZHJlc3MgIHRvLiAgIChSb3dzICBhbmQKKyAqCWNvbHVtbnMgIGFyZSAg bnVtYmVyZWQgIGZyb20gIHplcm8gYW5kIHJlZmVyIHRvIHRoZSBwaHlzaWNhbAorICoJc2Ny ZWVuIHZpc2libGUgdG8gdGhlIHVzZXIsIG5vdCB0byBhbnkgIHVuc2VlbiAgbWVtb3J5Likg IElmCisgKgl0aGUgdGVybWluYWwgaGFzIG1lbW9yeSByZWxhdGl2ZSBjdXJzb3IgYWRkcmVz c2luZywgdGhhdCBjYW4KKyAqCWJlIGluZGljYXRlZCBieQorICoKKyAqCSAgICAgVGhlIHBh cmFtZXRlciBtZWNoYW5pc20gdXNlcyAgYSAgc3RhY2sgIGFuZCAgc3BlY2lhbCAgJQorICoJ Y29kZXMgIHRvIG1hbmlwdWxhdGUgaXQuICBUeXBpY2FsbHkgYSBzZXF1ZW5jZSB3aWxsIHB1 c2ggb25lCisgKglvZiB0aGUgcGFyYW1ldGVycyBvbnRvIHRoZSBzdGFjayBhbmQgdGhlbiBw cmludCBpdCAgaW4gIHNvbWUKKyAqCWZvcm1hdC4gIE9mdGVuIG1vcmUgY29tcGxleCBvcGVy YXRpb25zIGFyZSBuZWNlc3NhcnkuCisgKgorICoJICAgICBUaGUgJSBlbmNvZGluZ3MgaGF2 ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorICoKKyAqCSAgICAgJSUgICAgICAgIG91dHB1 dHMgYCUnCisgKgkgICAgICVjICAgICAgICBwcmludCBwb3AoKSBsaWtlICVjIGluIHByaW50 ZigpCisgKgkgICAgICVzICAgICAgICBwcmludCBwb3AoKSBsaWtlICVzIGluIHByaW50Zigp CisgKiAgICAgICAgICAgJVtbOl1mbGFnc11bd2lkdGhbLnByZWNpc2lvbl1dW2RveFhzXQor ICogICAgICAgICAgICAgICAgICAgICBhcyBpbiBwcmludGYsIGZsYWdzIGFyZSBbLSsjXSBh bmQgc3BhY2UKKyAqICAgICAgICAgICAgICAgICAgICAgVGhlICc6JyBpcyB1c2VkIHRvIGF2 b2lkIG1ha2luZyAlKyBvciAlLQorICogICAgICAgICAgICAgICAgICAgICBwYXR0ZXJucyAo c2VlIGJlbG93KS4KKyAqCisgKgkgICAgICVwWzEtOV0gICBwdXNoIGl0aCBwYXJtCisgKgkg ICAgICVQW2Etel0gICBzZXQgZHluYW1pYyB2YXJpYWJsZSBbYS16XSB0byBwb3AoKQorICoJ ICAgICAlZ1thLXpdICAgZ2V0IGR5bmFtaWMgdmFyaWFibGUgW2Etel0gYW5kIHB1c2ggaXQK KyAqCSAgICAgJVBbQS1aXSAgIHNldCBzdGF0aWMgdmFyaWFibGUgW0EtWl0gdG8gcG9wKCkK KyAqCSAgICAgJWdbQS1aXSAgIGdldCBzdGF0aWMgdmFyaWFibGUgW0EtWl0gYW5kIHB1c2gg aXQKKyAqCSAgICAgJWwgICAgICAgIHB1c2ggc3RybGVuKHBvcCkKKyAqCSAgICAgJSdjJyAg ICAgIHB1c2ggY2hhciBjb25zdGFudCBjCisgKgkgICAgICV7bm59ICAgICBwdXNoIGludGVn ZXIgY29uc3RhbnQgbm4KKyAqCisgKgkgICAgICUrICUtICUqICUvICVtCisgKgkgICAgICAg ICAgICAgICBhcml0aG1ldGljICglbSBpcyBtb2QpOiBwdXNoKHBvcCgpIG9wIHBvcCgpKQor ICoJICAgICAlJiAlfCAlXiAgYml0IG9wZXJhdGlvbnM6IHB1c2gocG9wKCkgb3AgcG9wKCkp CisgKgkgICAgICU9ICU+ICU8ICBsb2dpY2FsIG9wZXJhdGlvbnM6IHB1c2gocG9wKCkgb3Ag cG9wKCkpCisgKgkgICAgICVBICVPICAgICBsb2dpY2FsIGFuZCAmIG9yIG9wZXJhdGlvbnMg Zm9yIGNvbmRpdGlvbmFscworICoJICAgICAlISAlfiAgICAgdW5hcnkgb3BlcmF0aW9ucyBw dXNoKG9wIHBvcCgpKQorICoJICAgICAlaSAgICAgICAgYWRkIDEgdG8gZmlyc3QgdHdvIHBh cm1zIChmb3IgQU5TSSB0ZXJtaW5hbHMpCisgKgorICoJICAgICAlPyBleHByICV0IHRoZW5w YXJ0ICVlIGVsc2VwYXJ0ICU7CisgKgkgICAgICAgICAgICAgICBpZi10aGVuLWVsc2UsICVl IGVsc2VwYXJ0IGlzIG9wdGlvbmFsLgorICoJICAgICAgICAgICAgICAgZWxzZS1pZidzIGFy ZSBwb3NzaWJsZSBhbGEgQWxnb2wgNjg6CisgKgkgICAgICAgICAgICAgICAlPyBjMSAldCBi MSAlZSBjMiAldCBiMiAlZSBjMyAldCBiMyAlZSBjNCAldCBiNCAlZSBiNSAlOworICoKKyAq CUZvciB0aG9zZSBvZiB0aGUgYWJvdmUgb3BlcmF0b3JzIHdoaWNoIGFyZSBiaW5hcnkgYW5k IG5vdCBjb21tdXRhdGl2ZSwKKyAqCXRoZSBzdGFjayB3b3JrcyBpbiB0aGUgdXN1YWwgd2F5 LCB3aXRoCisgKgkJCSVneCAlZ3kgJW0KKyAqCXJlc3VsdGluZyBpbiB4IG1vZCB5LCBub3Qg dGhlIHJldmVyc2UuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuaW9uIHsKKwlp bnQgbnVtOworCWNoYXIgKnN0cjsKKyAgICB9IGRhdGE7CisgICAgZ3J1Yl9ib29sX3QgbnVt X3R5cGU7Cit9IHN0YWNrX2ZyYW1lOworCitzdGF0aWMgc3RhY2tfZnJhbWUgc3RhY2tbU1RB Q0tTSVpFXTsKK3N0YXRpYyBpbnQgc3RhY2tfcHRyOworc3RhdGljIGNvbnN0IGNoYXIgKnRw YXJhbV9iYXNlID0gIiI7CisKK3N0YXRpYyBjaGFyICpvdXRfYnVmZjsKK3N0YXRpYyBncnVi X3NpemVfdCBvdXRfc2l6ZTsKK3N0YXRpYyBncnViX3NpemVfdCBvdXRfdXNlZDsKKworc3Rh dGljIGNoYXIgKmZtdF9idWZmOworc3RhdGljIGdydWJfc2l6ZV90IGZtdF9zaXplOworCitz dGF0aWMgaW5saW5lIHZvaWQKK2dldF9zcGFjZShncnViX3NpemVfdCBuZWVkKQoreworICAg IG5lZWQgKz0gb3V0X3VzZWQ7CisgICAgaWYgKG5lZWQgPiBvdXRfc2l6ZSkgeworCW91dF9z aXplID0gbmVlZCAqIDI7CisJb3V0X2J1ZmYgPSBncnViX3JlYWxsb2Mob3V0X2J1ZmYsIG91 dF9zaXplKnNpemVvZihjaGFyKSk7CisJaWYgKG91dF9idWZmID09IDApCisJICAgIC8vIEZJ WCBNRSEgT09NLCB3aGF0IG5vdz8KKwkgICAgOworICAgIH0KK30KKworc3RhdGljIGlubGlu ZSB2b2lkCitzYXZlX3RleHQoY29uc3QgY2hhciAqZm10LCBjb25zdCBjaGFyICpzLCBpbnQg bGVuKQoreworICAgIGdydWJfc2l6ZV90IHNfbGVuID0gZ3J1Yl9zdHJsZW4ocyk7CisgICAg aWYgKGxlbiA+IChpbnQpIHNfbGVuKQorCXNfbGVuID0gbGVuOworCisgICAgZ2V0X3NwYWNl KHNfbGVuICsgMSk7CisKKyAgICAodm9pZCkgZ3J1Yl9zcHJpbnRmKG91dF9idWZmICsgb3V0 X3VzZWQsIGZtdCwgcyk7CisgICAgb3V0X3VzZWQgKz0gZ3J1Yl9zdHJsZW4ob3V0X2J1ZmYg KyBvdXRfdXNlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2F2ZV9udW1iZXIoY29u c3QgY2hhciAqZm10LCBpbnQgbnVtYmVyLCBpbnQgbGVuKQoreworICAgIGlmIChsZW4gPCAz MCkKKwlsZW4gPSAzMDsJCS8qIGFjdHVhbGx5IGxvZzEwKE1BWF9JTlQpKzEgKi8KKworICAg IGdldF9zcGFjZSgodW5zaWduZWQpIGxlbiArIDEpOworCisgICAgKHZvaWQpIGdydWJfc3By aW50ZihvdXRfYnVmZiArIG91dF91c2VkLCBmbXQsIG51bWJlcik7CisgICAgb3V0X3VzZWQg Kz0gZ3J1Yl9zdHJsZW4ob3V0X2J1ZmYgKyBvdXRfdXNlZCk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZAorc2F2ZV9jaGFyKGludCBjKQoreworICAgIGlmIChjID09IDApCisJYyA9IDAy MDA7CisgICAgZ2V0X3NwYWNlKDEpOworICAgIG91dF9idWZmW291dF91c2VkKytdID0gYzsK K30KKworc3RhdGljIGlubGluZSB2b2lkCitucHVzaChpbnQgeCkKK3sKKyAgICBpZiAoc3Rh Y2tfcHRyIDwgU1RBQ0tTSVpFKSB7CisJc3RhY2tbc3RhY2tfcHRyXS5udW1fdHlwZSA9IFRS VUU7CisJc3RhY2tbc3RhY2tfcHRyXS5kYXRhLm51bSA9IHg7CisJc3RhY2tfcHRyKys7Cisg ICAgfQorfQorCitzdGF0aWMgaW5saW5lIGludAorbnBvcCh2b2lkKQoreworICAgIGludCBy ZXN1bHQgPSAwOworICAgIGlmIChzdGFja19wdHIgPiAwKSB7CisJc3RhY2tfcHRyLS07CisJ aWYgKHN0YWNrW3N0YWNrX3B0cl0ubnVtX3R5cGUpCisJICAgIHJlc3VsdCA9IHN0YWNrW3N0 YWNrX3B0cl0uZGF0YS5udW07CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZAorc3B1c2goY2hhciAqeCkKK3sKKyAgICBpZiAoc3RhY2tfcHRy IDwgU1RBQ0tTSVpFKSB7CisJc3RhY2tbc3RhY2tfcHRyXS5udW1fdHlwZSA9IEZBTFNFOwor CXN0YWNrW3N0YWNrX3B0cl0uZGF0YS5zdHIgPSB4OworCXN0YWNrX3B0cisrOworICAgIH0K K30KKworc3RhdGljIGlubGluZSBjaGFyICoKK3Nwb3Aodm9pZCkKK3sKKyAgICBzdGF0aWMg Y2hhciBkdW1teVtdID0gIiI7CS8qIGF2b2lkIGNvbnN0LWNhc3QgKi8KKyAgICBjaGFyICpy ZXN1bHQgPSBkdW1teTsKKyAgICBpZiAoc3RhY2tfcHRyID4gMCkgeworCXN0YWNrX3B0ci0t OworCWlmICghc3RhY2tbc3RhY2tfcHRyXS5udW1fdHlwZSAmJiBzdGFja1tzdGFja19wdHJd LmRhdGEuc3RyICE9IDApCisJICAgIHJlc3VsdCA9IHN0YWNrW3N0YWNrX3B0cl0uZGF0YS5z dHI7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29u c3QgY2hhciAqCitwYXJzZV9mb3JtYXQoY29uc3QgY2hhciAqcywgY2hhciAqZm9ybWF0LCBp bnQgKmxlbikKK3sKKyAgICAqbGVuID0gMDsKKyAgICBpZiAoZm9ybWF0ICE9IDApIHsKKwln cnViX2Jvb2xfdCBkb25lID0gRkFMU0U7CisJZ3J1Yl9ib29sX3QgYWxsb3dtaW51cyA9IEZB TFNFOworCWdydWJfYm9vbF90IGRvdCA9IEZBTFNFOworCWdydWJfYm9vbF90IGVyciA9IEZB TFNFOworCWNoYXIgKmZtdCA9IGZvcm1hdDsKKwlpbnQgbXlfd2lkdGggPSAwOworCWludCBt eV9wcmVjID0gMDsKKwlpbnQgdmFsdWUgPSAwOworCisJKmxlbiA9IDA7CisJKmZvcm1hdCsr ID0gJyUnOworCXdoaWxlICgqcyAhPSAnXDAnICYmICFkb25lKSB7CisJICAgIHN3aXRjaCAo KnMpIHsKKwkgICAgY2FzZSAnYyc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICdkJzoJ CS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgJ28nOgkJLyogRkFMTFRIUlUgKi8KKwkgICAg Y2FzZSAneCc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICdYJzoJCS8qIEZBTExUSFJV ICovCisJICAgIGNhc2UgJ3MnOgorCQkqZm9ybWF0KysgPSAqczsKKwkJZG9uZSA9IFRSVUU7 CisJCWJyZWFrOworCSAgICBjYXNlICcuJzoKKwkJKmZvcm1hdCsrID0gKnMrKzsKKwkJaWYg KGRvdCkgeworCQkgICAgZXJyID0gVFJVRTsKKwkJfSBlbHNlIHsJLyogdmFsdWUgYmVmb3Jl ICcuJyBpcyB0aGUgd2lkdGggKi8KKwkJICAgIGRvdCA9IFRSVUU7CisJCSAgICBteV93aWR0 aCA9IHZhbHVlOworCQl9CisJCXZhbHVlID0gMDsKKwkJYnJlYWs7CisJICAgIGNhc2UgJyMn OgorCQkqZm9ybWF0KysgPSAqcysrOworCQlicmVhazsKKwkgICAgY2FzZSAnICc6CisJCSpm b3JtYXQrKyA9ICpzKys7CisJCWJyZWFrOworCSAgICBjYXNlICc6JzoKKwkJcysrOworCQlh bGxvd21pbnVzID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJy0nOgorCQlpZiAoYWxs b3dtaW51cykgeworCQkgICAgKmZvcm1hdCsrID0gKnMrKzsKKwkJfSBlbHNlIHsKKwkJICAg IGRvbmUgPSBUUlVFOworCQl9CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlpZiAoaXNk aWdpdChVQ2hhcigqcykpKSB7CisJCSAgICB2YWx1ZSA9ICh2YWx1ZSAqIDEwKSArICgqcyAt ICcwJyk7CisJCSAgICBpZiAodmFsdWUgPiAxMDAwMCkKKwkJCWVyciA9IFRSVUU7CisJCSAg ICAqZm9ybWF0KysgPSAqcysrOworCQl9IGVsc2UgeworCQkgICAgZG9uZSA9IFRSVUU7CisJ CX0KKwkgICAgfQorCX0KKworCS8qCisJICogSWYgd2UgZm91bmQgYW4gZXJyb3IsIGlnbm9y ZSAoYW5kIHJlbW92ZSkgdGhlIGZsYWdzLgorCSAqLworCWlmIChlcnIpIHsKKwkgICAgbXlf d2lkdGggPSBteV9wcmVjID0gdmFsdWUgPSAwOworCSAgICBmb3JtYXQgPSBmbXQ7CisJICAg ICpmb3JtYXQrKyA9ICclJzsKKwkgICAgKmZvcm1hdCsrID0gKnM7CisJfQorCisJLyoKKwkg KiBBbnkgdmFsdWUgYWZ0ZXIgJy4nIGlzIHRoZSBwcmVjaXNpb24uICBJZiB3ZSBkaWQgbm90 IHNlZSAnLicsIHRoZW4KKwkgKiB0aGUgdmFsdWUgaXMgdGhlIHdpZHRoLgorCSAqLworCWlm IChkb3QpCisJICAgIG15X3ByZWMgPSB2YWx1ZTsKKwllbHNlCisJICAgIG15X3dpZHRoID0g dmFsdWU7CisKKwkqZm9ybWF0ID0gJ1wwJzsKKwkvKiByZXR1cm4gbWF4aW11bSBzdHJpbmcg bGVuZ3RoIGluIHByaW50ICovCisJKmxlbiA9IChteV93aWR0aCA+IG15X3ByZWMpID8gbXlf d2lkdGggOiBteV9wcmVjOworICAgIH0KKyAgICByZXR1cm4gczsKK30KKworLyoKKyAqIEFu YWx5emUgdGhlIHN0cmluZyB0byBzZWUgaG93IG1hbnkgcGFyYW1ldGVycyB3ZSBuZWVkIGZy b20gdGhlIHZhcmFyZ3MgbGlzdCwKKyAqIGFuZCB3aGF0IHRoZWlyIHR5cGVzIGFyZS4gIFdl IHdpbGwgb25seSBhY2NlcHQgc3RyaW5nIHBhcmFtZXRlcnMgaWYgdGhleQorICogYXBwZWFy IGFzIGEgJWwgb3IgJXMgZm9ybWF0IGZvbGxvd2luZyBhbiBleHBsaWNpdCBwYXJhbWV0ZXIg cmVmZXJlbmNlIChlLmcuLAorICogJXAyJXMpLiAgQWxsIG90aGVyIHBhcmFtZXRlcnMgYXJl IG51bWJlcnMuCisgKgorICogJ251bWJlcicgY291bnRzIGNvYXJzZWx5IHRoZSBudW1iZXIg b2YgcG9wJ3Mgd2Ugc2VlIGluIHRoZSBzdHJpbmcsIGFuZAorICogJ3BvcGNvdW50JyBzaG93 cyB0aGUgaGlnaGVzdCBwYXJhbWV0ZXIgbnVtYmVyIGluIHRoZSBzdHJpbmcuICBXZSB3b3Vs ZCBsaWtlCisgKiB0byBzaW1wbHkgdXNlIHRoZSBsYXR0ZXIgY291bnQsIGJ1dCBpZiB3ZSBh cmUgcmVhZGluZyB0ZXJtY2FwIHN0cmluZ3MsIHRoZXJlCisgKiBtYXkgYmUgY2FzZXMgdGhh dCB3ZSBjYW5ub3Qgc2VlIHRoZSBleHBsaWNpdCBwYXJhbWV0ZXIgbnVtYmVycy4KKyAqLwor c3RhdGljIGlubGluZSBpbnQKK2FuYWx5emUoY29uc3QgY2hhciAqc3RyaW5nLCBjaGFyICpw X2lzX3NbTlVNX1BBUk1dLCBpbnQgKnBvcGNvdW50KQoreworICAgIGdydWJfc2l6ZV90IGxl bjI7CisgICAgaW50IGk7CisgICAgaW50IGxhc3Rwb3AgPSAtMTsKKyAgICBpbnQgbGVuOwor ICAgIGludCBudW1iZXIgPSAwOworICAgIGNvbnN0IGNoYXIgKmNwID0gc3RyaW5nOworICAg IHN0YXRpYyBjaGFyIGR1bW15W10gPSAiIjsKKworICAgIGlmIChjcCA9PSAwKQorCXJldHVy biAwOworCisgICAgaWYgKChsZW4yID0gZ3J1Yl9zdHJsZW4oY3ApKSA+IGZtdF9zaXplKSB7 CisJZm10X3NpemUgPSBsZW4yICsgZm10X3NpemUgKyAyOworCWlmICgoZm10X2J1ZmYgPSBn cnViX3JlYWxsb2MoZm10X2J1ZmYsIGZtdF9zaXplKnNpemVvZihjaGFyKSkpID09IDApCisJ ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgZ3J1Yl9tZW1zZXQocF9pc19zLCAwLCBz aXplb2YocF9pc19zWzBdKSAqIE5VTV9QQVJNKTsKKyAgICAqcG9wY291bnQgPSAwOworCisg ICAgd2hpbGUgKChjcCAtIHN0cmluZykgPCAoaW50KSBsZW4yKSB7CisJaWYgKCpjcCA9PSAn JScpIHsKKwkgICAgY3ArKzsKKwkgICAgY3AgPSBwYXJzZV9mb3JtYXQoY3AsIGZtdF9idWZm LCAmbGVuKTsKKwkgICAgc3dpdGNoICgqY3ApIHsKKwkgICAgZGVmYXVsdDoKKwkJYnJlYWs7 CisKKwkgICAgY2FzZSAnZCc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICdvJzoJCS8q IEZBTExUSFJVICovCisJICAgIGNhc2UgJ3gnOgkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2Fz ZSAnWCc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICdjJzoJCS8qIEZBTExUSFJVICov CisJCWlmIChsYXN0cG9wIDw9IDApCisJCSAgICBudW1iZXIrKzsKKwkJbGFzdHBvcCA9IC0x OworCQlicmVhazsKKworCSAgICBjYXNlICdsJzoKKwkgICAgY2FzZSAncyc6CisJCWlmIChs YXN0cG9wID4gMCkKKwkJICAgIHBfaXNfc1tsYXN0cG9wIC0gMV0gPSBkdW1teTsKKwkJKytu dW1iZXI7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ3AnOgorCQljcCsrOworCQlpID0gKFVD aGFyKCpjcCkgLSAnMCcpOworCQlpZiAoaSA+PSAwICYmIGkgPD0gTlVNX1BBUk0pIHsKKwkJ ICAgIGxhc3Rwb3AgPSBpOworCQkgICAgaWYgKGxhc3Rwb3AgPiAqcG9wY291bnQpCisJCQkq cG9wY291bnQgPSBsYXN0cG9wOworCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgJ1AnOgor CQkrK251bWJlcjsKKwkJKytjcDsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnZyc6CisJCWNw Kys7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ1wnJzoKKwkJY3AgKz0gMjsKKwkJbGFzdHBv cCA9IC0xOworCQlicmVhazsKKworCSAgICBjYXNlICd7JzoKKwkJY3ArKzsKKwkJd2hpbGUg KGlzZGlnaXQoVUNoYXIoKmNwKSkpIHsKKwkJICAgIGNwKys7CisJCX0KKwkJYnJlYWs7CisK KwkgICAgY2FzZSAnKyc6CisJICAgIGNhc2UgJy0nOgorCSAgICBjYXNlICcqJzoKKwkgICAg Y2FzZSAnLyc6CisJICAgIGNhc2UgJ20nOgorCSAgICBjYXNlICdBJzoKKwkgICAgY2FzZSAn Tyc6CisJICAgIGNhc2UgJyYnOgorCSAgICBjYXNlICd8JzoKKwkgICAgY2FzZSAnXic6CisJ ICAgIGNhc2UgJz0nOgorCSAgICBjYXNlICc8JzoKKwkgICAgY2FzZSAnPic6CisJCWxhc3Rw b3AgPSAtMTsKKwkJbnVtYmVyICs9IDI7CisJCWJyZWFrOworCisJICAgIGNhc2UgJyEnOgor CSAgICBjYXNlICd+JzoKKwkJbGFzdHBvcCA9IC0xOworCQkrK251bWJlcjsKKwkJYnJlYWs7 CisKKwkgICAgY2FzZSAnaSc6CisJCS8qIHdpbGwgYWRkIDEgdG8gZmlyc3QgKHVzdWFsbHkg dHdvKSBwYXJhbWV0ZXJzICovCisJCWJyZWFrOworCSAgICB9CisJfQorCWlmICgqY3AgIT0g J1wwJykKKwkgICAgY3ArKzsKKyAgICB9CisKKyAgICBpZiAobnVtYmVyID4gTlVNX1BBUk0p CisJbnVtYmVyID0gTlVNX1BBUk07CisgICAgcmV0dXJuIG51bWJlcjsKK30KKworc3RhdGlj IGlubGluZSBjaGFyICoKK3RwYXJhbV9pbnRlcm5hbChjb25zdCBjaGFyICpzdHJpbmcsIHZh X2xpc3QgYXApCit7CisgICAgY2hhciAqcF9pc19zW05VTV9QQVJNXTsKKyAgICBsb25nIHBh cmFtW05VTV9QQVJNXTsKKyAgICBpbnQgcG9wY291bnQ7CisgICAgaW50IG51bWJlcjsKKyAg ICBpbnQgbGVuOworICAgIGludCBsZXZlbDsKKyAgICBpbnQgeCwgeTsKKyAgICBpbnQgaTsK KyAgICBjb25zdCBjaGFyICpjcCA9IHN0cmluZzsKKyAgICBncnViX3NpemVfdCBsZW4yOwor ICAgIHN0YXRpYyBpbnQgZHluYW1pY192YXJbTlVNX1ZBUlNdOworICAgIHN0YXRpYyBpbnQg c3RhdGljX3ZhcnNbTlVNX1ZBUlNdOworCisgICAgaWYgKGNwID09IDApCisJcmV0dXJuIDA7 CisKKyAgICBvdXRfdXNlZCA9IG91dF9zaXplID0gZm10X3NpemUgPSAwOworCisgICAgbGVu MiA9IChpbnQpIGdydWJfc3RybGVuKGNwKTsKKworICAgIC8qCisgICAgICogRmluZCB0aGUg aGlnaGVzdCBwYXJhbWV0ZXItbnVtYmVyIHJlZmVycmVkIHRvIGluIHRoZSBmb3JtYXQgc3Ry aW5nLgorICAgICAqIFVzZSB0aGlzIHZhbHVlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgYXJn dW1lbnRzIGNvcGllZCBmcm9tIHRoZQorICAgICAqIHZhcmlhYmxlLWxlbmd0aCBhcmd1bWVu dCBsaXN0LgorICAgICAqLworICAgIG51bWJlciA9IGFuYWx5emUoY3AsIHBfaXNfcywgJnBv cGNvdW50KTsKKyAgICBpZiAoZm10X2J1ZmYgPT0gMCkKKwlyZXR1cm4gMDsKKworICAgIGZv ciAoaSA9IDA7IGkgPCBtYXgocG9wY291bnQsIG51bWJlcik7IGkrKykgeworCS8qCisJICog QSBmZXcgY2FwcyAoc3VjaCBhcyBwbGFiX25vcm0pIGhhdmUgc3RyaW5nLXZhbHVlZCBwYXJt cy4KKwkgKiBXZSdsbCBoYXZlIHRvIGFzc3VtZSB0aGF0IHRoZSBjYWxsZXIga25vd3MgdGhl IGRpZmZlcmVuY2UsIHNpbmNlCisJICogYSBjaGFyKiBhbmQgYW4gaW50IG1heSBub3QgYmUg dGhlIHNhbWUgc2l6ZSBvbiB0aGUgc3RhY2suCisJICovCisJaWYgKHBfaXNfc1tpXSAhPSAw KSB7CisJICAgIHBfaXNfc1tpXSA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwl9IGVsc2Ugewor CSAgICBwYXJhbVtpXSA9IHZhX2FyZyhhcCwgbG9uZyBpbnQpOworCX0KKyAgICB9CisKKyAg ICAvKgorICAgICAqIFRoaXMgaXMgYSB0ZXJtY2FwIGNvbXBhdGliaWxpdHkgaGFjay4gIElm IHRoZXJlIGFyZSBubyBleHBsaWNpdCBwb3AKKyAgICAgKiBvcGVyYXRpb25zIGluIHRoZSBz dHJpbmcsIGxvYWQgdGhlIHN0YWNrIGluIHN1Y2ggYSB3YXkgdGhhdAorICAgICAqIHN1Y2Nl c3NpdmUgcG9wcyB3aWxsIGdyYWIgc3VjY2Vzc2l2ZSBwYXJhbWV0ZXJzLiAgVGhhdCB3aWxs IG1ha2UKKyAgICAgKiB0aGUgZXhwYW5zaW9uIG9mIChmb3IgZXhhbXBsZSkgXEVbJWQ7JWRI IHdvcmsgY29ycmVjdGx5IGluIHRlcm1jYXAKKyAgICAgKiBzdHlsZSwgd2hpY2ggbWVhbnMg dHBhcmFtKCkgd2lsbCBleHBhbmQgdGVybWNhcCBzdHJpbmdzIE9LLgorICAgICAqLworICAg IHN0YWNrX3B0ciA9IDA7CisgICAgaWYgKHBvcGNvdW50ID09IDApIHsKKwlwb3Bjb3VudCA9 IG51bWJlcjsKKwlmb3IgKGkgPSBudW1iZXIgLSAxOyBpID49IDA7IGktLSkKKwkgICAgbnB1 c2gocGFyYW1baV0pOworICAgIH0KKworICAgIHdoaWxlICgoY3AgLSBzdHJpbmcpIDwgKGlu dCkgbGVuMikgeworCWlmICgqY3AgIT0gJyUnKSB7CisJICAgIHNhdmVfY2hhcihVQ2hhcigq Y3ApKTsKKwl9IGVsc2UgeworCSAgICB0cGFyYW1fYmFzZSA9IGNwKys7CisJICAgIGNwID0g cGFyc2VfZm9ybWF0KGNwLCBmbXRfYnVmZiwgJmxlbik7CisJICAgIHN3aXRjaCAoKmNwKSB7 CisJICAgIGRlZmF1bHQ6CisJCWJyZWFrOworCSAgICBjYXNlICclJzoKKwkJc2F2ZV9jaGFy KCclJyk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2QnOgkJLyogRkFMTFRIUlUgKi8KKwkg ICAgY2FzZSAnbyc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICd4JzoJCS8qIEZBTExU SFJVICovCisJICAgIGNhc2UgJ1gnOgkJLyogRkFMTFRIUlUgKi8KKwkJc2F2ZV9udW1iZXIo Zm10X2J1ZmYsIG5wb3AoKSwgbGVuKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnYyc6CQkv KiBGQUxMVEhSVSAqLworCQlzYXZlX2NoYXIobnBvcCgpKTsKKwkJYnJlYWs7CisKKwkgICAg Y2FzZSAnbCc6CisJCXNhdmVfbnVtYmVyKCIlZCIsIChpbnQpIGdydWJfc3RybGVuKHNwb3Ao KSksIDApOworCQlicmVhazsKKworCSAgICBjYXNlICdzJzoKKwkJc2F2ZV90ZXh0KGZtdF9i dWZmLCBzcG9wKCksIGxlbik7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ3AnOgorCQljcCsr OworCQlpID0gKFVDaGFyKCpjcCkgLSAnMScpOworCQlpZiAoaSA+PSAwICYmIGkgPCBOVU1f UEFSTSkgeworCQkgICAgaWYgKHBfaXNfc1tpXSkKKwkJCXNwdXNoKHBfaXNfc1tpXSk7CisJ CSAgICBlbHNlCisJCQlucHVzaChwYXJhbVtpXSk7CisJCX0KKwkJYnJlYWs7CisKKwkgICAg Y2FzZSAnUCc6CisJCWNwKys7CisJCWlmIChpc1VQUEVSKCpjcCkpIHsKKwkJICAgIGkgPSAo VUNoYXIoKmNwKSAtICdBJyk7CisJCSAgICBzdGF0aWNfdmFyc1tpXSA9IG5wb3AoKTsKKwkJ fSBlbHNlIGlmIChpc0xPV0VSKCpjcCkpIHsKKwkJICAgIGkgPSAoVUNoYXIoKmNwKSAtICdh Jyk7CisJCSAgICBkeW5hbWljX3ZhcltpXSA9IG5wb3AoKTsKKwkJfQorCQlicmVhazsKKwor CSAgICBjYXNlICdnJzoKKwkJY3ArKzsKKwkJaWYgKGlzVVBQRVIoKmNwKSkgeworCQkgICAg aSA9IChVQ2hhcigqY3ApIC0gJ0EnKTsKKwkJICAgIG5wdXNoKHN0YXRpY192YXJzW2ldKTsK KwkJfSBlbHNlIGlmIChpc0xPV0VSKCpjcCkpIHsKKwkJICAgIGkgPSAoVUNoYXIoKmNwKSAt ICdhJyk7CisJCSAgICBucHVzaChkeW5hbWljX3ZhcltpXSk7CisJCX0KKwkJYnJlYWs7CisK KwkgICAgY2FzZSAnXCcnOgorCQljcCsrOworCQlucHVzaChVQ2hhcigqY3ApKTsKKwkJY3Ar KzsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAneyc6CisJCW51bWJlciA9IDA7CisJCWNwKys7 CisJCXdoaWxlIChpc2RpZ2l0KFVDaGFyKCpjcCkpKSB7CisJCSAgICBudW1iZXIgPSAobnVt YmVyICogMTApICsgKFVDaGFyKCpjcCkgLSAnMCcpOworCQkgICAgY3ArKzsKKwkJfQorCQlu cHVzaChudW1iZXIpOworCQlicmVhazsKKworCSAgICBjYXNlICcrJzoKKwkJbnB1c2gobnBv cCgpICsgbnBvcCgpKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnLSc6CisJCXkgPSBucG9w KCk7CisJCXggPSBucG9wKCk7CisJCW5wdXNoKHggLSB5KTsKKwkJYnJlYWs7CisKKwkgICAg Y2FzZSAnKic6CisJCW5wdXNoKG5wb3AoKSAqIG5wb3AoKSk7CisJCWJyZWFrOworCisJICAg IGNhc2UgJy8nOgorCQl5ID0gbnBvcCgpOworCQl4ID0gbnBvcCgpOworCQlucHVzaCh5ID8g KHggLyB5KSA6IDApOworCQlicmVhazsKKworCSAgICBjYXNlICdtJzoKKwkJeSA9IG5wb3Ao KTsKKwkJeCA9IG5wb3AoKTsKKwkJbnB1c2goeSA/ICh4ICUgeSkgOiAwKTsKKwkJYnJlYWs7 CisKKwkgICAgY2FzZSAnQSc6CisJCW5wdXNoKG5wb3AoKSAmJiBucG9wKCkpOworCQlicmVh azsKKworCSAgICBjYXNlICdPJzoKKwkJbnB1c2gobnBvcCgpIHx8IG5wb3AoKSk7CisJCWJy ZWFrOworCisJICAgIGNhc2UgJyYnOgorCQlucHVzaChucG9wKCkgJiBucG9wKCkpOworCQli cmVhazsKKworCSAgICBjYXNlICd8JzoKKwkJbnB1c2gobnBvcCgpIHwgbnBvcCgpKTsKKwkJ YnJlYWs7CisKKwkgICAgY2FzZSAnXic6CisJCW5wdXNoKG5wb3AoKSBeIG5wb3AoKSk7CisJ CWJyZWFrOworCisJICAgIGNhc2UgJz0nOgorCQl5ID0gbnBvcCgpOworCQl4ID0gbnBvcCgp OworCQlucHVzaCh4ID09IHkpOworCQlicmVhazsKKworCSAgICBjYXNlICc8JzoKKwkJeSA9 IG5wb3AoKTsKKwkJeCA9IG5wb3AoKTsKKwkJbnB1c2goeCA8IHkpOworCQlicmVhazsKKwor CSAgICBjYXNlICc+JzoKKwkJeSA9IG5wb3AoKTsKKwkJeCA9IG5wb3AoKTsKKwkJbnB1c2go eCA+IHkpOworCQlicmVhazsKKworCSAgICBjYXNlICchJzoKKwkJbnB1c2goIW5wb3AoKSk7 CisJCWJyZWFrOworCisJICAgIGNhc2UgJ34nOgorCQlucHVzaCh+bnBvcCgpKTsKKwkJYnJl YWs7CisKKwkgICAgY2FzZSAnaSc6CisJCWlmIChwX2lzX3NbMF0gPT0gMCkKKwkJICAgIHBh cmFtWzBdKys7CisJCWlmIChwX2lzX3NbMV0gPT0gMCkKKwkJICAgIHBhcmFtWzFdKys7CisJ CWJyZWFrOworCisJICAgIGNhc2UgJz8nOgorCQlicmVhazsKKworCSAgICBjYXNlICd0JzoK KwkJeCA9IG5wb3AoKTsKKwkJaWYgKCF4KSB7CisJCSAgICAvKiBzY2FuIGZvcndhcmQgZm9y ICVlIG9yICU7IGF0IGxldmVsIHplcm8gKi8KKwkJICAgIGNwKys7CisJCSAgICBsZXZlbCA9 IDA7CisJCSAgICB3aGlsZSAoKmNwKSB7CisJCQlpZiAoKmNwID09ICclJykgeworCQkJICAg IGNwKys7CisJCQkgICAgaWYgKCpjcCA9PSAnPycpCisJCQkJbGV2ZWwrKzsKKwkJCSAgICBl bHNlIGlmICgqY3AgPT0gJzsnKSB7CisJCQkJaWYgKGxldmVsID4gMCkKKwkJCQkgICAgbGV2 ZWwtLTsKKwkJCQllbHNlCisJCQkJICAgIGJyZWFrOworCQkJICAgIH0gZWxzZSBpZiAoKmNw ID09ICdlJyAmJiBsZXZlbCA9PSAwKQorCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoKmNw KQorCQkJICAgIGNwKys7CisJCSAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkgICAgY2FzZSAn ZSc6CisJCS8qIHNjYW4gZm9yd2FyZCBmb3IgYSAlOyBhdCBsZXZlbCB6ZXJvICovCisJCWNw Kys7CisJCWxldmVsID0gMDsKKwkJd2hpbGUgKCpjcCkgeworCQkgICAgaWYgKCpjcCA9PSAn JScpIHsKKwkJCWNwKys7CisJCQlpZiAoKmNwID09ICc/JykKKwkJCSAgICBsZXZlbCsrOwor CQkJZWxzZSBpZiAoKmNwID09ICc7JykgeworCQkJICAgIGlmIChsZXZlbCA+IDApCisJCQkJ bGV2ZWwtLTsKKwkJCSAgICBlbHNlCisJCQkJYnJlYWs7CisJCQl9CisJCSAgICB9CisKKwkJ ICAgIGlmICgqY3ApCisJCQljcCsrOworCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgJzsn OgorCQlicmVhazsKKworCSAgICB9CQkJLyogZW5kc3dpdGNoICgqY3ApICovCisJfQkJCS8q IGVuZGVsc2UgKCpjcCA9PSAnJScpICovCisKKwlpZiAoKmNwID09ICdcMCcpCisJICAgIGJy ZWFrOworCisJY3ArKzsKKyAgICB9CQkJCS8qIGVuZHdoaWxlICgqY3ApICovCisKKyAgICBn ZXRfc3BhY2UoMSk7CisgICAgb3V0X2J1ZmZbb3V0X3VzZWRdID0gJ1wwJzsKKworICAgIHJl dHVybiAob3V0X2J1ZmYpOworfQorCitjaGFyICoKK2dydWJfdGVybWluZm9fdHBhcm0oY29u c3QgY2hhciAqc3RyaW5nLC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworICAgIGNoYXIgKnJl c3VsdDsKKworICAgIHZhX3N0YXJ0KGFwLCBzdHJpbmcpOworICAgIHJlc3VsdCA9IHRwYXJh bV9pbnRlcm5hbChzdHJpbmcsIGFwKTsKKyAgICB2YV9lbmQoYXApOworICAgIHJldHVybiBy ZXN1bHQ7Cit9Cg== --------------030900040402010608060806 Content-Type: text/plain; name="grub2.serial.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="grub2.serial.diff" ZGlmZiAtdU5yIGdydWIyL2NvbmYvaTM4Ni1wYy5ybWsgZ3J1YjIuc2VyaWFsL2NvbmYvaTM4 Ni1wYy5ybWsKLS0tIGdydWIyL2NvbmYvaTM4Ni1wYy5ybWsJMjAwNS0wOC0wOSAxNzozNzow MS4wMDAwMDAwMDAgLTA2MDAKKysrIGdydWIyLnNlcmlhbC9jb25mL2kzODYtcGMucm1rCTIw MDUtMDgtMDkgMTc6MzI6MDAuMDAwMDAwMDAwIC0wNjAwCkBAIC0xMTAsNyArMTEwLDggQEAK IAlmb250Lm1vZCBfbXVsdGlib290Lm1vZCBscy5tb2QgYm9vdC5tb2QgY21wLm1vZCBjYXQu bW9kCQlcCiAJdGVybWluYWwubW9kIGZzaGVscC5tb2QgY2hhaW4ubW9kIG11bHRpYm9vdC5t b2QgYW1pZ2EubW9kCVwKIAlhcHBsZS5tb2QgcGMubW9kIHN1bi5tb2QgbG9vcGJhY2subW9k IHJlYm9vdC5tb2QgaGFsdC5tb2QJXAotCWhlbHAubW9kIGRlZmF1bHQubW9kIHRpbWVvdXQu bW9kIGNvbmZpZ2ZpbGUubW9kIHRlcm1pbmZvLm1vZAorCWhlbHAubW9kIGRlZmF1bHQubW9k IHRpbWVvdXQubW9kIGNvbmZpZ2ZpbGUubW9kIHRlcm1pbmZvLm1vZAlcCisJc2VyaWFsLm1v ZAogCiAjIEZvciBfY2hhaW4ubW9kLgogX2NoYWluX21vZF9TT1VSQ0VTID0gbG9hZGVyL2kz ODYvcGMvY2hhaW5sb2FkZXIuYwpAQCAtMjE1LDYgKzIxNiwxMCBAQAogdGVybWluZm9fbW9k X1NPVVJDRVMgPSB0ZXJtL3Rlcm1pbmZvLmMgdGVybS90cGFybS5jCiB0ZXJtaW5mb19tb2Rf Q0ZMQUdTID0gJChDT01NT05fQ0ZMQUdTKQogCisjIEZvciBzZXJpYWwubW9kLgorc2VyaWFs X21vZF9TT1VSQ0VTID0gdGVybS9pMzg2L3BjL3NlcmlhbC5jCitzZXJpYWxfbW9kX0NGTEFH UyA9ICQoQ09NTU9OX0NGTEFHUykKKwogIyBGb3IgX211bHRpYm9vdC5tb2QuCiBfbXVsdGli b290X21vZF9TT1VSQ0VTID0gbG9hZGVyL2kzODYvcGMvbXVsdGlib290LmMKIF9tdWx0aWJv b3RfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKZGlmZiAtdU5yIGdydWIyL2NvbmYv aTM4Ni1wYy5ybWsub3JpZyBncnViMi5zZXJpYWwvY29uZi9pMzg2LXBjLnJtay5vcmlnCi0t LSBncnViMi9jb25mL2kzODYtcGMucm1rLm9yaWcJMjAwNS0wOC0wOSAwODozOTo1MC4wMDAw MDAwMDAgLTA2MDAKKysrIGdydWIyLnNlcmlhbC9jb25mL2kzODYtcGMucm1rLm9yaWcJMjAw NS0wOC0wOSAxNzozMTo1Ni4wMDAwMDAwMDAgLTA2MDAKQEAgLTExMCw3ICsxMTAsNyBAQAog CWZvbnQubW9kIF9tdWx0aWJvb3QubW9kIGxzLm1vZCBib290Lm1vZCBjbXAubW9kIGNhdC5t b2QJCVwKIAl0ZXJtaW5hbC5tb2QgZnNoZWxwLm1vZCBjaGFpbi5tb2QgbXVsdGlib290Lm1v ZCBhbWlnYS5tb2QJXAogCWFwcGxlLm1vZCBwYy5tb2Qgc3VuLm1vZCBsb29wYmFjay5tb2Qg cmVib290Lm1vZCBoYWx0Lm1vZAlcCi0JaGVscC5tb2QgZGVmYXVsdC5tb2QgdGltZW91dC5t b2QgY29uZmlnZmlsZS5tb2QKKwloZWxwLm1vZCBkZWZhdWx0Lm1vZCB0aW1lb3V0Lm1vZCBj b25maWdmaWxlLm1vZCB0ZXJtaW5mby5tb2QKIAogIyBGb3IgX2NoYWluLm1vZC4KIF9jaGFp bl9tb2RfU09VUkNFUyA9IGxvYWRlci9pMzg2L3BjL2NoYWlubG9hZGVyLmMKQEAgLTIxMSw2 ICsyMTEsMTAgQEAKIGZvbnRfbW9kX1NPVVJDRVMgPSBmb250L21hbmFnZXIuYwogZm9udF9t b2RfQ0ZMQUdTID0gJChDT01NT05fQ0ZMQUdTKQogCisjIEZvciB0ZXJtaW5mby5tb2QuCit0 ZXJtaW5mb19tb2RfU09VUkNFUyA9IHRlcm0vdGVybWluZm8uYyB0ZXJtL3RwYXJtLmMKK3Rl cm1pbmZvX21vZF9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCisKICMgRm9yIF9tdWx0aWJv b3QubW9kLgogX211bHRpYm9vdF9tb2RfU09VUkNFUyA9IGxvYWRlci9pMzg2L3BjL211bHRp Ym9vdC5jCiBfbXVsdGlib290X21vZF9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCmRpZmYg LXVOciBncnViMi9pbmNsdWRlL2dydWIvaTM4Ni9wYy9zZXJpYWwuaCBncnViMi5zZXJpYWwv aW5jbHVkZS9ncnViL2kzODYvcGMvc2VyaWFsLmgKLS0tIGdydWIyL2luY2x1ZGUvZ3J1Yi9p Mzg2L3BjL3NlcmlhbC5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisr KyBncnViMi5zZXJpYWwvaW5jbHVkZS9ncnViL2kzODYvcGMvc2VyaWFsLmgJMjAwNS0wOC0w OSAxNzozMjowMC4wMDAwMDAwMDAgLTA2MDAKQEAgLTAsMCArMSw5NyBAQAorLyogc2VyaWFs LmggLSBzZXJpYWwgZGV2aWNlIGludGVyZmFjZSAqLworLyoKKyAqICBHUlVCICAtLSAgR1Jh bmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEsMjAw MiwyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor ICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEz OSwgVVNBLgorICovCisKKyNpZm5kZWYgR1JVQl9TRVJJQUxfTUFDSElORV9IRUFERVIKKyNk ZWZpbmUgR1JVQl9TRVJJQUxfTUFDSElORV9IRUFERVIJMQorCisvKiBNYWNyb3MuICAqLwor CisvKiBUaGUgb2Zmc2V0cyBvZiBVQVJUIHJlZ2lzdGVycy4gICovCisjZGVmaW5lIFVBUlRf VFgJCTAKKyNkZWZpbmUgVUFSVF9SWAkJMAorI2RlZmluZSBVQVJUX0RMTAkwCisjZGVmaW5l IFVBUlRfSUVSCTEKKyNkZWZpbmUgVUFSVF9ETEgJMQorI2RlZmluZSBVQVJUX0lJUgkyCisj ZGVmaW5lIFVBUlRfRkNSCTIKKyNkZWZpbmUgVUFSVF9MQ1IJMworI2RlZmluZSBVQVJUX01D Ugk0CisjZGVmaW5lIFVBUlRfTFNSCTUKKyNkZWZpbmUgVUFSVF9NU1IJNgorI2RlZmluZSBV QVJUX1NSCQk3CisKKy8qIEZvciBMU1IgYml0cy4gICovCisjZGVmaW5lIFVBUlRfREFUQV9S RUFEWQkJMHgwMQorI2RlZmluZSBVQVJUX0VNUFRZX1RSQU5TTUlUVEVSCTB4MjAKKworLyog VGhlIHR5cGUgb2YgcGFyaXR5LiAgKi8KKyNkZWZpbmUgVUFSVF9OT19QQVJJVFkJCTB4MDAK KyNkZWZpbmUgVUFSVF9PRERfUEFSSVRZCQkweDA4CisjZGVmaW5lIFVBUlRfRVZFTl9QQVJJ VFkJMHgxOAorCisvKiBUaGUgdHlwZSBvZiB3b3JkIGxlbmd0aC4gICovCisjZGVmaW5lIFVB UlRfNUJJVFNfV09SRAkweDAwCisjZGVmaW5lIFVBUlRfNkJJVFNfV09SRAkweDAxCisjZGVm aW5lIFVBUlRfN0JJVFNfV09SRAkweDAyCisjZGVmaW5lIFVBUlRfOEJJVFNfV09SRAkweDAz CisKKy8qIFRoZSB0eXBlIG9mIHRoZSBsZW5ndGggb2Ygc3RvcCBiaXQuICAqLworI2RlZmlu ZSBVQVJUXzFfU1RPUF9CSVQJCTB4MDAKKyNkZWZpbmUgVUFSVF8yX1NUT1BfQklUUwkweDA0 CisKKy8qIHRoZSBzd2l0Y2ggb2YgRExBQi4gICovCisjZGVmaW5lIFVBUlRfRExBQgkweDgw CisKKy8qIEVuYWJsZSB0aGUgRklGTy4gICovCisjZGVmaW5lIFVBUlRfRU5BQkxFX0ZJRk8J MHhDNworCisvKiBUdXJuIG9uIERUUiwgUlRTLCBhbmQgT1VUMi4gICovCisjZGVmaW5lIFVB UlRfRU5BQkxFX01PREVNCTB4MEIKKworLyogUmVhZCBhIGJ5dGUgZnJvbSBhIHBvcnQuICAq Lworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyCitpbmIgKGNvbnN0IHVuc2lnbmVkIHNo b3J0IHBvcnQpCit7CisgIHVuc2lnbmVkIGNoYXIgdmFsdWU7CisKKyAgYXNtIHZvbGF0aWxl ICgiaW5iICAgICV3MSwgJTAiIDogIj1hIiAodmFsdWUpIDogIk5kIiAocG9ydCkpOworICBh c20gdm9sYXRpbGUgKCJvdXRiICAgJSVhbCwgJDB4ODAiIDogOiApOworCisgIHJldHVybiB2 YWx1ZTsKK30KKworLyogV3JpdGUgYSBieXRlIHRvIGEgcG9ydC4gICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK291dGIgKGNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHVuc2ln bmVkIGNoYXIgdmFsdWUpCit7CisgIGFzbSB2b2xhdGlsZSAoIm91dGIgICAlYjAsICV3MSIg OiA6ICJhIiAodmFsdWUpLCAiTmQiIChwb3J0KSk7CisgIGFzbSB2b2xhdGlsZSAoIm91dGIg ICAlJWFsLCAkMHg4MCIgOiA6ICk7Cit9CisKKy8qIFJldHVybiB0aGUgcG9ydCBudW1iZXIg Zm9yIHRoZSBVTklUdGggc2VyaWFsIGRldmljZS4gICovCitzdGF0aWMgaW5saW5lIHVuc2ln bmVkIHNob3J0CitzZXJpYWxfaHdfZ2V0X3BvcnQgKGNvbnN0IHVuc2lnbmVkIHNob3J0IHVu aXQpCit7CisgIC8qIFRoZSBCSU9TIGRhdGEgYXJlYS4gICovCisgIGNvbnN0IHVuc2lnbmVk IHNob3J0ICphZGRyID0gKGNvbnN0IHVuc2lnbmVkIHNob3J0ICopIDB4MDQwMDsKKyAgcmV0 dXJuIGFkZHJbdW5pdF07Cit9CisKKyNlbmRpZiAvKiAhIEdSVUJfU0VSSUFMX01BQ0hJTkVf SEVBREVSICovCmRpZmYgLXVOciBncnViMi90ZXJtL2kzODYvcGMvc2VyaWFsLmMgZ3J1YjIu c2VyaWFsL3Rlcm0vaTM4Ni9wYy9zZXJpYWwuYwotLS0gZ3J1YjIvdGVybS9pMzg2L3BjL3Nl cmlhbC5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBncnViMi5z ZXJpYWwvdGVybS9pMzg2L3BjL3NlcmlhbC5jCTIwMDUtMDgtMDkgMTc6MzY6MjUuMDAwMDAw MDAwIC0wNjAwCkBAIC0wLDAgKzEsNTc1IEBACisvKgorICogIEdSVUIgIC0tICBHUmFuZCBV bmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSwyMDAyLDIw MDMsMjAwNCwyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisg KiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBN QSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxncnViL21hY2hpbmUvc2VyaWFsLmg+ CisjaW5jbHVkZSA8Z3J1Yi9tYWNoaW5lL2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxncnViL3Rl cm0uaD4KKyNpbmNsdWRlIDxncnViL3R5cGVzLmg+CisjaW5jbHVkZSA8Z3J1Yi9kbC5oPgor I2luY2x1ZGUgPGdydWIvbWlzYy5oPgorI2luY2x1ZGUgPGdydWIvbm9ybWFsLmg+CisjaW5j bHVkZSA8Z3J1Yi9hcmcuaD4KKyNpbmNsdWRlIDxncnViL3Rlcm1pbmZvLmg+CisKKyNkZWZp bmUgVEVYVF9XSURUSAk4MAorI2RlZmluZSBURVhUX0hFSUdIVAkyNQorCitzdGF0aWMgdW5z aWduZWQgaW50IHhwb3MsIHlwb3M7CitzdGF0aWMgdW5zaWduZWQgaW50IGtlZXBfdHJhY2sg PSAxOworc3RhdGljIHVuc2lnbmVkIGludCByZWdpc3RlcmVkID0gMDsKKworLyogQW4gaW5w dXQgYnVmZmVyLiAgKi8KK3N0YXRpYyBjaGFyIGlucHV0X2J1Zls4XTsKK3N0YXRpYyB1bnNp Z25lZCBpbnQgbnBlbmRpbmcgPSAwOworCisvKiBBcmd1bWVudCBvcHRpb25zLiAgKi8KK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZ3J1Yl9hcmdfb3B0aW9uIG9wdGlvbnNbXSA9Cit7CisgIHsi dW5pdCIsICAgJ3UnLCAwLCAiU2V0IHRoZSBzZXJpYWwgdW5pdCIsICAgICAgICAgICAgIDAs IEFSR19UWVBFX0lOVH0sCisgIHsicG9ydCIsICAgJ3AnLCAwLCAiU2V0IHRoZSBzZXJpYWwg cG9ydCBhZGRyZXNzIiwgICAgIDAsIEFSR19UWVBFX1NUUklOR30sCisgIHsic3BlZWQiLCAg J3MnLCAwLCAiU2V0IHRoZSBzZXJpYWwgcG9ydCBzcGVlZCIsICAgICAgIDAsIEFSR19UWVBF X0lOVH0sCisgIHsid29yZCIsICAgJ3cnLCAwLCAiU2V0IHRoZSBzZXJpYWwgcG9ydCB3b3Jk IGxlbmd0aCIsIDAsIEFSR19UWVBFX0lOVH0sCisgIHsicGFyaXR5IiwgJ3InLCAwLCAiU2V0 IHRoZSBzZXJpYWwgcG9ydCBwYXJpdHkiLCAgICAgIDAsIEFSR19UWVBFX1NUUklOR30sCisg IHsic3RvcCIsICAgJ3QnLCAwLCAiU2V0IHRoZSBzZXJpYWwgcG9ydCBzdG9wIGJpdHMiLCAg IDAsIEFSR19UWVBFX0lOVH0sCisgIHswLCAwLCAwLCAwLCAwLCAwfQorfTsKKworLyogU2Vy aWFsIHBvcnQgc2V0dGluZ3MuICAqLworc3RydWN0IHNlcmlhbF9wb3J0Cit7CisgIHVuc2ln bmVkIHNob3J0IHBvcnQ7CisgIHVuc2lnbmVkIHNob3J0IGRpdmlzb3I7CisgIHVuc2lnbmVk IHNob3J0IHdvcmRfbGVuOworICB1bnNpZ25lZCBpbnQgICBwYXJpdHk7CisgIHVuc2lnbmVk IHNob3J0IHN0b3BfYml0czsKK307CisKKy8qIFNlcmlhbCBwb3J0IHNldHRpbmdzLiAgKi8K K3N0YXRpYyBzdHJ1Y3Qgc2VyaWFsX3BvcnQgc2VyaWFsX3NldHRpbmdzOworCisvKiBGZXRj aCBhIGtleS4gICovCitzdGF0aWMgaW50CitzZXJpYWxfaHdfZmV0Y2ggKHZvaWQpCit7Cisg IGlmIChpbmIgKHNlcmlhbF9zZXR0aW5ncy5wb3J0ICsgVUFSVF9MU1IpICYgVUFSVF9EQVRB X1JFQURZKQorICAgIHJldHVybiBpbmIgKHNlcmlhbF9zZXR0aW5ncy5wb3J0ICsgVUFSVF9S WCk7CisKKyAgcmV0dXJuIC0xOworfQorCisvKiBQdXQgYSBjaGFyYXJhY3Rlci4gICovCitz dGF0aWMgdm9pZAorc2VyaWFsX2h3X3B1dCAoY29uc3QgaW50IGMpCit7CisgIHVuc2lnbmVk IGludCB0aW1lb3V0ID0gMTAwMDAwOworCisgIC8qIFdhaXQgdW50aWwgdGhlIHRyYW5zbWl0 dGVyIGhvbGRpbmcgcmVnaXN0ZXIgaXMgZW1wdHkuICAqLworICB3aGlsZSAoKGluYiAoc2Vy aWFsX3NldHRpbmdzLnBvcnQgKyBVQVJUX0xTUikgJiBVQVJUX0VNUFRZX1RSQU5TTUlUVEVS KSA9PSAwKQorICAgIHsKKyAgICAgIGlmICgtLXRpbWVvdXQgPT0gMCkKKyAgICAgICAgLyog VGhlcmUgaXMgc29tZXRoaW5nIHdyb25nLiBCdXQgd2hhdCBjYW4gSSBkbz8gICovCisgICAg ICAgIHJldHVybjsKKyAgICB9CisKKyAgb3V0YiAoc2VyaWFsX3NldHRpbmdzLnBvcnQgKyBV QVJUX1RYLCBjKTsKK30KKworc3RhdGljIHZvaWQKK3NlcmlhbF90cmFuc2xhdGVfa2V5X3Nl cXVlbmNlICh2b2lkKQoreworICBjb25zdCBzdHJ1Y3QKKyAgeworICAgIGNoYXIga2V5Owor ICAgIGNoYXIgYXNjaWk7CisgIH0KKworICB0aHJlZV9jb2RlX3RhYmxlW10gPQorICB7Cisg ICAgeydBJywgMTZ9LAorICAgIHsnQicsIDE0fSwKKyAgICB7J0MnLCA2fSwKKyAgICB7J0Qn LCAyfSwKKyAgICB7J0YnLCA1fSwKKyAgICB7J0gnLCAxfSwKKyAgICB7JzQnLCA0fQorICB9 OworCisgIGNvbnN0IHN0cnVjdAorICB7CisgICAgc2hvcnQga2V5OworICAgIGNoYXIgYXNj aWk7CisgIH0KKworICBmb3VyX2NvZGVfdGFibGVbXSA9CisgIHsKKyAgICB7KCcxJyB8ICgn ficgPDwgOCkpLCAxfSwKKyAgICB7KCczJyB8ICgnficgPDwgOCkpLCA0fSwKKyAgICB7KCc1 JyB8ICgnficgPDwgOCkpLCA3fSwKKyAgICB7KCc2JyB8ICgnficgPDwgOCkpLCAzfQorICB9 OworCisgIC8qIFRoZSBidWZmZXIgbXVzdCBzdGFydCB3aXRoICJFU0MgWyIuICAqLworICBp ZiAoKigodW5zaWduZWQgc2hvcnQgKikgaW5wdXRfYnVmKSAhPSAoJ1xlJyB8ICgnWycgPDwg OCkpKQorICAgIHJldHVybjsKKworICBpZiAobnBlbmRpbmcgPj0gMykKKyAgeworICAgIHVu c2lnbmVkIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAodGhyZWVfY29k ZV90YWJsZSkgLyBzaXplb2YgKHRocmVlX2NvZGVfdGFibGVbMF0pOyBpKyspCisgICAgICBp ZiAodGhyZWVfY29kZV90YWJsZVtpXS5rZXkgPT0gaW5wdXRfYnVmWzJdKQorICAgICAgewor ICAgICAgICBpbnB1dF9idWZbMF0gPSB0aHJlZV9jb2RlX3RhYmxlW2ldLmFzY2lpOworICAg ICAgICBucGVuZGluZyAtPSAyOworICAgICAgICBncnViX21lbW1vdmUgKGlucHV0X2J1ZiAr IDEsIGlucHV0X2J1ZiArIDMsIG5wZW5kaW5nIC0gMSk7CisgICAgICAgIHJldHVybjsKKyAg ICAgIH0KKyAgfQorCisgIGlmIChucGVuZGluZyA+PSA0KQorICB7CisgICAgdW5zaWduZWQg aW50IGk7CisgICAgc2hvcnQga2V5ID0gKigoc2hvcnQgKikgKGlucHV0X2J1ZiArIDIpKTsK KworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKGZvdXJfY29kZV90YWJsZSkgLyBzaXpl b2YgKGZvdXJfY29kZV90YWJsZVswXSk7IGkrKykKKyAgICAgIGlmIChmb3VyX2NvZGVfdGFi bGVbaV0ua2V5ID09IGtleSkKKyAgICAgIHsKKyAgICAgICAgaW5wdXRfYnVmWzBdID0gZm91 cl9jb2RlX3RhYmxlW2ldLmFzY2lpOworICAgICAgICBucGVuZGluZyAtPSAzOworICAgICAg ICBncnViX21lbW1vdmUgKGlucHV0X2J1ZiArIDEsIGlucHV0X2J1ZiArIDQsIG5wZW5kaW5n IC0gMSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgfQorfQorCitzdGF0aWMgaW50 CitmaWxsX2lucHV0X2J1ZiAoY29uc3QgaW50IG5vd2FpdCkKK3sKKyAgaW50IGk7CisKKyAg Zm9yIChpID0gMDsgaSA8IDEwMDAwICYmIG5wZW5kaW5nIDwgc2l6ZW9mIChpbnB1dF9idWYp OyBpKyspCisgIHsKKyAgICBpbnQgYzsKKworICAgIGMgPSBzZXJpYWxfaHdfZmV0Y2ggKCk7 CisgICAgaWYgKGMgPj0gMCkKKyAgICB7CisgICAgICBpbnB1dF9idWZbbnBlbmRpbmcrK10g PSBjOworCisgICAgICAvKiBSZXNldCB0aGUgY291bnRlciB0byB6ZXJvLCB0byB3YWl0IGZv ciB0aGUgc2FtZSBpbnRlcnZhbC4gICovCisgICAgICBpID0gMDsKKyAgICB9CisKKyAgICBp ZiAobm93YWl0KQorICAgICAgYnJlYWs7CisgIH0KKworICAvKiBUcmFuc2xhdGUgc29tZSBr ZXkgc2VxdWVuY2VzLiAgKi8KKyAgc2VyaWFsX3RyYW5zbGF0ZV9rZXlfc2VxdWVuY2UgKCk7 CisKKyAgcmV0dXJuIG5wZW5kaW5nOworfQorCisvKiBDb252ZXJ0IHNwZWVkIHRvIGRpdmlz b3IuICAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0CitzZXJpYWxfZ2V0X2Rpdmlzb3IgKGNv bnN0IHVuc2lnbmVkIGludCBzcGVlZCkKK3sKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgLyog VGhlIHN0cnVjdHVyZSBmb3Igc3BlZWQgdnMuIGRpdmlzb3IuICAqLworICBzdHJ1Y3QgZGl2 aXNvcgorICB7CisgICAgdW5zaWduZWQgaW50IHNwZWVkOworICAgIHVuc2lnbmVkIHNob3J0 IGRpdjsKKyAgfTsKKworICAvKiBUaGUgdGFibGUgd2hpY2ggbGlzdHMgY29tbW9uIGNvbmZp Z3VyYXRpb25zLiAgKi8KKyAgLyogMTg0MzIwMCAvIChzcGVlZCAqIDE2KSAgKi8KKyAgc3Rh dGljIHN0cnVjdCBkaXZpc29yIGRpdmlzb3JfdGFiW10gPQorICB7CisgICAgeyAyNDAwLCAg IDB4MDAzMCB9LAorICAgIHsgNDgwMCwgICAweDAwMTggfSwKKyAgICB7IDk2MDAsICAgMHgw MDBDIH0sCisgICAgeyAxOTIwMCwgIDB4MDAwNiB9LAorICAgIHsgMzg0MDAsICAweDAwMDMg fSwKKyAgICB7IDU3NjAwLCAgMHgwMDAyIH0sCisgICAgeyAxMTUyMDAsIDB4MDAwMSB9Cisg IH07CisKKyAgLyogU2V0IHRoZSBiYXVkIHJhdGUuICAqLworICBmb3IgKGkgPSAwOyBpIDwg c2l6ZW9mIChkaXZpc29yX3RhYikgLyBzaXplb2YgKGRpdmlzb3JfdGFiWzBdKTsgaSsrKQor ICAgIGlmIChkaXZpc29yX3RhYltpXS5zcGVlZCA9PSBzcGVlZCkKKyAgICAgIHJldHVybiBk aXZpc29yX3RhYltpXS5kaXY7CisgIHJldHVybiAwOworfQorCisvKiBUaGUgc2VyaWFsIHZl cnNpb24gb2YgY2hlY2trZXkuICAqLworc3RhdGljIGludAorZ3J1Yl9zZXJpYWxfY2hlY2tr ZXkgKHZvaWQpCit7CisgIGlmIChmaWxsX2lucHV0X2J1ZiAoMSkpCisgICAgcmV0dXJuIGlu cHV0X2J1ZlswXTsKKyAgZWxzZQorICAgIHJldHVybiAtMTsKK30KKworLyogVGhlIHNlcmlh bCB2ZXJzaW9uIG9mIGdldGtleS4gICovCitzdGF0aWMgaW50CitncnViX3NlcmlhbF9nZXRr ZXkgKHZvaWQpCit7CisgIGludCBjOworCisgIHdoaWxlICghIGZpbGxfaW5wdXRfYnVmICgw KSkKKyAgICA7CisKKyAgYyA9IGlucHV0X2J1ZlswXTsKKyAgZ3J1Yl9tZW1tb3ZlIChpbnB1 dF9idWYsIGlucHV0X2J1ZiArIDEsIC0tbnBlbmRpbmcpOworCisgIHJldHVybiBjOworfQor CisvKiBJbml0aWFsaXplIGEgc2VyaWFsIGRldmljZS4gUE9SVCBpcyB0aGUgcG9ydCBudW1i ZXIgZm9yIGEgc2VyaWFsIGRldmljZS4KKyAgIFNQRUVEIGlzIGEgRFRFLURURSBzcGVlZCB3 aGljaCBtdXN0IGJlIG9uZSBvZiB0aGVzZTogMjQwMCwgNDgwMCwgOTYwMCwKKyAgIDE5MjAw LCAzODQwMCwgNTc2MDAgYW5kIDExNTIwMC4gV09SRF9MRU4gaXMgdGhlIHdvcmQgbGVuZ3Ro IHRvIGJlIHVzZWQKKyAgIGZvciB0aGUgZGV2aWNlLiBMaWtld2lzZSwgUEFSSVRZIGlzIHRo ZSB0eXBlIG9mIHRoZSBwYXJpdHkgYW5kCisgICBTVE9QX0JJVF9MRU4gaXMgdGhlIGxlbmd0 aCBvZiB0aGUgc3RvcCBiaXQuIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yCisgICBXT1JEX0xF TiwgUEFSSVRZIGFuZCBTVE9QX0JJVF9MRU4gYXJlIGRlZmluZWQgaW4gdGhlIGhlYWRlciBm aWxlIGFzCisgICBtYWNyb3MuICAqLworc3RhdGljIGdydWJfZXJyX3QKK3NlcmlhbF9od19p bml0ICh2b2lkKQoreworICB1bnNpZ25lZCBjaGFyIHN0YXR1cyA9IDA7CisKKyAgLyogVHVy biBvZmYgdGhlIGludGVydXB0LiAgKi8KKyAgb3V0YiAoc2VyaWFsX3NldHRpbmdzLnBvcnQg KyBVQVJUX0lFUiwgMCk7CisKKyAgLyogU2V0IERMQUIuICAqLworICBvdXRiIChzZXJpYWxf c2V0dGluZ3MucG9ydCArIFVBUlRfTENSLCBVQVJUX0RMQUIpOworCisgIC8qIFNldCB0aGUg YmF1ZCByYXRlLiAgKi8KKyAgb3V0YiAoc2VyaWFsX3NldHRpbmdzLnBvcnQgKyBVQVJUX0RM TCwgc2VyaWFsX3NldHRpbmdzLmRpdmlzb3IgJiAweEZGKTsKKyAgb3V0YiAoc2VyaWFsX3Nl dHRpbmdzLnBvcnQgKyBVQVJUX0RMSCwgc2VyaWFsX3NldHRpbmdzLmRpdmlzb3IgPj4gOCAp OworCisgIC8qIFNldCB0aGUgbGluZSBzdGF0dXMuICAqLworICBzdGF0dXMgfD0gc2VyaWFs X3NldHRpbmdzLnBhcml0eQorICAgICAgICAgIHwgc2VyaWFsX3NldHRpbmdzLndvcmRfbGVu CisgICAgICAgICAgfCBzZXJpYWxfc2V0dGluZ3Muc3RvcF9iaXRzOworICBvdXRiIChzZXJp YWxfc2V0dGluZ3MucG9ydCArIFVBUlRfTENSLCBzdGF0dXMpOworCisgIC8qIEVuYWJsZSB0 aGUgRklGTy4gICovCisgIG91dGIgKHNlcmlhbF9zZXR0aW5ncy5wb3J0ICsgVUFSVF9GQ1Is IFVBUlRfRU5BQkxFX0ZJRk8pOworCisgIC8qIFR1cm4gb24gRFRSLCBSVFMsIGFuZCBPVVQy LiAgKi8KKyAgb3V0YiAoc2VyaWFsX3NldHRpbmdzLnBvcnQgKyBVQVJUX01DUiwgVUFSVF9F TkFCTEVfTU9ERU0pOworCisgIC8qIERyYWluIHRoZSBpbnB1dCBidWZmZXIuICAqLworICB3 aGlsZSAoZ3J1Yl9zZXJpYWxfY2hlY2trZXkgKCkgIT0gLTEpCisgICAgKHZvaWQpIGdydWJf c2VyaWFsX2dldGtleSAoKTsKKworICAvKiAgRklYTUU6IHNob3VsZCBjaGVjayBpZiB0aGUg c2VyaWFsIHRlcm1pbmFsIHdhcyBmb3VuZC4gICovCisKKyAgcmV0dXJuIEdSVUJfRVJSX05P TkU7Cit9CisKKy8qIFRoZSBzZXJpYWwgdmVyc2lvbiBvZiBwdXRjaGFyLiAgKi8KK3N0YXRp YyB2b2lkCitncnViX3NlcmlhbF9wdXRjaGFyIChncnViX3VpbnQzMl90IGMpCit7CisgIC8q IEtlZXAgdHJhY2sgb2YgdGhlIGN1cnNvci4gICovCisgIGlmIChrZWVwX3RyYWNrKQorICB7 CisgICAgLyogVGhlIHNlcmlhbCB0ZXJtaW5hbCBkb2VzIG5vdCBoYXZlIFZHQSBmb250cy4g ICovCisgICAgaWYgKGMgPiAweDdGKQorICAgIHsKKyAgICAgIC8qIEJldHRlciB0aGFuIG5v dGhpbmcuICAqLworICAgICAgc3dpdGNoIChjKQorICAgICAgeworICAgICAgICBjYXNlIEdS VUJfVEVSTV9ESVNQX0xFRlQ6CisgICAgICAgICAgYyA9ICc8JzsKKyAgICAgICAgICBicmVh azsKKworCWNhc2UgR1JVQl9URVJNX0RJU1BfVVA6CisgICAgICAgICAgYyA9ICdeJzsKKyAg ICAgICAgICBicmVhazsKKworCWNhc2UgR1JVQl9URVJNX0RJU1BfUklHSFQ6CisgICAgICAg ICAgYyA9ICc+JzsKKyAgICAgICAgICBicmVhazsKKworCWNhc2UgR1JVQl9URVJNX0RJU1Bf RE9XTjoKKyAgICAgICAgICBjID0gJ3YnOworICAgICAgICAgIGJyZWFrOworCisJY2FzZSBH UlVCX1RFUk1fRElTUF9ITElORToKKyAgICAgICAgICBjID0gJy0nOworICAgICAgICAgIGJy ZWFrOworCisJY2FzZSBHUlVCX1RFUk1fRElTUF9WTElORToKKyAgICAgICAgICBjID0gJ3wn OworICAgICAgICAgIGJyZWFrOworCisJY2FzZSBHUlVCX1RFUk1fRElTUF9VTDoKKwljYXNl IEdSVUJfVEVSTV9ESVNQX1VSOgorCWNhc2UgR1JVQl9URVJNX0RJU1BfTEw6CisJY2FzZSBH UlVCX1RFUk1fRElTUF9MUjoKKyAgICAgICAgICBjID0gJysnOworICAgICAgICAgIGJyZWFr OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAg fQorICAgIHN3aXRjaCAoYykKKyAgICB7CisgICAgICAgY2FzZSAnXGEnOgorICAgICAgICAg YnJlYWs7CisKKyAgICAgICBjYXNlICdcYic6CisgICAgICAgY2FzZSAxMjc6CisgICAgICAg ICBpZiAoeHBvcyA+IDApCisgICAgICAgICAgIHhwb3MtLTsKKyAgICAgICAgIGJyZWFrOwor CisgICAgICAgY2FzZSAnXG4nOgorICAgICAgICAgaWYgKHlwb3MgPCBURVhUX0hFSUdIVCkK KyAgICAgICAgICAgeXBvcysrOworICAgICAgICAgYnJlYWs7CisKKyAgICAgICBjYXNlICdc cic6CisgICAgICAgICB4cG9zID0gMDsKKyAgICAgICAgIGJyZWFrOworCisgICAgICAgZGVm YXVsdDoKKyAgICAgICAgIGlmICh4cG9zID49IFRFWFRfV0lEVEgpCisgICAgICAgICB7Cisg ICAgICAgICAgIGdydWJfcHV0Y2hhciAoJ1xyJyk7CisgICAgICAgICAgIGdydWJfcHV0Y2hh ciAoJ1xuJyk7CisgICAgICAgICB9CisgICAgICAgICB4cG9zKys7CisgICAgICAgICBicmVh azsKKyAgICAgfQorICB9CisgIHNlcmlhbF9od19wdXQgKGMpOworfQorCitzdGF0aWMgZ3J1 Yl91aW50MTZfdAorZ3J1Yl9zZXJpYWxfZ2V0d2ggKHZvaWQpCit7CisgIHJldHVybiAoVEVY VF9XSURUSCA8PCA4KSB8IFRFWFRfSEVJR0hUOworfQorCitzdGF0aWMgZ3J1Yl91aW50MTZf dAorZ3J1Yl9zZXJpYWxfZ2V0eHkgKHZvaWQpCit7CisgIHJldHVybiAoKHhwb3MgPDwgOCkg fCB5cG9zKTsKK30KKworc3RhdGljIHZvaWQKK2dydWJfc2VyaWFsX2dvdG94eSAoY29uc3Qg Z3J1Yl91aW50OF90IHgsIGNvbnN0IGdydWJfdWludDhfdCB5KQoreworICBpZiAoeCA+IFRF WFRfV0lEVEggfHwgeSA+IFRFWFRfSEVJR0hUKQorICB7CisgICAgZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfT1VUX09GX1JBTkdFLCAiaW52YWxpZCBwb2ludCAoJXUsJXUpIiwgeCwgeSk7Cisg IH0KKyAgZWxzZQorICB7CisgICAga2VlcF90cmFjayA9IDA7CisgICAgZ3J1Yl90ZXJtaW5m b19nb3RveHkgKHgsIHkpOworICAgIGtlZXBfdHJhY2sgPSAxOworCisgICAgeHBvcyA9IHg7 CisgICAgeXBvcyA9IHk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dydWJfc2VyaWFsX2Ns cyAodm9pZCkKK3sKKyAga2VlcF90cmFjayA9IDA7CisgIGdydWJfdGVybWluZm9fY2xzICgp OworICBrZWVwX3RyYWNrID0gMTsKKworICB4cG9zID0geXBvcyA9IDA7Cit9CisKK3N0YXRp YyB2b2lkCitncnViX3NlcmlhbF9zZXRjb2xvcnN0YXRlIChjb25zdCBncnViX3Rlcm1fY29s b3Jfc3RhdGUgc3RhdGUpCit7CisgIGtlZXBfdHJhY2sgPSAwOworICBzd2l0Y2ggKHN0YXRl KQorICB7CisgICAgY2FzZSBHUlVCX1RFUk1fQ09MT1JfU1RBTkRBUkQ6CisgICAgY2FzZSBH UlVCX1RFUk1fQ09MT1JfTk9STUFMOgorICAgICAgZ3J1Yl90ZXJtaW5mb19yZXZlcnNlX3Zp ZGVvX29mZiAoKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1JVQl9URVJNX0NPTE9SX0hJ R0hMSUdIVDoKKyAgICAgIGdydWJfdGVybWluZm9fcmV2ZXJzZV92aWRlb19vbiAoKTsKKyAg ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorICBrZWVwX3Ry YWNrID0gMTsKK30KKworc3RhdGljIHZvaWQKK2dydWJfc2VyaWFsX3NldGNvbG9yIChjb25z dCBncnViX3VpbnQ4X3Qgbm9ybWFsX2NvbG9yICAgIF9fYXR0cmlidXRlX18gKCh1bnVzZWQp KSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncnViX3VpbnQ4X3QgaGlnaGxpZ2h0 X2NvbG9yIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKK3sKKyAgLyogRklYTUUgKi8KK30K Kworc3RhdGljIHZvaWQKK2dydWJfc2VyaWFsX3NldGN1cnNvciAoY29uc3QgaW50IG9uKQor eworICBpZiAob24pCisgICAgZ3J1Yl90ZXJtaW5mb19jdXJzb3Jfb24gKCk7CisgIGVsc2UK KyAgICBncnViX3Rlcm1pbmZvX2N1cnNvcl9vZmYgKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg Z3J1Yl90ZXJtIGdydWJfc2VyaWFsX3Rlcm0gPQoreworICAubmFtZSA9ICJzZXJpYWwiLAor ICAuaW5pdCA9IDAsCisgIC5maW5pID0gMCwKKyAgLnB1dGNoYXIgPSBncnViX3NlcmlhbF9w dXRjaGFyLAorICAuY2hlY2trZXkgPSBncnViX3NlcmlhbF9jaGVja2tleSwKKyAgLmdldGtl eSA9IGdydWJfc2VyaWFsX2dldGtleSwKKyAgLmdldHdoID0gZ3J1Yl9zZXJpYWxfZ2V0d2gs CisgIC5nZXR4eSA9IGdydWJfc2VyaWFsX2dldHh5LAorICAuZ290b3h5ID0gZ3J1Yl9zZXJp YWxfZ290b3h5LAorICAuY2xzID0gZ3J1Yl9zZXJpYWxfY2xzLAorICAuc2V0Y29sb3JzdGF0 ZSA9IGdydWJfc2VyaWFsX3NldGNvbG9yc3RhdGUsCisgIC5zZXRjb2xvciA9IGdydWJfc2Vy aWFsX3NldGNvbG9yLAorICAuc2V0Y3Vyc29yID0gZ3J1Yl9zZXJpYWxfc2V0Y3Vyc29yLAor ICAuZmxhZ3MgPSAwLAorICAubmV4dCA9IDAKK307CisKK3N0YXRpYyBncnViX2Vycl90Citn cnViX2NtZF9zZXJpYWwgKHN0cnVjdCBncnViX2FyZ19saXN0ICpzdGF0ZSwKKyAgICAgICAg ICAgICAgICAgaW50IGFyZ2MgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorCQkgY2hhciAq KmFyZ3MgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQoreworICBzdHJ1Y3Qgc2VyaWFsX3Bv cnQgYmFja3VwX3NldHRpbmdzID0gc2VyaWFsX3NldHRpbmdzOworICBncnViX2Vycl90IGh3 aW5pdGVycjsKKyAgaW50IGFyZzsKKworICBpZiAoc3RhdGVbMF0uc2V0KQorICB7CisgICAg YXJnID0gZ3J1Yl9zdHJ0b3VsIChzdGF0ZVswXS5hcmcsIDAsIDApOworICAgIGlmIChhcmcg Pj0gMCAmJiBhcmcgPCA0KQorICAgICAgc2VyaWFsX3NldHRpbmdzLnBvcnQgPSBzZXJpYWxf aHdfZ2V0X3BvcnQgKChpbnQpIGFyZyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuIGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgImJhZCB1bml0IG51bWJlci4iKTsKKyAg fQorICBpZiAoc3RhdGVbMV0uc2V0KQorICAgIHNlcmlhbF9zZXR0aW5ncy5wb3J0ID0gKHVu c2lnbmVkIHNob3J0KSBncnViX3N0cnRvdWwgKHN0YXRlWzFdLmFyZywgMCwgMCk7CisgIGlm IChzdGF0ZVsyXS5zZXQpIHsKKyAgICBzZXJpYWxfc2V0dGluZ3MuZGl2aXNvciA9IHNlcmlh bF9nZXRfZGl2aXNvciAoKHVuc2lnbmVkIGludCkgZ3J1Yl9zdHJ0b3VsIChzdGF0ZVsyXS5h cmcsIDAsIDApKTsKKyAgICBpZiAoc2VyaWFsX3NldHRpbmdzLmRpdmlzb3IgPT0gMCApCisg ICAgeworICAgICAgc2VyaWFsX3NldHRpbmdzID0gYmFja3VwX3NldHRpbmdzOworICAgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgImJhZCBzcGVlZC4i KTsKKyAgICB9CisgIH0KKyAgaWYgKHN0YXRlWzNdLnNldCkKKyAgeworICAgIGlmICghZ3J1 Yl9zdHJjbXAgKHN0YXRlWzNdLmFyZywgIjUiKSkKKyAgICAgIHNlcmlhbF9zZXR0aW5ncy53 b3JkX2xlbiA9IFVBUlRfNUJJVFNfV09SRDsKKyAgICBlbHNlIGlmICghZ3J1Yl9zdHJjbXAg KHN0YXRlWzNdLmFyZywgIjYiKSkKKyAgICAgIHNlcmlhbF9zZXR0aW5ncy53b3JkX2xlbiA9 IFVBUlRfNkJJVFNfV09SRDsKKyAgICBlbHNlIGlmICghZ3J1Yl9zdHJjbXAgKHN0YXRlWzNd LmFyZywgIjciKSkKKyAgICAgIHNlcmlhbF9zZXR0aW5ncy53b3JkX2xlbiA9IFVBUlRfN0JJ VFNfV09SRDsKKyAgICBlbHNlIGlmICghZ3J1Yl9zdHJjbXAgKHN0YXRlWzNdLmFyZywgIjgi KSkKKyAgICAgIHNlcmlhbF9zZXR0aW5ncy53b3JkX2xlbiA9IFVBUlRfOEJJVFNfV09SRDsK KyAgICBlbHNlCisgICAgeworICAgICAgc2VyaWFsX3NldHRpbmdzID0gYmFja3VwX3NldHRp bmdzOworICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwg ImJhZCB3b3JkIGxlbmd0aC4iKTsKKyAgICB9CisgIH0KKyAgaWYgKHN0YXRlWzRdLnNldCkK KyAgeworICAgIGlmICghZ3J1Yl9zdHJjbXAgKHN0YXRlWzRdLmFyZywgIm5vIikpCisgICAg ICBzZXJpYWxfc2V0dGluZ3MucGFyaXR5ID0gVUFSVF9OT19QQVJJVFk7CisgICAgZWxzZSBp ZiAoIWdydWJfc3RyY21wIChzdGF0ZVs0XS5hcmcsICJvZGQiKSkKKyAgICAgIHNlcmlhbF9z ZXR0aW5ncy5wYXJpdHkgPSBVQVJUX09ERF9QQVJJVFk7CisgICAgZWxzZSBpZiAoIWdydWJf c3RyY21wIChzdGF0ZVs0XS5hcmcsICJldmVuIikpCisgICAgICBzZXJpYWxfc2V0dGluZ3Mu cGFyaXR5ID0gVUFSVF9FVkVOX1BBUklUWTsKKyAgICBlbHNlCisgICAgeworICAgICAgc2Vy aWFsX3NldHRpbmdzID0gYmFja3VwX3NldHRpbmdzOworICAgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgImJhZCBwYXJpdHkuIik7CisgICAgfQorICB9 CisgIGlmIChzdGF0ZVs1XS5zZXQpCisgIHsKKyAgICBpZiAoIWdydWJfc3RyY21wIChzdGF0 ZVs1XS5hcmcsICIxIikpCisgICAgICBzZXJpYWxfc2V0dGluZ3Muc3RvcF9iaXRzID0gVUFS VF8xX1NUT1BfQklUOworICAgIGVsc2UgaWYgKCFncnViX3N0cmNtcCAoc3RhdGVbNV0uYXJn LCAiMiIpKQorICAgICAgc2VyaWFsX3NldHRpbmdzLnN0b3BfYml0cyA9IFVBUlRfMl9TVE9Q X0JJVFM7CisgICAgZWxzZQorICAgIHsKKyAgICAgIHNlcmlhbF9zZXR0aW5ncyA9IGJhY2t1 cF9zZXR0aW5nczsKKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJH VU1FTlQsICJiYWQgbnVtYmVyIG9mIHN0b3AgYml0cy4iKTsKKyAgICB9CisgIH0KKworICBo d2luaXRlcnIgPSBzZXJpYWxfaHdfaW5pdCAoKTsJLyogSW5pdGlhbGl6ZSB3aXRoIG5ldyBz ZXR0aW5ncy4gICovCisgIGlmIChod2luaXRlcnIgPT0gR1JVQl9FUlJfTk9ORSkKKyAgewor ICAgIGlmIChyZWdpc3RlcmVkID09IDApCS8qIFJlZ2lzdGVyIHRlcm1pbmFsIGlmIG5vdCB5 ZXQgcmVnaXN0ZXJlZC4gICovCisgICAgeworICAgICAgZ3J1Yl90ZXJtX3JlZ2lzdGVyICgm Z3J1Yl9zZXJpYWxfdGVybSk7CisgICAgICByZWdpc3RlcmVkID0gMTsKKyAgICB9CisgIH0K KyAgZWxzZQkJCQkvKiBJbml0aWFsaXphdGlvbiB3aXRoIG5ldyBzZXR0aW5ncyBmYWlsZWQu ICAqLworICAgIGlmIChyZWdpc3RlcmVkID09IDEpCS8qIElmIHRlcm1pbmFsIGlzIHJlZ2lz dGVyZWQsIGF0dGVtcHQgdG8gcmVzdG9yZSBwcmV2aW91cyBzZXR0aW5ncy4gICovCisgICAg eworICAgICAgc2VyaWFsX3NldHRpbmdzID0gYmFja3VwX3NldHRpbmdzOworICAgICAgaWYg KHNlcmlhbF9od19pbml0ICgpICE9IEdSVUJfRVJSX05PTkUpCS8qIElmIHVuYWJsZSB0byBy ZXN0b3JlIHNldHRpbmdzLCB1bnJlZ2lzdGVyIHRlcm1pbmFsLiAgKi8KKyAgICAgIHsKKyAg ICAgICAgZ3J1Yl90ZXJtX3VucmVnaXN0ZXIgKCZncnViX3NlcmlhbF90ZXJtKTsKKyAgICAg ICAgcmVnaXN0ZXJlZCA9IDA7CisgICAgICB9CisgICAgfQorICByZXR1cm4gaHdpbml0ZXJy OworfQorCitHUlVCX01PRF9JTklUCit7CisgICh2b2lkKW1vZDsJCQkvKiBUbyBzdG9wIHdh cm5pbmcuICovCisgIGdydWJfcmVnaXN0ZXJfY29tbWFuZCAoInNlcmlhbCIsIGdydWJfY21k X3NlcmlhbCwgR1JVQl9DT01NQU5EX0ZMQUdfQk9USCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAic2VyaWFsIFtPUFRJT05TLi4uXSIsICJDb25maWd1cmUgc2VyaWFsIHBvcnQuIiwg b3B0aW9ucyk7CisgIC8qIFNldCBkZWZhdWx0IHNldHRpbmdzLiAgKi8KKyAgc2VyaWFsX3Nl dHRpbmdzLnBvcnQgICAgICA9IHNlcmlhbF9od19nZXRfcG9ydCAoMCk7CisgIHNlcmlhbF9z ZXR0aW5ncy5kaXZpc29yICAgPSBzZXJpYWxfZ2V0X2Rpdmlzb3IgKDk2MDApOworICBzZXJp YWxfc2V0dGluZ3Mud29yZF9sZW4gID0gVUFSVF84QklUU19XT1JEOworICBzZXJpYWxfc2V0 dGluZ3MucGFyaXR5ICAgID0gVUFSVF9OT19QQVJJVFk7CisgIHNlcmlhbF9zZXR0aW5ncy5z dG9wX2JpdHMgPSBVQVJUXzFfU1RPUF9CSVQ7Cit9CisKK0dSVUJfTU9EX0ZJTkkKK3sKKyAg Z3J1Yl91bnJlZ2lzdGVyX2NvbW1hbmQgKCJzZXJpYWwiKTsKKyAgaWYgKHJlZ2lzdGVyZWQg PT0gMSkJCS8qIFVucmVnaXN0ZXIgdGVybWluYWwgb25seSBpZiByZWdpc3RlcmVkLiAqLwor ICAgIGdydWJfdGVybV91bnJlZ2lzdGVyICgmZ3J1Yl9zZXJpYWxfdGVybSk7Cit9Cg== --------------030900040402010608060806 Content-Type: text/plain; name="grub2.terminfo.changelog" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="grub2.terminfo.changelog" KiB0ZXJtL3Rlcm1pbmZvLmM6IENvcHkgZnJvbSBHUlVCIExlZ2FjeS4KaW5jbHVkZS9ncnVi L3Rlcm1pbmZvLmg6IExpa2V3aXNlClVwZGF0ZSBmb3IgR1JVQiAyLgpSZW1vdmUgdW51c2Vk IGZ1bmN0aW9ucy4KUmVtb3ZlIGRlcGVuZGVuY3kgb24gc2VyaWFsIG1vZHVsZS4KUmVuYW1l IGZ1bmN0aW9ucyB0byBtYXRjaCBHUlVCIDIgY29kaW5nIHN0eWxlLgpBZGQgcHJlbGltaW5h cnkgc3VwcG9ydCBmb3IgbXVsdGlwbGUgdGVybWluZm8gdHlwZXMuCkFkZCBHUlVCIDIgY29t bWFuZC4KCiogdGVybS90cGFybS5jOiBDb3B5IGZyb20gR1JVQiBMZWdhY3kuCmluY2x1ZGUv Z3J1Yi90cGFybS5oOiBMaWtld2lzZQpSZXN5bmMgd2l0aCBuY3Vyc2VzLTUuNC4KUmVuYW1l IGV4cG9ydGVkIGZ1bmN0aW9uIHRvIG1hdGNoIEdSVUIgMiBjb2Rpbmcgc3R5bGUKCiogY29u Zi9pMzg2LXBjLnJtayAocGtnZGF0YV9NT0RVTEVTKTogQWRkZWQgdGVybWluZm8ubW9kLgoo dGVybWluZm9fbW9kX1NPVVJDRVMpOiBOZXcgdmFyaWFibGUuCih0ZXJtaW5mb19tb2RfQ0ZM QUdTKTogTGlrZXdpc2UuCg== --------------030900040402010608060806 Content-Type: text/plain; name="grub2.serial.changelog" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="grub2.serial.changelog" KiB0ZXJtL2kzODYvcGMvc2VyaWFsLmM6IENvcHkgZnJvbSBHUlVCIExlZ2FjeS4KaW5jbHVk ZS9ncnViL2kzODYvcGMvc2VyaWFsLmg6IExpa2V3aXNlClVwZGF0ZSBmb3IgR1JVQiAyLgpS ZW5hbWUgZnVuY3Rpb25zIHRvIG1hdGNoIEdSVUIgMiBjb2Rpbmcgc3R5bGUuClJlc3RydWN0 dXJlIGNvZGUgdG8gbWluaW1pemUgc2NvcGVzIGFuZCBzaW1wbGlmeSBmdW5jdGlvbnMuCk1h a2UgYXNzZW1ibHkgZnVuY3Rpb25zIGlubGluZS4KQWRkIEdSVUIgMiBjb21tYW5kLgoKKiBj b25mL2kzODYtcGMucm1rIChwa2dkYXRhX01PRFVMRVMpOiBBZGRlZCBzZXJpYWwubW9kLgoo c2VyaWFsX21vZF9TT1VSQ0VTKTogTmV3IHZhcmlhYmxlLgooc2VyaWFsX21vZF9DRkxBR1Mp OiBMaWtld2lzZS4K --------------030900040402010608060806--