From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MKzRx-00052b-OO for qemu-devel@nongnu.org; Sun, 28 Jun 2009 14:50:01 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MKzRs-00052H-92 for qemu-devel@nongnu.org; Sun, 28 Jun 2009 14:50:00 -0400 Received: from [199.232.76.173] (port=58239 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MKzRs-00052E-2S for qemu-devel@nongnu.org; Sun, 28 Jun 2009 14:49:56 -0400 Received: from smtp2-g21.free.fr ([212.27.42.2]:56917) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MKzRr-000859-33 for qemu-devel@nongnu.org; Sun, 28 Jun 2009 14:49:56 -0400 Received: from smtp2-g21.free.fr (localhost [127.0.0.1]) by smtp2-g21.free.fr (Postfix) with ESMTP id C0A964B0130 for ; Sun, 28 Jun 2009 20:49:45 +0200 (CEST) Received: from Zeta (vaf26-2-82-244-111-82.fbx.proxad.net [82.244.111.82]) by smtp2-g21.free.fr (Postfix) with ESMTP id EB2814B01D1 for ; Sun, 28 Jun 2009 20:49:41 +0200 (CEST) From: "=?utf-8?q?Fran=C3=A7ois?= Revol" Date: Sun, 28 Jun 2009 20:49:44 +0200 CEST Message-Id: <8883507738-BeMail@Zeta> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=----------Zoidberg-BeMail-temp-------- Subject: [Qemu-devel] [PATCH] [RESEND2] Merge usb-wacom.c into usb-hid.c + fixes List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multipart message in MIME format. ------------Zoidberg-BeMail-temp-------- Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Been a while but I still have this pending... This fixes a number of issues with usb-wacom : - bad coord scaling, at least with respect to Haiku and Linux drivers, - bad mouse buttons mapping, - missing IDLE mode thus forcing polling from the driver. This makes Haiku usable with VNC with my online demo script http://dev.haiku-os.org/browser/haiku/trunk/3rdparty/mmu=5Fman/onlinedemo/haiku.php It also merges the code with usb-hid, as suggested by Paul Brook, and since it's just a tablet with a custom wacom mode, and much of the code was common. cf. http://lists.gnu.org/archive/html/qemu-devel/2009-03/msg01296.html http://lists.gnu.org/archive/html/qemu-devel/2009-03/msg01596.html http://lists.gnu.org/archive/html/qemu-devel/2009-04/msg01837.html Fran=C3=A7ois. ------------Zoidberg-BeMail-temp-------- Content-Transfer-Encoding: base64 Content-Disposition: BMailAttachment Content-Type: text/x-patch; name=0001-Merge-usb-wacom.c-into-usb-hid.c.txt ClNpZ25lZC1vZmYtYnk6IEZyYW7Dp29pcyBSZXZvbCA8cmV2b2xAZnJlZS5mcj4KLS0tCiBNYWtl ZmlsZSAgICAgICB8ICAgIDIgKy0KIGh3L3VzYi1oaWQuYyAgIHwgIDMyMiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQogaHcvdXNiLXdhY29tLmMgfCAgNDEyIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAz IGZpbGVzIGNoYW5nZWQsIDI2MCBpbnNlcnRpb25zKCspLCA0NzYgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBhMDZjOWJmLi41ZTg4NWJjIDEwMDY0 NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMTAyLDcgKzEwMiw3IEBAIE9CSlMr PXNzZDAzMDMubyBzc2QwMzIzLm8gYWRzNzg0Ni5vIHN0ZWxsYXJpc19pbnB1dC5vIHR3bDkyMjMw Lm8KIE9CSlMrPXRtcDEwNS5vIGxtODMyeC5vIGVlcHJvbTkzeHgubyB0c2MyMDA1Lm8KIE9CSlMr PXNjc2ktZGlzay5vIGNkcm9tLm8KIE9CSlMrPXNjc2ktZ2VuZXJpYy5vCi1PQkpTKz11c2IubyB1 c2ItaHViLm8gdXNiLSQoSE9TVF9VU0IpLm8gdXNiLWhpZC5vIHVzYi1tc2QubyB1c2Itd2Fjb20u bworT0JKUys9dXNiLm8gdXNiLWh1Yi5vIHVzYi0kKEhPU1RfVVNCKS5vIHVzYi1oaWQubyB1c2It bXNkLm8KIE9CSlMrPXVzYi1zZXJpYWwubyB1c2ItbmV0Lm8KIE9CSlMrPXNkLm8gc3NpLXNkLm8K IE9CSlMrPWJ0Lm8gYnQtaG9zdC5vIGJ0LXZoY2kubyBidC1sMmNhcC5vIGJ0LXNkcC5vIGJ0LWhj aS5vIGJ0LWhpZC5vIHVzYi1idC5vCmRpZmYgLS1naXQgYS9ody91c2ItaGlkLmMgYi9ody91c2It aGlkLmMKaW5kZXggYzg1MGE5MS4uNWY3YWJmMiAxMDA2NDQKLS0tIGEvaHcvdXNiLWhpZC5jCisr KyBiL2h3L3VzYi1oaWQuYwpAQCAtMSw2ICsxLDEwIEBACiAvKgogICogUUVNVSBVU0IgSElEIGRl dmljZXMKICAqCisgKiBXYWNvbSBQZW5QYXJ0bmVyIFVTQiB0YWJsZXQgZW11bGF0aW9uOgorICog Q29weXJpZ2h0IChjKSAyMDA2IE9wZW5lZGhhbmQgTHRkLgorICogQXV0aG9yOiBBbmRyemVqIFph Ym9yb3dza2kgPGJhbHJvZ0B6YWJvci5vcmc+CisgKgogICogQ29weXJpZ2h0IChjKSAyMDA1IEZh YnJpY2UgQmVsbGFyZAogICogQ29weXJpZ2h0IChjKSAyMDA3IE9wZW5Nb2tvLCBJbmMuICAoYW5k cmV3QG9wZW5lZGhhbmQuY29tKQogICoKQEAgLTI2LDIyICszMCwzMSBAQAogI2luY2x1ZGUgImNv bnNvbGUuaCIKICNpbmNsdWRlICJ1c2IuaCIKIAorLyogSW50ZXJmYWNlIHJlcXVlc3RzICovCisj ZGVmaW5lIFdBQ09NX0dFVF9SRVBPUlQgMHgyMTAxCisjZGVmaW5lIFdBQ09NX1NFVF9SRVBPUlQg MHgyMTA5CisKIC8qIEhJRCBpbnRlcmZhY2UgcmVxdWVzdHMgKi8KLSNkZWZpbmUgR0VUX1JFUE9S VCAgIDB4YTEwMQotI2RlZmluZSBHRVRfSURMRSAgICAgMHhhMTAyCi0jZGVmaW5lIEdFVF9QUk9U T0NPTCAweGExMDMKLSNkZWZpbmUgU0VUX1JFUE9SVCAgIDB4MjEwOQotI2RlZmluZSBTRVRfSURM RSAgICAgMHgyMTBhCi0jZGVmaW5lIFNFVF9QUk9UT0NPTCAweDIxMGIKKyNkZWZpbmUgSElEX0dF VF9SRVBPUlQJCTB4YTEwMQorI2RlZmluZSBISURfR0VUX0lETEUJCTB4YTEwMgorI2RlZmluZSBI SURfR0VUX1BST1RPQ09MCTB4YTEwMworI2RlZmluZSBISURfU0VUX1JFUE9SVAkJMHgyMTA5Cisj ZGVmaW5lIEhJRF9TRVRfSURMRQkJMHgyMTBhCisjZGVmaW5lIEhJRF9TRVRfUFJPVE9DT0wJMHgy MTBiCisKIAogLyogSElEIGRlc2NyaXB0b3IgdHlwZXMgKi8KICNkZWZpbmUgVVNCX0RUX0hJRCAg ICAweDIxCiAjZGVmaW5lIFVTQl9EVF9SRVBPUlQgMHgyMgogI2RlZmluZSBVU0JfRFRfUEhZICAg IDB4MjMKIAotI2RlZmluZSBVU0JfTU9VU0UgICAgIDEKLSNkZWZpbmUgVVNCX1RBQkxFVCAgICAy Ci0jZGVmaW5lIFVTQl9LRVlCT0FSRCAgMworI2RlZmluZSBVU0JfTU9VU0UgICAgICAgIDEKKyNk ZWZpbmUgVVNCX1RBQkxFVCAgICAgICAyCisjZGVmaW5lIFVTQl9LRVlCT0FSRCAgICAgMworI2Rl ZmluZSBVU0JfV0FDT01fVEFCTEVUIDQKKworI2RlZmluZSBXQUNPTV9NT0RFX0hJRCAgIDEKKyNk ZWZpbmUgV0FDT01fTU9ERV9XQUNPTSAyCiAKIHR5cGVkZWYgc3RydWN0IFVTQk1vdXNlU3RhdGUg ewogICAgIGludCBkeCwgZHksIGR6LCBidXR0b25zX3N0YXRlOwpAQCAtNjMsMTAgKzc2LDEzIEBA IHR5cGVkZWYgc3RydWN0IFVTQkhJRFN0YXRlIHsKICAgICAgICAgVVNCTW91c2VTdGF0ZSBwdHI7 CiAgICAgICAgIFVTQktleWJvYXJkU3RhdGUga2JkOwogICAgIH07CisgICAgY29uc3QgdWludDhf dCAqZGV2X2Rlc2NyaXB0b3IsICpjb25maWdfZGVzY3JpcHRvciwgKmhpZF9yZXBvcnRfZGVzY3Jp cHRvcjsKKyAgICBpbnQgZGV2X2Rlc2NyaXB0b3Jfc2l6ZSwgY29uZmlnX2Rlc2NyaXB0b3Jfc2l6 ZSwgaGlkX3JlcG9ydF9kZXNjcmlwdG9yX3NpemU7CiAgICAgaW50IGtpbmQ7CiAgICAgaW50IHBy b3RvY29sOwogICAgIHVpbnQ4X3QgaWRsZTsKICAgICBpbnQgY2hhbmdlZDsKKyAgICBpbnQgKCpo b29rX3BvbGwpKHN0cnVjdCBVU0JISURTdGF0ZSAqLCB1aW50OF90ICosIGludCk7CiAgICAgdm9p ZCAqZGF0YWluX29wYXF1ZTsKICAgICB2b2lkICgqZGF0YWluKSh2b2lkICopOwogfSBVU0JISURT dGF0ZTsKQEAgLTkyLDYgKzEwOCwyNiBAQCBzdGF0aWMgY29uc3QgdWludDhfdCBxZW11X21vdXNl X2Rldl9kZXNjcmlwdG9yW10gPSB7CiAJMHgwMSAgICAgICAgLyogIHU4ICBiTnVtQ29uZmlndXJh dGlvbnM7ICovCiB9OwogCitzdGF0aWMgY29uc3QgdWludDhfdCBxZW11X3dhY29tX2Rldl9kZXNj cmlwdG9yW10gPSB7CisJMHgxMiwgICAgICAgLyogIHU4IGJMZW5ndGg7ICovCisJMHgwMSwgICAg ICAgLyogIHU4IGJEZXNjcmlwdG9yVHlwZTsgRGV2aWNlICovCisJMHgxMCwgMHgxMCwgLyogIHUx NiBiY2RVU0I7IHYxLjEwICovCisKKwkweDAwLCAgICAgICAvKiAgdTggIGJEZXZpY2VDbGFzczsg Ki8KKwkweDAwLCAgICAgICAvKiAgdTggIGJEZXZpY2VTdWJDbGFzczsgKi8KKwkweDAwLCAgICAg ICAvKiAgdTggIGJEZXZpY2VQcm90b2NvbDsgWyBsb3cvZnVsbCBzcGVlZHMgb25seSBdICovCisJ MHgwOCwgICAgICAgLyogIHU4ICBiTWF4UGFja2V0U2l6ZTA7IDggQnl0ZXMgKi8KKworCTB4NmEs IDB4MDUsIC8qICB1MTYgaWRWZW5kb3I7ICovCisJMHgwMCwgMHgwMCwgLyogIHUxNiBpZFByb2R1 Y3Q7ICovCisJMHgxMCwgMHg0MiwgLyogIHUxNiBiY2REZXZpY2UgKi8KKworCTB4MDEsICAgICAg IC8qICB1OCAgaU1hbnVmYWN0dXJlcjsgKi8KKwkweDAyLCAgICAgICAvKiAgdTggIGlQcm9kdWN0 OyAqLworCTB4MDAsICAgICAgIC8qICB1OCAgaVNlcmlhbE51bWJlcjsgKi8KKwkweDAxLCAgICAg ICAvKiAgdTggIGJOdW1Db25maWd1cmF0aW9uczsgKi8KK307CisKIHN0YXRpYyBjb25zdCB1aW50 OF90IHFlbXVfbW91c2VfY29uZmlnX2Rlc2NyaXB0b3JbXSA9IHsKIAkvKiBvbmUgY29uZmlndXJh dGlvbiAqLwogCTB4MDksICAgICAgIC8qICB1OCAgYkxlbmd0aDsgKi8KQEAgLTI1Nyw2ICsyOTMs NTAgQEAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgcWVtdV9rZXlib2FyZF9jb25maWdfZGVzY3JpcHRv cltdID0gewogICAgIDB4MGEsCQkvKiAgdTggIGVwX2JJbnRlcnZhbDsgKDI1NW1zIC0tIHVzYiAy LjAgc3BlYykgKi8KIH07CiAKK3N0YXRpYyBjb25zdCB1aW50OF90IHFlbXVfd2Fjb21fY29uZmln X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICAvKiBvbmUgY29uZmlndXJhdGlvbiAqLworICAgIDB4MDks CS8qICB1OCAgYkxlbmd0aDsgKi8KKyAgICAweDAyLAkvKiAgdTggIGJEZXNjcmlwdG9yVHlwZTsg Q29uZmlndXJhdGlvbiAqLworICAgIDB4MjIsIDB4MDAsCS8qICB1MTYgd1RvdGFsTGVuZ3RoOyAq LworICAgIDB4MDEsCS8qICB1OCAgYk51bUludGVyZmFjZXM7ICgxKSAqLworICAgIDB4MDEsCS8q ICB1OCAgYkNvbmZpZ3VyYXRpb25WYWx1ZTsgKi8KKyAgICAweDAwLAkvKiAgdTggIGlDb25maWd1 cmF0aW9uOyAqLworICAgIDB4ODAsCS8qICB1OCAgYm1BdHRyaWJ1dGVzOworCQkJCSBCaXQgNzog bXVzdCBiZSBzZXQsCisJCQkJICAgICA2OiBTZWxmLXBvd2VyZWQsCisJCQkJICAgICA1OiBSZW1v dGUgd2FrZXVwLAorCQkJCSAgICAgNC4uMDogcmVzdmQgKi8KKyAgICA0MCwJCS8qICB1OCAgTWF4 UG93ZXI7ICovCisKKyAgICAvKiBvbmUgaW50ZXJmYWNlICovCisgICAgMHgwOSwJLyogIHU4ICBp Zl9iTGVuZ3RoOyAqLworICAgIDB4MDQsCS8qICB1OCAgaWZfYkRlc2NyaXB0b3JUeXBlOyBJbnRl cmZhY2UgKi8KKyAgICAweDAwLAkvKiAgdTggIGlmX2JJbnRlcmZhY2VOdW1iZXI7ICovCisgICAg MHgwMCwJLyogIHU4ICBpZl9iQWx0ZXJuYXRlU2V0dGluZzsgKi8KKyAgICAweDAxLAkvKiAgdTgg IGlmX2JOdW1FbmRwb2ludHM7ICovCisgICAgMHgwMywJLyogIHU4ICBpZl9iSW50ZXJmYWNlQ2xh c3M7IEhJRCAqLworICAgIDB4MDEsCS8qICB1OCAgaWZfYkludGVyZmFjZVN1YkNsYXNzOyBCb290 ICovCisgICAgMHgwMiwJLyogIHU4ICBpZl9iSW50ZXJmYWNlUHJvdG9jb2w7IFt1c2IxLjEgb3Ig c2luZ2xlIHR0XSAqLworICAgIDB4MDAsCS8qICB1OCAgaWZfaUludGVyZmFjZTsgKi8KKworICAg IC8qIEhJRCBkZXNjcmlwdG9yICovCisgICAgMHgwOSwJLyogIHU4ICBiTGVuZ3RoOyAqLworICAg IDB4MjEsCS8qICB1OCAgYkRlc2NyaXB0b3JUeXBlOyAqLworICAgIDB4MDEsIDB4MTAsCS8qICB1 MTYgSElEX2NsYXNzICovCisgICAgMHgwMCwJLyogIHU4ICBjb3VudHJ5X2NvZGUgKi8KKyAgICAw eDAxLAkvKiAgdTggIG51bV9kZXNjcmlwdG9ycyAqLworICAgIDB4MjIsCS8qICB1OCAgdHlwZTsg UmVwb3J0ICovCisgICAgMHg2ZSwgMHgwMCwJLyogIHUxNiBsZW4gKi8KKworICAgIC8qIG9uZSBl bmRwb2ludCAoc3RhdHVzIGNoYW5nZSBlbmRwb2ludCkgKi8KKyAgICAweDA3LAkvKiAgdTggIGVw X2JMZW5ndGg7ICovCisgICAgMHgwNSwJLyogIHU4ICBlcF9iRGVzY3JpcHRvclR5cGU7IEVuZHBv aW50ICovCisgICAgMHg4MSwJLyogIHU4ICBlcF9iRW5kcG9pbnRBZGRyZXNzOyBJTiBFbmRwb2lu dCAxICovCisgICAgMHgwMywJLyogIHU4ICBlcF9ibUF0dHJpYnV0ZXM7IEludGVycnVwdCAqLwor ICAgIDB4MDgsIDB4MDAsCS8qICB1MTYgZXBfd01heFBhY2tldFNpemU7ICovCisgICAgMHgwYSwJ LyogIHU4ICBlcF9iSW50ZXJ2YWw7ICovCit9OworCiBzdGF0aWMgY29uc3QgdWludDhfdCBxZW11 X21vdXNlX2hpZF9yZXBvcnRfZGVzY3JpcHRvcltdID0gewogICAgIDB4MDUsIDB4MDEsCQkvKiBV c2FnZSBQYWdlIChHZW5lcmljIERlc2t0b3ApICovCiAgICAgMHgwOSwgMHgwMiwJCS8qIFVzYWdl IChNb3VzZSkgKi8KQEAgLTQyNyw3ICs1MDcsNyBAQCBzdGF0aWMgdm9pZCB1c2JfbW91c2VfZXZl bnQodm9pZCAqb3BhcXVlLAogfQogCiBzdGF0aWMgdm9pZCB1c2JfdGFibGV0X2V2ZW50KHZvaWQg Km9wYXF1ZSwKLQkJCSAgICAgaW50IHgsIGludCB5LCBpbnQgZHosIGludCBidXR0b25zX3N0YXRl KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCBkeiwgaW50 IGJ1dHRvbnNfc3RhdGUpCiB7CiAgICAgVVNCSElEU3RhdGUgKmhzID0gb3BhcXVlOwogICAgIFVT Qk1vdXNlU3RhdGUgKnMgPSAmaHMtPnB0cjsKQEAgLTQ0MCw2ICs1MjAsMjYgQEAgc3RhdGljIHZv aWQgdXNiX3RhYmxldF9ldmVudCh2b2lkICpvcGFxdWUsCiAgICAgdXNiX2hpZF9jaGFuZ2VkKGhz KTsKIH0KIAorc3RhdGljIHZvaWQgdXNiX3dhY29tX2V2ZW50KHZvaWQgKm9wYXF1ZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCBkeiwgaW50IGJ1dHRvbnNf c3RhdGUpCit7CisgICAgVVNCSElEU3RhdGUgKmhzID0gb3BhcXVlOworICAgIFVTQk1vdXNlU3Rh dGUgKnMgPSAmaHMtPnB0cjsKKworICAgIGlmIChocy0+cHJvdG9jb2wgPT0gV0FDT01fTU9ERV9I SUQpIHsKKyAgICAgICAgdXNiX21vdXNlX2V2ZW50KG9wYXF1ZSwgeCwgeSwgZHosIGJ1dHRvbnNf c3RhdGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogc2NhbGUgdG8gUGVucGFy dG5lciByZXNvbHV0aW9uICovCisgICAgcy0+eCA9ICh4ICogNTA0MCAvIDB4N0ZGRik7CisgICAg cy0+eSA9ICh5ICogMzc4MCAvIDB4N0ZGRik7CisgICAgcy0+ZHogKz0gZHo7CisgICAgcy0+YnV0 dG9uc19zdGF0ZSA9IGJ1dHRvbnNfc3RhdGU7CisKKyAgICB1c2JfaGlkX2NoYW5nZWQoaHMpOwor fQorCiBzdGF0aWMgdm9pZCB1c2Jfa2V5Ym9hcmRfZXZlbnQodm9pZCAqb3BhcXVlLCBpbnQga2V5 Y29kZSkKIHsKICAgICBVU0JISURTdGF0ZSAqaHMgPSBvcGFxdWU7CkBAIC01MTAsOSArNjEwLDkg QEAgc3RhdGljIGludCB1c2JfbW91c2VfcG9sbChVU0JISURTdGF0ZSAqaHMsIHVpbnQ4X3QgKmJ1 ZiwgaW50IGxlbikKICAgICBVU0JNb3VzZVN0YXRlICpzID0gJmhzLT5wdHI7CiAKICAgICBpZiAo IXMtPm1vdXNlX2dyYWJiZWQpIHsKLQlzLT5laF9lbnRyeSA9IHFlbXVfYWRkX21vdXNlX2V2ZW50 X2hhbmRsZXIodXNiX21vdXNlX2V2ZW50LCBocywKKyAgICAgICAgcy0+ZWhfZW50cnkgPSBxZW11 X2FkZF9tb3VzZV9ldmVudF9oYW5kbGVyKHVzYl9tb3VzZV9ldmVudCwgaHMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICJRRU1VIFVTQiBNb3Vz ZSIpOwotCXMtPm1vdXNlX2dyYWJiZWQgPSAxOworICAgICAgICBzLT5tb3VzZV9ncmFiYmVkID0g MTsKICAgICB9CiAKICAgICBkeCA9IGludF9jbGFtcChzLT5keCwgLTEyNywgMTI3KTsKQEAgLTU1 Miw5ICs2NTIsOSBAQCBzdGF0aWMgaW50IHVzYl90YWJsZXRfcG9sbChVU0JISURTdGF0ZSAqaHMs IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKICAgICBVU0JNb3VzZVN0YXRlICpzID0gJmhzLT5wdHI7 CiAKICAgICBpZiAoIXMtPm1vdXNlX2dyYWJiZWQpIHsKLQlzLT5laF9lbnRyeSA9IHFlbXVfYWRk X21vdXNlX2V2ZW50X2hhbmRsZXIodXNiX3RhYmxldF9ldmVudCwgaHMsCisgICAgICAgIHMtPmVo X2VudHJ5ID0gcWVtdV9hZGRfbW91c2VfZXZlbnRfaGFuZGxlcih1c2JfdGFibGV0X2V2ZW50LCBo cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwg IlFFTVUgVVNCIFRhYmxldCIpOwotCXMtPm1vdXNlX2dyYWJiZWQgPSAxOworICAgICAgICBzLT5t b3VzZV9ncmFiYmVkID0gMTsKICAgICB9CiAKICAgICBkeiA9IGludF9jbGFtcChzLT5keiwgLTEy NywgMTI3KTsKQEAgLTU4MSw4ICs2ODEsNTAgQEAgc3RhdGljIGludCB1c2JfdGFibGV0X3BvbGwo VVNCSElEU3RhdGUgKmhzLCB1aW50OF90ICpidWYsIGludCBsZW4pCiAgICAgcmV0dXJuIGw7CiB9 CiAKLXN0YXRpYyBpbnQgdXNiX2tleWJvYXJkX3BvbGwoVVNCS2V5Ym9hcmRTdGF0ZSAqcywgdWlu dDhfdCAqYnVmLCBpbnQgbGVuKQorc3RhdGljIGludCB1c2Jfd2Fjb21fcG9sbChVU0JISURTdGF0 ZSAqaHMsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKyAgICBpbnQgYjsKKyAgICBVU0JNb3Vz ZVN0YXRlICpzID0gJmhzLT5wdHI7CisKKyAgICBpZiAoIXMtPm1vdXNlX2dyYWJiZWQpIHsKKyAg ICAgICAgcy0+ZWhfZW50cnkgPSBxZW11X2FkZF9tb3VzZV9ldmVudF9oYW5kbGVyKHVzYl93YWNv bV9ldmVudCwgaHMsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAiUUVNVSBQZW5QYXJ0bmVy IHRhYmxldCIpOworICAgICAgICBzLT5tb3VzZV9ncmFiYmVkID0gMTsKKyAgICB9CisKKyAgICBp ZiAoaHMtPnByb3RvY29sID09IFdBQ09NX01PREVfSElEKQorICAgICAgICByZXR1cm4gdXNiX21v dXNlX3BvbGwoaHMsIGJ1ZiwgbGVuKTsKKworICAgIGIgPSAwOworICAgIGlmIChzLT5idXR0b25z X3N0YXRlICYgTU9VU0VfRVZFTlRfTEJVVFRPTikKKyAgICAgICAgYiB8PSAweDAxOworICAgIGlm IChzLT5idXR0b25zX3N0YXRlICYgTU9VU0VfRVZFTlRfUkJVVFRPTikKKyAgICAgICAgYiB8PSAw eDQwOworICAgIGlmIChzLT5idXR0b25zX3N0YXRlICYgTU9VU0VfRVZFTlRfTUJVVFRPTikKKyAg ICAgICAgYiB8PSAweDIwOyAvKiBlcmFzZXIgKi8KKworICAgIGlmIChsZW4gPCA3KQorICAgICAg ICByZXR1cm4gMDsKKworICAgIGJ1ZlswXSA9IGhzLT5wcm90b2NvbDsKKyAgICBidWZbNV0gPSAw eDAwIHwgKGIgJiAweGYwKTsKKyAgICBidWZbMV0gPSBzLT54ICYgMHhmZjsKKyAgICBidWZbMl0g PSBzLT54ID4+IDg7CisgICAgYnVmWzNdID0gcy0+eSAmIDB4ZmY7CisgICAgYnVmWzRdID0gcy0+ eSA+PiA4OworICAgIGlmIChiICYgMHgzZikgeworICAgICAgICBidWZbNl0gPSAwOworICAgIH0g ZWxzZSB7CisgICAgICAgIGJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAtMTI3OworICAgIH0KKwor ICAgIHJldHVybiA3OworfQorCitzdGF0aWMgaW50IHVzYl9rZXlib2FyZF9wb2xsKFVTQkhJRFN0 YXRlICpocywgdWludDhfdCAqYnVmLCBpbnQgbGVuKQogeworICAgIFVTQktleWJvYXJkU3RhdGUg KnMgPSAmaHMtPmtiZDsKKwogICAgIGlmIChsZW4gPCAyKQogICAgICAgICByZXR1cm4gMDsKIApA QCAtNjIyLDYgKzc2NCwxMyBAQCBzdGF0aWMgdm9pZCB1c2JfbW91c2VfaGFuZGxlX3Jlc2V0KFVT QkRldmljZSAqZGV2KQogICAgIHMtPnByb3RvY29sID0gMTsKIH0KIAorc3RhdGljIHZvaWQgdXNi X3dhY29tX2hhbmRsZV9yZXNldChVU0JEZXZpY2UgKmRldikKK3sKKyAgICBVU0JISURTdGF0ZSAq cyA9IChVU0JISURTdGF0ZSAqKWRldjsKKyAgICB1c2JfbW91c2VfaGFuZGxlX3Jlc2V0KGRldik7 CisgICAgcy0+cHJvdG9jb2wgPSBXQUNPTV9NT0RFX0hJRDsKK30KKwogc3RhdGljIHZvaWQgdXNi X2tleWJvYXJkX2hhbmRsZV9yZXNldChVU0JEZXZpY2UgKmRldikKIHsKICAgICBVU0JISURTdGF0 ZSAqcyA9IChVU0JISURTdGF0ZSAqKWRldjsKQEAgLTY2NiwyNCArODE1LDE0IEBAIHN0YXRpYyBp bnQgdXNiX2hpZF9oYW5kbGVfY29udHJvbChVU0JEZXZpY2UgKmRldiwgaW50IHJlcXVlc3QsIGlu dCB2YWx1ZSwKICAgICBjYXNlIERldmljZVJlcXVlc3QgfCBVU0JfUkVRX0dFVF9ERVNDUklQVE9S OgogICAgICAgICBzd2l0Y2godmFsdWUgPj4gOCkgewogICAgICAgICBjYXNlIFVTQl9EVF9ERVZJ Q0U6Ci0gICAgICAgICAgICBtZW1jcHkoZGF0YSwgcWVtdV9tb3VzZV9kZXZfZGVzY3JpcHRvciwK LSAgICAgICAgICAgICAgICAgICBzaXplb2YocWVtdV9tb3VzZV9kZXZfZGVzY3JpcHRvcikpOwot ICAgICAgICAgICAgcmV0ID0gc2l6ZW9mKHFlbXVfbW91c2VfZGV2X2Rlc2NyaXB0b3IpOworICAg ICAgICAgICAgaWYgKHMtPmRldl9kZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIG1lbWNweShk YXRhLCBzLT5kZXZfZGVzY3JpcHRvciwgcy0+ZGV2X2Rlc2NyaXB0b3Jfc2l6ZSk7CisgICAgICAg ICAgICByZXQgPSBzLT5kZXZfZGVzY3JpcHRvcl9zaXplOwogICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgIGNhc2UgVVNCX0RUX0NPTkZJRzoKLQkgICAgaWYgKHMtPmtpbmQgPT0gVVNCX01PVVNF KSB7Ci0JCW1lbWNweShkYXRhLCBxZW11X21vdXNlX2NvbmZpZ19kZXNjcmlwdG9yLAotCQkgICAg ICAgc2l6ZW9mKHFlbXVfbW91c2VfY29uZmlnX2Rlc2NyaXB0b3IpKTsKLQkJcmV0ID0gc2l6ZW9m KHFlbXVfbW91c2VfY29uZmlnX2Rlc2NyaXB0b3IpOwotCSAgICB9IGVsc2UgaWYgKHMtPmtpbmQg PT0gVVNCX1RBQkxFVCkgewotCQltZW1jcHkoZGF0YSwgcWVtdV90YWJsZXRfY29uZmlnX2Rlc2Ny aXB0b3IsCi0JCSAgICAgICBzaXplb2YocWVtdV90YWJsZXRfY29uZmlnX2Rlc2NyaXB0b3IpKTsK LQkJcmV0ID0gc2l6ZW9mKHFlbXVfdGFibGV0X2NvbmZpZ19kZXNjcmlwdG9yKTsKLSAgICAgICAg ICAgIH0gZWxzZSBpZiAocy0+a2luZCA9PSBVU0JfS0VZQk9BUkQpIHsKLSAgICAgICAgICAgICAg ICBtZW1jcHkoZGF0YSwgcWVtdV9rZXlib2FyZF9jb25maWdfZGVzY3JpcHRvciwKLSAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKHFlbXVfa2V5Ym9hcmRfY29uZmlnX2Rlc2NyaXB0b3IpKTsK LSAgICAgICAgICAgICAgICByZXQgPSBzaXplb2YocWVtdV9rZXlib2FyZF9jb25maWdfZGVzY3Jp cHRvcik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocy0+Y29uZmlnX2Rlc2NyaXB0 b3IpCisgICAgICAgICAgICAgICAgbWVtY3B5KGRhdGEsIHMtPmNvbmZpZ19kZXNjcmlwdG9yLCBz LT5jb25maWdfZGVzY3JpcHRvcl9zaXplKTsKKyAgICAgICAgICAgIHJldCA9IHMtPmNvbmZpZ19k ZXNjcmlwdG9yX3NpemU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVU0JfRFRf U1RSSU5HOgogICAgICAgICAgICAgc3dpdGNoKHZhbHVlICYgMHhmZikgewpAQCAtNzE2LDYgKzg1 NSwxMSBAQCBzdGF0aWMgaW50IHVzYl9oaWRfaGFuZGxlX2NvbnRyb2woVVNCRGV2aWNlICpkZXYs IGludCByZXF1ZXN0LCBpbnQgdmFsdWUsCiAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAg ICAgICAgcmV0ID0gc2V0X3VzYl9zdHJpbmcoZGF0YSwgIkhJRCBLZXlib2FyZCIpOwogICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICBjYXNlIDQ6 CisgICAgICAgICAgICAgICAgcmV0ID0gc2V0X3VzYl9zdHJpbmcoZGF0YSwgIldhY29tIFRhYmxl dCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICovCiAgICAgICAg ICAgICBjYXNlIDc6CiAgICAgICAgICAgICAgICAgcmV0ID0gc2V0X3VzYl9zdHJpbmcoZGF0YSwg IkVuZHBvaW50MSBJbnRlcnJ1cHQgUGlwZSIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt NzQxLDU5ICs4ODUsNjAgQEAgc3RhdGljIGludCB1c2JfaGlkX2hhbmRsZV9jb250cm9sKFVTQkRl dmljZSAqZGV2LCBpbnQgcmVxdWVzdCwgaW50IHZhbHVlLAogICAgIGNhc2UgRGV2aWNlT3V0UmVx dWVzdCB8IFVTQl9SRVFfU0VUX0lOVEVSRkFDRToKICAgICAgICAgcmV0ID0gMDsKICAgICAgICAg YnJlYWs7CisgICAgICAgIC8qIHdhY29tIHNwZWNpZmljIHJlcXVlc3RzICovCisgICAgY2FzZSBX QUNPTV9HRVRfUkVQT1JUOgorICAgICAgICBkYXRhWzBdID0gMDsKKyAgICAgICAgZGF0YVsxXSA9 IHMtPnByb3RvY29sOworICAgICAgICByZXQgPSAyOworICAgICAgICBicmVhazsKICAgICAgICAg LyogaGlkIHNwZWNpZmljIHJlcXVlc3RzICovCiAgICAgY2FzZSBJbnRlcmZhY2VSZXF1ZXN0IHwg VVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKICAgICAgICAgc3dpdGNoKHZhbHVlID4+IDgpIHsKICAg ICAgICAgY2FzZSAweDIyOgotCSAgICBpZiAocy0+a2luZCA9PSBVU0JfTU9VU0UpIHsKLQkJbWVt Y3B5KGRhdGEsIHFlbXVfbW91c2VfaGlkX3JlcG9ydF9kZXNjcmlwdG9yLAotCQkgICAgICAgc2l6 ZW9mKHFlbXVfbW91c2VfaGlkX3JlcG9ydF9kZXNjcmlwdG9yKSk7Ci0JCXJldCA9IHNpemVvZihx ZW11X21vdXNlX2hpZF9yZXBvcnRfZGVzY3JpcHRvcik7Ci0JICAgIH0gZWxzZSBpZiAocy0+a2lu ZCA9PSBVU0JfVEFCTEVUKSB7Ci0JCW1lbWNweShkYXRhLCBxZW11X3RhYmxldF9oaWRfcmVwb3J0 X2Rlc2NyaXB0b3IsCi0JCSAgICAgICBzaXplb2YocWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNj cmlwdG9yKSk7Ci0JCXJldCA9IHNpemVvZihxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0 b3IpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzLT5raW5kID09IFVTQl9LRVlCT0FSRCkgewot ICAgICAgICAgICAgICAgIG1lbWNweShkYXRhLCBxZW11X2tleWJvYXJkX2hpZF9yZXBvcnRfZGVz Y3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHFlbXVfa2V5Ym9hcmRfaGlk X3JlcG9ydF9kZXNjcmlwdG9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gc2l6ZW9mKHFlbXVf a2V5Ym9hcmRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmIChzLT5oaWRfcmVwb3J0X2Rlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgbWVtY3B5 KGRhdGEsIHMtPmhpZF9yZXBvcnRfZGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAg cy0+aGlkX3JlcG9ydF9kZXNjcmlwdG9yX3NpemUpOworICAgICAgICAgICAgcmV0ID0gcy0+aGlk X3JlcG9ydF9kZXNjcmlwdG9yX3NpemU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm YXVsdDoKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgfQogICAgICAgICBicmVhazsK LSAgICBjYXNlIEdFVF9SRVBPUlQ6Ci0JaWYgKHMtPmtpbmQgPT0gVVNCX01PVVNFKQotICAgICAg ICAgICAgcmV0ID0gdXNiX21vdXNlX3BvbGwocywgZGF0YSwgbGVuZ3RoKTsKLQllbHNlIGlmIChz LT5raW5kID09IFVTQl9UQUJMRVQpCi0gICAgICAgICAgICByZXQgPSB1c2JfdGFibGV0X3BvbGwo cywgZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgZWxzZSBpZiAocy0+a2luZCA9PSBVU0JfS0VZQk9B UkQpCi0gICAgICAgICAgICByZXQgPSB1c2Jfa2V5Ym9hcmRfcG9sbCgmcy0+a2JkLCBkYXRhLCBs ZW5ndGgpOworICAgIGNhc2UgSElEX0dFVF9SRVBPUlQ6CisgICAgICAgIGlmIChzLT5ob29rX3Bv bGwpCisgICAgICAgICAgICByZXQgPSBzLT5ob29rX3BvbGwocywgZGF0YSwgbGVuZ3RoKTsKICAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRVRfUkVQT1JUOgorICAgIGNhc2UgSElEX1NFVF9SRVBP UlQ6CisgICAgICAgIC8qIGFsc28gV0FDT01fU0VUX1JFUE9SVCAqLwogICAgICAgICBpZiAocy0+ a2luZCA9PSBVU0JfS0VZQk9BUkQpCiAgICAgICAgICAgICByZXQgPSB1c2Jfa2V5Ym9hcmRfd3Jp dGUoJnMtPmtiZCwgZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIGlm IChzLT5raW5kID09IFVTQl9XQUNPTV9UQUJMRVQpIHsKKyAgICAgICAgICAgIGlmIChzLT5wdHIu ZWhfZW50cnkpCisgICAgICAgICAgICAgICAgcWVtdV9yZW1vdmVfbW91c2VfZXZlbnRfaGFuZGxl cihzLT5wdHIuZWhfZW50cnkpOworICAgICAgICAgICAgcy0+cHRyLmVoX2VudHJ5ID0gTlVMTDsK KyAgICAgICAgICAgIHMtPnB0ci5tb3VzZV9ncmFiYmVkID0gMDsKKyAgICAgICAgICAgIHMtPnBy b3RvY29sID0gZGF0YVswXTsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIH0gZWxzZQog ICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdFVF9QUk9U T0NPTDoKKyAgICBjYXNlIEhJRF9HRVRfUFJPVE9DT0w6CiAgICAgICAgIGlmIChzLT5raW5kICE9 IFVTQl9LRVlCT0FSRCkKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgcmV0ID0gMTsK ICAgICAgICAgZGF0YVswXSA9IHMtPnByb3RvY29sOwogICAgICAgICBicmVhazsKLSAgICBjYXNl IFNFVF9QUk9UT0NPTDoKKyAgICBjYXNlIEhJRF9TRVRfUFJPVE9DT0w6CiAgICAgICAgIGlmIChz LT5raW5kICE9IFVTQl9LRVlCT0FSRCkKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAg cmV0ID0gMDsKICAgICAgICAgcy0+cHJvdG9jb2wgPSB2YWx1ZTsKICAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBHRVRfSURMRToKKyAgICBjYXNlIEhJRF9HRVRfSURMRToKICAgICAgICAgcmV0ID0g MTsKICAgICAgICAgZGF0YVswXSA9IHMtPmlkbGU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug U0VUX0lETEU6CisgICAgY2FzZSBISURfU0VUX0lETEU6CiAgICAgICAgIHMtPmlkbGUgPSAodWlu dDhfdCkgKHZhbHVlID4+IDgpOwogICAgICAgICByZXQgPSAwOwogICAgICAgICBicmVhazsKQEAg LTgxNywxMiArOTYyLDggQEAgc3RhdGljIGludCB1c2JfaGlkX2hhbmRsZV9kYXRhKFVTQkRldmlj ZSAqZGV2LCBVU0JQYWNrZXQgKnApCiAgICAgICAgICAgICBpZiAoIShzLT5jaGFuZ2VkIHx8IHMt PmlkbGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBVU0JfUkVUX05BSzsKICAgICAgICAgICAg IHMtPmNoYW5nZWQgPSAwOwotICAgICAgICAgICAgaWYgKHMtPmtpbmQgPT0gVVNCX01PVVNFKQot ICAgICAgICAgICAgICAgIHJldCA9IHVzYl9tb3VzZV9wb2xsKHMsIHAtPmRhdGEsIHAtPmxlbik7 Ci0gICAgICAgICAgICBlbHNlIGlmIChzLT5raW5kID09IFVTQl9UQUJMRVQpCi0gICAgICAgICAg ICAgICAgcmV0ID0gdXNiX3RhYmxldF9wb2xsKHMsIHAtPmRhdGEsIHAtPmxlbik7Ci0gICAgICAg ICAgICBlbHNlIGlmIChzLT5raW5kID09IFVTQl9LRVlCT0FSRCkKLSAgICAgICAgICAgICAgICBy ZXQgPSB1c2Jfa2V5Ym9hcmRfcG9sbCgmcy0+a2JkLCBwLT5kYXRhLCBwLT5sZW4pOworICAgICAg ICAgICAgaWYgKHMtPmhvb2tfcG9sbCkKKyAgICAgICAgICAgICAgICByZXQgPSBzLT5ob29rX3Bv bGwocywgcC0+ZGF0YSwgcC0+bGVuKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGdv dG8gZmFpbDsKICAgICAgICAgfQpAQCAtODU4LDcgKzk5OSwxNSBAQCBVU0JEZXZpY2UgKnVzYl90 YWJsZXRfaW5pdCh2b2lkKQogICAgIHMtPmRldi5oYW5kbGVfY29udHJvbCA9IHVzYl9oaWRfaGFu ZGxlX2NvbnRyb2w7CiAgICAgcy0+ZGV2LmhhbmRsZV9kYXRhID0gdXNiX2hpZF9oYW5kbGVfZGF0 YTsKICAgICBzLT5kZXYuaGFuZGxlX2Rlc3Ryb3kgPSB1c2JfaGlkX2hhbmRsZV9kZXN0cm95Owor CisgICAgcy0+ZGV2X2Rlc2NyaXB0b3IgPSBxZW11X21vdXNlX2Rldl9kZXNjcmlwdG9yOworICAg IHMtPmRldl9kZXNjcmlwdG9yX3NpemUgPSBzaXplb2YocWVtdV9tb3VzZV9kZXZfZGVzY3JpcHRv cik7CisgICAgcy0+Y29uZmlnX2Rlc2NyaXB0b3IgPSBxZW11X3RhYmxldF9jb25maWdfZGVzY3Jp cHRvcjsKKyAgICBzLT5jb25maWdfZGVzY3JpcHRvcl9zaXplID0gc2l6ZW9mKHFlbXVfdGFibGV0 X2NvbmZpZ19kZXNjcmlwdG9yKTsKKyAgICBzLT5oaWRfcmVwb3J0X2Rlc2NyaXB0b3IgPSBxZW11 X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3I7CisgICAgcy0+aGlkX3JlcG9ydF9kZXNjcmlw dG9yX3NpemUgPSBzaXplb2YocWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yKTsKICAg ICBzLT5raW5kID0gVVNCX1RBQkxFVDsKKyAgICBzLT5ob29rX3BvbGwgPSB1c2JfdGFibGV0X3Bv bGw7CiAgICAgLyogRm9yY2UgcG9sbCByb3V0aW5lIHRvIGJlIHJ1biBhbmQgZ3JhYiBpbnB1dCB0 aGUgZmlyc3QgdGltZS4gICovCiAgICAgcy0+Y2hhbmdlZCA9IDE7CiAKQEAgLTg2Nyw2ICsxMDE2 LDM2IEBAIFVTQkRldmljZSAqdXNiX3RhYmxldF9pbml0KHZvaWQpCiAgICAgcmV0dXJuIChVU0JE ZXZpY2UgKilzOwogfQogCitVU0JEZXZpY2UgKnVzYl93YWNvbV9pbml0KHZvaWQpCit7CisgICAg VVNCSElEU3RhdGUgKnM7CisKKyAgICBzID0gcWVtdV9tYWxsb2N6KHNpemVvZihVU0JISURTdGF0 ZSkpOworICAgIHMtPmRldi5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworICAgIHMtPmRldi5oYW5k bGVfcGFja2V0ID0gdXNiX2dlbmVyaWNfaGFuZGxlX3BhY2tldDsKKworICAgIHMtPmRldi5oYW5k bGVfcmVzZXQgPSB1c2Jfd2Fjb21faGFuZGxlX3Jlc2V0OworICAgIHMtPmRldi5oYW5kbGVfY29u dHJvbCA9IHVzYl9oaWRfaGFuZGxlX2NvbnRyb2w7CisgICAgcy0+ZGV2LmhhbmRsZV9kYXRhID0g dXNiX2hpZF9oYW5kbGVfZGF0YTsKKyAgICBzLT5kZXYuaGFuZGxlX2Rlc3Ryb3kgPSB1c2JfaGlk X2hhbmRsZV9kZXN0cm95OworCisgICAgcy0+ZGV2X2Rlc2NyaXB0b3IgPSBxZW11X3dhY29tX2Rl dl9kZXNjcmlwdG9yOworICAgIHMtPmRldl9kZXNjcmlwdG9yX3NpemUgPSBzaXplb2YocWVtdV93 YWNvbV9kZXZfZGVzY3JpcHRvcik7CisgICAgcy0+Y29uZmlnX2Rlc2NyaXB0b3IgPSBxZW11X3Rh YmxldF9jb25maWdfZGVzY3JpcHRvcjsKKyAgICBzLT5jb25maWdfZGVzY3JpcHRvcl9zaXplID0g c2l6ZW9mKHFlbXVfdGFibGV0X2NvbmZpZ19kZXNjcmlwdG9yKTsKKyAgICBzLT5oaWRfcmVwb3J0 X2Rlc2NyaXB0b3IgPSBOVUxMOworICAgIHMtPmhpZF9yZXBvcnRfZGVzY3JpcHRvcl9zaXplID0g MDsKKyAgICBzLT5raW5kID0gVVNCX1dBQ09NX1RBQkxFVDsKKyAgICBzLT5ob29rX3BvbGwgPSAm dXNiX3dhY29tX3BvbGw7CisgICAgLyogRm9yY2UgcG9sbCByb3V0aW5lIHRvIGJlIHJ1biBhbmQg Z3JhYiBpbnB1dCB0aGUgZmlyc3QgdGltZS4gICovCisgICAgcy0+Y2hhbmdlZCA9IDE7CisKKyAg ICBwc3RyY3B5KHMtPmRldi5kZXZuYW1lLCBzaXplb2Yocy0+ZGV2LmRldm5hbWUpLAorICAgICAg ICAgICAgIlFFTVUgUGVuUGFydG5lciBUYWJsZXQiKTsKKworICAgIHJldHVybiAoVVNCRGV2aWNl ICopczsKK30KKwogVVNCRGV2aWNlICp1c2JfbW91c2VfaW5pdCh2b2lkKQogewogICAgIFVTQkhJ RFN0YXRlICpzOwpAQCAtODc5LDcgKzEwNTgsMTUgQEAgVVNCRGV2aWNlICp1c2JfbW91c2VfaW5p dCh2b2lkKQogICAgIHMtPmRldi5oYW5kbGVfY29udHJvbCA9IHVzYl9oaWRfaGFuZGxlX2NvbnRy b2w7CiAgICAgcy0+ZGV2LmhhbmRsZV9kYXRhID0gdXNiX2hpZF9oYW5kbGVfZGF0YTsKICAgICBz LT5kZXYuaGFuZGxlX2Rlc3Ryb3kgPSB1c2JfaGlkX2hhbmRsZV9kZXN0cm95OworCisgICAgcy0+ ZGV2X2Rlc2NyaXB0b3IgPSBxZW11X21vdXNlX2Rldl9kZXNjcmlwdG9yOworICAgIHMtPmRldl9k ZXNjcmlwdG9yX3NpemUgPSBzaXplb2YocWVtdV9tb3VzZV9kZXZfZGVzY3JpcHRvcik7CisgICAg cy0+Y29uZmlnX2Rlc2NyaXB0b3IgPSBxZW11X21vdXNlX2NvbmZpZ19kZXNjcmlwdG9yOworICAg IHMtPmNvbmZpZ19kZXNjcmlwdG9yX3NpemUgPSBzaXplb2YocWVtdV9tb3VzZV9jb25maWdfZGVz Y3JpcHRvcik7CisgICAgcy0+aGlkX3JlcG9ydF9kZXNjcmlwdG9yID0gcWVtdV9tb3VzZV9oaWRf cmVwb3J0X2Rlc2NyaXB0b3I7CisgICAgcy0+aGlkX3JlcG9ydF9kZXNjcmlwdG9yX3NpemUgPSBz aXplb2YocWVtdV9tb3VzZV9oaWRfcmVwb3J0X2Rlc2NyaXB0b3IpOwogICAgIHMtPmtpbmQgPSBV U0JfTU9VU0U7CisgICAgcy0+aG9va19wb2xsID0gdXNiX21vdXNlX3BvbGw7CiAgICAgLyogRm9y Y2UgcG9sbCByb3V0aW5lIHRvIGJlIHJ1biBhbmQgZ3JhYiBpbnB1dCB0aGUgZmlyc3QgdGltZS4g ICovCiAgICAgcy0+Y2hhbmdlZCA9IDE7CiAKQEAgLTkwMCw3ICsxMDg3LDE1IEBAIFVTQkRldmlj ZSAqdXNiX2tleWJvYXJkX2luaXQodm9pZCkKICAgICBzLT5kZXYuaGFuZGxlX2NvbnRyb2wgPSB1 c2JfaGlkX2hhbmRsZV9jb250cm9sOwogICAgIHMtPmRldi5oYW5kbGVfZGF0YSA9IHVzYl9oaWRf aGFuZGxlX2RhdGE7CiAgICAgcy0+ZGV2LmhhbmRsZV9kZXN0cm95ID0gdXNiX2hpZF9oYW5kbGVf ZGVzdHJveTsKKworICAgIHMtPmRldl9kZXNjcmlwdG9yID0gcWVtdV9tb3VzZV9kZXZfZGVzY3Jp cHRvcjsKKyAgICBzLT5kZXZfZGVzY3JpcHRvcl9zaXplID0gc2l6ZW9mKHFlbXVfbW91c2VfZGV2 X2Rlc2NyaXB0b3IpOworICAgIHMtPmNvbmZpZ19kZXNjcmlwdG9yID0gcWVtdV9rZXlib2FyZF9j b25maWdfZGVzY3JpcHRvcjsKKyAgICBzLT5jb25maWdfZGVzY3JpcHRvcl9zaXplID0gc2l6ZW9m KHFlbXVfa2V5Ym9hcmRfY29uZmlnX2Rlc2NyaXB0b3IpOworICAgIHMtPmhpZF9yZXBvcnRfZGVz Y3JpcHRvciA9IHFlbXVfa2V5Ym9hcmRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yOworICAgIHMtPmhp ZF9yZXBvcnRfZGVzY3JpcHRvcl9zaXplID0gc2l6ZW9mKHFlbXVfa2V5Ym9hcmRfaGlkX3JlcG9y dF9kZXNjcmlwdG9yKTsKICAgICBzLT5raW5kID0gVVNCX0tFWUJPQVJEOworICAgIHMtPmhvb2tf cG9sbCA9IHVzYl9rZXlib2FyZF9wb2xsOwogCiAgICAgcHN0cmNweShzLT5kZXYuZGV2bmFtZSwg c2l6ZW9mKHMtPmRldi5kZXZuYW1lKSwgIlFFTVUgVVNCIEtleWJvYXJkIik7CiAKQEAgLTkxNCwz ICsxMTA5LDQgQEAgdm9pZCB1c2JfaGlkX2RhdGFpbl9jYihVU0JEZXZpY2UgKmRldiwgdm9pZCAq b3BhcXVlLCB2b2lkICgqZGF0YWluKSh2b2lkICopKQogICAgIHMtPmRhdGFpbl9vcGFxdWUgPSBv cGFxdWU7CiAgICAgcy0+ZGF0YWluID0gZGF0YWluOwogfQorCmRpZmYgLS1naXQgYS9ody91c2It d2Fjb20uYyBiL2h3L3VzYi13YWNvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl YWYwZDI5Li4wMDAwMDAwCi0tLSBhL2h3L3VzYi13YWNvbS5jCisrKyAvZGV2L251bGwKQEAgLTEs NDEyICswLDAgQEAKLS8qCi0gKiBXYWNvbSBQZW5QYXJ0bmVyIFVTQiB0YWJsZXQgZW11bGF0aW9u LgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuZWRoYW5kIEx0ZC4KLSAqIEF1dGhvcjog QW5kcnplaiBaYWJvcm93c2tpIDxiYWxyb2dAemFib3Iub3JnPgotICoKLSAqIEJhc2VkIG9uIGh3 L3VzYi1oaWQuYzoKLSAqIENvcHlyaWdodCAoYykgMjAwNSBGYWJyaWNlIEJlbGxhcmQKLSAqCi0g KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgot ICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdB UkUuCi0gKi8KLSNpbmNsdWRlICJody5oIgotI2luY2x1ZGUgImNvbnNvbGUuaCIKLSNpbmNsdWRl ICJ1c2IuaCIKLQotLyogSW50ZXJmYWNlIHJlcXVlc3RzICovCi0jZGVmaW5lIFdBQ09NX0dFVF9S RVBPUlQJMHgyMTAxCi0jZGVmaW5lIFdBQ09NX1NFVF9SRVBPUlQJMHgyMTA5Ci0KLS8qIEhJRCBp bnRlcmZhY2UgcmVxdWVzdHMgKi8KLSNkZWZpbmUgSElEX0dFVF9SRVBPUlQJCTB4YTEwMQotI2Rl ZmluZSBISURfR0VUX0lETEUJCTB4YTEwMgotI2RlZmluZSBISURfR0VUX1BST1RPQ09MCTB4YTEw MwotI2RlZmluZSBISURfU0VUX0lETEUJCTB4MjEwYQotI2RlZmluZSBISURfU0VUX1BST1RPQ09M CTB4MjEwYgotCi10eXBlZGVmIHN0cnVjdCBVU0JXYWNvbVN0YXRlIHsKLSAgICBVU0JEZXZpY2Ug ZGV2OwotICAgIFFFTVVQdXRNb3VzZUVudHJ5ICplaF9lbnRyeTsKLSAgICBpbnQgZHgsIGR5LCBk eiwgYnV0dG9uc19zdGF0ZTsKLSAgICBpbnQgeCwgeTsKLSAgICBpbnQgbW91c2VfZ3JhYmJlZDsK LSAgICBlbnVtIHsKLSAgICAgICAgV0FDT01fTU9ERV9ISUQgPSAxLAotICAgICAgICBXQUNPTV9N T0RFX1dBQ09NID0gMiwKLSAgICB9IG1vZGU7Ci19IFVTQldhY29tU3RhdGU7Ci0KLXN0YXRpYyBj b25zdCB1aW50OF90IHFlbXVfd2Fjb21fZGV2X2Rlc2NyaXB0b3JbXSA9IHsKLSAgICAweDEyLAkv KiAgdTggYkxlbmd0aDsgKi8KLSAgICAweDAxLAkvKiAgdTggYkRlc2NyaXB0b3JUeXBlOyBEZXZp Y2UgKi8KLSAgICAweDEwLCAweDEwLAkvKiAgdTE2IGJjZFVTQjsgdjEuMTAgKi8KLQotICAgIDB4 MDAsCS8qICB1OCAgYkRldmljZUNsYXNzOyAqLwotICAgIDB4MDAsCS8qICB1OCAgYkRldmljZVN1 YkNsYXNzOyAqLwotICAgIDB4MDAsCS8qICB1OCAgYkRldmljZVByb3RvY29sOyBbIGxvdy9mdWxs IHNwZWVkcyBvbmx5IF0gKi8KLSAgICAweDA4LAkvKiAgdTggIGJNYXhQYWNrZXRTaXplMDsgOCBC eXRlcyAqLwotCi0gICAgMHg2YSwgMHgwNSwJLyogIHUxNiBpZFZlbmRvcjsgKi8KLSAgICAweDAw LCAweDAwLAkvKiAgdTE2IGlkUHJvZHVjdDsgKi8KLSAgICAweDEwLCAweDQyLAkvKiAgdTE2IGJj ZERldmljZSAqLwotCi0gICAgMHgwMSwJLyogIHU4ICBpTWFudWZhY3R1cmVyOyAqLwotICAgIDB4 MDIsCS8qICB1OCAgaVByb2R1Y3Q7ICovCi0gICAgMHgwMCwJLyogIHU4ICBpU2VyaWFsTnVtYmVy OyAqLwotICAgIDB4MDEsCS8qICB1OCAgYk51bUNvbmZpZ3VyYXRpb25zOyAqLwotfTsKLQotc3Rh dGljIGNvbnN0IHVpbnQ4X3QgcWVtdV93YWNvbV9jb25maWdfZGVzY3JpcHRvcltdID0gewotICAg IC8qIG9uZSBjb25maWd1cmF0aW9uICovCi0gICAgMHgwOSwJLyogIHU4ICBiTGVuZ3RoOyAqLwot ICAgIDB4MDIsCS8qICB1OCAgYkRlc2NyaXB0b3JUeXBlOyBDb25maWd1cmF0aW9uICovCi0gICAg MHgyMiwgMHgwMCwJLyogIHUxNiB3VG90YWxMZW5ndGg7ICovCi0gICAgMHgwMSwJLyogIHU4ICBi TnVtSW50ZXJmYWNlczsgKDEpICovCi0gICAgMHgwMSwJLyogIHU4ICBiQ29uZmlndXJhdGlvblZh bHVlOyAqLwotICAgIDB4MDAsCS8qICB1OCAgaUNvbmZpZ3VyYXRpb247ICovCi0gICAgMHg4MCwJ LyogIHU4ICBibUF0dHJpYnV0ZXM7Ci0JCQkJIEJpdCA3OiBtdXN0IGJlIHNldCwKLQkJCQkgICAg IDY6IFNlbGYtcG93ZXJlZCwKLQkJCQkgICAgIDU6IFJlbW90ZSB3YWtldXAsCi0JCQkJICAgICA0 Li4wOiByZXN2ZCAqLwotICAgIDQwLAkJLyogIHU4ICBNYXhQb3dlcjsgKi8KLQotICAgIC8qIG9u ZSBpbnRlcmZhY2UgKi8KLSAgICAweDA5LAkvKiAgdTggIGlmX2JMZW5ndGg7ICovCi0gICAgMHgw NCwJLyogIHU4ICBpZl9iRGVzY3JpcHRvclR5cGU7IEludGVyZmFjZSAqLwotICAgIDB4MDAsCS8q ICB1OCAgaWZfYkludGVyZmFjZU51bWJlcjsgKi8KLSAgICAweDAwLAkvKiAgdTggIGlmX2JBbHRl cm5hdGVTZXR0aW5nOyAqLwotICAgIDB4MDEsCS8qICB1OCAgaWZfYk51bUVuZHBvaW50czsgKi8K LSAgICAweDAzLAkvKiAgdTggIGlmX2JJbnRlcmZhY2VDbGFzczsgSElEICovCi0gICAgMHgwMSwJ LyogIHU4ICBpZl9iSW50ZXJmYWNlU3ViQ2xhc3M7IEJvb3QgKi8KLSAgICAweDAyLAkvKiAgdTgg IGlmX2JJbnRlcmZhY2VQcm90b2NvbDsgW3VzYjEuMSBvciBzaW5nbGUgdHRdICovCi0gICAgMHgw MCwJLyogIHU4ICBpZl9pSW50ZXJmYWNlOyAqLwotCi0gICAgLyogSElEIGRlc2NyaXB0b3IgKi8K LSAgICAweDA5LAkvKiAgdTggIGJMZW5ndGg7ICovCi0gICAgMHgyMSwJLyogIHU4ICBiRGVzY3Jp cHRvclR5cGU7ICovCi0gICAgMHgwMSwgMHgxMCwJLyogIHUxNiBISURfY2xhc3MgKi8KLSAgICAw eDAwLAkvKiAgdTggIGNvdW50cnlfY29kZSAqLwotICAgIDB4MDEsCS8qICB1OCAgbnVtX2Rlc2Ny aXB0b3JzICovCi0gICAgMHgyMiwJLyogIHU4ICB0eXBlOyBSZXBvcnQgKi8KLSAgICAweDZlLCAw eDAwLAkvKiAgdTE2IGxlbiAqLwotCi0gICAgLyogb25lIGVuZHBvaW50IChzdGF0dXMgY2hhbmdl IGVuZHBvaW50KSAqLwotICAgIDB4MDcsCS8qICB1OCAgZXBfYkxlbmd0aDsgKi8KLSAgICAweDA1 LAkvKiAgdTggIGVwX2JEZXNjcmlwdG9yVHlwZTsgRW5kcG9pbnQgKi8KLSAgICAweDgxLAkvKiAg dTggIGVwX2JFbmRwb2ludEFkZHJlc3M7IElOIEVuZHBvaW50IDEgKi8KLSAgICAweDAzLAkvKiAg dTggIGVwX2JtQXR0cmlidXRlczsgSW50ZXJydXB0ICovCi0gICAgMHgwOCwgMHgwMCwJLyogIHUx NiBlcF93TWF4UGFja2V0U2l6ZTsgKi8KLSAgICAweDBhLAkvKiAgdTggIGVwX2JJbnRlcnZhbDsg Ki8KLX07Ci0KLXN0YXRpYyB2b2lkIHVzYl9tb3VzZV9ldmVudCh2b2lkICpvcGFxdWUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR4MSwgaW50IGR5MSwgaW50IGR6MSwgaW50IGJ1 dHRvbnNfc3RhdGUpCi17Ci0gICAgVVNCV2Fjb21TdGF0ZSAqcyA9IG9wYXF1ZTsKLQotICAgIHMt PmR4ICs9IGR4MTsKLSAgICBzLT5keSArPSBkeTE7Ci0gICAgcy0+ZHogKz0gZHoxOwotICAgIHMt PmJ1dHRvbnNfc3RhdGUgPSBidXR0b25zX3N0YXRlOwotfQotCi1zdGF0aWMgdm9pZCB1c2Jfd2Fj b21fZXZlbnQodm9pZCAqb3BhcXVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4 LCBpbnQgeSwgaW50IGR6LCBpbnQgYnV0dG9uc19zdGF0ZSkKLXsKLSAgICBVU0JXYWNvbVN0YXRl ICpzID0gb3BhcXVlOwotCi0gICAgcy0+eCA9IHg7Ci0gICAgcy0+eSA9IHk7Ci0gICAgcy0+ZHog Kz0gZHo7Ci0gICAgcy0+YnV0dG9uc19zdGF0ZSA9IGJ1dHRvbnNfc3RhdGU7Ci19Ci0KLXN0YXRp YyBpbmxpbmUgaW50IGludF9jbGFtcChpbnQgdmFsLCBpbnQgdm1pbiwgaW50IHZtYXgpCi17Ci0g ICAgaWYgKHZhbCA8IHZtaW4pCi0gICAgICAgIHJldHVybiB2bWluOwotICAgIGVsc2UgaWYgKHZh bCA+IHZtYXgpCi0gICAgICAgIHJldHVybiB2bWF4OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJu IHZhbDsKLX0KLQotc3RhdGljIGludCB1c2JfbW91c2VfcG9sbChVU0JXYWNvbVN0YXRlICpzLCB1 aW50OF90ICpidWYsIGludCBsZW4pCi17Ci0gICAgaW50IGR4LCBkeSwgZHosIGIsIGw7Ci0KLSAg ICBpZiAoIXMtPm1vdXNlX2dyYWJiZWQpIHsKLSAgICAgICAgcy0+ZWhfZW50cnkgPSBxZW11X2Fk ZF9tb3VzZV9ldmVudF9oYW5kbGVyKHVzYl9tb3VzZV9ldmVudCwgcywgMCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICJRRU1VIFBlblBhcnRuZXIgdGFibGV0Iik7Ci0gICAgICAgIHMtPm1vdXNl X2dyYWJiZWQgPSAxOwotICAgIH0KLQotICAgIGR4ID0gaW50X2NsYW1wKHMtPmR4LCAtMTI4LCAx MjcpOwotICAgIGR5ID0gaW50X2NsYW1wKHMtPmR5LCAtMTI4LCAxMjcpOwotICAgIGR6ID0gaW50 X2NsYW1wKHMtPmR6LCAtMTI4LCAxMjcpOwotCi0gICAgcy0+ZHggLT0gZHg7Ci0gICAgcy0+ZHkg LT0gZHk7Ci0gICAgcy0+ZHogLT0gZHo7Ci0KLSAgICBiID0gMDsKLSAgICBpZiAocy0+YnV0dG9u c19zdGF0ZSAmIE1PVVNFX0VWRU5UX0xCVVRUT04pCi0gICAgICAgIGIgfD0gMHgwMTsKLSAgICBp ZiAocy0+YnV0dG9uc19zdGF0ZSAmIE1PVVNFX0VWRU5UX1JCVVRUT04pCi0gICAgICAgIGIgfD0g MHgwMjsKLSAgICBpZiAocy0+YnV0dG9uc19zdGF0ZSAmIE1PVVNFX0VWRU5UX01CVVRUT04pCi0g ICAgICAgIGIgfD0gMHgwNDsKLQotICAgIGJ1ZlswXSA9IGI7Ci0gICAgYnVmWzFdID0gZHg7Ci0g ICAgYnVmWzJdID0gZHk7Ci0gICAgbCA9IDM7Ci0gICAgaWYgKGxlbiA+PSA0KSB7Ci0gICAgICAg IGJ1ZlszXSA9IGR6OwotICAgICAgICBsID0gNDsKLSAgICB9Ci0gICAgcmV0dXJuIGw7Ci19Ci0K LXN0YXRpYyBpbnQgdXNiX3dhY29tX3BvbGwoVVNCV2Fjb21TdGF0ZSAqcywgdWludDhfdCAqYnVm LCBpbnQgbGVuKQotewotICAgIGludCBiOwotCi0gICAgaWYgKCFzLT5tb3VzZV9ncmFiYmVkKSB7 Ci0gICAgICAgIHMtPmVoX2VudHJ5ID0gcWVtdV9hZGRfbW91c2VfZXZlbnRfaGFuZGxlcih1c2Jf d2Fjb21fZXZlbnQsIHMsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUUVNVSBQZW5QYXJ0 bmVyIHRhYmxldCIpOwotICAgICAgICBzLT5tb3VzZV9ncmFiYmVkID0gMTsKLSAgICB9Ci0KLSAg ICBiID0gMDsKLSAgICBpZiAocy0+YnV0dG9uc19zdGF0ZSAmIE1PVVNFX0VWRU5UX0xCVVRUT04p Ci0gICAgICAgIGIgfD0gMHgwMTsKLSAgICBpZiAocy0+YnV0dG9uc19zdGF0ZSAmIE1PVVNFX0VW RU5UX1JCVVRUT04pCi0gICAgICAgIGIgfD0gMHgwMjsKLSAgICBpZiAocy0+YnV0dG9uc19zdGF0 ZSAmIE1PVVNFX0VWRU5UX01CVVRUT04pCi0gICAgICAgIGIgfD0gMHgwNDsKLQotICAgIGlmIChs ZW4gPCA3KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGJ1ZlswXSA9IHMtPm1vZGU7Ci0gICAg YnVmWzVdID0gMHgwMDsKLSAgICBpZiAoYikgewotICAgICAgICBidWZbMV0gPSBzLT54ICYgMHhm ZjsKLSAgICAgICAgYnVmWzJdID0gcy0+eCA+PiA4OwotICAgICAgICBidWZbM10gPSBzLT55ICYg MHhmZjsKLSAgICAgICAgYnVmWzRdID0gcy0+eSA+PiA4OwotICAgICAgICBidWZbNl0gPSAwOwot ICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZlsxXSA9IDA7Ci0gICAgICAgIGJ1ZlsyXSA9IDA7Ci0g ICAgICAgIGJ1ZlszXSA9IDA7Ci0gICAgICAgIGJ1Zls0XSA9IDA7Ci0gICAgICAgIGJ1Zls2XSA9 ICh1bnNpZ25lZCBjaGFyKSAtMTI3OwotICAgIH0KLQotICAgIHJldHVybiA3OwotfQotCi1zdGF0 aWMgdm9pZCB1c2Jfd2Fjb21faGFuZGxlX3Jlc2V0KFVTQkRldmljZSAqZGV2KQotewotICAgIFVT QldhY29tU3RhdGUgKnMgPSAoVVNCV2Fjb21TdGF0ZSAqKSBkZXY7Ci0KLSAgICBzLT5keCA9IDA7 Ci0gICAgcy0+ZHkgPSAwOwotICAgIHMtPmR6ID0gMDsKLSAgICBzLT54ID0gMDsKLSAgICBzLT55 ID0gMDsKLSAgICBzLT5idXR0b25zX3N0YXRlID0gMDsKLSAgICBzLT5tb2RlID0gV0FDT01fTU9E RV9ISUQ7Ci19Ci0KLXN0YXRpYyBpbnQgdXNiX3dhY29tX2hhbmRsZV9jb250cm9sKFVTQkRldmlj ZSAqZGV2LCBpbnQgcmVxdWVzdCwgaW50IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGluZGV4LCBpbnQgbGVuZ3RoLCB1aW50OF90ICpkYXRhKQotewotICAg IFVTQldhY29tU3RhdGUgKnMgPSAoVVNCV2Fjb21TdGF0ZSAqKSBkZXY7Ci0gICAgaW50IHJldCA9 IDA7Ci0KLSAgICBzd2l0Y2ggKHJlcXVlc3QpIHsKLSAgICBjYXNlIERldmljZVJlcXVlc3QgfCBV U0JfUkVRX0dFVF9TVEFUVVM6Ci0gICAgICAgIGRhdGFbMF0gPSAoMSA8PCBVU0JfREVWSUNFX1NF TEZfUE9XRVJFRCkgfAotICAgICAgICAgICAgKGRldi0+cmVtb3RlX3dha2V1cCA8PCBVU0JfREVW SUNFX1JFTU9URV9XQUtFVVApOwotICAgICAgICBkYXRhWzFdID0gMHgwMDsKLSAgICAgICAgcmV0 ID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEZXZpY2VPdXRSZXF1ZXN0IHwgVVNCX1JF UV9DTEVBUl9GRUFUVVJFOgotICAgICAgICBpZiAodmFsdWUgPT0gVVNCX0RFVklDRV9SRU1PVEVf V0FLRVVQKSB7Ci0gICAgICAgICAgICBkZXYtPnJlbW90ZV93YWtldXAgPSAwOwotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0gICAgICAgIHJldCA9 IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRGV2aWNlT3V0UmVxdWVzdCB8IFVTQl9SRVFf U0VUX0ZFQVRVUkU6Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBVU0JfREVWSUNFX1JFTU9URV9XQUtF VVApIHsKLSAgICAgICAgICAgIGRldi0+cmVtb3RlX3dha2V1cCA9IDE7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0ID0gMDsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEZXZpY2VPdXRSZXF1ZXN0IHwgVVNCX1JFUV9TRVRf QUREUkVTUzoKLSAgICAgICAgZGV2LT5hZGRyID0gdmFsdWU7Ci0gICAgICAgIHJldCA9IDA7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRGV2aWNlUmVxdWVzdCB8IFVTQl9SRVFfR0VUX0RFU0NS SVBUT1I6Ci0gICAgICAgIHN3aXRjaCAodmFsdWUgPj4gOCkgewotICAgICAgICBjYXNlIFVTQl9E VF9ERVZJQ0U6Ci0gICAgICAgICAgICBtZW1jcHkoZGF0YSwgcWVtdV93YWNvbV9kZXZfZGVzY3Jp cHRvciwKLSAgICAgICAgICAgICAgICAgICBzaXplb2YocWVtdV93YWNvbV9kZXZfZGVzY3JpcHRv cikpOwotICAgICAgICAgICAgcmV0ID0gc2l6ZW9mKHFlbXVfd2Fjb21fZGV2X2Rlc2NyaXB0b3Ip OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVVNCX0RUX0NPTkZJRzoKLSAgICAg ICAJICAgIG1lbWNweShkYXRhLCBxZW11X3dhY29tX2NvbmZpZ19kZXNjcmlwdG9yLAotICAgICAg ICAgICAgICAgICAgIHNpemVvZihxZW11X3dhY29tX2NvbmZpZ19kZXNjcmlwdG9yKSk7Ci0gICAg ICAgICAgICByZXQgPSBzaXplb2YocWVtdV93YWNvbV9jb25maWdfZGVzY3JpcHRvcik7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVU0JfRFRfU1RSSU5HOgotICAgICAgICAgICAg c3dpdGNoICh2YWx1ZSAmIDB4ZmYpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAg ICAgICAvKiBsYW5ndWFnZSBpZHMgKi8KLSAgICAgICAgICAgICAgICBkYXRhWzBdID0gNDsKLSAg ICAgICAgICAgICAgICBkYXRhWzFdID0gMzsKLSAgICAgICAgICAgICAgICBkYXRhWzJdID0gMHgw OTsKLSAgICAgICAgICAgICAgICBkYXRhWzNdID0gMHgwNDsKLSAgICAgICAgICAgICAgICByZXQg PSA0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxOgotICAgICAg ICAgICAgICAgIC8qIHNlcmlhbCBudW1iZXIgKi8KLSAgICAgICAgICAgICAgICByZXQgPSBzZXRf dXNiX3N0cmluZyhkYXRhLCAiMSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgY2FzZSAyOgotCQlyZXQgPSBzZXRfdXNiX3N0cmluZyhkYXRhLCAiV2Fjb20gUGVuUGFydG5l ciIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzOgotICAgICAg ICAgICAgICAgIC8qIHZlbmRvciBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgIHJldCA9 IHNldF91c2Jfc3RyaW5nKGRhdGEsICJRRU1VICIgUUVNVV9WRVJTSU9OKTsKLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICByZXQgPSBz ZXRfdXNiX3N0cmluZyhkYXRhLCAiV2Fjb20gVGFibGV0Iik7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgcmV0ID0gc2V0X3VzYl9z dHJpbmcoZGF0YSwgIkVuZHBvaW50MSBJbnRlcnJ1cHQgUGlwZSIpOwotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBnb3RvIGZhaWw7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg ICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNl IERldmljZVJlcXVlc3QgfCBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgotICAgICAgICBkYXRh WzBdID0gMTsKLSAgICAgICAgcmV0ID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEZXZp Y2VPdXRSZXF1ZXN0IHwgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKLSAgICAgICAgcmV0ID0g MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEZXZpY2VSZXF1ZXN0IHwgVVNCX1JFUV9HRVRf SU5URVJGQUNFOgotICAgICAgICBkYXRhWzBdID0gMDsKLSAgICAgICAgcmV0ID0gMTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBEZXZpY2VPdXRSZXF1ZXN0IHwgVVNCX1JFUV9TRVRfSU5URVJG QUNFOgotICAgICAgICByZXQgPSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdBQ09NX1NF VF9SRVBPUlQ6Ci0gICAgICAgIHFlbXVfcmVtb3ZlX21vdXNlX2V2ZW50X2hhbmRsZXIocy0+ZWhf ZW50cnkpOwotICAgICAgICBzLT5tb3VzZV9ncmFiYmVkID0gMDsKLSAgICAgICAgcy0+bW9kZSA9 IGRhdGFbMF07Ci0gICAgICAgIHJldCA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0FD T01fR0VUX1JFUE9SVDoKLSAgICAgICAgZGF0YVswXSA9IDA7Ci0gICAgICAgIGRhdGFbMV0gPSBz LT5tb2RlOwotICAgICAgICByZXQgPSAyOwotICAgICAgICBicmVhazsKLSAgICAvKiBVU0IgSElE IHJlcXVlc3RzICovCi0gICAgY2FzZSBISURfR0VUX1JFUE9SVDoKLSAgICAgICAgaWYgKHMtPm1v ZGUgPT0gV0FDT01fTU9ERV9ISUQpCi0gICAgICAgICAgICByZXQgPSB1c2JfbW91c2VfcG9sbChz LCBkYXRhLCBsZW5ndGgpOwotICAgICAgICBlbHNlIGlmIChzLT5tb2RlID09IFdBQ09NX01PREVf V0FDT00pCi0gICAgICAgICAgICByZXQgPSB1c2Jfd2Fjb21fcG9sbChzLCBkYXRhLCBsZW5ndGgp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEhJRF9TRVRfSURMRToKLSAgICAgICAgcmV0ID0g MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICBmYWlsOgotICAgICAgICByZXQg PSBVU0JfUkVUX1NUQUxMOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsK LX0KLQotc3RhdGljIGludCB1c2Jfd2Fjb21faGFuZGxlX2RhdGEoVVNCRGV2aWNlICpkZXYsIFVT QlBhY2tldCAqcCkKLXsKLSAgICBVU0JXYWNvbVN0YXRlICpzID0gKFVTQldhY29tU3RhdGUgKikg ZGV2OwotICAgIGludCByZXQgPSAwOwotCi0gICAgc3dpdGNoIChwLT5waWQpIHsKLSAgICBjYXNl IFVTQl9UT0tFTl9JTjoKLSAgICAgICAgaWYgKHAtPmRldmVwID09IDEpIHsKLSAgICAgICAgICAg IGlmIChzLT5tb2RlID09IFdBQ09NX01PREVfSElEKQotICAgICAgICAgICAgICAgIHJldCA9IHVz Yl9tb3VzZV9wb2xsKHMsIHAtPmRhdGEsIHAtPmxlbik7Ci0gICAgICAgICAgICBlbHNlIGlmIChz LT5tb2RlID09IFdBQ09NX01PREVfV0FDT00pCi0gICAgICAgICAgICAgICAgcmV0ID0gdXNiX3dh Y29tX3BvbGwocywgcC0+ZGF0YSwgcC0+bGVuKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICB9Ci0gICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgY2FzZSBVU0JfVE9LRU5fT1VU OgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldCA9IFVTQl9SRVRfU1RBTEw7Ci0gICAgICAgIGJy ZWFrOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB1c2Jfd2Fjb21f aGFuZGxlX2Rlc3Ryb3koVVNCRGV2aWNlICpkZXYpCi17Ci0gICAgVVNCV2Fjb21TdGF0ZSAqcyA9 IChVU0JXYWNvbVN0YXRlICopIGRldjsKLQotICAgIHFlbXVfcmVtb3ZlX21vdXNlX2V2ZW50X2hh bmRsZXIocy0+ZWhfZW50cnkpOwotICAgIHFlbXVfZnJlZShzKTsKLX0KLQotVVNCRGV2aWNlICp1 c2Jfd2Fjb21faW5pdCh2b2lkKQotewotICAgIFVTQldhY29tU3RhdGUgKnM7Ci0KLSAgICBzID0g cWVtdV9tYWxsb2N6KHNpemVvZihVU0JXYWNvbVN0YXRlKSk7Ci0gICAgcy0+ZGV2LnNwZWVkID0g VVNCX1NQRUVEX0ZVTEw7Ci0gICAgcy0+ZGV2LmhhbmRsZV9wYWNrZXQgPSB1c2JfZ2VuZXJpY19o YW5kbGVfcGFja2V0OwotCi0gICAgcy0+ZGV2LmhhbmRsZV9yZXNldCA9IHVzYl93YWNvbV9oYW5k bGVfcmVzZXQ7Ci0gICAgcy0+ZGV2LmhhbmRsZV9jb250cm9sID0gdXNiX3dhY29tX2hhbmRsZV9j b250cm9sOwotICAgIHMtPmRldi5oYW5kbGVfZGF0YSA9IHVzYl93YWNvbV9oYW5kbGVfZGF0YTsK LSAgICBzLT5kZXYuaGFuZGxlX2Rlc3Ryb3kgPSB1c2Jfd2Fjb21faGFuZGxlX2Rlc3Ryb3k7Ci0K LSAgICBwc3RyY3B5KHMtPmRldi5kZXZuYW1lLCBzaXplb2Yocy0+ZGV2LmRldm5hbWUpLAotICAg ICAgICAgICAgIlFFTVUgUGVuUGFydG5lciBUYWJsZXQiKTsKLQotICAgIHJldHVybiAoVVNCRGV2 aWNlICopIHM7Ci19Ci0tIAoxLjQuNC40Cgo= ------------Zoidberg-BeMail-temp----------