From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Murphy Subject: [PATCH] (revision 1) input: xpad.c - Xbox 360 wireless and sysfs support Date: Sun, 22 Feb 2009 00:31:27 -0500 Message-ID: <5aa163d00902212131g7cf9218ewd8a6396a7f1c95fd@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016363b7a9c9bcc1c04637b326f Return-path: Sender: linux-usb-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Oliver Neukum , Greg KH List-Id: linux-input@vger.kernel.org --0016363b7a9c9bcc1c04637b326f Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Greetings, Attached is a revised version of my previous patch to drivers/input/joystick/xpad.c, which should apply without issues to the current stable tree (2.6.28.7 at the time of this writing). I have made a number of major changes since the original: 1. Removed kobject and used input device's existing kobject for sysfs via DEVICE_ATTR. All attributes are part of a game_device group, which I will document once this patch has been reviewed. Thanks to Greg K-H for his help with the sysfs interface and helpful feedback. Return values for sscanf are also now checked, and the ugly strcmp code has been replaced by a cleaner solution (thanks Oliver Neukum). Wireless 360 controllers now produce an online/offline uevent when connecting/disconnecting, for later userspace use. Additionally, the whole sysfs interface is now dependent upon CONFIG_SYSFS (the driver should continue to work without it). 2. urb submissions while holding mutexes have been reverted to GFP_KERNEL, and fixes have been made to the shared workqueue code to account for possible adverse events (such as removal of the device before the work gets done). Thanks to Oliver Neukum for his feedback. 3. Re-factored the code a bit and split it into two pieces (xpad.h and xpad.c). The division of the main data structures into a header file makes development on the main body much easier. 4. After extensive testing and debugging with a popular fighting game in an emulator (with 3-4 concurrent players on wireless 360 controllers), I changed the original square axis algorithm to an axis limiting and scaling algorithm that works on a per-stick basis. This new algorithm is substantially less jumpy when using a square axis, and it permits the size of the inscribed square to be adjusted on a per-controller basis. The nominal value to use to achieve the largest possible inscribed square on "perfect" hardware is 23170, but manufacturing variations in the controllers might require a smaller number. Comments and feedback on this revision are greatly appreciated, and I plan to test all the supported hardware I can get my hands on (need to borrow some wired classic and 360 devices) to be sure the new code doesn't break support for older devices. I will also document the userspace interface by submitting a Documentation/ABI/testing patch with the "final" version of the driver, once it has been nailed down. Thanks, Mike -- Mike Murphy Ph.D. Candidate and NSF Graduate Research Fellow Clemson University School of Computing 120 McAdams Hall Clemson, SC 29634-0974 USA Tel: +1 864.656.2838 Fax: +1 864.656.0145 http://cirg.cs.clemson.edu/~mamurph --0016363b7a9c9bcc1c04637b326f Content-Type: text/x-patch; charset=US-ASCII; name="xpad.patch" Content-Disposition: attachment; filename="xpad.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_frh9fswz0 ZGlmZiAtdU5yIG9yaWdkcnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMgbmV3ZHJ2L2Ry aXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCi0tLSBvcmlnZHJ2L2RyaXZlcnMvaW5wdXQvam95 c3RpY2sveHBhZC5jCTIwMDktMDItMTQgMjI6Mzk6MjAuMDAwMDAwMDAwIC0wNTAwCisrKyBuZXdk cnYvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMJMjAwOS0wMi0yMSAyMzo1ODoyMS4wMDAw MDAwMDAgLTA1MDAKQEAgLTEsNSArMSw4IEBACiAvKgotICogWC1Cb3ggZ2FtZXBhZCBkcml2ZXIK KyAqIFhib3ggZ2FtZXBhZCBkcml2ZXIgd2l0aCBYYm94IDM2MCB3aXJlZC93aXJlbGVzcyBzdXBw b3J0CisgKgorICogTGFzdCBNb2RpZmllZDoJMjEgRmVicnVhcnkgMjAwOQorICoJCQlNaWtlIE11 cnBoeSA8bWFtdXJwaEBjcy5jbGVtc29uLmVkdT4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIg TWFya28gRnJpZWRlbWFubiA8bWZyQGJteC1jaGVtbml0ei5kZT4KICAqICAgICAgICAgICAgICAg MjAwNCBPbGl2ZXIgU2Nod2FydHogPE9saXZlci5TY2h3YXJ0ekBnbXguZGU+LApAQCAtOSw2ICsx Miw4IEBACiAgKiAgICAgICAgICAgICAgIDIwMDUgRG9taW5pYyBDZXJxdWV0dGkgPGJpbmFyeTEy MzBAeWFob28uY29tPgogICogICAgICAgICAgICAgICAyMDA2IEFkYW0gQnVjaGJpbmRlciA8YWRh bS5idWNoYmluZGVyQGdtYWlsLmNvbT4KICAqICAgICAgICAgICAgICAgMjAwNyBKYW4gS3JhdG9j aHZpbCA8aG9uemFAamlrb3MuY3o+CisgKiAgICAgICAgICAgICAgIDIwMDkgQ2xlbXNvbiBVbml2 ZXJzaXR5CisgKgkJICAgICAgKGNvbnRhY3Q6IE1pa2UgTXVycGh5IDxtYW11cnBoQGNzLmNsZW1z b24uZWR1PikKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMjQsMjI0ICsyOSwzMDUgQEAKICAq IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z dG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICoKKyAqIFBsZWFzZSBzZWUgeGJveC5oIGZvciB0aGUg Q2hhbmdlTG9nLgorICovCisKKworCisjaW5jbHVkZSAieHBhZC5oIgorCisKKy8qIFRoZSBkZWFk IHpvbmUgYW5kIHN0aWNrIGxpbWl0IGJvdGggYWZmZWN0IHRoZSBiZWhhdmlvciBvZiB0aGUgY29y cmVzcG9uZGluZworICogYW5hbG9nIHN0aWNrLCBzaW5jZSB0aGUgb3V0cHV0IHZhbHVlcyByZXBv cnRlZCBmb3IgdGhlIHN0aWNrIGlucHV0cyB3aWxsCisgKiBiZSBzY2FsZWQgb250byBbMCwzMjc2 N10uIEl0IGlzIHRodXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBkZWFkIHpvbmUKKyAq IGlzIG5ldmVyIGxhcmdlciB0aGFuIHRoZSBzdGljayBsaW1pdC4gSW4gZmFjdCwgYSBtaW5pbWFs IGFtb3VudCBvZiBzdGljaworICogdHJhdmVsIHNwYWNlICgxMDI0KSBpcyBtYWludGFpbmVkIGJl dHdlZW4gdGhlIHR3byB2YWx1ZXMuIEluIHByYWN0aWNlLAorICogaG93ZXZlciwgdGhlIHN0aWNr IGxpbWl0IHNob3VsZCBhbHdheXMgYmUgbXVjaCBncmVhdGVyIHRoYW4gdGhlIGRlYWQgem9uZS4K KyAqLworCitzdGF0aWMgdm9pZCBzZXRfZGVhZF96b25lKHVuc2lnbmVkIGludCBuZXdfc2l6ZSwg dW5zaWduZWQgaW50ICpkeiwgdW5zaWduZWQgaW50IHN0aWNrX2xpbWl0KQoreworCWlmICgobmV3 X3NpemUgKyAxMDI0KSA+PSBzdGlja19saW1pdCkKKwkJbmV3X3NpemUgPSAoc3RpY2tfbGltaXQg PiAxMDI0KSA/IHN0aWNrX2xpbWl0IC0gMTAyNCA6IDA7CisJKmR6ID0gbmV3X3NpemU7Cit9CisK K3N0YXRpYyB2b2lkIHNldF9zdGlja19saW1pdCh1bnNpZ25lZCBpbnQgbmV3X3NpemUsIHVuc2ln bmVkIGludCAqc2wsIHVuc2lnbmVkIGludCBkZWFkX3pvbmUpCit7CisJaWYgKG5ld19zaXplIDwg KGRlYWRfem9uZSArIDEwMjQpKQorCQluZXdfc2l6ZSA9IGRlYWRfem9uZSArIDEwMjQ7CisJaWYg KG5ld19zaXplID4gMzI3NjcpCisJCW5ld19zaXplID0gMzI3Njc7CisJKnNsID0gbmV3X3NpemU7 Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogU3lzRnMgaW50ZXJmYWNlIGZ1 bmN0aW9ucwogICoKLSAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uOgotICogIC0gaW5mb3JtYXRp b24gZnJvbSAgICAgaHR0cDovL2V1Yy5qcC9wZXJpcGhzL3hib3gtY29udHJvbGxlci5qYS5odG1s Ci0gKiAgLSB0aGUgaUZvcmNlIGRyaXZlciAgICBkcml2ZXJzL2NoYXIvam95c3RpY2svaWZvcmNl LmMKLSAqICAtIHRoZSBza2VsZXRvbi1kcml2ZXIgIGRyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5j Ci0gKiAgLSBYYm94IDM2MCBpbmZvcm1hdGlvbiBodHRwOi8vd3d3LmZyZWU2MC5vcmcvd2lraS9H YW1lcGFkCi0gKgotICogVGhhbmtzIHRvOgotICogIC0gSVRPIFRha2F5dWtpIGZvciBwcm92aWRp bmcgZXNzZW50aWFsIHhwYWQgaW5mb3JtYXRpb24gb24gaGlzIHdlYnNpdGUKLSAqICAtIFZvanRl Y2ggUGF2bGlrICAgICAtIGlmb3JjZSBkcml2ZXIgLyBpbnB1dCBzdWJzeXN0ZW0KLSAqICAtIEdy ZWcgS3JvYWgtSGFydG1hbiAtIHVzYi1za2VsZXRvbiBkcml2ZXIKLSAqICAtIFhCT1ggTGludXgg cHJvamVjdCAtIGV4dHJhIFVTQiBpZCdzCi0gKgotICogVE9ETzoKLSAqICAtIGZpbmUgdHVuZSBh eGVzIChlc3BlY2lhbGx5IHRyaWdnZXIgYXhlcykKLSAqICAtIGZpeCAiYW5hbG9nIiBidXR0b25z IChyZXBvcnRlZCBhcyBkaWdpdGFsIG5vdykKLSAqICAtIGdldCBydW1ibGUgd29ya2luZwotICog IC0gbmVlZCBVU0IgSURzIGZvciBvdGhlciBkYW5jZSBwYWRzCi0gKgotICogSGlzdG9yeToKLSAq Ci0gKiAyMDAyLTA2LTI3IC0gMC4wLjEgOiBmaXJzdCB2ZXJzaW9uLCBqdXN0IHNhaWQgIlhCT1gg SElEIGNvbnRyb2xsZXIiCi0gKgotICogMjAwMi0wNy0wMiAtIDAuMC4yIDogYmFzaWMgd29ya2lu ZyB2ZXJzaW9uCi0gKiAgLSBhbGwgYXhlcyBhbmQgOSBvZiB0aGUgMTAgYnV0dG9ucyB3b3JrIChn ZXJtYW4gSW50ZXJBY3QgZGV2aWNlKQotICogIC0gdGhlIGJsYWNrIGJ1dHRvbiBkb2VzIG5vdCB3 b3JrCi0gKgotICogMjAwMi0wNy0xNCAtIDAuMC4zIDogcmV3b3JrIGJ5IFZvanRlY2ggUGF2bGlr Ci0gKiAgLSBpbmRlbnRhdGlvbiBmaXhlcwotICogIC0gdXNiICsgaW5wdXQgaW5pdCBzZXF1ZW5j ZSBmaXhlcwotICoKLSAqIDIwMDItMDctMTYgLSAwLjAuNCA6IG1pbm9yIGNoYW5nZXMsIG1lcmdl IHdpdGggVm9qdGVjaCdzIHYwLjAuMwotICogIC0gdmVyaWZpZWQgdGhlIGxhY2sgb2YgSElEIGFu ZCByZXBvcnQgZGVzY3JpcHRvcnMKLSAqICAtIHZlcmlmaWVkIHRoYXQgQUxMIGJ1dHRvbnMgV09S SwotICogIC0gZml4ZWQgZC1wYWQgdG8gYXhlcyBtYXBwaW5nCi0gKgotICogMjAwMi0wNy0xNyAt IDAuMC41IDogc2ltcGxpZmllZCBkLXBhZCBoYW5kbGluZwotICoKLSAqIDIwMDQtMTAtMDIgLSAw LjAuNiA6IEREUiBwYWQgc3VwcG9ydAotICogIC0gYm9ycm93ZWQgZnJvbSB0aGUgWEJPWCBsaW51 eCBrZXJuZWwKLSAqICAtIFVTQiBpZCdzIGZvciBjb21tb25seSB1c2VkIGRhbmNlIHBhZHMgYXJl IHByZXNlbnQKLSAqICAtIGRhbmNlIHBhZHMgd2lsbCBtYXAgRC1QQUQgdG8gYnV0dG9ucywgbm90 IGF4ZXMKLSAqICAtIHBhc3MgdGhlIG1vZHVsZSBwYXJhbWF0ZXIgJ2RwYWRfdG9fYnV0dG9ucycg dG8gZm9yY2UKLSAqICAgIHRoZSBELVBBRCB0byBtYXAgdG8gYnV0dG9ucyBpZiB5b3VyIHBhZCBp cyBub3QgZGV0ZWN0ZWQKLSAqCi0gKiBMYXRlciBjaGFuZ2VzIGNhbiBiZSB0cmFja2VkIGluIFND TS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5p dC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0j aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+Ci0K LSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWFya28gRnJpZWRlbWFubiA8bWZyQGJteC1jaGVtbml0 ei5kZT4iCi0jZGVmaW5lIERSSVZFUl9ERVNDICJYLUJveCBwYWQgZHJpdmVyIgotCi0jZGVmaW5l IFhQQURfUEtUX0xFTiAzMgotCi0vKiB4Ym94IGQtcGFkcyBzaG91bGQgbWFwIHRvIGJ1dHRvbnMs IGFzIGlzIHJlcXVpcmVkIGZvciBERFIgcGFkcwotICAgYnV0IHdlIG1hcCB0aGVtIHRvIGF4ZXMg d2hlbiBwb3NzaWJsZSB0byBzaW1wbGlmeSB0aGluZ3MgKi8KLSNkZWZpbmUgTUFQX0RQQURfVE9f QlVUVE9OUyAgICAwCi0jZGVmaW5lIE1BUF9EUEFEX1RPX0FYRVMgICAgICAgMQotI2RlZmluZSBN QVBfRFBBRF9VTktOT1dOICAgICAgIDIKLQotI2RlZmluZSBYVFlQRV9YQk9YICAgICAgICAwCi0j ZGVmaW5lIFhUWVBFX1hCT1gzNjAgICAgIDEKLSNkZWZpbmUgWFRZUEVfWEJPWDM2MFcgICAgMgot I2RlZmluZSBYVFlQRV9VTktOT1dOICAgICAzCi0KLXN0YXRpYyBpbnQgZHBhZF90b19idXR0b25z OwotbW9kdWxlX3BhcmFtKGRwYWRfdG9fYnV0dG9ucywgYm9vbCwgU19JUlVHTyk7Ci1NT0RVTEVf UEFSTV9ERVNDKGRwYWRfdG9fYnV0dG9ucywgIk1hcCBELVBBRCB0byBidXR0b25zIHJhdGhlciB0 aGFuIGF4ZXMgZm9yIHVua25vd24gcGFkcyIpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHhwYWRf ZGV2aWNlIHsKLQl1MTYgaWRWZW5kb3I7Ci0JdTE2IGlkUHJvZHVjdDsKLQljaGFyICpuYW1lOwot CXU4IGRwYWRfbWFwcGluZzsKLQl1OCB4dHlwZTsKLX0geHBhZF9kZXZpY2VbXSA9IHsKLQl7IDB4 MDQ1ZSwgMHgwMjAyLCAiTWljcm9zb2Z0IFgtQm94IHBhZCB2MSAoVVMpIiwgTUFQX0RQQURfVE9f QVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDVlLCAweDAyODksICJNaWNyb3NvZnQgWC1Cb3gg cGFkIHYyIChVUykiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA0NWUs IDB4MDI4NSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgKEphcGFuKSIsIE1BUF9EUEFEX1RPX0FYRVMs IFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ1ZSwgMHgwMjg3LCAiTWljcm9zb2Z0IFhib3ggQ29udHJv bGxlciBTIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDVlLCAweDA3 MTksICJYYm94IDM2MCBXaXJlbGVzcyBSZWNlaXZlciIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhU WVBFX1hCT1gzNjBXIH0sCi0JeyAweDBjMTIsIDB4ODgwOSwgIlJlZE9jdGFuZSBYYm94IERhbmNl IFBhZCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ0ZiwgMHgw ZjA3LCAiVGhydXN0bWFzdGVyLCBJbmMuIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBY VFlQRV9YQk9YIH0sCi0JeyAweDA0NmQsIDB4YzI0MiwgIkxvZ2l0ZWNoIENoaWxsc3RyZWFtIENv bnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweDA0NmQs IDB4Y2E4NCwgIkxvZ2l0ZWNoIFhib3ggQ29yZGxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ2ZCwgMHhjYTg4LCAiTG9naXRlY2ggQ29tcGFj dCBDb250cm9sbGVyIGZvciBYYm94IiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAot CXsgMHgwNWZkLCAweDEwMDcsICJNYWQgQ2F0eiBDb250cm9sbGVyICh1bnZlcmlmaWVkKSIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDVmZCwgMHgxMDdhLCAiSW50ZXJB Y3QgJ1Bvd2VyUGFkIFBybycgWC1Cb3ggcGFkIChHZXJtYW55KSIsIE1BUF9EUEFEX1RPX0FYRVMs IFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NTE2LCAiTWFkIENhdHogQ29udHJvbCBQYWQi LCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDUyMiwgIk1h ZCBDYXR6IEx1bWlDT04iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3 MzgsIDB4NDUyNiwgIk1hZCBDYXR6IENvbnRyb2wgUGFkIFBybyIsIE1BUF9EUEFEX1RPX0FYRVMs IFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NTM2LCAiTWFkIENhdHogTWljcm9DT04iLCBN QVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDU0MCwgIk1hZCBD YXR6IEJlYXQgUGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAotCXsgMHgw NzM4LCAweDQ1NTYsICJNYWQgQ2F0eiBMeW54IFdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBB RF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDcxNiwgIk1hZCBDYXR6IFdp cmVkIFhib3ggMzYwIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYw IH0sCi0JeyAweDA3MzgsIDB4NjA0MCwgIk1hZCBDYXR6IEJlYXQgUGFkIFBybyIsIE1BUF9EUEFE X1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4ODAyLCAiWmVyb3BsdXMg WGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgw YzEyLCAweDg4MGEsICJQZWxpY2FuIEVjbGlwc2UgUEwtMjAyMyIsIE1BUF9EUEFEX1RPX0FYRVMs IFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4ODEwLCAiWmVyb3BsdXMgWGJveCBDb250cm9s bGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwYzEyLCAweDk5MDIs ICJIQU1BIFZpYnJhWCAtICpGQVVMVFkgSEFSRFdBUkUqIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZ UEVfWEJPWCB9LAotCXsgMHgwZTRjLCAweDEwOTcsICJSYWRpY2EgR2FtZXN0ZXIgQ29udHJvbGxl ciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU0YywgMHgyMzkwLCAi UmFkaWNhIEdhbWVzIEp0ZWNoIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9Y Qk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwMywgIkxvZ2ljMyBGcmVlYmlyZCB3aXJlbGVzcyBDb250 cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZTZmLCAweDAw MDUsICJFY2xpcHNlIHdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQ RV9YQk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwNiwgIkVkZ2Ugd2lyZWxlc3MgQ29udHJvbGxlciIs IE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU2ZiwgMHgwMDA2LCAiUGVs aWNhbiAnVFNaJyBXaXJlZCBYYm94IDM2MCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywg WFRZUEVfWEJPWDM2MCB9LAotCXsgMHgwZThmLCAweDAyMDEsICJTbWFydEpveSBGcmFnIFhwYWQv UFMyIGFkYXB0b3IiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBmMzAs IDB4MDIwMiwgIkpveXRlY2ggQWR2YW5jZWQgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMs IFhUWVBFX1hCT1ggfSwKLQl7IDB4MGYzMCwgMHg4ODg4LCAiQmlnQmVuIFhCTWluaVBhZCBDb250 cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgxMDJjLCAweGZm MGMsICJKb3l0ZWNoIFdpcmVsZXNzIEFkdmFuY2VkIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19B WEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDEyYWIsIDB4ODgwOSwgIlhib3ggRERSIGRhbmNlcGFk IiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAotCXsgMHgxNDMwLCAweDQ3NDgs ICJSZWRPY3RhbmUgR3VpdGFyIEhlcm8gWC1wbG9yZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQ RV9YQk9YMzYwIH0sCi0JeyAweDE0MzAsIDB4ODg4OCwgIlRYNjUwMCsgRGFuY2UgUGFkIChmaXJz dCBnZW5lcmF0aW9uKSIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4 MDQ1ZSwgMHgwMjhlLCAiTWljcm9zb2Z0IFgtQm94IDM2MCBwYWQiLCBNQVBfRFBBRF9UT19BWEVT LCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweGZmZmYsIDB4ZmZmZiwgIkNoaW5lc2UtbWFkZSBYYm94 IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDAwMDAs IDB4MDAwMCwgIkdlbmVyaWMgWC1Cb3ggcGFkIiwgTUFQX0RQQURfVU5LTk9XTiwgWFRZUEVfVU5L Tk9XTiB9Ci19OwotCi0vKiBidXR0b25zIHNoYXJlZCB3aXRoIHhib3ggYW5kIHhib3gzNjAgKi8K LXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9jb21tb25fYnRuW10gPSB7Ci0JQlROX0Es IEJUTl9CLCBCVE5fWCwgQlROX1ksCQkJLyogImFuYWxvZyIgYnV0dG9ucyAqLwotCUJUTl9TVEFS VCwgQlROX0JBQ0ssIEJUTl9USFVNQkwsIEJUTl9USFVNQlIsCS8qIHN0YXJ0L2JhY2svc3RpY2tz ICovCi0JLTEJCQkJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotLyogb3JpZ2luYWwg eGJveCBjb250cm9sbGVycyBvbmx5ICovCi1zdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IHhwYWRf YnRuW10gPSB7Ci0JQlROX0MsIEJUTl9aLAkJLyogImFuYWxvZyIgYnV0dG9ucyAqLwotCS0xCQkJ LyogdGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci0KLS8qIG9ubHkgdXNlZCBpZiBNQVBfRFBBRF9U T19CVVRUT05TICovCi1zdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IHhwYWRfYnRuX3BhZFtdID0g ewotCUJUTl9MRUZULCBCVE5fUklHSFQsCQkvKiBkLXBhZCBsZWZ0LCByaWdodCAqLwotCUJUTl8w LCBCVE5fMSwJCQkvKiBkLXBhZCB1cCwgZG93biAoWFhYIG5hbWVzPz8pICovCi0JLTEJCQkJLyog dGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBh ZDM2MF9idG5bXSA9IHsgIC8qIGJ1dHRvbnMgZm9yIHgzNjAgY29udHJvbGxlciAqLwotCUJUTl9U TCwgQlROX1RSLAkJLyogQnV0dG9uIExCL1JCICovCi0JQlROX01PREUsCQkvKiBUaGUgYmlnIFgg YnV0dG9uICovCi0JLTEKLX07Ci0KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9hYnNb XSA9IHsKLQlBQlNfWCwgQUJTX1ksCQkvKiBsZWZ0IHN0aWNrICovCi0JQUJTX1JYLCBBQlNfUlks CQkvKiByaWdodCBzdGljayAqLwotCUFCU19aLCBBQlNfUlosCQkvKiB0cmlnZ2VycyBsZWZ0L3Jp Z2h0ICovCi0JLTEJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotLyogb25seSB1c2Vk IGlmIE1BUF9EUEFEX1RPX0FYRVMgKi8KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9h YnNfcGFkW10gPSB7Ci0JQUJTX0hBVDBYLCBBQlNfSEFUMFksCS8qIGQtcGFkIGF4ZXMgKi8KLQkt MQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotCi0vKiBYYm94IDM2MCBoYXMgYSB2ZW5k b3Itc3BlY2lmaWMgY2xhc3MsIHNvIHdlIGNhbm5vdCBtYXRjaCBpdCB3aXRoIG9ubHkKLSAqIFVT Ql9JTlRFUkZBQ0VfSU5GTyAoYWxzbyBzcGVjaWZpY2FsbHkgcmVmdXNlZCBieSBVU0Igc3Vic3lz dGVtKSwgc28gd2UKLSAqIG1hdGNoIGFnYWluc3QgdmVuZG9yIGlkIGFzIHdlbGwuIFdpcmVkIFhi b3ggMzYwIGRldmljZXMgaGF2ZSBwcm90b2NvbCAxLAotICogd2lyZWxlc3MgY29udHJvbGxlcnMg aGF2ZSBwcm90b2NvbCAxMjkuICovCi0jZGVmaW5lIFhQQURfWEJPWDM2MF9WRU5ET1JfUFJPVE9D T0wodmVuZCxwcikgXAotCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9S IHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywgXAotCS5pZFZlbmRvciA9ICh2ZW5kKSwg XAotCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMsIFwKLQkuYkludGVy ZmFjZVN1YkNsYXNzID0gOTMsIFwKLQkuYkludGVyZmFjZVByb3RvY29sID0gKHByKQotI2RlZmlu ZSBYUEFEX1hCT1gzNjBfVkVORE9SKHZlbmQpIFwKLQl7IFhQQURfWEJPWDM2MF9WRU5ET1JfUFJP VE9DT0wodmVuZCwxKSB9LCBcCi0JeyBYUEFEX1hCT1gzNjBfVkVORE9SX1BST1RPQ09MKHZlbmQs MTI5KSB9Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB4cGFkX3RhYmxlIFtdID0gewot CXsgVVNCX0lOVEVSRkFDRV9JTkZPKCdYJywgJ0InLCAwKSB9LAkvKiBYLUJveCBVU0ItSUYgbm90 IGFwcHJvdmVkIGNsYXNzICovCi0JWFBBRF9YQk9YMzYwX1ZFTkRPUigweDA0NWUpLAkJLyogTWlj cm9zb2Z0IFgtQm94IDM2MCBjb250cm9sbGVycyAqLwotCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgw NDZkKSwJCS8qIExvZ2l0ZWNoIFgtQm94IDM2MCBzdHlsZSBjb250cm9sbGVycyAqLwotCVhQQURf WEJPWDM2MF9WRU5ET1IoMHgwNzM4KSwJCS8qIE1hZCBDYXR6IFgtQm94IDM2MCBjb250cm9sbGVy cyAqLwotCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwZTZmKSwJCS8qIDB4MGU2ZiBYLUJveCAzNjAg Y29udHJvbGxlcnMgKi8KLQlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MTQzMCksCQkvKiBSZWRPY3Rh bmUgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCi0JeyB9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RB QkxFICh1c2IsIHhwYWRfdGFibGUpOwotCi1zdHJ1Y3QgdXNiX3hwYWQgewotCXN0cnVjdCBpbnB1 dF9kZXYgKmRldjsJCS8qIGlucHV0IGRldmljZSBpbnRlcmZhY2UgKi8KLQlzdHJ1Y3QgdXNiX2Rl dmljZSAqdWRldjsJLyogdXNiIGRldmljZSAqLwotCi0JaW50IHBhZF9wcmVzZW50OwotCi0Jc3Ry dWN0IHVyYiAqaXJxX2luOwkJLyogdXJiIGZvciBpbnRlcnJ1cHQgaW4gcmVwb3J0ICovCi0JdW5z aWduZWQgY2hhciAqaWRhdGE7CQkvKiBpbnB1dCBkYXRhICovCi0JZG1hX2FkZHJfdCBpZGF0YV9k bWE7CisgKiBXZSB1c2UgY29tbW9uIGZ1bmN0aW9ucywgd2hlcmUgcG9zc2libGUsIHRvIGltcGxl bWVudCB0aGUgc2hvdy9zdG9yZQorICogcm91dGluZXMuIFRoaXMgZGVzaWduIHNhdmVzIG9uIGNv ZGUgYW5kIHJlZHVjZXMgdGhlIGJ1cmRlbiBvZiBhZGRpbmcgdG8gb3IKKyAqIGNoYW5naW5nIHRo ZSBpbnRlcmZhY2UuCisgKi8KKyAKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykKIAotCXN0cnVj dCB1cmIgKmJ1bGtfb3V0OwotCXVuc2lnbmVkIGNoYXIgKmJkYXRhOworc3RhdGljIHNzaXplX3Qg eHBhZF9zaG93X3VpbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0 ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IHRvX3hw YWQoZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX2xl ZnRfZGVhZF96b25lKQorCQl2YWx1ZSA9IHhwYWQtPmxlZnRfZGVhZF96b25lOworCWVsc2UgaWYg KGF0dHIgPT0gJmRldl9hdHRyX3JpZ2h0X2RlYWRfem9uZSkKKwkJdmFsdWUgPSB4cGFkLT5yaWdo dF9kZWFkX3pvbmU7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfbGVmdF9zdGlja19saW1p dCkKKwkJdmFsdWUgPSB4cGFkLT5sZWZ0X3N0aWNrX2xpbWl0OworCWVsc2UgaWYgKGF0dHIgPT0g JmRldl9hdHRyX3JpZ2h0X3N0aWNrX2xpbWl0KQorCQl2YWx1ZSA9IHhwYWQtPnJpZ2h0X3N0aWNr X2xpbWl0OworCWVsc2UKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFH RV9TSVpFLCAiJXVcbiIsIHZhbHVlKTsKK30KIAotI2lmIGRlZmluZWQoQ09ORklHX0pPWVNUSUNL X1hQQURfRkYpIHx8IGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX1hQQURfTEVEUykKLQlzdHJ1Y3Qg dXJiICppcnFfb3V0OwkJLyogdXJiIGZvciBpbnRlcnJ1cHQgb3V0IHJlcG9ydCAqLwotCXVuc2ln bmVkIGNoYXIgKm9kYXRhOwkJLyogb3V0cHV0IGRhdGEgKi8KLQlkbWFfYWRkcl90IG9kYXRhX2Rt YTsKLQlzdHJ1Y3QgbXV0ZXggb2RhdGFfbXV0ZXg7Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQoQ09O RklHX0pPWVNUSUNLX1hQQURfTEVEUykKLQlzdHJ1Y3QgeHBhZF9sZWQgKmxlZDsKK3N0YXRpYyBz c2l6ZV90IHhwYWRfc3RvcmVfdWludChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlz dHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB0b194cGFkKGRldik7CisJdW5zaWduZWQgaW50IG5ld192 YWx1ZTsKKwlpZiAoMSAhPSBzc2NhbmYoYnVmLCAiJXUiLCAmbmV3X3ZhbHVlKSkgeworCQlyZXR1 cm4gLUVJTzsKKwl9CisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX2xlZnRfZGVhZF96b25lKQorCQlz ZXRfZGVhZF96b25lKG5ld192YWx1ZSwgJnhwYWQtPmxlZnRfZGVhZF96b25lLCB4cGFkLT5sZWZ0 X3N0aWNrX2xpbWl0KTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9yaWdodF9kZWFkX3pv bmUpCisJCXNldF9kZWFkX3pvbmUobmV3X3ZhbHVlLCAmeHBhZC0+cmlnaHRfZGVhZF96b25lLCB4 cGFkLT5yaWdodF9zdGlja19saW1pdCk7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfbGVm dF9zdGlja19saW1pdCkKKwkJc2V0X3N0aWNrX2xpbWl0KG5ld192YWx1ZSwgJnhwYWQtPmxlZnRf c3RpY2tfbGltaXQsIHhwYWQtPmxlZnRfZGVhZF96b25lKTsKKwllbHNlIGlmIChhdHRyID09ICZk ZXZfYXR0cl9yaWdodF9zdGlja19saW1pdCkKKwkJc2V0X3N0aWNrX2xpbWl0KG5ld192YWx1ZSwg JnhwYWQtPnJpZ2h0X3N0aWNrX2xpbWl0LCB4cGFkLT5yaWdodF9kZWFkX3pvbmUpOworCWVsc2UK KwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIHN0cm5sZW4oYnVmLCBQQUdFX1NJWkUpOworfQorCisK K3N0YXRpYyBzc2l6ZV90IHhwYWRfc3RvcmVfcnVtYmxlX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpk ZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNp emVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB0b194cGFkKGRldik7CisJ aW50IG5ld3J1bWJsZSA9IHhwYWQtPnJ1bWJsZV9lbmFibGU7CisJaWYgKDEgPT0gc3NjYW5mKGJ1 ZiwgIiVkIiwgJm5ld3J1bWJsZSkpCisJCXhwYWQtPnJ1bWJsZV9lbmFibGUgPSAobmV3cnVtYmxl KSA/IDEgOiAwOworCXJldHVybiBjb3VudDsKK30KKworCisvKiByZWFkLW9ubHkgYXR0cmlidXRl cyBzaGFyZSBhIGNvbW1vbiBzdG9yZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZXJyb3IgKi8K K3N0YXRpYyBzc2l6ZV90IHhwYWRfc3RvcmVfcm8oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg ZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQp Cit7CisJcmV0dXJuIC1FSU87Cit9CisKKworc3RhdGljIHNzaXplX3QgeHBhZF9zaG93X2ludChz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFy ICpidWYpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gdG9feHBhZChkZXYpOworCWludCB2 YWx1ZTsKKwlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcnVtYmxlX2VuYWJsZSkKKwkJdmFsdWUgPSB4 cGFkLT5ydW1ibGVfZW5hYmxlOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2NvbnRyb2xs ZXJfbnVtYmVyKQorCQl2YWx1ZSA9IHhwYWQtPmNvbnRyb2xsZXJfbnVtYmVyOworCWVsc2UgaWYg KGF0dHIgPT0gJmRldl9hdHRyX2NvbnRyb2xsZXJfcHJlc2VudCkKKwkJdmFsdWUgPSB4cGFkLT5j b250cm9sbGVyX3ByZXNlbnQ7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfY29udHJvbGxl cl90eXBlKQorCQl2YWx1ZSA9IHhwYWQtPmNvbnRyb2xsZXJfdHlwZTsKKwllbHNlCisJCXJldHVy biAtRUlPOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2YWx1ZSk7 Cit9CisKKworc3RhdGljIHNzaXplX3QgeHBhZF9zaG93X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwK KwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qg dXNiX3hwYWQgKnhwYWQgPSB0b194cGFkKGRldik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFH RV9TSVpFLCAiJXNcbiIsIHhwYWQtPmNvbnRyb2xsZXJfdW5pcXVlX2lkKTsKK30KKwogI2VuZGlm CisvKiBlbmQgb2Ygc3lzZnMgaW50ZXJmYWNlICovCisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK Ky8qIElucHV0IHNlY3Rpb24gKi8KKworLyoJeHBhZF9pbml0X2NvbnRyb2xsZXIKKyAqCisgKglQ ZXJmb3JtcyBjb250cm9sbGVyIHNldHVwIGJhc2VkIG9uIGNvbnRyb2xsZXIgdHlwZS4KKyAqCisg KglOT1RFOiB4cGFkLT5jb250cm9sbGVyX2RhdGEtPmNvbnRyb2xsZXJfdHlwZSBuZWVkcyB0byBi ZSBzZXQgQkVGT1JFCisgKgljYWxsaW5nIHRoaXMgZnVuY3Rpb24hCisgKi8KKyAKK3N0YXRpYyB2 b2lkIHhwYWRfaW5pdF9jb250cm9sbGVyKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKK3sKKwlzZXRf c3RpY2tfbGltaXQoWFNUSUNLX0xJTUlUX0RFRkFVTFQsICZ4cGFkLT5sZWZ0X3N0aWNrX2xpbWl0 LCB4cGFkLT5sZWZ0X2RlYWRfem9uZSk7CisJc2V0X3N0aWNrX2xpbWl0KFhTVElDS19MSU1JVF9E RUZBVUxULCAmeHBhZC0+cmlnaHRfc3RpY2tfbGltaXQsIHhwYWQtPnJpZ2h0X2RlYWRfem9uZSk7 CisJc2V0X2RlYWRfem9uZShYREVBRF9aT05FX0RFRkFVTFQsICZ4cGFkLT5sZWZ0X2RlYWRfem9u ZSwgeHBhZC0+bGVmdF9zdGlja19saW1pdCk7CisJc2V0X2RlYWRfem9uZShYREVBRF9aT05FX0RF RkFVTFQsICZ4cGFkLT5yaWdodF9kZWFkX3pvbmUsIHhwYWQtPnJpZ2h0X3N0aWNrX2xpbWl0KTsK KwkKKwlpZiAoeHBhZC0+Y29udHJvbGxlcl90eXBlID09IFhDT05UUk9MTEVSX1RZUEVfR1VJVEFS KSB7CisJCXhwYWQtPnJ1bWJsZV9lbmFibGUgPSAwOworCX0KKwllbHNlIGlmICh4cGFkLT5jb250 cm9sbGVyX3R5cGUgPT0gWENPTlRST0xMRVJfVFlQRV9EQU5DRV9QQUQpIHsKKwkJeHBhZC0+cnVt YmxlX2VuYWJsZSA9IDA7CisJfQorCWVsc2UgeworCQl4cGFkLT5ydW1ibGVfZW5hYmxlID0gMTsK Kwl9Cit9CisKIAotCWNoYXIgcGh5c1s2NF07CQkJLyogcGh5c2ljYWwgZGV2aWNlIHBhdGggKi8K Ky8qCisgKgl4cGFkX3dvcmtfY29udHJvbGxlcgorICoKKyAqCVN1Ym1pdHMgY29tbWFuZCB0byBz ZXQgcGFkIG51bWJlciBvbiBMRUQgZGlzcGxheSBvZiB3aXJlbGVzcyAzNjAKKyAqCWNvbnRyb2xs ZXJzLiBUaGUgc2hhcmVkIHdvcmtxdWV1ZSBpcyB1c2VkIGZvciB0aGlzIHB1cnBvc2UsIHNvIHRo YXQKKyAqCXRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBrZXB0IHNob3J0LgorICovCisgCitzdGF0 aWMgdm9pZCB4cGFkX3dvcmtfY29udHJvbGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7Cisg ICBzdHJ1Y3QgdXNiX3hwYWQgKiB4cGFkID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB1c2JfeHBh ZCwgd29yayk7CisgICB4cGFkX3NlbmRfbGVkX2NvbW1hbmQoeHBhZCwgeHBhZC0+Y29udHJvbGxl cl9udW1iZXIgKyAxKTsKKyAgIHhwYWQtPndvcmtfcGVuZGluZyA9IDA7Cit9CisKKworLyoKKyAq CXhwYWRfcHJvY2Vzc19zdGlja3MKKyAqCisgKglIYW5kbGVzIHN0aWNrIGlucHV0LCBhY2NvdW50 aW5nIGZvciBkZWFkIHpvbmVzIGFuZCBzcXVhcmUgYXhlcy4gQmFzZWQKKyAqCW9uIHRoZSBvcmln aW5hbCBoYW5kbGVycyBmb3IgdGhlIFhib3ggYW5kIFhib3ggMzYwIGluCisgKgl4cGFkX3Byb2Nl c3NfcGFja2V0IGFuZCB4cGFkMzYwX3Byb2Nlc3NfcGFja2V0LCBidXQgdW5pZmllZCB0byBhdm9p ZAorICoJZHVwbGljYXRpb24uCisgKgorICoJV2hlbmV2ZXIgYSBkZWFkIHpvbmUgaXMgdXNlZCwg ZWFjaCBheGlzIGlzIHNjYWxlZCBzbyB0aGF0IG1vdmluZyB0aGUKKyAqCXN0aWNrIHNsaWdodGx5 IG91dCBvZiB0aGUgZGVhZCB6b25lIHJhbmdlIHJlc3VsdHMgaW4gYSBsb3cgYXhpcworICoJdmFs dWUgaW4ganN0ZXN0KDEpLCB3aGlsZSBtb3ZpbmcgdGhlIHN0aWNrIHRvIHRoZSBtYXhpbXVtIHBv c2l0aW9uCisgKglhbG9uZyBhbnkgYXhpcyBzdGlsbCByZXN1bHRzIGluIDMyNzY3LgorICoKKyAq CUluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIGFiaWxpdHkgdG8gbWFwIGlucHV0cyB0byBhIHNxdWFy ZSBheGlzICh1c2VkCisgKglieSBvbGRlciBnYW1lcyksIHRoZSBsZWZ0X3N0aWNrX2xpbWl0IGFu ZCByaWdodF9zdGlja19saW1pdCBjYW4gYmUKKyAqCXNldC4gVGhlc2UgbGltaXRzIHNwZWNpZnkg YXQgd2hhdCBwb2ludCBpbiB0aGUgcmF3IGlucHV0IGNvb3JkaW5hdGVzCisgKglhbiBheGlzIGlz IHJlcG9ydGVkIHRvIGJlIGF0IG1heGltdW0gdmFsdWUgKDMyNzY3IG9yIC0zMjc2NykuCisgKgor ICoJQm90aCB0aGUgZGVhZCB6b25lIGFuZCBzdGljayBsaW1pdCBhbGdvcml0aG1zIGFyZSBpbXBs ZW1lbnRlZAorICoJdG9nZXRoZXIgYXMgYSBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uIGZyb20g ImVmZmVjdGl2ZSBjb29yZGluYXRlcyIKKyAqCW9udG8gdGhlIG91dHB1dCBjb29yZGluYXRlcyAo d2hpY2ggaGF2ZSBhYnNvbHV0ZSB2YWx1ZXMgZnJvbSAwIHRvCisgKgkzMjc2NyBhbmQgYXJlIHBv c2l0aXZlIG9yIG5lZ2F0aXZlIGJhc2VkIG9uIGRpcmVjdGlvbikuIEVmZmVjdGl2ZQorICoJY29v cmRpbmF0ZXMgYXJlIGRlZmluZWQgYXMgdGhvc2UgaW5wdXQgdmFsdWVzIHRoYXQgYXJlIGdyZWF0 ZXIgdGhhbgorICoJdGhlIGRlYWQgem9uZSBidXQgbGVzcyB0aGFuIHRoZSBzdGljayBsaW1pdCBv biB0aGUgYXhpcyBpbiBxdWVzdGlvbi4KKyAqCisgKglEQU5HRVI6IEFsbCBkZW5vbWluYXRvciB2 YWx1ZXMgaW4gZGl2aXNpb24gb3BlcmF0aW9ucyBNVVNUIGJlIGNoZWNrZWQKKyAqCWZvciBub24t emVybyBjb25kaXRpb24uIERpdmlkaW5nIGJ5IHplcm8gaW5zaWRlIHRoZSBrZXJuZWwgY2FuIGNh dXNlCisgKglhIHN5c3RlbSBkZWFkbG9jay4KKyAqLworCitzdGF0aWMgdm9pZCB4cGFkX3Byb2Nl c3Nfc3RpY2tzKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sK KwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB4cGFkLT5kZXY7CisJaW50IGNvb3Jkc1s0XTsgICAg LyogeCwgeSwgcngsIHJ5ICovCisJaW50IHhfb2Zmc2V0LCB5X29mZnNldCwgcnhfb2Zmc2V0LCBy eV9vZmZzZXQ7CisJaW50IGM7CisJaW50IHJhbmdlOworCWludCBhYnNfbWFnbml0dWRlLCBhZGp1 c3RlZF9tYWduaXR1ZGUsIGRpZmZlcmVuY2UsIHNjYWxlX2ZyYWN0aW9uOworCWludCBkZWFkX3pv bmVbMl0sIHN0aWNrX2xpbWl0WzJdOworCQorCWRlYWRfem9uZVswXSA9IHhwYWQtPmxlZnRfZGVh ZF96b25lOworCWRlYWRfem9uZVsxXSA9IHhwYWQtPnJpZ2h0X2RlYWRfem9uZTsKKwlzdGlja19s aW1pdFswXSA9IHhwYWQtPmxlZnRfc3RpY2tfbGltaXQ7CisJc3RpY2tfbGltaXRbMV0gPSB4cGFk LT5yaWdodF9zdGlja19saW1pdDsKKwkKKwlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWCkg eworCQl4X29mZnNldCA9IDEyOworCQl5X29mZnNldCA9IDE0OworCQlyeF9vZmZzZXQgPSAxNjsK KwkJcnlfb2Zmc2V0ID0gMTg7CisJfQorCWVsc2UgeworCQl4X29mZnNldCA9IDY7CisJCXlfb2Zm c2V0ID0gODsKKwkJcnhfb2Zmc2V0ID0gMTA7CisJCXJ5X29mZnNldCA9IDEyOworCX0KKwkKKwlj b29yZHNbMF0gPSAoX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyB4X29mZnNl dCkpOworCWNvb3Jkc1sxXSA9IH4oX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEg KyB5X29mZnNldCkpOworCWNvb3Jkc1syXSA9IChfX3MxNikgbGUxNl90b19jcHVwKChfX2xlMTYg KikoZGF0YSArIHJ4X29mZnNldCkpOworCWNvb3Jkc1szXSA9IH4oX19zMTYpIGxlMTZfdG9fY3B1 cCgoX19sZTE2ICopKGRhdGEgKyByeV9vZmZzZXQpKTsKKwkKKwkvKiBBZGp1c3RtZW50IGZvciBk ZWFkIHpvbmUgYW5kIHNxdWFyZSBheGlzICovCisJZm9yIChjID0gMDsgYyA8IDQ7IGMrKykgewor CQlhYnNfbWFnbml0dWRlID0gKGludCkgY29vcmRzW2NdOworCQlpZiAoYWJzX21hZ25pdHVkZSA8 IDApCisJCQlhYnNfbWFnbml0dWRlID0gLWFic19tYWduaXR1ZGU7CisJCWFkanVzdGVkX21hZ25p dHVkZSA9IGFic19tYWduaXR1ZGU7CisJCQorCQlyYW5nZSA9IChzdGlja19saW1pdFtjLzJdIC0g ZGVhZF96b25lW2MvMl0pOworCQkKKwkJaWYgKGFic19tYWduaXR1ZGUgPj0gc3RpY2tfbGltaXRb Yy8yXSkgeworCQkJYWRqdXN0ZWRfbWFnbml0dWRlID0gMzI3Njc7CisJCX0KKwkJZWxzZSBpZiAo YWJzX21hZ25pdHVkZSA8PSBkZWFkX3pvbmVbYy8yXSkgeworCQkJYWRqdXN0ZWRfbWFnbml0dWRl ID0gMDsKKwkJfQorCQllbHNlIGlmIChyYW5nZSA+IDApIHsKKwkJCWRpZmZlcmVuY2UgPSAzMjc2 NyAtIHJhbmdlOworCQkJaWYgKGRpZmZlcmVuY2UpIHsKKwkJCQkvKiBESVZJU0lPTjogZGlmZmVy ZW5jZSBub24temVybyAqLworCQkJCXNjYWxlX2ZyYWN0aW9uID0gcmFuZ2UgLyBkaWZmZXJlbmNl OworCQkJCWFkanVzdGVkX21hZ25pdHVkZSA9IGFic19tYWduaXR1ZGUgLSBkZWFkX3pvbmVbYy8y XTsKKwkJCQkKKwkJCQkvKiBBcHByb3hpbWF0ZSBmbG9hdGluZy1wb2ludCBkaXZpc2lvbiB3aXRo IGEKKwkJCQkgKiAiY2F0Y2gtdXAiIHNjYWxpbmcgYWxnb3JpdGhtIHRoYXQgYWRkcyBiYWNrCisJ CQkJICogdG8gdGhlIGFkanVzdGVkX21hZ25pdHVkZSBiYXNlZCBvbiBkaXN0YW5jZQorCQkJCSAq IGZyb20gdGhlIG9yaWdpbiAoMCBpbiBhZGp1c3RlZCBjb29yZGluYXRlcykuCisJCQkJICogSWYg dGhlIHJhbmdlIC8gZGlmZmVyZW5jZSBpcyBhdCBsZWFzdCAxLAorCQkJCSAqIHRoZW4gMSBuZWVk cyB0byBiZSBhZGRlZCB0byB0aGUgYWRqdXN0ZWQKKwkJCQkgKiBtYWduaXR1ZGUgZm9yIGV2ZXJ5 IHNjYWxlX2ZyYWN0aW9uIHVuaXRzCisJCQkJICogZnJvbSB0aGUgb3JpZ2luLiBJZiB0aGUgcmFu Z2UgLyBkaWZmZXJlbmNlCisJCQkJICogaXMgbGVzcyB0aGFuIDEgKDAgaW4gaW50ZWdlciBkaXZp c2lvbiksCisJCQkJICogdGhlbiBkaXZpZGUgdGhlIGRpZmZlcmVuY2UgYnkgdGhlIHJhbmdlIHRv CisJCQkJICogb2J0YWluIHRoZSBudW1iZXIgb2YgdW5pdHMgdG8gYWRkIHBlciB1bml0CisJCQkJ ICogZnJvbSB0aGUgYWRqdXN0ZWQgb3JpZ2luLgorCQkJCSAqLworCQkJCWlmIChzY2FsZV9mcmFj dGlvbikgeworCQkJCQkvKiBESVZJU0lPTjogc2NhbGVfZnJhY3Rpb24gbm9uLXplcm8gKi8KKwkJ CQkJYWRqdXN0ZWRfbWFnbml0dWRlICs9IGFkanVzdGVkX21hZ25pdHVkZSAvIHNjYWxlX2ZyYWN0 aW9uOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLyogRElWSVNJT046IHJhbmdlIG5vbi16ZXJv ICovCisJCQkJCXNjYWxlX2ZyYWN0aW9uID0gZGlmZmVyZW5jZSAvIHJhbmdlOworCQkJCQlhZGp1 c3RlZF9tYWduaXR1ZGUgKz0gYWRqdXN0ZWRfbWFnbml0dWRlICogc2NhbGVfZnJhY3Rpb247CisJ CQkJfQorCQkJCWlmIChhZGp1c3RlZF9tYWduaXR1ZGUgPiAzMjc2NykKKwkJCQkJYWRqdXN0ZWRf bWFnbml0dWRlID0gMzI3Njc7CisJCQl9CisJCX0KKwkJY29vcmRzW2NdID0gKGNvb3Jkc1tjXSA8 IDApID8gLWFkanVzdGVkX21hZ25pdHVkZSA6IGFkanVzdGVkX21hZ25pdHVkZTsKKwl9CisJCisJ aW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCAoX19zMTYpIGNvb3Jkc1swXSk7CisJaW5wdXRf cmVwb3J0X2FicyhkZXYsIEFCU19ZLCAoX19zMTYpIGNvb3Jkc1sxXSk7CisJaW5wdXRfcmVwb3J0 X2FicyhkZXYsIEFCU19SWCwgKF9fczE2KSBjb29yZHNbMl0pOworCWlucHV0X3JlcG9ydF9hYnMo ZGV2LCBBQlNfUlksIChfX3MxNikgY29vcmRzWzNdKTsKK30KIAotCWludCBkcGFkX21hcHBpbmc7 CQkvKiBtYXAgZC1wYWQgdG8gYnV0dG9ucyBvciB0byBheGVzICovCi0JaW50IHh0eXBlOwkJCS8q IHR5cGUgb2YgeGJveCBkZXZpY2UgKi8KLX07CiAKIC8qCiAgKgl4cGFkX3Byb2Nlc3NfcGFja2V0 CkBAIC0yNTYsMTggKzM0Miw5IEBACiBzdGF0aWMgdm9pZCB4cGFkX3Byb2Nlc3NfcGFja2V0KHN0 cnVjdCB1c2JfeHBhZCAqeHBhZCwgdTE2IGNtZCwgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKIAlz dHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB4cGFkLT5kZXY7Ci0KLQkvKiBsZWZ0IHN0aWNrICovCi0J aW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLAotCQkJIChfX3MxNikgbGUxNl90b19jcHVwKChf X2xlMTYgKikoZGF0YSArIDEyKSkpOwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwKLQkJ CSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTQpKSk7Ci0KLQkvKiBy aWdodCBzdGljayAqLwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgsCi0JCQkgKF9fczE2 KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTYpKSk7Ci0JaW5wdXRfcmVwb3J0X2Fi cyhkZXYsIEFCU19SWSwKLQkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRh ICsgMTgpKSk7CisJCisJLyogbGVmdCBhbmQgcmlnaHQgc3RpY2tzICovCisJeHBhZF9wcm9jZXNz X3N0aWNrcyh4cGFkLCBkYXRhKTsKIAogCS8qIHRyaWdnZXJzIGxlZnQvcmlnaHQgKi8KIAlpbnB1 dF9yZXBvcnRfYWJzKGRldiwgQUJTX1osIGRhdGFbMTBdKTsKQEAgLTMwNSw2ICszODIsNyBAQAog CWlucHV0X3N5bmMoZGV2KTsKIH0KIAorCiAvKgogICoJeHBhZDM2MF9wcm9jZXNzX3BhY2tldAog ICoKQEAgLTM1MCwxOCArNDI4LDkgQEAKIAlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RMLAlk YXRhWzNdICYgMHgwMSk7CiAJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UUiwJZGF0YVszXSAm IDB4MDIpOwogCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTU9ERSwJZGF0YVszXSAmIDB4MDQp OwotCi0JLyogbGVmdCBzdGljayAqLwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwKLQkJ CSAoX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyA2KSkpOwotCWlucHV0X3Jl cG9ydF9hYnMoZGV2LCBBQlNfWSwKLQkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAq KShkYXRhICsgOCkpKTsKLQotCS8qIHJpZ2h0IHN0aWNrICovCi0JaW5wdXRfcmVwb3J0X2Ficyhk ZXYsIEFCU19SWCwKLQkJCSAoX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAx MCkpKTsKLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JZLAotCQkJIH4oX19zMTYpIGxlMTZf dG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAxMikpKTsKKwkKKwkvKiBsZWZ0IGFuZCByaWdodCBz dGlja3MgKi8KKwl4cGFkX3Byb2Nlc3Nfc3RpY2tzKHhwYWQsIGRhdGEpOwogCiAJLyogdHJpZ2dl cnMgbGVmdC9yaWdodCAqLwogCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWiwgZGF0YVs0XSk7 CkBAIC0zNzAsNiArNDM5LDMzIEBACiAJaW5wdXRfc3luYyhkZXYpOwogfQogCisKK3N0YXRpYyB2 b2lkIHhwYWQzNjB3X2lkZW50aWZ5X2NvbnRyb2xsZXIoc3RydWN0IHVzYl94cGFkICp4cGFkLCB1 bnNpZ25lZCBjaGFyICpkYXRhKQoreworCXUzMiBpZDsKKwlpbnQgaTsKKwkKKwlzbnByaW50Zih4 cGFkLT5jb250cm9sbGVyX3VuaXF1ZV9pZCwgMTcsCisJCSIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUw MnglMDJ4JTAyeCIsCisJCWRhdGFbOF0sIGRhdGFbOV0sIGRhdGFbMTBdLCBkYXRhWzExXSwgZGF0 YVsxMl0sIGRhdGFbMTNdLAorCQlkYXRhWzE0XSwgZGF0YVsxNV0pOworCQkJCisJLyogSWRlbnRp ZnkgY29udHJvbGxlciB0eXBlICovCisJaWQgPSAodTMyKSAqKGRhdGEgKyAyMik7CisJeHBhZC0+ Y29udHJvbGxlcl90eXBlID0gWENPTlRST0xMRVJfVFlQRV9PVEhFUjsKKwlmb3IgKGkgPSAwOyB3 MzYwX2lkW2ldLmlkX2J5dGVzOyBpKyspIHsKKwkJaWYgKGlkID09IHczNjBfaWRbaV0uaWRfYnl0 ZXMpIHsKKwkJCXhwYWQtPmNvbnRyb2xsZXJfdHlwZSA9CisJCQkJdzM2MF9pZFtpXS5jb250cm9s bGVyX3R5cGU7CisJCQlicmVhazsKKwkJfQorCX0KKwkKKwlpZiAoaWQgPT0gWENPTlRST0xMRVJf VFlQRV9PVEhFUikKKwkJcHJpbnRrKEtFUk5fSU5GTyAieHBhZDogdW5rbm93biB3aXJlbGVzcyBj b250cm9sbGVyIHR5cGU6ICUwOHhcbiIsIGlkKTsKK30KKworCiAvKgogICogeHBhZDM2MHdfcHJv Y2Vzc19wYWNrZXQKICAqCkBAIC0zNzksNiArNDc1LDcgQEAKICAqIEJ5dGUuQml0CiAgKiAwMC4x IC0gU3RhdHVzIGNoYW5nZTogVGhlIGNvbnRyb2xsZXIgb3IgaGVhZHNldCBoYXMgY29ubmVjdGVk L2Rpc2Nvbm5lY3RlZAogICogICAgICAgICAgICAgICAgICAgICAgIEJpdHMgMDEuNyBhbmQgMDEu NiBhcmUgdmFsaWQKKyAqIDAxLmYgLSBTb21lIGtpbmQgb2YgdW5pcXVlIGlkZW50aWZpZXIgbWVz c2FnZSAoc2VlIGFib3ZlKQogICogMDEuNyAtIENvbnRyb2xsZXIgcHJlc2VudAogICogMDEuNiAt IEhlYWRzZXQgcHJlc2VudAogICogMDEuMSAtIFBhZCBzdGF0ZSAoQnl0ZXMgNCspIHZhbGlkCkBA IC0zODcsMjIgKzQ4NCw1MyBAQAogCiBzdGF0aWMgdm9pZCB4cGFkMzYwd19wcm9jZXNzX3BhY2tl dChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIHUxNiBjbWQsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7 Ci0JLyogUHJlc2VuY2UgY2hhbmdlICovCisJaW50IHBhZG51bSA9IDA7CisKKwkvKiBQcmVzZW5j ZSBjaGFuZ2UgKi8JCiAJaWYgKGRhdGFbMF0gJiAweDA4KSB7CisJCXBhZG51bSA9IHhwYWQtPmNv bnRyb2xsZXJfbnVtYmVyOwogCQlpZiAoZGF0YVsxXSAmIDB4ODApIHsKLQkJCXhwYWQtPnBhZF9w cmVzZW50ID0gMTsKLQkJCXVzYl9zdWJtaXRfdXJiKHhwYWQtPmJ1bGtfb3V0LCBHRlBfQVRPTUlD KTsKLQkJfSBlbHNlCi0JCQl4cGFkLT5wYWRfcHJlc2VudCA9IDA7CisJCQkvKiBpZ25vcmUgZHVw bGljYXRlcyAqLworCQkJaWYgKCF4cGFkLT5jb250cm9sbGVyX3ByZXNlbnQpIHsKKwkJCQl4cGFk LT5jb250cm9sbGVyX3ByZXNlbnQgPSAxOworCQkJCQorCQkJCWlmICh4cGFkLT53b3JrX3BlbmRp bmcpCisJCQkJCVBSRVBBUkVfV09SSygmeHBhZC0+d29yaywgJnhwYWRfd29ya19jb250cm9sbGVy KTsKKwkJCQllbHNlCisJCQkJCUlOSVRfV09SSygmeHBhZC0+d29yaywgJnhwYWRfd29ya19jb250 cm9sbGVyKTsKKwkJCQl4cGFkLT53b3JrX3BlbmRpbmcgPSAxOworCQkJCXNjaGVkdWxlX3dvcmso JnhwYWQtPndvcmspOworCQkJCWtvYmplY3RfdWV2ZW50KCZ4cGFkLT5kZXYtPmRldi5rb2JqLCBL T0JKX09OTElORSk7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQlrb2JqZWN0X3VldmVudCgmeHBh ZC0+ZGV2LT5kZXYua29iaiwgS09CSl9PRkZMSU5FKTsKKwkJCXhwYWQtPmNvbnRyb2xsZXJfcHJl c2VudCA9IDA7CisJCQl4cGFkLT5jb250cm9sbGVyX3VuaXF1ZV9pZFswXSA9ICdcMCc7CisJCQl4 cGFkLT5jb250cm9sbGVyX3R5cGUgPSBYQ09OVFJPTExFUl9UWVBFX05PTkU7CisJCQkvKiBXZSBk byBOT1QgZmx1c2ggdGhlIHNoYXJlZCB3b3JrcXVldWUgaGVyZSwgYmVjYXVzZQorCQkJICogdGhp cyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgaGFuZGxlci4KKwkJCSAqIElm IHRoZSBjb250cm9sbGVyIGhhcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgcmVjZWl2ZXIsCisJCQkg KiB0aGUgd29yc3QgdGhhdCB3aWxsIGhhcHBlbiBmcm9tIHRoZSB3b3JrIHRhc2sgcnVubmluZwor CQkJICogaXMgdGhhdCBhIHBhY2tldCB3aWxsIGJlIHRyYW5zbWl0dGVkIGZyb20gdGhlCisJCQkg KiByZWNlaXZlciB0byBhIG5vbi1saXN0ZW5pbmcgY29udHJvbGxlcgorCQkJICovCisJCX0KIAl9 CiAKLQkvKiBWYWxpZCBwYWQgZGF0YSAqLwotCWlmICghKGRhdGFbMV0gJiAweDEpKQotCQlyZXR1 cm47Ci0KLQl4cGFkMzYwX3Byb2Nlc3NfcGFja2V0KHhwYWQsIGNtZCwgJmRhdGFbNF0pOworCS8q IFByb2Nlc3MgcGFja2V0cyBhY2NvcmRpbmcgdG8gdHlwZSAqLworCWlmIChkYXRhWzFdID09IDB4 MGYpIHsKKwkJaWYgKCEgeHBhZC0+Y29udHJvbGxlcl91bmlxdWVfaWRbMF0pIHsKKwkJCXhwYWQz NjB3X2lkZW50aWZ5X2NvbnRyb2xsZXIoeHBhZCwgZGF0YSk7CisJCQl4cGFkX2luaXRfY29udHJv bGxlcih4cGFkKTsKKwkJfQorCX0KKwllbHNlIGlmIChkYXRhWzFdICYgMHgxKSB7CisJCXhwYWQz NjBfcHJvY2Vzc19wYWNrZXQoeHBhZCwgY21kLCAmZGF0YVs0XSk7CisJfQogfQogCisKIHN0YXRp YyB2b2lkIHhwYWRfaXJxX2luKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3hwYWQg KnhwYWQgPSB1cmItPmNvbnRleHQ7CkBAIC00NDUsMjQgKzU3MywxNiBAQAogCQkgICAgIF9fZnVu Y19fLCByZXR2YWwpOwogfQogCi1zdGF0aWMgdm9pZCB4cGFkX2J1bGtfb3V0KHN0cnVjdCB1cmIg KnVyYikKLXsKLQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7Ci0JY2FzZSAwOgotCQkvKiBzdWNjZXNz ICovCi0JCWJyZWFrOwotCWNhc2UgLUVDT05OUkVTRVQ6Ci0JY2FzZSAtRU5PRU5UOgotCWNhc2Ug LUVTSFVURE9XTjoKLQkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJ ZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fZnVuY19fLCB1 cmItPnN0YXR1cyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRiZygiJXMgLSBub256ZXJvIHVy YiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKLQl9Ci19CiAK Ky8qIGVuZCBpbnB1dCBzZWN0aW9uICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIElS USBvdXRwdXQgc2VjdGlvbjogcHJlc2VudCBpbiBvYmplY3QgY29kZSBvbmx5IGlmIHRoZSBmb3Jj ZSBmZWVkYmFjayBvcgorICogTEVEIGludGVyZmFjZSBpcyBlbmFibGVkLgorICovCisgCiAjaWYg ZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9GRikgfHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJ Q0tfWFBBRF9MRURTKQorCiBzdGF0aWMgdm9pZCB4cGFkX2lycV9vdXQoc3RydWN0IHVyYiAqdXJi KQogewogCWludCByZXR2YWwsIHN0YXR1czsKQEAgLTQ5MywxMiArNjEzLDEzIEBACiAJCSAgICBf X2Z1bmNfXywgcmV0dmFsKTsKIH0KIAorCiBzdGF0aWMgaW50IHhwYWRfaW5pdF9vdXRwdXQoc3Ry dWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKIAlzdHJ1 Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2lycV9vdXQ7CiAJaW50IGVycm9yID0gLUVO T01FTTsKIAotCWlmICh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwKQorCWlmICgoeHBhZC0+ eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkgJiYgKHhwYWQtPnh0eXBlICE9IFhUWVBFX1hCT1gzNjBX KSkKIAkJcmV0dXJuIDA7CiAKIAl4cGFkLT5vZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoeHBhZC0+ dWRldiwgWFBBRF9QS1RfTEVOLApAQCAtNTI2LDQ1ICs2NDcsODIgQEAKICBmYWlsMToJcmV0dXJu IGVycm9yOwogfQogCisKIHN0YXRpYyB2b2lkIHhwYWRfc3RvcF9vdXRwdXQoc3RydWN0IHVzYl94 cGFkICp4cGFkKQogewotCWlmICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwKQorCWlmICgo eHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MCkgfHwgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hC T1gzNjBXKSkKIAkJdXNiX2tpbGxfdXJiKHhwYWQtPmlycV9vdXQpOwogfQogCisKIHN0YXRpYyB2 b2lkIHhwYWRfZGVpbml0X291dHB1dChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpCiB7Ci0JaWYgKHhw YWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjApIHsKKwlpZiAoKHhwYWQtPnh0eXBlID09IFhUWVBF X1hCT1gzNjApIHx8ICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykpIHsKIAkJdXNiX2Zy ZWVfdXJiKHhwYWQtPmlycV9vdXQpOwogCQl1c2JfYnVmZmVyX2ZyZWUoeHBhZC0+dWRldiwgWFBB RF9QS1RfTEVOLAogCQkJCXhwYWQtPm9kYXRhLCB4cGFkLT5vZGF0YV9kbWEpOwogCX0KIH0KKwog I2Vsc2UKKy8qIER1bW15IGltcGxlbWVudGF0aW9ucyBmb3IgeHBhZF9wcm9iZSBhbmQgeHBhZF9k aXNjb25uZWN0ICovCiBzdGF0aWMgaW50IHhwYWRfaW5pdF9vdXRwdXQoc3RydWN0IHVzYl9pbnRl cmZhY2UgKmludGYsIHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkgeyByZXR1cm4gMDsgfQogc3RhdGlj IHZvaWQgeHBhZF9kZWluaXRfb3V0cHV0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkge30KIHN0YXRp YyB2b2lkIHhwYWRfc3RvcF9vdXRwdXQoc3RydWN0IHVzYl94cGFkICp4cGFkKSB7fQogI2VuZGlm CiAKLSNpZmRlZiBDT05GSUdfSk9ZU1RJQ0tfWFBBRF9GRgorLyogZW5kIG91dHB1dCBzZWN0aW9u ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRm9yY2UgZmVlZGJhY2sgKHJ1bWJs ZSBlZmZlY3QpIHNlY3Rpb24sIGRlcGVuZHMgb24gQ09ORklHX0pPWVNUSUNLX1hQQURfRkYgKi8K KworI2lmIGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX1hQQURfRkYpCisKKy8qIFJ1bWJsZSBzdXBw b3J0IGZvciB3aXJlbGVzcyBjb250cm9sbGVycyBmb2xsb3dzIHByb3RvY29sIGRlc2NyaXB0aW9u CisgKiBmcm9tIHhib3hkcnYgdXNlcnNwYWNlIGRyaXZlcjoKKyAqICAgICAgIGh0dHA6Ly9waW5n dXMuc2V1bC5vcmcvfmdydW1iZWwveGJveGRydi8KKyAqLwogc3RhdGljIGludCB4cGFkX3BsYXlf ZWZmZWN0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICBzdHJ1Y3Qg ZmZfZWZmZWN0ICplZmZlY3QpCiB7CiAJc3RydWN0IHVzYl94cGFkICp4cGFkID0gaW5wdXRfZ2V0 X2RydmRhdGEoZGV2KTsKKwkKKwlpZiAoISB4cGFkLT5ydW1ibGVfZW5hYmxlKQorCQlyZXR1cm4g MDsKIAogCWlmIChlZmZlY3QtPnR5cGUgPT0gRkZfUlVNQkxFKSB7CiAJCV9fdTE2IHN0cm9uZyA9 IGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZTsKIAkJX191MTYgd2VhayA9IGVmZmVj dC0+dS5ydW1ibGUud2Vha19tYWduaXR1ZGU7Ci0JCXhwYWQtPm9kYXRhWzBdID0gMHgwMDsKLQkJ eHBhZC0+b2RhdGFbMV0gPSAweDA4OwotCQl4cGFkLT5vZGF0YVsyXSA9IDB4MDA7Ci0JCXhwYWQt Pm9kYXRhWzNdID0gc3Ryb25nIC8gMjU2OwotCQl4cGFkLT5vZGF0YVs0XSA9IHdlYWsgLyAyNTY7 Ci0JCXhwYWQtPm9kYXRhWzVdID0gMHgwMDsKLQkJeHBhZC0+b2RhdGFbNl0gPSAweDAwOwotCQl4 cGFkLT5vZGF0YVs3XSA9IDB4MDA7Ci0JCXhwYWQtPmlycV9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9s ZW5ndGggPSA4OworCQltdXRleF9sb2NrKCZ4cGFkLT5vZGF0YV9tdXRleCk7CisJCWlmICh4cGFk LT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykgeworCQkJeHBhZC0+b2RhdGFbMF0gPSAweDAwOwor CQkJeHBhZC0+b2RhdGFbMV0gPSAweDAxOworCQkJeHBhZC0+b2RhdGFbMl0gPSAweDBmOworCQkJ eHBhZC0+b2RhdGFbM10gPSAweGMwOworCQkJeHBhZC0+b2RhdGFbNF0gPSAweDAwOworCQkJeHBh ZC0+b2RhdGFbNV0gPSBzdHJvbmcgLyAyNTY7CisJCQl4cGFkLT5vZGF0YVs2XSA9IHdlYWsgLyAy NTY7CisJCQl4cGFkLT5vZGF0YVs3XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVs4XSA9IDB4MDA7 CisJCQl4cGFkLT5vZGF0YVs5XSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsxMF0gPSAweDAwOwor CQkJeHBhZC0+b2RhdGFbMTFdID0gMHgwMDsKKwkJCXhwYWQtPmlycV9vdXQtPnRyYW5zZmVyX2J1 ZmZlcl9sZW5ndGggPSAxMjsKKwkJfQorCQllbHNlIHsKKwkJCXhwYWQtPm9kYXRhWzBdID0gMHgw MDsKKwkJCXhwYWQtPm9kYXRhWzFdID0gMHgwODsKKwkJCXhwYWQtPm9kYXRhWzJdID0gMHgwMDsK KwkJCXhwYWQtPm9kYXRhWzNdID0gc3Ryb25nIC8gMjU2OworCQkJeHBhZC0+b2RhdGFbNF0gPSB3 ZWFrIC8gMjU2OworCQkJeHBhZC0+b2RhdGFbNV0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbNl0g PSAweDAwOworCQkJeHBhZC0+b2RhdGFbN10gPSAweDAwOworCQkJeHBhZC0+aXJxX291dC0+dHJh bnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisJCX0KIAkJdXNiX3N1Ym1pdF91cmIoeHBhZC0+aXJx X291dCwgR0ZQX0tFUk5FTCk7CisJCW11dGV4X3VubG9jaygmeHBhZC0+b2RhdGFfbXV0ZXgpOwog CX0KIAogCXJldHVybiAwOwpAQCAtNTcyLDcgKzczMCw3IEBACiAKIHN0YXRpYyBpbnQgeHBhZF9p bml0X2ZmKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKLQlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZ UEVfWEJPWDM2MCkKKwlpZiAoKHhwYWQtPnh0eXBlICE9IFhUWVBFX1hCT1gzNjApICYmICh4cGFk LT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwVykpCiAJCXJldHVybiAwOwogCiAJaW5wdXRfc2V0X2Nh cGFiaWxpdHkoeHBhZC0+ZGV2LCBFVl9GRiwgRkZfUlVNQkxFKTsKQEAgLTU4MSwyNiArNzM5LDUw IEBACiB9CiAKICNlbHNlCisvKiBkdW1teSBpbXBsZW1lbnRhdGlvbiBmb3IgeHBhZF9wcm9iZSAq Lwogc3RhdGljIGludCB4cGFkX2luaXRfZmYoc3RydWN0IHVzYl94cGFkICp4cGFkKSB7IHJldHVy biAwOyB9CiAjZW5kaWYKIAorCisvKiBlbmQgZm9yY2UgZmVlZGJhY2sgc2VjdGlvbiAqLworCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisKKy8qIExFRCBoYW5kbGluZyBzZWN0aW9uOiBwcm92aWRl cyBzdXBwb3J0IGZvciB0aGUgcmluZyBvZiBMRURzIG9uIHRoZSAzNjAKKyAqIGNvbnRyb2xsZXJz LiAqLworCiAjaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTKQotI2luY2x1ZGUg PGxpbnV4L2xlZHMuaD4KIAotc3RydWN0IHhwYWRfbGVkIHsKLQljaGFyIG5hbWVbMTZdOwotCXN0 cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7Ci0Jc3RydWN0IHVzYl94cGFkICp4cGFkOwotfTsK IAorLyogWEJveCAzNjAgd2lyZWxlc3MgY29udHJvbGxlciBmb2xsb3dzIHByb3RvY29sIGZyb20g eGJveGRydiB1c2Vyc3BhY2UKKyAqIGRyaXZlcjoKKyAqICAgIGh0dHA6Ly9waW5ndXMuc2V1bC5v cmcvfmdydW1iZWwveGJveGRydi8KKyAqLwogc3RhdGljIHZvaWQgeHBhZF9zZW5kX2xlZF9jb21t YW5kKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCwgaW50IGNvbW1hbmQpCiB7CiAJaWYgKGNvbW1hbmQg Pj0gMCAmJiBjb21tYW5kIDwgMTQpIHsKIAkJbXV0ZXhfbG9jaygmeHBhZC0+b2RhdGFfbXV0ZXgp OwotCQl4cGFkLT5vZGF0YVswXSA9IDB4MDE7Ci0JCXhwYWQtPm9kYXRhWzFdID0gMHgwMzsKLQkJ eHBhZC0+b2RhdGFbMl0gPSBjb21tYW5kOwotCQl4cGFkLT5pcnFfb3V0LT50cmFuc2Zlcl9idWZm ZXJfbGVuZ3RoID0gMzsKKwkJaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKSB7CisJ CQl4cGFkLT5vZGF0YVswXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsxXSA9IDB4MDA7CisJCQl4 cGFkLT5vZGF0YVsyXSA9IDB4MDg7CisJCQl4cGFkLT5vZGF0YVszXSA9IDB4NDAgKyAoY29tbWFu ZCAlIDB4MGUpOworCQkJeHBhZC0+b2RhdGFbNF0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbNV0g PSAweDAwOworCQkJeHBhZC0+b2RhdGFbNl0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbN10gPSAw eDAwOworCQkJeHBhZC0+b2RhdGFbOF0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbOV0gPSAweDAw OworCQkJeHBhZC0+b2RhdGFbMTBdID0gMHgwMDsKKwkJCXhwYWQtPm9kYXRhWzExXSA9IDB4MDA7 CisJCQl4cGFkLT5pcnFfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMTI7CisJCX0KKwkJ ZWxzZSB7CisJCQl4cGFkLT5vZGF0YVswXSA9IDB4MDE7CisJCQl4cGFkLT5vZGF0YVsxXSA9IDB4 MDM7CisJCQl4cGFkLT5vZGF0YVsyXSA9IGNvbW1hbmQ7CisJCQl4cGFkLT5pcnFfb3V0LT50cmFu c2Zlcl9idWZmZXJfbGVuZ3RoID0gMzsKKwkJfQogCQl1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFf b3V0LCBHRlBfS0VSTkVMKTsKIAkJbXV0ZXhfdW5sb2NrKCZ4cGFkLT5vZGF0YV9tdXRleCk7CiAJ fQpAQCAtNjE1LDYgKzc5Nyw3IEBACiAJeHBhZF9zZW5kX2xlZF9jb21tYW5kKHhwYWRfbGVkLT54 cGFkLCB2YWx1ZSk7CiB9CiAKKwogc3RhdGljIGludCB4cGFkX2xlZF9wcm9iZShzdHJ1Y3QgdXNi X3hwYWQgKnhwYWQpCiB7CiAJc3RhdGljIGF0b21pY190IGxlZF9zZXEJPSBBVE9NSUNfSU5JVCgw KTsKQEAgLTYyMyw3ICs4MDYsNyBAQAogCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2Owog CWludCBlcnJvcjsKIAotCWlmICh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwKQorCWlmICgo eHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkgJiYgKHhwYWQtPnh0eXBlICE9IFhUWVBFX1hC T1gzNjBXKSkKIAkJcmV0dXJuIDA7CiAKIAl4cGFkLT5sZWQgPSBsZWQgPSBremFsbG9jKHNpemVv ZihzdHJ1Y3QgeHBhZF9sZWQpLCBHRlBfS0VSTkVMKTsKQEAgLTY2NCwxMCArODQ3LDE2IEBACiAJ fQogfQogI2Vsc2UKKy8qIGR1bW1pZXMgZm9yIHhwYWRfcHJvYmUgYW5kIHhwYWRfZGlzY29ubmVj dCAqLwogc3RhdGljIGludCB4cGFkX2xlZF9wcm9iZShzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpIHsg cmV0dXJuIDA7IH0KIHN0YXRpYyB2b2lkIHhwYWRfbGVkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl94 cGFkICp4cGFkKSB7IH0KICNlbmRpZgogCisvKiBlbmQgTEVEIHNlY3Rpb24gKi8KKworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworCisvKiBNb2R1bGUgYW5kIGRldmljZSBmdW5jdGlvbnMgKi8KIAog c3RhdGljIGludCB4cGFkX29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQogewpAQCAtNzIxLDYg KzkxMCw3IEBACiAJc3RydWN0IHVzYl94cGFkICp4cGFkOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlu cHV0X2RldjsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2lycV9pbjsKKwlp bnQgY29udHJvbGxlcl90eXBlOwogCWludCBpOwogCWludCBlcnJvciA9IC1FTk9NRU07CiAKQEAg LTc0Nyw2ICs5MzcsNyBAQAogCXhwYWQtPnVkZXYgPSB1ZGV2OwogCXhwYWQtPmRwYWRfbWFwcGlu ZyA9IHhwYWRfZGV2aWNlW2ldLmRwYWRfbWFwcGluZzsKIAl4cGFkLT54dHlwZSA9IHhwYWRfZGV2 aWNlW2ldLnh0eXBlOworCWNvbnRyb2xsZXJfdHlwZSA9IHhwYWRfZGV2aWNlW2ldLmNvbnRyb2xs ZXJfdHlwZTsKIAlpZiAoeHBhZC0+ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1VOS05PV04pCiAJ CXhwYWQtPmRwYWRfbWFwcGluZyA9ICFkcGFkX3RvX2J1dHRvbnM7CiAJaWYgKHhwYWQtPnh0eXBl ID09IFhUWVBFX1VOS05PV04pIHsKQEAgLTgxOSw2ICsxMDEwLDEwIEBACiAJCWdvdG8gZmFpbDQ7 CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHhwYWQpOworCQorCXhwYWQtPmNvbnRyb2xsZXJf dHlwZSA9IGNvbnRyb2xsZXJfdHlwZTsKKwlpZiAoY29udHJvbGxlcl90eXBlICE9IFhDT05UUk9M TEVSX1RZUEVfTk9ORSkKKwkJeHBhZF9pbml0X2NvbnRyb2xsZXIoeHBhZCk7CiAKIAkvKgogCSAq IFN1Ym1pdCB0aGUgaW50IFVSQiBpbW1lZGlhdGx5IHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIG9w ZW4KQEAgLTgyOCw0OCArMTAyMywzOCBAQAogCSAqIHdlJ3JlIHdhaXRpbmcgZm9yLgogCSAqLwog CWlmICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykgeworCQl4cGFkLT5jb250cm9sbGVy X3ByZXNlbnQgPSAwOworCQl4cGFkLT5jb250cm9sbGVyX3VuaXF1ZV9pZFswXSA9ICdcMCc7CisJ CXhwYWQtPmNvbnRyb2xsZXJfbnVtYmVyID0KKwkJCShpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVz Yy5iSW50ZXJmYWNlTnVtYmVyIC8gMikgKyAxOwogCQl4cGFkLT5pcnFfaW4tPmRldiA9IHhwYWQt PnVkZXY7CiAJCWVycm9yID0gdXNiX3N1Ym1pdF91cmIoeHBhZC0+aXJxX2luLCBHRlBfS0VSTkVM KTsKIAkJaWYgKGVycm9yKQotCQkJZ290byBmYWlsNDsKLQotCQkvKgotCQkgKiBTZXR1cCB0aGUg bWVzc2FnZSB0byBzZXQgdGhlIExFRHMgb24gdGhlCi0JCSAqIGNvbnRyb2xsZXIgd2hlbiBpdCBz aG93cyB1cAotCQkgKi8KLQkJeHBhZC0+YnVsa19vdXQgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9L RVJORUwpOwotCQlpZigheHBhZC0+YnVsa19vdXQpCiAJCQlnb3RvIGZhaWw1OwotCi0JCXhwYWQt PmJkYXRhID0ga3phbGxvYyhYUEFEX1BLVF9MRU4sIEdGUF9LRVJORUwpOwotCQlpZigheHBhZC0+ YmRhdGEpCi0JCQlnb3RvIGZhaWw2OwotCi0JCXhwYWQtPmJkYXRhWzJdID0gMHgwODsKLQkJc3dp dGNoIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKSB7Ci0JCWNh c2UgMDoKLQkJCXhwYWQtPmJkYXRhWzNdID0gMHg0MjsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0J CQl4cGFkLT5iZGF0YVszXSA9IDB4NDM7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJeHBhZC0+ YmRhdGFbM10gPSAweDQ0OwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCXhwYWQtPmJkYXRhWzNd ID0gMHg0NTsKLQkJfQotCi0JCWVwX2lycV9pbiA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5k cG9pbnRbMV0uZGVzYzsKLQkJdXNiX2ZpbGxfYnVsa191cmIoeHBhZC0+YnVsa19vdXQsIHVkZXYs Ci0JCQkJdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIGVwX2lycV9pbi0+YkVuZHBvaW50QWRkcmVzcyks Ci0JCQkJeHBhZC0+YmRhdGEsIFhQQURfUEtUX0xFTiwgeHBhZF9idWxrX291dCwgeHBhZCk7CiAJ fQorCWVsc2UgeworCQl4cGFkLT5jb250cm9sbGVyX3ByZXNlbnQgPSAxOworCQlzdHJuY3B5KHhw YWQtPmNvbnRyb2xsZXJfdW5pcXVlX2lkLCAid2lyZWQiLCAxNyk7CisJCXhwYWQtPmNvbnRyb2xs ZXJfbnVtYmVyID0gMDsKKwl9CisJCisJLyogU2V0IHVwIGRldmljZSBhdHRyaWJ1dGVzICovCisj aWZkZWYgQ09ORklHX1NZU0ZTCisJeHBhZC0+c3lzZnNfb2sgPSAxOworCWVycm9yID0gc3lzZnNf Y3JlYXRlX2dyb3VwKCZpbnB1dF9kZXYtPmRldi5rb2JqLCAmeHBhZF9kZWZhdWx0X2F0dHJfZ3Jv dXApOworCWlmIChlcnJvcikgeworCQkvKiBEcml2ZXIgd2lsbCB3b3JrIHdpdGhvdXQgdGhlIHN5 c2ZzIGludGVyZmFjZSwgYnV0IHBhcmFtZXRlcnMKKwkJICogd2lsbCBub3QgYmUgYWRqdXN0YWJs ZSwgc28gdGhpcyBmYWlsdXJlIGlzIGEgd2FybmluZy4gKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklO RyAieHBhZDogc3lzZnNfY3JlYXRlX2dyb3VwIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCBlcnJv cik7CisJCXhwYWQtPnN5c2ZzX29rID0gMDsKKwl9CisjZW5kaWYKIAogCXJldHVybiAwOwogCi0g ZmFpbDY6CXVzYl9mcmVlX3VyYih4cGFkLT5idWxrX291dCk7Ci0gZmFpbDU6CXVzYl9raWxsX3Vy Yih4cGFkLT5pcnFfaW4pOworIGZhaWw1OiB1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwor IAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh4cGFkLT5kZXYpOworIAl4cGFkX2xlZF9kaXNjb25u ZWN0KHhwYWQpOwogIGZhaWw0Ogl1c2JfZnJlZV91cmIoeHBhZC0+aXJxX2luKTsKICBmYWlsMzoJ eHBhZF9kZWluaXRfb3V0cHV0KHhwYWQpOwogIGZhaWwyOgl1c2JfYnVmZmVyX2ZyZWUodWRldiwg WFBBRF9QS1RfTEVOLCB4cGFkLT5pZGF0YSwgeHBhZC0+aWRhdGFfZG1hKTsKQEAgLTg4NSwxMiAr MTA3MCwxOSBAQAogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAlpZiAoeHBhZCkg eworCQkvKiBJZiBhIHdvcmsgdGFzayByZW1haW5zLCBnZXQgcmlkIG9mIGl0IGJ5IGZsdXNoaW5n IHRoZQorCQkgKiBzaGFyZWQgd29yayBxdWV1ZS4KKwkJICovCisJCWlmICh4cGFkLT53b3JrX3Bl bmRpbmcpCisJCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworI2lmZGVmIENPTkZJR19TWVNGUwor CQlpZiAoeHBhZC0+c3lzZnNfb2spCisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnhwYWQtPmRldi0+ ZGV2LmtvYmosICZ4cGFkX2RlZmF1bHRfYXR0cl9ncm91cCk7CisjZW5kaWYKIAkJeHBhZF9sZWRf ZGlzY29ubmVjdCh4cGFkKTsKIAkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoeHBhZC0+ZGV2KTsK IAkJeHBhZF9kZWluaXRfb3V0cHV0KHhwYWQpOwogCQlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVf WEJPWDM2MFcpIHsKLQkJCXVzYl9raWxsX3VyYih4cGFkLT5idWxrX291dCk7Ci0JCQl1c2JfZnJl ZV91cmIoeHBhZC0+YnVsa19vdXQpOwogCQkJdXNiX2tpbGxfdXJiKHhwYWQtPmlycV9pbik7CiAJ CX0KIAkJdXNiX2ZyZWVfdXJiKHhwYWQtPmlycV9pbik7CkBAIC05MDAsMTIgKzEwOTIsNyBAQAog CX0KIH0KIAotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHhwYWRfZHJpdmVyID0gewotCS5uYW1l CQk9ICJ4cGFkIiwKLQkucHJvYmUJCT0geHBhZF9wcm9iZSwKLQkuZGlzY29ubmVjdAk9IHhwYWRf ZGlzY29ubmVjdCwKLQkuaWRfdGFibGUJPSB4cGFkX3RhYmxlLAotfTsKKwogCiBzdGF0aWMgaW50 IF9faW5pdCB1c2JfeHBhZF9pbml0KHZvaWQpCiB7CkBAIC05MjAsOSArMTEwNyw0IEBACiAJdXNi X2RlcmVnaXN0ZXIoJnhwYWRfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQodXNiX3hwYWRfaW5p dCk7Ci1tb2R1bGVfZXhpdCh1c2JfeHBhZF9leGl0KTsKIAotTU9EVUxFX0FVVEhPUihEUklWRVJf QVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5T RSgiR1BMIik7CmRpZmYgLXVOciBvcmlnZHJ2L2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5o IG5ld2Rydi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuaAotLS0gb3JpZ2Rydi9kcml2ZXJz L2lucHV0L2pveXN0aWNrL3hwYWQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUw MAorKysgbmV3ZHJ2L2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5oCTIwMDktMDItMjEgMjM6 NDk6MzYuMDAwMDAwMDAwIC0wNTAwCkBAIC0wLDAgKzEsNTc4IEBACisvKgorICogWGJveCBnYW1l cGFkIGRyaXZlciB3aXRoIFhib3ggMzYwIHdpcmVkL3dpcmVsZXNzIHN1cHBvcnQKKyAqCisgKiBM YXN0IE1vZGlmaWVkOgkyMSBGZWJydWFyeSAyMDA5CisgKgkJCU1pa2UgTXVycGh5IDxtYW11cnBo 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 dWV1ZS5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpCisjaW5jbHVkZSA8bGludXgva29i amVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5n Lmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX1hQQURfTEVEUykKKyNp bmNsdWRlIDxsaW51eC9sZWRzLmg+CisKK3N0cnVjdCB4cGFkX2xlZCB7CisJY2hhciBuYW1lWzE2 XTsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9jZGV2OworCXN0cnVjdCB1c2JfeHBhZCAqeHBh ZDsKK307CisjZW5kaWYKKworCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk1hcmtvIEZyaWVkZW1h bm4gPG1mckBibXgtY2hlbW5pdHouZGU+IgorI2RlZmluZSBEUklWRVJfREVTQyAiWGJveC8zNjAg cGFkIGRyaXZlciIKKworI2RlZmluZSBYUEFEX1BLVF9MRU4gMzIKKworCisvKiB4Ym94IGQtcGFk cyBzaG91bGQgbWFwIHRvIGJ1dHRvbnMsIGFzIGlzIHJlcXVpcmVkIGZvciBERFIgcGFkcworICAg YnV0IHdlIG1hcCB0aGVtIHRvIGF4ZXMgd2hlbiBwb3NzaWJsZSB0byBzaW1wbGlmeSB0aGluZ3Mg Ki8KKyNkZWZpbmUgTUFQX0RQQURfVE9fQlVUVE9OUyAgICAwCisjZGVmaW5lIE1BUF9EUEFEX1RP X0FYRVMgICAgICAgMQorI2RlZmluZSBNQVBfRFBBRF9VTktOT1dOICAgICAgIDIKKworLyogVHlw ZSBvZiBjb250cm9sbGVyICppbnRlcmZhY2UqIChvcmlnaW5hbCwgd2lyZWQgMzYwLCB3aXJlbGVz cyAzNjApICovCisjZGVmaW5lIFhUWVBFX1hCT1ggICAgICAgIDAKKyNkZWZpbmUgWFRZUEVfWEJP WDM2MCAgICAgMQorI2RlZmluZSBYVFlQRV9YQk9YMzYwVyAgICAyCisjZGVmaW5lIFhUWVBFX1VO S05PV04gICAgIDMKKworLyogVHlwZSBvZiBjb250cm9sbGVyIChlLmcuIHBhZCwgZ3VpdGFyLCBv dGhlciBpbnB1dCBkZXZpY2UpICovCisjZGVmaW5lIFhDT05UUk9MTEVSX1RZUEVfTk9ORQkJMAor I2RlZmluZSBYQ09OVFJPTExFUl9UWVBFX1BBRAkJMQorI2RlZmluZSBYQ09OVFJPTExFUl9UWVBF X0dVSVRBUgkJMgorI2RlZmluZSBYQ09OVFJPTExFUl9UWVBFX0RBTkNFX1BBRAkzCisjZGVmaW5l IFhDT05UUk9MTEVSX1RZUEVfT1RIRVIJCTI1NQorCisKKy8qIFRoZSBYYm94IDM2MCBjb250cm9s bGVycyBoYXZlIHNlbnNpdGl2ZSBzdGlja3MgdGhhdCBvZnRlbiBkbyBub3QgY2VudGVyCisgKiBl eGFjdGx5LiBBIGRlYWQgem9uZSBjYXVzZXMgc3RpY2sgZXZlbnRzIGJlbG93IGEgY2VydGFpbiB0 aHJlc2hob2xkIHRvIGJlCisgKiByZXBvcnRlZCBhcyB6ZXJvLgorICoKKyAqIFRoZSBkZWZhdWx0 IGRlYWQgem9uZSBzaXplIGlzIDgxOTIsIHdoaWNoIHdhcyBvYnRhaW5lZCBieSB0ZXN0aW5nIGEK KyAqIHdpcmVsZXNzIDM2MCBjb250cm9sbGVyIHdpdGgganN0ZXN0KDEpIGFuZCBjb25zdWx0aW5n IGdhbWluZyBmb3J1bXMgZm9yCisgKiBhIHJlY29tbWVuZGVkIGRlYWQgem9uZSBmb3IgdGhpcyBj b250cm9sbGVyLiBUaGUgY29uc2Vuc3VzIG9waW5pb24gd2FzCisgKiAwLjI1IChvbiBhIHNjYWxl IGZyb20gMCB0byAxKSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gODE5MiAob3V0IG9mIDMyNzY3KS4K KyAqLworI2RlZmluZSBYREVBRF9aT05FX0RFRkFVTFQgICA4MTkyCisKKy8qIERlZmF1bHQgbGlt aXQgZm9yIHRoZSBzdGlja3MgaXMgdGhlIG1heGltdW0gYXhpcyB2YWx1ZSAoMzI3NjcpLCB3aGlj aCB3aWxsCisgKiBjYXVzZSB0aGUgc3RpY2tzIHRvIGhhdmUgYSByYWRpYWwgYXhpcyBhcyBkZXNp Z25lZCBpbiB0aGUgaGFyZHdhcmUuIFRvCisgKiBlbmFibGUgc3F1YXJlIGF4aXMgc3VwcG9ydCwg c2V0IHRoZSBzdGljayBsaW1pdHMgdG8gMjMxNzAgb3IgbG93ZXIgYXQgcnVuCisgKiB0aW1lIHZp YSB0aGUgc3lzZnMgaW50ZXJmYWNlLiAqLworI2RlZmluZSBYU1RJQ0tfTElNSVRfREVGQVVMVCAz Mjc2NworCisvKiBSdW1ibGUgbm9ybWFsbHkgZW5hYmxlZCAqLworI2RlZmluZSBYUlVNQkxFX0RF RkFVTFQJCTEKKworCisvKiBUaGlzIG1vZHVsZSBwYXJhbWV0ZXIgaXMgc29tZXRoaW5nIG9mIGEg cmVsaWMsIGJ1dCBpdCByZW1haW5zIGZvcgorICogY29tcGF0aWJpbGl0eS4gSW1wb3J0YW50bHks IHRoZSBvcHRpb24gdG8gbWFwIHRoZSBELVBBRCBidXR0b25zIGFwcGxpZXMKKyAqIG9ubHkgdG8g Y29udHJvbGxlciAqaW50ZXJmYWNlcyogKGkuZS4gdmVuZG9yIGFuZCBwcm9kdWN0IGNvZGVzKSBu b3QKKyAqIGV4cGxpY2l0bHkgcHJlc2VudCBpbiB4cGFkX2RldmljZVtdLiAqLworc3RhdGljIGlu dCBkcGFkX3RvX2J1dHRvbnMgPSAwOworbW9kdWxlX3BhcmFtKGRwYWRfdG9fYnV0dG9ucywgYm9v bCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGRwYWRfdG9fYnV0dG9ucywgIk1hcCBELVBB RCB0byBidXR0b25zIHJhdGhlciB0aGFuIGF4ZXMgZm9yIHVua25vd24gcGFkcyIpOworCisKKy8q IFRhYmxlIG9mIHZhcmlvdXMgZGV2aWNlIGludGVyZmFjZXMgcmVjb2duaXplZCBieSB0aGlzIGRy aXZlci4gRWFjaCBzdXBwb3J0ZWQKKyAqIGRldmljZSBoYXMgYSBkaXJlY3Rpb25hbCBwYWQgbWFw cGluZywgaW50ZXJmYWNlIHR5cGUsIGFuZCBjb250cm9sbGVyIHR5cGUuCisgKiBOb3RlIHRoYXQg d2lyZWxlc3MgMzYwIGRldmljZXMgaGF2ZSBYQ09OVFJPTExFUl9UWVBFX05PTkUsIGFzIHRoZSBh Y3R1YWwKKyAqIHR5cGUgb2YgdGhlIGdhbWluZyBjb250cm9sbGVyIGlzIG5vdCBrbm93biB1bnRp bCB0aGUgY29udHJvbGxlciBiaW5kcworICogd2lyZWxlc3NseSB3aXRoIHRoZSByZWNlaXZlcgor ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHhwYWRfZGV2aWNlIHsKKwl1MTYgaWRWZW5kb3I7CisJ dTE2IGlkUHJvZHVjdDsKKwljaGFyICpuYW1lOworCXU4IGRwYWRfbWFwcGluZzsKKwl1OCB4dHlw ZTsKKwl1OCBjb250cm9sbGVyX3R5cGU7Cit9IHhwYWRfZGV2aWNlW10gPSB7CisJeyAweDA0NWUs IDB4MDIwMiwgIk1pY3Jvc29mdCBYLUJveCBwYWQgdjEgKFVTKSIsIE1BUF9EUEFEX1RPX0FYRVMs IFhUWVBFX1hCT1gsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA0NWUsIDB4MDI4 OSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgdjIgKFVTKSIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBF X1hCT1gsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA0NWUsIDB4MDI4NSwgIk1p Y3Jvc29mdCBYLUJveCBwYWQgKEphcGFuKSIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gs CisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA0NWUsIDB4MDI4NywgIk1pY3Jvc29m dCBYYm94IENvbnRyb2xsZXIgUyIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhD T05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA0NWUsIDB4MDcxOSwgIlhib3ggMzYwIFdpcmVs ZXNzIFJlY2VpdmVyIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWDM2MFcsCisJCVhD T05UUk9MTEVSX1RZUEVfTk9ORSB9LAorCXsgMHgwYzEyLCAweDg4MDksICJSZWRPY3RhbmUgWGJv eCBEYW5jZSBQYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YLAorCQlYQ09OVFJP TExFUl9UWVBFX0RBTkNFX1BBRCB9LAorCXsgMHgwNDRmLCAweDBmMDcsICJUaHJ1c3RtYXN0ZXIs IEluYy4gQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhDT05U Uk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA0NmQsIDB4YzI0MiwgIkxvZ2l0ZWNoIENoaWxsc3Ry ZWFtIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwLAorCQlYQ09O VFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwNDZkLCAweGNhODQsICJMb2dpdGVjaCBYYm94IENv cmRsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YLAorCQlYQ09O VFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwNDZkLCAweGNhODgsICJMb2dpdGVjaCBDb21wYWN0 IENvbnRyb2xsZXIgZm9yIFhib3giLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YLAorCQlY Q09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwNWZkLCAweDEwMDcsICJNYWQgQ2F0eiBDb250 cm9sbGVyICh1bnZlcmlmaWVkKSIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhD T05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA1ZmQsIDB4MTA3YSwgIkludGVyQWN0ICdQb3dl clBhZCBQcm8nIFgtQm94IHBhZCAoR2VybWFueSkiLCBNQVBfRFBBRF9UT19BWEVTLAorCQlYVFlQ RV9YQk9YLCBYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwNzM4LCAweDQ1MTYsICJNYWQg Q2F0eiBDb250cm9sIFBhZCIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhDT05U Uk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA3MzgsIDB4NDUyMiwgIk1hZCBDYXR6IEx1bWlDT04i LCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YLAorCQlYQ09OVFJPTExFUl9UWVBFX1BBRCB9 LAorCXsgMHgwNzM4LCAweDQ1MjYsICJNYWQgQ2F0eiBDb250cm9sIFBhZCBQcm8iLCBNQVBfRFBB RF9UT19BWEVTLCBYVFlQRV9YQk9YLAorCQlYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgw NzM4LCAweDQ1MzYsICJNYWQgQ2F0eiBNaWNyb0NPTiIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBF X1hCT1gsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA3MzgsIDB4NDU0MCwgIk1h ZCBDYXR6IEJlYXQgUGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCwKKwkJWENP TlRST0xMRVJfVFlQRV9EQU5DRV9QQUQgfSwKKwl7IDB4MDczOCwgMHg0NTU2LCAiTWFkIENhdHog THlueCBXaXJlbGVzcyBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCwK KwkJWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDczOCwgMHg0NzE2LCAiTWFkIENhdHog V2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gz NjAsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDA3MzgsIDB4NjA0MCwgIk1hZCBD YXR6IEJlYXQgUGFkIFBybyIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1gsCisJCVhD T05UUk9MTEVSX1RZUEVfREFOQ0VfUEFEIH0sCisJeyAweDBjMTIsIDB4ODgwMiwgIlplcm9wbHVz IFhib3ggQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhDT05U Uk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBjMTIsIDB4ODgwYSwgIlBlbGljYW4gRWNsaXBzZSBQ TC0yMDIzIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCwKKwkJWENPTlRST0xMRVJfVFlQ RV9QQUQgfSwKKwl7IDB4MGMxMiwgMHg4ODEwLCAiWmVyb3BsdXMgWGJveCBDb250cm9sbGVyIiwg TUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCwKKwkJWENPTlRST0xMRVJfVFlQRV9QQUQgfSwK Kwl7IDB4MGMxMiwgMHg5OTAyLCAiSEFNQSBWaWJyYVggLSAqRkFVTFRZIEhBUkRXQVJFKiIsIE1B UF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJ eyAweDBlNGMsIDB4MTA5NywgIlJhZGljYSBHYW1lc3RlciBDb250cm9sbGVyIiwgTUFQX0RQQURf VE9fQVhFUywgWFRZUEVfWEJPWCwKKwkJWENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MGU0 YywgMHgyMzkwLCAiUmFkaWNhIEdhbWVzIEp0ZWNoIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19B WEVTLCBYVFlQRV9YQk9YLAorCQlYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHgwZTZmLCAw eDAwMDMsICJMb2dpYzMgRnJlZWJpcmQgd2lyZWxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RP X0FYRVMsIFhUWVBFX1hCT1gsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBlNmYs IDB4MDAwNSwgIkVjbGlwc2Ugd2lyZWxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMs IFhUWVBFX1hCT1gsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBlNmYsIDB4MDAw NiwgIkVkZ2Ugd2lyZWxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hC T1gsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBlNmYsIDB4MDAwNiwgIlBlbGlj YW4gJ1RTWicgV2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsCisJ CVhUWVBFX1hCT1gzNjAsIFhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBlOGYsIDB4MDIw MSwgIlNtYXJ0Sm95IEZyYWcgWHBhZC9QUzIgYWRhcHRvciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhU WVBFX1hCT1gsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBmMzAsIDB4MDIwMiwg IkpveXRlY2ggQWR2YW5jZWQgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hC T1gsCisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDBmMzAsIDB4ODg4OCwgIkJpZ0Jl biBYQk1pbmlQYWQgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gsCisJ CVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDEwMmMsIDB4ZmYwYywgIkpveXRlY2ggV2ly ZWxlc3MgQWR2YW5jZWQgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gs CisJCVhDT05UUk9MTEVSX1RZUEVfUEFEIH0sCisJeyAweDEyYWIsIDB4ODgwOSwgIlhib3ggRERS IGRhbmNlcGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCwKKwkJWENPTlRST0xM RVJfVFlQRV9EQU5DRV9QQUQgfSwKKwl7IDB4MTQzMCwgMHg0NzQ4LCAiUmVkT2N0YW5lIEd1aXRh ciBIZXJvIFgtcGxvcmVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCwKKwkJWENP TlRST0xMRVJfVFlQRV9HVUlUQVIgfSwKKwl7IDB4MTQzMCwgMHg4ODg4LCAiVFg2NTAwKyBEYW5j ZSBQYWQgKGZpcnN0IGdlbmVyYXRpb24pIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJP WCwKKwkJWENPTlRST0xMRVJfVFlQRV9EQU5DRV9QQUQgfSwKKwl7IDB4MDQ1ZSwgMHgwMjhlLCAi TWljcm9zb2Z0IFgtQm94IDM2MCBwYWQiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYw LAorCQlYQ09OVFJPTExFUl9UWVBFX1BBRCB9LAorCXsgMHhmZmZmLCAweGZmZmYsICJDaGluZXNl LW1hZGUgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCwKKwkJ WENPTlRST0xMRVJfVFlQRV9QQUQgfSwKKwl7IDB4MDAwMCwgMHgwMDAwLCAiR2VuZXJpYyBYLUJv eCBwYWQiLCBNQVBfRFBBRF9VTktOT1dOLCBYVFlQRV9VTktOT1dOLAorCQlYQ09OVFJPTExFUl9U WVBFX1BBRCB9Cit9OworCisKKy8qIGJ1dHRvbnMgc2hhcmVkIHdpdGggeGJveCBhbmQgeGJveDM2 MCAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFkX2NvbW1vbl9idG5bXSA9IHsKKwlC VE5fQSwgQlROX0IsIEJUTl9YLCBCVE5fWSwJCQkvKiAiYW5hbG9nIiBidXR0b25zICovCisJQlRO X1NUQVJULCBCVE5fQkFDSywgQlROX1RIVU1CTCwgQlROX1RIVU1CUiwJLyogc3RhcnQvYmFjay9z dGlja3MgKi8KKwktMQkJCQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKiBvcmln aW5hbCB4Ym94IGNvbnRyb2xsZXJzIG9ubHkgKi8KK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQg eHBhZF9idG5bXSA9IHsKKwlCVE5fQywgQlROX1osCQkvKiAiYW5hbG9nIiBidXR0b25zICovCisJ LTEJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworLyogb25seSB1c2VkIGlmIE1BUF9E UEFEX1RPX0JVVFRPTlMgKi8KK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9idG5fcGFk W10gPSB7CisJQlROX0xFRlQsIEJUTl9SSUdIVCwJCS8qIGQtcGFkIGxlZnQsIHJpZ2h0ICovCisJ QlROXzAsIEJUTl8xLAkJCS8qIGQtcGFkIHVwLCBkb3duIChYWFggbmFtZXM/PykgKi8KKwktMQkJ CQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworLyogYnV0dG9ucyBmb3IgeDM2MCBjb250 cm9sbGVyICovCitzdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IHhwYWQzNjBfYnRuW10gPSB7CisJ QlROX1RMLCBCVE5fVFIsCQkvKiBCdXR0b24gTEIvUkIgKi8KKwlCVE5fTU9ERSwJCS8qIFRoZSBi aWcgWCBidXR0b24gKi8KKwktMQorfTsKKworLyogc3RpY2tzIGFuZCB0cmlnZ2VycyBjb21tb24g dG8gYWxsIGRldmljZXMgKi8KK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9hYnNbXSA9 IHsKKwlBQlNfWCwgQUJTX1ksCQkvKiBsZWZ0IHN0aWNrICovCisJQUJTX1JYLCBBQlNfUlksCQkv KiByaWdodCBzdGljayAqLworCUFCU19aLCBBQlNfUlosCQkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0 ICovCisJLTEJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworLyogb25seSB1c2VkIGlm IE1BUF9EUEFEX1RPX0FYRVMgKi8KK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9hYnNf cGFkW10gPSB7CisJQUJTX0hBVDBYLCBBQlNfSEFUMFksCS8qIGQtcGFkIGF4ZXMgKi8KKwktMQkJ CS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisKKy8qIFhib3ggMzYwIGhhcyBhIHZlbmRv ci1zcGVjaWZpYyBjbGFzcywgc28gd2UgY2Fubm90IG1hdGNoIGl0IHdpdGggb25seQorICogVVNC X0lOVEVSRkFDRV9JTkZPIChhbHNvIHNwZWNpZmljYWxseSByZWZ1c2VkIGJ5IFVTQiBzdWJzeXN0 ZW0pLCBzbyB3ZQorICogbWF0Y2ggYWdhaW5zdCB2ZW5kb3IgaWQgYXMgd2VsbC4gV2lyZWQgWGJv eCAzNjAgZGV2aWNlcyBoYXZlIHByb3RvY29sIDEsCisgKiB3aXJlbGVzcyBjb250cm9sbGVycyBo YXZlIHByb3RvY29sIDEyOS4gKi8KKyNkZWZpbmUgWFBBRF9YQk9YMzYwX1ZFTkRPUl9QUk9UT0NP TCh2ZW5kLHByKSBcCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1Ig fCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLCBcCisJLmlkVmVuZG9yID0gKHZlbmQpLCBc CisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQywgXAorCS5iSW50ZXJm YWNlU3ViQ2xhc3MgPSA5MywgXAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPSAocHIpCisjZGVmaW5l IFhQQURfWEJPWDM2MF9WRU5ET1IodmVuZCkgXAorCXsgWFBBRF9YQk9YMzYwX1ZFTkRPUl9QUk9U T0NPTCh2ZW5kLDEpIH0sIFwKKwl7IFhQQURfWEJPWDM2MF9WRU5ET1JfUFJPVE9DT0wodmVuZCwx MjkpIH0KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHhwYWRfdGFibGUgW10gPSB7CisJ eyBVU0JfSU5URVJGQUNFX0lORk8oJ1gnLCAnQicsIDApIH0sCS8qIFgtQm94IFVTQi1JRiBub3Qg YXBwcm92ZWQgY2xhc3MgKi8KKwlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MDQ1ZSksCQkvKiBNaWNy b3NvZnQgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDA0 NmQpLAkJLyogTG9naXRlY2ggWC1Cb3ggMzYwIHN0eWxlIGNvbnRyb2xsZXJzICovCisJWFBBRF9Y Qk9YMzYwX1ZFTkRPUigweDA3MzgpLAkJLyogTWFkIENhdHogWC1Cb3ggMzYwIGNvbnRyb2xsZXJz ICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDBlNmYpLAkJLyogMHgwZTZmIFgtQm94IDM2MCBj b250cm9sbGVycyAqLworCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgxNDMwKSwJCS8qIFJlZE9jdGFu ZSBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFC TEUgKHVzYiwgeHBhZF90YWJsZSk7CisKKworLyogV2lyZWxlc3MgMzYwIGRldmljZSBpZGVudGlm aWNhdGlvbi4KKyAqCisgKiBXaGVuIGEgd2lyZWxlc3MgY29udHJvbGxlciBjb25uZWN0cywgdGhl IDJuZCBwYWNrZXQgaXQgc2VuZHMgU0VFTVMgdG8KKyAqIGJlIHNvbWUga2luZCBvZiB1bmlxdWUg Y29udHJvbGxlciBpZGVudGlmaWNhdGlvbiBtZXNzYWdlLiBVc2luZyB1c2Jtb24KKyAqIChzZWUg RG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dCksIEkgdHJpZWQgNCBnYW1lcGFkcyBhbmQgYSBn dWl0YXIsIGFuZAorICogSSBjb2xsZWN0ZWQgdGhlIGZvbGxvd2luZyA1IElEIHBhY2tldHMgZnJv bSB0aGUgNSBkZXZpY2VzOgorICoKKyAqIDAwMGYwMGYwIDAwY2NmZDI3IDAwNjBlMjI2IDYzNzAw MDEwIDEzZTMyMDFkIDMwMDM0MDAxIDUwMDFmZmZmIGZmCisgKiAwMDBmMDBmMCBmMGNjZmQyNyAw MDYwZDhjNCBlOTYwMDAwOSAxM2U3MjAxZCAzMDAzNDAwMSA1MDAxZmZmZiBmZgorICogMDAwZjAw ZjAgMDBjY2ZkMjcgMDA2MDU3OGIgODJmMDAwMTAgMTNlMzIwMWQgMzAwMzQwMDEgNTAwMWZmZmYg ZmYKKyAqIDAwMGYwMGYwIGYwY2NmZDI3IDAwNjBkYTFjIGIxNTAwMDA5IDEzZTcyMDFkIDMwMDM0 MDAxIDUwMDFmZmZmIGZmCisgKiAwMDBmMDBmMCBmMGNjZmQyNyAwMDYwMDJkMSA3MWQxMDAwMCAx M2UzMjAxZCAzMDAzNDQzMCA1MTA3ZmZmZiBmZgorICoKKyAqIEZyb20gdGhpcyB0cmFjZSBkYXRh LCBJIGNvbmNvY3RlZCB0aGUgZm9sbG93aW5nIChwb3RlbnRpYWxseSBpbmNvcnJlY3QpCisgKiBz Y2hlbWUgZm9yIGRldGVjdGluZyB0eXBlIGFuZCB1bmlxdWUgSUQ6CisgKgorICogKioqKioqKiog eHgqKioqeHggeHh4eHh4eHggeHh4eCoqeHggKip4eCoqKiogKioqKnR0dHQgdHR0dCoqKiogKioK KyAqICAgICAgICAgICAgICAgIHwgIHVuaXF1ZSBpZCB8ICAgICAgICAgICAgICAgICAgICB8ICB0 eXBlIHwKKyAqCisgKiBJdCBhcHBlYXJzIHRoYXQgc29tZSBvZiB0aGUgYnl0ZXMgaW4gdGhlIGZp cnN0IGhhbGYgb2YgdGhlIG1lc3NhZ2UsIG5vdGVkCisgKiBhYm92ZSBhcyAidW5pcXVlIGlkIiBh cmUgc29tZSBzb3J0IG9mIHNlcmlhbCBudW1iZXIsIHRob3VnaCBJIGNhbm5vdCB3b3JrCisgKiBv dXQgYW55IGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gdGhlc2UgYnl0ZXMgYW5kIHRoZSBzZXJpYWwg bnVtYmVyIHByaW50ZWQKKyAqIHVuZGVyIHRoZSBiYXR0ZXJ5IHBhY2suIE1hbnkgb2YgdGhlIGJ5 dGVzIGluIHRoaXMgcG9zc2libHkgdW5pcXVlIGZpZWxkCisgKiBhcmUgbm90IHVuaXF1ZSBhY3Jv c3MgbXkgY29udHJvbGxlcnMsIGFuZCBtYXkgbm90IGluIGZhY3QgYmUgcGFydCBvZiB0aGUKKyAq IGNvbnRyb2xsZXIncyB1bmlxdWUgaWRlbnRpZmljYXRpb24sIGJ1dCBJIGZpZ3VyZWQgaXQgd2Fz IGJldHRlciB0byBoYXZlCisgKiBleHRyYSBieXRlcyBvbiBlaXRoZXIgZW5kIG9mIHRoZSB1bmlx dWUgYnl0ZSBzdHJpbmcgaW5zdGVhZCBvZiB0aGUKKyAqIGFsdGVybmF0aXZlLiBJbiBhZGRpdGlv biwgdGhlIHBhY2tldCBhcHBlYXJzIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mCisgKiB0aGUgY29u dHJvbGxlciB0b3dhcmQgdGhlIGVuZDogdGhlIHBhZHMgYWxsIHNlbmQgNDAwMSA1MDAxLCB3aGls ZSB0aGUKKyAqIGd1aXRhciBzZW5kcyA0NDMwIDUxMDcuCisgKgorICogRnVydGhlciB0ZXN0aW5n IG92ZXIgYSB3aWRlciB2YXJpZXR5IG9mIGRldmljZXMgaXMgcHJvYmFibHkgbmVlZGVkIHRvCisg KiBkZXRlcm1pbmUgaWYgY2hhbmdlcyBuZWVkIHRvIGJlIG1hZGUgdG8gdGhpcyBzY2hlbWUuCisg Ki8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdzM2MF9pZCB7CisJdTMyIGlkX2J5dGVzOworCXU4IGNv bnRyb2xsZXJfdHlwZTsKK30gdzM2MF9pZFtdID0geworCXsgMHg0MDAxNTAwMSwgWENPTlRST0xM RVJfVFlQRV9QQUQgfSwKKwl7IDB4NDQzMDUxMDcsIFhDT05UUk9MTEVSX1RZUEVfR1VJVEFSIH0s CisJeyAweDAwMDAwMDAwLCBYQ09OVFJPTExFUl9UWVBFX05PTkUgfQorfTsKKworCisvKiBTb21l IG9mIHRoZSBmaWVsZHMgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgYXJlIGZvciBsYXRlciB1 c2Ugd2l0aAorICogdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyB0byByZWNvZ25pemUgaW5kaXZpZHVh bCBjb250cm9sbGVycy4gVGhlIGRlYWQgem9uZXMKKyAqIGFuZCBheGlzIGxpbWl0cyBjYW4gYmUg Y2hhbmdlZCAib24gdGhlIGZseSIgYW5kIGFyZSBlZmZlY3RpdmUgaW1tZWRpYXRlbHkuCisgKgor ICogVGhlIGZpZWxkcyBsYWJlbGVkICJybyIgYW5kICJydyIgYXJlIGludGVuZGVkIHRvIGJlIHJl YWQtb25seSBhbmQKKyAqIHJlYWQtd3JpdGUsIHJlc3BlY3RpdmVseSwgd2hlbiBleHBvc2VkIGlu IHN5c2ZzLiBNb3N0IG9mIHRoZSByZWFkLW9ubHkKKyAqIGZpZWxkcyBhcmUgdG8gc3VwcG9ydCAq d2lyZWxlc3MqIDM2MCBjb250cm9sbGVycy4gVGhlIGNvbnRyb2xsZXJfbnVtYmVyCisgKiBpcyB1 c2VkIHRvIHNldCB0aGUgTEVELCB3aGlsZSBjb250cm9sbGVyX3ByZXNlbnQgdHJhY2tzIHdoZXRo ZXIgdGhlCisgKiBjb250cm9sbGVyIGlzIGNvbm5lY3RlZCB0byB0aGUgd2lyZWxlc3MgcmVjZWl2 ZXIuIENvbnRyb2xsZXIgdHlwZSBhcHBsaWVzCisgKiB0byBhbGwgbW9kZWxzICh3aXJlZCBhbmQg d2lyZWxlc3MpLCBhbmQgdHJhY2tzIHdoZXRoZXIgdGhlIGRldmljZSBpcyBhIHBhZCwKKyAqIGd1 aXRhciwgZXRjLiBmb3IgbGF0ZXIgdXNlcnNwYWNlIHVzZS4gU2VlIHRoZSBjb21tZW50IGFib3Zl IHJlZ2FyZGluZworICogdHlwZSBhbmQgdW5pcXVlIElEIGRldGVjdGlvbiBvbiB3aXJlbGVzcyAz NjAgcmVjZWl2ZXJzLgorICovCitzdHJ1Y3QgdXNiX3hwYWQgeworCXN0cnVjdCBpbnB1dF9kZXYg KmRldjsJCS8qIGlucHV0IGRldmljZSBpbnRlcmZhY2UgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAq dWRldjsJLyogdXNiIGRldmljZSAqLworCisJc3RydWN0IHVyYiAqaXJxX2luOwkJLyogdXJiIGZv ciBpbnRlcnJ1cHQgaW4gcmVwb3J0ICovCisJdW5zaWduZWQgY2hhciAqaWRhdGE7CQkvKiBpbnB1 dCBkYXRhICovCisJZG1hX2FkZHJfdCBpZGF0YV9kbWE7CisKKyNpZiBkZWZpbmVkKENPTkZJR19K T1lTVElDS19YUEFEX0ZGKSB8fCBkZWZpbmVkKENPTkZJR19KT1lTVElDS19YUEFEX0xFRFMpCisJ c3RydWN0IHVyYiAqaXJxX291dDsJCS8qIHVyYiBmb3IgaW50ZXJydXB0IG91dCByZXBvcnQgKi8K Kwl1bnNpZ25lZCBjaGFyICpvZGF0YTsJCS8qIG91dHB1dCBkYXRhICovCisJZG1hX2FkZHJfdCBv ZGF0YV9kbWE7CisJc3RydWN0IG11dGV4IG9kYXRhX211dGV4OworI2VuZGlmCisKKyNpZiBkZWZp bmVkKENPTkZJR19KT1lTVElDS19YUEFEX0xFRFMpCisJc3RydWN0IHhwYWRfbGVkICpsZWQ7Cisj ZW5kaWYKKworCWNoYXIgcGh5c1s2NF07CQkJLyogcGh5c2ljYWwgZGV2aWNlIHBhdGggKi8KKwor CWludCBkcGFkX21hcHBpbmc7CQkvKiBtYXAgZC1wYWQgdG8gYnV0dG9ucyBvciB0byBheGVzICov CisJaW50IHh0eXBlOwkJCS8qIHR5cGUgb2YgeGJveCBkZXZpY2UgKi8KKwkKKwkvKiBXb3JrIHN0 cnVjdHVyZSBmb3IgbW92aW5nIHRoZSBjYWxsIHRvIHhwYWRfc2VuZF9sZWRfY29tbWFuZAorCSAq IG91dHNpZGUgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciBwYWNrZXQgcHJvY2Vzc2luZyAqLwor CXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCWludCB3b3JrX3BlbmRpbmc7CisJCisJaW50IGNv bnRyb2xsZXJfbnVtYmVyOwkJLyogY29udHJvbGxlciBudW1iZXIgKDEtNCkgZm9yIDM2MHcuIHJv ICovCisJaW50IGNvbnRyb2xsZXJfcHJlc2VudDsgICAgICAgICAvKiAzNjB3IGNvbnRyb2xsZXIg cHJlc2VuY2UgZGV0ZWN0aW9uLiBybyAqLworCWludCBjb250cm9sbGVyX3R5cGU7ICAgICAgICAg ICAgLyogY29udHJvbGxlciB0eXBlLiBybyAqLworCWNoYXIgY29udHJvbGxlcl91bmlxdWVfaWRb MTddOyAgLyogdW5pcXVlIElEIG9mIGNvbnRyb2xsZXIgKDM2MHcpLiBybyAqLworCXVuc2lnbmVk IGludCBsZWZ0X2RlYWRfem9uZTsgICAgLyogZGVhZCB6b25lIGZvciBsZWZ0IHN0aWNrLiBydyAq LworCXVuc2lnbmVkIGludCByaWdodF9kZWFkX3pvbmU7ICAgLyogZGVhZCB6b25lIGZvciByaWdo dCBzdGljay4gcncgKi8KKwl1bnNpZ25lZCBpbnQgbGVmdF9zdGlja19saW1pdDsgIC8qIHN0aWNr IGF4aXMgbGltaXQgZm9yIGxlZnQgc3RpY2suIHJ3ICovCisJdW5zaWduZWQgaW50IHJpZ2h0X3N0 aWNrX2xpbWl0OyAvKiBzdGljayBheGlzIGxpbWl0IGZvciByaWdodCBzdGljay4gcncgKi8KKwlp bnQgcnVtYmxlX2VuYWJsZTsgICAgICAgICAgICAgIC8qIGVuYWJsZS9kaXNhYmxlIHJ1bWJsZS4g cncgKi8KKwkKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykKKwlpbnQgc3lzZnNfb2s7ICAgICAg ICAgICAgICAgICAgIC8qIHN5c2ZzIGludGVyZmFjZSBPSyAqLworI2VuZGlmCit9OworI2RlZmlu ZSB0b194cGFkKGQpIGlucHV0X2dldF9kcnZkYXRhKHRvX2lucHV0X2RldihkKSkKKworCisvKiBG dW5jdGlvbiBwcm90b3R5cGVzIGZvciBub24tc3lzZnMgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqLwor c3RhdGljIHZvaWQgc2V0X2RlYWRfem9uZSh1bnNpZ25lZCBpbnQgbmV3X3NpemUsIHVuc2lnbmVk IGludCAqZHosIHVuc2lnbmVkIGludCBzdGlja19saW1pdCk7CitzdGF0aWMgdm9pZCBzZXRfc3Rp Y2tfbGltaXQodW5zaWduZWQgaW50IG5ld19zaXplLCB1bnNpZ25lZCBpbnQgKnNsLCB1bnNpZ25l ZCBpbnQgZGVhZF96b25lKTsKK3N0YXRpYyB2b2lkIHhwYWRfaW5pdF9jb250cm9sbGVyKHN0cnVj dCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgdm9pZCB4cGFkX3NlbmRfbGVkX2NvbW1hbmQoc3Ry dWN0IHVzYl94cGFkICp4cGFkLCBpbnQgY29tbWFuZCk7CitzdGF0aWMgdm9pZCB4cGFkX3dvcmtf Y29udHJvbGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpOworc3RhdGljIHZvaWQgeHBhZF9wcm9j ZXNzX3N0aWNrcyhzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIHVuc2lnbmVkIGNoYXIgKmRhdGEpOwor c3RhdGljIHZvaWQgeHBhZF9wcm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIHUx NiBjbWQsIHVuc2lnbmVkIGNoYXIgKmRhdGEpOworc3RhdGljIHZvaWQgeHBhZDM2MF9wcm9jZXNz X3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsCisJCQkJICAgdTE2IGNtZCwgdW5zaWduZWQg Y2hhciAqZGF0YSk7CitzdGF0aWMgdm9pZCB4cGFkMzYwd19pZGVudGlmeV9jb250cm9sbGVyKHN0 cnVjdCB1c2JfeHBhZCAqeHBhZCwgdW5zaWduZWQgY2hhciAqZGF0YSk7CitzdGF0aWMgdm9pZCB4 cGFkMzYwd19wcm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIHUxNiBjbWQsIHVu c2lnbmVkIGNoYXIgKmRhdGEpOworc3RhdGljIHZvaWQgeHBhZF9pcnFfaW4oc3RydWN0IHVyYiAq dXJiKTsKK3N0YXRpYyB2b2lkIHhwYWRfaXJxX291dChzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGlj IGludCB4cGFkX2luaXRfb3V0cHV0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBzdHJ1Y3Qg dXNiX3hwYWQgKnhwYWQpOworc3RhdGljIHZvaWQgeHBhZF9zdG9wX291dHB1dChzdHJ1Y3QgdXNi X3hwYWQgKnhwYWQpOworc3RhdGljIHZvaWQgeHBhZF9zdG9wX291dHB1dChzdHJ1Y3QgdXNiX3hw YWQgKnhwYWQpOworc3RhdGljIGludCB4cGFkX3BsYXlfZWZmZWN0KHN0cnVjdCBpbnB1dF9kZXYg KmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpOworc3Rh dGljIGludCB4cGFkX2luaXRfZmYoc3RydWN0IHVzYl94cGFkICp4cGFkKTsKK3N0YXRpYyB2b2lk IHhwYWRfc2VuZF9sZWRfY29tbWFuZChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIGludCBjb21tYW5k KTsKK3N0YXRpYyB2b2lkIHhwYWRfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rl diwgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSk7CitzdGF0aWMgaW50IHhwYWRfbGVkX3Byb2Jl KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgdm9pZCB4cGFkX2xlZF9kaXNjb25uZWN0 KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCk7CitzdGF0aWMgaW50IHhwYWRfb3BlbihzdHJ1Y3QgaW5w dXRfZGV2ICpkZXYpOworc3RhdGljIHZvaWQgeHBhZF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpk ZXYpOworc3RhdGljIHZvaWQgeHBhZF9zZXRfdXBfYWJzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0 X2Rldiwgc2lnbmVkIHNob3J0IGFicyk7CitzdGF0aWMgaW50IHhwYWRfcHJvYmUoc3RydWN0IHVz Yl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0 aWMgdm9pZCB4cGFkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3Rh dGljIGludCBfX2luaXQgdXNiX3hwYWRfaW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lkIF9fZXhpdCB1 c2JfeHBhZF9leGl0KHZvaWQpOworCisKKy8qIHN5c2ZzIGludGVyZmFjZSAqLworI2lmIGRlZmlu ZWQoQ09ORklHX1NZU0ZTKQorc3RhdGljIHNzaXplX3QgeHBhZF9zaG93X3VpbnQoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKTsK K3N0YXRpYyBzc2l6ZV90IHhwYWRfc3RvcmVfdWludChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3Vu dCk7CitzdGF0aWMgc3NpemVfdCB4cGFkX3N0b3JlX3J1bWJsZV9lbmFibGUoc3RydWN0IGRldmlj ZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVm LCBzaXplX3QgY291bnQpOworc3RhdGljIHNzaXplX3QgeHBhZF9zdG9yZV9ybyhzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpi dWYsIHNpemVfdCBjb3VudCk7CitzdGF0aWMgc3NpemVfdCB4cGFkX3Nob3dfaW50KHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1Zik7 CitzdGF0aWMgc3NpemVfdCB4cGFkX3Nob3dfaWQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKKworCQorCisvKiBEZXZpY2Ug YXR0cmlidXRlcyAqLworc3RhdGljIERFVklDRV9BVFRSKGxlZnRfZGVhZF96b25lLCAwNjY2LCB4 cGFkX3Nob3dfdWludCwgeHBhZF9zdG9yZV91aW50KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyaWdo dF9kZWFkX3pvbmUsIDA2NjYsIHhwYWRfc2hvd191aW50LCB4cGFkX3N0b3JlX3VpbnQpOworc3Rh dGljIERFVklDRV9BVFRSKGxlZnRfc3RpY2tfbGltaXQsIDA2NjYsIHhwYWRfc2hvd191aW50LCB4 cGFkX3N0b3JlX3VpbnQpOworc3RhdGljIERFVklDRV9BVFRSKHJpZ2h0X3N0aWNrX2xpbWl0LCAw NjY2LCB4cGFkX3Nob3dfdWludCwgeHBhZF9zdG9yZV91aW50KTsKK3N0YXRpYyBERVZJQ0VfQVRU UihydW1ibGVfZW5hYmxlLCAwNjY2LCB4cGFkX3Nob3dfaW50LCB4cGFkX3N0b3JlX3J1bWJsZV9l bmFibGUpOworc3RhdGljIERFVklDRV9BVFRSKGNvbnRyb2xsZXJfbnVtYmVyLCAwNDQ0LCB4cGFk X3Nob3dfaW50LCB4cGFkX3N0b3JlX3JvKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjb250cm9sbGVy X3ByZXNlbnQsIDA0NDQsIHhwYWRfc2hvd19pbnQsIHhwYWRfc3RvcmVfcm8pOworc3RhdGljIERF VklDRV9BVFRSKGNvbnRyb2xsZXJfdHlwZSwgMDQ0NCwgeHBhZF9zaG93X2ludCwgeHBhZF9zdG9y ZV9ybyk7CitzdGF0aWMgREVWSUNFX0FUVFIoaWQsIDA0NDQsIHhwYWRfc2hvd19pZCwgeHBhZF9z dG9yZV9ybyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp4cGFkX2RlZmF1bHRfYXR0cnNb XSA9IHsKKwkmZGV2X2F0dHJfbGVmdF9kZWFkX3pvbmUuYXR0ciwKKwkmZGV2X2F0dHJfcmlnaHRf ZGVhZF96b25lLmF0dHIsCisJJmRldl9hdHRyX2xlZnRfc3RpY2tfbGltaXQuYXR0ciwKKwkmZGV2 X2F0dHJfcmlnaHRfc3RpY2tfbGltaXQuYXR0ciwKKwkmZGV2X2F0dHJfcnVtYmxlX2VuYWJsZS5h dHRyLAorCSZkZXZfYXR0cl9jb250cm9sbGVyX251bWJlci5hdHRyLAorCSZkZXZfYXR0cl9jb250 cm9sbGVyX3ByZXNlbnQuYXR0ciwKKwkmZGV2X2F0dHJfY29udHJvbGxlcl90eXBlLmF0dHIsCisJ JmRldl9hdHRyX2lkLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVf Z3JvdXAgeHBhZF9kZWZhdWx0X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0geHBhZF9kZWZhdWx0 X2F0dHJzLAorCS5uYW1lID0gImdhbWVfZGV2aWNlIiwKK307CisjZW5kaWYKKworCitzdGF0aWMg c3RydWN0IHVzYl9kcml2ZXIgeHBhZF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInhwYWQiLAorCS5w cm9iZQkJPSB4cGFkX3Byb2JlLAorCS5kaXNjb25uZWN0CT0geHBhZF9kaXNjb25uZWN0LAorCS5p ZF90YWJsZQk9IHhwYWRfdGFibGUsCit9OworCittb2R1bGVfaW5pdCh1c2JfeHBhZF9pbml0KTsK K21vZHVsZV9leGl0KHVzYl94cGFkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRI T1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJH UEwiKTsKKworI2VuZGlmCisKKy8qIERyaXZlciBIaXN0b3J5OgorICoKKyAqIDIwMDktMDItMjEg OiBSZWZhY3RvcmVkIGFuZCBjaGFuZ2VkIHN0aWNrIGhhbmRsaW5nCisgKiAgLSBzcGxpdCBjb2Rl IGludG8gdHdvIHBpZWNlcyAoeHBhZC5oIGFuZCB4cGFkLmMpCisgKiAgLSBjbGVhbmVkIHVwIHN5 c2ZzIGludGVyZmFjZQorICogIC0gY2hhbmdlZCBzcXVhcmUgYXhpcyBhbGdvcml0aG0gdG8gYW4g YXhpcyBsaW1pdCBhbGdvcml0aG0sIHdoaWNoIGFsbG93cworICogICAgc2l6ZSBvZiBpbnNjcmli ZWQgc3F1YXJlIHRvIGJlIGFkanVzdGVkOyBhdmFpbGFibGUgZm9yIGJvdGggc3RpY2tzCisgKiAg LSBkZWFkIHpvbmVzIG5vdyBwZXItc3RpY2sKKyAqCisgKiAyMDA5LTAyLTE4IDogQ2hhbmdlcyBw ZXIgbWFpbGluZyBsaXN0IChhbmQgc29tZSBhZGRpdGlvbnMpCisgKiAgLSByZXZpc2VkIHN5c2Zz IGludGVyZmFjZSAodGhhbmtzIEdyZWcgSy1IKQorICogIC0gY2hlY2sgcmV0dXJuIHZhbHVlcyBv ZiBzc2NhbmYgKHRoYW5rcyBPbGl2ZXIgTmV1a3VtKQorICogIC0gdXJiIHN1Ym1pc3Npb24gd2hp bGUgaG9sZGluZyBtdXRleCBub3cgb25jZSBhZ2FpbiBHRlBfS0VSTkVMICh0aGFua3MgT2xpdmVy IE5ldWt1bSkKKyAqICAtIHdvcmsgc3RydWN0dXJlIGZpeGVzICh0aGFua3MgT2xpdmVyIE5ldWt1 bSkKKyAqICAtIHVldmVudHMgZ2VuZXJhdGVkIGZvciB3aXJlbGVzcyBjb250cm9sbGVyIG9ubGlu ZS9vZmZsaW5lCisgKiAgLSBzeXNmcyBpbnRlcmZhY2Ugb25seSBpZiBDT05GSUdfU1lTRlMgaXMg c2V0CisgKgorICogMjAwOS0wMi0xNSA6IE1pbm9yIGFkanVzdG1lbnRzCisgKiAgLSBhZGRlZCBL T0JKX09OTElORS9LT0JKX09GRkxJTkUgZXZlbnRzIHdoZW4gY29udHJvbGxlcnMgYXJlIGNvbm5l Y3RlZCB0bworICogICAgb3IgZGlzY29ubmVjdGVkIGZyb20gdGhlIHdpcmVsZXNzIDM2MCByZWNl aXZlcgorICogIC0gaWdub3JlIGR1cGxpY2F0ZSBjb25uZWN0IG1lc3NhZ2VzIG9uIHRoZSBzYW1l IGNvbm5lY3Rpb24KKyAqICAtIGFkZGVkIG9wdGlvbiB0byBlbmFibGUvZGlzYWJsZSBydW1ibGUg b24gYSBwZXItY29udHJvbGxlciBiYXNpcworICogIC0gcnVtYmxlIGV2ZW50cyBhcmUgbm90IHNl bnQgdG8gZ3VpdGFyIG9yIGRhbmNlIHBhZCBkZXZpY2VzCisgKgorICogMjAwOS0wMi0xNCA6IEFk ZGVkIHN5c2ZzIGludGVyZmFjZQorICogIC0gZGVhZCB6b25lcyBhbmQgc3F1YXJlIGF4aXMgc2V0 dGluZ3MgY2FuIG5vdyBiZSBtYWRlIHBlci1jb250cm9sbGVyCisgKiAgLSByZW1vdmVkIGRlYWRf em9uZSBhbmQgc3F1YXJlX2F4aXMgbW9kdWxlIHBhcmFtZXRlcnMgKHVzZSBzeXNmcykKKyAqICAt IG5ldyBzcXVhcmUgYXhpcyBhbGdvcml0aG0KKyAqCisgKiAyMDA5LTAyLTEzIDogRGlzYWJsZSBz cXVhcmUgYXhpcyBmb3IgcmlnaHQgc3RpY2sKKyAqICAtIHNxdWFyZSBheGlzIGFwcGxpZXMgdG8g bGVmdCBzdGljayBvbmx5CisgKgorICogMjAwOS0wMi0xMiA6IFNjYWxpbmcgZm9yIGRlYWQgem9u ZSBhbmQgc3F1YXJlIGF4aXMgc3VwcG9ydAorICogIC0gYXhlcyBub3cgc2NhbGUgZnJvbSAwIHRv IDMyNzY3IHN0YXJ0aW5nIGF0IGVkZ2Ugb2YgZGVhZCB6b25lCisgKiAgLSBpbmNyZWFzZWQgZGVm YXVsdCBkZWFkIHpvbmUgdG8gODE5MgorICogIC0gaW5pdGlhbCBzcXVhcmUgYXhpcyBzdXBwb3J0 IChyZWxpYWJsZSBvbmx5IHdpdGggbGVmdCBzdGljaykKKyAqCisgKiAyMDA5LTAyLTA3IDogTW9y ZSB3aXJlbGVzcyAzNjAgY29udHJvbGxlciBmaXhlcworICogIC0gcmVtb3ZlZCBidWxrIHVyYiBj b21wbGV0ZWx5CisgKiAgLSB1c2UgeHBhZF9zZW5kX2xlZF9jb21tYW5kIHRvIHNldCBjb250cm9s bGVyIG51bWJlciBvbiBMRUQgZGlzcGxheQorICogICAgKHdpcmVsZXNzIDM2MCBjb250cm9sbGVy KQorICogIC0gZGVhZF96b25lIGlzIG5vdyBhbiBhZGp1c3RhYmxlIG1vZHVsZSBwYXJhbWV0ZXIK KyAqCisgKiAyMDA5LTAyLTA2IDogQXhpcyBoYW5kbGluZyBpbXByb3ZlbWVudHMKKyAqICAtIHVu aWZpZWQgaGFuZGxlciBmb3IgbGVmdCBhbmQgcmlnaHQgc3RpY2tzCisgKiAgLSBpbml0aWFsIHN1 cHBvcnQgZm9yIGRlYWQgem9uZXMKKyAqCisgKiAyMDA5LTAyLTAyIDogV2lyZWxlc3MgMzYwIGNv bnRyb2xsZXIgZml4ZXMKKyAqICAtIGZvbGxvd2VkIFBST1RPQ09MIGRlc2NyaXB0aW9uIGZyb20g eGJveGRydiB1c2Vyc3BhY2UgZHJpdmVyCisgKiAgLSBMRUQgYW5kIHJ1bWJsZSBzdXBwb3J0IGFk ZGVkIGZvciB3aXJlbGVzcyAzNjAgY29udHJvbGxlciAocHJvdG9jb2wKKyAqICAgIGlzIGRpZmZl cmVudCBmcm9tIHdpcmVkISkKKyAqCisgKiAyMDA0LTEwLTAyIC0gMC4wLjYgOiBERFIgcGFkIHN1 cHBvcnQKKyAqICAtIGJvcnJvd2VkIGZyb20gdGhlIFhCT1ggbGludXgga2VybmVsCisgKiAgLSBV U0IgaWQncyBmb3IgY29tbW9ubHkgdXNlZCBkYW5jZSBwYWRzIGFyZSBwcmVzZW50CisgKiAgLSBk YW5jZSBwYWRzIHdpbGwgbWFwIEQtUEFEIHRvIGJ1dHRvbnMsIG5vdCBheGVzCisgKiAgLSBwYXNz IHRoZSBtb2R1bGUgcGFyYW1hdGVyICdkcGFkX3RvX2J1dHRvbnMnIHRvIGZvcmNlCisgKiAgICB0 aGUgRC1QQUQgdG8gbWFwIHRvIGJ1dHRvbnMgaWYgeW91ciBwYWQgaXMgbm90IGRldGVjdGVkCisg KgorICogMjAwMi0wNy0xNyAtIDAuMC41IDogc2ltcGxpZmllZCBkLXBhZCBoYW5kbGluZworICoK KyAqIDIwMDItMDctMTYgLSAwLjAuNCA6IG1pbm9yIGNoYW5nZXMsIG1lcmdlIHdpdGggVm9qdGVj aCdzIHYwLjAuMworICogIC0gdmVyaWZpZWQgdGhlIGxhY2sgb2YgSElEIGFuZCByZXBvcnQgZGVz Y3JpcHRvcnMKKyAqICAtIHZlcmlmaWVkIHRoYXQgQUxMIGJ1dHRvbnMgV09SSworICogIC0gZml4 ZWQgZC1wYWQgdG8gYXhlcyBtYXBwaW5nCisgKgorICogMjAwMi0wNy0xNCAtIDAuMC4zIDogcmV3 b3JrIGJ5IFZvanRlY2ggUGF2bGlrCisgKiAgLSBpbmRlbnRhdGlvbiBmaXhlcworICogIC0gdXNi ICsgaW5wdXQgaW5pdCBzZXF1ZW5jZSBmaXhlcworICoKKyAqIDIwMDItMDctMDIgLSAwLjAuMiA6 IGJhc2ljIHdvcmtpbmcgdmVyc2lvbgorICogIC0gYWxsIGF4ZXMgYW5kIDkgb2YgdGhlIDEwIGJ1 dHRvbnMgd29yayAoZ2VybWFuIEludGVyQWN0IGRldmljZSkKKyAqICAtIHRoZSBibGFjayBidXR0 b24gZG9lcyBub3Qgd29yaworICoKKyAqIDIwMDItMDYtMjcgLSAwLjAuMSA6IGZpcnN0IHZlcnNp b24sIGp1c3Qgc2FpZCAiWEJPWCBISUQgY29udHJvbGxlciIKKyAqCisgKi8K --0016363b7a9c9bcc1c04637b326f-- -- 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