From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 1/3] [RFC]drm: add syncobj timeline support v4 Date: Wed, 12 Sep 2018 09:22:10 +0200 Message-ID: References: <20180906062523.16542-1-david1.zhou@amd.com> <4374aa17-c659-0c22-a487-c5e236690108@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <4374aa17-c659-0c22-a487-c5e236690108-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Chunming Zhou , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Dave Airlie , Daniel Rakos , Daniel Vetter , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: dri-devel@lists.freedesktop.org UGluZz8gSGF2ZSB5b3Ugc2VlbiBteSBjb21tZW50cyBoZXJlPwoKTG9va3MgbGlrZSB5b3UgaGF2 ZW4ndCBhZGRyZXNzZWQgYW55IG9mIHRoZW0gaW4geW91ciBsYXN0IG1haWwuCgpDaHJpc3RpYW4u CgpBbSAwNi4wOS4yMDE4IHVtIDA5OjI1IHNjaHJpZWIgQ2hyaXN0aWFuIEvDtm5pZzoKPiBBbSAw Ni4wOS4yMDE4IHVtIDA4OjI1IHNjaHJpZWIgQ2h1bm1pbmcgWmhvdToKPj4gVktfS0hSX3RpbWVs aW5lX3NlbWFwaG9yZToKPj4gVGhpcyBleHRlbnNpb24gaW50cm9kdWNlcyBhIG5ldyB0eXBlIG9m IHNlbWFwaG9yZSB0aGF0IGhhcyBhbiBpbnRlZ2VyIAo+PiBwYXlsb2FkCj4+IGlkZW50aWZ5aW5n IGEgcG9pbnQgaW4gYSB0aW1lbGluZS4gU3VjaCB0aW1lbGluZSBzZW1hcGhvcmVzIHN1cHBvcnQg dGhlCj4KPiBEcm9wIHRoZSB0ZXJtIHNlbWFwaG9yZSBoZXJlLCBiZXR0ZXIgdXNlIHN5bmNvYmou Cj4KPj4gZm9sbG93aW5nIG9wZXJhdGlvbnM6Cj4+IMKgwqDCoCAqIENQVSBxdWVyeSAtIEEgaG9z dCBvcGVyYXRpb24gdGhhdCBhbGxvd3MgcXVlcnlpbmcgdGhlIHBheWxvYWQgCj4+IG9mIHRoZQo+ PiDCoMKgwqDCoMKgIHRpbWVsaW5lIHNlbWFwaG9yZS4KPj4gwqDCoMKgICogQ1BVIHdhaXQgLSBB IGhvc3Qgb3BlcmF0aW9uIHRoYXQgYWxsb3dzIGEgYmxvY2tpbmcgd2FpdCBmb3IgYQo+PiDCoMKg wqDCoMKgIHRpbWVsaW5lIHNlbWFwaG9yZSB0byByZWFjaCBhIHNwZWNpZmllZCB2YWx1ZS4KPj4g wqDCoMKgICogRGV2aWNlIHdhaXQgLSBBIGRldmljZSBvcGVyYXRpb24gdGhhdCBhbGxvd3Mgd2Fp dGluZyBmb3IgYQo+PiDCoMKgwqDCoMKgIHRpbWVsaW5lIHNlbWFwaG9yZSB0byByZWFjaCBhIHNw ZWNpZmllZCB2YWx1ZS4KPj4gwqDCoMKgICogRGV2aWNlIHNpZ25hbCAtIEEgZGV2aWNlIG9wZXJh dGlvbiB0aGF0IGFsbG93cyBhZHZhbmNpbmcgdGhlCj4+IMKgwqDCoMKgwqAgdGltZWxpbmUgc2Vt YXBob3JlIHRvIGEgc3BlY2lmaWVkIHZhbHVlLgo+Pgo+PiBTaW5jZSBpdCdzIGEgdGltZWxpbmUs IHRoYXQgbWVhbnMgdGhlIGZyb250IHRpbWUgcG9pbnQoUFQpIGFsd2F5cyBpcyAKPj4gc2lnbmFs ZWQgYmVmb3JlIHRoZSBsYXRlIFBULgo+PiBhLiBzaWduYWwgUFQgZGVzaWduOgo+PiBTaWduYWwg UFQgZmVuY2UgTiBkZXBlbmRzIG9uIFBUW04tMV0gZmVuY2UgYW5kIHNpZ25hbCBvcGVydGlvbiBm ZW5jZSwgCj4+IHdoZW4gUFRbTl0gZmVuY2UgaXMgc2lnbmFsZWQsCj4+IHRoZSB0aW1lbGluZSB3 aWxsIGluY3JlYXNlIHRvIHZhbHVlIG9mIFBUW05dLgo+PiBiLiB3YWl0IFBUIGRlc2lnbjoKPj4g V2FpdCBQVCBmZW5jZSBpcyBzaWduYWxlZCBieSByZWFjaGluZyB0aW1lbGluZSBwb2ludCB2YWx1 ZSwgd2hlbiAKPj4gdGltZWxpbmUgaXMgaW5jcmVhc2luZywgd2lsbCBjb21wYXJlCj4+IHdhaXQg UFRzIHZhbHVlIHdpdGggbmV3IHRpbWVsaW5lIHZhbHVlLCBpZiBQVCB2YWx1ZSBpcyBsb3dlciB0 aGFuIAo+PiB0aW1lbGluZSB2YWx1ZSwgdGhlbiB3YWl0IFBUIHdpbGwgYmUKPj4gc2lnbmFsZWQs IG90aGVyd2lzZSBrZWVwIGluIGxpc3QuIHNlbWFwaG9yZSB3YWl0IG9wZXJhdGlvbiBjYW4gd2Fp dCAKPj4gb24gYW55IHBvaW50IG9mIHRpbWVsaW5lLAo+PiBzbyBuZWVkIGEgUkIgdHJlZSB0byBv cmRlciB0aGVtLiBBbmQgd2FpdCBQVCBjb3VsZCBhaGVhZCBvZiBzaWduYWwgCj4+IFBULCB3ZSBu ZWVkIGEgc3VtaXNzaW9uIGZlbmNlIHRvCj4+IHBlcmZvcm0gdGhhdC4KPj4KPj4gdjI6Cj4+IDEu IHJlbW92ZSB1bnVzZWQgRFJNX1NZTkNPQkpfQ1JFQVRFX1RZUEVfTk9STUFMLiAoQ2hyaXN0aWFu KQo+PiAyLiBtb3ZlIHVuZXhwb3NlZCBkZW5pdGlvbnMgdG8gLmMgZmlsZS4gKERhbmllbCBWZXR0 ZXIpCj4+IDMuIHNwbGl0IHVwIHRoZSBjaGFuZ2UgdG8gZHJtX3N5bmNvYmpfZmluZF9mZW5jZSgp IGluIGEgc2VwYXJhdGUgCj4+IHBhdGNoLiAoQ2hyaXN0aWFuKQo+PiA0LiBzcGxpdCB1cCB0aGUg Y2hhbmdlIHRvIGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UoKSBpbiBhIHNlcGFyYXRlIAo+PiBw YXRjaC4KPj4gNS4gZHJvcCB0aGUgc3VibWlzc2lvbl9mZW5jZSBpbXBsZW1lbnRhdGlvbiBhbmQg aW5zdGVhZCB1c2UgCj4+IHdhaXRfZXZlbnQoKSBmb3IgdGhhdC4gKENocmlzdGlhbikKPj4gNi4g V0FSTl9PTihwb2ludCAhPSAwKSBmb3IgTk9STUFMIHR5cGUgc3luY29iaiBjYXNlLiAoRGFuaWVs IFZldHRlcikKPj4KPj4gdjM6Cj4+IDEuIHJlcGxhY2Ugbm9ybWFsIHN5bmNvYmogd2l0aCB0aW1l bGluZSBpbXBsZW1lbmF0aW9uLiAoVmV0dGVyIGFuZCAKPj4gQ2hyaXN0aWFuKQo+PiDCoMKgwqDC oCBhLiBub3JtYWwgc3luY29iaiBzaWduYWwgb3Agd2lsbCBjcmVhdGUgYSBzaWduYWwgUFQgdG8g dGFpbCBvZiAKPj4gc2lnbmFsIHB0IGxpc3QuCj4+IMKgwqDCoMKgIGIuIG5vcm1hbCBzeW5jb2Jq IHdhaXQgb3Agd2lsbCBjcmVhdGUgYSB3YWl0IHB0IHdpdGggbGFzdCBzaWduYWwgCj4+IHBvaW50 LCBhbmQgdGhpcyB3YWl0IFBUIGlzIG9ubHkgc2lnbmFsZWQgYnkgcmVsYXRlZCBzaWduYWwgcG9p bnQgUFQuCj4+IDIuIG1hbnkgYnVnIGZpeCBhbmQgY2xlYW4gdXAKPj4gMy4gc3R1YiBmZW5jZSBt b3ZpbmcgaXMgbW92ZWQgdG8gb3RoZXIgcGF0Y2guCj4+Cj4+IHY077yaCj4+IDEuIGZpeCBSQiB0 cmVlIGxvb3Agd2l0aCB3aGlsZShub2RlPXJiX2ZpcnN0KC4uLikpLiAoQ2hyaXN0aWFuKQo+PiAy LiBmaXggc3luY29iaiBsaWZlY3ljbGUuIChDaHJpc3RpYW4pCj4+IDMuIG9ubHkgZW5hYmxlX3Np Z25hbGluZyB3aGVuIHRoZXJlIGlzIHdhaXRfcHQuIChDaHJpc3RpYW4pCj4+Cj4+IFRlc3RlZCBi eSAuL2RlcXAtdmsgLW4gZEVRUC1WSypzZW1hcGhvcmUqIGZvciBub3JtYWwgc3luY29iago+Pgo+ PiBTaWduZWQtb2ZmLWJ5OiBDaHVubWluZyBaaG91IDxkYXZpZDEuemhvdUBhbWQuY29tPgo+PiBD YzogQ2hyaXN0aWFuIEtvbmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4+IENjOiBEYXZl IEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgo+PiBDYzogRGFuaWVsIFJha29zIDxEYW5pZWwu UmFrb3NAYW1kLmNvbT4KPj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KPj4g LS0tCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5jwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfCA1MTYgKysrKysrKysrKysrKysrKystLS0tCj4+IMKgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyB8wqDCoCA0ICstCj4+IMKgIGluY2x1ZGUvZHJt L2RybV9zeW5jb2JqLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCA3OCAr Ky0tCj4+IMKgIGluY2x1ZGUvdWFwaS9kcm0vZHJtLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+PiDCoCA0IGZpbGVzIGNoYW5nZWQsIDQ0OCBpbnNl cnRpb25zKCspLCAxNTEgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX3N5bmNvYmouYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5bmNvYmouYwo+ PiBpbmRleCBlOWNlNjIzZDA0OWUuLjk0YjMxZGUyMzg1OCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2RybV9zeW5jb2JqLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeW5j b2JqLmMKPj4gQEAgLTU2LDYgKzU2LDkgQEAKPj4gwqAgI2luY2x1ZGUgImRybV9pbnRlcm5hbC5o Igo+PiDCoCAjaW5jbHVkZSA8ZHJtL2RybV9zeW5jb2JqLmg+Cj4+IMKgICsvKiBtZXJnZSBub3Jt YWwgc3luY29iaiB0byB0aW1lbGluZSBzeW5jb2JqLCB0aGUgcG9pbnQgaW50ZXJ2YWwgaXMgCj4+ IDEgKi8KPj4gKyNkZWZpbmUgRFJNX1NZTkNPQkpfTk9STUFMX1BPSU5UIDEKPj4gKwo+PiDCoCBz dHJ1Y3QgZHJtX3N5bmNvYmpfc3R1Yl9mZW5jZSB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGRtYV9m ZW5jZSBiYXNlOwo+PiDCoMKgwqDCoMKgIHNwaW5sb2NrX3QgbG9jazsKPj4gQEAgLTgyLDYgKzg1 LDE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyAKPj4gZHJtX3N5bmNvYmpf c3R1Yl9mZW5jZV9vcHMgPSB7Cj4+IMKgwqDCoMKgwqAgLnJlbGVhc2UgPSBkcm1fc3luY29ial9z dHViX2ZlbmNlX3JlbGVhc2UsCj4+IMKgIH07Cj4+IMKgICtzdHJ1Y3QgZHJtX3N5bmNvYmpfc2ln bmFsX3B0IHsKPj4gK8KgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlX2FycmF5ICpiYXNlOwo+PiArwqDC oMKgIHU2NMKgwqDCoCB2YWx1ZTsKPj4gK8KgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4+ ICt9Owo+PiArc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQgewo+PiArwqDCoMKgIHN0cnVjdCBk cm1fc3luY29ial9zdHViX2ZlbmNlIGJhc2U7Cj4+ICvCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAq c2lnbmFsX3B0X2ZlbmNlOwo+PiArwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2VfY2Igd2FpdF9jYjsK Pj4gK8KgwqDCoCBzdHJ1Y3QgcmJfbm9kZcKgwqAgbm9kZTsKPj4gK8KgwqDCoCB1NjTCoMKgwqAg dmFsdWU7Cj4+ICt9Owo+PiDCoCDCoCAvKioKPj4gwqDCoCAqIGRybV9zeW5jb2JqX2ZpbmQgLSBs b29rdXAgYW5kIHJlZmVyZW5jZSBhIHN5bmMgb2JqZWN0Lgo+PiBAQCAtMTA5LDYxICsxMjQsMjM4 IEBAIHN0cnVjdCBkcm1fc3luY29iaiAqZHJtX3N5bmNvYmpfZmluZChzdHJ1Y3QgCj4+IGRybV9m aWxlICpmaWxlX3ByaXZhdGUsCj4+IMKgIH0KPj4gwqAgRVhQT1JUX1NZTUJPTChkcm1fc3luY29i al9maW5kKTsKPj4gwqAgLXN0YXRpYyB2b2lkIGRybV9zeW5jb2JqX2FkZF9jYWxsYmFja19sb2Nr ZWQoc3RydWN0IGRybV9zeW5jb2JqIAo+PiAqc3luY29iaiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX2NiICpjYiwK Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX3N5 bmNvYmpfZnVuY190IGZ1bmMpCj4+ICtzdGF0aWMgdm9pZCBkcm1fc3luY29ial90aW1lbGluZV9p bml0KHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmUgKnN5bmNv YmpfdGltZWxpbmUpCj4KPiBTaW5jZSB3ZSBtZXJnZWQgdGltZWxpbmUgYW5kIHNpbmdsZXRvbiBz eW5jb2JqIHlvdSBjYW4gZHJvcCB0aGUgZXh0cmEgCj4gX3RpbWVsaW5lXyBwYXJ0IGluIHRoZSBm dW5jdGlvbiBuYW1lIEkgdGhpbmsuCj4KPj4gwqAgewo+PiAtwqDCoMKgIGNiLT5mdW5jID0gZnVu YzsKPj4gLcKgwqDCoCBsaXN0X2FkZF90YWlsKCZjYi0+bm9kZSwgJnN5bmNvYmotPmNiX2xpc3Qp Owo+PiArwqDCoMKgIHNwaW5fbG9jaygmc3luY29iai0+bG9jayk7Cj4+ICvCoMKgwqAgc3luY29i al90aW1lbGluZS0+dGltZWxpbmVfY29udGV4dCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEp Owo+PiArwqDCoMKgIHN5bmNvYmpfdGltZWxpbmUtPnRpbWVsaW5lID0gMDsKPj4gK8KgwqDCoCBz eW5jb2JqX3RpbWVsaW5lLT5zaWduYWxfcG9pbnQgPSAwOwo+PiArwqDCoMKgIGluaXRfd2FpdHF1 ZXVlX2hlYWQoJnN5bmNvYmpfdGltZWxpbmUtPndxKTsKPj4gKwo+PiArwqDCoMKgIHN5bmNvYmpf dGltZWxpbmUtPndhaXRfcHRfdHJlZSA9IFJCX1JPT1Q7Cj4+ICvCoMKgwqAgSU5JVF9MSVNUX0hF QUQoJnN5bmNvYmpfdGltZWxpbmUtPnNpZ25hbF9wdF9saXN0KTsKPj4gK8KgwqDCoCBzcGluX3Vu bG9jaygmc3luY29iai0+bG9jayk7Cj4+IMKgIH0KPj4gwqAgLXN0YXRpYyBpbnQgZHJtX3N5bmNv YmpfZmVuY2VfZ2V0X29yX2FkZF9jYWxsYmFjayhzdHJ1Y3QgCj4+IGRybV9zeW5jb2JqICpzeW5j b2JqLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfY2IgKmNiLAo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zeW5jb2Jq X2Z1bmNfdCBmdW5jKQo+PiArc3RhdGljIHZvaWQgZHJtX3N5bmNvYmpfdGltZWxpbmVfZmluaShz dHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lICpzeW5jb2JqX3Rp bWVsaW5lKQo+PiDCoCB7Cj4+IC3CoMKgwqAgaW50IHJldDsKPj4gLQo+PiAtwqDCoMKgICpmZW5j ZSA9IGRybV9zeW5jb2JqX2ZlbmNlX2dldChzeW5jb2JqKTsKPj4gLcKgwqDCoCBpZiAoKmZlbmNl KQo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDE7Cj4+ICvCoMKgwqAgc3RydWN0IHJiX25vZGUg Km5vZGUgPSBOVUxMOwo+PiArwqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICp3YWl0 X3B0ID0gTlVMTDsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0ICpzaWdu YWxfcHQgPSBOVUxMLCAqdG1wOwo+PiDCoCDCoMKgwqDCoMKgIHNwaW5fbG9jaygmc3luY29iai0+ bG9jayk7Cj4+IC3CoMKgwqAgLyogV2UndmUgYWxyZWFkeSB0cmllZCBvbmNlIHRvIGdldCBhIGZl bmNlIGFuZCBmYWlsZWQuwqAgTm93IHRoYXQgd2UKPj4gLcKgwqDCoMKgICogaGF2ZSB0aGUgbG9j aywgdHJ5IG9uZSBtb3JlIHRpbWUganVzdCB0byBiZSBzdXJlIHdlIGRvbid0IGFkZCBhCj4+IC3C oMKgwqDCoCAqIGNhbGxiYWNrIHdoZW4gYSBmZW5jZSBoYXMgYWxyZWFkeSBiZWVuIHNldC4KPj4g LcKgwqDCoMKgICovCj4+IC3CoMKgwqAgaWYgKHN5bmNvYmotPmZlbmNlKSB7Cj4+IC3CoMKgwqDC oMKgwqDCoCAqZmVuY2UgPSAKPj4gZG1hX2ZlbmNlX2dldChyY3VfZGVyZWZlcmVuY2VfcHJvdGVj dGVkKHN5bmNvYmotPmZlbmNlLAo+PiAtIGxvY2tkZXBfaXNfaGVsZCgmc3luY29iai0+bG9jaykp KTsKPj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IDE7Cj4+IC3CoMKgwqAgfSBlbHNlIHsKPj4gLcKg wqDCoMKgwqDCoMKgICpmZW5jZSA9IE5VTEw7Cj4+IC3CoMKgwqDCoMKgwqDCoCBkcm1fc3luY29i al9hZGRfY2FsbGJhY2tfbG9ja2VkKHN5bmNvYmosIGNiLCBmdW5jKTsKPj4gLcKgwqDCoMKgwqDC oMKgIHJldCA9IDA7Cj4+ICvCoMKgwqAgaWYgKCFSQl9FTVBUWV9ST09UKCZzeW5jb2JqX3RpbWVs aW5lLT53YWl0X3B0X3RyZWUpKQo+PiArwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJUaGVyZSBz dGlsbCBhcmUgYWR2YW5jZWQgd2FpdF9wdHMhIHBscyBjaGVjayEiKTsKPj4gK8KgwqDCoCB3aGls ZSAoKG5vZGUgPSByYl9maXJzdCgmc3luY29ial90aW1lbGluZS0+d2FpdF9wdF90cmVlKSkpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIHdhaXRfcHQgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgZHJtX3N5 bmNvYmpfd2FpdF9wdCwgbm9kZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByYl9lcmFzZSgmd2FpdF9w dC0+bm9kZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc3luY29ial90aW1lbGluZS0+ d2FpdF9wdF90cmVlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIFJCX0NMRUFSX05PREUoJndhaXRfcHQt Pm5vZGUpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCF3YWl0X3B0LT5zaWduYWxfcHRfZmVuY2Up IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogaWYgd2FpdF9wdCBzdGlsbCBpcyBhZHZh bmNlZCwgZmFrZSBzaWduYWwgaXQuCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBnZW5l cmFsbHkgc2hvdWxkbid0IGhhcHBlbnMgKi8KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1h X2ZlbmNlX3NldF9lcnJvcigmd2FpdF9wdC0+YmFzZS5iYXNlLCAtRU5PRU5UKTsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZG1hX2ZlbmNlX3NpZ25hbCgmd2FpdF9wdC0+YmFzZS5iYXNlKTsK Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIC8qIGtmcmVlKHdhaXRfcHQp IGlzIGV4Y3V0ZWQgYnkgZmVuY2UgcHV0ICovCj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2Vf cHV0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCBsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUoc2lnbmFsX3B0LCB0bXAsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAmc3luY29ial90aW1lbGluZS0+c2lnbmFsX3B0X2xpc3QsIGxpc3QpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIGxpc3RfZGVsKCZzaWduYWxfcHQtPmxpc3QpOwo+PiArwqDCoMKg wqDCoMKgwqAgZG1hX2ZlbmNlX3B1dCgmc2lnbmFsX3B0LT5iYXNlLT5iYXNlKTsKPj4gK8KgwqDC oMKgwqDCoMKgIGtmcmVlKHNpZ25hbF9wdCk7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKg IHNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4gK30KPj4gwqAgLcKgwqDCoCByZXR1cm4g cmV0Owo+PiArc3RhdGljIHZvaWQgd2FpdF9wdF9mdW5jKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNl LCBzdHJ1Y3QgCj4+IGRtYV9mZW5jZV9jYiAqY2IpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRy bV9zeW5jb2JqX3dhaXRfcHQgKndhaXRfcHQgPQo+PiArwqDCoMKgwqDCoMKgwqAgY29udGFpbmVy X29mKGNiLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCwgd2FpdF9jYik7Cj4+ICsKPj4gK8Kg wqDCoCBkbWFfZmVuY2Vfc2lnbmFsKCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+PiArwqDCoMKgIGRt YV9mZW5jZV9wdXQod2FpdF9wdC0+c2lnbmFsX3B0X2ZlbmNlKTsKPj4gK8KgwqDCoCB3YWl0X3B0 LT5zaWduYWxfcHRfZmVuY2UgPSBOVUxMOwo+PiArwqDCoMKgIGRtYV9mZW5jZV9wdXQoJndhaXRf cHQtPmJhc2UuYmFzZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRybV9zeW5jb2JqX2Zp bmRfc2lnbmFsX3B0X2Zvcl93YWl0X3B0KHN0cnVjdCAKPj4gZHJtX3N5bmNvYmogKnN5bmNvYmos Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICp3YWl0X3B0KQo+PiArewo+Cj4gVGhhdCB3aG9s ZSBhcHByb2FjaCBzdGlsbCBsb29rcyBob3JyaWJsZSBjb21wbGljYXRlZCB0byBtZS4KPgo+IEVz cGVjaWFsbHkgdGhlIHNlcGFyYXRpb24gb2Ygc2lnbmFsIGFuZCB3YWl0IHB0IGlzIGNvbXBsZXRl bHkgCj4gdW5uZWNlc3NhcnkgYXMgZmFyIGFzIEkgY2FuIHNlZS4KPgo+IFdoZW4gYSB3YWl0IHB0 IGlzIHJlcXVlc3RlZCB3ZSBqdXN0IG5lZWQgdG8gc2VhcmNoIGZvciB0aGUgc2lnbmFsIAo+IHBv aW50IHdoaWNoIGl0IHdpbGwgdHJpZ2dlci4KPgo+IFJlZ2FyZHMsCj4gQ2hyaXN0aWFuLgo+Cj4+ ICvCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lICp0aW1lbGluZSA9ICZzeW5jb2Jq LT5zeW5jb2JqX3RpbWVsaW5lOwo+PiArwqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial9zaWduYWxf cHQgKnNpZ25hbF9wdDsKPj4gK8KgwqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqAgaWYgKHdh aXRfcHQtPnNpZ25hbF9wdF9mZW5jZSkgewo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiAr wqDCoMKgIH0gZWxzZSBpZiAoKHN5bmNvYmotPnR5cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9USU1F TElORSkgJiYKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICh3YWl0X3B0LT52YWx1ZSA8PSB0aW1l bGluZS0+dGltZWxpbmUpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2Vfc2lnbmFsKCZ3 YWl0X3B0LT5iYXNlLmJhc2UpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmJfZXJhc2UoJndhaXRfcHQt Pm5vZGUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnRpbWVsaW5lLT53YWl0X3B0X3Ry ZWUpOwo+PiArwqDCoMKgwqDCoMKgwqAgUkJfQ0xFQVJfTk9ERSgmd2FpdF9wdC0+bm9kZSk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2VfcHV0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGxpc3Rf Zm9yX2VhY2hfZW50cnkoc2lnbmFsX3B0LCAmdGltZWxpbmUtPnNpZ25hbF9wdF9saXN0LCBsaXN0 KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAod2FpdF9wdC0+dmFsdWUgPCBzaWduYWxfcHQtPnZh bHVlKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gK8KgwqDCoMKgwqDC oMKgIGlmICgoc3luY29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX05PUk1BTCkgJiYKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHdhaXRfcHQtPnZhbHVlICE9IHNpZ25hbF9wdC0+dmFs dWUpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gK8KgwqDCoMKgwqDC oMKgIHdhaXRfcHQtPnNpZ25hbF9wdF9mZW5jZSA9IAo+PiBkbWFfZmVuY2VfZ2V0KCZzaWduYWxf cHQtPmJhc2UtPmJhc2UpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gZG1hX2ZlbmNlX2FkZF9j YWxsYmFjayh3YWl0X3B0LT5zaWduYWxfcHRfZmVuY2UsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJndhaXRfcHQtPndhaXRfY2IsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2FpdF9wdF9mdW5j KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQgPT0gLUVOT0VOVCkgewo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkbWFfZmVuY2Vfc2lnbmFsKCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2VfcHV0KHdhaXRfcHQtPnNpZ25hbF9wdF9m ZW5jZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdhaXRfcHQtPnNpZ25hbF9wdF9mZW5j ZSA9IE5VTEw7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJiX2VyYXNlKCZ3YWl0X3B0LT5u b2RlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnRpbWVsaW5lLT53YWl0 X3B0X3RyZWUpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSQl9DTEVBUl9OT0RFKCZ3YWl0 X3B0LT5ub2RlKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX2ZlbmNlX3B1dCgmd2Fp dF9wdC0+YmFzZS5iYXNlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAocmV0IDwgMCkg ewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2VfcHV0KHdhaXRfcHQtPnNpZ25h bF9wdF9mZW5jZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiYWRkIGNh bGxiYWNrIGVycm9yISIpOwo+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLyogYWZ0ZXIgYWRkaW5nIGNhbGxiYWNrLCByZW1vdmUgZnJvbSByYiB0 cmVlICovCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJiX2VyYXNlKCZ3YWl0X3B0LT5ub2Rl LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnRpbWVsaW5lLT53YWl0X3B0 X3RyZWUpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSQl9DTEVBUl9OT0RFKCZ3YWl0X3B0 LT5ub2RlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsK Pj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgLyogc2lnbmFsZWQgcHQgd2FzIHJlbGVhc2VkICovCj4+ ICvCoMKgwqAgaWYgKCF3YWl0X3B0LT5zaWduYWxfcHRfZmVuY2UgJiYgKHdhaXRfcHQtPnZhbHVl IDw9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGltZWxp bmUtPnNpZ25hbF9wb2ludCkpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9zaWduYWwo JndhaXRfcHQtPmJhc2UuYmFzZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByYl9lcmFzZSgmd2FpdF9w dC0+bm9kZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmdGltZWxpbmUtPndhaXRfcHRf dHJlZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBSQl9DTEVBUl9OT0RFKCZ3YWl0X3B0LT5ub2RlKTsK Pj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9wdXQoJndhaXRfcHQtPmJhc2UuYmFzZSk7Cj4+ ICvCoMKgwqAgfQo+PiDCoCB9Cj4+IMKgIC12b2lkIGRybV9zeW5jb2JqX2FkZF9jYWxsYmFjayhz dHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial9jYiAqY2IsCj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zeW5jb2JqX2Z1bmNfdCBmdW5jKQo+PiArc3RhdGljIGlu dCBkcm1fc3luY29ial90aW1lbGluZV9jcmVhdGVfc2lnbmFsX3B0KHN0cnVjdCBkcm1fc3luY29i aiAKPj4gKnN5bmNvYmosCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0IHBvaW50KQo+PiDCoCB7Cj4+ICvC oMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3NpZ25hbF9wdCAqc2lnbmFsX3B0ID0KPj4gK8KgwqDC oMKgwqDCoMKgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQpLCBH RlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0ICp0YWls X3B0Owo+PiArwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZXM7Cj4+ICvCoMKgwqAgc3Ry dWN0IHJiX25vZGUgKm5vZGU7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQg KnRhaWxfd2FpdF9wdCA9IE5VTEw7Cj4+ICvCoMKgwqAgaW50IG51bV9mZW5jZXMgPSAwOwo+PiAr wqDCoMKgIGludCByZXQgPSAwLCBpOwo+PiArCj4+ICvCoMKgwqAgaWYgKCFzaWduYWxfcHQpCj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gK8KgwqDCoCBpZiAoc3luY29iai0+ c3luY29ial90aW1lbGluZS5zaWduYWxfcG9pbnQgPj0gcG9pbnQpIHsKPj4gK8KgwqDCoMKgwqDC oMKgIERSTV9XQVJOKCJBIGxhdGVyIHNpZ25hbCBpcyByZWFkeSEiKTsKPj4gK8KgwqDCoMKgwqDC oMKgIGdvdG8gb3V0Owo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCBpZiAoIWZlbmNlKQo+PiArwqDC oMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+ICsKPj4gK8KgwqDCoCBmZW5jZXMgPSBrbWFsbG9jX2Fy cmF5KHNpemVvZih2b2lkICopLCAyLCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIWZlbmNl cykKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gb3V0Owo+PiArwqDCoMKgIGZlbmNlc1tudW1fZmVu Y2VzKytdID0gZG1hX2ZlbmNlX2dldChmZW5jZSk7Cj4+ICvCoMKgwqAgLyogdGltZWxpbmUgc3lu Y29iaiBtdXN0IHRha2UgdGhpcyBkZXBlbmRlbmN5ICovCj4+ICvCoMKgwqAgaWYgKHN5bmNvYmot PnR5cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9USU1FTElORSkgewo+PiArwqDCoMKgwqDCoMKgwqAg c3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghbGlzdF9l bXB0eSgmc3luY29iai0+c3luY29ial90aW1lbGluZS5zaWduYWxfcHRfbGlzdCkpIHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdGFpbF9wdCA9IAo+PiBsaXN0X2xhc3RfZW50cnkoJnN5bmNv YmotPnN5bmNvYmpfdGltZWxpbmUuc2lnbmFsX3B0X2xpc3QsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfc2ln bmFsX3B0LCBsaXN0KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmVuY2VzW251bV9mZW5j ZXMrK10gPSBkbWFfZmVuY2VfZ2V0KCZ0YWlsX3B0LT5iYXNlLT5iYXNlKTsKPj4gK8KgwqDCoMKg wqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsK Pj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgc2lnbmFsX3B0LT5iYXNlID0gZG1hX2ZlbmNlX2FycmF5 X2NyZWF0ZShudW1fZmVuY2VzLCBmZW5jZXMsCj4+ICsgc3luY29iai0+c3luY29ial90aW1lbGlu ZS50aW1lbGluZV9jb250ZXh0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHBvaW50LCBmYWxzZSk7Cj4+ICvCoMKgwqAgaWYgKCFzaWduYWxfcHQt PmJhc2UpCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+ICsKPj4gK8KgwqDCoCBzaWdu YWxfcHQtPnZhbHVlID0gcG9pbnQ7Cj4+IMKgwqDCoMKgwqAgc3Bpbl9sb2NrKCZzeW5jb2JqLT5s b2NrKTsKPj4gLcKgwqDCoCBkcm1fc3luY29ial9hZGRfY2FsbGJhY2tfbG9ja2VkKHN5bmNvYmos IGNiLCBmdW5jKTsKPj4gK8KgwqDCoCBzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnNpZ25hbF9w b2ludCA9IHBvaW50Owo+PiArwqDCoMKgIElOSVRfTElTVF9IRUFEKCZzaWduYWxfcHQtPmxpc3Qp Owo+PiArwqDCoMKgIGxpc3RfYWRkX3RhaWwoJnNpZ25hbF9wdC0+bGlzdCwgCj4+ICZzeW5jb2Jq LT5zeW5jb2JqX3RpbWVsaW5lLnNpZ25hbF9wdF9saXN0KTsKPj4gKwo+PiArwqDCoMKgIC8qIGNo ZWNrIGlmIHRoZXJlIGlzIGFkdmFuY2VkIHdhaXQgKi8KPj4gK8KgwqDCoCBub2RlID0gcmJfbGFz dCgmc3luY29iai0+c3luY29ial90aW1lbGluZS53YWl0X3B0X3RyZWUpOwo+PiArwqDCoMKgIGlm IChub2RlKQo+PiArwqDCoMKgwqDCoMKgwqAgdGFpbF93YWl0X3B0ID0gcmJfZW50cnkobm9kZSwg c3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQsIAo+PiBub2RlKTsKPj4gK8KgwqDCoCBpZiAodGFp bF93YWl0X3B0ICYmICF0YWlsX3dhaXRfcHQtPnNpZ25hbF9wdF9mZW5jZSkgewo+PiArwqDCoMKg wqDCoMKgwqAgZm9yIChub2RlID0gcmJfZmlyc3QoJnN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUu d2FpdF9wdF90cmVlKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBub2RlICE9IE5VTEw7 IG5vZGUgPSByYl9uZXh0KG5vZGUpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBkcm1fc3luY29ial93YWl0X3B0ICp3YWl0X3B0ID0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByYl9lbnRyeShub2RlLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbm9kZSk7Cj4+ICsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX3N5bmNvYmpfZmluZF9zaWduYWxfcHRfZm9yX3dh aXRfcHQoc3luY29iaiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdhaXRfcHQpOwo+PiArwqDCoMKgwqDCoMKg wqAgfQo+PiArwqDCoMKgIH0KPj4gKwo+PiDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZzeW5jb2Jq LT5sb2NrKTsKPj4gK8KgwqDCoCB3YWtlX3VwX2FsbCgmc3luY29iai0+c3luY29ial90aW1lbGlu ZS53cSk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK2ZhaWw6Cj4+ICvCoMKgwqAgZm9y IChpID0gMDsgaSA8IG51bV9mZW5jZXM7IGkrKykKPj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9mZW5j ZV9wdXQoZmVuY2VzW2ldKTsKPj4gK8KgwqDCoCBrZnJlZShmZW5jZXMpOwo+PiArb3V0Ogo+PiAr wqDCoMKgIGtmcmVlKHNpZ25hbF9wdCk7Cj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4gwqAgfQo+ PiDCoCAtdm9pZCBkcm1fc3luY29ial9yZW1vdmVfY2FsbGJhY2soc3RydWN0IGRybV9zeW5jb2Jq ICpzeW5jb2JqLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRy bV9zeW5jb2JqX2NiICpjYikKPj4gK3N0YXRpYyB2b2lkIGRybV9zeW5jb2JqX3RpbWVsaW5lX2dh cmJhZ2VfY29sbGVjdGlvbihzdHJ1Y3QgCj4+IGRybV9zeW5jb2JqICpzeW5jb2JqKQo+PiDCoCB7 Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lICp0aW1lbGluZSA9ICZzeW5j b2JqLT5zeW5jb2JqX3RpbWVsaW5lOwo+PiArwqDCoMKgIHN0cnVjdCByYl9ub2RlICpub2RlOwo+ PiArwqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICp3YWl0X3B0Owo+PiArwqDCoMKg IHN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQgKnNpZ25hbF9wdCwgKnRtcDsKPj4gKwo+PiDC oMKgwqDCoMKgIHNwaW5fbG9jaygmc3luY29iai0+bG9jayk7Cj4+IC3CoMKgwqAgbGlzdF9kZWxf aW5pdCgmY2ItPm5vZGUpOwo+PiArwqDCoMKgIG5vZGUgPSByYl9maXJzdCgmdGltZWxpbmUtPndh aXRfcHRfdHJlZSk7Cj4+ICvCoMKgwqAgd2hpbGUgKG5vZGUpIHsKPj4gK8KgwqDCoMKgwqDCoMKg IHdhaXRfcHQgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCwgbm9k ZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWRtYV9mZW5jZV9pc19zaWduYWxlZCgmd2FpdF9w dC0+YmFzZS5iYXNlKSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBub2RlID0gcmJfbmV4 dChub2RlKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+ICvCoMKgwqDC oMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoCByYl9lcmFzZSgmd2FpdF9wdC0+bm9kZSwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmdGltZWxpbmUtPndhaXRfcHRfdHJlZSk7Cj4+ICvC oMKgwqDCoMKgwqDCoCBSQl9DTEVBUl9OT0RFKCZ3YWl0X3B0LT5ub2RlKTsKPj4gK8KgwqDCoMKg wqDCoMKgIC8qIGtmcmVlKHdhaXRfcHQpIGlzIGV4Y3V0ZWQgYnkgZmVuY2UgcHV0ICovCj4+ICvC oMKgwqDCoMKgwqDCoCBkbWFfZmVuY2VfcHV0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+PiArwqDC oMKgwqDCoMKgwqAgbm9kZSA9IHJiX2ZpcnN0KCZ0aW1lbGluZS0+d2FpdF9wdF90cmVlKTsKPj4g K8KgwqDCoCB9Cj4+ICvCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpZ25hbF9wdCwg dG1wLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnRpbWVsaW5lLT5zaWdu YWxfcHRfbGlzdCwgbGlzdCkgewo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGRtYV9mZW5jZV9pc19z aWduYWxlZCgmc2lnbmFsX3B0LT5iYXNlLT5iYXNlKSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB0aW1lbGluZS0+dGltZWxpbmUgPSBzaWduYWxfcHQtPnZhbHVlOwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBsaXN0X2RlbCgmc2lnbmFsX3B0LT5saXN0KTsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZG1hX2ZlbmNlX3B1dCgmc2lnbmFsX3B0LT5iYXNlLT5iYXNlKTsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAga2ZyZWUoc2lnbmFsX3B0KTsKPj4gK8KgwqDCoMKgwqDCoMKg IH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qc2lnbmFsX3B0IGlzIGluIG9y ZGVyIGluIGxpc3QsIGZyb20gc21hbGwgdG8gYmlnLCBzbwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICogdGhlIGxhdGVyIG11c3Qgbm90IGJlIHNpZ25hbCBlaXRoZXIgKi8KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqAg fQo+PiArCj4+IMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+PiDCoCB9 Cj4+IC0KPj4gwqAgLyoqCj4+IMKgwqAgKiBkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNlIC0gcmVw bGFjZSBmZW5jZSBpbiBhIHN5bmMgb2JqZWN0Lgo+PiDCoMKgICogQHN5bmNvYmo6IFN5bmMgb2Jq ZWN0IHRvIHJlcGxhY2UgZmVuY2UgaW4KPj4gQEAgLTE3NiwyOCArMzY4LDI5IEBAIHZvaWQgZHJt X3N5bmNvYmpfcmVwbGFjZV9mZW5jZShzdHJ1Y3QgCj4+IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBwb2ludCwKPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNl ICpmZW5jZSkKPj4gwqAgewo+PiAtwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKm9sZF9mZW5jZTsK Pj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfY2IgKmN1ciwgKnRtcDsKPj4gLQo+PiAtwqDC oMKgIGlmIChmZW5jZSkKPj4gLcKgwqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9nZXQoZmVuY2UpOwo+ PiAtCj4+IC3CoMKgwqAgc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4gLQo+PiAtwqDCoMKg IG9sZF9mZW5jZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3luY29iai0+ZmVuY2UsCj4+ IC0gbG9ja2RlcF9pc19oZWxkKCZzeW5jb2JqLT5sb2NrKSk7Cj4+IC3CoMKgwqAgcmN1X2Fzc2ln bl9wb2ludGVyKHN5bmNvYmotPmZlbmNlLCBmZW5jZSk7Cj4+IC0KPj4gLcKgwqDCoCBpZiAoZmVu Y2UgIT0gb2xkX2ZlbmNlKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUoY3VyLCB0bXAsICZzeW5jb2JqLT5jYl9saXN0LCBub2RlKSB7Cj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGxpc3RfZGVsX2luaXQoJmN1ci0+bm9kZSk7Cj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGN1ci0+ZnVuYyhzeW5jb2JqLCBjdXIpOwo+PiArwqDCoMKgIGRybV9zeW5jb2Jq X3RpbWVsaW5lX2dhcmJhZ2VfY29sbGVjdGlvbihzeW5jb2JqKTsKPj4gK8KgwqDCoCBpZiAoc3lu Y29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX1RJTUVMSU5FKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCBpZiAoZmVuY2UpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zeW5jb2JqX3Rp bWVsaW5lX2NyZWF0ZV9zaWduYWxfcHQoc3luY29iaiwgZmVuY2UsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG9p bnQpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDCoMKgIH0gZWxzZSBpZiAoc3lu Y29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX05PUk1BTCkgewo+PiArwqDCoMKgwqDCoMKg wqAgdTY0IHB0X3ZhbHVlOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWZlbmNlKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zeW5jb2JqX3RpbWVsaW5lX2Zpbmkoc3luY29i aiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZHJtX3N5bmNvYmpfdGltZWxpbmVfaW5pdChzeW5jb2JqLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnN5bmNvYmotPnN5bmNvYmpfdGltZWxp bmUpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoCBwdF92YWx1ZSA9IHN5bmNvYmotPnN5bmNvYmpfdGlt ZWxpbmUuc2lnbmFsX3BvaW50ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX1NZTkNP QkpfTk9STUFMX1BPSU5UOwo+PiArwqDCoMKgwqDCoMKgwqAgZHJtX3N5bmNvYmpfdGltZWxpbmVf Y3JlYXRlX3NpZ25hbF9wdChzeW5jb2JqLCBmZW5jZSwgCj4+IHB0X3ZhbHVlKTsKPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqAg RFJNX0VSUk9SKCJ0aGUgc3luY29iaiB0eXBlIGlzbid0IHN1cHBvcnRcbiIpOwo+PiDCoMKgwqDC oMKgIH0KPj4gLQo+PiAtwqDCoMKgIHNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4gLQo+ PiAtwqDCoMKgIGRtYV9mZW5jZV9wdXQob2xkX2ZlbmNlKTsKPj4gwqAgfQo+PiDCoCBFWFBPUlRf U1lNQk9MKGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UpOwo+PiDCoCBAQCAtMjIwLDYgKzQxMywx MjAgQEAgc3RhdGljIGludCAKPj4gZHJtX3N5bmNvYmpfYXNzaWduX251bGxfaGFuZGxlKHN0cnVj dCBkcm1fc3luY29iaiAqc3luY29iaikKPj4gwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gwqAgfQo+ PiDCoCArc3RhdGljIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICoKPj4gK2RybV9zeW5jb2Jq X3RpbWVsaW5lX2xvb2t1cF93YWl0X3B0X2ZlbmNlKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29i aiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgcG9p bnQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGRtYV9mZW5jZSAqKmZlbmNlKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCByYl9ub2RlICpub2Rl ID0gCj4+IHN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUud2FpdF9wdF90cmVlLnJiX25vZGU7Cj4+ ICvCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQgKndhaXRfcHQgPSBOVUxMOwo+PiAr Cj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4gK8KgwqDCoCB3aGlsZShu b2RlKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpbnQgcmVzdWx0Owo+PiArCj4+ICvCoMKgwqDCoMKg wqDCoCB3YWl0X3B0ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQs IG5vZGUpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmVzdWx0ID0gcG9pbnQgLSB3YWl0X3B0LT52YWx1 ZTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXN1bHQgPCAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIG5vZGUgPSBub2RlLT5yYl9sZWZ0Owo+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNl IGlmIChyZXN1bHQgPiAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5vZGUgPSBub2Rl LT5yYl9yaWdodDsKPj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmIChmZW5jZSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq ZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ ICvCoMKgwqAgc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+PiArCj4+ICvCoMKgwqAgcmV0 dXJuIHdhaXRfcHQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2Fp dF9wdCAqCj4+ICtkcm1fc3luY29ial90aW1lbGluZV9jcmVhdGVfd2FpdF9wdF9hbmRfcmV0dXJu X2ZlbmNlKHN0cnVjdCAKPj4gZHJtX3N5bmNvYmogKnN5bmNvYmosCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgcG9pbnQsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9z eW5jb2JqX3dhaXRfcHQgKndhaXRfcHQgPSBremFsbG9jKHNpemVvZigqd2FpdF9wdCksCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEdGUF9LRVJORUwpOwo+PiArwqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial9zdHViX2ZlbmNlICpi YXNlOwo+PiArwqDCoMKgIHN0cnVjdCByYl9ub2RlICoqbmV3ID0gCj4+ICYoc3luY29iai0+c3lu Y29ial90aW1lbGluZS53YWl0X3B0X3RyZWUucmJfbm9kZSksICpwYXJlbnQgPSBOVUxMOwo+PiAr Cj4+ICvCoMKgwqAgaWYgKCF3YWl0X3B0KQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7 Cj4+ICvCoMKgwqAgYmFzZSA9ICZ3YWl0X3B0LT5iYXNlOwo+PiArwqDCoMKgIHNwaW5fbG9ja19p bml0KCZiYXNlLT5sb2NrKTsKPj4gK8KgwqDCoCBkbWFfZmVuY2VfaW5pdCgmYmFzZS0+YmFzZSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmRybV9zeW5jb2JqX3N0dWJfZmVuY2Vf b3BzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmYmFzZS0+bG9jaywKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3luY29iai0+c3luY29ial90aW1lbGluZS50aW1l bGluZV9jb250ZXh0LCBwb2ludCk7Cj4+ICvCoMKgwqAgd2FpdF9wdC0+dmFsdWUgPSBwb2ludDsK Pj4gK8KgwqDCoCB3YWl0X3B0LT5zaWduYWxfcHRfZmVuY2UgPSBOVUxMOwo+PiArCj4+ICvCoMKg wqAgLyogd2FpdCBwdCBtdXN0IGJlIGluIGFuIG9yZGVyLCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkg bG9va3VwIGFuZCAKPj4gc2lnbmFsCj4+ICvCoMKgwqDCoCAqIGl0ICovCj4+ICvCoMKgwqAgc3Bp bl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4gK8KgwqDCoCB3aGlsZSgqbmV3KSB7Cj4+ICvCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqdGhpcyA9Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJiX2VudHJ5KCpuZXcsIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0 LCBub2RlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGludCByZXN1bHQgPSB3YWl0X3B0LT52YWx1ZSAt IHRoaXMtPnZhbHVlOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBwYXJlbnQgPSAqbmV3Owo+PiAr wqDCoMKgwqDCoMKgwqAgaWYgKHJlc3VsdCA8IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG5ldyA9ICYoKCpuZXcpLT5yYl9sZWZ0KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKHJl c3VsdCA+IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5ldyA9ICYoKCpuZXcpLT5yYl9y aWdodCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGdvdG8gZXhpc3Q7Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIGlmIChmZW5jZSkKPj4gK8KgwqDC oMKgwqDCoMKgICpmZW5jZSA9IGRtYV9mZW5jZV9nZXQoJndhaXRfcHQtPmJhc2UuYmFzZSk7Cj4+ ICvCoMKgwqAgcmJfbGlua19ub2RlKCZ3YWl0X3B0LT5ub2RlLCBwYXJlbnQsIG5ldyk7Cj4+ICvC oMKgwqAgcmJfaW5zZXJ0X2NvbG9yKCZ3YWl0X3B0LT5ub2RlLCAKPj4gJnN5bmNvYmotPnN5bmNv YmpfdGltZWxpbmUud2FpdF9wdF90cmVlKTsKPj4gK8KgwqDCoCBzcGluX3VubG9jaygmc3luY29i ai0+bG9jayk7Cj4+ICvCoMKgwqAgcmV0dXJuIHdhaXRfcHQ7Cj4+ICtleGlzdDoKPj4gK8KgwqDC oCBzcGluX3VubG9jaygmc3luY29iai0+bG9jayk7Cj4+ICvCoMKgwqAgZG1hX2ZlbmNlX3B1dCgm d2FpdF9wdC0+YmFzZS5iYXNlKTsKPj4gK8KgwqDCoCB3YWl0X3B0ID0gZHJtX3N5bmNvYmpfdGlt ZWxpbmVfbG9va3VwX3dhaXRfcHRfZmVuY2Uoc3luY29iaiwgcG9pbnQsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmZW5j ZSk7Cj4+ICvCoMKgwqAgcmV0dXJuIHdhaXRfcHQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1 Y3QgZG1hX2ZlbmNlICoKPj4gK2RybV9zeW5jb2JqX3RpbWVsaW5lX3BvaW50X2dldChzdHJ1Y3Qg ZHJtX3N5bmNvYmogKnN5bmNvYmosIHU2NCAKPj4gcG9pbnQsIHU2NCBmbGFncykKPj4gK3sKPj4g K8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqd2FpdF9wdDsKPj4gK8KgwqDCoCBz dHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IE5VTEw7Cj4+ICsKPj4gK8KgwqDCoCAvKiBjaGVjayBp ZiB0aGUgd2FpdCBwdCBleGlzdHMgKi8KPj4gK8KgwqDCoCB3YWl0X3B0ID0gZHJtX3N5bmNvYmpf dGltZWxpbmVfbG9va3VwX3dhaXRfcHRfZmVuY2Uoc3luY29iaiwgcG9pbnQsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAm ZmVuY2UpOwo+PiArwqDCoMKgIGlmICghZmVuY2UpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIFRo aXMgaXMgYSBuZXcgd2FpdCBwdCwgc28gY3JlYXRlIGl0ICovCj4+ICvCoMKgwqDCoMKgwqDCoCB3 YWl0X3B0ID0gCj4+IGRybV9zeW5jb2JqX3RpbWVsaW5lX2NyZWF0ZV93YWl0X3B0X2FuZF9yZXR1 cm5fZmVuY2Uoc3luY29iaiwgcG9pbnQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmZlbmNlKTsKPj4gK8KgwqDC oMKgwqDCoMKgIGlmICghZmVuY2UpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBO VUxMOwo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCBpZiAod2FpdF9wdCkgewo+PiArwqDCoMKgwqDC oMKgwqAgaW50IHJldCA9IDA7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChmbGFncyAmIERS TV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlUKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJldCA9IAo+PiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzeW5j b2JqLT5zeW5jb2JqX3RpbWVsaW5lLndxLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2FpdF9wdC0+dmFsdWUg PD0gCj4+IHN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUuc2lnbmFsX3BvaW50LAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbXNlY3NfdG9famlmZmllcygxMDAwMCkpOyAvKiB3YWl0IAo+PiAxMHMgKi8KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8PSAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKg wqDCoMKgwqAgc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGRy bV9zeW5jb2JqX2ZpbmRfc2lnbmFsX3B0X2Zvcl93YWl0X3B0KHN5bmNvYmosIHdhaXRfcHQpOwo+ PiArwqDCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIGZlbmNlOwo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCByZXR1cm4gTlVM TDsKPj4gK30KPj4gKwo+PiDCoCAvKioKPj4gwqDCoCAqIGRybV9zeW5jb2JqX2ZpbmRfZmVuY2Ug LSBsb29rdXAgYW5kIHJlZmVyZW5jZSB0aGUgZmVuY2UgaW4gYSAKPj4gc3luYyBvYmplY3QKPj4g wqDCoCAqIEBmaWxlX3ByaXZhdGU6IGRybSBmaWxlIHByaXZhdGUgcG9pbnRlcgo+PiBAQCAtMjM0 LDIwICs1NDEsNDYgQEAgc3RhdGljIGludCAKPj4gZHJtX3N5bmNvYmpfYXNzaWduX251bGxfaGFu ZGxlKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaikKPj4gwqDCoCAqIGNvbnRhaW5zIGEgcmVm ZXJlbmNlIHRvIHRoZSBmZW5jZSwgd2hpY2ggbXVzdCBiZSByZWxlYXNlZCBieSAKPj4gY2FsbGlu Zwo+PiDCoMKgICogZG1hX2ZlbmNlX3B1dCgpLgo+PiDCoMKgICovCj4+IC1pbnQgZHJtX3N5bmNv YmpfZmluZF9mZW5jZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSwKPj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGhhbmRsZSwgdTY0IHBvaW50LAo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCj4+ICtpbnQgZHJt X3N5bmNvYmpfc2VhcmNoX2ZlbmNlKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwgdTY0IHBv aW50LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0IGZsYWdzLCBzdHJ1 Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCj4+IMKgIHsKPj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNv YmogKnN5bmNvYmogPSBkcm1fc3luY29ial9maW5kKGZpbGVfcHJpdmF0ZSwgCj4+IGhhbmRsZSk7 Cj4+IMKgwqDCoMKgwqAgaW50IHJldCA9IDA7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKCFzeW5jb2Jq KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9FTlQ7Cj4+IMKgIC3CoMKgwqAgKmZl bmNlID0gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN5bmNvYmopOwo+PiArwqDCoMKgIGRybV9zeW5j b2JqX3RpbWVsaW5lX2dhcmJhZ2VfY29sbGVjdGlvbihzeW5jb2JqKTsKPj4gK8KgwqDCoCBpZiAo c3luY29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX05PUk1BTCkgewo+PiArwqDCoMKgwqDC oMKgwqAgLypOT1JNQUwgc3luY29iaiBhbHdheXMgd2FpdCBvbiBsYXN0IHB0ICovCj4+ICvCoMKg wqDCoMKgwqDCoCB1NjQgdGFpbF9wdF92YWx1ZSA9IHN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUu c2lnbmFsX3BvaW50Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAodGFpbF9wdF92YWx1ZSA9 PSAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0YWlsX3B0X3ZhbHVlICs9IERSTV9TWU5D T0JKX05PUk1BTF9QT0lOVDsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIE5PUk1BTCBzeW5jb2JqIGRv ZXNuJ3QgY2FyZSBwb2ludCB2YWx1ZSAqLwo+PiArwqDCoMKgwqDCoMKgwqAgV0FSTl9PTihwb2lu dCAhPSAwKTsKPj4gK8KgwqDCoMKgwqDCoMKgICpmZW5jZSA9IGRybV9zeW5jb2JqX3RpbWVsaW5l X3BvaW50X2dldChzeW5jb2JqLCB0YWlsX3B0X3ZhbHVlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZsYWdzKTsKPj4gK8KgwqDCoCB9 IGVsc2UgaWYgKHN5bmNvYmotPnR5cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9USU1FTElORSkgewo+ PiArwqDCoMKgwqDCoMKgwqAgKmZlbmNlID0gZHJtX3N5bmNvYmpfdGltZWxpbmVfcG9pbnRfZ2V0 KHN5bmNvYmosIHBvaW50LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGZsYWdzKTsKPj4gK8KgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKg wqDCoMKgwqAgRFJNX0VSUk9SKCJEb24ndCBzdXBwb3J0IHRoaXMgdHlwZSBzeW5jb2JqXG4iKTsK Pj4gK8KgwqDCoMKgwqDCoMKgICpmZW5jZSA9IE5VTEw7Cj4+ICvCoMKgwqAgfQo+PiDCoMKgwqDC oMKgIGlmICghKmZlbmNlKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUlOVkFMOwo+ PiDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArRVhQT1JUX1NZ TUJPTChkcm1fc3luY29ial9zZWFyY2hfZmVuY2UpOwo+PiAraW50IGRybV9zeW5jb2JqX2ZpbmRf ZmVuY2Uoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHUzMiBoYW5kbGUsIHU2NCBwb2ludCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqKmZlbmNlKSB7Cj4+ICvCoMKgwqAgc3RydWN0 IGRybV9zeW5jb2JqICpzeW5jb2JqID0gZHJtX3N5bmNvYmpfZmluZChmaWxlX3ByaXZhdGUsIAo+ PiBoYW5kbGUpOwo+PiArCj4+ICvCoMKgwqAgaW50IHJldCA9IGRybV9zeW5jb2JqX3NlYXJjaF9m ZW5jZShzeW5jb2JqLCBwb2ludCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlULAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmVuY2UpOwo+PiDCoMKgwqDCoMKgIGRy bV9zeW5jb2JqX3B1dChzeW5jb2JqKTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiDCoCB9 Cj4+IEBAIC0yNjQsNyArNTk3LDcgQEAgdm9pZCBkcm1fc3luY29ial9mcmVlKHN0cnVjdCBrcmVm ICprcmVmKQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiA9IGNvbnRh aW5lcl9vZihrcmVmLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmosCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZmNvdW50KTsKPj4gLcKg wqDCoCBkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNlKHN5bmNvYmosIDAsIE5VTEwpOwo+PiArwqDC oMKgIGRybV9zeW5jb2JqX3RpbWVsaW5lX2Zpbmkoc3luY29iaiwgJnN5bmNvYmotPnN5bmNvYmpf dGltZWxpbmUpOwo+PiDCoMKgwqDCoMKgIGtmcmVlKHN5bmNvYmopOwo+PiDCoCB9Cj4+IMKgIEVY UE9SVF9TWU1CT0woZHJtX3N5bmNvYmpfZnJlZSk7Cj4+IEBAIC0yOTIsOCArNjI1LDEyIEBAIGlu dCBkcm1fc3luY29ial9jcmVhdGUoc3RydWN0IGRybV9zeW5jb2JqIAo+PiAqKm91dF9zeW5jb2Jq LCB1aW50MzJfdCBmbGFncywKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+ PiDCoCDCoMKgwqDCoMKgIGtyZWZfaW5pdCgmc3luY29iai0+cmVmY291bnQpOwo+PiAtwqDCoMKg IElOSVRfTElTVF9IRUFEKCZzeW5jb2JqLT5jYl9saXN0KTsKPj4gwqDCoMKgwqDCoCBzcGluX2xv Y2tfaW5pdCgmc3luY29iai0+bG9jayk7Cj4+ICvCoMKgwqAgaWYgKGZsYWdzICYgRFJNX1NZTkNP QkpfQ1JFQVRFX1RZUEVfVElNRUxJTkUpCj4+ICvCoMKgwqDCoMKgwqDCoCBzeW5jb2JqLT50eXBl ID0gRFJNX1NZTkNPQkpfVFlQRV9USU1FTElORTsKPj4gK8KgwqDCoCBlbHNlCj4+ICvCoMKgwqDC oMKgwqDCoCBzeW5jb2JqLT50eXBlID0gRFJNX1NZTkNPQkpfVFlQRV9OT1JNQUw7Cj4+ICvCoMKg wqAgZHJtX3N5bmNvYmpfdGltZWxpbmVfaW5pdChzeW5jb2JqLCAmc3luY29iai0+c3luY29ial90 aW1lbGluZSk7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKGZsYWdzICYgRFJNX1NZTkNPQkpfQ1JFQVRF X1NJR05BTEVEKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBkcm1fc3luY29ial9hc3Np Z25fbnVsbF9oYW5kbGUoc3luY29iaik7Cj4+IEBAIC02NTEsNyArOTg4LDYgQEAgc3RydWN0IHN5 bmNvYmpfd2FpdF9lbnRyeSB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNr Owo+PiDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwo+PiDCoMKgwqDCoMKgIHN0 cnVjdCBkbWFfZmVuY2VfY2IgZmVuY2VfY2I7Cj4+IC3CoMKgwqAgc3RydWN0IGRybV9zeW5jb2Jq X2NiIHN5bmNvYmpfY2I7Cj4+IMKgIH07Cj4+IMKgIMKgIHN0YXRpYyB2b2lkIHN5bmNvYmpfd2Fp dF9mZW5jZV9mdW5jKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlLAo+PiBAQCAtNjYzLDE4ICs5OTks NiBAQCBzdGF0aWMgdm9pZCBzeW5jb2JqX3dhaXRfZmVuY2VfZnVuYyhzdHJ1Y3QgCj4+IGRtYV9m ZW5jZSAqZmVuY2UsCj4+IMKgwqDCoMKgwqAgd2FrZV91cF9wcm9jZXNzKHdhaXQtPnRhc2spOwo+ PiDCoCB9Cj4+IMKgIC1zdGF0aWMgdm9pZCBzeW5jb2JqX3dhaXRfc3luY29ial9mdW5jKHN0cnVj dCBkcm1fc3luY29iaiAqc3luY29iaiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfY2IgKmNiKQo+PiAtewo+PiAtwqDCoMKg IHN0cnVjdCBzeW5jb2JqX3dhaXRfZW50cnkgKndhaXQgPQo+PiAtwqDCoMKgwqDCoMKgwqAgY29u dGFpbmVyX29mKGNiLCBzdHJ1Y3Qgc3luY29ial93YWl0X2VudHJ5LCBzeW5jb2JqX2NiKTsKPj4g LQo+PiAtwqDCoMKgIC8qIFRoaXMgaGFwcGVucyBpbnNpZGUgdGhlIHN5bmNvYmogbG9jayAqLwo+ PiAtwqDCoMKgIHdhaXQtPmZlbmNlID0gCj4+IGRtYV9mZW5jZV9nZXQocmN1X2RlcmVmZXJlbmNl X3Byb3RlY3RlZChzeW5jb2JqLT5mZW5jZSwKPj4gLSBsb2NrZGVwX2lzX2hlbGQoJnN5bmNvYmot PmxvY2spKSk7Cj4+IC3CoMKgwqAgd2FrZV91cF9wcm9jZXNzKHdhaXQtPnRhc2spOwo+PiAtfQo+ PiAtCj4+IMKgIHN0YXRpYyBzaWduZWQgbG9uZyBkcm1fc3luY29ial9hcnJheV93YWl0X3RpbWVv dXQoc3RydWN0IAo+PiBkcm1fc3luY29iaiAqKnN5bmNvYmpzLAo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDMyX3QgY291bnQsCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 aW50MzJfdCBmbGFncywKPj4gQEAgLTY5OCwxNCArMTAyMiwxMSBAQCBzdGF0aWMgc2lnbmVkIGxv bmcgCj4+IGRybV9zeW5jb2JqX2FycmF5X3dhaXRfdGltZW91dChzdHJ1Y3QgZHJtX3N5bmNvYmog KipzeW5jb2JqcywKPj4gwqDCoMKgwqDCoCBzaWduYWxlZF9jb3VudCA9IDA7Cj4+IMKgwqDCoMKg wqAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGVu dHJpZXNbaV0udGFzayA9IGN1cnJlbnQ7Cj4+IC3CoMKgwqDCoMKgwqDCoCBlbnRyaWVzW2ldLmZl bmNlID0gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN5bmNvYmpzW2ldKTsKPj4gK8KgwqDCoMKgwqDC oMKgIHJldCA9IGRybV9zeW5jb2JqX3NlYXJjaF9mZW5jZShzeW5jb2Jqc1tpXSwgMCwgMCwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmVu dHJpZXNbaV0uZmVuY2UpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFlbnRyaWVzW2ldLmZl bmNlKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChmbGFncyAmIERSTV9TWU5DT0JK X1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlUKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY29udGludWU7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGNsZWFudXBfZW50cmllczsKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUlO VkFMOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGNsZWFudXBfZW50cmllczsKPj4g wqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChkbWFfZmVu Y2VfaXNfc2lnbmFsZWQoZW50cmllc1tpXS5mZW5jZSkpIHsKPj4gQEAgLTczMywxNSArMTA1NCw2 IEBAIHN0YXRpYyBzaWduZWQgbG9uZyAKPj4gZHJtX3N5bmNvYmpfYXJyYXlfd2FpdF90aW1lb3V0 KHN0cnVjdCBkcm1fc3luY29iaiAqKnN5bmNvYmpzLAo+PiDCoMKgwqDCoMKgwqAgKiBmYWxsdGhv dWdoIGFuZCB0cnkgYSAwIHRpbWVvdXQgd2FpdCEKPj4gwqDCoMKgwqDCoMKgICovCj4+IMKgIC3C oMKgwqAgaWYgKGZsYWdzICYgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9TVUJNSVQp IHsKPj4gLcKgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Cj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zeW5jb2JqX2ZlbmNlX2dldF9vcl9hZGRfY2FsbGJh Y2soc3luY29ianNbaV0sCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmVudHJpZXNbaV0uZmVuY2UsCj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJmVudHJpZXNbaV0uc3luY29ial9jYiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzeW5jb2JqX3dhaXRf c3luY29ial9mdW5jKTsKPj4gLcKgwqDCoMKgwqDCoMKgIH0KPj4gLcKgwqDCoCB9Cj4+IC0KPj4g wqDCoMKgwqDCoCBkbyB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzZXRfY3VycmVudF9zdGF0ZShU QVNLX0lOVEVSUlVQVElCTEUpOwo+PiDCoCBAQCAtNzg5LDEzICsxMTAxLDEwIEBAIHN0YXRpYyBz aWduZWQgbG9uZyAKPj4gZHJtX3N5bmNvYmpfYXJyYXlfd2FpdF90aW1lb3V0KHN0cnVjdCBkcm1f c3luY29iaiAqKnN5bmNvYmpzLAo+PiDCoCDCoCBjbGVhbnVwX2VudHJpZXM6Cj4+IMKgwqDCoMKg wqAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGlmIChl bnRyaWVzW2ldLnN5bmNvYmpfY2IuZnVuYykKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJt X3N5bmNvYmpfcmVtb3ZlX2NhbGxiYWNrKHN5bmNvYmpzW2ldLAo+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZlbnRyaWVzW2ldLnN5bmNv YmpfY2IpOwo+PiArwqDCoMKgwqDCoMKgwqAgZG1hX2ZlbmNlX3B1dChlbnRyaWVzW2ldLmZlbmNl KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChlbnRyaWVzW2ldLmZlbmNlX2NiLmZ1bmMpCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9yZW1vdmVfY2FsbGJhY2soZW50 cmllc1tpXS5mZW5jZSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICZlbnRyaWVzW2ldLmZlbmNlX2NiKTsKPj4gLcKgwqDCoMKgwqDCoMKg IGRtYV9mZW5jZV9wdXQoZW50cmllc1tpXS5mZW5jZSk7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoMKg wqDCoMKgIGtmcmVlKGVudHJpZXMpOwo+PiDCoCBAQCAtOTcwLDEyICsxMjc5LDIxIEBAIGRybV9z eW5jb2JqX3Jlc2V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlIAo+PiAqZGV2LCB2b2lkICpkYXRh LAo+PiDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHJldDsKPj4gwqAgLcKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgYXJncy0+Y291bnRfaGFuZGxlczsg aSsrKQo+PiAtwqDCoMKgwqDCoMKgwqAgZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZShzeW5jb2Jq c1tpXSwgMCwgTlVMTCk7Cj4+IC0KPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgYXJncy0+Y291 bnRfaGFuZGxlczsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoc3luY29ianNbaV0tPnR5 cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9USU1FTElORSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBEUk1fRVJST1IoInRpbWVsaW5lIHN5bmNvYmogY2Fubm90IHJlc2V0IVxuIik7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGdvdG8gb3V0Owo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAg ZHJtX3N5bmNvYmpfdGltZWxpbmVfZmluaShzeW5jb2Jqc1tpXSwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc3luY29ianNbaV0tPnN5bmNvYmpfdGltZWxp bmUpOwo+PiArwqDCoMKgwqDCoMKgwqAgZHJtX3N5bmNvYmpfdGltZWxpbmVfaW5pdChzeW5jb2Jq c1tpXSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc3lu Y29ianNbaV0tPnN5bmNvYmpfdGltZWxpbmUpOwo+PiArwqDCoMKgIH0KPj4gK291dDoKPj4gwqDC oMKgwqDCoCBkcm1fc3luY29ial9hcnJheV9mcmVlKHN5bmNvYmpzLCBhcmdzLT5jb3VudF9oYW5k bGVzKTsKPj4gwqAgLcKgwqDCoCByZXR1cm4gMDsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiDC oCB9Cj4+IMKgIMKgIGludAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZXhlY2J1ZmZlci5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4 ZWNidWZmZXIuYwo+PiBpbmRleCAwYThkMmQ2NGYzODAuLjU3OWU5MWE1ODU4YiAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+PiBAQCAtMjEzNyw3 ICsyMTM3LDkgQEAgYXdhaXRfZmVuY2VfYXJyYXkoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIs Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIShmbGFncyAmIEk5MTVfRVhFQ19GRU5DRV9XQUlU KSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+IMKgIC3CoMKgwqDC oMKgwqDCoCBmZW5jZSA9IGRybV9zeW5jb2JqX2ZlbmNlX2dldChzeW5jb2JqKTsKPj4gK8KgwqDC oMKgwqDCoMKgIGRybV9zeW5jb2JqX3NlYXJjaF9mZW5jZShzeW5jb2JqLCAwLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdT X1dBSVRfRk9SX1NVQk1JVCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJmZlbmNlKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghZmVuY2UpCj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiDCoCBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9kcm0vZHJtX3N5bmNvYmouaCBiL2luY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmgKPj4g aW5kZXggNDI1NDMyYjg1YTg3Li42NTdjOTdkYzI1ZWMgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUv ZHJtL2RybV9zeW5jb2JqLmgKPj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX3N5bmNvYmouaAo+PiBA QCAtMzAsNiArMzAsMjUgQEAKPj4gwqAgwqAgc3RydWN0IGRybV9zeW5jb2JqX2NiOwo+PiDCoCAr ZW51bSBkcm1fc3luY29ial90eXBlIHsKPj4gK8KgwqDCoCBEUk1fU1lOQ09CSl9UWVBFX05PUk1B TCwKPj4gK8KgwqDCoCBEUk1fU1lOQ09CSl9UWVBFX1RJTUVMSU5FCj4+ICt9Owo+PiArCj4+ICtz dHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmUgewo+PiArwqDCoMKgIHdhaXRfcXVldWVfaGVhZF90 wqDCoMKgIHdxOwo+PiArwqDCoMKgIHU2NCB0aW1lbGluZV9jb250ZXh0Owo+PiArwqDCoMKgIC8q Kgo+PiArwqDCoMKgwqAgKiBAdGltZWxpbmU6IHN5bmNvYmogdGltZWxpbmUKPj4gK8KgwqDCoMKg ICovCj4+ICvCoMKgwqAgdTY0IHRpbWVsaW5lOwo+PiArwqDCoMKgIHU2NCBzaWduYWxfcG9pbnQ7 Cj4+ICsKPj4gKwo+PiArwqDCoMKgIHN0cnVjdCByYl9yb290IHdhaXRfcHRfdHJlZTsKPj4gK8Kg wqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIHNpZ25hbF9wdF9saXN0Owo+PiArfTsKPj4gKwo+PiDCoCAv KioKPj4gwqDCoCAqIHN0cnVjdCBkcm1fc3luY29iaiAtIHN5bmMgb2JqZWN0Lgo+PiDCoMKgICoK Pj4gQEAgLTQxLDE5ICs2MCwxNiBAQCBzdHJ1Y3QgZHJtX3N5bmNvYmogewo+PiDCoMKgwqDCoMKg wqAgKi8KPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qga3JlZiByZWZjb3VudDsKPj4gwqDCoMKgwqDCoCAv KioKPj4gLcKgwqDCoMKgICogQGZlbmNlOgo+PiAtwqDCoMKgwqAgKiBOVUxMIG9yIGEgcG9pbnRl ciB0byB0aGUgZmVuY2UgYm91bmQgdG8gdGhpcyBvYmplY3QuCj4+IC3CoMKgwqDCoCAqCj4+IC3C oMKgwqDCoCAqIFRoaXMgZmllbGQgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LiBVc2UgCj4+ IGRybV9zeW5jb2JqX2ZlbmNlX2dldCgpCj4+IC3CoMKgwqDCoCAqIGFuZCBkcm1fc3luY29ial9y ZXBsYWNlX2ZlbmNlKCkgaW5zdGVhZC4KPj4gK8KgwqDCoMKgICogQHR5cGU6IGluZGljYXRlIHN5 bmNvYmogdHlwZQo+PiDCoMKgwqDCoMKgwqAgKi8KPj4gLcKgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNl IF9fcmN1ICpmZW5jZTsKPj4gK8KgwqDCoCBlbnVtIGRybV9zeW5jb2JqX3R5cGUgdHlwZTsKPj4g wqDCoMKgwqDCoCAvKioKPj4gLcKgwqDCoMKgICogQGNiX2xpc3Q6IExpc3Qgb2YgY2FsbGJhY2tz IHRvIGNhbGwgd2hlbiB0aGUgJmZlbmNlIGdldHMgCj4+IHJlcGxhY2VkLgo+PiArwqDCoMKgwqAg KiBAc3luY29ial90aW1lbGluZTogdGltZWxpbmUKPj4gwqDCoMKgwqDCoMKgICovCj4+IC3CoMKg wqAgc3RydWN0IGxpc3RfaGVhZCBjYl9saXN0Owo+PiArwqDCoMKgIHN0cnVjdCBkcm1fc3luY29i al90aW1lbGluZSBzeW5jb2JqX3RpbWVsaW5lOwo+PiArCj4+IMKgwqDCoMKgwqAgLyoqCj4+IC3C oMKgwqDCoCAqIEBsb2NrOiBQcm90ZWN0cyAmY2JfbGlzdCBhbmQgd3JpdGUtbG9ja3MgJmZlbmNl Lgo+PiArwqDCoMKgwqAgKiBAbG9jazogUHJvdGVjdHMgdGltZWxpbmUgbGlzdCBhbmQgd3JpdGUt bG9ja3MgJmZlbmNlLgo+PiDCoMKgwqDCoMKgwqAgKi8KPj4gwqDCoMKgwqDCoCBzcGlubG9ja190 IGxvY2s7Cj4+IMKgwqDCoMKgwqAgLyoqCj4+IEBAIC02MiwyNSArNzgsNiBAQCBzdHJ1Y3QgZHJt X3N5bmNvYmogewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBmaWxlICpmaWxlOwo+PiDCoCB9Owo+PiDC oCAtdHlwZWRlZiB2b2lkICgqZHJtX3N5bmNvYmpfZnVuY190KShzdHJ1Y3QgZHJtX3N5bmNvYmog KnN5bmNvYmosCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGRybV9zeW5jb2JqX2NiICpjYik7Cj4+IC0KPj4gLS8qKgo+PiAtICogc3RydWN0IGRybV9zeW5j b2JqX2NiIC0gY2FsbGJhY2sgZm9yIGRybV9zeW5jb2JqX2FkZF9jYWxsYmFjawo+PiAtICogQG5v ZGU6IHVzZWQgYnkgZHJtX3N5bmNvYl9hZGRfY2FsbGJhY2sgdG8gYXBwZW5kIHRoaXMgc3RydWN0 IHRvCj4+IC0gKsKgwqDCoMKgwqAgJmRybV9zeW5jb2JqLmNiX2xpc3QKPj4gLSAqIEBmdW5jOiBk cm1fc3luY29ial9mdW5jX3QgdG8gY2FsbAo+PiAtICoKPj4gLSAqIFRoaXMgc3RydWN0IHdpbGwg YmUgaW5pdGlhbGl6ZWQgYnkgZHJtX3N5bmNvYmpfYWRkX2NhbGxiYWNrLCAKPj4gYWRkaXRpb25h bAo+PiAtICogZGF0YSBjYW4gYmUgcGFzc2VkIGFsb25nIGJ5IGVtYmVkZGluZyBkcm1fc3luY29i al9jYiBpbiBhbm90aGVyIAo+PiBzdHJ1Y3QuCj4+IC0gKiBUaGUgY2FsbGJhY2sgd2lsbCBnZXQg Y2FsbGVkIHRoZSBuZXh0IHRpbWUgCj4+IGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UgaXMKPj4g LSAqIGNhbGxlZC4KPj4gLSAqLwo+PiAtc3RydWN0IGRybV9zeW5jb2JqX2NiIHsKPj4gLcKgwqDC oCBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cj4+IC3CoMKgwqAgZHJtX3N5bmNvYmpfZnVuY190IGZ1 bmM7Cj4+IC19Owo+PiAtCj4+IMKgIHZvaWQgZHJtX3N5bmNvYmpfZnJlZShzdHJ1Y3Qga3JlZiAq a3JlZik7Cj4+IMKgIMKgIC8qKgo+PiBAQCAtMTA2LDI5ICsxMDMsNiBAQCBkcm1fc3luY29ial9w dXQoc3RydWN0IGRybV9zeW5jb2JqICpvYmopCj4+IMKgwqDCoMKgwqAga3JlZl9wdXQoJm9iai0+ cmVmY291bnQsIGRybV9zeW5jb2JqX2ZyZWUpOwo+PiDCoCB9Cj4+IMKgIC0vKioKPj4gLSAqIGRy bV9zeW5jb2JqX2ZlbmNlX2dldCAtIGdldCBhIHJlZmVyZW5jZSB0byBhIGZlbmNlIGluIGEgc3lu YyBvYmplY3QKPj4gLSAqIEBzeW5jb2JqOiBzeW5jIG9iamVjdC4KPj4gLSAqCj4+IC0gKiBUaGlz IGFjcXVpcmVzIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvICZkcm1fc3luY29iai5mZW5jZSAKPj4g Y29udGFpbmVkIGluIEBvYmosCj4+IC0gKiBpZiBub3QgTlVMTC4gSXQgaXMgaWxsZWdhbCB0byBj YWxsIHRoaXMgd2l0aG91dCBhbHJlYWR5IGhvbGRpbmcgYSAKPj4gcmVmZXJlbmNlLgo+PiAtICog Tm8gbG9ja3MgcmVxdWlyZWQuCj4+IC0gKgo+PiAtICogUmV0dXJuczoKPj4gLSAqIEVpdGhlciB0 aGUgZmVuY2Ugb2YgQG9iaiBvciBOVUxMIGlmIHRoZXJlJ3Mgbm9uZS4KPj4gLSAqLwo+PiAtc3Rh dGljIGlubGluZSBzdHJ1Y3QgZG1hX2ZlbmNlICoKPj4gLWRybV9zeW5jb2JqX2ZlbmNlX2dldChz dHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmopCj4+IC17Cj4+IC3CoMKgwqAgc3RydWN0IGRtYV9m ZW5jZSAqZmVuY2U7Cj4+IC0KPj4gLcKgwqDCoCByY3VfcmVhZF9sb2NrKCk7Cj4+IC3CoMKgwqAg ZmVuY2UgPSBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZlKCZzeW5jb2JqLT5mZW5jZSk7Cj4+IC3CoMKg wqAgcmN1X3JlYWRfdW5sb2NrKCk7Cj4+IC0KPj4gLcKgwqDCoCByZXR1cm4gZmVuY2U7Cj4+IC19 Cj4+IC0KPj4gwqAgc3RydWN0IGRybV9zeW5jb2JqICpkcm1fc3luY29ial9maW5kKHN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2YXRlLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB1MzIgaGFuZGxlKTsKPj4gwqAgdm9pZCBkcm1fc3luY29ial9yZXBsYWNl X2ZlbmNlKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwgdTY0IHBvaW50LAo+PiBAQCAtMTQy LDUgKzExNiw3IEBAIGludCBkcm1fc3luY29ial9jcmVhdGUoc3RydWN0IGRybV9zeW5jb2JqIAo+ PiAqKm91dF9zeW5jb2JqLCB1aW50MzJfdCBmbGFncywKPj4gwqAgaW50IGRybV9zeW5jb2JqX2dl dF9oYW5kbGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwgdTMyICpoYW5k bGUpOwo+PiDCoCBpbnQgZHJtX3N5bmNvYmpfZ2V0X2ZkKHN0cnVjdCBkcm1fc3luY29iaiAqc3lu Y29iaiwgaW50ICpwX2ZkKTsKPj4gK2ludCBkcm1fc3luY29ial9zZWFyY2hfZmVuY2Uoc3RydWN0 IGRybV9zeW5jb2JqICpzeW5jb2JqLCB1NjQgcG9pbnQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB1NjQgZmxhZ3MsIHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZSk7Cj4+IMKg IMKgICNlbmRpZgo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm0uaCBiL2luY2x1 ZGUvdWFwaS9kcm0vZHJtLmgKPj4gaW5kZXggMzAwZjMzNjYzM2YyLi5jZWJkYjI1NDFlYjcgMTAw NjQ0Cj4+IC0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtLmgKPj4gKysrIGIvaW5jbHVkZS91YXBp L2RybS9kcm0uaAo+PiBAQCAtNzE3LDYgKzcxNyw3IEBAIHN0cnVjdCBkcm1fcHJpbWVfaGFuZGxl IHsKPj4gwqAgc3RydWN0IGRybV9zeW5jb2JqX2NyZWF0ZSB7Cj4+IMKgwqDCoMKgwqAgX191MzIg aGFuZGxlOwo+PiDCoCAjZGVmaW5lIERSTV9TWU5DT0JKX0NSRUFURV9TSUdOQUxFRCAoMSA8PCAw KQo+PiArI2RlZmluZSBEUk1fU1lOQ09CSl9DUkVBVEVfVFlQRV9USU1FTElORSAoMSA8PCAxKQo+ PiDCoMKgwqDCoMKgIF9fdTMyIGZsYWdzOwo+PiDCoCB9Owo+CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2FtZC1nZngK