From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 1/4] dma-buf: change DMA-buf locking convention Date: Tue, 17 Sep 2019 15:45:24 +0200 Message-ID: <20190917134524.GY3958@phenom.ffwll.local> References: <20190829142917.13058-1-christian.koenig@amd.com> <20190829142917.13058-2-christian.koenig@amd.com> <20190903080522.GM2112@phenom.ffwll.local> <88f748d2-43de-ae2a-b895-40d8b3be5c78@gmail.com> <20190917123150.GM3958@phenom.ffwll.local> <20190917131320.GU3958@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id F15956EC89 for ; Tue, 17 Sep 2019 13:45:28 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id h33so3342938edh.12 for ; Tue, 17 Sep 2019 06:45:28 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Koenig, Christian" Cc: "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "linaro-mm-sig@lists.linaro.org" , "sumit.semwal@linaro.org" , "linux-media@vger.kernel.org" List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBTZXAgMTcsIDIwMTkgYXQgMDE6MjQ6MTBQTSArMDAwMCwgS29lbmlnLCBDaHJpc3Rp YW4gd3JvdGU6Cj4gQW0gMTcuMDkuMTkgdW0gMTU6MTMgc2NocmllYiBEYW5pZWwgVmV0dGVyOgo+ ID4gT24gVHVlLCBTZXAgMTcsIDIwMTkgYXQgMTI6NDA6NTFQTSArMDAwMCwgS29lbmlnLCBDaHJp c3RpYW4gd3JvdGU6Cj4gPj4gQW0gMTcuMDkuMTkgdW0gMTQ6MzEgc2NocmllYiBEYW5pZWwgVmV0 dGVyOgo+ID4+PiBPbiBNb24sIFNlcCAxNiwgMjAxOSBhdCAwMjoyMzoxM1BNICswMjAwLCBDaHJp c3RpYW4gS8O2bmlnIHdyb3RlOgo+ID4+Pj4gUGluZz8gQW55IGZ1cnRoZXIgY29tbWVudCBvbiB0 aGlzIG9yIGNhbid0IHdlIG1lcmdlIGF0IGxlYXN0IHRoZSBsb2NraW5nCj4gPj4+PiBjaGFuZ2U/ Cj4gPj4+IEkgd2FzIGF0IHBsdW1iZXJzIC4uLgo+ID4+Pj4gQ2hyaXN0aWFuLgo+ID4+Pj4KPiA+ Pj4+IEFtIDExLjA5LjE5IHVtIDEyOjUzIHNjaHJpZWIgQ2hyaXN0aWFuIEvDtm5pZzoKPiA+Pj4+ PiBBbSAwMy4wOS4xOSB1bSAxMDowNSBzY2hyaWViIERhbmllbCBWZXR0ZXI6Cj4gPj4+Pj4+IE9u IFRodSwgQXVnIDI5LCAyMDE5IGF0IDA0OjI5OjE0UE0gKzAyMDAsIENocmlzdGlhbiBLw7ZuaWcg d3JvdGU6Cj4gPj4+Pj4+PiBUaGlzIHBhdGNoIGlzIGEgc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9m IHRoZSBsb2NraW5nIGNoYW5nZXMKPiA+Pj4+Pj4+IG5lY2Vzc2FyeSB0byBzdXBwb3J0IGR5bmFt aWMgRE1BLWJ1ZiBoYW5kbGluZy4KPiA+Pj4+Pj4+Cj4gPj4+Pj4+PiBGb3IgY29tcGF0aWJpbGl0 eSB3ZSBjYWNoZSB0aGUgRE1BLWJ1ZiBtYXBwaW5nIGFzIHNvb24gYXMKPiA+Pj4+Pj4+IGV4cG9y dGVyL2ltcG9ydGVyIGRpc2FncmVlIG9uIHRoZSBkeW5hbWljIGhhbmRsaW5nLgo+ID4+Pj4+Pj4K PiA+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2Vu aWdAYW1kLmNvbT4KPiA+Pj4+Pj4+IC0tLQo+ID4+Pj4+Pj4gICDCoCBkcml2ZXJzL2RtYS1idWYv ZG1hLWJ1Zi5jIHwgOTAKPiA+Pj4+Pj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tLQo+ID4+Pj4+Pj4gICDCoCBpbmNsdWRlL2xpbnV4L2RtYS1idWYuaMKgwqAgfCA1MSAr KysrKysrKysrKysrKysrKysrKystCj4gPj4+Pj4+PiAgIMKgIDIgZmlsZXMgY2hhbmdlZCwgMTMz IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4gPj4+Pj4+Pgo+ID4+Pj4+Pj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1 Zi5jCj4gPj4+Pj4+PiBpbmRleCA0MzNkOTFkNzEwZTQuLjY1MDUyZDUyNjAyYiAxMDA2NDQKPiA+ Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPiA+Pj4+Pj4+ICsrKyBiL2Ry aXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPiA+Pj4+Pj4+IEBAIC01MjUsNiArNTI1LDEwIEBAIHN0 cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QKPiA+Pj4+Pj4+IGRtYV9i dWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKQo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqAgfQo+ID4+Pj4+ Pj4gICDCoCArwqDCoMKgIGlmIChXQVJOX09OKGV4cF9pbmZvLT5vcHMtPmNhY2hlX3NndF9tYXBw aW5nICYmCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBleHBfaW5mby0+b3BzLT5k eW5hbWljX21hcHBpbmcpKQo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRS KC1FSU5WQUwpOwo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgIGlmICghdHJ5X21v ZHVsZV9nZXQoZXhwX2luZm8tPm93bmVyKSkKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwo+ID4+Pj4+Pj4gICDCoCBAQCAtNjQ1LDEwICs2NDks MTEgQEAgdm9pZCBkbWFfYnVmX3B1dChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ID4+Pj4+Pj4g ICDCoCBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3B1dCk7Cj4gPj4+Pj4+PiAgIMKgIMKgIC8q Kgo+ID4+Pj4+Pj4gLSAqIGRtYV9idWZfYXR0YWNoIC0gQWRkIHRoZSBkZXZpY2UgdG8gZG1hX2J1 ZidzIGF0dGFjaG1lbnRzCj4gPj4+Pj4+PiBsaXN0OyBvcHRpb25hbGx5LAo+ID4+Pj4+Pj4gKyAq IGRtYV9idWZfZHluYW1pY19hdHRhY2ggLSBBZGQgdGhlIGRldmljZSB0byBkbWFfYnVmJ3MKPiA+ Pj4+Pj4+IGF0dGFjaG1lbnRzIGxpc3Q7IG9wdGlvbmFsbHksCj4gPj4+Pj4+PiAgIMKgwqAgKiBj YWxscyBhdHRhY2goKSBvZiBkbWFfYnVmX29wcyB0byBhbGxvdyBkZXZpY2Utc3BlY2lmaWMKPiA+ Pj4+Pj4+IGF0dGFjaCBmdW5jdGlvbmFsaXR5Cj4gPj4+Pj4+PiAtICogQGRtYWJ1ZjrCoMKgwqAg W2luXcKgwqDCoCBidWZmZXIgdG8gYXR0YWNoIGRldmljZSB0by4KPiA+Pj4+Pj4+IC0gKiBAZGV2 OsKgwqDCoCBbaW5dwqDCoMKgIGRldmljZSB0byBiZSBhdHRhY2hlZC4KPiA+Pj4+Pj4+ICsgKiBA ZG1hYnVmOsKgwqDCoMKgwqDCoMKgIFtpbl3CoMKgwqAgYnVmZmVyIHRvIGF0dGFjaCBkZXZpY2Ug dG8uCj4gPj4+Pj4+PiArICogQGRldjrCoMKgwqDCoMKgwqDCoCBbaW5dwqDCoMKgIGRldmljZSB0 byBiZSBhdHRhY2hlZC4KPiA+Pj4+Pj4+ICsgKiBAZHluYW1pY19tYXBwaW5nOsKgwqDCoCBbaW5d wqDCoMKgIGNhbGxpbmcgY29udmVudGlvbiBmb3IgbWFwL3VubWFwCj4gPj4+Pj4+PiAgIMKgwqAg Kgo+ID4+Pj4+Pj4gICDCoMKgICogUmV0dXJucyBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50IHBv aW50ZXIgZm9yIHRoaXMKPiA+Pj4+Pj4+IGF0dGFjaG1lbnQuIEF0dGFjaG1lbnRzCj4gPj4+Pj4+ PiAgIMKgwqAgKiBtdXN0IGJlIGNsZWFuZWQgdXAgYnkgY2FsbGluZyBkbWFfYnVmX2RldGFjaCgp Lgo+ID4+Pj4+Pj4gQEAgLTY2Miw4ICs2NjcsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVm X3B1dCk7Cj4gPj4+Pj4+PiAgIMKgwqAgKiBhY2Nlc3NpYmxlIHRvIEBkZXYsIGFuZCBjYW5ub3Qg YmUgbW92ZWQgdG8gYSBtb3JlIHN1aXRhYmxlCj4gPj4+Pj4+PiBwbGFjZS4gVGhpcyBpcwo+ID4+ Pj4+Pj4gICDCoMKgICogaW5kaWNhdGVkIHdpdGggdGhlIGVycm9yIGNvZGUgLUVCVVNZLgo+ID4+ Pj4+Pj4gICDCoMKgICovCj4gPj4+Pj4+PiAtc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqZG1h X2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiA+Pj4+Pj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2KQo+ID4+ Pj4+Pj4gK3N0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKgo+ID4+Pj4+Pj4gK2RtYV9idWZfZHlu YW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAo+ ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCBkeW5hbWljX21hcHBp bmcpCj4gPj4+Pj4+PiAgIMKgIHsKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2htZW50ICphdHRhY2g7Cj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqAgaW50IHJldDsKPiA+ Pj4+Pj4+IEBAIC02NzcsNiArNjgzLDcgQEAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudAo+ID4+ Pj4+Pj4gKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gPj4+Pj4+PiAg IMKgIMKgwqDCoMKgwqAgYXR0YWNoLT5kZXYgPSBkZXY7Cj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqAg YXR0YWNoLT5kbWFidWYgPSBkbWFidWY7Cj4gPj4+Pj4+PiArwqDCoMKgIGF0dGFjaC0+ZHluYW1p Y19tYXBwaW5nID0gZHluYW1pY19tYXBwaW5nOwo+ID4+Pj4+Pj4gICDCoCDCoMKgwqDCoMKgIG11 dGV4X2xvY2soJmRtYWJ1Zi0+bG9jayk7Cj4gPj4+Pj4+PiAgIMKgIEBAIC02ODUsMTYgKzY5Miw2 NCBAQCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Cj4gPj4+Pj4+PiAqZG1hX2J1Zl9hdHRhY2go c3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IChyZXQpCj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2F0 dGFjaDsKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCB9Cj4gPj4+Pj4+PiArwqDCoMKgIGRtYV9yZXN2 X2xvY2soZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCBsaXN0X2Fk ZCgmYXR0YWNoLT5ub2RlLCAmZG1hYnVmLT5hdHRhY2htZW50cyk7Cj4gPj4+Pj4+PiArwqDCoMKg IGRtYV9yZXN2X3VubG9jayhkbWFidWYtPnJlc3YpOwo+ID4+Pj4+Pj4gICDCoCDCoMKgwqDCoMKg IG11dGV4X3VubG9jaygmZG1hYnVmLT5sb2NrKTsKPiA+Pj4+Pj4+ICAgwqAgK8KgwqDCoCAvKiBX aGVuIGVpdGhlciB0aGUgaW1wb3J0ZXIgb3IgdGhlIGV4cG9ydGVyIGNhbid0IGhhbmRsZSBkeW5h bWljCj4gPj4+Pj4+PiArwqDCoMKgwqAgKiBtYXBwaW5ncyB3ZSBjYWNoZSB0aGUgbWFwcGluZyBo ZXJlIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHRoZQo+ID4+Pj4+Pj4gK8KgwqDCoMKgICogcmVzZXJ2 YXRpb24gb2JqZWN0IGxvY2suCj4gPj4+Pj4+PiArwqDCoMKgwqAgKi8KPiA+Pj4+Pj4+ICvCoMKg wqAgaWYgKGRtYV9idWZfYXR0YWNobWVudF9pc19keW5hbWljKGF0dGFjaCkgIT0KPiA+Pj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoCBkbWFfYnVmX2lzX2R5bmFtaWMoZG1hYnVmKSkgewo+ID4+Pj4+Pj4g K8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBzZ190YWJsZSAqc2d0Owo+ID4+Pj4+Pj4gKwo+ID4+Pj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYp KQo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfbG9jayhhdHRhY2gt PmRtYWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKg wqAgc2d0ID0gZG1hYnVmLT5vcHMtPm1hcF9kbWFfYnVmKGF0dGFjaCwgRE1BX0JJRElSRUNUSU9O QUwpOwo+ID4+Pj4+PiBOb3cgd2UncmUgYmFjayB0byBlbmZvcmNpbmcgRE1BX0JJREksIHdoaWNo IHdvcmtzIG5pY2VseSBhcm91bmQgdGhlCj4gPj4+Pj4+IGxvY2tpbmcgcGFpbiwgYnV0IGFwcGFy ZW50bHkgdXBzZXRzIHRoZSBhcm0tc29jIGZvbGtzIHdobyB3YW50IHRvCj4gPj4+Pj4+IGNvbnRy b2wKPiA+Pj4+Pj4gdGhpcyBiZXR0ZXIuCj4gPj4+Pj4gVGFrZSBhbm90aGVyIGxvb2sgYXQgZG1h X2J1Zl9tYXBfYXR0YWNobWVudCgpLCB3ZSBzdGlsbCB0cnkgdG8gZ2V0IHRoZQo+ID4+Pj4+IGNh Y2hpbmcgdGhlcmUgZm9yIEFSTS4KPiA+Pj4+Pgo+ID4+Pj4+IFdoYXQgd2UgZG8gaGVyZSBpcyB0 byBiaWRpcmVjdGlvbmFsbHkgbWFwIHRoZSBidWZmZXIgdG8gYXZvaWQgdGhlCj4gPj4+Pj4gbG9j a2luZyBoeWRyYSB3aGVuIGltcG9ydGVyIGFuZCBleHBvcnRlciBkaXNhZ3JlZSBvbiBsb2NraW5n Lgo+ID4+Pj4+Cj4gPj4+Pj4gU28gdGhlIEFSTSBmb2xrcyBjYW4gZWFzaWx5IGF2b2lkIHRoYXQg Ynkgc3dpdGNoaW5nIHRvIGR5bmFtaWMgbG9ja2luZwo+ID4+Pj4+IGZvciBib3RoLgo+ID4+PiBT byB5b3Ugc3RpbGwgYnJlYWsgdGhlIGNvbnRyYWN0IGJldHdlZW4gaW1wb3J0ZXIgYW5kIGV4cG9y dGVyLCBleGNlcHQgbm90Cj4gPj4+IGZvciBhbnl0aGluZyB0aGF0J3MgcnVuIGluIGludGVsLWdm eC1jaSBzbyBhbGwgaXMgZ29vZD8KPiA+PiBObywgdGhlIGNvbnRyYWN0IGJldHdlZW4gaW1wb3J0 ZXIgYW5kIGV4cG9ydGVyIHN0YXlzIGV4YWN0bHkgdGhlIHNhbWUgaXQKPiA+PiBpcyBjdXJyZW50 bHkgYXMgbG9uZyBhcyB5b3UgZG9uJ3Qgc3dpdGNoIHRvIGR5bmFtaWMgZG1hLWJ1ZiBoYW5kbGlu Zy4KPiA+Pgo+ID4+IFRoZXJlIGlzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlIGZvciB0aGUgQVJNIGZv bGtzIGhlcmUuIFRoZSBvbmx5IGNoYW5nZQo+ID4+IHdoaWNoIHRha2VzIGVmZmVjdCBpcyBiZXR3 ZWVuIGk5MTUgYW5kIGFtZGdwdSBhbmQgdGhhdCBpcyBwZXJmZWN0bHkKPiA+PiBjb3ZlcmVkIGJ5 IGludGVsLWdmeC1jaS4KPiA+IFRoZXJlJ3MgcGVvcGxlIHdobyB3YW50IHRvIHJ1biBhbWRncHUg b24gQVJNPwo+IAo+IFN1cmUgdGhlcmUgYXJlLCB3ZSBldmVuIHJlY2VudGx5IGZpeGVkIHNvbWUg YnVncyBmb3IgdGhpcy4KPiAKPiBCdXQgYXMgZmFyIGFzIEkga25vdyB0aGVyZSBpcyBubyBvbmUg Y3VycmVudGx5IHdoaWNoIGlzIGFmZmVjdCBieSB0aGlzIAo+IGNoYW5nZSBvbiBBUk0gd2l0aCBh bWRncHUuCgpCdXQgZG9uJ3QgeW91IGJyZWFrIHRoZW0gd2l0aCB0aGlzIG5vdz8KCmFtZGdwdSB3 aWxsIHNvb24gc2V0IHRoZSBkeW5hbWljIGZsYWcgb24gZXhwb3J0cywgd2hpY2ggZm9yY2VzIHRo ZSBjYWNoaW5nCmF0IGNyZWF0ZSB0aW1lICh0byBhdm9pZCB0aGUgbG9ja2luZyBmdW4pLCB3aGlj aCB3aWxsIHRoZW4gcmVzdWx0IGluIGEKRUJVU1kgYXQgbWFwX2F0dGFjaG1lbnQgdGltZSBiZWNh dXNlIHdlIGhhdmUgYSBjYWNoZWQgbWFwcGluZywgYnV0IGl0J3MKdGhlIHdyb25nIHR5cGUuCgo+ ID4gQWxzbywgeDg2IGRvZXNuJ3QgaGF2ZSBjYWNoZQo+ID4gZmx1c2hpbmcgaW4gdGhlIGRtYS1h cGksIHNvIG5hdHVyYWxseSB0aGlzIGlzbid0IGFueSBpc3N1ZSBmb3IgdXMgKHdlCj4gPiBzdGls bCBoYXZlIGNhY2hlIGZsdXNoaW5nIGluIGFjdHVhbCBodywgYnV0IHRoYXQncyBhIGRpZmZlcmVu dCB0b3BpYykuIFNvCj4gPiAid29ya3Mgb24geDg2IiBpc24ndCByZWFsbHkgYSBncmVhdCB3YXkg dG8ganVzdGlmeSB3aGF0IHdlIGRvIGhlcmUgSQo+ID4gdGhpbmsuCj4gCj4gV2VsbCBpdCBpcyB0 aGUgZXhhY3Qgc2FtZSBjYWNoaW5nIHdlIHByZXZpb3VzbHkgaGFkIGFzIHdlbGwsIHNvIHRoZXJl IGlzIAo+IGFic29sdXRlbHkgbm8gZnVuY3Rpb25hbCBjaGFuZ2UgaGVyZSBleGNlcHQgdGhhdCB3 ZSBub3cgZXhwbGljaXRseSBub3RlIAo+IHRoYXQgYW1kZ3B1IGFsd2F5cyBuZWVkcyBiaWRpcmVj dGlvbmFsIG1hcHBpbmdzLgo+IAo+IEkgYWdyZWUgdGhhdCB3ZSBzaG91bGQgZ2V0IHJpZCBvZiB0 aGlzIGNhY2hpbmcgYXMgc29vbiBhcyBwb3NzaWJsZSwgYnV0IAo+IHdlIHNob3VsZCBub3QgZml4 IHRoaW5ncyB3aGljaCB3aGVyZSBicm9rZW4gYmVmb3JlLgo+IAo+IE9uIHRoZSBvdGhlciBoYW5k IGFkZGluZyBkbWFfc2dfc3luY19mb3JfY3B1L2RldmljZSBzb3VuZHMgbGlrZSAKPiBzb21ldGhp bmcgd2UgY291bGQgZWFzaWx5IGFkZCBzZXBhcmF0ZWx5IHRvIHRoZSBjYWNoaW5nIGlmIHlvdSB0 aGluayAKPiB0aGF0IHRoaXMgd2lsbCBoZWxwLgoKVGhlIGN1cnJlbnQgY29kZSBtYXliZSBsYWNr cyBzb21lIGNhY2hlIGZsdXNoZXMsIGJ1dCB3ZSBhbHJlYWR5IHJlcXVpcmUgYQpmaXhlZCBkaXJl Y3Rpb24gcGVyIGF0dGFjaG1lbnQuIFNvIEkgZ3Vlc3Mgbm90IGEgcmVhbCBwcm9ibGVtLCBwcm9i YWJseS4KCkJ1dCB3aXRoIHlvdXIgcGF0Y2hlcyBJIHRoaW5rIHdlIG5vdyBmYWlsIHdpdGggRUJV U1kuIE5vdCBleGFjdGx5IG5pY2UgLi4uCi1EYW5pZWwKCj4gCj4gQ2hyaXN0aWFuLgo+IAo+ID4g LURhbmllbAo+ID4KPiA+PiBSZWdhcmRzLAo+ID4+IENocmlzdGlhbi4KPiA+Pgo+ID4+PiBUaGUg b3RoZXIgaXNzdWUgd2l0aCAid2Ugc29sdmUgdGhpcyB3aXRoIGNhY2hpbmcgdGhlIG1hcHBpbmci OiBDdXJyZW50bHkKPiA+Pj4gbWFwL3VubWFwIGZsdXNoIChhdCBsZWFzdCBvbiBhcm0sIGF0IGxl YXN0IG9uIGNhc2VzIHdoZXJlIGl0IG1hdHRlcnMpLiBJZgo+ID4+PiB5b3UganVzdCByZXR1cm4g dGhlIGNhY2hlZCBzZywgdGhlbiB3ZSBkb24ndCBkbyB0aGUgZmx1c2hpbmcgYW55bW9yZSwKPiA+ Pj4gd2hpY2ggbWlnaHQgYnJlYWsgaW1wb3J0ZXJzL2V4cG9ydGVycyBpbiBleGFjdGx5IHRoZSBz YW1lIHdheSBhcyBqdXN0Cj4gPj4+IGdpdmluZyB0aGVtIHRoZSB3cm9uZyBtYXBwaW5nLiBUaGVy ZSdzIHplcm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBhIEJJREksCj4gPj4+IFRPX0NQVSwgb3IgVE9f REVWSUNFIG1hcHBpbmcsIHRoZSBvbmx5IHBsYWNlcyB3aGVyZSB0aGlzIG1hdHRlcnMgaXMgZm9y Cj4gPj4+IGNhY2hlIGZsdXNoaW5nLgo+ID4+Pgo+ID4+PiBTbyBoZXJlJ3Mgc29tZXRoaW5nIHRo YXQgY291bGQgYWN0dWFsbHkgd29yazoKPiA+Pj4gLSBXZSBjYWNoZSB0aGUgbWFwcGluZy4KPiA+ Pj4gLSBXZSBjYWNoZSBhIGJpZGlyZWN0aW9uYWwgbWFwcGluZy4KPiA+Pj4gLSBXZSBwdXQgdGhl IHJpZ2h0IGRtYV9zZ19zeW5jX2Zvcl9jcHUvZGV2aWNlIGNhbGxzIGluIHBsYWNlIGZvciBtYXAv dW5tYXAKPiA+Pj4gICAgIHRvIGdpdmUgY3VycmVudCBpbXBvcnRlcnMvZXhwb3J0ZXJzIHRoZSBz YW1lIGJlaGF2aW91ciB0aGV5J3JlIHVzZWQgdG8KPiA+Pj4gICAgIG5vdy4KPiA+Pj4KPiA+Pj4g QW5kIHllcyB0aGUgY2FjaGluZyB3ZSd2ZSBsaWZ0ZWQgbWlnaHQgaGF2ZSBicm9rZW4gc29tZXRo aW5nIHNvbWV3aGVyZQo+ID4+PiBhbHJlYWR5LiBCdXQgZ2VuZXJhbGx5IHlvdSBvbmx5IGhlYXIg YWJvdXQgdGhhdCBsb25nIHRpbWUgYWZ0ZXIgYmVjYXVzZQo+ID4+PiBhcm0gdmVuZG9ycyByb2xs IGZvcndhcmQgb25jZSBldmVyeSBmZXcgeWVhcnMuIE9yIHNvbWV0aGluZyBsaWtlIHRoYXQuCj4g Pj4+IC1EYW5pZWwKPiA+Pj4KPiA+Pj4+PiBSZWdhcmRzLAo+ID4+Pj4+IENocmlzdGlhbi4KPiA+ Pj4+Pgo+ID4+Pj4+PiBUaGF0J3Mgd2h5IHlvdXIgcHJldmlvdXMgdmVyc2lvbiBtb3ZlZCB0aGUg Y2FjaGluZyBpbnRvCj4gPj4+Pj4+IG1hcC91bm1hcF9zZywgd2hpY2ggcmVzdXJyZWN0ZWQgdGhl IGxvY2tpbmcgaHlkcmEuCj4gPj4+Pj4+Cj4gPj4+Pj4+IEkgdGhpbmsgd2UncmUgZ29pbmcgYSBi aXQgaW4gY2lyY2xlcyBoZXJlLCBhbmQgSSBkb24ndCBoYXZlIGEgZ29vZCBpZGVhCj4gPj4+Pj4+ IGVpdGhlciA6LS8KPiA+Pj4+Pj4gLURhbmllbAo+ID4+Pj4+Pgo+ID4+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgIGlmICghc2d0KQo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2d0ID0g RVJSX1BUUigtRU5PTUVNKTsKPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoSVNfRVJSKHNn dCkpIHsKPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IFBUUl9FUlIoc2d0 KTsKPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX3VubG9jazsKPiA+ Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGRt YV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkbWFfcmVzdl91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ID4+Pj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIGF0dGFjaC0+c2d0ID0gc2d0Owo+ID4+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgIGF0dGFjaC0+ZGlyID0gRE1BX0JJRElSRUNUSU9OQUw7Cj4gPj4+Pj4+PiArwqDCoMKg IH0KPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCByZXR1cm4gYXR0YWNoOwo+ID4+ Pj4+Pj4gICDCoCDCoCBlcnJfYXR0YWNoOgo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgIGtmcmVlKGF0 dGFjaCk7Cj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZkbWFidWYtPmxvY2sp Owo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKHJldCk7Cj4gPj4+Pj4+PiAr Cj4gPj4+Pj4+PiArZXJyX3VubG9jazoKPiA+Pj4+Pj4+ICvCoMKgwqAgaWYgKGRtYV9idWZfaXNf ZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZG1hX3Jl c3ZfdW5sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICvC oMKgwqAgZG1hX2J1Zl9kZXRhY2goZG1hYnVmLCBhdHRhY2gpOwo+ID4+Pj4+Pj4gK8KgwqDCoCBy ZXR1cm4gRVJSX1BUUihyZXQpOwo+ID4+Pj4+Pj4gK30KPiA+Pj4+Pj4+ICtFWFBPUlRfU1lNQk9M X0dQTChkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKTsKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICsvKioK PiA+Pj4+Pj4+ICsgKiBkbWFfYnVmX2F0dGFjaCAtIFdyYXBwZXIgZm9yIGRtYV9idWZfZHluYW1p Y19hdHRhY2gKPiA+Pj4+Pj4+ICsgKiBAZG1hYnVmOsKgwqDCoCBbaW5dwqDCoMKgIGJ1ZmZlciB0 byBhdHRhY2ggZGV2aWNlIHRvLgo+ID4+Pj4+Pj4gKyAqIEBkZXY6wqDCoMKgIFtpbl3CoMKgwqAg ZGV2aWNlIHRvIGJlIGF0dGFjaGVkLgo+ID4+Pj4+Pj4gKyAqCj4gPj4+Pj4+PiArICogV3JhcHBl ciB0byBjYWxsIGRtYV9idWZfZHluYW1pY19hdHRhY2goKSBmb3IgZHJpdmVycyB3aGljaAo+ID4+ Pj4+Pj4gc3RpbGwgdXNlIGEgc3RhdGljCj4gPj4+Pj4+PiArICogbWFwcGluZy4KPiA+Pj4+Pj4+ ICsgKi8KPiA+Pj4+Pj4+ICtzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFfYnVmX2F0dGFj aChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPj4+Pj4+PiArewo+ ID4+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gZG1hX2J1Zl9keW5hbWljX2F0dGFjaChkbWFidWYsIGRl diwgZmFsc2UpOwo+ID4+Pj4+Pj4gICDCoCB9Cj4gPj4+Pj4+PiAgIMKgIEVYUE9SVF9TWU1CT0xf R1BMKGRtYV9idWZfYXR0YWNoKTsKPiA+Pj4+Pj4+ICAgwqAgQEAgLTcxMSwxMSArNzY2LDIwIEBA IHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYKPiA+Pj4+Pj4+ICpkbWFidWYsIHN0 cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCBp ZiAoV0FSTl9PTighZG1hYnVmIHx8ICFhdHRhY2gpKQo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuOwo+ID4+Pj4+Pj4gICDCoCAtwqDCoMKgIGlmIChhdHRhY2gtPnNndCkKPiA+ Pj4+Pj4+ICvCoMKgwqAgaWYgKGF0dGFjaC0+c2d0KSB7Cj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKg wqAgaWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gPj4+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfcmVzdl9sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2LCBO VUxMKTsKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYWJ1Zi0+ b3BzLT51bm1hcF9kbWFfYnVmKGF0dGFjaCwgYXR0YWNoLT5zZ3QsIGF0dGFjaC0+ZGlyKTsKPiA+ Pj4+Pj4+ICAgwqAgK8KgwqDCoMKgwqDCoMKgIGlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNo LT5kbWFidWYpKQo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5s b2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiA+Pj4+Pj4+ICvCoMKgwqAgfQo+ID4+Pj4+Pj4g Kwo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgIG11dGV4X2xvY2soJmRtYWJ1Zi0+bG9jayk7Cj4gPj4+ Pj4+PiArwqDCoMKgIGRtYV9yZXN2X2xvY2soZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiA+Pj4+Pj4+ ICAgwqDCoMKgwqDCoCBsaXN0X2RlbCgmYXR0YWNoLT5ub2RlKTsKPiA+Pj4+Pj4+ICvCoMKgwqAg ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0+cmVzdik7Cj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqAgaWYg KGRtYWJ1Zi0+b3BzLT5kZXRhY2gpCj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFi dWYtPm9wcy0+ZGV0YWNoKGRtYWJ1ZiwgYXR0YWNoKTsKPiA+Pj4+Pj4+ICAgwqAgQEAgLTc0OSw2 ICs4MTMsOSBAQCBzdHJ1Y3Qgc2dfdGFibGUKPiA+Pj4+Pj4+ICpkbWFfYnVmX21hcF9hdHRhY2ht ZW50KHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKPiA+Pj4+Pj4+ICAgwqDCoMKg wqDCoCBpZiAoV0FSTl9PTighYXR0YWNoIHx8ICFhdHRhY2gtPmRtYWJ1ZikpCj4gPj4+Pj4+PiAg IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+Pj4+Pj4+ICAg wqAgK8KgwqDCoCBpZiAoZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoYXR0YWNoKSkKPiA+ Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFfcmVzdl9hc3NlcnRfaGVsZChhdHRhY2gtPmRtYWJ1 Zi0+cmVzdik7Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqAgaWYgKGF0dGFjaC0+ c2d0KSB7Cj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+ID4+Pj4+Pj4gICDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqIFR3byBtYXBwaW5ncyB3aXRoIGRpZmZlcmVudCBkaXJlY3Rpb25z IGZvciB0aGUgc2FtZQo+ID4+Pj4+Pj4gQEAgLTc2MSw2ICs4MjgsOSBAQCBzdHJ1Y3Qgc2dfdGFi bGUKPiA+Pj4+Pj4+ICpkbWFfYnVmX21hcF9hdHRhY2htZW50KHN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmF0dGFjaCwKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBhdHRh Y2gtPnNndDsKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCB9Cj4gPj4+Pj4+PiAgIMKgICvCoMKgwqAg aWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gPj4+Pj4+PiArwqDCoMKg wqDCoMKgwqAgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ID4+ Pj4+Pj4gKwo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgIHNnX3RhYmxlID0gYXR0YWNoLT5kbWFidWYt Pm9wcy0+bWFwX2RtYV9idWYoYXR0YWNoLCBkaXJlY3Rpb24pOwo+ID4+Pj4+Pj4gICDCoMKgwqDC oMKgIGlmICghc2dfdGFibGUpCj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqDCoMKgwqDCoCBzZ190YWJs ZSA9IEVSUl9QVFIoLUVOT01FTSk7Cj4gPj4+Pj4+PiBAQCAtNzkzLDkgKzg2MywxNSBAQCB2b2lk IGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChzdHJ1Y3QKPiA+Pj4+Pj4+IGRtYV9idWZfYXR0YWNo bWVudCAqYXR0YWNoLAo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgIGlmIChXQVJOX09OKCFhdHRhY2gg fHwgIWF0dGFjaC0+ZG1hYnVmIHx8ICFzZ190YWJsZSkpCj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm47Cj4gPj4+Pj4+PiAgIMKgICvCoMKgwqAgaWYgKGRtYV9idWZfYXR0YWNo bWVudF9pc19keW5hbWljKGF0dGFjaCkpCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZG1hX3Jl c3ZfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ID4+Pj4+Pj4gKwo+ID4+Pj4+ Pj4gICDCoMKgwqDCoMKgIGlmIChhdHRhY2gtPnNndCA9PSBzZ190YWJsZSkKPiA+Pj4+Pj4+ICAg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPiA+Pj4+Pj4+ICAgwqAgK8KgwqDCoCBpZiAoZG1h X2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkKPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCBkbWFfcmVzdl9hc3NlcnRfaGVsZChhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gPj4+Pj4+PiAr Cj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqAgYXR0YWNoLT5kbWFidWYtPm9wcy0+dW5tYXBfZG1hX2J1 ZihhdHRhY2gsIHNnX3RhYmxlLCBkaXJlY3Rpb24pOwo+ID4+Pj4+Pj4gICDCoCB9Cj4gPj4+Pj4+ PiAgIMKgIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfdW5tYXBfYXR0YWNobWVudCk7Cj4gPj4+ Pj4+PiBAQCAtMTIxOSwxMCArMTI5NSwxMiBAQCBzdGF0aWMgaW50IGRtYV9idWZfZGVidWdfc2hv dyhzdHJ1Y3QKPiA+Pj4+Pj4+IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCj4gPj4+Pj4+PiAg IMKgwqDCoMKgwqDCoMKgwqDCoCBzZXFfcHV0cyhzLCAiXHRBdHRhY2hlZCBEZXZpY2VzOlxuIik7 Cj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqDCoMKgwqDCoCBhdHRhY2hfY291bnQgPSAwOwo+ID4+Pj4+ Pj4gICDCoCArwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfbG9jayhidWZfb2JqLT5yZXN2LCBOVUxM KTsKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoYXR0 YWNoX29iaiwgJmJ1Zl9vYmotPmF0dGFjaG1lbnRzLAo+ID4+Pj4+Pj4gbm9kZSkgewo+ID4+Pj4+ Pj4gICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZXFfcHJpbnRmKHMsICJcdCVzXG4iLCBk ZXZfbmFtZShhdHRhY2hfb2JqLT5kZXYpKTsKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYXR0YWNoX2NvdW50Kys7Cj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqDCoMKgwqDCoCB9 Cj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5sb2NrKGJ1Zl9vYmotPnJlc3Yp Owo+ID4+Pj4+Pj4gICDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgc2VxX3ByaW50ZihzLCAiVG90YWwg JWQgZGV2aWNlcyBhdHRhY2hlZFxuXG4iLAo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGF0dGFjaF9jb3VudCk7Cj4gPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAo+ID4+Pj4+Pj4g aW5kZXggZWMyMTJjYjI3ZmRjLi5hOGY4YjJiODEyZmQgMTAwNjQ0Cj4gPj4+Pj4+PiAtLS0gYS9p bmNsdWRlL2xpbnV4L2RtYS1idWYuaAo+ID4+Pj4+Pj4gKysrIGIvaW5jbHVkZS9saW51eC9kbWEt YnVmLmgKPiA+Pj4+Pj4+IEBAIC00Miw2ICs0MiwxNyBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewo+ ID4+Pj4+Pj4gICDCoMKgwqDCoMKgwqDCoCAqLwo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgIGJvb2wg Y2FjaGVfc2d0X21hcHBpbmc7Cj4gPj4+Pj4+PiAgIMKgICvCoMKgwqAgLyoqCj4gPj4+Pj4+PiAr wqDCoMKgwqAgKiBAZHluYW1pY19tYXBwaW5nOgo+ID4+Pj4+Pj4gK8KgwqDCoMKgICoKPiA+Pj4+ Pj4+ICvCoMKgwqDCoCAqIElmIHRydWUgdGhlIGZyYW1ld29yayBtYWtlcyBzdXJlIHRoYXQgdGhl IG1hcC91bm1hcF9kbWFfYnVmCj4gPj4+Pj4+PiArwqDCoMKgwqAgKiBjYWxsYmFja3MgYXJlIGFs d2F5cyBjYWxsZWQgd2l0aCB0aGUgZG1hX3Jlc3Ygb2JqZWN0IGxvY2tlZC4KPiA+Pj4+Pj4+ICvC oMKgwqDCoCAqCj4gPj4+Pj4+PiArwqDCoMKgwqAgKiBJZiBmYWxzZSB0aGUgZnJhbWV3b3JrIG1h a2VzIHVyZSB0aGF0IHRoZSBtYXAvdW5tYXBfZG1hX2J1Zgo+ID4+Pj4+Pj4gK8KgwqDCoMKgICog Y2FsbGJhY2tzIGFyZSBhbHdheXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRtYV9yZXN2IG9iamVjdCBs b2NrZWQuCj4gPj4+Pj4+PiArwqDCoMKgwqAgKi8KPiA+Pj4+Pj4+ICvCoMKgwqAgYm9vbCBkeW5h bWljX21hcHBpbmc7Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqAgLyoqCj4gPj4+ Pj4+PiAgIMKgwqDCoMKgwqDCoCAqIEBhdHRhY2g6Cj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqDCoCAq Cj4gPj4+Pj4+PiBAQCAtMTA5LDYgKzEyMCw5IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7Cj4gPj4+ Pj4+PiAgIMKgwqDCoMKgwqDCoCAqIGFueSBvdGhlciBraW5kIG9mIHNoYXJpbmcgdGhhdCB0aGUg ZXhwb3J0ZXIgbWlnaHQgd2lzaCB0byBtYWtlCj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqDCoCAqIGF2 YWlsYWJsZSB0byBidWZmZXItdXNlcnMuCj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqDCoCAqCj4gPj4+ Pj4+PiArwqDCoMKgwqAgKiBUaGlzIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgZG1hYnVmLT5y ZXN2IG9iamVjdCBsb2NrZWQgd2hlbgo+ID4+Pj4+Pj4gK8KgwqDCoMKgICogdGhlIGR5bmFtaWNf bWFwcGluZyBmbGFnIGlzIHRydWUuCj4gPj4+Pj4+PiArwqDCoMKgwqAgKgo+ID4+Pj4+Pj4gICDC oMKgwqDCoMKgwqAgKiBSZXR1cm5zOgo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgwqAgKgo+ID4+Pj4+ Pj4gICDCoMKgwqDCoMKgwqAgKiBBICZzZ190YWJsZSBzY2F0dGVyIGxpc3Qgb2Ygb3IgdGhlIGJh Y2tpbmcgc3RvcmFnZSBvZgo+ID4+Pj4+Pj4gdGhlIERNQSBidWZmZXIsCj4gPj4+Pj4+PiBAQCAt MzI3LDYgKzM0MSw4IEBAIHN0cnVjdCBkbWFfYnVmIHsKPiA+Pj4+Pj4+ICAgwqDCoCAqIEBzZ3Q6 IGNhY2hlZCBtYXBwaW5nLgo+ID4+Pj4+Pj4gICDCoMKgICogQGRpcjogZGlyZWN0aW9uIG9mIGNh Y2hlZCBtYXBwaW5nLgo+ID4+Pj4+Pj4gICDCoMKgICogQHByaXY6IGV4cG9ydGVyIHNwZWNpZmlj IGF0dGFjaG1lbnQgZGF0YS4KPiA+Pj4+Pj4+ICsgKiBAZHluYW1pY19tYXBwaW5nOiB0cnVlIGlm IGRtYV9idWZfbWFwL3VubWFwX2F0dGFjaG1lbnQoKSBpcwo+ID4+Pj4+Pj4gY2FsbGVkIHdpdGgg dGhlCj4gPj4+Pj4+PiArICogZG1hX3Jlc3YgbG9jayBoZWxkLgo+ID4+Pj4+Pj4gICDCoMKgICoK PiA+Pj4+Pj4+ICAgwqDCoCAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBhdHRhY2htZW50IGlu Zm9ybWF0aW9uIGJldHdlZW4gdGhlCj4gPj4+Pj4+PiBkbWFfYnVmIGJ1ZmZlcgo+ID4+Pj4+Pj4g ICDCoMKgICogYW5kIGl0cyB1c2VyIGRldmljZShzKS4gVGhlIGxpc3QgY29udGFpbnMgb25lIGF0 dGFjaG1lbnQKPiA+Pj4+Pj4+IHN0cnVjdCBwZXIgZGV2aWNlCj4gPj4+Pj4+PiBAQCAtMzQzLDYg KzM1OSw3IEBAIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgewo+ID4+Pj4+Pj4gICDCoMKgwqDC oMKgIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCBzdHJ1Y3Qg c2dfdGFibGUgKnNndDsKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCBlbnVtIGRtYV9kYXRhX2RpcmVj dGlvbiBkaXI7Cj4gPj4+Pj4+PiArwqDCoMKgIGJvb2wgZHluYW1pY19tYXBwaW5nOwo+ID4+Pj4+ Pj4gICDCoMKgwqDCoMKgIHZvaWQgKnByaXY7Cj4gPj4+Pj4+PiAgIMKgIH07Cj4gPj4+Pj4+PiAg IMKgIEBAIC0zOTQsMTAgKzQxMSwzOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2RtYV9idWYo c3RydWN0Cj4gPj4+Pj4+PiBkbWFfYnVmICpkbWFidWYpCj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqAg Z2V0X2ZpbGUoZG1hYnVmLT5maWxlKTsKPiA+Pj4+Pj4+ICAgwqAgfQo+ID4+Pj4+Pj4gICDCoCAr LyoqCj4gPj4+Pj4+PiArICogZG1hX2J1Zl9pc19keW5hbWljIC0gY2hlY2sgaWYgYSBETUEtYnVm IHVzZXMgZHluYW1pYyBtYXBwaW5ncy4KPiA+Pj4+Pj4+ICsgKiBAZG1hYnVmOiB0aGUgRE1BLWJ1 ZiB0byBjaGVjawo+ID4+Pj4+Pj4gKyAqCj4gPj4+Pj4+PiArICogUmV0dXJucyB0cnVlIGlmIGEg RE1BLWJ1ZiBleHBvcnRlciB3YW50cyB0byBiZSBjYWxsZWQgd2l0aAo+ID4+Pj4+Pj4gdGhlIGRt YV9yZXN2Cj4gPj4+Pj4+PiArICogbG9ja2VkLCBmYWxzZSBpZiBpdCBkb2Vzbid0IHdhbnRzIHRv IGJlIGNhbGxlZCB3aXRoIHRoZSBsb2NrIGhlbGQuCj4gPj4+Pj4+PiArICovCj4gPj4+Pj4+PiAr c3RhdGljIGlubGluZSBib29sIGRtYV9idWZfaXNfZHluYW1pYyhzdHJ1Y3QgZG1hX2J1ZiAqZG1h YnVmKQo+ID4+Pj4+Pj4gK3sKPiA+Pj4+Pj4+ICvCoMKgwqAgcmV0dXJuIGRtYWJ1Zi0+b3BzLT5k eW5hbWljX21hcHBpbmc7Cj4gPj4+Pj4+PiArfQo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gKy8qKgo+ ID4+Pj4+Pj4gKyAqIGRtYV9idWZfYXR0YWNobWVudF9pc19keW5hbWljIC0gY2hlY2sgaWYgYSBE TUEtYnVmCj4gPj4+Pj4+PiBhdHRhY2htZW50IHVzZXMgZHluYW1pYwo+ID4+Pj4+Pj4gKyAqIG1h cHBpbnNnCj4gPj4+Pj4+PiArICogQGF0dGFjaDogdGhlIERNQS1idWYgYXR0YWNobWVudCB0byBj aGVjawo+ID4+Pj4+Pj4gKyAqCj4gPj4+Pj4+PiArICogUmV0dXJucyB0cnVlIGlmIGEgRE1BLWJ1 ZiBpbXBvcnRlciB3YW50cyB0byBjYWxsIHRoZQo+ID4+Pj4+Pj4gbWFwL3VubWFwIGZ1bmN0aW9u cyB3aXRoCj4gPj4+Pj4+PiArICogdGhlIGRtYV9yZXN2IGxvY2sgaGVsZC4KPiA+Pj4+Pj4+ICsg Ki8KPiA+Pj4+Pj4+ICtzdGF0aWMgaW5saW5lIGJvb2wKPiA+Pj4+Pj4+ICtkbWFfYnVmX2F0dGFj aG1lbnRfaXNfZHluYW1pYyhzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCj4gPj4+ Pj4+PiArewo+ID4+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gYXR0YWNoLT5keW5hbWljX21hcHBpbmc7 Cj4gPj4+Pj4+PiArfQo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gICDCoCBzdHJ1Y3QgZG1hX2J1Zl9h dHRhY2htZW50ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAo+ID4+Pj4+ Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4+Pj4+Pj4gK3N0cnVj dCBkbWFfYnVmX2F0dGFjaG1lbnQgKgo+ID4+Pj4+Pj4gK2RtYV9idWZfZHluYW1pY19hdHRhY2go c3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAo+ID4+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCBkeW5hbWljX21hcHBpbmcpOwo+ID4+Pj4+ Pj4gICDCoCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gPj4+ Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmRtYWJ1Zl9hdHRhY2gpOwo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKPiA+Pj4+Pj4+ICAgwqAgwqAgc3Ry dWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdAo+ID4+Pj4+Pj4gZG1hX2J1 Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pOwo+ID4+Pj4+Pj4gICDCoCBAQCAtNDA5LDYgKzQ1NSw3 IEBAIHN0cnVjdCBzZ190YWJsZQo+ID4+Pj4+Pj4gKmRtYV9idWZfbWFwX2F0dGFjaG1lbnQoc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqLAo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwo+ID4+Pj4+ Pj4gICDCoCB2b2lkIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICosCj4gPj4+Pj4+PiBzdHJ1Y3Qgc2dfdGFibGUgKiwKPiA+Pj4+Pj4+ICAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7Cj4g Pj4+Pj4+PiArdm9pZCBkbWFfYnVmX21vdmVfbm90aWZ5KHN0cnVjdCBkbWFfYnVmICpkbWFfYnVm KTsKPiA+Pj4+Pj4+ICAgwqAgaW50IGRtYV9idWZfYmVnaW5fY3B1X2FjY2VzcyhzdHJ1Y3QgZG1h X2J1ZiAqZG1hX2J1ZiwKPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7Cj4gPj4+Pj4+PiAgIMKgIGludCBk bWFfYnVmX2VuZF9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAo+ID4+Pj4+Pj4g LS0gCj4gPj4+Pj4+PiAyLjE3LjEKPiA+Pj4+Pj4+Cj4gCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0 d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4