From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v9,1/2] i2c: buses: add i2c bus driver for NVIDIA GPU From: Peter Rosin Message-Id: Date: Fri, 7 Sep 2018 19:46:48 +0200 To: Ajay Gupta , "wsa@the-dreams.de" , "heikki.krogerus@linux.intel.com" Cc: "linux-usb@vger.kernel.org" , "linux-i2c@vger.kernel.org" List-ID: T24gMjAxOC0wOS0wNyAxOToxNSwgQWpheSBHdXB0YSB3cm90ZToKPiBIaSBQZXRlciwKPj4+IFNp Z25lZC1vZmYtYnk6IEFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+Cj4+PiBSZXZpZXdlZC1i eTogQW5keSBTaGV2Y2hlbmtvIDxhbmR5LnNoZXZjaGVua29AZ21haWwuY29tPgo+Pj4gUmV2aWV3 ZWQtYnk6IEhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4K Pj4+IC0tLQo+Pj4gQ2hhbmdlcyBmcm9tIHYxIC0+IHYyCj4+PiAJTm9uZQo+Pj4gQ2hhbmdlcyBm cm9tIHYyIC0+IHYzCj4+PiAJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gQW5keSBhbmQgVGhp ZXJyeQo+Pj4gCVJlbmFtZSBpMmMtZ3B1LmMgLT4gaTJjLW52aWRpYS1ncHUuYwo+Pj4gQ2hhbmdl cyBmcm9tIHYzIC0+IHY0Cj4+PiAJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gQW5keQo+Pj4g Q2hhbmdlcyBmcm9tIHY0IC0+IHY1Cj4+PiAJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gQW5k eQo+Pj4gQ2hhbmdlcyBmcm9tIHY1IC0+IHY2Cj4+PiAJTm9uZQo+Pj4gQ2hhbmdlcyBmcm9tIHY2 IC0+IHY3IC0+IHY4Cj4+PiAJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXIKPj4+IAkt IEFkZCBpbXBsaWNpdCBTVE9QIGZvciBsYXN0IHdyaXRlIG1lc3NhZ2UKPj4+IAktIEFkZCBpMmNf YWRhcHRlcl9xdWlya3Mgd2l0aCBtYXhfcmVhZF9sZW4gYW5kCj4+PiAJICBJMkNfQVFfQ09NQiBm bGFncwo+Pj4gQ2hhbmdlcyBmcm9tIHY4IC0+IHY5Cj4+PiAJRml4ZWQgcmV2aWV3IGNvbW1lbnRz IGZyb20gUGV0ZXIKPj4+IAktIERyb3AgZG9fc3RhcnQgZmxhZwo+Pj4gCS0gVXNlIGkyY184Yml0 X2FkZHJfZnJvbV9tc2coKQo+Pj4KPj4+ICBEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW52 aWRpYS1ncHUgfCAgMTggKysKPj4+ICBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDcgKwo+Pj4gIGRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnICAgICAgICAgICAg ICB8ICAgOSArCj4+PiAgZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlICAgICAgICAgICAgIHwg ICAxICsKPj4+ICBkcml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUuYyAgICAgfCAzOTYK Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+ICA1IGZpbGVzIGNoYW5nZWQs IDQzMSBpbnNlcnRpb25zKCspCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24v aTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUuYwo+Pj4KPj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVu dGF0aW9uL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUKPj4+IGIvRG9jdW1lbnRhdGlvbi9pMmMv YnVzc2VzL2kyYy1udmlkaWEtZ3B1Cj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXgg MDAwMDAwMC4uMzE4ODRkMgo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvRG9jdW1lbnRhdGlv bi9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1Cj4+PiBAQCAtMCwwICsxLDE4IEBACj4+PiArS2Vy bmVsIGRyaXZlciBpMmMtbnZpZGlhLWdwdQo+Pj4gKwo+Pj4gK0RhdGFzaGVldDogbm90IHB1Ymxp Y2x5IGF2YWlsYWJsZS4KPj4+ICsKPj4+ICtBdXRob3JzOgo+Pj4gKwlBamF5IEd1cHRhIDxhamF5 Z0BudmlkaWEuY29tPgo+Pj4gKwo+Pj4gK0Rlc2NyaXB0aW9uCj4+PiArLS0tLS0tLS0tLS0KPj4+ ICsKPj4+ICtpMmMtbnZpZGlhLWdwdSBpcyBhIGRyaXZlciBmb3IgSTJDIGNvbnRyb2xsZXIgaW5j bHVkZWQgaW4gTlZJRElBCj4+PiArVHVyaW5nIGFuZCBsYXRlciBHUFVzIGFuZCBpdCBpcyB1c2Vk IHRvIGNvbW11bmljYXRlIHdpdGggVHlwZS1DIGNvbnRyb2xsZXIKPj4gb24gR1BVcy4KPj4+ICsK Pj4+ICtJZiB5b3VyICdsc3BjaSAtdicgbGlzdGluZyBzaG93cyBzb21ldGhpbmcgbGlrZSB0aGUg Zm9sbG93aW5nLAo+Pj4gKwo+Pj4gKzAxOjAwLjMgU2VyaWFsIGJ1cyBjb250cm9sbGVyIFswYzgw XTogTlZJRElBIENvcnBvcmF0aW9uIERldmljZSAxYWQ5Cj4+PiArKHJldiBhMSkKPj4+ICsKPj4+ ICt0aGVuIHRoaXMgZHJpdmVyIHNob3VsZCBzdXBwb3J0IHRoZSBJMkMgY29udHJvbGxlciBvZiB5 b3VyIEdQVS4KPj4+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTIGluZGV4 IDlhZDA1MmEuLjJkMWM1YTEgMTAwNjQ0Cj4+PiAtLS0gYS9NQUlOVEFJTkVSUwo+Pj4gKysrIGIv TUFJTlRBSU5FUlMKPj4+IEBAIC02Nzk3LDYgKzY3OTcsMTMgQEAgTDoJbGludXgtYWNwaUB2Z2Vy Lmtlcm5lbC5vcmcKPj4+ICBTOglNYWludGFpbmVkCj4+PiAgRjoJZHJpdmVycy9pMmMvaTJjLWNv cmUtYWNwaS5jCj4+Pgo+Pj4gK0kyQyBDT05UUk9MTEVSIERSSVZFUiBGT1IgTlZJRElBIEdQVQo+ Pj4gK006CUFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+Cj4+PiArTDoJbGludXgtaTJjQHZn ZXIua2VybmVsLm9yZwo+Pj4gK1M6CU1haW50YWluZWQKPj4+ICtGOglEb2N1bWVudGF0aW9uL2ky Yy9idXNzZXMvaTJjLW52aWRpYS1ncHUKPj4+ICtGOglkcml2ZXJzL2kyYy9idXNzZXMvaTJjLW52 aWRpYS1ncHUuYwo+Pj4gKwo+Pj4gIEkyQyBNVVhFUwo+Pj4gIE06CVBldGVyIFJvc2luIDxwZWRh QGF4ZW50aWEuc2U+Cj4+PiAgTDoJbGludXgtaTJjQHZnZXIua2VybmVsLm9yZwo+Pj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tj b25maWcKPj4+IGluZGV4IDQ1MWQ0YWUuLmVlZDgyN2IgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJz L2kyYy9idXNzZXMvS2NvbmZpZwo+Pj4gKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcK Pj4+IEBAIC0yMjQsNiArMjI0LDE1IEBAIGNvbmZpZyBJMkNfTkZPUkNFMl9TNDk4NQo+Pj4gIAkg IFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBt b2R1bGUKPj4+ICAJICB3aWxsIGJlIGNhbGxlZCBpMmMtbmZvcmNlMi1zNDk4NS4KPj4+Cj4+PiAr Y29uZmlnIEkyQ19OVklESUFfR1BVCj4+PiArCXRyaXN0YXRlICJOVklESUEgR1BVIEkyQyBjb250 cm9sbGVyIgo+Pj4gKwlkZXBlbmRzIG9uIFBDSQo+Pj4gKwloZWxwCj4+PiArCSAgSWYgeW91IHNh eSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlCj4+ PiArCSAgTlZJRElBIEdQVSBJMkMgY29udHJvbGxlciB3aGljaCBpcyB1c2VkIHRvIGNvbW11bmlj YXRlIHdpdGggdGhlCj4+IEdQVSdzCj4+PiArCSAgVHlwZS1DIGNvbnRyb2xsZXIuIFRoaXMgZHJp dmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIGNhbGxlZAo+Pj4gKwkgIGkyYy1udmlk aWEtZ3B1Lgo+Pj4gKwo+Pj4gIGNvbmZpZyBJMkNfU0lTNTU5NQo+Pj4gIAl0cmlzdGF0ZSAiU2lT IDU1OTUiCj4+PiAgCWRlcGVuZHMgb24gUENJCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMv YnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCj4+PiBpbmRleCAx OGIyNmFmLi5kNDk5ODEzIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2Vm aWxlCj4+PiArKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKPj4+IEBAIC0xNDAsNSAr MTQwLDYgQEAgb2JqLSQoQ09ORklHX0kyQ19TSUJZVEUpCSs9IGkyYy1zaWJ5dGUubwo+Pj4gIG9i ai0kKENPTkZJR19JMkNfWEdFTkVfU0xJTVBSTykgKz0gaTJjLXhnZW5lLXNsaW1wcm8ubwo+Pj4g IG9iai0kKENPTkZJR19TQ3gyMDBfQUNCKQkrPSBzY3gyMDBfYWNiLm8KPj4+ICBvYmotJChDT05G SUdfSTJDX0ZTSSkJCSs9IGkyYy1mc2kubwo+Pj4gK29iai0kKENPTkZJR19JMkNfTlZJRElBX0dQ VSkJKz0gaTJjLW52aWRpYS1ncHUubwo+Pj4KPj4+ICBjY2ZsYWdzLSQoQ09ORklHX0kyQ19ERUJV R19CVVMpIDo9IC1EREVCVUcgZGlmZiAtLWdpdAo+Pj4gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJj LW52aWRpYS1ncHUuYwo+Pj4gYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUuYwo+ Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAuLjRhNjNhNGU0Cj4+PiAt LS0gL2Rldi9udWxsCj4+PiArKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUu Ywo+Pj4gQEAgLTAsMCArMSwzOTYgQEAKPj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAo+Pj4gKy8qCj4+PiArICogTnZpZGlhIEdQVSBJMkMgY29udHJvbGxlciBEcml2ZXIK Pj4+ICsgKgo+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAxOCBOVklESUEgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCj4+PiArICogQXV0aG9yOiBBamF5IEd1cHRhIDxhamF5Z0Budmlk aWEuY29tPiAgKi8gI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+ICNpbmNsdWRlCj4+PiArPGxpbnV4 L21vZHVsZS5oPiAjaW5jbHVkZSA8bGludXgvcGNpLmg+ICNpbmNsdWRlCj4+PiArPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPiAjaW5jbHVkZSA8bGludXgvcG0uaD4gI2luY2x1ZGUKPj4+ICs8bGlu dXgvcG1fcnVudGltZS5oPgo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+Cj4+ PiArCj4+PiArLyogSTJDIGRlZmluaXRpb25zICovCj4+PiArI2RlZmluZSBJMkNfTVNUX0NOVEwJ CQkJMHgwMAo+Pj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0dFTl9TVEFSVAkJCUJJVCgwKQo+Pj4g KyNkZWZpbmUgSTJDX01TVF9DTlRMX0dFTl9TVE9QCQkJQklUKDEpCj4+PiArI2RlZmluZSBJMkNf TVNUX0NOVExfQ01EX05PTkUJCQkoMCA8PCAyKQo+Pj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0NN RF9SRUFECQkJKDEgPDwgMikKPj4+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9DTURfV1JJVEUJCQko MiA8PCAyKQo+Pj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0dFTl9SQUIJCQlCSVQoNCkKPj4+ICsj ZGVmaW5lIEkyQ19NU1RfQ05UTF9CVVJTVF9TSVpFX1NISUZUCQk2Cj4+PiArI2RlZmluZSBJMkNf TVNUX0NOVExfR0VOX05BQ0sJCQlCSVQoMjgpCj4+PiArI2RlZmluZSBJMkNfTVNUX0NOVExfU1RB VFVTCQkJR0VOTUFTSygzMCwgMjkpCj4+PiArI2RlZmluZSBJMkNfTVNUX0NOVExfU1RBVFVTX09L QVkJCSgwIDw8IDI5KQo+Pj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX1NUQVRVU19OT19BQ0sJCSgx IDw8IDI5KQo+Pj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX1NUQVRVU19USU1FT1VUCQkoMiA8PCAy OSkKPj4+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFUVVNfQlVTX0JVU1kJCSgzIDw8IDI5KQo+ Pj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0NZQ0xFX1RSSUdHRVIJCUJJVCgzMSkKPj4+ICsKPj4+ ICsjZGVmaW5lIEkyQ19NU1RfQUREUgkJCQkweDA0Cj4+PiArI2RlZmluZSBJMkNfTVNUX0FERFJf REFCCQkJMAo+Pj4gKwo+Pj4gKyNkZWZpbmUgSTJDX01TVF9JMkMwX1RJTUlORwkJCQkweDA4Cj4+ PiArI2RlZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HX1NDTF9QRVJJT0RfMTAwS0haCQkweDEwZQo+ Pj4gKyNkZWZpbmUgSTJDX01TVF9JMkMwX1RJTUlOR19USU1FT1VUX0NMS19DTlQJCTE2Cj4+PiAr I2RlZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVF9NQVgJCTI1NQo+Pj4g KyNkZWZpbmUgSTJDX01TVF9JMkMwX1RJTUlOR19USU1FT1VUX0NIRUNLCQlCSVQoMjQpCj4+PiAr Cj4+PiArI2RlZmluZSBJMkNfTVNUX0RBVEEJCQkJCTB4MGMKPj4+ICsKPj4+ICsjZGVmaW5lIEky Q19NU1RfSFlCUklEX1BBRENUTAkJCQkweDIwCj4+PiArI2RlZmluZSBJMkNfTVNUX0hZQlJJRF9Q QURDVExfTU9ERV9JMkMJCQlCSVQoMCkKPj4+ICsjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BBRENU TF9JMkNfU0NMX0lOUFVUX1JDVgo+PiAJQklUKDE0KQo+Pj4gKyNkZWZpbmUgSTJDX01TVF9IWUJS SURfUEFEQ1RMX0kyQ19TREFfSU5QVVRfUkNWCj4+IAlCSVQoMTUpCj4+PiArCj4+PiArc3RydWN0 IGdwdV9pMmNfZGV2IHsKPj4+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+Pj4gKwl2b2lkIF9faW9t ZW0gKnJlZ3M7Cj4+PiArCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOwo+Pj4gKwlzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50Owo+Pj4gKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CS8qIHRvIHN5bmMg cmVhZC93cml0ZSAqLwo+Pgo+PiBIbW0sIHdoYXQgZG8geW91IG5lZWQgdG8gc3luYyByZWFkL3dy aXRlIHdpdGg/IAo+IFdoYXQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNsaWVudHMgYW5kIGVhY2gg b2YgdGhlbSB3YW50cyB0byB1c2UgSTJDIGJ1cyBmb3IgcmVhZC93cml0ZT8KPiBFdmVuIGluIFVD U0kgY2xpZW50LCB1c2VyIG1heSB3YW50IHRvIGNoYW5nZSBhbHQgbW9kZSB3aGljaCB3aWxsIHJl c3VsdCBpbiByZWFkL3dyaXRlCj4gcmVxdWVzdCBpbiBhIHRocmVhZC4gU28gd2UgaGF2ZSB0byBz eW5jaHJvbml6ZSBiZXR3ZWVuIFVDU0kgSVNSIGFuZCB0aGUgdXNlciB0aHJlYWQuCgpTeW5jaHJv bml6YXRpb24gb2YgcmVhZHMvd3JpdGVzIGZyb20gbXVsdGlwbGUgY2xpZW50cyBpcyBoYW5kbGVk IGJ5IHRoZSBJMkMgY29yZSBhbmQgdGhlCmFkYXB0ZXIgbG9jay4gTG9jayBpbiBpMmNfdHJhbnNm ZXIoKSBmb3IgdGhlIGRldGFpbHMuCgo+PiBUaGUgb25seSB0aGluZyBJIGNhbiBmaW5kIGlzCj4+ IHRoYXQgYnVzeS1jaGVjayBpbiBncHVfaTJjX2lkbGUsIGJ1dCBjYW4gcnVudGltZS1wbSByZWFs bHkgdHJ5IHRvIGlkbGUgYW4KPj4gYWRhcHRlciB0aGF0IGhhcyBhbiB4ZmVyIGluIGZsaWdodD8g SWYgdGhhdCdzIHRoZSBjYXNlLCB3aGF0IHN0b3BzIGEgbmV3IHhmZXIgZnJvbQo+PiBiZWluZyBp bml0aWF0ZWQgYWZ0ZXIgcnVudGltZS1wbSBoYXMgY2hlY2tlZCBpZgo+PiAtPnJ1bnRpbWVfaWRs ZSByZXR1cm5zIG9rIGJ1dCBiZWZvcmUgdGhlIGRldmljZSBpcyByZWFsbHkgc3VzcGVuZGVkPwo+ Pgo+PiBQTSBpcyBub3QgYW4gYXJlYSBJJ20gZmFtaWxpYXIgd2l0aCwgc28gaXQncyBhbiBob25l c3QgcXVlc3Rpb24uCj4+Cj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBncHVfZW5hYmxl X2kyY19idXMoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkKSB7Cj4+PiArCXUzMiB2YWw7Cj4+PiAr Cj4+PiArCS8qIGVuYWJsZSBJMkMgKi8KPj4+ICsJdmFsID0gcmVhZGwoaTJjZC0+cmVncyArIEky Q19NU1RfSFlCUklEX1BBRENUTCk7Cj4+PiArCXZhbCB8PSBJMkNfTVNUX0hZQlJJRF9QQURDVExf TU9ERV9JMkMgfAo+Pj4gKwkJSTJDX01TVF9IWUJSSURfUEFEQ1RMX0kyQ19TQ0xfSU5QVVRfUkNW IHwKPj4+ICsJCUkyQ19NU1RfSFlCUklEX1BBRENUTF9JMkNfU0RBX0lOUFVUX1JDVjsKPj4+ICsJ d3JpdGVsKHZhbCwgaTJjZC0+cmVncyArIEkyQ19NU1RfSFlCUklEX1BBRENUTCk7Cj4+PiArCj4+ PiArCS8qIGVuYWJsZSAxMDBLSFogbW9kZSAqLwo+Pj4gKwl2YWwgPSBJMkNfTVNUX0kyQzBfVElN SU5HX1NDTF9QRVJJT0RfMTAwS0haOwo+Pj4gKwl2YWwgfD0gKEkyQ19NU1RfSTJDMF9USU1JTkdf VElNRU9VVF9DTEtfQ05UX01BWAo+Pj4gKwkgICAgPDwgSTJDX01TVF9JMkMwX1RJTUlOR19USU1F T1VUX0NMS19DTlQpOwo+Pj4gKwl2YWwgfD0gSTJDX01TVF9JMkMwX1RJTUlOR19USU1FT1VUX0NI RUNLOwo+Pj4gKwl3cml0ZWwodmFsLCBpMmNkLT5yZWdzICsgSTJDX01TVF9JMkMwX1RJTUlORyk7 IH0KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGdwdV9pMmNfY2hlY2tfc3RhdHVzKHN0cnVjdCBncHVf aTJjX2RldiAqaTJjZCkgewo+Pj4gKwl1bnNpZ25lZCBsb25nIHRhcmdldCA9IGppZmZpZXMgKyBt c2Vjc190b19qaWZmaWVzKDEwMDApOwo+Pj4gKwl1MzIgdmFsOwo+Pj4gKwo+Pj4gKwlkbyB7Cj4+ PiArCQl2YWwgPSByZWFkbChpMmNkLT5yZWdzICsgSTJDX01TVF9DTlRMKTsKPj4+ICsJCWlmICgh KHZhbCAmIEkyQ19NU1RfQ05UTF9DWUNMRV9UUklHR0VSKSkKPj4+ICsJCQlicmVhazsKPj4+ICsJ CWlmICgodmFsICYgSTJDX01TVF9DTlRMX1NUQVRVUykgIT0KPj4+ICsJCQkJSTJDX01TVF9DTlRM X1NUQVRVU19CVVNfQlVTWSkKPj4+ICsJCQlicmVhazsKPj4+ICsJCXVzbGVlcF9yYW5nZSgxMDAw LCAyMDAwKTsKPj4+ICsJfSB3aGlsZSAodGltZV9pc19hZnRlcl9qaWZmaWVzKHRhcmdldCkpOwo+ Pj4gKwlpZiAodGltZV9pc19iZWZvcmVfamlmZmllcyh0YXJnZXQpKSB7Cj4+PiArCQlkZXZfZXJy KGkyY2QtPmRldiwgImkyYyB0aW1lb3V0IGVycm9yICV4XG4iLCB2YWwpOwo+Pj4gKwkJcmV0dXJu IC1FSU87Cj4+PiArCX0KPj4+ICsKPj4+ICsJdmFsID0gcmVhZGwoaTJjZC0+cmVncyArIEkyQ19N U1RfQ05UTCk7Cj4+PiArCXN3aXRjaCAodmFsICYgSTJDX01TVF9DTlRMX1NUQVRVUykgewo+Pj4g KwljYXNlIEkyQ19NU1RfQ05UTF9TVEFUVVNfT0tBWToKPj4+ICsJCXJldHVybiAwOwo+Pj4gKwlj YXNlIEkyQ19NU1RfQ05UTF9TVEFUVVNfTk9fQUNLOgo+Pj4gKwkJcmV0dXJuIC1FSU87Cj4+PiAr CWNhc2UgSTJDX01TVF9DTlRMX1NUQVRVU19USU1FT1VUOgo+Pj4gKwkJcmV0dXJuIC1FVElNRTsK Pj4+ICsJY2FzZSBJMkNfTVNUX0NOVExfU1RBVFVTX0JVU19CVVNZOgo+Pj4gKwkJcmV0dXJuIC1F QlVTWTsKPj4+ICsJZGVmYXVsdDoKPj4+ICsJCXJldHVybiAwOwo+Pj4gKwl9Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBpbnQgZ3B1X2kyY19yZWFkKHN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCwg dTggKmRhdGEsIHUxNiBsZW4pCj4+PiArewo+Pj4gKwlpbnQgc3RhdHVzOwo+Pj4gKwl1MzIgdmFs Owo+Pj4gKwo+Pj4gKwl2YWwgPSBJMkNfTVNUX0NOVExfR0VOX1NUQVJUIHwgSTJDX01TVF9DTlRM X0dFTl9TVE9QIHwKPj4+ICsJCUkyQ19NU1RfQ05UTF9DTURfUkVBRCB8IChsZW4gPDwKPj4gSTJD X01TVF9DTlRMX0JVUlNUX1NJWkVfU0hJRlQpIHwKPj4+ICsJCUkyQ19NU1RfQ05UTF9DWUNMRV9U UklHR0VSIHwKPj4gSTJDX01TVF9DTlRMX0dFTl9OQUNLOwo+Pj4gKwl2YWwgJj0gfkkyQ19NU1Rf Q05UTF9HRU5fUkFCOwo+Pj4gKwl3cml0ZWwodmFsLCBpMmNkLT5yZWdzICsgSTJDX01TVF9DTlRM KTsKPj4+ICsKPj4+ICsJc3RhdHVzID0gZ3B1X2kyY19jaGVja19zdGF0dXMoaTJjZCk7Cj4+PiAr CWlmIChzdGF0dXMgPCAwKQo+Pj4gKwkJcmV0dXJuIHN0YXR1czsKPj4+ICsKPj4+ICsJdmFsID0g cmVhZGwoaTJjZC0+cmVncyArIEkyQ19NU1RfREFUQSk7Cj4+PiArCXN3aXRjaCAobGVuKSB7Cj4+ PiArCWNhc2UgMToKPj4+ICsJCWRhdGFbMF0gPSB2YWw7Cj4+PiArCQlicmVhazsKPj4+ICsJY2Fz ZSAyOgo+Pj4gKwkJcHV0X3VuYWxpZ25lZF9iZTE2KHZhbCwgZGF0YSk7Cj4+PiArCQlicmVhazsK Pj4+ICsJY2FzZSAzOgo+Pj4gKwkJcHV0X3VuYWxpZ25lZF9iZTE2KHZhbCA+PiA4LCBkYXRhKTsK Pj4+ICsJCWRhdGFbMl0gPSB2YWw7Cj4+PiArCQlicmVhazsKPj4+ICsJY2FzZSA0Ogo+Pj4gKwkJ cHV0X3VuYWxpZ25lZF9iZTMyKHZhbCwgZGF0YSk7Cj4+PiArCQlicmVhazsKPj4+ICsJZGVmYXVs dDoKPj4+ICsJCWJyZWFrOwo+Pj4gKwl9Cj4+PiArCXJldHVybiBzdGF0dXM7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBpbnQgZ3B1X2kyY19zdGFydChzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2Qs IHUxNiBhZGRyKSB7Cj4+PiArCXUzMiB2YWw7Cj4+PiArCj4+PiArCXZhbCA9IGFkZHIgPDwgSTJD X01TVF9BRERSX0RBQjsKPj4+ICsJd3JpdGVsKHZhbCwgaTJjZC0+cmVncyArIEkyQ19NU1RfQURE Uik7Cj4+PiArCj4+PiArCXZhbCA9IEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJMkNfTVNUX0NO VExfQ01EX05PTkUgfAo+Pj4gKwkJSTJDX01TVF9DTlRMX0dFTl9OQUNLOwo+Pj4gKwl2YWwgJj0g fihJMkNfTVNUX0NOVExfR0VOX1NUT1AgfCBJMkNfTVNUX0NOVExfR0VOX1JBQik7Cj4+PiArCXdy aXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0NOVEwpOwo+Pj4gKwo+Pj4gKwlyZXR1cm4g Z3B1X2kyY19jaGVja19zdGF0dXMoaTJjZCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQg Z3B1X2kyY19zdG9wKHN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCkgewo+Pj4gKwl1MzIgdmFsOwo+ Pj4gKwo+Pj4gKwl2YWwgPSBJMkNfTVNUX0NOVExfR0VOX1NUT1AgfCBJMkNfTVNUX0NOVExfQ01E X05PTkUgfAo+Pj4gKwkJSTJDX01TVF9DTlRMX0dFTl9OQUNLOwo+Pj4gKwl2YWwgJj0gfihJMkNf TVNUX0NOVExfR0VOX1NUQVJUIHwgSTJDX01TVF9DTlRMX0dFTl9SQUIpOwo+Pj4gKwl3cml0ZWwo dmFsLCBpMmNkLT5yZWdzICsgSTJDX01TVF9DTlRMKTsKPj4+ICsKPj4+ICsJcmV0dXJuIGdwdV9p MmNfY2hlY2tfc3RhdHVzKGkyY2QpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGdwdV9p MmNfd3JpdGUoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkLCB1OCBkYXRhKSB7Cj4+PiArCXUzMiB2 YWw7Cj4+PiArCj4+PiArCXdyaXRlbChkYXRhLCBpMmNkLT5yZWdzICsgSTJDX01TVF9EQVRBKTsK Pj4+ICsKPj4+ICsJdmFsID0gSTJDX01TVF9DTlRMX0NNRF9XUklURSB8ICgxIDw8Cj4+IEkyQ19N U1RfQ05UTF9CVVJTVF9TSVpFX1NISUZUKSB8Cj4+PiArCQlJMkNfTVNUX0NOVExfR0VOX05BQ0s7 Cj4+PiArCXZhbCAmPSB+KEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJMkNfTVNUX0NOVExfR0VO X1NUT1AgfAo+Pj4gKwkJIEkyQ19NU1RfQ05UTF9HRU5fUkFCKTsKPj4+ICsJd3JpdGVsKHZhbCwg aTJjZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7Cj4+PiArCj4+PiArCXJldHVybiBncHVfaTJjX2No ZWNrX3N0YXR1cyhpMmNkKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBncHVfaTJjX21h c3Rlcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwKPj4+ICsJCQkgICAgICAgc3RydWN0 IGkyY19tc2cgKm1zZ3MsIGludCBudW0pIHsKPj4+ICsJc3RydWN0IGdwdV9pMmNfZGV2ICppMmNk ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKPj4+ICsJaW50IHN0YXR1czsKPj4+ICsJaW50IGks IGo7Cj4+PiArCj4+PiArCW11dGV4X2xvY2soJmkyY2QtPm11dGV4KTsKPj4+ICsJZm9yIChpID0g MDsgaSA8IG51bTsgaSsrKSB7Cj4+PiArCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7 Cj4+PiArCQkJLyogZ3B1X2kyY19yZWFkIGhhcyBpbXBsaWNpdCBzdGFydCBhbmQgc3RvcCAqLwo+ Pj4gKwkJCXN0YXR1cyA9IGdwdV9pMmNfcmVhZChpMmNkLCBtc2dzW2ldLmJ1ZiwgbXNnc1tpXS5s ZW4pOwo+Pgo+PiBQZXIgeW91ciBjb21tZW50cyBvbiB2OCwgdGhlIGFkZHJlc3MgaGFzIHRvIGJl IHByb2dyYW1tZWQgYmVmb3JlIHRoZQo+PiB0cmFuc2ZlciwgYnV0IHlvdSBmYWlsIHRvIGRvIHRo YXQgaWYgdGhlIGZpcnN0IG1lc3NhZ2UgaXMgYSByZWFkLgo+IFRoaXMgd2lsbCBuZXZlciBoYXBw ZW4uIEhpbnQ6IEkyQ19BUV9DT01CX1dSSVRFX0ZJUlNUCgpZZXMsIGl0IHdpbGwuIElmIHRoZSB0 cmFuc2ZlciBjb25zaXN0cyBvZiBhIHNpbmdsZSByZWFkLCBpLmUuIHcvbwphbnkgbGVhZGluZyB3 cml0ZS4gRS5nLiBpMmNfc21idXNfcmVhZF9ieXRlICh3aGljaCBpcyBlbXVsYXRlZCBpbiB5b3Vy CmNhc2UgYW5kIHdpbGwgZ2VuZXJhdGUgdGhpcyBwYXR0ZXJuKS4KCj4+IElzIHRoZSBJMkNfTVNU X0FERFIgcmVnaXN0ZXIgcmVhbGx5IGluIHRoZSBsb29wIHdoZW4geW91IGRvIGEgd3JpdGU/Cj4g VGhhdOKAmXMgbm90IG5lZWRlZC4gV2UgbmVlZCB0byB3cml0ZSBJMkNfTVNUX0FERFIgb25jZSBi ZWZvcmUgc3RhcnRpbmcKPiBvbmUgb3IgbW9yZSB0cmFuc2ZlcnMgdG8gYSBjbGllbnQuCj4gCj4+ IEJlY2F1c2UKPj4gSSB0aGluayBpdCB3b3VsZCBzaW1wbGlmeSB0aGluZ3MgaWYgeW91IGNvdWxk IG1vdmUgdGhlIHdyaXRlIHRvIHRoZQo+PiBJMkNfTVNUX0FERFIgcmVnaXN0ZXIgdG8gYmUgaW4g Z3B1X2kyY19yZWFkIGluc3RlYWQgb2YgaW4gZ3B1X2kyY19zdGFydC4gT3IsCj4+IG1heWJlIGp1 c3Qgd3JpdGUgdG8gSTJDX01TVF9BRERSIGJlZm9yZSB0aGUgZm9yLWxvb3AgaW4gdGhpcyBmdW5j dGlvbi4KPiBTZWUgYWJvdmUuIEhpbnQ6IEkyQ19BUV9DT01CX1dSSVRFX0ZJUlNUCj4gCj4+PiAr CQkJaWYgKHN0YXR1cyA8IDApCj4+PiArCQkJCWdvdG8gdW5sb2NrOwo+Pj4gKwkJfSBlbHNlIHsK Pj4+ICsJCQkvKiBzdGFydCBvbiBmaXJzdCB3cml0ZSBtZXNzYWdlICovCj4+PiArCQkJaWYgKGkg PT0gMCkgewo+Pgo+PiBZb3UgZG8gbm90IGlzc3VlIGEgcmVzdGFydCBub3IgZG8geW91IHdyaXRl IHRoZSBhZGRyZXNzIHRvIHRoZSBidXMgZm9yIHRoZQo+PiBzZWNvbmQgbWVzc2FnZSwgaWYgaXQn cyBhIHdyaXRlLgo+IFRoYXTigJlzIG5vdCBuZWVkZWQuIFdlIG5lZWQgdG8gd3JpdGUgSTJDX01T VF9BRERSIG9uY2UgYmVmb3JlIHN0YXJ0aW5nCj4gb25lIG9yIG1vcmUgdHJhbnNmZXJzIHRvIGEg Y2xpZW50Lgo+IAo+PiBUaGF0IG1ha2VzIG1lIHdvbmRlciBpZiB0aGlzIHBhdGNoIHdhcwo+PiB0 ZXN0ZWQsIGJlY2F1c2UgQUZBSUNUIGNjZ193cml0ZSBpbiBwYXRjaCAyLzIgdXNlcyB4ZmVycyBj b21iaW5pbmcgdHdvIHdyaXRlCj4+IG1lc3NhZ2VzIGFuZCBJIGZhaWwgdG8gc2VlIGhvdyB0aGF0 IGNhbiB3b3JrPwo+IFNlZSBhYm92ZS4KPiAgCj4+IEFsc28sIGhhdmUgeW91IHZlcmlmaWVkIGlm IGdwdV9pMmNfc3RhcnQgcmVhbGx5IGlzc3VlcyBhIHJlc3RhcnQgaW5zdGVhZCBvZiBhIHN0b3AK Pj4gZm9sbG93ZWQgYnkgYSBzdGFydCBpZiB0aGUgYnVzIGlzIG5vdCBpZGxlIG9uIGZ1bmN0aW9u IGVudHJ5Pwo+IFllcy4gSGludDogcmVmZXIgZ3B1X2kyX3N0YXJ0KCkgYW5kIGxvb2sgZm9yIEky Q19NU1RfQ05UTF9HRU5fU1RPUCBiaXQuCgpZZXMsIEkgc2VlIHRoYXQgeW91IG1hc2sgb3V0IHRo YXQgYml0LCBidXQgbXkgcXVlc3Rpb24gd2FzIGlmIHRoYXQgYWN0dWFsbHkKYmVoYXZlcyBhcyB3 ZSB3aXNoIGFuZCB0aGF0IHdlIGluIGZhY3QgZG8gZ2V0IGEgcmVzdGFydCBpbnN0ZWFkIG9mIGEg c3RvcC9zdGFydC4KCj4gVGhhbmtzCj4gQWpheQo+IC0tCj4gbnZwdWJsaWMKPiAtLQo+PiBPciBp cyB0aGUKPj4gZG9jdW1lbnRhdGlvbiBjbGVhciBvbiB0aGlzIGRldGFpbD8gTWlnaHQgYmUgd29y dGggY2hlY2tpbmcgYW55d2F5LCBhcwo+PiBkb2N1bWVudGF0aW9uIGlzIG5vdCBhbHdheXMgY29t cGxldGVseSBjb3JyZWN0Li4uCj4+Cj4+IENoZWVycywKPj4gUGV0ZXIKPj4KPj4+ICsJCQkJdTgg YWRkciA9IGkyY184Yml0X2FkZHJfZnJvbV9tc2cobXNncyArIGkpOwo+Pj4gKwkJCQlzdGF0dXMg PSBncHVfaTJjX3N0YXJ0KGkyY2QsIG1zZ3NbaV0uYWRkcik7Cj4+PiArCQkJCWlmIChzdGF0dXMg PCAwKQo+Pj4gKwkJCQkJZ290byB1bmxvY2s7Cj4+PiArCj4+PiArCQkJCXN0YXR1cyA9IGdwdV9p MmNfd3JpdGUoaTJjZCwgYWRkcik7Cj4+PiArCQkJCWlmIChzdGF0dXMgPCAwKQo+Pj4gKwkJCQkJ Z290byBzdG9wOwo+Pj4gKwkJCX0KPj4+ICsJCQlmb3IgKGogPSAwOyBqIDwgbXNnc1tpXS5sZW47 IGorKykgewo+Pj4gKwkJCQlzdGF0dXMgPSBncHVfaTJjX3dyaXRlKGkyY2QsIG1zZ3NbaV0uYnVm W2pdKTsKPj4+ICsJCQkJaWYgKHN0YXR1cyA8IDApCj4+PiArCQkJCQlnb3RvIHN0b3A7Cj4+PiAr CQkJfQo+Pj4gKwkJCS8qIHN0b3AgaWYgbGFzdCB3cml0ZSBtZXNzYWdlICovCj4+PiArCQkJaWYg KGkgPT0gKG51bSAtIDEpKSB7Cj4+PiArCQkJCXN0YXR1cyA9IGdwdV9pMmNfc3RvcChpMmNkKTsK Pj4+ICsJCQkJaWYgKHN0YXR1cyA8IDApCj4+PiArCQkJCQlnb3RvIHVubG9jazsKPj4+ICsJCQl9 Cj4+PiArCQl9Cj4+PiArCX0KPj4+ICsJc3RhdHVzID0gaTsKPj4+ICsJZ290byB1bmxvY2s7Cj4+ PiArc3RvcDoKPj4+ICsJc3RhdHVzID0gZ3B1X2kyY19zdG9wKGkyY2QpOwo+Pj4gK3VubG9jazoK Pj4+ICsJbXV0ZXhfdW5sb2NrKCZpMmNkLT5tdXRleCk7Cj4+PiArCXJldHVybiBzdGF0dXM7Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FkYXB0ZXJfcXVpcmtzIGdw dV9pMmNfcXVpcmtzID0gewo+Pj4gKwkuZmxhZ3MgPSBJMkNfQVFfQ09NQiB8IEkyQ19BUV9DT01C X1dSSVRFX0ZJUlNUIHwKPj4gSTJDX0FRX0NPTUJfU0FNRV9BRERSLAo+Pj4gKwkubWF4X3JlYWRf bGVuID0gNCwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyB1MzIgZ3B1X2kyY19mdW5jdGlvbmFs aXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkgewo+Pj4gKwlyZXR1cm4gSTJDX0ZVTkNfSTJD IHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsgfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aTJjX2FsZ29yaXRobSBncHVfaTJjX2FsZ29yaXRobSA9IHsKPj4+ICsJLm1hc3Rlcl94ZmVyCT0g Z3B1X2kyY19tYXN0ZXJfeGZlciwKPj4+ICsJLmZ1bmN0aW9uYWxpdHkJPSBncHVfaTJjX2Z1bmN0 aW9uYWxpdHksCj4+PiArfTsKPj4+ICsKPj4+ICsvKgo+Pj4gKyAqIFRoaXMgZHJpdmVyIGlzIGZv ciBOdmlkaWEgR1BVIGNhcmRzIHdpdGggVVNCIFR5cGUtQyBpbnRlcmZhY2UuCj4+PiArICogV2Ug d2FudCB0byBpZGVudGlmeSB0aGUgY2FyZHMgdXNpbmcgdmVuZG9yIElEIGFuZCBjbGFzcyBjb2Rl IG9ubHkKPj4+ICsgKiB0byBhdm9pZCBkZXBlbmRlbmN5IG9mIGFkZGluZyBwcm9kdWN0IGlkIGZv ciBhbnkgbmV3IGNhcmQgd2hpY2gKPj4+ICsgKiByZXF1aXJlcyB0aGlzIGRyaXZlci4KPj4+ICsg KiBDdXJyZW50bHkgdGhlcmUgaXMgbm8gY2xhc3MgY29kZSBkZWZpbmVkIGZvciBVQ1NJIGRldmlj ZSBvdmVyIFBDSQo+Pj4gKyAqIHNvIHVzaW5nIFVOS05PV04gY2xhc3MgZm9yIG5vdyBhbmQgaXQg d2lsbCBiZSB1cGRhdGVkIHdoZW4gVUNTSQo+Pj4gKyAqIG92ZXIgUENJIGdldHMgYSBjbGFzcyBj b2RlLgo+Pj4gKyAqIFRoZXJlIGlzIG5vIG90aGVyIE5WSURJQSBjYXJkcyB3aXRoIFVOS05PV04g Y2xhc3MgY29kZS4gRXZlbiBpZgo+Pj4gK3RoZQo+Pj4gKyAqIGRyaXZlciBnZXRzIGxvYWRlZCBm b3IgYW4gdW5kZXNpcmVkIGNhcmQgdGhlbiBldmVudHVhbGx5Cj4+PiAraTJjX3JlYWQoKQo+Pj4g KyAqIChpbml0aWF0ZWQgZnJvbSBVQ1NJIGkyY19jbGllbnQpIHdpbGwgdGltZW91dCBvciBVQ1NJ IGNvbW1hbmRzCj4+PiArd2lsbAo+Pj4gKyAqIHRpbWVvdXQuCj4+PiArICovCj4+PiArI2RlZmlu ZSBQQ0lfQ0xBU1NfU0VSSUFMX1VOS05PV04JMHgwYzgwCj4+PiArc3RhdGljIGNvbnN0IHN0cnVj dCBwY2lfZGV2aWNlX2lkIGdwdV9pMmNfaWRzW10gPSB7Cj4+PiArCXsgUENJX1ZFTkRPUl9JRF9O VklESUEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCj4+PiArCQlQQ0lfQ0xB U1NfU0VSSUFMX1VOS05PV04gPDwgOCwgMHhmZmZmZmYwMH0sCj4+PiArCXsgfQo+Pj4gK307Cj4+ PiArTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGdwdV9pMmNfaWRzKTsKPj4+ICsKPj4+ICtzdGF0 aWMgaW50IGdwdV9wb3B1bGF0ZV9jbGllbnQoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkLCBpbnQg aXJxKSB7Cj4+PiArCXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZ3B1X2NjZ3hfdWNzaSA9 IHsKPj4+ICsJCUkyQ19CT0FSRF9JTkZPKCJjY2d4LXVjc2kiLCAweDgpLAo+Pj4gKwl9Owo+Pj4g Kwo+Pj4gKwlncHVfY2NneF91Y3NpLmlycSA9IGlycTsKPj4+ICsJaTJjZC0+Y2xpZW50ID0gaTJj X25ld19kZXZpY2UoJmkyY2QtPmFkYXB0ZXIsICZncHVfY2NneF91Y3NpKTsKPj4+ICsJaWYgKCFp MmNkLT5jbGllbnQpIHsKPj4+ICsJCWRldl9lcnIoaTJjZC0+ZGV2LCAiaTJjX25ld19kZXZpY2Ug ZmFpbGVkXG4iKTsKPj4+ICsJCXJldHVybiAtRU5PREVWOwo+Pj4gKwl9Cj4+PiArCXJldHVybiAw Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGdwdV9pMmNfcHJvYmUoc3RydWN0IHBjaV9k ZXYgKnBkZXYsIGNvbnN0IHN0cnVjdAo+Pj4gK3BjaV9kZXZpY2VfaWQgKmlkKSB7Cj4+PiArCXN0 cnVjdCBncHVfaTJjX2RldiAqaTJjZDsKPj4+ICsJaW50IHN0YXR1czsKPj4+ICsKPj4+ICsJaTJj ZCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGdwdV9pMmNfZGV2KSwK Pj4gR0ZQX0tFUk5FTCk7Cj4+PiArCWlmICghaTJjZCkKPj4+ICsJCXJldHVybiAtRU5PTUVNOwo+ Pj4gKwo+Pj4gKwlpMmNkLT5kZXYgPSAmcGRldi0+ZGV2Owo+Pj4gKwlkZXZfc2V0X2RydmRhdGEo JnBkZXYtPmRldiwgaTJjZCk7Cj4+PiArCj4+PiArCXN0YXR1cyA9IHBjaW1fZW5hYmxlX2Rldmlj ZShwZGV2KTsKPj4+ICsJaWYgKHN0YXR1cyA8IDApIHsKPj4+ICsJCWRldl9lcnIoJnBkZXYtPmRl diwgInBjaW1fZW5hYmxlX2RldmljZSBmYWlsZWQgJWRcbiIsCj4+IHN0YXR1cyk7Cj4+PiArCQly ZXR1cm4gc3RhdHVzOwo+Pj4gKwl9Cj4+PiArCj4+PiArCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwo+ Pj4gKwo+Pj4gKwlpMmNkLT5yZWdzID0gcGNpbV9pb21hcChwZGV2LCAwLCAwKTsKPj4+ICsJaWYg KCFpMmNkLT5yZWdzKSB7Cj4+PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2ltX2lvbWFwIGZh aWxlZFxuIik7Cj4+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlzdGF0 dXMgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMocGRldiwgMSwgMSwgUENJX0lSUV9NU0kpOwo+Pj4g KwlpZiAoc3RhdHVzIDwgMCkgewo+Pj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpX2FsbG9j X2lycV92ZWN0b3JzIGVyciAlZFxuIiwKPj4gc3RhdHVzKTsKPj4+ICsJCXJldHVybiBzdGF0dXM7 Cj4+PiArCX0KPj4+ICsKPj4+ICsJbXV0ZXhfaW5pdCgmaTJjZC0+bXV0ZXgpOwo+Pj4gKwlncHVf ZW5hYmxlX2kyY19idXMoaTJjZCk7Cj4+PiArCj4+PiArCWkyY19zZXRfYWRhcGRhdGEoJmkyY2Qt PmFkYXB0ZXIsIGkyY2QpOwo+Pj4gKwlpMmNkLT5hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7 Cj4+PiArCXN0cmxjcHkoaTJjZC0+YWRhcHRlci5uYW1lLCAiTlZJRElBIEdQVSBJMkMgYWRhcHRl ciIsCj4+PiArCQlzaXplb2YoaTJjZC0+YWRhcHRlci5uYW1lKSk7Cj4+PiArCWkyY2QtPmFkYXB0 ZXIuYWxnbyA9ICZncHVfaTJjX2FsZ29yaXRobTsKPj4+ICsJaTJjZC0+YWRhcHRlci5xdWlya3Mg PSAmZ3B1X2kyY19xdWlya3M7Cj4+PiArCWkyY2QtPmFkYXB0ZXIuZGV2LnBhcmVudCA9ICZwZGV2 LT5kZXY7Cj4+PiArCXN0YXR1cyA9IGkyY19hZGRfYWRhcHRlcigmaTJjZC0+YWRhcHRlcik7Cj4+ PiArCWlmIChzdGF0dXMgPCAwKQo+Pj4gKwkJZ290byBmcmVlX2lycV92ZWN0b3JzOwo+Pj4gKwo+ Pj4gKwlzdGF0dXMgPSBncHVfcG9wdWxhdGVfY2xpZW50KGkyY2QsIHBkZXYtPmlycSk7Cj4+PiAr CWlmIChzdGF0dXMgPCAwKSB7Cj4+PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJncHVfcG9wdWxh dGVfY2xpZW50IGZhaWxlZCAlZFxuIiwKPj4gc3RhdHVzKTsKPj4+ICsJCWdvdG8gZGVsX2FkYXB0 ZXI7Cj4+PiArCX0KPj4+ICsKPj4+ICsJcmV0dXJuIDA7Cj4+PiArCj4+PiArZGVsX2FkYXB0ZXI6 Cj4+PiArCWkyY19kZWxfYWRhcHRlcigmaTJjZC0+YWRhcHRlcik7Cj4+PiArZnJlZV9pcnFfdmVj dG9yczoKPj4+ICsJcGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRldik7Cj4+PiArCXJldHVybiBzdGF0 dXM7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGdwdV9pMmNfcmVtb3ZlKHN0cnVjdCBw Y2lfZGV2ICpwZGV2KSB7Cj4+PiArCXN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCA9IGRldl9nZXRf ZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKPj4+ICsKPj4+ICsJaTJjX2RlbF9hZGFwdGVyKCZpMmNkLT5h ZGFwdGVyKTsKPj4+ICsJcGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRldik7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyBpbnQgZ3B1X2kyY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KSB7Cj4+PiAr CXN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+Pj4gKwo+ Pj4gKwlncHVfZW5hYmxlX2kyY19idXMoaTJjZCk7Cj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgaW50IGdwdV9pMmNfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsKPj4+ ICsJc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+PiAr Cj4+PiArCWlmICghbXV0ZXhfdHJ5bG9jaygmaTJjZC0+bXV0ZXgpKSB7Cj4+PiArCQlkZXZfaW5m byhkZXYsICItRUJVU1lcbiIpOwo+Pj4gKwkJcmV0dXJuIC1FQlVTWTsKPj4+ICsJfQo+Pj4gKwlt dXRleF91bmxvY2soJmkyY2QtPm11dGV4KTsKPj4+ICsKPj4+ICsJcmV0dXJuIDA7Cj4+PiArfQo+ Pj4gKwo+Pj4gK1VOSVZFUlNBTF9ERVZfUE1fT1BTKGdwdV9pMmNfZHJpdmVyX3BtLCBOVUxMLCBn cHVfaTJjX3Jlc3VtZSwKPj4+ICtncHVfaTJjX2lkbGUpOwo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1 Y3QgcGNpX2RyaXZlciBncHVfaTJjX2RyaXZlciA9IHsKPj4+ICsJLm5hbWUJCT0gIm52aWRpYS1n cHUiLAo+Pj4gKwkuaWRfdGFibGUJPSBncHVfaTJjX2lkcywKPj4+ICsJLnByb2JlCQk9IGdwdV9p MmNfcHJvYmUsCj4+PiArCS5yZW1vdmUJCT0gZ3B1X2kyY19yZW1vdmUsCj4+PiArCS5kcml2ZXIJ CT0gewo+Pj4gKwkJLnBtCT0gJmdwdV9pMmNfZHJpdmVyX3BtLAo+Pj4gKwl9LAo+Pj4gK307Cj4+ PiArCj4+PiArbW9kdWxlX3BjaV9kcml2ZXIoZ3B1X2kyY19kcml2ZXIpOwo+Pj4gKwo+Pj4gK01P RFVMRV9BVVRIT1IoIkFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+Iik7Cj4+PiArTU9EVUxF X0RFU0NSSVBUSU9OKCJOdmlkaWEgR1BVIEkyQyBjb250cm9sbGVyIERyaXZlciIpOwo+Pj4gK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPj4+Cj4K