From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: Re: [PATCH v3 4/7] drm/i915/perf: Add OA unit support for Gen 8+ Date: Wed, 12 Apr 2017 12:33:10 +0100 Message-ID: <20170412113310.epalqvmec627lf3n@mwahaha> References: <20170405162320.30094-1-robert@sixbynine.org> <20170405162320.30094-5-robert@sixbynine.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 11D7A6E6D7 for ; Wed, 12 Apr 2017 11:33:14 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id q125so5795303wmd.3 for ; Wed, 12 Apr 2017 04:33:13 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20170405162320.30094-5-robert@sixbynine.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Robert Bragg Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMDQvMDUsIFJvYmVydCBCcmFnZyB3cm90ZToKPiBFbmFibGVzIGFjY2VzcyB0byBPQSB1bml0 IG1ldHJpY3MgZm9yIEJEVywgQ0hWLCBTS0wgYW5kIEJYVCB3aGljaCBhbGwKPiBzaGFyZSAobW9y ZS1vci1sZXNzKSB0aGUgc2FtZSBPQSB1bml0IGRlc2lnbi4KPiAKPiBPZiBwYXJ0aWN1bGFyIG5v dGUgaW4gY29tcGFyaXNvbiB0byBIYXN3ZWxsOiBzb21lIE9BIHVuaXQgSFcgY29uZmlnCj4gc3Rh dGUgaGFzIGJlY29tZSBwZXItY29udGV4dCBzdGF0ZSBhbmQgYXMgYSBjb25zZXF1ZW5jZSBpdCBp cyBzb21ld2hhdAo+IG1vcmUgY29tcGxpY2F0ZWQgdG8gbWFuYWdlIHN5bmNocm9ub3VzIHN0YXRl IGNoYW5nZXMgZnJvbSB0aGUgY3B1IHdoaWxlCj4gdGhlcmUncyBubyBndWFyYW50ZWUgb2Ygd2hh dCBjb250ZXh0IChpZiBhbnkpIGlzIGN1cnJlbnRseSBhY3RpdmVseQo+IHJ1bm5pbmcgb24gdGhl IGdwdS4KPiAKPiBUaGUgcGVyaW9kaWMgc2FtcGxpbmcgZnJlcXVlbmN5IHdoaWNoIGNhbiBiZSBw YXJ0aWN1bGFybHkgdXNlZnVsIGZvcgo+IHN5c3RlbS13aWRlIGFuYWx5c2lzIChhcyBvcHBvc2Vk IHRvIGNvbW1hbmQgc3RyZWFtIHN5bmNocm9uaXNlZAo+IE1JX1JFUE9SVF9QRVJGX0NPVU5UIGNv bW1hbmRzKSBpcyBwZXJoYXBzIHRoZSBtb3N0IHN1cnByaXNpbmcgc3RhdGUgdG8KPiBoYXZlIGJl Y29tZSBwZXItY29udGV4dCBzYXZlIGFuZCByZXN0b3JlZCAod2hpbGUgdGhlIE9BQlVGRkVSCj4g ZGVzdGluYXRpb24gaXMgc3RpbGwgYSBzaGFyZWQsIHN5c3RlbS13aWRlIHJlc291cmNlKS4KPiAK PiBUaGlzIHN1cHBvcnQgZm9yIGdlbjgrIHRha2VzIGNhcmUgdG8gY29uc2lkZXIgYSBudW1iZXIg b2YgdGltaW5nCj4gY2hhbGxlbmdlcyBpbnZvbHZlZCBpbiBzeW5jaHJvbm91c2x5IHVwZGF0aW5n IHBlci1jb250ZXh0IHN0YXRlCj4gcHJpbWFyaWx5IGJ5IHByb2dyYW1taW5nIGFsbCBjb25maWcg c3RhdGUgZnJvbSB0aGUgY3B1IGFuZCB1cGRhdGluZyBhbGwKPiBjdXJyZW50IGFuZCBzYXZlZCBj b250ZXh0cyBzeW5jaHJvbm91c2x5IHdoaWxlIHRoZSBPQSB1bml0IGlzIHN0aWxsCj4gZGlzYWJs ZWQuCj4gCj4gVGhlIGRyaXZlciBpbnRlbnRpb25hbGx5IGF2b2lkcyBkZXBlbmRpbmcgb24gY29t bWFuZCBzdHJlYW1lcgo+IHByb2dyYW1taW5nIHRvIHVwZGF0ZSBPQSBzdGF0ZSBjb25zaWRlcmlu ZyB0aGUgbGFjayBvZiBzeW5jaHJvbml6YXRpb24KPiBiZXR3ZWVuIHRoZSBhdXRvbWF0aWMgbG9h ZGluZyBvZiBPQUNUWENPTlRST0wgc3RhdGUgKHRoYXQgaW5jbHVkZXMgdGhlCj4gcGVyaW9kaWMg c2FtcGxpbmcgc3RhdGUgYW5kIGVuYWJsZSBzdGF0ZSkgb24gY29udGV4dCByZXN0b3JlIGFuZCB0 aGUKPiBwYXJzaW5nIG9mIGFueSBnZW5lcmFsIHB1cnBvc2UgQkIgdGhlIGRyaXZlciBjYW4gY29u dHJvbC4gSS5lLiB0aGlzCj4gaW1wbGVtZW50YXRpb24gaXMgY2FyZWZ1bCB0byBhdm9pZCB0aGUg cG9zc2liaWxpdHkgb2YgYSBjb250ZXh0IHJlc3RvcmUKPiB0ZW1wb3JhcmlseSBlbmFibGluZyBh bnkgb3V0LW9mLWRhdGUgcGVyaW9kaWMgc2FtcGxpbmcgc3RhdGUuIEluCj4gYWRkaXRpb24gdG8g dGhlIHJpc2sgb2YgdHJhbnNpZW50bHktb3V0LW9mLWRhdGUgc3RhdGUgYmVpbmcgbG9hZGVkCj4g YXV0b21hdGljYWxseTsgdGhlcmUgYXJlIGFsc28gaW50ZXJuYWwgSFcgbGF0ZW5jaWVzIGludm9s dmVkIGluIHRoZQo+IGxvYWRpbmcgb2YgTVVYIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHdvdWxkIGJl IGRpZmZpY3VsdCB0byBhY2NvdW50IGZvcgo+IGZyb20gdGhlIGNvbW1hbmQgc3RyZWFtZXIgKGFu ZCB3ZSBvbmx5IHdhbnQgdG8gZW5hYmxlIHRoZSB1bml0IHdoZW4gb25jZQo+IHRoZSBNVVggY29u ZmlndXJhdGlvbiBpcyBjb21wbGV0ZSkuCj4gCj4gU2luY2UgdGhlIEdlbjgrIE9BIHVuaXQgZGVz aWduIG5vIGxvbmdlciBzdXBwb3J0cyBjbG9jayBnYXRpbmcgdGhlIHVuaXQKPiBvZmYgZm9yIGEg c2luZ2xlIGdpdmVuIGNvbnRleHQgKHdoaWNoIGVmZmVjdGl2ZWx5IHN0b3BwZWQgYW55IHByb2dy ZXNzCj4gb2YgY291bnRlcnMgd2hpbGUgYW55IG90aGVyIGNvbnRleHQgd2FzIHJ1bm5pbmcpIGFu ZCBpbnN0ZWFkIHN1cHBvcnRzCj4gdGFnZ2luZyBPQSByZXBvcnRzIHdpdGggYSBjb250ZXh0IElE IGZvciBmaWx0ZXJpbmcgb24gdGhlIENQVSwgaXQgbWVhbnMKPiB3ZSBjYW4gbm8gbG9uZ2VyIGhp ZGUgdGhlIHN5c3RlbS13aWRlIHByb2dyZXNzIG9mIGNvdW50ZXJzIGZyb20gYQo+IG5vbi1wcml2 aWxlZ2VkIGFwcGxpY2F0aW9uIG9ubHkgaW50ZXJlc3RlZCBpbiBtZXRyaWNzIGZvciBpdHMgb3du Cj4gY29udGV4dC4gQWx0aG91Z2ggd2UgY291bGQgdGhlb3JldGljYWxseSB0cnkgYW5kIHN1YnRy YWN0IHRoZSBwcm9ncmVzcwo+IG9mIG90aGVyIGNvbnRleHRzIGJlZm9yZSBmb3J3YXJkaW5nIHJl cG9ydHMgdmlhIHJlYWQoKSB3ZSBhcmVuJ3QgaW4gYQo+IHBvc2l0aW9uIHRvIGZpbHRlciByZXBv cnRzIGNhcHR1cmVkIHZpYSBNSV9SRVBPUlRfUEVSRl9DT1VOVCBjb21tYW5kcy4KPiBBcyBhIHJl c3VsdCwgZm9yIEdlbjgrLCB3ZSBhbHdheXMgcmVxdWlyZSB0aGUKPiBkZXYuaTkxNS5wZXJmX3N0 cmVhbV9wYXJhbm9pZCB0byBiZSB1bnNldCBmb3IgYW55IGFjY2VzcyB0byBPQSBtZXRyaWNzCj4g aWYgbm90IHJvb3QuCj4gCj4gU2lnbmVkLW9mZi1ieTogUm9iZXJ0IEJyYWdnIDxyb2JlcnRAc2l4 YnluaW5lLm9yZz4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAg ICAgIHwgIDQ1ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaCB8 ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jICAgICAgICB8IDkzOCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oICAgICAgICAgfCAgMjIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuYyAgICAgICAgfCAgIDUgKwo+ICBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAgICAg ICAgICAgfCAgMTkgKy0KPiAgNiBmaWxlcyBjaGFuZ2VkLCA5MzcgaW5zZXJ0aW9ucygrKSwgOTMg ZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggOWMzN2I3M2Fj N2FjLi4zYTIyYjZmZDBlZTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMjA2 Nyw5ICsyMDY3LDE3IEBAIHN0cnVjdCBpOTE1X29hX29wcyB7Cj4gIAl2b2lkICgqaW5pdF9vYV9i dWZmZXIpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIAo+ICAJLyoqCj4g LQkgKiBAZW5hYmxlX21ldHJpY19zZXQ6IEFwcGxpZXMgYW55IE1VWCBjb25maWd1cmF0aW9uIHRv IHNldCB1cCB0aGUKPiAtCSAqIEJvb2xlYW4gYW5kIEN1c3RvbSAoQi9DKSBjb3VudGVycyB0aGF0 IGFyZSBwYXJ0IG9mIHRoZSBjb3VudGVyCj4gLQkgKiByZXBvcnRzIGJlaW5nIHNhbXBsZWQuIE1h eSBhcHBseSBzeXN0ZW0gY29uc3RyYWludHMgc3VjaCBhcwo+ICsJICogQHNlbGVjdF9tZXRyaWNf c2V0OiBUaGUgYXV0byBnZW5lcmF0ZWQgY29kZSB0aGF0IGNoZWNrcyB3aGV0aGVyIGEKPiArCSAq IHJlcXVlc3RlZCBPQSBjb25maWcgaXMgYXBwbGljYWJsZSB0byB0aGUgc3lzdGVtIGFuZCBpZiBz byBzZXRzIHVwCj4gKwkgKiB0aGUgbXV4LCBvYSBhbmQgZmxleCBldSByZWdpc3RlciBjb25maWcg cG9pbnRlcnMgYWNjb3JkaW5nIHRvIHRoZQo+ICsJICogY3VycmVudCBkZXZfcHJpdi0+cGVyZi5v YS5tZXRyaWNzX3NldC4KPiArCSAqLwo+ICsJaW50ICgqc2VsZWN0X21ldHJpY19zZXQpKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gKwo+ICsJLyoqCj4gKwkgKiBAZW5hYmxl X21ldHJpY19zZXQ6IFNlbGVjdHMgYW5kIGFwcGxpZXMgYW55IE1VWCBjb25maWd1cmF0aW9uIHRv IHNldAo+ICsJICogdXAgdGhlIEJvb2xlYW4gYW5kIEN1c3RvbSAoQi9DKSBjb3VudGVycyB0aGF0 IGFyZSBwYXJ0IG9mIHRoZQo+ICsJICogY291bnRlciByZXBvcnRzIGJlaW5nIHNhbXBsZWQuIE1h eSBhcHBseSBzeXN0ZW0gY29uc3RyYWludHMgc3VjaCBhcwo+ICAJICogZGlzYWJsaW5nIEVVIGNs b2NrIGdhdGluZyBhcyByZXF1aXJlZC4KPiAgCSAqLwo+ICAJaW50ICgqZW5hYmxlX21ldHJpY19z ZXQpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gQEAgLTIxMDAsMjAgKzIx MDgsMTMgQEAgc3RydWN0IGk5MTVfb2Ffb3BzIHsKPiAgCQkgICAgc2l6ZV90ICpvZmZzZXQpOwo+ ICAKPiAgCS8qKgo+IC0JICogQG9hX2J1ZmZlcl9jaGVjazogQ2hlY2sgZm9yIE9BIGJ1ZmZlciBk YXRhICsgdXBkYXRlIHRhaWwKPiAtCSAqCj4gLQkgKiBUaGlzIGlzIGVpdGhlciBjYWxsZWQgdmlh IGZvcHMgb3IgdGhlIHBvbGwgY2hlY2sgaHJ0aW1lciAoYXRvbWljCj4gLQkgKiBjdHgpIHdpdGhv dXQgYW55IGxvY2tzIHRha2VuLgo+ICsJICogQG9hX2h3X3RhaWxfcmVhZDogcmVhZCB0aGUgT0Eg dGFpbCBwb2ludGVyIHJlZ2lzdGVyCj4gIAkgKgo+IC0JICogSXQncyBzYWZlIHRvIHJlYWQgT0Eg Y29uZmlnIHN0YXRlIGhlcmUgdW5sb2NrZWQsIGFzc3VtaW5nIHRoYXQgdGhpcwo+IC0JICogaXMg b25seSBjYWxsZWQgd2hpbGUgdGhlIHN0cmVhbSBpcyBlbmFibGVkLCB3aGlsZSB0aGUgZ2xvYmFs IE9BCj4gLQkgKiBjb25maWd1cmF0aW9uIGNhbid0IGJlIG1vZGlmaWVkLgo+IC0JICoKPiAtCSAq IEVmZmljaWVuY3kgaXMgbW9yZSBpbXBvcnRhbnQgdGhhbiBhdm9pZGluZyBzb21lIGZhbHNlIHBv c2l0aXZlcwo+IC0JICogaGVyZSwgd2hpY2ggd2lsbCBiZSBoYW5kbGVkIGdyYWNlZnVsbHkgLSBs aWtlbHkgcmVzdWx0aW5nIGluIGFuCj4gLQkgKiAlRUFHQUlOIGVycm9yIGZvciB1c2Vyc3BhY2Uu Cj4gKwkgKiBJbiBwYXJ0aWN1bGFyIHRoaXMgZW5hYmxlcyB1cyB0byBzaGFyZSBhbGwgdGhlIGZp ZGRseSBjb2RlIGZvcgo+ICsJICogaGFuZGxpbmcgdGhlIE9BIHVuaXQgdGFpbCBwb2ludGVyIHJh Y2UgdGhhdCBhZmZlY3RzIG11bHRpcGxlCj4gKwkgKiBnZW5lcmF0aW9ucy4KPiAgCSAqLwo+IC0J Ym9vbCAoKm9hX2J1ZmZlcl9jaGVjaykoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKPiArCXUzMiAoKm9hX2h3X3RhaWxfcmVhZCkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKPiAgfTsKPiAgCj4gIHN0cnVjdCBpbnRlbF9jZGNsa19zdGF0ZSB7Cj4gQEAgLTI0 NzUsNiArMjQ3Niw3IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPiAgCQkJc3RydWN0IHsK PiAgCQkJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAJCQkJdTggKnZhZGRyOwo+ICsJCQkJdTMy IGxhc3RfY3R4X2lkOwo+ICAJCQkJaW50IGZvcm1hdDsKPiAgCQkJCWludCBmb3JtYXRfc2l6ZTsK PiAgCj4gQEAgLTI1NDQsNiArMjU0NiwxNCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4g IAkJCX0gb2FfYnVmZmVyOwo+ICAKPiAgCQkJdTMyIGdlbjdfbGF0Y2hlZF9vYXN0YXR1czE7Cj4g KwkJCXUzMiBjdHhfb2FjdHhjdHJsX29mZnNldDsKPiArCQkJdTMyIGN0eF9mbGV4ZXUwX29mZnNl dDsKPiArCj4gKwkJCS8qIFRoZSBSUFRfSUQvcmVhc29uIGZpZWxkIGZvciBHZW44KyBpbmNsdWRl cyBhIGJpdAo+ICsJCQkgKiB0byBkZXRlcm1pbmUgaWYgdGhlIENUWCBJRCBpbiB0aGUgcmVwb3J0 IGlzIHZhbGlkCj4gKwkJCSAqIGJ1dCB0aGUgc3BlY2lmaWMgYml0IGRpZmZlcnMgYmV0d2VlbiBH ZW4gOCBhbmQgOQo+ICsJCQkgKi8KPiArCQkJdTMyIGdlbjhfdmFsaWRfY3R4X2JpdDsKPiAgCj4g IAkJCXN0cnVjdCBpOTE1X29hX29wcyBvcHM7Cj4gIAkJCWNvbnN0IHN0cnVjdCBpOTE1X29hX2Zv cm1hdCAqb2FfZm9ybWF0czsKPiBAQCAtMjg1NCw2ICsyODY0LDggQEAgaW50ZWxfaW5mbyhjb25z dCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICNkZWZpbmUgSVNfS0JMX1VM WChkZXZfcHJpdikJKElOVEVMX0RFVklEKGRldl9wcml2KSA9PSAweDU5MEUgfHwgXAo+ICAJCQkJ IElOVEVMX0RFVklEKGRldl9wcml2KSA9PSAweDU5MTUgfHwgXAo+ICAJCQkJIElOVEVMX0RFVklE KGRldl9wcml2KSA9PSAweDU5MUUpCj4gKyNkZWZpbmUgSVNfU0tMX0dUMihkZXZfcHJpdikJKElT X1NLWUxBS0UoZGV2X3ByaXYpICYmIFwKPiArCQkJCSAoSU5URUxfREVWSUQoZGV2X3ByaXYpICYg MHgwMEYwKSA9PSAweDAwMTApCj4gICNkZWZpbmUgSVNfU0tMX0dUMyhkZXZfcHJpdikJKElTX1NL WUxBS0UoZGV2X3ByaXYpICYmIFwKPiAgCQkJCSAoSU5URUxfREVWSUQoZGV2X3ByaXYpICYgMHgw MEYwKSA9PSAweDAwMjApCj4gICNkZWZpbmUgSVNfU0tMX0dUNChkZXZfcHJpdikJKElTX1NLWUxB S0UoZGV2X3ByaXYpICYmIFwKPiBAQCAtMzYwNSw2ICszNjE3LDkgQEAgaTkxNV9nZW1fY29udGV4 dF9sb29rdXBfdGltZWxpbmUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgCj4gIGlu dCBpOTE1X3BlcmZfb3Blbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAo+ICAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlKTsKPiArdm9pZCBpOTE1X29hX3VwZGF0ZV9y ZWdfc3RhdGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkgICAgICBzdHJ1 Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICsJCQkgICAgICB1aW50MzJfdCAqcmVnX3N0YXRl KTsKPiAgCj4gIC8qIGk5MTVfZ2VtX2V2aWN0LmMgKi8KPiAgaW50IF9fbXVzdF9jaGVjayBpOTE1 X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaAo+IGluZGV4IDRhZjJhYjk0NTU4Yi4u M2Y0Y2U3M2JlYTQzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2NvbnRleHQuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQu aAo+IEBAIC0xNTEsNiArMTUxLDcgQEAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgewo+ICAJCXU2 NCBscmNfZGVzYzsKPiAgCQlpbnQgcGluX2NvdW50Owo+ICAJCWJvb2wgaW5pdGlhbGlzZWQ7Cj4g KwkJYXRvbWljX3Qgb2Ffc3RhdGVfZGlydHk7Cj4gIAl9IGVuZ2luZVtJOTE1X05VTV9FTkdJTkVT XTsKPiAgCj4gIAkvKiogcmluZ19zaXplOiBzaXplIGZvciBhbGxvY2F0aW5nIHRoZSBwZXItZW5n aW5lIHJpbmcgYnVmZmVyICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKPiBpbmRleCAzMjc3 YTUyY2U5OGUuLjk4ZWI2NDE1YjYzYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3BlcmYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4g QEAgLTE5Niw2ICsxOTYsMTIgQEAKPiAgCj4gICNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICAjaW5j bHVkZSAiaTkxNV9vYV9oc3cuaCIKPiArI2luY2x1ZGUgImk5MTVfb2FfYmR3LmgiCj4gKyNpbmNs dWRlICJpOTE1X29hX2Nodi5oIgo+ICsjaW5jbHVkZSAiaTkxNV9vYV9za2xndDIuaCIKPiArI2lu Y2x1ZGUgImk5MTVfb2Ffc2tsZ3QzLmgiCj4gKyNpbmNsdWRlICJpOTE1X29hX3NrbGd0NC5oIgo+ ICsjaW5jbHVkZSAiaTkxNV9vYV9ieHQuaCIKPiAgCj4gIC8qIEhXIHJlcXVpcmVzIHRoaXMgdG8g YmUgYSBwb3dlciBvZiB0d28sIGJldHdlZW4gMTI4ayBhbmQgMTZNLCB0aG91Z2ggZHJpdmVyCj4g ICAqIGlzIGN1cnJlbnRseSBnZW5lcmFsbHkgZGVzaWduZWQgYXNzdW1pbmcgdGhlIGxhcmdlc3Qg MTZNIHNpemUgaXMgdXNlZCBzdWNoCj4gQEAgLTIxNSw3ICsyMjEsNyBAQAo+ICAgKgo+ICAgKiBB bHRob3VnaCB0aGlzIGNhbiBiZSBvYnNlcnZlZCBleHBsaWNpdGx5IHdoaWxlIGNvcHlpbmcgcmVw b3J0cyB0byB1c2Vyc3BhY2UKPiAgICogYnkgY2hlY2tpbmcgZm9yIGEgemVyb2VkIHJlcG9ydC1p ZCBmaWVsZCBpbiB0YWlsIHJlcG9ydHMsIHdlIHdhbnQgdG8gYWNjb3VudAo+IC0gKiBmb3IgdGhp cyBlYXJsaWVyLCBhcyBwYXJ0IG9mIHRoZSBfb2FfYnVmZmVyX2NoZWNrIHRvIGF2b2lkIGxvdHMg b2YgcmVkdW5kYW50Cj4gKyAqIGZvciB0aGlzIGVhcmxpZXIsIGFzIHBhcnQgb2YgdGhlIG9hX2J1 ZmZlcl9jaGVjayB0byBhdm9pZCBsb3RzIG9mIHJlZHVuZGFudAo+ICAgKiByZWFkKCkgYXR0ZW1w dHMuCj4gICAqCj4gICAqIEluIGVmZmVjdCB3ZSBkZWZpbmUgYSB0YWlsIHBvaW50ZXIgZm9yIHJl YWRpbmcgdGhhdCBsYWdzIHRoZSByZWFsIHRhaWwKPiBAQCAtMjM3LDcgKzI0Myw3IEBACj4gICAq IGluZGljYXRlcyB0aGF0IGFuIHVwZGF0ZWQgdGFpbCBwb2ludGVyIGlzIG5lZWRlZC4KPiAgICoK PiAgICogTW9zdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhpcyB3b3JrYXJv dW5kIGFyZSBpbgo+IC0gKiBnZW43X29hX2J1ZmZlcl9jaGVja191bmxvY2tlZCgpIGFuZCBnZW43 X2FwcGFuZF9vYV9yZXBvcnRzKCkKPiArICogb2FfYnVmZmVyX2NoZWNrX3VubG9ja2VkKCkgYW5k IF9hcHBlbmRfb2FfcmVwb3J0cygpCj4gICAqCj4gICAqIE5vdGUgZm9yIHBvc3Rlcml0eTogcHJl dmlvdXNseSB0aGUgZHJpdmVyIHVzZWQgdG8gZGVmaW5lIGFuIGVmZmVjdGl2ZSB0YWlsCj4gICAq IHBvaW50ZXIgdGhhdCBsYWdnZWQgdGhlIHJlYWwgcG9pbnRlciBieSBhICd0YWlsIG1hcmdpbicg bWVhc3VyZWQgaW4gYnl0ZXMKPiBAQCAtMjcyLDYgKzI3OCwxMyBAQCBzdGF0aWMgdTMyIGk5MTVf cGVyZl9zdHJlYW1fcGFyYW5vaWQgPSB0cnVlOwo+ICAKPiAgI2RlZmluZSBJTlZBTElEX0NUWF9J RCAweGZmZmZmZmZmCj4gIAo+ICsvKiBPbiBHZW44KyBhdXRvbWF0aWNhbGx5IHRyaWdnZXJlZCBP QSByZXBvcnRzIGluY2x1ZGUgYSAncmVhc29uJyBmaWVsZC4uLiAqLwo+ICsjZGVmaW5lIE9BUkVQ T1JUX1JFQVNPTl9NQVNLICAgICAgICAgICAweDNmCj4gKyNkZWZpbmUgT0FSRVBPUlRfUkVBU09O X1NISUZUICAgICAgICAgIDE5Cj4gKyNkZWZpbmUgT0FSRVBPUlRfUkVBU09OX1RJTUVSICAgICAg ICAgICgxPDwwKQo+ICsjZGVmaW5lIE9BUkVQT1JUX1JFQVNPTl9DVFhfU1dJVENIICAgICAoMTw8 MykKPiArI2RlZmluZSBPQVJFUE9SVF9SRUFTT05fQ0xLX1JBVElPICAgICAgKDE8PDUpCj4gKwo+ ICAKPiAgLyogRm9yIHN5c2N0bCBwcm9jX2RvaW50dmVjX21pbm1heCBvZiBpOTE1X29hX21heF9z YW1wbGVfcmF0ZQo+ICAgKgo+IEBAIC0zMDMsNiArMzE2LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaTkx NV9vYV9mb3JtYXQgaHN3X29hX2Zvcm1hdHNbSTkxNV9PQV9GT1JNQVRfTUFYXSA9IHsKPiAgCVtJ OTE1X09BX0ZPUk1BVF9DNF9COF0JICAgID0geyA3LCA2NCB9LAo+ICB9Owo+ICAKPiArc3RhdGlj IHN0cnVjdCBpOTE1X29hX2Zvcm1hdCBnZW44X3BsdXNfb2FfZm9ybWF0c1tJOTE1X09BX0ZPUk1B VF9NQVhdID0gewo+ICsJW0k5MTVfT0FfRk9STUFUX0ExMl0JCSAgICA9IHsgMCwgNjQgfSwKPiAr CVtJOTE1X09BX0ZPUk1BVF9BMTJfQjhfQzhdCSAgICA9IHsgMiwgMTI4IH0sCj4gKwlbSTkxNV9P QV9GT1JNQVRfQTMydTQwX0E0dTMyX0I4X0M4XSA9IHsgNSwgMjU2IH0sCj4gKwlbSTkxNV9PQV9G T1JNQVRfQzRfQjhdCQkgICAgPSB7IDcsIDY0IH0sCj4gK307Cj4gKwo+ICAjZGVmaW5lIFNBTVBM RV9PQV9SRVBPUlQgICAgICAoMTw8MCkKPiAgCj4gIC8qKgo+IEBAIC0zMzIsOCArMzUyLDIwIEBA IHN0cnVjdCBwZXJmX29wZW5fcHJvcGVydGllcyB7Cj4gIAlpbnQgb2FfcGVyaW9kX2V4cG9uZW50 Owo+ICB9Owo+ICAKPiArc3RhdGljIHUzMiBnZW44X29hX2h3X3RhaWxfcmVhZChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXJldHVybiBJOTE1X1JFQUQoR0VOOF9P QVRBSUxQVFIpICYgR0VOOF9PQVRBSUxQVFJfTUFTSzsKPiArfQo+ICsKPiArc3RhdGljIHUzMiBn ZW43X29hX2h3X3RhaWxfcmVhZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4g K3sKPiArCXUzMiBvYXN0YXR1czEgPSBJOTE1X1JFQUQoR0VON19PQVNUQVRVUzEpOwo+ICsKPiAr CXJldHVybiBvYXN0YXR1czEgJiBHRU43X09BU1RBVFVTMV9UQUlMX01BU0s7Cj4gK30KPiArCj4g IC8qKgo+IC0gKiBnZW43X29hX2J1ZmZlcl9jaGVja191bmxvY2tlZCAtIGNoZWNrIGZvciBkYXRh IGFuZCB1cGRhdGUgdGFpbCBwdHIgc3RhdGUKPiArICogb2FfYnVmZmVyX2NoZWNrX3VubG9ja2Vk IC0gY2hlY2sgZm9yIGRhdGEgYW5kIHVwZGF0ZSB0YWlsIHB0ciBzdGF0ZQo+ICAgKiBAZGV2X3By aXY6IGk5MTUgZGV2aWNlIGluc3RhbmNlCj4gICAqCj4gICAqIFRoaXMgaXMgZWl0aGVyIGNhbGxl ZCB2aWEgZm9wcyAoZm9yIGJsb2NraW5nIHJlYWRzIGluIHVzZXIgY3R4KSBvciB0aGUgcG9sbAo+ IEBAIC0zNTYsMTIgKzM4OCwxMSBAQCBzdHJ1Y3QgcGVyZl9vcGVuX3Byb3BlcnRpZXMgewo+ICAg Kgo+ICAgKiBSZXR1cm5zOiAldHJ1ZSBpZiB0aGUgT0EgYnVmZmVyIGNvbnRhaW5zIGRhdGEsIGVs c2UgJWZhbHNlCj4gICAqLwo+IC1zdGF0aWMgYm9vbCBnZW43X29hX2J1ZmZlcl9jaGVja191bmxv Y2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyBib29sIG9h X2J1ZmZlcl9jaGVja191bmxvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gIHsKPiAgCWludCByZXBvcnRfc2l6ZSA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5m b3JtYXRfc2l6ZTsKPiAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gIAl1bnNpZ25lZCBpbnQgYWdl ZF9pZHg7Cj4gLQl1MzIgb2FzdGF0dXMxOwo+ICAJdTMyIGhlYWQsIGh3X3RhaWwsIGFnZWRfdGFp bCwgYWdpbmdfdGFpbDsKPiAgCXU2NCBub3c7Cj4gIAo+IEBAIC0zODEsOCArNDEyLDcgQEAgc3Rh dGljIGJvb2wgZ2VuN19vYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ICAJYWdlZF90YWlsID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVm ZmVyLnRhaWxzW2FnZWRfaWR4XS5vZmZzZXQ7Cj4gIAlhZ2luZ190YWlsID0gZGV2X3ByaXYtPnBl cmYub2Eub2FfYnVmZmVyLnRhaWxzWyFhZ2VkX2lkeF0ub2Zmc2V0Owo+ICAKPiAtCW9hc3RhdHVz MSA9IEk5MTVfUkVBRChHRU43X09BU1RBVFVTMSk7Cj4gLQlod190YWlsID0gb2FzdGF0dXMxICYg R0VON19PQVNUQVRVUzFfVEFJTF9NQVNLOwo+ICsJaHdfdGFpbCA9IGRldl9wcml2LT5wZXJmLm9h Lm9wcy5vYV9od190YWlsX3JlYWQoZGV2X3ByaXYpOwo+ICAKPiAgCS8qIFRoZSB0YWlsIHBvaW50 ZXIgaW5jcmVhc2VzIGluIDY0IGJ5dGUgaW5jcmVtZW50cywKPiAgCSAqIG5vdCBpbiByZXBvcnRf c2l6ZSBzdGVwcy4uLgo+IEBAIC00MDQsNiArNDM0LDcgQEAgc3RhdGljIGJvb2wgZ2VuN19vYV9i dWZmZXJfY2hlY2tfdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ ICAJaWYgKGFnaW5nX3RhaWwgIT0gSU5WQUxJRF9UQUlMX1BUUiAmJgo+ICAJICAgICgobm93IC0g ZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmFnaW5nX3RpbWVzdGFtcCkgPgo+ICAJICAgICBP QV9UQUlMX01BUkdJTl9OU0VDKSkgewo+ICsKPiAgCQlhZ2VkX2lkeCBePSAxOwo+ICAJCWRldl9w cml2LT5wZXJmLm9hLm9hX2J1ZmZlci5hZ2VkX3RhaWxfaWR4ID0gYWdlZF9pZHg7Cj4gIAo+IEBA IC01NTMsNiArNTg0LDI4NCBAQCBzdGF0aWMgaW50IGFwcGVuZF9vYV9zYW1wbGUoc3RydWN0IGk5 MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKPiAgICoKPiAgICogUmV0dXJuczogMCBvbiBzdWNjZXNz LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gICAqLwo+ICtzdGF0aWMgaW50IGdl bjhfYXBwZW5kX29hX3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKPiAr CQkJCSAgY2hhciBfX3VzZXIgKmJ1ZiwKPiArCQkJCSAgc2l6ZV90IGNvdW50LAo+ICsJCQkJICBz aXplX3QgKm9mZnNldCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gc3RyZWFtLT5kZXZfcHJpdjsKPiArCWludCByZXBvcnRfc2l6ZSA9IGRldl9wcml2LT5wZXJm Lm9hLm9hX2J1ZmZlci5mb3JtYXRfc2l6ZTsKPiArCXU4ICpvYV9idWZfYmFzZSA9IGRldl9wcml2 LT5wZXJmLm9hLm9hX2J1ZmZlci52YWRkcjsKPiArCXUzMiBndHRfb2Zmc2V0ID0gaTkxNV9nZ3R0 X29mZnNldChkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIudm1hKTsKPiArCXUzMiBtYXNrID0g KE9BX0JVRkZFUl9TSVpFIC0gMSk7Cj4gKwlzaXplX3Qgc3RhcnRfb2Zmc2V0ID0gKm9mZnNldDsK PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwl1bnNpZ25lZCBpbnQgYWdlZF90YWlsX2lkeDsK PiArCXUzMiBoZWFkLCB0YWlsOwo+ICsJdTMyIHRha2VuOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ ICsJaWYgKFdBUk5fT04oIXN0cmVhbS0+ZW5hYmxlZCkpCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+ ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5wdHJfbG9j aywgZmxhZ3MpOwo+ICsKPiArCWhlYWQgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuaGVh ZDsKPiArCWFnZWRfdGFpbF9pZHggPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuYWdlZF90 YWlsX2lkeDsKPiArCXRhaWwgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIudGFpbHNbYWdl ZF90YWlsX2lkeF0ub2Zmc2V0Owo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9w cml2LT5wZXJmLm9hLm9hX2J1ZmZlci5wdHJfbG9jaywgZmxhZ3MpOwo+ICsKPiArCS8qIEFuIGlu dmFsaWQgdGFpbCBwb2ludGVyIGhlcmUgbWVhbnMgd2UncmUgc3RpbGwgd2FpdGluZyBmb3IgdGhl IHBvbGwKPiArCSAqIGhydGltZXIgY2FsbGJhY2sgdG8gZ2l2ZSB1cyBhIHBvaW50ZXIKPiArCSAq Lwo+ICsJaWYgKHRhaWwgPT0gSU5WQUxJRF9UQUlMX1BUUikKPiArCQlyZXR1cm4gLUVBR0FJTjsK PiArCj4gKwkvKiBOQjogb2FfYnVmZmVyLmhlYWQvdGFpbCBpbmNsdWRlIHRoZSBndHRfb2Zmc2V0 IHdoaWNoIHdlIGRvbid0IHdhbnQKPiArCSAqIHdoaWxlIGluZGV4aW5nIHJlbGF0aXZlIHRvIG9h X2J1Zl9iYXNlLgo+ICsJICovCj4gKwloZWFkIC09IGd0dF9vZmZzZXQ7Cj4gKwl0YWlsIC09IGd0 dF9vZmZzZXQ7Cj4gKwo+ICsJLyogQW4gb3V0IG9mIGJvdW5kcyBvciBtaXNhbGlnbmVkIGhlYWQg b3IgdGFpbCBwb2ludGVyIGltcGxpZXMgYSBkcml2ZXIKPiArCSAqIGJ1ZyBzaW5jZSB3ZSB2YWxp ZGF0ZSArIGFsaWduIHRoZSB0YWlsIHBvaW50ZXJzIHdlIHJlYWQgZnJvbSB0aGUKPiArCSAqIGhh cmR3YXJlIGFuZCB3ZSBhcmUgaW4gZnVsbCBjb250cm9sIG9mIHRoZSBoZWFkIHBvaW50ZXIgd2hp Y2ggc2hvdWxkCj4gKwkgKiBvbmx5IGJlIGluY3JlbWVudGVkIGJ5IG11bHRpcGxlcyBvZiB0aGUg cmVwb3J0IHNpemUgKG5vdGFibHkgYWxzbwo+ICsJICogYWxsIGEgcG93ZXIgb2YgdHdvKS4KPiAr CSAqLwo+ICsJaWYgKFdBUk5fT05DRShoZWFkID4gT0FfQlVGRkVSX1NJWkUgfHwgaGVhZCAlIHJl cG9ydF9zaXplIHx8Cj4gKwkJICAgICAgdGFpbCA+IE9BX0JVRkZFUl9TSVpFIHx8IHRhaWwgJSBy ZXBvcnRfc2l6ZSwKPiArCQkgICAgICAiSW5jb25zaXN0ZW50IE9BIGJ1ZmZlciBwb2ludGVyczog aGVhZCA9ICV1LCB0YWlsID0gJXVcbiIsCj4gKwkJICAgICAgaGVhZCwgdGFpbCkpCj4gKwkJcmV0 dXJuIC1FSU87Cj4gKwo+ICsKPiArCWZvciAoLyogbm9uZSAqLzsKPiArCSAgICAgKHRha2VuID0g T0FfVEFLRU4odGFpbCwgaGVhZCkpOwo+ICsJICAgICBoZWFkID0gKGhlYWQgKyByZXBvcnRfc2l6 ZSkgJiBtYXNrKSB7Cj4gKwkJdTggKnJlcG9ydCA9IG9hX2J1Zl9iYXNlICsgaGVhZDsKPiArCQl1 MzIgKnJlcG9ydDMyID0gKHZvaWQgKilyZXBvcnQ7Cj4gKwkJdTMyIGN0eF9pZDsKPiArCQl1MzIg cmVhc29uOwo+ICsKPiArCQkvKiBBbGwgdGhlIHJlcG9ydCBzaXplcyBmYWN0b3IgbmVhdGx5IGlu dG8gdGhlIGJ1ZmZlcgo+ICsJCSAqIHNpemUgc28gd2UgbmV2ZXIgZXhwZWN0IHRvIHNlZSBhIHJl cG9ydCBzcGxpdAo+ICsJCSAqIGJldHdlZW4gdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBi dWZmZXIuCj4gKwkJICoKPiArCQkgKiBHaXZlbiB0aGUgaW5pdGlhbCBhbGlnbm1lbnQgY2hlY2sg YSBtaXNhbGlnbm1lbnQKPiArCQkgKiBoZXJlIHdvdWxkIGltcGx5IGEgZHJpdmVyIGJ1ZyB0aGF0 IHdvdWxkIHJlc3VsdAo+ICsJCSAqIGluIGFuIG92ZXJydW4uCj4gKwkJICovCj4gKwkJaWYgKFdB Uk5fT04oKE9BX0JVRkZFUl9TSVpFIC0gaGVhZCkgPCByZXBvcnRfc2l6ZSkpIHsKPiArCQkJRFJN X0VSUk9SKCJTcHVyaW91cyBPQSBoZWFkIHB0cjogbm9uLWludGVncmFsIHJlcG9ydCBvZmZzZXRc biIpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCS8qIFRoZSByZWFzb24gZmllbGQgaW5j bHVkZXMgZmxhZ3MgaWRlbnRpZnlpbmcgd2hhdAo+ICsJCSAqIHRyaWdnZXJlZCB0aGlzIHNwZWNp ZmljIHJlcG9ydCAobW9zdGx5IHRpbWVyCj4gKwkJICogdHJpZ2dlcmVkIG9yIGUuZy4gZHVlIHRv IGEgY29udGV4dCBzd2l0Y2gpLgo+ICsJCSAqCj4gKwkJICogVGhpcyBmaWVsZCBpcyBuZXZlciBl eHBlY3RlZCB0byBiZSB6ZXJvIHNvIHdlIGNhbgo+ICsJCSAqIGNoZWNrIHRoYXQgdGhlIHJlcG9y dCBpc24ndCBpbnZhbGlkIGJlZm9yZSBjb3B5aW5nCj4gKwkJICogaXQgdG8gdXNlcnNwYWNlLi4u Cj4gKwkJICovCj4gKwkJcmVhc29uID0gKChyZXBvcnQzMlswXSA+PiBPQVJFUE9SVF9SRUFTT05f U0hJRlQpICYKPiArCQkJICBPQVJFUE9SVF9SRUFTT05fTUFTSyk7Cj4gKwkJaWYgKHJlYXNvbiA9 PSAwKSB7Cj4gKwkJCWlmIChfX3JhdGVsaW1pdCgmZGV2X3ByaXYtPnBlcmYub2Euc3B1cmlvdXNf cmVwb3J0X3JzKSkKPiArCQkJCURSTV9OT1RFKCJTa2lwcGluZyBzcHVyaW91cywgaW52YWxpZCBP QSByZXBvcnRcbiIpOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCS8qIFhYWDogSnVz dCBrZWVwIHRoZSBsb3dlciAyMSBiaXRzIGZvciBub3cgc2luY2UgSSdtIG5vdAo+ICsJCSAqIGVu dGlyZWx5IHN1cmUgaWYgdGhlIEhXIHRvdWNoZXMgYW55IG9mIHRoZSBoaWdoZXIgYml0cyBpbgo+ ICsJCSAqIHRoaXMgZmllbGQKPiArCQkgKi8KPiArCQljdHhfaWQgPSByZXBvcnQzMlsyXSAmIDB4 MWZmZmZmOwo+ICsKPiArCQkvKiBTcXVhc2ggd2hhdGV2ZXIgaXMgaW4gdGhlIENUWF9JRCBmaWVs ZCBpZiBpdCdzCj4gKwkJICogbWFya2VkIGFzIGludmFsaWQgdG8gYmUgc3VyZSB3ZSBhdm9pZAo+ ICsJCSAqIGZhbHNlLXBvc2l0aXZlLCBzaW5nbGUtY29udGV4dCBmaWx0ZXJpbmcgYmVsb3cuLi4K PiArCQkgKi8KPiArCQlpZiAoIShyZXBvcnQzMlswXSAmIGRldl9wcml2LT5wZXJmLm9hLmdlbjhf dmFsaWRfY3R4X2JpdCkpCj4gKwkJCWN0eF9pZCA9IHJlcG9ydDMyWzJdID0gSU5WQUxJRF9DVFhf SUQ7Cj4gKwo+ICsJCS8qIE5COiBGb3IgR2VuIDggdGhlIE9BIHVuaXQgbm8gbG9uZ2VyIHN1cHBv cnRzIGNsb2NrIGdhdGluZwo+ICsJCSAqIG9mZiBmb3IgYSBzcGVjaWZpYyBjb250ZXh0IGFuZCB0 aGUga2VybmVsIGNhbid0IHNlY3VyZWx5Cj4gKwkJICogc3RvcCB0aGUgY291bnRlcnMgZnJvbSB1 cGRhdGluZyBhcyBzeXN0ZW0td2lkZSAvIGdsb2JhbAo+ICsJCSAqIHZhbHVlcy4KPiArCQkgKgo+ ICsJCSAqIEF1dG9tYXRpYyByZXBvcnRzIG5vdyBpbmNsdWRlIGEgY29udGV4dCBJRCBzbyByZXBv cnRzIGNhbiBiZQo+ICsJCSAqIGZpbHRlcmVkIG9uIHRoZSBjcHUgYnV0IGl0J3Mgbm90IHdvcnRo IHRyeWluZyB0bwo+ICsJCSAqIGF1dG9tYXRpY2FsbHkgc3VidHJhY3QvaGlkZSBjb3VudGVyIHBy b2dyZXNzIGZvciBvdGhlcgo+ICsJCSAqIGNvbnRleHRzIHdoaWxlIGZpbHRlcmluZyBzaW5jZSB3 ZSBjYW4ndCBzdG9wIHVzZXJzcGFjZQo+ICsJCSAqIGlzc3VpbmcgTUlfUkVQT1JUX1BFUkZfQ09V TlQgY29tbWFuZHMgd2hpY2ggd291bGQgc3RpbGwKPiArCQkgKiBwcm92aWRlIGEgc2lkZS1iYW5k IHZpZXcgb2YgdGhlIHJlYWwgdmFsdWVzLgo+ICsJCSAqCj4gKwkJICogVG8gYWxsb3cgdXNlcnNw YWNlIChzdWNoIGFzIE1lc2EvR0xfSU5URUxfcGVyZm9ybWFuY2VfcXVlcnkpCj4gKwkJICogdG8g bm9ybWFsaXplIGNvdW50ZXJzIGZvciBhIHNpbmdsZSBmaWx0ZXJlZCBjb250ZXh0IHRoZW4gaXQK PiArCQkgKiBuZWVkcyBiZSBmb3J3YXJkZWQgYm9va2VuZCBjb250ZXh0LXN3aXRjaCByZXBvcnRz IHNvIHRoYXQgaXQKPiArCQkgKiBjYW4gdHJhY2sgc3dpdGNoZXMgaW4gYmV0d2VlbiBNSV9SRVBP UlRfUEVSRl9DT1VOVCBjb21tYW5kcwo+ICsJCSAqIGFuZCBjYW4gaXRzZWxmIHN1YnRyYWN0L2ln bm9yZSB0aGUgcHJvZ3Jlc3Mgb2YgY291bnRlcnMKPiArCQkgKiBhc3NvY2lhdGVkIHdpdGggb3Ro ZXIgY29udGV4dHMuIE5vdGUgdGhhdCB0aGUgaGFyZHdhcmUKPiArCQkgKiBhdXRvbWF0aWNhbGx5 IHRyaWdnZXJzIHJlcG9ydHMgd2hlbiBzd2l0Y2hpbmcgdG8gYSBuZXcKPiArCQkgKiBjb250ZXh0 IHdoaWNoIGFyZSB0YWdnZWQgd2l0aCB0aGUgSUQgb2YgdGhlIG5ld2x5IGFjdGl2ZQo+ICsJCSAq IGNvbnRleHQuIFRvIGF2b2lkIHRoZSBjb21wbGV4aXR5IChhbmQgbGlrZWx5IGZyYWdpbGl0eSkg b2YKPiArCQkgKiByZWFkaW5nIGFoZWFkIHdoaWxlIHBhcnNpbmcgcmVwb3J0cyB0byB0cnkgYW5k IG1pbmltaXplCj4gKwkJICogZm9yd2FyZGluZyByZWR1bmRhbnQgY29udGV4dCBzd2l0Y2ggcmVw b3J0cyAoaS5lLiBiZXR3ZWVuCj4gKwkJICogb3RoZXIsIHVucmVsYXRlZCBjb250ZXh0cykgd2Ug c2ltcGx5IGVsZWN0IHRvIGZvcndhcmQgdGhlbQo+ICsJCSAqIGFsbC4KPiArCQkgKgo+ICsJCSAq IFdlIGRvbid0IHJlbHkgc29sZWx5IG9uIHRoZSByZWFzb24gZmllbGQgdG8gaWRlbnRpZnkgY29u dGV4dAo+ICsJCSAqIHN3aXRjaGVzIHNpbmNlIGl0J3Mgbm90LXVuY29tbW9uIGZvciBwZXJpb2Rp YyBzYW1wbGVzIHRvCj4gKwkJICogaWRlbnRpZnkgYSBzd2l0Y2ggYmVmb3JlIGFueSAnY29udGV4 dCBzd2l0Y2gnIHJlcG9ydC4KPiArCQkgKi8KPiArCQlpZiAoIWRldl9wcml2LT5wZXJmLm9hLmV4 Y2x1c2l2ZV9zdHJlYW0tPmN0eCB8fAo+ICsJCSAgICBkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZp Y19jdHhfaWQgPT0gY3R4X2lkIHx8Cj4gKwkJICAgIChkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZm ZXIubGFzdF9jdHhfaWQgPT0KPiArCQkgICAgIGRldl9wcml2LT5wZXJmLm9hLnNwZWNpZmljX2N0 eF9pZCkgfHwKPiArCQkgICAgcmVhc29uICYgT0FSRVBPUlRfUkVBU09OX0NUWF9TV0lUQ0gpIHsK PiArCj4gKwkJCS8qIFdoaWxlIGZpbHRlcmluZyBmb3IgYSBzaW5nbGUgY29udGV4dCB3ZSBhdm9p ZAo+ICsJCQkgKiBsZWFraW5nIHRoZSBJRHMgb2Ygb3RoZXIgY29udGV4dHMuCj4gKwkJCSAqLwo+ ICsJCQlpZiAoZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbS0+Y3R4ICYmCj4gKwkJ CSAgICBkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19jdHhfaWQgIT0gY3R4X2lkKSB7Cj4gKwkJ CQlyZXBvcnQzMlsyXSA9IElOVkFMSURfQ1RYX0lEOwo+ICsJCQl9Cj4gKwo+ICsJCQlyZXQgPSBh cHBlbmRfb2Ffc2FtcGxlKHN0cmVhbSwgYnVmLCBjb3VudCwgb2Zmc2V0LAo+ICsJCQkJCSAgICAg ICByZXBvcnQpOwo+ICsJCQlpZiAocmV0KQo+ICsJCQkJYnJlYWs7Cj4gKwo+ICsJCQlkZXZfcHJp di0+cGVyZi5vYS5vYV9idWZmZXIubGFzdF9jdHhfaWQgPSBjdHhfaWQ7Cj4gKwkJfQo+ICsKPiAr CQkvKiBUaGUgYWJvdmUgcmVhc29uIGZpZWxkIHNhbml0eSBjaGVjayBpcyBiYXNlZCBvbgo+ICsJ CSAqIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIE9BIGJ1ZmZlciBpcyBpbml0aWFsbHkKPiArCQkg KiB6ZXJvZWQgYW5kIHdlIHJlc2V0IHRoZSBmaWVsZCBhZnRlciBjb3B5aW5nIHNvIHRoZQo+ICsJ CSAqIGNoZWNrIGlzIHN0aWxsIG1lYW5pbmdmdWwgb25jZSBvbGQgcmVwb3J0cyBzdGFydAo+ICsJ CSAqIGJlaW5nIG92ZXJ3cml0dGVuLgo+ICsJCSAqLwo+ICsJCXJlcG9ydDMyWzBdID0gMDsKPiAr CX0KPiArCj4gKwlpZiAoc3RhcnRfb2Zmc2V0ICE9ICpvZmZzZXQpIHsKPiArCQlzcGluX2xvY2tf aXJxc2F2ZSgmZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnB0cl9sb2NrLCBmbGFncyk7Cj4g Kwo+ICsJCS8qIFdlIHJlbW92ZWQgdGhlIGd0dF9vZmZzZXQgZm9yIHRoZSBjb3B5IGxvb3AgYWJv dmUsIGluZGV4aW5nCj4gKwkJICogcmVsYXRpdmUgdG8gb2FfYnVmX2Jhc2Ugc28gcHV0IGJhY2sg aGVyZS4uLgo+ICsJCSAqLwo+ICsJCWhlYWQgKz0gZ3R0X29mZnNldDsKPiArCj4gKwkJSTkxNV9X UklURShHRU44X09BSEVBRFBUUiwgaGVhZCAmIEdFTjhfT0FIRUFEUFRSX01BU0spOwo+ICsJCWRl dl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5oZWFkID0gaGVhZDsKPiArCj4gKwkJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnB0cl9sb2NrLCBmbGFn cyk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGdlbjhf b2FfcmVhZCAtIGNvcHkgc3RhdHVzIHJlY29yZHMgdGhlbiBidWZmZXJlZCBPQSByZXBvcnRzCj4g KyAqIEBzdHJlYW06IEFuIGk5MTUtcGVyZiBzdHJlYW0gb3BlbmVkIGZvciBPQSBtZXRyaWNzCj4g KyAqIEBidWY6IGRlc3RpbmF0aW9uIGJ1ZmZlciBnaXZlbiBieSB1c2Vyc3BhY2UKPiArICogQGNv dW50OiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVzZXJzcGFjZSB3YW50cyB0byByZWFkCj4gKyAqIEBv ZmZzZXQ6IChpbm91dCk6IHRoZSBjdXJyZW50IHBvc2l0aW9uIGZvciB3cml0aW5nIGludG8gQGJ1 Zgo+ICsgKgo+ICsgKiBDaGVja3MgT0EgdW5pdCBzdGF0dXMgcmVnaXN0ZXJzIGFuZCBpZiBuZWNl c3NhcnkgYXBwZW5kcyBjb3JyZXNwb25kaW5nCj4gKyAqIHN0YXR1cyByZWNvcmRzIGZvciB1c2Vy c3BhY2UgKHN1Y2ggYXMgZm9yIGEgYnVmZmVyIGZ1bGwgY29uZGl0aW9uKSBhbmQgdGhlbgo+ICsg KiBpbml0aWF0ZSBhcHBlbmRpbmcgYW55IGJ1ZmZlcmVkIE9BIHJlcG9ydHMuCj4gKyAqCj4gKyAq IFVwZGF0ZXMgQG9mZnNldCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBieXRlcyBzdWNjZXNz ZnVsbHkgY29waWVkIGludG8KPiArICogdGhlIHVzZXJzcGFjZSBidWZmZXIuCj4gKyAqCj4gKyAq IE5COiBzb21lIGRhdGEgbWF5IGJlIHN1Y2Nlc3NmdWxseSBjb3BpZWQgdG8gdGhlIHVzZXJzcGFj ZSBidWZmZXIKPiArICogZXZlbiBpZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgYW5kIHRoaXMgaXMg cmVmbGVjdGVkIGluIHRoZQo+ICsgKiB1cGRhdGVkIEBvZmZzZXQuCj4gKyAqCj4gKyAqIFJldHVy bnM6IHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKPiArICovCj4gK3N0 YXRpYyBpbnQgZ2VuOF9vYV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4g KwkJCWNoYXIgX191c2VyICpidWYsCj4gKwkJCXNpemVfdCBjb3VudCwKPiArCQkJc2l6ZV90ICpv ZmZzZXQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVh bS0+ZGV2X3ByaXY7Cj4gKwl1MzIgb2FzdGF0dXM7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChX QVJOX09OKCFkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIudmFkZHIpKQo+ICsJCXJldHVybiAt RUlPOwo+ICsKPiArCW9hc3RhdHVzID0gSTkxNV9SRUFEKEdFTjhfT0FTVEFUVVMpOwo+ICsKPiAr CS8qIFdlIHRyZWF0IE9BQlVGRkVSX09WRVJGTE9XIGFzIGEgc2lnbmlmaWNhbnQgZXJyb3I6Cj4g KwkgKgo+ICsJICogQWx0aG91Z2ggdGhlb3JldGljYWxseSB3ZSBjb3VsZCBoYW5kbGUgdGhpcyBt b3JlIGdyYWNlZnVsbHkKPiArCSAqIHNvbWV0aW1lcywgc29tZSBHZW5zIGRvbid0IGNvcnJlY3Rs eSBzdXBwcmVzcyBjZXJ0YWluCj4gKwkgKiBhdXRvbWF0aWNhbGx5IHRyaWdnZXJlZCByZXBvcnRz IGluIHRoaXMgY29uZGl0aW9uIGFuZCBzbyB3ZQo+ICsJICogaGF2ZSB0byBhc3N1bWUgdGhhdCBv bGQgcmVwb3J0cyBhcmUgbm93IGJlaW5nIHRyYW1wbGVkCj4gKwkgKiBvdmVyLgo+ICsJICoKPiAr CSAqIENvbnNpZGVyaW5nIGhvdyB3ZSBkb24ndCBjdXJyZW50bHkgZ2l2ZSB1c2Vyc3BhY2UgY29u dHJvbAo+ICsJICogb3ZlciB0aGUgT0EgYnVmZmVyIHNpemUgYW5kIGFsd2F5cyBjb25maWd1cmUg YSBsYXJnZSAxNk1CCj4gKwkgKiBidWZmZXIsIHRoZW4gYSBidWZmZXIgb3ZlcmZsb3cgZG9lcyBh bnl3YXkgbGlrZWx5IGluZGljYXRlCj4gKwkgKiB0aGF0IHNvbWV0aGluZyBoYXMgZ29uZSBxdWl0 ZSBiYWRseSB3cm9uZy4KPiArCSAqLwo+ICsJaWYgKG9hc3RhdHVzICYgR0VOOF9PQVNUQVRVU19P QUJVRkZFUl9PVkVSRkxPVykgewo+ICsJCXJldCA9IGFwcGVuZF9vYV9zdGF0dXMoc3RyZWFtLCBi dWYsIGNvdW50LCBvZmZzZXQsCj4gKwkJCQkgICAgICAgRFJNX0k5MTVfUEVSRl9SRUNPUkRfT0Ff QlVGRkVSX0xPU1QpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwo+ICsJCURS TV9ERUJVRygiT0EgYnVmZmVyIG92ZXJmbG93IChleHBvbmVudCA9ICVkKTogZm9yY2UgcmVzdGFy dFxuIiwKPiArCQkJICBkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RfZXhwb25lbnQpOwo+ICsKPiAr CQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZGlzYWJsZShkZXZfcHJpdik7Cj4gKwkJZGV2X3By aXYtPnBlcmYub2Eub3BzLm9hX2VuYWJsZShkZXZfcHJpdik7Cj4gKwo+ICsJCS8qIE5vdGU6IC5v YV9lbmFibGUoKSBpcyBleHBlY3RlZCB0byByZS1pbml0IHRoZSBvYWJ1ZmZlcgo+ICsJCSAqIGFu ZCByZXNldCBHRU44X09BU1RBVFVTIGZvciB1cwo+ICsJCSAqLwo+ICsJCW9hc3RhdHVzID0gSTkx NV9SRUFEKEdFTjhfT0FTVEFUVVMpOwo+ICsJfQo+ICsKPiArCWlmIChvYXN0YXR1cyAmIEdFTjhf T0FTVEFUVVNfUkVQT1JUX0xPU1QpIHsKPiArCQlyZXQgPSBhcHBlbmRfb2Ffc3RhdHVzKHN0cmVh bSwgYnVmLCBjb3VudCwgb2Zmc2V0LAo+ICsJCQkJICAgICAgIERSTV9JOTE1X1BFUkZfUkVDT1JE X09BX1JFUE9SVF9MT1NUKTsKaWYgcmV0ICE9IDAgc2hvdWxkbid0IHdlIGJhaWw/Cgo+ICsJCWlm IChyZXQgPT0gMCkgewo+ICsJCQlJOTE1X1dSSVRFKEdFTjhfT0FTVEFUVVMsCj4gKwkJCQkgICBv YXN0YXR1cyAmIH5HRU44X09BU1RBVFVTX1JFUE9SVF9MT1NUKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIGdlbjhfYXBwZW5kX29hX3JlcG9ydHMoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZz ZXQpOwo+ICt9Cgo8U05JUD4KCj4gKy8qCj4gKyAqIEZyb20gQnJvYWR3ZWxsIFBSTSwgM0QtTWVk aWEtR1BHUFUgLT4gUmVnaXN0ZXIgU3RhdGUgQ29udGV4dAo+ICsgKgo+ICsgKiBNTUlPIHJlYWRz IG9yIHdyaXRlcyB0byBhbnkgb2YgdGhlIHJlZ2lzdGVycyBsaXN0ZWQgaW4gdGhlCj4gKyAqIOKA nFJlZ2lzdGVyIFN0YXRlIENvbnRleHQgaW1hZ2XigJ0gc3Vic2VjdGlvbnMgdGhyb3VnaCBIT1NU L0lBCj4gKyAqIE1NSU8gaW50ZXJmYWNlIGZvciBkZWJ1ZyBwdXJwb3NlcyBtdXN0IGZvbGxvdyB0 aGUgc3RlcHMgYmVsb3c6Cj4gKyAqCj4gKyAqIC0gU1cgc2hvdWxkIHNldCB0aGUgRm9yY2UgV2Fr ZXVwIGJpdCB0byBwcmV2ZW50IEdUIGZyb20gZW50ZXJpbmcgQzYuCj4gKyAqIC0gV3JpdGUgMHgy MDUwWzMxOjBdID0gMHgwMDAxMDAwMSAoZGlzYWJsZSBzZXF1ZW5jZSkuCj4gKyAqIC0gRGlzYWJs ZSBJRExFIG1lc3NhZ2luZyBpbiBDUyAoV3JpdGUgMHgyMDUwWzMxOjBdID0gMHgwMDAxMDAwMSku Cj4gKyAqIC0gQkRXOiAgUG9sbC9XYWl0IGZvciByZWdpc3RlciBiaXRzIG9mIDB4MjJBQ1s2OjBd IHR1cm4gdG8gMHgzMCB2YWx1ZS4KPiArICogLSBTS0wrOiBQb2xsL1dhaXQgZm9yIHJlZ2lzdGVy IGJpdHMgb2YgMHgyMkE0WzY6MF0gdHVybiB0byAweDMwIHZhbHVlLgo+ICsgKiAtIFJlYWQvV3Jp dGUgdG8gZGVzaXJlZCBNTUlPIHJlZ2lzdGVycy4KPiArICogLSBFbmFibGUgSURMRSBtZXNzYWdp bmcgaW4gQ1MgKFdyaXRlIDB4MjA1MFszMTowXSA9IDB4MDAwMTAwMDApLgo+ICsgKiAtIEZvcmNl IFdha2V1cCBiaXQgc2hvdWxkIGJlIHJlc2V0IHRvIGVuYWJsZSBDNiBlbnRyeS4KPiArICoKPiAr ICogWFhYOiBkb24ndCBuZXN0IG9yIG92ZXJsYXAgY2FsbHMgdG8gdGhpcyBBUEksIGl0IGhhcyBu byByZWYKPiArICogY291bnRpbmcgdG8gdHJhY2sgaG93IG1hbnkgZW50aXRpZXMgcmVxdWlyZSB0 aGUgUkNTIHRvIGJlCj4gKyAqIGJsb2NrZWQgZnJvbSBiZWluZyBpZGxlLgo+ICsgKi8KPiArc3Rh dGljIGludCBnZW44X2JlZ2luX2N0eF9tbWlvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiArewo+ICsJaTkxNV9yZWdfdCBmc21fcmVnID0gZGV2X3ByaXYtPmluZm8uZ2VuID4g OCA/CklOVEVMX0dFTj8KCj4gKwkJR0VOOV9SQ1NfRkVfRlNNMiA6IEdFTjZfUkNTX1BXUl9GU007 Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwkvKiBUaGVyZSdzIG9ubHkgbm8gYWN0aXZlIGNvbnRl eHQgd2hpbGUgaWRsZSBpbiBleGVjbGlzdCBtb2RlCj4gKwkgKiAodGhvdWdoIHdlIHNob3VsZG4n dCBiZSB1c2luZyB0aGlzIGluIGFueSBvdGhlciBjYXNlKQo+ICsJICovClNvIHRoZXJlIG1heSBu b3QgYmUgYW4gYWN0aXZlIGNvbnRleHQ/IFdoYXQgaGFwcGVucyBpZiB3ZSBkbyB0aGUgbW1pbwph bmQgdGhlcmUgaXMgbm8gYWN0aXZlIGNvbnRleHQ/IAoKPiArCWlmIChXQVJOX09OKCFpOTE1LmVu YWJsZV9leGVjbGlzdHMpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWludGVsX3VuY29y ZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBGT1JDRVdBS0VfUkVOREVSKTsKPiArCj4gKwlJOTE1 X1dSSVRFKEdFTjZfUkNfU0xFRVBfUFNNSV9DT05UUk9MLAo+ICsJCSAgIF9NQVNLRURfQklUX0VO QUJMRShHRU42X1BTTUlfU0xFRVBfTVNHX0RJU0FCTEUpKTsKPiArCj4gKwkvKiBOb3RlOiB3ZSBk b24ndCBjdXJyZW50bHkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBtYXhpbXVtCj4gKwkgKiBs YXRlbmN5IGZvciB0aGlzIHdha2UgdXAgc28gd2hpbGUgd2Ugb25seSBuZWVkIHRvIGhvbGQgcmNz Cj4gKwkgKiBidXN5IGZyb20gcHJvY2VzcyBjb250ZXh0IHdlIGF0IGxlYXN0IGtlZXAgdGhlIHdh aXRpbmcKPiArCSAqIGludGVycnVwdGlibGUuLi4KPiArCSAqLwo+ICsJcmV0ID0gd2FpdF9mb3Io KEk5MTVfUkVBRChmc21fcmVnKSAmIDB4M2YpID09IDB4MzAsIDUwKTsKaW50ZWxfd2FpdF9mb3Jf cmVnaXN0ZXIoZGV2X3ByaXYsIGZzbV9yZWcsIDB4M2YsIDB4MzAsIDUwKSwgYW5kIG1heWJlIGEK RFJNX0VSUk9SIHRpbWVvdXQgbWVzc2FnZT8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=