From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HQPMM-0006bN-Qp for qemu-devel@nongnu.org; Sun, 11 Mar 2007 10:49:18 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HQPML-0006bB-LQ for qemu-devel@nongnu.org; Sun, 11 Mar 2007 10:49:18 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HQPML-0006b8-Fb for qemu-devel@nongnu.org; Sun, 11 Mar 2007 09:49:17 -0500 Received: from ug-out-1314.google.com ([66.249.92.171]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1HQPLl-0004nO-Gs for qemu-devel@nongnu.org; Sun, 11 Mar 2007 10:48:42 -0400 Received: by ug-out-1314.google.com with SMTP id j40so1860874ugd for ; Sun, 11 Mar 2007 07:48:40 -0700 (PDT) Message-ID: Date: Sun, 11 Mar 2007 15:48:35 +0100 From: "andrzej zaborowski" Sender: balrogg@gmail.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_22566_2299461.1173624515736" Subject: [Qemu-devel] [PATCH] VMware SVGA II emulation Reply-To: balrogg@gmail.com, qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_22566_2299461.1173624515736 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, this adds emulation of VMware SVGA II chipset (mostly a proof of concept). It's a pci card that VMware machines use as main display. There's an opensource, crossplatform X driver for it in most distributions and it's autodetected like other cards by some live-cd's. The advantages over standard vga: * arbitrary resolutions, * extensible - the guest will use as much hardware acceleration as the card claims to support in the CAPABILITIES flags. 3D acceleration can be easily added (dunno if it's documented). This implementation only does mouse cursor and rectangle blitting/filling in hardware. The rectangle operations don't work so well and they're only used when moving windows in X. With normal software drawing the animation looks probably smoother (though obviously slower). I didn't embed a standard VGA card in this card (like in the cirrus), so it doesn't have text mode. It should be easy to add. Pass "-vmwarevga" to enable. The defines at the top of the file are for disabling/enablig the acceleration - if anything seems to be broken try disabling HW_RECT_ACCEL. DIRECT_VRAM is for giving direct access to the SDL framebuffer for the guest - currently there are two framebuffers: one in the video ram, in the region pointed to by phys_ram_base and the other one in ds->data, and in case of VMware svga they have the same format, so it would be logical to use only one of them. However ds->data is also used for the qemu virtual consoles. Since I'm using io memory, the drawing is slower with DIRECT_VRAM than without it - when the copying between the framebuffers is done with memcpy - glxgears gave me about 200 FPS with DIRECT_VRAM and 300 FPS without it. It may be worth adding a yet another memory pages type for faster graphics. VMware svga also does transparent and full colour mouse cursors, and other tircks, but SDL doesn't support that so I didn't add it. A (not very amusing) screenshot at http://www.zabor.org/balrog/screen-qemu-vmwaresvga.png Regards, Andrew ------=_Part_22566_2299461.1173624515736 Content-Type: text/plain; name=0003-VMware-SVGA-II-emulation.txt; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_ez5my6f8 Content-Disposition: attachment; filename="0003-VMware-SVGA-II-emulation.txt" RnJvbSA4MTViMTdiODc2NTlmMWQ0OTQzNmYxMzRlMjZiYmRiMGY1MDFhZDA5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyemVqIFphYm9yb3dza2kgPGJhbHJvZ0B6YWJvci5vcmc+ CkRhdGU6IFN1biwgMTEgTWFyIDIwMDcgMTU6MzI6MTUgKzAxMDAKU3ViamVjdDogW1BBVENIXSBW TXdhcmUtU1ZHQSBJSSBlbXVsYXRpb24uCgotLS0KIE1ha2VmaWxlLnRhcmdldCB8ICAgIDIgKy0K IGh3L3BjLmMgICAgICAgICB8ICAgIDggKwogaHcvdm13YXJlX3ZnYS5jIHwgMTExNSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB2bC5jICAg ICAgICAgICAgfCAgICA5ICsKIHZsLmggICAgICAgICAgICB8ICAgIDUgKwogNSBmaWxlcyBjaGFu Z2VkLCAxMTM4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvTWFr ZWZpbGUudGFyZ2V0IGIvTWFrZWZpbGUudGFyZ2V0CmluZGV4IDhlYWE4ZGQuLjhiYTgyYzcgMTAw NjQ0Ci0tLSBhL01ha2VmaWxlLnRhcmdldAorKysgYi9NYWtlZmlsZS50YXJnZXQKQEAgLTM3MSw3 ICszNzEsNyBAQCBpZmVxICgkKFRBUkdFVF9CQVNFX0FSQ0gpLCBpMzg2KQogVkxfT0JKUys9IGlk ZS5vIHBja2JkLm8gcHMyLm8gdmdhLm8gJChTT1VORF9IVykgZG1hLm8gJChBVURJT0RSVikKIFZM X09CSlMrPSBmZGMubyBtYzE0NjgxOHJ0Yy5vIHNlcmlhbC5vIGk4MjU5Lm8gaTgyNTQubyBwY3Nw ay5vIHBjLm8KIFZMX09CSlMrPSBjaXJydXNfdmdhLm8gbWl4ZW5nLm8gYXBpYy5vIHBhcmFsbGVs Lm8gYWNwaS5vIHBpaXhfcGNpLm8KLVZMX09CSlMrPSB1c2ItdWhjaS5vIHNtYnVzX2VlcHJvbS5v CitWTF9PQkpTKz0gdXNiLXVoY2kubyBzbWJ1c19lZXByb20ubyB2bXdhcmVfdmdhLm8KIENQUEZM QUdTICs9IC1ESEFTX0FVRElPCiBlbmRpZgogaWZlcSAoJChUQVJHRVRfQkFTRV9BUkNIKSwgcHBj KQpkaWZmIC0tZ2l0IGEvaHcvcGMuYyBiL2h3L3BjLmMKaW5kZXggYmE5YzJkOS4uZGQyNWUzMyAx MDA2NDQKLS0tIGEvaHcvcGMuYworKysgYi9ody9wYy5jCkBAIC02NTEsNiArNjUxLDE0IEBAIHN0 YXRpYyB2b2lkIHBjX2luaXQxKGludCByYW1fc2l6ZSwgaW50IHZnYV9yYW1fc2l6ZSwgaW50IGJv b3RfZGV2aWNlLAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKHZtc3ZnYV9lbmFibGVkKSB7 CisgICAgICAgIGlmIChwY2lfZW5hYmxlZCkKKyAgICAgICAgICAgIHBjaV92bXN2Z2FfaW5pdChw Y2lfYnVzLCBkcywgcGh5c19yYW1fYmFzZSArIHJhbV9zaXplLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJhbV9zaXplLCB2Z2FfcmFtX3NpemUpOworICAgICAgICBlbHNlCisgICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB2bXdhcmVfdmdhOiBubyBQQ0kgYnVzXG4iLCBfX0ZV TkNUSU9OX18pOworICAgIH0KKwogICAgIHJ0Y19zdGF0ZSA9IHJ0Y19pbml0KDB4NzAsIDgpOwog CiAgICAgcmVnaXN0ZXJfaW9wb3J0X3JlYWQoMHg5MiwgMSwgMSwgaW9wb3J0OTJfcmVhZCwgTlVM TCk7CmRpZmYgLS1naXQgYS9ody92bXdhcmVfdmdhLmMgYi9ody92bXdhcmVfdmdhLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjNThmZAotLS0gL2Rldi9udWxsCisrKyBi L2h3L3Ztd2FyZV92Z2EuYwpAQCAtMCwwICsxLDExMTUgQEAKKy8qCisgKiBRRU1VIFZNd2FyZS1T VkdBICJjaGlwc2V0Ii4KKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDA3IEFuZHJ6ZWogWmFib3Jv d3NraSAgPGJhbHJvZ0B6YWJvci5vcmc+CisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAq IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu ZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4K KyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAq IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgInZsLmgi CisKKyNkZWZpbmUgVkVSQk9TRQorI3VuZGVmIERJUkVDVF9WUkFNCisjdW5kZWYgRU1CRURfU1RE VkdBCisjZGVmaW5lIEhXX1JFQ1RfQUNDRUwKKyNkZWZpbmUgSFdfTU9VU0VfQUNDRUwKKworI2lm ZGVmIEVNQkVEX1NURFZHQQorIyBpbmNsdWRlICJ2Z2FfaW50LmgiCisjZW5kaWYKKworc3RydWN0 IHZtc3ZnYV9zdGF0ZV9zIHsKKyNpZmRlZiBFTUJFRF9TVERWR0EKKyAgICBWR0FfU1RBVEVfQ09N TU9OCisjZW5kaWYKKworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBp bnZhbGlkYXRlOworICAgIGludCBkZXB0aDsKKyAgICBpbnQgYnlwcDsKKyAgICBpbnQgZW5hYmxl OworICAgIGludCBjb25maWc7CisgICAgc3RydWN0IHsKKyAgICAgICAgaW50IGlkOworICAgICAg ICBpbnQgeDsKKyAgICAgICAgaW50IHk7CisgICAgICAgIGludCBvbjsKKyAgICB9IGN1cnNvcjsK KworI2lmbmRlZiBFTUJFRF9TVERWR0EKKyAgICBEaXNwbGF5U3RhdGUgKmRzOworICAgIGludCB2 cmFtX3NpemU7CisjZW5kaWYKKyAgICB1aW50OF90ICp2cmFtOworCisgICAgaW50IGluZGV4Owor ICAgIGludCBzY3JhdGNoX3NpemU7CisgICAgdWludDMyX3QgKnNjcmF0Y2g7CisgICAgaW50IG5l d193aWR0aDsKKyAgICBpbnQgbmV3X2hlaWdodDsKKyAgICB1aW50MzJfdCBndWVzdDsKKyAgICB1 aW50MzJfdCBzdmdhaWQ7CisgICAgdWludDMyX3Qgd3JlZDsKKyAgICB1aW50MzJfdCB3Z3JlZW47 CisgICAgdWludDMyX3Qgd2JsdWU7CisgICAgaW50IHN5bmNpbmc7CisgICAgaW50IGZiX3NpemU7 CisKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQzMl90ICpmaWZvOworICAgICAgICBzdHJ1Y3Qg X19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IG1pbjsK KyAgICAgICAgICAgIHVpbnQzMl90IG1heDsKKyAgICAgICAgICAgIHVpbnQzMl90IG5leHRfY21k OworICAgICAgICAgICAgdWludDMyX3Qgc3RvcDsKKyAgICAgICAgICAgIC8qIEFkZCByZWdpc3Rl cnMgaGVyZSB3aGVuIGFkZGluZyBjYXBhYmlsaXRpZXMuICAqLworICAgICAgICAgICAgdWludDMy X3QgZmlmb1swXTsKKyAgICAgICAgfSAqY21kOworICAgIH07Cit9OworCitzdHJ1Y3QgcGNpX3Zt c3ZnYV9zdGF0ZV9zIHsKKyAgICBQQ0lEZXZpY2UgY2FyZDsKKyAgICBzdHJ1Y3Qgdm1zdmdhX3N0 YXRlX3MgY2hpcDsKK307CisKKyNkZWZpbmUgU1ZHQV9NQUdJQwkJMHg5MDAwMDBVTAorI2RlZmlu ZSBTVkdBX01BS0VfSUQodmVyKQkoU1ZHQV9NQUdJQyA8PCA4IHwgKHZlcikpCisjZGVmaW5lIFNW R0FfSURfMAkJU1ZHQV9NQUtFX0lEKDApCisjZGVmaW5lIFNWR0FfSURfMQkJU1ZHQV9NQUtFX0lE KDEpCisjZGVmaW5lIFNWR0FfSURfMgkJU1ZHQV9NQUtFX0lEKDIpCisKKyNkZWZpbmUgU1ZHQV9M RUdBQ1lfQkFTRV9QT1JUCTB4NDU2MAorI2RlZmluZSBTVkdBX0lOREVYX1BPUlQJCTB4MAorI2Rl ZmluZSBTVkdBX1ZBTFVFX1BPUlQJCTB4MQorI2RlZmluZSBTVkdBX0JJT1NfUE9SVAkJMHgyCisK KyNkZWZpbmUgU1ZHQV9WRVJTSU9OXzIKKworI2lmZGVmIFNWR0FfVkVSU0lPTl8yCisjIGRlZmlu ZSBTVkdBX0lECQlTVkdBX0lEXzIKKyMgZGVmaW5lIFNWR0FfSU9fQkFTRQkJU1ZHQV9MRUdBQ1lf QkFTRV9QT1JUCisjIGRlZmluZSBTVkdBX0lPX01VTAkJMQorIyBkZWZpbmUgU1ZHQV9GSUZPX1NJ WkUJCTB4MTAwMDAKKyMgZGVmaW5lIFNWR0FfTUVNX0JBU0UJCTB4ZWMwMDAwMDAKKyMgZGVmaW5l IFNWR0FfUENJX0RFVklDRV9JRAlQQ0lfREVWSUNFX0lEX1ZNV0FSRV9TVkdBMgorI2Vsc2UKKyMg ZGVmaW5lIFNWR0FfSUQJCVNWR0FfSURfMQorIyBkZWZpbmUgU1ZHQV9JT19CQVNFCQlTVkdBX0xF R0FDWV9CQVNFX1BPUlQKKyMgZGVmaW5lIFNWR0FfSU9fTVVMCQk0CisjIGRlZmluZSBTVkdBX0ZJ Rk9fU0laRQkJMHgxMDAwMAorIyBkZWZpbmUgU1ZHQV9NRU1fQkFTRQkJMHhlYzAwMDAwMAorIyBk ZWZpbmUgU1ZHQV9QQ0lfREVWSUNFX0lECVBDSV9ERVZJQ0VfSURfVk1XQVJFX1NWR0EKKyNlbmRp ZgorCitlbnVtIHsKKyAgICAvKiBJRCAwLCAxIGFuZCAyIHJlZ2lzdGVycyAqLworICAgIFNWR0Ff UkVHX0lEID0gMCwKKyAgICBTVkdBX1JFR19FTkFCTEUgPSAxLAorICAgIFNWR0FfUkVHX1dJRFRI ID0gMiwKKyAgICBTVkdBX1JFR19IRUlHSFQgPSAzLAorICAgIFNWR0FfUkVHX01BWF9XSURUSCA9 IDQsCisgICAgU1ZHQV9SRUdfTUFYX0hFSUdIVCA9IDUsCisgICAgU1ZHQV9SRUdfREVQVEggPSA2 LAorICAgIFNWR0FfUkVHX0JJVFNfUEVSX1BJWEVMID0gNywJCS8qIEN1cnJlbnQgYnBwIGluIHRo ZSBndWVzdCAqLworICAgIFNWR0FfUkVHX1BTRVVET0NPTE9SID0gOCwKKyAgICBTVkdBX1JFR19S RURfTUFTSyA9IDksCisgICAgU1ZHQV9SRUdfR1JFRU5fTUFTSyA9IDEwLAorICAgIFNWR0FfUkVH X0JMVUVfTUFTSyA9IDExLAorICAgIFNWR0FfUkVHX0JZVEVTX1BFUl9MSU5FID0gMTIsCisgICAg U1ZHQV9SRUdfRkJfU1RBUlQgPSAxMywKKyAgICBTVkdBX1JFR19GQl9PRkZTRVQgPSAxNCwKKyAg ICBTVkdBX1JFR19WUkFNX1NJWkUgPSAxNSwKKyAgICBTVkdBX1JFR19GQl9TSVpFID0gMTYsCisK KyAgICAvKiBJRCAxIGFuZCAyIHJlZ2lzdGVycyAqLworICAgIFNWR0FfUkVHX0NBUEFCSUxJVElF UyA9IDE3LAorICAgIFNWR0FfUkVHX01FTV9TVEFSVCA9IDE4LAkJLyogTWVtb3J5IGZvciBjb21t YW5kIEZJRk8gKi8KKyAgICBTVkdBX1JFR19NRU1fU0laRSA9IDE5LAorICAgIFNWR0FfUkVHX0NP TkZJR19ET05FID0gMjAsCQkvKiBTZXQgd2hlbiBtZW1vcnkgYXJlYSBjb25maWd1cmVkICovCisg ICAgU1ZHQV9SRUdfU1lOQyA9IDIxLAkJCS8qIFdyaXRlIHRvIGZvcmNlIHN5bmNocm9uaXphdGlv biAqLworICAgIFNWR0FfUkVHX0JVU1kgPSAyMiwJCQkvKiBSZWFkIHRvIGNoZWNrIGlmIHN5bmMg aXMgZG9uZSAqLworICAgIFNWR0FfUkVHX0dVRVNUX0lEID0gMjMsCQkvKiBTZXQgZ3Vlc3QgT1Mg aWRlbnRpZmllciAqLworICAgIFNWR0FfUkVHX0NVUlNPUl9JRCA9IDI0LAkJLyogSUQgb2YgY3Vy c29yICovCisgICAgU1ZHQV9SRUdfQ1VSU09SX1ggPSAyNSwJCS8qIFNldCBjdXJzb3IgWCBwb3Np dGlvbiAqLworICAgIFNWR0FfUkVHX0NVUlNPUl9ZID0gMjYsCQkvKiBTZXQgY3Vyc29yIFkgcG9z aXRpb24gKi8KKyAgICBTVkdBX1JFR19DVVJTT1JfT04gPSAyNywJCS8qIFR1cm4gY3Vyc29yIG9u L29mZiAqLworICAgIFNWR0FfUkVHX0hPU1RfQklUU19QRVJfUElYRUwgPSAyOCwJLyogQ3VycmVu dCBicHAgaW4gdGhlIGhvc3QgKi8KKyAgICBTVkdBX1JFR19TQ1JBVENIX1NJWkUgPSAyOSwJCS8q IE51bWJlciBvZiBzY3JhdGNoIHJlZ2lzdGVycyAqLworICAgIFNWR0FfUkVHX01FTV9SRUdTID0g MzAsCQkvKiBOdW1iZXIgb2YgRklGTyByZWdpc3RlcnMgKi8KKyAgICBTVkdBX1JFR19OVU1fRElT UExBWVMgPSAzMSwJCS8qIE51bWJlciBvZiBndWVzdCBkaXNwbGF5cyAqLworICAgIFNWR0FfUkVH X1BJVENITE9DSyA9IDMyLAkJLyogRml4ZWQgcGl0Y2ggZm9yIGFsbCBtb2RlcyAqLworCisgICAg U1ZHQV9QQUxFVFRFX0JBU0UgPSAxMDI0LAkJLyogQmFzZSBvZiBTVkdBIGNvbG9yIG1hcCAqLwor ICAgIFNWR0FfUEFMRVRURV9FTkQgID0gU1ZHQV9QQUxFVFRFX0JBU0UgKyA3NjQsCisgICAgU1ZH QV9TQ1JBVENIX0JBU0UgPSBTVkdBX1BBTEVUVEVfQkFTRSArIDc2OCwKK307CisKKyNkZWZpbmUJ U1ZHQV9DQVBfTk9ORQkJCTAKKyNkZWZpbmUJU1ZHQV9DQVBfUkVDVF9GSUxMCQkoMSA8PCAwKQor I2RlZmluZQlTVkdBX0NBUF9SRUNUX0NPUFkJCSgxIDw8IDEpCisjZGVmaW5lCVNWR0FfQ0FQX1JF Q1RfUEFUX0ZJTEwJCSgxIDw8IDIpCisjZGVmaW5lCVNWR0FfQ0FQX0xFR0FDWV9PRkZTQ1JFRU4J KDEgPDwgMykKKyNkZWZpbmUJU1ZHQV9DQVBfUkFTVEVSX09QCQkoMSA8PCA0KQorI2RlZmluZQlT VkdBX0NBUF9DVVJTT1IJCQkoMSA8PCA1KQorI2RlZmluZQlTVkdBX0NBUF9DVVJTT1JfQllQQVNT CQkoMSA8PCA2KQorI2RlZmluZQlTVkdBX0NBUF9DVVJTT1JfQllQQVNTXzIJKDEgPDwgNykKKyNk ZWZpbmUJU1ZHQV9DQVBfOEJJVF9FTVVMQVRJT04JCSgxIDw8IDgpCisjZGVmaW5lIFNWR0FfQ0FQ X0FMUEhBX0NVUlNPUgkJKDEgPDwgOSkKKyNkZWZpbmUgU1ZHQV9DQVBfR0xZUEgJCQkoMSA8PCAx MCkKKyNkZWZpbmUgU1ZHQV9DQVBfR0xZUEhfQ0xJUFBJTkcJCSgxIDw8IDExKQorI2RlZmluZSBT VkdBX0NBUF9PRkZTQ1JFRU5fMQkJKDEgPDwgMTIpCisjZGVmaW5lIFNWR0FfQ0FQX0FMUEhBX0JM RU5ECQkoMSA8PCAxMykKKyNkZWZpbmUgU1ZHQV9DQVBfM0QJCQkoMSA8PCAxNCkKKyNkZWZpbmUg U1ZHQV9DQVBfRVhURU5ERURfRklGTwkJKDEgPDwgMTUpCisjZGVmaW5lIFNWR0FfQ0FQX01VTFRJ TU9OCQkoMSA8PCAxNikKKyNkZWZpbmUgU1ZHQV9DQVBfUElUQ0hMT0NLCQkoMSA8PCAxNykKKwor LyoKKyAqIEZJRk8gb2Zmc2V0cyAoc2VlbiBhcyBhbiBhcnJheSBvZiAzMi1iaXQgd29yZHMpCisg Ki8KK2VudW0geworICAgIC8qCisgICAgICogVGhlIG9yaWdpbmFsIGRlZmluZWQgRklGTyBvZmZz ZXRzCisgICAgICovCisgICAgU1ZHQV9GSUZPX01JTiA9IDAsCisgICAgU1ZHQV9GSUZPX01BWCwJ LyogVGhlIGRpc3RhbmNlIGZyb20gTUlOIHRvIE1BWCBtdXN0IGJlIGF0IGxlYXN0IDEwSyAqLwor ICAgIFNWR0FfRklGT19ORVhUX0NNRCwKKyAgICBTVkdBX0ZJRk9fU1RPUCwKKworICAgIC8qCisg ICAgICogQWRkaXRpb25hbCBvZmZzZXRzIGFkZGVkIGFzIG9mIFNWR0FfQ0FQX0VYVEVOREVEX0ZJ Rk8KKyAgICAgKi8KKyAgICBTVkdBX0ZJRk9fQ0FQQUJJTElUSUVTID0gNCwKKyAgICBTVkdBX0ZJ Rk9fRkxBR1MsCisgICAgU1ZHQV9GSUZPX0ZFTkNFLAorICAgIFNWR0FfRklGT18zRF9IV1ZFUlNJ T04sCisgICAgU1ZHQV9GSUZPX1BJVENITE9DSywKK307CisKKyNkZWZpbmUgU1ZHQV9GSUZPX0NB UF9OT05FCQkwCisjZGVmaW5lIFNWR0FfRklGT19DQVBfRkVOQ0UJCSgxIDw8IDApCisjZGVmaW5l IFNWR0FfRklGT19DQVBfQUNDRUxGUk9OVAkoMSA8PCAxKQorI2RlZmluZSBTVkdBX0ZJRk9fQ0FQ X1BJVENITE9DSwkJKDEgPDwgMikKKworI2RlZmluZSBTVkdBX0ZJRk9fRkxBR19OT05FCQkwCisj ZGVmaW5lIFNWR0FfRklGT19GTEFHX0FDQ0VMRlJPTlQJKDEgPDwgMCkKKworLyogVGhlc2UgdmFs dWVzIGNhbiBwcm9iYWJseSBiZSBjaGFuZ2VkIGFyYml0cmFyaWx5LiAgKi8KKyNkZWZpbmUgU1ZH QV9TQ1JBVENIX1NJWkUJCTB4ODAwMAorI2RlZmluZSBTVkdBX01BWF9XSURUSAkJCTIzNjAKKyNk ZWZpbmUgU1ZHQV9NQVhfSEVJR0hUCQkJMTc3MAorCisjaWZkZWYgVkVSQk9TRQorIyBkZWZpbmUg R1VFU1RfT1NfQkFTRQkJMHg1MDAxCitzdGF0aWMgY29uc3QgY2hhciAqdm1zdmdhX2d1ZXN0X2lk W10gPSB7CisgICAgWzB4MF0gPSAiRG9zIiwKKyAgICBbMHgxXSA9ICJXaW5kb3dzIDMuMSIsCisg ICAgWzB4Ml0gPSAiV2luZG93cyA5NSIsCisgICAgWzB4M10gPSAiV2luZG93cyA5OCIsCisgICAg WzB4NF0gPSAiV2luZG93cyBNRSIsCisgICAgWzB4NV0gPSAiV2luZG93cyBOVCIsCisgICAgWzB4 Nl0gPSAiV2luZG93cyAyMDAwIiwKKyAgICBbMHg3XSA9ICJMaW51eCIsCisgICAgWzB4OF0gPSAi T1MvMiIsCisgICAgWzB4OV0gPSAiVW5rbm93biIsCisgICAgWzB4YV0gPSAiQlNEIiwKKyAgICBb MHhiXSA9ICJXaGlzdGxlciIsCit9OworI2VuZGlmCisKK2VudW0geworICAgIFNWR0FfQ01EX0lO VkFMSURfQ01EID0gMCwKKyAgICBTVkdBX0NNRF9VUERBVEUgPSAxLAorICAgIFNWR0FfQ01EX1JF Q1RfRklMTCA9IDIsCisgICAgU1ZHQV9DTURfUkVDVF9DT1BZID0gMywKKyAgICBTVkdBX0NNRF9E RUZJTkVfQklUTUFQID0gNCwKKyAgICBTVkdBX0NNRF9ERUZJTkVfQklUTUFQX1NDQU5MSU5FID0g NSwKKyAgICBTVkdBX0NNRF9ERUZJTkVfUElYTUFQID0gNiwKKyAgICBTVkdBX0NNRF9ERUZJTkVf UElYTUFQX1NDQU5MSU5FID0gNywKKyAgICBTVkdBX0NNRF9SRUNUX0JJVE1BUF9GSUxMID0gOCwK KyAgICBTVkdBX0NNRF9SRUNUX1BJWE1BUF9GSUxMID0gOSwKKyAgICBTVkdBX0NNRF9SRUNUX0JJ VE1BUF9DT1BZID0gMTAsCisgICAgU1ZHQV9DTURfUkVDVF9QSVhNQVBfQ09QWSA9IDExLAorICAg IFNWR0FfQ01EX0ZSRUVfT0JKRUNUID0gMTIsCisgICAgU1ZHQV9DTURfUkVDVF9ST1BfRklMTCA9 IDEzLAorICAgIFNWR0FfQ01EX1JFQ1RfUk9QX0NPUFkgPSAxNCwKKyAgICBTVkdBX0NNRF9SRUNU X1JPUF9CSVRNQVBfRklMTCA9IDE1LAorICAgIFNWR0FfQ01EX1JFQ1RfUk9QX1BJWE1BUF9GSUxM ID0gMTYsCisgICAgU1ZHQV9DTURfUkVDVF9ST1BfQklUTUFQX0NPUFkgPSAxNywKKyAgICBTVkdB X0NNRF9SRUNUX1JPUF9QSVhNQVBfQ09QWSA9IDE4LAorICAgIFNWR0FfQ01EX0RFRklORV9DVVJT T1IgPSAxOSwKKyAgICBTVkdBX0NNRF9ESVNQTEFZX0NVUlNPUiA9IDIwLAorICAgIFNWR0FfQ01E X01PVkVfQ1VSU09SID0gMjEsCisgICAgU1ZHQV9DTURfREVGSU5FX0FMUEhBX0NVUlNPUiA9IDIy LAorICAgIFNWR0FfQ01EX0RSQVdfR0xZUEggPSAyMywKKyAgICBTVkdBX0NNRF9EUkFXX0dMWVBI X0NMSVBQRUQgPSAyNCwKKyAgICBTVkdBX0NNRF9VUERBVEVfVkVSQk9TRSA9IDI1LAorICAgIFNW R0FfQ01EX1NVUkZBQ0VfRklMTCA9IDI2LAorICAgIFNWR0FfQ01EX1NVUkZBQ0VfQ09QWSA9IDI3 LAorICAgIFNWR0FfQ01EX1NVUkZBQ0VfQUxQSEFfQkxFTkQgPSAyOCwKKyAgICBTVkdBX0NNRF9G Uk9OVF9ST1BfRklMTCA9IDI5LAorICAgIFNWR0FfQ01EX0ZFTkNFID0gMzAsCit9OworCisvKiBM ZWdhbCB2YWx1ZXMgZm9yIHRoZSBTVkdBX1JFR19DVVJTT1JfT04gcmVnaXN0ZXIgaW4gY3Vyc29y IGJ5cGFzcyBtb2RlICovCitlbnVtIHsKKyAgICBTVkdBX0NVUlNPUl9PTl9ISURFID0gMCwKKyAg ICBTVkdBX0NVUlNPUl9PTl9TSE9XID0gMSwKKyAgICBTVkdBX0NVUlNPUl9PTl9SRU1PVkVfRlJP TV9GQiA9IDIsCisgICAgU1ZHQV9DVVJTT1JfT05fUkVTVE9SRV9UT19GQiA9IDMsCit9OworCitz dGF0aWMgaW5saW5lIHZvaWQgdm1zdmdhX3VwZGF0ZV9yZWN0KHN0cnVjdCB2bXN2Z2Ffc3RhdGVf cyAqcywKKyAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKK3sKKyNp Zm5kZWYgRElSRUNUX1ZSQU0KKyAgICBpbnQgbGluZSA9IGg7CisgICAgaW50IGJ5cGwgPSBzLT5i eXBwICogcy0+d2lkdGg7CisgICAgaW50IHdpZHRoID0gcy0+YnlwcCAqIHc7CisgICAgaW50IHN0 YXJ0ID0gcy0+YnlwcCAqIHggKyBieXBsICogeTsKKyAgICB1aW50OF90ICpzcmMgPSBzLT52cmFt ICsgc3RhcnQ7CisgICAgdWludDhfdCAqZHN0ID0gcy0+ZHMtPmRhdGEgKyBzdGFydDsKKworICAg IGZvciAoOyBsaW5lID4gMDsgbGluZSAtLSwgc3JjICs9IGJ5cGwsIGRzdCArPSBieXBsKQorICAg ICAgICBtZW1jcHkoZHN0LCBzcmMsIHdpZHRoKTsKKyNlbmRpZgorCisgICAgZHB5X3VwZGF0ZShz LT5kcywgeCwgeSwgdywgaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2bXN2Z2FfdXBkYXRl X3NjcmVlbihzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMpCit7CisjaWZuZGVmIERJUkVDVF9WUkFN CisgICAgbWVtY3B5KHMtPmRzLT5kYXRhLCBzLT52cmFtLCBzLT5ieXBwICogcy0+d2lkdGggKiBz LT5oZWlnaHQpOworI2VuZGlmCisKKyAgICBkcHlfdXBkYXRlKHMtPmRzLCAwLCAwLCBzLT53aWR0 aCwgcy0+aGVpZ2h0KTsKK30KKworI2lmZGVmIEhXX1JFQ1RfQUNDRUwKK3N0YXRpYyBpbmxpbmUg dm9pZCB2bXN2Z2FfY29weV9yZWN0KHN0cnVjdCB2bXN2Z2Ffc3RhdGVfcyAqcywKKyAgICAgICAg ICAgICAgICBpbnQgeDAsIGludCB5MCwgaW50IHgxLCBpbnQgeTEsIGludCB3LCBpbnQgaCkKK3sK KyMgaWZkZWYgRElSRUNUX1ZSQU0KKyAgICB1aW50OF90ICp2cmFtID0gcy0+ZHMtPmRhdGE7Cisj IGVsc2UKKyAgICB1aW50OF90ICp2cmFtID0gcy0+dnJhbTsKKyMgZW5kaWYKKyAgICBpbnQgYnlw bCA9IHMtPmJ5cHAgKiBzLT53aWR0aDsKKyAgICBpbnQgd2lkdGggPSBzLT5ieXBwICogdzsKKyAg ICBpbnQgbGluZSA9IGg7CisgICAgdWludDhfdCAqcHRyWzJdOworCisjIGlmZGVmIERJUkVDVF9W UkFNCisgICAgaWYgKHMtPmRzLT5kcHlfY29weSkKKyAgICAgICAgcy0+ZHMtPmRweV9jb3B5KHMt PmRzLCB4MCwgeTAsIHgxLCB5MSwgdywgaCk7CisgICAgZWxzZQorIyBlbmRpZgorICAgIHsKKyAg ICAgICAgaWYgKHkxID4geTApIHsKKyAgICAgICAgICAgIHB0clswXSA9IHZyYW0gKyBzLT5ieXBw ICogeDAgKyBieXBsICogKHkwICsgaCAtIDEpOworICAgICAgICAgICAgcHRyWzFdID0gdnJhbSAr IHMtPmJ5cHAgKiB4MSArIGJ5cGwgKiAoeTEgKyBoIC0gMSk7CisgICAgICAgICAgICBmb3IgKDsg bGluZSA+IDA7IGxpbmUgLS0sIHB0clswXSAtPSBieXBsLCBwdHJbMV0gLT0gYnlwbCkKKyAgICAg ICAgICAgICAgICBtZW1tb3ZlKHB0clsxXSwgcHRyWzBdLCB3aWR0aCk7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBwdHJbMF0gPSB2cmFtICsgcy0+YnlwcCAqIHgwICsgYnlwbCAqIHkw OworICAgICAgICAgICAgcHRyWzFdID0gdnJhbSArIHMtPmJ5cHAgKiB4MSArIGJ5cGwgKiB5MTsK KyAgICAgICAgICAgIGZvciAoOyBsaW5lID4gMDsgbGluZSAtLSwgcHRyWzBdICs9IGJ5cGwsIHB0 clsxXSArPSBieXBsKQorICAgICAgICAgICAgICAgIG1lbW1vdmUocHRyWzFdLCBwdHJbMF0sIHdp ZHRoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZtc3ZnYV91cGRhdGVfcmVjdChzLCB4MSwg eTEsIHcsIGgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdm1zdmdhX2ZpbGxfcmVjdChzdHJ1 Y3Qgdm1zdmdhX3N0YXRlX3MgKnMsCisgICAgICAgICAgICAgICAgdWludDMyX3QgYywgaW50IHgs IGludCB5LCBpbnQgdywgaW50IGgpCit7CisjIGlmZGVmIERJUkVDVF9WUkFNCisgICAgdWludDhf dCAqdnJhbSA9IHMtPmRzLT5kYXRhOworIyBlbHNlCisgICAgdWludDhfdCAqdnJhbSA9IHMtPnZy YW07CisjIGVuZGlmCisgICAgaW50IGJ5cHAgPSBzLT5ieXBwOworICAgIGludCBieXBsID0gYnlw cCAqIHMtPndpZHRoOworICAgIGludCB3aWR0aCA9IGJ5cHAgKiB3OworICAgIGludCBsaW5lID0g aDsKKyAgICBpbnQgY29sdW1uID0gYnlwbDsKKyAgICB1aW50OF90ICpmc3QgPSB2cmFtICsgYnlw cCAqIHggKyBieXBsICogeTsKKyAgICB1aW50OF90ICpkc3Q7CisgICAgdWludDhfdCAqc3JjOwor ICAgIHVpbnQ4X3QgY29sWzRdOworCisjIGlmZGVmIERJUkVDVF9WUkFNCisgICAgaWYgKHMtPmRz LT5kcHlfZmlsbCkKKyAgICAgICAgcy0+ZHMtPmRweV9maWxsKHMtPmRzLCB4LCB5LCB3LCBoLCBj KTsKKyAgICBlbHNlCisjIGVuZGlmCisgICAgeworICAgICAgICBjb2xbMF0gPSBjOworICAgICAg ICBjb2xbMV0gPSBjID4+IDg7CisgICAgICAgIGNvbFsyXSA9IGMgPj4gMTY7CisgICAgICAgIGNv bFszXSA9IGMgPj4gMjQ7CisKKyAgICAgICAgaWYgKGxpbmUgLS0pIHsKKyAgICAgICAgICAgIGRz dCA9IGZzdDsKKyAgICAgICAgICAgIHNyYyA9IGNvbDsKKyAgICAgICAgICAgIGZvciAoOyBjb2x1 bW4gPiAwOyBjb2x1bW4gLS0pIHsKKyAgICAgICAgICAgICAgICAqKGRzdCArKykgPSAqKHNyYyAr Kyk7CisgICAgICAgICAgICAgICAgaWYgKHNyYyAtIGNvbCA9PSBieXBwKQorICAgICAgICAgICAg ICAgICAgICBzcmMgPSBjb2w7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkc3QgPSBmc3Q7 CisgICAgICAgICAgICBmb3IgKDsgbGluZSA+IDA7IGxpbmUgLS0pIHsKKyAgICAgICAgICAgICAg ICBkc3QgKz0gYnlwbDsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZHN0LCBmc3QsIHdpZHRoKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZtc3ZnYV91cGRhdGVfcmVj dChzLCB4LCB5LCB3LCBoKTsKK30KKyNlbmRpZgorCitzdHJ1Y3Qgdm1zdmdhX2N1cnNvcl9kZWZp bml0aW9uX3MgeworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBpZDsK KyAgICBpbnQgYnBwOworICAgIGludCBob3RfeDsKKyAgICBpbnQgaG90X3k7CisgICAgdWludDMy X3QgbWFza1sxMDI0XTsKKyAgICB1aW50MzJfdCBpbWFnZVsxMDI0XTsKK307CisKKyNkZWZpbmUg U1ZHQV9CSVRNQVBfU0laRSh3LCBoKQkJKCgoKHcpICsgMzEpID4+IDUpICogKGgpKQorI2RlZmlu ZSBTVkdBX1BJWE1BUF9TSVpFKHcsIGgsIGJwcCkJKCgoKCh3KSAqIChicHApKSArIDMxKSA+PiA1 KSAqIChoKSkKKworI2lmZGVmIEhXX01PVVNFX0FDQ0VMCitzdGF0aWMgaW5saW5lIHZvaWQgdm1z dmdhX2N1cnNvcl9kZWZpbmUoc3RydWN0IHZtc3ZnYV9jdXJzb3JfZGVmaW5pdGlvbl9zICpjKQor eworICAgIGludCBpOworICAgIGZvciAoaSA9IFNWR0FfQklUTUFQX1NJWkUoYy0+d2lkdGgsIGMt PmhlaWdodCkgLSAxOyBpID49IDA7IGkgLS0pCisgICAgICAgIGMtPm1hc2tbaV0gPSB+Yy0+bWFz a1tpXTsKKworICAgIGlmIChrYmRfY3Vyc29yX2RlZmluZSkKKyAgICAgICAga2JkX2N1cnNvcl9k ZWZpbmUoYy0+d2lkdGgsIGMtPmhlaWdodCwgYy0+YnBwLCBjLT5ob3RfeCwgYy0+aG90X3ksCisg ICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSBjLT5pbWFnZSwgKHVpbnQ4X3QgKikg Yy0+bWFzayk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgdm1zdmdhX2ZpZm9fZW1w dHkoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzKQoreworICAgIGlmICghcy0+Y29uZmlnIHx8ICFz LT5lbmFibGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAocy0+Y21kLT5uZXh0X2Nt ZCA9PSBzLT5jbWQtPnN0b3ApOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHZtc3ZnYV9m aWZvX3JlYWQoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzKQoreworICAgIHVpbnQzMl90IGNtZCA9 IHMtPmZpZm9bcy0+Y21kLT5zdG9wID4+IDJdOworICAgIHMtPmNtZC0+c3RvcCArPSA0OworICAg IGlmIChzLT5jbWQtPnN0b3AgPj0gcy0+Y21kLT5tYXgpCisgICAgICAgIHMtPmNtZC0+c3RvcCA9 IHMtPmNtZC0+bWluOworICAgIHJldHVybiBjbWQ7Cit9CisKK3N0YXRpYyB2b2lkIHZtc3ZnYV9m aWZvX3J1bihzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMpCit7CisgICAgdWludDMyX3QgY21kLCBj b2xvdXI7CisgICAgaW50IGFyZ3MgPSAwOworICAgIGludCB4LCB5LCBkeCwgZHksIHdpZHRoLCBo ZWlnaHQ7CisgICAgc3RydWN0IHZtc3ZnYV9jdXJzb3JfZGVmaW5pdGlvbl9zIGN1cnNvcjsKKyAg ICB3aGlsZSAoIXZtc3ZnYV9maWZvX2VtcHR5KHMpKQorICAgICAgICBzd2l0Y2ggKGNtZCA9IHZt c3ZnYV9maWZvX3JlYWQocykpIHsKKyAgICAgICAgY2FzZSBTVkdBX0NNRF9VUERBVEU6CisgICAg ICAgIGNhc2UgU1ZHQV9DTURfVVBEQVRFX1ZFUkJPU0U6CisgICAgICAgICAgICB4ID0gdm1zdmdh X2ZpZm9fcmVhZChzKTsKKyAgICAgICAgICAgIHkgPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAg ICAgICAgICAgd2lkdGggPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgaGVpZ2h0 ID0gdm1zdmdhX2ZpZm9fcmVhZChzKTsKKyAgICAgICAgICAgIHZtc3ZnYV91cGRhdGVfcmVjdChz LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh c2UgU1ZHQV9DTURfUkVDVF9GSUxMOgorICAgICAgICAgICAgY29sb3VyID0gdm1zdmdhX2ZpZm9f cmVhZChzKTsKKyAgICAgICAgICAgIHggPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAg ICAgeSA9IHZtc3ZnYV9maWZvX3JlYWQocyk7CisgICAgICAgICAgICB3aWR0aCA9IHZtc3ZnYV9m aWZvX3JlYWQocyk7CisgICAgICAgICAgICBoZWlnaHQgPSB2bXN2Z2FfZmlmb19yZWFkKHMpOwor I2lmZGVmIEhXX1JFQ1RfQUNDRUwKKyAgICAgICAgICAgIHZtc3ZnYV9maWxsX3JlY3QocywgY29s b3VyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UKKyAg ICAgICAgICAgIGdvdG8gYmFkY21kOworI2VuZGlmCisKKyAgICAgICAgY2FzZSBTVkdBX0NNRF9S RUNUX0NPUFk6CisgICAgICAgICAgICB4ID0gdm1zdmdhX2ZpZm9fcmVhZChzKTsKKyAgICAgICAg ICAgIHkgPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgZHggPSB2bXN2Z2FfZmlm b19yZWFkKHMpOworICAgICAgICAgICAgZHkgPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAg ICAgICAgd2lkdGggPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgaGVpZ2h0ID0g dm1zdmdhX2ZpZm9fcmVhZChzKTsKKyNpZmRlZiBIV19SRUNUX0FDQ0VMCisgICAgICAgICAgICB2 bXN2Z2FfY29weV9yZWN0KHMsIHgsIHksIGR4LCBkeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAg ICAgICBicmVhazsKKyNlbHNlCisgICAgICAgICAgICBnb3RvIGJhZGNtZDsKKyNlbmRpZgorCisg ICAgICAgIGNhc2UgU1ZHQV9DTURfREVGSU5FX0NVUlNPUjoKKyAgICAgICAgICAgIGN1cnNvci5p ZCA9IHZtc3ZnYV9maWZvX3JlYWQocyk7CisgICAgICAgICAgICBjdXJzb3IuaG90X3ggPSB2bXN2 Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgY3Vyc29yLmhvdF95ID0gdm1zdmdhX2ZpZm9f cmVhZChzKTsKKyAgICAgICAgICAgIGN1cnNvci53aWR0aCA9IHggPSB2bXN2Z2FfZmlmb19yZWFk KHMpOworICAgICAgICAgICAgY3Vyc29yLmhlaWdodCA9IHkgPSB2bXN2Z2FfZmlmb19yZWFkKHMp OworICAgICAgICAgICAgdm1zdmdhX2ZpZm9fcmVhZChzKTsKKyAgICAgICAgICAgIGN1cnNvci5i cHAgPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgZm9yIChhcmdzID0gMDsgYXJn cyA8IFNWR0FfQklUTUFQX1NJWkUoeCwgeSk7IGFyZ3MgKyspCisgICAgICAgICAgICAgICAgY3Vy c29yLm1hc2tbYXJnc10gPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgZm9yIChh cmdzID0gMDsgYXJncyA8IFNWR0FfUElYTUFQX1NJWkUoeCwgeSwgY3Vyc29yLmJwcCk7IGFyZ3Mg KyspCisgICAgICAgICAgICAgICAgY3Vyc29yLmltYWdlW2FyZ3NdID0gdm1zdmdhX2ZpZm9fcmVh ZChzKTsKKyNpZmRlZiBIV19NT1VTRV9BQ0NFTAorICAgICAgICAgICAgdm1zdmdhX2N1cnNvcl9k ZWZpbmUoJmN1cnNvcik7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlCisgICAgICAgICAgICBh cmdzID0gMDsKKyAgICAgICAgICAgIGdvdG8gYmFkY21kOworI2VuZGlmCisKKyAgICAgICAgLyoK KyAgICAgICAgICogT3RoZXIgY29tbWFuZHMgdGhhdCB3ZSBhdCBsZWFzdCBrbm93IHRoZSBudW1i ZXIgb2YgYXJndW1lbnRzCisgICAgICAgICAqIGZvciBzbyB3ZSBjYW4gYXZvaWQgRklGTyBkZXN5 bmMgaWYgZHJpdmVyIHVzZXMgdGhlbSBpbGxlZ2FsbHkuCisgICAgICAgICAqLworICAgICAgICBj YXNlIFNWR0FfQ01EX0RFRklORV9BTFBIQV9DVVJTT1I6CisgICAgICAgICAgICB2bXN2Z2FfZmlm b19yZWFkKHMpOworICAgICAgICAgICAgdm1zdmdhX2ZpZm9fcmVhZChzKTsKKyAgICAgICAgICAg IHZtc3ZnYV9maWZvX3JlYWQocyk7CisgICAgICAgICAgICB4ID0gdm1zdmdhX2ZpZm9fcmVhZChz KTsKKyAgICAgICAgICAgIHkgPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgYXJn cyA9IHggKiB5OworICAgICAgICAgICAgZ290byBiYWRjbWQ7CisgICAgICAgIGNhc2UgU1ZHQV9D TURfUkVDVF9ST1BfRklMTDoKKyAgICAgICAgICAgIGFyZ3MgPSA2OworICAgICAgICAgICAgZ290 byBiYWRjbWQ7CisgICAgICAgIGNhc2UgU1ZHQV9DTURfUkVDVF9ST1BfQ09QWToKKyAgICAgICAg ICAgIGFyZ3MgPSA3OworICAgICAgICAgICAgZ290byBiYWRjbWQ7CisgICAgICAgIGNhc2UgU1ZH QV9DTURfRFJBV19HTFlQSF9DTElQUEVEOgorICAgICAgICAgICAgdm1zdmdhX2ZpZm9fcmVhZChz KTsKKyAgICAgICAgICAgIHZtc3ZnYV9maWZvX3JlYWQocyk7CisgICAgICAgICAgICBhcmdzID0g NyArICh2bXN2Z2FfZmlmb19yZWFkKHMpID4+IDIpOworICAgICAgICAgICAgZ290byBiYWRjbWQ7 CisgICAgICAgIGNhc2UgU1ZHQV9DTURfU1VSRkFDRV9BTFBIQV9CTEVORDoKKyAgICAgICAgICAg IGFyZ3MgPSAxMjsKKyAgICAgICAgICAgIGdvdG8gYmFkY21kOworCisgICAgICAgIC8qCisgICAg ICAgICAqIE90aGVyIGNvbW1hbmRzIHRoYXQgYXJlIG5vdCBsaXN0ZWQgYXMgZGVwZW5kaW5nIG9u IGFueQorICAgICAgICAgKiBDQVBBQklMSVRJRVMgYml0cywgYnV0IGFyZSBub3QgZGVzY3JpYmVk IGluIHRoZSBSRUFETUUgZWl0aGVyLgorICAgICAgICAgKi8KKyAgICAgICAgY2FzZSBTVkdBX0NN RF9TVVJGQUNFX0ZJTEw6CisgICAgICAgIGNhc2UgU1ZHQV9DTURfU1VSRkFDRV9DT1BZOgorICAg ICAgICBjYXNlIFNWR0FfQ01EX0ZST05UX1JPUF9GSUxMOgorICAgICAgICBjYXNlIFNWR0FfQ01E X0ZFTkNFOgorICAgICAgICBjYXNlIFNWR0FfQ01EX0lOVkFMSURfQ01EOgorICAgICAgICAgICAg YnJlYWs7IC8qIE5vcCAqLworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJhZGNtZDoKKyAg ICAgICAgICAgIHdoaWxlIChhcmdzIC0tKQorICAgICAgICAgICAgICAgIHZtc3ZnYV9maWZvX3Jl YWQocyk7CisgICAgICAgICAgICBwcmludGYoIiVzOiBVbmtub3duIGNvbW1hbmQgMHglMDJ4IGlu IFNWR0EgY29tbWFuZCBGSUZPXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVO Q1RJT05fXywgY21kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBzLT5z eW5jaW5nID0gMDsKK30KKworc3RhdGljIHVpbnQzMl90IHZtc3ZnYV9pbmRleF9yZWFkKHZvaWQg Km9wYXF1ZSwgdWludDMyX3QgYWRkcmVzcykKK3sKKyAgICBzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3Mg KnMgPSAoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICopIG9wYXF1ZTsKKyAgICByZXR1cm4gcy0+aW5k ZXg7Cit9CisKK3N0YXRpYyB2b2lkIHZtc3ZnYV9pbmRleF93cml0ZSh2b2lkICpvcGFxdWUsIHVp bnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IGluZGV4KQoreworICAgIHN0cnVjdCB2bXN2Z2Ffc3Rh dGVfcyAqcyA9IChzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKikgb3BhcXVlOworICAgIHMtPmluZGV4 ID0gaW5kZXg7Cit9CisKK3N0YXRpYyB1aW50MzJfdCB2bXN2Z2FfdmFsdWVfcmVhZCh2b2lkICpv cGFxdWUsIHVpbnQzMl90IGFkZHJlc3MpCit7CisgICAgdWludDMyX3QgY2FwczsKKyAgICBzdHJ1 Y3Qgdm1zdmdhX3N0YXRlX3MgKnMgPSAoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICopIG9wYXF1ZTsK KyAgICBzd2l0Y2ggKHMtPmluZGV4KSB7CisgICAgY2FzZSBTVkdBX1JFR19JRDoKKyAgICAgICAg cmV0dXJuIHMtPnN2Z2FpZDsKKworICAgIGNhc2UgU1ZHQV9SRUdfRU5BQkxFOgorICAgICAgICBy ZXR1cm4gcy0+ZW5hYmxlOworCisgICAgY2FzZSBTVkdBX1JFR19XSURUSDoKKyAgICAgICAgcmV0 dXJuIHMtPndpZHRoOworCisgICAgY2FzZSBTVkdBX1JFR19IRUlHSFQ6CisgICAgICAgIHJldHVy biBzLT5oZWlnaHQ7CisKKyAgICBjYXNlIFNWR0FfUkVHX01BWF9XSURUSDoKKyAgICAgICAgcmV0 dXJuIFNWR0FfTUFYX1dJRFRIOworCisgICAgY2FzZSBTVkdBX1JFR19NQVhfSEVJR0hUOgorICAg ICAgICByZXR1cm4gU1ZHQV9NQVhfV0lEVEg7CisKKyAgICBjYXNlIFNWR0FfUkVHX0RFUFRIOgor ICAgICAgICByZXR1cm4gcy0+ZGVwdGg7CisKKyAgICBjYXNlIFNWR0FfUkVHX0JJVFNfUEVSX1BJ WEVMOgorICAgICAgICByZXR1cm4gKHMtPmRlcHRoICsgNykgJiB+NzsKKworICAgIGNhc2UgU1ZH QV9SRUdfUFNFVURPQ09MT1I6CisgICAgICAgIHJldHVybiAweDA7CisKKyAgICBjYXNlIFNWR0Ff UkVHX1JFRF9NQVNLOgorICAgICAgICByZXR1cm4gcy0+d3JlZDsKKyAgICBjYXNlIFNWR0FfUkVH X0dSRUVOX01BU0s6CisgICAgICAgIHJldHVybiBzLT53Z3JlZW47CisgICAgY2FzZSBTVkdBX1JF R19CTFVFX01BU0s6CisgICAgICAgIHJldHVybiBzLT53Ymx1ZTsKKworICAgIGNhc2UgU1ZHQV9S RUdfQllURVNfUEVSX0xJTkU6CisgICAgICAgIHJldHVybiAoKHMtPmRlcHRoICsgNykgPj4gMykg KiBzLT5uZXdfd2lkdGg7CisKKyAgICBjYXNlIFNWR0FfUkVHX0ZCX1NUQVJUOgorICAgICAgICBy ZXR1cm4gU1ZHQV9NRU1fQkFTRTsKKworICAgIGNhc2UgU1ZHQV9SRUdfRkJfT0ZGU0VUOgorICAg ICAgICByZXR1cm4gMHgwOworCisgICAgY2FzZSBTVkdBX1JFR19WUkFNX1NJWkU6CisgICAgICAg IHJldHVybiBzLT52cmFtX3NpemUgLSBTVkdBX0ZJRk9fU0laRTsKKworICAgIGNhc2UgU1ZHQV9S RUdfRkJfU0laRToKKyAgICAgICAgcmV0dXJuIHMtPmZiX3NpemU7CisKKyAgICBjYXNlIFNWR0Ff UkVHX0NBUEFCSUxJVElFUzoKKyAgICAgICAgY2FwcyA9IFNWR0FfQ0FQX05PTkU7CisjaWZkZWYg SFdfUkVDVF9BQ0NFTAorICAgICAgICBjYXBzIHw9IFNWR0FfQ0FQX1JFQ1RfRklMTCB8IFNWR0Ff Q0FQX1JFQ1RfQ09QWTsKKyNlbmRpZgorI2lmZGVmIEhXX01PVVNFX0FDQ0VMCisgICAgICAgIGlm IChrYmRfbW91c2Vfc2V0KQorICAgICAgICAgICAgY2FwcyB8PSBTVkdBX0NBUF9DVVJTT1IgfCBT VkdBX0NBUF9DVVJTT1JfQllQQVNTXzIgfAorICAgICAgICAgICAgICAgICAgICBTVkdBX0NBUF9D VVJTT1JfQllQQVNTOworI2VuZGlmCisgICAgICAgIHJldHVybiBjYXBzOworCisgICAgY2FzZSBT VkdBX1JFR19NRU1fU1RBUlQ6CisgICAgICAgIHJldHVybiBTVkdBX01FTV9CQVNFICsgcy0+dnJh bV9zaXplIC0gU1ZHQV9GSUZPX1NJWkU7CisKKyAgICBjYXNlIFNWR0FfUkVHX01FTV9TSVpFOgor ICAgICAgICByZXR1cm4gU1ZHQV9GSUZPX1NJWkU7CisKKyAgICBjYXNlIFNWR0FfUkVHX0NPTkZJ R19ET05FOgorICAgICAgICByZXR1cm4gcy0+Y29uZmlnOworCisgICAgY2FzZSBTVkdBX1JFR19T WU5DOgorICAgIGNhc2UgU1ZHQV9SRUdfQlVTWToKKyAgICAgICAgcmV0dXJuIHMtPnN5bmNpbmc7 CisKKyAgICBjYXNlIFNWR0FfUkVHX0dVRVNUX0lEOgorICAgICAgICByZXR1cm4gcy0+Z3Vlc3Q7 CisKKyAgICBjYXNlIFNWR0FfUkVHX0NVUlNPUl9JRDoKKyAgICAgICAgcmV0dXJuIHMtPmN1cnNv ci5pZDsKKworICAgIGNhc2UgU1ZHQV9SRUdfQ1VSU09SX1g6CisgICAgICAgIHJldHVybiBzLT5j dXJzb3IueDsKKworICAgIGNhc2UgU1ZHQV9SRUdfQ1VSU09SX1k6CisgICAgICAgIHJldHVybiBz LT5jdXJzb3IueDsKKworICAgIGNhc2UgU1ZHQV9SRUdfQ1VSU09SX09OOgorICAgICAgICByZXR1 cm4gcy0+Y3Vyc29yLm9uOworCisgICAgY2FzZSBTVkdBX1JFR19IT1NUX0JJVFNfUEVSX1BJWEVM OgorICAgICAgICByZXR1cm4gKHMtPmRlcHRoICsgNykgJiB+NzsKKworICAgIGNhc2UgU1ZHQV9S RUdfU0NSQVRDSF9TSVpFOgorICAgICAgICByZXR1cm4gcy0+c2NyYXRjaF9zaXplOworCisgICAg Y2FzZSBTVkdBX1JFR19NRU1fUkVHUzoKKyAgICBjYXNlIFNWR0FfUkVHX05VTV9ESVNQTEFZUzoK KyAgICBjYXNlIFNWR0FfUkVHX1BJVENITE9DSzoKKyAgICBjYXNlIFNWR0FfUEFMRVRURV9CQVNF IC4uLiBTVkdBX1BBTEVUVEVfRU5EOgorICAgICAgICByZXR1cm4gMDsKKworICAgIGRlZmF1bHQ6 CisgICAgICAgIGlmIChzLT5pbmRleCA+PSBTVkdBX1NDUkFUQ0hfQkFTRSAmJgorICAgICAgICAg ICAgICAgIHMtPmluZGV4IDwgU1ZHQV9TQ1JBVENIX0JBU0UgKyBzLT5zY3JhdGNoX3NpemUpCisg ICAgICAgICAgICByZXR1cm4gcy0+c2NyYXRjaFtzLT5pbmRleCAtIFNWR0FfU0NSQVRDSF9CQVNF XTsKKyAgICAgICAgcHJpbnRmKCIlczogQmFkIHJlZ2lzdGVyICUwMnhcbiIsIF9fRlVOQ1RJT05f Xywgcy0+aW5kZXgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2 bXN2Z2FfdmFsdWVfd3JpdGUodm9pZCAqb3BhcXVlLCB1aW50MzJfdCBhZGRyZXNzLCB1aW50MzJf dCB2YWx1ZSkKK3sKKyAgICBzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMgPSAoc3RydWN0IHZtc3Zn YV9zdGF0ZV9zICopIG9wYXF1ZTsKKyAgICBzd2l0Y2ggKHMtPmluZGV4KSB7CisgICAgY2FzZSBT VkdBX1JFR19JRDoKKyAgICAgICAgaWYgKHZhbHVlID09IFNWR0FfSURfMiB8fCB2YWx1ZSA9PSBT VkdBX0lEXzEgfHwgdmFsdWUgPT0gU1ZHQV9JRF8wKQorICAgICAgICAgICAgcy0+c3ZnYWlkID0g dmFsdWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTVkdBX1JFR19FTkFCTEU6CisgICAg ICAgIHMtPmVuYWJsZSA9IHMtPmNvbmZpZyA9IHZhbHVlICYgcy0+Y29uZmlnOworICAgICAgICBz LT5pbnZhbGlkYXRlID0gMTsKKyAgICAgICAgaWYgKHMtPmVuYWJsZSkKKyAgICAgICAgICAgIHMt PmZiX3NpemUgPSAoKHMtPmRlcHRoICsgNykgPj4gMykgKiBzLT5uZXdfd2lkdGggKiBzLT5uZXdf aGVpZ2h0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1ZHQV9SRUdfV0lEVEg6CisgICAg ICAgIHMtPm5ld193aWR0aCA9IHZhbHVlOworICAgICAgICBzLT5pbnZhbGlkYXRlID0gMTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNWR0FfUkVHX0hFSUdIVDoKKyAgICAgICAgcy0+bmV3 X2hlaWdodCA9IHZhbHVlOworICAgICAgICBzLT5pbnZhbGlkYXRlID0gMTsKKyAgICAgICAgYnJl YWs7CisKKyAgICBjYXNlIFNWR0FfUkVHX0RFUFRIOgorICAgIGNhc2UgU1ZHQV9SRUdfQklUU19Q RVJfUElYRUw6CisgICAgICAgIGlmICh2YWx1ZSAhPSBzLT5kZXB0aCkgeworICAgICAgICAgICAg cHJpbnRmKCIlczogQmFkIGNvbG91ciBkZXB0aDogJWkgYml0c1xuIiwgX19GVU5DVElPTl9fLCB2 YWx1ZSk7CisgICAgICAgICAgICBzLT5jb25maWcgPSAwOworICAgICAgICB9CisgICAgICAgIGJy ZWFrOworCisgICAgY2FzZSBTVkdBX1JFR19DT05GSUdfRE9ORToKKyAgICAgICAgaWYgKHZhbHVl KSB7CisgICAgICAgICAgICBzLT5maWZvID0gKHVpbnQzMl90ICopICZzLT52cmFtW3MtPnZyYW1f c2l6ZSAtIFNWR0FfRklGT19TSVpFXTsKKyAgICAgICAgICAgIC8qIENoZWNrIHJhbmdlIGFuZCBh bGlnbm1lbnQuICAqLworICAgICAgICAgICAgaWYgKChzLT5jbWQtPm1pbiB8IHMtPmNtZC0+bWF4 IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmNtZC0+bmV4dF9jbWQgfCBzLT5jbWQtPnN0 b3ApICYgMykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChzLT5jbWQt Pm1pbiA8ICh1aW50OF90ICopIHMtPmNtZC0+ZmlmbyAtICh1aW50OF90ICopIHMtPmZpZm8pCisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAocy0+Y21kLT5tYXggPiBTVkdB X0ZJRk9fU0laRSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChzLT5j bWQtPm1heCA8IHMtPmNtZC0+bWluICsgMTAgKiAxMDI0KQorICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisgICAgICAgIHMtPmNvbmZpZyA9IHZhbHVlOworICAgICAgICBicmVhazsK KworICAgIGNhc2UgU1ZHQV9SRUdfU1lOQzoKKyAgICAgICAgcy0+c3luY2luZyA9IDE7CisgICAg ICAgIHZtc3ZnYV9maWZvX3J1bihzKTsgLyogT3Igc2hvdWxkIHdlIGp1c3Qgd2FpdCBmb3IgdXBk YXRlX2Rpc3BsYXk/ICovCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTVkdBX1JFR19HVUVT VF9JRDoKKyAgICAgICAgcy0+Z3Vlc3QgPSB2YWx1ZTsKKyNpZmRlZiBWRVJCT1NFCisgICAgICAg IGlmICh2YWx1ZSA+PSBHVUVTVF9PU19CQVNFICYmIHZhbHVlIDwgR1VFU1RfT1NfQkFTRSArCisg ICAgICAgICAgICAgICAgc2l6ZW9mKHZtc3ZnYV9ndWVzdF9pZCkgLyBzaXplb2YoKnZtc3ZnYV9n dWVzdF9pZCkpCisgICAgICAgICAgICBwcmludGYoIiVzOiBndWVzdCBydW5zICVzLlxuIiwgX19G VU5DVElPTl9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtc3ZnYV9ndWVzdF9pZFt2 YWx1ZSAtIEdVRVNUX09TX0JBU0VdKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKworICAgIGNh c2UgU1ZHQV9SRUdfQ1VSU09SX0lEOgorICAgICAgICBzLT5jdXJzb3IuaWQgPSB2YWx1ZTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNWR0FfUkVHX0NVUlNPUl9YOgorICAgICAgICBzLT5j dXJzb3IueCA9IHZhbHVlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1ZHQV9SRUdfQ1VS U09SX1k6CisgICAgICAgIHMtPmN1cnNvci55ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworCisg ICAgY2FzZSBTVkdBX1JFR19DVVJTT1JfT046CisgICAgICAgIHMtPmN1cnNvci5vbiB8PSAodmFs dWUgPT0gU1ZHQV9DVVJTT1JfT05fU0hPVyk7CisgICAgICAgIHMtPmN1cnNvci5vbiAmPSAodmFs dWUgIT0gU1ZHQV9DVVJTT1JfT05fSElERSk7CisjaWZkZWYgSFdfTU9VU0VfQUNDRUwKKyAgICAg ICAgaWYgKGtiZF9tb3VzZV9zZXQgJiYgdmFsdWUgPD0gU1ZHQV9DVVJTT1JfT05fU0hPVykKKyAg ICAgICAgICAgIGtiZF9tb3VzZV9zZXQocy0+Y3Vyc29yLngsIHMtPmN1cnNvci55LCBzLT5jdXJz b3Iub24pOworI2VuZGlmCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTVkdBX1JFR19NRU1f UkVHUzoKKyAgICBjYXNlIFNWR0FfUkVHX05VTV9ESVNQTEFZUzoKKyAgICBjYXNlIFNWR0FfUkVH X1BJVENITE9DSzoKKyAgICBjYXNlIFNWR0FfUEFMRVRURV9CQVNFIC4uLiBTVkdBX1BBTEVUVEVf RU5EOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChzLT5pbmRl eCA+PSBTVkdBX1NDUkFUQ0hfQkFTRSAmJgorICAgICAgICAgICAgICAgIHMtPmluZGV4IDwgU1ZH QV9TQ1JBVENIX0JBU0UgKyBzLT5zY3JhdGNoX3NpemUpIHsKKyAgICAgICAgICAgIHMtPnNjcmF0 Y2hbcy0+aW5kZXggLSBTVkdBX1NDUkFUQ0hfQkFTRV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiJXM6IEJhZCByZWdpc3RlciAlMDJ4XG4i LCBfX0ZVTkNUSU9OX18sIHMtPmluZGV4KTsKKyAgICB9Cit9CisKK3N0YXRpYyB1aW50MzJfdCB2 bXN2Z2FfYmlvc19yZWFkKHZvaWQgKm9wYXF1ZSwgdWludDMyX3QgYWRkcmVzcykKK3sKKyAgICBw cmludGYoIiVzOiB3aGF0IGFyZSB3ZSBzdXBwb3NlZCB0byByZXR1cm4/XG4iLCBfX0ZVTkNUSU9O X18pOworICAgIHJldHVybiAweGNhZmU7Cit9CisKK3N0YXRpYyB2b2lkIHZtc3ZnYV9iaW9zX3dy aXRlKHZvaWQgKm9wYXF1ZSwgdWludDMyX3QgYWRkcmVzcywgdWludDMyX3QgZGF0YSkKK3sKKyAg ICBwcmludGYoIiVzOiB3aGF0IGFyZSB3ZSBzdXBwb3NlZCB0byBkbyB3aXRoICglMDh4KT9cbiIs CisgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZGF0YSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCB2bXN2Z2Ffc2l6ZShzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMpCit7CisgICAg aWYgKHMtPm5ld193aWR0aCAhPSBzLT53aWR0aCB8fCBzLT5uZXdfaGVpZ2h0ICE9IHMtPmhlaWdo dCkgeworICAgICAgICBzLT53aWR0aCA9IHMtPm5ld193aWR0aDsKKyAgICAgICAgcy0+aGVpZ2h0 ID0gcy0+bmV3X2hlaWdodDsKKyAgICAgICAgZHB5X3Jlc2l6ZShzLT5kcywgcy0+d2lkdGgsIHMt PmhlaWdodCk7CisgICAgICAgIHMtPmludmFsaWRhdGUgPSAxOworICAgIH0KK30KKworc3RhdGlj IHZvaWQgdm1zdmdhX3VwZGF0ZV9kaXNwbGF5KHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBzdHJ1Y3Qg dm1zdmdhX3N0YXRlX3MgKnMgPSAoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICopIG9wYXF1ZTsKKyAg ICBpZiAoIXMtPmVuYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdm1zdmdhX3NpemUocyk7 CisKKyAgICB2bXN2Z2FfZmlmb19ydW4ocyk7CisKKyAgICAvKgorICAgICAqIElzIGl0IG1vcmUg ZWZmaWNpZW50IHRvIGxvb2sgYXQgdnJhbSBWR0EtZGlydHkgYml0cyBvciB3YWl0CisgICAgICog Zm9yIHRoZSBkcml2ZXIgdG8gaXNzdWUgU1ZHQV9DTURfVVBEQVRFPworICAgICAqLworICAgIGlm IChzLT5pbnZhbGlkYXRlKSB7CisgICAgICAgIHMtPmludmFsaWRhdGUgPSAwOworICAgICAgICB2 bXN2Z2FfdXBkYXRlX3NjcmVlbihzKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZtc3ZnYV9y ZXNldChzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMpCit7CisgICAgcy0+aW5kZXggPSAwOworICAg IHMtPmVuYWJsZSA9IDA7CisgICAgcy0+Y29uZmlnID0gMDsKKyAgICBzLT53aWR0aCA9IC0xOwor ICAgIHMtPmhlaWdodCA9IC0xOworICAgIHMtPnN2Z2FpZCA9IFNWR0FfSUQ7CisgICAgcy0+ZGVw dGggPSBzLT5kcy0+ZGVwdGggPyBzLT5kcy0+ZGVwdGggOiAyNDsKKyAgICBzLT5ieXBwID0gKHMt PmRlcHRoICsgNykgPj4gMzsKKyAgICBzLT5jdXJzb3Iub24gPSAwOworICAgIHN3aXRjaCAocy0+ ZGVwdGgpIHsKKyAgICBjYXNlIDg6CisgICAgICAgIHMtPndyZWQgICA9IDB4MDAwMDAwMDc7Cisg ICAgICAgIHMtPndncmVlbiA9IDB4MDAwMDAwMzg7CisgICAgICAgIHMtPndibHVlICA9IDB4MDAw MDAwYzA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMTU6CisgICAgICAgIHMtPndyZWQgICA9 IDB4MDAwMDAwMWY7CisgICAgICAgIHMtPndncmVlbiA9IDB4MDAwMDAzZTA7CisgICAgICAgIHMt PndibHVlICA9IDB4MDAwMDdjMDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMTY6CisgICAg ICAgIHMtPndyZWQgICA9IDB4MDAwMDAwMWY7CisgICAgICAgIHMtPndncmVlbiA9IDB4MDAwMDA3 ZTA7CisgICAgICAgIHMtPndibHVlICA9IDB4MDAwMGY4MDA7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgMjQ6CisgICAgICAgIHMtPndyZWQgICA9IDB4MDAwMDAwZmY7CisgICAgICAgIHMtPndn cmVlbiA9IDB4MDAwMGZmMDA7CisgICAgICAgIHMtPndibHVlICA9IDB4MDBmZjAwMDA7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgMzI6CisgICAgICAgIHMtPndyZWQgICA9IDB4MDAwMDAwZmY7 CisgICAgICAgIHMtPndncmVlbiA9IDB4MDAwMGZmMDA7CisgICAgICAgIHMtPndibHVlICA9IDB4 MDBmZjAwMDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBzLT5zeW5jaW5nID0gMDsKK30K Kworc3RhdGljIHZvaWQgdm1zdmdhX2ludmFsaWRhdGVfZGlzcGxheSh2b2lkICpvcGFxdWUpCit7 CisgICAgc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzID0gKHN0cnVjdCB2bXN2Z2Ffc3RhdGVfcyAq KSBvcGFxdWU7CisgICAgcy0+aW52YWxpZGF0ZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHZtc3Zn YV9zY3JlZW5fZHVtcCh2b2lkICpvcGFxdWUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAg IC8qIFRPRE8gKi8KK30KKworI2lmZGVmIERJUkVDVF9WUkFNCitzdGF0aWMgdWludDMyX3Qgdm1z dmdhX3ZyYW1fcmVhZGIodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKK3sK KyAgICBzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMgPSAoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICop IG9wYXF1ZTsKKyAgICBhZGRyIC09IFNWR0FfTUVNX0JBU0U7CisgICAgaWYgKGFkZHIgPCBzLT5m Yl9zaXplKQorICAgICAgICByZXR1cm4gKih1aW50OF90ICopIChzLT5kcy0+ZGF0YSArIGFkZHIp OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICoodWludDhfdCAqKSAocy0+dnJhbSArIGFkZHIp OworfQorCitzdGF0aWMgdWludDMyX3Qgdm1zdmdhX3ZyYW1fcmVhZHcodm9pZCAqb3BhcXVlLCB0 YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKK3sKKyAgICBzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMg PSAoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICopIG9wYXF1ZTsKKyAgICBhZGRyIC09IFNWR0FfTUVN X0JBU0U7CisgICAgaWYgKGFkZHIgPCBzLT5mYl9zaXplKQorICAgICAgICByZXR1cm4gKih1aW50 MTZfdCAqKSAocy0+ZHMtPmRhdGEgKyBhZGRyKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAq KHVpbnQxNl90ICopIChzLT52cmFtICsgYWRkcik7Cit9CisKK3N0YXRpYyB1aW50MzJfdCB2bXN2 Z2FfdnJhbV9yZWFkbCh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyKQorewor ICAgIHN0cnVjdCB2bXN2Z2Ffc3RhdGVfcyAqcyA9IChzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKikg b3BhcXVlOworICAgIGFkZHIgLT0gU1ZHQV9NRU1fQkFTRTsKKyAgICBpZiAoYWRkciA8IHMtPmZi X3NpemUpCisgICAgICAgIHJldHVybiAqKHVpbnQzMl90ICopIChzLT5kcy0+ZGF0YSArIGFkZHIp OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICoodWludDMyX3QgKikgKHMtPnZyYW0gKyBhZGRy KTsKK30KKworc3RhdGljIHZvaWQgdm1zdmdhX3ZyYW1fd3JpdGViKHZvaWQgKm9wYXF1ZSwgdGFy Z2V0X3BoeXNfYWRkcl90IGFkZHIsCisgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUpCit7 CisgICAgc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzID0gKHN0cnVjdCB2bXN2Z2Ffc3RhdGVfcyAq KSBvcGFxdWU7CisgICAgYWRkciAtPSBTVkdBX01FTV9CQVNFOworICAgIGlmIChhZGRyIDwgcy0+ ZmJfc2l6ZSkKKyAgICAgICAgKih1aW50OF90ICopIChzLT5kcy0+ZGF0YSArIGFkZHIpID0gdmFs dWU7CisgICAgZWxzZQorICAgICAgICAqKHVpbnQ4X3QgKikgKHMtPnZyYW0gKyBhZGRyKSA9IHZh bHVlOworfQorCitzdGF0aWMgdm9pZCB2bXN2Z2FfdnJhbV93cml0ZXcodm9pZCAqb3BhcXVlLCB0 YXJnZXRfcGh5c19hZGRyX3QgYWRkciwKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSkK K3sKKyAgICBzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMgPSAoc3RydWN0IHZtc3ZnYV9zdGF0ZV9z ICopIG9wYXF1ZTsKKyAgICBhZGRyIC09IFNWR0FfTUVNX0JBU0U7CisgICAgaWYgKGFkZHIgPCBz LT5mYl9zaXplKQorICAgICAgICAqKHVpbnQxNl90ICopIChzLT5kcy0+ZGF0YSArIGFkZHIpID0g dmFsdWU7CisgICAgZWxzZQorICAgICAgICAqKHVpbnQxNl90ICopIChzLT52cmFtICsgYWRkcikg PSB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgdm1zdmdhX3ZyYW1fd3JpdGVsKHZvaWQgKm9wYXF1 ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCisgICAgICAgICAgICAgICAgdWludDMyX3QgdmFs dWUpCit7CisgICAgc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzID0gKHN0cnVjdCB2bXN2Z2Ffc3Rh dGVfcyAqKSBvcGFxdWU7CisgICAgYWRkciAtPSBTVkdBX01FTV9CQVNFOworICAgIGlmIChhZGRy IDwgcy0+ZmJfc2l6ZSkKKyAgICAgICAgKih1aW50MzJfdCAqKSAocy0+ZHMtPmRhdGEgKyBhZGRy KSA9IHZhbHVlOworICAgIGVsc2UKKyAgICAgICAgKih1aW50MzJfdCAqKSAocy0+dnJhbSArIGFk ZHIpID0gdmFsdWU7Cit9CisKK3N0YXRpYyBDUFVSZWFkTWVtb3J5RnVuYyAqdm1zdmdhX3ZyYW1f cmVhZFtdID0geworICAgIHZtc3ZnYV92cmFtX3JlYWRiLAorICAgIHZtc3ZnYV92cmFtX3JlYWR3 LAorICAgIHZtc3ZnYV92cmFtX3JlYWRsLAorfTsKKworc3RhdGljIENQVVdyaXRlTWVtb3J5RnVu YyAqdm1zdmdhX3ZyYW1fd3JpdGVbXSA9IHsKKyAgICB2bXN2Z2FfdnJhbV93cml0ZWIsCisgICAg dm1zdmdhX3ZyYW1fd3JpdGV3LAorICAgIHZtc3ZnYV92cmFtX3dyaXRlbCwKK307CisjZW5kaWYK Kworc3RhdGljIHZvaWQgdm1zdmdhX3NhdmUoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzLCBRRU1V RmlsZSAqZikKK3sKKyAgICBxZW11X3B1dF9iZTMycyhmLCAmcy0+ZGVwdGgpOworICAgIHFlbXVf cHV0X2JlMzJzKGYsICZzLT5lbmFibGUpOworICAgIHFlbXVfcHV0X2JlMzJzKGYsICZzLT5jb25m aWcpOworICAgIHFlbXVfcHV0X2JlMzJzKGYsICZzLT5jdXJzb3IuaWQpOworICAgIHFlbXVfcHV0 X2JlMzJzKGYsICZzLT5jdXJzb3IueCk7CisgICAgcWVtdV9wdXRfYmUzMnMoZiwgJnMtPmN1cnNv ci55KTsKKyAgICBxZW11X3B1dF9iZTMycyhmLCAmcy0+Y3Vyc29yLm9uKTsKKyAgICBxZW11X3B1 dF9iZTMycyhmLCAmcy0+aW5kZXgpOworICAgIHFlbXVfcHV0X2J1ZmZlcihmLCAodWludDhfdCAq KSBzLT5zY3JhdGNoLCBzLT5zY3JhdGNoX3NpemUgKiA0KTsKKyAgICBxZW11X3B1dF9iZTMycyhm LCAmcy0+bmV3X3dpZHRoKTsKKyAgICBxZW11X3B1dF9iZTMycyhmLCAmcy0+bmV3X2hlaWdodCk7 CisgICAgcWVtdV9wdXRfYmUzMnMoZiwgJnMtPmd1ZXN0KTsKKyAgICBxZW11X3B1dF9iZTMycyhm LCAmcy0+c3ZnYWlkKTsKKyAgICBxZW11X3B1dF9iZTMycyhmLCAmcy0+c3luY2luZyk7CisgICAg cWVtdV9wdXRfYmUzMnMoZiwgJnMtPmZiX3NpemUpOworfQorCitzdGF0aWMgaW50IHZtc3ZnYV9s b2FkKHN0cnVjdCB2bXN2Z2Ffc3RhdGVfcyAqcywgUUVNVUZpbGUgKmYpCit7CisgICAgaW50IGRl cHRoOworICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZkZXB0aCk7CisgICAgcWVtdV9nZXRfYmUzMnMo ZiwgJnMtPmVuYWJsZSk7CisgICAgcWVtdV9nZXRfYmUzMnMoZiwgJnMtPmNvbmZpZyk7CisgICAg cWVtdV9nZXRfYmUzMnMoZiwgJnMtPmN1cnNvci5pZCk7CisgICAgcWVtdV9nZXRfYmUzMnMoZiwg JnMtPmN1cnNvci54KTsKKyAgICBxZW11X2dldF9iZTMycyhmLCAmcy0+Y3Vyc29yLnkpOworICAg IHFlbXVfZ2V0X2JlMzJzKGYsICZzLT5jdXJzb3Iub24pOworICAgIHFlbXVfZ2V0X2JlMzJzKGYs ICZzLT5pbmRleCk7CisgICAgcWVtdV9nZXRfYnVmZmVyKGYsICh1aW50OF90ICopIHMtPnNjcmF0 Y2gsIHMtPnNjcmF0Y2hfc2l6ZSAqIDQpOworICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZzLT5uZXdf d2lkdGgpOworICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZzLT5uZXdfaGVpZ2h0KTsKKyAgICBxZW11 X2dldF9iZTMycyhmLCAmcy0+Z3Vlc3QpOworICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZzLT5zdmdh aWQpOworICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZzLT5zeW5jaW5nKTsKKyAgICBxZW11X2dldF9i ZTMycyhmLCAmcy0+ZmJfc2l6ZSk7CisKKyAgICBpZiAocy0+ZW5hYmxlICYmIGRlcHRoICE9IHMt PmRlcHRoKSB7CisgICAgICAgIHByaW50ZigiJXM6IG5lZWQgY29sb3VyIGRlcHRoIG9mICVpIGJp dHMgdG8gcmVzdW1lIG9wZXJhdGlvbi5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBfX0ZV TkNUSU9OX18sIGRlcHRoKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAg cy0+aW52YWxpZGF0ZSA9IDE7CisgICAgaWYgKHMtPmNvbmZpZykKKyAgICAgICAgcy0+ZmlmbyA9 ICh1aW50MzJfdCAqKSAmcy0+dnJhbVtzLT52cmFtX3NpemUgLSBTVkdBX0ZJRk9fU0laRV07CisK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdm1zdmdhX2luaXQoc3RydWN0IHZtc3Zn YV9zdGF0ZV9zICpzLCBEaXNwbGF5U3RhdGUgKmRzLAorICAgICAgICAgICAgICAgIHVpbnQ4X3Qg KnZnYV9yYW1fYmFzZSwgdW5zaWduZWQgbG9uZyB2Z2FfcmFtX29mZnNldCwKKyAgICAgICAgICAg ICAgICBpbnQgdmdhX3JhbV9zaXplKQoreworICAgIGludCBpb21lbXR5cGU7CisgICAgcy0+ZHMg PSBkczsKKyAgICBzLT52cmFtID0gdmdhX3JhbV9iYXNlOworICAgIHMtPnZyYW1fc2l6ZSA9IHZn YV9yYW1fc2l6ZTsKKworICAgIHMtPnNjcmF0Y2hfc2l6ZSA9IFNWR0FfU0NSQVRDSF9TSVpFOwor ICAgIHMtPnNjcmF0Y2ggPSAodWludDMyX3QgKikgcWVtdV9tYWxsb2Mocy0+c2NyYXRjaF9zaXpl ICogNCk7CisKKyAgICB2bXN2Z2FfcmVzZXQocyk7CisKKyNpZmRlZiBESVJFQ1RfVlJBTQorICAg IGlvbWVtdHlwZSA9IGNwdV9yZWdpc3Rlcl9pb19tZW1vcnkoMCwgdm1zdmdhX3ZyYW1fcmVhZCwg CisgICAgICAgICAgICAgICAgICAgIHZtc3ZnYV92cmFtX3dyaXRlLCBzKTsKKyNlbHNlCisgICAg aW9tZW10eXBlID0gdmdhX3JhbV9vZmZzZXQgfCBJT19NRU1fUkFNOworI2VuZGlmCisgICAgY3B1 X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShTVkdBX01FTV9CQVNFLCB2Z2FfcmFtX3NpemUsCisg ICAgICAgICAgICAgICAgICAgIGlvbWVtdHlwZSk7CisKKyAgICByZWdpc3Rlcl9pb3BvcnRfcmVh ZChTVkdBX0lPX0JBU0UgKyBTVkdBX0lPX01VTCAqIFNWR0FfSU5ERVhfUE9SVCwKKyAgICAgICAg ICAgICAgICAgICAgMSwgNCwgdm1zdmdhX2luZGV4X3JlYWQsIHMpOworICAgIHJlZ2lzdGVyX2lv cG9ydF93cml0ZShTVkdBX0lPX0JBU0UgKyBTVkdBX0lPX01VTCAqIFNWR0FfSU5ERVhfUE9SVCwK KyAgICAgICAgICAgICAgICAgICAgMSwgNCwgdm1zdmdhX2luZGV4X3dyaXRlLCBzKTsKKyAgICBy ZWdpc3Rlcl9pb3BvcnRfcmVhZChTVkdBX0lPX0JBU0UgKyBTVkdBX0lPX01VTCAqIFNWR0FfVkFM VUVfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgMSwgNCwgdm1zdmdhX3ZhbHVlX3JlYWQsIHMp OworICAgIHJlZ2lzdGVyX2lvcG9ydF93cml0ZShTVkdBX0lPX0JBU0UgKyBTVkdBX0lPX01VTCAq IFNWR0FfVkFMVUVfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgMSwgNCwgdm1zdmdhX3ZhbHVl X3dyaXRlLCBzKTsKKyAgICByZWdpc3Rlcl9pb3BvcnRfcmVhZChTVkdBX0lPX0JBU0UgKyBTVkdB X0lPX01VTCAqIFNWR0FfQklPU19QT1JULAorICAgICAgICAgICAgICAgICAgICAxLCA0LCB2bXN2 Z2FfYmlvc19yZWFkLCBzKTsKKyAgICByZWdpc3Rlcl9pb3BvcnRfd3JpdGUoU1ZHQV9JT19CQVNF ICsgU1ZHQV9JT19NVUwgKiBTVkdBX0JJT1NfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgMSwg NCwgdm1zdmdhX2Jpb3Nfd3JpdGUsIHMpOworCisgICAgZ3JhcGhpY19jb25zb2xlX2luaXQoZHMs IHZtc3ZnYV91cGRhdGVfZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgdm1zdmdhX2ludmFs aWRhdGVfZGlzcGxheSwgdm1zdmdhX3NjcmVlbl9kdW1wLCBzKTsKKworI2lmZGVmIEVNQkVEX1NU RFZHQQorICAgIHZnYV9jb21tb25faW5pdCgoVkdBU3RhdGUgKikgcywgZHMsCisgICAgICAgICAg ICAgICAgICAgIHZnYV9yYW1fYmFzZSwgdmdhX3JhbV9vZmZzZXQsIHZnYV9yYW1fc2l6ZSk7Cisj ZW5kaWYKK30KKworc3RhdGljIHZvaWQgcGNpX3Ztc3ZnYV9zYXZlKFFFTVVGaWxlICpmLCB2b2lk ICpvcGFxdWUpCit7CisgICAgc3RydWN0IHBjaV92bXN2Z2Ffc3RhdGVfcyAqcyA9IChzdHJ1Y3Qg cGNpX3Ztc3ZnYV9zdGF0ZV9zICopIG9wYXF1ZTsKKyAgICBwY2lfZGV2aWNlX3NhdmUoJnMtPmNh cmQsIGYpOworICAgIHZtc3ZnYV9zYXZlKCZzLT5jaGlwLCBmKTsKK30KKworc3RhdGljIGludCBw Y2lfdm1zdmdhX2xvYWQoUUVNVUZpbGUgKmYsIHZvaWQgKm9wYXF1ZSwgaW50IHZlcnNpb25faWQp Cit7CisgICAgc3RydWN0IHBjaV92bXN2Z2Ffc3RhdGVfcyAqcyA9IChzdHJ1Y3QgcGNpX3Ztc3Zn YV9zdGF0ZV9zICopIG9wYXF1ZTsKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gcGNpX2Rldmlj ZV9sb2FkKCZzLT5jYXJkLCBmKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJl dDsKKworICAgIHJldCA9IHZtc3ZnYV9sb2FkKCZzLT5jaGlwLCBmKTsKKyAgICBpZiAocmV0IDwg MCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiAwOworfQorCisjZGVmaW5lIFBD SV9WRU5ET1JfSURfVk1XQVJFCQkweDE1YWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTVdBUkVf U1ZHQTIJMHgwNDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk1XQVJFX1NWR0EJMHgwNzEwCisj ZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk1XQVJFX05FVAkweDA3MjAKKyNkZWZpbmUgUENJX0RFVklD RV9JRF9WTVdBUkVfU0NTSQkweDA3MzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTVdBUkVfSURF CTB4MTcyOQorI2RlZmluZSBQQ0lfQ0xBU1NfQkFTRV9ESVNQTEFZCQkweDAzCisjZGVmaW5lIFBD SV9DTEFTU19TVUJfVkdBCQkweDAwCisjZGVmaW5lIFBDSV9DTEFTU19IRUFERVJUWVBFXzAwaAkw eDAwCisKK3ZvaWQgcGNpX3Ztc3ZnYV9pbml0KFBDSUJ1cyAqYnVzLCBEaXNwbGF5U3RhdGUgKmRz LCB1aW50OF90ICp2Z2FfcmFtX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs b25nIHZnYV9yYW1fb2Zmc2V0LCBpbnQgdmdhX3JhbV9zaXplKQoreworICAgIHN0cnVjdCBwY2lf dm1zdmdhX3N0YXRlX3MgKnM7CisKKyAgICAvKiBTZXR1cCBQQ0kgY29uZmlndXJhdGlvbiAqLwor ICAgIHMgPSAoc3RydWN0IHBjaV92bXN2Z2Ffc3RhdGVfcyAqKQorICAgICAgICBwY2lfcmVnaXN0 ZXJfZGV2aWNlKGJ1cywgIlFFTVV3YXJlIFNWR0EiLAorICAgICAgICAgICAgICAgIHNpemVvZihz dHJ1Y3QgcGNpX3Ztc3ZnYV9zdGF0ZV9zKSwgLTEsIDAsIDApOworICAgIHMtPmNhcmQuY29uZmln W1BDSV9WRU5ET1JfSURdCT0gUENJX1ZFTkRPUl9JRF9WTVdBUkUgJiAweGZmOworICAgIHMtPmNh cmQuY29uZmlnW1BDSV9WRU5ET1JfSUQgKyAxXQk9IFBDSV9WRU5ET1JfSURfVk1XQVJFID4+IDg7 CisgICAgcy0+Y2FyZC5jb25maWdbUENJX0RFVklDRV9JRF0JPSBTVkdBX1BDSV9ERVZJQ0VfSUQg JiAweGZmOworICAgIHMtPmNhcmQuY29uZmlnW1BDSV9ERVZJQ0VfSUQgKyAxXQk9IFNWR0FfUENJ X0RFVklDRV9JRCA+PiA4OworICAgIHMtPmNhcmQuY29uZmlnW1BDSV9DT01NQU5EXQkJPSAweDA3 OwkJLyogSS9PICsgTWVtb3J5ICovCisgICAgcy0+Y2FyZC5jb25maWdbUENJX0NMQVNTX0RFVklD RV0JPSBQQ0lfQ0xBU1NfU1VCX1ZHQTsKKyAgICBzLT5jYXJkLmNvbmZpZ1sweDBiXQkJPSBQQ0lf Q0xBU1NfQkFTRV9ESVNQTEFZOworICAgIHMtPmNhcmQuY29uZmlnWzB4MGNdCQk9IDB4MDg7CQkv KiBDYWNoZSBsaW5lIHNpemUgKi8KKyAgICBzLT5jYXJkLmNvbmZpZ1sweDBkXQkJPSAweDQwOwkJ LyogTGF0ZW5jeSB0aW1lciAqLworICAgIHMtPmNhcmQuY29uZmlnWzB4MGVdCQk9IFBDSV9DTEFT U19IRUFERVJUWVBFXzAwaDsKKyAgICBzLT5jYXJkLmNvbmZpZ1sweDEwXQkJPSAoKFNWR0FfSU9f QkFTRSA+PiAgMCkgJiAweGZmKSB8IDE7CisgICAgcy0+Y2FyZC5jb25maWdbMHgxMV0JCT0gIChT VkdBX0lPX0JBU0UgPj4gIDgpICYgMHhmZjsKKyAgICBzLT5jYXJkLmNvbmZpZ1sweDEyXQkJPSAg KFNWR0FfSU9fQkFTRSA+PiAxNikgJiAweGZmOworICAgIHMtPmNhcmQuY29uZmlnWzB4MTNdCQk9 ICAoU1ZHQV9JT19CQVNFID4+IDI0KSAmIDB4ZmY7CisgICAgcy0+Y2FyZC5jb25maWdbMHgxOF0J CT0gKFNWR0FfTUVNX0JBU0UgPj4gIDApICYgMHhmZjsKKyAgICBzLT5jYXJkLmNvbmZpZ1sweDE5 XQkJPSAoU1ZHQV9NRU1fQkFTRSA+PiAgOCkgJiAweGZmOworICAgIHMtPmNhcmQuY29uZmlnWzB4 MWFdCQk9IChTVkdBX01FTV9CQVNFID4+IDE2KSAmIDB4ZmY7CisgICAgcy0+Y2FyZC5jb25maWdb MHgxYl0JCT0gKFNWR0FfTUVNX0JBU0UgPj4gMjQpICYgMHhmZjsKKyAgICBzLT5jYXJkLmNvbmZp Z1sweDJjXQkJPSBQQ0lfVkVORE9SX0lEX1ZNV0FSRSAmIDB4ZmY7CisgICAgcy0+Y2FyZC5jb25m aWdbMHgyZF0JCT0gUENJX1ZFTkRPUl9JRF9WTVdBUkUgPj4gODsKKyAgICBzLT5jYXJkLmNvbmZp Z1sweDJlXQkJPSBTVkdBX1BDSV9ERVZJQ0VfSUQgJiAweGZmOworICAgIHMtPmNhcmQuY29uZmln WzB4MmZdCQk9IFNWR0FfUENJX0RFVklDRV9JRCA+PiA4OworICAgIHMtPmNhcmQuY29uZmlnWzB4 M2NdCQk9IDB4ZmY7CQkvKiBFbmQgKi8KKworICAgIHZtc3ZnYV9pbml0KCZzLT5jaGlwLCBkcywg dmdhX3JhbV9iYXNlLCB2Z2FfcmFtX29mZnNldCwgdmdhX3JhbV9zaXplKTsKKworICAgIHJlZ2lz dGVyX3NhdmV2bSgidm13YXJlX3ZnYSIsIDAsIDAsIHBjaV92bXN2Z2Ffc2F2ZSwgcGNpX3Ztc3Zn YV9sb2FkLCBzKTsKK30KZGlmZiAtLWdpdCBhL3ZsLmMgYi92bC5jCmluZGV4IDk4ZmVmOWQuLmM1 MjMyZmQgMTAwNjQ0Ci0tLSBhL3ZsLmMKKysrIGIvdmwuYwpAQCAtMTU0LDYgKzE1NCw3IEBAIFFF TVVUaW1lciAqZ3VpX3RpbWVyOwogaW50IHZtX3J1bm5pbmc7CiBpbnQgcnRjX3V0YyA9IDE7CiBp bnQgY2lycnVzX3ZnYV9lbmFibGVkID0gMTsKK2ludCB2bXN2Z2FfZW5hYmxlZCA9IDA7CiAjaWZk ZWYgVEFSR0VUX1NQQVJDCiBpbnQgZ3JhcGhpY193aWR0aCA9IDEwMjQ7CiBpbnQgZ3JhcGhpY19o ZWlnaHQgPSA3Njg7CkBAIC02NTMyLDYgKzY1MzMsNyBAQCBlbnVtIHsKICAgICBRRU1VX09QVElP Tl9rLAogICAgIFFFTVVfT1BUSU9OX2xvY2FsdGltZSwKICAgICBRRU1VX09QVElPTl9jaXJydXN2 Z2EsCisgICAgUUVNVV9PUFRJT05fdm1zdmdhLAogICAgIFFFTVVfT1BUSU9OX2csCiAgICAgUUVN VV9PUFRJT05fc3RkX3ZnYSwKICAgICBRRU1VX09QVElPTl9lY2hyLApAQCAtNjYzOCw2ICs2NjQw LDcgQEAgY29uc3QgUUVNVU9wdGlvbiBxZW11X29wdGlvbnNbXSA9IHsKICAgICAvKiB0ZW1wb3Jh cnkgb3B0aW9ucyAqLwogICAgIHsgInVzYiIsIDAsIFFFTVVfT1BUSU9OX3VzYiB9LAogICAgIHsg ImNpcnJ1c3ZnYSIsIDAsIFFFTVVfT1BUSU9OX2NpcnJ1c3ZnYSB9LAorICAgIHsgInZtd2FyZXZn YSIsIDAsIFFFTVVfT1BUSU9OX3Ztc3ZnYSB9LAogICAgIHsgIm5vLWFjcGkiLCAwLCBRRU1VX09Q VElPTl9ub19hY3BpIH0sCiAgICAgeyAibm8tcmVib290IiwgMCwgUUVNVV9PUFRJT05fbm9fcmVi b290IH0sCiAgICAgeyAiZGFlbW9uaXplIiwgMCwgUUVNVV9PUFRJT05fZGFlbW9uaXplIH0sCkBA IC03MTk4LDkgKzcyMDEsMTUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBRRU1VX09QVElPTl9jaXJydXN2 Z2E6CiAgICAgICAgICAgICAgICAgY2lycnVzX3ZnYV9lbmFibGVkID0gMTsKKyAgICAgICAgICAg ICAgICB2bXN2Z2FfZW5hYmxlZCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICBjYXNlIFFFTVVfT1BUSU9OX3Ztc3ZnYToKKyAgICAgICAgICAgICAgICBjaXJydXNfdmdh X2VuYWJsZWQgPSAwOworICAgICAgICAgICAgICAgIHZtc3ZnYV9lbmFibGVkID0gMTsKICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUUVNVV9PUFRJT05fc3RkX3ZnYToK ICAgICAgICAgICAgICAgICBjaXJydXNfdmdhX2VuYWJsZWQgPSAwOworICAgICAgICAgICAgICAg IHZtc3ZnYV9lbmFibGVkID0gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg IGNhc2UgUUVNVV9PUFRJT05fZzoKICAgICAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS92bC5o IGIvdmwuaAppbmRleCAwNGZlM2NjLi44NmU1OTc1IDEwMDY0NAotLS0gYS92bC5oCisrKyBiL3Zs LmgKQEAgLTE0OCw2ICsxNDgsNyBAQCBleHRlcm4gaW50IHJhbV9zaXplOwogZXh0ZXJuIGludCBi aW9zX3NpemU7CiBleHRlcm4gaW50IHJ0Y191dGM7CiBleHRlcm4gaW50IGNpcnJ1c192Z2FfZW5h YmxlZDsKK2V4dGVybiBpbnQgdm1zdmdhX2VuYWJsZWQ7CiBleHRlcm4gaW50IGdyYXBoaWNfd2lk dGg7CiBleHRlcm4gaW50IGdyYXBoaWNfaGVpZ2h0OwogZXh0ZXJuIGludCBncmFwaGljX2RlcHRo OwpAQCAtOTIyLDYgKzkyMywxMCBAQCB2b2lkIHBjaV9jaXJydXNfdmdhX2luaXQoUENJQnVzICpi dXMsIERpc3BsYXlTdGF0ZSAqZHMsIHVpbnQ4X3QgKnZnYV9yYW1fYmFzZSwKIHZvaWQgaXNhX2Np cnJ1c192Z2FfaW5pdChEaXNwbGF5U3RhdGUgKmRzLCB1aW50OF90ICp2Z2FfcmFtX2Jhc2UsIAog ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmdhX3JhbV9vZmZzZXQsIGlu dCB2Z2FfcmFtX3NpemUpOwogCisvKiB2bXdhcmVfdmdhLmMgKi8KK3ZvaWQgcGNpX3Ztc3ZnYV9p bml0KFBDSUJ1cyAqYnVzLCBEaXNwbGF5U3RhdGUgKmRzLCB1aW50OF90ICp2Z2FfcmFtX2Jhc2Us CisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZnYV9yYW1fb2Zmc2V0LCBpbnQg dmdhX3JhbV9zaXplKTsKKwogLyogc2RsLmMgKi8KIHZvaWQgc2RsX2Rpc3BsYXlfaW5pdChEaXNw bGF5U3RhdGUgKmRzLCBpbnQgZnVsbF9zY3JlZW4sIGludCBub19mcmFtZSk7CiAKLS0gCjEuNC40 LjMKCg== ------=_Part_22566_2299461.1173624515736--