From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ralph Campbell Subject: Re: [PATCH 1/9] mm: turn migrate_vma upside down Date: Tue, 30 Jul 2019 18:46:25 -0700 Message-ID: <33b82c28-74be-8767-08fa-e41516d11c7e@nvidia.com> References: <20190729142843.22320-1-hch@lst.de> <20190729142843.22320-2-hch@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190729142843.22320-2-hch-jcswGhMUV9g@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Christoph Hellwig , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , Jason Gunthorpe , Ben Skeggs Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Bharata B Rao , linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, Andrew Morton List-Id: dri-devel@lists.freedesktop.org Ck9uIDcvMjkvMTkgNzoyOCBBTSwgQ2hyaXN0b3BoIEhlbGx3aWcgd3JvdGU6Cj4gVGhlcmUgaXNu J3QgYW55IGdvb2QgcmVhc29uIHRvIHBhc3MgY2FsbGJhY2tzIHRvIG1pZ3JhdGVfdm1hLiAgSW5z dGVhZAo+IHdlIGNhbiBqdXN0IGV4cG9ydCB0aGUgdGhyZWUgc3RlcHMgZG9uZSBieSB0aGlzIGZ1 bmN0aW9uIHRvIGRyaXZlcnMgYW5kCj4gbGV0IHRoZW0gc2VxdWVuY2UgdGhlIG9wZXJhdGlvbiB3 aXRob3V0IGNhbGxiYWNrcy4gIFRoaXMgcmVtb3ZlcyBhIGxvdAo+IG9mIGJvaWxlcnBsYXRlIGNv ZGUgYXMtaXMsIGFuZCB3aWxsIGFsbG93IHRoZSBkcml2ZXJzIHRvIGRyYXN0aWNhbGx5Cj4gaW1w cm92ZSBjb2RlIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGZ1cnRoZXIgb24uCj4gCj4gU2lnbmVk LW9mZi1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+Cj4gLS0tCj4gICBEb2N1bWVu dGF0aW9uL3ZtL2htbS5yc3QgICAgICAgICAgICAgICB8ICA1NSArLS0tLS0KPiAgIGRyaXZlcnMv Z3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jIHwgMTIyICsrKysrKystLS0tLS0KPiAgIGlu Y2x1ZGUvbGludXgvbWlncmF0ZS5oICAgICAgICAgICAgICAgIHwgMTE4ICsrLS0tLS0tLS0tLQo+ ICAgbW0vbWlncmF0ZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNDIgKysrKysrKysr KystLS0tLS0tLS0tLS0tLQo+ICAgNCBmaWxlcyBjaGFuZ2VkLCAxOTMgaW5zZXJ0aW9ucygrKSwg MzQ0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2htbS5y c3QgYi9Eb2N1bWVudGF0aW9uL3ZtL2htbS5yc3QKPiBpbmRleCBkZGNiNWNhOGIyOTYuLmFkODgw ZTM5OTZiMSAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL2htbS5yc3QKPiArKysgYi9E b2N1bWVudGF0aW9uL3ZtL2htbS5yc3QKPiBAQCAtMzM5LDU4ICszMzksOSBAQCBNaWdyYXRpb24g dG8gYW5kIGZyb20gZGV2aWNlIG1lbW9yeQo+ICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KPiAgIAo+ICAgQmVjYXVzZSB0aGUgQ1BVIGNhbm5vdCBhY2Nlc3MgZGV2aWNlIG1l bW9yeSwgbWlncmF0aW9uIG11c3QgdXNlIHRoZSBkZXZpY2UgRE1BCj4gLWVuZ2luZSB0byBwZXJm b3JtIGNvcHkgZnJvbSBhbmQgdG8gZGV2aWNlIG1lbW9yeS4gRm9yIHRoaXMgd2UgbmVlZCBhIG5l dwo+IC1taWdyYXRpb24gaGVscGVyOjoKPiAtCj4gLSBpbnQgbWlncmF0ZV92bWEoY29uc3Qgc3Ry dWN0IG1pZ3JhdGVfdm1hX29wcyAqb3BzLAo+IC0gICAgICAgICAgICAgICAgIHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqdm1hLAo+IC0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWVudHJp ZXMsCj4gLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKPiAtICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwKPiAtICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs b25nICpzcmMsCj4gLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqZHN0LAo+IC0gICAg ICAgICAgICAgICAgIHZvaWQgKnByaXZhdGUpOwo+IC0KPiAtVW5saWtlIG90aGVyIG1pZ3JhdGlv biBmdW5jdGlvbnMgaXQgd29ya3Mgb24gYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3MsIHRoZXJl Cj4gLWFyZSB0d28gcmVhc29ucyBmb3IgdGhhdC4gRmlyc3QsIGRldmljZSBETUEgY29weSBoYXMg YSBoaWdoIHNldHVwIG92ZXJoZWFkIGNvc3QKPiAtYW5kIHRodXMgYmF0Y2hpbmcgbXVsdGlwbGUg cGFnZXMgaXMgbmVlZGVkIGFzIG90aGVyd2lzZSB0aGUgbWlncmF0aW9uIG92ZXJoZWFkCj4gLW1h a2VzIHRoZSB3aG9sZSBleGVyY2lzZSBwb2ludGxlc3MuIFRoZSBzZWNvbmQgcmVhc29uIGlzIGJl Y2F1c2UgdGhlCj4gLW1pZ3JhdGlvbiBtaWdodCBiZSBmb3IgYSByYW5nZSBvZiBhZGRyZXNzZXMg dGhlIGRldmljZSBpcyBhY3RpdmVseSBhY2Nlc3NpbmcuCj4gLQo+IC1UaGUgbWlncmF0ZV92bWFf b3BzIHN0cnVjdCBkZWZpbmVzIHR3byBjYWxsYmFja3MuIEZpcnN0IG9uZSAoYWxsb2NfYW5kX2Nv cHkoKSkKPiAtY29udHJvbHMgZGVzdGluYXRpb24gbWVtb3J5IGFsbG9jYXRpb24gYW5kIGNvcHkg b3BlcmF0aW9uLiBTZWNvbmQgb25lIGlzIHRoZXJlCj4gLXRvIGFsbG93IHRoZSBkZXZpY2UgZHJp dmVyIHRvIHBlcmZvcm0gY2xlYW51cCBvcGVyYXRpb25zIGFmdGVyIG1pZ3JhdGlvbjo6Cj4gLQo+ IC0gc3RydWN0IG1pZ3JhdGVfdm1hX29wcyB7Cj4gLSAgICAgdm9pZCAoKmFsbG9jX2FuZF9jb3B5 KShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgKmRzdCwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBsb25nIGVuZCwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByaXZhdGUp Owo+IC0gICAgIHZvaWQgKCpmaW5hbGl6ZV9hbmRfbWFwKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9u ZyAqc3JjLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBs b25nICpkc3QsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg c3RhcnQsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZW5k LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcml2YXRlKTsKPiAtIH07 Cj4gLQo+IC1JdCBpcyBpbXBvcnRhbnQgdG8gc3RyZXNzIHRoYXQgdGhlc2UgbWlncmF0aW9uIGhl bHBlcnMgYWxsb3cgZm9yIGhvbGVzIGluIHRoZQo+IC12aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuIFNv bWUgcGFnZXMgaW4gdGhlIHJhbmdlIG1pZ2h0IG5vdCBiZSBtaWdyYXRlZCBmb3IgYWxsCj4gLXRo ZSB1c3VhbCByZWFzb25zIChwYWdlIGlzIHBpbm5lZCwgcGFnZSBpcyBsb2NrZWQsIC4uLikuIFRo aXMgaGVscGVyIGRvZXMgbm90Cj4gLWZhaWwgYnV0IGp1c3Qgc2tpcHMgb3ZlciB0aG9zZSBwYWdl cy4KPiAtCj4gLVRoZSBhbGxvY19hbmRfY29weSgpIG1pZ2h0IGRlY2lkZSB0byBub3QgbWlncmF0 ZSBhbGwgcGFnZXMgaW4gdGhlCj4gLXJhbmdlIChmb3IgcmVhc29ucyB1bmRlciB0aGUgY2FsbGJh Y2sgY29udHJvbCkuIEZvciB0aG9zZSwgdGhlIGNhbGxiYWNrIGp1c3QKPiAtaGFzIHRvIGxlYXZl IHRoZSBjb3JyZXNwb25kaW5nIGRzdCBlbnRyeSBlbXB0eS4KPiAtCj4gLUZpbmFsbHksIHRoZSBt aWdyYXRpb24gb2YgdGhlIHN0cnVjdCBwYWdlIG1pZ2h0IGZhaWwgKGZvciBmaWxlIGJhY2tlZCBw YWdlKSBmb3IKPiAtdmFyaW91cyByZWFzb25zIChmYWlsdXJlIHRvIGZyZWV6ZSByZWZlcmVuY2Us IG9yIHVwZGF0ZSBwYWdlIGNhY2hlLCAuLi4pLiBJZgo+IC10aGF0IGhhcHBlbnMsIHRoZW4gdGhl IGZpbmFsaXplX2FuZF9tYXAoKSBjYW4gY2F0Y2ggYW55IHBhZ2VzIHRoYXQgd2VyZSBub3QKPiAt bWlncmF0ZWQuIE5vdGUgdGhvc2UgcGFnZXMgd2VyZSBzdGlsbCBjb3BpZWQgdG8gYSBuZXcgcGFn ZSBhbmQgdGh1cyB3ZSB3YXN0ZWQKPiAtYmFuZHdpZHRoIGJ1dCB0aGlzIGlzIGNvbnNpZGVyZWQg YXMgYSByYXJlIGV2ZW50IGFuZCBhIHByaWNlIHRoYXQgd2UgYXJlCj4gLXdpbGxpbmcgdG8gcGF5 IHRvIGtlZXAgYWxsIHRoZSBjb2RlIHNpbXBsZXIuCj4gK2VuZ2luZSB0byBwZXJmb3JtIGNvcHkg ZnJvbSBhbmQgdG8gZGV2aWNlIG1lbW9yeS4gRm9yIHRoaXMgd2UgbmVlZCBhIG5ldyB0bwo+ICt1 c2UgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVf dm1hX2ZpbmFsaXplKCkKPiAraGVscGVycy4KPiAgIAo+ICAgCj4gICBNZW1vcnkgY2dyb3VwICht ZW1jZykgYW5kIHJzcyBhY2NvdW50aW5nCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9u b3V2ZWF1L25vdXZlYXVfZG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9k bWVtLmMKPiBpbmRleCAzNDVjNjNjYjc1MmEuLjM4NDE2Nzk4YWJkNCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jCj4gQEAgLTEzMSw5ICsxMzEsOCBAQCBub3V2ZWF1 X2RtZW1fZmF1bHRfYWxsb2NfYW5kX2NvcHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCj4g ICAJCQkJICB1bnNpZ25lZCBsb25nICpkc3RfcGZucywKPiAgIAkJCQkgIHVuc2lnbmVkIGxvbmcg c3RhcnQsCj4gICAJCQkJICB1bnNpZ25lZCBsb25nIGVuZCwKPiAtCQkJCSAgdm9pZCAqcHJpdmF0 ZSkKPiArCQkJCSAgc3RydWN0IG5vdXZlYXVfZG1lbV9mYXVsdCAqZmF1bHQpCj4gICB7Cj4gLQlz dHJ1Y3Qgbm91dmVhdV9kbWVtX2ZhdWx0ICpmYXVsdCA9IHByaXZhdGU7Cj4gICAJc3RydWN0IG5v dXZlYXVfZHJtICpkcm0gPSBmYXVsdC0+ZHJtOwo+ICAgCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRy bS0+ZGV2LT5kZXY7Cj4gICAJdW5zaWduZWQgbG9uZyBhZGRyLCBpLCBucGFnZXMgPSAwOwo+IEBA IC0yMzAsMTQgKzIyOSw5IEBAIG5vdXZlYXVfZG1lbV9mYXVsdF9hbGxvY19hbmRfY29weShzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAgIAl9Cj4gICB9Cj4gICAKPiAtdm9pZCBub3V2ZWF1 X2RtZW1fZmF1bHRfZmluYWxpemVfYW5kX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwK PiAtCQkJCQkgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsCj4gLQkJCQkJIGNvbnN0IHVu c2lnbmVkIGxvbmcgKmRzdF9wZm5zLAo+IC0JCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+IC0J CQkJCSB1bnNpZ25lZCBsb25nIGVuZCwKPiAtCQkJCQkgdm9pZCAqcHJpdmF0ZSkKPiArc3RhdGlj IHZvaWQKPiArbm91dmVhdV9kbWVtX2ZhdWx0X2ZpbmFsaXplX2FuZF9tYXAoc3RydWN0IG5vdXZl YXVfZG1lbV9mYXVsdCAqZmF1bHQpCj4gICB7Cj4gLQlzdHJ1Y3Qgbm91dmVhdV9kbWVtX2ZhdWx0 ICpmYXVsdCA9IHByaXZhdGU7Cj4gICAJc3RydWN0IG5vdXZlYXVfZHJtICpkcm0gPSBmYXVsdC0+ ZHJtOwo+ICAgCj4gICAJaWYgKGZhdWx0LT5mZW5jZSkgewo+IEBAIC0yNTcsMjkgKzI1MSwzNSBA QCB2b2lkIG5vdXZlYXVfZG1lbV9mYXVsdF9maW5hbGl6ZV9hbmRfbWFwKHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hLAo+ICAgCWtmcmVlKGZhdWx0LT5kbWEpOwo+ICAgfQo+ICAgCj4gLXN0YXRp YyBjb25zdCBzdHJ1Y3QgbWlncmF0ZV92bWFfb3BzIG5vdXZlYXVfZG1lbV9mYXVsdF9taWdyYXRl X29wcyA9IHsKPiAtCS5hbGxvY19hbmRfY29weQkJPSBub3V2ZWF1X2RtZW1fZmF1bHRfYWxsb2Nf YW5kX2NvcHksCj4gLQkuZmluYWxpemVfYW5kX21hcAk9IG5vdXZlYXVfZG1lbV9mYXVsdF9maW5h bGl6ZV9hbmRfbWFwLAo+IC19Owo+IC0KPiAgIHN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1l bV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKPiAgIHsKPiAgIAlzdHJ1Y3Qg bm91dmVhdV9kbWVtICpkbWVtID0gcGFnZV90b19kbWVtKHZtZi0+cGFnZSk7Cj4gICAJdW5zaWdu ZWQgbG9uZyBzcmNbMV0gPSB7MH0sIGRzdFsxXSA9IHswfTsKPiArCXN0cnVjdCBtaWdyYXRlX3Zt YSBhcmdzID0gewo+ICsJCS52bWEJCT0gdm1mLT52bWEsCj4gKwkJLnN0YXJ0CQk9IHZtZi0+YWRk cmVzcywKPiArCQkuZW5kCQk9IHZtZi0+YWRkcmVzcyArIFBBR0VfU0laRSwKPiArCQkuc3JjCQk9 IHNyYywKPiArCQkuZHN0CQk9IGRzdCwKPiArCX07Cj4gICAJc3RydWN0IG5vdXZlYXVfZG1lbV9m YXVsdCBmYXVsdCA9IHsgLmRybSA9IGRtZW0tPmRybSB9Owo+IC0JaW50IHJldDsKPiAgIAo+ICAg CS8qCj4gICAJICogRklYTUUgd2hhdCB3ZSByZWFsbHkgd2FudCBpcyB0byBmaW5kIHNvbWUgaGV1 cmlzdGljIHRvIG1pZ3JhdGUgbW9yZQo+ICAgCSAqIHRoYW4ganVzdCBvbmUgcGFnZSBvbiBDUFUg ZmF1bHQuIFdoZW4gc3VjaCBmYXVsdCBoYXBwZW5zIGl0IGlzIHZlcnkKPiAgIAkgKiBsaWtlbHkg dGhhdCBtb3JlIHN1cnJvdW5kaW5nIHBhZ2Ugd2lsbCBDUFUgZmF1bHQgdG9vLgo+ICAgCSAqLwo+ IC0JcmV0ID0gbWlncmF0ZV92bWEoJm5vdXZlYXVfZG1lbV9mYXVsdF9taWdyYXRlX29wcywgdm1m LT52bWEsCj4gLQkJCXZtZi0+YWRkcmVzcywgdm1mLT5hZGRyZXNzICsgUEFHRV9TSVpFLAo+IC0J CQlzcmMsIGRzdCwgJmZhdWx0KTsKPiAtCWlmIChyZXQpCj4gKwlpZiAobWlncmF0ZV92bWFfc2V0 dXAoJmFyZ3MpIDwgMCkKPiAgIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKPiArCWlmICghYXJn cy5jcGFnZXMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJbm91dmVhdV9kbWVtX2ZhdWx0X2FsbG9j X2FuZF9jb3B5KGFyZ3Mudm1hLCBzcmMsIGRzdCwgYXJncy5zdGFydCwKPiArCQkJYXJncy5lbmQs ICZmYXVsdCk7Cj4gKwltaWdyYXRlX3ZtYV9wYWdlcygmYXJncyk7Cj4gKwlub3V2ZWF1X2RtZW1f ZmF1bHRfZmluYWxpemVfYW5kX21hcCgmZmF1bHQpOwo+ICAgCj4gKwltaWdyYXRlX3ZtYV9maW5h bGl6ZSgmYXJncyk7Cj4gICAJaWYgKGRzdFswXSA9PSBNSUdSQVRFX1BGTl9FUlJPUikKPiAgIAkJ cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKPiAgIAo+IEBAIC02NDgsOSArNjQ4LDggQEAgbm91dmVh dV9kbWVtX21pZ3JhdGVfYWxsb2NfYW5kX2NvcHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEs Cj4gICAJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLAo+ICAgCQkJCSAgICB1bnNpZ25l ZCBsb25nIHN0YXJ0LAo+ICAgCQkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCwKPiAtCQkJCSAgICB2 b2lkICpwcml2YXRlKQo+ICsJCQkJICAgIHN0cnVjdCBub3V2ZWF1X21pZ3JhdGUgKm1pZ3JhdGUp Cj4gICB7Cj4gLQlzdHJ1Y3Qgbm91dmVhdV9taWdyYXRlICptaWdyYXRlID0gcHJpdmF0ZTsKPiAg IAlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG1pZ3JhdGUtPmRybTsKPiAgIAlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBkcm0tPmRldi0+ZGV2Owo+ICAgCXVuc2lnbmVkIGxvbmcgYWRkciwgaSwgbnBh Z2VzID0gMDsKPiBAQCAtNzQ3LDE0ICs3NDYsOSBAQCBub3V2ZWF1X2RtZW1fbWlncmF0ZV9hbGxv Y19hbmRfY29weShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAgIAl9Cj4gICB9Cj4gICAK PiAtdm9pZCBub3V2ZWF1X2RtZW1fbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqdm1hLAo+IC0JCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyY19wZm5z LAo+IC0JCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLAo+IC0JCQkJCSAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsCj4gLQkJCQkJICAgdW5zaWduZWQgbG9uZyBlbmQsCj4gLQkJCQkJ ICAgdm9pZCAqcHJpdmF0ZSkKPiArc3RhdGljIHZvaWQKPiArbm91dmVhdV9kbWVtX21pZ3JhdGVf ZmluYWxpemVfYW5kX21hcChzdHJ1Y3Qgbm91dmVhdV9taWdyYXRlICptaWdyYXRlKQo+ICAgewo+ IC0Jc3RydWN0IG5vdXZlYXVfbWlncmF0ZSAqbWlncmF0ZSA9IHByaXZhdGU7Cj4gICAJc3RydWN0 IG5vdXZlYXVfZHJtICpkcm0gPSBtaWdyYXRlLT5kcm07Cj4gICAKPiAgIAlpZiAobWlncmF0ZS0+ ZmVuY2UpIHsKPiBAQCAtNzc5LDEwICs3NzMsMTUgQEAgdm9pZCBub3V2ZWF1X2RtZW1fbWlncmF0 ZV9maW5hbGl6ZV9hbmRfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAo+ICAgCSAqLwo+ ICAgfQo+ICAgCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlncmF0ZV92bWFfb3BzIG5vdXZlYXVf ZG1lbV9taWdyYXRlX29wcyA9IHsKPiAtCS5hbGxvY19hbmRfY29weQkJPSBub3V2ZWF1X2RtZW1f bWlncmF0ZV9hbGxvY19hbmRfY29weSwKPiAtCS5maW5hbGl6ZV9hbmRfbWFwCT0gbm91dmVhdV9k bWVtX21pZ3JhdGVfZmluYWxpemVfYW5kX21hcCwKPiAtfTsKPiArc3RhdGljIHZvaWQgbm91dmVh dV9kbWVtX21pZ3JhdGVfY2h1bmsoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzLAo+ICsJCXN0cnVj dCBub3V2ZWF1X21pZ3JhdGUgKm1pZ3JhdGUpCj4gK3sKPiArCW5vdXZlYXVfZG1lbV9taWdyYXRl X2FsbG9jX2FuZF9jb3B5KGFyZ3MtPnZtYSwgYXJncy0+c3JjLCBhcmdzLT5kc3QsCj4gKwkJCWFy Z3MtPnN0YXJ0LCBhcmdzLT5lbmQsIG1pZ3JhdGUpOwo+ICsJbWlncmF0ZV92bWFfcGFnZXMoYXJn cyk7Cj4gKwlub3V2ZWF1X2RtZW1fbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKG1pZ3JhdGUpOwo+ ICsJbWlncmF0ZV92bWFfZmluYWxpemUoYXJncyk7Cj4gK30KPiAgIAo+ICAgaW50Cj4gICBub3V2 ZWF1X2RtZW1fbWlncmF0ZV92bWEoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sCj4gQEAgLTc5MCw0 MCArNzg5LDQ1IEBAIG5vdXZlYXVfZG1lbV9taWdyYXRlX3ZtYShzdHJ1Y3Qgbm91dmVhdV9kcm0g KmRybSwKPiAgIAkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+ICAgCQkJIHVuc2lnbmVkIGxvbmcg ZW5kKQo+ICAgewo+IC0JdW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsICpkc3RfcGZucywgbnBhZ2Vz Owo+IC0Jc3RydWN0IG5vdXZlYXVfbWlncmF0ZSBtaWdyYXRlID0gezB9Owo+IC0JdW5zaWduZWQg bG9uZyBpLCBjLCBtYXg7Cj4gLQlpbnQgcmV0ID0gMDsKPiAtCj4gLQlucGFnZXMgPSAoZW5kIC0g c3RhcnQpID4+IFBBR0VfU0hJRlQ7Cj4gLQltYXggPSBtaW4oU0dfTUFYX1NJTkdMRV9BTExPQywg bnBhZ2VzKTsKPiAtCXNyY19wZm5zID0ga3phbGxvYyhzaXplb2YobG9uZykgKiBtYXgsIEdGUF9L RVJORUwpOwo+IC0JaWYgKHNyY19wZm5zID09IE5VTEwpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4g LQlkc3RfcGZucyA9IGt6YWxsb2Moc2l6ZW9mKGxvbmcpICogbWF4LCBHRlBfS0VSTkVMKTsKPiAt CWlmIChkc3RfcGZucyA9PSBOVUxMKSB7Cj4gLQkJa2ZyZWUoc3JjX3BmbnMpOwo+IC0JCXJldHVy biAtRU5PTUVNOwo+IC0JfQo+ICsJdW5zaWduZWQgbG9uZyBucGFnZXMgPSAoZW5kIC0gc3RhcnQp ID4+IFBBR0VfU0hJRlQ7Cj4gKwl1bnNpZ25lZCBsb25nIG1heCA9IG1pbihTR19NQVhfU0lOR0xF X0FMTE9DLCBucGFnZXMpOwo+ICsJc3RydWN0IG1pZ3JhdGVfdm1hIGFyZ3MgPSB7Cj4gKwkJLnZt YQkJPSB2bWEsCj4gKwkJLnN0YXJ0CQk9IHN0YXJ0LAo+ICsJfTsKPiArCXN0cnVjdCBub3V2ZWF1 X21pZ3JhdGUgbWlncmF0ZSA9IHsKPiArCQkuZHJtCQk9IGRybSwKPiArCQkudm1hCQk9IHZtYSwK PiArCQkubnBhZ2VzCQk9IG5wYWdlcywKPiArCX07Cj4gKwl1bnNpZ25lZCBsb25nIGMsIGk7Cj4g KwlpbnQgcmV0ID0gLUVOT01FTTsKPiArCj4gKwlhcmdzLnNyYyA9IGt6YWxsb2Moc2l6ZW9mKGxv bmcpICogbWF4LCBHRlBfS0VSTkVMKTsKPiArCWlmICghYXJncy5zcmMpCj4gKwkJZ290byBvdXQ7 Cj4gKwlhcmdzLmRzdCA9IGt6YWxsb2Moc2l6ZW9mKGxvbmcpICogbWF4LCBHRlBfS0VSTkVMKTsK PiArCWlmICghYXJncy5kc3QpCj4gKwkJZ290byBvdXRfZnJlZV9zcmM7Cj4gICAKPiAtCW1pZ3Jh dGUuZHJtID0gZHJtOwo+IC0JbWlncmF0ZS52bWEgPSB2bWE7Cj4gLQltaWdyYXRlLm5wYWdlcyA9 IG5wYWdlczsKPiAgIAlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpICs9IGMpIHsKPiAtCQl1bnNp Z25lZCBsb25nIG5leHQ7Cj4gLQo+ICAgCQljID0gbWluKFNHX01BWF9TSU5HTEVfQUxMT0MsIG5w YWdlcyk7Cj4gLQkJbmV4dCA9IHN0YXJ0ICsgKGMgPDwgUEFHRV9TSElGVCk7Cj4gLQkJcmV0ID0g bWlncmF0ZV92bWEoJm5vdXZlYXVfZG1lbV9taWdyYXRlX29wcywgdm1hLCBzdGFydCwKPiAtCQkJ CSAgbmV4dCwgc3JjX3BmbnMsIGRzdF9wZm5zLCAmbWlncmF0ZSk7Cj4gKwkJYXJncy5lbmQgPSBz dGFydCArIChjIDw8IFBBR0VfU0hJRlQpOwoKU2luY2UgbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBj YWxsZWQgaW4gYSBsb29wLCBlaXRoZXIgYXJncy5jcGFnZXMgYW5kCmFyZ3MubnBhZ2VzIG5lZWQg dG8gYmUgY2xlYXJlZCBoZXJlIG9yIGNsZWFyZWQgaW4gbWlncmF0ZV92bWFfc2V0dXAoKS4KCj4g KwkJcmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoJmFyZ3MpOwo+ICAgCQlpZiAocmV0KQo+IC0JCQln b3RvIG91dDsKPiAtCQlzdGFydCA9IG5leHQ7Cj4gKwkJCWdvdG8gb3V0X2ZyZWVfZHN0Owo+ICsK PiArCQlpZiAoYXJncy5jcGFnZXMpCj4gKwkJCW5vdXZlYXVfZG1lbV9taWdyYXRlX2NodW5rKCZh cmdzLCAmbWlncmF0ZSk7Cj4gKwkJYXJncy5zdGFydCA9IGFyZ3MuZW5kOwo+ICAgCX0KPiAgIAo+ ICsJcmV0ID0gMDsKPiArb3V0X2ZyZWVfZHN0Ogo+ICsJa2ZyZWUoYXJncy5kc3QpOwo+ICtvdXRf ZnJlZV9zcmM6Cj4gKwlrZnJlZShhcmdzLnNyYyk7Cj4gICBvdXQ6Cj4gLQlrZnJlZShkc3RfcGZu cyk7Cj4gLQlrZnJlZShzcmNfcGZucyk7Cj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0 ZS5oCj4gaW5kZXggN2YwNDc1NGM3ZjJiLi4wOTNkNjdmY2Y2ZGQgMTAwNjQ0Cj4gLS0tIGEvaW5j bHVkZS9saW51eC9taWdyYXRlLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAo+IEBA IC0xODIsMTA3ICsxODIsMjcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1pZ3JhdGVf cGZuKHVuc2lnbmVkIGxvbmcgcGZuKQo+ICAgCXJldHVybiAocGZuIDw8IE1JR1JBVEVfUEZOX1NI SUZUKSB8IE1JR1JBVEVfUEZOX1ZBTElEOwo+ICAgfQo+ICAgCj4gLS8qCj4gLSAqIHN0cnVjdCBt aWdyYXRlX3ZtYV9vcHMgLSBtaWdyYXRlIG9wZXJhdGlvbiBjYWxsYmFjawo+IC0gKgo+IC0gKiBA YWxsb2NfYW5kX2NvcHk6IGFsbG9jIGRlc3RpbmF0aW9uIG1lbW9yeSBhbmQgY29weSBzb3VyY2Ug bWVtb3J5IHRvIGl0Cj4gLSAqIEBmaW5hbGl6ZV9hbmRfbWFwOiBhbGxvdyBjYWxsZXIgdG8gbWFw IHRoZSBzdWNjZXNzZnVsbHkgbWlncmF0ZWQgcGFnZXMKPiAtICoKPiAtICoKPiAtICogVGhlIGFs bG9jX2FuZF9jb3B5KCkgY2FsbGJhY2sgaGFwcGVucyBvbmNlIGFsbCBzb3VyY2UgcGFnZXMgaGF2 ZSBiZWVuIGxvY2tlZCwKPiAtICogdW5tYXBwZWQgYW5kIGNoZWNrZWQgKGNoZWNrZWQgd2hldGhl ciBwaW5uZWQgb3Igbm90KS4gQWxsIHBhZ2VzIHRoYXQgY2FuIGJlCj4gLSAqIG1pZ3JhdGVkIHdp bGwgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgc3JjIGFycmF5IHNldCB3aXRoIHRoZSBwZm4gdmFsdWUg b2YgdGhlCj4gLSAqIHBhZ2UgYW5kIHdpdGggdGhlIE1JR1JBVEVfUEZOX1ZBTElEIGFuZCBNSUdS QVRFX1BGTl9NSUdSQVRFIGZsYWcgc2V0IChvdGhlcgo+IC0gKiBmbGFncyBtaWdodCBiZSBzZXQg YnV0IHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjYWxsYmFjaykuCj4gLSAqCj4gLSAqIFRoZSBh bGxvY19hbmRfY29weSgpIGNhbGxiYWNrIGNhbiB0aGVuIGFsbG9jYXRlIGRlc3RpbmF0aW9uIG1l bW9yeSBhbmQgY29weQo+IC0gKiBzb3VyY2UgbWVtb3J5IHRvIGl0IGZvciBhbGwgdGhvc2UgZW50 cmllcyAoaWUgd2l0aCBNSUdSQVRFX1BGTl9WQUxJRCBhbmQKPiAtICogTUlHUkFURV9QRk5fTUlH UkFURSBmbGFnIHNldCkuIE9uY2UgdGhlc2UgYXJlIGFsbG9jYXRlZCBhbmQgY29waWVkLCB0aGUK PiAtICogY2FsbGJhY2sgbXVzdCB1cGRhdGUgZWFjaCBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRo ZSBkc3QgYXJyYXkgd2l0aCB0aGUgcGZuCj4gLSAqIHZhbHVlIG9mIHRoZSBkZXN0aW5hdGlvbiBw YWdlIGFuZCB3aXRoIHRoZSBNSUdSQVRFX1BGTl9WQUxJRCBhbmQKPiAtICogTUlHUkFURV9QRk5f TE9DS0VEIGZsYWdzIHNldCAoZGVzdGluYXRpb24gcGFnZXMgbXVzdCBoYXZlIHRoZWlyIHN0cnVj dCBwYWdlcwo+IC0gKiBsb2NrZWQsIHZpYSBsb2NrX3BhZ2UoKSkuCj4gLSAqCj4gLSAqIEF0IHRo aXMgcG9pbnQgdGhlIGFsbG9jX2FuZF9jb3B5KCkgY2FsbGJhY2sgaXMgZG9uZSBhbmQgcmV0dXJu cy4KPiAtICoKPiAtICogTm90ZSB0aGF0IHRoZSBjYWxsYmFjayBkb2VzIG5vdCBoYXZlIHRvIG1p Z3JhdGUgYWxsIHRoZSBwYWdlcyB0aGF0IGFyZQo+IC0gKiBtYXJrZWQgd2l0aCBNSUdSQVRFX1BG Tl9NSUdSQVRFIGZsYWcgaW4gc3JjIGFycmF5IHVubGVzcyB0aGlzIGlzIGEgbWlncmF0aW9uCj4g LSAqIGZyb20gZGV2aWNlIG1lbW9yeSB0byBzeXN0ZW0gbWVtb3J5IChpZSB0aGUgTUlHUkFURV9Q Rk5fREVWSUNFIGZsYWcgaXMgYWxzbwo+IC0gKiBzZXQgaW4gdGhlIHNyYyBhcnJheSBlbnRyeSku IElmIHRoZSBkZXZpY2UgZHJpdmVyIGNhbm5vdCBtaWdyYXRlIGEgZGV2aWNlCj4gLSAqIHBhZ2Ug YmFjayB0byBzeXN0ZW0gbWVtb3J5LCB0aGVuIGl0IG11c3Qgc2V0IHRoZSBjb3JyZXNwb25kaW5n IGRzdCBhcnJheQo+IC0gKiBlbnRyeSB0byBNSUdSQVRFX1BGTl9FUlJPUi4gVGhpcyB3aWxsIHRy aWdnZXIgYSBTSUdCVVMgaWYgQ1BVIHRyaWVzIHRvCj4gLSAqIGFjY2VzcyBhbnkgb2YgdGhlIHZp cnR1YWwgYWRkcmVzc2VzIG9yaWdpbmFsbHkgYmFja2VkIGJ5IHRoaXMgcGFnZS4gQmVjYXVzZQo+ IC0gKiBhIFNJR0JVUyBpcyBzdWNoIGEgc2V2ZXJlIHJlc3VsdCBmb3IgdGhlIHVzZXJzcGFjZSBw cm9jZXNzLCB0aGUgZGV2aWNlCj4gLSAqIGRyaXZlciBzaG91bGQgYXZvaWQgc2V0dGluZyBNSUdS QVRFX1BGTl9FUlJPUiB1bmxlc3MgaXQgaXMgcmVhbGx5IGluIGFuCj4gLSAqIHVucmVjb3ZlcmFi bGUgc3RhdGUuCj4gLSAqCj4gLSAqIEZvciBlbXB0eSBlbnRyeSBpbnNpZGUgQ1BVIHBhZ2UgdGFi bGUgKHB0ZV9ub25lKCkgb3IgcG1kX25vbmUoKSBpcyB0cnVlKSB3ZQo+IC0gKiBkbyBzZXQgTUlH UkFURV9QRk5fTUlHUkFURSBmbGFnIGluc2lkZSB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgYXJy YXkgdGh1cwo+IC0gKiBhbGxvd2luZyBkZXZpY2UgZHJpdmVyIHRvIGFsbG9jYXRlIGRldmljZSBt ZW1vcnkgZm9yIHRob3NlIHVuYmFjayB2aXJ0dWFsCj4gLSAqIGFkZHJlc3MuIEZvciB0aGlzIHRo ZSBkZXZpY2UgZHJpdmVyIHNpbXBseSBoYXZlIHRvIGFsbG9jYXRlIGRldmljZSBtZW1vcnkKPiAt ICogYW5kIHByb3Blcmx5IHNldCB0aGUgZGVzdGluYXRpb24gZW50cnkgbGlrZSBmb3IgcmVndWxh ciBtaWdyYXRpb24uIE5vdGUgdGhhdAo+IC0gKiB0aGlzIGNhbiBzdGlsbCBmYWlscyBhbmQgdGh1 cyBpbnNpZGUgdGhlIGRldmljZSBkcml2ZXIgbXVzdCBjaGVjayBpZiB0aGUKPiAtICogbWlncmF0 aW9uIHdhcyBzdWNjZXNzZnVsIGZvciB0aG9zZSBlbnRyeSBpbnNpZGUgdGhlIGZpbmFsaXplX2Fu ZF9tYXAoKQo+IC0gKiBjYWxsYmFjayBqdXN0IGxpa2UgZm9yIHJlZ3VsYXIgbWlncmF0aW9uLgo+ IC0gKgo+IC0gKiBUSEUgYWxsb2NfYW5kX2NvcHkoKSBDQUxMQkFDSyBNVVNUIE5PVCBDSEFOR0Ug QU5ZIE9GIFRIRSBTUkMgQVJSQVkgRU5UUklFUwo+IC0gKiBPUiBCQUQgVEhJTkdTIFdJTEwgSEFQ UEVOICEKPiAtICoKPiAtICoKPiAtICogVGhlIGZpbmFsaXplX2FuZF9tYXAoKSBjYWxsYmFjayBo YXBwZW5zIGFmdGVyIHN0cnVjdCBwYWdlIG1pZ3JhdGlvbiBmcm9tCj4gLSAqIHNvdXJjZSB0byBk ZXN0aW5hdGlvbiAoZGVzdGluYXRpb24gc3RydWN0IHBhZ2VzIGFyZSB0aGUgc3RydWN0IHBhZ2Vz IGZvciB0aGUKPiAtICogbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgYWxsb2NfYW5kX2NvcHkoKSBj YWxsYmFjaykuICBNaWdyYXRpb24gY2FuIGZhaWwsIGFuZAo+IC0gKiB0aHVzIHRoZSBmaW5hbGl6 ZV9hbmRfbWFwKCkgYWxsb3dzIHRoZSBkcml2ZXIgdG8gaW5zcGVjdCB3aGljaCBwYWdlcyB3ZXJl Cj4gLSAqIHN1Y2Nlc3NmdWxseSBtaWdyYXRlZCwgYW5kIHdoaWNoIHdlcmUgbm90LiBTdWNjZXNz ZnVsbHkgbWlncmF0ZWQgcGFnZXMgd2lsbAo+IC0gKiBoYXZlIHRoZSBNSUdSQVRFX1BGTl9NSUdS QVRFIGZsYWcgc2V0IGZvciB0aGVpciBzcmMgYXJyYXkgZW50cnkuCj4gLSAqCj4gLSAqIEl0IGlz IHNhZmUgdG8gdXBkYXRlIGRldmljZSBwYWdlIHRhYmxlIGZyb20gd2l0aGluIHRoZSBmaW5hbGl6 ZV9hbmRfbWFwKCkKPiAtICogY2FsbGJhY2sgYmVjYXVzZSBib3RoIGRlc3RpbmF0aW9uIGFuZCBz b3VyY2UgcGFnZSBhcmUgc3RpbGwgbG9ja2VkLCBhbmQgdGhlCj4gLSAqIG1tYXBfc2VtIGlzIGhl bGQgaW4gcmVhZCBtb2RlIChoZW5jZSBubyBvbmUgY2FuIHVubWFwIHRoZSByYW5nZSBiZWluZwo+ IC0gKiBtaWdyYXRlZCkuCj4gLSAqCj4gLSAqIE9uY2UgY2FsbGJhY2sgaXMgZG9uZSBjbGVhbmlu ZyB1cCB0aGluZ3MgYW5kIHVwZGF0aW5nIGl0cyBwYWdlIHRhYmxlIChpZiBpdAo+IC0gKiBjaG9z ZSB0byBkbyBzbywgdGhpcyBpcyBub3QgYW4gb2JsaWdhdGlvbikgdGhlbiBpdCByZXR1cm5zLiBB dCB0aGlzIHBvaW50LAo+IC0gKiB0aGUgSE1NIGNvcmUgd2lsbCBmaW5pc2ggdXAgdGhlIGZpbmFs IHN0ZXBzLCBhbmQgdGhlIG1pZ3JhdGlvbiBpcyBjb21wbGV0ZS4KPiAtICoKPiAtICogVEhFIGZp bmFsaXplX2FuZF9tYXAoKSBDQUxMQkFDSyBNVVNUIE5PVCBDSEFOR0UgQU5ZIE9GIFRIRSBTUkMg T1IgRFNUIEFSUkFZCj4gLSAqIEVOVFJJRVMgT1IgQkFEIFRISU5HUyBXSUxMIEhBUFBFTiAhCj4g LSAqLwo+IC1zdHJ1Y3QgbWlncmF0ZV92bWFfb3BzIHsKPiAtCXZvaWQgKCphbGxvY19hbmRfY29w eSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCj4gLQkJCSAgICAgICBjb25zdCB1bnNpZ25l ZCBsb25nICpzcmMsCj4gLQkJCSAgICAgICB1bnNpZ25lZCBsb25nICpkc3QsCj4gLQkJCSAgICAg ICB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+IC0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsCj4g LQkJCSAgICAgICB2b2lkICpwcml2YXRlKTsKPiAtCXZvaWQgKCpmaW5hbGl6ZV9hbmRfbWFwKShz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAtCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nICpz cmMsCj4gLQkJCQkgY29uc3QgdW5zaWduZWQgbG9uZyAqZHN0LAo+IC0JCQkJIHVuc2lnbmVkIGxv bmcgc3RhcnQsCj4gLQkJCQkgdW5zaWduZWQgbG9uZyBlbmQsCj4gLQkJCQkgdm9pZCAqcHJpdmF0 ZSk7Cj4gK3N0cnVjdCBtaWdyYXRlX3ZtYSB7Cj4gKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJKnZt YTsKPiArIAkvKgo+ICsJICogQm90aCBzcmMgYW5kIGRzdCBhcnJheSBtdXN0IGJlIGJpZyBlbm91 Z2ggZm9yCj4gKwkgKiAoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQgZW50cmllcy4KPiArCSAq Cj4gKwkgKiBUaGUgc3JjIGFycmF5IG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIg YWZ0ZXIKPiArCSAqIG1pZ3JhdGVfdm1hX3NldHVwKCksIGFuZCBtdXN0IG5vdCBjaGFuZ2UgdGhl IGRzdCBhcnJheSBhZnRlcgo+ICsJICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLgo+ICsJ ICovCj4gKwl1bnNpZ25lZCBsb25nCQkqZHN0Owo+ICsJdW5zaWduZWQgbG9uZwkJKnNyYzsKPiAr CXVuc2lnbmVkIGxvbmcJCWNwYWdlczsKPiArCXVuc2lnbmVkIGxvbmcJCW5wYWdlczsKPiArCXVu c2lnbmVkIGxvbmcJCXN0YXJ0Owo+ICsJdW5zaWduZWQgbG9uZwkJZW5kOwo+ICAgfTsKPiAgIAo+ IC0jaWYgZGVmaW5lZChDT05GSUdfTUlHUkFURV9WTUFfSEVMUEVSKQo+IC1pbnQgbWlncmF0ZV92 bWEoY29uc3Qgc3RydWN0IG1pZ3JhdGVfdm1hX29wcyAqb3BzLAo+IC0JCXN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hLAo+IC0JCXVuc2lnbmVkIGxvbmcgc3RhcnQsCj4gLQkJdW5zaWduZWQgbG9u ZyBlbmQsCj4gLQkJdW5zaWduZWQgbG9uZyAqc3JjLAo+IC0JCXVuc2lnbmVkIGxvbmcgKmRzdCwK PiAtCQl2b2lkICpwcml2YXRlKTsKPiAtI2Vsc2UKPiAtc3RhdGljIGlubGluZSBpbnQgbWlncmF0 ZV92bWEoY29uc3Qgc3RydWN0IG1pZ3JhdGVfdm1hX29wcyAqb3BzLAo+IC0JCQkgICAgICBzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAtCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwK PiAtCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsCj4gLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcg KnNyYywKPiAtCQkJICAgICAgdW5zaWduZWQgbG9uZyAqZHN0LAo+IC0JCQkgICAgICB2b2lkICpw cml2YXRlKQo+IC17Cj4gLQlyZXR1cm4gLUVJTlZBTDsKPiAtfQo+IC0jZW5kaWYgLyogSVNfRU5B QkxFRChDT05GSUdfTUlHUkFURV9WTUFfSEVMUEVSKSAqLwo+ICtpbnQgbWlncmF0ZV92bWFfc2V0 dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTsKPiArdm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhz dHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpOwo+ICt2b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXpl KHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7Cj4gICAKPiAgICNlbmRpZiAvKiBDT05GSUdf TUlHUkFUSU9OICovCj4gICAKPiBkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0 ZS5jCj4gaW5kZXggODk5Mjc0MWYxMGFhLi5kYzRlNjBhNDk2ZjIgMTAwNjQ0Cj4gLS0tIGEvbW0v bWlncmF0ZS5jCj4gKysrIGIvbW0vbWlncmF0ZS5jCj4gQEAgLTIxMTgsMTYgKzIxMTgsNiBAQCBp bnQgbWlncmF0ZV9taXNwbGFjZWRfdHJhbnNodWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0s Cj4gICAjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KPiAgIAo+ICAgI2lmIGRlZmluZWQoQ09ORklH X01JR1JBVEVfVk1BX0hFTFBFUikKPiAtc3RydWN0IG1pZ3JhdGVfdm1hIHsKPiAtCXN0cnVjdCB2 bV9hcmVhX3N0cnVjdAkqdm1hOwo+IC0JdW5zaWduZWQgbG9uZwkJKmRzdDsKPiAtCXVuc2lnbmVk IGxvbmcJCSpzcmM7Cj4gLQl1bnNpZ25lZCBsb25nCQljcGFnZXM7Cj4gLQl1bnNpZ25lZCBsb25n CQlucGFnZXM7Cj4gLQl1bnNpZ25lZCBsb25nCQlzdGFydDsKPiAtCXVuc2lnbmVkIGxvbmcJCWVu ZDsKPiAtfTsKPiAtCj4gICBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSh1bnNp Z25lZCBsb25nIHN0YXJ0LAo+ICAgCQkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCwKPiAgIAkJCQkg ICAgc3RydWN0IG1tX3dhbGsgKndhbGspCj4gQEAgLTI1NzgsNiArMjU2OCwxMDggQEAgc3RhdGlj IHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKQo+ICAg CX0KPiAgIH0KPiAgIAo+ICsvKioKPiArICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUg dG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeQo+ICsgKiBAYXJnczogY29udGFpbnMgdGhlIHZt YSwgc3RhcnQsIGFuZCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb24KPiArICoKPiAr ICogUmV0dXJuczogbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZXMsIDAgd2hlbiAwIG9yIG1vcmUg cGFnZXMgd2VyZSBtaWdyYXRlZAo+ICsgKiB3aXRob3V0IGFuIGVycm9yLgo+ICsgKgo+ICsgKiBQ cmVwYXJlIHRvIG1pZ3JhdGUgYSByYW5nZSBvZiBtZW1vcnkgdmlydHVhbCBhZGRyZXNzIHJhbmdl IGJ5IGNvbGxlY3RpbmcgYWxsCj4gKyAqIHRoZSBwYWdlcyBiYWNraW5nIGVhY2ggdmlydHVhbCBh ZGRyZXNzIGluIHRoZSByYW5nZSwgc2F2aW5nIHRoZW0gaW5zaWRlIHRoZQo+ICsgKiBzcmMgYXJy YXkuICBUaGVuIGxvY2sgdGhvc2UgcGFnZXMgYW5kIHVubWFwIHRoZW0uIE9uY2UgdGhlIHBhZ2Vz IGFyZSBsb2NrZWQKPiArICogYW5kIHVubWFwcGVkLCBjaGVjayB3aGV0aGVyIGVhY2ggcGFnZSBp cyBwaW5uZWQgb3Igbm90LiAgUGFnZXMgdGhhdCBhcmVuJ3QKPiArICogcGlubmVkIGhhdmUgdGhl IE1JR1JBVEVfUEZOX01JR1JBVEUgZmxhZyBzZXQgKGJ5IHRoaXMgZnVuY3Rpb24pIGluIHRoZQo+ ICsgKiBjb3JyZXNwb25kaW5nIHNyYyBhcnJheSBlbnRyeS4gIFRoZW4gcmVzdG9yZXMgYW55IHBh Z2VzIHRoYXQgYXJlIHBpbm5lZCwgYnkKPiArICogcmVtYXBwaW5nIGFuZCB1bmxvY2tpbmcgdGhv c2UgcGFnZXMuCj4gKyAqCj4gKyAqIFRoZSBjYWxsZXIgc2hvdWxkIHRoZW4gYWxsb2NhdGUgZGVz dGluYXRpb24gbWVtb3J5IGFuZCBjb3B5IHNvdXJjZSBtZW1vcnkgdG8KPiArICogaXQgZm9yIGFs bCB0aG9zZSBlbnRyaWVzIChpZSB3aXRoIE1JR1JBVEVfUEZOX1ZBTElEIGFuZCBNSUdSQVRFX1BG Tl9NSUdSQVRFCj4gKyAqIGZsYWcgc2V0KS4gIE9uY2UgdGhlc2UgYXJlIGFsbG9jYXRlZCBhbmQg Y29waWVkLCB0aGUgY2FsbGVyIG11c3QgdXBkYXRlIGVhY2gKPiArICogY29ycmVzcG9uZGluZyBl bnRyeSBpbiB0aGUgZHN0IGFycmF5IHdpdGggdGhlIHBmbiB2YWx1ZSBvZiB0aGUgZGVzdGluYXRp b24KPiArICogcGFnZSBhbmQgd2l0aCB0aGUgTUlHUkFURV9QRk5fVkFMSUQgYW5kIE1JR1JBVEVf UEZOX0xPQ0tFRCBmbGFncyBzZXQKPiArICogKGRlc3RpbmF0aW9uIHBhZ2VzIG11c3QgaGF2ZSB0 aGVpciBzdHJ1Y3QgcGFnZXMgbG9ja2VkLCB2aWEgbG9ja19wYWdlKCkpLgo+ICsgKgo+ICsgKiBO b3RlIHRoYXQgdGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIHRvIG1pZ3JhdGUgYWxsIHRoZSBwYWdl cyB0aGF0IGFyZSBtYXJrZWQKPiArICogd2l0aCBNSUdSQVRFX1BGTl9NSUdSQVRFIGZsYWcgaW4g c3JjIGFycmF5IHVubGVzcyB0aGlzIGlzIGEgbWlncmF0aW9uIGZyb20KPiArICogZGV2aWNlIG1l bW9yeSB0byBzeXN0ZW0gbWVtb3J5LiAgSWYgdGhlIGNhbGxlciBjYW5ub3QgbWlncmF0ZSBhIGRl dmljZSBwYWdlCj4gKyAqIGJhY2sgdG8gc3lzdGVtIG1lbW9yeSwgdGhlbiBpdCBtdXN0IHJldHVy biBWTV9GQVVMVF9TSUdCVVMsIHdoaWNoIHdpbGwKPiArICogbWlnaHQgaGF2ZSBzZXZlcmUgY29u c2VxdWVuY2VzIGZvciB0aGUgdXNlcnNwYWNlIHByb2Nlc3MsIHNvIGl0IHNob3VsZCBiZXN0Cj4g KyAqIGJlIGF2b2lkZWQgaWYgcG9zc2libGUuCj4gKyAqCj4gKyAqIEZvciBlbXB0eSBlbnRyaWVz IGluc2lkZSBDUFUgcGFnZSB0YWJsZSAocHRlX25vbmUoKSBvciBwbWRfbm9uZSgpIGlzIHRydWUp IHdlCj4gKyAqIGRvIHNldCBNSUdSQVRFX1BGTl9NSUdSQVRFIGZsYWcgaW5zaWRlIHRoZSBjb3Jy ZXNwb25kaW5nIHNvdXJjZSBhcnJheSB0aHVzCj4gKyAqIGFsbG93aW5nIHRoZSBjYWxsZXIgdG8g YWxsb2NhdGUgZGV2aWNlIG1lbW9yeSBmb3IgdGhvc2UgdW5iYWNrIHZpcnR1YWwKPiArICogYWRk cmVzcy4gIEZvciB0aGlzIHRoZSBjYWxsZXIgc2ltcGx5IGhhdnMgdG8gYWxsb2NhdGUgZGV2aWNl IG1lbW9yeSBhbmQKPiArICogcHJvcGVybHkgc2V0IHRoZSBkZXN0aW5hdGlvbiBlbnRyeSBsaWtl IGZvciByZWd1bGFyIG1pZ3JhdGlvbi4gIE5vdGUgdGhhdAo+ICsgKiB0aGlzIGNhbiBzdGlsbCBm YWlscyBhbmQgdGh1cyBpbnNpZGUgdGhlIGRldmljZSBkcml2ZXIgbXVzdCBjaGVjayBpZiB0aGUK PiArICogbWlncmF0aW9uIHdhcyBzdWNjZXNzZnVsIGZvciB0aG9zZSBlbnRyaWVzIGFmdGVyIGNh bGxpbmcgbWlncmF0ZV92bWFfcGFnZXMoKQo+ICsgKiBqdXN0IGxpa2UgZm9yIHJlZ3VsYXIgbWln cmF0aW9uLgo+ICsgKgo+ICsgKiBBZnRlciB0aGF0LCB0aGUgY2FsbGVycyBtdXN0IGNhbGwgbWln cmF0ZV92bWFfcGFnZXMoKSB0byBnbyBvdmVyIGVhY2ggZW50cnkKPiArICogaW4gdGhlIHNyYyBh cnJheSB0aGF0IGhhcyB0aGUgTUlHUkFURV9QRk5fVkFMSUQgYW5kIE1JR1JBVEVfUEZOX01JR1JB VEUgZmxhZwo+ICsgKiBzZXQuIElmIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIGRzdCBhcnJh eSBoYXMgTUlHUkFURV9QRk5fVkFMSUQgZmxhZyBzZXQsCj4gKyAqIHRoZW4gbWlncmF0ZV92bWFf cGFnZXMoKSB0byBtaWdyYXRlIHN0cnVjdCBwYWdlIGluZm9ybWF0aW9uIGZyb20gdGhlIHNvdXJj ZQo+ICsgKiBzdHJ1Y3QgcGFnZSB0byB0aGUgZGVzdGluYXRpb24gc3RydWN0IHBhZ2UuICBJZiBp dCBmYWlscyB0byBtaWdyYXRlIHRoZQo+ICsgKiBzdHJ1Y3QgcGFnZSBpbmZvcm1hdGlvbiwgdGhl biBpdCBjbGVhcnMgdGhlIE1JR1JBVEVfUEZOX01JR1JBVEUgZmxhZyBpbiB0aGUKPiArICogc3Jj IGFycmF5Lgo+ICsgKgo+ICsgKiBBdCB0aGlzIHBvaW50IGFsbCBzdWNjZXNzZnVsbHkgbWlncmF0 ZWQgcGFnZXMgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgc3JjCj4gKyAqIGFycmF5IHdpdGggTUlHUkFU RV9QRk5fVkFMSUQgYW5kIE1JR1JBVEVfUEZOX01JR1JBVEUgZmxhZyBzZXQgYW5kIHRoZSBkc3QK PiArICogYXJyYXkgZW50cnkgd2l0aCBNSUdSQVRFX1BGTl9WQUxJRCBmbGFnIHNldC4KPiArICoK PiArICogT25jZSBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMgdGhlIGNhbGxlciBtYXkgaW5z cGVjdCB3aGljaCBwYWdlcyB3ZXJlCj4gKyAqIHN1Y2Nlc3NmdWxseSBtaWdyYXRlZCwgYW5kIHdo aWNoIHdlcmUgbm90LiAgU3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkIHBhZ2VzIHdpbGwKPiArICogaGF2 ZSB0aGUgTUlHUkFURV9QRk5fTUlHUkFURSBmbGFnIHNldCBmb3IgdGhlaXIgc3JjIGFycmF5IGVu dHJ5Lgo+ICsgKgo+ICsgKiBJdCBpcyBzYWZlIHRvIHVwZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZSBm cm9tIHdpdGhpbiB0aGUgZmluYWxpemVfYW5kX21hcCgpCj4gKyAqIGNhbGxiYWNrIGJlY2F1c2Ug Ym90aCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIHBhZ2UgYXJlIHN0aWxsIGxvY2tlZCwgYW5kIHRo ZQo+ICsgKiBtbWFwX3NlbSBpcyBoZWxkIGluIHJlYWQgbW9kZSAoaGVuY2Ugbm8gb25lIGNhbiB1 bm1hcCB0aGUgcmFuZ2UgYmVpbmcKPiArICogbWlncmF0ZWQpLgo+ICsgKgo+ICsgKiBPbmNlIHRo ZSBjYWxsZXIgaXMgZG9uZSBjbGVhbmluZyB1cCB0aGluZ3MgYW5kIHVwZGF0aW5nIGl0cyBwYWdl IHRhYmxlIChpZiBpdAo+ICsgKiBjaG9zZSB0byBkbyBzbywgdGhpcyBpcyBub3QgYW4gb2JsaWdh dGlvbikgaXQgZmluYWxseSBjYWxscwo+ICsgKiBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpIHRvIHVw ZGF0ZSB0aGUgQ1BVIHBhZ2UgdGFibGUgdG8gcG9pbnQgdG8gbmV3IHBhZ2VzCj4gKyAqIGZvciBz dWNjZXNzZnVsbHkgbWlncmF0ZWQgcGFnZXMgb3Igb3RoZXJ3aXNlIHJlc3RvcmUgdGhlIENQVSBw YWdlIHRhYmxlIHRvCj4gKyAqIHBvaW50IHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgcGFnZXMuCj4g KyAqLwo+ICtpbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKQo+ ICt7Cj4gKwlsb25nIG5yX3BhZ2VzID0gKGFyZ3MtPmVuZCAtIGFyZ3MtPnN0YXJ0KSA+PiBQQUdF X1NISUZUOwo+ICsKPiArCWFyZ3MtPnN0YXJ0ICY9IFBBR0VfTUFTSzsKPiArCWFyZ3MtPmVuZCAm PSBQQUdFX01BU0s7Cj4gKwlpZiAoIWFyZ3MtPnZtYSB8fCBpc192bV9odWdldGxiX3BhZ2UoYXJn cy0+dm1hKSB8fAo+ICsJICAgIChhcmdzLT52bWEtPnZtX2ZsYWdzICYgVk1fU1BFQ0lBTCkgfHwg dm1hX2lzX2RheChhcmdzLT52bWEpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJaWYgKG5yX3Bh Z2VzIDw9IDApCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwlpZiAoYXJncy0+c3RhcnQgPCBhcmdz LT52bWEtPnZtX3N0YXJ0IHx8Cj4gKwkgICAgYXJncy0+c3RhcnQgPj0gYXJncy0+dm1hLT52bV9l bmQpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwlpZiAoYXJncy0+ZW5kIDw9IGFyZ3MtPnZtYS0+ dm1fc3RhcnQgfHwgYXJncy0+ZW5kID4gYXJncy0+dm1hLT52bV9lbmQpCj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwlpZiAoIWFyZ3MtPnNyYyB8fCAhYXJncy0+ZHN0KQo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsKPiArCW1lbXNldChhcmdzLT5zcmMsIDAsIHNpemVvZigqYXJncy0+c3JjKSAqIG5y X3BhZ2VzKTsKPiArCj4gKwltaWdyYXRlX3ZtYV9jb2xsZWN0KGFyZ3MpOwo+ICsJaWYgKGFyZ3Mt PmNwYWdlcykKPiArCQltaWdyYXRlX3ZtYV9wcmVwYXJlKGFyZ3MpOwo+ICsJaWYgKGFyZ3MtPmNw YWdlcykKPiArCQltaWdyYXRlX3ZtYV91bm1hcChhcmdzKTsKPiArCj4gKwkvKgo+ICsJICogQXQg dGhpcyBwb2ludCBwYWdlcyBhcmUgbG9ja2VkIGFuZCB1bm1hcHBlZCwgYW5kIHRodXMgdGhleSBo YXZlCj4gKwkgKiBzdGFibGUgY29udGVudCBhbmQgY2FuIHNhZmVseSBiZSBjb3BpZWQgdG8gZGVz dGluYXRpb24gbWVtb3J5IHRoYXQKPiArCSAqIGlzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVycy4K PiArCSAqLwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wobWlncmF0ZV92 bWFfc2V0dXApOwo+ICsKPiAgIHN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0 cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSwKPiAgIAkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRy LAo+ICAgCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKPiBAQCAtMjcwOSw3ICsyODAxLDcgQEAg c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfaW5zZXJ0X3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICpt aWdyYXRlLAo+ICAgCSpzcmMgJj0gfk1JR1JBVEVfUEZOX01JR1JBVEU7Cj4gICB9Cj4gICAKPiAt LyoKPiArLyoqCj4gICAgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIC0gbWlncmF0ZSBtZXRhLWRhdGEg ZnJvbSBzcmMgcGFnZSB0byBkc3QgcGFnZQo+ICAgICogQG1pZ3JhdGU6IG1pZ3JhdGUgc3RydWN0 IGNvbnRhaW5pbmcgYWxsIG1pZ3JhdGlvbiBpbmZvcm1hdGlvbgo+ICAgICoKPiBAQCAtMjcxNyw3 ICsyODA5LDcgQEAgc3RhdGljIHZvaWQgbWlncmF0ZV92bWFfaW5zZXJ0X3BhZ2Uoc3RydWN0IG1p Z3JhdGVfdm1hICptaWdyYXRlLAo+ICAgICogc3RydWN0IHBhZ2UuIFRoaXMgZWZmZWN0aXZlbHkg ZmluaXNoZXMgdGhlIG1pZ3JhdGlvbiBmcm9tIHNvdXJjZSBwYWdlIHRvIHRoZQo+ICAgICogZGVz dGluYXRpb24gcGFnZS4KPiAgICAqLwo+IC1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhz dHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpCj4gK3ZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3Ry dWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKQo+ICAgewo+ICAgCWNvbnN0IHVuc2lnbmVkIGxvbmcg bnBhZ2VzID0gbWlncmF0ZS0+bnBhZ2VzOwo+ICAgCWNvbnN0IHVuc2lnbmVkIGxvbmcgc3RhcnQg PSBtaWdyYXRlLT5zdGFydDsKPiBAQCAtMjc5MSw4ICsyODgzLDkgQEAgc3RhdGljIHZvaWQgbWln cmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKQo+ICAgCWlmIChub3Rp ZmllZCkKPiAgIAkJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfb25seV9lbmQoJnJhbmdl KTsKPiAgIH0KPiArRVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9wYWdlcyk7Cj4gICAKPiAtLyoK PiArLyoqCj4gICAgKiBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpIC0gcmVzdG9yZSBDUFUgcGFnZSB0 YWJsZSBlbnRyeQo+ICAgICogQG1pZ3JhdGU6IG1pZ3JhdGUgc3RydWN0IGNvbnRhaW5pbmcgYWxs IG1pZ3JhdGlvbiBpbmZvcm1hdGlvbgo+ICAgICoKPiBAQCAtMjgwMyw3ICsyODk2LDcgQEAgc3Rh dGljIHZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKQo+ ICAgICogVGhpcyBhbHNvIHVubG9ja3MgdGhlIHBhZ2VzIGFuZCBwdXRzIHRoZW0gYmFjayBvbiB0 aGUgbHJ1LCBvciBkcm9wcyB0aGUgZXh0cmEKPiAgICAqIHJlZmNvdW50LCBmb3IgZGV2aWNlIHBh Z2VzLgo+ICAgICovCj4gLXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBt aWdyYXRlX3ZtYSAqbWlncmF0ZSkKPiArdm9pZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZShzdHJ1Y3Qg bWlncmF0ZV92bWEgKm1pZ3JhdGUpCj4gICB7Cj4gICAJY29uc3QgdW5zaWduZWQgbG9uZyBucGFn ZXMgPSBtaWdyYXRlLT5ucGFnZXM7Cj4gICAJdW5zaWduZWQgbG9uZyBpOwo+IEBAIC0yODQ2LDEy NCArMjkzOSw1IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBtaWdy YXRlX3ZtYSAqbWlncmF0ZSkKPiAgIAkJfQo+ICAgCX0KPiAgIH0KPiAtCj4gLS8qCj4gLSAqIG1p Z3JhdGVfdm1hKCkgLSBtaWdyYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5IGluc2lkZSB2bWEKPiAtICoK PiAtICogQG9wczogbWlncmF0aW9uIGNhbGxiYWNrIGZvciBhbGxvY2F0aW5nIGRlc3RpbmF0aW9u IG1lbW9yeSBhbmQgY29weWluZwo+IC0gKiBAdm1hOiB2aXJ0dWFsIG1lbW9yeSBhcmVhIGNvbnRh aW5pbmcgdGhlIHJhbmdlIHRvIGJlIG1pZ3JhdGVkCj4gLSAqIEBzdGFydDogc3RhcnQgYWRkcmVz cyBvZiB0aGUgcmFuZ2UgdG8gbWlncmF0ZSAoaW5jbHVzaXZlKQo+IC0gKiBAZW5kOiBlbmQgYWRk cmVzcyBvZiB0aGUgcmFuZ2UgdG8gbWlncmF0ZSAoZXhjbHVzaXZlKQo+IC0gKiBAc3JjOiBhcnJh eSBvZiBobW1fcGZuX3QgY29udGFpbmluZyBzb3VyY2UgcGZucwo+IC0gKiBAZHN0OiBhcnJheSBv ZiBobW1fcGZuX3QgY29udGFpbmluZyBkZXN0aW5hdGlvbiBwZm5zCj4gLSAqIEBwcml2YXRlOiBw b2ludGVyIHBhc3NlZCBiYWNrIHRvIGVhY2ggb2YgdGhlIGNhbGxiYWNrCj4gLSAqIFJldHVybnM6 IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKPiAtICoKPiAtICogVGhpcyBmdW5j dGlvbiB0cmllcyB0byBtaWdyYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5IHZpcnR1YWwgYWRkcmVzcyBy YW5nZSwgdXNpbmcKPiAtICogY2FsbGJhY2tzIHRvIGFsbG9jYXRlIGFuZCBjb3B5IG1lbW9yeSBm cm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbi4gRmlyc3QgaXQKPiAtICogY29sbGVjdHMgYWxsIHRo ZSBwYWdlcyBiYWNraW5nIGVhY2ggdmlydHVhbCBhZGRyZXNzIGluIHRoZSByYW5nZSwgc2F2aW5n IHRoaXMKPiAtICogaW5zaWRlIHRoZSBzcmMgYXJyYXkuIFRoZW4gaXQgbG9ja3MgdGhvc2UgcGFn ZXMgYW5kIHVubWFwcyB0aGVtLiBPbmNlIHRoZSBwYWdlcwo+IC0gKiBhcmUgbG9ja2VkIGFuZCB1 bm1hcHBlZCwgaXQgY2hlY2tzIHdoZXRoZXIgZWFjaCBwYWdlIGlzIHBpbm5lZCBvciBub3QuIFBh Z2VzCj4gLSAqIHRoYXQgYXJlbid0IHBpbm5lZCBoYXZlIHRoZSBNSUdSQVRFX1BGTl9NSUdSQVRF IGZsYWcgc2V0IChieSB0aGlzIGZ1bmN0aW9uKQo+IC0gKiBpbiB0aGUgY29ycmVzcG9uZGluZyBz cmMgYXJyYXkgZW50cnkuIEl0IHRoZW4gcmVzdG9yZXMgYW55IHBhZ2VzIHRoYXQgYXJlCj4gLSAq IHBpbm5lZCwgYnkgcmVtYXBwaW5nIGFuZCB1bmxvY2tpbmcgdGhvc2UgcGFnZXMuCj4gLSAqCj4g LSAqIEF0IHRoaXMgcG9pbnQgaXQgY2FsbHMgdGhlIGFsbG9jX2FuZF9jb3B5KCkgY2FsbGJhY2su IEZvciBkb2N1bWVudGF0aW9uIG9uCj4gLSAqIHdoYXQgaXMgZXhwZWN0ZWQgZnJvbSB0aGF0IGNh bGxiYWNrLCBzZWUgc3RydWN0IG1pZ3JhdGVfdm1hX29wcyBjb21tZW50cyBpbgo+IC0gKiBpbmNs dWRlL2xpbnV4L21pZ3JhdGUuaAo+IC0gKgo+IC0gKiBBZnRlciB0aGUgYWxsb2NfYW5kX2NvcHko KSBjYWxsYmFjaywgdGhpcyBmdW5jdGlvbiBnb2VzIG92ZXIgZWFjaCBlbnRyeSBpbgo+IC0gKiB0 aGUgc3JjIGFycmF5IHRoYXQgaGFzIHRoZSBNSUdSQVRFX1BGTl9WQUxJRCBhbmQgTUlHUkFURV9Q Rk5fTUlHUkFURSBmbGFnCj4gLSAqIHNldC4gSWYgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4g ZHN0IGFycmF5IGhhcyBNSUdSQVRFX1BGTl9WQUxJRCBmbGFnIHNldCwKPiAtICogdGhlbiB0aGUg ZnVuY3Rpb24gdHJpZXMgdG8gbWlncmF0ZSBzdHJ1Y3QgcGFnZSBpbmZvcm1hdGlvbiBmcm9tIHRo ZSBzb3VyY2UKPiAtICogc3RydWN0IHBhZ2UgdG8gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCBwYWdl LiBJZiBpdCBmYWlscyB0byBtaWdyYXRlIHRoZSBzdHJ1Y3QKPiAtICogcGFnZSBpbmZvcm1hdGlv biwgdGhlbiBpdCBjbGVhcnMgdGhlIE1JR1JBVEVfUEZOX01JR1JBVEUgZmxhZyBpbiB0aGUgc3Jj Cj4gLSAqIGFycmF5Lgo+IC0gKgo+IC0gKiBBdCB0aGlzIHBvaW50IGFsbCBzdWNjZXNzZnVsbHkg bWlncmF0ZWQgcGFnZXMgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgc3JjCj4gLSAqIGFycmF5IHdpdGgg TUlHUkFURV9QRk5fVkFMSUQgYW5kIE1JR1JBVEVfUEZOX01JR1JBVEUgZmxhZyBzZXQgYW5kIHRo ZSBkc3QKPiAtICogYXJyYXkgZW50cnkgd2l0aCBNSUdSQVRFX1BGTl9WQUxJRCBmbGFnIHNldC4K PiAtICoKPiAtICogSXQgdGhlbiBjYWxscyB0aGUgZmluYWxpemVfYW5kX21hcCgpIGNhbGxiYWNr LiBTZWUgY29tbWVudHMgZm9yICJzdHJ1Y3QKPiAtICogbWlncmF0ZV92bWFfb3BzIiwgaW4gaW5j bHVkZS9saW51eC9taWdyYXRlLmggZm9yIGRldGFpbHMgYWJvdXQKPiAtICogZmluYWxpemVfYW5k X21hcCgpIGJlaGF2aW9yLgo+IC0gKgo+IC0gKiBBZnRlciB0aGUgZmluYWxpemVfYW5kX21hcCgp IGNhbGxiYWNrLCBmb3Igc3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkIHBhZ2VzLCB0aGlzCj4gLSAqIGZ1 bmN0aW9uIHVwZGF0ZXMgdGhlIENQVSBwYWdlIHRhYmxlIHRvIHBvaW50IHRvIG5ldyBwYWdlcywg b3RoZXJ3aXNlIGl0Cj4gLSAqIHJlc3RvcmVzIHRoZSBDUFUgcGFnZSB0YWJsZSB0byBwb2ludCB0 byB0aGUgb3JpZ2luYWwgc291cmNlIHBhZ2VzLgo+IC0gKgo+IC0gKiBGdW5jdGlvbiByZXR1cm5z IDAgYWZ0ZXIgdGhlIGFib3ZlIHN0ZXBzLCBldmVuIGlmIG5vIHBhZ2VzIHdlcmUgbWlncmF0ZWQK PiAtICogKFRoZSBmdW5jdGlvbiBvbmx5IHJldHVybnMgYW4gZXJyb3IgaWYgYW55IG9mIHRoZSBh cmd1bWVudHMgYXJlIGludmFsaWQuKQo+IC0gKgo+IC0gKiBCb3RoIHNyYyBhbmQgZHN0IGFycmF5 IG11c3QgYmUgYmlnIGVub3VnaCBmb3IgKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUCj4gLSAq IHVuc2lnbmVkIGxvbmcgZW50cmllcy4KPiAtICovCj4gLWludCBtaWdyYXRlX3ZtYShjb25zdCBz dHJ1Y3QgbWlncmF0ZV92bWFfb3BzICpvcHMsCj4gLQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEsCj4gLQkJdW5zaWduZWQgbG9uZyBzdGFydCwKPiAtCQl1bnNpZ25lZCBsb25nIGVuZCwKPiAt CQl1bnNpZ25lZCBsb25nICpzcmMsCj4gLQkJdW5zaWduZWQgbG9uZyAqZHN0LAo+IC0JCXZvaWQg KnByaXZhdGUpCj4gLXsKPiAtCXN0cnVjdCBtaWdyYXRlX3ZtYSBtaWdyYXRlOwo+IC0KPiAtCS8q IFNhbml0eSBjaGVjayB0aGUgYXJndW1lbnRzICovCj4gLQlzdGFydCAmPSBQQUdFX01BU0s7Cj4g LQllbmQgJj0gUEFHRV9NQVNLOwo+IC0JaWYgKCF2bWEgfHwgaXNfdm1faHVnZXRsYl9wYWdlKHZt YSkgfHwgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TUEVDSUFMKSB8fAo+IC0JCQl2bWFfaXNfZGF4KHZt YSkpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQlpZiAoc3RhcnQgPCB2bWEtPnZtX3N0YXJ0IHx8 IHN0YXJ0ID49IHZtYS0+dm1fZW5kKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JaWYgKGVuZCA8 PSB2bWEtPnZtX3N0YXJ0IHx8IGVuZCA+IHZtYS0+dm1fZW5kKQo+IC0JCXJldHVybiAtRUlOVkFM Owo+IC0JaWYgKCFvcHMgfHwgIXNyYyB8fCAhZHN0IHx8IHN0YXJ0ID49IGVuZCkKPiAtCQlyZXR1 cm4gLUVJTlZBTDsKPiAtCj4gLQltZW1zZXQoc3JjLCAwLCBzaXplb2YoKnNyYykgKiAoKGVuZCAt IHN0YXJ0KSA+PiBQQUdFX1NISUZUKSk7Cj4gLQltaWdyYXRlLnNyYyA9IHNyYzsKPiAtCW1pZ3Jh dGUuZHN0ID0gZHN0Owo+IC0JbWlncmF0ZS5zdGFydCA9IHN0YXJ0Owo+IC0JbWlncmF0ZS5ucGFn ZXMgPSAwOwo+IC0JbWlncmF0ZS5jcGFnZXMgPSAwOwo+IC0JbWlncmF0ZS5lbmQgPSBlbmQ7Cj4g LQltaWdyYXRlLnZtYSA9IHZtYTsKPiAtCj4gLQkvKiBDb2xsZWN0LCBhbmQgdHJ5IHRvIHVubWFw IHNvdXJjZSBwYWdlcyAqLwo+IC0JbWlncmF0ZV92bWFfY29sbGVjdCgmbWlncmF0ZSk7Cj4gLQlp ZiAoIW1pZ3JhdGUuY3BhZ2VzKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCS8qIExvY2sgYW5kIGlz b2xhdGUgcGFnZSAqLwo+IC0JbWlncmF0ZV92bWFfcHJlcGFyZSgmbWlncmF0ZSk7Cj4gLQlpZiAo IW1pZ3JhdGUuY3BhZ2VzKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCS8qIFVubWFwIHBhZ2VzICov Cj4gLQltaWdyYXRlX3ZtYV91bm1hcCgmbWlncmF0ZSk7Cj4gLQlpZiAoIW1pZ3JhdGUuY3BhZ2Vz KQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCS8qCj4gLQkgKiBBdCB0aGlzIHBvaW50IHBhZ2VzIGFy ZSBsb2NrZWQgYW5kIHVubWFwcGVkLCBhbmQgdGh1cyB0aGV5IGhhdmUKPiAtCSAqIHN0YWJsZSBj b250ZW50IGFuZCBjYW4gc2FmZWx5IGJlIGNvcGllZCB0byBkZXN0aW5hdGlvbiBtZW1vcnkgdGhh dAo+IC0JICogaXMgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsYmFjay4KPiAtCSAqCj4gLQkgKiBOb3Rl IHRoYXQgbWlncmF0aW9uIGNhbiBmYWlsIGluIG1pZ3JhdGVfdm1hX3N0cnVjdF9wYWdlKCkgZm9y IGVhY2gKPiAtCSAqIGluZGl2aWR1YWwgcGFnZS4KPiAtCSAqLwo+IC0Jb3BzLT5hbGxvY19hbmRf Y29weSh2bWEsIHNyYywgZHN0LCBzdGFydCwgZW5kLCBwcml2YXRlKTsKPiAtCj4gLQkvKiBUaGlz IGRvZXMgdGhlIHJlYWwgbWlncmF0aW9uIG9mIHN0cnVjdCBwYWdlICovCj4gLQltaWdyYXRlX3Zt YV9wYWdlcygmbWlncmF0ZSk7Cj4gLQo+IC0Jb3BzLT5maW5hbGl6ZV9hbmRfbWFwKHZtYSwgc3Jj LCBkc3QsIHN0YXJ0LCBlbmQsIHByaXZhdGUpOwo+IC0KPiAtCS8qIFVubG9jayBhbmQgcmVtYXAg cGFnZXMgKi8KPiAtCW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCZtaWdyYXRlKTsKPiAtCj4gLQlyZXR1 cm4gMDsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hKTsKPiArRVhQT1JUX1NZTUJP TChtaWdyYXRlX3ZtYV9maW5hbGl6ZSk7Cj4gICAjZW5kaWYgLyogZGVmaW5lZChNSUdSQVRFX1ZN QV9IRUxQRVIpICovCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCk5vdXZlYXUgbWFpbGluZyBsaXN0Ck5vdXZlYXVAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vbm91dmVhdQ==