From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [Intel-gfx] [PATCH v10 2/4] drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. Date: Fri, 12 Feb 2016 14:23:10 +0100 Message-ID: <20160212132310.GY11240@phenom.ffwll.local> References: <1453417821-2811-1-git-send-email-rafael.antognolli@intel.com> <1453417821-2811-3-git-send-email-rafael.antognolli@intel.com> <20160212115310.GK23290@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id BFF376EAA8 for ; Fri, 12 Feb 2016 05:23:32 -0800 (PST) Received: by mail-wm0-f45.google.com with SMTP id g62so62307315wme.0 for ; Fri, 12 Feb 2016 05:23:32 -0800 (PST) Content-Disposition: inline In-Reply-To: <20160212115310.GK23290@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBGZWIgMTIsIDIwMTYgYXQgMDE6NTM6MTBQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFRodSwgSmFuIDIxLCAyMDE2IGF0IDAzOjEwOjE5UE0gLTA4MDAsIFJhZmFl bCBBbnRvZ25vbGxpIHdyb3RlOgo+ID4gVGhpcyBtb2R1bGUgaXMgaGVhdmlseSBiYXNlZCBvbiBp MmMtZGV2LiBPbmNlIGxvYWRlZCwgaXQgcHJvdmlkZXMgb25lCj4gPiBkZXYgbm9kZSBwZXIgRFAg QVVYIGNoYW5uZWwsIG5hbWVkIGRybV9kcF9hdXhOLCB3aGVyZSBOIGlzIGFuIGludGVnZXIuCj4g PiAKPiA+IEl0J3MgcG9zc2libGUgdG8ga25vdyB3aGljaCBjb25uZWN0b3Igb3ducyB0aGlzIGF1 eCBjaGFubmVsIGJ5IGxvb2tpbmcKPiA+IGF0IHRoZSByZXNwZWN0aXZlIHN5c2ZzIC9zeXMvY2xh c3MvZHJtX2F1eF9kZXYvZHJtX2RwX2F1eE4vY29ubmVjdG9yLCBpZgo+ID4gdGhlIGNvbm5lY3Rv ciBkZXZpY2UgcG9pbnRlciB3YXMgY29ycmVjdGx5IHNldCBpbiB0aGUgYXV4IGhlbHBlciBzdHJ1 Y3QuCj4gPiAKPiA+IFR3byBtYWluIG9wZXJhdGlvbnMgYXJlIHByb3ZpZGVkIG9uIHRoZSByZWdp c3RlcnMgcmVhZCBhbmQgd3JpdGUuIFRoZQo+ID4gYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgdG8g YmUgcmVhZCBvciB3cml0dGVuIGlzIGdpdmVuIHVzaW5nIGxzZWVrLiBUaGUKPiA+IHNlZWsgcG9z aXRpb24gaXMgdXBkYXRlZCB1cG9uIHJlYWQgb3Igd3JpdGUuCj4gPiAKPiA+IHYyOgo+ID4gIC0g bHNlZWsgaXMgdXNlZCB0byBzZWxlY3QgdGhlIHJlZ2lzdGVyIHRvIHJlYWQvd3JpdGUKPiA+ICAt IHJlYWQvd3JpdGUgYXJlIHVzZWQgaW5zdGVhZCBvZiBpb2N0bAo+ID4gIC0gbm8gYmxvY2tpbmdf bm90aWZpZXIgaXMgdXNlZCwganVzdCBhIGRpcmVjdCBjYWxsYmFjawo+ID4gCj4gPiB2MzoKPiA+ ICAtIHVzZSBkcm1fZHBfYXV4X2RldiBwcmVmaXggZm9yIHB1YmxpYyBmdW5jdGlvbnMKPiA+ICAt IGNoYXJkZXYgaXMgbmFtZWQgZHJtX2RwX2F1eE4KPiA+ICAtIHJlYWQvd3JpdGUgZG9uJ3QgYWxs b2NhdGUgYSBidWZmZXIgYW55bW9yZSwgYW5kIHRyYW5zZmVyIHVwIHRvIDE2IGJ5dGVzIGEKPiA+ ICAgIHRpbWUKPiA+ICAtIHJlbW92ZSBub3RpZmllciBsaXN0IGZyb20gdGhlIGltcGxlbWVudGF0 aW9uCj4gPiAgLSBvcHRpb24gb24gbWVudWNvbmZpZyBpcyBub3cgYSBib29sZWFuCj4gPiAgLSBh ZGQgaW5saW5lIHN0dWIgZnVuY3Rpb25zIHRvIGF2b2lkIGJyZWFrYWdlIHdoZW4gdGhpcyBvcHRp b24gaXMgZGlzYWJsZWQKPiA+IAo+ID4gdjQ6Cj4gPiAgLSBmaXggYnVpbGQgc3lzdGVtIGNoYW5n ZXMgLSBhY3R1YWxseSBkaXNhYmxlIHRoaXMgbW9kdWxlIHdoZW4gbm90IHNlbGVjdGVkLgo+ID4g Cj4gPiB2NToKPiA+ICAtIFVzZSBrcmVmIHRvIGF2b2lkIGRldmljZSBjbG9zaW5nIHdoaWxlIHN0 aWxsIGluIHVzZQo+ID4gIC0gRG9uJ3QgdXNlIGxpc3QsIHVzZSBhbiBpZHIgZm9yIHN0b3Jpbmcg YXV4X2Rldgo+ID4gIC0gUmVtb3ZlICJjb25uZWN0b3IiIGF0dHJpYnV0ZQo+ID4gIC0gc2V0IGF1 eC5kZXYgdG8gdGhlIGNvbm5lY3RvciBkcm1fY29ubmVjdG9yIGRldmljZSwgaW5zdGVhZCBvZgo+ ID4gICAgZHJtX2RldmljZQo+ID4gCj4gPiB2NjoKPiA+ICAtIFVzZSBhdG9taWNfdCBmb3IgdXNh Z2UgY291bnQKPiA+ICAtIFVzZSBhIG11dGV4IGluc3RlYWQgb2Ygc3BpbmxvY2sgZm9yIGlkciBs b2NrCj4gPiAgLSBEZXN0cm95IGNoYXJkZXYgaW1tZWRpYXRlbHkgb24gdW5yZWdpc3Rlcgo+ID4g IC0gb3RoZXIgbWlub3Igc3VnZ2VzdGlvbnMgZnJvbSBWaWxsZQo+ID4gCj4gPiB2NzoKPiA+ICAt IHN0eWxlIGZpeGVzCj4gPiAgLSBlcnJvciBoYW5kbGluZyBmaXhlcwo+ID4gCj4gPiB2ODoKPiA+ ICAtIG1vcmUgZXJyb3IgaGFuZGxpbmcgZml4ZXMKPiA+IAo+ID4gdjk6Cj4gPiAgLSByZW1vdmUg bW9kdWxlX2luaXQgYW5kIG1vZHVsZV9leGl0LCBhbmQgYWRkIGRybV9kcF9hdXhfZGV2X2luaXQv ZXhpdAo+ID4gIHRvIGRybV9rbXNfaGVscGVyX2luaXQvZXhpdC4KPiA+IAo+ID4gU2lnbmVkLW9m Zi1ieTogUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4KPiAK PiBPbmx5IGNoZWNrZWQgdGhlIGluaXQvZXhpdCBzdHVmZiBzaW5jZSBJIHNob3VsZCBoYXZlIHJl YWQgdGhlIHJlc3QgCj4gbWFueSB0aW1lcyBieSBub3cuCj4gCj4gUmV2aWV3ZWQtYnk6IFZpbGxl IFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+CgpNZXJnZWQgdGhlIGZp cnN0IDIgcGF0Y2hlcyB0byBkcm0tbWlzYywgdGhhbmtzLgotRGFuaWVsCgo+IAo+ID4gLS0tCj4g PiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgIHwgICA4ICsKPiA+ICBk cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEgKwo+ID4gIGRyaXZl cnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jICAgICAgICB8IDM2OCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMgICAg ICAgICB8ICAxNiArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fa21zX2hlbHBlcl9jb21tb24u YyB8ICAxNSArLQo+ID4gIGluY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmggICAgICAgICAgICB8 ICA2MiArKysrKysKPiA+ICA2IGZpbGVzIGNoYW5nZWQsIDQ2OCBpbnNlcnRpb25zKCspLCAyIGRl bGV0aW9ucygtKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2Rw X2F1eF9kZXYuYwo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9kcm1fZHBfYXV4 X2Rldi5oCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gPiBpbmRleCA1OWJhYmQ1Li5kZmY4N2NhIDEwMDY0NAo+ ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnCj4gPiBAQCAtMjUsNiArMjUsMTQgQEAgY29uZmlnIERSTV9NSVBJX0RTSQo+ID4g IAlib29sCj4gPiAgCWRlcGVuZHMgb24gRFJNCj4gPiAgCj4gPiArY29uZmlnIERSTV9EUF9BVVhf Q0hBUkRFVgo+ID4gKwlib29sICJEUk0gRFAgQVVYIEludGVyZmFjZSIKPiA+ICsJZGVwZW5kcyBv biBEUk0KPiA+ICsJaGVscAo+ID4gKwkgIENob29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgYSAv ZGV2L2RybV9kcF9hdXhOIG5vZGUgdGhhdCBhbGxvd3MgdG8KPiA+ICsJICByZWFkIGFuZCB3cml0 ZSB2YWx1ZXMgdG8gYXJiaXRyYXJ5IERQQ0QgcmVnaXN0ZXJzIG9uIHRoZSBEUCBhdXgKPiA+ICsJ ICBjaGFubmVsLgo+ID4gKwo+ID4gIGNvbmZpZyBEUk1fS01TX0hFTFBFUgo+ID4gIAl0cmlzdGF0 ZQo+ID4gIAlkZXBlbmRzIG9uIERSTQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gaW5kZXggZGZlNTEzZi4uNDI0 ZmNiNyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gPiBAQCAtMzAsNiArMzAsNyBAQCBkcm1fa21zX2hl bHBlci15IDo9IGRybV9jcnRjX2hlbHBlci5vIGRybV9kcF9oZWxwZXIubyBkcm1fcHJvYmVfaGVs cGVyLm8gXAo+ID4gIGRybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9MT0FEX0VESURfRklSTVdB UkUpICs9IGRybV9lZGlkX2xvYWQubwo+ID4gIGRybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9G QkRFVl9FTVVMQVRJT04pICs9IGRybV9mYl9oZWxwZXIubwo+ID4gIGRybV9rbXNfaGVscGVyLSQo Q09ORklHX0RSTV9LTVNfQ01BX0hFTFBFUikgKz0gZHJtX2ZiX2NtYV9oZWxwZXIubwo+ID4gK2Ry bV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9EUF9BVVhfQ0hBUkRFVikgKz0gZHJtX2RwX2F1eF9k ZXYubwo+ID4gIAo+ID4gIG9iai0kKENPTkZJR19EUk1fS01TX0hFTFBFUikgKz0gZHJtX2ttc19o ZWxwZXIubwo+ID4gIAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4 X2Rldi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9hdXhfZGV2LmMKPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5mNzNiMzhiCj4gPiAtLS0gL2Rldi9udWxsCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2F1eF9kZXYuYwo+ID4gQEAgLTAsMCArMSwz NjggQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9u Cj4gPiArICoKPiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks Cj4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ID4gKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQo+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gPiArICoKPiA+ICsgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0Cj4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ID4gKyAqIFNvZnR3YXJlLgo+ID4g KyAqCj4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiA+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiA+ ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ID4gKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCj4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ID4gKyAqIElOIFRIRSBT T0ZUV0FSRS4KPiA+ICsgKgo+ID4gKyAqIEF1dGhvcnM6Cj4gPiArICogICAgUmFmYWVsIEFudG9n bm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4KPiA+ICsgKgo+ID4gKyAqLwo+ID4g Kwo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZnMu aD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0 Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+ID4gKyNpbmNsdWRlIDxk cm0vZHJtX2RwX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiA+ICsj aW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ICsKPiA+ICtzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgewo+ ID4gKwl1bnNpZ25lZCBpbmRleDsKPiA+ICsJc3RydWN0IGRybV9kcF9hdXggKmF1eDsKPiA+ICsJ c3RydWN0IGRldmljZSAqZGV2Owo+ID4gKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKPiA+ICsJYXRv bWljX3QgdXNlY291bnQ7Cj4gPiArfTsKPiA+ICsKPiA+ICsjZGVmaW5lIERSTV9BVVhfTUlOT1JT CTI1Ngo+ID4gKyNkZWZpbmUgQVVYX01BWF9PRkZTRVQJKDEgPDwgMjApCj4gPiArc3RhdGljIERF RklORV9JRFIoYXV4X2lkcik7Cj4gPiArc3RhdGljIERFRklORV9NVVRFWChhdXhfaWRyX211dGV4 KTsKPiA+ICtzdGF0aWMgc3RydWN0IGNsYXNzICpkcm1fZHBfYXV4X2Rldl9jbGFzczsKPiA+ICtz dGF0aWMgaW50IGRybV9kZXZfbWFqb3IgPSAtMTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRy bV9kcF9hdXhfZGV2ICpkcm1fZHBfYXV4X2Rldl9nZXRfYnlfbWlub3IodW5zaWduZWQgaW5kZXgp Cj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYgPSBOVUxMOwo+ID4g Kwo+ID4gKwltdXRleF9sb2NrKCZhdXhfaWRyX211dGV4KTsKPiA+ICsJYXV4X2RldiA9IGlkcl9m aW5kKCZhdXhfaWRyLCBpbmRleCk7Cj4gPiArCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmF1 eF9kZXYtPnJlZmNvdW50KSkKPiA+ICsJCWF1eF9kZXYgPSBOVUxMOwo+ID4gKwltdXRleF91bmxv Y2soJmF1eF9pZHJfbXV0ZXgpOwo+ID4gKwo+ID4gKwlyZXR1cm4gYXV4X2RldjsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYWxsb2NfZHJtX2RwX2F1eF9k ZXYoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZHBfYXV4 X2RldiAqYXV4X2RldjsKPiA+ICsJaW50IGluZGV4Owo+ID4gKwo+ID4gKwlhdXhfZGV2ID0ga3ph bGxvYyhzaXplb2YoKmF1eF9kZXYpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFhdXhfZGV2KQo+ ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPiArCWF1eF9kZXYtPmF1eCA9IGF1eDsK PiA+ICsJYXRvbWljX3NldCgmYXV4X2Rldi0+dXNlY291bnQsIDEpOwo+ID4gKwlrcmVmX2luaXQo JmF1eF9kZXYtPnJlZmNvdW50KTsKPiA+ICsKPiA+ICsJbXV0ZXhfbG9jaygmYXV4X2lkcl9tdXRl eCk7Cj4gPiArCWluZGV4ID0gaWRyX2FsbG9jX2N5Y2xpYygmYXV4X2lkciwgYXV4X2RldiwgMCwg RFJNX0FVWF9NSU5PUlMsCj4gPiArCQkJCSBHRlBfS0VSTkVMKTsKPiA+ICsJbXV0ZXhfdW5sb2Nr KCZhdXhfaWRyX211dGV4KTsKPiA+ICsJaWYgKGluZGV4IDwgMCkgewo+ID4gKwkJa2ZyZWUoYXV4 X2Rldik7Cj4gPiArCQlyZXR1cm4gRVJSX1BUUihpbmRleCk7Cj4gPiArCX0KPiA+ICsJYXV4X2Rl di0+aW5kZXggPSBpbmRleDsKPiA+ICsKPiA+ICsJcmV0dXJuIGF1eF9kZXY7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyB2b2lkIHJlbGVhc2VfZHJtX2RwX2F1eF9kZXYoc3RydWN0IGtyZWYgKnJl ZikKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9Cj4gPiArCQlj b250YWluZXJfb2YocmVmLCBzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYsIHJlZmNvdW50KTsKPiA+ICsK PiA+ICsJa2ZyZWUoYXV4X2Rldik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IG5h bWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiArCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICphdHRyLCBjaGFyICpidWYpCj4gPiArewo+ID4gKwlzc2l6ZV90IHJlczsKPiA+ICsJc3Ry dWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0KPiA+ICsJCWRybV9kcF9hdXhfZGV2X2dldF9i eV9taW5vcihNSU5PUihkZXYtPmRldnQpKTsKPiA+ICsKPiA+ICsJaWYgKCFhdXhfZGV2KQo+ID4g KwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiArCj4gPiArCXJlcyA9IHNwcmludGYoYnVmLCAiJXNcbiIs IGF1eF9kZXYtPmF1eC0+bmFtZSk7Cj4gPiArCWtyZWZfcHV0KCZhdXhfZGV2LT5yZWZjb3VudCwg cmVsZWFzZV9kcm1fZHBfYXV4X2Rldik7Cj4gPiArCj4gPiArCXJldHVybiByZXM7Cj4gPiArfQo+ ID4gK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhuYW1lKTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0 IGF0dHJpYnV0ZSAqZHJtX2RwX2F1eF9hdHRyc1tdID0gewo+ID4gKwkmZGV2X2F0dHJfbmFtZS5h dHRyLAo+ID4gKwlOVUxMLAo+ID4gK307Cj4gPiArQVRUUklCVVRFX0dST1VQUyhkcm1fZHBfYXV4 KTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGF1eGRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUs IHN0cnVjdCBmaWxlICpmaWxlKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgaW50IG1pbm9yID0gaW1p bm9yKGlub2RlKTsKPiA+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2Owo+ID4gKwo+ ID4gKwlhdXhfZGV2ID0gZHJtX2RwX2F1eF9kZXZfZ2V0X2J5X21pbm9yKG1pbm9yKTsKPiA+ICsJ aWYgKCFhdXhfZGV2KQo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiArCj4gPiArCWZpbGUtPnBy aXZhdGVfZGF0YSA9IGF1eF9kZXY7Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgbG9mZl90IGF1eGRldl9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZz ZXQsIGludCB3aGVuY2UpCj4gPiArewo+ID4gKwlyZXR1cm4gZml4ZWRfc2l6ZV9sbHNlZWsoZmls ZSwgb2Zmc2V0LCB3aGVuY2UsIEFVWF9NQVhfT0ZGU0VUKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHNzaXplX3QgYXV4ZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpi dWYsIHNpemVfdCBjb3VudCwKPiA+ICsJCQkgICBsb2ZmX3QgKm9mZnNldCkKPiA+ICt7Cj4gPiAr CXNpemVfdCBieXRlc19wZW5kaW5nLCBudW1fYnl0ZXNfcHJvY2Vzc2VkID0gMDsKPiA+ICsJc3Ry dWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ID4gKwlz c2l6ZV90IHJlcyA9IDA7Cj4gPiArCj4gPiArCWlmICghYXRvbWljX2luY19ub3RfemVybygmYXV4 X2Rldi0+dXNlY291bnQpKQo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiArCj4gPiArCWJ5dGVz X3BlbmRpbmcgPSBtaW4oKGxvZmZfdCljb3VudCwgQVVYX01BWF9PRkZTRVQgLSAoKm9mZnNldCkp Owo+ID4gKwo+ID4gKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgYnl0ZXNfcGVu ZGluZykpIHsKPiA+ICsJCXJlcyA9IC1FRkFVTFQ7Cj4gPiArCQlnb3RvIG91dDsKPiA+ICsJfQo+ ID4gKwo+ID4gKwl3aGlsZSAoYnl0ZXNfcGVuZGluZyA+IDApIHsKPiA+ICsJCXVpbnQ4X3QgbG9j YWxidWZbRFBfQVVYX01BWF9QQVlMT0FEX0JZVEVTXTsKPiA+ICsJCXNzaXplX3QgdG9kbyA9IG1p bl90KHNpemVfdCwgYnl0ZXNfcGVuZGluZywgc2l6ZW9mKGxvY2FsYnVmKSk7Cj4gPiArCj4gPiAr CQlyZXMgPSBkcm1fZHBfZHBjZF9yZWFkKGF1eF9kZXYtPmF1eCwgKm9mZnNldCwgbG9jYWxidWYs IHRvZG8pOwo+ID4gKwkJaWYgKHJlcyA8PSAwKSB7Cj4gPiArCQkJcmVzID0gbnVtX2J5dGVzX3By b2Nlc3NlZCA/IG51bV9ieXRlc19wcm9jZXNzZWQgOiByZXM7Cj4gPiArCQkJZ290byBvdXQ7Cj4g PiArCQl9Cj4gPiArCQlpZiAoX19jb3B5X3RvX3VzZXIoYnVmICsgbnVtX2J5dGVzX3Byb2Nlc3Nl ZCwgbG9jYWxidWYsIHJlcykpIHsKPiA+ICsJCQlyZXMgPSBudW1fYnl0ZXNfcHJvY2Vzc2VkID8K PiA+ICsJCQkJbnVtX2J5dGVzX3Byb2Nlc3NlZCA6IC1FRkFVTFQ7Cj4gPiArCQkJZ290byBvdXQ7 Cj4gPiArCQl9Cj4gPiArCQlieXRlc19wZW5kaW5nIC09IHJlczsKPiA+ICsJCSpvZmZzZXQgKz0g cmVzOwo+ID4gKwkJbnVtX2J5dGVzX3Byb2Nlc3NlZCArPSByZXM7Cj4gPiArCQlyZXMgPSBudW1f Ynl0ZXNfcHJvY2Vzc2VkOwo+ID4gKwl9Cj4gPiArCj4gPiArb3V0Ogo+ID4gKwlhdG9taWNfZGVj KCZhdXhfZGV2LT51c2Vjb3VudCk7Cj4gPiArCXdha2VfdXBfYXRvbWljX3QoJmF1eF9kZXYtPnVz ZWNvdW50KTsKPiA+ICsJcmV0dXJuIHJlczsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHNzaXpl X3QgYXV4ZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVm LAo+ID4gKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQo+ID4gK3sKPiA+ICsJ c2l6ZV90IGJ5dGVzX3BlbmRpbmcsIG51bV9ieXRlc19wcm9jZXNzZWQgPSAwOwo+ID4gKwlzdHJ1 Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gPiArCXNz aXplX3QgcmVzID0gMDsKPiA+ICsKPiA+ICsJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZhdXhf ZGV2LT51c2Vjb3VudCkpCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsKPiA+ICsKPiA+ICsJYnl0ZXNf cGVuZGluZyA9IG1pbigobG9mZl90KWNvdW50LCBBVVhfTUFYX09GRlNFVCAtICpvZmZzZXQpOwo+ ID4gKwo+ID4gKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmLCBieXRlc19wZW5kaW5n KSkgewo+ID4gKwkJcmVzID0gLUVGQVVMVDsKPiA+ICsJCWdvdG8gb3V0Owo+ID4gKwl9Cj4gPiAr Cj4gPiArCXdoaWxlIChieXRlc19wZW5kaW5nID4gMCkgewo+ID4gKwkJdWludDhfdCBsb2NhbGJ1 ZltEUF9BVVhfTUFYX1BBWUxPQURfQllURVNdOwo+ID4gKwkJc3NpemVfdCB0b2RvID0gbWluX3Qo c2l6ZV90LCBieXRlc19wZW5kaW5nLCBzaXplb2YobG9jYWxidWYpKTsKPiA+ICsKPiA+ICsJCWlm IChfX2NvcHlfZnJvbV91c2VyKGxvY2FsYnVmLAo+ID4gKwkJCQkgICAgIGJ1ZiArIG51bV9ieXRl c19wcm9jZXNzZWQsIHRvZG8pKSB7Cj4gPiArCQkJcmVzID0gbnVtX2J5dGVzX3Byb2Nlc3NlZCA/ Cj4gPiArCQkJCW51bV9ieXRlc19wcm9jZXNzZWQgOiAtRUZBVUxUOwo+ID4gKwkJCWdvdG8gb3V0 Owo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJcmVzID0gZHJtX2RwX2RwY2Rfd3JpdGUoYXV4X2Rldi0+ YXV4LCAqb2Zmc2V0LCBsb2NhbGJ1ZiwgdG9kbyk7Cj4gPiArCQlpZiAocmVzIDw9IDApIHsKPiA+ ICsJCQlyZXMgPSBudW1fYnl0ZXNfcHJvY2Vzc2VkID8gbnVtX2J5dGVzX3Byb2Nlc3NlZCA6IHJl czsKPiA+ICsJCQlnb3RvIG91dDsKPiA+ICsJCX0KPiA+ICsJCWJ5dGVzX3BlbmRpbmcgLT0gcmVz Owo+ID4gKwkJKm9mZnNldCArPSByZXM7Cj4gPiArCQludW1fYnl0ZXNfcHJvY2Vzc2VkICs9IHJl czsKPiA+ICsJCXJlcyA9IG51bV9ieXRlc19wcm9jZXNzZWQ7Cj4gPiArCX0KPiA+ICsKPiA+ICtv dXQ6Cj4gPiArCWF0b21pY19kZWMoJmF1eF9kZXYtPnVzZWNvdW50KTsKPiA+ICsJd2FrZV91cF9h dG9taWNfdCgmYXV4X2Rldi0+dXNlY291bnQpOwo+ID4gKwlyZXR1cm4gcmVzOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgaW50IGF1eGRldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0 cnVjdCBmaWxlICpmaWxlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhf ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ID4gKwo+ID4gKwlrcmVmX3B1dCgmYXV4X2Rldi0+ cmVmY291bnQsIHJlbGVhc2VfZHJtX2RwX2F1eF9kZXYpOwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXV4ZGV2X2Zv cHMgPSB7Cj4gPiArCS5vd25lcgkJPSBUSElTX01PRFVMRSwKPiA+ICsJLmxsc2VlawkJPSBhdXhk ZXZfbGxzZWVrLAo+ID4gKwkucmVhZAkJPSBhdXhkZXZfcmVhZCwKPiA+ICsJLndyaXRlCQk9IGF1 eGRldl93cml0ZSwKPiA+ICsJLm9wZW4JCT0gYXV4ZGV2X29wZW4sCj4gPiArCS5yZWxlYXNlCT0g YXV4ZGV2X3JlbGVhc2UsCj4gPiArfTsKPiA+ICsKPiA+ICsjZGVmaW5lIHRvX2F1eGRldihkKSBj b250YWluZXJfb2YoZCwgc3RydWN0IGRybV9kcF9hdXhfZGV2LCBhdXgpCj4gPiArCj4gPiArc3Rh dGljIHN0cnVjdCBkcm1fZHBfYXV4X2RldiAqZHJtX2RwX2F1eF9kZXZfZ2V0X2J5X2F1eChzdHJ1 Y3QgZHJtX2RwX2F1eCAqYXV4KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICpp dGVyLCAqYXV4X2RldiA9IE5VTEw7Cj4gPiArCWludCBpZDsKPiA+ICsKPiA+ICsJLyogZG9uJ3Qg aW5jcmVhc2Uga3JlZiBjb3VudCBoZXJlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBzaG91bGQgb25s eSBiZQo+ID4gKwkgKiB1c2VkIGJ5IGRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlLiBUaHVz LCBpdCB3aWxsIGFsd2F5cyBoYXZlIGF0Cj4gPiArCSAqIGxlYXN0IG9uZSByZWZlcmVuY2UgLSB0 aGUgb25lIHRoYXQgZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlCj4gPiArCSAqIGNyZWF0ZWQK PiA+ICsJICovCj4gPiArCW11dGV4X2xvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ID4gKwlpZHJfZm9y X2VhY2hfZW50cnkoJmF1eF9pZHIsIGl0ZXIsIGlkKSB7Cj4gPiArCQlpZiAoaXRlci0+YXV4ID09 IGF1eCkgewo+ID4gKwkJCWF1eF9kZXYgPSBpdGVyOwo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJfQo+ ID4gKwl9Cj4gPiArCW11dGV4X3VubG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gPiArCXJldHVybiBh dXhfZGV2Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGF1eGRldl93YWl0X2F0b21pY190 KGF0b21pY190ICpwKQo+ID4gK3sKPiA+ICsJc2NoZWR1bGUoKTsKPiA+ICsJcmV0dXJuIDA7Cj4g PiArfQo+ID4gKy8qKgo+ID4gKyAqIGRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKCkgLSB1 bnJlZ2lzdGVyIGEgZGV2bm9kZSBmb3IgdGhpcyBhdXggY2hhbm5lbAo+ID4gKyAqIEBhdXg6IERp c3BsYXlQb3J0IEFVWCBjaGFubmVsCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2Vz cyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ICsgKi8KPiA+ICt2b2lk IGRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4g PiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXY7Cj4gPiArCXVuc2lnbmVk IGludCBtaW5vcjsKPiA+ICsKPiA+ICsJYXV4X2RldiA9IGRybV9kcF9hdXhfZGV2X2dldF9ieV9h dXgoYXV4KTsKPiA+ICsJaWYgKCFhdXhfZGV2KSAvKiBhdHRhY2ggbXVzdCBoYXZlIGZhaWxlZCAq Lwo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwltdXRleF9sb2NrKCZhdXhfaWRyX211dGV4KTsK PiA+ICsJaWRyX3JlbW92ZSgmYXV4X2lkciwgYXV4X2Rldi0+aW5kZXgpOwo+ID4gKwltdXRleF91 bmxvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ID4gKwo+ID4gKwlhdG9taWNfZGVjKCZhdXhfZGV2LT51 c2Vjb3VudCk7Cj4gPiArCXdhaXRfb25fYXRvbWljX3QoJmF1eF9kZXYtPnVzZWNvdW50LCBhdXhk ZXZfd2FpdF9hdG9taWNfdCwKPiA+ICsJCQkgVEFTS19VTklOVEVSUlVQVElCTEUpOwo+ID4gKwo+ ID4gKwltaW5vciA9IGF1eF9kZXYtPmluZGV4Owo+ID4gKwlpZiAoYXV4X2Rldi0+ZGV2KQo+ID4g KwkJZGV2aWNlX2Rlc3Ryb3koZHJtX2RwX2F1eF9kZXZfY2xhc3MsCj4gPiArCQkJICAgICAgIE1L REVWKGRybV9kZXZfbWFqb3IsIG1pbm9yKSk7Cj4gPiArCj4gPiArCURSTV9ERUJVRygiZHJtX2Rw X2F1eF9kZXY6IGF1eCBbJXNdIHVucmVnaXN0ZXJpbmdcbiIsIGF1eC0+bmFtZSk7Cj4gPiArCWty ZWZfcHV0KCZhdXhfZGV2LT5yZWZjb3VudCwgcmVsZWFzZV9kcm1fZHBfYXV4X2Rldik7Cj4gPiAr fQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUpOwo+ID4g Kwo+ID4gKy8qKgo+ID4gKyAqIGRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9kZSgpIC0gcmVnaXN0 ZXIgYSBkZXZub2RlIGZvciB0aGlzIGF1eCBjaGFubmVsCj4gPiArICogQGF1eDogRGlzcGxheVBv cnQgQVVYIGNoYW5uZWwKPiA+ICsgKgo+ID4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEg bmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gKyAqLwo+ID4gK2ludCBkcm1fZHBf YXV4X3JlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ICt7Cj4gPiAr CXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldjsKPiA+ICsJaW50IHJlczsKPiA+ICsKPiA+ ICsJYXV4X2RldiA9IGFsbG9jX2RybV9kcF9hdXhfZGV2KGF1eCk7Cj4gPiArCWlmIChJU19FUlIo YXV4X2RldikpCj4gPiArCQlyZXR1cm4gUFRSX0VSUihhdXhfZGV2KTsKPiA+ICsKPiA+ICsJYXV4 X2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShkcm1fZHBfYXV4X2Rldl9jbGFzcywgYXV4LT5kZXYs Cj4gPiArCQkJCSAgICAgTUtERVYoZHJtX2Rldl9tYWpvciwgYXV4X2Rldi0+aW5kZXgpLCBOVUxM LAo+ID4gKwkJCQkgICAgICJkcm1fZHBfYXV4JWQiLCBhdXhfZGV2LT5pbmRleCk7Cj4gPiArCWlm IChJU19FUlIoYXV4X2Rldi0+ZGV2KSkgewo+ID4gKwkJcmVzID0gUFRSX0VSUihhdXhfZGV2LT5k ZXYpOwo+ID4gKwkJYXV4X2Rldi0+ZGV2ID0gTlVMTDsKPiA+ICsJCWdvdG8gZXJyb3I7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJRFJNX0RFQlVHKCJkcm1fZHBfYXV4X2RldjogYXV4IFslc10gcmVnaXN0 ZXJlZCBhcyBtaW5vciAlZFxuIiwKPiA+ICsJCSAgYXV4LT5uYW1lLCBhdXhfZGV2LT5pbmRleCk7 Cj4gPiArCXJldHVybiAwOwo+ID4gK2Vycm9yOgo+ID4gKwlkcm1fZHBfYXV4X3VucmVnaXN0ZXJf ZGV2bm9kZShhdXgpOwo+ID4gKwlyZXR1cm4gcmVzOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9M KGRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9kZSk7Cj4gPiArCj4gPiAraW50IGRybV9kcF9hdXhf ZGV2X2luaXQodm9pZCkKPiA+ICt7Cj4gPiArCWludCByZXM7Cj4gPiArCj4gPiArCWRybV9kcF9h dXhfZGV2X2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAiZHJtX2RwX2F1eF9kZXYi KTsKPiA+ICsJaWYgKElTX0VSUihkcm1fZHBfYXV4X2Rldl9jbGFzcykpIHsKPiA+ICsJCXJlcyA9 IFBUUl9FUlIoZHJtX2RwX2F1eF9kZXZfY2xhc3MpOwo+ID4gKwkJZ290byBvdXQ7Cj4gPiArCX0K PiA+ICsJZHJtX2RwX2F1eF9kZXZfY2xhc3MtPmRldl9ncm91cHMgPSBkcm1fZHBfYXV4X2dyb3Vw czsKPiA+ICsKPiA+ICsJcmVzID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJhdXgiLCAmYXV4ZGV2X2Zv cHMpOwo+ID4gKwlpZiAocmVzIDwgMCkKPiA+ICsJCWdvdG8gb3V0Owo+ID4gKwlkcm1fZGV2X21h am9yID0gcmVzOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICtvdXQ6Cj4gPiArCWNsYXNzX2Rl c3Ryb3koZHJtX2RwX2F1eF9kZXZfY2xhc3MpOwo+ID4gKwlyZXR1cm4gcmVzOwo+ID4gK30KPiA+ ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9hdXhfZGV2X2luaXQpOwo+ID4gKwo+ID4gK3ZvaWQgZHJt X2RwX2F1eF9kZXZfZXhpdCh2b2lkKQo+ID4gK3sKPiA+ICsJdW5yZWdpc3Rlcl9jaHJkZXYoZHJt X2Rldl9tYWpvciwgImF1eCIpOwo+ID4gKwljbGFzc19kZXN0cm95KGRybV9kcF9hdXhfZGV2X2Ns YXNzKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfYXV4X2Rldl9leGl0KTsKPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jIGIvZHJpdmVycy9n cHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+ID4gaW5kZXggOTUzNWM1Yi4uN2Q1OGY1OSAxMDA2NDQK PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKPiA+IEBAIC0yOCw2ICsyOCw3IEBACj4gPiAgI2lu Y2x1ZGUgPGxpbnV4L3NjaGVkLmg+Cj4gPiAgI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ID4gICNp bmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2F1 eF9kZXYuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ICAKPiA+ICAvKioKPiA+IEBA IC03NTQsNiArNzU1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGRybV9k cF9pMmNfYWxnbyA9IHsKPiA+ICAgKi8KPiA+ICBpbnQgZHJtX2RwX2F1eF9yZWdpc3RlcihzdHJ1 Y3QgZHJtX2RwX2F1eCAqYXV4KQo+ID4gIHsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICAJbXV0 ZXhfaW5pdCgmYXV4LT5od19tdXRleCk7Cj4gPiAgCj4gPiAgCWF1eC0+ZGRjLmFsZ28gPSAmZHJt X2RwX2kyY19hbGdvOwo+ID4gQEAgLTc2OCw3ICs3NzEsMTcgQEAgaW50IGRybV9kcF9hdXhfcmVn aXN0ZXIoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ICAJc3RybGNweShhdXgtPmRkYy5uYW1l LCBhdXgtPm5hbWUgPyBhdXgtPm5hbWUgOiBkZXZfbmFtZShhdXgtPmRldiksCj4gPiAgCQlzaXpl b2YoYXV4LT5kZGMubmFtZSkpOwo+ID4gIAo+ID4gLQlyZXR1cm4gaTJjX2FkZF9hZGFwdGVyKCZh dXgtPmRkYyk7Cj4gPiArCXJldCA9IGRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9kZShhdXgpOwo+ ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gaTJjX2Fk ZF9hZGFwdGVyKCZhdXgtPmRkYyk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWRybV9kcF9hdXhf dW5yZWdpc3Rlcl9kZXZub2RlKGF1eCk7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiAr Cj4gPiArCXJldHVybiAwOwo+ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9hdXhfcmVn aXN0ZXIpOwo+ID4gIAo+ID4gQEAgLTc3OCw2ICs3OTEsNyBAQCBFWFBPUlRfU1lNQk9MKGRybV9k cF9hdXhfcmVnaXN0ZXIpOwo+ID4gICAqLwo+ID4gIHZvaWQgZHJtX2RwX2F1eF91bnJlZ2lzdGVy KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gPiAgewo+ID4gKwlkcm1fZHBfYXV4X3VucmVnaXN0 ZXJfZGV2bm9kZShhdXgpOwo+ID4gIAlpMmNfZGVsX2FkYXB0ZXIoJmF1eC0+ZGRjKTsKPiA+ICB9 Cj4gPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXV4X3VucmVnaXN0ZXIpOwo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fa21zX2hlbHBlcl9jb21tb24uYyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fa21zX2hlbHBlcl9jb21tb24uYwo+ID4gaW5kZXggZDM2MTAwNS4uMzE4N2M0YiAx MDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fa21zX2hlbHBlcl9jb21tb24uYwo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9rbXNfaGVscGVyX2NvbW1vbi5jCj4gPiBAQCAt MjcsNiArMjcsNyBAQAo+ID4gIAo+ID4gICNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gICNpbmNs dWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2F1eF9k ZXYuaD4KPiA+ICAKPiA+ICBNT0RVTEVfQVVUSE9SKCJEYXZpZCBBaXJsaWUsIEplc3NlIEJhcm5l cyIpOwo+ID4gIE1PRFVMRV9ERVNDUklQVElPTigiRFJNIEtNUyBoZWxwZXIiKTsKPiA+IEBAIC0z NCwxMyArMzUsMjUgQEAgTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMi KTsKPiA+ICAKPiA+ICBzdGF0aWMgaW50IF9faW5pdCBkcm1fa21zX2hlbHBlcl9pbml0KHZvaWQp Cj4gPiAgewo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gIAkvKiBDYWxsIGluaXQgZnVuY3Rpb25z IGZyb20gc3BlY2lmaWMga21zIGhlbHBlcnMgaGVyZSAqLwo+ID4gLQlyZXR1cm4gZHJtX2ZiX2hl bHBlcl9tb2Rpbml0KCk7Cj4gPiArCXJldCA9IGRybV9mYl9oZWxwZXJfbW9kaW5pdCgpOwo+ID4g KwlpZiAocmV0IDwgMCkKPiA+ICsJCWdvdG8gb3V0Owo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fZHBf YXV4X2Rldl9pbml0KCk7Cj4gPiArCWlmIChyZXQgPCAwKQo+ID4gKwkJZ290byBvdXQ7Cj4gPiAr Cj4gPiArb3V0Ogo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgdm9p ZCBfX2V4aXQgZHJtX2ttc19oZWxwZXJfZXhpdCh2b2lkKQo+ID4gIHsKPiA+ICAJLyogQ2FsbCBl eGl0IGZ1bmN0aW9ucyBmcm9tIHNwZWNpZmljIGttcyBoZWxwZXJzIGhlcmUgKi8KPiA+ICsJZHJt X2RwX2F1eF9kZXZfZXhpdCgpOwo+ID4gIH0KPiA+ICAKPiA+ICBtb2R1bGVfaW5pdChkcm1fa21z X2hlbHBlcl9pbml0KTsKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfYXV4X2Rl di5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiA+IGluZGV4IDAwMDAwMDAuLjFiNzZkOTkKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBi L2luY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmgKPiA+IEBAIC0wLDAgKzEsNjIgQEAKPiA+ICsv Kgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4gPiArICoKPiA+ ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gPiArICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgo+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ID4gKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQo+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gPiArICoKPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4g PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ID4gKyAqIFNvZnR3YXJlLgo+ID4gKyAqCj4gPiArICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKPiA+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiA+ICsgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKPiA+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ID4gKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H Cj4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiA+ ICsgKgo+ID4gKyAqIEF1dGhvcnM6Cj4gPiArICogICAgUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFl bC5hbnRvZ25vbGxpQGludGVsLmNvbT4KPiA+ICsgKgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpZm5k ZWYgRFJNX0RQX0FVWF9ERVYKPiA+ICsjZGVmaW5lIERSTV9EUF9BVVhfREVWCj4gPiArCj4gPiAr I2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4gPiArCj4gPiArI2lmZGVmIENPTkZJR19E Uk1fRFBfQVVYX0NIQVJERVYKPiA+ICsKPiA+ICtpbnQgZHJtX2RwX2F1eF9kZXZfaW5pdCh2b2lk KTsKPiA+ICt2b2lkIGRybV9kcF9hdXhfZGV2X2V4aXQodm9pZCk7Cj4gPiAraW50IGRybV9kcF9h dXhfcmVnaXN0ZXJfZGV2bm9kZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KTsKPiA+ICt2b2lkIGRy bV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpOwo+ID4g Kwo+ID4gKyNlbHNlCj4gPiArCj4gPiArc3RhdGljIGlubGluZSBpbnQgZHJtX2RwX2F1eF9kZXZf aW5pdCh2b2lkKQo+ID4gK3sKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbmxpbmUgdm9pZCBkcm1fZHBfYXV4X2Rldl9leGl0KHZvaWQpCj4gPiArewo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgaW5saW5lIGludCBkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUoc3Ry dWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ICt7Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUoc3Ry dWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ICt7Cj4gPiArfQo+ID4gKwo+ID4gKyNlbmRpZgo+ID4g Kwo+ID4gKyNlbmRpZgo+ID4gLS0gCj4gPiAyLjQuMwo+ID4gCj4gPiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dAo+ID4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cDovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo+IAo+IC0tIAo+IFZpbGxl IFN5cmrDpGzDpAo+IEludGVsIE9UQwo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIs IEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=