From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Murphy Subject: Re: PATCH [1/3] drivers/input/xpad.c: Improve Xbox 360 wireless support and add sysfs interface Date: Mon, 2 Mar 2009 23:20:05 -0500 Message-ID: <5aa163d00903022020q552cf61fpe92bdaf92e84f329@mail.gmail.com> References: <5aa163d00902282053h38b0febbyb37fc30855fdc985@mail.gmail.com> <20090302130425.23cc628d.akpm@linux-foundation.org> <5aa163d00903021847n525e8704jd332610c45e4675a@mail.gmail.com> <5aa163d00903022016s14b7ad32qfbaf82a07b9e0921@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e6475dbced724a04642f3fe6 Return-path: In-Reply-To: <5aa163d00903022016s14b7ad32qfbaf82a07b9e0921-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> Sender: linux-usb-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Linus Torvalds Cc: Andrew Morton , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, greg-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org, oliver-GvhC2dPhHPQdnm+yROfE0A@public.gmane.org, fweisbec-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: linux-input@vger.kernel.org --0016e6475dbced724a04642f3fe6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit One more update to implement the cleaner type handling for xpad_process_sticks (thanks Linus). I will perform the previously promised live testing tomorrow evening to be sure everything is working before signing off on the latest version. Thanks, Mike --0016e6475dbced724a04642f3fe6 Content-Type: text/plain; charset=US-ASCII; name="xpad-20090302b.patch.txt" Content-Disposition: attachment; filename="xpad-20090302b.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fru2kdjv0 ZGlmZiAtdU5yIG9yaWdkcnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMgbmV3ZHJ2L2Ry aXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCi0tLSBvcmlnZHJ2L2RyaXZlcnMvaW5wdXQvam95 c3RpY2sveHBhZC5jCTIwMDktMDItMTQgMjI6Mzk6MjAuMDAwMDAwMDAwIC0wNTAwCisrKyBuZXdk cnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMJMjAwOS0wMy0wMiAyMzowNToxOS4wMDAw MDAwMDAgLTA1MDAKQEAgLTEsNSArMSw4IEBACiAvKgotICogWC1Cb3ggZ2FtZXBhZCBkcml2ZXIK KyAqIFhib3ggZ2FtZXBhZCBkcml2ZXIgd2l0aCBYYm94IDM2MCB3aXJlZC93aXJlbGVzcyBzdXBw b3J0CisgKgorICogTGFzdCBNb2RpZmllZDoJMiBNYXJjaCAyMDA5CisgKgkJCU1pa2UgTXVycGh5 IDxtYW11cnBoQGNzLmNsZW1zb24uZWR1PgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBNYXJr byBGcmllZGVtYW5uIDxtZnJAYm14LWNoZW1uaXR6LmRlPgogICogICAgICAgICAgICAgICAyMDA0 IE9saXZlciBTY2h3YXJ0eiA8T2xpdmVyLlNjaHdhcnR6QGdteC5kZT4sCkBAIC05LDYgKzEyLDgg QEAKICAqICAgICAgICAgICAgICAgMjAwNSBEb21pbmljIENlcnF1ZXR0aSA8YmluYXJ5MTIzMEB5 YWhvby5jb20+CiAgKiAgICAgICAgICAgICAgIDIwMDYgQWRhbSBCdWNoYmluZGVyIDxhZGFtLmJ1 Y2hiaW5kZXJAZ21haWwuY29tPgogICogICAgICAgICAgICAgICAyMDA3IEphbiBLcmF0b2Nodmls IDxob256YUBqaWtvcy5jej4KKyAqICAgICAgICAgICAgICAgMjAwOSBDbGVtc29uIFVuaXZlcnNp dHkKKyAqCQkgICAgICAoY29udGFjdDogTWlrZSBNdXJwaHkgPG1hbXVycGhAY3MuY2xlbXNvbi5l ZHU+KQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNCwxMzAgKzI5LDExOCBAQAogICogYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK ICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s IE1BIDAyMTExLTEzMDcgVVNBCiAgKgotICoKLSAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uOgot ICogIC0gaW5mb3JtYXRpb24gZnJvbSAgICAgaHR0cDovL2V1Yy5qcC9wZXJpcGhzL3hib3gtY29u dHJvbGxlci5qYS5odG1sCi0gKiAgLSB0aGUgaUZvcmNlIGRyaXZlciAgICBkcml2ZXJzL2NoYXIv am95c3RpY2svaWZvcmNlLmMKLSAqICAtIHRoZSBza2VsZXRvbi1kcml2ZXIgIGRyaXZlcnMvdXNi L3VzYi1za2VsZXRvbi5jCi0gKiAgLSBYYm94IDM2MCBpbmZvcm1hdGlvbiBodHRwOi8vd3d3LmZy ZWU2MC5vcmcvd2lraS9HYW1lcGFkCi0gKgotICogVGhhbmtzIHRvOgotICogIC0gSVRPIFRha2F5 dWtpIGZvciBwcm92aWRpbmcgZXNzZW50aWFsIHhwYWQgaW5mb3JtYXRpb24gb24gaGlzIHdlYnNp dGUKLSAqICAtIFZvanRlY2ggUGF2bGlrICAgICAtIGlmb3JjZSBkcml2ZXIgLyBpbnB1dCBzdWJz eXN0ZW0KLSAqICAtIEdyZWcgS3JvYWgtSGFydG1hbiAtIHVzYi1za2VsZXRvbiBkcml2ZXIKLSAq ICAtIFhCT1ggTGludXggcHJvamVjdCAtIGV4dHJhIFVTQiBpZCdzCi0gKgotICogVE9ETzoKLSAq ICAtIGZpbmUgdHVuZSBheGVzIChlc3BlY2lhbGx5IHRyaWdnZXIgYXhlcykKLSAqICAtIGZpeCAi YW5hbG9nIiBidXR0b25zIChyZXBvcnRlZCBhcyBkaWdpdGFsIG5vdykKLSAqICAtIGdldCBydW1i bGUgd29ya2luZwotICogIC0gbmVlZCBVU0IgSURzIGZvciBvdGhlciBkYW5jZSBwYWRzCi0gKgot ICogSGlzdG9yeToKLSAqCi0gKiAyMDAyLTA2LTI3IC0gMC4wLjEgOiBmaXJzdCB2ZXJzaW9uLCBq dXN0IHNhaWQgIlhCT1ggSElEIGNvbnRyb2xsZXIiCi0gKgotICogMjAwMi0wNy0wMiAtIDAuMC4y IDogYmFzaWMgd29ya2luZyB2ZXJzaW9uCi0gKiAgLSBhbGwgYXhlcyBhbmQgOSBvZiB0aGUgMTAg YnV0dG9ucyB3b3JrIChnZXJtYW4gSW50ZXJBY3QgZGV2aWNlKQotICogIC0gdGhlIGJsYWNrIGJ1 dHRvbiBkb2VzIG5vdCB3b3JrCi0gKgotICogMjAwMi0wNy0xNCAtIDAuMC4zIDogcmV3b3JrIGJ5 IFZvanRlY2ggUGF2bGlrCi0gKiAgLSBpbmRlbnRhdGlvbiBmaXhlcwotICogIC0gdXNiICsgaW5w dXQgaW5pdCBzZXF1ZW5jZSBmaXhlcwotICoKLSAqIDIwMDItMDctMTYgLSAwLjAuNCA6IG1pbm9y IGNoYW5nZXMsIG1lcmdlIHdpdGggVm9qdGVjaCdzIHYwLjAuMwotICogIC0gdmVyaWZpZWQgdGhl IGxhY2sgb2YgSElEIGFuZCByZXBvcnQgZGVzY3JpcHRvcnMKLSAqICAtIHZlcmlmaWVkIHRoYXQg QUxMIGJ1dHRvbnMgV09SSwotICogIC0gZml4ZWQgZC1wYWQgdG8gYXhlcyBtYXBwaW5nCi0gKgot ICogMjAwMi0wNy0xNyAtIDAuMC41IDogc2ltcGxpZmllZCBkLXBhZCBoYW5kbGluZwotICoKLSAq IDIwMDQtMTAtMDIgLSAwLjAuNiA6IEREUiBwYWQgc3VwcG9ydAotICogIC0gYm9ycm93ZWQgZnJv bSB0aGUgWEJPWCBsaW51eCBrZXJuZWwKLSAqICAtIFVTQiBpZCdzIGZvciBjb21tb25seSB1c2Vk IGRhbmNlIHBhZHMgYXJlIHByZXNlbnQKLSAqICAtIGRhbmNlIHBhZHMgd2lsbCBtYXAgRC1QQUQg dG8gYnV0dG9ucywgbm90IGF4ZXMKLSAqICAtIHBhc3MgdGhlIG1vZHVsZSBwYXJhbWF0ZXIgJ2Rw YWRfdG9fYnV0dG9ucycgdG8gZm9yY2UKLSAqICAgIHRoZSBELVBBRCB0byBtYXAgdG8gYnV0dG9u cyBpZiB5b3VyIHBhZCBpcyBub3QgZGV0ZWN0ZWQKLSAqCi0gKiBMYXRlciBjaGFuZ2VzIGNhbiBi ZSB0cmFja2VkIGluIFNDTS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5j bHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxs aW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgv dXNiL2lucHV0Lmg+Ci0KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWFya28gRnJpZWRlbWFubiA8 bWZyQGJteC1jaGVtbml0ei5kZT4iCi0jZGVmaW5lIERSSVZFUl9ERVNDICJYLUJveCBwYWQgZHJp dmVyIgotCi0jZGVmaW5lIFhQQURfUEtUX0xFTiAzMgotCi0vKiB4Ym94IGQtcGFkcyBzaG91bGQg bWFwIHRvIGJ1dHRvbnMsIGFzIGlzIHJlcXVpcmVkIGZvciBERFIgcGFkcwotICAgYnV0IHdlIG1h cCB0aGVtIHRvIGF4ZXMgd2hlbiBwb3NzaWJsZSB0byBzaW1wbGlmeSB0aGluZ3MgKi8KLSNkZWZp bmUgTUFQX0RQQURfVE9fQlVUVE9OUyAgICAwCi0jZGVmaW5lIE1BUF9EUEFEX1RPX0FYRVMgICAg ICAgMQotI2RlZmluZSBNQVBfRFBBRF9VTktOT1dOICAgICAgIDIKLQotI2RlZmluZSBYVFlQRV9Y Qk9YICAgICAgICAwCi0jZGVmaW5lIFhUWVBFX1hCT1gzNjAgICAgIDEKLSNkZWZpbmUgWFRZUEVf WEJPWDM2MFcgICAgMgotI2RlZmluZSBYVFlQRV9VTktOT1dOICAgICAzCisgKiBQbGVhc2Ugc2Vl IHhib3guaCBmb3IgdGhlIENoYW5nZUxvZy4KKyAqLworCisjaW5jbHVkZSAieHBhZC5oIgogCisv KiBUaGlzIG1vZHVsZSBwYXJhbWV0ZXIgaXMgc29tZXRoaW5nIG9mIGEgcmVsaWMsIGJ1dCBpdCBy ZW1haW5zIGZvcgorICogY29tcGF0aWJpbGl0eS4gSW1wb3J0YW50bHksIHRoZSBvcHRpb24gdG8g bWFwIHRoZSBELVBBRCBidXR0b25zIGFwcGxpZXMKKyAqIG9ubHkgdG8gY29udHJvbGxlciAqaW50 ZXJmYWNlcyogKGkuZS4gdmVuZG9yIGFuZCBwcm9kdWN0IGNvZGVzKSBub3QKKyAqIGV4cGxpY2l0 bHkgcHJlc2VudCBpbiB4cGFkX2RldmljZVtdLiAqLwogc3RhdGljIGludCBkcGFkX3RvX2J1dHRv bnM7CiBtb2R1bGVfcGFyYW0oZHBhZF90b19idXR0b25zLCBib29sLCBTX0lSVUdPKTsKLU1PRFVM RV9QQVJNX0RFU0MoZHBhZF90b19idXR0b25zLCAiTWFwIEQtUEFEIHRvIGJ1dHRvbnMgcmF0aGVy IHRoYW4gYXhlcyBmb3IgdW5rbm93biBwYWRzIik7CitNT0RVTEVfUEFSTV9ERVNDKGRwYWRfdG9f YnV0dG9ucywKKwkiTWFwIEQtUEFEIHRvIGJ1dHRvbnMgcmF0aGVyIHRoYW4gYXhlcyBmb3IgdW5r bm93biBwYWRzIik7CiAKKworLyogVGFibGUgb2YgdmFyaW91cyBkZXZpY2UgaW50ZXJmYWNlcyBy ZWNvZ25pemVkIGJ5IHRoaXMgZHJpdmVyLiBFYWNoIHN1cHBvcnRlZAorICogZGV2aWNlIGhhcyBh IGRpcmVjdGlvbmFsIHBhZCBtYXBwaW5nLCBpbnRlcmZhY2UgdHlwZSwgYW5kIGNvbnRyb2xsZXIg dHlwZS4KKyAqIE5vdGUgdGhhdCB3aXJlbGVzcyAzNjAgZGV2aWNlcyBoYXZlIFhDT05UUk9MTEVS X1RZUEVfTk9ORSwgYXMgdGhlIGFjdHVhbAorICogdHlwZSBvZiB0aGUgZ2FtaW5nIGNvbnRyb2xs ZXIgaXMgbm90IGtub3duIHVudGlsIHRoZSBjb250cm9sbGVyIGJpbmRzCisgKiB3aXJlbGVzc2x5 IHdpdGggdGhlIHJlY2VpdmVyCisgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeHBhZF9kZXZpY2Ug ewogCXUxNiBpZFZlbmRvcjsKIAl1MTYgaWRQcm9kdWN0OwogCWNoYXIgKm5hbWU7CiAJdTggZHBh ZF9tYXBwaW5nOwogCXU4IHh0eXBlOworCXU4IGNvbnRyb2xsZXJfdHlwZTsKIH0geHBhZF9kZXZp Y2VbXSA9IHsKLQl7IDB4MDQ1ZSwgMHgwMjAyLCAiTWljcm9zb2Z0IFgtQm94IHBhZCB2MSAoVVMp IiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDVlLCAweDAyODksICJN aWNyb3NvZnQgWC1Cb3ggcGFkIHYyIChVUykiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9Y IH0sCi0JeyAweDA0NWUsIDB4MDI4NSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgKEphcGFuKSIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ1ZSwgMHgwMjg3LCAiTWljcm9z b2Z0IFhib3ggQ29udHJvbGxlciBTIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAot CXsgMHgwNDVlLCAweDA3MTksICJYYm94IDM2MCBXaXJlbGVzcyBSZWNlaXZlciIsIE1BUF9EUEFE X1RPX0JVVFRPTlMsIFhUWVBFX1hCT1gzNjBXIH0sCi0JeyAweDBjMTIsIDB4ODgwOSwgIlJlZE9j dGFuZSBYYm94IERhbmNlIFBhZCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwK LQl7IDB4MDQ0ZiwgMHgwZjA3LCAiVGhydXN0bWFzdGVyLCBJbmMuIENvbnRyb2xsZXIiLCBNQVBf RFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA0NmQsIDB4YzI0MiwgIkxvZ2l0ZWNo IENoaWxsc3RyZWFtIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYw IH0sCi0JeyAweDA0NmQsIDB4Y2E4NCwgIkxvZ2l0ZWNoIFhib3ggQ29yZGxlc3MgQ29udHJvbGxl ciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ2ZCwgMHhjYTg4LCAi TG9naXRlY2ggQ29tcGFjdCBDb250cm9sbGVyIGZvciBYYm94IiwgTUFQX0RQQURfVE9fQVhFUywg WFRZUEVfWEJPWCB9LAotCXsgMHgwNWZkLCAweDEwMDcsICJNYWQgQ2F0eiBDb250cm9sbGVyICh1 bnZlcmlmaWVkKSIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDVmZCwg MHgxMDdhLCAiSW50ZXJBY3QgJ1Bvd2VyUGFkIFBybycgWC1Cb3ggcGFkIChHZXJtYW55KSIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NTE2LCAiTWFkIENh dHogQ29udHJvbCBQYWQiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3 MzgsIDB4NDUyMiwgIk1hZCBDYXR6IEx1bWlDT04iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9Y Qk9YIH0sCi0JeyAweDA3MzgsIDB4NDUyNiwgIk1hZCBDYXR6IENvbnRyb2wgUGFkIFBybyIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NTM2LCAiTWFkIENh dHogTWljcm9DT04iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3Mzgs IDB4NDU0MCwgIk1hZCBDYXR6IEJlYXQgUGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVf WEJPWCB9LAotCXsgMHgwNzM4LCAweDQ1NTYsICJNYWQgQ2F0eiBMeW54IFdpcmVsZXNzIENvbnRy b2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDcx NiwgIk1hZCBDYXR6IFdpcmVkIFhib3ggMzYwIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVT LCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweDA3MzgsIDB4NjA0MCwgIk1hZCBDYXR6IEJlYXQgUGFk IFBybyIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4 ODAyLCAiWmVyb3BsdXMgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVf WEJPWCB9LAotCXsgMHgwYzEyLCAweDg4MGEsICJQZWxpY2FuIEVjbGlwc2UgUEwtMjAyMyIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4ODEwLCAiWmVyb3Bs dXMgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsg MHgwYzEyLCAweDk5MDIsICJIQU1BIFZpYnJhWCAtICpGQVVMVFkgSEFSRFdBUkUqIiwgTUFQX0RQ QURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZTRjLCAweDEwOTcsICJSYWRpY2EgR2Ft ZXN0ZXIgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4 MGU0YywgMHgyMzkwLCAiUmFkaWNhIEdhbWVzIEp0ZWNoIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9U T19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwMywgIkxvZ2ljMyBGcmVlYmly ZCB3aXJlbGVzcyBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAot CXsgMHgwZTZmLCAweDAwMDUsICJFY2xpcHNlIHdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBB RF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwNiwgIkVkZ2Ugd2lyZWxl c3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU2 ZiwgMHgwMDA2LCAiUGVsaWNhbiAnVFNaJyBXaXJlZCBYYm94IDM2MCBDb250cm9sbGVyIiwgTUFQ X0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCB9LAotCXsgMHgwZThmLCAweDAyMDEsICJTbWFy dEpveSBGcmFnIFhwYWQvUFMyIGFkYXB0b3IiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9Y IH0sCi0JeyAweDBmMzAsIDB4MDIwMiwgIkpveXRlY2ggQWR2YW5jZWQgQ29udHJvbGxlciIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGYzMCwgMHg4ODg4LCAiQmlnQmVu IFhCTWluaVBhZCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAot CXsgMHgxMDJjLCAweGZmMGMsICJKb3l0ZWNoIFdpcmVsZXNzIEFkdmFuY2VkIENvbnRyb2xsZXIi LCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDEyYWIsIDB4ODgwOSwgIlhi b3ggRERSIGRhbmNlcGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAotCXsg MHgxNDMwLCAweDQ3NDgsICJSZWRPY3RhbmUgR3VpdGFyIEhlcm8gWC1wbG9yZXIiLCBNQVBfRFBB RF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweDE0MzAsIDB4ODg4OCwgIlRYNjUwMCsg RGFuY2UgUGFkIChmaXJzdCBnZW5lcmF0aW9uKSIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBF X1hCT1ggfSwKLQl7IDB4MDQ1ZSwgMHgwMjhlLCAiTWljcm9zb2Z0IFgtQm94IDM2MCBwYWQiLCBN QVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweGZmZmYsIDB4ZmZmZiwgIkNo aW5lc2UtbWFkZSBYYm94IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9Y IH0sCi0JeyAweDAwMDAsIDB4MDAwMCwgIkdlbmVyaWMgWC1Cb3ggcGFkIiwgTUFQX0RQQURfVU5L Tk9XTiwgWFRZUEVfVU5LTk9XTiB9CisJeyAweDA0NWUsIDB4MDIwMiwgIk1pY3Jvc29mdCBYLUJv eCBwYWQgdjEgKFVTKSIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9M TEVSX1RZUEVfUEFEIH0sCisJeyAweDA0NWUsIDB4MDI4OSwgIk1pY3Jvc29mdCBYLUJveCBwYWQg djIgKFVTKSIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZ UEVfUEFEIH0sCisJeyAweDA0NWUsIDB4MDI4NSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgKEphcGFu KSIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFE IH0sCisJeyAweDA0NWUsIDB4MDI4NywgIk1pY3Jvc29mdCBYYm94IENvbnRyb2xsZXIgUyIsIE1B UF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJ eyAweDA0NWUsIDB4MDcxOSwgIlhib3ggMzYwIFdpcmVsZXNzIFJlY2VpdmVyIiwgTUFQX0RQQURf VE9fQlVUVE9OUywKKwkJWFRZUEVfWEJPWDM2MFcsIFhDT05UUk9MTEVSX1RZUEVfTk9ORSB9LAor CXsgMHgwYzEyLCAweDg4MDksICJSZWRPY3RhbmUgWGJveCBEYW5jZSBQYWQiLCBNQVBfRFBBRF9U T19CVVRUT05TLAorCQlYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX0RBTkNFX1BBRCB9LAor CXsgMHgwNDRmLCAweDBmMDcsICJUaHJ1c3RtYXN0ZXIsIEluYy4gQ29udHJvbGxlciIsIE1BUF9E UEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAw eDA0NmQsIDB4YzI0MiwgIkxvZ2l0ZWNoIENoaWxsc3RyZWFtIENvbnRyb2xsZXIiLCBNQVBfRFBB RF9UT19BWEVTLAorCQlYVFlQRV9YQk9YMzYwLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsg MHgwNDZkLCAweGNhODQsICJMb2dpdGVjaCBYYm94IENvcmRsZXNzIENvbnRyb2xsZXIiLCBNQVBf RFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsg MHgwNDZkLCAweGNhODgsICJMb2dpdGVjaCBDb21wYWN0IENvbnRyb2xsZXIgZm9yIFhib3giLAor CQlNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAor CXsgMHgwNWZkLCAweDEwMDcsICJNYWQgQ2F0eiBDb250cm9sbGVyICh1bnZlcmlmaWVkKSIsIE1B UF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJ eyAweDA1ZmQsIDB4MTA3YSwgIkludGVyQWN0ICdQb3dlclBhZCBQcm8nIFgtQm94IHBhZCAoR2Vy bWFueSkiLAorCQlNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YLCBYQ09OVFJPTExFUl9UWVBF X1BBRCB9LAorCXsgMHgwNzM4LCAweDQ1MTYsICJNYWQgQ2F0eiBDb250cm9sIFBhZCIsIE1BUF9E UEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAw eDA3MzgsIDB4NDUyMiwgIk1hZCBDYXR6IEx1bWlDT04iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQ RV9YQk9YLAorCQlYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwNzM4LCAweDQ1MjYsICJN YWQgQ2F0eiBDb250cm9sIFBhZCBQcm8iLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9Y LCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwNzM4LCAweDQ1MzYsICJNYWQgQ2F0eiBN aWNyb0NPTiIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhDT05UUk9MTEVSX1RZ UEVfUEFEIH0sCisJeyAweDA3MzgsIDB4NDU0MCwgIk1hZCBDYXR6IEJlYXQgUGFkIiwgTUFQX0RQ QURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCwKKwkJWENPTlRST0xMRVJfVFlQRV9EQU5DRV9QQUQg fSwKKwl7IDB4MDczOCwgMHg0NTU2LCAiTWFkIENhdHogTHlueCBXaXJlbGVzcyBDb250cm9sbGVy IiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQg fSwKKwl7IDB4MDczOCwgMHg0NzE2LCAiTWFkIENhdHogV2lyZWQgWGJveCAzNjAgQ29udHJvbGxl ciIsCisJCU1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAsIFhDT05UUk9MTEVSX1RZUEVf UEFEIH0sCisJeyAweDA3MzgsIDB4NjA0MCwgIk1hZCBDYXR6IEJlYXQgUGFkIFBybyIsIE1BUF9E UEFEX1RPX0JVVFRPTlMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfREFOQ0VfUEFE IH0sCisJeyAweDBjMTIsIDB4ODgwMiwgIlplcm9wbHVzIFhib3ggQ29udHJvbGxlciIsIE1BUF9E UEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAw eDBjMTIsIDB4ODgwYSwgIlBlbGljYW4gRWNsaXBzZSBQTC0yMDIzIiwgTUFQX0RQQURfVE9fQVhF UywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGMxMiwgMHg4 ODEwLCAiWmVyb3BsdXMgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZ UEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGMxMiwgMHg5OTAyLCAiSEFN QSBWaWJyYVggLSAqRkFVTFRZIEhBUkRXQVJFKiIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBF X1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBlNGMsIDB4MTA5NywgIlJhZGlj YSBHYW1lc3RlciBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwg WENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGU0YywgMHgyMzkwLCAiUmFkaWNhIEdhbWVz IEp0ZWNoIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YLCBYQ09O VFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwZTZmLCAweDAwMDMsICJMb2dpYzMgRnJlZWJpcmQg d2lyZWxlc3MgQ29udHJvbGxlciIsCisJCU1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsIFhD T05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBlNmYsIDB4MDAwNSwgIkVjbGlwc2Ugd2lyZWxl c3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9M TEVSX1RZUEVfUEFEIH0sCisJeyAweDBlNmYsIDB4MDAwNiwgIkVkZ2Ugd2lyZWxlc3MgQ29udHJv bGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVf UEFEIH0sCisJeyAweDBlNmYsIDB4MDAwNiwgIlBlbGljYW4gJ1RTWicgV2lyZWQgWGJveCAzNjAg Q29udHJvbGxlciIsCisJCU1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAsIFhDT05UUk9M TEVSX1RZUEVfUEFEIH0sCisJeyAweDBlOGYsIDB4MDIwMSwgIlNtYXJ0Sm95IEZyYWcgWHBhZC9Q UzIgYWRhcHRvciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVS X1RZUEVfUEFEIH0sCisJeyAweDBmMzAsIDB4MDIwMiwgIkpveXRlY2ggQWR2YW5jZWQgQ29udHJv bGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVf UEFEIH0sCisJeyAweDBmMzAsIDB4ODg4OCwgIkJpZ0JlbiBYQk1pbmlQYWQgQ29udHJvbGxlciIs IE1BUF9EUEFEX1RPX0FYRVMsCisJCVhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0s CisJeyAweDEwMmMsIDB4ZmYwYywgIkpveXRlY2ggV2lyZWxlc3MgQWR2YW5jZWQgQ29udHJvbGxl ciIsCisJCU1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsIFhDT05UUk9MTEVSX1RZUEVfUEFE IH0sCisJeyAweDEyYWIsIDB4ODgwOSwgIlhib3ggRERSIGRhbmNlcGFkIiwgTUFQX0RQQURfVE9f QlVUVE9OUywgWFRZUEVfWEJPWCwKKwkJWENPTlRST0xMRVJfVFlQRV9EQU5DRV9QQUQgfSwKKwl7 IDB4MTQzMCwgMHg0NzQ4LCAiUmVkT2N0YW5lIEd1aXRhciBIZXJvIFgtcGxvcmVyIiwgTUFQX0RQ QURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWDM2MCwgWENPTlRST0xMRVJfVFlQRV9HVUlUQVIgfSwK Kwl7IDB4MTQzMCwgMHg4ODg4LCAiVFg2NTAwKyBEYW5jZSBQYWQgKGZpcnN0IGdlbmVyYXRpb24p IiwKKwkJTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9E QU5DRV9QQUQgfSwKKwl7IDB4MDQ1ZSwgMHgwMjhlLCAiTWljcm9zb2Z0IFgtQm94IDM2MCBwYWQi LCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQRV9YQk9YMzYwLCBYQ09OVFJPTExFUl9UWVBFX1BB RCB9LAorCXsgMHhmZmZmLCAweGZmZmYsICJDaGluZXNlLW1hZGUgWGJveCBDb250cm9sbGVyIiwg TUFQX0RQQURfVE9fQVhFUywKKwkJWFRZUEVfWEJPWCwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwK Kwl7IDB4MDAwMCwgMHgwMDAwLCAiR2VuZXJpYyBYLUJveCBwYWQiLCBNQVBfRFBBRF9VTktOT1dO LCBYVFlQRV9VTktOT1dOLAorCQlYQ09OVFJPTExFUl9UWVBFX1BBRCB9CiB9OwogCisKIC8qIGJ1 dHRvbnMgc2hhcmVkIHdpdGggeGJveCBhbmQgeGJveDM2MCAqLwogc3RhdGljIGNvbnN0IHNpZ25l ZCBzaG9ydCB4cGFkX2NvbW1vbl9idG5bXSA9IHsKIAlCVE5fQSwgQlROX0IsIEJUTl9YLCBCVE5f WSwJCQkvKiAiYW5hbG9nIiBidXR0b25zICovCkBAIC0xNjgsMTIgKzE2MSwxNCBAQAogCS0xCQkJ CS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1zdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0 IHhwYWQzNjBfYnRuW10gPSB7ICAvKiBidXR0b25zIGZvciB4MzYwIGNvbnRyb2xsZXIgKi8KKy8q IGJ1dHRvbnMgZm9yIHgzNjAgY29udHJvbGxlciAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9y dCB4cGFkMzYwX2J0bltdID0gewogCUJUTl9UTCwgQlROX1RSLAkJLyogQnV0dG9uIExCL1JCICov CiAJQlROX01PREUsCQkvKiBUaGUgYmlnIFggYnV0dG9uICovCiAJLTEKIH07CiAKKy8qIHN0aWNr cyBhbmQgdHJpZ2dlcnMgY29tbW9uIHRvIGFsbCBkZXZpY2VzICovCiBzdGF0aWMgY29uc3Qgc2ln bmVkIHNob3J0IHhwYWRfYWJzW10gPSB7CiAJQUJTX1gsIEFCU19ZLAkJLyogbGVmdCBzdGljayAq LwogCUFCU19SWCwgQUJTX1JZLAkJLyogcmlnaHQgc3RpY2sgKi8KQEAgLTE4Nyw2MSArMTgyLDM0 OSBAQAogCS0xCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLS8qIFhib3ggMzYwIGhh cyBhIHZlbmRvci1zcGVjaWZpYyBjbGFzcywgc28gd2UgY2Fubm90IG1hdGNoIGl0IHdpdGggb25s eQotICogVVNCX0lOVEVSRkFDRV9JTkZPIChhbHNvIHNwZWNpZmljYWxseSByZWZ1c2VkIGJ5IFVT QiBzdWJzeXN0ZW0pLCBzbyB3ZQotICogbWF0Y2ggYWdhaW5zdCB2ZW5kb3IgaWQgYXMgd2VsbC4g V2lyZWQgWGJveCAzNjAgZGV2aWNlcyBoYXZlIHByb3RvY29sIDEsCi0gKiB3aXJlbGVzcyBjb250 cm9sbGVycyBoYXZlIHByb3RvY29sIDEyOS4gKi8KLSNkZWZpbmUgWFBBRF9YQk9YMzYwX1ZFTkRP Ul9QUk9UT0NPTCh2ZW5kLHByKSBcCi0JLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRD SF9WRU5ET1IgfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLCBcCi0JLmlkVmVuZG9yID0g KHZlbmQpLCBcCi0JLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQywgXAot CS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSA5MywgXAotCS5iSW50ZXJmYWNlUHJvdG9jb2wgPSAocHIp Ci0jZGVmaW5lIFhQQURfWEJPWDM2MF9WRU5ET1IodmVuZCkgXAotCXsgWFBBRF9YQk9YMzYwX1ZF TkRPUl9QUk9UT0NPTCh2ZW5kLDEpIH0sIFwKLQl7IFhQQURfWEJPWDM2MF9WRU5ET1JfUFJPVE9D T0wodmVuZCwxMjkpIH0KLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHhwYWRfdGFibGUg W10gPSB7Ci0JeyBVU0JfSU5URVJGQUNFX0lORk8oJ1gnLCAnQicsIDApIH0sCS8qIFgtQm94IFVT Qi1JRiBub3QgYXBwcm92ZWQgY2xhc3MgKi8KLQlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MDQ1ZSks CQkvKiBNaWNyb3NvZnQgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCi0JWFBBRF9YQk9YMzYwX1ZF TkRPUigweDA0NmQpLAkJLyogTG9naXRlY2ggWC1Cb3ggMzYwIHN0eWxlIGNvbnRyb2xsZXJzICov Ci0JWFBBRF9YQk9YMzYwX1ZFTkRPUigweDA3MzgpLAkJLyogTWFkIENhdHogWC1Cb3ggMzYwIGNv bnRyb2xsZXJzICovCi0JWFBBRF9YQk9YMzYwX1ZFTkRPUigweDBlNmYpLAkJLyogMHgwZTZmIFgt Qm94IDM2MCBjb250cm9sbGVycyAqLwotCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgxNDMwKSwJCS8q IFJlZE9jdGFuZSBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rl dmljZV9pZCB4cGFkX3RhYmxlW10gPSB7CisJCS8qIFgtQm94IFVTQi1JRiBub3QgYXBwcm92ZWQg Y2xhc3MgKi8KKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTygnWCcsICdCJywgMCkgfSwKKwlYUEFEX1hC T1gzNjBfVkVORE9SKDB4MDQ1ZSksCS8qIE1pY3Jvc29mdCBYLUJveCAzNjAgY29udHJvbGxlcnMg Ki8KKwlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MDQ2ZCksCS8qIExvZ2l0ZWNoIDM2MCBzdHlsZSBj b250cm9sbGVycyAqLworCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwNzM4KSwJLyogTWFkIENhdHog WC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDBlNmYpLAkv KiAweDBlNmYgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigw eDE0MzApLAkvKiBSZWRPY3RhbmUgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCiAJeyB9CiB9Owog Ci1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHhwYWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9U QUJMRSh1c2IsIHhwYWRfdGFibGUpOwogCi1zdHJ1Y3QgdXNiX3hwYWQgewotCXN0cnVjdCBpbnB1 dF9kZXYgKmRldjsJCS8qIGlucHV0IGRldmljZSBpbnRlcmZhY2UgKi8KLQlzdHJ1Y3QgdXNiX2Rl dmljZSAqdWRldjsJLyogdXNiIGRldmljZSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHhw YWRfZHJpdmVyID0geworCS5uYW1lCQk9ICJ4cGFkIiwKKwkucHJvYmUJCT0geHBhZF9wcm9iZSwK KwkuZGlzY29ubmVjdAk9IHhwYWRfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSB4cGFkX3RhYmxl LAorfTsKIAotCWludCBwYWRfcHJlc2VudDsKIAotCXN0cnVjdCB1cmIgKmlycV9pbjsJCS8qIHVy YiBmb3IgaW50ZXJydXB0IGluIHJlcG9ydCAqLwotCXVuc2lnbmVkIGNoYXIgKmlkYXRhOwkJLyog aW5wdXQgZGF0YSAqLwotCWRtYV9hZGRyX3QgaWRhdGFfZG1hOworLyogV2lyZWxlc3MgMzYwIGRl dmljZSBpZGVudGlmaWNhdGlvbi4KKyAqCisgKiBXaGVuIGEgd2lyZWxlc3MgY29udHJvbGxlciBj b25uZWN0cywgdGhlIDJuZCBwYWNrZXQgaXQgc2VuZHMgU0VFTVMgdG8KKyAqIGJlIHNvbWUga2lu ZCBvZiB1bmlxdWUgY29udHJvbGxlciBpZGVudGlmaWNhdGlvbiBtZXNzYWdlLiBVc2luZyB1c2Jt b24KKyAqIChzZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dCksIEkgdHJpZWQgNCBnYW1l cGFkcyBhbmQgYSBndWl0YXIsIGFuZAorICogSSBjb2xsZWN0ZWQgdGhlIGZvbGxvd2luZyA1IElE IHBhY2tldHMgZnJvbSB0aGUgNSBkZXZpY2VzOgorICoKKyAqIDAwMGYwMGYwIDAwY2NmZDI3IDAw NjBlMjI2IDYzNzAwMDEwIDEzZTMyMDFkIDMwMDM0MDAxIDUwMDFmZmZmIGZmCisgKiAwMDBmMDBm MCBmMGNjZmQyNyAwMDYwZDhjNCBlOTYwMDAwOSAxM2U3MjAxZCAzMDAzNDAwMSA1MDAxZmZmZiBm ZgorICogMDAwZjAwZjAgMDBjY2ZkMjcgMDA2MDU3OGIgODJmMDAwMTAgMTNlMzIwMWQgMzAwMzQw MDEgNTAwMWZmZmYgZmYKKyAqIDAwMGYwMGYwIGYwY2NmZDI3IDAwNjBkYTFjIGIxNTAwMDA5IDEz ZTcyMDFkIDMwMDM0MDAxIDUwMDFmZmZmIGZmCisgKiAwMDBmMDBmMCBmMGNjZmQyNyAwMDYwMDJk MSA3MWQxMDAwMCAxM2UzMjAxZCAzMDAzNDQzMCA1MTA3ZmZmZiBmZgorICoKKyAqIEZyb20gdGhp cyB0cmFjZSBkYXRhLCBJIGNvbmNvY3RlZCB0aGUgZm9sbG93aW5nIChwb3RlbnRpYWxseSBpbmNv cnJlY3QpCisgKiBzY2hlbWUgZm9yIGRldGVjdGluZyB0eXBlIGFuZCB1bmlxdWUgSUQ6CisgKgor ICogKioqKioqKiogeHgqKioqeHggeHh4eHh4eHggeHh4eCoqeHggKip4eCoqKiogKioqKnR0dHQg dHR0dCoqKiogKioKKyAqICAgICAgICAgICAgICAgIHwgIHVuaXF1ZSBpZCB8ICAgICAgICAgICAg ICAgICAgICB8ICB0eXBlIHwKKyAqCisgKiBJdCBhcHBlYXJzIHRoYXQgc29tZSBvZiB0aGUgYnl0 ZXMgaW4gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIG1lc3NhZ2UsIG5vdGVkCisgKiBhYm92ZSBhcyAi dW5pcXVlIGlkIiBhcmUgc29tZSBzb3J0IG9mIHNlcmlhbCBudW1iZXIsIHRob3VnaCBJIGNhbm5v dCB3b3JrCisgKiBvdXQgYW55IGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gdGhlc2UgYnl0ZXMgYW5k IHRoZSBzZXJpYWwgbnVtYmVyIHByaW50ZWQKKyAqIHVuZGVyIHRoZSBiYXR0ZXJ5IHBhY2suIE1h bnkgb2YgdGhlIGJ5dGVzIGluIHRoaXMgcG9zc2libHkgdW5pcXVlIGZpZWxkCisgKiBhcmUgbm90 IHVuaXF1ZSBhY3Jvc3MgbXkgY29udHJvbGxlcnMsIGFuZCBtYXkgbm90IGluIGZhY3QgYmUgcGFy dCBvZiB0aGUKKyAqIGNvbnRyb2xsZXIncyB1bmlxdWUgaWRlbnRpZmljYXRpb24sIGJ1dCBJIGZp Z3VyZWQgaXQgd2FzIGJldHRlciB0byBoYXZlCisgKiBleHRyYSBieXRlcyBvbiBlaXRoZXIgZW5k IG9mIHRoZSB1bmlxdWUgYnl0ZSBzdHJpbmcgaW5zdGVhZCBvZiB0aGUKKyAqIGFsdGVybmF0aXZl LiBJbiBhZGRpdGlvbiwgdGhlIHBhY2tldCBhcHBlYXJzIHRvIGluZGljYXRlIHRoZSB0eXBlIG9m CisgKiB0aGUgY29udHJvbGxlciB0b3dhcmQgdGhlIGVuZDogdGhlIHBhZHMgYWxsIHNlbmQgNDAw MSA1MDAxLCB3aGlsZSB0aGUKKyAqIGd1aXRhciBzZW5kcyA0NDMwIDUxMDcuCisgKgorICogRnVy dGhlciB0ZXN0aW5nIG92ZXIgYSB3aWRlciB2YXJpZXR5IG9mIGRldmljZXMgaXMgcHJvYmFibHkg bmVlZGVkIHRvCisgKiBkZXRlcm1pbmUgaWYgY2hhbmdlcyBuZWVkIHRvIGJlIG1hZGUgdG8gdGhp cyBzY2hlbWUuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdzM2MF9pZCB7CisJdW5zaWduZWQg Y2hhciBpZF9ieXRlc1s0XTsKKwl1OCBjb250cm9sbGVyX3R5cGU7Cit9IHczNjBfaWRbXSA9IHsK Kwl7IHsweDQwLCAweDAxLCAweDUwLCAweDAxfSwgWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7 IHsweDQ0LCAweDMwLCAweDUxLCAweDA3fSwgWENPTlRST0xMRVJfVFlQRV9HVUlUQVIgfSwKKwl7 IHsweDAwLCAweDAwLCAweDAwLCAweDAwfSwgWENPTlRST0xMRVJfVFlQRV9OT05FIH0KK307CiAK LQlzdHJ1Y3QgdXJiICpidWxrX291dDsKLQl1bnNpZ25lZCBjaGFyICpiZGF0YTsKIAotI2lmIGRl ZmluZWQoQ09ORklHX0pPWVNUSUNLX1hQQURfRkYpIHx8IGRlZmluZWQoQ09ORklHX0pPWVNUSUNL X1hQQURfTEVEUykKLQlzdHJ1Y3QgdXJiICppcnFfb3V0OwkJLyogdXJiIGZvciBpbnRlcnJ1cHQg b3V0IHJlcG9ydCAqLwotCXVuc2lnbmVkIGNoYXIgKm9kYXRhOwkJLyogb3V0cHV0IGRhdGEgKi8K LQlkbWFfYWRkcl90IG9kYXRhX2RtYTsKLQlzdHJ1Y3QgbXV0ZXggb2RhdGFfbXV0ZXg7Ci0jZW5k aWYKKy8qIFRoZSBkZWFkIHpvbmUgYW5kIHN0aWNrIGxpbWl0IGJvdGggYWZmZWN0IHRoZSBiZWhh dmlvciBvZiB0aGUgY29ycmVzcG9uZGluZworICogYW5hbG9nIHN0aWNrLCBzaW5jZSB0aGUgb3V0 cHV0IHZhbHVlcyByZXBvcnRlZCBmb3IgdGhlIHN0aWNrIGlucHV0cyB3aWxsCisgKiBiZSBzY2Fs ZWQgb250byBbMCwzMjc2N10uIEl0IGlzIHRodXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRo ZSBkZWFkIHpvbmUKKyAqIGlzIG5ldmVyIGxhcmdlciB0aGFuIHRoZSBzdGljayBsaW1pdC4gSW4g ZmFjdCwgYSBtaW5pbWFsIGFtb3VudCBvZiBzdGljaworICogdHJhdmVsIHNwYWNlICgxMDI0KSBp cyBtYWludGFpbmVkIGJldHdlZW4gdGhlIHR3byB2YWx1ZXMuIEluIHByYWN0aWNlLAorICogaG93 ZXZlciwgdGhlIHN0aWNrIGxpbWl0IHNob3VsZCBhbHdheXMgYmUgbXVjaCBncmVhdGVyIHRoYW4g dGhlIGRlYWQgem9uZS4KKyAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9M RURTKQotCXN0cnVjdCB4cGFkX2xlZCAqbGVkOwotI2VuZGlmCitzdGF0aWMgdm9pZCBzZXRfZGVh ZF96b25lKHVuc2lnbmVkIGludCBuZXdfc2l6ZSwgdW5zaWduZWQgaW50ICpkeiwKKwkJdW5zaWdu ZWQgaW50IHN0aWNrX2xpbWl0KQoreworCSpkeiA9IG1pbihuZXdfc2l6ZSwgc3RpY2tfbGltaXQg LSAxMDI0KTsKK30KIAotCWNoYXIgcGh5c1s2NF07CQkJLyogcGh5c2ljYWwgZGV2aWNlIHBhdGgg Ki8KK3N0YXRpYyB2b2lkIHNldF9zdGlja19saW1pdCh1bnNpZ25lZCBpbnQgbmV3X3NpemUsIHVu c2lnbmVkIGludCAqc2wsCisJCXVuc2lnbmVkIGludCBkZWFkX3pvbmUpCit7CisJKnNsID0gbWlu KG1heChuZXdfc2l6ZSwgZGVhZF96b25lICsgMTAyNCksIDMyNzY3dSk7Cit9CisKKworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisvKgorICogU3lzRnMgaW50ZXJmYWNlIGZ1bmN0aW9ucworICoKKyAq IFdlIHVzZSBjb21tb24gZnVuY3Rpb25zLCB3aGVyZSBwb3NzaWJsZSwgdG8gaW1wbGVtZW50IHRo ZSBzaG93L3N0b3JlCisgKiByb3V0aW5lcy4gVGhpcyBkZXNpZ24gc2F2ZXMgb24gY29kZSBhbmQg cmVkdWNlcyB0aGUgYnVyZGVuIG9mIGFkZGluZyB0byBvcgorICogY2hhbmdpbmcgdGhlIGludGVy ZmFjZS4KKyAqLworCisKK3N0YXRpYyBzc2l6ZV90IHhwYWRfc2hvd191aW50KHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sK KwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB0b194cGFkKGRldik7CisJdW5zaWduZWQgaW50IHZh bHVlOworCWlmIChhdHRyID09ICZkZXZfYXR0cl9sZWZ0X2RlYWRfem9uZSkKKwkJdmFsdWUgPSB4 cGFkLT5sZWZ0X2RlYWRfem9uZTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9yaWdodF9k ZWFkX3pvbmUpCisJCXZhbHVlID0geHBhZC0+cmlnaHRfZGVhZF96b25lOworCWVsc2UgaWYgKGF0 dHIgPT0gJmRldl9hdHRyX2xlZnRfc3RpY2tfbGltaXQpCisJCXZhbHVlID0geHBhZC0+bGVmdF9z dGlja19saW1pdDsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9yaWdodF9zdGlja19saW1p dCkKKwkJdmFsdWUgPSB4cGFkLT5yaWdodF9zdGlja19saW1pdDsKKwllbHNlCisJCXJldHVybiAt RUlPOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCB2YWx1ZSk7Cit9 CisKKworc3RhdGljIHNzaXplX3QgeHBhZF9zdG9yZV91aW50KHN0cnVjdCBkZXZpY2UgKmRldiwK KwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90 IGNvdW50KQoreworCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IHRvX3hwYWQoZGV2KTsKKwl1bnNp Z25lZCBpbnQgbmV3X3ZhbHVlOworCWlmIChzc2NhbmYoYnVmLCAiJXUiLCAmbmV3X3ZhbHVlKSAh PSAxKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChhdHRyID09ICZkZXZfYXR0cl9sZWZ0X2RlYWRf em9uZSkKKwkJc2V0X2RlYWRfem9uZShuZXdfdmFsdWUsICZ4cGFkLT5sZWZ0X2RlYWRfem9uZSwK KwkJCQl4cGFkLT5sZWZ0X3N0aWNrX2xpbWl0KTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0 cl9yaWdodF9kZWFkX3pvbmUpCisJCXNldF9kZWFkX3pvbmUobmV3X3ZhbHVlLCAmeHBhZC0+cmln aHRfZGVhZF96b25lLAorCQkJCXhwYWQtPnJpZ2h0X3N0aWNrX2xpbWl0KTsKKwllbHNlIGlmIChh dHRyID09ICZkZXZfYXR0cl9sZWZ0X3N0aWNrX2xpbWl0KQorCQlzZXRfc3RpY2tfbGltaXQobmV3 X3ZhbHVlLCAmeHBhZC0+bGVmdF9zdGlja19saW1pdCwKKwkJCQl4cGFkLT5sZWZ0X2RlYWRfem9u ZSk7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcmlnaHRfc3RpY2tfbGltaXQpCisJCXNl dF9zdGlja19saW1pdChuZXdfdmFsdWUsICZ4cGFkLT5yaWdodF9zdGlja19saW1pdCwKKwkJCQl4 cGFkLT5yaWdodF9kZWFkX3pvbmUpOworCWVsc2UKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIHN0 cm5sZW4oYnVmLCBQQUdFX1NJWkUpOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHhwYWRfc3RvcmVf Ym9vbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhw YWQgPSB0b194cGFkKGRldik7CisJaW50IG5ld3ZhbHVlOworCWlmIChzc2NhbmYoYnVmLCAiJWQi LCAmbmV3dmFsdWUpICE9IDEpCisJCXJldHVybiAtRUlPOworCQorCWlmIChhdHRyID09ICZkZXZf YXR0cl9ydW1ibGVfZW5hYmxlKQorCQl4cGFkLT5ydW1ibGVfZW5hYmxlID0gKG5ld3ZhbHVlKSA/ IDEgOiAwOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2xlZnRfdHJpZ2dlcl9mdWxsX2F4 aXMpCisJCXhwYWQtPmxlZnRfdHJpZ2dlcl9mdWxsX2F4aXMgPSAobmV3dmFsdWUpID8gMSA6IDA7 CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcmlnaHRfdHJpZ2dlcl9mdWxsX2F4aXMpCisJ CXhwYWQtPnJpZ2h0X3RyaWdnZXJfZnVsbF9heGlzID0gKG5ld3ZhbHVlKSA/IDEgOiAwOworCXJl dHVybiBzdHJubGVuKGJ1ZiwgUEFHRV9TSVpFKTsKK30KKworCisvKiByZWFkLW9ubHkgYXR0cmli dXRlcyBzaGFyZSBhIGNvbW1vbiBzdG9yZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZXJyb3Ig Ki8KK3N0YXRpYyBzc2l6ZV90IHhwYWRfc3RvcmVfcm8oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291 bnQpCit7CisJcmV0dXJuIC1FSU87Cit9CisKKworc3RhdGljIHNzaXplX3QgeHBhZF9zaG93X2lu dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQlj aGFyICpidWYpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gdG9feHBhZChkZXYpOworCWlu dCB2YWx1ZTsKKwlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcnVtYmxlX2VuYWJsZSkKKwkJdmFsdWUg PSB4cGFkLT5ydW1ibGVfZW5hYmxlOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2NvbnRy b2xsZXJfbnVtYmVyKQorCQl2YWx1ZSA9IHhwYWQtPmNvbnRyb2xsZXJfbnVtYmVyOworCWVsc2Ug aWYgKGF0dHIgPT0gJmRldl9hdHRyX2NvbnRyb2xsZXJfcHJlc2VudCkKKwkJdmFsdWUgPSB4cGFk LT5jb250cm9sbGVyX3ByZXNlbnQ7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfY29udHJv bGxlcl90eXBlKQorCQl2YWx1ZSA9IHhwYWQtPmNvbnRyb2xsZXJfdHlwZTsKKwllbHNlIGlmIChh dHRyID09ICZkZXZfYXR0cl9sZWZ0X3RyaWdnZXJfZnVsbF9heGlzKQorCQl2YWx1ZSA9IHhwYWQt PmxlZnRfdHJpZ2dlcl9mdWxsX2F4aXM7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcmln aHRfdHJpZ2dlcl9mdWxsX2F4aXMpCisJCXZhbHVlID0geHBhZC0+cmlnaHRfdHJpZ2dlcl9mdWxs X2F4aXM7CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdF X1NJWkUsICIlZFxuIiwgdmFsdWUpOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHhwYWRfc2hvd19p ZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBj aGFyICpidWYpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gdG9feHBhZChkZXYpOworCXJl dHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCB4cGFkLT5jb250cm9sbGVyX3Vu aXF1ZV9pZCk7Cit9CisKKworLyogZW5kIG9mIHN5c2ZzIGludGVyZmFjZSAqLworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworCisvKiBJbnB1dCBzZWN0aW9uICovCisKKy8qCXhwYWRfaW5pdF9jb250 cm9sbGVyCisgKgorICoJUGVyZm9ybXMgY29udHJvbGxlciBzZXR1cCBiYXNlZCBvbiBjb250cm9s bGVyIHR5cGUuCisgKgorICoJTk9URTogeHBhZC0+Y29udHJvbGxlcl9kYXRhLT5jb250cm9sbGVy X3R5cGUgbmVlZHMgdG8gYmUgc2V0IEJFRk9SRQorICoJY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQor ICovCisKK3N0YXRpYyB2b2lkIHhwYWRfaW5pdF9jb250cm9sbGVyKHN0cnVjdCB1c2JfeHBhZCAq eHBhZCkKK3sKKwlzZXRfc3RpY2tfbGltaXQoWFNUSUNLX0xJTUlUX0RFRkFVTFQsICZ4cGFkLT5s ZWZ0X3N0aWNrX2xpbWl0LAorCQkJeHBhZC0+bGVmdF9kZWFkX3pvbmUpOworCXNldF9zdGlja19s aW1pdChYU1RJQ0tfTElNSVRfREVGQVVMVCwgJnhwYWQtPnJpZ2h0X3N0aWNrX2xpbWl0LAorCQkJ eHBhZC0+cmlnaHRfZGVhZF96b25lKTsKKwlzZXRfZGVhZF96b25lKFhERUFEX1pPTkVfREVGQVVM VCwgJnhwYWQtPmxlZnRfZGVhZF96b25lLAorCQkJeHBhZC0+bGVmdF9zdGlja19saW1pdCk7CisJ c2V0X2RlYWRfem9uZShYREVBRF9aT05FX0RFRkFVTFQsICZ4cGFkLT5yaWdodF9kZWFkX3pvbmUs CisJCQl4cGFkLT5yaWdodF9zdGlja19saW1pdCk7CisJeHBhZC0+bGVmdF90cmlnZ2VyX2Z1bGxf YXhpcyA9IFhGVUxMX1RSSUdHRVJfQVhJU19ERUZBVUxUOworCXhwYWQtPnJpZ2h0X3RyaWdnZXJf ZnVsbF9heGlzID0gWEZVTExfVFJJR0dFUl9BWElTX0RFRkFVTFQ7CisKKwlpZiAoeHBhZC0+Y29u dHJvbGxlcl90eXBlID09IFhDT05UUk9MTEVSX1RZUEVfR1VJVEFSKQorCQl4cGFkLT5ydW1ibGVf ZW5hYmxlID0gMDsKKwllbHNlIGlmICh4cGFkLT5jb250cm9sbGVyX3R5cGUgPT0gWENPTlRST0xM RVJfVFlQRV9EQU5DRV9QQUQpCisJCXhwYWQtPnJ1bWJsZV9lbmFibGUgPSAwOworCWVsc2UKKwkJ eHBhZC0+cnVtYmxlX2VuYWJsZSA9IDE7Cit9CisKKworLyoKKyAqCXhwYWRfcHJvY2Vzc19zdGlj a3MKKyAqCisgKglIYW5kbGVzIHN0aWNrIGlucHV0LCBhY2NvdW50aW5nIGZvciBkZWFkIHpvbmVz IGFuZCBzcXVhcmUgYXhlcy4gQmFzZWQKKyAqCW9uIHRoZSBvcmlnaW5hbCBoYW5kbGVycyBmb3Ig dGhlIFhib3ggYW5kIFhib3ggMzYwIGluCisgKgl4cGFkX3Byb2Nlc3NfcGFja2V0IGFuZCB4cGFk MzYwX3Byb2Nlc3NfcGFja2V0LCBidXQgdW5pZmllZCB0byBhdm9pZAorICoJZHVwbGljYXRpb24u CisgKgorICoJV2hlbmV2ZXIgYSBkZWFkIHpvbmUgaXMgdXNlZCwgZWFjaCBheGlzIGlzIHNjYWxl ZCBzbyB0aGF0IG1vdmluZyB0aGUKKyAqCXN0aWNrIHNsaWdodGx5IG91dCBvZiB0aGUgZGVhZCB6 b25lIHJhbmdlIHJlc3VsdHMgaW4gYSBsb3cgYXhpcworICoJdmFsdWUgaW4ganN0ZXN0KDEpLCB3 aGlsZSBtb3ZpbmcgdGhlIHN0aWNrIHRvIHRoZSBtYXhpbXVtIHBvc2l0aW9uCisgKglhbG9uZyBh bnkgYXhpcyBzdGlsbCByZXN1bHRzIGluIDMyNzY3LgorICoKKyAqCUluIG9yZGVyIHRvIHByb3Zp ZGUgdGhlIGFiaWxpdHkgdG8gbWFwIGlucHV0cyB0byBhIHNxdWFyZSBheGlzICh1c2VkCisgKgli eSBvbGRlciBnYW1lcyksIHRoZSBsZWZ0X3N0aWNrX2xpbWl0IGFuZCByaWdodF9zdGlja19saW1p dCBjYW4gYmUKKyAqCXNldC4gVGhlc2UgbGltaXRzIHNwZWNpZnkgYXQgd2hhdCBwb2ludCBpbiB0 aGUgcmF3IGlucHV0IGNvb3JkaW5hdGVzCisgKglhbiBheGlzIGlzIHJlcG9ydGVkIHRvIGJlIGF0 IG1heGltdW0gdmFsdWUgKDMyNzY3IG9yIC0zMjc2NykuCisgKgorICoJQm90aCB0aGUgZGVhZCB6 b25lIGFuZCBzdGljayBsaW1pdCBhbGdvcml0aG1zIGFyZSBpbXBsZW1lbnRlZAorICoJdG9nZXRo ZXIgYXMgYSBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uIGZyb20gImVmZmVjdGl2ZSBjb29yZGlu YXRlcyIKKyAqCW9udG8gdGhlIG91dHB1dCBjb29yZGluYXRlcyAod2hpY2ggaGF2ZSBhYnNvbHV0 ZSB2YWx1ZXMgZnJvbSAwIHRvCisgKgkzMjc2NyBhbmQgYXJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZl IGJhc2VkIG9uIGRpcmVjdGlvbikuIEVmZmVjdGl2ZQorICoJY29vcmRpbmF0ZXMgYXJlIGRlZmlu ZWQgYXMgdGhvc2UgaW5wdXQgdmFsdWVzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbgorICoJdGhlIGRl YWQgem9uZSBidXQgbGVzcyB0aGFuIHRoZSBzdGljayBsaW1pdCBvbiB0aGUgYXhpcyBpbiBxdWVz dGlvbi4KKyAqCisgKglEQU5HRVI6IEFsbCBkZW5vbWluYXRvciB2YWx1ZXMgaW4gZGl2aXNpb24g b3BlcmF0aW9ucyBNVVNUIGJlIGNoZWNrZWQKKyAqCWZvciBub24temVybyBjb25kaXRpb24uIERp dmlkaW5nIGJ5IHplcm8gaW5zaWRlIHRoZSBrZXJuZWwgY2FuIGNhdXNlCisgKglhIHN5c3RlbSBk ZWFkbG9jay4KKyAqLworCitzdGF0aWMgdm9pZCB4cGFkX3Byb2Nlc3Nfc3RpY2tzKHN0cnVjdCB1 c2JfeHBhZCAqeHBhZCwgX19sZTE2ICpkYXRhKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9 IHhwYWQtPmRldjsKKwlzMTYgY29vcmRzWzRdOyAgICAvKiB4LCB5LCByeCwgcnkgKi8KKwlpbnQg YzsKKwlpbnQgcmFuZ2U7CisJaW50IGFic19tYWduaXR1ZGUsIGFkanVzdGVkX21hZ25pdHVkZSwg ZGlmZmVyZW5jZSwgc2NhbGVfZnJhY3Rpb247CisJaW50IGRlYWRfem9uZVsyXSwgc3RpY2tfbGlt aXRbMl07CisKKwlkZWFkX3pvbmVbMF0gPSB4cGFkLT5sZWZ0X2RlYWRfem9uZTsKKwlkZWFkX3pv bmVbMV0gPSB4cGFkLT5yaWdodF9kZWFkX3pvbmU7CisJc3RpY2tfbGltaXRbMF0gPSB4cGFkLT5s ZWZ0X3N0aWNrX2xpbWl0OworCXN0aWNrX2xpbWl0WzFdID0geHBhZC0+cmlnaHRfc3RpY2tfbGlt aXQ7CisKKwkvKiBTdGljayBpbnB1dCBkYXRhIHN0YXJ0cyBhdCBieXRlIDEyICgxNi1iaXQgd29y ZCA2KSBmb3IgdGhlIHJlZ3VsYXIKKwkgKiBYYm94IGNvbnRyb2xsZXIsIGJ5dGUgNiAoMTYtYml0 IHdvcmQgMykgZm9yIHRoZSAzNjAgY29udHJvbGxlcnMgKi8KKwlkYXRhICs9ICh4cGFkLT54dHlw ZSA9PSBYVFlQRV9YQk9YKSA/IDYgOiAzOworCisJY29vcmRzWzBdID0gbGUxNl90b19jcHVwKGRh dGEpOworCWNvb3Jkc1sxXSA9IH5sZTE2X3RvX2NwdXAoZGF0YSArIDEpOworCWNvb3Jkc1syXSA9 IGxlMTZfdG9fY3B1cChkYXRhICsgMik7CisJY29vcmRzWzNdID0gfmxlMTZfdG9fY3B1cChkYXRh ICsgMyk7CisKKwkvKiBBZGp1c3RtZW50IGZvciBkZWFkIHpvbmUgYW5kIHNxdWFyZSBheGlzICov CisJZm9yIChjID0gMDsgYyA8IDQ7IGMrKykgeworCQlhYnNfbWFnbml0dWRlID0gYWJzKGNvb3Jk c1tjXSk7CisJCWFkanVzdGVkX21hZ25pdHVkZSA9IGFic19tYWduaXR1ZGU7CisKKwkJcmFuZ2Ug PSAoc3RpY2tfbGltaXRbYy8yXSAtIGRlYWRfem9uZVtjLzJdKTsKKworCQlpZiAoYWJzX21hZ25p dHVkZSA+PSBzdGlja19saW1pdFtjLzJdKSB7CisJCQlhZGp1c3RlZF9tYWduaXR1ZGUgPSAzMjc2 NzsKKwkJfSBlbHNlIGlmIChhYnNfbWFnbml0dWRlIDw9IGRlYWRfem9uZVtjLzJdKSB7CisJCQlh ZGp1c3RlZF9tYWduaXR1ZGUgPSAwOworCQl9IGVsc2UgaWYgKHJhbmdlID4gMCkgeworCQkJZGlm ZmVyZW5jZSA9IDMyNzY3IC0gcmFuZ2U7CisJCQlpZiAoZGlmZmVyZW5jZSkgeworCQkJCS8qIERJ VklTSU9OOiBkaWZmZXJlbmNlIG5vbi16ZXJvICovCisJCQkJc2NhbGVfZnJhY3Rpb24gPSByYW5n ZSAvIGRpZmZlcmVuY2U7CisJCQkJYWRqdXN0ZWRfbWFnbml0dWRlID0KKwkJCQkJYWJzX21hZ25p dHVkZSAtIGRlYWRfem9uZVtjLzJdOworCisJCQkJLyogQXBwcm94aW1hdGUgZmxvYXRpbmctcG9p bnQgZGl2aXNpb24gd2l0aCBhCisJCQkJICogImNhdGNoLXVwIiBzY2FsaW5nIGFsZ29yaXRobSB0 aGF0IGFkZHMgYmFjaworCQkJCSAqIHRvIHRoZSBhZGp1c3RlZF9tYWduaXR1ZGUgYmFzZWQgb24g ZGlzdGFuY2UKKwkJCQkgKiBmcm9tIHRoZSBvcmlnaW4gKDAgaW4gYWRqdXN0ZWQgY29vcmRpbmF0 ZXMpLgorCQkJCSAqIElmIHRoZSByYW5nZSAvIGRpZmZlcmVuY2UgaXMgYXQgbGVhc3QgMSwKKwkJ CQkgKiB0aGVuIDEgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGFkanVzdGVkCisJCQkJICogbWFn bml0dWRlIGZvciBldmVyeSBzY2FsZV9mcmFjdGlvbiB1bml0cworCQkJCSAqIGZyb20gdGhlIG9y aWdpbi4gSWYgdGhlIHJhbmdlIC8gZGlmZmVyZW5jZQorCQkJCSAqIGlzIGxlc3MgdGhhbiAxICgw IGluIGludGVnZXIgZGl2aXNpb24pLAorCQkJCSAqIHRoZW4gZGl2aWRlIHRoZSBkaWZmZXJlbmNl IGJ5IHRoZSByYW5nZSB0bworCQkJCSAqIG9idGFpbiB0aGUgbnVtYmVyIG9mIHVuaXRzIHRvIGFk ZCBwZXIgdW5pdAorCQkJCSAqIGZyb20gdGhlIGFkanVzdGVkIG9yaWdpbi4KKwkJCQkgKi8KKwkJ CQlpZiAoc2NhbGVfZnJhY3Rpb24pIHsKKwkJCQkJLyogRElWSVNJT046IHNjYWxlX2ZyYWN0aW9u IG5vbi16ZXJvICovCisJCQkJCWFkanVzdGVkX21hZ25pdHVkZSArPQorCQkJCQkJYWRqdXN0ZWRf bWFnbml0dWRlCisJCQkJCQkvIHNjYWxlX2ZyYWN0aW9uOworCQkJCX0gZWxzZSB7CisJCQkJCS8q IERJVklTSU9OOiByYW5nZSBub24temVybyAqLworCQkJCQlzY2FsZV9mcmFjdGlvbiA9IGRpZmZl cmVuY2UgLyByYW5nZTsKKwkJCQkJYWRqdXN0ZWRfbWFnbml0dWRlICs9CisJCQkJCQlhZGp1c3Rl ZF9tYWduaXR1ZGUKKwkJCQkJCSogc2NhbGVfZnJhY3Rpb247CisJCQkJfQorCQkJCWlmIChhZGp1 c3RlZF9tYWduaXR1ZGUgPiAzMjc2NykKKwkJCQkJYWRqdXN0ZWRfbWFnbml0dWRlID0gMzI3Njc7 CisJCQl9CisJCX0KKwkJY29vcmRzW2NdID0gKGNvb3Jkc1tjXSA8IDApID8KKwkJCQktYWRqdXN0 ZWRfbWFnbml0dWRlIDogYWRqdXN0ZWRfbWFnbml0dWRlOworCX0KKworCWlucHV0X3JlcG9ydF9h YnMoZGV2LCBBQlNfWCwgY29vcmRzWzBdKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ks IGNvb3Jkc1sxXSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWCwgY29vcmRzWzJdKTsK KwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JZLCBjb29yZHNbM10pOworfQogCi0JaW50IGRw YWRfbWFwcGluZzsJCS8qIG1hcCBkLXBhZCB0byBidXR0b25zIG9yIHRvIGF4ZXMgKi8KLQlpbnQg eHR5cGU7CQkJLyogdHlwZSBvZiB4Ym94IGRldmljZSAqLwotfTsKIAogLyoKICAqCXhwYWRfcHJv Y2Vzc19wYWNrZXQKQEAgLTI1MywyMSArNTM2LDEzIEBACiAgKgkgaHR0cDovL2V1Yy5qcC9wZXJp cGhzL3hib3gtY29udHJvbGxlci5qYS5odG1sCiAgKi8KIAotc3RhdGljIHZvaWQgeHBhZF9wcm9j ZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIHUxNiBjbWQsIHVuc2lnbmVkIGNoYXIg KmRhdGEpCitzdGF0aWMgdm9pZCB4cGFkX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCB1c2JfeHBhZCAq eHBhZCwgdTE2IGNtZCwKKwkJdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKIAlzdHJ1Y3QgaW5wdXRf ZGV2ICpkZXYgPSB4cGFkLT5kZXY7CiAKLQkvKiBsZWZ0IHN0aWNrICovCi0JaW5wdXRfcmVwb3J0 X2FicyhkZXYsIEFCU19YLAotCQkJIChfX3MxNikgbGUxNl90b19jcHVwKChfX2xlMTYgKikoZGF0 YSArIDEyKSkpOwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwKLQkJCSB+KF9fczE2KSBs ZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTQpKSk7Ci0KLQkvKiByaWdodCBzdGljayAq LwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgsCi0JCQkgKF9fczE2KSBsZTE2X3RvX2Nw dXAoKF9fbGUxNiAqKShkYXRhICsgMTYpKSk7Ci0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19S WSwKLQkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTgpKSk7CisJ LyogbGVmdCBhbmQgcmlnaHQgc3RpY2tzICovCisJeHBhZF9wcm9jZXNzX3N0aWNrcyh4cGFkLCAo X19sZTE2ICopIGRhdGEpOwogCiAJLyogdHJpZ2dlcnMgbGVmdC9yaWdodCAqLwogCWlucHV0X3Jl cG9ydF9hYnMoZGV2LCBBQlNfWiwgZGF0YVsxMF0pOwpAQCAtMzA1LDYgKzU4MCw3IEBACiAJaW5w dXRfc3luYyhkZXYpOwogfQogCisKIC8qCiAgKgl4cGFkMzYwX3Byb2Nlc3NfcGFja2V0CiAgKgpA QCAtMzE1LDEwICs1OTEsMTEgQEAKICAqCQlodHRwOi8vd3d3LmZyZWU2MC5vcmcvd2lraS9HYW1l cGFkCiAgKi8KIAotc3RhdGljIHZvaWQgeHBhZDM2MF9wcm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNi X3hwYWQgKnhwYWQsCi0JCQkJICAgdTE2IGNtZCwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3N0YXRp YyB2b2lkIHhwYWQzNjBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHVzYl94cGFkICp4cGFkLCB1MTYg Y21kLAorCQl1bnNpZ25lZCBjaGFyICpkYXRhKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9 IHhwYWQtPmRldjsKKwlpbnQgdHJpZ2dlcjsKIAogCS8qIGRpZ2l0YWwgcGFkICovCiAJaWYgKHhw YWQtPmRwYWRfbWFwcGluZyA9PSBNQVBfRFBBRF9UT19BWEVTKSB7CkBAIC0zNTEsMjUgKzYyOCw3 OCBAQAogCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVFIsCWRhdGFbM10gJiAweDAyKTsKIAlp bnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01PREUsCWRhdGFbM10gJiAweDA0KTsKIAotCS8qIGxl ZnQgc3RpY2sgKi8KLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsCi0JCQkgKF9fczE2KSBs ZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgNikpKTsKLQlpbnB1dF9yZXBvcnRfYWJzKGRl diwgQUJTX1ksCi0JCQkgfihfX3MxNikgbGUxNl90b19jcHVwKChfX2xlMTYgKikoZGF0YSArIDgp KSk7Ci0KLQkvKiByaWdodCBzdGljayAqLwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgs Ci0JCQkgKF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTApKSk7Ci0JaW5w dXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWSwKLQkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9f bGUxNiAqKShkYXRhICsgMTIpKSk7CisJLyogbGVmdCBhbmQgcmlnaHQgc3RpY2tzICovCisJeHBh ZF9wcm9jZXNzX3N0aWNrcyh4cGFkLCAoX19sZTE2ICopIGRhdGEpOwogCi0JLyogdHJpZ2dlcnMg bGVmdC9yaWdodCAqLwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWiwgZGF0YVs0XSk7Ci0J aW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgZGF0YVs1XSk7CisJLyogdHJpZ2dlcnMgbGVm dC9yaWdodDogd2hlbiBmdWxsX2F4aXMgaXMgbm90IGVuYWJsZWQsIHJlcG9ydCB0aGUKKwkgKiBh YnNvbHV0ZSBkYXRhIHZhbHVlICgwLTI1NSksIHdoaWNoIHdpbGwgYmUgbWFwcGVkIG9udG8gWzAs MzI3NjddLgorCSAqIElmIGZ1bGwgYXhpcyBpcyBlbmFibGVkLCBtYXAgdGhlIGRhdGEgdmFsdWUg b250byBbLTI1NToyNTVdLCBzbworCSAqIHRoYXQgdGhlIGlucHV0IHN1YnN5c3RlbSBtYXBzIGl0 IG9udG8gWy0zMjc2NzozMjc2N10uICovCisJdHJpZ2dlciA9IGRhdGFbNF07CisJaWYgKHhwYWQt PmxlZnRfdHJpZ2dlcl9mdWxsX2F4aXMpCisJCXRyaWdnZXIgPSAoMiAqIHRyaWdnZXIpIC0gMjU1 OworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWiwgdHJpZ2dlcik7CisJdHJpZ2dlciA9IGRh dGFbNV07CisJaWYgKHhwYWQtPnJpZ2h0X3RyaWdnZXJfZnVsbF9heGlzKQorCQl0cmlnZ2VyID0g KDIgKiB0cmlnZ2VyKSAtIDI1NTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JaLCB0cmln Z2VyKTsKIAogCWlucHV0X3N5bmMoZGV2KTsKIH0KIAorCitzdGF0aWMgdm9pZCB4cGFkMzYwd19p ZGVudGlmeV9jb250cm9sbGVyKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKK3sKKwlpbnQgaTsKKwl1 bnNpZ25lZCBjaGFyICpkYXRhID0geHBhZC0+aWRfcGFja2V0OworCisJaWYgKCFkYXRhKQorCQly ZXR1cm47CisKKwlzbnByaW50Zih4cGFkLT5jb250cm9sbGVyX3VuaXF1ZV9pZCwgMTcsCisJCSIl MDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCIsCisJCWRhdGFbOF0sIGRhdGFbOV0sIGRh dGFbMTBdLCBkYXRhWzExXSwgZGF0YVsxMl0sIGRhdGFbMTNdLAorCQlkYXRhWzE0XSwgZGF0YVsx NV0pOworCisJLyogSWRlbnRpZnkgY29udHJvbGxlciB0eXBlICovCisJeHBhZC0+Y29udHJvbGxl cl90eXBlID0gWENPTlRST0xMRVJfVFlQRV9PVEhFUjsKKwlmb3IgKGkgPSAwOyB3MzYwX2lkW2ld LmlkX2J5dGVzOyBpKyspIHsKKwkJaWYgKCFtZW1jbXAoZGF0YSArIDIyLCAmdzM2MF9pZFtpXS5p ZF9ieXRlcywgNCkpIHsKKwkJCXhwYWQtPmNvbnRyb2xsZXJfdHlwZSA9CisJCQkJdzM2MF9pZFtp XS5jb250cm9sbGVyX3R5cGU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICh4cGFkLT5jb250 cm9sbGVyX3R5cGUgPT0gWENPTlRST0xMRVJfVFlQRV9PVEhFUikKKwkJcHJpbnRrKEtFUk5fSU5G TyAieHBhZDogdW5rbm93biB3aXJlbGVzcyBjb250cm9sbGVyOiAiCisJCQkiJTAyeCUwMnggJTAy eCUwMnhcbiIsIGRhdGFbMjJdLCBkYXRhWzIzXSwgZGF0YVsyNF0sCisJCQlkYXRhWzI1XSk7Cit9 CisKKworLyoKKyAqCXhwYWRfd29ya19jb250cm9sbGVyCisgKgorICoJU3VibWl0cyBjb21tYW5k IHRvIHNldCBwYWQgbnVtYmVyIG9uIExFRCBkaXNwbGF5IG9mIHdpcmVsZXNzIDM2MAorICoJY29u dHJvbGxlcnMsIGFzIHdlbGwgYXMgb25saW5lL29mZmxpbmUgZXZlbnQuIFRoZSBzaGFyZWQgd29y a3F1ZXVlCisgKiAgICAgIGlzIHVzZWQgZm9yIHRoaXMgcHVycG9zZSwgc28gdGhhdCB0aGUgaW50 ZXJydXB0IGhhbmRsZXIgaXMga2VwdCBzaG9ydC4KKyAqLworCitzdGF0aWMgdm9pZCB4cGFkX3dv cmtfY29udHJvbGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisJc3RydWN0IHVzYl94cGFk ICp4cGFkID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB1c2JfeHBhZCwgd29yayk7CisJaWYgKHhw YWQtPmNvbnRyb2xsZXJfcHJlc2VudCkgeworCQl4cGFkMzYwd19pZGVudGlmeV9jb250cm9sbGVy KHhwYWQpOworCQl4cGFkX2luaXRfY29udHJvbGxlcih4cGFkKTsKKwkJeHBhZF9zZW5kX2xlZF9j b21tYW5kKHhwYWQsIHhwYWQtPmNvbnRyb2xsZXJfbnVtYmVyICsgMSk7CisJCWtvYmplY3RfdWV2 ZW50KCZ4cGFkLT5kZXYtPmRldi5rb2JqLCBLT0JKX09OTElORSk7CisJfSBlbHNlIHsKKwkJa29i amVjdF91ZXZlbnQoJnhwYWQtPmRldi0+ZGV2LmtvYmosIEtPQkpfT0ZGTElORSk7CisJfQorfQor CisKIC8qCiAgKiB4cGFkMzYwd19wcm9jZXNzX3BhY2tldAogICoKQEAgLTM3OSwzMCArNzA5LDU3 IEBACiAgKiBCeXRlLkJpdAogICogMDAuMSAtIFN0YXR1cyBjaGFuZ2U6IFRoZSBjb250cm9sbGVy IG9yIGhlYWRzZXQgaGFzIGNvbm5lY3RlZC9kaXNjb25uZWN0ZWQKICAqICAgICAgICAgICAgICAg ICAgICAgICBCaXRzIDAxLjcgYW5kIDAxLjYgYXJlIHZhbGlkCisgKiAwMS5mIC0gU29tZSBraW5k IG9mIHVuaXF1ZSBpZGVudGlmaWVyIG1lc3NhZ2UgKHNlZSBhYm92ZSkKICAqIDAxLjcgLSBDb250 cm9sbGVyIHByZXNlbnQKICAqIDAxLjYgLSBIZWFkc2V0IHByZXNlbnQKICAqIDAxLjEgLSBQYWQg c3RhdGUgKEJ5dGVzIDQrKSB2YWxpZAogICoKICAqLwogCi1zdGF0aWMgdm9pZCB4cGFkMzYwd19w cm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIHUxNiBjbWQsIHVuc2lnbmVkIGNo YXIgKmRhdGEpCitzdGF0aWMgdm9pZCB4cGFkMzYwd19wcm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNi X3hwYWQgKnhwYWQsIHUxNiBjbWQsCisJCXVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7CisJaW50IHBh ZG51bSA9IDA7CisKIAkvKiBQcmVzZW5jZSBjaGFuZ2UgKi8KIAlpZiAoZGF0YVswXSAmIDB4MDgp IHsKKwkJcGFkbnVtID0geHBhZC0+Y29udHJvbGxlcl9udW1iZXI7CiAJCWlmIChkYXRhWzFdICYg MHg4MCkgewotCQkJeHBhZC0+cGFkX3ByZXNlbnQgPSAxOwotCQkJdXNiX3N1Ym1pdF91cmIoeHBh ZC0+YnVsa19vdXQsIEdGUF9BVE9NSUMpOwotCQl9IGVsc2UKLQkJCXhwYWQtPnBhZF9wcmVzZW50 ID0gMDsKKwkJCS8qIGlnbm9yZSBkdXBsaWNhdGVzICovCisJCQlpZiAoIXhwYWQtPmNvbnRyb2xs ZXJfcHJlc2VudCkgeworCQkJCXhwYWQtPmNvbnRyb2xsZXJfcHJlc2VudCA9IDE7CisJCQkJLypz Y2hlZHVsZV93b3JrKCZ4cGFkLT53b3JrKTsqLworCQkJCS8qIFdhaXQgZm9yIGlkIHBhY2tldCBi ZWZvcmUgc2V0dGluZworCQkJCSAqIGNvbnRyb2xsZXIgdHlwZSBhbmQgTEVEcyAqLworCQkJfQor CQl9IGVsc2UgeworCQkJeHBhZC0+Y29udHJvbGxlcl9wcmVzZW50ID0gMDsKKwkJCXhwYWQtPmNv bnRyb2xsZXJfdW5pcXVlX2lkWzBdID0gJ1wwJzsKKwkJCXhwYWQtPmNvbnRyb2xsZXJfdHlwZSA9 IFhDT05UUk9MTEVSX1RZUEVfTk9ORTsKKwkJCS8qIFdlIGRvIE5PVCBmbHVzaCB0aGUgc2hhcmVk IHdvcmtxdWV1ZSBoZXJlLCBiZWNhdXNlCisJCQkgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBm cm9tIGFuIGludGVycnVwdCBoYW5kbGVyLgorCQkJICogSWYgdGhlIGNvbnRyb2xsZXIgaGFzIGRp c2Nvbm5lY3RlZCBmcm9tIHRoZSByZWNlaXZlciwKKwkJCSAqIHRoZSB3b3JzdCB0aGF0IHdpbGwg aGFwcGVuIGZyb20gdGhlIHdvcmsgdGFzayBydW5uaW5nCisJCQkgKiBpcyB0aGF0IGEgcGFja2V0 IHdpbGwgYmUgdHJhbnNtaXR0ZWQgZnJvbSB0aGUKKwkJCSAqIHJlY2VpdmVyIHRvIGEgbm9uLWxp c3RlbmluZyBjb250cm9sbGVyCisJCQkgKi8KKwkJfQogCX0KIAotCS8qIFZhbGlkIHBhZCBkYXRh ICovCi0JaWYgKCEoZGF0YVsxXSAmIDB4MSkpCi0JCXJldHVybjsKLQotCXhwYWQzNjBfcHJvY2Vz c19wYWNrZXQoeHBhZCwgY21kLCAmZGF0YVs0XSk7CisJLyogUHJvY2VzcyBwYWNrZXRzIGFjY29y ZGluZyB0byB0eXBlICovCisJaWYgKGRhdGFbMV0gPT0gMHgwZikgeworCQlpZiAoIXhwYWQtPmNv bnRyb2xsZXJfdW5pcXVlX2lkWzBdKSB7CisJCQlpZiAoeHBhZC0+aWRfcGFja2V0KSB7CisJCQkJ bWVtY3B5KHhwYWQtPmlkX3BhY2tldCwgZGF0YSwgMjkpOworCQkJCXNjaGVkdWxlX3dvcmsoJnhw YWQtPndvcmspOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChkYXRhWzFdICYgMHgxKSB7CisJCXhw YWQzNjBfcHJvY2Vzc19wYWNrZXQoeHBhZCwgY21kLCAmZGF0YVs0XSk7CisJfQogfQogCisKIHN0 YXRpYyB2b2lkIHhwYWRfaXJxX2luKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3hw YWQgKnhwYWQgPSB1cmItPmNvbnRleHQ7CkBAIC00MzksMzAgKzc5NiwyMiBAQAogCX0KIAogZXhp dDoKLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlyZXR2YWwg PSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVyciAo IiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJZXJyKCIlcyAt IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCiAJCSAgICAgX19mdW5jX18s IHJldHZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIHhwYWRfYnVsa19vdXQoc3RydWN0IHVyYiAqdXJi KQotewotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQljYXNlIDA6Ci0JCS8qIHN1Y2Nlc3MgKi8K LQkJYnJlYWs7Ci0JY2FzZSAtRUNPTk5SRVNFVDoKLQljYXNlIC1FTk9FTlQ6Ci0JY2FzZSAtRVNI VVRET1dOOgotCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwotCQlkYmco IiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sIHVyYi0+ c3RhdHVzKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0 YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwotCX0KLX0KKworLyog ZW5kIGlucHV0IHNlY3Rpb24gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSVJRIG91 dHB1dCBzZWN0aW9uOiBwcmVzZW50IGluIG9iamVjdCBjb2RlIG9ubHkgaWYgdGhlIGZvcmNlIGZl ZWRiYWNrIG9yCisgKiBMRUQgaW50ZXJmYWNlIGlzIGVuYWJsZWQuCisgKi8KIAogI2lmIGRlZmlu ZWQoQ09ORklHX0pPWVNUSUNLX1hQQURfRkYpIHx8IGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX1hQ QURfTEVEUykKKwogc3RhdGljIHZvaWQgeHBhZF9pcnFfb3V0KHN0cnVjdCB1cmIgKnVyYikKIHsK IAlpbnQgcmV0dmFsLCBzdGF0dXM7CkBAIC00NzAsMjAgKzgxOSwyMCBAQAogCXN0YXR1cyA9IHVy Yi0+c3RhdHVzOwogCiAJc3dpdGNoIChzdGF0dXMpIHsKLQkJY2FzZSAwOgorCWNhc2UgMDoKIAkJ Lyogc3VjY2VzcyAqLwogCQlicmVhazsKLQkJY2FzZSAtRUNPTk5SRVNFVDoKLQkJY2FzZSAtRU5P RU5UOgotCQljYXNlIC1FU0hVVERPV046Ci0JCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBj bGVhbiB1cCAqLwotCQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAl ZCIsCi0JCQkJX19mdW5jX18sIHN0YXR1cyk7Ci0JCQlyZXR1cm47Ci0JCWRlZmF1bHQ6Ci0JCQlk YmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCQkJX19mdW5jX18s IHN0YXR1cyk7Ci0JCQlnb3RvIGV4aXQ7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9F TlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVh biB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwK KwkJCV9fZnVuY19fLCBzdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAt IG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJX19mdW5jX18sIHN0YXR1cyk7 CisJCWdvdG8gZXhpdDsKIAl9CiAKIGV4aXQ6CkBAIC00OTMsMTIgKzg0MiwxMyBAQAogCQkgICAg X19mdW5jX18sIHJldHZhbCk7CiB9CiAKKwogc3RhdGljIGludCB4cGFkX2luaXRfb3V0cHV0KHN0 cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpCiB7CiAJc3Ry dWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9pcnFfb3V0OwogCWludCBlcnJvciA9IC1F Tk9NRU07CiAKLQlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkKKwlpZiAoKHhwYWQt Pnh0eXBlICE9IFhUWVBFX1hCT1gzNjApICYmICh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYw VykpCiAJCXJldHVybiAwOwogCiAJeHBhZC0+b2RhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHhwYWQt PnVkZXYsIFhQQURfUEtUX0xFTiwKQEAgLTUxNCw3ICs4NjQsOCBAQAogCiAJZXBfaXJxX291dCA9 ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMV0uZGVzYzsKIAl1c2JfZmlsbF9pbnRf dXJiKHhwYWQtPmlycV9vdXQsIHhwYWQtPnVkZXYsCi0JCQkgdXNiX3NuZGludHBpcGUoeHBhZC0+ dWRldiwgZXBfaXJxX291dC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgdXNiX3NuZGludHBpcGUo eHBhZC0+dWRldiwKKwkJCQllcF9pcnFfb3V0LT5iRW5kcG9pbnRBZGRyZXNzKSwKIAkJCSB4cGFk LT5vZGF0YSwgWFBBRF9QS1RfTEVOLAogCQkJIHhwYWRfaXJxX291dCwgeHBhZCwgZXBfaXJxX291 dC0+YkludGVydmFsKTsKIAl4cGFkLT5pcnFfb3V0LT50cmFuc2Zlcl9kbWEgPSB4cGFkLT5vZGF0 YV9kbWE7CkBAIC01MjYsNDUgKzg3Nyw4MiBAQAogIGZhaWwxOglyZXR1cm4gZXJyb3I7CiB9CiAK Kwogc3RhdGljIHZvaWQgeHBhZF9zdG9wX291dHB1dChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpCiB7 Ci0JaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjApCisJaWYgKCh4cGFkLT54dHlwZSA9 PSBYVFlQRV9YQk9YMzYwKSB8fCAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MFcpKQogCQl1 c2Jfa2lsbF91cmIoeHBhZC0+aXJxX291dCk7CiB9CiAKKwogc3RhdGljIHZvaWQgeHBhZF9kZWlu aXRfb3V0cHV0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKLQlpZiAoeHBhZC0+eHR5cGUgPT0g WFRZUEVfWEJPWDM2MCkgeworCWlmICgoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MCkgfHwg KHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKSkgewogCQl1c2JfZnJlZV91cmIoeHBhZC0+ aXJxX291dCk7CiAJCXVzYl9idWZmZXJfZnJlZSh4cGFkLT51ZGV2LCBYUEFEX1BLVF9MRU4sCiAJ CQkJeHBhZC0+b2RhdGEsIHhwYWQtPm9kYXRhX2RtYSk7CiAJfQogfQorCiAjZWxzZQotc3RhdGlj IGludCB4cGFkX2luaXRfb3V0cHV0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBzdHJ1Y3Qg dXNiX3hwYWQgKnhwYWQpIHsgcmV0dXJuIDA7IH0KKy8qIER1bW15IGltcGxlbWVudGF0aW9ucyBm b3IgeHBhZF9wcm9iZSBhbmQgeHBhZF9kaXNjb25uZWN0ICovCitzdGF0aWMgaW50IHhwYWRfaW5p dF9vdXRwdXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHN0cnVjdCB1c2JfeHBhZCAqeHBh ZCkKKwl7IHJldHVybiAwOyB9CiBzdGF0aWMgdm9pZCB4cGFkX2RlaW5pdF9vdXRwdXQoc3RydWN0 IHVzYl94cGFkICp4cGFkKSB7fQogc3RhdGljIHZvaWQgeHBhZF9zdG9wX291dHB1dChzdHJ1Y3Qg dXNiX3hwYWQgKnhwYWQpIHt9CiAjZW5kaWYKIAorLyogZW5kIG91dHB1dCBzZWN0aW9uICovCisK Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRm9yY2UgZmVlZGJhY2sgKHJ1bWJsZSBlZmZl Y3QpIHNlY3Rpb24sIGRlcGVuZHMgb24gQ09ORklHX0pPWVNUSUNLX1hQQURfRkYgKi8KKwogI2lm ZGVmIENPTkZJR19KT1lTVElDS19YUEFEX0ZGCisKKy8qIFJ1bWJsZSBzdXBwb3J0IGZvciB3aXJl bGVzcyBjb250cm9sbGVycyBmb2xsb3dzIHByb3RvY29sIGRlc2NyaXB0aW9uCisgKiBmcm9tIHhi b3hkcnYgdXNlcnNwYWNlIGRyaXZlcjoKKyAqICAgICAgIGh0dHA6Ly9waW5ndXMuc2V1bC5vcmcv fmdydW1iZWwveGJveGRydi8KKyAqLwogc3RhdGljIGludCB4cGFkX3BsYXlfZWZmZWN0KHN0cnVj dCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICBzdHJ1Y3QgZmZfZWZmZWN0ICpl ZmZlY3QpCiB7CiAJc3RydWN0IHVzYl94cGFkICp4cGFkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2 KTsKIAorCWlmICgheHBhZC0+cnVtYmxlX2VuYWJsZSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoZWZm ZWN0LT50eXBlID09IEZGX1JVTUJMRSkgewogCQlfX3UxNiBzdHJvbmcgPSBlZmZlY3QtPnUucnVt YmxlLnN0cm9uZ19tYWduaXR1ZGU7CiAJCV9fdTE2IHdlYWsgPSBlZmZlY3QtPnUucnVtYmxlLndl YWtfbWFnbml0dWRlOwotCQl4cGFkLT5vZGF0YVswXSA9IDB4MDA7Ci0JCXhwYWQtPm9kYXRhWzFd ID0gMHgwODsKLQkJeHBhZC0+b2RhdGFbMl0gPSAweDAwOwotCQl4cGFkLT5vZGF0YVszXSA9IHN0 cm9uZyAvIDI1NjsKLQkJeHBhZC0+b2RhdGFbNF0gPSB3ZWFrIC8gMjU2OwotCQl4cGFkLT5vZGF0 YVs1XSA9IDB4MDA7Ci0JCXhwYWQtPm9kYXRhWzZdID0gMHgwMDsKLQkJeHBhZC0+b2RhdGFbN10g PSAweDAwOwotCQl4cGFkLT5pcnFfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gODsKKwkJ bXV0ZXhfbG9jaygmeHBhZC0+b2RhdGFfbXV0ZXgpOworCQlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZ UEVfWEJPWDM2MFcpIHsKKwkJCXhwYWQtPm9kYXRhWzBdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRh WzFdID0gMHgwMTsKKwkJCXhwYWQtPm9kYXRhWzJdID0gMHgwZjsKKwkJCXhwYWQtPm9kYXRhWzNd ID0gMHhjMDsKKwkJCXhwYWQtPm9kYXRhWzRdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzVdID0g c3Ryb25nIC8gMjU2OworCQkJeHBhZC0+b2RhdGFbNl0gPSB3ZWFrIC8gMjU2OworCQkJeHBhZC0+ b2RhdGFbN10gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbOF0gPSAweDAwOworCQkJeHBhZC0+b2Rh dGFbOV0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbMTBdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRh WzExXSA9IDB4MDA7CisJCQl4cGFkLT5pcnFfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0g MTI7CisJCX0gZWxzZSB7CisJCQl4cGFkLT5vZGF0YVswXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0 YVsxXSA9IDB4MDg7CisJCQl4cGFkLT5vZGF0YVsyXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsz XSA9IHN0cm9uZyAvIDI1NjsKKwkJCXhwYWQtPm9kYXRhWzRdID0gd2VhayAvIDI1NjsKKwkJCXhw YWQtPm9kYXRhWzVdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzZdID0gMHgwMDsKKwkJCXhwYWQt Pm9kYXRhWzddID0gMHgwMDsKKwkJCXhwYWQtPmlycV9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5n dGggPSA4OworCQl9CiAJCXVzYl9zdWJtaXRfdXJiKHhwYWQtPmlycV9vdXQsIEdGUF9LRVJORUwp OworCQltdXRleF91bmxvY2soJnhwYWQtPm9kYXRhX211dGV4KTsKIAl9CiAKIAlyZXR1cm4gMDsK QEAgLTU3Miw3ICs5NjAsNyBAQAogCiBzdGF0aWMgaW50IHhwYWRfaW5pdF9mZihzdHJ1Y3QgdXNi X3hwYWQgKnhwYWQpCiB7Ci0JaWYgKHhwYWQtPnh0eXBlICE9IFhUWVBFX1hCT1gzNjApCisJaWYg KCh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwKSAmJiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVf WEJPWDM2MFcpKQogCQlyZXR1cm4gMDsKIAogCWlucHV0X3NldF9jYXBhYmlsaXR5KHhwYWQtPmRl diwgRVZfRkYsIEZGX1JVTUJMRSk7CkBAIC01ODEsMjYgKzk2OSw0OSBAQAogfQogCiAjZWxzZQor LyogZHVtbXkgaW1wbGVtZW50YXRpb24gZm9yIHhwYWRfcHJvYmUgKi8KIHN0YXRpYyBpbnQgeHBh ZF9pbml0X2ZmKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAK LSNpZiBkZWZpbmVkKENPTkZJR19KT1lTVElDS19YUEFEX0xFRFMpCi0jaW5jbHVkZSA8bGludXgv bGVkcy5oPgogCi1zdHJ1Y3QgeHBhZF9sZWQgewotCWNoYXIgbmFtZVsxNl07Ci0Jc3RydWN0IGxl ZF9jbGFzc2RldiBsZWRfY2RldjsKLQlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQ7Ci19OworLyogZW5k IGZvcmNlIGZlZWRiYWNrIHNlY3Rpb24gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisv KiBMRUQgaGFuZGxpbmcgc2VjdGlvbjogcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHJpbmcgb2Yg TEVEcyBvbiB0aGUgMzYwCisgKiBjb250cm9sbGVycy4gKi8KKworI2lmZGVmIENPTkZJR19KT1lT VElDS19YUEFEX0xFRFMKKwogCisvKiBYQm94IDM2MCB3aXJlbGVzcyBjb250cm9sbGVyIGZvbGxv d3MgcHJvdG9jb2wgZnJvbSB4Ym94ZHJ2IHVzZXJzcGFjZQorICogZHJpdmVyOgorICogICAgaHR0 cDovL3Bpbmd1cy5zZXVsLm9yZy9+Z3J1bWJlbC94Ym94ZHJ2LworICovCiBzdGF0aWMgdm9pZCB4 cGFkX3NlbmRfbGVkX2NvbW1hbmQoc3RydWN0IHVzYl94cGFkICp4cGFkLCBpbnQgY29tbWFuZCkK IHsKIAlpZiAoY29tbWFuZCA+PSAwICYmIGNvbW1hbmQgPCAxNCkgewogCQltdXRleF9sb2NrKCZ4 cGFkLT5vZGF0YV9tdXRleCk7Ci0JCXhwYWQtPm9kYXRhWzBdID0gMHgwMTsKLQkJeHBhZC0+b2Rh dGFbMV0gPSAweDAzOwotCQl4cGFkLT5vZGF0YVsyXSA9IGNvbW1hbmQ7Ci0JCXhwYWQtPmlycV9v dXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzOworCQlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZ UEVfWEJPWDM2MFcpIHsKKwkJCXhwYWQtPm9kYXRhWzBdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRh WzFdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzJdID0gMHgwODsKKwkJCXhwYWQtPm9kYXRhWzNd ID0gMHg0MCArIChjb21tYW5kICUgMHgwZSk7CisJCQl4cGFkLT5vZGF0YVs0XSA9IDB4MDA7CisJ CQl4cGFkLT5vZGF0YVs1XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs2XSA9IDB4MDA7CisJCQl4 cGFkLT5vZGF0YVs3XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs4XSA9IDB4MDA7CisJCQl4cGFk LT5vZGF0YVs5XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsxMF0gPSAweDAwOworCQkJeHBhZC0+ b2RhdGFbMTFdID0gMHgwMDsKKwkJCXhwYWQtPmlycV9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5n dGggPSAxMjsKKwkJfSBlbHNlIHsKKwkJCXhwYWQtPm9kYXRhWzBdID0gMHgwMTsKKwkJCXhwYWQt Pm9kYXRhWzFdID0gMHgwMzsKKwkJCXhwYWQtPm9kYXRhWzJdID0gY29tbWFuZDsKKwkJCXhwYWQt PmlycV9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzOworCQl9CiAJCXVzYl9zdWJtaXRf dXJiKHhwYWQtPmlycV9vdXQsIEdGUF9LRVJORUwpOwogCQltdXRleF91bmxvY2soJnhwYWQtPm9k YXRhX211dGV4KTsKIAl9CkBAIC02MTUsNiArMTAyNiw3IEBACiAJeHBhZF9zZW5kX2xlZF9jb21t YW5kKHhwYWRfbGVkLT54cGFkLCB2YWx1ZSk7CiB9CiAKKwogc3RhdGljIGludCB4cGFkX2xlZF9w cm9iZShzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpCiB7CiAJc3RhdGljIGF0b21pY190IGxlZF9zZXEJ PSBBVE9NSUNfSU5JVCgwKTsKQEAgLTYyMyw3ICsxMDM1LDcgQEAKIAlzdHJ1Y3QgbGVkX2NsYXNz ZGV2ICpsZWRfY2RldjsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVf WEJPWDM2MCkKKwlpZiAoKHhwYWQtPnh0eXBlICE9IFhUWVBFX1hCT1gzNjApICYmICh4cGFkLT54 dHlwZSAhPSBYVFlQRV9YQk9YMzYwVykpCiAJCXJldHVybiAwOwogCiAJeHBhZC0+bGVkID0gbGVk ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHhwYWRfbGVkKSwgR0ZQX0tFUk5FTCk7CkBAIC02NjQs MTcgKzEwNzYsMjMgQEAKIAl9CiB9CiAjZWxzZQorLyogZHVtbWllcyBmb3IgeHBhZF9wcm9iZSBh bmQgeHBhZF9kaXNjb25uZWN0ICovCiBzdGF0aWMgaW50IHhwYWRfbGVkX3Byb2JlKHN0cnVjdCB1 c2JfeHBhZCAqeHBhZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIHZvaWQgeHBhZF9sZWRfZGlzY29u bmVjdChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpIHsgfQogI2VuZGlmCiAKKy8qIGVuZCBMRUQgc2Vj dGlvbiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1vZHVsZSBhbmQgZGV2aWNl IGZ1bmN0aW9ucyAqLwogCiBzdGF0aWMgaW50IHhwYWRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpk ZXYpCiB7CiAJc3RydWN0IHVzYl94cGFkICp4cGFkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsK IAogCS8qIFVSQiB3YXMgc3VibWl0dGVkIGluIHByb2JlICovCi0JaWYoeHBhZC0+eHR5cGUgPT0g WFRZUEVfWEJPWDM2MFcpCisJaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKQogCQly ZXR1cm4gMDsKIAogCXhwYWQtPmlycV9pbi0+ZGV2ID0geHBhZC0+dWRldjsKQEAgLTY4OCw3ICsx MTA2LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShk ZXYpOwogCi0JaWYoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MFcpCisJaWYgKHhwYWQtPnh0 eXBlICE9IFhUWVBFX1hCT1gzNjBXKQogCQl1c2Jfa2lsbF91cmIoeHBhZC0+aXJxX2luKTsKIAl4 cGFkX3N0b3Bfb3V0cHV0KHhwYWQpOwogfQpAQCAtNzA2LDcgKzExMjQsMTAgQEAKIAkJYnJlYWs7 CiAJY2FzZSBBQlNfWjoKIAljYXNlIEFCU19SWjoJLyogdGhlIHRyaWdnZXJzICovCi0JCWlucHV0 X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgYWJzLCAwLCAyNTUsIDAsIDApOworCQkvKiBUcmln Z2VycyBoYXZlIGEgcGhvbnkgLTI1NSB0byAyNTUgcmFuZ2UuIE5vcm1hbGx5LCBvbmx5CisJCSAq IDAgdG8gMjU1IHdpbGwgYmUgcmVwb3J0ZWQgKCsgYXhpcyksIHVubGVzcyBmdWxsX3RyaWdnZXJf YXhpcworCQkgKiBpcyBzZXQsIGluIHdoaWNoIGNhc2UgLTI1NSB0byAyNTUgd2lsbCBiZSByZXBv cnRlZC4gKi8KKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBhYnMsIC0yNTUsIDI1 NSwgMCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgQUJTX0hBVDBYOgogCWNhc2UgQUJTX0hBVDBZOgkv KiB0aGUgZC1wYWQgKG9ubHkgaWYgTUFQX0RQQURfVE9fQVhFUykgKi8KQEAgLTcxNSwxOCArMTEz NiwyMiBAQAogCX0KIH0KIAotc3RhdGljIGludCB4cGFkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJm YWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IHhw YWRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1c2Jf ZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90 b191c2JkZXYoaW50Zik7CiAJc3RydWN0IHVzYl94cGFkICp4cGFkOwogCXN0cnVjdCBpbnB1dF9k ZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2lycV9p bjsKKwlpbnQgY29udHJvbGxlcl90eXBlOwogCWludCBpOwogCWludCBlcnJvciA9IC1FTk9NRU07 CiAKIAlmb3IgKGkgPSAwOyB4cGFkX2RldmljZVtpXS5pZFZlbmRvcjsgaSsrKSB7Ci0JCWlmICgo bGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0geHBhZF9kZXZpY2VbaV0u aWRWZW5kb3IpICYmCi0JCSAgICAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1 Y3QpID09IHhwYWRfZGV2aWNlW2ldLmlkUHJvZHVjdCkpCisJCWlmICgobGUxNl90b19jcHUodWRl di0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0KKwkJCQkJCXhwYWRfZGV2aWNlW2ldLmlkVmVuZG9y KSAmJgorCQkJCShsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0KKwkJ CQkJCXhwYWRfZGV2aWNlW2ldLmlkUHJvZHVjdCkpCiAJCQlicmVhazsKIAl9CiAKQEAgLTc0Nywx MSArMTE3MiwxNCBAQAogCXhwYWQtPnVkZXYgPSB1ZGV2OwogCXhwYWQtPmRwYWRfbWFwcGluZyA9 IHhwYWRfZGV2aWNlW2ldLmRwYWRfbWFwcGluZzsKIAl4cGFkLT54dHlwZSA9IHhwYWRfZGV2aWNl W2ldLnh0eXBlOworCWNvbnRyb2xsZXJfdHlwZSA9IHhwYWRfZGV2aWNlW2ldLmNvbnRyb2xsZXJf dHlwZTsKIAlpZiAoeHBhZC0+ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1VOS05PV04pCiAJCXhw YWQtPmRwYWRfbWFwcGluZyA9ICFkcGFkX3RvX2J1dHRvbnM7CiAJaWYgKHhwYWQtPnh0eXBlID09 IFhUWVBFX1VOS05PV04pIHsKLQkJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRl cmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMpIHsKLQkJCWlmIChpbnRmLT5jdXJf YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wgPT0gMTI5KQorCQlpZiAoaW50Zi0+ Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZUNsYXNzID09CisJCQkJCVVTQl9DTEFTU19W RU5ET1JfU1BFQykgeworCQkJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZh Y2VQcm90b2NvbCA9PQorCQkJCQkxMjkpCiAJCQkJeHBhZC0+eHR5cGUgPSBYVFlQRV9YQk9YMzYw VzsKIAkJCWVsc2UKIAkJCQl4cGFkLT54dHlwZSA9IFhUWVBFX1hCT1gzNjA7CkBAIC03ODMsMTYg KzEyMTEsMTggQEAKIAllbHNlCiAJCWZvciAoaSA9IDA7IHhwYWRfYnRuW2ldID49IDA7IGkrKykK IAkJCXNldF9iaXQoeHBhZF9idG5baV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKLQlpZiAoeHBhZC0+ ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1RPX0JVVFRPTlMpCisJaWYgKHhwYWQtPmRwYWRfbWFw cGluZyA9PSBNQVBfRFBBRF9UT19CVVRUT05TKSB7CiAJCWZvciAoaSA9IDA7IHhwYWRfYnRuX3Bh ZFtpXSA+PSAwOyBpKyspCiAJCQlzZXRfYml0KHhwYWRfYnRuX3BhZFtpXSwgaW5wdXRfZGV2LT5r ZXliaXQpOworCX0KIAogCS8qIHNldCB1cCBheGVzICovCiAJZm9yIChpID0gMDsgeHBhZF9hYnNb aV0gPj0gMDsgaSsrKQogCQl4cGFkX3NldF91cF9hYnMoaW5wdXRfZGV2LCB4cGFkX2Fic1tpXSk7 Ci0JaWYgKHhwYWQtPmRwYWRfbWFwcGluZyA9PSBNQVBfRFBBRF9UT19BWEVTKQorCWlmICh4cGFk LT5kcGFkX21hcHBpbmcgPT0gTUFQX0RQQURfVE9fQVhFUykgewogCQlmb3IgKGkgPSAwOyB4cGFk X2Fic19wYWRbaV0gPj0gMDsgaSsrKQotCQkgICAgeHBhZF9zZXRfdXBfYWJzKGlucHV0X2Rldiwg eHBhZF9hYnNfcGFkW2ldKTsKKwkJCXhwYWRfc2V0X3VwX2FicyhpbnB1dF9kZXYsIHhwYWRfYWJz X3BhZFtpXSk7CisJfQogCiAJZXJyb3IgPSB4cGFkX2luaXRfb3V0cHV0KGludGYsIHhwYWQpOwog CWlmIChlcnJvcikKQEAgLTgyMCw2ICsxMjUwLDEwIEBACiAKIAl1c2Jfc2V0X2ludGZkYXRhKGlu dGYsIHhwYWQpOwogCisJeHBhZC0+Y29udHJvbGxlcl90eXBlID0gY29udHJvbGxlcl90eXBlOwor CWlmIChjb250cm9sbGVyX3R5cGUgIT0gWENPTlRST0xMRVJfVFlQRV9OT05FKQorCQl4cGFkX2lu aXRfY29udHJvbGxlcih4cGFkKTsKKwogCS8qCiAJICogU3VibWl0IHRoZSBpbnQgVVJCIGltbWVk aWF0bHkgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3Igb3BlbgogCSAqIGJlY2F1c2Ugd2UgZ2V0IHN0 YXR1cyBtZXNzYWdlcyBmcm9tIHRoZSBkZXZpY2Ugd2hldGhlcgpAQCAtODI4LDQ4ICsxMjYyLDQz IEBACiAJICogd2UncmUgd2FpdGluZyBmb3IuCiAJICovCiAJaWYgKHhwYWQtPnh0eXBlID09IFhU WVBFX1hCT1gzNjBXKSB7CisJCXhwYWQtPmNvbnRyb2xsZXJfcHJlc2VudCA9IDA7CisJCXhwYWQt PmNvbnRyb2xsZXJfbnVtYmVyID0KKwkJCShpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50 ZXJmYWNlTnVtYmVyIC8gMikgKyAxOwogCQl4cGFkLT5pcnFfaW4tPmRldiA9IHhwYWQtPnVkZXY7 CiAJCWVycm9yID0gdXNiX3N1Ym1pdF91cmIoeHBhZC0+aXJxX2luLCBHRlBfS0VSTkVMKTsKIAkJ aWYgKGVycm9yKQotCQkJZ290byBmYWlsNDsKLQotCQkvKgotCQkgKiBTZXR1cCB0aGUgbWVzc2Fn ZSB0byBzZXQgdGhlIExFRHMgb24gdGhlCi0JCSAqIGNvbnRyb2xsZXIgd2hlbiBpdCBzaG93cyB1 cAotCQkgKi8KLQkJeHBhZC0+YnVsa19vdXQgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwp OwotCQlpZigheHBhZC0+YnVsa19vdXQpCiAJCQlnb3RvIGZhaWw1OworCQl4cGFkLT5pZF9wYWNr ZXQgPSBremFsbG9jKFhQQURfUEtUX0xFTiAqCisJCQkJCXNpemVvZih1bnNpZ25lZCBjaGFyKSwg R0ZQX0tFUk5FTCk7CisJCWlmICgheHBhZC0+aWRfcGFja2V0KQorCQkJZ290byBmYWlsNTsKKwl9 IGVsc2UgeworCQl4cGFkLT5jb250cm9sbGVyX3ByZXNlbnQgPSAxOworCQl4cGFkLT5jb250cm9s bGVyX251bWJlciA9IDA7CisJfQogCi0JCXhwYWQtPmJkYXRhID0ga3phbGxvYyhYUEFEX1BLVF9M RU4sIEdGUF9LRVJORUwpOwotCQlpZigheHBhZC0+YmRhdGEpCi0JCQlnb3RvIGZhaWw2OwotCi0J CXhwYWQtPmJkYXRhWzJdID0gMHgwODsKLQkJc3dpdGNoIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKSB7Ci0JCWNhc2UgMDoKLQkJCXhwYWQtPmJkYXRhWzNdID0g MHg0MjsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQl4cGFkLT5iZGF0YVszXSA9IDB4NDM7Ci0J CQlicmVhazsKLQkJY2FzZSA0OgotCQkJeHBhZC0+YmRhdGFbM10gPSAweDQ0OwotCQkJYnJlYWs7 Ci0JCWNhc2UgNjoKLQkJCXhwYWQtPmJkYXRhWzNdID0gMHg0NTsKLQkJfQotCi0JCWVwX2lycV9p biA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMV0uZGVzYzsKLQkJdXNiX2ZpbGxf YnVsa191cmIoeHBhZC0+YnVsa19vdXQsIHVkZXYsCi0JCQkJdXNiX3NuZGJ1bGtwaXBlKHVkZXYs IGVwX2lycV9pbi0+YkVuZHBvaW50QWRkcmVzcyksCi0JCQkJeHBhZC0+YmRhdGEsIFhQQURfUEtU X0xFTiwgeHBhZF9idWxrX291dCwgeHBhZCk7CisJLyogU2V0IHVwIGRldmljZSBhdHRyaWJ1dGVz ICovCisJeHBhZC0+c3lzZnNfb2sgPSAxOworCXhwYWQtPmNvbnRyb2xsZXJfdW5pcXVlX2lkWzBd ID0gJ1wwJzsKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW5wdXRfZGV2LT5kZXYua29i aiwKKwkJCQkJCSZ4cGFkX2RlZmF1bHRfYXR0cl9ncm91cCk7CisJaWYgKGVycm9yKSB7CisJCS8q IERyaXZlciB3aWxsIHdvcmsgd2l0aG91dCB0aGUgc3lzZnMgaW50ZXJmYWNlLCBidXQgcGFyYW1l dGVycworCQkgKiB3aWxsIG5vdCBiZSBhZGp1c3RhYmxlLCBzbyB0aGlzIGZhaWx1cmUgaXMgYSB3 YXJuaW5nLiAqLworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkieHBhZDogc3lzZnNfY3JlYXRl X2dyb3VwIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLAorCQkJZXJyb3IpOworCQl4cGFkLT5zeXNm c19vayA9IDA7CiAJfQorCQorCUlOSVRfV09SSygmeHBhZC0+d29yaywgJnhwYWRfd29ya19jb250 cm9sbGVyKTsKIAogCXJldHVybiAwOwogCi0gZmFpbDY6CXVzYl9mcmVlX3VyYih4cGFkLT5idWxr X291dCk7Ci0gZmFpbDU6CXVzYl9raWxsX3VyYih4cGFkLT5pcnFfaW4pOworIGZhaWw1OiB1c2Jf c2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHhwYWQt PmRldik7CisJeHBhZF9sZWRfZGlzY29ubmVjdCh4cGFkKTsKICBmYWlsNDoJdXNiX2ZyZWVfdXJi KHhwYWQtPmlycV9pbik7CiAgZmFpbDM6CXhwYWRfZGVpbml0X291dHB1dCh4cGFkKTsKICBmYWls MjoJdXNiX2J1ZmZlcl9mcmVlKHVkZXYsIFhQQURfUEtUX0xFTiwgeHBhZC0+aWRhdGEsIHhwYWQt PmlkYXRhX2RtYSk7CkBAIC04ODEsMzEgKzEzMTAsMzIgQEAKIAogc3RhdGljIHZvaWQgeHBhZF9k aXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCXN0cnVjdCB1c2JfeHBh ZCAqeHBhZCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXN0cnVjdCB1c2JfeHBhZCAqeHBh ZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5V TEwpOwogCWlmICh4cGFkKSB7CisJCS8qIEVuc3VyZSB3ZSBkb24ndCBoYXZlIGFueSBwZW5kaW5n IHdvcmsgKi8KKwkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCQlpZiAoeHBhZC0+c3lzZnNf b2spCisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnhwYWQtPmRldi0+ZGV2LmtvYmosCisJCQkJCQkm eHBhZF9kZWZhdWx0X2F0dHJfZ3JvdXApOworCiAJCXhwYWRfbGVkX2Rpc2Nvbm5lY3QoeHBhZCk7 CiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHhwYWQtPmRldik7CiAJCXhwYWRfZGVpbml0X291 dHB1dCh4cGFkKTsKLQkJaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKSB7Ci0JCQl1 c2Jfa2lsbF91cmIoeHBhZC0+YnVsa19vdXQpOwotCQkJdXNiX2ZyZWVfdXJiKHhwYWQtPmJ1bGtf b3V0KTsKKwkJaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKQogCQkJdXNiX2tpbGxf dXJiKHhwYWQtPmlycV9pbik7Ci0JCX0KIAkJdXNiX2ZyZWVfdXJiKHhwYWQtPmlycV9pbik7CiAJ CXVzYl9idWZmZXJfZnJlZSh4cGFkLT51ZGV2LCBYUEFEX1BLVF9MRU4sCiAJCQkJeHBhZC0+aWRh dGEsIHhwYWQtPmlkYXRhX2RtYSk7CisJCWlmICh4cGFkLT5pZF9wYWNrZXQpCisJCQlrZnJlZSh4 cGFkLT5pZF9wYWNrZXQpOwogCQlrZnJlZSh4cGFkKTsKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qg dXNiX2RyaXZlciB4cGFkX2RyaXZlciA9IHsKLQkubmFtZQkJPSAieHBhZCIsCi0JLnByb2JlCQk9 IHhwYWRfcHJvYmUsCi0JLmRpc2Nvbm5lY3QJPSB4cGFkX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxl CT0geHBhZF90YWJsZSwKLX07CisKIAogc3RhdGljIGludCBfX2luaXQgdXNiX3hwYWRfaW5pdCh2 b2lkKQogewpAQCAtOTIwLDYgKzEzNTAsNyBAQAogCXVzYl9kZXJlZ2lzdGVyKCZ4cGFkX2RyaXZl cik7CiB9CiAKKwogbW9kdWxlX2luaXQodXNiX3hwYWRfaW5pdCk7CiBtb2R1bGVfZXhpdCh1c2Jf eHBhZF9leGl0KTsKIApkaWZmIC11TnIgb3JpZ2Rydi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hw YWQuaCBuZXdkcnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmgKLS0tIG9yaWdkcnYvZHJp dmVycy9pbnB1dC9qb3lzdGljay94cGFkLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAg LTA1MDAKKysrIG5ld2Rydi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuaAkyMDA5LTAzLTAy IDIzOjExOjI3LjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqIFhib3gg Z2FtZXBhZCBkcml2ZXIgd2l0aCBYYm94IDM2MCB3aXJlZC93aXJlbGVzcyBzdXBwb3J0CisgKgor ICogTGFzdCBNb2RpZmllZDoJMiBNYXJjaCAyMDA5CisgKgkJCU1pa2UgTXVycGh5IDxtYW11cnBo QGNzLmNsZW1zb24uZWR1PgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBNYXJrbyBGcmllZGVt YW5uIDxtZnJAYm14LWNoZW1uaXR6LmRlPgorICogICAgICAgICAgICAgICAyMDA0IE9saXZlciBT Y2h3YXJ0eiA8T2xpdmVyLlNjaHdhcnR6QGdteC5kZT4sCisgKiAgICAgICAgICAgICAgICAgICAg U3RldmVuIFRvdGggPHN0ZXZlQHRvdGguZGVtb24uY28udWs+LAorICogICAgICAgICAgICAgICAg ICAgIEZyYW56IExlaG5lciA8ZnJhbnpAY2Fvcy5hdD4sCisgKiAgICAgICAgICAgICAgICAgICAg SXZhbiBIYXdrZXMgPGJsYWNraGF3a0BpdmFuaGF3a2VzLmNvbT4KKyAqICAgICAgICAgICAgICAg MjAwNSBEb21pbmljIENlcnF1ZXR0aSA8YmluYXJ5MTIzMEB5YWhvby5jb20+CisgKiAgICAgICAg ICAgICAgIDIwMDYgQWRhbSBCdWNoYmluZGVyIDxhZGFtLmJ1Y2hiaW5kZXJAZ21haWwuY29tPgor ICogICAgICAgICAgICAgICAyMDA3IEphbiBLcmF0b2NodmlsIDxob256YUBqaWtvcy5jej4KKyAq ICAgICAgICAgICAgICAgMjAwOSBDbGVtc29uIFVuaXZlcnNpdHkKKyAqCQkgICAgICAoY29udGFj dDogTWlrZSBNdXJwaHkgPG1hbXVycGhAY3MuY2xlbXNvbi5lZHU+KQorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMw LCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJh c2VkIG9uOgorICogIC0gaW5mb3JtYXRpb24gZnJvbSAgICAgaHR0cDovL2V1Yy5qcC9wZXJpcGhz L3hib3gtY29udHJvbGxlci5qYS5odG1sCisgKiAgLSB0aGUgaUZvcmNlIGRyaXZlciAgICBkcml2 ZXJzL2NoYXIvam95c3RpY2svaWZvcmNlLmMKKyAqICAtIHRoZSBza2VsZXRvbi1kcml2ZXIgIGRy aXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCisgKiAgLSBYYm94IDM2MCBpbmZvcm1hdGlvbiBodHRw Oi8vd3d3LmZyZWU2MC5vcmcvd2lraS9HYW1lcGFkCisgKiAgLSB4Ym94ZHJ2IGRvY3MgICAgICAg ICBodHRwOi8vcGluZ3VzLnNldWwub3JnL35ncnVtYmVsL3hib3hkcnYvCisgKgorICogVGhhbmtz IHRvOgorICogIC0gSVRPIFRha2F5dWtpIGZvciBwcm92aWRpbmcgZXNzZW50aWFsIHhwYWQgaW5m b3JtYXRpb24gb24gaGlzIHdlYnNpdGUKKyAqICAtIFZvanRlY2ggUGF2bGlrICAgICAtIGlmb3Jj ZSBkcml2ZXIgLyBpbnB1dCBzdWJzeXN0ZW0KKyAqICAtIEdyZWcgS3JvYWgtSGFydG1hbiAtIHVz Yi1za2VsZXRvbiBkcml2ZXIKKyAqICAtIFhCT1ggTGludXggcHJvamVjdCAtIGV4dHJhIFVTQiBp ZCdzCisgKgorICogVE9ETzoKKyAqICAtIGZpeCAiYW5hbG9nIiBidXR0b25zIChyZXBvcnRlZCBh cyBkaWdpdGFsIG5vdykKKyAqICAtIG5lZWQgVVNCIElEcyBmb3Igb3RoZXIgZGFuY2UgcGFkcwor ICoKKyAqIERyaXZlciBoaXN0b3J5IGlzIGxvY2F0ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIGZp bGUuCisgKi8KKworI2lmbmRlZiBfWFBBRF9ICisjZGVmaW5lIF9YUEFEX0gKKworI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtx dWV1ZS5oPgorCisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5 c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpZmRlZiBDT05GSUdfSk9ZU1RJ Q0tfWFBBRF9MRURTCisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorCitzdHJ1Y3QgeHBhZF9sZWQg eworCWNoYXIgbmFtZVsxNl07CisJc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfY2RldjsKKwlzdHJ1 Y3QgdXNiX3hwYWQgKnhwYWQ7Cit9OworI2VuZGlmCisKKworI2RlZmluZSBEUklWRVJfQVVUSE9S ICJNYXJrbyBGcmllZGVtYW5uIDxtZnJAYm14LWNoZW1uaXR6LmRlPiIKKyNkZWZpbmUgRFJJVkVS X0RFU0MgIlhib3gvMzYwIHBhZCBkcml2ZXIiCisKKyNkZWZpbmUgWFBBRF9QS1RfTEVOIDMyCisK KworLyogeGJveCBkLXBhZHMgc2hvdWxkIG1hcCB0byBidXR0b25zLCBhcyBpcyByZXF1aXJlZCBm b3IgRERSIHBhZHMKKyAgIGJ1dCB3ZSBtYXAgdGhlbSB0byBheGVzIHdoZW4gcG9zc2libGUgdG8g c2ltcGxpZnkgdGhpbmdzICovCisjZGVmaW5lIE1BUF9EUEFEX1RPX0JVVFRPTlMgICAgMAorI2Rl ZmluZSBNQVBfRFBBRF9UT19BWEVTICAgICAgIDEKKyNkZWZpbmUgTUFQX0RQQURfVU5LTk9XTiAg ICAgICAyCisKKy8qIFR5cGUgb2YgY29udHJvbGxlciAqaW50ZXJmYWNlKiAob3JpZ2luYWwsIHdp cmVkIDM2MCwgd2lyZWxlc3MgMzYwKSAqLworI2RlZmluZSBYVFlQRV9YQk9YICAgICAgICAwCisj ZGVmaW5lIFhUWVBFX1hCT1gzNjAgICAgIDEKKyNkZWZpbmUgWFRZUEVfWEJPWDM2MFcgICAgMgor I2RlZmluZSBYVFlQRV9VTktOT1dOICAgICAzCisKKy8qIFR5cGUgb2YgY29udHJvbGxlciAoZS5n LiBwYWQsIGd1aXRhciwgb3RoZXIgaW5wdXQgZGV2aWNlKSAqLworI2RlZmluZSBYQ09OVFJPTExF Ul9UWVBFX05PTkUJCTAKKyNkZWZpbmUgWENPTlRST0xMRVJfVFlQRV9QQUQJCTEKKyNkZWZpbmUg WENPTlRST0xMRVJfVFlQRV9HVUlUQVIJCTIKKyNkZWZpbmUgWENPTlRST0xMRVJfVFlQRV9EQU5D RV9QQUQJMworI2RlZmluZSBYQ09OVFJPTExFUl9UWVBFX09USEVSCQkyNTUKKworCisvKiBUaGUg WGJveCAzNjAgY29udHJvbGxlcnMgaGF2ZSBzZW5zaXRpdmUgc3RpY2tzIHRoYXQgb2Z0ZW4gZG8g bm90IGNlbnRlcgorICogZXhhY3RseS4gQSBkZWFkIHpvbmUgY2F1c2VzIHN0aWNrIGV2ZW50cyBi ZWxvdyBhIGNlcnRhaW4gdGhyZXNoaG9sZCB0byBiZQorICogcmVwb3J0ZWQgYXMgemVyby4KKyAq CisgKiBUaGUgZGVmYXVsdCBkZWFkIHpvbmUgc2l6ZSBpcyA4MTkyLCB3aGljaCB3YXMgb2J0YWlu ZWQgYnkgdGVzdGluZyBhCisgKiB3aXJlbGVzcyAzNjAgY29udHJvbGxlciB3aXRoIGpzdGVzdCgx KSBhbmQgY29uc3VsdGluZyBnYW1pbmcgZm9ydW1zIGZvcgorICogYSByZWNvbW1lbmRlZCBkZWFk IHpvbmUgZm9yIHRoaXMgY29udHJvbGxlci4gVGhlIGNvbnNlbnN1cyBvcGluaW9uIHdhcworICog MC4yNSAob24gYSBzY2FsZSBmcm9tIDAgdG8gMSksIHdoaWNoIGNvcnJlc3BvbmRzIHRvIDgxOTIg KG91dCBvZiAzMjc2NykuCisgKi8KKyNkZWZpbmUgWERFQURfWk9ORV9ERUZBVUxUICAgODE5Mgor CisvKiBEZWZhdWx0IGxpbWl0IGZvciB0aGUgc3RpY2tzIGlzIHRoZSBtYXhpbXVtIGF4aXMgdmFs dWUgKDMyNzY3KSwgd2hpY2ggd2lsbAorICogY2F1c2UgdGhlIHN0aWNrcyB0byBoYXZlIGEgcmFk aWFsIGF4aXMgYXMgZGVzaWduZWQgaW4gdGhlIGhhcmR3YXJlLiBUbworICogZW5hYmxlIHNxdWFy ZSBheGlzIHN1cHBvcnQsIHNldCB0aGUgc3RpY2sgbGltaXRzIHRvIDIzMTcwIG9yIGxvd2VyIGF0 IHJ1bgorICogdGltZSB2aWEgdGhlIHN5c2ZzIGludGVyZmFjZS4gKi8KKyNkZWZpbmUgWFNUSUNL X0xJTUlUX0RFRkFVTFQgMzI3NjcKKworLyogUnVtYmxlIG5vcm1hbGx5IGVuYWJsZWQgKi8KKyNk ZWZpbmUgWFJVTUJMRV9ERUZBVUxUCQkxCisKKy8qIE5vcm1hbGx5LCB0cmlnZ2VyIGF4ZXMgcmVw b3J0IGluIHRoZSByYW5nZSAwIHRvIDMyNzY3IChwb3NpdGl2ZSBheGlzIG9ubHkpICovCisjZGVm aW5lIFhGVUxMX1RSSUdHRVJfQVhJU19ERUZBVUxUCTAKKworCisvKiBYYm94IDM2MCBoYXMgYSB2 ZW5kb3Itc3BlY2lmaWMgY2xhc3MsIHNvIHdlIGNhbm5vdCBtYXRjaCBpdCB3aXRoIG9ubHkKKyAq IFVTQl9JTlRFUkZBQ0VfSU5GTyAoYWxzbyBzcGVjaWZpY2FsbHkgcmVmdXNlZCBieSBVU0Igc3Vi c3lzdGVtKSwgc28gd2UKKyAqIG1hdGNoIGFnYWluc3QgdmVuZG9yIGlkIGFzIHdlbGwuIFdpcmVk IFhib3ggMzYwIGRldmljZXMgaGF2ZSBwcm90b2NvbCAxLAorICogd2lyZWxlc3MgY29udHJvbGxl cnMgaGF2ZSBwcm90b2NvbCAxMjkuICovCisjZGVmaW5lIFhQQURfWEJPWDM2MF9WRU5ET1JfUFJP VE9DT0wodmVuZCxwcikgXAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVO RE9SIHwgXAorCQkJVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywgXAorCS5pZFZlbmRvciA9 ICh2ZW5kKSwgXAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMsIFwK KwkuYkludGVyZmFjZVN1YkNsYXNzID0gOTMsIFwKKwkuYkludGVyZmFjZVByb3RvY29sID0gKHBy KQorI2RlZmluZSBYUEFEX1hCT1gzNjBfVkVORE9SKHZlbmQpIFwKKwl7IFhQQURfWEJPWDM2MF9W RU5ET1JfUFJPVE9DT0wodmVuZCwgMSkgfSwgXAorCXsgWFBBRF9YQk9YMzYwX1ZFTkRPUl9QUk9U T0NPTCh2ZW5kLCAxMjkpIH0KKworCisKKy8qIFNvbWUgb2YgdGhlIGZpZWxkcyBpbiB0aGUgZm9s bG93aW5nIHN0cnVjdHVyZSBhcmUgZm9yIGxhdGVyIHVzZSB3aXRoCisgKiB1c2Vyc3BhY2UgYXBw bGljYXRpb25zIHRvIHJlY29nbml6ZSBpbmRpdmlkdWFsIGNvbnRyb2xsZXJzLiBUaGUgZGVhZCB6 b25lcworICogYW5kIGF4aXMgbGltaXRzIGNhbiBiZSBjaGFuZ2VkICJvbiB0aGUgZmx5IiBhbmQg YXJlIGVmZmVjdGl2ZSBpbW1lZGlhdGVseS4KKyAqCisgKiBUaGUgZmllbGRzIGxhYmVsZWQgInJv IiBhbmQgInJ3IiBhcmUgaW50ZW5kZWQgdG8gYmUgcmVhZC1vbmx5IGFuZAorICogcmVhZC13cml0 ZSwgcmVzcGVjdGl2ZWx5LCB3aGVuIGV4cG9zZWQgaW4gc3lzZnMuIE1vc3Qgb2YgdGhlIHJlYWQt b25seQorICogZmllbGRzIGFyZSB0byBzdXBwb3J0ICp3aXJlbGVzcyogMzYwIGNvbnRyb2xsZXJz LiBUaGUgY29udHJvbGxlcl9udW1iZXIKKyAqIGlzIHVzZWQgdG8gc2V0IHRoZSBMRUQsIHdoaWxl IGNvbnRyb2xsZXJfcHJlc2VudCB0cmFja3Mgd2hldGhlciB0aGUKKyAqIGNvbnRyb2xsZXIgaXMg Y29ubmVjdGVkIHRvIHRoZSB3aXJlbGVzcyByZWNlaXZlci4gQ29udHJvbGxlciB0eXBlIGFwcGxp ZXMKKyAqIHRvIGFsbCBtb2RlbHMgKHdpcmVkIGFuZCB3aXJlbGVzcyksIGFuZCB0cmFja3Mgd2hl dGhlciB0aGUgZGV2aWNlIGlzIGEgcGFkLAorICogZ3VpdGFyLCBldGMuIGZvciBsYXRlciB1c2Vy c3BhY2UgdXNlLiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgcmVnYXJkaW5nCisgKiB0eXBlIGFuZCB1 bmlxdWUgSUQgZGV0ZWN0aW9uIG9uIHdpcmVsZXNzIDM2MCByZWNlaXZlcnMuCisgKi8KK3N0cnVj dCB1c2JfeHBhZCB7CisJc3RydWN0IGlucHV0X2RldiAqZGV2OwkJLyogaW5wdXQgZGV2aWNlIGlu dGVyZmFjZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkvKiB1c2IgZGV2aWNlICovCisK KwlzdHJ1Y3QgdXJiICppcnFfaW47CQkvKiB1cmIgZm9yIGludGVycnVwdCBpbiByZXBvcnQgKi8K Kwl1bnNpZ25lZCBjaGFyICppZGF0YTsJCS8qIGlucHV0IGRhdGEgKi8KKwlkbWFfYWRkcl90IGlk YXRhX2RtYTsKKworI2lmIGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX1hQQURfRkYpIHx8IGRlZmlu ZWQoQ09ORklHX0pPWVNUSUNLX1hQQURfTEVEUykKKwlzdHJ1Y3QgdXJiICppcnFfb3V0OwkJLyog dXJiIGZvciBpbnRlcnJ1cHQgb3V0IHJlcG9ydCAqLworCXVuc2lnbmVkIGNoYXIgKm9kYXRhOwkJ Lyogb3V0cHV0IGRhdGEgKi8KKwlkbWFfYWRkcl90IG9kYXRhX2RtYTsKKwlzdHJ1Y3QgbXV0ZXgg b2RhdGFfbXV0ZXg7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19KT1lTVElDS19YUEFEX0xFRFMK KwlzdHJ1Y3QgeHBhZF9sZWQgKmxlZDsKKyNlbmRpZgorCisJY2hhciBwaHlzWzY0XTsJCQkvKiBw aHlzaWNhbCBkZXZpY2UgcGF0aCAqLworCisJaW50IGRwYWRfbWFwcGluZzsJCS8qIG1hcCBkLXBh ZCB0byBidXR0b25zIG9yIHRvIGF4ZXMgKi8KKwlpbnQgeHR5cGU7CQkJLyogdHlwZSBvZiB4Ym94 IGRldmljZSAqLworCisJLyogV29yayBzdHJ1Y3R1cmUgZm9yIG1vdmluZyB0aGUgY2FsbCB0byB4 cGFkX3NlbmRfbGVkX2NvbW1hbmQKKwkgKiBvdXRzaWRlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBm b3IgcGFja2V0IHByb2Nlc3NpbmcgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwkKKwkv KiBpZCBwYWNrZXQgZm9yIHdpcmVsZXNzIDM2MCBjb250cm9sbGVyICovCisJdW5zaWduZWQgY2hh ciAqaWRfcGFja2V0OworCisJaW50IGNvbnRyb2xsZXJfbnVtYmVyOwkJLyogY29udHJvbGxlciAj ICgxLTQpIGZvciAzNjB3LiBybyAqLworCWludCBjb250cm9sbGVyX3ByZXNlbnQ7ICAgICAgICAg LyogMzYwdyBjb250cm9sbGVyIHByZXNlbmNlLiBybyAqLworCWludCBjb250cm9sbGVyX3R5cGU7 ICAgICAgICAgICAgLyogY29udHJvbGxlciB0eXBlLiBybyAqLworCWNoYXIgY29udHJvbGxlcl91 bmlxdWVfaWRbMTddOyAgLyogdW5pcXVlIElEIG9mIGNvbnRyb2xsZXIgKDM2MHcpLiBybyAqLwor CXVuc2lnbmVkIGludCBsZWZ0X2RlYWRfem9uZTsgICAgLyogZGVhZCB6b25lIGZvciBsZWZ0IHN0 aWNrLiBydyAqLworCXVuc2lnbmVkIGludCByaWdodF9kZWFkX3pvbmU7ICAgLyogZGVhZCB6b25l IGZvciByaWdodCBzdGljay4gcncgKi8KKwl1bnNpZ25lZCBpbnQgbGVmdF9zdGlja19saW1pdDsg IC8qIGF4aXMgbGltaXQgZm9yIGxlZnQgc3RpY2suIHJ3ICovCisJdW5zaWduZWQgaW50IHJpZ2h0 X3N0aWNrX2xpbWl0OyAvKiBheGlzIGxpbWl0IGZvciByaWdodCBzdGljay4gcncgKi8KKwlpbnQg cnVtYmxlX2VuYWJsZTsgICAgICAgICAgICAgIC8qIGVuYWJsZS9kaXNhYmxlIHJ1bWJsZS4gcncg Ki8KKwlpbnQgbGVmdF90cmlnZ2VyX2Z1bGxfYXhpczsgICAgIC8qIGZ1bGwgYXhpcyAtIGxlZnQg dHJpZ2dlci4gcncgKi8KKwlpbnQgcmlnaHRfdHJpZ2dlcl9mdWxsX2F4aXM7ICAgIC8qIGZ1bGwg YXhpcyAtIHJpZ2h0IHRyaWdnZXIuIHJ3ICovCisKKwlpbnQgc3lzZnNfb2s7ICAgICAgICAgICAg ICAgICAgIC8qIHN5c2ZzIGludGVyZmFjZSBPSyAqLworfTsKKyNkZWZpbmUgdG9feHBhZChkKSBp bnB1dF9nZXRfZHJ2ZGF0YSh0b19pbnB1dF9kZXYoZCkpCisKKworLyogRnVuY3Rpb24gcHJvdG90 eXBlcyBmb3Igbm9uLXN5c2ZzIGludGVyZmFjZSBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIHNl dF9kZWFkX3pvbmUodW5zaWduZWQgaW50IG5ld19zaXplLCB1bnNpZ25lZCBpbnQgKmR6LAorCXVu c2lnbmVkIGludCBzdGlja19saW1pdCk7CitzdGF0aWMgdm9pZCBzZXRfc3RpY2tfbGltaXQodW5z aWduZWQgaW50IG5ld19zaXplLCB1bnNpZ25lZCBpbnQgKnNsLAorCXVuc2lnbmVkIGludCBkZWFk X3pvbmUpOworc3RhdGljIHZvaWQgeHBhZF9pbml0X2NvbnRyb2xsZXIoc3RydWN0IHVzYl94cGFk ICp4cGFkKTsKK3N0YXRpYyB2b2lkIHhwYWRfc2VuZF9sZWRfY29tbWFuZChzdHJ1Y3QgdXNiX3hw YWQgKnhwYWQsIGludCBjb21tYW5kKTsKK3N0YXRpYyB2b2lkIHhwYWRfd29ya19jb250cm9sbGVy KHN0cnVjdCB3b3JrX3N0cnVjdCAqdyk7CitzdGF0aWMgdm9pZCB4cGFkX3Byb2Nlc3Nfc3RpY2tz KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCwgX19sZTE2ICpkYXRhKTsKK3N0YXRpYyB2b2lkIHhwYWRf cHJvY2Vzc19wYWNrZXQoc3RydWN0IHVzYl94cGFkICp4cGFkLCB1MTYgY21kLAorCXVuc2lnbmVk IGNoYXIgKmRhdGEpOworc3RhdGljIHZvaWQgeHBhZDM2MF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qg dXNiX3hwYWQgKnhwYWQsIHUxNiBjbWQsCisJdW5zaWduZWQgY2hhciAqZGF0YSk7CitzdGF0aWMg dm9pZCB4cGFkMzYwd19pZGVudGlmeV9jb250cm9sbGVyKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCk7 CitzdGF0aWMgdm9pZCB4cGFkMzYwd19wcm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhw YWQsIHUxNiBjbWQsCisJdW5zaWduZWQgY2hhciAqZGF0YSk7CitzdGF0aWMgdm9pZCB4cGFkX2ly cV9pbihzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgeHBhZF9pcnFfb3V0KHN0cnVjdCB1 cmIgKnVyYik7CitzdGF0aWMgaW50IHhwYWRfaW5pdF9vdXRwdXQoc3RydWN0IHVzYl9pbnRlcmZh Y2UgKmludGYsIHN0cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgdm9pZCB4cGFkX3N0b3Bf b3V0cHV0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgdm9pZCB4cGFkX3N0b3Bfb3V0 cHV0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgaW50IHhwYWRfcGxheV9lZmZlY3Qo c3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgIHN0cnVjdCBmZl9lZmZl Y3QgKmVmZmVjdCk7CitzdGF0aWMgaW50IHhwYWRfaW5pdF9mZihzdHJ1Y3QgdXNiX3hwYWQgKnhw YWQpOworc3RhdGljIHZvaWQgeHBhZF9zZW5kX2xlZF9jb21tYW5kKHN0cnVjdCB1c2JfeHBhZCAq eHBhZCwgaW50IGNvbW1hbmQpOworc3RhdGljIHZvaWQgeHBhZF9sZWRfc2V0KHN0cnVjdCBsZWRf Y2xhc3NkZXYgKmxlZF9jZGV2LAorCWVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpOworc3RhdGlj IGludCB4cGFkX2xlZF9wcm9iZShzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpOworc3RhdGljIHZvaWQg eHBhZF9sZWRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpOworc3RhdGljIGludCB4 cGFkX29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KTsKK3N0YXRpYyB2b2lkIHhwYWRfY2xvc2Uo c3RydWN0IGlucHV0X2RldiAqZGV2KTsKK3N0YXRpYyB2b2lkIHhwYWRfc2V0X3VwX2FicyhzdHJ1 Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHNpZ25lZCBzaG9ydCBhYnMpOworc3RhdGljIGludCB4 cGFkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCWNvbnN0IHN0cnVjdCB1c2Jf ZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCB4cGFkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9p bnRlcmZhY2UgKmludGYpOworc3RhdGljIGludCBfX2luaXQgdXNiX3hwYWRfaW5pdCh2b2lkKTsK K3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfeHBhZF9leGl0KHZvaWQpOworCisKKy8qIHN5c2ZzIGlu dGVyZmFjZSAqLworc3RhdGljIHNzaXplX3QgeHBhZF9zaG93X3VpbnQoc3RydWN0IGRldmljZSAq ZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKTsKK3N0YXRp YyBzc2l6ZV90IHhwYWRfc3RvcmVfdWludChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Citz dGF0aWMgc3NpemVfdCB4cGFkX3N0b3JlX2Jvb2woc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQp Oworc3RhdGljIHNzaXplX3QgeHBhZF9zdG9yZV9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3Vu dCk7CitzdGF0aWMgc3NpemVfdCB4cGFkX3Nob3dfaW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVf dCB4cGFkX3Nob3dfaWQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKKworCisKKy8qIERldmljZSBhdHRyaWJ1dGVzICovCitz dGF0aWMgREVWSUNFX0FUVFIobGVmdF9kZWFkX3pvbmUsIDA2NDQsIHhwYWRfc2hvd191aW50LCB4 cGFkX3N0b3JlX3VpbnQpOworc3RhdGljIERFVklDRV9BVFRSKHJpZ2h0X2RlYWRfem9uZSwgMDY0 NCwgeHBhZF9zaG93X3VpbnQsIHhwYWRfc3RvcmVfdWludCk7CitzdGF0aWMgREVWSUNFX0FUVFIo bGVmdF9zdGlja19saW1pdCwgMDY0NCwgeHBhZF9zaG93X3VpbnQsIHhwYWRfc3RvcmVfdWludCk7 CitzdGF0aWMgREVWSUNFX0FUVFIocmlnaHRfc3RpY2tfbGltaXQsIDA2NDQsIHhwYWRfc2hvd191 aW50LCB4cGFkX3N0b3JlX3VpbnQpOworc3RhdGljIERFVklDRV9BVFRSKHJ1bWJsZV9lbmFibGUs IDA2NDQsIHhwYWRfc2hvd19pbnQsIHhwYWRfc3RvcmVfYm9vbCk7CitzdGF0aWMgREVWSUNFX0FU VFIobGVmdF90cmlnZ2VyX2Z1bGxfYXhpcywgMDY0NCwgeHBhZF9zaG93X2ludCwKKwkJCXhwYWRf c3RvcmVfYm9vbCk7CitzdGF0aWMgREVWSUNFX0FUVFIocmlnaHRfdHJpZ2dlcl9mdWxsX2F4aXMs IDA2NDQsIHhwYWRfc2hvd19pbnQsCisJCQl4cGFkX3N0b3JlX2Jvb2wpOworc3RhdGljIERFVklD RV9BVFRSKGNvbnRyb2xsZXJfbnVtYmVyLCAwNDQ0LCB4cGFkX3Nob3dfaW50LCB4cGFkX3N0b3Jl X3JvKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjb250cm9sbGVyX3ByZXNlbnQsIDA0NDQsIHhwYWRf c2hvd19pbnQsIHhwYWRfc3RvcmVfcm8pOworc3RhdGljIERFVklDRV9BVFRSKGNvbnRyb2xsZXJf dHlwZSwgMDQ0NCwgeHBhZF9zaG93X2ludCwgeHBhZF9zdG9yZV9ybyk7CitzdGF0aWMgREVWSUNF X0FUVFIoaWQsIDA0NDQsIHhwYWRfc2hvd19pZCwgeHBhZF9zdG9yZV9ybyk7CisKK3N0YXRpYyBz dHJ1Y3QgYXR0cmlidXRlICp4cGFkX2RlZmF1bHRfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfbGVm dF9kZWFkX3pvbmUuYXR0ciwKKwkmZGV2X2F0dHJfcmlnaHRfZGVhZF96b25lLmF0dHIsCisJJmRl dl9hdHRyX2xlZnRfc3RpY2tfbGltaXQuYXR0ciwKKwkmZGV2X2F0dHJfcmlnaHRfc3RpY2tfbGlt aXQuYXR0ciwKKwkmZGV2X2F0dHJfcnVtYmxlX2VuYWJsZS5hdHRyLAorCSZkZXZfYXR0cl9sZWZ0 X3RyaWdnZXJfZnVsbF9heGlzLmF0dHIsCisJJmRldl9hdHRyX3JpZ2h0X3RyaWdnZXJfZnVsbF9h eGlzLmF0dHIsCisJJmRldl9hdHRyX2NvbnRyb2xsZXJfbnVtYmVyLmF0dHIsCisJJmRldl9hdHRy X2NvbnRyb2xsZXJfcHJlc2VudC5hdHRyLAorCSZkZXZfYXR0cl9jb250cm9sbGVyX3R5cGUuYXR0 ciwKKwkmZGV2X2F0dHJfaWQuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJp YnV0ZV9ncm91cCB4cGFkX2RlZmF1bHRfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSB4cGFkX2Rl ZmF1bHRfYXR0cnMsCisJLm5hbWUgPSAiZ2FtZV9kZXZpY2UiLAorfTsKKworI2VuZGlmCisKKy8q IERyaXZlciBIaXN0b3J5OgorICoKKyAqIDIwMDktMDMtMDIgOiBDb2RlIGNsZWFudXAKKyAqICAt IHVzZWQgbWluKCksIG1heCgpLCBhbmQgYWJzKCkgd2hlcmUgYXBwcm9wcmlhdGUsIHNpbXBsaWZ5 aW5nIGNvZGUKKyAqICAtIG1vdmVkIGNvZGUgdGhhdCBnZW5lcmF0ZXMgZGF0YSBvYmplY3RzIG91 dCBvZiB4cGFkLmggYW5kIGludG8geHBhZC5jCisgKiAgLSBjaGFuZ2VkIGxlZ2FjeSAjaWYgZGVm aW5lZCguLi4pIHRvICNpZmRlZgorICogIC0gcmVtb3ZlZCB1bm5lY2Vzc2FyeSB0eXBlY2FzdHMK KyAqICAtIHdpcmVsZXNzIDM2MCBjb250cm9sbGVyIGlkZW50aWZpY2F0aW9uIG5vdyBkb25lIGlu IHdvcmtxdWV1ZSB0YXNrCisgKiAgLSB0aGFua3MgQW5kcmV3IE1vcnRvbiwgR3JlZyBLLUgsIGFu ZCBMaW51cyBUb3J2YWxkcworICoKKyAqIDIwMDktMDItMjggOiBUcmlnZ2VycyBub3cgaGFsZi1h eGVzIGJ5IGRlZmF1bHQKKyAqICAtIHRyaWdnZXJzIHdpbGwgbm93IGJlIHBvc2l0aXZlIGhhbGYt YXhlcyBvbmx5LCB1bmxlc3MgYSBmdWxsIGF4aXMgbWFwcGluZworICogICAgaXMgZW5hYmxlZCB2 aWEgdGhlIHN5c2ZzIGludGVyZmFjZSBvbiBhIHBlci10cmlnZ2VyIGJhc2lzCisgKiAgLSBtb3Zl ZCBJTklUX1dPUksgdG8geHBhZF9wcm9iZSBhbmQgcmVtb3ZlZCBJTklUX1dPUksvUFJFUEFSRV9X T1JLIGZyb20KKyAqICAgIGludGVycnVwdCBoYW5kbGVyOyBhbHNvIHJlbW92ZWQgdGhlIHdvcmtf cGVuZGluZyBmbGFnIGZyb20gc3RydWN0CisgKiAgICB1c2JfeHBhZCAoYWx3YXlzIGZsdXNoIHNo YXJlZCB3b3JrcXVldWUgb24gdW5sb2FkKQorICogIC0gcmVhZC13cml0ZSBzeXNmcyBhdHRyaWJ1 dGVzIG5vdyBoYXZlIDY0NCBkZWZhdWx0IHBlcm1pc3Npb25zCisgKgorICogMjAwOS0wMi0yMyA6 IENoYW5nZXMgcGVyIG1haWxpbmcgbGlzdCAodGhhbmtzIEZyZWRlcmljIFdlaXNiZWNrZXIpCisg KiAgLSBubyBtb3JlIGNoZWNrIGZvciBDT05GSUdfU1lTRlM6IHN5c2ZzIGZ1bmN0aW9ucyB3aWxs IHNpbXBseSByZXR1cm4KKyAqICAgIDAgaWYgc3lzZnMgaGFzIG5vdCBiZWVuIGVuYWJsZWQKKyAq ICAtIGZpeGVkIHdlaXJkIG9yZGVyaW5nIGluIHNzY2FuZiByZXR1cm4gY2hlY2sKKyAqICAtIGNo ZWNrZWQgY29kZSB3aXRoIHNjcmlwdHMvY2hlY2twYXRjaC5wbCBhbmQgbWFkZSBzdHlsZSBhZGp1 c3RtZW50cworICoKKyAqIDIwMDktMDItMjEgOiBSZWZhY3RvcmVkIGFuZCBjaGFuZ2VkIHN0aWNr IGhhbmRsaW5nCisgKiAgLSBzcGxpdCBjb2RlIGludG8gdHdvIHBpZWNlcyAoeHBhZC5oIGFuZCB4 cGFkLmMpCisgKiAgLSBjbGVhbmVkIHVwIHN5c2ZzIGludGVyZmFjZQorICogIC0gY2hhbmdlZCBz cXVhcmUgYXhpcyBhbGdvcml0aG0gdG8gYW4gYXhpcyBsaW1pdCBhbGdvcml0aG0sIHdoaWNoIGFs bG93cworICogICAgc2l6ZSBvZiBpbnNjcmliZWQgc3F1YXJlIHRvIGJlIGFkanVzdGVkOyBhdmFp bGFibGUgZm9yIGJvdGggc3RpY2tzCisgKiAgLSBkZWFkIHpvbmVzIG5vdyBwZXItc3RpY2sKKyAq CisgKiAyMDA5LTAyLTE4IDogQ2hhbmdlcyBwZXIgbWFpbGluZyBsaXN0IChhbmQgc29tZSBhZGRp dGlvbnMpCisgKiAgLSByZXZpc2VkIHN5c2ZzIGludGVyZmFjZSAodGhhbmtzIEdyZWcgSy1IKQor ICogIC0gY2hlY2sgcmV0dXJuIHZhbHVlcyBvZiBzc2NhbmYgKHRoYW5rcyBPbGl2ZXIgTmV1a3Vt KQorICogIC0gdXJiIHN1Ym1pc3Npb24gd2hpbGUgaG9sZGluZyBtdXRleCBub3cgb25jZSBhZ2Fp biBHRlBfS0VSTkVMCisgKiAgICAodGhhbmtzIE9saXZlciBOZXVrdW0pCisgKiAgLSB3b3JrIHN0 cnVjdHVyZSBmaXhlcyAodGhhbmtzIE9saXZlciBOZXVrdW0pCisgKiAgLSB1ZXZlbnRzIGdlbmVy YXRlZCBmb3Igd2lyZWxlc3MgY29udHJvbGxlciBvbmxpbmUvb2ZmbGluZQorICogIC0gc3lzZnMg aW50ZXJmYWNlIG9ubHkgaWYgQ09ORklHX1NZU0ZTIGlzIHNldAorICoKKyAqIDIwMDktMDItMTUg OiBNaW5vciBhZGp1c3RtZW50cworICogIC0gYWRkZWQgS09CSl9PTkxJTkUvS09CSl9PRkZMSU5F IGV2ZW50cyB3aGVuIGNvbnRyb2xsZXJzIGFyZSBjb25uZWN0ZWQgdG8KKyAqICAgIG9yIGRpc2Nv bm5lY3RlZCBmcm9tIHRoZSB3aXJlbGVzcyAzNjAgcmVjZWl2ZXIKKyAqICAtIGlnbm9yZSBkdXBs aWNhdGUgY29ubmVjdCBtZXNzYWdlcyBvbiB0aGUgc2FtZSBjb25uZWN0aW9uCisgKiAgLSBhZGRl ZCBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgcnVtYmxlIG9uIGEgcGVyLWNvbnRyb2xsZXIgYmFz aXMKKyAqICAtIHJ1bWJsZSBldmVudHMgYXJlIG5vdCBzZW50IHRvIGd1aXRhciBvciBkYW5jZSBw YWQgZGV2aWNlcworICoKKyAqIDIwMDktMDItMTQgOiBBZGRlZCBzeXNmcyBpbnRlcmZhY2UKKyAq ICAtIGRlYWQgem9uZXMgYW5kIHNxdWFyZSBheGlzIHNldHRpbmdzIGNhbiBub3cgYmUgbWFkZSBw ZXItY29udHJvbGxlcgorICogIC0gcmVtb3ZlZCBkZWFkX3pvbmUgYW5kIHNxdWFyZV9heGlzIG1v ZHVsZSBwYXJhbWV0ZXJzICh1c2Ugc3lzZnMpCisgKiAgLSBuZXcgc3F1YXJlIGF4aXMgYWxnb3Jp dGhtCisgKgorICogMjAwOS0wMi0xMyA6IERpc2FibGUgc3F1YXJlIGF4aXMgZm9yIHJpZ2h0IHN0 aWNrCisgKiAgLSBzcXVhcmUgYXhpcyBhcHBsaWVzIHRvIGxlZnQgc3RpY2sgb25seQorICoKKyAq IDIwMDktMDItMTIgOiBTY2FsaW5nIGZvciBkZWFkIHpvbmUgYW5kIHNxdWFyZSBheGlzIHN1cHBv cnQKKyAqICAtIGF4ZXMgbm93IHNjYWxlIGZyb20gMCB0byAzMjc2NyBzdGFydGluZyBhdCBlZGdl IG9mIGRlYWQgem9uZQorICogIC0gaW5jcmVhc2VkIGRlZmF1bHQgZGVhZCB6b25lIHRvIDgxOTIK KyAqICAtIGluaXRpYWwgc3F1YXJlIGF4aXMgc3VwcG9ydCAocmVsaWFibGUgb25seSB3aXRoIGxl ZnQgc3RpY2spCisgKgorICogMjAwOS0wMi0wNyA6IE1vcmUgd2lyZWxlc3MgMzYwIGNvbnRyb2xs ZXIgZml4ZXMKKyAqICAtIHJlbW92ZWQgYnVsayB1cmIgY29tcGxldGVseQorICogIC0gdXNlIHhw YWRfc2VuZF9sZWRfY29tbWFuZCB0byBzZXQgY29udHJvbGxlciBudW1iZXIgb24gTEVEIGRpc3Bs YXkKKyAqICAgICh3aXJlbGVzcyAzNjAgY29udHJvbGxlcikKKyAqICAtIGRlYWRfem9uZSBpcyBu b3cgYW4gYWRqdXN0YWJsZSBtb2R1bGUgcGFyYW1ldGVyCisgKgorICogMjAwOS0wMi0wNiA6IEF4 aXMgaGFuZGxpbmcgaW1wcm92ZW1lbnRzCisgKiAgLSB1bmlmaWVkIGhhbmRsZXIgZm9yIGxlZnQg YW5kIHJpZ2h0IHN0aWNrcworICogIC0gaW5pdGlhbCBzdXBwb3J0IGZvciBkZWFkIHpvbmVzCisg KgorICogMjAwOS0wMi0wMiA6IFdpcmVsZXNzIDM2MCBjb250cm9sbGVyIGZpeGVzCisgKiAgLSBm b2xsb3dlZCBQUk9UT0NPTCBkZXNjcmlwdGlvbiBmcm9tIHhib3hkcnYgdXNlcnNwYWNlIGRyaXZl cgorICogIC0gTEVEIGFuZCBydW1ibGUgc3VwcG9ydCBhZGRlZCBmb3Igd2lyZWxlc3MgMzYwIGNv bnRyb2xsZXIgKHByb3RvY29sCisgKiAgICBpcyBkaWZmZXJlbnQgZnJvbSB3aXJlZCEpCisgKgor ICogMjAwNC0xMC0wMiAtIDAuMC42IDogRERSIHBhZCBzdXBwb3J0CisgKiAgLSBib3Jyb3dlZCBm cm9tIHRoZSBYQk9YIGxpbnV4IGtlcm5lbAorICogIC0gVVNCIGlkJ3MgZm9yIGNvbW1vbmx5IHVz ZWQgZGFuY2UgcGFkcyBhcmUgcHJlc2VudAorICogIC0gZGFuY2UgcGFkcyB3aWxsIG1hcCBELVBB RCB0byBidXR0b25zLCBub3QgYXhlcworICogIC0gcGFzcyB0aGUgbW9kdWxlIHBhcmFtYXRlciAn ZHBhZF90b19idXR0b25zJyB0byBmb3JjZQorICogICAgdGhlIEQtUEFEIHRvIG1hcCB0byBidXR0 b25zIGlmIHlvdXIgcGFkIGlzIG5vdCBkZXRlY3RlZAorICoKKyAqIDIwMDItMDctMTcgLSAwLjAu NSA6IHNpbXBsaWZpZWQgZC1wYWQgaGFuZGxpbmcKKyAqCisgKiAyMDAyLTA3LTE2IC0gMC4wLjQg OiBtaW5vciBjaGFuZ2VzLCBtZXJnZSB3aXRoIFZvanRlY2gncyB2MC4wLjMKKyAqICAtIHZlcmlm aWVkIHRoZSBsYWNrIG9mIEhJRCBhbmQgcmVwb3J0IGRlc2NyaXB0b3JzCisgKiAgLSB2ZXJpZmll ZCB0aGF0IEFMTCBidXR0b25zIFdPUksKKyAqICAtIGZpeGVkIGQtcGFkIHRvIGF4ZXMgbWFwcGlu ZworICoKKyAqIDIwMDItMDctMTQgLSAwLjAuMyA6IHJld29yayBieSBWb2p0ZWNoIFBhdmxpawor ICogIC0gaW5kZW50YXRpb24gZml4ZXMKKyAqICAtIHVzYiArIGlucHV0IGluaXQgc2VxdWVuY2Ug Zml4ZXMKKyAqCisgKiAyMDAyLTA3LTAyIC0gMC4wLjIgOiBiYXNpYyB3b3JraW5nIHZlcnNpb24K KyAqICAtIGFsbCBheGVzIGFuZCA5IG9mIHRoZSAxMCBidXR0b25zIHdvcmsgKGdlcm1hbiBJbnRl ckFjdCBkZXZpY2UpCisgKiAgLSB0aGUgYmxhY2sgYnV0dG9uIGRvZXMgbm90IHdvcmsKKyAqCisg KiAyMDAyLTA2LTI3IC0gMC4wLjEgOiBmaXJzdCB2ZXJzaW9uLCBqdXN0IHNhaWQgIlhCT1ggSElE IGNvbnRyb2xsZXIiCisgKgorICovCg== --0016e6475dbced724a04642f3fe6-- -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html