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: [v7,1/2] dmaengine: 8250_mtk_dma: add MediaTek uart DMA support From: Long Cheng Message-Id: <1545739611.28871.77.camel@mhfsdcap03> Date: Tue, 25 Dec 2018 20:06:51 +0800 To: Nicolas Boichat Cc: Vinod Koul , Randy Dunlap , Rob Herring , Mark Rutland , Ryder Lee , Sean Wang , Matthias Brugger , Dan Williams , Greg Kroah-Hartman , Jiri Slaby , Sean Wang , dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-arm Mailing List , linux-mediatek@lists.infradead.org, lkml , linux-serial@vger.kernel.org, srv_heupstream@mediatek.com, Yingjoe Chen , YT Shen List-ID: VGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzLgoKT24gVHVlLCAyMDE4LTEyLTI1IGF0IDE1OjE2ICsw ODAwLCBOaWNvbGFzIEJvaWNoYXQgd3JvdGU6Cj4gTm90IGEgZnVsbCByZXZpZXcsIGEgZmV3IGNv bW1lbnRzIGJlbG93Lgo+IAo+IFRoYW5rcywKPiAKCndvdWxkIHlvdSBsaWtlIGhlbHAgdG8gZnVs bCByZXZpZXcgYXQgdGhpcyB2ZXJzaW9uIHBhdGNoPyAgYW5kIHRoZW4gaQpjYW4gbW9kaWZ5IHRo ZXNlIGF0IG5leHQgdmVyc2lvbiBwYXRjaC4gdGhhbmtzLgoKPiBPbiBUdWUsIERlYyAyNSwgMjAx OCBhdCA5OjI3IEFNIExvbmcgQ2hlbmcgPGxvbmcuY2hlbmdAbWVkaWF0ZWsuY29tPiB3cm90ZToK PiA+Cj4gPiBJbiBETUEgZW5naW5lIGZyYW1ld29yaywgYWRkIDgyNTAgdWFydCBkbWEgdG8gc3Vw cG9ydCBNZWRpYVRlayB1YXJ0Lgo+ID4gSWYgTWVkaWFUZWsgdWFydCBlbmFibGVkKFNFUklBTF84 MjUwX01UNjU3NyksIGFuZCB3YW50IHRvIGltcHJvdmUKPiA+IHRoZSBwZXJmb3JtYW5jZSwgY2Fu IGVuYWJsZSB0aGUgZnVuY3Rpb24uCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogTG9uZyBDaGVuZyA8 bG9uZy5jaGVuZ0BtZWRpYXRlay5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2RtYS9tZWRpYXRl ay84MjUwX210a19kbWEuYyB8ICA2OTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiA+ICBkcml2ZXJzL2RtYS9tZWRpYXRlay9LY29uZmlnICAgICAgICB8ICAgMTEgKwo+ID4g IGRyaXZlcnMvZG1hL21lZGlhdGVrL01ha2VmaWxlICAgICAgIHwgICAgMSArCj4gPiAgMyBmaWxl cyBjaGFuZ2VkLCA3MDYgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2RtYS9tZWRpYXRlay84MjUwX210a19kbWEuYwo+ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2RtYS9tZWRpYXRlay84MjUwX210a19kbWEuYyBiL2RyaXZlcnMvZG1hL21lZGlhdGVrLzgy NTBfbXRrX2RtYS5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4u YzQwOTBmMgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9kbWEvbWVkaWF0ZWsv ODI1MF9tdGtfZG1hLmMKPiA+IEBAIC0wLDAgKzEsNjk0IEBACj4gPiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKPiA+ICsvKgo+ID4gKyAqIE1lZGlhVGVrIDgyNTAgRE1BIGRy aXZlci4KPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRlayBJbmMuCj4g PiArICogQXV0aG9yOiBMb25nIENoZW5nIDxsb25nLmNoZW5nQG1lZGlhdGVrLmNvbT4KPiA+ICsg Ki8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4 L2RtYWVuZ2luZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9lcnIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RtYS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9v Zl9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gPiAr I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4K PiA+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9p b3BvbGwuaD4KPiAKPiBBbHBoYWJldGljYWwgb3JkZXIuCgpvaywgaSB3aWxsIG9yZGVyLgoKPiAK PiA+ICsKPiA+ICsjaW5jbHVkZSAiLi4vdmlydC1kbWEuaCIKPiA+ICsKPiA+ICsjZGVmaW5lIE1U S19VQVJUX0FQRE1BX0NIQU5ORUxTICAgICAgICAgICAgICAgIChDT05GSUdfU0VSSUFMXzgyNTBf TlJfVUFSVFMgKiAyKQo+ID4gKwo+ID4gKyNkZWZpbmUgVkZGX0VOX0IgICAgICAgICAgICAgICBC SVQoMCkKPiA+ICsjZGVmaW5lIFZGRl9TVE9QX0IgICAgICAgICAgICAgQklUKDApCj4gPiArI2Rl ZmluZSBWRkZfRkxVU0hfQiAgICAgICAgICAgIEJJVCgwKQo+ID4gKyNkZWZpbmUgVkZGXzRHX1NV UFBPUlRfQiAgICAgICBCSVQoMCkKPiA+ICsjZGVmaW5lIFZGRl9SWF9JTlRfRU4wX0IgICAgICAg QklUKDApICAvKnJ4IHZhbGlkIHNpemUgPj0gIHZmZiB0aHJlKi8KPiA+ICsjZGVmaW5lIFZGRl9S WF9JTlRfRU4xX0IgICAgICAgQklUKDEpCj4gPiArI2RlZmluZSBWRkZfVFhfSU5UX0VOX0IgICAg ICAgICAgICAgICAgQklUKDApICAvKnR4IGxlZnQgc2l6ZSA+PSB2ZmYgdGhyZSovCj4gPiArI2Rl ZmluZSBWRkZfV0FSTV9SU1RfQiAgICAgICAgIEJJVCgwKQo+ID4gKyNkZWZpbmUgVkZGX1JYX0lO VF9GTEFHX0NMUl9CICAoQklUKDApIHwgQklUKDEpKQo+ID4gKyNkZWZpbmUgVkZGX1RYX0lOVF9G TEFHX0NMUl9CICAwCj4gPiArI2RlZmluZSBWRkZfU1RPUF9DTFJfQiAgICAgICAgIDAKPiA+ICsj ZGVmaW5lIFZGRl9GTFVTSF9DTFJfQiAgICAgICAgICAgICAgICAwCj4gPiArI2RlZmluZSBWRkZf SU5UX0VOX0NMUl9CICAgICAgIDAKPiA+ICsjZGVmaW5lIFZGRl80R19TVVBQT1JUX0NMUl9CICAg MAo+ID4gKwo+ID4gKy8qIGludGVycnVwdCB0cmlnZ2VyIGxldmVsIGZvciB0eCAqLwo+ID4gKyNk ZWZpbmUgVkZGX1RYX1RIUkUobikgICAgICAgICAoKG4pICogNyAvIDgpCj4gPiArLyogaW50ZXJy dXB0IHRyaWdnZXIgbGV2ZWwgZm9yIHJ4ICovCj4gPiArI2RlZmluZSBWRkZfUlhfVEhSRShuKSAg ICAgICAgICgobikgKiAzIC8gNCkKPiA+ICsKPiA+ICsjZGVmaW5lIE1US19VQVJUX0FQRE1BX1JJ TkdfU0laRSAgICAgICAweGZmZmZVCj4gPiArLyogaW52ZXJ0IHRoaXMgYml0IHdoZW4gd3JhcCBy aW5nIGhlYWQgYWdhaW4qLwo+ID4gKyNkZWZpbmUgTVRLX1VBUlRfQVBETUFfUklOR19XUkFQICAg ICAgIDB4MTAwMDBVCj4gPiArCj4gPiArI2RlZmluZSBWRkZfSU5UX0ZMQUcgICAgICAgICAgIDB4 MDAKPiA+ICsjZGVmaW5lIFZGRl9JTlRfRU4gICAgICAgICAgICAgMHgwNAo+ID4gKyNkZWZpbmUg VkZGX0VOICAgICAgICAgICAgICAgICAweDA4Cj4gPiArI2RlZmluZSBWRkZfUlNUICAgICAgICAg ICAgICAgICAgICAgICAgMHgwYwo+ID4gKyNkZWZpbmUgVkZGX1NUT1AgICAgICAgICAgICAgICAw eDEwCj4gPiArI2RlZmluZSBWRkZfRkxVU0ggICAgICAgICAgICAgIDB4MTQKPiA+ICsjZGVmaW5l IFZGRl9BRERSICAgICAgICAgICAgICAgMHgxYwo+ID4gKyNkZWZpbmUgVkZGX0xFTiAgICAgICAg ICAgICAgICAgICAgICAgIDB4MjQKPiA+ICsjZGVmaW5lIFZGRl9USFJFICAgICAgICAgICAgICAg MHgyOAo+ID4gKyNkZWZpbmUgVkZGX1dQVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MmMKPiA+ ICsjZGVmaW5lIFZGRl9SUFQgICAgICAgICAgICAgICAgICAgICAgICAweDMwCj4gPiArLypUWDog dGhlIGJ1ZmZlciBzaXplIEhXIGNhbiByZWFkLiBSWDogdGhlIGJ1ZmZlciBzaXplIFNXIGNhbiBy ZWFkLiovCj4gPiArI2RlZmluZSBWRkZfVkFMSURfU0laRSAgICAgICAgIDB4M2MKPiA+ICsvKlRY OiB0aGUgYnVmZmVyIHNpemUgU1cgY2FuIHdyaXRlLiBSWDogdGhlIGJ1ZmZlciBzaXplIEhXIGNh biB3cml0ZS4qLwo+ID4gKyNkZWZpbmUgVkZGX0xFRlRfU0laRSAgICAgICAgICAweDQwCj4gPiAr I2RlZmluZSBWRkZfREVCVUdfU1RBVFVTICAgICAgIDB4NTAKPiA+ICsjZGVmaW5lIFZGRl80R19T VVBQT1JUICAgICAgICAgMHg1NAo+ID4gKwo+ID4gK3N0cnVjdCBtdGtfdWFydF9hcGRtYWRldiB7 Cj4gPiArICAgICAgIHN0cnVjdCBkbWFfZGV2aWNlIGRkZXY7Cj4gPiArICAgICAgIHN0cnVjdCBj bGsgKmNsazsKPiA+ICsgICAgICAgYm9vbCBzdXBwb3J0XzMzYml0czsKPiA+ICsgICAgICAgdW5z aWduZWQgaW50IGRtYV9pcnFbTVRLX1VBUlRfQVBETUFfQ0hBTk5FTFNdOwo+ID4gK307Cj4gPiAr Cj4gPiArc3RydWN0IG10a191YXJ0X2FwZG1hX2Rlc2Mgewo+ID4gKyAgICAgICBzdHJ1Y3Qgdmly dF9kbWFfZGVzYyB2ZDsKPiA+ICsKPiA+ICsgICAgICAgdW5zaWduZWQgaW50IGF2YWlsX2xlbjsK PiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBtdGtfY2hhbiB7Cj4gPiArICAgICAgIHN0cnVjdCB2 aXJ0X2RtYV9jaGFuIHZjOwo+ID4gKyAgICAgICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBjZmc7 Cj4gPiArICAgICAgIHZvaWQgX19pb21lbSAqYmFzZTsKPiA+ICsgICAgICAgc3RydWN0IG10a191 YXJ0X2FwZG1hX2Rlc2MgKmRlc2M7Cj4gPiArCj4gPiArICAgICAgIGJvb2wgcmVxdWVzdGVkOwo+ ID4gKwo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgcnhfc3RhdHVzOwo+ID4gK307Cj4gPiArCj4g PiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX3VhcnRfYXBkbWFkZXYgKgo+ID4gK3RvX210a191 YXJ0X2FwZG1hX2RldihzdHJ1Y3QgZG1hX2RldmljZSAqZCkKPiA+ICt7Cj4gPiArICAgICAgIHJl dHVybiBjb250YWluZXJfb2YoZCwgc3RydWN0IG10a191YXJ0X2FwZG1hZGV2LCBkZGV2KTsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2NoYW4gKnRvX210a191YXJ0 X2FwZG1hX2NoYW4oc3RydWN0IGRtYV9jaGFuICpjKQo+ID4gK3sKPiA+ICsgICAgICAgcmV0dXJu IGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2NoYW4sIHZjLmNoYW4pOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfdWFydF9hcGRtYV9kZXNjICp0b19tdGtfdWFy dF9hcGRtYV9kZXNjCj4gPiArICAgICAgIChzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3Ig KnQpCj4gPiArewo+ID4gKyAgICAgICByZXR1cm4gY29udGFpbmVyX29mKHQsIHN0cnVjdCBtdGtf dWFydF9hcGRtYV9kZXNjLCB2ZC50eCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG10 a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoc3RydWN0IG10a19jaGFuICpjLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwp Cj4gPiArewo+ID4gKyAgICAgICB3cml0ZWwodmFsLCBjLT5iYXNlICsgcmVnKTsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHVuc2lnbmVkIGludAo+ID4gK210a191YXJ0X2FwZG1hX2NoYW5fcmVh ZChzdHJ1Y3QgbXRrX2NoYW4gKmMsIHVuc2lnbmVkIGludCByZWcpCj4gPiArewo+ID4gKyAgICAg ICByZXR1cm4gcmVhZGwoYy0+YmFzZSArIHJlZyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkIG10a191YXJ0X2FwZG1hX2Rlc2NfZnJlZShzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQpCj4g PiArewo+ID4gKyAgICAgICBzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSB2ZC0+dHguY2hhbjsKPiA+ ICsgICAgICAgc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX3VhcnRfYXBkbWFfY2hhbihjaGFu KTsKPiA+ICsKPiA+ICsgICAgICAga2ZyZWUoYy0+ZGVzYyk7Cj4gPiArICAgICAgIGMtPmRlc2Mg PSBOVUxMOwo+IAo+IFdoeT8gSSdtIGFmcmFpZCB0aGlzIG1heSBtYXNrIGRvdWJsZS1mcmVlLgo+ IAoKaSB3aWxsIHJlbW92ZSBpdC4KCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG10a191 YXJ0X2FwZG1hX3N0YXJ0X3R4KHN0cnVjdCBtdGtfY2hhbiAqYykKPiA+ICt7Cj4gPiArICAgICAg IHVuc2lnbmVkIGludCB0eGNvdW50ID0gYy0+ZGVzYy0+YXZhaWxfbGVuOwo+IAo+IFZhcmlhYmxl IG5hbWUgaXMgY29uZnVzaW5nLi4uIEknZCByYXRoZXIgaGF2ZSBhIGJvb2xlYW4gYHRyYW5zbWl0 dGVkYAo+IChvciBzb21ldGhpbmcpLCBzZXQgdG8gMCBoZXJlLCBhbmQgc2V0IHRvIDEgaW4gdGhl IGxvb3AgKGJ1dCBhZ2FpbiwKPiBtYXliZSB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgYXQgYWxsLCBz ZWUgYmVsb3cpLgoKb2ssIGkgbW9kaWZ5IHRoZSBmdW5jdGlvbiBhbmQgcmVtb3ZlIGl0LgoKPiAK PiA+ICsgICAgICAgdW5zaWduZWQgaW50IGxlbiwgc2VuZCwgbGVmdCwgd3B0LCB3cmFwOwo+ID4g Kwo+ID4gKyAgICAgICBpZiAobXRrX3VhcnRfYXBkbWFfY2hhbl9yZWFkKGMsIFZGRl9MRUZUX1NJ WkUpID09IDBVKSB7Cj4gPiArICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0 ZShjLCBWRkZfSU5UX0VOLCBWRkZfVFhfSU5UX0VOX0IpOwo+IAo+IEknZCBhZGQgYSAicmV0dXJu OyIgaGVyZSBhbmQgZGUtaW5kZW50IHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiAodGhhdAo+IHNo b3VsZCBoZWxwIHRvIG1ha2UgaXQgbW9yZSByZWFkYWJsZSkuCgphZGQKCj4gCj4gPiArICAgICAg IH0gZWxzZSB7Cj4gPiArICAgICAgICAgICAgICAgbGVuID0gbXRrX3VhcnRfYXBkbWFfY2hhbl9y ZWFkKGMsIFZGRl9MRU4pOwo+IAo+IFlvdSBtYWtlIGFuIGFzc3VtcHRpb24gYmVsb3cgdGhhdCBs ZW4gaXMgYWx3YXlzIGEgcG93ZXIgb2YgMi4gSSB3b25kZXIKPiBpZiB3ZSB3YW50IHRvIHZhbGlk YXRlIHRoYXQgd2l0aCBzb21lIEJVRy9XQVJOIGNhbGwuCj4gCj4gQWxzbywgSSBhc3N1bWUgVkZG X0xFTiBpcyBjb25zdGFudD8gTWF5YmUgd2UgY2FuIHJlYWQgaXQgb25jZSBvbmx5IGluCj4gdGhl IHByb2JlIGZ1bmN0aW9uPwo+IAoKbm8sIHRoZSB2YWx1ZSBvZiBWRkZfTEVOIGlzbid0IGNvbnN0 YW50LgoKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICB3aGlsZSAoKChsZWZ0ID0gbXRrX3VhcnRf YXBkbWFfY2hhbl9yZWFkKGMsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVkZGX0xFRlRfU0laRSkpID4gMFUpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmIChjLT5kZXNjLT5hdmFpbF9sZW4gIT0gMFUpKSB7Cj4gCj4gV2h5IGRvIHdlIG5l ZWQgYSB3aGlsZSBsb29wIGhlcmU/IExFRlRfU0laRSB3aWxsIGFsd2F5cyBiZSBzbWFsbGVyCj4g dGhhbiBMRU4sIHJpZ2h0PyBTaG91bGRuJ3Qgd2UgbG9hZCBhcyBtdWNoIGFzIHdlIGNhbiwgdGhl biBsZXQgYW4KPiBpbnRlcnJ1cHQgaGFwcGVuIGFuZCByZWxvYWQgdGhlIEZJRk8gYXQgdGhhdCBz dGFnZT8gT3IgZG9lcyB0aGlzIGhlbHAKPiBnYWluIGEgYml0IG9mIGV4dHJhIHBlcmZvcm1hbmNl PwoKaSB3aWxsIHJlbW92ZSB3aGlsZSwgdXNlICdpZicgaW5zdGVhZCBvZi4KPiAKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHNlbmQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlZnQsIGMtPmRl c2MtPmF2YWlsX2xlbik7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICB3cHQgPSBtdGtfdWFy dF9hcGRtYV9jaGFuX3JlYWQoYywgVkZGX1dQVCk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAg ICB3cmFwID0gd3B0ICYgTVRLX1VBUlRfQVBETUFfUklOR19XUkFQID8KPiAKPiB3cmFwID0gd3Jw IF4gTVRLX1VBUlRfQVBETUFfUklOR19XUkFQID8KPiAKCndyYXAgPSB3cHQgJiBNVEtfVUFSVF9B UERNQV9SSU5HX1dSQVAgPwppIGhhZCB0ZXN0IGl0LgoKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAwVSA6IE1US19VQVJUX0FQRE1BX1JJTkdfV1JBUDsKPiA+ICsK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICgod3B0ICYgKGxlbiAtIDFVKSkgKyBzZW5k IDwgbGVuKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRt YV9jaGFuX3dyaXRlKGMsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWRkZfV1BULCB3cHQgKyBzZW5kKTsKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGVsc2UKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBk bWFfY2hhbl93cml0ZShjLCBWRkZfV1BULAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCh3cHQgKyBzZW5kKSAmIChsZW4gLSAxVSkpCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdyYXAp Owo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYy0+ZGVzYy0+YXZhaWxfbGVuIC09 IHNlbmQ7Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGlm ICh0eGNvdW50ICE9IGMtPmRlc2MtPmF2YWlsX2xlbikgewo+IAo+IFdlIGtub3cgbXRrX3VhcnRf YXBkbWFfY2hhbl9yZWFkKGMsIFZGRl9MRUZUX1NJWkUpID4gMCBhdCBsZWFzdCBvbmNlLAo+IHNv IHRoaXMgdGVzdCBzaG91bGQgYWx3YXlzIGJlIHRydWUuCj4gCj4gVW5sZXNzIHdlIGhhdmUgYy0+ ZGVzYy0+YXZhaWxfbGVuID09IDAsIGJ1dCB0aGVuIHdlIHdvbid0IGV2ZW4gY2FsbAo+IHRoaXMg ZnVuY3Rpb24uLi4gU28gdGhpcyBpcyBhbHdheXMgdHJ1ZS4KPiAKCnllcy4geW91IGFyZSByaWdo dC4gaSB3aWxsIHJlbW92ZSBpdC4KCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBtdGtfdWFy dF9hcGRtYV9jaGFuX3dyaXRlKGMsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVkZGX0lOVF9FTiwgVkZGX1RYX0lOVF9FTl9CKTsKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGlmIChtdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQoYywKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZGRl9GTFVTSCkgPT0gMFUpCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3Jp dGUoYywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZGRl9GTFVTSCwgVkZGX0ZMVVNIX0IpOwo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsgICAg ICAgfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtdGtfdWFydF9hcGRtYV9zdGFydF9y eChzdHJ1Y3QgbXRrX2NoYW4gKmMpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX3VhcnRf YXBkbWFfZGVzYyAqZCA9IGMtPmRlc2M7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCByeF9sZW4s IHdnLCByZywgY291bnQ7Cj4gPiArCj4gPiArICAgICAgIGlmIChtdGtfdWFydF9hcGRtYV9jaGFu X3JlYWQoYywgVkZGX1ZBTElEX1NJWkUpID09IDBVKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVy bjsKPiA+ICsKPiA+ICsgICAgICAgaWYgKGQgJiYgdmNoYW5fbmV4dF9kZXNjKCZjLT52YykpIHsK PiA+ICsgICAgICAgICAgICAgICByeF9sZW4gPSBtdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQoYywg VkZGX0xFTik7Cj4gPiArICAgICAgICAgICAgICAgcmcgPSBtdGtfdWFydF9hcGRtYV9jaGFuX3Jl YWQoYywgVkZGX1JQVCk7Cj4gPiArICAgICAgICAgICAgICAgd2cgPSBtdGtfdWFydF9hcGRtYV9j aGFuX3JlYWQoYywgVkZGX1dQVCk7Cj4gPiArICAgICAgICAgICAgICAgY291bnQgPSAoKHJnIF4g d2cpICYgTVRLX1VBUlRfQVBETUFfUklOR19XUkFQKSA/Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgod2cgJiBNVEtfVUFSVF9BUERNQV9SSU5HX1NJWkUpICsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfbGVuIC0gKHJnICYgTVRLX1VBUlRfQVBETUFf UklOR19TSVpFKSkgOgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHdnICYg TVRLX1VBUlRfQVBETUFfUklOR19TSVpFKSAtCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChyZyAmIE1US19VQVJUX0FQRE1BX1JJTkdfU0laRSkpOwo+IAo+IFRoaXMgaXMgaGFy ZCB0byByZWFkLCBwbGVhc2UgdXNlIGEgaWYvZWxzZS4KPiAKCm9rLgoKPiA+ICsKPiA+ICsgICAg ICAgICAgICAgICBjLT5yeF9zdGF0dXMgPSBjb3VudDsKPiA+ICsgICAgICAgICAgICAgICBtdGtf dWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZGRl9SUFQsIHdnKTsKPiA+ICsKPiA+ICsgICAgICAg ICAgICAgICBsaXN0X2RlbCgmZC0+dmQubm9kZSk7Cj4gPiArICAgICAgICAgICAgICAgdmNoYW5f Y29va2llX2NvbXBsZXRlKCZkLT52ZCk7Cj4gPiArICAgICAgIH0KPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIGlycXJldHVybl90IG10a191YXJ0X2FwZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZv aWQgKmRldl9pZCkKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IChz dHJ1Y3QgZG1hX2NoYW4gKilkZXZfaWQ7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfY2hhbiAqYyA9 IHRvX210a191YXJ0X2FwZG1hX2NoYW4oY2hhbik7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfdWFy dF9hcGRtYV9kZXNjICpkOwo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gKwo+ ID4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gKyAg ICAgICBzd2l0Y2ggKGMtPmNmZy5kaXJlY3Rpb24pIHsKPiA+ICsgICAgICAgY2FzZSBETUFfREVW X1RPX01FTToKPiAKPiBZb3UgdXNlIGFuIGlmL2Vsc2UgYmVsb3cgaW4gYSBzaW1pbGFyIGNhc2Us IHBsZWFzZSBiZSBjb25zaXN0ZW50IChJTUhPCj4gaWYvZWxzZSBpcyBhIGJpdCBtb3JlIGNvbXBh Y3QsIHNvIEknZCB1c2UgdGhhdCBoZXJlKS4KPiAKc2VhbiB3YW5nIGhhZCByZXZpZXcgaXQuIHRo ZSBsaW5rCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL3BpcGVybWFpbC9saW51eC1tZWRpYXRl ay8yMDE4LURlY2VtYmVyLzAxNjI5Mi5odG1sCgo+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0 X2FwZG1hX2NoYW5fd3JpdGUoYywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VkZGX0lOVF9GTEFHLCBWRkZfUlhfSU5UX0ZMQUdfQ0xSX0IpOwo+ID4gKyAgICAgICAgICAgICAg IG10a191YXJ0X2FwZG1hX3N0YXJ0X3J4KGMpOwo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ ID4gKyAgICAgICBjYXNlIERNQV9NRU1fVE9fREVWOgo+ID4gKyAgICAgICAgICAgICAgIGQgPSBj LT5kZXNjOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3Jp dGUoYywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkZGX0lOVF9GTEFHLCBW RkZfVFhfSU5UX0ZMQUdfQ0xSX0IpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGlmIChkLT5h dmFpbF9sZW4gIT0gMFUpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIG10a191YXJ0X2Fw ZG1hX3N0YXJ0X3R4KGMpOwo+ID4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7Cj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBsaXN0X2RlbCgmZC0+dmQubm9kZSk7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgICB2Y2hhbl9jb29raWVfY29tcGxldGUoJmQtPnZkKTsKPiA+ICsgICAgICAgICAg ICAgICB9Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIGRlZmF1bHQ6Cj4g PiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIH0KPiA+ICsgICAgICAgc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gKwo+ID4gKyAgICAgICBy ZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbXRrX3VhcnRf YXBkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQo+ID4gK3sK PiA+ICsgICAgICAgc3RydWN0IG10a191YXJ0X2FwZG1hZGV2ICptdGtkID0gdG9fbXRrX3VhcnRf YXBkbWFfZGV2KGNoYW4tPmRldmljZSk7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfY2hhbiAqYyA9 IHRvX210a191YXJ0X2FwZG1hX2NoYW4oY2hhbik7Cj4gPiArICAgICAgIHUzMiBzdGF0dXM7Cj4g PiArICAgICAgIGludCByZXQgPSAtRUJVU1k7Cj4gPiArCj4gPiArICAgICAgIHBtX3J1bnRpbWVf Z2V0X3N5bmMobXRrZC0+ZGRldi5kZXYpOwo+ID4gKwo+ID4gKyAgICAgICBtdGtfdWFydF9hcGRt YV9jaGFuX3dyaXRlKGMsIFZGRl9BRERSLCAwKTsKPiA+ICsgICAgICAgbXRrX3VhcnRfYXBkbWFf Y2hhbl93cml0ZShjLCBWRkZfVEhSRSwgMCk7Cj4gPiArICAgICAgIG10a191YXJ0X2FwZG1hX2No YW5fd3JpdGUoYywgVkZGX0xFTiwgMCk7Cj4gPiArICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5f d3JpdGUoYywgVkZGX1JTVCwgVkZGX1dBUk1fUlNUX0IpOwo+ID4gKwo+ID4gKyAgICAgICByZXQg PSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjLT5iYXNlICsgVkZGX0VOLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RhdHVzLCBzdGF0dXMgPT0gMCwgMTAsIDEwMCk7Cj4gPiArICAgICAgIGlmIChyZXQp IHsKPiA+ICsgICAgICAgICAgICAgICBkZXZfZXJyKGMtPnZjLmNoYW4uZGV2aWNlLT5kZXYsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkbWEgcmVzZXQ6IGZhaWwsIHRpbWVv dXRcbiIpOwo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKPiA+ICsgICAgICAgfQo+ID4g Kwo+ID4gKyAgICAgICBpZiAoIWMtPnJlcXVlc3RlZCkgewo+ID4gKyAgICAgICAgICAgICAgIGMt PnJlcXVlc3RlZCA9IHRydWU7Cj4gPiArICAgICAgICAgICAgICAgcmV0ID0gcmVxdWVzdF9pcnEo bXRrZC0+ZG1hX2lycVtjaGFuLT5jaGFuX2lkXSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtdGtfdWFydF9hcGRtYV9pcnFfaGFuZGxlciwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJUlFGX1RSSUdHRVJfTk9ORSwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBLQlVJTERfTU9ETkFNRSwgY2hhbik7Cj4gPiArICAgICAgICAg ICAgICAgaWYgKHJldCA8IDApIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIo Y2hhbi0+ZGV2aWNlLT5kZXYsICJDYW4ndCByZXF1ZXN0IGRtYSBJUlFcbiIpOwo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArICAgICAgICAgICAgICAgfQo+ ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIGlmIChtdGtkLT5zdXBwb3J0XzMzYml0cykK PiA+ICsgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZGRl80R19TVVBQT1JULCBWRkZfNEdfU1VQUE9S VF9DTFJfQik7Cj4gPiArCj4gPiArZXhpdDoKPiA+ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbXRrX3VhcnRfYXBkbWFfZnJlZV9jaGFuX3Jlc291cmNl cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX3Vh cnRfYXBkbWFkZXYgKm10a2QgPSB0b19tdGtfdWFydF9hcGRtYV9kZXYoY2hhbi0+ZGV2aWNlKTsK PiA+ICsgICAgICAgc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX3VhcnRfYXBkbWFfY2hhbihj aGFuKTsKPiA+ICsKPiA+ICsgICAgICAgaWYgKGMtPnJlcXVlc3RlZCkgewo+ID4gKyAgICAgICAg ICAgICAgIGMtPnJlcXVlc3RlZCA9IGZhbHNlOwo+ID4gKyAgICAgICAgICAgICAgIGZyZWVfaXJx KG10a2QtPmRtYV9pcnFbY2hhbi0+Y2hhbl9pZF0sIGNoYW4pOwo+ID4gKyAgICAgICB9Cj4gPiAr Cj4gPiArICAgICAgIHRhc2tsZXRfa2lsbCgmYy0+dmMudGFzayk7Cj4gPiArCj4gPiArICAgICAg IHZjaGFuX2ZyZWVfY2hhbl9yZXNvdXJjZXMoJmMtPnZjKTsKPiA+ICsKPiA+ICsgICAgICAgcG1f cnVudGltZV9wdXRfc3luYyhtdGtkLT5kZGV2LmRldik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBlbnVtIGRtYV9zdGF0dXMgbXRrX3VhcnRfYXBkbWFfdHhfc3RhdHVzKHN0cnVjdCBkbWFfY2hh biAqY2hhbiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1h X2Nvb2tpZV90IGNvb2tpZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKPiA+ICt7Cj4gPiArICAgICAgIHN0 cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210a191YXJ0X2FwZG1hX2NoYW4oY2hhbik7Cj4gPiArICAg ICAgIGVudW0gZG1hX3N0YXR1cyByZXQ7Cj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7 Cj4gPiArCj4gPiArICAgICAgIGlmICghdHhzdGF0ZSkKPiA+ICsgICAgICAgICAgICAgICByZXR1 cm4gRE1BX0VSUk9SOwo+ID4gKwo+ID4gKyAgICAgICByZXQgPSBkbWFfY29va2llX3N0YXR1cyhj aGFuLCBjb29raWUsIHR4c3RhdGUpOwo+ID4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYy0+ dmMubG9jaywgZmxhZ3MpOwo+ID4gKyAgICAgICBpZiAocmV0ID09IERNQV9JTl9QUk9HUkVTUykg ewo+ID4gKyAgICAgICAgICAgICAgIGMtPnJ4X3N0YXR1cyA9IG10a191YXJ0X2FwZG1hX2NoYW5f cmVhZChjLCBWRkZfUlBUKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIE1US19V QVJUX0FQRE1BX1JJTkdfU0laRTsKPiA+ICsgICAgICAgICAgICAgICBkbWFfc2V0X3Jlc2lkdWUo dHhzdGF0ZSwgYy0+cnhfc3RhdHVzKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gRE1B X0NPTVBMRVRFICYmIGMtPmNmZy5kaXJlY3Rpb24gPT0gRE1BX0RFVl9UT19NRU0pIHsKPiA+ICsg ICAgICAgICAgICAgICBkbWFfc2V0X3Jlc2lkdWUodHhzdGF0ZSwgYy0+cnhfc3RhdHVzKTsKPiA+ ICsgICAgICAgfSBlbHNlIHsKPiA+ICsgICAgICAgICAgICAgICBkbWFfc2V0X3Jlc2lkdWUodHhz dGF0ZSwgMCk7Cj4gPiArICAgICAgIH0KPiA+ICsgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gcmV0Owo+ID4g K30KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NpbmdsZSB3aWxs IGNhbGwgdGhlIGZ1bmN0aW9uLiBhbmQgc2dsZW4gaXMgMS4KPiA+ICsgKiA4MjUwIHVhcnQgdXNp bmcgb25lIHJpbmcgYnVmZmVyLCBhbmQgZGVhbCB3aXRoIG9uZSBzZy4KPiA+ICsgKi8KPiA+ICtz dGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICptdGtfdWFydF9hcGRtYV9wcmVw X3NsYXZlX3NnCj4gPiArICAgICAgIChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0 dGVybGlzdCAqc2dsLAo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgc2dsZW4sICAgICBlbnVtIGRt YV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyLAo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIHR4X2Zs YWdzLCB2b2lkICpjb250ZXh0KQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19jaGFuICpj ID0gdG9fbXRrX3VhcnRfYXBkbWFfY2hhbihjaGFuKTsKPiA+ICsgICAgICAgc3RydWN0IG10a191 YXJ0X2FwZG1hX2Rlc2MgKmQ7Cj4gPiArCj4gPiArICAgICAgIGlmICgoZGlyICE9IERNQV9ERVZf VE9fTUVNKSAmJgo+ID4gKyAgICAgICAgICAgICAgIChkaXIgIT0gRE1BX01FTV9UT19ERVYpKSB7 Cj4gPiArICAgICAgICAgICAgICAgZGV2X2VycihjaGFuLT5kZXZpY2UtPmRldiwgImJhZCBkaXJl Y3Rpb25cbiIpOwo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ID4gKyAgICAgICB9 Cj4gPiArCj4gPiArICAgICAgIC8qIE5vdyBhbGxvY2F0ZSBhbmQgc2V0dXAgdGhlIGRlc2NyaXB0 b3IgKi8KPiA+ICsgICAgICAgZCA9IGt6YWxsb2Moc2l6ZW9mKCpkKSwgR0ZQX0FUT01JQyk7Cj4g PiArICAgICAgIGlmICghZCkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKPiA+ICsK PiA+ICsgICAgICAgLyogc2dsZW4gaXMgMSAqLwo+ID4gKyAgICAgICBkLT5hdmFpbF9sZW4gPSBz Z19kbWFfbGVuKHNnbCk7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiB2Y2hhbl90eF9wcmVwKCZj LT52YywgJmQtPnZkLCB0eF9mbGFncyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG10 a191YXJ0X2FwZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQo+ID4gK3sK PiA+ICsgICAgICAgc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX3VhcnRfYXBkbWFfY2hhbihj aGFuKTsKPiA+ICsgICAgICAgc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkOwo+ID4gKyAgICAgICB1 bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gKwo+ID4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgm Yy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gKyAgICAgICBpZiAoYy0+Y2ZnLmRpcmVjdGlvbiA9PSBE TUFfREVWX1RPX01FTSkgewo+ID4gKyAgICAgICAgICAgICAgIGlmICh2Y2hhbl9pc3N1ZV9wZW5k aW5nKCZjLT52YykgJiYgIWMtPmRlc2MpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHZk ID0gdmNoYW5fbmV4dF9kZXNjKCZjLT52Yyk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBj LT5kZXNjID0gdG9fbXRrX3VhcnRfYXBkbWFfZGVzYygmdmQtPnR4KTsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX3N0YXJ0X3J4KGMpOwo+ID4gKyAgICAgICAgICAg ICAgIH0KPiA+ICsgICAgICAgfSBlbHNlIGlmIChjLT5jZmcuZGlyZWN0aW9uID09IERNQV9NRU1f VE9fREVWKSB7Cj4gPiArICAgICAgICAgICAgICAgaWYgKHZjaGFuX2lzc3VlX3BlbmRpbmcoJmMt PnZjKSAmJiAhYy0+ZGVzYykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdmQgPSB2Y2hh bl9uZXh0X2Rlc2MoJmMtPnZjKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGMtPmRlc2Mg PSB0b19tdGtfdWFydF9hcGRtYV9kZXNjKCZ2ZC0+dHgpOwo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgbXRrX3VhcnRfYXBkbWFfc3RhcnRfdHgoYyk7Cj4gPiArICAgICAgICAgICAgICAgfQo+ ID4gKyAgICAgICB9Cj4gPiArICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPnZjLmxv Y2ssIGZsYWdzKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtdGtfdWFydF9hcGRtYV9z bGF2ZV9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY2ZnKQo+ID4gK3sKPiA+ICsg ICAgICAgc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX3VhcnRfYXBkbWFfY2hhbihjaGFuKTsK PiA+ICsgICAgICAgc3RydWN0IG10a191YXJ0X2FwZG1hZGV2ICptdGtkID0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG9fbXRrX3VhcnRfYXBkbWFfZGV2KGMtPnZjLmNoYW4u ZGV2aWNlKTsKPiA+ICsKPiA+ICsgICAgICAgYy0+Y2ZnID0gKmNmZzsKPiA+ICsKPiA+ICsgICAg ICAgaWYgKGNmZy0+ZGlyZWN0aW9uID09IERNQV9ERVZfVE9fTUVNKSB7Cj4gPiArICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IHJ4X2xlbiA9IGNmZy0+c3JjX2FkZHJfd2lkdGggKiAxMDI0Owo+ ID4gKwo+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZG X0FERFIsIGNmZy0+c3JjX2FkZHIpOwo+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1h X2NoYW5fd3JpdGUoYywgVkZGX0xFTiwgcnhfbGVuKTsKPiA+ICsgICAgICAgICAgICAgICBtdGtf dWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZGRl9USFJFLCBWRkZfUlhfVEhSRShyeF9sZW4pKTsK PiA+ICsgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZGRl9JTlRfRU4sIFZGRl9SWF9JTlRfRU4wX0IK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBWRkZfUlhfSU5UX0VOMV9CKTsK PiA+ICsgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZGRl9SUFQs IDApOwo+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkZGX0lOVF9GTEFHLCBWRkZfUlhfSU5U X0ZMQUdfQ0xSX0IpOwo+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3Jp dGUoYywgVkZGX0VOLCBWRkZfRU5fQik7Cj4gPiArICAgICAgIH0gZWxzZSBpZiAoY2ZnLT5kaXJl Y3Rpb24gPT0gRE1BX01FTV9UT19ERVYpICAgIHsKPiA+ICsgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgdHhfbGVuID0gY2ZnLT5kc3RfYWRkcl93aWR0aCAqIDEwMjQ7Cj4gPiArCj4gPiArICAg ICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBWRkZfQUREUiwgY2ZnLT5k c3RfYWRkcik7Cj4gPiArICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShj LCBWRkZfTEVOLCB0eF9sZW4pOwo+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2No YW5fd3JpdGUoYywgVkZGX1RIUkUsIFZGRl9UWF9USFJFKHR4X2xlbikpOwo+ID4gKyAgICAgICAg ICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX1dQVCwgMCk7Cj4gPiArICAg ICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWRkZfSU5UX0ZMQUcsIFZGRl9UWF9JTlRfRkxBR19DTFJfQik7 Cj4gPiArICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBWRkZfRU4s IFZGRl9FTl9CKTsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICBpZiAobXRrZC0+c3Vw cG9ydF8zM2JpdHMpCj4gPiArICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0 ZShjLCBWRkZfNEdfU1VQUE9SVCwgVkZGXzRHX1NVUFBPUlRfQik7Cj4gPiArCj4gPiArICAgICAg IGlmIChtdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQoYywgVkZGX0VOKSAhPSBWRkZfRU5fQikgewo+ ID4gKyAgICAgICAgICAgICAgIGRldl9lcnIoY2hhbi0+ZGV2aWNlLT5kZXYsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAiY29uZmlnIGRtYSBkaXJbJWRdIGZhaWxcbiIsIGNmZy0+ZGlyZWN0 aW9uKTsKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ICsgICAgICAgfQo+ ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBt dGtfdWFydF9hcGRtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKPiA+ICt7 Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210a191YXJ0X2FwZG1hX2NoYW4o Y2hhbik7Cj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiArICAgICAgIHUzMiBz dGF0dXM7Cj4gPiArICAgICAgIGludCByZXQ7Cj4gPiArCj4gPiArICAgICAgIHNwaW5fbG9ja19p cnFzYXZlKCZjLT52Yy5sb2NrLCBmbGFncyk7Cj4gPiArCj4gPiArICAgICAgIG10a191YXJ0X2Fw ZG1hX2NoYW5fd3JpdGUoYywgVkZGX0ZMVVNILCBWRkZfRkxVU0hfQ0xSX0IpOwo+ID4gKyAgICAg ICAvKiBXYWl0IGZvciBmbHVzaCAqLwo+ID4gKyAgICAgICByZXQgPSByZWFkeF9wb2xsX3RpbWVv dXQocmVhZGwsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5iYXNlICsg VkZGX0ZMVVNILAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXR1cyAmIFZGRl9GTFVTSF9C KSAhPSBWRkZfRkxVU0hfQiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEw LCAxMDApOwo+ID4gKyAgICAgICBpZiAocmV0KQo+ID4gKyAgICAgICAgICAgICAgIGRldl9lcnIo Yy0+dmMuY2hhbi5kZXZpY2UtPmRldiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICJkbWEg c3RvcDogcG9sbGluZyBGTFVTSCBmYWlsLCBERUJVRz0weCV4XG4iLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl9yZWFkKGMsIFZGRl9ERUJVR19TVEFUVVMp KTsKPiA+ICsKPiA+ICsgICAgICAgLypzZXQgc3RvcCBhcyAxIC0+IHdhaXQgdW50aWwgZW4gaXMg MCAtPiBzZXQgc3RvcCBhcyAwKi8KPiA+ICsgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0 ZShjLCBWRkZfU1RPUCwgVkZGX1NUT1BfQik7Cj4gPiArICAgICAgIHJldCA9IHJlYWR4X3BvbGxf dGltZW91dChyZWFkbCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmJh c2UgKyBWRkZfRU4sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMs IHN0YXR1cyA9PSAwLCAxMCwgMTAwKTsKPiA+ICsgICAgICAgaWYgKHJldCkKPiA+ICsgICAgICAg ICAgICAgICBkZXZfZXJyKGMtPnZjLmNoYW4uZGV2aWNlLT5kZXYsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAiZG1hIHN0b3A6IHBvbGxpbmcgVkZGX0VOIGZhaWwsIERFQlVHPTB4JXhcbiIs Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQoYywg VkZGX0RFQlVHX1NUQVRVUykpOwo+ID4gKwo+ID4gKyAgICAgICBtdGtfdWFydF9hcGRtYV9jaGFu X3dyaXRlKGMsIFZGRl9TVE9QLCBWRkZfU1RPUF9DTFJfQik7Cj4gPiArICAgICAgIG10a191YXJ0 X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX0lOVF9FTiwgVkZGX0lOVF9FTl9DTFJfQik7Cj4gPiAr Cj4gPiArICAgICAgIHN3aXRjaCAoYy0+Y2ZnLmRpcmVjdGlvbikgewo+ID4gKyAgICAgICBjYXNl IERNQV9ERVZfVE9fTUVNOgo+IAo+IERpdHRvLCBpZi9lbHNlPwo+IApkaXR0by4KaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvcGlwZXJtYWlsL2xpbnV4LW1lZGlhdGVrLzIwMTgtRGVjZW1iZXIv MDE2MjkyLmh0bWwKCj4gPiArICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0 ZShjLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRkZfSU5UX0ZMQUcsIFZG Rl9SWF9JTlRfRkxBR19DTFJfQik7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAg ICAgIGNhc2UgRE1BX01FTV9UT19ERVY6Cj4gPiArICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBk bWFfY2hhbl93cml0ZShjLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRkZf SU5UX0ZMQUcsIFZGRl9UWF9JTlRfRkxBR19DTFJfQik7Cj4gPiArICAgICAgICAgICAgICAgYnJl YWs7Cj4gPiArICAgICAgIGRlZmF1bHQ6Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiAr ICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+dmMu bG9jaywgZmxhZ3MpOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGludCBtdGtfdWFydF9hcGRtYV9kZXZpY2VfcGF1c2Uoc3RydWN0IGRtYV9jaGFu ICpjaGFuKQo+ID4gK3sKPiA+ICsgICAgICAgLyoganVzdCBmb3IgY2hlY2sgY2FwcyBwYXNzICov Cj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG10a191 YXJ0X2FwZG1hX2RldmljZV9yZXN1bWUoc3RydWN0IGRtYV9jaGFuICpjaGFuKQo+ID4gK3sKPiA+ ICsgICAgICAgLyoganVzdCBmb3IgY2hlY2sgY2FwcyBwYXNzICovCj4gPiArICAgICAgIHJldHVy biAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtdGtfdWFydF9hcGRtYV9mcmVlKHN0 cnVjdCBtdGtfdWFydF9hcGRtYWRldiAqbXRrZCkKPiA+ICt7Cj4gPiArICAgICAgIHdoaWxlIChs aXN0X2VtcHR5KCZtdGtkLT5kZGV2LmNoYW5uZWxzKSA9PSAwKSB7Cj4gPiArICAgICAgICAgICAg ICAgc3RydWN0IG10a19jaGFuICpjID0gbGlzdF9maXJzdF9lbnRyeSgmbXRrZC0+ZGRldi5jaGFu bmVscywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGtfY2hhbiwgdmMuY2hh bi5kZXZpY2Vfbm9kZSk7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgbGlzdF9kZWwoJmMtPnZj LmNoYW4uZGV2aWNlX25vZGUpOwo+ID4gKyAgICAgICAgICAgICAgIHRhc2tsZXRfa2lsbCgmYy0+ dmMudGFzayk7Cj4gPiArICAgICAgIH0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgbXRrX3VhcnRfYXBkbWFfbWF0Y2hbXSA9IHsKPiA+ICsgICAgICAg eyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1NzctdWFydC1kbWEiLCB9LAo+ID4gKyAgICAg ICB7IC8qIHNlbnRpbmVsICovIH0sCj4gPiArfTsKPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9m LCBtdGtfdWFydF9hcGRtYV9tYXRjaCk7Cj4gPiArCj4gPiArc3RhdGljIGludCBtdGtfdWFydF9h cGRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICsgICAg ICAgc3RydWN0IG10a191YXJ0X2FwZG1hZGV2ICptdGtkOwo+ID4gKyAgICAgICBzdHJ1Y3QgcmVz b3VyY2UgKnJlczsKPiA+ICsgICAgICAgc3RydWN0IG10a19jaGFuICpjOwo+ID4gKyAgICAgICB1 bnNpZ25lZCBpbnQgaTsKPiA+ICsgICAgICAgaW50IHJjOwo+ID4gKwo+ID4gKyAgICAgICBtdGtk ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbXRrZCksIEdGUF9LRVJORUwpOwo+ ID4gKyAgICAgICBpZiAoIW10a2QpCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07 Cj4gPiArCj4gPiArICAgICAgIG10a2QtPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBO VUxMKTsKPiA+ICsgICAgICAgaWYgKElTX0VSUihtdGtkLT5jbGspKSB7Cj4gPiArICAgICAgICAg ICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gY2xvY2sgc3BlY2lmaWVkXG4iKTsKPiA+ICsg ICAgICAgICAgICAgICByYyA9IFBUUl9FUlIobXRrZC0+Y2xrKTsKPiA+ICsgICAgICAgICAgICAg ICBnb3RvIGVycl9ub19kbWE7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgaWYgKG9m X3Byb3BlcnR5X3JlYWRfYm9vbChwZGV2LT5kZXYub2Zfbm9kZSwgImRtYS0zM2JpdHMiKSkgewo+ ID4gKyAgICAgICAgICAgICAgIGRldl9pbmZvKCZwZGV2LT5kZXYsICJTdXBwb3J0IGRtYSAzM2Jp dHNcbiIpOwo+IAo+IERyb3AgdGhpcywgYSBiaXQgdmVyYm9zZS4KPiAKPiA+ICsgICAgICAgICAg ICAgICBtdGtkLT5zdXBwb3J0XzMzYml0cyA9IHRydWU7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ ICsgICAgICAgcmMgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9CSVRfTUFTSygzMiB8IG10a2QtPnN1 cHBvcnRfMzNiaXRzKSk7Cj4gPiArICAgICAgIGlmIChyYykKPiA+ICsgICAgICAgICAgICAgICBn b3RvIGVycl9ub19kbWE7Cj4gPiArCj4gPiArICAgICAgIGRtYV9jYXBfc2V0KERNQV9TTEFWRSwg bXRrZC0+ZGRldi5jYXBfbWFzayk7Cj4gPiArICAgICAgIG10a2QtPmRkZXYuZGV2aWNlX2FsbG9j X2NoYW5fcmVzb3VyY2VzID0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRr X3VhcnRfYXBkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXM7Cj4gPiArICAgICAgIG10a2QtPmRkZXYu ZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtdGtfdWFydF9hcGRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzOwo+ID4gKyAgICAgICBt dGtkLT5kZGV2LmRldmljZV90eF9zdGF0dXMgPSBtdGtfdWFydF9hcGRtYV90eF9zdGF0dXM7Cj4g PiArICAgICAgIG10a2QtPmRkZXYuZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBtdGtfdWFydF9hcGRt YV9pc3N1ZV9wZW5kaW5nOwo+ID4gKyAgICAgICBtdGtkLT5kZGV2LmRldmljZV9wcmVwX3NsYXZl X3NnID0gbXRrX3VhcnRfYXBkbWFfcHJlcF9zbGF2ZV9zZzsKPiA+ICsgICAgICAgbXRrZC0+ZGRl di5kZXZpY2VfY29uZmlnID0gbXRrX3VhcnRfYXBkbWFfc2xhdmVfY29uZmlnOwo+ID4gKyAgICAg ICBtdGtkLT5kZGV2LmRldmljZV9wYXVzZSA9IG10a191YXJ0X2FwZG1hX2RldmljZV9wYXVzZTsK PiA+ICsgICAgICAgbXRrZC0+ZGRldi5kZXZpY2VfcmVzdW1lID0gbXRrX3VhcnRfYXBkbWFfZGV2 aWNlX3Jlc3VtZTsKPiA+ICsgICAgICAgbXRrZC0+ZGRldi5kZXZpY2VfdGVybWluYXRlX2FsbCA9 IG10a191YXJ0X2FwZG1hX3Rlcm1pbmF0ZV9hbGw7Cj4gPiArICAgICAgIG10a2QtPmRkZXYuc3Jj X2FkZHJfd2lkdGhzID0gQklUKERNQV9TTEFWRV9CVVNXSURUSF8xX0JZVEUpOwo+ID4gKyAgICAg ICBtdGtkLT5kZGV2LmRzdF9hZGRyX3dpZHRocyA9IEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMV9C WVRFKTsKPiA+ICsgICAgICAgbXRrZC0+ZGRldi5kaXJlY3Rpb25zID0gQklUKERNQV9ERVZfVE9f TUVNKSB8IEJJVChETUFfTUVNX1RPX0RFVik7Cj4gPiArICAgICAgIG10a2QtPmRkZXYucmVzaWR1 ZV9ncmFudWxhcml0eSA9IERNQV9SRVNJRFVFX0dSQU5VTEFSSVRZX1NFR01FTlQ7Cj4gPiArICAg ICAgIG10a2QtPmRkZXYuZGV2ID0gJnBkZXYtPmRldjsKPiA+ICsgICAgICAgSU5JVF9MSVNUX0hF QUQoJm10a2QtPmRkZXYuY2hhbm5lbHMpOwo+ID4gKwo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBp IDwgTVRLX1VBUlRfQVBETUFfQ0hBTk5FTFM7IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGMg PSBkZXZtX2t6YWxsb2MobXRrZC0+ZGRldi5kZXYsIHNpemVvZigqYyksIEdGUF9LRVJORUwpOwo+ ID4gKyAgICAgICAgICAgICAgIGlmICghYykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg cmMgPSAtRU5PREVWOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfbm9fZG1h Owo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICByZXMgPSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkpOwo+ID4gKyAgICAg ICAgICAgICAgIGlmICghcmVzKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICByYyA9IC1F Tk9ERVY7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9ub19kbWE7Cj4gPiAr ICAgICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGMtPmJhc2UgPSBkZXZt X2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKPiA+ICsgICAgICAgICAgICAgICBp ZiAoSVNfRVJSKGMtPmJhc2UpKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICByYyA9IFBU Ul9FUlIoYy0+YmFzZSk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9ub19k bWE7Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICAgIGMtPnJlcXVlc3Rl ZCA9IGZhbHNlOwo+ID4gKyAgICAgICAgICAgICAgIGMtPnZjLmRlc2NfZnJlZSA9IG10a191YXJ0 X2FwZG1hX2Rlc2NfZnJlZTsKPiA+ICsgICAgICAgICAgICAgICB2Y2hhbl9pbml0KCZjLT52Yywg Jm10a2QtPmRkZXYpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIG10a2QtPmRtYV9pcnFbaV0g PSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkpOwo+ID4gKyAgICAgICAgICAgICAgIGlmICgoaW50 KW10a2QtPmRtYV9pcnFbaV0gPCAwKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZXZf ZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IElSUVslZF1cbiIsIGkpOwo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgZ290byBlcnJfbm9fZG1hOwo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgfQo+ ID4gKwo+ID4gKyAgICAgICBwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKPiA+ICsgICAg ICAgcG1fcnVudGltZV9zZXRfYWN0aXZlKCZwZGV2LT5kZXYpOwo+ID4gKwo+ID4gKyAgICAgICBy YyA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJm10a2QtPmRkZXYpOwo+ID4gKyAgICAgICBp ZiAocmMpCj4gPiArICAgICAgICAgICAgICAgZ290byBycG1fZGlzYWJsZTsKPiA+ICsKPiA+ICsg ICAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbXRrZCk7Cj4gPiArCj4gPiArICAgICAg IGlmIChwZGV2LT5kZXYub2Zfbm9kZSkgewo+ID4gKyAgICAgICAgICAgICAgIC8qIERldmljZS10 cmVlIERNQSBjb250cm9sbGVyIHJlZ2lzdHJhdGlvbiAqLwo+ID4gKyAgICAgICAgICAgICAgIHJj ID0gb2ZfZG1hX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGRldi0+ZGV2Lm9mX25vZGUsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZl9kbWFfeGxhdGVf YnlfY2hhbl9pZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG10a2QpOwo+ID4gKyAgICAgICAgICAgICAgIGlmIChyYykKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gZG1hX3JlbW92ZTsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAg ICAgICByZXR1cm4gcmM7Cj4gPiArCj4gPiArZG1hX3JlbW92ZToKPiA+ICsgICAgICAgZG1hX2Fz eW5jX2RldmljZV91bnJlZ2lzdGVyKCZtdGtkLT5kZGV2KTsKPiA+ICtycG1fZGlzYWJsZToKPiA+ ICsgICAgICAgcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwo+ID4gK2Vycl9ub19kbWE6 Cj4gPiArICAgICAgIG10a191YXJ0X2FwZG1hX2ZyZWUobXRrZCk7Cj4gPiArICAgICAgIHJldHVy biByYzsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtdGtfdWFydF9hcGRtYV9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBt dGtfdWFydF9hcGRtYWRldiAqbXRrZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ID4g Kwo+ID4gKyAgICAgICBpZiAocGRldi0+ZGV2Lm9mX25vZGUpCj4gPiArICAgICAgICAgICAgICAg b2ZfZG1hX2NvbnRyb2xsZXJfZnJlZShwZGV2LT5kZXYub2Zfbm9kZSk7Cj4gPiArCj4gPiArICAg ICAgIHBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKPiA+ICsgICAgICAgcG1fcnVudGlt ZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOwo+ID4gKwo+ID4gKyAgICAgICBkbWFfYXN5bmNfZGV2 aWNlX3VucmVnaXN0ZXIoJm10a2QtPmRkZXYpOwo+ID4gKyAgICAgICBtdGtfdWFydF9hcGRtYV9m cmVlKG10a2QpOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiAr I2lmZGVmIENPTkZJR19QTV9TTEVFUAo+ID4gK3N0YXRpYyBpbnQgbXRrX3VhcnRfYXBkbWFfc3Vz cGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX3Vh cnRfYXBkbWFkZXYgKm10a2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsKPiA+ICsgICAg ICAgaWYgKCFwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQo+ID4gKyAgICAgICAgICAgICAgIGNs a19kaXNhYmxlX3VucHJlcGFyZShtdGtkLT5jbGspOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4g MDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtdGtfdWFydF9hcGRtYV9yZXN1bWUoc3Ry dWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsgICAgICAg c3RydWN0IG10a191YXJ0X2FwZG1hZGV2ICptdGtkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4g PiArCj4gPiArICAgICAgIGlmICghcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkgewo+ID4gKyAg ICAgICAgICAgICAgIHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShtdGtkLT5jbGspOwo+ID4gKyAg ICAgICAgICAgICAgIGlmIChyZXQpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g cmV0Owo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ ICsjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCj4gPiArCj4gPiArI2lmZGVmIENPTkZJR19Q TQo+ID4gK3N0YXRpYyBpbnQgbXRrX3VhcnRfYXBkbWFfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBk ZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfdWFydF9hcGRtYWRldiAq bXRrZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwo+ID4gKyAgICAgICBjbGtfZGlzYWJs ZV91bnByZXBhcmUobXRrZC0+Y2xrKTsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIDA7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbXRrX3VhcnRfYXBkbWFfcnVudGltZV9yZXN1bWUoc3Ry dWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsgICAgICAg c3RydWN0IG10a191YXJ0X2FwZG1hZGV2ICptdGtkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4g PiArCj4gPiArICAgICAgIHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShtdGtkLT5jbGspOwo+ID4g KyAgICAgICBpZiAocmV0KQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4g PiArICAgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsjZW5kaWYgLyogQ09ORklHX1BNICovCj4g PiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG10a191YXJ0X2FwZG1hX3Bt X29wcyA9IHsKPiA+ICsgICAgICAgU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMobXRrX3VhcnRfYXBk bWFfc3VzcGVuZCwgbXRrX3VhcnRfYXBkbWFfcmVzdW1lKQo+ID4gKyAgICAgICBTRVRfUlVOVElN RV9QTV9PUFMobXRrX3VhcnRfYXBkbWFfcnVudGltZV9zdXNwZW5kLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfcnVudGltZV9yZXN1bWUsIE5VTEwpCj4gPiAr fTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfdWFydF9hcGRt YV9kcml2ZXIgPSB7Cj4gPiArICAgICAgIC5wcm9iZSAgPSBtdGtfdWFydF9hcGRtYV9wcm9iZSwK PiA+ICsgICAgICAgLnJlbW92ZSA9IG10a191YXJ0X2FwZG1hX3JlbW92ZSwKPiA+ICsgICAgICAg LmRyaXZlciA9IHsKPiA+ICsgICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSBLQlVJTERf TU9ETkFNRSwKPiA+ICsgICAgICAgICAgICAgICAucG0gICAgICAgICAgICAgPSAmbXRrX3VhcnRf YXBkbWFfcG1fb3BzLAo+ID4gKyAgICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21h dGNoX3B0cihtdGtfdWFydF9hcGRtYV9tYXRjaCksCj4gPiArICAgICAgIH0sCj4gPiArfTsKPiA+ ICsKPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10a191YXJ0X2FwZG1hX2RyaXZlcik7Cj4g PiArCj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYVRlayBVQVJUIEFQRE1BIENvbnRyb2xs ZXIgRHJpdmVyIik7Cj4gPiArTU9EVUxFX0FVVEhPUigiTG9uZyBDaGVuZyA8bG9uZy5jaGVuZ0Bt ZWRpYXRlay5jb20+Iik7Cj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ID4gKwo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL2RtYS9t ZWRpYXRlay9LY29uZmlnCj4gPiBpbmRleCAyN2JhYzBiLi4xYTUyM2M4NyAxMDA2NDQKPiA+IC0t LSBhL2RyaXZlcnMvZG1hL21lZGlhdGVrL0tjb25maWcKPiA+ICsrKyBiL2RyaXZlcnMvZG1hL21l ZGlhdGVrL0tjb25maWcKPiA+IEBAIC0xLDQgKzEsMTUgQEAKPiA+Cj4gPiArY29uZmlnIERNQV9N VEtfVUFSVAo+ID4gKyAgICAgICB0cmlzdGF0ZSAiTWVkaWFUZWsgU29DcyBBUERNQSBzdXBwb3J0 IGZvciBVQVJUIgo+ID4gKyAgICAgICBkZXBlbmRzIG9uIE9GICYmIFNFUklBTF84MjUwX01UNjU3 Nwo+ID4gKyAgICAgICBzZWxlY3QgRE1BX0VOR0lORQo+ID4gKyAgICAgICBzZWxlY3QgRE1BX1ZJ UlRVQUxfQ0hBTk5FTFMKPiA+ICsgICAgICAgaGVscAo+ID4gKyAgICAgICAgIFN1cHBvcnQgZm9y IHRoZSBVQVJUIERNQSBlbmdpbmUgZm91bmQgb24gTWVkaWFUZWsgTVRLIFNvQ3MuCj4gPiArICAg ICAgICAgd2hlbiBTRVJJQUxfODI1MF9NVDY1NzcgaXMgZW5hYmxlZCwgYW5kIGlmIHlvdSB3YW50 IHRvIHVzZSBETUEsCj4gPiArICAgICAgICAgeW91IGNhbiBlbmFibGUgdGhlIGNvbmZpZy4gdGhl IERNQSBlbmdpbmUgY2FuIG9ubHkgYmUgdXNlZAo+ID4gKyAgICAgICAgIHdpdGggTWVkaWFUZWsg U29Dcy4KPiA+ICsKPiA+ICBjb25maWcgTVRLX0hTRE1BCj4gPiAgICAgICAgIHRyaXN0YXRlICJN ZWRpYVRlayBIaWdoLVNwZWVkIERNQSBjb250cm9sbGVyIHN1cHBvcnQiCj4gPiAgICAgICAgIGRl cGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCBDT01QSUxFX1RFU1QKPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2RtYS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL21lZGlhdGVrL01ha2Vm aWxlCj4gPiBpbmRleCA2ZTc3OGY4Li4yZjJlZmQ5IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9k bWEvbWVkaWF0ZWsvTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZG1hL21lZGlhdGVrL01ha2Vm aWxlCj4gPiBAQCAtMSArMSwyIEBACj4gPiArb2JqLSQoQ09ORklHX0RNQV9NVEtfVUFSVCkgKz0g ODI1MF9tdGtfZG1hLm8KPiA+ICBvYmotJChDT05GSUdfTVRLX0hTRE1BKSArPSBtdGstaHNkbWEu bwo+ID4gLS0KPiA+IDEuNy45LjUKPiA+Cg==