From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 3/8] drm/i915/pmu: Expose a PMU interface for perf queries Date: Tue, 26 Sep 2017 13:28:03 +0100 Message-ID: References: <20170925151543.7395-1-tvrtko.ursulin@linux.intel.com> <20170925151543.7395-4-tvrtko.ursulin@linux.intel.com> <150636102564.18819.4396243766730055670@mail.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id C41F86E543 for ; Tue, 26 Sep 2017 12:28:08 +0000 (UTC) In-Reply-To: <150636102564.18819.4396243766730055670@mail.alporthouse.com> Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , Tvrtko Ursulin , Intel-gfx@lists.freedesktop.org Cc: Peter Zijlstra List-Id: intel-gfx@lists.freedesktop.org Ck9uIDI1LzA5LzIwMTcgMTg6MzcsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE3LTA5LTI1IDE2OjE1OjM4KQo+PiBGcm9tOiBUdnJ0a28gVXJzdWxpbiA8 dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+Pgo+PiBGcm9tOiBDaHJpcyBXaWxzb24gPGNocmlz QGNocmlzLXdpbHNvbi5jby51az4KPj4gRnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1 bGluQGludGVsLmNvbT4KPj4gRnJvbTogRG1pdHJ5IFJvZ296aGtpbiA8ZG1pdHJ5LnYucm9nb3po a2luQGludGVsLmNvbT4KPj4KPj4gVGhlIGZpcnN0IGdvYWwgaXMgdG8gYmUgYWJsZSB0byBtZWFz dXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1c3luZXNzCj4+IHdpdGhvdXQgaGF2aW5nIHRv IHBvbGwgcmVnaXN0ZXJzIGZyb20gdXNlcnNwYWNlLiAoV2hpY2ggbm90IG9ubHkgaW5jdXJzCj4+ IGhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5pdGVseSwgcGVydHVyYmluZyB0aGUg c3lzdGVtLCBidXQgYWxzbwo+PiBydW5zIHRoZSByaXNrIG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUu KSBBcyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRoZQo+PiBwZXJmIGV2ZW50IGNvdW50ZXIg aW50ZXJmYWNlIHRvIHNhbXBsZSB0aGUgcmluZyByZWdpc3RlcnMgcGVyaW9kaWNhbGx5Cj4+IGFu ZCBzZW5kIHRob3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgo+Pgo+PiBGdW5jdGlvbmFsaXR5IHdl IGFyZSBleHBvcnRpbmcgdG8gdXNlcnNwYWNlIGlzIHZpYSB0aGUgZXhpc3RpbmcgcGVyZiBQTVUK Pj4gQVBJIGFuZCBjYW4gYmUgZXhlcmNpc2VkIHZpYSB0aGUgZXhpc3RpbmcgdG9vbHMuIEZvciBl eGFtcGxlOgo+Pgo+PiAgICBwZXJmIHN0YXQgLWEgLWUgaTkxNS9yY3MwLWJ1c3kvIC1JIDEwMDAK Pj4KPj4gV2lsbCBwcmludCB0aGUgcmVuZGVyIGVuZ2luZSBidXN5bm5lcyBvbmNlIHBlciBzZWNv bmQuIEFsbCB0aGUgcGVyZm9ybWFuY2UKPj4gY291bnRlcnMgY2FuIGJlIGVudW1lcmF0ZWQgKHBl cmYgbGlzdCkgYW5kIGhhdmUgdGhlaXIgdW5pdCBvZiBtZWFzdXJlCj4+IGNvcnJlY3RseSByZXBv cnRlZCBpbiBzeXNmcy4KPj4KPj4gdjEtdjIgKENocmlzIFdpbHNvbik6Cj4+Cj4+IHYyOiBVc2Ug YSBjb21tb24gdGltZXIgZm9yIHRoZSByaW5nIHNhbXBsaW5nLgo+Pgo+PiB2MzogKFR2cnRrbyBV cnN1bGluKQo+PiAgICogRGVjb3VwbGUgdUFQSSBmcm9tIGk5MTUgZW5naW5lIGlkcy4KPj4gICAq IENvbXBsZXRlIHVBUEkgZGVmaW5lcy4KPj4gICAqIFJlZmFjdG9yIHNvbWUgY29kZSB0byBoZWxw ZXJzIGZvciBjbGFyaXR5Lgo+PiAgICogU2tpcCBzYW1wbGluZyBkaXNhYmxlZCBlbmdpbmVzLgo+ PiAgICogRXhwb3NlIGNvdW50ZXJzIGluIHN5c2ZzLgo+PiAgICogUGFzcyBpbiBmYWtlIHJlZ3Mg dG8gYXZvaWQgbnVsbCBwdHIgZGVyZWYgaW4gcGVyZiBjb3JlLgo+PiAgICogQ29udmVydCB0byBj bGFzcy9pbnN0YW5jZSB1QVBJLgo+PiAgICogVXNlIHNoYXJlZCBkcml2ZXIgY29kZSBmb3IgcmM2 IHJlc2lkZW5jeSwgcG93ZXIgYW5kIGZyZXF1ZW5jeS4KPj4KPj4gdjQ6IChEbWl0cnkgUm9nb3po a2luKQo+PiAgICogUmVnaXN0ZXIgUE1VIHdpdGggLnRhc2tfY3R4X25yPXBlcmZfaW52YWxpZF9j b250ZXh0Cj4+ICAgKiBFeHBvc2UgY3B1bWFzayBmb3IgdGhlIFBNVSB3aXRoIHRoZSBzaW5nbGUg Q1BVIGluIHRoZSBtYXNrCj4+ICAgKiBQcm9wZXJseSBzdXBwb3J0IHBtdS0+c3RvcCgpOiBpdCBz aG91bGQgY2FsbCBwbXUtPnJlYWQoKQo+PiAgICogUHJvcGVybHkgc3VwcG9ydCBwbXUtPmRlbCgp OiBpdCBzaG91bGQgY2FsbCBzdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSkKPj4gICAqIEludHJv ZHVjZSByZWZjb3VudGluZyBvZiBldmVudCBzdWJzY3JpcHRpb25zLgo+PiAgICogTWFrZSBwbXUu YnVzeV9zdGF0cyBhIHJlZmNvdW50ZXIgdG8gYXZvaWQgYnVzeSBzdGF0cyBnb2luZyBhd2F5Cj4+ ICAgICB3aXRoIHNvbWUgZGVsZXRlZCBldmVudC4KPj4gICAqIEV4cG9zZSBjcHVtYXNrIGZvciBp OTE1IFBNVSB0byBhdm9pZCBtdWx0aXBsZSBldmVudHMgY3JlYXRpb24gb2YKPj4gICAgIHRoZSBz YW1lIHR5cGUgZm9sbG93ZWQgYnkgY291bnRlciBhZ2dyZWdhdGlvbiBieSBwZXJmLXN0YXQuCj4+ ICAgKiBUcmFjayBDUFVzIGdldHRpbmcgb25saW5lL29mZmxpbmUgdG8gbWlncmF0ZSBwZXJmIGNv bnRleHQuIElmIChsaWtlbHkpCj4+ICAgICBjcHVtYXNrIHdpbGwgaW5pdGlhbGx5IHNldCBDUFUw LCBDT05GSUdfQk9PVFBBUkFNX0hPVFBMVUdfQ1BVMCB3aWxsIGJlCj4+ICAgICBuZWVkZWQgdG8g c2VlIGVmZmVjdCBvZiBDUFUgc3RhdHVzIHRyYWNraW5nLgo+PiAgICogRW5kIHJlc3VsdCBpcyB0 aGF0IG9ubHkgZ2xvYmFsIGV2ZW50cyBhcmUgc3VwcG9ydGVkIGFuZCBwZXJmIHN0YXQKPj4gICAg IHdvcmtzIGNvcnJlY3RseS4KPj4gICAqIERlbnkgcGVyZiBkcml2ZXIgbGV2ZWwgc2FtcGxpbmcg LSBpdCBpcyBwcm9oaWJpdGVkIGZvciB1bmNvcmUgUE1VLgo+Pgo+PiB2NTogKFR2cnRrbyBVcnN1 bGluKQo+Pgo+PiAgICogRG9uJ3QgaGFyZGNvZGUgbnVtYmVyIG9mIGVuZ2luZSBzYW1wbGVycy4K Pj4gICAqIFJld3JpdGUgZXZlbnQgcmVmLWNvdW50aW5nIGZvciBjb3JyZWN0bmVzcyBhbmQgc2lt cGxpY2l0eS4KPj4gICAqIFN0b3JlIGluaXRpYWwgY291bnRlciB2YWx1ZSB3aGVuIHN0YXJ0aW5n IGFscmVhZHkgZW5hYmxlZCBldmVudHMKPj4gICAgIHRvIGNvcnJlY3RseSByZXBvcnQgdmFsdWVz IHRvIGFsbCBsaXN0ZW5lcnMuCj4+ICAgKiBGaXggUkM2IHJlc2lkZW5jeSByZWFkb3V0Lgo+PiAg ICogQ29tbWVudHMsIEdQTCBoZWFkZXIuCj4+Cj4+IHY2Ogo+PiAgICogQWRkIG1pc3NpbmcgZW50 cnkgdG8gdjQgY2hhbmdlbG9nLgo+PiAgICogRml4IGFjY291bnRpbmcgaW4gQ1BVIGhvdHBsdWcg Y2FzZSBieSBjb3B5aW5nIHRoZSBhcHByb2FjaCBmcm9tCj4+ICAgICBhcmNoL3g4Ni9ldmVudHMv aW50ZWwvY3N0YXRlLmMuIChEbWl0cnkgUm9nb3poa2luKQo+Pgo+PiB2NzoKPj4gICAqIExvZyBm YWlsdXJlIG1lc3NhZ2Ugb25seSBvbiBmYWlsdXJlLgo+PiAgICogUmVtb3ZlIENQVSBob3RwbHVn IG5vdGlmaWNhdGlvbiBzdGF0ZSBvbiB1bnJlZ2lzdGVyLgo+Pgo+PiB2ODoKPj4gICAqIEZpeCBl cnJvciB1bndpbmQgb24gZmFpbGVkIHJlZ2lzdHJhdGlvbi4KPj4gICAqIENoZWNrcGF0Y2ggY2xl YW51cC4KPj4KPj4gdjk6Cj4+ICAgKiBEcm9wIHRoZSBlbmVyZ3kgbWV0cmljLCBpdCBpcyBhdmFp bGFibGUgdmlhIGludGVsX3JhcGxfcGVyZi4KPj4gICAgIChWaWxsZSBTeXJqw6Rsw6QpCj4+ICAg KiBVc2UgSEFTX1JDNihwKS4gKENocmlzIFdpbHNvbikKPj4gICAqIEhhbmRsZSB1bnN1cHBvcnRl ZCBub24tZW5naW5lIGV2ZW50cy4gKERtaXRyeSBSb2dvemhraW4pCj4+ICAgKiBSZWJhc2UgZm9y IGludGVsX3JjNl9yZXNpZGVuY3lfbnMgbmVlZGluZyBjYWxsZXIgbWFuYWdlZAo+PiAgICAgcnVu dGltZSBwbS4KPj4gICAqIERyb3AgSEFTX1JDNiBjaGVja3MgZnJvbSB0aGUgcmVhZCBjYWxsYmFj ayBzaW5jZSBjcmVhdGluZyB0aG9zZQo+PiAgICAgZXZlbnRzIHdpbGwgYmUgcmVqZWN0ZWQgYXQg aW5pdCB0aW1lIGFscmVhZHkuCj4+ICAgKiBBZGQgY291bnRlciB1bml0cyB0byBzeXNmcyBzbyBw ZXJmIHN0YXQgb3V0cHV0IGlzIG5pY2VyLgo+PiAgICogQ2xlYW51cCB0aGUgYXR0cmlidXRlIHRh YmxlcyBmb3IgYnJldml0eSBhbmQgcmVhZGFiaWxpdHkuCj4+Cj4+IHYxMDoKPj4gICAqIEZpeGVk IHF1ZXVlZCBhY2NvdW50aW5nLgo+Pgo+PiB2MTE6Cj4+ICAgKiBNb3ZlIGludGVsX2VuZ2luZV9s b29rdXBfdXNlciB0byBpbnRlbF9lbmdpbmVfY3MuYwo+PiAgICogQ29tbWl0IHVwZGF0ZS4gKEpv b25hcyBMYWh0aW5lbikKPj4KPj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+Cj4+IFNpZ25lZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0 a28udXJzdWxpbkBpbnRlbC5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IERtaXRyeSBSb2dvemhraW4g PGRtaXRyeS52LnJvZ296aGtpbkBpbnRlbC5jb20+Cj4+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZy dGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13 aWxzb24uY28udWs+Cj4+IENjOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0cnkudi5yb2dvemhraW5A aW50ZWwuY29tPgo+PiBDYzogUGV0ZXIgWmlqbHN0cmEgPHBldGVyekBpbmZyYWRlYWQub3JnPgo+ PiAtLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEg Kwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICB8ICAgMiArCj4+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgIDc4ICsrKysKPj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jICAgICAgICAgfCA3MDcgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oICAgICAgICAgfCAgIDMgKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2lu ZV9jcy5jICB8ICAzNSArKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuaCB8ICAyNSArKwo+PiAgIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAg ICB8ICA1NyArKysKPj4gICA4IGZpbGVzIGNoYW5nZWQsIDkwOCBpbnNlcnRpb25zKCspCj4+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKPj4KPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUKPj4gaW5kZXggNTE4MmUzZDU1NTdkLi41YzYwMTM5NjFiM2IgMTAw NjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4+IEBAIC0yNiw2ICsyNiw3IEBAIGk5MTUteSA6PSBp OTE1X2Rydi5vIFwKPj4gICAKPj4gICBpOTE1LSQoQ09ORklHX0NPTVBBVCkgICArPSBpOTE1X2lv YzMyLm8KPj4gICBpOTE1LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBpOTE1X2RlYnVnZnMubyBpbnRl bF9waXBlX2NyYy5vCj4+ICtpOTE1LSQoQ09ORklHX1BFUkZfRVZFTlRTKSArPSBpOTE1X3BtdS5v Cj4+ICAgCj4+ICAgIyBHRU0gY29kZQo+PiAgIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBc Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+PiBpbmRleCA3MDU2YmIyOTlkYzYuLjAzYmJlMjNl NGRmOCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4+IEBAIC0xMjAwLDYgKzEyMDAs NyBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4+ICAgICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2 X3ByaXYtPmRybTsKPj4gICAKPj4gICAgICAgICAgaTkxNV9nZW1fc2hyaW5rZXJfaW5pdChkZXZf cHJpdik7Cj4+ICsgICAgICAgaTkxNV9wbXVfcmVnaXN0ZXIoZGV2X3ByaXYpOwo+PiAgIAo+PiAg ICAgICAgICAvKgo+PiAgICAgICAgICAgKiBOb3RpZnkgYSB2YWxpZCBzdXJmYWNlIGFmdGVyIG1v ZGVzZXR0aW5nLAo+PiBAQCAtMTI1NCw2ICsxMjU1LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9kcml2 ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ICAgICAg ICAgIGludGVsX29wcmVnaW9uX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwo+PiAgIAo+PiAgICAgICAg ICBpOTE1X3BlcmZfdW5yZWdpc3RlcihkZXZfcHJpdik7Cj4+ICsgICAgICAgaTkxNV9wbXVfdW5y ZWdpc3RlcihkZXZfcHJpdik7Cj4+ICAgCj4+ICAgICAgICAgIGk5MTVfdGVhcmRvd25fc3lzZnMo ZGV2X3ByaXYpOwo+PiAgICAgICAgICBpOTE1X2d1Y19sb2dfdW5yZWdpc3RlcihkZXZfcHJpdik7 Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiBpbmRleCA2MTQzYTcwOWM2MDUuLmE0MGMzMTRl ZWQ1ZiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+IEBAIC00MCw2ICs0MCw3IEBA Cj4+ICAgI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KPj4gICAjaW5jbHVkZSA8bGludXgvaW50ZWwt aW9tbXUuaD4KPj4gICAjaW5jbHVkZSA8bGludXgva3JlZi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4 L3BlcmZfZXZlbnQuaD4KPj4gICAjaW5jbHVkZSA8bGludXgvcG1fcW9zLmg+Cj4+ICAgI2luY2x1 ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+Cj4+ICAgI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+ Cj4+IEBAIC0yMTk4LDYgKzIxOTksNzAgQEAgc3RydWN0IGludGVsX2NkY2xrX3N0YXRlIHsKPj4g ICAgICAgICAgdW5zaWduZWQgaW50IGNkY2xrLCB2Y28sIHJlZjsKPj4gICB9Owo+PiAgIAo+PiAr ZW51bSB7Cj4+ICsgICAgICAgX19JOTE1X1NBTVBMRV9GUkVRX0FDVCA9IDAsCj4+ICsgICAgICAg X19JOTE1X1NBTVBMRV9GUkVRX1JFUSwKPj4gKyAgICAgICBfX0k5MTVfTlVNX1BNVV9TQU1QTEVS Uwo+PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBIb3cgbWFueSBkaWZmZXJlbnQgZXZlbnRzIHdl IHRyYWNrIGluIHRoZSBnbG9iYWwgUE1VIG1hc2suCj4+ICsgKgo+PiArICogSXQgaXMgYWxzbyB1 c2VkIHRvIGtub3cgdG8gbmVlZGVkIG51bWJlciBvZiBldmVudCByZWZlcmVuY2UgY291bnRlcnMu Cj4+ICsgKi8KPj4gKyNkZWZpbmUgSTkxNV9QTVVfTUFTS19CSVRTIFwKPj4gKyAgICAgICAoKDEg PDwgSTkxNV9QTVVfU0FNUExFX0JJVFMpICsgXAo+PiArICAgICAgICAoSTkxNV9QTVVfTEFTVCAr IDEgLSBfX0k5MTVfUE1VX09USEVSKDApKSkKPj4gKwo+PiArc3RydWN0IGk5MTVfcG11IHsKPj4g KyAgICAgICAvKioKPj4gKyAgICAgICAgKiBAbm9kZTogTGlzdCBub2RlIGZvciBDUFUgaG90cGx1 ZyBoYW5kbGluZy4KPj4gKyAgICAgICAgKi8KPj4gKyAgICAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSBu b2RlOwo+PiArICAgICAgIC8qKgo+PiArICAgICAgICAqIEBiYXNlOiBQTVUgYmFzZS4KPj4gKyAg ICAgICAgKi8KPj4gKyAgICAgICBzdHJ1Y3QgcG11IGJhc2U7Cj4+ICsgICAgICAgLyoqCj4+ICsg ICAgICAgICogQGxvY2s6IExvY2sgcHJvdGVjdGluZyBlbmFibGUgbWFzayBhbmQgcmVmIGNvdW50 IGhhbmRsaW5nLgo+PiArICAgICAgICAqLwo+PiArICAgICAgIHNwaW5sb2NrX3QgbG9jazsKPj4g KyAgICAgICAvKioKPj4gKyAgICAgICAgKiBAdGltZXI6IFRpbWVyIGZvciBpbnRlcm5hbCBpOTE1 IFBNVSBzYW1wbGluZy4KPj4gKyAgICAgICAgKi8KPj4gKyAgICAgICBzdHJ1Y3QgaHJ0aW1lciB0 aW1lcjsKPj4gKyAgICAgICAvKioKPj4gKyAgICAgICAgKiBAZW5hYmxlOiBCaXRtYXNrIG9mIGFs bCBjdXJyZW50bHkgZW5hYmxlZCBldmVudHMuCj4+ICsgICAgICAgICoKPj4gKyAgICAgICAgKiBC aXRzIGFyZSBkZXJpdmVkIGZyb20gdUFQSSBldmVudCBudW1iZXJzIGluIGEgd2F5IHRoYXQgbG93 IDE2IGJpdHMKPj4gKyAgICAgICAgKiBjb3JyZXNwb25kIHRvIGVuZ2luZSBldmVudCBfc2FtcGxl XyBfdHlwZV8gKEk5MTVfU0FNUExFX1FVRVVFRCBpcwo+PiArICAgICAgICAqIGJpdCAwKSwgYW5k IGhpZ2hlciBiaXRzIGNvcnJlc3BvbmQgdG8gb3RoZXIgZXZlbnRzIChmb3IgaW5zdGFuY2UKPj4g KyAgICAgICAgKiBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZIGlzIGJpdCAxNiBldGMpLgo+PiAr ICAgICAgICAqCj4+ICsgICAgICAgICogSW4gb3RoZXIgd29yZHMsIGxvdyAxNiBiaXRzIGFyZSBu b3QgcGVyIGVuZ2luZSBidXQgcGVyIGVuZ2luZQo+PiArICAgICAgICAqIHNhbXBsZXIgdHlwZSwg d2hpbGUgdGhlIHVwcGVyIGJpdHMgYXJlIGRpcmVjdGx5IG1hcHBlZCB0byBvdGhlcgo+PiArICAg ICAgICAqIGV2ZW50IHR5cGVzLgo+PiArICAgICAgICAqLwo+PiArICAgICAgIHU2NCBlbmFibGU7 Cj4+ICsgICAgICAgLyoqCj4+ICsgICAgICAgICogQGVuYWJsZV9jb3VudDogUmVmZXJlbmNlIGNv dW50cyBmb3IgdGhlIGVuYWJsZWQgZXZlbnRzLgo+PiArICAgICAgICAqCj4+ICsgICAgICAgICog QXJyYXkgaW5kaWNlcyBhcmUgbWFwcGVkIGluIHRoZSBzYW1lIHdheSBhcyBiaXRzIGluIHRoZSBA ZW5hYmxlIGZpZWxkCj4+ICsgICAgICAgICogYW5kIHRoZXkgYXJlIHVzZWQgdG8gY29udHJvbCBz YW1wbGluZyBvbi9vZmYgd2hlbiBtdWx0aXBsZSBjbGllbnRzCj4+ICsgICAgICAgICogYXJlIHVz aW5nIHRoZSBQTVUgQVBJLgo+PiArICAgICAgICAqLwo+PiArICAgICAgIHVuc2lnbmVkIGludCBl bmFibGVfY291bnRbSTkxNV9QTVVfTUFTS19CSVRTXTsKPj4gKyAgICAgICAvKioKPj4gKyAgICAg ICAgKiBAc2FtcGxlOiBDdXJyZW50IGNvdW50ZXIgdmFsdWUgZm9yIGk5MTUgZXZlbnRzIHdoaWNo IG5lZWQgc2FtcGxpbmcuCj4+ICsgICAgICAgICoKPj4gKyAgICAgICAgKiBUaGVzZSBjb3VudGVy cyBhcmUgdXBkYXRlZCBmcm9tIHRoZSBpOTE1IFBNVSBzYW1wbGluZyB0aW1lci4KPj4gKyAgICAg ICAgKgo+PiArICAgICAgICAqIE9ubHkgZ2xvYmFsIGNvdW50ZXJzIGFyZSBoZWxkIGhlcmUsIHdo aWxlIHRoZSBwZXItZW5naW5lIG9uZXMgYXJlIGluCj4+ICsgICAgICAgICogc3RydWN0IGludGVs X2VuZ2luZV9jcy4KPj4gKyAgICAgICAgKi8KPj4gKyAgICAgICB1NjQgc2FtcGxlW19fSTkxNV9O VU1fUE1VX1NBTVBMRVJTXTsKPj4gK307Cj4+ICsKPj4gICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSB7Cj4+ICAgICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlIGRybTsKPj4gICAKPj4gQEAgLTIyNDYs NiArMjMxMSw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPj4gICAgICAgICAgc3RydWN0 IHBjaV9kZXYgKmJyaWRnZV9kZXY7Cj4+ICAgICAgICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICprZXJuZWxfY29udGV4dDsKPj4gICAgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lW0k5MTVfTlVNX0VOR0lORVNdOwo+PiArICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZV9jbGFzc1tNQVhfRU5HSU5FX0NMQVNTICsgMV0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBbTUFYX0VOR0lORV9JTlNUQU5DRSArIDFdOwo+PiAg ICAgICAgICBzdHJ1Y3QgaTkxNV92bWEgKnNlbWFwaG9yZTsKPj4gICAKPj4gICAgICAgICAgc3Ry dWN0IGRybV9kbWFfaGFuZGxlICpzdGF0dXNfcGFnZV9kbWFoOwo+PiBAQCAtMjcwOCw2ICsyNzc1 LDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+PiAgICAgICAgICAgICAgICAgIGludCAg ICAgaXJxOwo+PiAgICAgICAgICB9IGxwZV9hdWRpbzsKPj4gICAKPj4gKyAgICAgICBzdHJ1Y3Qg aTkxNV9wbXUgcG11Owo+PiArCj4+ICAgICAgICAgIC8qCj4+ICAgICAgICAgICAqIE5PVEU6IFRo aXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVmZiBoZXJlLiBZb3VyIHBh dGNoCj4+ICAgICAgICAgICAqIHdpbGwgYmUgcmVqZWN0ZWQuIEluc3RlYWQgbG9vayBmb3IgYSBi ZXR0ZXIgcGxhY2UuCj4+IEBAIC0zOTMyLDYgKzQwMDEsMTUgQEAgZXh0ZXJuIHZvaWQgaTkxNV9w ZXJmX2Zpbmkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPj4gICBleHRlcm4g dm9pZCBpOTE1X3BlcmZfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKPj4gICBleHRlcm4gdm9pZCBpOTE1X3BlcmZfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpOwo+PiAgIAo+PiArLyogaTkxNV9wbXUuYyAqLwo+PiArI2lmZGVm IENPTkZJR19QRVJGX0VWRU5UUwo+PiArdm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4+ICt2b2lkIGk5MTVfcG11X3VucmVnaXN0ZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+PiArI2Vsc2UKPj4gK3N0YXRpYyBpbmxpbmUgdm9p ZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkge30KPj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KSB7fQo+PiArI2VuZGlmCj4+ICsKPj4gICAvKiBpOTE1X3N1c3BlbmQuYyAq Lwo+PiAgIGV4dGVybiBpbnQgaTkxNV9zYXZlX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7Cj4+ICAgZXh0ZXJuIGludCBpOTE1X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcG11LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCj4+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uY2YxNDA2ZmJjMjE1Cj4+ IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwo+ PiBAQCAtMCwwICsxLDcwNyBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVs IENvcnBvcmF0aW9uCj4+ICsgKgo+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPj4gKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4+ICsgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK Pj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQo+PiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPj4gKyAqCj4+ICsgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0Cj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4+ICsgKiBTb2Z0d2FyZS4KPj4g KyAqCj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4+ICsg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKPj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4+ICsgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwo+PiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+PiArICogSU4gVEhFIFNPRlRXQVJF Lgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgo+ PiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPj4gKwo+PiArI2luY2x1ZGUgImk5MTVf ZHJ2LmgiCj4+ICsjaW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZlci5oIgo+PiArCj4+ICsvKiBGcmVx dWVuY3kgZm9yIHRoZSBzYW1wbGluZyB0aW1lciBmb3IgZXZlbnRzIHdoaWNoIG5lZWQgaXQuICov Cj4+ICsjZGVmaW5lIEZSRVFVRU5DWSAyMDAKPj4gKyNkZWZpbmUgUEVSSU9EIG1heF90KHU2NCwg MTAwMDAsIE5TRUNfUEVSX1NFQyAvIEZSRVFVRU5DWSkKPj4gKwo+PiArI2RlZmluZSBFTkdJTkVf U0FNUExFX01BU0sgXAo+PiArICAgICAgIChCSVQoSTkxNV9TQU1QTEVfUVVFVUVEKSB8IFwKPj4g KyAgICAgICAgQklUKEk5MTVfU0FNUExFX0JVU1kpIHwgXAo+PiArICAgICAgICBCSVQoSTkxNV9T QU1QTEVfV0FJVCkgfCBcCj4+ICsgICAgICAgIEJJVChJOTE1X1NBTVBMRV9TRU1BKSkKPj4gKwo+ PiArI2RlZmluZSBFTkdJTkVfU0FNUExFX0JJVFMgKDEgPDwgSTkxNV9QTVVfU0FNUExFX0JJVFMp Cj4+ICsKPj4gK3N0YXRpYyBjcHVtYXNrX3QgaTkxNV9wbXVfY3B1bWFzayA9IENQVV9NQVNLX05P TkU7Cj4+ICsKPj4gK3N0YXRpYyB1OCBlbmdpbmVfY29uZmlnX3NhbXBsZSh1NjQgY29uZmlnKQo+ PiArewo+PiArICAgICAgIHJldHVybiBjb25maWcgJiBJOTE1X1BNVV9TQU1QTEVfTUFTSzsKPj4g K30KPj4gKwo+PiArc3RhdGljIHU4IGVuZ2luZV9ldmVudF9zYW1wbGUoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50KQo+PiArewo+PiArICAgICAgIHJldHVybiBlbmdpbmVfY29uZmlnX3NhbXBsZShl dmVudC0+YXR0ci5jb25maWcpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdTggZW5naW5lX2V2ZW50 X2NsYXNzKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4gK3sKPj4gKyAgICAgICByZXR1cm4g KGV2ZW50LT5hdHRyLmNvbmZpZyA+PiBJOTE1X1BNVV9DTEFTU19TSElGVCkgJiAweGZmOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdTggZW5naW5lX2V2ZW50X2luc3RhbmNlKHN0cnVjdCBwZXJmX2V2 ZW50ICpldmVudCkKPj4gK3sKPj4gKyAgICAgICByZXR1cm4gKGV2ZW50LT5hdHRyLmNvbmZpZyA+ PiBJOTE1X1BNVV9TQU1QTEVfQklUUykgJiAweGZmOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9v bCBpc19lbmdpbmVfY29uZmlnKHU2NCBjb25maWcpCj4+ICt7Cj4+ICsgICAgICAgcmV0dXJuIGNv bmZpZyA8IF9fSTkxNV9QTVVfT1RIRVIoMCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1bnNpZ25l ZCBpbnQgY29uZmlnX2VuYWJsZWRfYml0KHU2NCBjb25maWcpCj4+ICt7Cj4+ICsgICAgICAgaWYg KGlzX2VuZ2luZV9jb25maWcoY29uZmlnKSkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiBlbmdp bmVfY29uZmlnX3NhbXBsZShjb25maWcpOwo+PiArICAgICAgIGVsc2UKPj4gKyAgICAgICAgICAg ICAgIHJldHVybiBFTkdJTkVfU0FNUExFX0JJVFMgKyAoY29uZmlnIC0gX19JOTE1X1BNVV9PVEhF UigwKSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1NjQgY29uZmlnX2VuYWJsZWRfbWFzayh1NjQg Y29uZmlnKQo+PiArewo+PiArICAgICAgIHJldHVybiBCSVRfVUxMKGNvbmZpZ19lbmFibGVkX2Jp dChjb25maWcpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2wgaXNfZW5naW5lX2V2ZW50KHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4gK3sKPj4gKyAgICAgICByZXR1cm4gaXNfZW5naW5l X2NvbmZpZyhldmVudC0+YXR0ci5jb25maWcpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdW5zaWdu ZWQgaW50IGV2ZW50X2VuYWJsZWRfYml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4gK3sK Pj4gKyAgICAgICByZXR1cm4gY29uZmlnX2VuYWJsZWRfYml0KGV2ZW50LT5hdHRyLmNvbmZpZyk7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29sIGdyYWJfZm9yY2V3YWtlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1LCBib29sIGZ3KQo+PiArewo+PiArICAgICAgIGlmICghZncpCj4+ICsg ICAgICAgICAgICAgICBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChpOTE1LCBGT1JDRVdBS0Vf QUxMKTsKPj4gKwo+PiArICAgICAgIHJldHVybiB0cnVlOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCBlbmdpbmVzX3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ ICt7Cj4+ICsgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+PiArICAgICAg IGVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+PiArICAgICAgIGJvb2wgZncgPSBmYWxzZTsKPj4g Kwo+PiArICAgICAgIGlmICgoZGV2X3ByaXYtPnBtdS5lbmFibGUgJiBFTkdJTkVfU0FNUExFX01B U0spID09IDApCj4+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4+ICsKPj4gKyAgICAgICBpZiAo IWRldl9wcml2LT5ndC5hd2FrZSkKPj4gKyAgICAgICAgICAgICAgIHJldHVybjsKPj4gKwo+PiAr ICAgICAgIGlmICghaW50ZWxfcnVudGltZV9wbV9nZXRfaWZfaW5fdXNlKGRldl9wcml2KSkKPj4g KyAgICAgICAgICAgICAgIHJldHVybjsKPj4gKwo+PiArICAgICAgIGZvcl9lYWNoX2VuZ2luZShl bmdpbmUsIGRldl9wcml2LCBpZCkgewo+PiArICAgICAgICAgICAgICAgdTMyIGN1cnJlbnRfc2Vx bm8gPSBpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSk7Cj4+ICsgICAgICAgICAgICAgICB1 MzIgbGFzdF9zZXFubyA9IGludGVsX2VuZ2luZV9sYXN0X3N1Ym1pdChlbmdpbmUpOwo+PiArICAg ICAgICAgICAgICAgdTMyIGVuYWJsZSA9IGVuZ2luZS0+cG11LmVuYWJsZTsKPj4gKwo+PiArICAg ICAgICAgICAgICAgaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKGN1cnJlbnRfc2Vxbm8sIGxhc3Rfc2Vx bm8pKQo+PiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4gKwo+PiArICAgICAg ICAgICAgICAgaWYgKChlbmFibGUgJiBCSVQoSTkxNV9TQU1QTEVfUVVFVUVEKSkgJiYKPj4gKyAg ICAgICAgICAgICAgICAgICAobGFzdF9zZXFubyAtIDEgPiBjdXJyZW50X3NlcW5vKSkKPiAKPiBI bW0sIHRoaXMgaXNuJ3QgcXVldWVkLiBUaGlzIGlzIG1vcmUgdGhhbiBvbmUgcnEgc3VibWl0dGVk IHRvIGh3LgoKWWVzLCB0aGF0J3Mgd2hhdCBJIHRob3VnaHQgd2Ugd2FudCBmcm9tIHRoZSBQTVUg cGVyc3BlY3RpdmUuIE1heWJlIApyZW5hbWUgdG8gcnVubmFibGUgaWYgcXVldWVkIGlzIG5vdCB0 aGUgY2xlYXJlc3Q/Cgo+IAo+IERvIHlvdSB3YW50IHRvdGFsIGluZmxpZ2h0IChpbmNsdWRpbmcg d2FpdGluZy1mb3ItZmVuY2VzKT8gVGhhdCB3b3VsZCBiZQo+IGVuZ2luZS0+dGltZWxpbmUtPmlu ZmxpZ2h0X3NlcW5vcyAoYWRkaXRpb25hbCBwcm9ibGVtIGluIGl0cyBsYXppbmVzcykuCj4gCj4g SGFyZCB0byBkaXN0aW5ndWlzaCBhbGwgb3RoZXIgY2FzZXMsIGJ1dCBsYXN0IC0gY3VycmVudCBp cyBzdXNjZXB0aWJsZQo+IHRvIG5vdCB0cmVhdGluZyBhbGwgcmVhZHkgcmVxdWVzdHMgYXMgYmVp bmcgcXVldWVkLiAKCkhtIGhvdz8KCj5BbmQgbWlzY291bnRzIG9uCj4gbGVnYWN5IGFjcm9zcyBz ZW1hcGhvcmVzICh3aGljaCB5b3UndmUgZXhjbHVkZWQgZm9yIGV4ZWNsaXN0cykuCj4gCj4gQWl1 aSB5b3Ugd2FudAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9yZXF1ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMKPiBp bmRleCA0ZWIxYTc2NzMxYjIuLjE5YjhiMzFhZmJiYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9yZXF1ZXN0LmMKPiBAQCAtNDc3LDYgKzQ3Nyw3IEBAIHZvaWQgX19pOTE1X2dl bV9yZXF1ZXN0X3N1Ym1pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCj4g ICAgICAgICAgZW5naW5lLT5lbWl0X2JyZWFkY3J1bWIocmVxdWVzdCwKPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yaW5nLT52YWRkciArIHJlcXVlc3QtPnBvc3Rm aXgpOwo+ICAgCj4gKyAgICAgICBhdG9taWNfZGVjKCZyZXF1ZXN0LT5lbmdpbmUtPnF1ZXVlZCk7 Cj4gICAgICAgICAgc3Bpbl9sb2NrKCZyZXF1ZXN0LT50aW1lbGluZS0+bG9jayk7Cj4gICAgICAg ICAgbGlzdF9tb3ZlX3RhaWwoJnJlcXVlc3QtPmxpbmssICZ0aW1lbGluZS0+cmVxdWVzdHMpOwo+ ICAgICAgICAgIHNwaW5fdW5sb2NrKCZyZXF1ZXN0LT50aW1lbGluZS0+bG9jayk7Cj4gQEAgLTUy NSw2ICs1MjYsNyBAQCB2b2lkIF9faTkxNV9nZW1fcmVxdWVzdF91bnN1Ym1pdChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCj4gICAgICAgICAgc3Bpbl9sb2NrKCZ0aW1lbGlu ZS0+bG9jayk7Cj4gICAgICAgICAgbGlzdF9tb3ZlKCZyZXF1ZXN0LT5saW5rLCAmdGltZWxpbmUt PnJlcXVlc3RzKTsKPiAgICAgICAgICBzcGluX3VubG9jaygmdGltZWxpbmUtPmxvY2spOwo+ICsg ICAgICAgYXRvbWljX2luYygmcmVxdWVzdC0+ZW5naW5lLT5xdWV1ZWQpOwo+ICAgCj4gICAgICAg ICAgLyogV2UgZG9uJ3QgbmVlZCB0byB3YWtlX3VwIGFueSB3YWl0ZXJzIG9uIHJlcXVlc3QtPmV4 ZWN1dGUsIHRoZXkKPiAgICAgICAgICAgKiB3aWxsIGdldCB3b2tlbiBieSBhbnkgb3RoZXIgZXZl bnQgb3IgdXMgcmUtYWRkaW5nIHRoaXMgcmVxdWVzdAo+IEBAIC01NTYsNiArNTU4LDcgQEAgc3Vi bWl0X25vdGlmeShzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UsIGVudW0gaTkxNV9zd19mZW5j ZV9ub3RpZnkgc3RhdGUpCj4gICAgICAgICAgc3dpdGNoIChzdGF0ZSkgewo+ICAgICAgICAgIGNh c2UgRkVOQ0VfQ09NUExFVEU6Cj4gICAgICAgICAgICAgICAgICB0cmFjZV9pOTE1X2dlbV9yZXF1 ZXN0X3N1Ym1pdChyZXF1ZXN0KTsKPiArICAgICAgICAgICAgICAgYXRvbWljX2luYygmcmVxdWVz dC0+ZW5naW5lLT5xdWV1ZWQpOwo+ICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+ZW5naW5lLT5z dWJtaXRfcmVxdWVzdChyZXF1ZXN0KTsKCk9yIGhhdmUgdGhlIGNvdW50ZXIgbm9ybWFsIHVuc2ln bmVkIGludCB1bmRlciB0aGUgZW5naW5lIHRpbWVsaW5lIGxvY2ssIAptb3ZpbmcgaW50byB0aGUg ZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0IGV0Yz8KCj4gICAgICAgICAgICAgICAgICBicmVhazsK PiAgIAo+IAo+IFRoYXQgZXhjbHVkZXMgdGhlIHJlcXVlc3RzIGFjdHVhbGx5IGluIHRoZSBodyBx dWV1ZSwganVzdCB0aG9zZSBpbiB0aGUgc3cKPiBxdWV1ZS4gT3IgYm90aC4KClRoaXMgbG9va3Mg Z29vZCB0byBtZSwgSSB3YXMganVzdCByZWx1Y3RhbnQgdG8gc3VnZ2VzdCBuZXcgc29mdHdhcmUg CnRyYWNraW5nLiBIYXBweSB0byBnbyB3aXRoIHRoaXMgYW5kIHRvIHNldCB0aGUgbWV0cmljIG1l YW5pbmcgdG8gdGhpcz8KCgo+PiArICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUtPnBtdS5z YW1wbGVbSTkxNV9TQU1QTEVfUVVFVUVEXSArPSBQRVJJT0Q7Cj4+ICsKPj4gKyAgICAgICAgICAg ICAgIGlmIChlbmFibGUgJiBCSVQoSTkxNV9TQU1QTEVfQlVTWSkpIHsKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgdTMyIHZhbDsKPj4gKwo+PiArICAgICAgICAgICAgICAgICAgICAgICBmdyA9 IGdyYWJfZm9yY2V3YWtlKGRldl9wcml2LCBmdyk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAg IHZhbCA9IEk5MTVfUkVBRF9GVyhSSU5HX01JX01PREUoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodmFsICYgTU9ERV9JRExFKSkKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVf QlVTWV0gKz0gUEVSSU9EOwo+PiArICAgICAgICAgICAgICAgfQo+PiArCj4+ICsgICAgICAgICAg ICAgICBpZiAoZW5hYmxlICYgKEJJVChJOTE1X1NBTVBMRV9XQUlUKSB8IEJJVChJOTE1X1NBTVBM RV9TRU1BKSkpIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZhbDsKPj4gKwo+PiAr ICAgICAgICAgICAgICAgICAgICAgICBmdyA9IGdyYWJfZm9yY2V3YWtlKGRldl9wcml2LCBmdyk7 Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IEk5MTVfUkVBRF9GVyhSSU5HX0NUTChl bmdpbmUtPm1taW9fYmFzZSkpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGVuYWJs ZSAmIEJJVChJOTE1X1NBTVBMRV9XQUlUKSkgJiYKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICh2YWwgJiBSSU5HX1dBSVQpKQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9XQUlUXSArPSBQRVJJT0Q7Cj4+ICsgICAg ICAgICAgICAgICAgICAgICAgIGlmICgoZW5hYmxlICYgQklUKEk5MTVfU0FNUExFX1NFTUEpKSAm Jgo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbCAmIFJJTkdfV0FJVF9TRU1BUEhP UkUpKQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS0+cG11LnNhbXBs ZVtJOTE1X1NBTVBMRV9TRU1BXSArPSBQRVJJT0Q7Cj4+ICsgICAgICAgICAgICAgICB9Cj4+ICsg ICAgICAgfQo+PiArCj4+ICsgICAgICAgaWYgKGZ3KQo+PiArICAgICAgICAgICAgICAgaW50ZWxf dW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwo+PiArICAgICAg IGludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgZnJlcXVlbmN5X3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ ICt7Cj4+ICsgICAgICAgaWYgKGRldl9wcml2LT5wbXUuZW5hYmxlICYKPj4gKyAgICAgICAgICAg Y29uZmlnX2VuYWJsZWRfbWFzayhJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZKSkgewo+PiArICAg ICAgICAgICAgICAgdTY0IHZhbDsKPj4gKwo+PiArICAgICAgICAgICAgICAgdmFsID0gZGV2X3By aXYtPnJwcy5jdXJfZnJlcTsKPj4gKyAgICAgICAgICAgICAgIGlmIChkZXZfcHJpdi0+Z3QuYXdh a2UgJiYKPj4gKyAgICAgICAgICAgICAgICAgICBpbnRlbF9ydW50aW1lX3BtX2dldF9pZl9pbl91 c2UoZGV2X3ByaXYpKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGludGVsX2dl dF9jYWdmKGRldl9wcml2LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJOTE1X1JFQURfTk9UUkFDRShHRU42X1JQU1RBVDEpKTsKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwo+PiArICAgICAgICAg ICAgICAgfQo+PiArICAgICAgICAgICAgICAgdmFsID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYs IHZhbCk7Cj4+ICsgICAgICAgICAgICAgICBkZXZfcHJpdi0+cG11LnNhbXBsZVtfX0k5MTVfU0FN UExFX0ZSRVFfQUNUXSArPSB2YWwgKiBQRVJJT0Q7Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAg ICAgaWYgKGRldl9wcml2LT5wbXUuZW5hYmxlICYKPj4gKyAgICAgICAgICAgY29uZmlnX2VuYWJs ZWRfbWFzayhJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZKSkgewo+PiArICAgICAgICAgICAg ICAgdTY0IHZhbCA9IGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBkZXZfcHJpdi0+cnBzLmN1cl9m cmVxKTsKPj4gKwo+PiArICAgICAgICAgICAgICAgZGV2X3ByaXYtPnBtdS5zYW1wbGVbX19JOTE1 X1NBTVBMRV9GUkVRX1JFUV0gKz0gdmFsICogUEVSSU9EOwo+PiArICAgICAgIH0KPiAKPiBPay4g RG8gd2UgbmVlZCBhIGNvbW1lbnQgdG8gZXhwbGFpbiB0aGUgaW1wb3J0YW5jZSBvZiBhdmVyYWdp bmcgaGVyZT8KPiBTaG91bGQgd2UgYmUgZG9pbmcgdHJhcGV6aXVtIGludGVncmF0aW9uPwoKQWZ0 ZXIgcmVhZGluZyB1cCBvbiBpdCwgZG8geW91IG1lYW4gaW5jcmVhc2luZyB0aGUgYWNjdXJhY3kg Ynkgc29tZXRoaW5nIApsaWtlIHNhbXBsZVtdICs9IHZhbCAqIFBFUklPRCArICgodmFsICogUEVS SU9EIC0gc2FtcGxlW10pICogUEVSSU9EIC8gMikgPwoKSSBhbSBub3Qgc3VyZSBpZiBpdCBtYWtl cyBzZW5zZSBoZXJlIHNpbmNlIG91ciBmcmVxIGNoYW5nZXMgYXJlIG11Y2ggCnNsb3dlciBhbmQg bGVzcyBncmFudWxhciB0aGFuIHRoZSBzYW1wbGluZyBwZXJpb2QuCgpCdXQgaXQgc291bmRzIGxp a2UgYSBnb29kIGlkZWEgZm9yIG90aGVyIHNhbXBsZXJzLCBubz8gVGhleSBhcmUgCnBvdGVudGlh bGx5IG11Y2ggbW9yZSBncmFudWxhciB0aGFuIHRoZSBzYW1wbGluZyBwZXJpb2QuCgo+IAo+PiAr fQo+PiArCj4+ICtzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaTkxNV9zYW1wbGUoc3RydWN0 IGhydGltZXIgKmhydGltZXIpCj4+ICt7Cj4+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPQo+PiArICAgICAgICAgICAgICAgY29udGFpbmVyX29mKGhydGltZXIsIHN0cnVj dCBkcm1faTkxNV9wcml2YXRlLCBwbXUudGltZXIpOwo+PiArCj4+ICsgICAgICAgaWYgKGk5MTUt PnBtdS5lbmFibGUgPT0gMCkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiBIUlRJTUVSX05PUkVT VEFSVDsKPj4gKwo+PiArICAgICAgIGVuZ2luZXNfc2FtcGxlKGk5MTUpOwo+PiArICAgICAgIGZy ZXF1ZW5jeV9zYW1wbGUoaTkxNSk7Cj4+ICsKPj4gKyAgICAgICBocnRpbWVyX2ZvcndhcmRfbm93 KGhydGltZXIsIG5zX3RvX2t0aW1lKFBFUklPRCkpOwo+PiArICAgICAgIHJldHVybiBIUlRJTUVS X1JFU1RBUlQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1NjQgY291bnRfaW50ZXJydXB0cyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPj4gK3sKPj4gKyAgICAgICAvKiBvcGVuLWNvZGVk IGtzdGF0X2lycXMoKSAqLwo+PiArICAgICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90 b19kZXNjKGk5MTUtPmRybS5wZGV2LT5pcnEpOwo+PiArICAgICAgIHU2NCBzdW0gPSAwOwo+PiAr ICAgICAgIGludCBjcHU7Cj4+ICsKPj4gKyAgICAgICBpZiAoIWRlc2MgfHwgIWRlc2MtPmtzdGF0 X2lycXMpCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4gKwo+PiArICAgICAgIGZvcl9l YWNoX3Bvc3NpYmxlX2NwdShjcHUpCj4+ICsgICAgICAgICAgICAgICBzdW0gKz0gKnBlcl9jcHVf cHRyKGRlc2MtPmtzdGF0X2lycXMsIGNwdSk7Cj4+ICsKPj4gKyAgICAgICByZXR1cm4gc3VtOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9kZXN0cm95KHN0cnVjdCBw ZXJmX2V2ZW50ICpldmVudCkKPj4gK3sKPj4gKyAgICAgICBXQVJOX09OKGV2ZW50LT5wYXJlbnQp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGVuZ2luZV9ldmVudF9pbml0KHN0cnVjdCBwZXJm X2V2ZW50ICpldmVudCkKPj4gK3sKPj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9Cj4+ICsgICAgICAgICAgICAgICBjb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9m KCppOTE1KSwgcG11LmJhc2UpOwo+PiArCj4+ICsgICAgICAgaWYgKCFpbnRlbF9lbmdpbmVfbG9v a3VwX3VzZXIoaTkxNSwgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKSkK Pj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwo+PiArCj4+ICsgICAgICAgc3dpdGNo IChlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KSkgewo+PiArICAgICAgIGNhc2UgSTkxNV9TQU1Q TEVfUVVFVUVEOgo+PiArICAgICAgIGNhc2UgSTkxNV9TQU1QTEVfQlVTWToKPj4gKyAgICAgICBj YXNlIEk5MTVfU0FNUExFX1dBSVQ6Cj4+ICsgICAgICAgICAgICAgICBicmVhazsKPj4gKyAgICAg ICBjYXNlIEk5MTVfU0FNUExFX1NFTUE6Cj4+ICsgICAgICAgICAgICAgICBpZiAoSU5URUxfR0VO KGk5MTUpIDwgNikKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4+ ICsgICAgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICBkZWZhdWx0Ogo+PiArICAgICAgICAg ICAgICAgcmV0dXJuIC1FTk9FTlQ7Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRfaW5pdChzdHJ1Y3Qg cGVyZl9ldmVudCAqZXZlbnQpCj4+ICt7Cj4+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPQo+PiArICAgICAgICAgICAgICAgY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5 cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKPj4gKyAgICAgICBpbnQgY3B1LCByZXQ7Cj4+ICsKPj4g KyAgICAgICBpZiAoZXZlbnQtPmF0dHIudHlwZSAhPSBldmVudC0+cG11LT50eXBlKQo+PiArICAg ICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Cj4+ICsKPj4gKyAgICAgICAvKiB1bnN1cHBvcnRl ZCBtb2RlcyBhbmQgZmlsdGVycyAqLwo+PiArICAgICAgIGlmIChldmVudC0+YXR0ci5zYW1wbGVf cGVyaW9kKSAvKiBubyBzYW1wbGluZyAqLwo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7Cj4+ICsKPj4gKyAgICAgICBpZiAoaGFzX2JyYW5jaF9zdGFjayhldmVudCkpCj4+ICsgICAg ICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Cj4+ICsKPj4gKyAgICAgICBpZiAoZXZlbnQt PmNwdSA8IDApCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArICAg ICAgIGNwdSA9IGNwdW1hc2tfYW55X2FuZCgmaTkxNV9wbXVfY3B1bWFzaywKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKGV2ZW50LT5jcHUp KTsKPj4gKyAgICAgICBpZiAoY3B1ID49IG5yX2NwdV9pZHMpCj4+ICsgICAgICAgICAgICAgICBy ZXR1cm4gLUVOT0RFVjsKPj4gKwo+PiArICAgICAgIGlmIChpc19lbmdpbmVfZXZlbnQoZXZlbnQp KSB7Cj4+ICsgICAgICAgICAgICAgICByZXQgPSBlbmdpbmVfZXZlbnRfaW5pdChldmVudCk7Cj4+ ICsgICAgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgICAgICAgIHJldCA9IDA7Cj4+ICsgICAgICAg ICAgICAgICBzd2l0Y2ggKGV2ZW50LT5hdHRyLmNvbmZpZykgewo+PiArICAgICAgICAgICAgICAg Y2FzZSBJOTE1X1BNVV9JTlRFUlJVUFRTOgo+PiArICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKPj4gKyAgICAgICAgICAgICAgIGNhc2UgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWToKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hF UlJZVklFVyhpOTE1KSkKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVx dWlyZXMgYSBtdXRleCBmb3Igc2FtcGxpbmchICovCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0ID0gLUVOT0RFVjsKPj4gKyAgICAgICAgICAgICAgIGNhc2UgSTkxNV9QTVVf UkVRVUVTVEVEX0ZSRVFVRU5DWToKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKElOVEVM X0dFTihpOTE1KSA8IDYpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g LUVOT0RFVjsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgICAgICAg ICAgICBjYXNlIEk5MTVfUE1VX1JDNl9SRVNJREVOQ1k6Cj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIGlmICghSEFTX1JDNihpOTE1KSkKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXQgPSAtRU5PREVWOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4gKyAg ICAgICAgICAgICAgIGNhc2UgSTkxNV9QTVVfUkM2cF9SRVNJREVOQ1k6Cj4+ICsgICAgICAgICAg ICAgICBjYXNlIEk5MTVfUE1VX1JDNnBwX1JFU0lERU5DWToKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCFIQVNfUkM2cChpOTE1KSkKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXQgPSAtRU5PREVWOwo+IAo+IE11c3QgaW50cm9kdWNlZCB5b3UgdG8gbXkgSEFTX1JD NnBwKCkgcGF0Y2guCgpDYW4gSSBoYXZlIGEgcmVtaW5kZXIgcGxlYXNlPyBZb3UgaGF2ZSBhIHBh dGNoIHdoaWNoIGFkZHMgaXQ/IEkgdGhvdWdodCAKZnJvbSB0aGUgY29kZSB0aGF0IHdoZXJlIHdl IGhhdmUgUkM2cCB3ZSBhbHNvIGhhdmUgUkM2cHAsIHdyb25nPwoKPiAKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgICAgICAgICAgICBkZWZhdWx0Ogo+PiArICAgICAg ICAgICAgICAgICAgICAgICByZXQgPSAtRU5PRU5UOwo+PiArICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICB9Cj4+ICsgICAgICAgaWYg KHJldCkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ICsKPj4gKyAgICAgICBldmVu dC0+Y3B1ID0gY3B1Owo+PiArICAgICAgIGlmICghZXZlbnQtPnBhcmVudCkKPj4gKyAgICAgICAg ICAgICAgIGV2ZW50LT5kZXN0cm95ID0gaTkxNV9wbXVfZXZlbnRfZGVzdHJveTsKPj4gKwo+PiAr ICAgICAgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdTY0IF9faTkxNV9wbXVfZXZl bnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4+ICt7Cj4+ICsgICAgICAgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQo+PiArICAgICAgICAgICAgICAgY29udGFpbmVyX29m KGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKPj4gKyAgICAgICB1NjQgdmFs ID0gMDsKPj4gKwo+PiArICAgICAgIGlmIChpc19lbmdpbmVfZXZlbnQoZXZlbnQpKSB7Cj4+ICsg ICAgICAgICAgICAgICB1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KTsKPj4g KyAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPj4gKwo+PiAr ICAgICAgICAgICAgICAgZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5l X2V2ZW50X2NsYXNzKGV2ZW50KSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKTsKPj4gKwo+PiAr ICAgICAgICAgICAgICAgaWYgKFdBUk5fT05fT05DRSghZW5naW5lKSkgewo+PiArICAgICAgICAg ICAgICAgICAgICAgICAvKiBEbyBub3RoaW5nICovCj4+ICsgICAgICAgICAgICAgICB9IGVsc2Ug ewo+PiArICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBlbmdpbmUtPnBtdS5zYW1wbGVbc2Ft cGxlXTsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICB9IGVsc2Ugewo+PiArICAgICAg ICAgICAgICAgc3dpdGNoIChldmVudC0+YXR0ci5jb25maWcpIHsKPj4gKyAgICAgICAgICAgICAg IGNhc2UgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWToKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgdmFsID0gaTkxNS0+cG11LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfQUNUXTsKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgICAgICAgICAgICBjYXNlIEk5MTVf UE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1k6Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9 IGk5MTUtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX1JFUV07Cj4+ICsgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICAgICAgICAgY2FzZSBJOTE1X1BNVV9JTlRF UlJVUFRTOgo+PiArICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBjb3VudF9pbnRlcnJ1cHRz KGk5MTUpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICAgICAg ICAgIGNhc2UgSTkxNV9QTVVfUkM2X1JFU0lERU5DWToKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAg IHZhbCA9IGludGVsX3JjNl9yZXNpZGVuY3lfbnMoaTkxNSwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19WQUxMRVlWSUVXKGk5MTUpID8K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW TFZfR1RfUkVOREVSX1JDNiA6Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR0VONl9HVF9HRlhfUkM2KTsKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSk7Cj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwo+PiArICAgICAgICAgICAgICAgY2FzZSBJOTE1X1BNVV9SQzZwX1JFU0lERU5D WToKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7 Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGludGVsX3JjNl9yZXNpZGVuY3lfbnMo aTkxNSwgR0VONl9HVF9HRlhfUkM2cCk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGludGVs X3J1bnRpbWVfcG1fcHV0KGk5MTUpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK Pj4gKyAgICAgICAgICAgICAgIGNhc2UgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZOgo+PiArICAg ICAgICAgICAgICAgICAgICAgICBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgdmFsID0gaW50ZWxfcmM2X3Jlc2lkZW5jeV9ucyhpOTE1LCBHRU42 X0dUX0dGWF9SQzZwcCk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGludGVsX3J1bnRpbWVf cG1fcHV0KGk5MTUpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4gKyAgICAg ICAgICAgICAgIH0KPj4gKyAgICAgICB9Cj4gCj4gT2suCj4gCj4+ICsKPj4gKyAgICAgICByZXR1 cm4gdmFsOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9yZWFkKHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4gK3sKPj4gKyAgICAgICBzdHJ1Y3QgaHdfcGVyZl9l dmVudCAqaHdjID0gJmV2ZW50LT5odzsKPj4gKyAgICAgICB1NjQgcHJldiwgbmV3Owo+PiArCj4+ ICthZ2FpbjoKPj4gKyAgICAgICBwcmV2ID0gbG9jYWw2NF9yZWFkKCZod2MtPnByZXZfY291bnQp Owo+PiArICAgICAgIG5ldyA9IF9faTkxNV9wbXVfZXZlbnRfcmVhZChldmVudCk7Cj4+ICsKPj4g KyAgICAgICBpZiAobG9jYWw2NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXYsIG5ldykg IT0gcHJldikKPj4gKyAgICAgICAgICAgICAgIGdvdG8gYWdhaW47Cj4+ICsKPj4gKyAgICAgICBs b2NhbDY0X2FkZChuZXcgLSBwcmV2LCAmZXZlbnQtPmNvdW50KTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHZvaWQgaTkxNV9wbXVfZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4gK3sK Pj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9Cj4+ICsgICAgICAgICAg ICAgICBjb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOwo+ PiArICAgICAgIHVuc2lnbmVkIGludCBiaXQgPSBldmVudF9lbmFibGVkX2JpdChldmVudCk7Cj4+ ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4gKwo+PiArICAgICAgIHNwaW5fbG9ja19p cnFzYXZlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOwo+PiArCj4+ICsgICAgICAgLyoKPj4gKyAg ICAgICAgKiBTdGFydCB0aGUgc2FtcGxpbmcgdGltZXIgd2hlbiBlbmFibGluZyB0aGUgZmlyc3Qg ZXZlbnQuCj4+ICsgICAgICAgICovCj4+ICsgICAgICAgaWYgKGk5MTUtPnBtdS5lbmFibGUgPT0g MCkKPj4gKyAgICAgICAgICAgICAgIGhydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmk5MTUtPnBtdS50 aW1lciwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNfdG9fa3Rp bWUoUEVSSU9EKSwgMCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SFJUSU1FUl9NT0RFX1JFTF9QSU5ORUQpOwo+PiArCj4+ICsgICAgICAgLyoKPj4gKyAgICAgICAg KiBVcGRhdGUgdGhlIGJpdG1hc2sgb2YgZW5hYmxlZCBldmVudHMgYW5kIGluY3JlbWVudAo+PiAr ICAgICAgICAqIHRoZSBldmVudCByZWZlcmVuY2UgY291bnRlci4KPj4gKyAgICAgICAgKi8KPj4g KyAgICAgICBHRU1fQlVHX09OKGJpdCA+PSBJOTE1X1BNVV9NQVNLX0JJVFMpOwo+PiArICAgICAg IEdFTV9CVUdfT04oaTkxNS0+cG11LmVuYWJsZV9jb3VudFtiaXRdID09IH4wKTsKPj4gKyAgICAg ICBpOTE1LT5wbXUuZW5hYmxlIHw9IEJJVF9VTEwoYml0KTsKPj4gKyAgICAgICBpOTE1LT5wbXUu ZW5hYmxlX2NvdW50W2JpdF0rKzsKPj4gKwo+PiArICAgICAgIC8qCj4+ICsgICAgICAgICogRm9y IHBlci1lbmdpbmUgZXZlbnRzIHRoZSBiaXRtYXNrIGFuZCByZWZlcmVuY2UgY291bnRpbmcKPj4g KyAgICAgICAgKiBpcyBzdG9yZWQgcGVyIGVuZ2luZS4KPj4gKyAgICAgICAgKi8KPj4gKyAgICAg ICBpZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgewo+PiArICAgICAgICAgICAgICAgdTggc2Ft cGxlID0gZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCk7Cj4+ICsgICAgICAgICAgICAgICBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIGVuZ2lu ZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCks Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5n aW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7Cj4+ICsgICAgICAgICAgICAgICBHRU1fQlVHX09O KCFlbmdpbmUpOwo+PiArICAgICAgICAgICAgICAgZW5naW5lLT5wbXUuZW5hYmxlIHw9IEJJVChz YW1wbGUpOwo+PiArCj4+ICsgICAgICAgICAgICAgICBHRU1fQlVHX09OKHNhbXBsZSA+PSBJOTE1 X1BNVV9TQU1QTEVfQklUUyk7Cj4+ICsgICAgICAgICAgICAgICBHRU1fQlVHX09OKGVuZ2luZS0+ cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdID09IH4wKTsKPj4gKyAgICAgICAgICAgICAgIGVuZ2lu ZS0+cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdKys7Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAg ICAgLyoKPj4gKyAgICAgICAgKiBTdG9yZSB0aGUgY3VycmVudCBjb3VudGVyIHZhbHVlIHNvIHdl IGNhbiByZXBvcnQgdGhlIGNvcnJlY3QgZGVsdGEKPj4gKyAgICAgICAgKiBmb3IgYWxsIGxpc3Rl bmVycy4gRXZlbiB3aGVuIHRoZSBldmVudCB3YXMgYWxyZWFkeSBlbmFibGVkIGFuZCBoYXMKPj4g KyAgICAgICAgKiBhbiBleGlzdGluZyBub24temVybyB2YWx1ZS4KPj4gKyAgICAgICAgKi8KPj4g KyAgICAgICBsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIF9faTkxNV9wbXVfZXZl bnRfcmVhZChldmVudCkpOwo+PiArCj4+ICsgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm aTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgaTkxNV9w bXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4+ICt7Cj4+ICsgICAgICAgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQo+PiArICAgICAgICAgICAgICAgY29udGFpbmVy X29mKGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKPj4gKyAgICAgICB1bnNp Z25lZCBpbnQgYml0ID0gZXZlbnRfZW5hYmxlZF9iaXQoZXZlbnQpOwo+PiArICAgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7Cj4+ICsKPj4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaTkxNS0+ cG11LmxvY2ssIGZsYWdzKTsKPj4gKwo+PiArICAgICAgIGlmIChpc19lbmdpbmVfZXZlbnQoZXZl bnQpKSB7Cj4+ICsgICAgICAgICAgICAgICB1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxl KGV2ZW50KTsKPj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZTsKPj4gKwo+PiArICAgICAgICAgICAgICAgZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91 c2VyKGk5MTUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQp KTsKPj4gKyAgICAgICAgICAgICAgIEdFTV9CVUdfT04oIWVuZ2luZSk7Cj4+ICsgICAgICAgICAg ICAgICBHRU1fQlVHX09OKHNhbXBsZSA+PSBJOTE1X1BNVV9TQU1QTEVfQklUUyk7Cj4+ICsgICAg ICAgICAgICAgICBHRU1fQlVHX09OKGVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdID09 IDApOwo+PiArICAgICAgICAgICAgICAgLyoKPj4gKyAgICAgICAgICAgICAgICAqIERlY3JlbWVu dCB0aGUgcmVmZXJlbmNlIGNvdW50IGFuZCBjbGVhciB0aGUgZW5hYmxlZAo+PiArICAgICAgICAg ICAgICAgICogYml0bWFzayB3aGVuIHRoZSBsYXN0IGxpc3RlbmVyIG9uIGFuIGV2ZW50IGdvZXMg YXdheS4KPj4gKyAgICAgICAgICAgICAgICAqLwo+PiArICAgICAgICAgICAgICAgaWYgKC0tZW5n aW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0gPT0gMCkKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgZW5naW5lLT5wbXUuZW5hYmxlICY9IH5CSVQoc2FtcGxlKTsKPj4gKyAgICAgICB9Cj4+ ICsKPj4gKyAgICAgICBHRU1fQlVHX09OKGJpdCA+PSBJOTE1X1BNVV9NQVNLX0JJVFMpOwo+PiAr ICAgICAgIEdFTV9CVUdfT04oaTkxNS0+cG11LmVuYWJsZV9jb3VudFtiaXRdID09IDApOwo+PiAr ICAgICAgIC8qCj4+ICsgICAgICAgICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgYW5k IGNsZWFyIHRoZSBlbmFibGVkCj4+ICsgICAgICAgICogYml0bWFzayB3aGVuIHRoZSBsYXN0IGxp c3RlbmVyIG9uIGFuIGV2ZW50IGdvZXMgYXdheS4KPj4gKyAgICAgICAgKi8KPj4gKyAgICAgICBp ZiAoLS1pOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0gPT0gMCkKPj4gKyAgICAgICAgICAgICAg IGk5MTUtPnBtdS5lbmFibGUgJj0gfkJJVF9VTEwoYml0KTsKPj4gKwo+PiArICAgICAgIHNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7Cj4gCj4gT2suCj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3N0YXJ0KHN0cnVjdCBwZXJmX2V2 ZW50ICpldmVudCwgaW50IGZsYWdzKQo+PiArewo+PiArICAgICAgIGk5MTVfcG11X2VuYWJsZShl dmVudCk7Cj4+ICsgICAgICAgZXZlbnQtPmh3LnN0YXRlID0gMDsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGlu dCBmbGFncykKPj4gK3sKPj4gKyAgICAgICBpZiAoZmxhZ3MgJiBQRVJGX0VGX1VQREFURSkKPj4g KyAgICAgICAgICAgICAgIGk5MTVfcG11X2V2ZW50X3JlYWQoZXZlbnQpOwo+PiArICAgICAgIGk5 MTVfcG11X2Rpc2FibGUoZXZlbnQpOwo+PiArICAgICAgIGV2ZW50LT5ody5zdGF0ZSA9IFBFUkZf SEVTX1NUT1BQRUQ7Cj4gCj4gTmV2ZXIgZGlkIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2VzIGlu IHBlcmYgc3RhcnQvc3RvcCwgZW5hYmxlL2Rpc2FibGUsCj4gYWRkL2RlbCA6KQo+IAo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGk5MTVfcG11X2V2ZW50X2FkZChzdHJ1Y3QgcGVyZl9ldmVudCAq ZXZlbnQsIGludCBmbGFncykKPj4gK3sKPj4gKyAgICAgICBpZiAoZmxhZ3MgJiBQRVJGX0VGX1NU QVJUKQo+PiArICAgICAgICAgICAgICAgaTkxNV9wbXVfZXZlbnRfc3RhcnQoZXZlbnQsIGZsYWdz KTsKPj4gKwo+PiArICAgICAgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBp OTE1X3BtdV9ldmVudF9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4+ ICt7Cj4+ICsgICAgICAgaTkxNV9wbXVfZXZlbnRfc3RvcChldmVudCwgUEVSRl9FRl9VUERBVEUp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGk5MTVfcG11X2V2ZW50X2V2ZW50X2lkeChzdHJ1 Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4+ICt7Cj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBzc2l6ZV90IGk5MTVfcG11X2Zvcm1hdF9zaG93KHN0cnVjdCBkZXZpY2Ug KmRldiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPj4gK3sKPj4gKyAgICAgICBzdHJ1Y3QgZGV2 X2V4dF9hdHRyaWJ1dGUgKmVhdHRyOwo+PiArCj4+ICsgICAgICAgZWF0dHIgPSBjb250YWluZXJf b2YoYXR0ciwgc3RydWN0IGRldl9leHRfYXR0cmlidXRlLCBhdHRyKTsKPj4gKyAgICAgICByZXR1 cm4gc3ByaW50ZihidWYsICIlc1xuIiwgKGNoYXIgKillYXR0ci0+dmFyKTsKPj4gK30KPj4gKwo+ PiArI2RlZmluZSBJOTE1X1BNVV9GT1JNQVRfQVRUUihfbmFtZSwgX2NvbmZpZykgXAo+PiArICAg ICAgICgmKChzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGVbXSkgeyBcCj4+ICsgICAgICAgICAgICAg ICB7IC5hdHRyID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBpOTE1X3BtdV9mb3JtYXRfc2hvdywgTlVM TCksIFwKPj4gKyAgICAgICAgICAgICAgICAgLnZhciA9ICh2b2lkICopX2NvbmZpZywgfSBcCj4+ ICsgICAgICAgfSlbMF0uYXR0ci5hdHRyKQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0 ZSAqaTkxNV9wbXVfZm9ybWF0X2F0dHJzW10gPSB7Cj4+ICsgICAgICAgSTkxNV9QTVVfRk9STUFU X0FUVFIoaTkxNV9ldmVudGlkLCAiY29uZmlnOjAtNDIiKSwKPj4gKyAgICAgICBOVUxMLAo+PiAr fTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVf Zm9ybWF0X2F0dHJfZ3JvdXAgPSB7Cj4+ICsgICAgICAgLm5hbWUgPSAiZm9ybWF0IiwKPj4gKyAg ICAgICAuYXR0cnMgPSBpOTE1X3BtdV9mb3JtYXRfYXR0cnMsCj4+ICt9Owo+PiArCj4+ICtzdGF0 aWMgc3NpemVfdCBpOTE1X3BtdV9ldmVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAq YXR0ciwgY2hhciAqYnVmKQo+PiArewo+PiArICAgICAgIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0 ZSAqZWF0dHI7Cj4+ICsKPj4gKyAgICAgICBlYXR0ciA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1 Y3QgZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIpOwo+PiArICAgICAgIHJldHVybiBzcHJpbnRmKGJ1 ZiwgImNvbmZpZz0weCVseFxuIiwgKHVuc2lnbmVkIGxvbmcpZWF0dHItPnZhcik7Cj4+ICt9Cj4+ ICsKPj4gKyNkZWZpbmUgSTkxNV9FVkVOVF9BVFRSKF9uYW1lLCBfY29uZmlnKSBcCj4+ICsgICAg ICAgKCYoKHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZVtdKSB7IFwKPj4gKyAgICAgICAgICAgICAg IHsgLmF0dHIgPSBfX0FUVFIoX25hbWUsIDA0NDQsIGk5MTVfcG11X2V2ZW50X3Nob3csIE5VTEwp LCBcCj4+ICsgICAgICAgICAgICAgICAgIC52YXIgPSAodm9pZCAqKV9jb25maWcsIH0gXAo+PiAr ICAgICAgIH0pWzBdLmF0dHIuYXR0cikKPj4gKwo+PiArI2RlZmluZSBJOTE1X0VWRU5UX1NUUihf bmFtZSwgX3N0cikgXAo+PiArICAgICAgICgmKChzdHJ1Y3QgcGVyZl9wbXVfZXZlbnRzX2F0dHJb XSkgeyBcCj4+ICsgICAgICAgICAgICAgICB7IC5hdHRyICAgICAgPSBfX0FUVFIoX25hbWUsIDA0 NDQsIHBlcmZfZXZlbnRfc3lzZnNfc2hvdywgTlVMTCksIFwKPj4gKyAgICAgICAgICAgICAgICAg LmlkICAgICAgICA9IDAsIFwKPj4gKyAgICAgICAgICAgICAgICAgLmV2ZW50X3N0ciA9IF9zdHIs IH0gXAo+PiArICAgICAgIH0pWzBdLmF0dHIuYXR0cikKPj4gKwo+PiArI2RlZmluZSBJOTE1X0VW RU5UKF9uYW1lLCBfY29uZmlnLCBfdW5pdCkgXAo+PiArICAgICAgIEk5MTVfRVZFTlRfQVRUUihf bmFtZSwgX2NvbmZpZyksIFwKPj4gKyAgICAgICBJOTE1X0VWRU5UX1NUUihfbmFtZS51bml0LCBf dW5pdCkKPj4gKwo+PiArI2RlZmluZSBJOTE1X0VOR0lORV9FVkVOVChfbmFtZSwgX2NsYXNzLCBf aW5zdGFuY2UsIF9zYW1wbGUpIFwKPj4gKyAgICAgICBJOTE1X0VWRU5UX0FUVFIoX25hbWUsIF9f STkxNV9QTVVfRU5HSU5FKF9jbGFzcywgX2luc3RhbmNlLCBfc2FtcGxlKSksIFwKPj4gKyAgICAg ICBJOTE1X0VWRU5UX1NUUihfbmFtZS51bml0LCAibnMiKQo+PiArCj4+ICsjZGVmaW5lIEk5MTVf RU5HSU5FX0VWRU5UUyhfbmFtZSwgX2NsYXNzLCBfaW5zdGFuY2UpIFwKPj4gKyAgICAgICBJOTE1 X0VOR0lORV9FVkVOVChfbmFtZSMjX2luc3RhbmNlLXF1ZXVlZCwgX2NsYXNzLCBfaW5zdGFuY2Us IEk5MTVfU0FNUExFX1FVRVVFRCksIFwKPj4gKyAgICAgICBJOTE1X0VOR0lORV9FVkVOVChfbmFt ZSMjX2luc3RhbmNlLWJ1c3ksIF9jbGFzcywgX2luc3RhbmNlLCBJOTE1X1NBTVBMRV9CVVNZKSwg XAo+PiArICAgICAgIEk5MTVfRU5HSU5FX0VWRU5UKF9uYW1lIyNfaW5zdGFuY2Utc2VtYSwgX2Ns YXNzLCBfaW5zdGFuY2UsIEk5MTVfU0FNUExFX1NFTUEpLCBcCj4+ICsgICAgICAgSTkxNV9FTkdJ TkVfRVZFTlQoX25hbWUjI19pbnN0YW5jZS13YWl0LCBfY2xhc3MsIF9pbnN0YW5jZSwgSTkxNV9T QU1QTEVfV0FJVCkKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmk5MTVfcG11X2V2 ZW50c19hdHRyc1tdID0gewo+PiArICAgICAgIEk5MTVfRU5HSU5FX0VWRU5UUyhyY3MsIEk5MTVf RU5HSU5FX0NMQVNTX1JFTkRFUiwgMCksCj4+ICsgICAgICAgSTkxNV9FTkdJTkVfRVZFTlRTKGJj cywgSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSwgMCksCj4+ICsgICAgICAgSTkxNV9FTkdJTkVfRVZF TlRTKHZjcywgSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDApLAo+PiArICAgICAgIEk5MTVfRU5H SU5FX0VWRU5UUyh2Y3MsIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAxKSwKPj4gKyAgICAgICBJ OTE1X0VOR0lORV9FVkVOVFModmVjcywgSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRSwg MCksCj4gCj4gUGxlYXNlIGFkZCBhIGNyb3NzcmVmIHRvIGludGVsX2VuZ2luZV9jcyB0byByZW1p bmQgb3Vyc2VsdmVzIHRvIGFkZCB0aGUKPiBleHRyYSBwZXJmIGNvdW50ZXJzIGlmIHdlIGFkZCBh IG5ldyBlbmdpbmUuCgpPbiBteSB3aGlzaGxpc3QgSSBoYXZlIGFuIGl0ZW0gdG8gaW5pdGFsaXpl IHRoaXMgYXJyYXkgKG1vcmUgb3IgbGVzcykgCmZyb20gdGhlIGZvcl9lYWNoX2VuZ2luZSBsb29w LiBCdXQgYSBjb21tZW50IHdpbGwgZG8gZm9yIG5vdy4gOikKCj4gCj4+ICsKPj4gKyAgICAgICBJ OTE1X0VWRU5UKGFjdHVhbC1mcmVxdWVuY3ksICAgIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1ks ICAgICJIeiIpLAo+PiArICAgICAgIEk5MTVfRVZFTlQocmVxdWVzdGVkLWZyZXF1ZW5jeSwgSTkx NV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWSwgIkh6IiksCj4+ICsKPj4gKyAgICAgICBJOTE1X0VW RU5UX0FUVFIoaW50ZXJydXB0cywgSTkxNV9QTVVfSU5URVJSVVBUUyksCj4+ICsKPj4gKyAgICAg ICBJOTE1X0VWRU5UKHJjNi1yZXNpZGVuY3ksICAgSTkxNV9QTVVfUkM2X1JFU0lERU5DWSwgICAi bnMiKSwKPj4gKyAgICAgICBJOTE1X0VWRU5UKHJjNnAtcmVzaWRlbmN5LCAgSTkxNV9QTVVfUkM2 cF9SRVNJREVOQ1ksICAibnMiKSwKPj4gKyAgICAgICBJOTE1X0VWRU5UKHJjNnBwLXJlc2lkZW5j eSwgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZLCAibnMiKSwKPj4gKwo+PiArICAgICAgIE5VTEws Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1 X3BtdV9ldmVudHNfYXR0cl9ncm91cCA9IHsKPj4gKyAgICAgICAubmFtZSA9ICJldmVudHMiLAo+ PiArICAgICAgIC5hdHRycyA9IGk5MTVfcG11X2V2ZW50c19hdHRycywKPj4gK307Cj4+ICsKPj4g K3N0YXRpYyBzc2l6ZV90Cj4+ICtpOTE1X3BtdV9nZXRfYXR0cl9jcHVtYXNrKHN0cnVjdCBkZXZp Y2UgKmRldiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSAqYXR0ciwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYpCj4+ICt7 Cj4+ICsgICAgICAgcmV0dXJuIGNwdW1hcF9wcmludF90b19wYWdlYnVmKHRydWUsIGJ1ZiwgJmk5 MTVfcG11X2NwdW1hc2spOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgREVWSUNFX0FUVFIoY3B1bWFz aywgMDQ0NCwgaTkxNV9wbXVfZ2V0X2F0dHJfY3B1bWFzaywgTlVMTCk7Cj4+ICsKPj4gK3N0YXRp YyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X2NwdW1hc2tfYXR0cnNbXSA9IHsKPj4gKyAgICAgICAm ZGV2X2F0dHJfY3B1bWFzay5hdHRyLAo+PiArICAgICAgIE5VTEwsCj4+ICt9Owo+PiArCj4+ICtz dGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3BtdV9jcHVtYXNrX2F0dHJfZ3JvdXAg PSB7Cj4+ICsgICAgICAgLmF0dHJzID0gaTkxNV9jcHVtYXNrX2F0dHJzLAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmk5MTVfcG11X2F0dHJfZ3Jv dXBzW10gPSB7Cj4+ICsgICAgICAgJmk5MTVfcG11X2Zvcm1hdF9hdHRyX2dyb3VwLAo+PiArICAg ICAgICZpOTE1X3BtdV9ldmVudHNfYXR0cl9ncm91cCwKPj4gKyAgICAgICAmaTkxNV9wbXVfY3B1 bWFza19hdHRyX2dyb3VwLAo+PiArICAgICAgIE5VTEwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBp bnQgaTkxNV9wbXVfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9k ZSAqbm9kZSkKPj4gK3sKPj4gKyAgICAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0Owo+PiArCj4+ICsg ICAgICAgdGFyZ2V0ID0gY3B1bWFza19hbnlfYW5kKCZpOTE1X3BtdV9jcHVtYXNrLCAmaTkxNV9w bXVfY3B1bWFzayk7Cj4+ICsgICAgICAgLyogU2VsZWN0IHRoZSBmaXJzdCBvbmxpbmUgQ1BVIGFz IGEgZGVzaWduYXRlZCByZWFkZXIuICovCj4+ICsgICAgICAgaWYgKHRhcmdldCA+PSBucl9jcHVf aWRzKQo+PiArICAgICAgICAgICAgICAgY3B1bWFza19zZXRfY3B1KGNwdSwgJmk5MTVfcG11X2Nw dW1hc2spOwo+PiArCj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgaTkxNV9wbXVfY3B1X29mZmxpbmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25v ZGUgKm5vZGUpCj4+ICt7Cj4+ICsgICAgICAgc3RydWN0IGk5MTVfcG11ICpwbXUgPSBobGlzdF9l bnRyeV9zYWZlKG5vZGUsIHR5cGVvZigqcG11KSwgbm9kZSk7Cj4+ICsgICAgICAgdW5zaWduZWQg aW50IHRhcmdldDsKPj4gKwo+PiArICAgICAgIGlmIChjcHVtYXNrX3Rlc3RfYW5kX2NsZWFyX2Nw dShjcHUsICZpOTE1X3BtdV9jcHVtYXNrKSkgewo+PiArICAgICAgICAgICAgICAgdGFyZ2V0ID0g Y3B1bWFza19hbnlfYnV0KHRvcG9sb2d5X3NpYmxpbmdfY3B1bWFzayhjcHUpLCBjcHUpOwo+PiAr ICAgICAgICAgICAgICAgLyogTWlncmF0ZSBldmVudHMgaWYgdGhlcmUgaXMgYSB2YWxpZCB0YXJn ZXQgKi8KPj4gKyAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPCBucl9jcHVfaWRzKSB7Cj4+ICsg ICAgICAgICAgICAgICAgICAgICAgIGNwdW1hc2tfc2V0X2NwdSh0YXJnZXQsICZpOTE1X3BtdV9j cHVtYXNrKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcGVyZl9wbXVfbWlncmF0ZV9jb250 ZXh0KCZwbXUtPmJhc2UsIGNwdSwgdGFyZ2V0KTsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKyAg ICAgICB9Cj4+ICsKPj4gKyAgICAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArdm9pZCBpOTE1 X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPj4gK3sKPj4gKyAg ICAgICBpbnQgcmV0Owo+PiArCj4+ICsgICAgICAgaWYgKElOVEVMX0dFTihpOTE1KSA8PSAyKSB7 Cj4+ICsgICAgICAgICAgICAgICBEUk1fSU5GTygiUE1VIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMg R1BVLiIpOwo+PiArICAgICAgICAgICAgICAgcmV0dXJuOwo+PiArICAgICAgIH0KPj4gKwo+PiAr ICAgICAgIHJldCA9IGNwdWhwX3NldHVwX3N0YXRlX211bHRpKENQVUhQX0FQX1BFUkZfWDg2X1VO Q09SRV9PTkxJTkUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBl cmYveDg2L2ludGVsL2k5MTU6b25saW5lIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpOTE1X3BtdV9jcHVfb25saW5lLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGk5MTVfcG11X2NwdV9vZmZsaW5lKTsKPj4gKyAgICAgICBpZiAocmV0 KQo+PiArICAgICAgICAgICAgICAgZ290byBlcnJfaHBfc3RhdGU7Cj4+ICsKPj4gKyAgICAgICBy ZXQgPSBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2UoQ1BVSFBfQVBfUEVSRl9YODZfVU5DT1JFX09O TElORSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmk5MTUtPnBt dS5ub2RlKTsKPj4gKyAgICAgICBpZiAocmV0KQo+PiArICAgICAgICAgICAgICAgZ290byBlcnJf aHBfaW5zdGFuY2U7Cj4+ICsKPj4gKyAgICAgICBpOTE1LT5wbXUuYmFzZS5hdHRyX2dyb3VwcyAg ICAgID0gaTkxNV9wbXVfYXR0cl9ncm91cHM7Cj4+ICsgICAgICAgaTkxNS0+cG11LmJhc2UudGFz a19jdHhfbnIgICAgICA9IHBlcmZfaW52YWxpZF9jb250ZXh0Owo+PiArICAgICAgIGk5MTUtPnBt dS5iYXNlLmV2ZW50X2luaXQgICAgICAgPSBpOTE1X3BtdV9ldmVudF9pbml0Owo+PiArICAgICAg IGk5MTUtPnBtdS5iYXNlLmFkZCAgICAgICAgICAgICAgPSBpOTE1X3BtdV9ldmVudF9hZGQ7Cj4+ ICsgICAgICAgaTkxNS0+cG11LmJhc2UuZGVsICAgICAgICAgICAgICA9IGk5MTVfcG11X2V2ZW50 X2RlbDsKPj4gKyAgICAgICBpOTE1LT5wbXUuYmFzZS5zdGFydCAgICAgICAgICAgID0gaTkxNV9w bXVfZXZlbnRfc3RhcnQ7Cj4+ICsgICAgICAgaTkxNS0+cG11LmJhc2Uuc3RvcCAgICAgICAgICAg ICA9IGk5MTVfcG11X2V2ZW50X3N0b3A7Cj4+ICsgICAgICAgaTkxNS0+cG11LmJhc2UucmVhZCAg ICAgICAgICAgICA9IGk5MTVfcG11X2V2ZW50X3JlYWQ7Cj4+ICsgICAgICAgaTkxNS0+cG11LmJh c2UuZXZlbnRfaWR4ICAgICAgICA9IGk5MTVfcG11X2V2ZW50X2V2ZW50X2lkeDsKPj4gKwo+PiAr ICAgICAgIHNwaW5fbG9ja19pbml0KCZpOTE1LT5wbXUubG9jayk7Cj4+ICsgICAgICAgaHJ0aW1l cl9pbml0KCZpOTE1LT5wbXUudGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JF TCk7Cj4+ICsgICAgICAgaTkxNS0+cG11LnRpbWVyLmZ1bmN0aW9uID0gaTkxNV9zYW1wbGU7Cj4+ ICsgICAgICAgaTkxNS0+cG11LmVuYWJsZSA9IDA7Cj4+ICsKPj4gKyAgICAgICByZXQgPSBwZXJm X3BtdV9yZWdpc3RlcigmaTkxNS0+cG11LmJhc2UsICJpOTE1IiwgLTEpOwo+PiArICAgICAgIGlm IChyZXQgPT0gMCkKPj4gKyAgICAgICAgICAgICAgIHJldHVybjsKPj4gKwo+PiArICAgICAgIGk5 MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQgPSBOVUxMOwo+PiArCj4+ICsgICAgICAgV0FSTl9PTihj cHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfQVBfUEVSRl9YODZfVU5DT1JFX09OTElO RSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaTkxNS0+ cG11Lm5vZGUpKTsKPj4gKwo+PiArZXJyX2hwX2luc3RhbmNlOgo+PiArICAgICAgIGNwdWhwX3Jl bW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9BUF9QRVJGX1g4Nl9VTkNPUkVfT05MSU5FKTsKPj4gKwo+ PiArZXJyX2hwX3N0YXRlOgo+PiArICAgICAgIERSTV9OT1RFKCJGYWlsZWQgdG8gcmVnaXN0ZXIg UE1VISAoZXJyPSVkKVxuIiwgcmV0KTsKPiAKPiBGYWlyIGVub3VnaCwgbm90IGZhdGFsLCB0aGUg ZHJpdmVyIHdpbGwgY29udGludWU7IGp1c3Qgc29tZSB1c2VyCj4gZnVuY3Rpb25hbGl0eSB3aWxs IGJlIGxvc3QuIE5vIGRhdGEgbG9zcyBvciBhbnl0aGluZyBlbHNlIG1lcml0aW5nIGEKPiB3YXJu aW5nLgo+IAo+PiArfQo+PiArCj4+ICt2b2lkIGk5MTVfcG11X3VucmVnaXN0ZXIoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4+ICt7Cj4+ICsgICAgICAgaWYgKCFpOTE1LT5wbXUuYmFz ZS5ldmVudF9pbml0KQo+PiArICAgICAgICAgICAgICAgcmV0dXJuOwo+PiArCj4+ICsgICAgICAg V0FSTl9PTihjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfQVBfUEVSRl9YODZfVU5D T1JFX09OTElORSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmaTkxNS0+cG11Lm5vZGUpKTsKPj4gKyAgICAgICBjcHVocF9yZW1vdmVfbXVsdGlfc3RhdGUo Q1BVSFBfQVBfUEVSRl9YODZfVU5DT1JFX09OTElORSk7Cj4+ICsKPj4gKyAgICAgICBpOTE1LT5w bXUuZW5hYmxlID0gMDsKPj4gKwo+PiArICAgICAgIGhydGltZXJfY2FuY2VsKCZpOTE1LT5wbXUu dGltZXIpOwo+PiArCj4+ICsgICAgICAgcGVyZl9wbXVfdW5yZWdpc3RlcigmaTkxNS0+cG11LmJh c2UpOwo+PiArICAgICAgIGk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQgPSBOVUxMOwo+PiArfQo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4gaW5kZXggODJmMzZkZDBjZDk0Li4xNmUzNmIyZWVm ODcgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+PiBAQCAtMTg2LDYgKzE4Niw5IEBA IHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X21taW9fcmVnX3ZhbGlkKGk5MTVfcmVnX3QgcmVnKQo+ PiAgICNkZWZpbmUgVklERU9fRU5IQU5DRU1FTlRfQ0xBU1MgICAgICAgIDIKPj4gICAjZGVmaW5l IENPUFlfRU5HSU5FX0NMQVNTICAgICAgMwo+PiAgICNkZWZpbmUgT1RIRVJfQ0xBU1MgICAgICAg ICAgICA0Cj4+ICsjZGVmaW5lIE1BWF9FTkdJTkVfQ0xBU1MgICAgICAgNAo+PiArCj4+ICsjZGVm aW5lIE1BWF9FTkdJTkVfSU5TVEFOQ0UgICAgMQo+PiAgIAo+PiAgIC8qIFBDSSBjb25maWcgc3Bh Y2UgKi8KPj4gICAKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Vu Z2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKPj4gaW5k ZXggYTI4ZTJhODY0Y2YxLi4zNWMxMTdjM2ZhMGQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2VuZ2luZV9jcy5jCj4+IEBAIC0yMDAsNiArMjAwLDE1IEBAIGludGVsX2VuZ2luZV9z ZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICAgICAgICAgIEdFTV9C VUdfT04oaW5mby0+Y2xhc3MgPj0gQVJSQVlfU0laRShpbnRlbF9lbmdpbmVfY2xhc3NlcykpOwo+ PiAgICAgICAgICBjbGFzc19pbmZvID0gJmludGVsX2VuZ2luZV9jbGFzc2VzW2luZm8tPmNsYXNz XTsKPj4gICAKPj4gKyAgICAgICBpZiAoR0VNX1dBUk5fT04oaW5mby0+Y2xhc3MgPiBNQVhfRU5H SU5FX0NMQVNTKSkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsg ICAgICAgaWYgKEdFTV9XQVJOX09OKGluZm8tPmluc3RhbmNlID4gTUFYX0VOR0lORV9JTlNUQU5D RSkpCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArICAgICAgIGlm IChHRU1fV0FSTl9PTihkZXZfcHJpdi0+ZW5naW5lX2NsYXNzW2luZm8tPmNsYXNzXVtpbmZvLT5p bnN0YW5jZV0pKQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gICAg ICAgICAgR0VNX0JVR19PTihkZXZfcHJpdi0+ZW5naW5lW2lkXSk7Cj4+ICAgICAgICAgIGVuZ2lu ZSA9IGt6YWxsb2Moc2l6ZW9mKCplbmdpbmUpLCBHRlBfS0VSTkVMKTsKPj4gICAgICAgICAgaWYg KCFlbmdpbmUpCj4+IEBAIC0yMjcsNiArMjM2LDcgQEAgaW50ZWxfZW5naW5lX3NldHVwKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gICAKPj4gICAgICAgICAgQVRPTUlDX0lO SVRfTk9USUZJRVJfSEVBRCgmZW5naW5lLT5jb250ZXh0X3N0YXR1c19ub3RpZmllcik7Cj4+ICAg Cj4+ICsgICAgICAgZGV2X3ByaXYtPmVuZ2luZV9jbGFzc1tpbmZvLT5jbGFzc11baW5mby0+aW5z dGFuY2VdID0gZW5naW5lOwo+PiAgICAgICAgICBkZXZfcHJpdi0+ZW5naW5lW2lkXSA9IGVuZ2lu ZTsKPj4gICAgICAgICAgcmV0dXJuIDA7Cj4+ICAgfQo+PiBAQCAtMTU3OCw2ICsxNTg4LDMxIEBA IGJvb2wgaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4+ICAgICAgICAgIH0KPj4gICB9Cj4+ICAgCj4+ICtzdGF0aWMgdTggdXNlcl9j bGFzc19tYXBbSTkxNV9FTkdJTkVfQ0xBU1NfTUFYXSA9IHsKPj4gKyAgICAgICBbSTkxNV9FTkdJ TkVfQ0xBU1NfT1RIRVJdID0gT1RIRVJfQ0xBU1MsCj4+ICsgICAgICAgW0k5MTVfRU5HSU5FX0NM QVNTX1JFTkRFUl0gPSBSRU5ERVJfQ0xBU1MsCj4+ICsgICAgICAgW0k5MTVfRU5HSU5FX0NMQVNT X0NPUFldID0gQ09QWV9FTkdJTkVfQ0xBU1MsCj4+ICsgICAgICAgW0k5MTVfRU5HSU5FX0NMQVNT X1ZJREVPXSA9IFZJREVPX0RFQ09ERV9DTEFTUywKPj4gKyAgICAgICBbSTkxNV9FTkdJTkVfQ0xB U1NfVklERU9fRU5IQU5DRV0gPSBWSURFT19FTkhBTkNFTUVOVF9DTEFTUywKPj4gK307Cj4+ICsK Pj4gK3N0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgo+PiAraW50ZWxfZW5naW5lX2xvb2t1cF91c2Vy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1OCBjbGFzcywgdTggaW5zdGFuY2UpCj4+ ICt7Cj4+ICsgICAgICAgaWYgKGNsYXNzID49IEFSUkFZX1NJWkUodXNlcl9jbGFzc19tYXApKQo+ PiArICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4+ICsKPj4gKyAgICAgICBjbGFzcyA9IHVz ZXJfY2xhc3NfbWFwW2NsYXNzXTsKPj4gKwo+PiArICAgICAgIGlmIChXQVJOX09OX09OQ0UoY2xh c3MgPiBNQVhfRU5HSU5FX0NMQVNTKSkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ PiArCj4+ICsgICAgICAgaWYgKGluc3RhbmNlID4gTUFYX0VOR0lORV9JTlNUQU5DRSkKPj4gKyAg ICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+PiArCj4+ICsgICAgICAgcmV0dXJuIGk5MTUtPmVu Z2luZV9jbGFzc1tjbGFzc11baW5zdGFuY2VdOwo+PiArfQo+PiArCj4+ICAgI2lmIElTX0VOQUJM RUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQo+PiAgICNpbmNsdWRlICJzZWxmdGVzdHMvbW9j a19lbmdpbmUuYyIKPj4gICAjZW5kaWYKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jpbmdi dWZmZXIuaAo+PiBpbmRleCA1NmQ3YWU5ZjI5OGIuLjdhOTAxZTc2NmQwMyAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+PiBAQCAtMzMwLDYgKzMzMCwyOCBA QCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsKPj4gICAgICAgICAgICAgICAgICBJOTE1X1NFTEZU RVNUX0RFQ0xBUkUoYm9vbCBtb2NrIDogMSk7Cj4+ICAgICAgICAgIH0gYnJlYWRjcnVtYnM7Cj4+ ICAgCj4+ICsgICAgICAgc3RydWN0IHsKPj4gKyAgICAgICAgICAgICAgIC8qKgo+PiArICAgICAg ICAgICAgICAgICogQGVuYWJsZTogQml0bWFzayBvZiBlbmFibGUgc2FtcGxlIGV2ZW50cyBvbiB0 aGlzIGVuZ2luZS4KPj4gKyAgICAgICAgICAgICAgICAqCj4+ICsgICAgICAgICAgICAgICAgKiBC aXRzIGNvcnJlc3BvbmQgdG8gc2FtcGxlIGV2ZW50IHR5cGVzLCBmb3IgaW5zdGFuY2UKPj4gKyAg ICAgICAgICAgICAgICAqIEk5MTVfU0FNUExFX1FVRVVFRCBpcyBiaXQgMCBldGMuCj4+ICsgICAg ICAgICAgICAgICAgKi8KPj4gKyAgICAgICAgICAgICAgIHUzMiBlbmFibGU7Cj4+ICsgICAgICAg ICAgICAgICAvKioKPj4gKyAgICAgICAgICAgICAgICAqIEBlbmFibGVfY291bnQ6IFJlZmVyZW5j ZSBjb3VudCBmb3IgdGhlIGVuYWJsZWQgc2FtcGxlcnMuCj4+ICsgICAgICAgICAgICAgICAgKgo+ PiArICAgICAgICAgICAgICAgICogSW5kZXggbnVtYmVyIGNvcnJlc3BvbmRzIHRvIHRoZSBiaXQg bnVtYmVyIGZyb20gQGVuYWJsZS4KPj4gKyAgICAgICAgICAgICAgICAqLwo+PiArICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGVuYWJsZV9jb3VudFtJOTE1X1BNVV9TQU1QTEVfQklUU107Cj4+ ICsgICAgICAgICAgICAgICAvKioKPj4gKyAgICAgICAgICAgICAgICAqIEBzYW1wbGU6IENvdW50 ZXIgdmFsdWUgZm9yIHNhbXBsaW5nIGV2ZW50cy4KPj4gKyAgICAgICAgICAgICAgICAqCj4+ICsg ICAgICAgICAgICAgICAgKiBPdXIgaW50ZXJuYWwgdGltZXIgc3RvcmVzIHRoZSBjdXJyZW50IGNv dW50ZXIgaW4gdGhpcyBmaWVsZC4KPj4gKyAgICAgICAgICAgICAgICAqLwo+PiArICAgICAgICAg ICAgICAgdTY0IHNhbXBsZVtJOTE1X0VOR0lORV9TQU1QTEVfTUFYXTsKPj4gKyAgICAgICB9IHBt dTsKPj4gKwo+PiAgICAgICAgICAvKgo+PiAgICAgICAgICAgKiBBIHBvb2wgb2Ygb2JqZWN0cyB0 byB1c2UgYXMgc2hhZG93IGNvcGllcyBvZiBjbGllbnQgYmF0Y2ggYnVmZmVycwo+PiAgICAgICAg ICAgKiB3aGVuIHRoZSBjb21tYW5kIHBhcnNlciBpcyBlbmFibGVkLiBQcmV2ZW50cyB0aGUgY2xp ZW50IGZyb20KPj4gQEAgLTgzNCw0ICs4NTYsNyBAQCB2b2lkIGludGVsX2VuZ2luZXNfcmVzZXRf ZGVmYXVsdF9zdWJtaXNzaW9uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPj4gICAK Pj4gICBib29sIGludGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKTsKPj4gICAKPj4gK3N0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgo+PiAraW50 ZWxfZW5naW5lX2xvb2t1cF91c2VyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1OCBj bGFzcywgdTggaW5zdGFuY2UpOwo+PiArCj4+ICAgI2VuZGlmIC8qIF9JTlRFTF9SSU5HQlVGRkVS X0hfICovCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNs dWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKPj4gaW5kZXggZmUyNWEwMWM4MWYyLi42ODJhYmFmZWNj OGMgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+PiArKysgYi9p bmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKPj4gQEAgLTg2LDYgKzg2LDYzIEBAIGVudW0gaTkx NV9tb2NzX3RhYmxlX2luZGV4IHsKPj4gICAgICAgICAgSTkxNV9NT0NTX0NBQ0hFRCwKPj4gICB9 Owo+IAo+IEhtbSwgaG93IGFib3V0IHVhcGkvZHJtL2k5MTVfcGVyZi5oPyAoT3IgaTkxNV9wbXUu aCkKPiBXZSBhcmUgbm90IGFkZGluZyB0cmFkaXRpb25hbCBkcm0taW9jdGwgZnVuY3Rpb25hbGl0 eSAoZXhjZXB0IGZvciBzb21lCj4gY29tbW9uIGVudW1zKS4gQnV0IEkgZ3Vlc3MgaXQgaXMgbm90 IGh1Z2UsIHNvIG5vIGJpZyBjb25jZXJuLiBKdXN0Cj4gdGhpbmtpbmcgdGhhdCB3ZSBlc3NlbnRp YWxseSBjb3B5IHRoaXMgaW50byBpZ3QsIHNvIHdlIHNob3VsZCByZWFsbHkKPiBtYWtlIGl0IGEg Y29weSEKCk5vIG9iamVjdGlvbnMgZnJvbSBtZS4gRGVmaW5pdGVseSB3YW50IGl0PwoKPiAKPj4g K2VudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9jbGFzcyB7Cj4+ICsgICAgICAgSTkxNV9FTkdJTkVf Q0xBU1NfT1RIRVIgPSAwLAo+PiArICAgICAgIEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiA9IDEs Cj4+ICsgICAgICAgSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSA9IDIsCj4+ICsgICAgICAgSTkxNV9F TkdJTkVfQ0xBU1NfVklERU8gPSAzLAo+PiArICAgICAgIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVP X0VOSEFOQ0UgPSA0LAo+PiArICAgICAgIEk5MTVfRU5HSU5FX0NMQVNTX01BWCAvKiBub24tQUJJ ICovCj4+ICt9Owo+PiArCj4+ICsvKioKPj4gKyAqIERPQzogcGVyZl9ldmVudHMgZXhwb3NlZCBi eSBpOTE1IHRocm91Z2ggL3N5cy9idXMvZXZlbnRfc291cmNlcy9kcml2ZXJzL2k5MTUKPj4gKyAq Cj4+ICsgKi8KPj4gKwo+PiArZW51bSBkcm1faTkxNV9wbXVfZW5naW5lX3NhbXBsZSB7Cj4+ICsg ICAgICAgSTkxNV9TQU1QTEVfUVVFVUVEID0gMCwKPj4gKyAgICAgICBJOTE1X1NBTVBMRV9CVVNZ ID0gMSwKPj4gKyAgICAgICBJOTE1X1NBTVBMRV9XQUlUID0gMiwKPj4gKyAgICAgICBJOTE1X1NB TVBMRV9TRU1BID0gMywKPj4gKyAgICAgICBJOTE1X0VOR0lORV9TQU1QTEVfTUFYIC8qIG5vbi1B QkkgKi8KPj4gK307Cj4+ICsKPj4gKyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX0JJVFMgKDQpCj4+ ICsjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9NQVNLICgweGYpCj4+ICsjZGVmaW5lIEk5MTVfUE1V X1NBTVBMRV9JTlNUQU5DRV9CSVRTICg4KQo+PiArI2RlZmluZSBJOTE1X1BNVV9DTEFTU19TSElG VCBcCj4+ICsgICAgICAgKEk5MTVfUE1VX1NBTVBMRV9CSVRTICsgSTkxNV9QTVVfU0FNUExFX0lO U1RBTkNFX0JJVFMpCj4+ICsKPj4gKyNkZWZpbmUgX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGlu c3RhbmNlLCBzYW1wbGUpIFwKPj4gKyAgICAgICAoKGNsYXNzKSA8PCBJOTE1X1BNVV9DTEFTU19T SElGVCB8IFwKPj4gKyAgICAgICAoaW5zdGFuY2UpIDw8IEk5MTVfUE1VX1NBTVBMRV9CSVRTIHwg XAo+PiArICAgICAgIChzYW1wbGUpKQo+PiArCj4+ICsjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9R VUVVRUQoY2xhc3MsIGluc3RhbmNlKSBcCj4+ICsgICAgICAgX19JOTE1X1BNVV9FTkdJTkUoY2xh c3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9RVUVVRUQpCj4+ICsKPj4gKyNkZWZpbmUgSTkxNV9Q TVVfRU5HSU5FX0JVU1koY2xhc3MsIGluc3RhbmNlKSBcCj4+ICsgICAgICAgX19JOTE1X1BNVV9F TkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9CVVNZKQo+PiArCj4+ICsjZGVmaW5l IEk5MTVfUE1VX0VOR0lORV9XQUlUKGNsYXNzLCBpbnN0YW5jZSkgXAo+PiArICAgICAgIF9fSTkx NV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1QTEVfV0FJVCkKPj4gKwo+PiAr I2RlZmluZSBJOTE1X1BNVV9FTkdJTkVfU0VNQShjbGFzcywgaW5zdGFuY2UpIFwKPj4gKyAgICAg ICBfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIEk5MTVfU0FNUExFX1NFTUEpCj4+ ICsKPj4gKyNkZWZpbmUgX19JOTE1X1BNVV9PVEhFUih4KSAoX19JOTE1X1BNVV9FTkdJTkUoMHhm ZiwgMHhmZiwgMHhmKSArIDEgKyAoeCkpCj4+ICsKPj4gKyNkZWZpbmUgSTkxNV9QTVVfQUNUVUFM X0ZSRVFVRU5DWSAgICAgIF9fSTkxNV9QTVVfT1RIRVIoMCkKPj4gKyNkZWZpbmUgSTkxNV9QTVVf UkVRVUVTVEVEX0ZSRVFVRU5DWSAgIF9fSTkxNV9QTVVfT1RIRVIoMSkKPj4gKyNkZWZpbmUgSTkx NV9QTVVfSU5URVJSVVBUUyAgICAgICAgICAgIF9fSTkxNV9QTVVfT1RIRVIoMikKPj4gKwo+PiAr I2RlZmluZSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZICAgICAgICAgX19JOTE1X1BNVV9PVEhFUigz KQo+PiArI2RlZmluZSBJOTE1X1BNVV9SQzZwX1JFU0lERU5DWSAgICAgICAgICAgICAgICBfX0k5 MTVfUE1VX09USEVSKDQpCj4+ICsjZGVmaW5lIEk5MTVfUE1VX1JDNnBwX1JFU0lERU5DWSAgICAg ICBfX0k5MTVfUE1VX09USEVSKDUpCj4+ICsKCldvdWxkIHdlIHdhbnQgdG8gYWRkIHNvbWUgbW9y ZSBjb3VudGVycz8KCkk5MTVfUE1VX0VOR0lORV9QUkVFUE1UIC0gbnVtYmVyIG9mIHByZWVtcHRp b24gZXZlbnRzIG9uIGVuZ2luZQpJOTE1X1BNVV9FTkdJTkVfUkVTQ0hFRFVMRSAtIG51bWJlciBv ZiByZXF1ZXN0cyB3aGljaCBuZWVkZWQgdG8gYmUgbW92ZWQgCmluIHRoZSB0cmVlIGR1ZSBuZXcg cmVxdWVzdCBhcnJpdmluZwoKT3IgbGVhdmUgYWxsIHRoaXMgZm9yIGxhdGVyLCBzaW5jZSB5b3Ug YWxzbyBoYWQgc29tZSBpZGVhcyBvbiB3aGF0IHRvIGFkZC4KClJlZ2FyZHMsCgpUdnJ0a28KX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==