From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 2/6] [RFC]drm: add syncobj timeline support v7 Date: Thu, 20 Sep 2018 11:48:14 +0200 Message-ID: References: <20180919091742.21827-1-david1.zhou@amd.com> <06306069-08aa-5704-b35d-3739490345a3@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: 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: "Zhou, David(ChunMing)" , "dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: Dave Airlie , "Rakos, Daniel" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org QW0gMjAuMDkuMjAxOCB1bSAxMTo0NSBzY2hyaWViIFpob3UsIERhdmlkKENodW5NaW5nKToKPgo+ PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiBhbWQtZ2Z4IDxhbWQtZ2Z4LWJv dW5jZXNAbGlzdHMuZnJlZWRlc2t0b3Aub3JnPiBPbiBCZWhhbGYgT2YKPj4gQ2hyaXN0aWFuIEs/ bmlnCj4+IFNlbnQ6IFRodXJzZGF5LCBTZXB0ZW1iZXIgMjAsIDIwMTggNTozNSBQTQo+PiBUbzog WmhvdSwgRGF2aWQoQ2h1bk1pbmcpIDxEYXZpZDEuWmhvdUBhbWQuY29tPjsgZHJpLQo+PiBkZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gQ2M6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhh dC5jb20+OyBSYWtvcywgRGFuaWVsCj4+IDxEYW5pZWwuUmFrb3NAYW1kLmNvbT47IERhbmllbCBW ZXR0ZXIgPGRhbmllbEBmZndsbC5jaD47IGFtZC0KPj4gZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zwo+PiBTdWJqZWN0OiBSZTogW1BBVENIIDIvNl0gW1JGQ11kcm06IGFkZCBzeW5jb2JqIHRpbWVs aW5lIHN1cHBvcnQgdjcKPj4KPj4gVGhlIG9ubHkgdGhpbmcgSSBjYW4gc3RpbGwgc2VlIGlzIHRo YXQgeW91IHVzZSB3YWl0X2V2ZW50X3RpbWVvdXQoKSBpbnN0ZWFkIG9mCj4+IHdhaXRfZXZlbnRf aW50ZXJydXB0aWJsZSgpLgo+Pgo+PiBBbnkgcGFydGljdWxhciByZWFzb24gZm9yIHRoYXQ/Cj4g SSB0cmllZCBhZ2FpbiBhZnRlciB5b3Ugc2FpZCBsYXN0IHRocmVhZCwgQ1RTIGFsd2F5cyBmYWls LCBhbmQgc3luY29iaiB1bml0IHRlc3QgZmFpbHMgYXMgd2VsbC4KCkNhbiB5b3UgZmlndXJlIG91 dCB3aHkgdGhhdCBoYXBwZW5lZD8gSXQgc291bmRzIGxpa2UgYW4gSU9DVEwgaXMgbm90IApjb3Jy ZWN0bHkgcmVzdGFydGVkIGFmdGVyIGFuIHNpZ25hbC4KCj4+IEFwYXJ0IGZyb20gdGhhdCBpdCBu b3cgbG9va3MgZ29vZCB0byBtZS4KPiBUaGFua3MsIENhbiBJIGdldCB5b3VyIFJCIG9uIGl0PwoK Tm8gdGhhdCB0aGUgd2FpdCBpc24ndCBpbnRlcnJ1cHRpYmxlIGlzIHN0aWxsIGEgYmxvY2tlci4K Cj4gQnR3LCBJIHJlYWxpemUgVnVsa2FuIHNwZWMgbmFtZXMgc2VtYXBob3JlIHR5cGUgYXMgYmlu YXJ5IGFuZCB0aW1lbGluZSwgc28gaG93IGFib3V0IGNoYW5nZSBfVFlQRV9JTkRJVklEVUFMICB0 byBfVFlQRV9CSU5BUlkgPwoKTm90IGEgYmFkIG5hbWUgZWl0aGVyLgoKQ2hyaXN0aWFuLgoKPgo+ IFJlZ2FyZHMsCj4gRGF2aWQgWmhvdQo+PiBDaHJpc3RpYW4uCj4+Cj4+IEFtIDIwLjA5LjIwMTgg dW0gMTE6Mjkgc2NocmllYiBaaG91LCBEYXZpZChDaHVuTWluZyk6Cj4+PiBQaW5nLi4uCj4+Pgo+ Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+Pj4gRnJvbTogYW1kLWdmeCA8YW1kLWdm eC1ib3VuY2VzQGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4gT24gQmVoYWxmIE9mCj4+Pj4gQ2h1bm1p bmcgWmhvdQo+Pj4+IFNlbnQ6IFdlZG5lc2RheSwgU2VwdGVtYmVyIDE5LCAyMDE4IDU6MTggUE0K Pj4+PiBUbzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+Pj4+IENjOiBaaG91LCBE YXZpZChDaHVuTWluZykgPERhdmlkMS5aaG91QGFtZC5jb20+OyBhbWQtCj4+Pj4gZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZzsgUmFrb3MsIERhbmllbCA8RGFuaWVsLlJha29zQGFtZC5jb20+Owo+ Pj4+IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD47IERhdmUgQWlybGllIDxhaXJsaWVk QHJlZGhhdC5jb20+Owo+Pj4+IEtvZW5pZywgQ2hyaXN0aWFuIDxDaHJpc3RpYW4uS29lbmlnQGFt ZC5jb20+Cj4+Pj4gU3ViamVjdDogW1BBVENIIDIvNl0gW1JGQ11kcm06IGFkZCBzeW5jb2JqIHRp bWVsaW5lIHN1cHBvcnQgdjcKPj4+Pgo+Pj4+IFRoaXMgcGF0Y2ggaXMgZm9yIFZLX0tIUl90aW1l bGluZV9zZW1hcGhvcmUgZXh0ZW5zaW9uLCBzZW1hcGhvcmUgaXMKPj4+PiBjYWxsZWQgc3luY29i aiBpbiBrZXJuZWwgc2lkZToKPj4+PiBUaGlzIGV4dGVuc2lvbiBpbnRyb2R1Y2VzIGEgbmV3IHR5 cGUgb2Ygc3luY29iaiB0aGF0IGhhcyBhbiBpbnRlZ2VyCj4+Pj4gcGF5bG9hZCBpZGVudGlmeWlu ZyBhIHBvaW50IGluIGEgdGltZWxpbmUuIFN1Y2ggdGltZWxpbmUgc3luY29ianMKPj4+PiBzdXBw b3J0IHRoZSBmb2xsb3dpbmcKPj4+PiBvcGVyYXRpb25zOgo+Pj4+ICAgICAgKiBDUFUgcXVlcnkg LSBBIGhvc3Qgb3BlcmF0aW9uIHRoYXQgYWxsb3dzIHF1ZXJ5aW5nIHRoZSBwYXlsb2FkIG9mIHRo ZQo+Pj4+ICAgICAgICB0aW1lbGluZSBzeW5jb2JqLgo+Pj4+ICAgICAgKiBDUFUgd2FpdCAtIEEg aG9zdCBvcGVyYXRpb24gdGhhdCBhbGxvd3MgYSBibG9ja2luZyB3YWl0IGZvciBhCj4+Pj4gICAg ICAgIHRpbWVsaW5lIHN5bmNvYmogdG8gcmVhY2ggYSBzcGVjaWZpZWQgdmFsdWUuCj4+Pj4gICAg ICAqIERldmljZSB3YWl0IC0gQSBkZXZpY2Ugb3BlcmF0aW9uIHRoYXQgYWxsb3dzIHdhaXRpbmcg Zm9yIGEKPj4+PiAgICAgICAgdGltZWxpbmUgc3luY29iaiB0byByZWFjaCBhIHNwZWNpZmllZCB2 YWx1ZS4KPj4+PiAgICAgICogRGV2aWNlIHNpZ25hbCAtIEEgZGV2aWNlIG9wZXJhdGlvbiB0aGF0 IGFsbG93cyBhZHZhbmNpbmcgdGhlCj4+Pj4gICAgICAgIHRpbWVsaW5lIHN5bmNvYmogdG8gYSBz cGVjaWZpZWQgdmFsdWUuCj4+Pj4KPj4+PiB2MToKPj4+PiBTaW5jZSBpdCdzIGEgdGltZWxpbmUs IHRoYXQgbWVhbnMgdGhlIGZyb250IHRpbWUgcG9pbnQoUFQpIGFsd2F5cyBpcwo+Pj4+IHNpZ25h bGVkIGJlZm9yZSB0aGUgbGF0ZSBQVC4KPj4+PiBhLiBzaWduYWwgUFQgZGVzaWduOgo+Pj4+IFNp Z25hbCBQVCBmZW5jZSBOIGRlcGVuZHMgb24gUFRbTi0xXSBmZW5jZSBhbmQgc2lnbmFsIG9wZXJ0 aW9uIGZlbmNlLAo+Pj4+IHdoZW4gUFRbTl0gZmVuY2UgaXMgc2lnbmFsZWQsIHRoZSB0aW1lbGlu ZSB3aWxsIGluY3JlYXNlIHRvIHZhbHVlIG9mIFBUW05dLgo+Pj4+IGIuIHdhaXQgUFQgZGVzaWdu Ogo+Pj4+IFdhaXQgUFQgZmVuY2UgaXMgc2lnbmFsZWQgYnkgcmVhY2hpbmcgdGltZWxpbmUgcG9p bnQgdmFsdWUsIHdoZW4KPj4+PiB0aW1lbGluZSBpcyBpbmNyZWFzaW5nLCB3aWxsIGNvbXBhcmUg d2FpdCBQVHMgdmFsdWUgd2l0aCBuZXcgdGltZWxpbmUKPj4+PiB2YWx1ZSwgaWYgUFQgdmFsdWUg aXMgbG93ZXIgdGhhbiB0aW1lbGluZSB2YWx1ZSwgdGhlbiB3YWl0IFBUIHdpbGwgYmUgc2lnbmFs ZWQsCj4+IG90aGVyd2lzZSBrZWVwIGluIGxpc3QuCj4+Pj4gc3luY29iaiB3YWl0IG9wZXJhdGlv biBjYW4gd2FpdCBvbiBhbnkgcG9pbnQgb2YgdGltZWxpbmUsIHNvIG5lZWQgYQo+Pj4+IFJCIHRy ZWUgdG8gb3JkZXIgdGhlbS4gQW5kIHdhaXQgUFQgY291bGQgYWhlYWQgb2Ygc2lnbmFsIFBULCB3 ZSBuZWVkCj4+Pj4gYSBzdW1pc3Npb24gZmVuY2UgdG8gcGVyZm9ybSB0aGF0Lgo+Pj4+Cj4+Pj4g djI6Cj4+Pj4gMS4gcmVtb3ZlIHVudXNlZCBEUk1fU1lOQ09CSl9DUkVBVEVfVFlQRV9OT1JNQUwu IChDaHJpc3RpYW4pIDIuCj4+Pj4gbW92ZSB1bmV4cG9zZWQgZGVuaXRpb25zIHRvIC5jIGZpbGUu IChEYW5pZWwgVmV0dGVyKSAzLiBzcGxpdCB1cCB0aGUKPj4+PiBjaGFuZ2UgdG8KPj4+PiBkcm1f c3luY29ial9maW5kX2ZlbmNlKCkgaW4gYSBzZXBhcmF0ZSBwYXRjaC4gKENocmlzdGlhbikgNC4g c3BsaXQgdXAKPj4+PiB0aGUgY2hhbmdlIHRvIGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UoKSBp biBhIHNlcGFyYXRlIHBhdGNoLgo+Pj4+IDUuIGRyb3AgdGhlIHN1Ym1pc3Npb25fZmVuY2UgaW1w bGVtZW50YXRpb24gYW5kIGluc3RlYWQgdXNlCj4+Pj4gd2FpdF9ldmVudCgpIGZvciB0aGF0LiAo Q2hyaXN0aWFuKSA2LiBXQVJOX09OKHBvaW50ICE9IDApIGZvciBOT1JNQUwKPj4gdHlwZSBzeW5j b2JqIGNhc2UuCj4+Pj4gKERhbmllbCBWZXR0ZXIpCj4+Pj4KPj4+PiB2MzoKPj4+PiAxLiByZXBs YWNlIG5vcm1hbCBzeW5jb2JqIHdpdGggdGltZWxpbmUgaW1wbGVtZW5hdGlvbi4gKFZldHRlciBh bmQKPj4gQ2hyaXN0aWFuKQo+Pj4+ICAgICAgIGEuIG5vcm1hbCBzeW5jb2JqIHNpZ25hbCBvcCB3 aWxsIGNyZWF0ZSBhIHNpZ25hbCBQVCB0byB0YWlsIG9mIHNpZ25hbCBwdCBsaXN0Lgo+Pj4+ICAg ICAgIGIuIG5vcm1hbCBzeW5jb2JqIHdhaXQgb3Agd2lsbCBjcmVhdGUgYSB3YWl0IHB0IHdpdGgg bGFzdCBzaWduYWwKPj4+PiBwb2ludCwgYW5kIHRoaXMgd2FpdCBQVCBpcyBvbmx5IHNpZ25hbGVk IGJ5IHJlbGF0ZWQgc2lnbmFsIHBvaW50IFBULgo+Pj4+IDIuIG1hbnkgYnVnIGZpeCBhbmQgY2xl YW4gdXAKPj4+PiAzLiBzdHViIGZlbmNlIG1vdmluZyBpcyBtb3ZlZCB0byBvdGhlciBwYXRjaC4K Pj4+Pgo+Pj4+IHY077yaCj4+Pj4gMS4gZml4IFJCIHRyZWUgbG9vcCB3aXRoIHdoaWxlKG5vZGU9 cmJfZmlyc3QoLi4uKSkuIChDaHJpc3RpYW4pIDIuCj4+Pj4gZml4IHN5bmNvYmogbGlmZWN5Y2xl LiAoQ2hyaXN0aWFuKSAzLiBvbmx5IGVuYWJsZV9zaWduYWxpbmcgd2hlbgo+Pj4+IHRoZXJlIGlz IHdhaXRfcHQuIChDaHJpc3RpYW4pIDQuIGZpeCB0aW1lbGluZSBwYXRoIGlzc3Vlcy4KPj4+PiA1 LiB3cml0ZSBhIHRpbWVsaW5lIHRlc3QgaW4gbGliZHJtCj4+Pj4KPj4+PiB2NTogKENocmlzdGlh bikKPj4+PiAxLiBzZW1hcGhvcmUgaXMgY2FsbGVkIHN5bmNvYmogaW4ga2VybmVsIHNpZGUuCj4+ Pj4gMi4gZG9uJ3QgbmVlZCAndGltZWxpbmUnIGNoYXJhY3RlcnMgaW4gc29tZSBmdW5jdGlvbiBu YW1lLgo+Pj4+IDMuIGtlZXAgc3luY29iaiBjYi4KPj4+Pgo+Pj4+IHY2OiAoQ2hyaXN0aWFuKQo+ Pj4+IDEuIG1lcmdlIHN5bmNvYmpfdGltZWxpbmUgdG8gc3luY29iaiBzdHJ1Y3R1cmUuCj4+Pj4g Mi4gc2ltcGxpZnkgc29tZSBjaGVjayBzZW50ZW5jZXMuCj4+Pj4gMy4gc29tZSBtaXNjIGNoYW5n ZS4KPj4+PiA0LiBmaXggQ1RTIGZhaWxlZCBpc3N1ZS4KPj4+Pgo+Pj4+IHY3OiAoQ2hyaXN0aWFu KQo+Pj4+IDEuIGVycm9yIGhhbmRsaW5nIHdoZW4gY3JlYXRpbmcgc2lnbmFsIHB0Lgo+Pj4+IDIu IHJlbW92ZSB0aW1lbGluZSBuYW1pbmcgaW4gZnVuYy4KPj4+PiAzLiBleHBvcnQgZmxhZ3MgaW4g ZmluZF9mZW5jZS4KPj4+PiA0LiBhbGxvdyByZXNldCB0aW1lbGluZS4KPj4+Pgo+Pj4+IGluZGl2 aWR1YWwgc3luY29iaiBpcyB0ZXN0ZWQgYnkgLi9kZXFwLXZrIC1uIGRFUVAtVksqc2VtYXBob3Jl Kgo+Pj4+IHRpbWVsaW5lIHN5bmNvYmogaXMgdGVzdGVkIGJ5IC4vYW1kZ3B1X3Rlc3QgLXMgOQo+ Pj4+Cj4+Pj4gU2lnbmVkLW9mZi1ieTogQ2h1bm1pbmcgWmhvdSA8ZGF2aWQxLnpob3VAYW1kLmNv bT4KPj4+PiBDYzogQ2hyaXN0aWFuIEtvbmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4+ Pj4gQ2M6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+Cj4+Pj4gQ2M6IERhbmllbCBS YWtvcyA8RGFuaWVsLlJha29zQGFtZC5jb20+Cj4+Pj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmll bEBmZndsbC5jaD4KPj4+PiAtLS0KPj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vZHJtX3N5bmNvYmou YyAgICAgICAgICAgICAgfCAyOTMgKysrKysrKysrKysrKysrKysrLS0tCj4+Pj4gICAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIHwgICAyICstCj4+Pj4gICAgaW5j bHVkZS9kcm0vZHJtX3N5bmNvYmouaCAgICAgICAgICAgICAgICAgIHwgIDY1ICsrLS0tCj4+Pj4g ICAgaW5jbHVkZS91YXBpL2RybS9kcm0uaCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKPj4+ PiAgICA0IGZpbGVzIGNoYW5nZWQsIDI4NyBpbnNlcnRpb25zKCspLCA3NCBkZWxldGlvbnMoLSkK Pj4+Pgo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5bmNvYmouYwo+Pj4+ IGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeW5jb2JqLmMgaW5kZXggZjc5NmM5ZmMzODU4Li45NWI2 MGFjMDQ1YzYKPj4+PiAxMDA2NDQKPj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5bmNv YmouYwo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5jCj4+Pj4gQEAgLTU2 LDYgKzU2LDkgQEAKPj4+PiAgICAjaW5jbHVkZSAiZHJtX2ludGVybmFsLmgiCj4+Pj4gICAgI2lu Y2x1ZGUgPGRybS9kcm1fc3luY29iai5oPgo+Pj4+Cj4+Pj4gKy8qIG1lcmdlIG5vcm1hbCBzeW5j b2JqIHRvIHRpbWVsaW5lIHN5bmNvYmosIHRoZSBwb2ludCBpbnRlcnZhbCBpcyAxCj4+Pj4gKyov ICNkZWZpbmUgRFJNX1NZTkNPQkpfSU5ESVZJRFVBTF9QT0lOVCAxCj4+Pj4gKwo+Pj4+ICAgIHN0 cnVjdCBkcm1fc3luY29ial9zdHViX2ZlbmNlIHsKPj4+PiAgICAJc3RydWN0IGRtYV9mZW5jZSBi YXNlOwo+Pj4+ICAgIAlzcGlubG9ja190IGxvY2s7Cj4+Pj4gQEAgLTgyLDYgKzg1LDExIEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcwo+Pj4+IGRybV9zeW5jb2JqX3N0dWJfZmVu Y2Vfb3BzID0gewo+Pj4+ICAgIAkucmVsZWFzZSA9IGRybV9zeW5jb2JqX3N0dWJfZmVuY2VfcmVs ZWFzZSwgIH07Cj4+Pj4KPj4+PiArc3RydWN0IGRybV9zeW5jb2JqX3NpZ25hbF9wdCB7Cj4+Pj4g KwlzdHJ1Y3QgZG1hX2ZlbmNlX2FycmF5ICpiYXNlOwo+Pj4+ICsJdTY0ICAgIHZhbHVlOwo+Pj4+ ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+Pj4+ICt9Owo+Pj4+Cj4+Pj4gICAgLyoqCj4+Pj4g ICAgICogZHJtX3N5bmNvYmpfZmluZCAtIGxvb2t1cCBhbmQgcmVmZXJlbmNlIGEgc3luYyBvYmpl Y3QuCj4+Pj4gQEAgLTEyNCw4ICsxMzIsOCBAQCBzdGF0aWMgaW50Cj4+Pj4gZHJtX3N5bmNvYmpf ZmVuY2VfZ2V0X29yX2FkZF9jYWxsYmFjayhzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosCj4+ IHsKPj4+PiAgICAJaW50IHJldDsKPj4+Pgo+Pj4+IC0JKmZlbmNlID0gZHJtX3N5bmNvYmpfZmVu Y2VfZ2V0KHN5bmNvYmopOwo+Pj4+IC0JaWYgKCpmZW5jZSkKPj4+PiArCXJldCA9IGRybV9zeW5j b2JqX3NlYXJjaF9mZW5jZShzeW5jb2JqLCAwLCAwLCBmZW5jZSk7Cj4+Pj4gKwlpZiAoIXJldCkK Pj4+PiAgICAJCXJldHVybiAxOwo+Pj4+Cj4+Pj4gICAgCXNwaW5fbG9jaygmc3luY29iai0+bG9j ayk7Cj4+Pj4gQEAgLTEzMywxMCArMTQxLDEyIEBAIHN0YXRpYyBpbnQKPj4+PiBkcm1fc3luY29i al9mZW5jZV9nZXRfb3JfYWRkX2NhbGxiYWNrKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwK Pj4+PiAgICAJICogaGF2ZSB0aGUgbG9jaywgdHJ5IG9uZSBtb3JlIHRpbWUganVzdCB0byBiZSBz dXJlIHdlIGRvbid0IGFkZCBhCj4+Pj4gICAgCSAqIGNhbGxiYWNrIHdoZW4gYSBmZW5jZSBoYXMg YWxyZWFkeSBiZWVuIHNldC4KPj4+PiAgICAJICovCj4+Pj4gLQlpZiAoc3luY29iai0+ZmVuY2Up IHsKPj4+PiAtCQkqZmVuY2UgPQo+Pj4+IGRtYV9mZW5jZV9nZXQocmN1X2RlcmVmZXJlbmNlX3By b3RlY3RlZChzeW5jb2JqLT5mZW5jZSwKPj4+PiAtCj4+Pj4gbG9ja2RlcF9pc19oZWxkKCZzeW5j b2JqLT5sb2NrKSkpOwo+Pj4+IC0JCXJldCA9IDE7Cj4+Pj4gKwlpZiAoIWxpc3RfZW1wdHkoJnN5 bmNvYmotPnNpZ25hbF9wdF9saXN0KSkgewo+Pj4+ICsJCXNwaW5fdW5sb2NrKCZzeW5jb2JqLT5s b2NrKTsKPj4+PiArCQlkcm1fc3luY29ial9zZWFyY2hfZmVuY2Uoc3luY29iaiwgMCwgMCwgZmVu Y2UpOwo+Pj4+ICsJCWlmICgqZmVuY2UpCj4+Pj4gKwkJCXJldHVybiAxOwo+Pj4+ICsJCXNwaW5f bG9jaygmc3luY29iai0+bG9jayk7Cj4+Pj4gICAgCX0gZWxzZSB7Cj4+Pj4gICAgCQkqZmVuY2Ug PSBOVUxMOwo+Pj4+ICAgIAkJZHJtX3N5bmNvYmpfYWRkX2NhbGxiYWNrX2xvY2tlZChzeW5jb2Jq LCBjYiwgZnVuYyk7IEBAIC0KPj4+PiAxNjQsNiArMTc0LDE1OSBAQCB2b2lkIGRybV9zeW5jb2Jq X3JlbW92ZV9jYWxsYmFjayhzdHJ1Y3QKPj4gZHJtX3N5bmNvYmoKPj4+PiAqc3luY29iaiwKPj4+ PiAgICAJc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+ICAgIH0KPj4+Pgo+Pj4+ICtz dGF0aWMgdm9pZCBkcm1fc3luY29ial9pbml0KHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaikg ewo+Pj4+ICsJc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4+PiArCXN5bmNvYmotPnRpbWVs aW5lX2NvbnRleHQgPSBkbWFfZmVuY2VfY29udGV4dF9hbGxvYygxKTsKPj4+PiArCXN5bmNvYmot PnRpbWVsaW5lID0gMDsKPj4+PiArCXN5bmNvYmotPnNpZ25hbF9wb2ludCA9IDA7Cj4+Pj4gKwlp bml0X3dhaXRxdWV1ZV9oZWFkKCZzeW5jb2JqLT53cSk7Cj4+Pj4gKwo+Pj4+ICsJSU5JVF9MSVNU X0hFQUQoJnN5bmNvYmotPnNpZ25hbF9wdF9saXN0KTsKPj4+PiArCXNwaW5fdW5sb2NrKCZzeW5j b2JqLT5sb2NrKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQgZHJtX3N5bmNvYmpf ZmluaShzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmopIHsKPj4+PiArCXN0cnVjdCBkcm1fc3lu Y29ial9zaWduYWxfcHQgKnNpZ25hbF9wdCA9IE5VTEwsICp0bXA7Cj4+Pj4gKwo+Pj4+ICsJc3Bp bl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4+PiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShz aWduYWxfcHQsIHRtcCwKPj4+PiArCQkJCSAmc3luY29iai0+c2lnbmFsX3B0X2xpc3QsIGxpc3Qp IHsKPj4+PiArCQlsaXN0X2RlbCgmc2lnbmFsX3B0LT5saXN0KTsKPj4+PiArCQlkbWFfZmVuY2Vf cHV0KCZzaWduYWxfcHQtPmJhc2UtPmJhc2UpOwo+Pj4+ICsJCWtmcmVlKHNpZ25hbF9wdCk7Cj4+ Pj4gKwl9Cj4+Pj4gKwlzcGluX3VubG9jaygmc3luY29iai0+bG9jayk7Cj4+Pj4gK30KPj4+PiAr Cj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlCj4+Pj4gKypkcm1fc3luY29ial9maW5kX3Np Z25hbF9wdF9mb3JfcG9pbnQoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+Pj4+ICsJCQkJ ICAgICAgdWludDY0X3QgcG9pbnQpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCBkcm1fc3luY29ial9z aWduYWxfcHQgKnNpZ25hbF9wdDsKPj4+PiArCj4+Pj4gKwlpZiAoKHN5bmNvYmotPnR5cGUgPT0g RFJNX1NZTkNPQkpfVFlQRV9USU1FTElORSkgJiYKPj4+PiArCSAgICAocG9pbnQgPD0gc3luY29i ai0+dGltZWxpbmUpKSB7Cj4+Pj4gKwkJc3RydWN0IGRybV9zeW5jb2JqX3N0dWJfZmVuY2UgKmZl bmNlID0KPj4+PiArCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9zeW5jb2JqX3N0dWJfZmVu Y2UpLAo+Pj4+ICsJCQkJR0ZQX0tFUk5FTCk7Cj4+Pj4gKwo+Pj4+ICsJCWlmICghZmVuY2UpCj4+ Pj4gKwkJCXJldHVybiBOVUxMOwo+Pj4+ICsJCXNwaW5fbG9ja19pbml0KCZmZW5jZS0+bG9jayk7 Cj4+Pj4gKwkJZG1hX2ZlbmNlX2luaXQoJmZlbmNlLT5iYXNlLAo+Pj4+ICsJCQkgICAgICAgJmRy bV9zeW5jb2JqX3N0dWJfZmVuY2Vfb3BzLAo+Pj4+ICsJCQkgICAgICAgJmZlbmNlLT5sb2NrLAo+ Pj4+ICsJCQkgICAgICAgc3luY29iai0+dGltZWxpbmVfY29udGV4dCwKPj4+PiArCQkJICAgICAg IHBvaW50KTsKPj4+PiArCj4+Pj4gKwkJZG1hX2ZlbmNlX3NpZ25hbCgmZmVuY2UtPmJhc2UpOwo+ Pj4+ICsJCXJldHVybiAmZmVuY2UtPmJhc2U7Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJbGlzdF9m b3JfZWFjaF9lbnRyeShzaWduYWxfcHQsICZzeW5jb2JqLT5zaWduYWxfcHRfbGlzdCwgbGlzdCkg ewo+Pj4+ICsJCWlmIChwb2ludCA+IHNpZ25hbF9wdC0+dmFsdWUpCj4+Pj4gKwkJCWNvbnRpbnVl Owo+Pj4+ICsJCWlmICgoc3luY29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX0lORElWSURV QUwpICYmCj4+Pj4gKwkJICAgIChwb2ludCAhPSBzaWduYWxfcHQtPnZhbHVlKSkKPj4+PiArCQkJ Y29udGludWU7Cj4+Pj4gKwkJcmV0dXJuIGRtYV9mZW5jZV9nZXQoJnNpZ25hbF9wdC0+YmFzZS0+ YmFzZSk7Cj4+Pj4gKwl9Cj4+Pj4gKwlyZXR1cm4gTlVMTDsKPj4+PiArfQo+Pj4+ICsKPj4+PiAr c3RhdGljIGludCBkcm1fc3luY29ial9jcmVhdGVfc2lnbmFsX3B0KHN0cnVjdCBkcm1fc3luY29i aiAqc3luY29iaiwKPj4+PiArCQkJCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKPj4+PiArCQkJ CQl1NjQgcG9pbnQpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQg KnNpZ25hbF9wdCA9Cj4+Pj4gKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9zeW5jb2JqX3Np Z25hbF9wdCksIEdGUF9LRVJORUwpOwo+Pj4+ICsJc3RydWN0IGRybV9zeW5jb2JqX3NpZ25hbF9w dCAqdGFpbF9wdDsKPj4+PiArCXN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZXM7Cj4+Pj4gKwlpbnQg bnVtX2ZlbmNlcyA9IDA7Cj4+Pj4gKwlpbnQgcmV0ID0gMCwgaTsKPj4+PiArCj4+Pj4gKwlpZiAo IXNpZ25hbF9wdCkKPj4+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4+PiArCWlmICghZmVuY2UpCj4+ Pj4gKwkJZ290byBvdXQ7Cj4+Pj4gKwo+Pj4+ICsJZmVuY2VzID0ga21hbGxvY19hcnJheShzaXpl b2Yodm9pZCAqKSwgMiwgR0ZQX0tFUk5FTCk7Cj4+Pj4gKwlpZiAoIWZlbmNlcykgewo+Pj4+ICsJ CXJldCA9IC1FTk9NRU07Cj4+Pj4gKwkJZ290byBvdXQ7Cj4+Pj4gKwl9Cj4+Pj4gKwlmZW5jZXNb bnVtX2ZlbmNlcysrXSA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOwo+Pj4+ICsJLyogdGltZWxpbmUg c3luY29iaiBtdXN0IHRha2UgdGhpcyBkZXBlbmRlbmN5ICovCj4+Pj4gKwlpZiAoc3luY29iai0+ dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX1RJTUVMSU5FKSB7Cj4+Pj4gKwkJc3Bpbl9sb2NrKCZz eW5jb2JqLT5sb2NrKTsKPj4+PiArCQlpZiAoIWxpc3RfZW1wdHkoJnN5bmNvYmotPnNpZ25hbF9w dF9saXN0KSkgewo+Pj4+ICsJCQl0YWlsX3B0ID0gbGlzdF9sYXN0X2VudHJ5KCZzeW5jb2JqLT5z aWduYWxfcHRfbGlzdCwKPj4+PiArCQkJCQkJICBzdHJ1Y3QKPj4+PiBkcm1fc3luY29ial9zaWdu YWxfcHQsIGxpc3QpOwo+Pj4+ICsJCQlmZW5jZXNbbnVtX2ZlbmNlcysrXSA9IGRtYV9mZW5jZV9n ZXQoJnRhaWxfcHQtCj4+Pj4+IGJhc2UtPmJhc2UpOwo+Pj4+ICsJCX0KPj4+PiArCQlzcGluX3Vu bG9jaygmc3luY29iai0+bG9jayk7Cj4+Pj4gKwl9Cj4+Pj4gKwlzaWduYWxfcHQtPmJhc2UgPSBk bWFfZmVuY2VfYXJyYXlfY3JlYXRlKG51bV9mZW5jZXMsIGZlbmNlcywKPj4+PiArCQkJCQkJIHN5 bmNvYmotPnRpbWVsaW5lX2NvbnRleHQsCj4+Pj4gKwkJCQkJCSBwb2ludCwgZmFsc2UpOwo+Pj4+ ICsJaWYgKCFzaWduYWxfcHQtPmJhc2UpIHsKPj4+PiArCQlyZXQgPSAtRU5PTUVNOwo+Pj4+ICsJ CWdvdG8gZmFpbDsKPj4+PiArCX0KPj4+PiArCj4+Pj4gKwlzcGluX2xvY2soJnN5bmNvYmotPmxv Y2spOwo+Pj4+ICsJaWYgKHN5bmNvYmotPnNpZ25hbF9wb2ludCA+PSBwb2ludCkgewo+Pj4+ICsJ CURSTV9XQVJOKCJBIGxhdGVyIHNpZ25hbCBpcyByZWFkeSEiKTsKPj4+PiArCQlzcGluX3VubG9j aygmc3luY29iai0+bG9jayk7Cj4+Pj4gKwkJZ290byBleGlzdDsKPj4+PiArCX0KPj4+PiArCXNp Z25hbF9wdC0+dmFsdWUgPSBwb2ludDsKPj4+PiArCWxpc3RfYWRkX3RhaWwoJnNpZ25hbF9wdC0+ bGlzdCwgJnN5bmNvYmotPnNpZ25hbF9wdF9saXN0KTsKPj4+PiArCXN5bmNvYmotPnNpZ25hbF9w b2ludCA9IHBvaW50Owo+Pj4+ICsJc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+ICsJ d2FrZV91cF9hbGwoJnN5bmNvYmotPndxKTsKPj4+PiArCj4+Pj4gKwlyZXR1cm4gMDsKPj4+PiAr ZXhpc3Q6Cj4+Pj4gKwlkbWFfZmVuY2VfcHV0KCZzaWduYWxfcHQtPmJhc2UtPmJhc2UpOwo+Pj4+ ICtmYWlsOgo+Pj4+ICsJZm9yIChpID0gMDsgaSA8IG51bV9mZW5jZXM7IGkrKykKPj4+PiArCQlk bWFfZmVuY2VfcHV0KGZlbmNlc1tpXSk7Cj4+Pj4gKwlrZnJlZShmZW5jZXMpOwo+Pj4+ICtvdXQ6 Cj4+Pj4gKwlrZnJlZShzaWduYWxfcHQpOwo+Pj4+ICsJcmV0dXJuIHJldDsKPj4+PiArfQo+Pj4+ ICsKPj4+PiArc3RhdGljIHZvaWQgZHJtX3N5bmNvYmpfZ2FyYmFnZV9jb2xsZWN0aW9uKHN0cnVj dCBkcm1fc3luY29iago+Pj4+ICsqc3luY29iaikgewo+Pj4+ICsJc3RydWN0IGRybV9zeW5jb2Jq X3NpZ25hbF9wdCAqc2lnbmFsX3B0LCAqdG1wLCAqdGFpbF9wdDsKPj4+PiArCj4+Pj4gKwlzcGlu X2xvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+ICsJdGFpbF9wdCA9IGxpc3RfbGFzdF9lbnRyeSgm c3luY29iai0+c2lnbmFsX3B0X2xpc3QsCj4+Pj4gKwkJCQkgIHN0cnVjdCBkcm1fc3luY29ial9z aWduYWxfcHQsCj4+Pj4gKwkJCQkgIGxpc3QpOwo+Pj4+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKHNpZ25hbF9wdCwgdG1wLAo+Pj4+ICsJCQkJICZzeW5jb2JqLT5zaWduYWxfcHRfbGlzdCwg bGlzdCkgewo+Pj4+ICsJCWlmIChzeW5jb2JqLT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVfSU5E SVZJRFVBTCAmJgo+Pj4+ICsJCSAgICBzaWduYWxfcHQgPT0gdGFpbF9wdCkKPj4+PiArCQkJY29u dGludWU7Cj4+Pj4gKwkJaWYgKGRtYV9mZW5jZV9pc19zaWduYWxlZCgmc2lnbmFsX3B0LT5iYXNl LT5iYXNlKSkgewo+Pj4+ICsJCQlzeW5jb2JqLT50aW1lbGluZSA9IHNpZ25hbF9wdC0+dmFsdWU7 Cj4+Pj4gKwkJCWxpc3RfZGVsKCZzaWduYWxfcHQtPmxpc3QpOwo+Pj4+ICsJCQlkbWFfZmVuY2Vf cHV0KCZzaWduYWxfcHQtPmJhc2UtPmJhc2UpOwo+Pj4+ICsJCQlrZnJlZShzaWduYWxfcHQpOwo+ Pj4+ICsJCX0gZWxzZSB7Cj4+Pj4gKwkJCS8qc2lnbmFsX3B0IGlzIGluIG9yZGVyIGluIGxpc3Qs IGZyb20gc21hbGwgdG8gYmlnLCBzbwo+Pj4+ICsJCQkgKiB0aGUgbGF0ZXIgbXVzdCBub3QgYmUg c2lnbmFsIGVpdGhlciAqLwo+Pj4+ICsJCQlicmVhazsKPj4+PiArCQl9Cj4+Pj4gKwl9Cj4+Pj4g Kwo+Pj4+ICsJc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+ICt9Cj4+Pj4gICAgLyoq Cj4+Pj4gICAgICogZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZSAtIHJlcGxhY2UgZmVuY2UgaW4g YSBzeW5jIG9iamVjdC4KPj4+PiAgICAgKiBAc3luY29iajogU3luYyBvYmplY3QgdG8gcmVwbGFj ZSBmZW5jZSBpbiBAQCAtMTc2LDI4ICszMzksMjkgQEAKPj4+PiB2b2lkIGRybV9zeW5jb2JqX3Jl cGxhY2VfZmVuY2Uoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+Pj4+ICAgIAkJCSAgICAg ICB1NjQgcG9pbnQsCj4+Pj4gICAgCQkJICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQo+ Pj4+ICAgIHsKPj4+PiAtCXN0cnVjdCBkbWFfZmVuY2UgKm9sZF9mZW5jZTsKPj4+PiAtCXN0cnVj dCBkcm1fc3luY29ial9jYiAqY3VyLCAqdG1wOwo+Pj4+IC0KPj4+PiAtCWlmIChmZW5jZSkKPj4+ PiAtCQlkbWFfZmVuY2VfZ2V0KGZlbmNlKTsKPj4+PiAtCj4+Pj4gLQlzcGluX2xvY2soJnN5bmNv YmotPmxvY2spOwo+Pj4+IC0KPj4+PiAtCW9sZF9mZW5jZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90 ZWN0ZWQoc3luY29iai0+ZmVuY2UsCj4+Pj4gLQkJCQkJICAgICAgbG9ja2RlcF9pc19oZWxkKCZz eW5jb2JqLT5sb2NrKSk7Cj4+Pj4gLQlyY3VfYXNzaWduX3BvaW50ZXIoc3luY29iai0+ZmVuY2Us IGZlbmNlKTsKPj4+PiArCXU2NCBwdF92YWx1ZSA9IHBvaW50Owo+Pj4+ICsKPj4+PiArCWRybV9z eW5jb2JqX2dhcmJhZ2VfY29sbGVjdGlvbihzeW5jb2JqKTsKPj4+PiArCWlmIChzeW5jb2JqLT50 eXBlID09IERSTV9TWU5DT0JKX1RZUEVfSU5ESVZJRFVBTCkgewo+Pj4+ICsJCWlmICghZmVuY2Up IHsKPj4+PiArCQkJZHJtX3N5bmNvYmpfZmluaShzeW5jb2JqKTsKPj4+PiArCQkJZHJtX3N5bmNv YmpfaW5pdChzeW5jb2JqKTsKPj4+PiArCQkJcmV0dXJuOwo+Pj4+ICsJCX0KPj4+PiArCQlwdF92 YWx1ZSA9IHN5bmNvYmotPnNpZ25hbF9wb2ludCArCj4+Pj4gKwkJCURSTV9TWU5DT0JKX0lORElW SURVQUxfUE9JTlQ7Cj4+Pj4gKwl9Cj4+Pj4gKwlkcm1fc3luY29ial9jcmVhdGVfc2lnbmFsX3B0 KHN5bmNvYmosIGZlbmNlLCBwdF92YWx1ZSk7Cj4+Pj4gKwlpZiAoZmVuY2UpIHsKPj4+PiArCQlz dHJ1Y3QgZHJtX3N5bmNvYmpfY2IgKmN1ciwgKnRtcDsKPj4+Pgo+Pj4+IC0JaWYgKGZlbmNlICE9 IG9sZF9mZW5jZSkgewo+Pj4+ICsJCXNwaW5fbG9jaygmc3luY29iai0+bG9jayk7Cj4+Pj4gICAg CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3VyLCB0bXAsICZzeW5jb2JqLT5jYl9saXN0LCBu b2RlKQo+PiB7Cj4+Pj4gICAgCQkJbGlzdF9kZWxfaW5pdCgmY3VyLT5ub2RlKTsKPj4+PiAgICAJ CQljdXItPmZ1bmMoc3luY29iaiwgY3VyKTsKPj4+PiAgICAJCX0KPj4+PiArCQlzcGluX3VubG9j aygmc3luY29iai0+bG9jayk7Cj4+Pj4gICAgCX0KPj4+PiAtCj4+Pj4gLQlzcGluX3VubG9jaygm c3luY29iai0+bG9jayk7Cj4+Pj4gLQo+Pj4+IC0JZG1hX2ZlbmNlX3B1dChvbGRfZmVuY2UpOwo+ Pj4+ICAgIH0KPj4+PiAgICBFWFBPUlRfU1lNQk9MKGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Up Owo+Pj4+Cj4+Pj4gQEAgLTIyMCw2ICszODQsNTIgQEAgc3RhdGljIGludCBkcm1fc3luY29ial9h c3NpZ25fbnVsbF9oYW5kbGUoc3RydWN0Cj4+Pj4gZHJtX3N5bmNvYmogKnN5bmNvYmopCj4+Pj4g ICAgCXJldHVybiAwOwo+Pj4+ICAgIH0KPj4+Pgo+Pj4+ICsjZGVmaW5lIFdBSVRfRk9SX1NVQk1J VF9NU0VDUyAxMDAwMAo+Pj4+ICsKPj4+PiArc3RhdGljIHN0cnVjdCBkbWFfZmVuY2UgKgo+Pj4+ ICtkcm1fc3luY29ial9wb2ludF9nZXQoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLCB1NjQg cG9pbnQsIHU2NAo+Pj4+ICtmbGFncykgewo+Pj4+ICsJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7 Cj4+Pj4gKwlpbnQgcmV0ID0gMDsKPj4+PiArCj4+Pj4gKwlpZiAoZmxhZ3MgJiBEUk1fU1lOQ09C Sl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVCkgewo+Pj4+ICsJCXJldCA9IHdhaXRfZXZlbnRf dGltZW91dChzeW5jb2JqLT53cSwKPj4+PiArCQkJCQkgcG9pbnQgPD0gc3luY29iai0+c2lnbmFs X3BvaW50LAo+Pj4+ICsKPj4+PiBtc2Vjc190b19qaWZmaWVzKFdBSVRfRk9SX1NVQk1JVF9NU0VD UykpOwo+Pj4+ICsJCWlmIChyZXQgPD0gMCkKPj4+PiArCQkJcmV0dXJuIE5VTEw7Cj4+Pj4gKwl9 Cj4+Pj4gKwlzcGluX2xvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+ICsJZmVuY2UgPSBkcm1fc3lu Y29ial9maW5kX3NpZ25hbF9wdF9mb3JfcG9pbnQoc3luY29iaiwgcG9pbnQpOwo+Pj4+ICsJc3Bp bl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+ICsJcmV0dXJuIGZlbmNlOwo+Pj4+ICt9Cj4+ Pj4gKwo+Pj4+ICtpbnQgZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNlKHN0cnVjdCBkcm1fc3luY29i aiAqc3luY29iaiwgdTY0IHBvaW50LAo+Pj4+ICsJCQkgICAgIHU2NCBmbGFncywgc3RydWN0IGRt YV9mZW5jZSAqKmZlbmNlKSB7Cj4+Pj4gKwl1NjQgcHRfdmFsdWUgPSBwb2ludDsKPj4+PiArCWlu dCByZXQgPSAwOwo+Pj4+ICsKPj4+PiArCWlmICghc3luY29iaikKPj4+PiArCQlyZXR1cm4gLUVO T0VOVDsKPj4+PiArCj4+Pj4gKwlkcm1fc3luY29ial9nYXJiYWdlX2NvbGxlY3Rpb24oc3luY29i aik7Cj4+Pj4gKwlpZiAoc3luY29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX0lORElWSURV QUwpIHsKPj4+PiArCQkvKklORElWSURVQUwgc3luY29iaiBhbHdheXMgd2FpdCBvbiBsYXN0IHB0 ICovCj4+Pj4gKwkJcHRfdmFsdWUgPSBzeW5jb2JqLT5zaWduYWxfcG9pbnQ7Cj4+Pj4gKwo+Pj4+ ICsJCWlmIChwdF92YWx1ZSA9PSAwKQo+Pj4+ICsJCQlwdF92YWx1ZSArPSBEUk1fU1lOQ09CSl9J TkRJVklEVUFMX1BPSU5UOwo+Pj4+ICsJfQo+Pj4+ICsJKmZlbmNlID0gZHJtX3N5bmNvYmpfcG9p bnRfZ2V0KHN5bmNvYmosIHB0X3ZhbHVlLCBmbGFncyk7Cj4+Pj4gKwlpZiAoISpmZW5jZSkgewo+ Pj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+Pj4gKwl9Cj4+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4+ICt9 Cj4+Pj4gK0VYUE9SVF9TWU1CT0woZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNlKTsKPj4+PiArCj4+ Pj4gICAgLyoqCj4+Pj4gICAgICogZHJtX3N5bmNvYmpfZmluZF9mZW5jZSAtIGxvb2t1cCBhbmQg cmVmZXJlbmNlIHRoZSBmZW5jZSBpbiBhCj4+Pj4gc3luYyBvYmplY3QKPj4+PiAgICAgKiBAZmls ZV9wcml2YXRlOiBkcm0gZmlsZSBwcml2YXRlIHBvaW50ZXIgQEAgLTIyOCw3ICs0MzgsNyBAQAo+ Pj4+IHN0YXRpYyBpbnQgZHJtX3N5bmNvYmpfYXNzaWduX251bGxfaGFuZGxlKHN0cnVjdCBkcm1f c3luY29iaiAqc3luY29iaikKPj4+PiAgICAgKiBAZmVuY2U6IG91dCBwYXJhbWV0ZXIgZm9yIHRo ZSBmZW5jZQo+Pj4+ICAgICAqCj4+Pj4gICAgICogVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2Ug ZnVuY3Rpb24gdGhhdCBjb21iaW5lcwo+Pj4+IGRybV9zeW5jb2JqX2ZpbmQoKSBhbmQKPj4+PiAt ICogZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KCkuCj4+Pj4gKyAqIGRybV9zeW5jb2JqX2xvb2t1cF9m ZW5jZSgpLgo+Pj4+ICAgICAqCj4+Pj4gICAgICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBu ZWdhdGl2ZSBlcnJvciB2YWx1ZSBvbiBmYWlsdXJlLiBPbgo+Pj4+IHN1Y2Nlc3MgQGZlbmNlCj4+ Pj4gICAgICogY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGZlbmNlLCB3aGljaCBtdXN0IGJl IHJlbGVhc2VkIGJ5Cj4+Pj4gY2FsbGluZyBAQCAtCj4+Pj4gMjM5LDE1ICs0NDksOSBAQCBpbnQg ZHJtX3N5bmNvYmpfZmluZF9mZW5jZShzdHJ1Y3QgZHJtX2ZpbGUKPj4gKmZpbGVfcHJpdmF0ZSwK Pj4+PiAgICAJCQkgICBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCj4+Pj4gICAgewo+Pj4+ICAg IAlzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmogPSBkcm1fc3luY29ial9maW5kKGZpbGVfcHJp dmF0ZSwKPj4+PiBoYW5kbGUpOwo+Pj4+IC0JaW50IHJldCA9IDA7Cj4+Pj4gLQo+Pj4+IC0JaWYg KCFzeW5jb2JqKQo+Pj4+IC0JCXJldHVybiAtRU5PRU5UOwo+Pj4+ICsJaW50IHJldDsKPj4+Pgo+ Pj4+IC0JKmZlbmNlID0gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN5bmNvYmopOwo+Pj4+IC0JaWYg KCEqZmVuY2UpIHsKPj4+PiAtCQlyZXQgPSAtRUlOVkFMOwo+Pj4+IC0JfQo+Pj4+ICsJcmV0ID0g ZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNlKHN5bmNvYmosIHBvaW50LCBmbGFncywgZmVuY2UpOwo+ Pj4+ICAgIAlkcm1fc3luY29ial9wdXQoc3luY29iaik7Cj4+Pj4gICAgCXJldHVybiByZXQ7Cj4+ Pj4gICAgfQo+Pj4+IEBAIC0yNjQsNyArNDY4LDcgQEAgdm9pZCBkcm1fc3luY29ial9mcmVlKHN0 cnVjdCBrcmVmICprcmVmKQo+Pj4+ICAgIAlzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmogPSBj b250YWluZXJfb2Yoa3JlZiwKPj4+PiAgICAJCQkJCQkgICBzdHJ1Y3QgZHJtX3N5bmNvYmosCj4+ Pj4gICAgCQkJCQkJICAgcmVmY291bnQpOwo+Pj4+IC0JZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5j ZShzeW5jb2JqLCAwLCBOVUxMKTsKPj4+PiArCWRybV9zeW5jb2JqX2Zpbmkoc3luY29iaik7Cj4+ Pj4gICAgCWtmcmVlKHN5bmNvYmopOwo+Pj4+ICAgIH0KPj4+PiAgICBFWFBPUlRfU1lNQk9MKGRy bV9zeW5jb2JqX2ZyZWUpOwo+Pj4+IEBAIC0yOTQsNiArNDk4LDExIEBAIGludCBkcm1fc3luY29i al9jcmVhdGUoc3RydWN0IGRybV9zeW5jb2JqCj4+Pj4gKipvdXRfc3luY29iaiwgdWludDMyX3Qg ZmxhZ3MsCj4+Pj4gICAgCWtyZWZfaW5pdCgmc3luY29iai0+cmVmY291bnQpOwo+Pj4+ICAgIAlJ TklUX0xJU1RfSEVBRCgmc3luY29iai0+Y2JfbGlzdCk7Cj4+Pj4gICAgCXNwaW5fbG9ja19pbml0 KCZzeW5jb2JqLT5sb2NrKTsKPj4+PiArCWlmIChmbGFncyAmIERSTV9TWU5DT0JKX0NSRUFURV9U WVBFX1RJTUVMSU5FKQo+Pj4+ICsJCXN5bmNvYmotPnR5cGUgPSBEUk1fU1lOQ09CSl9UWVBFX1RJ TUVMSU5FOwo+Pj4+ICsJZWxzZQo+Pj4+ICsJCXN5bmNvYmotPnR5cGUgPSBEUk1fU1lOQ09CSl9U WVBFX0lORElWSURVQUw7Cj4+Pj4gKwlkcm1fc3luY29ial9pbml0KHN5bmNvYmopOwo+Pj4+Cj4+ Pj4gICAgCWlmIChmbGFncyAmIERSTV9TWU5DT0JKX0NSRUFURV9TSUdOQUxFRCkgewo+Pj4+ICAg IAkJcmV0ID0gZHJtX3N5bmNvYmpfYXNzaWduX251bGxfaGFuZGxlKHN5bmNvYmopOwo+Pj4+IEBA IC01NzYsNyArNzg1LDggQEAgZHJtX3N5bmNvYmpfY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4+Pj4gdm9pZCAqZGF0YSwKPj4+PiAgICAJCXJldHVybiAtRU5PREVWOwo+Pj4+ Cj4+Pj4gICAgCS8qIG5vIHZhbGlkIGZsYWdzIHlldCAqLwo+Pj4+IC0JaWYgKGFyZ3MtPmZsYWdz ICYgfkRSTV9TWU5DT0JKX0NSRUFURV9TSUdOQUxFRCkKPj4+PiArCWlmIChhcmdzLT5mbGFncyAm IH4oRFJNX1NZTkNPQkpfQ1JFQVRFX1NJR05BTEVEIHwKPj4+PiArCQkJICAgIERSTV9TWU5DT0JK X0NSRUFURV9UWVBFX1RJTUVMSU5FKSkKPj4+PiAgICAJCXJldHVybiAtRUlOVkFMOwo+Pj4+Cj4+ Pj4gICAgCXJldHVybiBkcm1fc3luY29ial9jcmVhdGVfYXNfaGFuZGxlKGZpbGVfcHJpdmF0ZSwK Pj4+PiBAQCAtNjY5LDkgKzg3OSw4IEBAIHN0YXRpYyB2b2lkIHN5bmNvYmpfd2FpdF9zeW5jb2Jq X2Z1bmMoc3RydWN0Cj4+Pj4gZHJtX3N5bmNvYmogKnN5bmNvYmosCj4+Pj4gICAgCXN0cnVjdCBz eW5jb2JqX3dhaXRfZW50cnkgKndhaXQgPQo+Pj4+ICAgIAkJY29udGFpbmVyX29mKGNiLCBzdHJ1 Y3Qgc3luY29ial93YWl0X2VudHJ5LCBzeW5jb2JqX2NiKTsKPj4+Pgo+Pj4+IC0JLyogVGhpcyBo YXBwZW5zIGluc2lkZSB0aGUgc3luY29iaiBsb2NrICovCj4+Pj4gLQl3YWl0LT5mZW5jZSA9IGRt YV9mZW5jZV9nZXQocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzeW5jb2JqLQo+Pj4+PiBmZW5j ZSwKPj4+PiAtCj4+Pj4gbG9ja2RlcF9pc19oZWxkKCZzeW5jb2JqLT5sb2NrKSkpOwo+Pj4+ICsJ ZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNlKHN5bmNvYmosIDAsIDAsICZ3YWl0LT5mZW5jZSk7Cj4+ Pj4gKwo+Pj4+ICAgIAl3YWtlX3VwX3Byb2Nlc3Mod2FpdC0+dGFzayk7Cj4+Pj4gICAgfQo+Pj4+ Cj4+Pj4gQEAgLTY5OCw3ICs5MDcsOCBAQCBzdGF0aWMgc2lnbmVkIGxvbmcKPj4+PiBkcm1fc3lu Y29ial9hcnJheV93YWl0X3RpbWVvdXQoc3RydWN0IGRybV9zeW5jb2JqICoqc3luY29ianMsCj4+ Pj4gICAgCXNpZ25hbGVkX2NvdW50ID0gMDsKPj4+PiAgICAJZm9yIChpID0gMDsgaSA8IGNvdW50 OyArK2kpIHsKPj4+PiAgICAJCWVudHJpZXNbaV0udGFzayA9IGN1cnJlbnQ7Cj4+Pj4gLQkJZW50 cmllc1tpXS5mZW5jZSA9IGRybV9zeW5jb2JqX2ZlbmNlX2dldChzeW5jb2Jqc1tpXSk7Cj4+Pj4g KwkJcmV0ID0gZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNlKHN5bmNvYmpzW2ldLCAwLCAwLAo+Pj4+ ICsJCQkJCSAgICAgICAmZW50cmllc1tpXS5mZW5jZSk7Cj4+Pj4gICAgCQlpZiAoIWVudHJpZXNb aV0uZmVuY2UpIHsKPj4+PiAgICAJCQlpZiAoZmxhZ3MgJgo+Pj4+IERSTV9TWU5DT0JKX1dBSVRf RkxBR1NfV0FJVF9GT1JfU1VCTUlUKSB7Cj4+Pj4gICAgCQkJCWNvbnRpbnVlOwo+Pj4+IEBAIC05 NzAsMTIgKzExODAsMTMgQEAgZHJtX3N5bmNvYmpfcmVzZXRfaW9jdGwoc3RydWN0IGRybV9kZXZp Y2UKPj4+PiAqZGV2LCB2b2lkICpkYXRhLAo+Pj4+ICAgIAlpZiAocmV0IDwgMCkKPj4+PiAgICAJ CXJldHVybiByZXQ7Cj4+Pj4KPj4+PiAtCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5jb3VudF9oYW5k bGVzOyBpKyspCj4+Pj4gLQkJZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZShzeW5jb2Jqc1tpXSwg MCwgTlVMTCk7Cj4+Pj4gLQo+Pj4+ICsJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmNvdW50X2hhbmRs ZXM7IGkrKykgewo+Pj4+ICsJCWRybV9zeW5jb2JqX2Zpbmkoc3luY29ianNbaV0pOwo+Pj4+ICsJ CWRybV9zeW5jb2JqX2luaXQoc3luY29ianNbaV0pOwo+Pj4+ICsJfQo+Pj4+ICAgIAlkcm1fc3lu Y29ial9hcnJheV9mcmVlKHN5bmNvYmpzLCBhcmdzLT5jb3VudF9oYW5kbGVzKTsKPj4+Pgo+Pj4+ IC0JcmV0dXJuIDA7Cj4+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4+ICAgIH0KPj4+Pgo+Pj4+ICAgIGlu dAo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVm ZmVyLmMKPj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ Pj4+IGluZGV4IDBhOGQyZDY0ZjM4MC4uOGE4ZDIxYjI0MTE5IDEwMDY0NAo+Pj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+Pj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+Pj4+IEBAIC0yMTM3LDcgKzIx MzcsNyBAQCBhd2FpdF9mZW5jZV9hcnJheShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKPj4+ PiAgICAJCWlmICghKGZsYWdzICYgSTkxNV9FWEVDX0ZFTkNFX1dBSVQpKQo+Pj4+ICAgIAkJCWNv bnRpbnVlOwo+Pj4+Cj4+Pj4gLQkJZmVuY2UgPSBkcm1fc3luY29ial9mZW5jZV9nZXQoc3luY29i aik7Cj4+Pj4gKwkJZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNlKHN5bmNvYmosIDAsIDAsICZmZW5j ZSk7Cj4+Pj4gICAgCQlpZiAoIWZlbmNlKQo+Pj4+ICAgIAkJCXJldHVybiAtRUlOVkFMOwo+Pj4+ Cj4+Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmggYi9pbmNsdWRlL2Ry bS9kcm1fc3luY29iai5oCj4+Pj4gaW5kZXgKPj4+PiAyZWRhNDRkZWY2MzkuLmFjZjFjM2E0NmQ5 NSAxMDA2NDQKPj4+PiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fc3luY29iai5oCj4+Pj4gKysrIGIv aW5jbHVkZS9kcm0vZHJtX3N5bmNvYmouaAo+Pj4+IEBAIC0zMCw2ICszMCwxMSBAQAo+Pj4+Cj4+ Pj4gICAgc3RydWN0IGRybV9zeW5jb2JqX2NiOwo+Pj4+Cj4+Pj4gK2VudW0gZHJtX3N5bmNvYmpf dHlwZSB7Cj4+Pj4gKwlEUk1fU1lOQ09CSl9UWVBFX0lORElWSURVQUwsCj4+Pj4gKwlEUk1fU1lO Q09CSl9UWVBFX1RJTUVMSU5FCj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICAgIC8qKgo+Pj4+ICAgICAq IHN0cnVjdCBkcm1fc3luY29iaiAtIHN5bmMgb2JqZWN0Lgo+Pj4+ICAgICAqCj4+Pj4gQEAgLTQx LDE5ICs0NiwzNiBAQCBzdHJ1Y3QgZHJtX3N5bmNvYmogewo+Pj4+ICAgIAkgKi8KPj4+PiAgICAJ c3RydWN0IGtyZWYgcmVmY291bnQ7Cj4+Pj4gICAgCS8qKgo+Pj4+IC0JICogQGZlbmNlOgo+Pj4+ IC0JICogTlVMTCBvciBhIHBvaW50ZXIgdG8gdGhlIGZlbmNlIGJvdW5kIHRvIHRoaXMgb2JqZWN0 Lgo+Pj4+IC0JICoKPj4+PiAtCSAqIFRoaXMgZmllbGQgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVj dGx5LiBVc2UKPj4+PiBkcm1fc3luY29ial9mZW5jZV9nZXQoKQo+Pj4+IC0JICogYW5kIGRybV9z eW5jb2JqX3JlcGxhY2VfZmVuY2UoKSBpbnN0ZWFkLgo+Pj4+ICsJICogQHR5cGU6IGluZGljYXRl IHN5bmNvYmogdHlwZQo+Pj4+ICsJICovCj4+Pj4gKwllbnVtIGRybV9zeW5jb2JqX3R5cGUgdHlw ZTsKPj4+PiArCS8qKgo+Pj4+ICsJICogQHdxOiB3YWl0IHNpZ25hbCBvcGVyYXRpb24gd29yayBx dWV1ZQo+Pj4+ICsJICovCj4+Pj4gKwl3YWl0X3F1ZXVlX2hlYWRfdAl3cTsKPj4+PiArCS8qKgo+ Pj4+ICsJICogQHRpbWVsaW5lX2NvbnRleHQ6IGZlbmNlIGNvbnRleHQgdXNlZCBieSB0aW1lbGlu ZQo+Pj4+ICAgIAkgKi8KPj4+PiAtCXN0cnVjdCBkbWFfZmVuY2UgX19yY3UgKmZlbmNlOwo+Pj4+ ICsJdTY0IHRpbWVsaW5lX2NvbnRleHQ7Cj4+Pj4gICAgCS8qKgo+Pj4+IC0JICogQGNiX2xpc3Q6 IExpc3Qgb2YgY2FsbGJhY2tzIHRvIGNhbGwgd2hlbiB0aGUgJmZlbmNlIGdldHMgcmVwbGFjZWQu Cj4+Pj4gKwkgKiBAdGltZWxpbmU6IHN5bmNvYmogdGltZWxpbmUgdmFsdWUsIHdoaWNoIGluZGlj YXRlcyBwb2ludCBpcyBzaWduYWxlZC4KPj4+PiAgICAJICovCj4+Pj4gKwl1NjQgdGltZWxpbmU7 Cj4+Pj4gKwkvKioKPj4+PiArCSAqIEBzaWduYWxfcG9pbnQ6IHdoaWNoIGluZGljYXRlcyB0aGUg bGF0ZXN0IHNpZ25hbGVyIHBvaW50Lgo+Pj4+ICsJICovCj4+Pj4gKwl1NjQgc2lnbmFsX3BvaW50 Owo+Pj4+ICsJLyoqCj4+Pj4gKwkgKiBAc2lnbmFsX3B0X2xpc3Q6IHNpZ25hbGVyIHBvaW50IGxp c3QuCj4+Pj4gKwkgKi8KPj4+PiArCXN0cnVjdCBsaXN0X2hlYWQgc2lnbmFsX3B0X2xpc3Q7Cj4+ Pj4gKwo+Pj4+ICsJLyoqCj4+Pj4gKyAgICAgICAgICogQGNiX2xpc3Q6IExpc3Qgb2YgY2FsbGJh Y2tzIHRvIGNhbGwgd2hlbiB0aGUgJmZlbmNlIGdldHMgcmVwbGFjZWQuCj4+Pj4gKyAgICAgICAg ICovCj4+Pj4gICAgCXN0cnVjdCBsaXN0X2hlYWQgY2JfbGlzdDsKPj4+PiAgICAJLyoqCj4+Pj4g LQkgKiBAbG9jazogUHJvdGVjdHMgJmNiX2xpc3QgYW5kIHdyaXRlLWxvY2tzICZmZW5jZS4KPj4+ PiArCSAqIEBsb2NrOiBQcm90ZWN0cyBzeW5jb2JqIGxpc3QgYW5kIHdyaXRlLWxvY2tzICZmZW5j ZS4KPj4+PiAgICAJICovCj4+Pj4gICAgCXNwaW5sb2NrX3QgbG9jazsKPj4+PiAgICAJLyoqCj4+ Pj4gQEAgLTY4LDcgKzkwLDcgQEAgdHlwZWRlZiB2b2lkICgqZHJtX3N5bmNvYmpfZnVuY190KShz dHJ1Y3QKPj4+PiBkcm1fc3luY29iaiAqc3luY29iaiwKPj4+PiAgICAvKioKPj4+PiAgICAgKiBz dHJ1Y3QgZHJtX3N5bmNvYmpfY2IgLSBjYWxsYmFjayBmb3IgZHJtX3N5bmNvYmpfYWRkX2NhbGxi YWNrCj4+Pj4gICAgICogQG5vZGU6IHVzZWQgYnkgZHJtX3N5bmNvYl9hZGRfY2FsbGJhY2sgdG8g YXBwZW5kIHRoaXMgc3RydWN0IHRvCj4+Pj4gLSAqCSAgJmRybV9zeW5jb2JqLmNiX2xpc3QKPj4+ PiArICogICAgICAgJmRybV9zeW5jb2JqLmNiX2xpc3QKPj4+PiAgICAgKiBAZnVuYzogZHJtX3N5 bmNvYmpfZnVuY190IHRvIGNhbGwKPj4+PiAgICAgKgo+Pj4+ICAgICAqIFRoaXMgc3RydWN0IHdp bGwgYmUgaW5pdGlhbGl6ZWQgYnkgZHJtX3N5bmNvYmpfYWRkX2NhbGxiYWNrLAo+Pj4+IGFkZGl0 aW9uYWwgQEAKPj4+PiAtMTA2LDI5ICsxMjgsNiBAQCBkcm1fc3luY29ial9wdXQoc3RydWN0IGRy bV9zeW5jb2JqICpvYmopCj4+Pj4gICAgCWtyZWZfcHV0KCZvYmotPnJlZmNvdW50LCBkcm1fc3lu Y29ial9mcmVlKTsgIH0KPj4+Pgo+Pj4+IC0vKioKPj4+PiAtICogZHJtX3N5bmNvYmpfZmVuY2Vf Z2V0IC0gZ2V0IGEgcmVmZXJlbmNlIHRvIGEgZmVuY2UgaW4gYSBzeW5jCj4+Pj4gb2JqZWN0Cj4+ Pj4gLSAqIEBzeW5jb2JqOiBzeW5jIG9iamVjdC4KPj4+PiAtICoKPj4+PiAtICogVGhpcyBhY3F1 aXJlcyBhZGRpdGlvbmFsIHJlZmVyZW5jZSB0byAmZHJtX3N5bmNvYmouZmVuY2UKPj4+PiBjb250 YWluZWQgaW4gQG9iaiwKPj4+PiAtICogaWYgbm90IE5VTEwuIEl0IGlzIGlsbGVnYWwgdG8gY2Fs bCB0aGlzIHdpdGhvdXQgYWxyZWFkeSBob2xkaW5nIGEgcmVmZXJlbmNlLgo+Pj4+IC0gKiBObyBs b2NrcyByZXF1aXJlZC4KPj4+PiAtICoKPj4+PiAtICogUmV0dXJuczoKPj4+PiAtICogRWl0aGVy IHRoZSBmZW5jZSBvZiBAb2JqIG9yIE5VTEwgaWYgdGhlcmUncyBub25lLgo+Pj4+IC0gKi8KPj4+ PiAtc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX2ZlbmNlICoKPj4+PiAtZHJtX3N5bmNvYmpfZmVu Y2VfZ2V0KHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaikgLXsKPj4+PiAtCXN0cnVjdCBkbWFf ZmVuY2UgKmZlbmNlOwo+Pj4+IC0KPj4+PiAtCXJjdV9yZWFkX2xvY2soKTsKPj4+PiAtCWZlbmNl ID0gZG1hX2ZlbmNlX2dldF9yY3Vfc2FmZSgmc3luY29iai0+ZmVuY2UpOwo+Pj4+IC0JcmN1X3Jl YWRfdW5sb2NrKCk7Cj4+Pj4gLQo+Pj4+IC0JcmV0dXJuIGZlbmNlOwo+Pj4+IC19Cj4+Pj4gLQo+ Pj4+ICAgIHN0cnVjdCBkcm1fc3luY29iaiAqZHJtX3N5bmNvYmpfZmluZChzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdmF0ZSwKPj4+PiAgICAJCQkJICAgICB1MzIgaGFuZGxlKTsKPj4+PiAgICB2 b2lkIGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2Jq LCB1NjQKPj4+PiBwb2ludCwgQEAgLTE0Miw1ICsxNDEsNyBAQCBpbnQgZHJtX3N5bmNvYmpfY3Jl YXRlKHN0cnVjdCBkcm1fc3luY29iago+Pj4+ICoqb3V0X3N5bmNvYmosIHVpbnQzMl90IGZsYWdz LCAgaW50IGRybV9zeW5jb2JqX2dldF9oYW5kbGUoc3RydWN0Cj4+Pj4gZHJtX2ZpbGUgKmZpbGVf cHJpdmF0ZSwKPj4+PiAgICAJCQkgICBzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosIHUzMiAq aGFuZGxlKTsgIGludAo+Pj4+IGRybV9zeW5jb2JqX2dldF9mZChzdHJ1Y3QgZHJtX3N5bmNvYmog KnN5bmNvYmosIGludCAqcF9mZCk7Cj4+Pj4gK2ludCBkcm1fc3luY29ial9zZWFyY2hfZmVuY2Uo c3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLCB1NjQgcG9pbnQsCj4+Pj4gdTY0IGZsYWdzLAo+ Pj4+ICsJCQkgICAgIHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZSk7Cj4+Pj4KPj4+PiAgICAjZW5k aWYKPj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm0uaCBiL2luY2x1ZGUvdWFw aS9kcm0vZHJtLmggaW5kZXgKPj4+PiAzMDBmMzM2NjMzZjIuLmNlYmRiMjU0MWViNyAxMDA2NDQK Pj4+PiAtLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybS5oCj4+Pj4gKysrIGIvaW5jbHVkZS91YXBp L2RybS9kcm0uaAo+Pj4+IEBAIC03MTcsNiArNzE3LDcgQEAgc3RydWN0IGRybV9wcmltZV9oYW5k bGUgeyAgc3RydWN0Cj4+Pj4gZHJtX3N5bmNvYmpfY3JlYXRlIHsKPj4+PiAgICAJX191MzIgaGFu ZGxlOwo+Pj4+ICAgICNkZWZpbmUgRFJNX1NZTkNPQkpfQ1JFQVRFX1NJR05BTEVEICgxIDw8IDAp Cj4+Pj4gKyNkZWZpbmUgRFJNX1NZTkNPQkpfQ1JFQVRFX1RZUEVfVElNRUxJTkUgKDEgPDwgMSkK Pj4+PiAgICAJX191MzIgZmxhZ3M7Cj4+Pj4gICAgfTsKPj4+Pgo+Pj4+IC0tCj4+Pj4gMi4xNy4x Cj4+Pj4KPj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+Pj4+IGFtZC1nZnggbWFpbGluZyBsaXN0Cj4+Pj4gYW1kLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKPj4+PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2FtZC1nZngKPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KPj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QKPj4gYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQt Z2Z4CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQt Z2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK