From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH 06/11] drm/msm: Remove msm_commit/kthread, use atomic helper commit Date: Mon, 12 Mar 2018 16:23:10 -0400 Message-ID: <20180312202310.GB223881@art_vandelay> References: <20180228191906.185417-1-seanpaul@chromium.org> <20180228191906.185417-7-seanpaul@chromium.org> <82098cc2efdbf6b91f1e3009457eaccb@codeaurora.org> <20180301152724.GM223881@art_vandelay> <156ab33c41d436c79cc661e84bebc353@codeaurora.org> <20180302145646.GQ223881@art_vandelay> <12b07547324c10aa56054216fc9bcd01@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <12b07547324c10aa56054216fc9bcd01@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jeykumar Sankaran Cc: linux-arm-msm , dri-devel , abhinavk@codeaurora.org, "Kristian H. Kristensen" , freedreno List-Id: linux-arm-msm@vger.kernel.org T24gVGh1LCBNYXIgMDgsIDIwMTggYXQgMDU6MDg6MDNQTSAtMDgwMCwgSmV5a3VtYXIgU2Fua2Fy YW4gd3JvdGU6Cj4gT24gMjAxOC0wMy0wMiAwNjo1NiwgU2VhbiBQYXVsIHdyb3RlOgo+ID4gT24g VGh1LCBNYXIgMDEsIDIwMTggYXQgMDc6Mzc6MTBQTSAtMDUwMCwgUm9iIENsYXJrIHdyb3RlOgo+ ID4gPiBPbiBUaHUsIE1hciAxLCAyMDE4IGF0IDM6MzcgUE0sICA8anNhbmthQGNvZGVhdXJvcmEu b3JnPiB3cm90ZToKPiA+ID4gPiBPbiAyMDE4LTAzLTAxIDA3OjI3LCBTZWFuIFBhdWwgd3JvdGU6 Cj4gPiA+ID4+Cj4gPiA+ID4+IE9uIFdlZCwgRmViIDI4LCAyMDE4IGF0IDA4OjA3OjAwUE0gLTA4 MDAsIGpzYW5rYUBjb2RlYXVyb3JhLm9yZwo+ID4gd3JvdGU6Cj4gPiA+ID4+Pgo+ID4gPiA+Pj4g T24gMjAxOC0wMi0yOCAxMToxOSwgU2VhbiBQYXVsIHdyb3RlOgo+ID4gPiA+Pj4gPiBNb3Zpbmcg ZnVydGhlciB0b3dhcmRzIHN3aXRjaGluZyBmdWxseSB0byB0aGUgdGhlIGF0b21pYyBoZWxwZXJz LAo+ID4gdGhpcwo+ID4gPiA+Pj4gPiBwYXRjaCByZW1vdmVzIHRoZSBoYW5kLXJvbGxlZCBrdGhy ZWFkIG5vbmJsb2NrIGNvbW1pdCBjb2RlIGFuZAo+ID4gdXNlcwo+ID4gPiA+Pgo+ID4gPiA+PiB0 aGUKPiA+ID4gPj4+Cj4gPiA+ID4+PiA+IGF0b21pYyBoZWxwZXJzIGNvbW1pdF93b3JrIG1vZGVs Lgo+ID4gPiA+Pj4gPgo+ID4gPiA+Pj4gPiBUaGVyZSdzIHN0aWxsIGEgbG90IG9mIGNvcHlwYXN0 YSBoZXJlLCBidXQgaXQncyBzdGlsbCBuZWVkZWQgdG8KPiA+ID4gPj4+ID4gZmFjaWxpdGF0ZSB0 aGUgc3dhcF9zdGF0ZSBhbmQgcHJlcGFyZV9mZW5jZSBwcml2YXRlIGZ1bmN0aW9ucy4KPiA+IFRo ZXNlCj4gPiA+ID4+PiA+IHdpbGwgYmUgc29ydGVkIG91dCBpbiBhIGZvbGxvdy1vbiBwYXRjaC4K PiA+ID4gPj4+ID4KPiA+ID4gPj4+ID4gQ2hhbmdlLUlkOiBJOWZjYmEyNzgyNGJhNjNkM2ZhYjk2 Y2IyYmMxOTRiZmE2ZjM0NzViNwo+ID4gPiA+Pj4gPiBTaWduZWQtb2ZmLWJ5OiBTZWFuIFBhdWwg PHNlYW5wYXVsQGNocm9taXVtLm9yZz4KPiA+ID4gPj4+ID4gLS0tCj4gPiA+ID4+PiA+ICBkcml2 ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYyB8IDE5OQo+ID4gPiA+Pgo+ID4gPiA+PiArKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiA+ID4+Pgo+ID4gPiA+Pj4gPiAgZHJpdmVy cy9ncHUvZHJtL21zbS9tc21fZHJ2LmMgICAgfCAgIDEgLQo+ID4gPiA+Pj4gPiAgZHJpdmVycy9n cHUvZHJtL21zbS9tc21fZHJ2LmggICAgfCAgIDQgLQo+ID4gPiA+Pj4gPiAgMyBmaWxlcyBjaGFu Z2VkLCAzNSBpbnNlcnRpb25zKCspLCAxNjkgZGVsZXRpb25zKC0pCj4gPiA+ID4+PiA+Cj4gPiA+ ID4+PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYwo+ID4g PiA+Pj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2F0b21pYy5jCj4gPiA+ID4+PiA+IGlu ZGV4IDNhMThiZDNkYzIxNS4uN2U1NGViNjVkMDk2IDEwMDY0NAo+ID4gPiA+Pj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYwo+ID4gPiA+Pj4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYwo+ID4gPiA+Pj4gPiBAQCAtMjEsNTEgKzIxLDYgQEAK PiA+ID4gPj4+ID4gICNpbmNsdWRlICJtc21fZ2VtLmgiCj4gPiA+ID4+PiA+ICAjaW5jbHVkZSAi bXNtX2ZlbmNlLmgiCj4gPiA+ID4+PiA+Cj4gPiA+ID4+PiA+IC1zdHJ1Y3QgbXNtX2NvbW1pdCB7 Cj4gPiA+ID4+PiA+IC0gICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gPiA+ID4+PiA+IC0g ICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKPiA+ID4gPj4+ID4gLSAgICAgdWlu dDMyX3QgY3J0Y19tYXNrOwo+ID4gPiA+Pj4gPiAtICAgICBib29sIG5vbmJsb2NrOwo+ID4gPiA+ Pj4gPiAtICAgICBzdHJ1Y3Qga3RocmVhZF93b3JrIGNvbW1pdF93b3JrOwo+ID4gPiA+Pj4gPiAt fTsKPiA+ID4gPj4+ID4gLQo+ID4gPiA+Pj4gPiAtLyogYmxvY2sgdW50aWwgc3BlY2lmaWVkIGNy dGNzIGFyZSBubyBsb25nZXIgcGVuZGluZyB1cGRhdGUsIGFuZAo+ID4gPiA+Pj4gPiAtICogYXRv bWljYWxseSBtYXJrIHRoZW0gYXMgcGVuZGluZyB1cGRhdGUKPiA+ID4gPj4+ID4gLSAqLwo+ID4g PiA+Pj4gPiAtc3RhdGljIGludCBzdGFydF9hdG9taWMoc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAq cHJpdiwgdWludDMyX3QKPiA+ID4gPj4+ID4gY3J0Y19tYXNrKQo+ID4gPiA+Pj4gPiAtewo+ID4g PiA+Pj4gPiAtICAgICBpbnQgcmV0Owo+ID4gPiA+Pj4gPiAtCj4gPiA+ID4+PiA+IC0gICAgIHNw aW5fbG9jaygmcHJpdi0+cGVuZGluZ19jcnRjc19ldmVudC5sb2NrKTsKPiA+ID4gPj4+ID4gLSAg ICAgcmV0ID0KPiA+IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9sb2NrZWQocHJpdi0+cGVuZGlu Z19jcnRjc19ldmVudCwKPiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgICEocHJpdi0+ cGVuZGluZ19jcnRjcyAmIGNydGNfbWFzaykpOwo+ID4gPiA+Pj4gPiAtICAgICBpZiAocmV0ID09 IDApIHsKPiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBEQkcoInN0YXJ0OiAlMDh4IiwgY3J0Y19t YXNrKTsKPiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBwcml2LT5wZW5kaW5nX2NydGNzIHw9IGNy dGNfbWFzazsKPiA+ID4gPj4+ID4gLSAgICAgfQo+ID4gPiA+Pj4gPiAtICAgICBzcGluX3VubG9j aygmcHJpdi0+cGVuZGluZ19jcnRjc19ldmVudC5sb2NrKTsKPiA+ID4gPj4+ID4gLQo+ID4gPiA+ Pj4gPiAtICAgICByZXR1cm4gcmV0Owo+ID4gPiA+Pj4gPiAtfQo+ID4gPiA+Pj4gPiAtCj4gPiA+ ID4+PiA+IC0vKiBjbGVhciBzcGVjaWZpZWQgY3J0Y3MgKG5vIGxvbmdlciBwZW5kaW5nIHVwZGF0 ZSkKPiA+ID4gPj4+ID4gLSAqLwo+ID4gPiA+Pj4gPiAtc3RhdGljIHZvaWQgZW5kX2F0b21pYyhz dHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2LCB1aW50MzJfdAo+ID4gPiA+Pj4gPiBjcnRjX21h c2spCj4gPiA+ID4+PiA+IC17Cj4gPiA+ID4+PiA+IC0gICAgIHNwaW5fbG9jaygmcHJpdi0+cGVu ZGluZ19jcnRjc19ldmVudC5sb2NrKTsKPiA+ID4gPj4+ID4gLSAgICAgREJHKCJlbmQ6ICUwOHgi LCBjcnRjX21hc2spOwo+ID4gPiA+Pj4gPiAtICAgICBwcml2LT5wZW5kaW5nX2NydGNzICY9IH5j cnRjX21hc2s7Cj4gPiA+ID4+PiA+IC0gICAgIHdha2VfdXBfYWxsX2xvY2tlZCgmcHJpdi0+cGVu ZGluZ19jcnRjc19ldmVudCk7Cj4gPiA+ID4+PiA+IC0gICAgIHNwaW5fdW5sb2NrKCZwcml2LT5w ZW5kaW5nX2NydGNzX2V2ZW50LmxvY2spOwo+ID4gPiA+Pj4gPiAtfQo+ID4gPiA+Pj4gPiAtCj4g PiA+ID4+PiA+IC1zdGF0aWMgdm9pZCBjb21taXRfZGVzdHJveShzdHJ1Y3QgbXNtX2NvbW1pdCAq YykKPiA+ID4gPj4+ID4gLXsKPiA+ID4gPj4+ID4gLSAgICAgZW5kX2F0b21pYyhjLT5kZXYtPmRl dl9wcml2YXRlLCBjLT5jcnRjX21hc2spOwo+ID4gPiA+Pj4gPiAtICAgICBpZiAoYy0+bm9uYmxv Y2spCj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAga2ZyZWUoYyk7Cj4gPiA+ID4+PiA+IC19Cj4g PiA+ID4+PiA+IC0KPiA+ID4gPj4+ID4gIHN0YXRpYyB2b2lkIG1zbV9hdG9taWNfd2FpdF9mb3Jf Y29tbWl0X2RvbmUoCj4gPiA+ID4+PiA+ICAgICAgICAgICAgICAgc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiA+ID4gPj4+ID4gICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq b2xkX3N0YXRlKQo+ID4gPiA+Pj4gPiBAQCAtMTE4LDYgKzczLDEwIEBAIHN0YXRpYyB2b2lkIG1z bV9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0Cj4gPiA+ID4+PiA+IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlKQo+ID4gPiA+Pj4gPgo+ID4gPiA+Pj4gPiAgICAgICBtc21fYXRvbWljX3dhaXRfZm9y X2NvbW1pdF9kb25lKGRldiwgc3RhdGUpOwo+ID4gPiA+Pj4gPgo+ID4gPiA+Pj4gPiArICAgICBk cm1fYXRvbWljX2hlbHBlcl9jb21taXRfaHdfZG9uZShzdGF0ZSk7Cj4gPiA+ID4+PiA+ICsKPiA+ ID4gPj4+ID4gKyAgICAgZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfdmJsYW5rcyhkZXYsIHN0 YXRlKTsKPiA+ID4gPj4+ID4gKwo+ID4gPiA+Pj4gPiAgICAgICBkcm1fYXRvbWljX2hlbHBlcl9j bGVhbnVwX3BsYW5lcyhkZXYsIHN0YXRlKTsKPiA+ID4gPj4+ID4KPiA+ID4gPj4+ID4gICAgICAg a21zLT5mdW5jcy0+Y29tcGxldGVfY29tbWl0KGttcywgc3RhdGUpOwo+ID4gPiA+Pj4gPiBAQCAt MTI2LDEwOSArODUsMjUgQEAgc3RhdGljIHZvaWQgbXNtX2F0b21pY19jb21taXRfdGFpbChzdHJ1 Y3QKPiA+ID4gPj4+ID4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiA+ID4+PiA+ICAvKiBU aGUgKHBvdGVudGlhbGx5KSBhc3luY2hyb25vdXMgcGFydCBvZiB0aGUgY29tbWl0LiAgQXQgdGhp cwo+ID4gcG9pbnQKPiA+ID4gPj4+ID4gICAqIG5vdGhpbmcgY2FuIGZhaWwgc2hvcnQgb2YgYXJt YWdlZGRvbi4KPiA+ID4gPj4+ID4gICAqLwo+ID4gPiA+Pj4gPiAtc3RhdGljIHZvaWQgY29tcGxl dGVfY29tbWl0KHN0cnVjdCBtc21fY29tbWl0ICpjKQo+ID4gPiA+Pj4gPiArc3RhdGljIHZvaWQg Y29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gPiA+Pj4gPiAg ewo+ID4gPiA+Pj4gPiAtICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBjLT5z dGF0ZTsKPiA+ID4gPj4+ID4gLSAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHN0YXRlLT5k ZXY7Cj4gPiA+ID4+PiA+ICsgICAgIGRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX2ZlbmNlcyhz dGF0ZS0+ZGV2LCBzdGF0ZSwgZmFsc2UpOwo+ID4gPiA+Pj4gPgo+ID4gPiA+Pj4gPiAtICAgICBk cm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl9mZW5jZXMoZGV2LCBzdGF0ZSwgZmFsc2UpOwo+ID4g PiA+Pj4gPiArICAgICBkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl9kZXBlbmRlbmNpZXMoc3Rh dGUpOwo+ID4gPiA+Pj4gPgo+ID4gPiA+Pj4gPiAgICAgICBtc21fYXRvbWljX2NvbW1pdF90YWls KHN0YXRlKTsKPiA+ID4gPj4+ID4KPiA+ID4gPj4+ID4gLSAgICAgZHJtX2F0b21pY19zdGF0ZV9w dXQoc3RhdGUpOwo+ID4gPiA+Pj4gPiAtfQo+ID4gPiA+Pj4gPiAtCj4gPiA+ID4+PiA+IC1zdGF0 aWMgdm9pZCBfbXNtX2RybV9jb21taXRfd29ya19jYihzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3Jr KQo+ID4gPiA+Pj4gPiAtewo+ID4gPiA+Pj4gPiAtICAgICBzdHJ1Y3QgbXNtX2NvbW1pdCAqY29t bWl0ID0gIE5VTEw7Cj4gPiA+ID4+PiA+IC0KPiA+ID4gPj4+ID4gLSAgICAgaWYgKCF3b3JrKSB7 Cj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgRFJNX0VSUk9SKCIlczogSW52YWxpZCBjb21taXQg d29yayBkYXRhIVxuIiwKPiA+IF9fZnVuY19fKTsKPiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBy ZXR1cm47Cj4gPiA+ID4+PiA+IC0gICAgIH0KPiA+ID4gPj4+ID4gLQo+ID4gPiA+Pj4gPiAtICAg ICBjb21taXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1zbV9jb21taXQsIGNvbW1pdF93 b3JrKTsKPiA+ID4gPj4+ID4gLQo+ID4gPiA+Pj4gPiAtICAgICBjb21wbGV0ZV9jb21taXQoY29t bWl0KTsKPiA+ID4gPj4+ID4gLQo+ID4gPiA+Pj4gPiAtICAgICBjb21taXRfZGVzdHJveShjb21t aXQpOwo+ID4gPiA+Pj4gPiAtfQo+ID4gPiA+Pj4gPiAtCj4gPiA+ID4+PiA+IC1zdGF0aWMgc3Ry dWN0IG1zbV9jb21taXQgKmNvbW1pdF9pbml0KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlCj4gPiAq c3RhdGUsCj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgYm9vbCBub25ibG9jaykKPiA+ID4gPj4+ ID4gLXsKPiA+ID4gPj4+ID4gLSAgICAgc3RydWN0IG1zbV9jb21taXQgKmMgPSBremFsbG9jKHNp emVvZigqYyksIEdGUF9LRVJORUwpOwo+ID4gPiA+Pj4gPiArICAgICBkcm1fYXRvbWljX2hlbHBl cl9jb21taXRfY2xlYW51cF9kb25lKHN0YXRlKTsKPiA+ID4gPj4+ID4KPiA+ID4gPj4+ID4gLSAg ICAgaWYgKCFjKQo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ID4gPiA+ Pj4gPiAtCj4gPiA+ID4+PiA+IC0gICAgIGMtPmRldiA9IHN0YXRlLT5kZXY7Cj4gPiA+ID4+PiA+ IC0gICAgIGMtPnN0YXRlID0gc3RhdGU7Cj4gPiA+ID4+PiA+IC0gICAgIGMtPm5vbmJsb2NrID0g bm9uYmxvY2s7Cj4gPiA+ID4+PiA+IC0KPiA+ID4gPj4+ID4gLSAgICAga3RocmVhZF9pbml0X3dv cmsoJmMtPmNvbW1pdF93b3JrLCBfbXNtX2RybV9jb21taXRfd29ya19jYik7Cj4gPiA+ID4+PiA+ IC0KPiA+ID4gPj4+ID4gLSAgICAgcmV0dXJuIGM7Cj4gPiA+ID4+PiA+ICsgICAgIGRybV9hdG9t aWNfc3RhdGVfcHV0KHN0YXRlKTsKPiA+ID4gPj4+ID4gIH0KPiA+ID4gPj4+ID4KPiA+ID4gPj4+ ID4gLS8qIFN0YXJ0IGRpc3BsYXkgdGhyZWFkIGZ1bmN0aW9uICovCj4gPiA+ID4+PiA+IC1zdGF0 aWMgdm9pZCBtc21fYXRvbWljX2NvbW1pdF9kaXNwYXRjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwgc3RydWN0IG1zbV9jb21taXQKPiA+ID4gPj4+ID4gKmNvbW1pdCkKPiA+ID4gPj4+ID4gK3N0 YXRpYyB2b2lkIGNvbW1pdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiA+ID4gPj4+ ID4gIHsKPiA+ID4gPj4+ID4gLSAgICAgc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7Cj4gPiA+ID4+PiA+IC0gICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9 IE5VTEw7Cj4gPiA+ID4+PiA+IC0gICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3X2NydGNf c3RhdGUgPSBOVUxMOwo+ID4gPiA+Pj4gPiAtICAgICBpbnQgcmV0ID0gLUVJTlZBTCwgaSA9IDAs IGogPSAwOwo+ID4gPiA+Pj4gPiAtICAgICBib29sIG5vbmJsb2NrOwo+ID4gPiA+Pj4gPiAtCj4g PiA+ID4+PiA+IC0gICAgIC8qIGNhY2hlIHNpbmNlIHdvcmsgd2lsbCBrZnJlZSBjb21taXQgaW4g bm9uLWJsb2NraW5nIGNhc2UKPiA+ICovCj4gPiA+ID4+PiA+IC0gICAgIG5vbmJsb2NrID0gY29t bWl0LT5ub25ibG9jazsKPiA+ID4gPj4+ID4gLQo+ID4gPiA+Pj4gPiAtICAgICBmb3JfZWFjaF9u ZXdfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgbmV3X2NydGNfc3RhdGUsIGkpIHsKPiA+ID4g Pj4+ID4gLSAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcHJpdi0+bnVtX2NydGNzOyBqKysp IHsKPiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIGlmIChwcml2LT5kaXNwX3RocmVh ZFtqXS5jcnRjX2lkID09Cj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjcnRjLT5iYXNlLmlkKSB7Cj4gPiA+ID4+PiA+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChwcml2LT5kaXNwX3RocmVhZFtqXS50aHJlYWQpIHsKPiA+ ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrdGhyZWFkX3F1 ZXVlX3dvcmsoCj4gPiA+ID4+PiA+IC0KPiA+ID4gPj4+ID4gJnByaXYtPmRpc3BfdGhyZWFkW2pd LndvcmtlciwKPiA+ID4gPj4+ID4gLQo+ID4gPiA+Pj4gPiAmY29tbWl0LT5jb21taXRfd29yayk7 Cj4gPiA+ID4+PiBBcmUgdGhlcmUgYW55IGtub3duIHByb3Bvc2FscyBmbG9hdGluZyBhcm91bmQg dG8gc3VwcG9ydCBBU1lOQwo+ID4gY29tbWl0cwo+ID4gPiA+Pgo+ID4gPiA+PiBmb3IKPiA+ID4g Pj4+Cj4gPiA+ID4+PiBjb25jdXJyZW50IGRpc3BsYXlzIHJlbmRlcmluZyBhdCBkaWZmZXJlbnQg RlBTPyBUaGUgYWJvdmUga3RocmVhZAo+ID4gbW9kZWwKPiA+ID4gPj4KPiA+ID4gPj4gaXMKPiA+ ID4gPj4+Cj4gPiA+ID4+PiBpbnRyb2R1Y2VkIHdoZW4gd2UgZmFjZWQgc29tZSBwZXJmb3JtYW5j ZSByb2FkIGJsb2NrZXJzIHdoZW4gYQo+ID4gZGlzcGxheQo+ID4gPiA+Pgo+ID4gPiA+PiBoYXMK PiA+ID4gPj4+Cj4gPiA+ID4+PiB0byB3YWl0IGZvciBhbiBvbmdvaW5nIGRpc3BsYXkgY29tbWl0 IHRvIGNvbXBsZXRlLgo+ID4gPiA+Pgo+ID4gPiA+Pgo+ID4gPiA+PiBJIHRoaW5rIHBlb3BsZSBo YXZlIGRpc2N1c3NlZCBpdCwgSSdtIG5vdCBzdXJlIGlmIHRoZXJlIGFyZSBhbnkKPiA+IHBhdGNo ZXMKPiA+ID4gPj4gZmxvYXRpbmcKPiA+ID4gPj4gYXJvdW5kLiBPbiB0aGUgc3VyZmFjZSwgaXQg c2VlbXMgZWFzeSB0byBqdXN0IHB1c2ggdGhlIGNvbW1pdF93b3JrCj4gPiBpbnRvCj4gPiA+ID4+ IHRoZSBjcnRjCj4gPiA+ID4+IGNvbW1pdCBhbmQgaGF2ZSBvbmUgd29yayBpdGVtIHBlciBjcnRj LiBIb3dldmVyIEkgdGhpbmsgdGhlIHByb2JsZW0KPiA+IGlzCj4gPiA+ID4+IHRoYXQgdGhlcmUK PiA+ID4gPj4gY291bGQgYmUgcmVzb3VyY2VzIHN3aXRjaGluZyBiZXR3ZWVuIGNydGNzIGZvciBh IGdpdmVuIGNvbW1pdCwgb3IKPiA+IGZyb20gb25lCj4gPiA+ID4+IGNvbW1pdAo+ID4gPiA+PiB0 byB0aGUgbmV4dCwgYW5kIHN5bmNocm9uaXppbmcgdGhhdCBiZWNvbWVzIGEgSGFyZCBQcm9ibGVt Lgo+ID4gPiA+Pgo+ID4gPiA+PiBQZXJoYXBzIEknbSBtaXN1bmRlcnN0YW5kaW5nLCBidXQgdGhl IHN0YXJ0L2VuZCBhdG9taWMgZnVuY3Rpb25zCj4gPiBzZXJpYWxpemUKPiA+ID4gPj4gdGhlCj4g PiA+ID4+IGluY29taW5nIGNvbW1pdHMsIHJpZ2h0PyBTbyB0aGUgb25seSBiZW5lZml0IHRoZSBr dGhyZWFkIHByb3ZpZGVzIGlzCj4gPiB0bwo+ID4gPiA+PiBtaXRpZ2F0ZQo+ID4gPiA+PiBhbnkg YmxvY2tpbmcgY2FsbHMgbWFkZSBvbiBvbmUgY3J0YyBmcm9tIGJsb2NraW5nIGEgc2Vjb25kIGNy dGMgaW4KPiA+IHRoZQo+ID4gPiA+PiBzYW1lCj4gPiA+ID4+IGNvbW1pdD8KPiA+ID4gPj4KPiA+ ID4gPj4gU2Vhbgo+ID4gPiA+Cj4gPiA+ID4gSSBhbSBub3Qgc3VyZSB3aGF0IGxldmVsIG9mIHJl c291cmNlIChJIGFzc3VtZSBodyBibG9ja3MpIHN3aXRjaGluZyB3ZQo+ID4gY2FuCj4gPiA+ID4g ZXhwZWN0IGJldHdlZW4KPiA+ID4gPiB0d28gYWN0aXZlIENSVEMncyBvbiBzdWNjZXNzaXZlIGNv bW1pdHMuIFdpdGggdmlydHVhbGl6YXRpb24gaW4gcGxheSwKPiA+IHRoZQo+ID4gPiA+IHJlc291 cmNlcyBhbGxvY2F0ZWQgdG8KPiA+ID4gPiBDUlRDIC8gZW5jb2RlciAvIENvbm5lY3RvciB3aWxs IHJlbWFpbiBhdHRhY2hlZCB0byB0aGUgY29tcG9uZW50cyBhcwo+ID4gbG9uZyBhcwo+ID4gPiA+ IHRoZSBkaXNwbGF5IGlzIGFjdGl2ZS4KPiA+ID4gPiBQbGFuZXMgKEhXIHBpcGVzKSBhcmUgb25l IHN1Y2ggZW50aXR5IHdoaWNoIGNhbiBtb3ZlIGJldHdlZW4gdGhlCj4gPiBDUlRDJ3MKPiA+ID4g PiBmcmVxdWVudGx5LiBFdmVuCj4gPiA+ID4gd2l0aCB0aGVtIHBsYW5lcywgdGhlIGh3IGFzc2ln bm1lbnQgc2hvdWxkIHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUKPiA+IHBsYW5lIGlzCj4gPiA+ID4g ZGV0YWNoZWQgZnJvbQo+ID4gPiA+IGEgQ1JUQyBiZWZvcmUgYXR0YWNoaW5nIHRvIHRoZSBuZXh0 IG9uZS4KPiA+ID4gCj4gPiA+IEkgdGhpbmsgYSBnb29kIGV4YW1wbGUgdG8gdGhpbmsgYWJvdXQg aXMgdmlydHVhbGl6aW5nIGh3cGlwZTwtPnBsYW5lCj4gPiA+IG1hcHBpbmcsIGZvciBleGFtcGxl LCB3aGVuIHlvdSBuZWVkIHRvIHJlLWFzc2lnbiBod3BpcGVzIGZvciB0aGUgbmV4dAo+ID4gPiBm cmFtZSBhY2NvcmRpbmcgdG8gd2hhdCBjYXBhYmlsaXRpZXMgYXJlIG5lZWRlZCAoeXV2LCBzY2Fs aW5nKSBvciBnYW5nCj4gPiA+IHVwIHR3byBod3BpcGVzIGZvciB3aWRlIGJ1ZmZlciBzY2Fub3V0 IChvciByZS11c2Ugb25lIGh3cGlwZSBmb3IgdHdvCj4gPiA+IHBsYW5lcykuLiBpbiBtZHA1IHdl IGtlZXAgdHJhY2sgb2Ygd2hhdCBod3BpcGVzIGFyZSBpbiB1c2UgYnkgd2hpY2gKPiA+ID4gcGxh bmVzIGluIGRyaXZlciBnbG9iYWwgYXRvbWljIHN0YXRlIChJIGhhdmUgc29tZSByZXZpdmVkIHBh dGNoZXMgZnJvbQo+ID4gPiBhcmNoaXR0IHRvIGNvbnZlcnQgdGhpcyB0byBkcml2ZXIgcHJpdmF0 ZSBvYmpzKS4uCj4gPiA+IAo+ID4gPiBXaXRoIHRoZSBhdG9taWMgbW9kZWwgd2UgaGF2ZSBzZXJp YWxpemF0aW9uIGluIHRoZSAodG8gYWJ1c2Ugc29tZQo+ID4gPiB0ZXJtcykgInRvcCBoYWxmIiAo aWUuIHVzZXJzcGFjZSBjYWxsaW5nIGludG8gaW9jdGwpIGJ5IHZpcnR1ZSBvZiB0aGUKPiA+ID4g bW9kZXNldCBsb2Nrcy4gIEJ1dCB0aGVyZSBpcyBhIHNlY29uZCBoYWxmIHRvIHRoaXMuICBCZWNh dXNlIHdlIHVwZGF0ZQo+ID4gPiB0aGUgbmV3IGluY29taW5nIGdsb2JhbCBzdGF0ZSBvYmplY3Qg YWJvdXQgd2hhdCBod3BpcGVzIGFyZSByZWxlYXNlZAo+ID4gPiBpbiBhdG9taWNfY2hlY2ssIGlm IHRoZSBpbmNvbWluZyBzdGF0ZSBpcyBjb21taXR0ZWQvc3dhcHBlZCBpbiB0aGUKPiA+ID4gInRv cCBoYWxmIiB3ZSByZWx5IG9uIHRoaXMgc3RhdGUgYmVpbmcgdmFsaWQgaW4gdGhlICJib3R0b20g aGFsZiIgKGluCj4gPiA+IHRoaXMgY2FzZSB0aGUgd3EpIGJlZm9yZSBwdXNoaW5nIHRoZSBuZXcg c3RhdGUgdG8gdGhlIGh3Li4gd2hpY2gKPiA+ID4gZXNzZW50aWFsbHkgZm9yY2VzIHVzIHRvIHNl cmlhbGl6ZSBjb21taXR0aW5nIHRoZSBzdGF0ZSBpbiB0aGUgImJvdHRvbQo+ID4gPiBoYWxmIiBz byB0aGluZ3MgaGFwcGVuIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSAidG9wIGhhbGYiIGludGVu ZGVkLgo+ID4gPiBPdGhlcndpc2Ugd2UgY291bGQgdHJ5IHRvIGFzc2lnbiBhIGh3cGlwZSB0byBh IGRpZmZlcmVudCBjcnRjIHdoaWxlIGl0Cj4gPiA+IGlzIHN0aWxsIHNjYW5uaW5nIG91dCBmb3Ig aXQncyBwcmV2aW91cyBjcnRjLiAgSWYgeW91IGhhdmUgYSAzMEh6Cj4gPiA+IGRpc3BsYXkgcGx1 cyBhIDEyMEh6IGRpc3BsYXksIEkgZ3Vlc3MgdGhpcyBpcyBhIGJpdCBzdWItb3B0aW1hbC4KPiA+ IAo+ID4gSXQncyBzdGlsbCBiYWQgZXZlbiB3aXRoIGRpc3BsYXlzIHJlZnJlc2hpbmcgYXQgdGhl IHNhbWUgcmF0ZSwgdGhlIHdvcnN0Cj4gPiBjYXNlCj4gPiBjb3VsZCBoYWx2ZSB0aGUgcmVmcmVz aCByYXRlIGlmIHZibGFua3MgYXJlbid0IGluIHN5bmMuCj4gPiAKPiA+ID4gCj4gPiA+IE1heWJl IHRoZSBhbnN3ZXIgaXMgcGVyLWNydGMgd3EncyBmb3IgY29tbWl0cyBwbHVzIHNvbWUgc29ydCBv Zgo+ID4gPiBmZW5jaW5nIHNjaGVtZSB0byBzdGFsbCB0aGluZ3Mgd2hlbiB0aGVyZSBhcmUgY3Jv c3MtY3J0YyBkZXBlbmRlbmNpZXMKPiA+ID4gKGllLiBjb21taXQgb24gY3J0YyBCIGRlcGVuZHMg b24gaHdwaXBlIHJlbGVhc2VkIGJ5IGNvbW1pdCBvbiBjcnRjIEEpPwo+ID4gPiAgVGhpcyB3YXkg d2UgZG9uJ3QgYmxvY2sgdXBkYXRlcyBvbiB0aGUgZmFzdGVyIGRpc3BsYXkgd2hlbiBpdCBpc24n dAo+ID4gPiByZXF1aXJlZC4gIEknbSBub3QgcXVpdGUgc3VyZSBob3cgdGhhdCB3b3VsZCB3b3Jr LiAgQnV0IHBlcmhhcHMgYXQKPiA+ID4gbGVhc3Qgd2UgY291bGQgc29tZWhvdyBhbGxvdyBvdXQt b2Ytb3JkZXIgY29tbWl0cyB3aGVuIHR3byB1cGRhdGVzCj4gPiA+IGRvbid0IHRvdWNoIGFueSBv ZiB0aGUgc2FtZSBzdGF0ZSBvYmoncy4KPiA+IAo+ID4gUmlnaHQsIGZvciAibm9ybWFsIiB1cGRh dGVzLCB5b3UgY291bGQgdXNlIHRoZSBmYXN0IHBhdGguIFdlIGFscmVhZHkKPiA+IGhhdmUKPiA+ IG5lZWRzX21vZGVzZXQsIHNvIGFkZGluZyBuZWVkc19zeW5jIHdvdWxkbid0IGJlIHRvbyBiYWQu IEkgdGhpbmsgSSByYW4KPiA+IGludG8gdGhpcwo+ID4gd2l0aCB0ZWdyYSBiYWNrIGluIFBpeGVs IEMgZGF5cyBhbmQgaGFja2VkIGluIGEgcGVyLWNydGMgd29ya2VyIHNpbmNlCj4gPiB0aGUKPiA+ IHJlc291cmNlcyB3ZXJlIHN0YXRpY2FsbHkgbWFwcGVkLiBXZSdsbCBwcm9iYWJseSBydW4gaW50 byB0aGlzIGluIENyT1MKPiA+IGFzCj4gPiB3ZQo+ID4gZXhwYW5kIG91ciBleHBsaWNpdCBzeW5j IHN1cHBvcnQgaW4gdGhlIGNvbXBvc2l0b3IuCj4gPiAKPiA+ID4gCj4gPiA+IChCdXQgSSBkbyB0 aGluayB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgZGlzY3VzcyBvbiBkcmktZGV2ZWwsIGFu ZAo+ID4gPiBJJ2QgcHJlZmVyIGRvIHNvbHZlIHRoaXMgaW4gdGhlIGF0b21pYyBoZWxwZXJzLCBy YXRoZXIgdGhhbiBoYXZpbmcKPiA+ID4gdXNlcnNwYWNlIHdvcmthcm91bmQgZGlmZmVyZW50IHNl dHMgb2YgYnVncy9xdWlya3MgZm9yIGVhY2ggZGlmZmVyZW50Cj4gPiA+IGRyaXZlci4gIEl0IHJl YWxseSBpc24ndCBzb21ldGhpbmcgdGhhdCBpcyBodyBzcGVjaWZpYywgc28gaXQgZG9lc24ndAo+ ID4gPiBiZWxvbmcgaW4gdGhlIGRyaXZlci4pCj4gPiAKPiA+IEFncmVlZCwgdGhpcyBpcyBhIHRy aWNreSBiaXQgb2YgY29kZSBhbmQgaXQgd291bGQgYmVuZWZpdCBmcm9tIGJlaW5nCj4gPiB1c2Vk Cj4gPiBhY3Jvc3MKPiA+IGFsbCBkcml2ZXJzIChhcyB3ZWxsIGFzIGFsbCBkcml2ZXJzIGJlbmVm aXRpbmcgZnJvbSBpdCkuIEF0IGFueSByYXRlLCBJCj4gPiBjYW4ndAo+ID4gdXNlIG11bHRpLWRp c3BsYXkgb24gbXkgZGV2ZWxvcG1lbnQgZGV2aWNlIHJpZ2h0IG5vdywgc28gSSB0aGluayB3ZSds bAo+ID4gbmVlZCB0bwo+ID4gZGVmZXIgZm9yIG5vdy4KPiA+IAo+ID4gU2Vhbgo+ID4gCj4gPiA+ IAo+ID4gPiBCUiwKPiA+ID4gLVIKPiA+ID4gCj4gPiA+IAo+ID4gPiA+ICJTdGFydCBhdG9taWMi IHN5bmNocm9uaXplcyB0aGUgY29tbWl0IGN5Y2xlIGZvciBhbGwgdGhlIENSVEMncyBieQo+ID4g d2FpdGluZwo+ID4gPiA+IGZvciBjb21taXQgY29tcGxldGUKPiA+ID4gPiBvZiBhbGwgdGhlIHBy ZXZpb3VzIGZyYW1lcy4gQnV0IHBlciBjcnRjIGt0aHJlYWRzIGFsbG93cyB0aGUgY3VycmVudAo+ ID4gZnJhbWUKPiA+ID4gPiBjb21taXRzIHRvIGhhcHBlbgo+ID4gPiA+IGluZGVwZW5kZW50bHku IEZvciBhbmRyb2lkLCB3ZSBuZWVkZWQgdGhpcyBtb2RlbCBhcyBlYWNoIGNvbW1pdCB0aHJlYWQK PiA+IG5lZWQKPiA+ID4gPiB0byB3YWl0IGZvciBpbnB1dAo+ID4gPiA+IHBsYW5lIGZlbmNlcyBi ZWZvcmUgcHJvZ3JhbW1pbmcgdGhlIGhhcmR3YXJlLgo+ID4gPiA+Cj4gPiA+ID4gSmV5a3VtYXIg Uy4KPiA+ID4gPgo+ID4gPiA+Pgo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIG9ubHkgcmV0dXJuIHplcm8gaWYgd29yawo+ID4gaXMKPiA+ID4gPj4+ ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBxdWV1ZWQgc3VjY2Vz c2Z1bGx5Lgo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLwo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dCA9IDA7Cj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 Cj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJNX0VS Uk9SKCIgRXJyb3IgZm9yCj4gPiBjcnRjX2lkOgo+ID4gPiA+Pj4gPiAlZFxuIiwKPiA+ID4gPj4+ ID4gLQo+ID4gPiA+Pj4gPiBwcml2LT5kaXNwX3RocmVhZFtqXS5jcnRjX2lkKTsKPiA+ID4gPj4+ ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+ID4gPiA+Pj4gPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAg ICAgIH0KPiA+ID4gPj4+ID4gLSAgICAgICAgICAgICB9Cj4gCj4gQ2FyZSB0byByZW1vdmUgcHJp di0+ZGlzcF90aHJlYWQgYW5kIGFsbCBpdHMgcmVmZXJlbmNlcyBhcyBhIHBhcnQgb2YgdGhpcwo+ IGNoYW5nZT8KCkRlZmluaXRlbHkhIFdpbGwgcmV2aXNlLgoKU2VhbgoKPiAKPiAtIEpleWt1bWFy IFMKPiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAvKgo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAg ICAqIFRPRE86IGhhbmRsZSBjYXNlcyB3aGVyZSB0aGVyZSB3aWxsIGJlIG1vcmUgdGhhbgo+ID4g PiA+Pj4gPiAtICAgICAgICAgICAgICAqIG9uZSBjcnRjIHBlciBjb21taXQgY3ljbGUuIFJlbW92 ZSB0aGlzIGNoZWNrCj4gPiB0aGVuLgo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAqIEN1cnJl bnQgYXNzdW1wdGlvbiBpcyB0aGVyZSB3aWxsIGJlIG9ubHkgb25lIGNydGMKPiA+ID4gPj4+ID4g LSAgICAgICAgICAgICAgKiBwZXIgY29tbWl0IGN5Y2xlLgo+ID4gPiA+Pj4gPiAtICAgICAgICAg ICAgICAqLwo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGlmIChqIDwgcHJpdi0+bnVtX2NydGNz KQo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiA+ID4+PiA+IC0g ICAgIH0KPiA+ID4gPj4+ID4gLQo+ID4gPiA+Pj4gPiAtICAgICBpZiAocmV0KSB7Cj4gPiA+ID4+ PiA+IC0gICAgICAgICAgICAgLyoqCj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICogdGhpcyBp cyBub3QgZXhwZWN0ZWQgdG8gaGFwcGVuLCBidXQgYXQgdGhpcyBwb2ludAo+ID4gdGhlCj4gPiA+ ID4+PiA+IHN0YXRlCj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICogaGFzIGJlZW4gc3dhcHBl ZCwgYnV0IHdlIGNvdWxkbid0IGRpc3BhdGNoIHRvIGEKPiA+IGNydGMKPiA+ID4gPj4+ID4gdGhy ZWFkLgo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAqIGZhbGxiYWNrIG5vdyB0byBhIHN5bmNo cm9ub3VzIGNvbXBsZXRlX2NvbW1pdCB0bwo+ID4gdHJ5Cj4gPiA+ID4+PiA+IGFuZAo+ID4gPiA+ Pj4gPiAtICAgICAgICAgICAgICAqIGVuc3VyZSB0aGF0IFNXIGFuZCBIVyBzdGF0ZSBkb24ndCBn ZXQgb3V0IG9mCj4gPiBzeW5jLgo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAqLwo+ID4gPiA+ Pj4gPiAtICAgICAgICAgICAgIERSTV9FUlJPUigiZmFpbGVkIHRvIGRpc3BhdGNoIGNvbW1pdCB0 byBhbnkKPiA+IENSVENcbiIpOwo+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGNvbXBsZXRlX2Nv bW1pdChjb21taXQpOwo+ID4gPiA+Pj4gPiAtICAgICB9IGVsc2UgaWYgKCFub25ibG9jaykgewo+ ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGt0aHJlYWRfZmx1c2hfd29yaygmY29tbWl0LT5jb21t aXRfd29yayk7Cj4gPiA+ID4+PiA+IC0gICAgIH0KPiA+ID4gPj4+ID4gLQo+ID4gPiA+Pj4gPiAt ICAgICAvKiBmcmVlIG5vbmJsb2NraW5nIGNvbW1pdHMgaW4gdGhpcyBjb250ZXh0LCBhZnRlcgo+ ID4gcHJvY2Vzc2luZyAqLwo+ID4gPiA+Pj4gPiAtICAgICBpZiAoIW5vbmJsb2NrKQo+ID4gPiA+ Pj4gPiAtICAgICAgICAgICAgIGtmcmVlKGNvbW1pdCk7Cj4gPiA+ID4+PiA+ICsgICAgIHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAo+ID4gPiA+Pj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0Cj4gPiA+ID4+PiA+IGRybV9hdG9taWNfc3RhdGUsCj4gPiA+ID4+PiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRfd29yayk7Cj4g PiA+ID4+PiA+ICsgICAgIGNvbW1pdF90YWlsKHN0YXRlKTsKPiA+ID4gPj4+ID4gIH0KPiA+ID4g Pj4+ID4KPiA+ID4gPj4+ID4gIC8qKgo+ID4gPiA+Pj4gPiBAQCAtMjQ3LDE3ICsxMjIsMTIgQEAg aW50IG1zbV9hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlCj4gPiAqZGV2LAo+ID4gPiA+ Pj4gPiAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwgYm9vbCBu b25ibG9jaykKPiA+ID4gPj4+ID4gIHsKPiA+ID4gPj4+ID4gICAgICAgc3RydWN0IG1zbV9kcm1f cHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPiA+ID4+PiA+IC0gICAgIHN0cnVj dCBtc21fY29tbWl0ICpjOwo+ID4gPiA+Pj4gPiAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGM7 Cj4gPiA+ID4+PiA+ICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+ ID4gPj4+ID4gICAgICAgc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gPiA+ID4+PiA+ICAgICAg IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSwgKm5ld19wbGFuZV9zdGF0 ZTsKPiA+ID4gPj4+ID4gICAgICAgaW50IGksIHJldDsKPiA+ID4gPj4+ID4KPiA+ID4gPj4+ID4g LSAgICAgcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZGV2LCBzdGF0ZSk7 Cj4gPiA+ID4+PiA+IC0gICAgIGlmIChyZXQpCj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0 dXJuIHJldDsKPiA+ID4gPj4+ID4gLQo+ID4gPiA+Pj4gPiAgICAgICAvKgo+ID4gPiA+Pj4gPiAg ICAgICAgKiBOb3RlIHRoYXQgcGxhbmUtPmF0b21pY19hc3luY19jaGVjaygpIHNob3VsZCBmYWls IGlmIHdlCj4gPiBuZWVkCj4gPiA+ID4+PiA+ICAgICAgICAqIHRvIHJlLWFzc2lnbiBod3BpcGUg b3IgYW55dGhpbmcgdGhhdCB0b3VjaGVzIGdsb2JhbAo+ID4gYXRvbWljCj4gPiA+ID4+PiA+IEBA IC0yNjUsMzIgKzEzNSwzMCBAQCBpbnQgbXNtX2F0b21pY19jb21taXQoc3RydWN0IGRybV9kZXZp Y2UKPiA+ICpkZXYsCj4gPiA+ID4+PiA+ICAgICAgICAqIGNhc2VzLgo+ID4gPiA+Pj4gPiAgICAg ICAgKi8KPiA+ID4gPj4+ID4gICAgICAgaWYgKHN0YXRlLT5hc3luY191cGRhdGUpIHsKPiA+ID4g Pj4+ID4gKyAgICAgICAgICAgICByZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wcmVwYXJlX3BsYW5l cyhkZXYsIHN0YXRlKTsKPiA+ID4gPj4+ID4gKyAgICAgICAgICAgICBpZiAocmV0KQo+ID4gPiA+ Pj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ID4gPj4+ID4gKwo+ID4g PiA+Pj4gPiAgICAgICAgICAgICAgIGRybV9hdG9taWNfaGVscGVyX2FzeW5jX2NvbW1pdChkZXYs IHN0YXRlKTsKPiA+ID4gPj4+ID4gICAgICAgICAgICAgICBkcm1fYXRvbWljX2hlbHBlcl9jbGVh bnVwX3BsYW5lcyhkZXYsIHN0YXRlKTsKPiA+ID4gPj4+ID4gICAgICAgICAgICAgICByZXR1cm4g MDsKPiA+ID4gPj4+ID4gICAgICAgfQo+ID4gPiA+Pj4gPgo+ID4gPiA+Pj4gPiAtICAgICBjID0g Y29tbWl0X2luaXQoc3RhdGUsIG5vbmJsb2NrKTsKPiA+ID4gPj4+ID4gLSAgICAgaWYgKCFjKSB7 Cj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKPiA+ID4gPj4+ID4gLSAg ICAgICAgICAgICBnb3RvIGVycm9yOwo+ID4gPiA+Pj4gPiAtICAgICB9Cj4gPiA+ID4+PiA+ICsg ICAgIHJldCA9IGRybV9hdG9taWNfaGVscGVyX3NldHVwX2NvbW1pdChzdGF0ZSwgbm9uYmxvY2sp Owo+ID4gPiA+Pj4gPiArICAgICBpZiAocmV0KQo+ID4gPiA+Pj4gPiArICAgICAgICAgICAgIHJl dHVybiByZXQ7Cj4gPiA+ID4+PiA+Cj4gPiA+ID4+PiA+IC0gICAgIC8qCj4gPiA+ID4+PiA+IC0g ICAgICAqIEZpZ3VyZSBvdXQgd2hhdCBjcnRjcyB3ZSBoYXZlOgo+ID4gPiA+Pj4gPiAtICAgICAg Ki8KPiA+ID4gPj4+ID4gLSAgICAgZm9yX2VhY2hfbmV3X2NydGNfaW5fc3RhdGUoc3RhdGUsIGNy dGMsIGNydGNfc3RhdGUsIGkpCj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgYy0+Y3J0Y19tYXNr IHw9IGRybV9jcnRjX21hc2soY3J0Yyk7Cj4gPiA+ID4+PiA+ICsgICAgIElOSVRfV09SSygmc3Rh dGUtPmNvbW1pdF93b3JrLCBjb21taXRfd29yayk7Cj4gPiA+ID4+PiA+Cj4gPiA+ID4+PiA+IC0g ICAgIC8qCj4gPiA+ID4+PiA+IC0gICAgICAqIFdhaXQgZm9yIHBlbmRpbmcgdXBkYXRlcyBvbiBh bnkgb2YgdGhlIHNhbWUgY3J0YydzIGFuZAo+ID4gdGhlbgo+ID4gPiA+Pj4gPiAtICAgICAgKiBt YXJrIG91ciBzZXQgb2YgY3J0YydzIGFzIGJ1c3k6Cj4gPiA+ID4+PiA+IC0gICAgICAqLwo+ID4g PiA+Pj4gPiAtICAgICByZXQgPSBzdGFydF9hdG9taWMoZGV2LT5kZXZfcHJpdmF0ZSwgYy0+Y3J0 Y19tYXNrKTsKPiA+ID4gPj4+ID4gKyAgICAgcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFy ZV9wbGFuZXMoZGV2LCBzdGF0ZSk7Cj4gPiA+ID4+PiA+ICAgICAgIGlmIChyZXQpCj4gPiA+ID4+ PiA+IC0gICAgICAgICAgICAgZ290byBlcnJfZnJlZTsKPiA+ID4gPj4+ID4gKyAgICAgICAgICAg ICByZXR1cm4gcmV0Owo+ID4gPiA+Pj4gPgo+ID4gPiA+Pj4gPiAtICAgICBCVUdfT04oZHJtX2F0 b21pY19oZWxwZXJfc3dhcF9zdGF0ZShzdGF0ZSwgZmFsc2UpIDwgMCk7Cj4gPiA+ID4+PiA+ICsg ICAgIGlmICghbm9uYmxvY2spIHsKPiA+ID4gPj4+ID4gKyAgICAgICAgICAgICByZXQgPSBkcm1f YXRvbWljX2hlbHBlcl93YWl0X2Zvcl9mZW5jZXMoZGV2LCBzdGF0ZSwKPiA+ID4gPj4+ID4gdHJ1 ZSk7Cj4gPiA+ID4+PiA+ICsgICAgICAgICAgICAgaWYgKHJldCkKPiA+ID4gPj4+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Cj4gPiA+ID4+PiA+ICsgICAgIH0KPiA+ID4gPj4+ ID4KPiA+ID4gPj4+ID4gICAgICAgLyoKPiA+ID4gPj4+ID4gICAgICAgICogVGhpcyBpcyB0aGUg cG9pbnQgb2Ygbm8gcmV0dXJuIC0gZXZlcnl0aGluZyBiZWxvdyBuZXZlcgo+ID4gZmFpbHMKPiA+ ID4gPj4+ID4gZXhjZXB0Cj4gPiA+ID4+PiA+IEBAIC0yOTksNiArMTY3LDggQEAgaW50IG1zbV9h dG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiA+ID4+PiA+ICAgICAgICAq Cj4gPiA+ID4+PiA+ICAgICAgICAqIHN3YXAgZHJpdmVyIHByaXZhdGUgc3RhdGUgd2hpbGUgc3Rp bGwgaG9sZGluZyBzdGF0ZV9sb2NrCj4gPiA+ID4+PiA+ICAgICAgICAqLwo+ID4gPiA+Pj4gPiAr ICAgICBCVUdfT04oZHJtX2F0b21pY19oZWxwZXJfc3dhcF9zdGF0ZShzdGF0ZSwgZmFsc2UpIDwg MCk7Cj4gPiA+ID4+PiA+ICsKPiA+ID4gPj4+ID4gICAgICAgaWYgKHRvX2ttc19zdGF0ZShzdGF0 ZSktPnN0YXRlKQo+ID4gPiA+Pj4gPiAgICAgICAgICAgICAgIHByaXYtPmttcy0+ZnVuY3MtPnN3 YXBfc3RhdGUocHJpdi0+a21zLCBzdGF0ZSk7Cj4gPiA+ID4+PiA+Cj4gPiA+ID4+PiA+IEBAIC0z MjksMTIgKzE5OSwxMyBAQCBpbnQgbXNtX2F0b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UK PiA+ICpkZXYsCj4gPiA+ID4+PiA+ICAgICAgICAqLwo+ID4gPiA+Pj4gPgo+ID4gPiA+Pj4gPiAg ICAgICBkcm1fYXRvbWljX3N0YXRlX2dldChzdGF0ZSk7Cj4gPiA+ID4+PiA+IC0gICAgIG1zbV9h dG9taWNfY29tbWl0X2Rpc3BhdGNoKGRldiwgc3RhdGUsIGMpOwo+ID4gPiA+Pj4gPiArICAgICBp ZiAobm9uYmxvY2spCj4gPiA+ID4+PiA+ICsgICAgICAgICAgICAgcXVldWVfd29yayhzeXN0ZW1f dW5ib3VuZF93cSwgJnN0YXRlLT5jb21taXRfd29yayk7Cj4gPiA+ID4+PiA+ICsgICAgIGVsc2UK PiA+ID4gPj4+ID4gKyAgICAgICAgICAgICBjb21taXRfdGFpbChzdGF0ZSk7Cj4gPiA+ID4+PiA+ Cj4gPiA+ID4+PiA+ICAgICAgIHJldHVybiAwOwo+ID4gPiA+Pj4gPgo+ID4gPiA+Pj4gPiAtZXJy X2ZyZWU6Cj4gPiA+ID4+PiA+IC0gICAgIGtmcmVlKGMpOwo+ID4gPiA+Pj4gPiAgZXJyb3I6Cj4g PiA+ID4+PiA+ICAgICAgIGRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRldiwgc3Rh dGUpOwo+ID4gPiA+Pj4gPiAgICAgICByZXR1cm4gcmV0Owo+ID4gPiA+Pj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMKPiA+ID4gPj4+ID4gYi9kcml2ZXJzL2dw dS9kcm0vbXNtL21zbV9kcnYuYwo+ID4gPiA+Pj4gPiBpbmRleCBlZGE0YTIzNDBmOTMuLmIzNTQ0 MjRjY2NiNSAxMDA2NDQKPiA+ID4gPj4+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21f ZHJ2LmMKPiA+ID4gPj4+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMKPiA+ ID4gPj4+ID4gQEAgLTU0OSw3ICs1NDksNiBAQCBzdGF0aWMgaW50IG1zbV9kcm1faW5pdChzdHJ1 Y3QgZGV2aWNlICpkZXYsCj4gPiBzdHJ1Y3QKPiA+ID4gPj4+ID4gZHJtX2RyaXZlciAqZHJ2KQo+ ID4gPiA+Pj4gPiAgICAgICAgICAgICAgIGdvdG8gbWRzc19pbml0X2ZhaWw7Cj4gPiA+ID4+PiA+ Cj4gPiA+ID4+PiA+ICAgICAgIHByaXYtPndxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoIm1z bV9kcm0iLCAwKTsKPiA+ID4gPj4+ID4gLSAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+ cGVuZGluZ19jcnRjc19ldmVudCk7Cj4gPiA+ID4+PiA+Cj4gPiA+ID4+PiA+ICAgICAgIElOSVRf TElTVF9IRUFEKCZwcml2LT5jbGllbnRfZXZlbnRfbGlzdCk7Cj4gPiA+ID4+PiA+ICAgICAgIElO SVRfTElTVF9IRUFEKCZwcml2LT5pbmFjdGl2ZV9saXN0KTsKPiA+ID4gPj4+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4gPiA+ID4+PiA+IGIvZHJpdmVycy9n cHUvZHJtL21zbS9tc21fZHJ2LmgKPiA+ID4gPj4+ID4gaW5kZXggY2Y5NmE4NWY0YjU1Li4yOTI0 OTZiNjgyZTggMTAwNjQ0Cj4gPiA+ID4+PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2Rydi5oCj4gPiA+ID4+PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4g PiA+ID4+PiA+IEBAIC01MzYsMTAgKzUzNiw2IEBAIHN0cnVjdCBtc21fZHJtX3ByaXZhdGUgewo+ ID4gPiA+Pj4gPgo+ID4gPiA+Pj4gPiAgICAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7 Cj4gPiA+ID4+PiA+Cj4gPiA+ID4+PiA+IC0gICAgIC8qIGNydGNzIHBlbmRpbmcgYXN5bmMgYXRv bWljIHVwZGF0ZXM6ICovCj4gPiA+ID4+PiA+IC0gICAgIHVpbnQzMl90IHBlbmRpbmdfY3J0Y3M7 Cj4gPiA+ID4+PiA+IC0gICAgIHdhaXRfcXVldWVfaGVhZF90IHBlbmRpbmdfY3J0Y3NfZXZlbnQ7 Cj4gPiA+ID4+PiA+IC0KPiA+ID4gPj4+ID4gICAgICAgdW5zaWduZWQgaW50IG51bV9wbGFuZXM7 Cj4gPiA+ID4+PiA+ICAgICAgIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lc1tNQVhfUExBTkVTXTsK PiAKPiAtLSAKPiBKZXlrdW1hciBTCgotLSAKU2VhbiBQYXVsLCBTb2Z0d2FyZSBFbmdpbmVlciwg R29vZ2xlIC8gQ2hyb21pdW0gT1MKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCg==