From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NmxJo-0000fv-P3 for qemu-devel@nongnu.org; Wed, 03 Mar 2010 17:45:28 -0500 Received: from [199.232.76.173] (port=57364 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NmxJn-0000fn-CP for qemu-devel@nongnu.org; Wed, 03 Mar 2010 17:45:27 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1NmxJf-000069-02 for qemu-devel@nongnu.org; Wed, 03 Mar 2010 17:45:27 -0500 Received: from sj-iport-4.cisco.com ([171.68.10.86]:61964) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.60) (envelope-from ) id 1NmxJH-0008UD-3C for qemu-devel@nongnu.org; Wed, 03 Mar 2010 17:45:18 -0500 Message-ID: <4B8EE632.7090303@cisco.com> Date: Wed, 03 Mar 2010 15:44:02 -0700 From: "David S. Ahern" MIME-Version: 1.0 Subject: Re: [Qemu-devel] Re: EHCI support in QEMU References: <4B7915B4.6040305@siemens.com> <1b51b6f81003011230pc6e5238odc48948a617e261f@mail.gmail.com> <4B8C2EFF.3030106@web.de> <4B8CED08.2030705@redhat.com> <1b51b6f81003030321g6a3eb47ak6a59267cae50b7f2@mail.gmail.com> In-Reply-To: <1b51b6f81003030321g6a3eb47ak6a59267cae50b7f2@mail.gmail.com> Content-Type: multipart/mixed; boundary="------------090505010901090803000005" List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Niels de Vos Cc: Taimoor Mirza , Kevin Wolf , Jan Kiszka , qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------090505010901090803000005 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 03/03/2010 04:21 AM, Niels de Vos wrote: > On Tue, Mar 2, 2010 at 10:48 AM, Kevin Wolf wrote: >> Am 01.03.2010 22:17, schrieb Jan Kiszka: >>> Niels de Vos wrote: >>>> If someone is interested in this partially ported patch, I'm happy to >>>> share, but it will at least need some attention to make it compile. >>>> After that, lots of tests need to be done and probably quite some >>>> bugfixes are required. I'm happy to assist, but do not have a lot of >>>> time to spare on this hobby project. On the occasion that it is something >>>> more solid and starting to do something, I will of course inform this list >>>> again. >>> >>> OK, to keep this heavy ball rolling, I would suggest posting your patch. >>> Either it's already in a good shape to get it merged as experimental >>> feature. Or I will pick it up in git tree, collect patches as they fly >>> in, and will keep on pushing it upstream. I can't promise spending much >>> time on hacking, but integration work, basic testing, and some more or >>> less helpful comments should be feasible. >> >> Yes, please post it. I won't promise anything either, but maybe I can >> find some time to help a bit. Anyway, I'd love to see EHCI in qemu. > > Okay, here it is. Please note that the patch is very raw, does not > compile and even basic things like indention is broken at the moment. > Please refer to > http://lists.gnu.org/archive/html/qemu-devel/2008-10/msg01326.html for > the original author, nothing seriously of this patch is done by me. > > Kind regards and thanks for your help, > Niels FWIW: the attached compiles and qemu does not die (patch created against qemu-kvm.git but applies to qemu.git as well). For now I disabled uhci so that the device is attached to the ehci bus. I can attach a usb key, but lsusb in the guest (fedora core 12) does not show it. David --------------090505010901090803000005 Content-Type: text/plain; name="qemu-ehci-03032010.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="qemu-ehci-03032010.patch" ZGlmZiAtLWdpdCBhL01ha2VmaWxlLnRhcmdldCBiL01ha2VmaWxlLnRhcmdldAppbmRleCA4 MmNhZjIwLi42OTMyNTE1IDEwMDY0NAotLS0gYS9NYWtlZmlsZS50YXJnZXQKKysrIGIvTWFr ZWZpbGUudGFyZ2V0CkBAIC0yMjMsNyArMjIzLDcgQEAgb2JqLWkzODYteSArPSBwY2tiZC5v ICQoc291bmQtb2JqLXkpIGRtYS5vCiBvYmotaTM4Ni15ICs9IHZnYS5vIHZnYS1wY2kubyB2 Z2EtaXNhLm8KIG9iai1pMzg2LXkgKz0gZmRjLm8gbWMxNDY4MThydGMubyBzZXJpYWwubyBp ODI1OS5vIGk4MjU0Lm8gcGNzcGsubyBwYy5vCiBvYmotaTM4Ni15ICs9IGNpcnJ1c192Z2Eu byBhcGljLm8gaW9hcGljLm8gcGFyYWxsZWwubyBhY3BpLm8gcGlpeF9wY2kubwotb2JqLWkz ODYteSArPSB1c2ItdWhjaS5vIHZtbW91c2UubyB2bXBvcnQubyB2bXdhcmVfdmdhLm8gaHBl dC5vCitvYmotaTM4Ni15ICs9IHVzYi11aGNpLm8gdXNiLWVoY2kubyB2bW1vdXNlLm8gdm1w b3J0Lm8gdm13YXJlX3ZnYS5vIGhwZXQubwogb2JqLWkzODYteSArPSBkZXZpY2UtaG90cGx1 Zy5vIHBjaS1ob3RwbHVnLm8gc21iaW9zLm8gd2R0X2liNzAwLm8KIG9iai1pMzg2LXkgKz0g ZXh0Ym9vdC5vCiBvYmotaTM4Ni15ICs9IG5lMjAwMC1pc2EubyBkZWJ1Z2Nvbi5vIG11bHRp Ym9vdC5vCmRpZmYgLS1naXQgYS9ody9wYy5jIGIvaHcvcGMuYwppbmRleCAwYWViYWU5Li44 ZjVjMGRjIDEwMDY0NAotLS0gYS9ody9wYy5jCisrKyBiL2h3L3BjLmMKQEAgLTI4LDYgKzI4 LDcgQEAKICNpbmNsdWRlICJ2bXdhcmVfdmdhLmgiCiAjaW5jbHVkZSAidXNiLXVoY2kuaCIK ICNpbmNsdWRlICJ1c2Itb2hjaS5oIgorI2luY2x1ZGUgInVzYi1laGNpLmgiCiAjaW5jbHVk ZSAicHJlcF9wY2kuaCIKICNpbmNsdWRlICJhcGJfcGNpLmgiCiAjaW5jbHVkZSAiYmxvY2su aCIKQEAgLTEwMzksOCArMTA0NCwxNCBAQCBzdGF0aWMgdm9pZCBwY19pbml0MShyYW1fYWRk cl90IHJhbV9zaXplLAogCiAgICAgY21vc19pbml0KGJlbG93XzRnX21lbV9zaXplLCBhYm92 ZV80Z19tZW1fc2l6ZSwgYm9vdF9kZXZpY2UsIGhkKTsKIAorICAgIC8vICBUT0RPIHRoZSBw aWl4MyBkb2VzIG5vdCBoYXZlIEVIQ0kgLSBsb29rcyBsaWtlIElDSDQKKwkvLyAgd2FzIGZp cnN0IHNvdXRoYnJpZGdlIHRvIHN1cHBvcnQgaXQuCiAgICAgaWYgKHBjaV9lbmFibGVkICYm IHVzYl9lbmFibGVkKSB7Ci0gICAgICAgIHVzYl91aGNpX3BpaXgzX2luaXQocGNpX2J1cywg cGlpeDNfZGV2Zm4gKyAyKTsKKyNpZiAwCisgICAgICAgIHVzYl91aGNpX3BpaXgzX2luaXQo cGNpX2J1cywgcGlpeDNfZGV2Zm4gKyAzKTsKKyNlbHNlCisgICAgICAgIHVzYl9laGNpX2lu aXQocGNpX2J1cywgcGlpeDNfZGV2Zm4gKyAyKTsKKyNlbmRpZgogICAgIH0KIAogICAgIGlm IChwY2lfZW5hYmxlZCAmJiBhY3BpX2VuYWJsZWQpIHsKZGlmZiAtLWdpdCBhL2h3L3BjaV9p ZHMuaCBiL2h3L3BjaV9pZHMuaAppbmRleCBmZTdhMTIxLi5hMWJkZjUwIDEwMDY0NAotLS0g YS9ody9wY2lfaWRzLmgKKysrIGIvaHcvcGNpX2lkcy5oCkBAIC04OSw2ICs4OSw3IEBACiAj ZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5URUwgICAgICAgICAgICAgIDB4ODA4NgogI2RlZmlu ZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQxICAgICAgICAweDEyMzcKICNkZWZpbmUgUENJ X0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzUgICAgMHgyNDE1CisjZGVmaW5lIFBDSV9ERVZJ Q0VfSURfSU5URUxfODI4MDFEICAgICAgIDB4MjRDRAogI2RlZmluZSBQQ0lfREVWSUNFX0lE X0lOVEVMX0VTQl85ICAgICAgICAweDI1YWIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRF TF84MjM3MVNCXzAgICAgMHg3MDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIz NzFTQl8xICAgIDB4NzAxMApkaWZmIC0tZ2l0IGEvaHcvdXNiLWVoY2kuYyBiL2h3L3VzYi1l aGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4ZWQ5ZQotLS0g L2Rldi9udWxsCisrKyBiL2h3L3VzYi1laGNpLmMKQEAgLTAsMCArMSwyMDgxIEBACisvKgor ICogUUVNVSBVU0IgRUhDSSBFbXVsYXRpb24KKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAg RW11dGV4IEx0ZC4gKGFkZHJlc3NAaGlkZGVuKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcihhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3 aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor ICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rv biwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIFRPRE86CisgKiAgbyBEb3duc3RyZWFt IHBvcnQgaGFuZG9mZgorICovCisKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInFlbXUt dGltZXIuaCIKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJwY2kuaCIKKyNpbmNsdWRl ICJ1c2ItZWhjaS5oIgorI2luY2x1ZGUgIm1vbml0b3IuaCIKKworI2RlZmluZSBFSENJX0RF QlVHIDEKKyNpZiBFSENJX0RFQlVHCisvLyNkZWZpbmUgREVCVUcoeCkgdGltZWRfcHJpbnRm IHggCisjZGVmaW5lIERFQlVHKHgpIHByaW50ZiB4CisjZWxzZQorI2RlZmluZSBERUJVRyh4 KQorI2VuZGlmCisvL3N0YXRpYyBpbnQgdGltZWRfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwg Li4uKTsKKworLy8gI2RlZmluZSBUREVCVUcKKy8vICNkZWZpbmUgREVCVUdfUEFDS0VUCisK KyNkZWZpbmUgQVNTRVJUKHgpIHsgaWYgKCEoeCkpIHsgcHJpbnRmKCJBc3NlcnRpb24gZmFp bGVkIGluIHVzYi1lY2hpLmMgbGluZSAlZFxuIiwgX19MSU5FX18pOyBleGl0KDEpOyB9IH0K KworI2RlZmluZSBNTUlPX1NJWkUgICAgICAgIDB4MTAwMAorCisjZGVmaW5lIENBUFJFR0JB U0UgICAgICAgMHgwMDAwICAgICAgICAvLyBDYXBhYmlsaXR5IFJlZ2lzdGVycyBCYXNlIEFk ZHJlc3MKKworI2RlZmluZSBDQVBMRU5HVEggICAgICAgIENBUFJFR0JBU0UgKyAweDAwMDAK KyNkZWZpbmUgSENJVkVSU0lPTiAgICAgICBDQVBSRUdCQVNFICsgMHgwMDAyCisjZGVmaW5l IEhDU1BBUkFNUyAgICAgICAgQ0FQUkVHQkFTRSArIDB4MDAwNAorI2RlZmluZSBIQ0NQQVJB TVMgICAgICAgIENBUFJFR0JBU0UgKyAweDAwMDgKKyNkZWZpbmUgRUVDUCAgICAgICAgICAg ICBIQ0NQQVJBTVMgKyAxCisjZGVmaW5lIEhDU1BQT1JUUk9VVEUxICAgQ0FQUkVHQkFTRSAr IDB4MDAwYworI2RlZmluZSBIQ1NQUE9SVFJPVVRFMiAgIENBUFJFR0JBU0UgKyAweDAwMTAK KworI2RlZmluZSBPUFJFR0JBU0UgICAgICAgIDB4MDAyMCAgICAgICAgLy8gT3BlcmF0aW9u YWwgUmVnaXN0ZXJzIEJhc2UgQWRkcmVzcworCisjZGVmaW5lIFVTQkNNRCAgICAgICAgICAg T1BSRUdCQVNFICsgMHgwMDAwCisjZGVmaW5lIFVTQkNNRF9SVU5TVE9QICAgKDEgPDwgMCkg ICAgICAvLyBydW4gLyBTdG9wCisjZGVmaW5lIFVTQkNNRF9IQ1JFU0VUICAgKDEgPDwgMSkg ICAgICAvLyBIQyBSZXNldAorI2RlZmluZSBVU0JDTURfRkxTICAgICAgICgzIDw8IDIpICAg ICAgLy8gRnJhbWUgTGlzdCBTaXplCisjZGVmaW5lIFVTQkNNRF9GTFNfU0ggICAgMiAgICAg ICAgICAgICAvLyBGcmFtZSBMaXN0IFNpemUgU2hpZnQKKyNkZWZpbmUgVVNCQ01EX1BTRSAg ICAgICAoMSA8PCA0KSAgICAgIC8vIFBlcmlvZGljIFNjaGVkdWxlIEVuYWJsZQorI2RlZmlu ZSBVU0JDTURfQVNFICAgICAgICgxIDw8IDUpICAgICAgLy8gQXN5bmNoIFNjaGVkdWxlIEVu YWJsZQorI2RlZmluZSBVU0JDTURfSUFBRCAgICAgICgxIDw8IDYpICAgICAgLy8gSW50IEFz eW5jaCBBZHZhbmNlIERvb3JiZWxsCisjZGVmaW5lIFVTQkNNRF9MSENSICAgICAgKDEgPDwg NykgICAgICAvLyBMaWdodCBIb3N0IENvbnRyb2xsZXIgUmVzZXQKKyNkZWZpbmUgVVNCQ01E X0FTUE1DICAgICAoMyA8PCA4KSAgICAgIC8vIEFzeW5jIFNjaGVkIFBhcmsgTW9kZSBDb3Vu dAorI2RlZmluZSBVU0JDTURfQVNQTUUgICAgICgxIDw8IDExKSAgICAgLy8gQXN5bmMgU2No ZWQgUGFyayBNb2RlIEVuYWJsZQorI2RlZmluZSBVU0JDTURfSVRDICAgICAgICgweDdmIDw8 IDE2KSAgLy8gSW50IFRocmVzaG9sZCBDb250cm9sCisjZGVmaW5lIFVTQkNNRF9JVENfU0gg ICAgMTYgICAgICAgICAgICAvLyBJbnQgVGhyZXNob2xkIENvbnRyb2wgU2hpZnQKKworI2Rl ZmluZSBVU0JTVFMgICAgICAgICAgIE9QUkVHQkFTRSArIDB4MDAwNAorI2RlZmluZSBVU0JT VFNfUk9fTUFTSyAgIDB4MDAwMDAwM2YKKyNkZWZpbmUgVVNCU1RTX0lOVCAgICAgICAoMSA8 PCAwKSAgICAgIC8vIFVTQiBJbnRlcnJ1cHQKKyNkZWZpbmUgVVNCU1RTX0VSUklOVCAgICAo MSA8PCAxKSAgICAgIC8vIEVycm9yIEludGVycnVwdAorI2RlZmluZSBVU0JTVFNfUENEICAg ICAgICgxIDw8IDIpICAgICAgLy8gUG9ydCBDaGFuZ2UgRGV0ZWN0CisjZGVmaW5lIFVTQlNU U19GTFIgICAgICAgKDEgPDwgMykgICAgICAvLyBGcmFtZSBMaXN0IFJvbGxvdmVyCisjZGVm aW5lIFVTQlNUU19IU0UgICAgICAgKDEgPDwgNCkgICAgICAvLyBIb3N0IFN5c3RlbSBFcnJv cgorI2RlZmluZSBVU0JTVFNfSUFBICAgICAgICgxIDw8IDUpICAgICAgLy8gSW50ZXJydXB0 IEFzeW5jIEFkdmFuY2UKKyNkZWZpbmUgVVNCU1RTX0hBTFQgICAgICAoMSA8PCAxMikgICAg IC8vIEhDIEhhbHRlZAorI2RlZmluZSBVU0JTVFNfUkVDICAgICAgICgxIDw8IDEzKSAgICAg Ly8gUmVjbGFtYXRpb24KKyNkZWZpbmUgVVNCU1RTX1BTUyAgICAgICAoMSA8PCAxNCkgICAg IC8vIFBlcmlvZGljIFNjaGVkdWxlIFN0YXR1cworI2RlZmluZSBVU0JTVFNfQVNTICAgICAg ICgxIDw8IDE1KSAgICAgLy8gQXN5bmNocm9ub3VzIFNjaGVkdWxlIFN0YXR1cworCisvKgor ICogIEludGVycnVwdCBlbmFibGUgYml0cyBjb3JyZXNwb25kIHRvIHRoZSBpbnRlcnJ1cHQg YWN0aXZlIGJpdHMgaW4gVVNCU1RTCisgKiAgc28gbm8gbmVlZCB0byByZWRlZmluZSBoZXJl LgorICovCisjZGVmaW5lIFVTQklOVFIgICAgICAgICAgICAgIE9QUkVHQkFTRSArIDB4MDAw OAorI2RlZmluZSBVU0JJTlRSX01BU0sgICAgICAgICAweDAwMDAwMDNmCisKKyNkZWZpbmUg RlJJTkRFWCAgICAgICAgICAgICAgT1BSRUdCQVNFICsgMHgwMDBjCisjZGVmaW5lIENUUkxE U1NFR01FTlQgICAgICAgIE9QUkVHQkFTRSArIDB4MDAxMAorI2RlZmluZSBQRVJJT0RJQ0xJ U1RCQVNFICAgICBPUFJFR0JBU0UgKyAweDAwMTQKKyNkZWZpbmUgQVNZTkNMSVNUQUREUiAg ICAgICAgT1BSRUdCQVNFICsgMHgwMDE4CisjZGVmaW5lIEFTWU5DTElTVEFERFJfTUFTSyAg IDB4ZmZmZmZmZTAKKworI2RlZmluZSBDT05GSUdGTEFHICAgICAgICAgICBPUFJFR0JBU0Ug KyAweDAwNDAKKworI2RlZmluZSBQT1JUU0MgICAgICAgICAgICAgICAoT1BSRUdCQVNFICsg MHgwMDQ0KQorI2RlZmluZSBQT1JUU0NfQkVHSU4gICAgICAgICBQT1JUU0MKKyNkZWZpbmUg UE9SVFNDX0VORCAgICAgICAgICAgKFBPUlRTQyArIDQgKiBOQl9QT1JUUykKKy8qCisgKiBC aXRzIHRoYXQgYXJlIHJlc2VydmVyZCBvciBhcmUgcmVhZC1vbmx5IGFyZSBtYXNrZWQgb3V0 IG9mIHZhbHVlcworICogd3JpdHRlbiB0byB1cyBieSBzb2Z0d2FyZQorICovCisjZGVmaW5l IFBPUlRTQ19ST19NQVNLICAgICAgIDB4MDA3MDIxYzUKKyNkZWZpbmUgUE9SVFNDX1JXQ19N QVNLICAgICAgMHgwMDAwMDAyYQorI2RlZmluZSBQT1JUU0NfV0tPQ19FICAgICAgICAoMSA8 PCAyMikgICAgLy8gV2FrZSBvbiBPdmVyIEN1cnJlbnQgRW5hYmxlCisjZGVmaW5lIFBPUlRT Q19XS0RTX0UgICAgICAgICgxIDw8IDIxKSAgICAvLyBXYWtlIG9uIERpc2Nvbm5lY3QgRW5h YmxlCisjZGVmaW5lIFBPUlRTQ19XS0NOX0UgICAgICAgICgxIDw8IDIwKSAgICAvLyBXYWtl IG9uIENvbm5lY3QgRW5hYmxlCisjZGVmaW5lIFBPUlRTQ19QVEMgICAgICAgICAgICgxNSA8 PCAxNikgICAvLyBQb3J0IFRlc3QgQ29udHJvbAorI2RlZmluZSBQT1JUU0NfUFRDX1NIICAg ICAgICAxNiAgICAgICAgICAgLy8gUG9ydCBUZXN0IENvbnRyb2wgc2hpZnQKKyNkZWZpbmUg UE9SVFNDX1BJQyAgICAgICAgICAgKDMgPDwgMTQpICAgIC8vIFBvcnQgSW5kaWNhdG9yIENv bnRyb2wKKyNkZWZpbmUgUE9SVFNDX1BJQ19TSCAgICAgICAgMTQgICAgICAgICAgIC8vIFBv cnQgSW5kaWNhdG9yIENvbnRyb2wgU2hpZnQKKyNkZWZpbmUgUE9SVFNDX1BPV05FUiAgICAg ICAgKDEgPDwgMTMpICAgIC8vIFBvcnQgT3duZXIKKyNkZWZpbmUgUE9SVFNDX1BQT1dFUiAg ICAgICAgKDEgPDwgMTIpICAgIC8vIFBvcnQgUG93ZXIKKyNkZWZpbmUgUE9SVFNDX0xJTkVT VEFUICAgICAgKDMgPDwgMTApICAgIC8vIFBvcnQgTGluZSBTdGF0dXMKKyNkZWZpbmUgUE9S VFNDX0xJTkVTVEFUX1NIICAgMTAgICAgICAgICAgIC8vIFBvcnQgTGluZSBTdGF0dXMgU2hp ZnQKKyNkZWZpbmUgUE9SVFNDX1BSRVNFVCAgICAgICAgKDEgPDwgOCkgICAgIC8vIFBvcnQg UmVzZXQKKyNkZWZpbmUgUE9SVFNDX1NVU1BFTkQgICAgICAgKDEgPDwgNykgICAgIC8vIFBv cnQgU3VzcGVuZAorI2RlZmluZSBQT1JUU0NfRlBSRVMgICAgICAgICAoMSA8PCA2KSAgICAg Ly8gRm9yY2UgUG9ydCBSZXN1bWUKKyNkZWZpbmUgUE9SVFNDX09DQyAgICAgICAgICAgKDEg PDwgNSkgICAgIC8vIE92ZXIgQ3VycmVudCBDaGFuZ2UKKyNkZWZpbmUgUE9SVFNDX09DQSAg ICAgICAgICAgKDEgPDwgNCkgICAgIC8vIE92ZXIgQ3VycmVudCBBY3RpdmUKKyNkZWZpbmUg UE9SVFNDX1BFREMgICAgICAgICAgKDEgPDwgMykgICAgIC8vIFBvcnQgRW5hYmxlL0Rpc2Fi bGUgQ2hhbmdlCisjZGVmaW5lIFBPUlRTQ19QRUQgICAgICAgICAgICgxIDw8IDIpICAgICAv LyBQb3J0IEVuYWJsZS9EaXNhYmxlCisjZGVmaW5lIFBPUlRTQ19DU0MgICAgICAgICAgICgx IDw8IDEpICAgICAvLyBDb25uZWN0IFN0YXR1cyBDaGFuZ2UKKyNkZWZpbmUgUE9SVFNDX0NP Tk5FQ1QgICAgICAgKDEgPDwgMCkgICAgIC8vIEN1cnJlbnQgQ29ubmVjdCBTdGF0dXMKKwor Ly8jZGVmaW5lIEVIQ0lfTk9NSUNST0ZSQU1FUworCisjaWZkZWYgRUhDSV9OT01JQ1JPRlJB TUVTCisjZGVmaW5lIEZSQU1FX1RJTUVSX0ZSRVEgMjAwMAorI2Vsc2UKKyNkZWZpbmUgRlJB TUVfVElNRVJfRlJFUSA4MDAwCisjZW5kaWYKKworI2RlZmluZSBOQl9NQVhJTlRSQVRFICAg IDggICAgICAgIC8vIE1heCByYXRlIGF0IHdoaWNoIGNvbnRyb2xsZXIgaXNzdWVzIGludHMK KyNkZWZpbmUgTkJfUE9SVFMgICAgICAgICA0ICAgICAgICAvLyBOdW1iZXIgb2YgZG93bnN0 cmVhbSBwb3J0cworI2RlZmluZSBCVUZGX1NJWkUgICAgICAgIDIwNDgwICAgIC8vIE1heCBi eXRlcyB0byB0cmFuc2ZlciBwZXIgdHJhbnNhY3Rpb24KKyNkZWZpbmUgTUFYX0lURVJBVElP TlMgICAxMDAwICAgICAvLyBNYXggbnVtYmVyIG9mIHN0YXRlcyBiZWZvcmUgd2UgYWJvcnQK KyNkZWZpbmUgTUFYX1FIICAgICAgICAgICAxMDAwICAgICAvLyBNYXggYWxsb3dhYmxlIHF1 ZXVlIGhlYWRzIGluIGEgY2hhaW4KKworLyogIEludGVybmFsIHBlcmlvZGljIC8gYXN5bmNo cm9ub3VzIHNjaGVkdWxlIHN0YXRlIG1hY2hpbmUgc3RhdGVzCisgKi8KK3R5cGVkZWYgZW51 bSB7CisgICAgRVNUX0lOQUNUSVZFID0gMTAwMCwKKyAgICBFU1RfQUNUSVZFLAorICAgIEVT VF9FWEVDVVRJTkcsCisgICAgRVNUX1NMRUVQSU5HLAorICAgIC8qICBUaGUgZm9sbG93aW5n IHN0YXRlcyBhcmUgaW50ZXJuYWwgdG8gdGhlIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb24KKyAg ICAqLworICAgIEVTVF9XQUlUTElTVEhFQUQsCisgICAgRVNUX0RPUkVMT0FELAorICAgIEVT VF9XQUlUU1RBUlRFVkVOVCwKKyAgICBFU1RfRkVUQ0hFTlRSWSwKKyAgICBFU1RfRkVUQ0hR SCwKKyAgICBFU1RfRkVUQ0hJVEQsCisgICAgRVNUX0FEVkFOQ0VRVUVVRSwKKyAgICBFU1Rf RkVUQ0hRVEQsCisgICAgRVNUX0VYRUNVVEUsCisgICAgRVNUX1dSSVRFQkFDSywKKyAgICBF U1RfSE9SSVpPTlRBTFFICit9IEVIQ0lfU1RBVEVTOworCisvKiAgRUhDSSBzcGVjIHZlcnNp b24gMS4wIFNlY3Rpb24gMy4zCisgKi8KK3R5cGVkZWYgc3RydWN0IEVIQ0lpdGQgeworICAg IHVpbnQzMl90IG5leHQ7CisjZGVmaW5lIE5MUFRSX0dFVCh4KSAgICAgICAgICAgICAoKHgp ICYgMHhmZmZmZmZlMCkKKyNkZWZpbmUgTkxQVFJfVFlQRV9HRVQoeCkgICAgICAgICgoKHgp ID4+IDEpICYgMykKKyNkZWZpbmUgTkxQVFJfVFlQRV9JVEQgICAgICAgICAgIDAKKyNkZWZp bmUgTkxQVFJfVFlQRV9RSCAgICAgICAgICAgIDEKKyNkZWZpbmUgTkxQVFJfVFlQRV9TVElU RCAgICAgICAgIDIKKyNkZWZpbmUgTkxQVFJfVFlQRV9GU1ROICAgICAgICAgIDMKKyNkZWZp bmUgTkxQVFJfVEJJVCh4KSAgICAgICAgICAgICgoeCkgJiAxKQorCisgICAgdWludDMyX3Qg dHJhbnNhY3RbOF07CisjZGVmaW5lIElURF9YQUNUX0FDVElWRSAgICAgICAgICAoMSA8PCAz MSkKKyNkZWZpbmUgSVREX1hBQ1RfREJFUlJPUiAgICAgICAgICgxIDw8IDMwKQorI2RlZmlu ZSBJVERfWEFDVF9CQUJCTEUgICAgICAgICAgKDEgPDwgMjkpCisjZGVmaW5lIElURF9YQUNU X1hBQ1RFUlIgICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgSVREX1hBQ1RfTEVOR1RIX01B U0sgICAgIDB4MGZmZjAwMDAKKyNkZWZpbmUgSVREX1hBQ1RfTEVOR1RIX1NIICAgICAgIDE2 CisjZGVmaW5lIElURF9YQUNUX0lPQyAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUg SVREX1hBQ1RfUEdTRUxfTUFTSyAgICAgIDB4MDAwMDcwMDAKKyNkZWZpbmUgSVREX1hBQ1Rf UEdTRUxfU0ggICAgICAgIDEyCisjZGVmaW5lIElURF9YQUNUX09GRlNFVF9NQVNLICAgICAw eDAwMDAwZmZmCisKKyAgICB1aW50MzJfdCBidWZwdHJbN107CisjZGVmaW5lIElURF9CVUZQ VFJfTUFTSyAgICAgICAgICAweGZmZmZmMDAwCisjZGVmaW5lIElURF9CVUZQVFJfU0ggICAg ICAgICAgICAxMgorI2RlZmluZSBJVERfQlVGUFRSX0VQX01BU0sgICAgICAgMHgwMDAwMGYw MAorI2RlZmluZSBJVERfQlVGUFRSX0VQX1NIICAgICAgICAgOAorI2RlZmluZSBJVERfQlVG UFRSX0RFVkFERFJfTUFTSyAgMHgwMDAwMDA3ZgorI2RlZmluZSBJVERfQlVGUFRSX0RJUkVD VElPTiAgICAgKDEgPDwgMTEpCisjZGVmaW5lIElURF9CVUZQVFJfTUFYUEtUX01BU0sgICAw eDAwMDAwN2ZmCisjZGVmaW5lIElURF9CVUZQVFJfTVVMVF9NQVNLICAgICAweDAwMDAwMDAz Cit9IEVIQ0lpdGQ7CisKKy8qICBFSENJIHNwZWMgdmVyc2lvbiAxLjAgU2VjdGlvbiAzLjQK KyAqLwordHlwZWRlZiBzdHJ1Y3QgRUhDSXNpdGQgeworICAgIHVpbnQzMl90IG5leHQ7ICAg ICAgICAgICAgICAgICAgLy8gU3RhbmRhcmQgbmV4dCBsaW5rIHBvaW50ZXIKKyAgICB1aW50 MzJfdCBlcGNoYXI7CisjZGVmaW5lIFNJVERfRVBDSEFSX0lPICAgICAgICAgICAgICAoMSA8 PCAzMSkKKyNkZWZpbmUgU0lURF9FUENIQVJfUE9SVE5VTV9NQVNLICAgIDB4N2YwMDAwMDAK KyNkZWZpbmUgU0lURF9FUENIQVJfUE9SVE5VTV9TSCAgICAgIDI0CisjZGVmaW5lIFNJVERf RVBDSEFSX0hVQkFERF9NQVNLICAgICAweDAwN2YwMDAwCisjZGVmaW5lIFNJVERfRVBDSEFS X0hVQkFERFJfU0ggICAgICAxNgorI2RlZmluZSBTSVREX0VQQ0hBUl9FUE5VTV9NQVNLICAg ICAgMHgwMDAwMGYwMAorI2RlZmluZSBTSVREX0VQQ0hBUl9FUE5VTV9TSCAgICAgICAgOAor I2RlZmluZSBTSVREX0VQQ0hBUl9ERVZBRERSX01BU0sgICAgMHgwMDAwMDA3ZgorCisgICAg dWludDMyX3QgdWZyYW1lOworI2RlZmluZSBTSVREX1VGUkFNRV9DTUFTS19NQVNLICAgICAg MHgwMDAwZmYwMAorI2RlZmluZSBTSVREX1VGUkFNRV9DTUFTS19TSCAgICAgICAgOAorI2Rl ZmluZSBTSVREX1VGUkFNRV9TTUFTS19NQVNLICAgICAgMHgwMDAwMDBmZgorCisgICAgdWlu dDMyX3QgcmVzdWx0czsKKyNkZWZpbmUgU0lURF9SRVNVTFRTX0lPQyAgICAgICAgICAgICAg KDEgPDwgMzEpCisjZGVmaW5lIFNJVERfUkVTVUxUU19QR1NFTCAgICAgICAgICAgICgxIDw8 IDMwKQorI2RlZmluZSBTSVREX1JFU1VMVFNfVEJZVEVTX01BU0sgICAgICAweDAzZmYwMDAw CisjZGVmaW5lIFNJVERfUkVTVUxUU19UWUJZVEVTX1NIICAgICAgIDE2CisjZGVmaW5lIFNJ VERfUkVTVUxUU19DUFJPR01BU0tfTUFTSyAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgU0lURF9S RVNVTFRTX0NQUk9HTUFTS19TSCAgICAgOAorI2RlZmluZSBTSVREX1JFU1VMVFNfQUNUSVZF ICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBTSVREX1JFU1VMVFNfRVJSICAgICAgICAg ICAgICAoMSA8PCA2KQorI2RlZmluZSBTSVREX1JFU1VMVFNfREJFUlIgICAgICAgICAgICAo MSA8PCA1KQorI2RlZmluZSBTSVREX1JFU1VMVFNfQkFCQkxFICAgICAgICAgICAoMSA8PCA0 KQorI2RlZmluZSBTSVREX1JFU1VMVFNfWEFDVEVSUiAgICAgICAgICAoMSA8PCAzKQorI2Rl ZmluZSBTSVREX1JFU1VMVFNfTUlTU0VEVUYgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBT SVREX1JFU1VMVFNfU1BMSVRYU1RBVEUgICAgICAoMSA8PCAxKQorCisgICAgdWludDMyX3Qg YnVmcHRyWzJdOworI2RlZmluZSBCVUZQVFJfTUFTSyAgICAgICAgICAgICAgICAgICAweGZm ZmZmMDAwCisjZGVmaW5lIEJVRlBUUl9DVVJST0ZGX01BU0sgICAgICAgICAgIDB4MDAwMDBm ZmYKKyNkZWZpbmUgQlVGUFRSX1RQT1NfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAxOAor I2RlZmluZSBCVUZQVFJfVFBPU19TSCAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEJVRlBU Ul9UQ05UX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKworICAgIHVpbnQzMl90IGJh Y2twdHI7ICAgICAgICAgICAgICAgICAvLyBTdGFuZGFyZCBuZXh0IGxpbmsgcG9pbnRlcgor fSBFSENJc2l0ZDsKKworLyogIEVIQ0kgc3BlYyB2ZXJzaW9uIDEuMCBTZWN0aW9uIDMuNQor ICovCit0eXBlZGVmIHN0cnVjdCBFSENJcXRkIHsKKyAgICB1aW50MzJfdCBuZXh0OyAgICAg ICAgICAgICAgICAgICAgLy8gU3RhbmRhcmQgbmV4dCBsaW5rIHBvaW50ZXIKKyAgICB1aW50 MzJfdCBhbHRuZXh0OyAgICAgICAgICAgICAgICAgLy8gU3RhbmRhcmQgbmV4dCBsaW5rIHBv aW50ZXIKKyAgICB1aW50MzJfdCB0b2tlbjsKKyNkZWZpbmUgUVREX1RPS0VOX0RUT0dHTEUg ICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIFFURF9UT0tFTl9UQllURVNfTUFTSyAg ICAgICAgIDB4N2ZmZjAwMDAKKyNkZWZpbmUgUVREX1RPS0VOX1RCWVRFU19TSCAgICAgICAg ICAgMTYKKyNkZWZpbmUgUVREX1RPS0VOX0lPQyAgICAgICAgICAgICAgICAgKDEgPDwgMTUp CisjZGVmaW5lIFFURF9UT0tFTl9DUEFHRV9NQVNLICAgICAgICAgIDB4MDAwMDcwMDAKKyNk ZWZpbmUgUVREX1RPS0VOX0NQQUdFX1NIICAgICAgICAgICAgMTIKKyNkZWZpbmUgUVREX1RP S0VOX0NFUlJfTUFTSyAgICAgICAgICAgMHgwMDAwMGMwMAorI2RlZmluZSBRVERfVE9LRU5f Q0VSUl9TSCAgICAgICAgICAgICAxMAorI2RlZmluZSBRVERfVE9LRU5fUElEX01BU0sgICAg ICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIFFURF9UT0tFTl9QSURfU0ggICAgICAgICAg ICAgIDgKKyNkZWZpbmUgUVREX1RPS0VOX0FDVElWRSAgICAgICAgICAgICAgKDEgPDwgNykK KyNkZWZpbmUgUVREX1RPS0VOX0hBTFQgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZp bmUgUVREX1RPS0VOX0RCRVJSICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgUVRE X1RPS0VOX0JBQkJMRSAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgUVREX1RPS0VO X1hBQ1RFUlIgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgUVREX1RPS0VOX01JU1NF RFVGICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgUVREX1RPS0VOX1NQTElUWFNUQVRF ICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgUVREX1RPS0VOX1BJTkcgICAgICAgICAgICAg ICAgKDEgPDwgMCkKKworICAgIHVpbnQzMl90IGJ1ZnB0cls1XTsgICAgICAgICAgICAgICAv LyBTdGFuZGFyZCBidWZmZXIgcG9pbnRlcgorfSBFSENJcXRkOworCisvKiAgRUhDSSBzcGVj IHZlcnNpb24gMS4wIFNlY3Rpb24gMy42CisgKi8KK3R5cGVkZWYgc3RydWN0IEVIQ0lxaCB7 CisgICAgdWludDMyX3QgbmV4dDsgICAgICAgICAgICAgICAgICAgIC8vIFN0YW5kYXJkIG5l eHQgbGluayBwb2ludGVyCisKKyAgICB1aW50MzJfdCBlcGNoYXI7CisjZGVmaW5lIFFIX0VQ Q0hBUl9STF9NQVNLICAgICAgICAgICAgIDB4ZjAwMDAwMDAKKyNkZWZpbmUgUUhfRVBDSEFS X1JMX1NIICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgUUhfRVBDSEFSX0MgICAgICAgICAg ICAgICAgICAgKDEgPDwgMjcpCisjZGVmaW5lIFFIX0VQQ0hBUl9NUExFTl9NQVNLICAgICAg ICAgIDB4MDdGRjAwMDAKKyNkZWZpbmUgUUhfRVBDSEFSX01QTEVOX1NIICAgICAgICAgICAg MTYKKyNkZWZpbmUgUUhfRVBDSEFSX0ggICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisj ZGVmaW5lIFFIX0VQQ0hBUl9EVEMgICAgICAgICAgICAgICAgICgxIDw8IDE0KQorI2RlZmlu ZSBRSF9FUENIQVJfRVBTX01BU0sgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIFFI X0VQQ0hBUl9FUFNfU0ggICAgICAgICAgICAgIDEyCisjZGVmaW5lIFFIX0VQQ0hBUl9FUF9N QVNLICAgICAgICAgICAgIDB4MDAwMDBmMDAKKyNkZWZpbmUgUUhfRVBDSEFSX0VQX1NIICAg ICAgICAgICAgICAgOAorI2RlZmluZSBRSF9FUENIQVJfSSAgICAgICAgICAgICAgICAgICAo MSA8PCA3KQorI2RlZmluZSBRSF9FUENIQVJfREVWQUREUl9NQVNLICAgICAgICAweDAwMDAw MDdmCisKKyAgICB1aW50MzJfdCBlcGNhcDsKKyNkZWZpbmUgUUhfRVBDQVBfTVVMVF9NQVNL ICAgICAgICAgICAgMHhjMDAwMDAwMAorI2RlZmluZSBRSF9FUENBUF9NVUxUX1NIICAgICAg ICAgICAgICAzMAorI2RlZmluZSBRSF9FUENBUF9QT1JUTlVNX01BU0sgICAgICAgICAweDNm ODAwMDAwCisjZGVmaW5lIFFIX0VQQ0FQX1BPUlROVU1fU0ggICAgICAgICAgIDIzCisjZGVm aW5lIFFIX0VQQ0FQX0hVQkFERFJfTUFTSyAgICAgICAgIDB4MDA3ZjAwMDAKKyNkZWZpbmUg UUhfRVBDQVBfSFVCQUREUl9TSCAgICAgICAgICAgMTYKKyNkZWZpbmUgUUhfRVBDQVBfQ01B U0tfTUFTSyAgICAgICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBRSF9FUENBUF9DTUFTS19T SCAgICAgICAgICAgICA4CisjZGVmaW5lIFFIX0VQQ0FQX1NNQVNLX01BU0sgICAgICAgICAg IDB4MDAwMDAwZmYKKworICAgIHVpbnQzMl90IGN1cnJlbnQ7ICAgICAgICAgICAgICAgICAv LyBTdGFuZGFyZCBuZXh0IGxpbmsgcG9pbnRlcgorICAgIHVpbnQzMl90IHF0ZG5leHQ7ICAg ICAgICAgICAgICAgICAvLyBTdGFuZGFyZCBuZXh0IGxpbmsgcG9pbnRlcgorICAgIHVpbnQz Ml90IGFsdG5leHQ7CisjZGVmaW5lIFFIX0FMVE5FWFRfTkFLQ05UX01BU0sgICAgICAgIDB4 MDAwMDAwMWUKKyNkZWZpbmUgUUhfQUxUTkVYVF9OQUtDTlRfU0ggICAgICAgICAgMQorCisg ICAgdWludDMyX3QgdG9rZW47ICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYXMgUVREIHRv a2VuCisgICAgdWludDMyX3QgYnVmcHRyWzVdOyAgICAgICAgICAgICAgIC8vIFN0YW5kYXJk IGJ1ZmZlciBwb2ludGVyCisjZGVmaW5lIEJVRlBUUl9DUFJPR01BU0tfTUFTSyAgICAgICAg IDB4MDAwMDAwZmYKKyNkZWZpbmUgQlVGUFRSX0ZSQU1FVEFHX01BU0sgICAgICAgICAgMHgw MDAwMDAxZgorI2RlZmluZSBCVUZQVFJfU0JZVEVTX01BU0sgICAgICAgICAgICAweDAwMDAw ZmUwCisjZGVmaW5lIEJVRlBUUl9TQllURVNfU0ggICAgICAgICAgICAgIDUKK30gRUhDSXFo OworCisvKiAgRUhDSSBzcGVjIHZlcnNpb24gMS4wIFNlY3Rpb24gMy43CisgKi8KK3R5cGVk ZWYgc3RydWN0IEVIQ0lmc3RuIHsKKyAgICB1aW50MzJfdCBuZXh0OyAgICAgICAgICAgICAg ICAgICAgLy8gU3RhbmRhcmQgbmV4dCBsaW5rIHBvaW50ZXIKKyAgICB1aW50MzJfdCBiYWNr cHRyOyAgICAgICAgICAgICAgICAgLy8gU3RhbmRhcmQgbmV4dCBsaW5rIHBvaW50ZXIKK30g RUhDSWZzdG47CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQQ0lEZXZpY2UgZGV2OworICAg IHFlbXVfaXJxIGlycTsKKyAgICB0YXJnZXRfcGh5c19hZGRyX3QgbWVtX2Jhc2U7CisgICAg aW50IG1lbTsKKyAgICBpbnQgbnVtX3BvcnRzOworICAgIC8qCisgICAgICogIEVIQ0kgc3Bl YyB2ZXJzaW9uIDEuMCBTZWN0aW9uIDIuMworICAgICAqICBIb3N0IENvbnRyb2xsZXIgT3Bl cmF0aW9uYWwgUmVnaXN0ZXJzCisgICAgICovCisgICAgdW5pb24geworICAgICAgICB1aW50 OF90IG1taW9bTU1JT19TSVpFXTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVp bnQ4X3QgY2FwW09QUkVHQkFTRV07CisgICAgICAgICAgICB1aW50MzJfdCB1c2JjbWQ7Cisg ICAgICAgICAgICB1aW50MzJfdCB1c2JzdHM7CisgICAgICAgICAgICB1aW50MzJfdCB1c2Jp bnRyOworICAgICAgICAgICAgdWludDMyX3QgZnJpbmRleDsKKyAgICAgICAgICAgIHVpbnQz Ml90IGN0cmxkc3NlZ21lbnQ7CisgICAgICAgICAgICB1aW50MzJfdCBwZXJpb2RpY2xpc3Ri YXNlOworICAgICAgICAgICAgdWludDMyX3QgYXN5bmNsaXN0YWRkcjsKKyAgICAgICAgICAg IHVpbnQzMl90IG5vdHVzZWRbOV07CisgICAgICAgICAgICB1aW50MzJfdCBjb25maWdmbGFn OworICAgICAgICAgICAgdWludDMyX3QgcG9ydHNjW05CX1BPUlRTXTsKKyAgICAgICAgfTsK KyAgICB9OworICAgIC8qCisgICAgICogIEludGVybmFsIHN0YXRlcywgc2hhZG93IHJlZ2lz dGVycywgZXRjCisgICAgICovCisgICAgdWludDMyX3Qgc29mdjsKKyAgICBRRU1VVGltZXIg KmZyYW1lX3RpbWVyOworICAgIGludCBhdHRhY2hfcG9sbF9jb3VudGVyOworICAgIGludCBh c3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudCBzdGF0ZSBpbiBhc3lu Y2hyb25vdXMgc2NoZWR1bGUKKyAgICBpbnQgcHN0YXRlOyAgICAgICAgICAgICAgICAgICAg ICAgIC8vIEN1cnJlbnQgc3RhdGUgaW4gcGVyaW9kaWMgc2NoZWR1bGUKKyAgICBVU0JQb3J0 IHBvcnRzW05CX1BPUlRTXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcltCVUZGX1NJWkVd OworICAgIEVIQ0lxaCBxaDsKKyAgICBFSENJcXRkIHF0ZDsKKyAgICBVU0JCdXMgYnVzOwor ICAgIFVTQlBhY2tldCB1c2JfcGFja2V0OworICAgIGludCBhc3luY19wb3J0X2luX3Byb2dy ZXNzOworICAgIGludCBhc3luY19jb21wbGV0ZTsKKyAgICB1aW50MzJfdCBxaGFkZHI7Cisg ICAgdWludDMyX3QgaXRkYWRkcjsKKyAgICB1aW50MzJfdCBxdGRhZGRyOworICAgIHVpbnQz Ml90IHRieXRlczsKKyAgICBpbnQgcGlkOworICAgIGludCBleGVjX3N0YXR1czsKKyAgICBp bnQgaXNvY2hfcGF1c2U7CisgICAgdWludDMyX3QgbGFzdF9ydW5fdXNlYzsKKyAgICB1aW50 MzJfdCBmcmFtZV9lbmRfdXNlYzsKK30gRUhDSVN0YXRlOworCitzdGF0aWMgaW5saW5lIHVp bnQzMl90IGdldF9maWVsZCh1aW50MzJfdCBkYXRhLCB1aW50MzJfdCBtYXNrLCBpbnQgc2hp ZnQpCit7CisgICAgcmV0dXJuKChkYXRhICYgbWFzaykgPj4gc2hpZnQpOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgc2V0X2ZpZWxkKHVpbnQzMl90ICpkYXRhLCB1aW50MzJfdCB2YWws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtYXNrLCBpbnQgc2hp ZnQpCit7CisgICAgKmRhdGEgJj0gfm1hc2s7CisgICAgKmRhdGEgfD0odmFsIDw8IHNoaWZ0 KTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9wdHIoY29uc3QgY2hhciAqcywgdWludDMyX3Qg cHRyLCBpbnQgaGFzX3R5cGUpCit7CisgICAgaW50IHQgPSBOTFBUUl9UWVBFX0dFVChwdHIp OworCisgICAgcHJpbnRmKCIlcyUwOFgiLCBzLCBOTFBUUl9HRVQocHRyKSk7CisKKyAgICBp ZiAoaGFzX3R5cGUpIHsKKyAgICAgICAgcHJpbnRmKCIoUFRSIHR5cGUgaXMgJXMpIiwKKyAg ICAgICAgICAgIHQgPT0gTkxQVFJfVFlQRV9JVEQgPyAiSVREIiA6CisgICAgICAgICAgICh0 ID09IE5MUFRSX1RZUEVfUUggPyAiUUgiIDoKKyAgICAgICAgICAgKHQgPT0gTkxQVFJfVFlQ RV9TVElURCA/ICJTVElURCIgOgorICAgICAgICAgICAodCA9PSBOTFBUUl9UWVBFX0ZTVE4g PyAiRlNUTiIgOiAiKioqKiIpKSkpOworICAgIH0KKworICAgIHByaW50ZigiJXNcbiIsIE5M UFRSX1RCSVQocHRyKSA/ICIgVEJJVCBzZXQiIDogIiIpOworfQorCitzdGF0aWMgdm9pZCBk dW1wX3F0ZChFSENJcXRkICpxdGQsIHVpbnQzMl90IHF0ZGFkZHIpCit7CisgICAgaW50IHBp ZDsKKworICAgIHBpZCA9KHF0ZC0+dG9rZW4gJiBRVERfVE9LRU5fUElEX01BU0spID4+IFFU RF9UT0tFTl9QSURfU0g7CisKKyAgICBwcmludGYoIiAgICBRVEQgYW5hbHlzaXMgICAgICAl MDhYXG4iCisgICAgICAgICAgICAiICAgID09PSA9PT09PT09PSAgICAgID09PT09PT09XG4i LCBxdGRhZGRyKTsKKworICAgIHByaW50ZigiICAgIE5ha0NudDogICAgICAgICAgICVkXG4i LAorICAgICAgICAgICAgIChxdGQtPmFsdG5leHQgJiBRSF9BTFRORVhUX05BS0NOVF9NQVNL KSA+PiBRSF9BTFRORVhUX05BS0NOVF9TSCk7CisgICAgZHVtcF9wdHIoIiAgICBOZXh0OiAg ICAgICAgICAgICAiLCBxdGQtPm5leHQsIDApOworICAgIGR1bXBfcHRyKCIgICAgQWx0ZXJu YXRlOiAgICAgICAgIiwgcXRkLT5hbHRuZXh0LCAwKTsKKyAgICBwcmludGYoIiAgICBEYXRh IFRvZ2dsZTogICAgICAlcyAgICAgICAgIiwKKyAgICAgICAgICAgICAgcXRkLT50b2tlbiAm IFFURF9UT0tFTl9EVE9HR0xFID8gIlllcyAiIDogIk5vICAiKTsKKyAgICBwcmludGYoIiAg ICBUb3RhbCBCeXRlczogICAgICAlZFxuIiwKKyAgICAgICAgICAgICAocXRkLT50b2tlbiAm IFFURF9UT0tFTl9UQllURVNfTUFTSykgPj4gUVREX1RPS0VOX1RCWVRFU19TSCk7CisgICAg cHJpbnRmKCIgICAgSU9DOiAgICAgICAgICAgICAgJXMgICAgICAgICIsCisgICAgICAgICAg ICAgIHF0ZC0+dG9rZW4gJiBRVERfVE9LRU5fSU9DID8gIlllcyAiIDogIk5vICAiKTsKKyAg ICBwcmludGYoIiAgICBDX1BhZ2U6ICAgICAgICAgICAlZFxuIiwKKyAgICAgICAgICAgICAo cXRkLT50b2tlbiAmIFFURF9UT0tFTl9DUEFHRV9NQVNLKSA+PiBRVERfVE9LRU5fQ1BBR0Vf U0gpOworICAgIHByaW50ZigiICAgIENFcnI6ICAgICAgICAgICAgICUtNGQgICAgICAgICIs CisgICAgICAgICAgICAgKHF0ZC0+dG9rZW4gJiBRVERfVE9LRU5fQ0VSUl9NQVNLKSA+PiBR VERfVE9LRU5fQ0VSUl9TSCk7CisgICAgcHJpbnRmKCIgICAgUElEIGNvZGU6ICAgICAgICAg JXNcbiIsCisgICAgICAgICAgICAgIHBpZCA9PSAwID8gIk9VVCIgOgorICAgICAgICAgICAg IChwaWQgPT0gMSA/ICJJTiIgOgorICAgICAgICAgICAgIChwaWQgPT0gMiA/ICJTRVRVUCIg OiAiKioqKiIpKSk7CisgICAgcHJpbnRmKCIgICAgRmxhZ3M6ICAgICAgICAgICAgJXMlcyVz JXMlcyVzJXMlc1xuIiwKKyAgICAgICAgICAgICAgcXRkLT50b2tlbiAmIFFURF9UT0tFTl9B Q1RJVkUgPyAiQUNUSVZFICIgOiAiIiwKKyAgICAgICAgICAgICAgcXRkLT50b2tlbiAmIFFU RF9UT0tFTl9IQUxUID8gIkhBTFQgIiA6ICIiLAorICAgICAgICAgICAgICBxdGQtPnRva2Vu ICYgUVREX1RPS0VOX0RCRVJSID8gIkRCRVJSICIgOiAiIiwKKyAgICAgICAgICAgICAgcXRk LT50b2tlbiAmIFFURF9UT0tFTl9CQUJCTEUgPyAiQkFCQkxFICIgOiAiIiwKKyAgICAgICAg ICAgICAgcXRkLT50b2tlbiAmIFFURF9UT0tFTl9YQUNURVJSID8gIlhBQ1RFUlIgIiA6ICIi LAorICAgICAgICAgICAgICBxdGQtPnRva2VuICYgUVREX1RPS0VOX01JU1NFRFVGID8gIk1J U1NFRFVGICIgOiAiIiwKKyAgICAgICAgICAgICAgcXRkLT50b2tlbiAmIFFURF9UT0tFTl9T UExJVFhTVEFURSA/ICJTUExJVFhTVEFURSAiIDogIiIsCisgICAgICAgICAgICAgIHF0ZC0+ dG9rZW4gJiBRVERfVE9LRU5fUElORyA/ICJQSU5HICIgOiAiIik7CisgICAgcHJpbnRmKCIg ICAgQ3VycmVudCBPZmZzZXQgICAgJWRcbiIsCisgICAgICAgICAgICAgIHF0ZC0+YnVmcHRy WzBdICYgQlVGUFRSX0NVUlJPRkZfTUFTSyk7CisgICAgcHJpbnRmKCIgICAgPT09ID09PT09 PT09ICAgICAgPT09PT09PT1cbiIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3FoKEVIQ0lx aCAqcWgsIHVpbnQzMl90IHFoYWRkcikKK3sKKyAgICBpbnQgc3BlZWQgPShxaC0+ZXBjaGFy ICYgUUhfRVBDSEFSX0VQU19NQVNLKSA+PiBRSF9FUENIQVJfRVBTX1NIOworCisgICAgcHJp bnRmKCJRSCBhbmFseXNpcyAgICAgICAlMDhYXG4iCisgICAgICAgICAgICAiPT0gPT09PT09 PT0gICAgICAgPT09PT09PT1cbiIsIHFoYWRkcik7CisKKyAgICBkdW1wX3B0cigiSG9yaXpv bnRhbDogICAgICAgIiwgcWgtPm5leHQsIDEpOworICAgIHByaW50ZigiTmFrIENvdW50IFJl bG9hZDogJWRcbiIsCisgICAgICAgICAgIChxaC0+ZXBjaGFyICYgUUhfRVBDSEFSX1JMX01B U0spID4+IFFIX0VQQ0hBUl9STF9TSCk7CisgICAgcHJpbnRmKCJNYXggUGt0IExlbjogICAg ICAlZFxuIiwKKyAgICAgICAgICAgKHFoLT5lcGNoYXIgJiBRSF9FUENIQVJfTVBMRU5fTUFT SykgPj4gUUhfRVBDSEFSX01QTEVOX1NIKTsKKyAgICBwcmludGYoIkNvbnRyb2wgRW5kcG9p bnQ6ICVzICAgICAgICAiLAorICAgICAgICAgICAocWgtPmVwY2hhciAmIFFIX0VQQ0hBUl9D KSA/ICJZZXMgIiA6ICJObyAgIik7CisgICAgcHJpbnRmKCJILWJpdDogICAgICAgICAgICAl c1xuIiwKKyAgICAgICAgICAgKHFoLT5lcGNoYXIgJiBRSF9FUENIQVJfSCkgPyAiWWVzICIg OiAiTm8gICIpOworICAgIHByaW50ZigiRFRDOiAgICAgICAgICAgICAgJXMgICAgICAgICIs CisgICAgICAgICAgIChxaC0+ZXBjaGFyICYgUUhfRVBDSEFSX0RUQykgPyAiWWVzICIgOiAi Tm8gICIpOworICAgIHByaW50ZigiRW5kUG9pbnQgU3BlZWQ6ICAgJXNcbiIsCisgICAgICAg ICAgICBzcGVlZCA9PSAwID8gIkZ1bGwiIDoKKyAgICAgICAgICAgKHNwZWVkID09IDEgPyAi TG93ICIgOgorICAgICAgICAgICAoc3BlZWQgPT0gMiA/ICJIaWdoIiA6ICIqKioqIikpKTsK KyAgICBwcmludGYoIkVuZFBvaW50OiAgICAgICAgICUtNGQgICAgICAgICIsCisgICAgICAg ICAgIChxaC0+ZXBjaGFyICYgUUhfRVBDSEFSX0VQX01BU0spID4+IFFIX0VQQ0hBUl9FUF9T SCk7CisgICAgcHJpbnRmKCJJbmFjdGl2ZSBvbiBuZXh0OiAlc1xuIiwKKyAgICAgICAgICAg KHFoLT5lcGNoYXIgJiBRSF9FUENIQVJfSSkgPyAiWWVzIiA6ICJObyIpOworICAgIHByaW50 ZigiRGV2QWRkcjogICAgICAgICAgJS00ZCAgICAgICAgIiwKKyAgICAgICAgICAgICBxaC0+ ZXBjaGFyICYgUUhfRVBDSEFSX0RFVkFERFJfTUFTSyk7CisgICAgcHJpbnRmKCJNdWx0OiAg ICAgICAgICAgICAlLTRkXG4iLAorICAgICAgICAgICAocWgtPmVwY2FwICYgUUhfRVBDQVBf TVVMVF9NQVNLKSA+PiBRSF9FUENBUF9NVUxUX1NIKTsKKyAgICBwcmludGYoIlBvcnROdW06 ICAgICAgICAgICUtNGQgICAgICAgICIsCisgICAgICAgICAgIChxaC0+ZXBjYXAgJiBRSF9F UENBUF9QT1JUTlVNX01BU0spID4+IFFIX0VQQ0FQX1BPUlROVU1fU0gpOworICAgIHByaW50 ZigiSHViQWRkcjogICAgICAgICAgJWRcbiIsCisgICAgICAgICAgIChxaC0+ZXBjYXAgJiBR SF9FUENBUF9IVUJBRERSX01BU0spID4+IFFIX0VQQ0FQX0hVQkFERFJfU0gpOworICAgIHBy aW50ZigiQy1tYXNrOiAgICAgICAgICAgJS00ZCAgICAgICAgIiwKKyAgICAgICAgICAgKHFo LT5lcGNhcCAmIFFIX0VQQ0FQX0NNQVNLX01BU0spID4+IFFIX0VQQ0FQX0NNQVNLX1NIKTsK KyAgICBwcmludGYoIlMtbWFzazogICAgICAgICAgICVkXG4iLAorICAgICAgICAgICAgICBx aC0+ZXBjYXAgJiBRSF9FUENBUF9TTUFTS19NQVNLKTsKKyAgICBkdW1wX3B0cigiQ3VycmVu dDogICAgICAgICAgIiwgcWgtPmN1cnJlbnQsIDApOworCisgICAgZHVtcF9xdGQoKEVIQ0lx dGQgKikmcWgtPnF0ZG5leHQsIHFoYWRkciArIDE2KTsKKworICAgIHByaW50ZigiQy1wcm9n IG1hc2s6ICAgICAgJWRcbiIsCisgICAgICAgICAgICAgIHFoLT5idWZwdHJbMV0gJiBCVUZQ VFJfQ1BST0dNQVNLX01BU0spOworICAgIHByaW50ZigiUy1ieXRlczogICAgICAgICAgJWRc biIsCisgICAgICAgICAgICAgIHFoLT5idWZwdHJbMl0gJiBCVUZQVFJfRlJBTUVUQUdfTUFT Syk7CisgICAgcHJpbnRmKCJGcmFtZVRhZzogICAgICAgICAlZFxuIiwKKyAgICAgICAgICAg ICAocWgtPmJ1ZnB0clsyXSAmIEJVRlBUUl9TQllURVNfTUFTSykgPj4gQlVGUFRSX1NCWVRF U19TSCk7CisgICAgcHJpbnRmKCI9PSA9PT09PT09PSAgICAgICA9PT09PT09PVxuIik7Cit9 CisKKyNpZmRlZiBERUJVR19QQUNLRVQKKworc3RhdGljIHZvaWQgZHVtcF9pdGQoRUhDSWl0 ZCAqaXRkLCB1aW50MzJfdCBhZGRyKQoreworICAgIGludCBpOworCisgICAgcHJpbnRmKCJJ VEQgYW5hbHlzaXMgICAgICAgJTA4WFxuIgorICAgICAgICAgICAgIj09PSA9PT09PT09PSAg ICAgICA9PT09PT09PVxuIiwgYWRkcik7CisKKyAgICBkdW1wX3B0cigiSG9yaXpvbnRhbDog ICAgICAgIiwgaXRkLT5uZXh0LCAxKTsKKworICAgIGZvcihpID0gMDsgaSA8IDg7IGkrKykg eworICAgICAgICBwcmludGYoIlRyYW5zIERlc2MgJWQsIGxlbiAlNWQsIG9mZiAlMDNYLCBw YWdlIHNlbCAlZCwgaW9jOiVzICIsCisgICAgICAgICAgICAgICAgICBpLAorICAgICAgICAg ICAgICAgICAgZ2V0X2ZpZWxkKGl0ZC0+dHJhbnNhY3RbaV0sIElURF9YQUNUX0xFTkdUSF9N QVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVERfWEFDVF9MRU5HVEhfU0gp LAorICAgICAgICAgICAgICAgICAgZ2V0X2ZpZWxkKGl0ZC0+dHJhbnNhY3RbaV0sIElURF9Y QUNUX09GRlNFVF9NQVNLLCAwKSwKKyAgICAgICAgICAgICAgICAgIGdldF9maWVsZChpdGQt PnRyYW5zYWN0W2ldLCBJVERfWEFDVF9QR1NFTF9NQVNLLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJVERfWEFDVF9QR1NFTF9TSCksCisgICAgICAgICAgICAgICAgICBpdGQt PnRyYW5zYWN0W2ldICYgSVREX1hBQ1RfSU9DID8gIlllcyIgOiAiTm8gIik7CisKKyAgICAg ICAgaWYgKGl0ZC0+dHJhbnNhY3RbaV0gJiBJVERfWEFDVF9BQ1RJVkUpCisgICAgICAgICAg ICBwcmludGYoIkFDVElWRSAiKTsKKworICAgICAgICBpZiAoaXRkLT50cmFuc2FjdFtpXSAm IElURF9YQUNUX0RCRVJST1IpCisgICAgICAgICAgICBwcmludGYoIkRBVEFFUlIgIik7CisK KyAgICAgICAgaWYgKGl0ZC0+dHJhbnNhY3RbaV0gJiBJVERfWEFDVF9CQUJCTEUpCisgICAg ICAgICAgICBwcmludGYoIkJBQkJMRSAiKTsKKworICAgICAgICBpZiAoaXRkLT50cmFuc2Fj dFtpXSAmIElURF9YQUNUX1hBQ1RFUlIpCisgICAgICAgICAgICBwcmludGYoIlhBQ1RFUlIg Iik7CisKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKworICAgIHByaW50ZigiRGV2 aWNlOiAgICAgJWRcbiIsCisgICAgICAgICAgICBnZXRfZmllbGQoaXRkLT5idWZwdHJbMF0s IElURF9CVUZQVFJfREVWQUREUl9NQVNLLCAwKSk7CisKKyAgICBwcmludGYoIkVuZHBvaW50 OiAgICVkXG4iLAorICAgICAgICAgICAgZ2V0X2ZpZWxkKGl0ZC0+YnVmcHRyWzBdLCBJVERf QlVGUFRSX0VQX01BU0ssIElURF9CVUZQVFJfRVBfU0gpKTsKKworICAgIHByaW50ZigiRGly ZWN0aW9uOiAgJXNcbiIsCisgICAgICAgICAgICBpdGQtPmJ1ZnB0clsxXSAmIElURF9CVUZQ VFJfRElSRUNUSU9OID8gIklOIiA6ICJPVVQiKTsKKworICAgIHByaW50ZigiTWF4IFBhY2tl dDogJWRcbiIsCisgICAgICAgICAgICBnZXRfZmllbGQoaXRkLT5idWZwdHJbMV0sIElURF9C VUZQVFJfTUFYUEtUX01BU0ssIDApKTsKKworICAgIHByaW50ZigiTXVsdDogICAgICAgJWRc biIsCisgICAgICAgICAgICBnZXRfZmllbGQoaXRkLT5idWZwdHJbMl0sIElURF9CVUZQVFJf TVVMVF9NQVNLLCAwKSk7CisKKyAgICBmb3IoaSA9IDA7IGkgPCA3OyBpKyspCisgICAgICAg IHByaW50ZigiQnVmIFB0ciAlZDogJTA1WFxuIiwgaSwgaXRkLT5idWZwdHJbaV0gPj4gMTIp OworfQorCisjZW5kaWYKKworI2lmIDAKK3N0YXRpYyBpbnQgdGltZWRfcHJpbnRmKGNvbnN0 IGNoYXIgKmZtdCwgLi4uKQoreworICAgIGludCBtc2VjLCB1c2VjOworICAgIHN0YXRpYyBp bnQgdXNlY19sYXN0OworICAgIHZhX2xpc3QgYXA7CisKKyAgICB1c2VjID0gcWVtdV9nZXRf Y2xvY2sodm1fY2xvY2spIC8gMTAwMDsKKworICAgIG1zZWMgPSB1c2VjIC0gdXNlY19sYXN0 OworICAgIHVzZWNfbGFzdCA9IHVzZWM7CisgICAgdXNlYyA9IG1zZWM7CisKKyAgICBtc2Vj IC89IDEwMDA7CisgICAgbXNlYyAlPSAxMDAwOworCisgICAgdXNlYyAlPSAxMDAwOworCisg ICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgcHJpbnRmKCIlMDNkLiUwM2QgIiwgbXNlYywg dXNlYyk7CisgICAgdnByaW50ZihmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworCisgICAg cmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGVoY2lfc2V0X2lu dGVycnVwdChFSENJU3RhdGUgKmVoY2ksIGludCBpbnRyKQoreworICAgIGludCBsZXZlbCA9 IDA7CisKKyAgICAvLyBUT0RPIGhvbm91ciBpbnRlcnJ1cHQgdGhyZXNob2xkIHJlcXVlc3Rz CisKKyAgICBlaGNpLT51c2JzdHMgfD0gaW50cjsKKworICAgIGlmICgoZWhjaS0+dXNic3Rz ICYgVVNCSU5UUl9NQVNLKSAmIGVoY2ktPnVzYmludHIpCisgICAgICAgIGxldmVsID0gMTsK KworI2lmZGVmIFRERUJVRworICAgIERFQlVHKCgiZWhjaTogc2V0dGluZyBpbnRlcnJ1cHQg bGV2ZWwgJWQoc3QvZW4pPSglMDJYLyUwMlgpXG4iLCBsZXZlbCwKKyAgICAgICAgICAgIGVo Y2ktPnVzYnN0cyAmIFVTQklOVFJfTUFTSywgZWhjaS0+dXNiaW50cikpOworI2VuZGlmCisg ICAgcWVtdV9zZXRfaXJxKGVoY2ktPmlycSwgbGV2ZWwpOworfQorCisvKiBBdHRhY2ggb3Ig ZGV0YWNoIGEgZGV2aWNlIG9uIHJvb3QgaHViICovCisKK3N0YXRpYyB2b2lkIGVoY2lfYXR0 YWNoKFVTQlBvcnQgKnBvcnQsIFVTQkRldmljZSAqZGV2KQoreworICAgIEVIQ0lTdGF0ZSAq cyA9IHBvcnQtPm9wYXF1ZTsKKyAgICB1aW50MzJfdCAqcG9ydHNjID0gJnMtPnBvcnRzY1tw b3J0LT5pbmRleF07CisKKyAgICBERUJVRygoImVoY2lfYXR0YWNoIGludm9rZWQgZm9yIGlu ZGV4ICVkLCBkZXNjICVzXG4iLAorICAgICAgICAgICBwb3J0LT5pbmRleCwgZGV2ID8gZGV2 LT5wcm9kdWN0X2Rlc2MgOiAidW5kZWZpbmVkIikpOworCisgICAgaWYgKGRldikgeworICAg ICAgICBpZiAocG9ydC0+ZGV2KSB7CisgICAgICAgICAgICB1c2JfYXR0YWNoKHBvcnQsIE5V TEwpOworICAgICAgICB9CisKKyAgICAgICAgKnBvcnRzYyB8PSBQT1JUU0NfQ09OTkVDVDsK KworICAgICAgICB1c2Jfc2VuZF9tc2coZGV2LCBVU0JfTVNHX0FUVEFDSCk7CisgICAgICAg IHBvcnQtPmRldiA9IGRldjsKKyAgICB9IGVsc2UgeworICAgICAgICAqcG9ydHNjICY9IH5Q T1JUU0NfQ09OTkVDVDsKKworICAgICAgICBpZiAocG9ydC0+ZGV2KSB7CisgICAgICAgICAg ICBkZXYgPSBwb3J0LT5kZXY7CisgICAgICAgICAgICB1c2Jfc2VuZF9tc2coZGV2LCBVU0Jf TVNHX0RFVEFDSCk7CisgICAgICAgIH0KKworICAgICAgICBwb3J0LT5kZXYgPSBOVUxMOwor ICAgIH0KKworICAgICpwb3J0c2MgfD0gUE9SVFNDX0NTQzsKKworICAgIC8qCisgICAgICog IElmIGEgaGlnaCBzcGVlZCBkZXZpY2UgaXMgYXR0YWNoZWQgdGhlbiB3ZSBvd24gdGhpcyBw b3J0KGluZGljYXRlZAorICAgICAqICBieSB6ZXJvIGluIHRoZSBQT1JUU0NfUE9XTkVSIGJp dCBmaWVsZCkgc28gc2V0IHRoZSBzdGF0dXMgYml0CisgICAgICogIGFuZCBzZXQgYW4gaW50 ZXJydXB0IGlmIGVuYWJsZWQuCisgICAgICovCisgICAgaWYgKCAhKCpwb3J0c2MgJiBQT1JU U0NfUE9XTkVSKSkgeworICAgICAgICBlaGNpX3NldF9pbnRlcnJ1cHQocywgVVNCU1RTX1BD RCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBlaGNpX3Jlc2V0KHZvaWQgKm9wYXF1ZSkK K3sKKyAgICBFSENJU3RhdGUgKnMgPSBvcGFxdWU7CisgICAgdWludDhfdCAqcGNpX2NvbmY7 CisgICAgaW50IGk7CisKKyAgICBERUJVRygoImVoY2lfcmVzZXRcbiIpKTsKKyAgICBwY2lf Y29uZiA9IHMtPmRldi5jb25maWc7CisKKyAgICBtZW1zZXQoJnMtPm1taW9bT1BSRUdCQVNF XSwgMHgwMCwgTU1JT19TSVpFIC0gT1BSRUdCQVNFKTsKKworICAgIHMtPnVzYmNtZCA9IE5C X01BWElOVFJBVEUgPDwgVVNCQ01EX0lUQ19TSDsKKyAgICBzLT51c2JzdHMgPSBVU0JTVFNf SEFMVDsKKworICAgIHMtPmFzdGF0ZSA9IEVTVF9JTkFDVElWRTsKKyAgICBzLT5wc3RhdGUg PSBFU1RfSU5BQ1RJVkU7CisgICAgcy0+YXN5bmNfcG9ydF9pbl9wcm9ncmVzcyA9IC0xOwor ICAgIHMtPmFzeW5jX2NvbXBsZXRlID0gMDsKKyAgICBzLT5pc29jaF9wYXVzZSA9IC0xOwor ICAgIHMtPmF0dGFjaF9wb2xsX2NvdW50ZXIgPSAwOworCisgICAgZm9yKGkgPSAwOyBpIDwg TkJfUE9SVFM7IGkrKykgeworICAgICAgICBzLT5wb3J0c2NbaV0gPSBQT1JUU0NfUE9XTkVS IHwgUE9SVFNDX1BQT1dFUjsKKworICAgICAgICBpZiAocy0+cG9ydHNbaV0uZGV2KQorICAg ICAgICAgICAgZWhjaV9hdHRhY2goJnMtPnBvcnRzW2ldLCBzLT5wb3J0c1tpXS5kZXYpOwor ICAgIH0KK30KKworc3RhdGljIHVpbnQzMl90IGVoY2lfbWVtX3JlYWRiKHZvaWQgKnB0ciwg dGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCit7CisgICAgRUhDSVN0YXRlICpzID0gcHRyOwor ICAgIHVpbnQzMl90IHZhbDsKKworICAgIHZhbCA9IHMtPm1taW9bYWRkcl07CisgICAgREVC VUcoKCJtZW1fcmVhZGIgOiBhZGRyPTB4JTA4WCwgdmFsPSUwMlhcbiIsKGludClhZGRyLChp bnQpdmFsKSk7CisKKyAgICByZXR1cm4gdmFsOworfQorCitzdGF0aWMgdWludDMyX3QgZWhj aV9tZW1fcmVhZHcodm9pZCAqcHRyLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKK3sKKyAg ICBFSENJU3RhdGUgKnMgPSBwdHI7CisgICAgdWludDMyX3QgdmFsOworCisgICAgdmFsID0g cy0+bW1pb1thZGRyXSB8KHMtPm1taW9bYWRkcisxXSA8PCA4KTsKKyAgICBERUJVRygoIm1l bV9yZWFkdyA6IGFkZHI9MHglMDhYLCB2YWw9MHglMDRYXG4iLChpbnQpYWRkciwoaW50KXZh bCkpOworCisgICAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHVpbnQzMl90IGVoY2lfbWVt X3JlYWRsKHZvaWQgKnB0ciwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCit7CisgICAgRUhD SVN0YXRlICpzID0gcHRyOworICAgIHVpbnQzMl90IHZhbDsKKworICAgIHZhbCA9IHMtPm1t aW9bYWRkcl0gfChzLT5tbWlvW2FkZHIrMV0gPDwgOCkgfAorICAgICAgICAgIChzLT5tbWlv W2FkZHIrMl0gPDwgMTYpIHwocy0+bW1pb1thZGRyKzNdIDw8IDI0KTsKKworICAgIERFQlVH KCgiZWhjaV9tZW1fcmVhZGwgOiBhZGRyPTB4JTA4WCwgdmFsPTB4JTA4WFxuIiwodW5zaWdu ZWQpIGFkZHIsIHZhbCkpOworCisgICAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQg ZWhjaV9tZW1fd3JpdGViKHZvaWQgKnB0ciwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsIHVp bnQzMl90IHZhbCkKK3sKKyAgICBwcmludGYoIkVIQ0kgZG9lc24ndCBoYW5kbGUgYnl0ZSB3 cml0ZXMgdG8gTU1JT1xuIik7CisgICAgZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgZWhj aV9tZW1fd3JpdGV3KHZvaWQgKnB0ciwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsIHVpbnQz Ml90IHZhbCkKK3sKKyAgICBwcmludGYoIkVIQ0kgZG9lc24ndCBoYW5kbGUgMTYtYml0IHdy aXRlcyB0byBNTUlPXG4iKTsKKyAgICBleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBoYW5k bGVfcG9ydF9zdGF0dXNfd3JpdGUoRUhDSVN0YXRlICpzLCBpbnQgcG9ydCwgdWludDMyX3Qg dmFsKQoreworICAgIHVpbnQzMl90ICpwb3J0c2MgPSAmcy0+cG9ydHNjW3BvcnRdOworICAg IGludCByd2M7CisgICAgVVNCRGV2aWNlICpkZXYgPSBzLT5wb3J0c1twb3J0XS5kZXY7CisK KyAgICBERUJVRygoIlBPUlRTQyAgJTA4WC0+JTA4WCAgcndjPSUwOFggIHJ3PSUwOFhcbiIs ICpwb3J0c2MsIHZhbCwKKyAgICAgICAgICAodmFsICYgUE9SVFNDX1JXQ19NQVNLKSwKKyAg ICAgICAgICAgdmFsICYgUE9SVFNDX1JPX01BU0spKTsKKworICAgIHJ3YyA9IHZhbCAmIFBP UlRTQ19SV0NfTUFTSzsKKyAgICB2YWwgJj0gUE9SVFNDX1JPX01BU0s7CisKKyAgICAvLyBo YW5kbGVfcmVhZF93cml0ZV9jbGVhcigmdmFsLCBwb3J0c2MsIFBPUlRTQ19QRURDIHwgUE9S VFNDX0NTQyk7CisKKyAgICAqcG9ydHNjICY9IH5yd2M7CisKKyAgICBERUJVRygoIlBPUlRT QyAgLT4gICUwOFhcbiIsICpwb3J0c2MpKTsKKworICAgIGlmICgodmFsICYgUE9SVFNDX1BS RVNFVCkgJiYgISgqcG9ydHNjICYgUE9SVFNDX1BSRVNFVCkpIHsKKyAgICAgICAgREVCVUco KCJVU0JUUkFOIFBvcnQgJWQgcmVzZXQgYmVnaW5cbiIsIHBvcnQpKTsKKyAgICB9CisKKyAg ICBpZiAoISh2YWwgJiBQT1JUU0NfUFJFU0VUKSAmJigqcG9ydHNjICYgUE9SVFNDX1BSRVNF VCkpIHsKKyAgICAgICAgREVCVUcoKCJVU0JUUkFOIFBvcnQgJWQgcmVzZXQgZG9uZVxuIiwg cG9ydCkpOworICAgICAgICBlaGNpX2F0dGFjaCgmcy0+cG9ydHNbcG9ydF0sIGRldik7CisK KyAgICAgICAgLy8gVE9ETyBob3cgdG8gaGFuZGxlIHJlc2V0IG9mIHBvcnRzIHdpdGggbm8g ZGV2aWNlCisgICAgICAgIGlmIChkZXYpCisgICAgICAgICAgICB1c2Jfc2VuZF9tc2coZGV2 LCBVU0JfTVNHX1JFU0VUKTsKKworICAgICAgICBpZiAocy0+cG9ydHNbcG9ydF0uZGV2KSB7 CisgICAgICAgICAgICBERUJVRygoIkRldmljZSB3YXMgY29ubmVjdGVkIGJlZm9yZSByZXNl dCwgY2xlYXJpbmcgQ1NDIGJpdFxuIikpOworICAgICAgICAgICAgKnBvcnRzYyAmPSB+UE9S VFNDX0NTQzsKKyAgICAgICAgfQorCisgICAgICAgIC8qICBUYWJsZSAyLjE2IFNldCB0aGUg ZW5hYmxlIGJpdChhbmQgZW5hYmxlIGJpdCBjaGFuZ2UpIHRvIGluZGljYXRlCisgICAgICAg ICAqICB0byBTVyB0aGF0IHRoaXMgcG9ydCBoYXMgYSBoaWdoIHNwZWVkIGRldmljZSBhdHRh Y2hlZAorICAgICAgICAgKgorICAgICAgICAgKiAgVE9ETyAtIHdoZW4gdG8gZGlzYWJsZT8K KyAgICAgICAgICovCisgICAgICAgIHZhbCB8PSBQT1JUU0NfUEVEOworICAgICAgICB2YWwg fD0gUE9SVFNDX1BFREM7CisgICAgfQorCisgICAgKnBvcnRzYyAmPSB+UE9SVFNDX1JPX01B U0s7CisgICAgKnBvcnRzYyB8PSB2YWw7CisgICAgREVCVUcoKCJQb3J0IHN0YXR1cyBzZXQg dG8gMHglMDh4XG4iLCAqcG9ydHNjKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVoY2lfbWVtX3dy aXRlbCh2b2lkICpwdHIsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLCB1aW50MzJfdCB2YWwp Cit7CisgICAgRUhDSVN0YXRlICpzID0gcHRyOworICAgIGludCBpOworCisgICAgLyogT25s eSBhbGlnbmVkIHJlYWRzIGFyZSBhbGxvd2VkIG9uIE9IQ0kgKi8KKyAgICBpZiAoYWRkciAm IDMpIHsKKyAgICAgICAgcHJpbnRmKCJ1c2ItZWhjaTogTWlzLWFsaWduZWQgd3JpdGVcbiIp OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGFkZHIgPj0gUE9SVFNDICYm IGFkZHIgPCBQT1JUU0MgKyA0ICogTkJfUE9SVFMpIHsKKyAgICAgICAgREVCVUcoKCJlaGNp X21lbV93cml0ZWwgOiBQT1JUU0MlZC0+MHglMDhYIFxuIiwKKyAgICAgICAgICAgICAgIChp bnQpKGFkZHItUE9SVFNDKS80LCB2YWwpKTsKKyAgICAgICAgaGFuZGxlX3BvcnRfc3RhdHVz X3dyaXRlKHMsIChhZGRyLVBPUlRTQykvNCwgdmFsKTsKKyAgICAgICAgcmV0dXJuOworICAg IH0KKworICAgIC8qIERvIGFueSByZWdpc3RlciBzcGVjaWZpYyBwcmUtd3JpdGUgcHJvY2Vz c2luZyBoZXJlLiAgKi8KKworICAgIHN3aXRjaChhZGRyKQorICAgIHsKKyAgICBjYXNlIFVT QkNNRDoKKyAgICAgICAgaWYgKCh2YWwgJiBVU0JDTURfUlVOU1RPUCkgJiYgIShzLT51c2Jj bWQgJiBVU0JDTURfUlVOU1RPUCkpIHsKKyAgICAgICAgICAgIERFQlVHKCgiZWhjaV9tZW1f d3JpdGVsIDogVVNCQ01EIHJ1biwgY2xlYXIgaGFsdFxuIikpOworICAgICAgICAgICAgLy8g cHJpbnRmKCJDYWxsIG1vZF90aW1lciBmb3IgJXBcbiIsIHMtPmZyYW1lX3RpbWVyKTsKKyAg ICAgICAgICAgIHFlbXVfbW9kX3RpbWVyKHMtPmZyYW1lX3RpbWVyLCBxZW11X2dldF9jbG9j ayh2bV9jbG9jaykpOworICAgICAgICAgICAgcy0+bGFzdF9ydW5fdXNlYyA9IHFlbXVfZ2V0 X2Nsb2NrKHZtX2Nsb2NrKSAvIDEwMDA7CisgICAgICAgICAgICBzLT51c2JzdHMgJj0gflVT QlNUU19IQUxUOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEodmFsICYgVVNCQ01EX1JV TlNUT1ApICYmKHMtPnVzYmNtZCAmIFVTQkNNRF9SVU5TVE9QKSkgeworICAgICAgICAgICAg REVCVUcoKCJlaGNpX21lbV93cml0ZWwgOiBVU0JDTUQgICoqIFNUT1AgKipcbiIpKTsKKyAg ICAgICAgICAgIC8vIHByaW50ZigiQ2FsbCBkZWxfdGltZXIgZm9yICVwXG4iLCBzLT5mcmFt ZV90aW1lcik7CisjaWYgMAorICAgICAgICAgICAgcWVtdV9kZWxfdGltZXIocy0+ZnJhbWVf dGltZXIpOworI2VuZGlmCisgICAgICAgICAgICAvLyBUT0RPIC0gc2hvdWxkIGZpbmlzaCBv dXQgc29tZSBzdHVmZiBiZWZvcmUgc2V0dGluZyBoYWx0CisgICAgICAgICAgICBzLT51c2Jz dHMgfD0gVVNCU1RTX0hBTFQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmFsICYgVVNC Q01EX0hDUkVTRVQpIHsKKyAgICAgICAgICAgIERFQlVHKCgiZWhjaV9tZW1fd3JpdGVsIDog VVNCQ01EIHJlc2V0dGluZyAuLi5cbiIpKTsKKyAgICAgICAgICAgIGVoY2lfcmVzZXQocyk7 CisgICAgICAgICAgICBERUJVRygoImVoY2lfbWVtX3dyaXRlbDogVVNCQ01EIHJlc2V0IGRv bmUsIGNsZWFyIHJlc2V0IHJlcXVlc3QgYml0XG4iKSk7CisgICAgICAgICAgICB2YWwgJj0g flVTQkNNRF9IQ1JFU0VUOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBj YXNlIFVTQlNUUzoKKyAgICAgICAgdmFsICY9IFVTQlNUU19ST19NQVNLOyAgICAgICAgICAg ICAgLy8gYml0cyA2IHRocnUgMzEgYXJlIFJPCisgICAgICAgIERFQlVHKCgiZWhjaV9tZW1f d3JpdGVsIDogVVNCU1RTIFJXQyBzZXQgdG8gMHglMDhYXG4iLCB2YWwpKTsKKworICAgICAg ICB2YWwgPShzLT51c2JzdHMgJj0gfnZhbCk7ICAgICAgICAgLy8gYml0cyAwIHRocnUgNSBh cmUgUi9XQworICAgICAgICBERUJVRygoImVoY2lfbWVtX3dyaXRlbCA6IFVTQlNUUyB1cGRh dGluZyBpbnRlcnJ1cHQgY29uZGl0aW9uXG4iKSk7CisgICAgICAgIGVoY2lfc2V0X2ludGVy cnVwdChzLCAwKTsKKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVVNCSU5UUjoKKyAg ICAgICAgdmFsICY9IFVTQklOVFJfTUFTSzsKKyAgICAgICAgLy8gREVCVUcoKCJlaGNpX21l bV93cml0ZWwgOiBVU0JJTlRSIHNldCB0byAweCUwOFhcbiIsIHZhbCkpOworICAgICAgICBi cmVhazsKKworICAgIGNhc2UgRlJJTkRFWDoKKyAgICAgICAgcy0+c29mdiA9IHZhbCA+PiAz OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ09ORklHRkxBRzoKKyAgICAgICAgdmFs ICY9IDB4MTsKKworICAgICAgICBpZiAodmFsKSB7CisgICAgICAgICAgICBmb3IoaSA9IDA7 IGkgPCBOQl9QT1JUUzsgaSsrKQorICAgICAgICAgICAgICAgIHMtPnBvcnRzY1tpXSAmPSB+ UE9SVFNDX1BPV05FUjsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKwor ICAgIGlmIChhZGRyICE9IDB4MjgpIHsKKyAgICAgICAgREVCVUcoKCJlaGNpX21lbV93cml0 ZWwgOiBhZGRyPTB4JTA4WCwgdmFsPTB4JTA4WFxuIiwodW5zaWduZWQpIGFkZHIsIHZhbCkp OworICAgIH0KKworICAgICoodWludDMyX3QgKikoJnMtPm1taW9bYWRkcl0pID0gdmFsOwor fQorCisKKy8vIFRPRE8gOiBQdXQgaW4gY29tbW9uIGhlYWRlciBmaWxlLCBkdXBsaWNhdGlv biBmcm9tIHVzYi1vaGNpLmMKKworLyogR2V0IGFuIGFycmF5IG9mIGR3b3JkcyBmcm9tIG1h aW4gbWVtb3J5ICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfZHdvcmRzKHVpbnQzMl90IGFk ZHIsIHVpbnQzMl90ICpidWYsIGludCBudW0pCit7CisgICAgaW50IGk7CisKKyAgICBmb3Io aSA9IDA7IGkgPCBudW07IGkrKywgYnVmKyssIGFkZHIgKz0gc2l6ZW9mKCpidWYpKSB7Cisg ICAgICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfcncoYWRkciwodWludDhfdCAqKWJ1Ziwgc2l6 ZW9mKCpidWYpLCAwKTsKKyAgICAgICAgKmJ1ZiA9IGxlMzJfdG9fY3B1KCpidWYpOworICAg IH0KKworICAgIHJldHVybiAxOworfQorCisvKiBQdXQgYW4gYXJyYXkgb2YgZHdvcmRzIGlu IHRvIG1haW4gbWVtb3J5ICovCitzdGF0aWMgaW5saW5lIGludCBwdXRfZHdvcmRzKHVpbnQz Ml90IGFkZHIsIHVpbnQzMl90ICpidWYsIGludCBudW0pCit7CisgICAgaW50IGk7CisKKyAg ICBmb3IoaSA9IDA7IGkgPCBudW07IGkrKywgYnVmKyssIGFkZHIgKz0gc2l6ZW9mKCpidWYp KSB7CisgICAgICAgIHVpbnQzMl90IHRtcCA9IGNwdV90b19sZTMyKCpidWYpOworICAgICAg ICBjcHVfcGh5c2ljYWxfbWVtb3J5X3J3KGFkZHIsKHVpbnQ4X3QgKikmdG1wLCBzaXplb2Yo dG1wKSwgMSk7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKKy8vIDQuMTAuMgorCitz dGF0aWMgdm9pZCBlaGNpX3FoX2RvX292ZXJsYXkoRUhDSVN0YXRlICplaGNpLCBFSENJcWgg KnFoLCBFSENJcXRkICpxdGQpCit7CisgICAgaW50IGk7CisgICAgaW50IGR0b2dnbGU7Cisg ICAgaW50IHBpbmc7CisKKyAgICAvLyByZW1lbWJlciB2YWx1ZXMgaW4gZmllbGRzIHRvIHBy ZXNlcnZlIGluIHFoIGFmdGVyIG92ZXJsYXkKKworICAgIGR0b2dnbGUgPSBxaC0+dG9rZW4g JiBRVERfVE9LRU5fRFRPR0dMRTsKKyAgICBwaW5nID0gcWgtPnRva2VuICYgUVREX1RPS0VO X1BJTkc7CisKKyAgICBERUJVRygoInNldHRpbmcgcWguY3VycmVudCBmcm9tICUwOFggdG8g MHglMDhYXG4iLCBxaC0+Y3VycmVudCwKKyAgICAgICAgICAgIGVoY2ktPnF0ZGFkZHIpKTsK KyAgICBxaC0+Y3VycmVudCAgPSBlaGNpLT5xdGRhZGRyOworICAgIHFoLT5xdGRuZXh0ICA9 IHF0ZC0+bmV4dDsKKyAgICBxaC0+YWx0bmV4dCAgPSBxdGQtPmFsdG5leHQ7CisgICAgcWgt PnRva2VuICAgID0gcXRkLT50b2tlbjsKKworICAgIGlmIChxaC0+Y3VycmVudCA8IDB4MTAw MCkgeworI2lmZGVmIERFQlVHX1BBQ0tFVAorICAgICAgICBkdW1wX3FoKHFoLCBxaC0+Y3Vy cmVudCk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUKDE9PTIpOworICAgIH0KKworICAgIGlm ICgoKHFoLT5lcGNoYXIgJiBRSF9FUENIQVJfRVBTX01BU0spID4+IFFIX0VQQ0hBUl9FUFNf U0gpID09IDIpIHsKKyAgICAgICAgcWgtPnRva2VuICY9IH5RVERfVE9LRU5fUElORzsKKyAg ICAgICAgcWgtPnRva2VuIHw9IHBpbmc7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8 IDU7IGkrKykKKyAgICAgICAgcWgtPmJ1ZnB0cltpXSA9IHF0ZC0+YnVmcHRyW2ldOworCisg ICAgaWYgKCEocWgtPmVwY2hhciAmIFFIX0VQQ0hBUl9EVEMpKSB7CisgICAgICAgIC8vIHBy ZXNlcnZlIFFIIERUIGJpdAorICAgICAgICBxaC0+dG9rZW4gJj0gflFURF9UT0tFTl9EVE9H R0xFOworICAgICAgICBxaC0+dG9rZW4gfD0gZHRvZ2dsZTsKKyAgICB9CisKKyAgICBxaC0+ YnVmcHRyWzFdICY9IH5CVUZQVFJfQ1BST0dNQVNLX01BU0s7CisgICAgcWgtPmJ1ZnB0clsy XSAmPSB+QlVGUFRSX0ZSQU1FVEFHX01BU0s7CisKKyAgICAvLyBUT0RPIE5ha0NudAorfQor CitzdGF0aWMgdm9pZCBlaGNpX2J1ZmZlcl9ydyhFSENJU3RhdGUgKmVoY2ksIEVIQ0lxaCAq cWgsIGludCBieXRlcywgaW50IHJ3KQoreworICAgIGludCBidWZwb3MgPSAwOworICAgIGlu dCBjcGFnZTsKKyAgICB1aW50MzJfdCBoZWFkOworICAgIHVpbnQzMl90IHRhaWw7CisKKyAg ICBjcGFnZSA9IGdldF9maWVsZChxaC0+dG9rZW4sIFFURF9UT0tFTl9DUEFHRV9NQVNLLCBR VERfVE9LRU5fQ1BBR0VfU0gpOworICAgIEFTU0VSVChjcGFnZSA9PSAwKTsKKworICAgIERF QlVHKCgiZXhlYzogJXNpbmcgJWQgYnl0ZXMgdG8vZnJvbSAlMDh4XG4iLAorICAgICAgICAg ICBydyA/ICJ3cml0IiA6ICJyZWFkIiwgYnl0ZXMsIHFoLT5idWZwdHJbMF0pKTsKKworICAg IGlmICghYnl0ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGRvIHsKKyAgICAgICAgaGVh ZCA9IHFoLT5idWZwdHJbY3BhZ2VdOworICAgICAgICB0YWlsID0ocWgtPmJ1ZnB0cltjcGFn ZV0gJiAweGZmZmZmMDAwKSArIDB4MTAwMDsKKworICAgICAgICBpZiAoYnl0ZXMgPD0odGFp bCAtIGhlYWQpKQorICAgICAgICAgICAgdGFpbCA9IGhlYWQgKyBieXRlczsKKworICAgICAg ICBERUJVRygoIkRBVEEgJXMgY3BhZ2U6JWQgaGVhZDolMDhYIHRhaWw6JTA4WCB0YXJnZXQ6 JTA4WFxuIiwKKyAgICAgICAgICAgICAgICBydyA/ICJXUklURSIgOiAiUkVBRCAiLCBjcGFn ZSwgaGVhZCwgdGFpbCwgYnVmcG9zKSk7CisKKyAgICAgICAgQVNTRVJUKGJ1ZnBvcyArIHRh aWwgLSBoZWFkIDw9IEJVRkZfU0laRSk7CisgICAgICAgIEFTU0VSVCh0YWlsIC0gaGVhZCA+ IDApOworCisgICAgICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfcncocWgtPmJ1ZnB0cltjcGFn ZV0sICZlaGNpLT5idWZmZXJbYnVmcG9zXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGFpbCAtIGhlYWQsIHJ3KTsKKworICAgICAgICBidWZwb3MgKz0odGFpbCAtIGhl YWQpOworICAgICAgICBieXRlcyAtPSh0YWlsIC0gaGVhZCk7CisKKyAgICAgICAgcWgtPmJ1 ZnB0cltjcGFnZV0gKz0odGFpbCAtIGhlYWQpOworCisgICAgICAgIGlmIChieXRlcyA+IDAp CisgICAgICAgICAgICBjcGFnZSsrOworICAgIH0gd2hpbGUgKGJ5dGVzID4gMCk7CisKKyAg ICBzZXRfZmllbGQoJnFoLT50b2tlbiwgY3BhZ2UsIFFURF9UT0tFTl9DUEFHRV9NQVNLLCBR VERfVE9LRU5fQ1BBR0VfU0gpOworfQorCitzdGF0aWMgdm9pZCBlaGNpX2FzeW5jX2NvbXBs ZXRlX3BhY2tldChVU0JQYWNrZXQgKnBhY2tldCwgdm9pZCAqb3BhcXVlKQoreworICAgIEVI Q0lTdGF0ZSAqZWhjaSA9IG9wYXF1ZTsKKyNpZmRlZiBERUJVR19QQUNLRVQKKyAgICBkcHJp bnRmKCJBc3luYyBwYWNrZXQgY29tcGxldGVcbiIpOworI2VuZGlmCisgICAgZWhjaS0+YXN5 bmNfY29tcGxldGUgPSAxOworICAgIGVoY2ktPmV4ZWNfc3RhdHVzID0gcGFja2V0LT5sZW47 Cit9CisKK3N0YXRpYyBpbnQgZWhjaV9leGVjdXRlX2NvbXBsZXRlKEVIQ0lTdGF0ZSAqZWhj aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFSENJcWggKnFoLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXQpCit7CisgICAgaWYgKHJl dCA9PSBVU0JfUkVUX0FTWU5DICYmICFlaGNpLT5hc3luY19jb21wbGV0ZSkgeworICAgICAg ICBERUJVRygoIm5vdCBkb25lIHlldFxuIikpOworICAgICAgICByZXR1cm4gcmV0OworICAg IH0KKworICAgIGVoY2ktPmFzeW5jX2NvbXBsZXRlID0gMDsKKyAgICBlaGNpLT5hc3luY19w b3J0X2luX3Byb2dyZXNzID0gLTE7CisKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBz d2l0Y2gocmV0KSB7CisgICAgICAgIGNhc2UgVVNCX1JFVF9OT0RFVjoKKyAgICAgICAgICAg IHByaW50ZigiVVNCIG5vIGRldmljZVxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgY2FzZSBVU0JfUkVUX1NUQUxMOgorICAgICAgICAgICAgcHJpbnRmKCJVU0Igc3RhbGxc biIpOworICAgICAgICAgICAgcWgtPnRva2VuIHw9IFFURF9UT0tFTl9IQUxUOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVVNCX1JFVF9OQUs6CisgICAgICAgICAgICBE RUJVRygoIlVTQlRSQU4gUlNQIE5BSywgcmV0dXJuaW5nIHdpdGhvdXQgY2xlYXIgYWN0aXZl XG4iKSk7CisgICAgICAgICAgICByZXR1cm4gVVNCX1JFVF9OQUs7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgY2FzZSBVU0JfUkVUX0JBQkJMRToKKyAgICAgICAgICAgIHByaW50 ZigiVVNCIGJhYmJsZSBUT0RPXG4iKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXQgPj0gMCk7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHBy aW50ZigiVVNCIGludmFsaWQgcmVzcG9uc2UgJWQgdG8gaGFuZGxlXG4iLAorICAgICAgICAg ICAgICAgICAgICByZXQpOworICAgICAgICAgICAgQVNTRVJUKHJldCA+PSAwKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gaWYg KHJldCA8IG1heHBrdCkKKyAgICAgICAgLy8geworICAgICAgICAvLyAgICAgREVCVUcoKCJT aG9ydCBwYWNrZXQgY29uZGl0aW9uXG4iKSk7CisgICAgICAgIC8vICAgICAvLyBUT0RPIGNo ZWNrIDQuMTIgZm9yIHNwbGl0cworICAgICAgICAgLy8gfQorCisgICAgICAgIGlmIChlaGNp LT50Ynl0ZXMgJiYgZWhjaS0+cGlkID09IFVTQl9UT0tFTl9JTikgeworICAgICAgICAgICAg QVNTRVJUKHJldCA+IDApOworICAgICAgICAgICAgZWhjaV9idWZmZXJfcncoZWhjaSwgcWgs IHJldCwgMSk7CisjaWZkZWYgVERFQlVHCisgICAgICAgICAgICBwcmludGYoIkRhdGEgYWZ0 ZXIgZXhlY3V0aW9uOlxuIik7CisgICAgICAgICAgICAvLyBkdW1wX2RhdGEoZWhjaS0+YnVm ZmVyLCBlaGNpLT50Ynl0ZXMgPCA2NCA/IGVoY2ktPnRieXRlcyA6IDY0KTsKKyAgICAgICAg ICAgIC8vIGRlY29kZV9kYXRhKGVoY2ktPnBpZCwgZWhjaS0+YnVmZmVyLCByZXQpOworI2Vu ZGlmCisgICAgICAgICAgICBlaGNpLT50Ynl0ZXMgLT0gcmV0OworICAgICAgICB9IGVsc2UK KyAgICAgICAgICAgIGVoY2ktPnRieXRlcyA9IDA7CisKKyAgICAgICAgQVNTRVJUKGVoY2kt PnRieXRlcyA+PSAwKTsKKworICAgICAgICBzZXRfZmllbGQoJnFoLT50b2tlbiwgZWhjaS0+ dGJ5dGVzLAorICAgICAgICAgICAgICAgICAgIFFURF9UT0tFTl9UQllURVNfTUFTSywgUVRE X1RPS0VOX1RCWVRFU19TSCk7CisgICAgfQorCisgICAgcWgtPnRva2VuIF49IFFURF9UT0tF Tl9EVE9HR0xFOworICAgIHFoLT50b2tlbiAmPSB+UVREX1RPS0VOX0FDVElWRTsKKworICAg IGlmIChxaC0+dG9rZW4gJiBRVERfVE9LRU5fSU9DKSB7CisgICAgICAgIC8vIFRPRE8gc2hv dWxkIGRvIHRoaXMgYWZ0ZXIgd3JpdGViYWNrIHRvIG1lbW9yeQorICAgICAgICBlaGNpX3Nl dF9pbnRlcnJ1cHQoZWhjaSwgVVNCU1RTX0lOVCk7CisgICAgfQorI2lmZGVmIERFQlVHX1BB Q0tFVAorICAgIERFQlVHKCgiUUggYWZ0ZXIgZXhlY3V0ZTotXG4iKSk7CisgICAgZHVtcF9x aChxaCwgTkxQVFJfR0VUKGVoY2ktPnFoYWRkcikpOworI2VuZGlmCisKKyNpZmRlZiBUREVC VUcKKyAgICBwcmludGYoIlVTQlRSQU4gUlNQICUzZCAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuOiglNWQpICIsCisgICAgICAgICAgICB0cmFuc2FjdGlkLAorICAgICAgICAg ICAgcmV0KTsKKworICAgIGlmIChlaGNpLT5waWQgPT0gVVNCX1RPS0VOX0lOKSB7CisgICAg ICAgIHByaW50ZigiWyUwMlggJTAyWCAlMDJYICUwMlggLi4uXVxuIiwKKyAgICAgICAgICAg ICplaGNpLT5idWZmZXIsICooZWhjaS0+YnVmZmVyKzEpLAorICAgICAgICAgICAgKihlaGNp LT5idWZmZXIrMiksICooZWhjaS0+YnVmZmVyKzMpKTsKKyAgICB9CisgICAgZWxzZQorICAg ICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0OworfQorCisvLyA0 LjEwLjMKKworc3RhdGljIGludCBlaGNpX2V4ZWN1dGUoRUhDSVN0YXRlICplaGNpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBxaGFkZHIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIEVIQ0lxaCAqcWgpCit7CisgICAgVVNCUG9ydCAqcG9ydDsKKyAgICBV U0JEZXZpY2UgKmRldjsKKyAgICBpbnQgc21hc2s7CisgICAgaW50IG1heHBrdDsKKyAgICBp bnQgcmV0OworICAgIGludCBpOworICAgIGludCBlbmRwOworICAgIGludCBkZXZhZHI7CisK KyAgICBzbWFzayA9IFFIX0VQQ0FQX1NNQVNLX01BU0sgJiBxaC0+ZXBjYXA7CisgICAgZWhj aS0+dGJ5dGVzID0ocWgtPnRva2VuICYgUVREX1RPS0VOX1RCWVRFU19NQVNLKSA+PiBRVERf VE9LRU5fVEJZVEVTX1NIOworICAgIGVoY2ktPnBpZCA9KHFoLT50b2tlbiAmIFFURF9UT0tF Tl9QSURfTUFTSykgPj4gUVREX1RPS0VOX1BJRF9TSDsKKyAgICBtYXhwa3QgPSBnZXRfZmll bGQocWgtPmVwY2hhciwgUUhfRVBDSEFSX01QTEVOX01BU0ssIFFIX0VQQ0hBUl9NUExFTl9T SCk7CisgICAgZW5kcCA9IGdldF9maWVsZChxaC0+ZXBjaGFyLCBRSF9FUENIQVJfRVBfTUFT SywgUUhfRVBDSEFSX0VQX1NIKTsKKyAgICBkZXZhZHIgPSBnZXRfZmllbGQocWgtPmVwY2hh ciwgUUhfRVBDSEFSX0RFVkFERFJfTUFTSywgMCk7CisKKyAgICBpZiAoICEocWgtPnRva2Vu ICYgUVREX1RPS0VOX0FDVElWRSkpIHsKKyAgICAgICAgcHJpbnRmKCJBdHRlbXB0aW5nIHRv IGV4ZWN1dGUgaW5hY3RpdmUgUUhcbiIpOworICAgICAgICBleGl0KDEpOzsKKyAgICB9CisK KyAgICBpZiAoc21hc2spIHsKKyAgICAgICAgREVCVUcoKCJhY3RpdmUgaW50ZXJydXB0IHRy YW5zZmVyIGZyaW5kZXggJWQgZm9yIGRldiAlZCBFUCAlZFxuIiwKKyAgICAgICAgICAgICAg ICBlaGNpLT5mcmluZGV4LCBkZXZhZHIsIGVuZHApKTsKKyAgICAgICAgLy8gVE9ETyBhcmUg aW50ZXJydXB0IGFsd2F5cyBJTiA/CisgICAgICAgIGVoY2ktPnBpZCA9IFVTQl9UT0tFTl9J TjsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVRygoIkFjdGl2ZSBub24taW50ZXJydXB0 IFFILCBleGVjdXRpbmdcbiIpKTsKKworICAgICAgICBERUJVRygoInBpZCBpcyAlMlhcbiIs IGVoY2ktPnBpZCkpOworCisgICAgICAgIHN3aXRjaChlaGNpLT5waWQpIHsKKyAgICAgICAg Y2FzZSAwOiBlaGNpLT5waWQgPSBVU0JfVE9LRU5fT1VUOyBicmVhazsKKyAgICAgICAgY2Fz ZSAxOiBlaGNpLT5waWQgPSBVU0JfVE9LRU5fSU47IGJyZWFrOworICAgICAgICBjYXNlIDI6 IGVoY2ktPnBpZCA9IFVTQl9UT0tFTl9TRVRVUDsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6 IHByaW50ZigiYmFkIHRva2VuXG4iKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICAvLyBUT0RPIHNldCByZWNsYW0KKworI2lmZGVmIERFQlVHX1BBQ0tFVAorICAgIERFQlVH KCgiUUggYmVmb3JlIGV4ZWN1dGU6LVxuIikpOworICAgIGR1bXBfcWgocWgsIE5MUFRSX0dF VChxaGFkZHIpKTsKKyNlbmRpZgorCisgICAgaWYgKGVoY2ktPnRieXRlcyAmJiBlaGNpLT5w aWQgIT0gVVNCX1RPS0VOX0lOKSB7CisgICAgICAgIGVoY2lfYnVmZmVyX3J3KGVoY2ksIHFo LCBlaGNpLT50Ynl0ZXMsIDApOworI2lmZGVmIFRERUJVRworICAgICAgICBwcmludGYoIkRh dGEgYmVmb3JlIGV4ZWN1dGlvbjpcbiIpOworICAgICAgICAvLyBkdW1wX2RhdGEoZWhjaS0+ YnVmZmVyLCBlaGNpLT50Ynl0ZXMgPCA2NCA/IGVoY2ktPnRieXRlcyA6IDY0KTsKKyAgICAg ICAgLy8gZGVjb2RlX2RhdGEoZWhjaS0+cGlkLCBlaGNpLT5idWZmZXIsIGVoY2ktPnRieXRl cyk7CisjZW5kaWYKKyAgICB9CisKKyNpZmRlZiBUREVCVUcKKyAgICBwcmludGYoIlxuVVNC VFJBTiBSRVEgJTNkIGRldjolZCBlcDolZCBwaWQ6JTAyWCAlcyBieXRlczooJTVkKSAiLAor ICAgICAgICAgICAgKyt0cmFuc2FjdGlkLAorICAgICAgICAgICAgZGV2YWRyLAorICAgICAg ICAgICAgZW5kcCwKKyAgICAgICAgICAgIGVoY2ktPnBpZCwKKyAgICAgICAgICAgKGVoY2kt PnBpZCA9PSBVU0JfVE9LRU5fU0VUVVAgPyAiKFNFVFVQKSIgOgorICAgICAgICAgICAoZWhj aS0+cGlkID09IFVTQl9UT0tFTl9JTiA/ICIoSU4pICAgIiA6CisgICAgICAgICAgIChlaGNp LT5waWQgPT0gVVNCX1RPS0VOX09VVCA/ICIoT1VUKSAgIiA6ICIoKioqKiopIikpKSwKKyAg ICAgICAgICAgIGVoY2ktPnRieXRlcyk7CisKKyAgICBpZiAoZWhjaS0+cGlkICE9IFVTQl9U T0tFTl9JTikgeworICAgICAgICBwcmludGYoIlslMDJYICUwMlggJTAyWCAlMDJYIC4uLl1c biIsCisgICAgICAgICAgICAqZWhjaS0+YnVmZmVyLCAqKGVoY2ktPmJ1ZmZlcisxKSwKKyAg ICAgICAgICAgICooZWhjaS0+YnVmZmVyKzIpLCAqKGVoY2ktPmJ1ZmZlciszKSk7CisgICAg fQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisKKyAgICByZXQg PSBVU0JfUkVUX05PREVWOworCisgICAgZm9yKGkgPSAwOyBpIDwgTkJfUE9SVFM7IGkrKykg eworICAgICAgICBwb3J0ID0gJmVoY2ktPnBvcnRzW2ldOworICAgICAgICBkZXYgPSBwb3J0 LT5kZXY7CisKKyAgICAgICAgLy8gVE9ETyBzb21ldGltZSB3ZSB3aWxsIGFsc28gbmVlZCB0 byBjaGVjayBpZiB3ZSBhcmUgdGhlIHBvcnQgb3duZXIKKworICAgICAgICBpZiAoIShlaGNp LT5wb3J0c2NbaV0gJihQT1JUU0NfQ09OTkVDVCkpKSB7CisgICAgICAgICAgICBERUJVRygo IlBvcnQgJWQsIG5vIGV4ZWMsIG5vdCBjb25uZWN0ZWQoJTA4WClcbiIsCisgICAgICAgICAg ICAgICAgICAgIGksIGVoY2ktPnBvcnRzY1tpXSkpOworICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgIH0KKworICAgICAgICBlaGNpLT51c2JfcGFja2V0LnBpZCA9IGVoY2ktPnBp ZDsKKyAgICAgICAgZWhjaS0+dXNiX3BhY2tldC5kZXZhZGRyID0gZGV2YWRyOworICAgICAg ICBlaGNpLT51c2JfcGFja2V0LmRldmVwID0gZW5kcDsKKyAgICAgICAgZWhjaS0+dXNiX3Bh Y2tldC5kYXRhID0gZWhjaS0+YnVmZmVyOworICAgICAgICBlaGNpLT51c2JfcGFja2V0Lmxl biA9IGVoY2ktPnRieXRlczsKKyAgICAgICAgZWhjaS0+dXNiX3BhY2tldC5jb21wbGV0ZV9j YiA9IGVoY2lfYXN5bmNfY29tcGxldGVfcGFja2V0OworICAgICAgICBlaGNpLT51c2JfcGFj a2V0LmNvbXBsZXRlX29wYXF1ZSA9IGVoY2k7CisKKyAgICAgICAgREVCVUcoKCJjYWxsaW5n IGRldi0+aW5mby0+aGFuZGxlX3BhY2tldFxuIikpOworICAgICAgICByZXQgPSBkZXYtPmlu Zm8tPmhhbmRsZV9wYWNrZXQoZGV2LCAmZWhjaS0+dXNiX3BhY2tldCk7CisKKyAgICAgICAg aWYgKHJldCAhPSBVU0JfUkVUX05PREVWKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor CisgICAgREVCVUcoKCJleGl0IGxvb3AgZGV2LT5pbmZvLT5oYW5kbGVfcGFja2V0XG4iKSk7 CisKKyAgICBpZiAocmV0ID4gQlVGRl9TSVpFIHx8IGVoY2ktPnRieXRlcyA+IEJVRkZfU0la RSkgeworICAgICAgICBwcmludGYoImJvZ3VzIFFIIGJ5dGUgY291bnRcbiIpOworICAgICAg ICBkdW1wX3FoKHFoLCBOTFBUUl9HRVQocWhhZGRyKSk7CisgICAgICAgIEFTU0VSVChyZXQg PD0gQlVGRl9TSVpFICYmIGVoY2ktPnRieXRlcyA8PSBCVUZGX1NJWkUpOworICAgIH0KKwor ICAgIGlmIChyZXQgPT0gVVNCX1JFVF9BU1lOQykgeworICAgICAgICBlaGNpLT5hc3luY19w b3J0X2luX3Byb2dyZXNzID0gaTsKKyAgICAgICAgZWhjaS0+YXN5bmNfY29tcGxldGUgPSAw OworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qICA0LjcuMgorICovCisKK3N0 YXRpYyB2b2lkIGVoY2lfcHJvY2Vzc19pdGQoRUhDSVN0YXRlICplaGNpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFSENJaXRkICppdGQpCit7CisgICAgVVNCUG9ydCAqcG9y dDsKKyAgICBVU0JEZXZpY2UgKmRldjsKKyAgICBpbnQgcmV0OworICAgIGludCBpLCBqOwor ICAgIGludCBwdHI7CisgICAgaW50IHBpZDsKKyAgICBpbnQgcGc7CisgICAgaW50IGxlbjsK KyAgICBpbnQgZGlyOworICAgIGludCBkZXZhZHI7CisgICAgaW50IGVuZHA7CisgICAgaW50 IG1heHBrdDsKKworICAgIGRpciA9KGl0ZC0+YnVmcHRyWzFdICYgSVREX0JVRlBUUl9ESVJF Q1RJT04pOworICAgIGRldmFkciA9IGdldF9maWVsZChpdGQtPmJ1ZnB0clswXSwKKyAgICAg ICAgICAgICAgICAgICAgICAgIElURF9CVUZQVFJfREVWQUREUl9NQVNLLCAwKTsKKyAgICBl bmRwID0gZ2V0X2ZpZWxkKGl0ZC0+YnVmcHRyWzBdLAorICAgICAgICAgICAgICAgICAgICAg IElURF9CVUZQVFJfRVBfTUFTSywgSVREX0JVRlBUUl9FUF9TSCk7CisgICAgbWF4cGt0ID0g Z2V0X2ZpZWxkKGl0ZC0+YnVmcHRyWzFdLCBJVERfQlVGUFRSX01BWFBLVF9NQVNLLCAwKTsK KworI2lmZGVmIEVIQ0lfTk9NSUNST0ZSQU1FUworICAgIGZvcihpID0gMDsgaSA8IDg7IGkr KykgeworI2Vsc2UKKyAgICBpID0oZWhjaS0+ZnJpbmRleCAmIDcpOworI2VuZGlmCisKKyAg ICBpZiAoaXRkLT50cmFuc2FjdFtpXSAmIElURF9YQUNUX0FDVElWRSkgeworICAgICAgICBE RUJVRygoIklTT0NIUk9OT1VTIGFjdGl2ZSBmb3IgZnJhbWUgJWQsIGludGVydmFsICVkXG4i LAorICAgICAgICAgICAgICAgIGVoY2ktPmZyaW5kZXggPj4gMywgaSkpOworCisgICAgICAg IHBnID0gZ2V0X2ZpZWxkKGl0ZC0+dHJhbnNhY3RbaV0sIElURF9YQUNUX1BHU0VMX01BU0ss CisgICAgICAgICAgICAgICAgICAgICAgICBJVERfWEFDVF9QR1NFTF9TSCk7CisgICAgICAg IHB0ciA9KGl0ZC0+YnVmcHRyW3BnXSAmIElURF9CVUZQVFJfTUFTSykgfAorICAgICAgICAg ICAgIChpdGQtPnRyYW5zYWN0W2ldICYgSVREX1hBQ1RfT0ZGU0VUX01BU0spOworICAgICAg ICBsZW4gPSBnZXRfZmllbGQoaXRkLT50cmFuc2FjdFtpXSwgSVREX1hBQ1RfTEVOR1RIX01B U0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgSVREX1hBQ1RfTEVOR1RIX1NIKTsKKwor ICAgICAgICBBU1NFUlQobGVuIDw9IEJVRkZfU0laRSk7CisKKyAgICAgICAgREVCVUcoKCJJ U09DSDogYnVmZmVyICUwOFggbGVuICVkXG4iLCBwdHIsIGxlbikpOworCisgICAgICAgIGlm ICghZGlyKSB7CisgICAgICAgICAgICBjcHVfcGh5c2ljYWxfbWVtb3J5X3J3KHB0ciwgJmVo Y2ktPmJ1ZmZlclswXSwgbGVuLCAwKTsKKyAgICAgICAgICAgIHBpZCA9IFVTQl9UT0tFTl9P VVQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcGlkID0gVVNCX1RPS0VOX0lOOwor CisgICAgICAgIHJldCA9IFVTQl9SRVRfTk9ERVY7CisKKyAgICAgICAgZm9yKGogPSAwOyBq IDwgTkJfUE9SVFM7IGorKykgeworICAgICAgICAgICAgcG9ydCA9ICZlaGNpLT5wb3J0c1tq XTsKKyAgICAgICAgICAgIGRldiA9IHBvcnQtPmRldjsKKworICAgICAgICAgICAgLy8gVE9E TyBzb21ldGltZSB3ZSB3aWxsIGFsc28gbmVlZCB0byBjaGVjayBpZiB3ZSBhcmUgdGhlIHBv cnQgb3duZXIKKworICAgICAgICAgICAgaWYgKCEoZWhjaS0+cG9ydHNjW2pdICYoUE9SVFND X0NPTk5FQ1QpKSkgeworICAgICAgICAgICAgICAgIERFQlVHKCgiUG9ydCAlZCwgbm8gZXhl Yywgbm90IGNvbm5lY3RlZCglMDhYKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGos IGVoY2ktPnBvcnRzY1tqXSkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgfQorCisgICAgICAgICAgICBlaGNpLT51c2JfcGFja2V0LnBpZCA9IGVoY2ktPnBp ZDsKKyAgICAgICAgICAgIGVoY2ktPnVzYl9wYWNrZXQuZGV2YWRkciA9IGRldmFkcjsKKyAg ICAgICAgICAgIGVoY2ktPnVzYl9wYWNrZXQuZGV2ZXAgPSBlbmRwOworICAgICAgICAgICAg ZWhjaS0+dXNiX3BhY2tldC5kYXRhID0gZWhjaS0+YnVmZmVyOworICAgICAgICAgICAgZWhj aS0+dXNiX3BhY2tldC5sZW4gPSBsZW47CisgICAgICAgICAgICBlaGNpLT51c2JfcGFja2V0 LmNvbXBsZXRlX2NiID0gZWhjaV9hc3luY19jb21wbGV0ZV9wYWNrZXQ7CisgICAgICAgICAg ICBlaGNpLT51c2JfcGFja2V0LmNvbXBsZXRlX29wYXF1ZSA9IGVoY2k7CisKKyAgICAgICAg ICAgIERFQlVHKCgiY2FsbGluZyBkZXYtPmluZm8tPmhhbmRsZV9wYWNrZXRcbiIpKTsKKyAg ICAgICAgICAgIHJldCA9IGRldi0+aW5mby0+aGFuZGxlX3BhY2tldChkZXYsICZlaGNpLT51 c2JfcGFja2V0KTsKKworICAgICAgICAgICAgaWYgKHJldCAhPSBVU0JfUkVUX05PREVWKQor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogIEluIGlz b2NoLCB0aGVyZSBpcyBubyBmYWNpbGl0eSB0byBpbmRpY2F0ZSBhIE5BSyBzbyBsZXQncwor ICAgICAgICAgKiAgaW5zdGVhZCBqdXN0IGNvbXBsZXRlIGEgemVyby1ieXRlIHRyYW5zYWN0 aW9uLiAgU2V0dGluZworICAgICAgICAgKiAgREJFUlIgc2VlbXMgdG9vIGRyYWNvbmlhbi4K KyAgICAgICAgICovCisKKyAgICAgICAgaWYgKHJldCA9PSBVU0JfUkVUX05BSykgeworICAg ICAgICAgICAgaWYgKGVoY2ktPmlzb2NoX3BhdXNlID4gMCkgeworICAgICAgICAgICAgICAg IERFQlVHKCgiSVNPQ0g6IHJlY2VpdmVkIGEgTkFLIGJ1dCBwYXVzZWQgc28gcmV0dXJuaW5n XG4iKSk7CisgICAgICAgICAgICAgICAgZWhjaS0+aXNvY2hfcGF1c2UtLTsKKyAgICAgICAg ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVoY2ktPmlzb2NoX3Bh dXNlID09IC0xKSB7CisgICAgICAgICAgICAgICAgREVCVUcoKCJJU09DSDogcmVjdiBOQUsg JiBpc29jaCBwYXVzZSBpbmFjdGl2ZSwgc2V0dGluZ1xuIikpOworICAgICAgICAgICAgICAg IC8vIFBhdXNlIGZyaW5kZXggZm9yIHVwIHRvIDUwIG1zZWMgd2FpdGluZyBmb3IgZGF0YSBm cm9tCisgICAgICAgICAgICAgICAgLy8gcmVtb3RlCisgICAgICAgICAgICAgICAgZWhjaS0+ aXNvY2hfcGF1c2UgPSA1MDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIERFQlVHKCgiSVNPQ0g6IGlzb2NoIHBhdXNl IHRpbWVvdXQhIHJldHVybiAwXG4iKSk7CisgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERFQlVHKCgiSVNP Q0g6IHJlY2VpdmVkIEFDSywgY2xlYXJpbmcgcGF1c2VcbiIpKTsKKyAgICAgICAgICAgIGVo Y2ktPmlzb2NoX3BhdXNlID0gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmV0ID49 IDApIHsKKyAgICAgICAgICAgIGl0ZC0+dHJhbnNhY3RbaV0gJj0gfklURF9YQUNUX0FDVElW RTsKKworICAgICAgICAgICAgaWYgKGl0ZC0+dHJhbnNhY3RbaV0gJiBJVERfWEFDVF9JT0Mp IHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPIHNob3VsZCBkbyB0aGlzIGFmdGVyIHdyaXRl YmFjayB0byBtZW1vcnkKKyAgICAgICAgICAgICAgICBlaGNpX3NldF9pbnRlcnJ1cHQoZWhj aSwgVVNCU1RTX0lOVCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp ZiAocmV0ID49IDAgJiYgZGlyKSB7CisgICAgICAgICAgICBjcHVfcGh5c2ljYWxfbWVtb3J5 X3J3KHB0ciwgJmVoY2ktPmJ1ZmZlclswXSwgbGVuLCAxKTsKKworICAgICAgICAgICAgaWYg KHJldCAhPSBsZW4pIHsKKyAgICAgICAgICAgICAgICBERUJVRygoIklTT0NIIElOIGV4cGVj dGVkICVkLCBnb3QgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBsZW4sIHJldCkp OworICAgICAgICAgICAgICAgIHNldF9maWVsZCgmaXRkLT50cmFuc2FjdFtpXSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IElURF9YQUNUX0xFTkdUSF9NQVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRE X1hBQ1RfTEVOR1RIX1NIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor I2lmZGVmIEVIQ0lfTk9NSUNST0ZSQU1FUworICAgIH0KKyNlbmRpZgorfQorCisvKiBUaGlz IGlzIHRoZSBzdGF0ZSBtYWNoaW5lIHRoYXQgaXMgY29tbW9uIHRvIGJvdGggYXN5bmMgYW5k IHBlcmlvZGljICovCisKK3N0YXRpYyBpbnQgZWhjaV9hZHZhbmNlX3N0YXRlKEVIQ0lTdGF0 ZSAqZWhjaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFzeW5jLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdGUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVudHJ5KQoreworICAgIEVIQ0lxaCAq cWggPSAmZWhjaS0+cWg7CisgICAgRUhDSXF0ZCAqcXRkID0gJmVoY2ktPnF0ZDsKKyAgICBF SENJaXRkIGl0ZDsKKyAgICBpbnQgYWdhaW4gPSAwOworICAgIGludCBsb29wY291bnQgPSAw OworICAgIGludCB0cmFuc2FjdEN0cjsKKyAgICBpbnQgc21hc2s7CisgICAgaW50IHJlbG9h ZDsKKyAgICBpbnQgbmFrY250OworCisgICAgZG8geworICAgICAgICBERUJVRygoImFkdmFu Y2Vfc3RhdGU6IGFnYWluPSVkXG4iLCBhZ2FpbikpOworICAgICAgICBhZ2FpbiA9IDA7Cisg ICAgICAgIC8vIEFTU0VSVChsb29wY291bnQrKyA8IE1BWF9JVEVSQVRJT05TKTsKKworICAg ICAgICBzd2l0Y2goc3RhdGUpIHsKKyAgICAgICAgLyogIFRoaXMgc3RhdGUgaXMgdGhlIGVu dHJ5IHBvaW50IGZvciBhc3luY2hyb25vdXMgc2NoZWR1bGUKKyAgICAgICAgICogIHByb2Nl c3NpbmcuICBFbnRyeSBoZXJlIGNvbnNpdHV0ZXMgYSBFSENJIHN0YXJ0IGV2ZW50IHN0YXRl KDQuOC41KQorICAgICAgICAgKi8KKyAgICAgICAgY2FzZSBFU1RfV0FJVExJU1RIRUFEOgor ICAgICAgICAgICAgREVCVUcoKCJXQUlUTElTVEhFQURcbiIpKTsKKworICAgICAgICAgICAg aWYgKGFzeW5jKQorICAgICAgICAgICAgICAgIGVoY2ktPnVzYnN0cyB8PSBVU0JTVFNfUkVD OworCisgICAgICAgICAgICAvKiAgRmluZCB0aGUgaGVhZCBvZiB0aGUgbGlzdAorICAgICAg ICAgICAgICovCisKKyAgICAgICAgICAgIGZvcihsb29wY291bnQgPSAwOyBsb29wY291bnQg PCBNQVhfUUg7IGxvb3Bjb3VudCsrKSB7CisgICAgICAgICAgICAgICAgZ2V0X2R3b3JkcyhO TFBUUl9HRVQoZW50cnkpLCh1aW50MzJfdCAqKSBxaCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YoRUhDSXFoKSA+PiAyKTsKKworICAgICAgICAgICAgICAgIGlmIChx aC0+ZXBjaGFyICYgUUhfRVBDSEFSX0gpIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUco KCJRSCAlMDhYIGlzIHRoZSBIRUFEIG9mIHRoZSBsaXN0XG4iLCBlbnRyeSkpOworICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg ICAgICBERUJVRygoIlFIICUwOFggaXMgTk9UIHRoZSBIRUFEIG9mIHRoZSBsaXN0XG4iLCBl bnRyeSkpOworICAgICAgICAgICAgICAgIGVudHJ5ID0gcWgtPm5leHQ7CisgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgIGVudHJ5IHw9KE5MUFRSX1RZUEVfUUggPDwgMSk7CisgICAg ICAgICAgICBBU1NFUlQobG9vcGNvdW50IDwgTUFYX1FIKTsKKyAgICAgICAgICAgIGxvb3Bj b3VudCA9IDA7CisKKyAgICAgICAgICAgIHN0YXRlID0gRVNUX0ZFVENIRU5UUlk7CisgICAg ICAgICAgICBhZ2FpbiA9IDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiAg VGhpcyBzdGF0ZSBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHBlcmlvZGljIHNjaGVkdWxlCisg ICAgICAgICAqICBwcm9jZXNzaW5nIGFzIHdlbGwgYXMgYmVpbmcgYSBjb250aW51YXRpb24g c3RhdGUgZm9yIGFzeW5jCisgICAgICAgICAqICBwcm9jZXNzaW5nLgorICAgICAgICAgKi8K KyAgICAgICAgY2FzZSBFU1RfRkVUQ0hFTlRSWToKKyAgICAgICAgICAgIERFQlVHKCgiRkVU Q0hFTlRSWVxuIikpOworCisgICAgICAgICAgICBpZiAocWVtdV9nZXRfY2xvY2sodm1fY2xv Y2spIC8gMTAwMCA+IGVoY2ktPmZyYW1lX2VuZF91c2VjKSB7CisgICAgICAgICAgICAgICAg aWYgKGFzeW5jKSB7CisgICAgICAgICAgICAgICAgICAgIERFQlVHKCgiRlJBTUUgdGltZXIg ZWxhcHNlZCwgZXhpdCBzdGF0ZSBtYWNoaW5lXG4iKSk7CisgICAgICAgICAgICAgICAgICAg IHN0YXRlID0gRVNUX0FDVElWRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIERFQlVHKCgiV0FSTklO RyAtIGZyYW1lIHRpbWVyIGVsYXBzZWQgZHVyaW5nIHBlcmlvZGljXG4iKSk7CisgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgIGlmIChOTFBUUl9UQklUKGVudHJ5KSkgeworICAgICAg ICAgICAgICAgIHN0YXRlID0gRVNUX0FDVElWRTsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKE5MUFRSX1RZUEVfR0VUKGVudHJ5 KSA9PSBOTFBUUl9UWVBFX1FIKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBFU1RfRkVU Q0hRSDsKKyAgICAgICAgICAgICAgICBlaGNpLT5xaGFkZHIgPSBlbnRyeTsKKyAgICAgICAg ICAgICAgICBhZ2FpbiA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgIGlmIChOTFBUUl9UWVBFX0dFVChlbnRyeSkgPT0gTkxQVFJf VFlQRV9JVEQpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEVTVF9GRVRDSElURDsKKyAg ICAgICAgICAgICAgICBlaGNpLT5pdGRhZGRyID0gZW50cnk7CisgICAgICAgICAgICAgICAg YWdhaW4gPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAvLyBUT0RPIGhhbmRsZSB0eXBlcyBvdGhlciB0aGFuIFFICisgICAgICAg ICAgICBBU1NFUlQoTkxQVFJfVFlQRV9HRVQoZW50cnkpID09IE5MUFRSX1RZUEVfUUgpOwor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFU1RfRkVUQ0hRSDoKKyAgICAg ICAgICAgIGdldF9kd29yZHMoTkxQVFJfR0VUKGVoY2ktPnFoYWRkciksKHVpbnQzMl90ICop IHFoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVIQ0lxaCkgPj4gMik7Cisg ICAgICAgICAgICBERUJVRygoIkZFVENIUUg6IEZldGNoZWQgUUggYXQgYWRkcmVzcyAlMDhY ICIKKyAgICAgICAgICAgICAgICAgICAgIihuZXh0IGlzICUwOFgsIGgtYml0IGlzICVkKVxu IiwKKyAgICAgICAgICAgICAgICAgICAgZWhjaS0+cWhhZGRyLCBxaC0+bmV4dCwgcWgtPmVw Y2hhciAmIFFIX0VQQ0hBUl9IKSk7CisKKyNpZmRlZiBERUJVR19QQUNLRVQKKyAgICAgICAg ICAgIGR1bXBfcWgocWgsIE5MUFRSX0dFVChlaGNpLT5xaGFkZHIpKTsKKyNlbmRpZgorCisg ICAgICAgICAgICBpZiAoYXN5bmMpIHsKKyAgICAgICAgICAgICAgICAvKiAgRUhDSSBzcGVj IHZlcnNpb24gMS4wIFNlY3Rpb24gNC44LjMKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgICAgICBpZiAocWgtPmVwY2hhciAmIFFIX0VQQ0hBUl9IKSB7CisgICAgICAgICAg ICAgICAgICAgIERFQlVHKCgiaC1iaXQgc2V0XG4iKSk7CisKKyAgICAgICAgICAgICAgICAg ICAgaWYgKCEoZWhjaS0+dXNic3RzICYgVVNCU1RTX1JFQykpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIERFQlVHKCgiaC1iaXQgYW5kICFyZWNsYW0sIGRvbmVcbiIpKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXRlID0gRVNUX0FDVElWRTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIC8qICBFSENJIHNwZWMgdmVyc2lvbiAxLjAgU2VjdGlv biA0LjEwLjEKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoICEo cWgtPmVwY2FwICYgUUhfRVBDQVBfU01BU0tfTUFTSykpIHsKKyAgICAgICAgICAgICAgICAg ICAgREVCVUcoKCJub3QgaW50ciwgY2xlYXIgcmVjbGFtXG4iKSk7CisgICAgICAgICAgICAg ICAgICAgIGVoY2ktPnVzYnN0cyAmPSB+VVNCU1RTX1JFQzsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIERFQlVHKCgiZXhlYzog cWggY2hlY2ssIGZyaW5kZXggaXMgJWQsJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgKGVoY2ktPmZyaW5kZXggPj4gMyksKGVoY2ktPmZyaW5kZXggJiA3KSkpOworICAgICAg ICAgICAgfQorCisgICAgICAgICAgICByZWxvYWQgPSBnZXRfZmllbGQocWgtPmVwY2hhciwg UUhfRVBDSEFSX1JMX01BU0ssIFFIX0VQQ0hBUl9STF9TSCk7CisKKyAgICAgICAgICAgIGlm IChyZWxvYWQpIHsKKyAgICAgICAgICAgICAgICBERUJVRygoInJlbG9hZGluZyBuYWtjbnQg dG8gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICByZWxvYWQpKTsKKyAgICAgICAg ICAgICAgICBzZXRfZmllbGQoJnFoLT5hbHRuZXh0LCByZWxvYWQsIFFIX0FMVE5FWFRfTkFL Q05UX01BU0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBRSF9BTFRORVhUX05BS0NO VF9TSCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChxaC0+dG9rZW4gJiBR VERfVE9LRU5fQUNUSVZFKSB7CisgICAgICAgICAgICAgICAgaWYgKChxaC0+dG9rZW4gJiBR VERfVE9LRU5fSEFMVCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBY3RpdmUs IEhhbHQsICoqIElMTEVHQUwgKipcbiIpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9 IEVTVF9BQ1RJVkU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgICAgREVCVUcoKCJBY3RpdmUsICFIYWx0LCBleGVjdXRlIC0gZmV0Y2hxdGRcbiIpKTsK KyAgICAgICAgICAgICAgICAgICAgZWhjaS0+cXRkYWRkciA9IHFoLT5jdXJyZW50OworICAg ICAgICAgICAgICAgICAgICBzdGF0ZSA9IEVTVF9GRVRDSFFURDsKKyAgICAgICAgICAgICAg ICAgICAgYWdhaW4gPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgaWYgKHFoLT50b2tlbiAmIFFURF9UT0tFTl9IQUxUKSB7 CisgICAgICAgICAgICAgICAgICAgIERFQlVHKCgiIUFjdGl2ZSwgSGFsdCwgZ28gaG9yaXpc biIpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBFU1RfSE9SSVpPTlRBTFFIOwor ICAgICAgICAgICAgICAgICAgICBhZ2FpbiA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgLyogIEVIQ0kgc3BlYyB2ZXJzaW9uIDEuMCBTZWN0 aW9uIDQuMTAuMgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAg ICAgREVCVUcoKCIhQWN0aXZlLCAhSGFsdCwgYWR2IHFcbiIpKTsKKyAgICAgICAgICAgICAg ICAgICAgc3RhdGUgPSBFU1RfQURWQU5DRVFVRVVFOworICAgICAgICAgICAgICAgICAgICBh Z2FpbiA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVTVF9GRVRDSElURDoKKyAgICAgICAgICAg IGdldF9kd29yZHMoTkxQVFJfR0VUKGVoY2ktPml0ZGFkZHIpLCh1aW50MzJfdCAqKSAmaXRk LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVIQ0lpdGQpID4+IDIpOworICAg ICAgICAgICAgREVCVUcoKCJGRVRDSElURDogRmV0Y2hlZCBJVEQgYXQgYWRkcmVzcyAlMDhY ICIKKyAgICAgICAgICAgICAgICAgICAgIihuZXh0IGlzICUwOFgpXG4iLAorICAgICAgICAg ICAgICAgICAgICBlaGNpLT5pdGRhZGRyLCBpdGQubmV4dCkpOworCisjaWZkZWYgREVCVUdf UEFDS0VUCisgICAgICAgICAgICBkdW1wX2l0ZCgmaXRkLCBOTFBUUl9HRVQoZWhjaS0+aXRk YWRkcikpOworI2VuZGlmCisKKyAgICAgICAgICAgIGVoY2lfcHJvY2Vzc19pdGQoZWhjaSwg Jml0ZCk7CisjaWZkZWYgREVCVUdfUEFDS0VUCisgICAgICAgICAgICBkdW1wX2l0ZCgmaXRk LCBOTFBUUl9HRVQoZWhjaS0+aXRkYWRkcikpOworI2VuZGlmCisgICAgICAgICAgICBwdXRf ZHdvcmRzKE5MUFRSX0dFVChlaGNpLT5pdGRhZGRyKSwodWludDMyX3QgKikgJml0ZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihFSENJaXRkKSA+PiAyKTsKKyAgICAgICAg ICAgIGVudHJ5ID0gaXRkLm5leHQ7CisgICAgICAgICAgICBzdGF0ZSA9IEVTVF9GRVRDSEVO VFJZOworICAgICAgICAgICAgYWdhaW4gPSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAg ICAgICAgY2FzZSBFU1RfQURWQU5DRVFVRVVFOgorICAgICAgICAgICAgREVCVUcoKCJBRFZB TkNFUVVFVUVcbiIpKTsKKyAgICAgICAgICAgIGlmICgocWgtPnRva2VuICYgUVREX1RPS0VO X1RCWVRFU19NQVNLKSAhPSAwICYmCisgICAgICAgICAgICAgICAgTkxQVFJfVEJJVChxaC0+ YWx0bmV4dCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGVoY2ktPnF0ZGFkZHIgPSBxaC0+ YWx0bmV4dDsKKyAgICAgICAgICAgICAgICBERUJVRygoInRieXRlcyE9MCBhbmQgdGJpdCA9 IDAsIGdvIHdpdGggYWx0bmV4dFxuIikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICBpZiAoTkxQVFJfVEJJVChxaC0+cXRkbmV4dCkpIHsKKyAgICAgICAgICAg ICAgICAgICAgc3RhdGUgPSBFU1RfSE9SSVpPTlRBTFFIOworICAgICAgICAgICAgICAgICAg ICBhZ2FpbiA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgICAgIGVoY2ktPnF0ZGFkZHIgPSBxaC0+cXRkbmV4dDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlID0gRVNUX0ZFVENIUVREOworICAg ICAgICAgICAgYWdhaW4gPSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz ZSBFU1RfRkVUQ0hRVEQ6CisgICAgICAgICAgICBERUJVRygoIkZFVENIUVREOiBGZXRjaGlu ZyBRVEQgYXQgYWRkcmVzcyAlMDhYXG4iLCBlaGNpLT5xdGRhZGRyKSk7CisgICAgICAgICAg ICBnZXRfZHdvcmRzKE5MUFRSX0dFVChlaGNpLT5xdGRhZGRyKSwodWludDMyX3QgKikgcXRk LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVIQ0lxdGQpID4+IDIpOworCisg ICAgICAgICAgICBpZiAocXRkLT50b2tlbiAmIFFURF9UT0tFTl9BQ1RJVkUpIHsKKyAgICAg ICAgICAgICAgICBzdGF0ZSA9IEVTVF9FWEVDVVRFOworICAgICAgICAgICAgICAgIGFnYWlu ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgREVCVUcoKCJhYm9ydCBhZHZhbmNlLCBub3QgYWN0aXZlXG4iKSk7 CisgICAgICAgICAgICAgICAgc3RhdGUgPSBFU1RfSE9SSVpPTlRBTFFIOworICAgICAgICAg ICAgICAgIGFnYWluID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFU1RfSE9SSVpPTlRB TFFIOgorICAgICAgICAgICAgZW50cnkgPSBxaC0+bmV4dDsKKyAgICAgICAgICAgIHN0YXRl ID0gRVNUX0ZFVENIRU5UUlk7CisgICAgICAgICAgICBhZ2FpbiA9IDE7CisgICAgICAgICAg ICBicmVhazsKKworICAgICAgICBjYXNlIEVTVF9FWEVDVVRFOgorICAgICAgICAgICAgaWYg KGFzeW5jKSB7CisgICAgICAgICAgICAgICAgREVCVUcoKCJcblxuPj4+Pj4gQVNZTkMgU1RB VEUgTUFDSElORSBleGVjdXRlXG4iKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIERFQlVHKCgiXG5cbj4+Pj4+IFBFUklPRElDIFNUQVRFIE1BQ0hJTkUgZXhl Y3V0ZVxuIikpOworICAgICAgICAgICAgfQorCisjaWZkZWYgREVCVUdfUEFDS0VUCisgICAg ICAgICAgICBkdW1wX3FoKHFoLCBOTFBUUl9HRVQoZWhjaS0+cWhhZGRyKSk7CisgICAgICAg ICAgICBkdW1wX3F0ZChxdGQsIE5MUFRSX0dFVChlaGNpLT5xdGRhZGRyKSk7CisjZW5kaWYK KworICAgICAgICAgICAgc21hc2sgPSBRSF9FUENBUF9TTUFTS19NQVNLICYgcWgtPmVwY2Fw OworCisjaWZuZGVmIEVIQ0lfTk9NSUNST0ZSQU1FUworICAgICAgICAgICAgaWYgKHNtYXNr ICYmKHNtYXNrICYoMSA8PChlaGNpLT5mcmluZGV4ICYgNykpKSA9PSAwKSB7CisgICAgICAg ICAgICAgICAgREVCVUcoKCJQRVJJT0RJQyBhY3RpdmUgbm90IGludGVydmFsOiAiCisgICAg ICAgICAgICAgICAgICAgICAgICAibWFzayBpcyAlZCwgIgorICAgICAgICAgICAgICAgICAg ICAgICAgImZyaW5kZXggaXMgJWQsJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBz bWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgIChlaGNpLT5mcmluZGV4ID4+IDMpLChl aGNpLT5mcmluZGV4ICYgNykpKTsKKworICAgICAgICAgICAgICAgIHN0YXRlID0gRVNUX0hP UklaT05UQUxRSDsKKyAgICAgICAgICAgICAgICBhZ2FpbiA9IDE7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAgICAgaWYgKHNt YXNrKSB7CisgICAgICAgICAgICAgICAgREVCVUcoKCJQRVJJT0RJQyBhY3RpdmUgISEhICIK KyAgICAgICAgICAgICAgICAgICAgICAgICJtYXNrIGlzICVkLCAiCisgICAgICAgICAgICAg ICAgICAgICAgICAiZnJpbmRleCBpcyAlZCwlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgIHNtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgKGVoY2ktPmZyaW5kZXggPj4g MyksKGVoY2ktPmZyaW5kZXggJiA3KSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg ICByZWxvYWQgPSBnZXRfZmllbGQocWgtPmVwY2hhciwgUUhfRVBDSEFSX1JMX01BU0ssIFFI X0VQQ0hBUl9STF9TSCk7CisgICAgICAgICAgICBuYWtjbnQgPSBnZXRfZmllbGQocWgtPmFs dG5leHQsIFFIX0FMVE5FWFRfTkFLQ05UX01BU0ssIAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFIX0FMVE5FWFRfTkFLQ05UX1NIKTsKKyAgICAgICAgICAgIGlmIChyZWxv YWQgJiYgIW5ha2NudCkgeworICAgICAgICAgICAgICAgIERFQlVHKCgiUkwgIT0gMCBidXQg TmFrQ250ID09IDAsIG5vIGV4ZWN1dGVcbiIpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9 IEVTVF9IT1JJWk9OVEFMUUg7CisgICAgICAgICAgICAgICAgYWdhaW4gPSAxOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cmFuc2Fj dEN0ciA9IGdldF9maWVsZChxaC0+ZXBjYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUUhfRVBDQVBfTVVMVF9NQVNLLCBRSF9FUENBUF9NVUxUX1NIKTsKKwor ICAgICAgICAgICAgLy8gVE9ETyB2ZXJpZnkgZW5vdWdoIHRpbWUgcmVtYWlucyBpbiB0aGUg dWZyYW1lIGFzIGluIDQuNC4xLjEKKworICAgICAgICAgICAgLy8gVE9ETyB3cml0ZSBiYWNr IHB0ciB0byBhc3luYyBsaXN0IHdoZW4gZG9uZSBvciBvdXQgb2YgdGltZQorCisgICAgICAg ICAgICAvLyBUT0RPIFdpbmRvd3MgZG9lcyBub3Qgc2VlbSB0byBldmVyIHNldCB0aGUgTVVM VCBmaWVsZAorCisjaWYgMAorICAgICAgICAgICAgaWYgKCF0cmFuc2FjdEN0ciAmJihxaC0+ ZXBjYXAgJiBRSF9FUENBUF9TTUFTS19NQVNLKSA+IDApCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgREVCVUcoKCJaRVJPIHRyYW5zYWN0Y3RyIGZvciBpbnQgcWgsIGdvIEhP UklaXG4iKSk7CisgICAgICAgICAgICAgICAgKnN0YXRlID0gRVNUX0hPUklaT05UQUxRSDsK KyAgICAgICAgICAgICAgICBhZ2FpbiA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAgICAgaWYgKCF0cmFuc2FjdEN0cikg eworICAgICAgICAgICAgICAgIHRyYW5zYWN0Q3RyID0gMTsgLy8gVE9ETyAtIGNoZWNrIGF0 IHdoYXQgbGV2ZWwgZG8gd2UgcmVwZWF0CisKKyAgICAgICAgICAgICAgICBpZiAocWgtPmVw Y2FwICYgUUhfRVBDQVBfU01BU0tfTUFTSykKKyAgICAgICAgICAgICAgICAgICAgREVCVUco KCJXQVJOIC0gWkVSTyB0cmFuc2FjdGN0ciBmb3JjZSB0byAxIGZvciBpbnRyXG4iKSk7Cisg ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIERFQlVHKCgiZXhlYzogY3RyIGlzICVkXG4i LCB0cmFuc2FjdEN0cikpOworICAgICAgICAgICAgREVCVUcoKCJleGVjOiBmcmluZGV4IGlz ICVkLCVkXG4iLAorICAgICAgICAgICAgICAgICAgIChlaGNpLT5mcmluZGV4ID4+IDMpLChl aGNpLT5mcmluZGV4ICYgNykpKTsKKworICAgICAgICAgICAgZWhjaV9xaF9kb19vdmVybGF5 KGVoY2ksIHFoLCBxdGQpOworICAgICAgICAgICAgZWhjaS0+ZXhlY19zdGF0dXMgPSBlaGNp X2V4ZWN1dGUoZWhjaSwgZWhjaS0+cWhhZGRyLCBxaCk7CisgICAgICAgICAgICBzdGF0ZSA9 IEVTVF9FWEVDVVRJTkc7CisKKyAgICAgICAgICAgIGlmIChlaGNpLT5leGVjX3N0YXR1cyAh PSBVU0JfUkVUX0FTWU5DKQorICAgICAgICAgICAgICAgIGFnYWluID0gMTsKKworICAgICAg ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFU1RfRVhFQ1VUSU5HOgorICAgICAgICAg ICAgREVCVUcoKCJFbnRlciBFWEVDVVRJTkdcbiIpKTsKKyAgICAgICAgICAgIGVoY2ktPmV4 ZWNfc3RhdHVzID0gZWhjaV9leGVjdXRlX2NvbXBsZXRlKGVoY2ksIHFoLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVoY2ktPmV4 ZWNfc3RhdHVzKTsKKworICAgICAgICAgICAgaWYgKGVoY2ktPmV4ZWNfc3RhdHVzID09IFVT Ql9SRVRfQVNZTkMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIERF QlVHKCgiZmluaXNoaW5nIGV4ZWNcbiIpKTsKKyAgICAgICAgICAgIHRyYW5zYWN0Q3RyID0g Z2V0X2ZpZWxkKHFoLT5lcGNhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRSF9FUENBUF9NVUxUX01BU0ssIFFIX0VQQ0FQX01VTFRfU0gpOworCisgICAgICAg ICAgICBpZiAodHJhbnNhY3RDdHIpCisgICAgICAgICAgICAgICAgdHJhbnNhY3RDdHItLTsK KworICAgICAgICAgICAgc2V0X2ZpZWxkKCZxaC0+ZXBjYXAsIHRyYW5zYWN0Q3RyLAorICAg ICAgICAgICAgICAgICAgICAgICBRSF9FUENBUF9NVUxUX01BU0ssIFFIX0VQQ0FQX01VTFRf U0gpOworCisgICAgICAgICAgICByZWxvYWQgPSBnZXRfZmllbGQocWgtPmVwY2hhciwgUUhf RVBDSEFSX1JMX01BU0ssIFFIX0VQQ0hBUl9STF9TSCk7CisgICAgICAgICAgICBuYWtjbnQg PSBnZXRfZmllbGQocWgtPmFsdG5leHQsIFFIX0FMVE5FWFRfTkFLQ05UX01BU0ssCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUUhfQUxUTkVYVF9OQUtDTlRfU0gpOworCisg ICAgICAgICAgICBpZiAocmVsb2FkICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoZWhj aS0+ZXhlY19zdGF0dXMgPT0gVVNCX1JFVF9OQUspIHsKKyAgICAgICAgICAgICAgICAgICAg bmFrY250LS07CisKKyAgICAgICAgICAgICAgICAgICAgREVCVUcoKCJOYWsgb2NjdXJlZCBh bmQgUkwgIT0gMCwgZGVjIE5ha0NudCB0byAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuYWtjbnQpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICBuYWtjbnQgPSByZWxvYWQ7CisKKyAgICAgICAgICAgICAgICAgICAgREVC VUcoKCJOYWsgZGlkbid0IG9jY3VyLCByZWxvYWRpbmcgdG8gJWRcbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbmFrY250KSk7CisgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgc2V0X2ZpZWxkKCZxaC0+YWx0bmV4dCwgbmFrY250LCBRSF9BTFRORVhU X05BS0NOVF9NQVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUUhfQUxUTkVYVF9O QUtDTlRfU0gpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAgICAgICAg ICAgICogIFdyaXRlIHRoZSBxaCBiYWNrIHRvIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeS4gIFRo aXMgc3RlcCBpc24ndAorICAgICAgICAgICAgICogIGluIHRoZSBFSENJIHNwZWMgYnV0IHdl IG5lZWQgdG8gZG8gaXQgc2luY2Ugd2UgZG9uJ3Qgc2hhcmUKKyAgICAgICAgICAgICAqICBw aHlzaWNhbCBtZW1vcnkgd2l0aCBvdXIgZ3Vlc3QgVk0uCisgICAgICAgICAgICAgKi8KKwor ICAgICAgICAgICAgREVCVUcoKCJ3cml0ZSBRSCB0byBWTSBtZW1vcnlcbiIpKTsKKyNpZmRl ZiBERUJVR19QQUNLRVQKKyAgICAgICAgICAgIGR1bXBfcWgocWgsIE5MUFRSX0dFVChlaGNp LT5xaGFkZHIpKTsKKyNlbmRpZgorICAgICAgICAgICAgcHV0X2R3b3JkcyhOTFBUUl9HRVQo ZWhjaS0+cWhhZGRyKSwodWludDMyX3QgKikgcWgsCisgICAgICAgICAgICAgICAgICAgICAg ICBzaXplb2YoRUhDSXFoKSA+PiAyKTsKKworICAgICAgICAgICAgLy8gNC4xMC41CisKKyAg ICAgICAgICAgIGlmIChxaC0+dG9rZW4gJiBRVERfVE9LRU5fQUNUSVZFKQorICAgICAgICAg ICAgICAgIHN0YXRlID0gRVNUX0hPUklaT05UQUxRSDsKKyAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICBzdGF0ZSA9IEVTVF9XUklURUJBQ0s7CisKKyAgICAgICAgICAgIGFn YWluID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRVNUX1dSSVRF QkFDSzoKKyAgICAgICAgICAgIC8qICBXcml0ZSBiYWNrIHRoZSBRVEQgZnJvbSB0aGUgUUgg YXJlYSAqLworICAgICAgICAgICAgREVCVUcoKCJ3cml0ZSBRVEQgdG8gVk0gbWVtb3J5XG4i KSk7CisgICAgICAgICAgICBwdXRfZHdvcmRzKE5MUFRSX0dFVChlaGNpLT5xdGRhZGRyKSwo dWludDMyX3QgKikgJnFoLT5xdGRuZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKEVIQ0lxdGQpID4+IDIpOworICAgICAgICAgICAgLyogVE9ETyBjb25maXJtIG5leHQg c3RhdGUuICBGb3Igbm93LCBrZWVwIGdvaW5nIGlmIGFzeW5jCisgICAgICAgICAgICAgKiBi dXQgc3RvcCBhZnRlciBvbmUgcXRkIGlmIHBlcmlvZGljCisgICAgICAgICAgICAgKi8KKyAg ICAgICAgICAgIC8vIGlmIChhc3luYykKKyAgICAgICAgICAgIC8vIHsKKyAgICAgICAgICAg ICAgICBzdGF0ZSA9IEVTVF9GRVRDSFFIOworICAgICAgICAgICAgICAgIGFnYWluID0gMTsK KyAgICAgICAgICAgIC8vIH0KKyAgICAgICAgICAgIC8vIGVsc2UKKyAgICAgICAgICAgLy8g ICAgICAgICAgc3RhdGUgPSBFU1RfQUNUSVZFOworICAgICAgICAgICAgYnJlYWs7CisKKyAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHByaW50ZigiQmFkIHN0YXRlIVxuIik7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKGFn YWluKTsKKworICAgIHJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIHZvaWQgZWhjaV9hZHZh bmNlX2FzeW5jX3N0YXRlKEVIQ0lTdGF0ZSAqZWhjaSkKK3sKKyAgICBzd2l0Y2goZWhjaS0+ YXN0YXRlKSB7CisgICAgY2FzZSBFU1RfSU5BQ1RJVkU6CisgICAgICAgIGlmIChlaGNpLT51 c2JjbWQgJiBVU0JDTURfQVNFKSB7CisgICAgICAgICAgICBERUJVRygoIkFTWU5DIGdvaW5n IGFjdGl2ZVxuIikpOworICAgICAgICAgICAgZWhjaS0+dXNic3RzIHw9IFVTQlNUU19BU1M7 CisgICAgICAgICAgICBlaGNpLT5hc3RhdGUgPSBFU1RfQUNUSVZFOworICAgICAgICAgICAg Ly8gTm8gYnJlYWssIGZhbGwgdGhyb3VnaCB0byBBQ1RJVkUKKyAgICAgICAgfSBlbHNlCisg ICAgICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVNUX0FDVElWRToKKyAgICAgICAgaWYg KCAhKGVoY2ktPnVzYmNtZCAmIFVTQkNNRF9BU0UpKSB7CisgICAgICAgICAgICBERUJVRygo IkFTWU5DIGdvaW5nIGluYWN0aXZlXG4iKSk7CisgICAgICAgICAgICBlaGNpLT51c2JzdHMg Jj0gflVTQlNUU19BU1M7CisgICAgICAgICAgICBlaGNpLT5hc3RhdGUgPSBFU1RfSU5BQ1RJ VkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIERFQlVHKCgi XG4gICAgPT09ICAgPT09ICAgPT09ICAgPT09ICAgPT09ICAgPT09XG5cbiIpKTsKKyAgICAg ICAgaWYgKGVoY2ktPnVzYmNtZCAmIFVTQkNNRF9JQUFEKSB7CisgICAgICAgICAgICAvKiAg QXN5bmMgYWR2YW5jZSBkb29yYmVsbCBpbnRlcnJ1cHRlZCByZXF1ZXN0ZWQKKyAgICAgICAg ICAgICAqLworICAgICAgICAgICAgZWhjaS0+dXNiY21kICY9IH5VU0JDTURfSUFBRDsKKyAg ICAgICAgICAgIGVoY2lfc2V0X2ludGVycnVwdChlaGNpLCBVU0JTVFNfSUFBKTsKKyAgICAg ICAgfQorCisgICAgICAgIGVoY2ktPmFzdGF0ZSA9IGVoY2lfYWR2YW5jZV9zdGF0ZShlaGNp LCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVF9X QUlUTElTVEhFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZWhjaS0+YXN5bmNsaXN0YWRkcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBF U1RfRVhFQ1VUSU5HOgorICAgICAgICBERUJVRygoImFzeW5jIHN0YXRlIGFkdiBmb3IgZXhl Y3V0aW5nXG4iKSk7CisgICAgICAgIGVoY2ktPmFzdGF0ZSA9IGVoY2lfYWR2YW5jZV9zdGF0 ZShlaGNpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEVTVF9FWEVDVVRJTkcsIGVoY2ktPnFoYWRkcik7CisgICAgICAgIGJyZWFrOworCisgICAg ZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCJCYWQgYXN5bmNocm9ub3VzIHN0YXRlICVkXG4i LAorICAgICAgICAgICAgICAgIGVoY2ktPmFzdGF0ZSk7CisgICAgICAgIEFTU0VSVCgxPT0y KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGVoY2lfYWR2YW5jZV9wZXJpb2RpY19zdGF0 ZShFSENJU3RhdGUgKmVoY2kpCit7CisgICAgdWludDMyX3QgZW50cnk7CisgICAgdWludDMy X3QgbGlzdDsKKworICAgIC8vIDQuNgorCisgICAgc3dpdGNoKGVoY2ktPnBzdGF0ZSkgewor ICAgIGNhc2UgRVNUX0lOQUNUSVZFOgorICAgICAgICBpZiAoICEoZWhjaS0+ZnJpbmRleCAm IDcpICYmKGVoY2ktPnVzYmNtZCAmIFVTQkNNRF9QU0UpKSB7CisgICAgICAgICAgICBERUJV RygoIlBFUklPRElDIGdvaW5nIGFjdGl2ZVxuIikpOworICAgICAgICAgICAgZWhjaS0+dXNi c3RzIHw9IFVTQlNUU19QU1M7CisgICAgICAgICAgICBlaGNpLT5wc3RhdGUgPSBFU1RfQUNU SVZFOworICAgICAgICAgICAgLy8gTm8gYnJlYWssIGZhbGwgdGhyb3VnaCB0byBBQ1RJVkUK KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVNUX0FD VElWRToKKyAgICAgICAgaWYgKCAhKGVoY2ktPmZyaW5kZXggJiA3KSAmJiAhKGVoY2ktPnVz YmNtZCAmIFVTQkNNRF9QU0UpKSB7CisgICAgICAgICAgICBERUJVRygoIlBFUklPRElDIGdv aW5nIGluYWN0aXZlXG4iKSk7CisgICAgICAgICAgICBlaGNpLT51c2JzdHMgJj0gflVTQlNU U19QU1M7CisgICAgICAgICAgICBlaGNpLT5wc3RhdGUgPSBFU1RfSU5BQ1RJVkU7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGxpc3QgPSBlaGNpLT5wZXJp b2RpY2xpc3RiYXNlICYgMHhmZmZmZjAwMDsKKyAgICAgICAgbGlzdCB8PSgoZWhjaS0+ZnJp bmRleCAmIDB4MWZmOCkgPj4gMSk7CisKKyAgICAgICAgY3B1X3BoeXNpY2FsX21lbW9yeV9y dyhsaXN0LCh1aW50OF90ICopICZlbnRyeSwgc2l6ZW9mIGVudHJ5LCAwKTsKKyAgICAgICAg ZW50cnkgPSBsZTMyX3RvX2NwdShlbnRyeSk7CisKKyAgICAgICAgREVCVUcoKCJwZXJpb2Rp YyBzdGF0ZSBhZHYgZnI9JWQuICBbJTA4WF0gLT4gJTA4WFxuIiwKKyAgICAgICAgICAgICAg ICBlaGNpLT5mcmluZGV4IC8gOCwgbGlzdCwgZW50cnkpKTsKKyAgICAgICAgZWhjaS0+cHN0 YXRlID0gZWhjaV9hZHZhbmNlX3N0YXRlKGVoY2ksIDAsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRVNUX0ZFVENIRU5UUlksIGVudHJ5KTsKKyAgICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIEVTVF9FWEVDVVRJTkc6CisgICAgICAgIERFQlVHKCgi cGVyaW9kaWMgc3RhdGUgYWR2IGZvciBleGVjdXRpbmdcbiIpKTsKKyAgICAgICAgZWhjaS0+ cHN0YXRlID0gZWhjaV9hZHZhbmNlX3N0YXRlKGVoY2ksIDAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNUX0VYRUNVVElORywgZWhjaS0+cWhhZGRy KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIkJh ZCBwZXJpb2RpYyBzdGF0ZSAlZFxuIiwKKyAgICAgICAgICAgICAgICBlaGNpLT5wc3RhdGUp OworICAgICAgICBBU1NFUlQoMT09Mik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBlaGNp X2ZyYW1lX3RpbWVyKHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBFSENJU3RhdGUgKmVoY2kgPSBv cGFxdWU7CisgICAgaW50NjRfdCBleHBpcmVfdGltZSwgdF9ub3c7CisgICAgaW50IHVzZWNf ZWxhcHNlZDsKKyAgICBpbnQgZnJhbWVzOworICAgIGludCB1c2VjX25vdzsKKyAgICBpbnQg aTsKKyAgICBpbnQgc2tpcHBlZF9mcmFtZXMgPSAwOworCisKKyAgICB0X25vdyA9IHFlbXVf Z2V0X2Nsb2NrKHZtX2Nsb2NrKTsKKyAgICBleHBpcmVfdGltZSA9IHRfbm93ICsgKGdldF90 aWNrc19wZXJfc2VjKCkgLyBGUkFNRV9USU1FUl9GUkVRKTsKKyAgICBpZiAoZXhwaXJlX3Rp bWUgPT0gdF9ub3cpCisgICAgICAgIGV4cGlyZV90aW1lKys7CisKKyAgICB1c2VjX25vdyA9 IHRfbm93IC8gMTAwMDsKKyAgICB1c2VjX2VsYXBzZWQgPSB1c2VjX25vdyAtIGVoY2ktPmxh c3RfcnVuX3VzZWM7CisgICAgZWhjaS0+ZnJhbWVfZW5kX3VzZWMgPSB1c2VjX25vdyArIDEw MDA7CisKKyNpZmRlZiBFSENJX05PTUlDUk9GUkFNRVMKKyAgICBmcmFtZXMgPSB1c2VjX2Vs YXBzZWQgLyAxMDAwOworICAgIGVoY2ktPmZyYW1lX2VuZF91c2VjID0gdXNlY19ub3cgKyAx MDAwOworI2Vsc2UKKyAgICBmcmFtZXMgPSB1c2VjX2VsYXBzZWQgLyAxMjU7CisgICAgZWhj aS0+ZnJhbWVfZW5kX3VzZWMgPSB1c2VjX25vdyArIDEyNTsKKyNlbmRpZgorCisjaWZkZWYg VERFQlVHCisgICAgREVCVUcoKCJGcmFtZSB0aW1lciwgdXNlYyBlbGFwc2VkIHNpbmNlIGxh c3QgJWQsIGZyYW1lcyAlZFxuIiwKKyAgICAgICAgICAgIHVzZWNfZWxhcHNlZCwgZnJhbWVz KSk7CisjZW5kaWYKKworICAgIGZvcihpID0gMDsgaSA8IGZyYW1lczsgaSsrKSB7CisgICAg ICAgIGlmICggIShlaGNpLT51c2JzdHMgJiBVU0JTVFNfSEFMVCkpIHsKKyAgICAgICAgICAg IGlmIChlaGNpLT5pc29jaF9wYXVzZSA8PSAwKSB7CisjaWZkZWYgRUhDSV9OT01JQ1JPRlJB TUVTCisgICAgICAgICAgICAgICAgZWhjaS0+ZnJpbmRleCArPSA4OworI2Vsc2UKKyAgICAg ICAgICAgICAgICBlaGNpLT5mcmluZGV4Kys7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgaWYgKGVoY2ktPmZyaW5kZXggPiAweDAwMDAxZmZmKSB7CisgICAgICAg ICAgICAgICAgZWhjaS0+ZnJpbmRleCA9IDA7CisjaWZkZWYgVERFQlVHCisgICAgICAgICAg ICAgICAgREVCVUcoKCJQRVJJT0RJQyBmcmluZGV4IHJvbGxvdmVyXG4iKSk7CisjZW5kaWYK KyAgICAgICAgICAgICAgICBlaGNpX3NldF9pbnRlcnJ1cHQoZWhjaSwgVVNCU1RTX0ZMUik7 CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVoY2ktPnNvZnYgPShlaGNpLT5mcmlu ZGV4IC0gMSkgPj4gMzsKKyAgICAgICAgICAgIGVoY2ktPnNvZnYgJj0gMHgwMDAwMDNmZjsK KyAgICAgICAgfQorCisgICAgICAgIGlmIChmcmFtZXMgLSBpID4gMTApCisgICAgICAgICAg ICBza2lwcGVkX2ZyYW1lcysrOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRP RE8gY291bGQgdGhpcyBjYXVzZSBwZXJpb2RpYyBmcmFtZXMgdG8gZ2V0IHNraXBwZWQgaWYg YXN5bmMKKyAgICAgICAgICAgIC8vIGFjdGl2ZT8KKyAgICAgICAgICAgIGlmIChlaGNpLT5h c3RhdGUgIT0gRVNUX0VYRUNVVElORykKKyAgICAgICAgICAgICAgICBlaGNpX2FkdmFuY2Vf cGVyaW9kaWNfc3RhdGUoZWhjaSk7CisgICAgICAgIH0KKworI2lmZGVmIEVIQ0lfTk9NSUNS T0ZSQU1FUworICAgICAgICBlaGNpLT5sYXN0X3J1bl91c2VjICs9IDEwMDA7CisjZWxzZQor ICAgICAgICBlaGNpLT5sYXN0X3J1bl91c2VjICs9IDEyNTsKKyNlbmRpZgorICAgIH0KKwor I2lmIDAKKyAgICBpZiAoc2tpcHBlZF9mcmFtZXMpCisgICAgICAgIERFQlVHKCgiV0FSTklO RyAtIEVIQ0kgc2tpcHBlZCAlZCBmcmFtZXNcbiIsIHNraXBwZWRfZnJhbWVzKSk7CisjZW5k aWYKKworICAgIC8qICBBc3luYyBpcyBub3QgaW5zaWRlIGxvb3Agc2luY2UgaXQgZXhlY3V0 ZXMgZXZlcnl0aGluZyBpdCBjYW4gb25jZQorICAgICAqICBjYWxsZWQKKyAgICAgKi8KKyAg ICBpZiAoZWhjaS0+cHN0YXRlICE9IEVTVF9FWEVDVVRJTkcpCisgICAgICAgIGVoY2lfYWR2 YW5jZV9hc3luY19zdGF0ZShlaGNpKTsKKworICAgIHFlbXVfbW9kX3RpbWVyKGVoY2ktPmZy YW1lX3RpbWVyLCBleHBpcmVfdGltZSk7CisKKyAgICB1c2VjX2VsYXBzZWQgPSBxZW11X2dl dF9jbG9jayh2bV9jbG9jaykgLyAxMDAwIC0gdXNlY19ub3c7CisKKyNpZmRlZiBUREVCVUcK KyAgICBERUJVRygoIlRJTUlORzogZnJhbWVfdGltZXIgdXNlZCAlZCB1c2VjXG4iLCB1c2Vj X2VsYXBzZWQpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKmVo Y2lfcmVhZGZuWzNdPXsKKyAgICBlaGNpX21lbV9yZWFkYiwKKyAgICBlaGNpX21lbV9yZWFk dywKKyAgICBlaGNpX21lbV9yZWFkbAorfTsKKworc3RhdGljIENQVVdyaXRlTWVtb3J5RnVu YyAqZWhjaV93cml0ZWZuWzNdPXsKKyAgICBlaGNpX21lbV93cml0ZWIsCisgICAgZWhjaV9t ZW1fd3JpdGV3LAorICAgIGVoY2lfbWVtX3dyaXRlbAorfTsKKworc3RhdGljIHZvaWQgZWhj aV9tYXAoUENJRGV2aWNlICpwY2lfZGV2LCBpbnQgcmVnaW9uX251bSwKKyAgICAgICAgICAg ICAgICAgICAgcGNpYnVzX3QgYWRkciwgcGNpYnVzX3Qgc2l6ZSwgaW50IHR5cGUpCit7Cisg ICAgRUhDSVN0YXRlICpzID0oRUhDSVN0YXRlICopcGNpX2RldjsKKworICAgIERFQlVHKCgi ZWhjaV9tYXA6IHJlZ2lvbiAlZCwgYWRkciAlMDhsWCwgc2l6ZSAlbGQsIHMtPm1lbSAlMDhY XG4iLAorICAgICAgICAgICAgcmVnaW9uX251bSwgYWRkciwgc2l6ZSwgcy0+bWVtKSk7Cisg ICAgcy0+bWVtX2Jhc2UgPSBhZGRyOworICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1v cnkoYWRkciwgc2l6ZSwgcy0+bWVtKTsKK30KKworc3RhdGljIGludCB1c2JfZWhjaV9pbml0 Zm4oUENJRGV2aWNlICpkZXYpOworCitzdGF0aWMgUENJRGV2aWNlSW5mbyBlaGNpX2luZm9b XSA9IHsKKyAgICB7CisgICAgICAgIC5xZGV2Lm5hbWUgICAgPSAidXNiLWVoY2kiLAorICAg ICAgICAucWRldi5zaXplICAgID0gc2l6ZW9mKEVIQ0lTdGF0ZSksCisgICAgICAgIC5pbml0 ICAgICAgICAgPSB1c2JfZWhjaV9pbml0Zm4sCisgICAgfSx7CisgICAgICAgIC8qIGVuZCBv ZiBsaXN0ICovCisgICAgfQorfTsKKworI2lmIDAKK3ZvaWQgdXNiX2VoY2lfaW5mbyhNb25p dG9yICptb24pCit7CisgICAgaW50IGk7CisgICAgdWludDMyX3QgdmFsOworICAgIHN0YXRp YyB1aW50MzJfdCBsYXN0WzB4NjQgKyBOQl9QT1JUUyAqIDRdOworCisgICAgZm9yKGkgPSAw OyBpIDw9IDB4NjQgKyBOQl9QT1JUUyAqIDQ7IGkrPTQpIHsKKyAgICAgICAgdmFsID0gKih1 aW50MzJfdCAqKSAmKGVoY2lfaW5mby0+bW1pb1tpXSk7CisKKyAgICAgICAgbW9uaXRvcl9w cmludGYobW9uLCAiTU1JTyAlMDhYIDogJTA4WCAgIFsrLy0gJTA4WF1cbiIsIGksIHZhbCwg dmFsIF4gbGFzdFtpLzRdKTsKKyAgICAgICAgbGFzdFtpLzRdID0gdmFsOworICAgIH0KK30K KyNlbHNlCit2b2lkIHVzYl9laGNpX2luZm8oTW9uaXRvciAqbW9uKQoreworICAgIG1vbml0 b3JfcHJpbnRmKG1vbiwgIlVTQiBFSENJIGluZm8gbm90IGltcGxlbWVudGVkIHlldFxuIik7 Cit9CisjZW5kaWYKKworc3RhdGljIGludCB1c2JfZWhjaV9pbml0Zm4oUENJRGV2aWNlICpk ZXYpCit7CisgICAgRUhDSVN0YXRlICpzID0gRE9fVVBDQVNUKEVIQ0lTdGF0ZSwgZGV2LCBk ZXYpOworICAgIHVpbnQ4X3QgKnBjaV9jb25mID0gcy0+ZGV2LmNvbmZpZzsKKyAgICBpbnQg aTsKKworICAgIHBjaV9jb25maWdfc2V0X3ZlbmRvcl9pZChwY2lfY29uZiwgUENJX1ZFTkRP Ul9JRF9JTlRFTCk7CisgICAgcGNpX2NvbmZpZ19zZXRfZGV2aWNlX2lkKHBjaV9jb25mLCBQ Q0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRCk7CisgICAgcGNpX2NvbmZbUENJX1JFVklTSU9O X0lEXSA9IDB4MTA7CisgICAgcGNpX2NvbmZbUENJX0NMQVNTX1BST0ddID0gMHgyMDsKKyAg ICBwY2lfY29uZmlnX3NldF9jbGFzcyhwY2lfY29uZiwgUENJX0NMQVNTX1NFUklBTF9VU0Ip OworCisgICAgcGNpX2NvbmZbUENJX0hFQURFUl9UWVBFXSA9IFBDSV9IRUFERVJfVFlQRV9O T1JNQUw7CisgICAgcGNpX2NvbmZbUENJX0NBUEFCSUxJVFlfTElTVF0gPSAweDAwOyAvLyBj YXBhYmlsaXRpZXMgcG9pbnRlcgorCisgICAgLy8gcGNpX2NvbmZbMHgzNF0gPSAweDUwOyAv LyBjYXBhYmlsaXRpZXMgcG9pbnRlcgorCisgICAgcGNpX2NvbmZbMHgzZF0gPSA0OyAvLyBp bnRlcnJ1cHQgcGluIDMKKyAgICBwY2lfY29uZlsweDNlXSA9IDA7IC8vIE1heExhdAorICAg IHBjaV9jb25mWzB4M2ZdID0gMDsgLy8gTWluR250CisKKyAgICAvLyBwY2lfY29uZlsweDUw XSA9IDB4MDE7IC8vIHBvd2VyIG1hbmFnZW1lbnQgY2FwcworCisgICAgcGNpX2NvbmZbMHg2 MF0gPSAweDIwOyAgLy8gU0JSTgorICAgIHBjaV9jb25mWzB4NjFdID0gMHgyMDsgIC8vIEZM QURKCisgICAgcGNpX2NvbmZbMHg2Ml0gPSAweDdmOworICAgIHBjaV9jb25mWzB4NjNdID0g MHgwMDsgIC8vIFBPUlRXQUtFQ0FQCisgICAgcGNpX2NvbmZbMHg2NF0gPSAweDAwOworICAg IHBjaV9jb25mWzB4NjVdID0gMHgwMDsKKyAgICBwY2lfY29uZlsweDY2XSA9IDB4MDA7Cisg ICAgcGNpX2NvbmZbMHg2N10gPSAweDAwOworICAgIHBjaV9jb25mWzB4NjhdID0gMHgwMTsK KyAgICBwY2lfY29uZlsweDY5XSA9IDB4MDA7CisgICAgcGNpX2NvbmZbMHg2YV0gPSAweDAw OworICAgIHBjaV9jb25mWzB4NmJdID0gMHgwMDsgIC8vIFVTQkxFR1NVUAorICAgIHBjaV9j b25mWzB4NmNdID0gMHgwMDsKKyAgICBwY2lfY29uZlsweDZkXSA9IDB4MDA7CisgICAgcGNp X2NvbmZbMHg2ZV0gPSAweDAwOworICAgIHBjaV9jb25mWzB4NmZdID0gMHhjMDsgIC8vIFVT QkxFRkNUTFNUUworCisgICAgcy0+bW1pb1sweDAwXSA9IE9QUkVHQkFTRTsKKyAgICBzLT5t bWlvWzB4MDFdID0gMHgwMDsKKyAgICBzLT5tbWlvWzB4MDJdID0gMHgwMDsKKyAgICBzLT5t bWlvWzB4MDNdID0gMHgwMTsgICAgLy8gSEMgdmVyc2lvbgorICAgIHMtPm1taW9bMHgwNF0g PSBOQl9QT1JUUzsgIC8vIE51bWJlciBvZiBkb3duc3RyZWFtIHBvcnRzCisgICAgcy0+bW1p b1sweDA1XSA9IDB4MDA7ICAgIC8vIE5vIGNvbXBhbmlvbiBwb3J0cyBhdCBwcmVzZW50Cisg ICAgcy0+bW1pb1sweDA2XSA9IDB4MDA7CisgICAgcy0+bW1pb1sweDA3XSA9IDB4MDA7Cisg ICAgcy0+bW1pb1sweDA4XSA9IDB4ODA7ICAgIC8vIFdlIGNhbiBjYWNoZSB3aG9sZSBmcmFt ZSwgbm90IDY0LWJpdCBjYXBhYmxlCisgICAgcy0+bW1pb1sweDA5XSA9IDB4Njg7ICAgIC8v IEVFQ1AKKyAgICBzLT5tbWlvWzB4MGFdID0gMHgwMDsKKyAgICBzLT5tbWlvWzB4MGJdID0g MHgwMDsKKworICAgIHMtPmlycSA9IHMtPmRldi5pcnFbMF07CisKKyAgICAvLyBUT0RPIC0g cG9ydCByZWdpc3RyYXRpb24gaXMgZ29pbmcgdG8gbmVlZCBhbiBvdmVyaGF1bCBzaW5jZSBw b3J0cworICAgIC8vIGNhbiBiZSBsb3csIGZ1bGwgb3IgaGlnaCBzcGVlZCBhbmQgYXJlIG5v dCB0aWVkIHRvIFVIQ0kgb3IgRUhDSS4KKyAgICAvLyBUaGlzIHdvcmtzIGZvciBub3cgc2lu Y2Ugd2UgcmVnaXN0ZXIgbGFzdCBzbyBhcmUgdG9wIG9mIHRoZSBmcmVlCisgICAgLy8gbGlz dCBidXQgcmVhbGx5IGFsbCBwb3J0cyBuZWVkIHRvIGJlIG93bmVkIGJ5IEVIQ0kgYW5kIGl0 IHNob3VsZAorICAgIC8vIGhhbmQgb2ZmIHRvIGNvbXBhbmlvbiBjb250cm9sbGVycyBpZiBk ZXZpY2UgaXMgZnVsbCBvciBsb3cgc3BlZWQuCisKKyAgICBERUJVRygoImVoY2kgaW5pdCA6 IHJlZ2lzdGVyaW5nIFVTQiBwb3J0cyB3aXRoIG5vIGRldmljZSBhdHRhY2hlZFxuIikpOwor CisgICAgLy8gVE9ETyBjb21lIHVwIHdpdGggYSBiZXR0ZXIgcG9ydCBhbGxvY2F0aW9uIHNj aGVtZQorICAgIC8vIGFkZGVkIGVoY2ktPmJ1cywgbmVlZCB0byBmaW5kIGVoY2ktPkRldmlj ZVN0YXRlCisgICAgdXNiX2J1c19uZXcoJnMtPmJ1cywgJnMtPmRldi5xZGV2KTsKKyAgICBm b3IoaSA9IDA7IGkgPCBOQl9QT1JUUzsgaSsrKSB7CisgICAgICAgIHVzYl9yZWdpc3Rlcl9w b3J0KCZzLT5idXMsICZzLT5wb3J0c1tpXSwgcywgaSwgZWhjaV9hdHRhY2gpOworICAgICAg ICBzLT5wb3J0c1tpXS5kZXYgPSAwOworICAgIH0KKworICAgIHMtPmZyYW1lX3RpbWVyID0g cWVtdV9uZXdfdGltZXIodm1fY2xvY2ssIGVoY2lfZnJhbWVfdGltZXIsIHMpOworCisgICAg cWVtdV9yZWdpc3Rlcl9yZXNldChlaGNpX3Jlc2V0LCBzKTsKKworICAgIHMtPm1lbSA9IGNw dV9yZWdpc3Rlcl9pb19tZW1vcnkoZWhjaV9yZWFkZm4sIGVoY2lfd3JpdGVmbiwgcyk7CisK KyAgICBERUJVRygoImVoY2kgaW5pdCA6IHJlZ2lzdGVyaW5nIE1NSU8gc2l6ZSAlZFxuIiwg TU1JT19TSVpFKSk7CisgICAgcGNpX3JlZ2lzdGVyX2Jhcigmcy0+ZGV2LCAwLCBNTUlPX1NJ WkUsIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfTUVNT1JZLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWhjaV9tYXApOwor CisgICAgREVCVUcoKCIqKiogZWhjaSBpbml0IDogdW5kZXIgZGV2ZWxvcG1lbnQgMTYtT0NU LTA4ICoqKiBcbiIpKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlaGNp X3JlZ2lzdGVyKHZvaWQpCit7CisgICAgcGNpX3FkZXZfcmVnaXN0ZXJfbWFueShlaGNpX2lu Zm8pOworfQorZGV2aWNlX2luaXQoZWhjaV9yZWdpc3Rlcik7CisKK3ZvaWQgdXNiX2VoY2lf aW5pdChQQ0lCdXMgKmJ1cywgaW50IGRldmZuKQoreworICAgIHBjaV9jcmVhdGVfc2ltcGxl KGJ1cywgZGV2Zm4sICJ1c2ItZWhjaSIpOworfQorCisvKgorICogdmltOiBleHBhbmR0YWIg dHM9NAorICovCmRpZmYgLS1naXQgYS9ody91c2ItZWhjaS5oIGIvaHcvdXNiLWVoY2kuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQ3NGQyCi0tLSAvZGV2L251 bGwKKysrIGIvaHcvdXNiLWVoY2kuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgUUVNVV9V U0JfRUhDSV9ICisjZGVmaW5lIFFFTVVfVVNCX0VIQ0lfSAorCisjaW5jbHVkZSAicWVtdS1j b21tb24uaCIKKwordm9pZCB1c2JfZWhjaV9pbmZvKE1vbml0b3IgKm1vbik7Cit2b2lkIHVz Yl9laGNpX2luaXQoUENJQnVzICpidXMsIGludCBkZXZmbik7CisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvbW9uaXRvci5jIGIvbW9uaXRvci5jCmluZGV4IGE0OWUzZjAuLmFlNGZmMWYgMTAw NjQ0Ci0tLSBhL21vbml0b3IuYworKysgYi9tb25pdG9yLmMKQEAgLTI1LDYgKzI1LDcgQEAK ICNpbmNsdWRlICJody9ody5oIgogI2luY2x1ZGUgImh3L3FkZXYuaCIKICNpbmNsdWRlICJo dy91c2IuaCIKKyNpbmNsdWRlICJody91c2ItZWhjaS5oIgogI2luY2x1ZGUgImh3L3BjbWNp YS5oIgogI2luY2x1ZGUgImh3L3BjLmgiCiAjaW5jbHVkZSAiaHcvcGNpLmgiCkBAIC0yNzUy LDYgKzI3NTMsMTMgQEAgc3RhdGljIGNvbnN0IG1vbl9jbWRfdCBpbmZvX2NtZHNbXSA9IHsK ICAgICAgICAgLm1oYW5kbGVyLmluZm8gPSB1c2JfaG9zdF9pbmZvLAogICAgIH0sCiAgICAg eworICAgICAgICAubmFtZSAgICAgICA9ICJ1c2JlaGNpIiwKKyAgICAgICAgLmFyZ3NfdHlw ZSAgPSAiIiwKKyAgICAgICAgLnBhcmFtcyAgICAgPSAiIiwKKyAgICAgICAgLmhlbHAgICAg ICAgPSAic2hvdyBlaGNpIHN0YXR1cyIsCisgICAgICAgIC5taGFuZGxlci5pbmZvID0gdXNi X2VoY2lfaW5mbywKKyAgICB9LAorICAgIHsKICAgICAgICAgLm5hbWUgICAgICAgPSAicHJv ZmlsZSIsCiAgICAgICAgIC5hcmdzX3R5cGUgID0gIiIsCiAgICAgICAgIC5wYXJhbXMgICAg ID0gIiIsCg== --------------090505010901090803000005--