From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 06/17] drm/i915: Simplify ELSP queue request tracking Date: Mon, 29 Aug 2016 15:31:11 +0300 Message-ID: <87zinv92pc.fsf@gaia.fi.intel.com> References: <20160828204624.21193-1-chris@chris-wilson.co.uk> <20160828204624.21193-7-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 855A86E52E for ; Mon, 29 Aug 2016 12:31:58 +0000 (UTC) In-Reply-To: <20160828204624.21193-7-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gRW11bGF0 ZSBIVyB0byB0cmFjayBhbmQgbWFuYWdlIEVMU1AgcXVldWUuIEEgc2V0IG9mIFNXIHBvcnRzIGFy ZSBkZWZpbmVkCj4gYW5kIHJlcXVlc3RzIGFyZSBhc3NpZ25lZCB0byB0aGVzZSBwb3J0cyBiZWZv cmUgc3VibWl0dGluZyB0aGVtIHRvIEhXLiBUaGlzCj4gaGVscHMgaW4gY2xlYW5pbmcgdXAgaW5j b21wbGV0ZSByZXF1ZXN0cyBkdXJpbmcgcmVzZXQgcmVjb3ZlcnkgZWFzaWVyCj4gZXNwZWNpYWxs eSBhZnRlciBlbmdpbmUgcmVzZXQgYnkgZGVjb3VwbGluZyBlbHNwIHF1ZXVlIG1hbmFnZW1lbnQu IFRoaXMKPiB3aWxsIGJlY29tZSBtb3JlIGNsZWFyIGluIHRoZSBuZXh0IHBhdGNoLgo+Cj4gSW4g dGhlIGVuZ2luZSByZXNldCBjYXNlIHdlIHdhbnQgdG8gcmVzdW1lIHdoZXJlIHdlIGxlZnQtb2Zm IGFmdGVyIHNraXBwaW5nCj4gdGhlIGluY29tcGxldGUgYmF0Y2ggd2hpY2ggcmVxdWlyZXMgY2hl Y2tpbmcgdGhlIGVsc3AgcXVldWUsIHJlbW92aW5nCj4gZWxlbWVudCBhbmQgZml4aW5nIGVsc3Bf c3VibWl0dGVkIGNvdW50cyBpbiBzb21lIGNhc2VzLiBJbnN0ZWFkIG9mIGRpcmVjdGx5Cj4gbWFu aXB1bGF0aW5nIHRoZSBlbHNwIHF1ZXVlIGZyb20gcmVzZXQgcGF0aCB3ZSBjYW4gZXhhbWluZSB0 aGVzZSBwb3J0cywgZml4Cj4gdXAgcmluZ2J1ZmZlciBwb2ludGVycyB1c2luZyB0aGUgaW5jb21w bGV0ZSByZXF1ZXN0IGFuZCByZXN0YXJ0IHN1Ym1pc3Npb25zCj4gYWdhaW4gYWZ0ZXIgcmVzZXQu Cj4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiBDYzog TWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5jb20+Cj4gQ2M6IEFydW4gU2lsdXZl cnkgPGFydW4uc2lsdXZlcnlAbGludXguaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IExpbms6IGh0dHA6Ly9wYXRjaHdv cmsuZnJlZWRlc2t0b3Aub3JnL3BhdGNoL21zZ2lkLzE0NzA0MTQ2MDctMzI0NTMtMy1naXQtc2Vu ZC1lbWFpbC1hcnVuLnNpbHV2ZXJ5QGxpbnV4LmludGVsLmNvbQo+IC0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgfCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYyAgICAgICAgIHwgIDEzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX3JlcXVlc3QuYyB8ICAgMSAtCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3JlcXVlc3QuaCB8ICAyMSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMu YyAgICAgICAgfCA0MDUgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmggICAgICAgIHwgICAyIC0KPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHwgICA3ICstCj4gIDcgZmlsZXMgY2hhbmdlZCwg MTg4IGluc2VydGlvbnMoKyksIDI2MyBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZGVidWdmcy5jCj4gaW5kZXggZDg5MzU5YTUwNzQyLi41ZjkzMmViYzZmZjEgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IEBAIC0yMDc0LDcgKzIwNzQsNyBAQCBzdGF0 aWMgaW50IGk5MTVfZXhlY2xpc3RzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAg CQlzdGF0dXNfcG9pbnRlciA9IEk5MTVfUkVBRChSSU5HX0NPTlRFWFRfU1RBVFVTX1BUUihlbmdp bmUpKTsKPiAgCQlzZXFfcHJpbnRmKG0sICJcdFN0YXR1cyBwb2ludGVyOiAweCUwOFhcbiIsIHN0 YXR1c19wb2ludGVyKTsKPiAgCj4gLQkJcmVhZF9wb2ludGVyID0gZW5naW5lLT5uZXh0X2NvbnRl eHRfc3RhdHVzX2J1ZmZlcjsKPiArCQlyZWFkX3BvaW50ZXIgPSBHRU44X0NTQl9SRUFEX1BUUihz dGF0dXNfcG9pbnRlcik7Cj4gIAkJd3JpdGVfcG9pbnRlciA9IEdFTjhfQ1NCX1dSSVRFX1BUUihz dGF0dXNfcG9pbnRlcik7Cj4gIAkJaWYgKHJlYWRfcG9pbnRlciA+IHdyaXRlX3BvaW50ZXIpCj4g IAkJCXdyaXRlX3BvaW50ZXIgKz0gR0VOOF9DU0JfRU5UUklFUzsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMKPiBpbmRleCBkMzdiNDQxMjY5NDIuLjgzOGEyNzVlN2ZhYyAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYwo+IEBAIC0yNTc1LDYgKzI1NzUsOSBAQCBzdGF0aWMgdm9pZCBpOTE1X2dl bV9yZXNldF9lbmdpbmVfY2xlYW51cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g IAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7Cj4gIAlzdHJ1Y3QgaW50ZWxf cmluZyAqcmluZzsKPiAgCj4gKwkvKiBFbnN1cmUgaXJxIGhhbmRsZXIgZmluaXNoZXMsIGFuZCBu b3QgcnVuIGFnYWluLiAqLwo+ICsJdGFza2xldF9raWxsKCZlbmdpbmUtPmlycV90YXNrbGV0KTsK PiArCj4gIAkvKiBNYXJrIGFsbCBwZW5kaW5nIHJlcXVlc3RzIGFzIGNvbXBsZXRlIHNvIHRoYXQg YW55IGNvbmN1cnJlbnQKPiAgCSAqIChsb2NrbGVzcykgbG9va3VwIGRvZXNuJ3QgdHJ5IGFuZCB3 YWl0IHVwb24gdGhlIHJlcXVlc3QgYXMgd2UKPiAgCSAqIHJlc2V0IGl0Lgo+IEBAIC0yNTg4LDEw ICsyNTkxLDEyIEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX3Jlc2V0X2VuZ2luZV9jbGVhbnVwKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCSAqLwo+ICAKPiAgCWlmIChpOTE1LmVu YWJsZV9leGVjbGlzdHMpIHsKPiAtCQkvKiBFbnN1cmUgaXJxIGhhbmRsZXIgZmluaXNoZXMgb3Ig aXMgY2FuY2VsbGVkLiAqLwo+IC0JCXRhc2tsZXRfa2lsbCgmZW5naW5lLT5pcnFfdGFza2xldCk7 Cj4gLQo+IC0JCWludGVsX2V4ZWNsaXN0c19jYW5jZWxfcmVxdWVzdHMoZW5naW5lKTsKPiArCQlz cGluX2xvY2soJmVuZ2luZS0+ZXhlY2xpc3RfbG9jayk7Cj4gKwkJSU5JVF9MSVNUX0hFQUQoJmVu Z2luZS0+ZXhlY2xpc3RfcXVldWUpOwo+ICsJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KGVuZ2luZS0+ ZXhlY2xpc3RfcG9ydFswXS5yZXF1ZXN0KTsKPiArCQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChlbmdp bmUtPmV4ZWNsaXN0X3BvcnRbMV0ucmVxdWVzdCk7Cj4gKwkJbWVtc2V0KGVuZ2luZS0+ZXhlY2xp c3RfcG9ydCwgMCwgc2l6ZW9mKGVuZ2luZS0+ZXhlY2xpc3RfcG9ydCkpOwo+ICsJCXNwaW5fdW5s b2NrKCZlbmdpbmUtPmV4ZWNsaXN0X2xvY2spOwo+ICAJfQo+ICAKPiAgCS8qCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYwo+IGluZGV4IDljYzA4YTFlNDNjNi4uZWM2MTNm ZDVlMDFjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVl c3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYwo+IEBA IC00MDIsNyArNDAyLDYgQEAgaTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCj4gIAlyZXEtPnByZXZpb3VzX2NvbnRleHQgPSBOVUxMOwo+ICAJcmVx LT5maWxlX3ByaXYgPSBOVUxMOwo+ICAJcmVxLT5iYXRjaCA9IE5VTEw7Cj4gLQlyZXEtPmVsc3Bf c3VibWl0dGVkID0gMDsKPiAgCj4gIAkvKgo+ICAJICogUmVzZXJ2ZSBzcGFjZSBpbiB0aGUgcmlu ZyBidWZmZXIgZm9yIGFsbCB0aGUgY29tbWFuZHMgcmVxdWlyZWQgdG8KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oCj4gaW5kZXggMmZhYTNiYjRjMzliLi5hMjMxYmQzMThl ZjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oCj4gQEAgLTEz NywyNyArMTM3LDggQEAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0IHsKPiAgCS8qKiBmaWxl X3ByaXYgbGlzdCBlbnRyeSBmb3IgdGhpcyByZXF1ZXN0ICovCj4gIAlzdHJ1Y3QgbGlzdF9oZWFk IGNsaWVudF9saXN0Owo+ICAKPiAtCS8qKgo+IC0JICogVGhlIEVMU1Agb25seSBhY2NlcHRzIHR3 byBlbGVtZW50cyBhdCBhIHRpbWUsIHNvIHdlIHF1ZXVlCj4gLQkgKiBjb250ZXh0L3RhaWwgcGFp cnMgb24gYSBnaXZlbiBxdWV1ZSAocmluZy0+ZXhlY2xpc3RfcXVldWUpIHVudGlsIHRoZQo+IC0J ICogaGFyZHdhcmUgaXMgYXZhaWxhYmxlLiBUaGUgcXVldWUgc2VydmVzIGEgZG91YmxlIHB1cnBv c2U6IHdlIGFsc28gdXNlCj4gLQkgKiBpdCB0byBrZWVwIHRyYWNrIG9mIHRoZSB1cCB0byAyIGNv bnRleHRzIGN1cnJlbnRseSBpbiB0aGUgaGFyZHdhcmUKPiAtCSAqICh1c3VhbGx5IG9uZSBpbiBl eGVjdXRpb24gYW5kIHRoZSBvdGhlciBxdWV1ZWQgdXAgYnkgdGhlIEdQVSk6IFdlCj4gLQkgKiBv bmx5IHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSB3aGVuIHRoZSBo YXJkd2FyZQo+IC0JICogaW5mb3JtcyB1cyB0aGF0IGFuIGVsZW1lbnQgaGFzIGJlZW4gY29tcGxl dGVkLgo+IC0JICoKPiAtCSAqIEFsbCBhY2Nlc3NlcyB0byB0aGUgcXVldWUgYXJlIG1lZGlhdGVk IGJ5IGEgc3BpbmxvY2sKPiAtCSAqIChyaW5nLT5leGVjbGlzdF9sb2NrKS4KPiAtCSAqLwo+IC0K PiAtCS8qKiBFeGVjbGlzdCBsaW5rIGluIHRoZSBzdWJtaXNzaW9uIHF1ZXVlLiovCj4gKwkvKiog TGluayBpbiB0aGUgZXhlY2xpc3Qgc3VibWlzc2lvbiBxdWV1ZSwgZ3VhcmRlZCBieSBleGVjbGlz dF9sb2NrLiAqLwo+ICAJc3RydWN0IGxpc3RfaGVhZCBleGVjbGlzdF9saW5rOwo+IC0KPiAtCS8q KiBFeGVjbGlzdHMgbm8uIG9mIHRpbWVzIHRoaXMgcmVxdWVzdCBoYXMgYmVlbiBzZW50IHRvIHRo ZSBFTFNQICovCj4gLQlpbnQgZWxzcF9zdWJtaXR0ZWQ7Cj4gLQo+IC0JLyoqIEV4ZWNsaXN0cyBj b250ZXh0IGhhcmR3YXJlIGlkLiAqLwo+IC0JdW5zaWduZWQgaW50IGN0eF9od19pZDsKPiAgfTsK PiAgCj4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmVuY2Vfb3BzIGk5MTVfZmVuY2Vfb3BzOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gaW5kZXggZTljYjRhOTA2MDA5Li44NjRiNTI0ODI3OWEg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IEBAIC0xNTYsNiArMTU2LDExIEBACj4g ICNkZWZpbmUgR0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRFCSgxIDw8IDQpCj4gICNkZWZpbmUgR0VO OF9DVFhfU1RBVFVTX0xJVEVfUkVTVE9SRQkoMSA8PCAxNSkKPiAgCj4gKyNkZWZpbmUgR0VOOF9D VFhfU1RBVFVTX0NPTVBMRVRFRF9NQVNLIFwKPiArCSAoR0VOOF9DVFhfU1RBVFVTX0FDVElWRV9J RExFIHwgXAo+ICsJICBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEIHwgXAo+ICsJICBHRU44X0NU WF9TVEFUVVNfRUxFTUVOVF9TV0lUQ0gpCj4gKwo+ICAjZGVmaW5lIENUWF9MUklfSEVBREVSXzAJ CTB4MDEKPiAgI2RlZmluZSBDVFhfQ09OVEVYVF9DT05UUk9MCQkweDAyCj4gICNkZWZpbmUgQ1RY X1JJTkdfSEVBRAkJCTB4MDQKPiBAQCAtMjYzLDEyICsyNjgsMTAgQEAgbG9naWNhbF9yaW5nX2lu aXRfcGxhdGZvcm1faW52YXJpYW50cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g IHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsK PiAgCj4gLQlpZiAoSVNfR0VOOChkZXZfcHJpdikgfHwgSVNfR0VOOShkZXZfcHJpdikpCj4gLQkJ ZW5naW5lLT5pZGxlX2xpdGVfcmVzdG9yZV93YSA9IH4wOwo+IC0KPiAtCWVuZ2luZS0+ZGlzYWJs ZV9saXRlX3Jlc3RvcmVfd2EgPSAoSVNfU0tMX1JFVklEKGRldl9wcml2LCAwLCBTS0xfUkVWSURf QjApIHx8Cj4gLQkJCQkJSVNfQlhUX1JFVklEKGRldl9wcml2LCAwLCBCWFRfUkVWSURfQTEpKSAm Jgo+IC0JCQkJCShlbmdpbmUtPmlkID09IFZDUyB8fCBlbmdpbmUtPmlkID09IFZDUzIpOwo+ICsJ ZW5naW5lLT5kaXNhYmxlX2xpdGVfcmVzdG9yZV93YSA9Cj4gKwkJKElTX1NLTF9SRVZJRChkZXZf cHJpdiwgMCwgU0tMX1JFVklEX0IwKSB8fAo+ICsJCSBJU19CWFRfUkVWSUQoZGV2X3ByaXYsIDAs IEJYVF9SRVZJRF9BMSkpICYmCj4gKwkJKGVuZ2luZS0+aWQgPT0gVkNTIHx8IGVuZ2luZS0+aWQg PT0gVkNTMik7Cj4gIAo+ICAJZW5naW5lLT5jdHhfZGVzY190ZW1wbGF0ZSA9IEdFTjhfQ1RYX1ZB TElEOwo+ICAJaWYgKElTX0dFTjgoZGV2X3ByaXYpKQo+IEBAIC0zNTEsMTEgKzM1NCwxMSBAQCBl eGVjbGlzdHNfdXBkYXRlX2NvbnRleHRfcGRwcyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQs IHUzMiAqcmVnX3N0YXRlKQo+ICAJQVNTSUdOX0NUWF9QRFAocHBndHQsIHJlZ19zdGF0ZSwgMCk7 Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGV4ZWNsaXN0c191cGRhdGVfY29udGV4dChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICtzdGF0aWMgdTY0IGV4ZWNsaXN0c191cGRhdGVf Y29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICB7Cj4gLQlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBycS0+ZW5naW5lOwo+ICsJc3RydWN0IGludGVsX2Nv bnRleHQgKmNlID0gJnJxLT5jdHgtPmVuZ2luZVtycS0+ZW5naW5lLT5pZF07Cj4gIAlzdHJ1Y3Qg aTkxNV9od19wcGd0dCAqcHBndHQgPSBycS0+Y3R4LT5wcGd0dDsKPiAtCXVpbnQzMl90ICpyZWdf c3RhdGUgPSBycS0+Y3R4LT5lbmdpbmVbZW5naW5lLT5pZF0ubHJjX3JlZ19zdGF0ZTsKPiArCXUz MiAqcmVnX3N0YXRlID0gY2UtPmxyY19yZWdfc3RhdGU7Cj4gIAo+ICAJcmVnX3N0YXRlW0NUWF9S SU5HX1RBSUwrMV0gPSBpbnRlbF9yaW5nX29mZnNldChycS0+cmluZywgcnEtPnRhaWwpOwo+ICAK PiBAQCAtMzY2LDI2ICszNjksMzQgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX3VwZGF0ZV9jb250 ZXh0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gIAkgKi8KPiAgCWlmIChwcGd0 dCAmJiAhVVNFU19GVUxMXzQ4QklUX1BQR1RUKHBwZ3R0LT5iYXNlLmRldikpCj4gIAkJZXhlY2xp c3RzX3VwZGF0ZV9jb250ZXh0X3BkcHMocHBndHQsIHJlZ19zdGF0ZSk7Cj4gKwo+ICsJcmV0dXJu IGNlLT5scmNfZGVzYzsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgZXhlY2xpc3RzX2Vsc3Bfd3Jp dGUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTAsCj4gLQkJCQkgc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpycTEpCj4gK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXRfcG9y dHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gLQlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUgPSBycTAtPmVuZ2luZTsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHJxMC0+aTkxNTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiArCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0ID0g ZW5naW5lLT5leGVjbGlzdF9wb3J0Owo+ICAJdTMyIF9faW9tZW0gKmVsc3AgPQo+ICAJCWRldl9w cml2LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19FTFNQKGVuZ2luZSkpOwo+ICAJ dTY0IGRlc2NbMl07Cj4gIAo+IC0JaWYgKHJxMSkgewo+IC0JCWRlc2NbMV0gPSBpbnRlbF9scl9j b250ZXh0X2Rlc2NyaXB0b3IocnExLT5jdHgsIHJxMS0+ZW5naW5lKTsKPiAtCQlycTEtPmVsc3Bf c3VibWl0dGVkKys7Cj4gKwlpZiAoIXBvcnRbMF0uY291bnQpCj4gKwkJZXhlY2xpc3RzX2NvbnRl eHRfc3RhdHVzX2NoYW5nZShwb3J0WzBdLnJlcXVlc3QsCj4gKwkJCQkJCUlOVEVMX0NPTlRFWFRf U0NIRURVTEVfSU4pOwo+ICsJZGVzY1swXSA9IGV4ZWNsaXN0c191cGRhdGVfY29udGV4dChwb3J0 WzBdLnJlcXVlc3QpOwo+ICsJZW5naW5lLT5wcmVlbXB0X3dhID0gcG9ydFswXS5jb3VudCsrOyAv KiBiZHcgb25seT8gZml4ZWQgb24gc2tsPyAqLwo+ICsKCkV4cGVyaW1lbnRzIHNob3cgdGhhdCB3 ZSBuZWVkIHRoaXMgb24gZ2VuOSBhbHNvLCBldmVuIHRobyBzb21lCmRvY3VtZW50YXRpb24gc3Vn Z2VzdCB0aGF0IHdlIGRvbid0LgoKVGhpcyBvbmUgcGF0Y2ggdG9vayBhIGxvdCBvZiBjb2ZmZWUu CgpSZXZpZXdlZC1ieTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5jb20+Cgo+ ICsJaWYgKHBvcnRbMV0ucmVxdWVzdCkgewo+ICsJCUdFTV9CVUdfT04ocG9ydFsxXS5jb3VudCk7 Cj4gKwkJZXhlY2xpc3RzX2NvbnRleHRfc3RhdHVzX2NoYW5nZShwb3J0WzFdLnJlcXVlc3QsCj4g KwkJCQkJCUlOVEVMX0NPTlRFWFRfU0NIRURVTEVfSU4pOwo+ICsJCWRlc2NbMV0gPSBleGVjbGlz dHNfdXBkYXRlX2NvbnRleHQocG9ydFsxXS5yZXF1ZXN0KTsKPiArCQlwb3J0WzFdLmNvdW50ID0g MTsKPiAgCX0gZWxzZSB7Cj4gIAkJZGVzY1sxXSA9IDA7Cj4gIAl9Cj4gLQo+IC0JZGVzY1swXSA9 IGludGVsX2xyX2NvbnRleHRfZGVzY3JpcHRvcihycTAtPmN0eCwgcnEwLT5lbmdpbmUpOwo+IC0J cnEwLT5lbHNwX3N1Ym1pdHRlZCsrOwo+ICsJR0VNX0JVR19PTihkZXNjWzBdID09IGRlc2NbMV0p Owo+ICAKPiAgCS8qIFlvdSBtdXN0IGFsd2F5cyB3cml0ZSBib3RoIGRlc2NyaXB0b3JzIGluIHRo ZSBvcmRlciBiZWxvdy4gKi8KPiAgCXdyaXRlbCh1cHBlcl8zMl9iaXRzKGRlc2NbMV0pLCBlbHNw KTsKPiBAQCAtMzk2LDE0MSArNDA3LDEyNSBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZWxzcF93 cml0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxMCwKPiAgCXdyaXRlbChsb3dlcl8z Ml9iaXRzKGRlc2NbMF0pLCBlbHNwKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgZXhlY2xpc3Rz X2Vsc3Bfc3VibWl0X2NvbnRleHRzKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEwLAo+ IC0JCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnExKQo+ICtzdGF0aWMgYm9v bCBjdHhfc2luZ2xlX3BvcnRfc3VibWlzc2lvbihjb25zdCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4 dCAqY3R4KQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBycTAt Pmk5MTU7Cj4gLQl1bnNpZ25lZCBpbnQgZndfZG9tYWlucyA9IHJxMC0+ZW5naW5lLT5md19kb21h aW5zOwo+IC0KPiAtCWV4ZWNsaXN0c191cGRhdGVfY29udGV4dChycTApOwo+IC0KPiAtCWlmIChy cTEpCj4gLQkJZXhlY2xpc3RzX3VwZGF0ZV9jb250ZXh0KHJxMSk7Cj4gKwlyZXR1cm4gKElTX0VO QUJMRUQoQ09ORklHX0RSTV9JOTE1X0dWVCkgJiYKPiArCQljdHgtPmV4ZWNsaXN0c19mb3JjZV9z aW5nbGVfc3VibWlzc2lvbik7Cj4gK30KPiAgCj4gLQlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+ dW5jb3JlLmxvY2spOwo+IC0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXRfX2xvY2tlZChkZXZf cHJpdiwgZndfZG9tYWlucyk7Cj4gK3N0YXRpYyBib29sIGNhbl9tZXJnZV9jdHgoY29uc3Qgc3Ry dWN0IGk5MTVfZ2VtX2NvbnRleHQgKnByZXYsCj4gKwkJCSAgY29uc3Qgc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKm5leHQpCj4gK3sKPiArCWlmIChwcmV2ICE9IG5leHQpCj4gKwkJcmV0dXJuIGZh bHNlOwo+ICAKPiAtCWV4ZWNsaXN0c19lbHNwX3dyaXRlKHJxMCwgcnExKTsKPiArCWlmIChjdHhf c2luZ2xlX3BvcnRfc3VibWlzc2lvbihwcmV2KSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gIAo+IC0J aW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXRfX2xvY2tlZChkZXZfcHJpdiwgZndfZG9tYWlucyk7 Cj4gLQlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT51bmNvcmUubG9jayk7Cj4gKwlyZXR1cm4g dHJ1ZTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgZXhlY2xpc3RzX3VucXVldWUoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICtzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxMCA9IE5VTEwsICpyZXExID0gTlVMTDsKPiAtCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqY3Vyc29yLCAqdG1wOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpjdXJzb3IsICpsYXN0Owo+ICsJc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQgPSBlbmdp bmUtPmV4ZWNsaXN0X3BvcnQ7Cj4gKwlib29sIHN1Ym1pdCA9IGZhbHNlOwo+ICsKPiArCWxhc3Qg PSBwb3J0LT5yZXF1ZXN0Owo+ICsJaWYgKGxhc3QpCj4gKwkJLyogV2FJZGxlTGl0ZVJlc3RvcmU6 YmR3LHNrbAo+ICsJCSAqIEFwcGx5IHRoZSB3YSBOT09QcyB0byBwcmV2ZW50IHJpbmc6SEVBRCA9 PSByZXE6VEFJTAo+ICsJCSAqIGFzIHdlIHJlc3VibWl0IHRoZSByZXF1ZXN0LiBTZWUgZ2VuOF9l bWl0X3JlcXVlc3QoKQo+ICsJCSAqIGZvciB3aGVyZSB3ZSBwcmVwYXJlIHRoZSBwYWRkaW5nIGFm dGVyIHRoZSBlbmQgb2YgdGhlCj4gKwkJICogcmVxdWVzdC4KPiArCQkgKi8KPiArCQlsYXN0LT50 YWlsID0gbGFzdC0+d2FfdGFpbDsKPiAgCj4gLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmVuZ2luZS0+ ZXhlY2xpc3RfbG9jayk7Cj4gKwlHRU1fQlVHX09OKHBvcnRbMV0ucmVxdWVzdCk7Cj4gIAo+IC0J LyoKPiAtCSAqIElmIGlycXMgYXJlIG5vdCBhY3RpdmUgZ2VuZXJhdGUgYSB3YXJuaW5nIGFzIGJh dGNoZXMgdGhhdCBmaW5pc2gKPiAtCSAqIHdpdGhvdXQgdGhlIGlycXMgbWF5IGdldCBsb3N0IGFu ZCBhIEdQVSBIYW5nIG1heSBvY2N1ci4KPiArCS8qIEhhcmR3YXJlIHN1Ym1pc3Npb24gaXMgdGhy b3VnaCAyIHBvcnRzLiBDb25jZXB0dWFsbHkgZWFjaCBwb3J0Cj4gKwkgKiBoYXMgYSAoUklOR19T VEFSVCwgUklOR19IRUFELCBSSU5HX1RBSUwpIHR1cGxlLiBSSU5HX1NUQVJUIGlzCj4gKwkgKiBz dGF0aWMgZm9yIGEgY29udGV4dCwgYW5kIHVuaXF1ZSB0byBlYWNoLCBzbyB3ZSBvbmx5IGV4ZWN1 dGUKPiArCSAqIHJlcXVlc3RzIGJlbG9uZ2luZyB0byBhIHNpbmdsZSBjb250ZXh0IGZyb20gZWFj aCByaW5nLiBSSU5HX0hFQUQKPiArCSAqIGlzIG1haW50YWluZWQgYnkgdGhlIENTIGluIHRoZSBj b250ZXh0IGltYWdlLCBpdCBtYXJrcyB0aGUgcGxhY2UKPiArCSAqIHdoZXJlIGl0IGdvdCB1cCB0 byBsYXN0IHRpbWUsIGFuZCB0aHJvdWdoIFJJTkdfVEFJTCB3ZSB0ZWxsIHRoZSBDUwo+ICsJICog d2hlcmUgd2Ugd2FudCB0byBleGVjdXRlIHVwIHRvIHRoaXMgdGltZS4KPiArCSAqCj4gKwkgKiBJ biB0aGlzIGxpc3QgdGhlIHJlcXVlc3RzIGFyZSBpbiBvcmRlciBvZiBleGVjdXRpb24uIENvbnNl Y3V0aXZlCj4gKwkgKiByZXF1ZXN0cyBmcm9tIHRoZSBzYW1lIGNvbnRleHQgYXJlIGFkamFjZW50 IGluIHRoZSByaW5nYnVmZmVyLiBXZQo+ICsJICogY2FuIGNvbWJpbmUgdGhlc2UgcmVxdWVzdHMg aW50byBhIHNpbmdsZSBSSU5HX1RBSUwgdXBkYXRlOgo+ICsJICoKPiArCSAqICAgICAgICAgICAg ICBSSU5HX0hFQUQuLi5yZXExLi4ucmVxMgo+ICsJICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeLSBSSU5HX1RBSUwKPiArCSAqIHNpbmNlIHRvIGV4ZWN1dGUgcmVxMiB0aGUg Q1MgbXVzdCBmaXJzdCBleGVjdXRlIHJlcTEuCj4gKwkgKgo+ICsJICogT3VyIGdvYWwgdGhlbiBp cyB0byBwb2ludCBlYWNoIHBvcnQgdG8gdGhlIGVuZCBvZiBhIGNvbnNlY3V0aXZlCj4gKwkgKiBz ZXF1ZW5jZSBvZiByZXF1ZXN0cyBhcyBiZWluZyB0aGUgbW9zdCBvcHRpbWFsIChmZXdlc3Qgd2Fr ZSB1cHMKPiArCSAqIGFuZCBjb250ZXh0IHN3aXRjaGVzKSBzdWJtaXNzaW9uLgo+ICAJICovCj4g LQlXQVJOX09OKCFpbnRlbF9pcnFzX2VuYWJsZWQoZW5naW5lLT5pOTE1KSk7Cj4gLQo+IC0JLyog VHJ5IHRvIHJlYWQgaW4gcGFpcnMgKi8KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXJz b3IsIHRtcCwgJmVuZ2luZS0+ZXhlY2xpc3RfcXVldWUsCj4gLQkJCQkgZXhlY2xpc3RfbGluaykg ewo+IC0JCWlmICghcmVxMCkgewo+IC0JCQlyZXEwID0gY3Vyc29yOwo+IC0JCX0gZWxzZSBpZiAo cmVxMC0+Y3R4ID09IGN1cnNvci0+Y3R4KSB7Cj4gLQkJCS8qIFNhbWUgY3R4OiBpZ25vcmUgZmly c3QgcmVxdWVzdCwgYXMgc2Vjb25kIHJlcXVlc3QKPiAtCQkJICogd2lsbCB1cGRhdGUgdGFpbCBw YXN0IGZpcnN0IHJlcXVlc3QncyB3b3JrbG9hZCAqLwo+IC0JCQljdXJzb3ItPmVsc3Bfc3VibWl0 dGVkID0gcmVxMC0+ZWxzcF9zdWJtaXR0ZWQ7Cj4gLQkJCWxpc3RfZGVsKCZyZXEwLT5leGVjbGlz dF9saW5rKTsKPiAtCQkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocmVxMCk7Cj4gLQkJCXJlcTAgPSBj dXJzb3I7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1 X0dWVCkpIHsKPiAtCQkJCS8qCj4gLQkJCQkgKiByZXEwIChhZnRlciBtZXJnZWQpIGN0eCByZXF1 aXJlcyBzaW5nbGUKPiAtCQkJCSAqIHN1Ym1pc3Npb24sIHN0b3AgcGlja2luZwo+IC0JCQkJICov Cj4gLQkJCQlpZiAocmVxMC0+Y3R4LT5leGVjbGlzdHNfZm9yY2Vfc2luZ2xlX3N1Ym1pc3Npb24p Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQkvKgo+IC0JCQkJICogcmVxMCBjdHggZG9lc24ndCByZXF1 aXJlIHNpbmdsZSBzdWJtaXNzaW9uLAo+IC0JCQkJICogYnV0IG5leHQgcmVxIGN0eCByZXF1aXJl cywgc3RvcCBwaWNraW5nCj4gLQkJCQkgKi8KPiAtCQkJCWlmIChjdXJzb3ItPmN0eC0+ZXhlY2xp c3RzX2ZvcmNlX3NpbmdsZV9zdWJtaXNzaW9uKQo+IC0JCQkJCWJyZWFrOwo+IC0JCQl9Cj4gLQkJ CXJlcTEgPSBjdXJzb3I7Cj4gLQkJCVdBUk5fT04ocmVxMS0+ZWxzcF9zdWJtaXR0ZWQpOwo+IC0J CQlicmVhazsKPiAtCQl9Cj4gLQl9Cj4gIAo+IC0JaWYgKHVubGlrZWx5KCFyZXEwKSkKPiAtCQly ZXR1cm47Cj4gLQo+IC0JZXhlY2xpc3RzX2NvbnRleHRfc3RhdHVzX2NoYW5nZShyZXEwLCBJTlRF TF9DT05URVhUX1NDSEVEVUxFX0lOKTsKPiAtCj4gLQlpZiAocmVxMSkKPiAtCQlleGVjbGlzdHNf Y29udGV4dF9zdGF0dXNfY2hhbmdlKHJlcTEsCj4gLQkJCQkJCUlOVEVMX0NPTlRFWFRfU0NIRURV TEVfSU4pOwo+IC0KPiAtCWlmIChyZXEwLT5lbHNwX3N1Ym1pdHRlZCAmIGVuZ2luZS0+aWRsZV9s aXRlX3Jlc3RvcmVfd2EpIHsKPiAtCQkvKgo+IC0JCSAqIFdhSWRsZUxpdGVSZXN0b3JlOiBtYWtl IHN1cmUgd2UgbmV2ZXIgY2F1c2UgYSBsaXRlIHJlc3RvcmUKPiAtCQkgKiB3aXRoIEhFQUQ9PVRB SUwuCj4gKwlzcGluX2xvY2soJmVuZ2luZS0+ZXhlY2xpc3RfbG9jayk7Cj4gKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KGN1cnNvciwgJmVuZ2luZS0+ZXhlY2xpc3RfcXVldWUsIGV4ZWNsaXN0X2xpbmsp IHsKPiArCQkvKiBDYW4gd2UgY29tYmluZSB0aGlzIHJlcXVlc3Qgd2l0aCB0aGUgY3VycmVudCBw b3J0PyBJdCBoYXMgdG8KPiArCQkgKiBiZSB0aGUgc2FtZSBjb250ZXh0L3JpbmdidWZmZXIgYW5k IG5vdCBoYXZlIGFueSBleGNlcHRpb25zCj4gKwkJICogKGUuZy4gR1ZUIHNheWluZyBuZXZlciB0 byBjb21iaW5lIGNvbnRleHRzKS4KPiAgCQkgKgo+IC0JCSAqIEFwcGx5IHRoZSB3YSBOT09QUyB0 byBwcmV2ZW50IHJpbmc6SEVBRCA9PSByZXE6VEFJTCBhcyB3ZQo+IC0JCSAqIHJlc3VibWl0IHRo ZSByZXF1ZXN0LiBTZWUgZ2VuOF9lbWl0X3JlcXVlc3QoKSBmb3Igd2hlcmUgd2UKPiAtCQkgKiBw cmVwYXJlIHRoZSBwYWRkaW5nIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHJlcXVlc3QuCj4gKwkJICog SWYgd2UgY2FuIGNvbWJpbmUgdGhlIHJlcXVlc3RzLCB3ZSBjYW4gZXhlY3V0ZSBib3RoIGJ5Cj4g KwkJICogdXBkYXRpbmcgdGhlIFJJTkdfVEFJTCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBz ZWNvbmQKPiArCQkgKiByZXF1ZXN0LCBhbmQgc28gd2UgbmV2ZXIgbmVlZCB0byB0ZWxsIHRoZSBo YXJkd2FyZSBhYm91dAo+ICsJCSAqIHRoZSBmaXJzdC4KPiAgCQkgKi8KPiAtCQlyZXEwLT50YWls ID0gcmVxMC0+d2FfdGFpbDsKPiArCQlpZiAobGFzdCAmJiAhY2FuX21lcmdlX2N0eChjdXJzb3It PmN0eCwgbGFzdC0+Y3R4KSkgewo+ICsJCQkvKiBJZiB3ZSBhcmUgb24gdGhlIHNlY29uZCBwb3J0 IGFuZCBjYW5ub3QgY29tYmluZQo+ICsJCQkgKiB0aGlzIHJlcXVlc3Qgd2l0aCB0aGUgbGFzdCwg dGhlbiB3ZSBhcmUgZG9uZS4KPiArCQkJICovCj4gKwkJCWlmIChwb3J0ICE9IGVuZ2luZS0+ZXhl Y2xpc3RfcG9ydCkKPiArCQkJCWJyZWFrOwo+ICsKPiArCQkJLyogSWYgR1ZUIG92ZXJyaWRlcyB1 cyB3ZSBvbmx5IGV2ZXIgc3VibWl0IHBvcnRbMF0sCj4gKwkJCSAqIGxlYXZpbmcgcG9ydFsxXSBl bXB0eS4gTm90ZSB0aGF0IHdlIGFsc28gaGF2ZQo+ICsJCQkgKiB0byBiZSBjYXJlZnVsIHRoYXQg d2UgZG9uJ3QgcXVldWUgdGhlIHNhbWUKPiArCQkJICogY29udGV4dCAoZXZlbiB0aG91Z2ggYSBk aWZmZXJlbnQgcmVxdWVzdCkgdG8KPiArCQkJICogdGhlIHNlY29uZCBwb3J0Lgo+ICsJCQkgKi8K PiArCQkJaWYgKGN0eF9zaW5nbGVfcG9ydF9zdWJtaXNzaW9uKGN1cnNvci0+Y3R4KSkKPiArCQkJ CWJyZWFrOwo+ICsKPiArCQkJR0VNX0JVR19PTihsYXN0LT5jdHggPT0gY3Vyc29yLT5jdHgpOwo+ ICsKPiArCQkJaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oJnBvcnQtPnJlcXVlc3QsIGxhc3QpOwo+ ICsJCQlwb3J0Kys7Cj4gKwkJfQo+ICsJCWxhc3QgPSBjdXJzb3I7Cj4gKwkJc3VibWl0ID0gdHJ1 ZTsKPiArCX0KPiArCWlmIChzdWJtaXQpIHsKPiArCQkvKiBEZWNvdXBsZSBhbGwgdGhlIHJlcXVl c3RzIHN1Ym1pdHRlZCBmcm9tIHRoZSBxdWV1ZSAqLwo+ICsJCWVuZ2luZS0+ZXhlY2xpc3RfcXVl dWUubmV4dCA9ICZjdXJzb3ItPmV4ZWNsaXN0X2xpbms7Cj4gKwkJY3Vyc29yLT5leGVjbGlzdF9s aW5rLnByZXYgPSAmZW5naW5lLT5leGVjbGlzdF9xdWV1ZTsKPiArCj4gKwkJaTkxNV9nZW1fcmVx dWVzdF9hc3NpZ24oJnBvcnQtPnJlcXVlc3QsIGxhc3QpOwo+ICAJfQo+ICsJc3Bpbl91bmxvY2so JmVuZ2luZS0+ZXhlY2xpc3RfbG9jayk7Cj4gIAo+IC0JZXhlY2xpc3RzX2Vsc3Bfc3VibWl0X2Nv bnRleHRzKHJlcTAsIHJlcTEpOwo+ICsJaWYgKHN1Ym1pdCkKPiArCQlleGVjbGlzdHNfc3VibWl0 X3BvcnRzKGVuZ2luZSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQKPiAtZXhlY2xp c3RzX2NoZWNrX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwg dTMyIGN0eF9pZCkKPiArc3RhdGljIGJvb2wgZXhlY2xpc3RzX2Vsc3BfaWRsZShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqaGVhZF9yZXE7Cj4gLQo+IC0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZlbmdpbmUtPmV4ZWNsaXN0 X2xvY2spOwo+IC0KPiAtCWhlYWRfcmVxID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZlbmdp bmUtPmV4ZWNsaXN0X3F1ZXVlLAo+IC0JCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QsCj4gLQkJCQkJICAgIGV4ZWNsaXN0X2xpbmspOwo+IC0KPiAtCWlmIChXQVJOX09OKCFoZWFk X3JlcSB8fCAoaGVhZF9yZXEtPmN0eF9od19pZCAhPSBjdHhfaWQpKSkKPiAtICAgICAgICAgICAg ICAgcmV0dXJuIDA7Cj4gLQo+IC0JV0FSTihoZWFkX3JlcS0+ZWxzcF9zdWJtaXR0ZWQgPT0gMCwg Ik5ldmVyIHN1Ym1pdHRlZCBoZWFkIHJlcXVlc3RcbiIpOwo+IC0KPiAtCWlmICgtLWhlYWRfcmVx LT5lbHNwX3N1Ym1pdHRlZCA+IDApCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JZXhlY2xpc3RzX2Nv bnRleHRfc3RhdHVzX2NoYW5nZShoZWFkX3JlcSwgSU5URUxfQ09OVEVYVF9TQ0hFRFVMRV9PVVQp Owo+IC0KPiAtCWxpc3RfZGVsKCZoZWFkX3JlcS0+ZXhlY2xpc3RfbGluayk7Cj4gLQlpOTE1X2dl bV9yZXF1ZXN0X3B1dChoZWFkX3JlcSk7Cj4gLQo+IC0JcmV0dXJuIDE7Cj4gKwlyZXR1cm4gIWVu Z2luZS0+ZXhlY2xpc3RfcG9ydFswXS5yZXF1ZXN0Owo+ICB9Cj4gIAo+IC1zdGF0aWMgdTMyCj4g LWdldF9jb250ZXh0X3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHVuc2ln bmVkIGludCByZWFkX3BvaW50ZXIsCj4gLQkJICAgdTMyICpjb250ZXh0X2lkKQo+ICtzdGF0aWMg Ym9vbCBleGVjbGlzdHNfZWxzcF9yZWFkeShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkx NTsKPiAtCXUzMiBzdGF0dXM7Cj4gLQo+IC0JcmVhZF9wb2ludGVyICU9IEdFTjhfQ1NCX0VOVFJJ RVM7Cj4gLQo+IC0Jc3RhdHVzID0gSTkxNV9SRUFEX0ZXKFJJTkdfQ09OVEVYVF9TVEFUVVNfQlVG X0xPKGVuZ2luZSwgcmVhZF9wb2ludGVyKSk7Cj4gLQo+IC0JaWYgKHN0YXR1cyAmIEdFTjhfQ1RY X1NUQVRVU19JRExFX0FDVElWRSkKPiAtCQlyZXR1cm4gMDsKPiArCWludCBwb3J0Owo+ICAKPiAt CSpjb250ZXh0X2lkID0gSTkxNV9SRUFEX0ZXKFJJTkdfQ09OVEVYVF9TVEFUVVNfQlVGX0hJKGVu Z2luZSwKPiAtCQkJCQkJCSAgICAgIHJlYWRfcG9pbnRlcikpOwo+ICsJcG9ydCA9IDE7IC8qIHdh aXQgZm9yIGEgZnJlZSBzbG90ICovCj4gKwlpZiAoZW5naW5lLT5kaXNhYmxlX2xpdGVfcmVzdG9y ZV93YSB8fCBlbmdpbmUtPnByZWVtcHRfd2EpCj4gKwkJcG9ydCA9IDA7IC8qIHdhaXQgZm9yIEdQ VSB0byBiZSBpZGxlIGJlZm9yZSBjb250aW51aW5nICovCj4gIAo+IC0JcmV0dXJuIHN0YXR1czsK PiArCXJldHVybiAhZW5naW5lLT5leGVjbGlzdF9wb3J0W3BvcnRdLnJlcXVlc3Q7Cj4gIH0KPiAg Cj4gIC8qCj4gQEAgLTU0MCw2NyArNTM1LDU2IEBAIGdldF9jb250ZXh0X3N0YXR1cyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHVuc2lnbmVkIGludCByZWFkX3BvaW50ZXIsCj4gIHN0 YXRpYyB2b2lkIGludGVsX2xyY19pcnFfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCj4gIHsK PiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICopZGF0YTsKPiArCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0ID0gZW5naW5lLT5leGVj bGlzdF9wb3J0Owo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5l LT5pOTE1Owo+IC0JdTMyIHN0YXR1c19wb2ludGVyOwo+IC0JdW5zaWduZWQgaW50IHJlYWRfcG9p bnRlciwgd3JpdGVfcG9pbnRlcjsKPiAtCXUzMiBjc2JbR0VOOF9DU0JfRU5UUklFU11bMl07Cj4g LQl1bnNpZ25lZCBpbnQgY3NiX3JlYWQgPSAwLCBpOwo+IC0JdW5zaWduZWQgaW50IHN1Ym1pdF9j b250ZXh0cyA9IDA7Cj4gIAo+ICAJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2X3ByaXYs IGVuZ2luZS0+ZndfZG9tYWlucyk7Cj4gIAo+IC0Jc3RhdHVzX3BvaW50ZXIgPSBJOTE1X1JFQURf RlcoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSk7Cj4gLQo+IC0JcmVhZF9wb2ludGVy ID0gZW5naW5lLT5uZXh0X2NvbnRleHRfc3RhdHVzX2J1ZmZlcjsKPiAtCXdyaXRlX3BvaW50ZXIg PSBHRU44X0NTQl9XUklURV9QVFIoc3RhdHVzX3BvaW50ZXIpOwo+IC0JaWYgKHJlYWRfcG9pbnRl ciA+IHdyaXRlX3BvaW50ZXIpCj4gLQkJd3JpdGVfcG9pbnRlciArPSBHRU44X0NTQl9FTlRSSUVT Owo+IC0KPiAtCXdoaWxlIChyZWFkX3BvaW50ZXIgPCB3cml0ZV9wb2ludGVyKSB7Cj4gLQkJaWYg KFdBUk5fT05fT05DRShjc2JfcmVhZCA9PSBHRU44X0NTQl9FTlRSSUVTKSkKPiAtCQkJYnJlYWs7 Cj4gLQkJY3NiW2NzYl9yZWFkXVswXSA9IGdldF9jb250ZXh0X3N0YXR1cyhlbmdpbmUsICsrcmVh ZF9wb2ludGVyLAo+IC0JCQkJCQkgICAgICAmY3NiW2NzYl9yZWFkXVsxXSk7Cj4gLQkJY3NiX3Jl YWQrKzsKPiAtCX0KPiAtCj4gLQllbmdpbmUtPm5leHRfY29udGV4dF9zdGF0dXNfYnVmZmVyID0g d3JpdGVfcG9pbnRlciAlIEdFTjhfQ1NCX0VOVFJJRVM7Cj4gLQo+IC0JLyogVXBkYXRlIHRoZSBy ZWFkIHBvaW50ZXIgdG8gdGhlIG9sZCB3cml0ZSBwb2ludGVyLiBNYW51YWwgcmluZ2J1ZmZlcgo+ IC0JICogbWFuYWdlbWVudCBmdHcgPC9zYXJjYXNtPiAqLwo+IC0JSTkxNV9XUklURV9GVyhSSU5H X0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpLAo+IC0JCSAgICAgIF9NQVNLRURfRklFTEQoR0VO OF9DU0JfUkVBRF9QVFJfTUFTSywKPiAtCQkJCSAgICBlbmdpbmUtPm5leHRfY29udGV4dF9zdGF0 dXNfYnVmZmVyIDw8IDgpKTsKPiAtCj4gLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZf cHJpdiwgZW5naW5lLT5md19kb21haW5zKTsKPiAtCj4gLQlzcGluX2xvY2soJmVuZ2luZS0+ZXhl Y2xpc3RfbG9jayk7Cj4gKwlpZiAoIWV4ZWNsaXN0c19lbHNwX2lkbGUoZW5naW5lKSkgewo+ICsJ CXUzMiBfX2lvbWVtICpjc2JfbW1pbyA9Cj4gKwkJCWRldl9wcml2LT5yZWdzICsgaTkxNV9tbWlv X3JlZ19vZmZzZXQoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSk7Cj4gKwkJdTMyIF9f aW9tZW0gKmJ1ZiA9Cj4gKwkJCWRldl9wcml2LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQo UklOR19DT05URVhUX1NUQVRVU19CVUZfTE8oZW5naW5lLCAwKSk7Cj4gKwkJdW5zaWduZWQgaW50 IGNzYiwgaGVhZCwgdGFpbDsKPiArCj4gKwkJY3NiID0gcmVhZGwoY3NiX21taW8pOwo+ICsJCWhl YWQgPSBHRU44X0NTQl9SRUFEX1BUUihjc2IpOwo+ICsJCXRhaWwgPSBHRU44X0NTQl9XUklURV9Q VFIoY3NiKTsKPiArCQlpZiAodGFpbCA8IGhlYWQpCj4gKwkJCXRhaWwgKz0gR0VOOF9DU0JfRU5U UklFUzsKPiArCQl3aGlsZSAoaGVhZCA8IHRhaWwpIHsKPiArCQkJdW5zaWduZWQgaW50IGlkeCA9 ICsraGVhZCAlIEdFTjhfQ1NCX0VOVFJJRVM7Cj4gKwkJCXVuc2lnbmVkIGludCBzdGF0dXMgPSBy ZWFkbChidWYgKyAyICogaWR4KTsKPiArCj4gKwkJCWlmICghKHN0YXR1cyAmIEdFTjhfQ1RYX1NU QVRVU19DT01QTEVURURfTUFTSykpCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCUdFTV9CVUdf T04ocG9ydFswXS5jb3VudCA9PSAwKTsKPiArCQkJaWYgKC0tcG9ydFswXS5jb3VudCA9PSAwKSB7 Cj4gKwkJCQlHRU1fQlVHX09OKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19QUkVFTVBURUQpOwo+ ICsJCQkJZXhlY2xpc3RzX2NvbnRleHRfc3RhdHVzX2NoYW5nZShwb3J0WzBdLnJlcXVlc3QsCj4g KwkJCQkJCQkJSU5URUxfQ09OVEVYVF9TQ0hFRFVMRV9PVVQpOwo+ICsKPiArCQkJCWk5MTVfZ2Vt X3JlcXVlc3RfcHV0KHBvcnRbMF0ucmVxdWVzdCk7Cj4gKwkJCQlwb3J0WzBdID0gcG9ydFsxXTsK PiArCQkJCW1lbXNldCgmcG9ydFsxXSwgMCwgc2l6ZW9mKHBvcnRbMV0pKTsKPiArCj4gKwkJCQll bmdpbmUtPnByZWVtcHRfd2EgPSBmYWxzZTsKPiArCQkJfQo+ICAKPiAtCWZvciAoaSA9IDA7IGkg PCBjc2JfcmVhZDsgaSsrKSB7Cj4gLQkJaWYgKHVubGlrZWx5KGNzYltpXVswXSAmIEdFTjhfQ1RY X1NUQVRVU19QUkVFTVBURUQpKSB7Cj4gLQkJCWlmIChjc2JbaV1bMF0gJiBHRU44X0NUWF9TVEFU VVNfTElURV9SRVNUT1JFKSB7Cj4gLQkJCQlpZiAoZXhlY2xpc3RzX2NoZWNrX3JlbW92ZV9yZXF1 ZXN0KGVuZ2luZSwgY3NiW2ldWzFdKSkKPiAtCQkJCQlXQVJOKDEsICJMaXRlIFJlc3RvcmVkIHJl cXVlc3QgcmVtb3ZlZCBmcm9tIHF1ZXVlXG4iKTsKPiAtCQkJfSBlbHNlCj4gLQkJCQlXQVJOKDEs ICJQcmVlbXB0aW9uIHdpdGhvdXQgTGl0ZSBSZXN0b3JlXG4iKTsKPiArCQkJR0VNX0JVR19PTihw b3J0WzBdLmNvdW50ID09IDAgJiYKPiArCQkJCSAgICEoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVT X0FDVElWRV9JRExFKSk7Cj4gIAkJfQo+ICAKPiAtCQlpZiAoY3NiW2ldWzBdICYgKEdFTjhfQ1RY X1NUQVRVU19BQ1RJVkVfSURMRSB8Cj4gLQkJICAgIEdFTjhfQ1RYX1NUQVRVU19FTEVNRU5UX1NX SVRDSCkpCj4gLQkJCXN1Ym1pdF9jb250ZXh0cyArPQo+IC0JCQkJZXhlY2xpc3RzX2NoZWNrX3Jl bW92ZV9yZXF1ZXN0KGVuZ2luZSwgY3NiW2ldWzFdKTsKPiArCQl3cml0ZWwoX01BU0tFRF9GSUVM RChHRU44X0NTQl9SRUFEX1BUUl9NQVNLLAo+ICsJCQkJICAgICBHRU44X0NTQl9XUklURV9QVFIo Y3NiKSA8PCA4KSwKPiArCQkgICAgICAgY3NiX21taW8pOwo+ICAJfQo+ICAKPiAtCWlmIChzdWJt aXRfY29udGV4dHMpIHsKPiAtCQlpZiAoIWVuZ2luZS0+ZGlzYWJsZV9saXRlX3Jlc3RvcmVfd2Eg fHwKPiAtCQkgICAgKGNzYltpXVswXSAmIEdFTjhfQ1RYX1NUQVRVU19BQ1RJVkVfSURMRSkpCj4g LQkJCWV4ZWNsaXN0c191bnF1ZXVlKGVuZ2luZSk7Cj4gLQl9Cj4gKwlpZiAoZXhlY2xpc3RzX2Vs c3BfcmVhZHkoZW5naW5lKSkKPiArCQlleGVjbGlzdHNfZGVxdWV1ZShlbmdpbmUpOwo+ICAKPiAt CXNwaW5fdW5sb2NrKCZlbmdpbmUtPmV4ZWNsaXN0X2xvY2spOwo+IC0KPiAtCWlmICh1bmxpa2Vs eShzdWJtaXRfY29udGV4dHMgPiAyKSkKPiAtCQlEUk1fRVJST1IoIk1vcmUgdGhhbiB0d28gY29u dGV4dCBjb21wbGV0ZSBldmVudHM/XG4iKTsKPiArCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0 KGRldl9wcml2LCBlbmdpbmUtPmZ3X2RvbWFpbnMpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBl eGVjbGlzdHNfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1 ZXN0KQo+IEBAIC02MDksMTIgKzU5Myw5IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXRf cmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCj4gIAo+ICAJc3Bp bl9sb2NrX2JoKCZlbmdpbmUtPmV4ZWNsaXN0X2xvY2spOwo+ICAKPiAtCWk5MTVfZ2VtX3JlcXVl c3RfZ2V0KHJlcXVlc3QpOwo+IC0JcmVxdWVzdC0+Y3R4X2h3X2lkID0gcmVxdWVzdC0+Y3R4LT5o d19pZDsKPiAtCj4gLQlpZiAobGlzdF9lbXB0eSgmZW5naW5lLT5leGVjbGlzdF9xdWV1ZSkpCj4g LQkJdGFza2xldF9oaV9zY2hlZHVsZSgmZW5naW5lLT5pcnFfdGFza2xldCk7Cj4gIAlsaXN0X2Fk ZF90YWlsKCZyZXF1ZXN0LT5leGVjbGlzdF9saW5rLCAmZW5naW5lLT5leGVjbGlzdF9xdWV1ZSk7 Cj4gKwlpZiAoZXhlY2xpc3RzX2Vsc3BfaWRsZShlbmdpbmUpKQo+ICsJCXRhc2tsZXRfaGlfc2No ZWR1bGUoJmVuZ2luZS0+aXJxX3Rhc2tsZXQpOwo+ICAKPiAgCXNwaW5fdW5sb2NrX2JoKCZlbmdp bmUtPmV4ZWNsaXN0X2xvY2spOwo+ICB9Cj4gQEAgLTcyMSwyMyArNzAyLDYgQEAgaW50ZWxfbG9n aWNhbF9yaW5nX2FkdmFuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQo+ ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXZvaWQgaW50ZWxfZXhlY2xpc3RzX2NhbmNlbF9yZXF1 ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCXN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcmVxLCAqdG1wOwo+IC0JTElTVF9IRUFEKGNhbmNlbF9saXN0KTsK PiAtCj4gLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmVuZ2luZS0+aTkxNS0+ZHJtLnN0cnVj dF9tdXRleCkpOwo+IC0KPiAtCXNwaW5fbG9ja19iaCgmZW5naW5lLT5leGVjbGlzdF9sb2NrKTsK PiAtCWxpc3RfcmVwbGFjZV9pbml0KCZlbmdpbmUtPmV4ZWNsaXN0X3F1ZXVlLCAmY2FuY2VsX2xp c3QpOwo+IC0Jc3Bpbl91bmxvY2tfYmgoJmVuZ2luZS0+ZXhlY2xpc3RfbG9jayk7Cj4gLQo+IC0J bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmY2FuY2VsX2xpc3QsIGV4ZWNsaXN0 X2xpbmspIHsKPiAtCQlsaXN0X2RlbCgmcmVxLT5leGVjbGlzdF9saW5rKTsKPiAtCQlpOTE1X2dl bV9yZXF1ZXN0X3B1dChyZXEpOwo+IC0JfQo+IC19Cj4gLQo+ICBzdGF0aWMgaW50IGludGVsX2xy X2NvbnRleHRfcGluKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gIAkJCQlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiBAQCAtMTI1OCw3ICsxMjIyLDYgQEAgc3Rh dGljIHZvaWQgbHJjX2luaXRfaHdzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg c3RhdGljIGludCBnZW44X2luaXRfY29tbW9uX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdp bmUtPmk5MTU7Cj4gLQl1bnNpZ25lZCBpbnQgbmV4dF9jb250ZXh0X3N0YXR1c19idWZmZXJfaHc7 Cj4gIAo+ICAJbHJjX2luaXRfaHdzKGVuZ2luZSk7Cj4gIAo+IEBAIC0xMjY5LDMyICsxMjMyLDEy IEBAIHN0YXRpYyBpbnQgZ2VuOF9pbml0X2NvbW1vbl9yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPiAgCUk5MTVfV1JJVEUoUklOR19NT0RFX0dFTjcoZW5naW5lKSwKPiAgCQkg ICBfTUFTS0VEX0JJVF9ESVNBQkxFKEdGWF9SRVBMQVlfTU9ERSkgfAo+ICAJCSAgIF9NQVNLRURf QklUX0VOQUJMRShHRlhfUlVOX0xJU1RfRU5BQkxFKSk7Cj4gLQlQT1NUSU5HX1JFQUQoUklOR19N T0RFX0dFTjcoZW5naW5lKSk7Cj4gIAo+IC0JLyoKPiAtCSAqIEluc3RlYWQgb2YgcmVzZXR0aW5n IHRoZSBDb250ZXh0IFN0YXR1cyBCdWZmZXIgKENTQikgcmVhZCBwb2ludGVyIHRvCj4gLQkgKiB6 ZXJvLCB3ZSBuZWVkIHRvIHJlYWQgdGhlIHdyaXRlIHBvaW50ZXIgZnJvbSBoYXJkd2FyZSBhbmQg dXNlIGl0cwo+IC0JICogdmFsdWUgYmVjYXVzZSAidGhpcyByZWdpc3RlciBpcyBwb3dlciBjb250 ZXh0IHNhdmUgcmVzdG9yZWQiLgo+IC0JICogRWZmZWN0aXZlbHksIHRoZXNlIHN0YXRlcyBoYXZl IGJlZW4gb2JzZXJ2ZWQ6Cj4gLQkgKgo+IC0JICogICAgICB8IFN1c3BlbmQtdG8taWRsZSAoZnJl ZXplKSB8IFN1c3BlbmQtdG8tUkFNIChtZW0pIHwKPiAtCSAqIEJEVyAgfCBDU0IgcmVncyBub3Qg cmVzZXQgICAgICAgfCBDU0IgcmVncyByZXNldCAgICAgICB8Cj4gLQkgKiBDSFQgIHwgQ1NCIHJl Z3Mgbm90IHJlc2V0ICAgICAgIHwgQ1NCIHJlZ3Mgbm90IHJlc2V0ICAgfAo+IC0JICogU0tMICB8 ICAgICAgICAgPyAgICAgICAgICAgICAgICB8ICAgICAgICAgPyAgICAgICAgICAgIHwKPiAtCSAq IEJYVCAgfCAgICAgICAgID8gICAgICAgICAgICAgICAgfCAgICAgICAgID8gICAgICAgICAgICB8 Cj4gLQkgKi8KPiAtCW5leHRfY29udGV4dF9zdGF0dXNfYnVmZmVyX2h3ID0KPiAtCQlHRU44X0NT Ql9XUklURV9QVFIoSTkxNV9SRUFEKFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkpKTsK PiArCUk5MTVfV1JJVEUoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSwKPiArCQkgICBf TUFTS0VEX0ZJRUxEKEdFTjhfQ1NCX1JFQURfUFRSX01BU0sgfAo+ICsJCQkJIEdFTjhfQ1NCX1dS SVRFX1BUUl9NQVNLLAo+ICsJCQkJIDApKTsKPiAgCj4gLQkvKgo+IC0JICogV2hlbiB0aGUgQ1NC IHJlZ2lzdGVycyBhcmUgcmVzZXQgKGFsc28gYWZ0ZXIgcG93ZXItdXAgLyBncHUgcmVzZXQpLAo+ IC0JICogQ1NCIHdyaXRlIHBvaW50ZXIgaXMgc2V0IHRvIGFsbCAxJ3MsIHdoaWNoIGlzIG5vdCB2 YWxpZCwgdXNlICc1JyBpbgo+IC0JICogdGhpcyBzcGVjaWFsIGNhc2UsIHNvIHRoZSBmaXJzdCBl bGVtZW50IHJlYWQgaXMgQ1NCWzBdLgo+IC0JICovCj4gLQlpZiAobmV4dF9jb250ZXh0X3N0YXR1 c19idWZmZXJfaHcgPT0gR0VOOF9DU0JfUFRSX01BU0spCj4gLQkJbmV4dF9jb250ZXh0X3N0YXR1 c19idWZmZXJfaHcgPSAoR0VOOF9DU0JfRU5UUklFUyAtIDEpOwo+IC0KPiAtCWVuZ2luZS0+bmV4 dF9jb250ZXh0X3N0YXR1c19idWZmZXIgPSBuZXh0X2NvbnRleHRfc3RhdHVzX2J1ZmZlcl9odzsK PiAgCURSTV9ERUJVR19EUklWRVIoIkV4ZWNsaXN0cyBlbmFibGVkIGZvciAlc1xuIiwgZW5naW5l LT5uYW1lKTsKPiAgCj4gIAlpbnRlbF9lbmdpbmVfaW5pdF9oYW5nY2hlY2soZW5naW5lKTsKPiBA QCAtMTY4MCwxMCArMTYyMyw2IEBAIHZvaWQgaW50ZWxfbG9naWNhbF9yaW5nX2NsZWFudXAoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJfQo+ICAJaW50ZWxfbHJfY29udGV4dF91 bnBpbihkZXZfcHJpdi0+a2VybmVsX2NvbnRleHQsIGVuZ2luZSk7Cj4gIAo+IC0JZW5naW5lLT5p ZGxlX2xpdGVfcmVzdG9yZV93YSA9IDA7Cj4gLQllbmdpbmUtPmRpc2FibGVfbGl0ZV9yZXN0b3Jl X3dhID0gZmFsc2U7Cj4gLQllbmdpbmUtPmN0eF9kZXNjX3RlbXBsYXRlID0gMDsKPiAtCj4gIAls cmNfZGVzdHJveV93YV9jdHhfb2JqKGVuZ2luZSk7Cj4gIAllbmdpbmUtPmk5MTUgPSBOVUxMOwo+ ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKPiBpbmRleCBhNTJjZjU3ZGJkNDAuLjRkNzAz NDY1MDBjMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4gQEAgLTk3LDYgKzk3LDQg QEAgaW50IGludGVsX3Nhbml0aXplX2VuYWJsZV9leGVjbGlzdHMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICAJCQkJICAgIGludCBlbmFibGVfZXhlY2xpc3RzKTsKPiAgdm9p ZCBpbnRlbF9leGVjbGlzdHNfZW5hYmxlX3N1Ym1pc3Npb24oc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKPiAgCj4gLXZvaWQgaW50ZWxfZXhlY2xpc3RzX2NhbmNlbF9yZXF1ZXN0 cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+IC0KPiAgI2VuZGlmIC8qIF9JTlRF TF9MUkNfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmlu Z2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gaW5k ZXggODRhZWE1NDlkZTVkLi4yMTgxZDBhNDFhOTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcmluZ2J1ZmZlci5oCj4gQEAgLTI5OCwxMSArMjk4LDE0IEBAIHN0cnVjdCBpbnRlbF9l bmdpbmVfY3Mgewo+ICAJLyogRXhlY2xpc3RzICovCj4gIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qg aXJxX3Rhc2tsZXQ7Cj4gIAlzcGlubG9ja190IGV4ZWNsaXN0X2xvY2s7IC8qIHVzZWQgaW5zaWRl IHRhc2tsZXQsIHVzZSBzcGluX2xvY2tfYmggKi8KPiArCXN0cnVjdCBleGVjbGlzdF9wb3J0IHsK PiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7Cj4gKwkJdW5zaWduZWQg aW50IGNvdW50Owo+ICsJfSBleGVjbGlzdF9wb3J0WzJdOwo+ICAJc3RydWN0IGxpc3RfaGVhZCBl eGVjbGlzdF9xdWV1ZTsKPiAgCXVuc2lnbmVkIGludCBmd19kb21haW5zOwo+IC0JdW5zaWduZWQg aW50IG5leHRfY29udGV4dF9zdGF0dXNfYnVmZmVyOwo+IC0JdW5zaWduZWQgaW50IGlkbGVfbGl0 ZV9yZXN0b3JlX3dhOwo+ICAJYm9vbCBkaXNhYmxlX2xpdGVfcmVzdG9yZV93YTsKPiArCWJvb2wg cHJlZW1wdF93YTsKPiAgCXUzMiBjdHhfZGVzY190ZW1wbGF0ZTsKPiAgCj4gIAkvKioKPiAtLSAK PiAyLjkuMwo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=