From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rafael Antognolli Subject: Re: [PATCH v4 2/2] drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. Date: Tue, 29 Sep 2015 17:17:40 -0700 Message-ID: <20150930001740.GB2562@intel.com> References: <1443483936-2348-1-git-send-email-rafael.antognolli@intel.com> <1443483936-2348-3-git-send-email-rafael.antognolli@intel.com> <20150929140923.GY26517@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20150929140923.GY26517@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhhbmtzIFZpbGxlIGZvciB0aGUgcmV2aWV3LCBJJ20gYWRkcmVzc2luZyBhbGwgdGhlIGlzc3Vl cyBidXQgaGF2ZSBzb21lCnF1ZXN0aW9ucyBvbiB0aGUgb25lcyBtZW50aW9uZWQgYmVsb3c6CgpP biBUdWUsIFNlcCAyOSwgMjAxNSBhdCAwNTowOToyM1BNICswMzAwLCBWaWxsZSBTeXJqw6Rsw6Qg d3JvdGU6Cj4gT24gTW9uLCBTZXAgMjgsIDIwMTUgYXQgMDQ6NDU6MzZQTSAtMDcwMCwgUmFmYWVs IEFudG9nbm9sbGkgd3JvdGU6Cj4gPiBUaGlzIG1vZHVsZSBpcyBoZWF2aWx5IGJhc2VkIG9uIGky Yy1kZXYuIE9uY2UgbG9hZGVkLCBpdCBwcm92aWRlcyBvbmUKPiA+IGRldiBub2RlIHBlciBEUCBB VVggY2hhbm5lbCwgbmFtZWQgZHJtX2RwX2F1eE4sIHdoZXJlIE4gaXMgYW4gaW50ZWdlci4KPiA+ IAo+ID4gSXQncyBwb3NzaWJsZSB0byBrbm93IHdoaWNoIGNvbm5lY3RvciBvd25zIHRoaXMgYXV4 IGNoYW5uZWwgYnkgbG9va2luZwo+ID4gYXQgdGhlIHJlc3BlY3RpdmUgc3lzZnMgL3N5cy9jbGFz cy9kcm1fYXV4X2Rldi9kcm1fZHBfYXV4Ti9jb25uZWN0b3IsIGlmCj4gPiB0aGUgY29ubmVjdG9y IGRldmljZSBwb2ludGVyIHdhcyBjb3JyZWN0bHkgc2V0IGluIHRoZSBhdXggaGVscGVyIHN0cnVj dC4KPiA+IAo+ID4gVHdvIG1haW4gb3BlcmF0aW9ucyBhcmUgcHJvdmlkZWQgb24gdGhlIHJlZ2lz dGVycyByZWFkIGFuZCB3cml0ZS4gVGhlCj4gPiBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBi ZSByZWFkIG9yIHdyaXR0ZW4gaXMgZ2l2ZW4gdXNpbmcgbHNlZWsuIFRoZQo+ID4gc2VlayBwb3Np dGlvbiBpcyB1cGRhdGVkIHVwb24gcmVhZCBvciB3cml0ZS4KPiA+IAo+ID4gU2lnbmVkLW9mZi1i eTogUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4KPiA+IC0t LQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgIHwgICA4ICsKPiA+ICBkcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICB8ICAgMSArCj4gPiAgZHJpdmVycy9ncHUvZHJt L2RybV9kcF9hdXhfZGV2LmMgfCAzNTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCj4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYyAgfCAgIDUgKwo+ID4g IGluY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmggICAgIHwgIDUwICsrKysrKwo+ID4gIDUgZmls ZXMgY2hhbmdlZCwgNDIxIGluc2VydGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2RybV9kcF9hdXhfZGV2LmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j bHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYuaAo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4gaW5kZXggMWEwYThk Zi4uNjRmYTBmNCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4gQEAgLTI1LDYgKzI1LDE0IEBAIGNvbmZp ZyBEUk1fTUlQSV9EU0kKPiA+ICAJYm9vbAo+ID4gIAlkZXBlbmRzIG9uIERSTQo+ID4gIAo+ID4g K2NvbmZpZyBEUk1fRFBfQVVYX0NIQVJERVYKPiA+ICsJYm9vbCAiRFJNIERQIEFVWCBJbnRlcmZh Y2UiCj4gPiArCWRlcGVuZHMgb24gRFJNCj4gPiArCWhlbHAKPiA+ICsJICBDaG9vc2UgdGhpcyBv cHRpb24gdG8gZW5hYmxlIGEgL2Rldi9kcm1fZHBfYXV4TiBub2RlIHRoYXQgYWxsb3dzIHRvCj4g PiArCSAgcmVhZCBhbmQgd3JpdGUgdmFsdWVzIHRvIGFyYml0cmFyeSBEUENEIHJlZ2lzdGVycyBv biB0aGUgRFAgYXV4Cj4gPiArCSAgY2hhbm5lbC4KPiA+ICsKPiA+ICBjb25maWcgRFJNX0tNU19I RUxQRVIKPiA+ICAJdHJpc3RhdGUKPiA+ICAJZGVwZW5kcyBvbiBEUk0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ IGluZGV4IDQ1ZTc3MTkuLmU1YWU3ZjAgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gQEAgLTI1LDYg KzI1LDcgQEAgZHJtX2ttc19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1fZHBfaGVs cGVyLm8gZHJtX3Byb2JlX2hlbHBlci5vIFwKPiA+ICBkcm1fa21zX2hlbHBlci0kKENPTkZJR19E Uk1fTE9BRF9FRElEX0ZJUk1XQVJFKSArPSBkcm1fZWRpZF9sb2FkLm8KPiA+ICBkcm1fa21zX2hl bHBlci0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSBkcm1fZmJfaGVscGVyLm8KPiA+ ICBkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fS01TX0NNQV9IRUxQRVIpICs9IGRybV9mYl9j bWFfaGVscGVyLm8KPiA+ICtkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fRFBfQVVYX0NIQVJE RVYpICs9IGRybV9kcF9hdXhfZGV2Lm8KPiA+ICAKPiA+ICBvYmotJChDT05GSUdfRFJNX0tNU19I RUxQRVIpICs9IGRybV9rbXNfaGVscGVyLm8KPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZHJtX2RwX2F1eF9kZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rl di5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uZTMzNzA4MQo+ ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9hdXhfZGV2 LmMKPiA+IEBAIC0wLDAgKzEsMzU3IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAx NSBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ICsg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4g KyAqCj4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiA+ ICsgKiBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gPiArICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gPiArICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPiArICoKPiA+ICsgKiBBdXRob3JzOgo+ID4g KyAqICAgIFJhZmFlbCBBbnRvZ25vbGxpIDxyYWZhZWwuYW50b2dub2xsaUBpbnRlbC5jb20+Cj4g PiArICoKPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gPiAr I2luY2x1ZGUgPGxpbnV4L2ZzLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiA+ ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiArI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+ Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9k cm1fY3J0Yy5oPgo+ID4gKwo+ID4gK3N0cnVjdCBkcm1fZHBfYXV4X2RldiB7Cj4gPiArCXN0cnVj dCBsaXN0X2hlYWQgbGlzdDsKPiA+ICsJdW5zaWduZWQgaW5kZXg7Cj4gPiArCXN0cnVjdCBkcm1f ZHBfYXV4ICphdXg7Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiA+ICt9Owo+ID4gKwo+ID4g KyNkZWZpbmUgRFJNX0FVWF9NSU5PUlMJMjU2Cj4gPiArc3RhdGljIGludCBhdXhfbWF4X29mZnNl dCA9IDEgPDwgMjA7Cj4gCj4gUGVvcGxlIHNlZW0gdG8gcHJlZmVyIGRlZmluZXMgZm9yIHN1Y2gg dGhpbmdzLgo+IAo+ID4gK3N0YXRpYyBpbnQgZHJtX2RwX2F1eF9kZXZfY291bnQgPSAwOwo+ID4g K3N0YXRpYyBMSVNUX0hFQUQoZHJtX2RwX2F1eF9kZXZfbGlzdCk7Cj4gPiArc3RhdGljIERFRklO RV9TUElOTE9DSyhkcm1fZHBfYXV4X2Rldl9saXN0X2xvY2spOwo+ID4gKwo+ID4gK3N0YXRpYyBz dHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmRybV9kcF9hdXhfZGV2X2dldF9ieV9taW5vcih1bnNpZ25l ZCBpbmRleCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldjsKPiA+ ICsKPiA+ICsJc3Bpbl9sb2NrKCZkcm1fZHBfYXV4X2Rldl9saXN0X2xvY2spOwo+ID4gKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGF1eF9kZXYsICZkcm1fZHBfYXV4X2Rldl9saXN0LCBsaXN0KSB7Cj4g PiArCQlpZiAoYXV4X2Rldi0+aW5kZXggPT0gaW5kZXgpCj4gPiArCQkJZ290byBmb3VuZDsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlhdXhfZGV2ID0gTlVMTDsKPiA+ICtmb3VuZDoKPiA+ICsJc3Bpbl91 bmxvY2soJmRybV9kcF9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gPiArCXJldHVybiBhdXhfZGV2Owo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRybV9kcF9hdXhfZGV2ICpkcm1fZHBfYXV4 X2Rldl9nZXRfYnlfYXV4KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gPiArewo+ID4gKwlzdHJ1 Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXY7Cj4gPiArCj4gPiArCXNwaW5fbG9jaygmZHJtX2Rw X2F1eF9kZXZfbGlzdF9sb2NrKTsKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShhdXhfZGV2LCAm ZHJtX2RwX2F1eF9kZXZfbGlzdCwgbGlzdCkgewo+ID4gKwkJaWYgKGF1eF9kZXYtPmF1eCA9PSBh dXgpCj4gPiArCQkJZ290byBmb3VuZDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlhdXhfZGV2ID0gTlVM TDsKPiA+ICtmb3VuZDoKPiA+ICsJc3Bpbl91bmxvY2soJmRybV9kcF9hdXhfZGV2X2xpc3RfbG9j ayk7Cj4gPiArCXJldHVybiBhdXhfZGV2Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0 IGRybV9kcF9hdXhfZGV2ICpnZXRfZnJlZV9kcm1fZHBfYXV4X2RldihzdHJ1Y3QgZHJtX2RwX2F1 eCAqYXV4KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2Owo+ID4g KwlpbnQgaW5kZXg7Cj4gPiArCj4gPiArCXNwaW5fbG9jaygmZHJtX2RwX2F1eF9kZXZfbGlzdF9s b2NrKTsKPiA+ICsJaW5kZXggPSBkcm1fZHBfYXV4X2Rldl9jb3VudDsKPiA+ICsJc3Bpbl91bmxv Y2soJmRybV9kcF9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gPiArCWlmIChpbmRleCA+PSBEUk1fQVVY X01JTk9SUykgewo+ID4gKwkJcHJpbnRrKEtFUk5fRVJSICJkcm1fZHBfYXV4X2RldjogT3V0IG9m IGRldmljZSBtaW5vcnMgKCVkKVxuIiwKPiA+ICsJCSAgICAgICBpbmRleCk7Cj4gPiArCQlyZXR1 cm4gRVJSX1BUUigtRU5PREVWKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlhdXhfZGV2ID0ga3phbGxv YyhzaXplb2YoKmF1eF9kZXYpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFhdXhfZGV2KQo+ID4g KwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPiArCWF1eF9kZXYtPmF1eCA9IGF1eDsKPiA+ ICsJYXV4X2Rldi0+aW5kZXggPSBpbmRleDsKPiA+ICsKPiA+ICsJc3Bpbl9sb2NrKCZkcm1fZHBf YXV4X2Rldl9saXN0X2xvY2spOwo+ID4gKwlkcm1fZHBfYXV4X2Rldl9jb3VudCsrOwo+IAo+IFRo YXQncyByYWN5LiBTb21lb25lIGVsc2UgY291bGQgaGF2ZSBzbnVjayBpbiBhbmQgcHVzaGVkCj4g ZHJtX2RwX2F1eF9kZXZfY291bnQgb3ZlciB0aGUgbGltaXQgYWxyZWFkeS4KPiAKPiBNYXliZSB3 ZSB3YW50IHRvIHVzZSBhbiBpZHIgb3Igc29tZXRoaW5nIHRvIGFsbG9jYXRlIHRoZQo+IGluZGV4 Pwo+IAo+ID4gKwlsaXN0X2FkZF90YWlsKCZhdXhfZGV2LT5saXN0LCAmZHJtX2RwX2F1eF9kZXZf bGlzdCk7Cj4gPiArCXNwaW5fdW5sb2NrKCZkcm1fZHBfYXV4X2Rldl9saXN0X2xvY2spOwo+ID4g KwlyZXR1cm4gYXV4X2RldjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgcmV0dXJuX2Ry bV9kcF9hdXhfZGV2KHN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldikKPiA+ICt7Cj4gPiAr CXNwaW5fbG9jaygmZHJtX2RwX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiA+ICsJbGlzdF9kZWwoJmF1 eF9kZXYtPmxpc3QpOwo+ID4gKwlzcGluX3VubG9jaygmZHJtX2RwX2F1eF9kZXZfbGlzdF9sb2Nr KTsKPiA+ICsJa2ZyZWUoYXV4X2Rldik7Cj4gPiArfQo+IAo+IEknbSBub3QgYSBmYW4gb2YgdGhl IGdldF9mcmVlICYgcmV0dXJuIG5hbWVzLiBNYXliZSBqdXN0IGFsbG9jL2ZyZWU/Cj4gCj4gPiAr Cj4gPiArc3RhdGljIHNzaXplX3QgbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ICsJ CQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiA+ICt7Cj4gPiAr CXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9Cj4gPiArCQlkcm1fZHBfYXV4X2Rldl9n ZXRfYnlfbWlub3IoTUlOT1IoZGV2LT5kZXZ0KSk7Cj4gPiArCj4gPiArCWlmICghYXV4X2RldikK PiA+ICsJCXJldHVybiAtRU5PREVWOwo+ID4gKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwg YXV4X2Rldi0+YXV4LT5uYW1lKTsKPiA+ICt9Cj4gPiArc3RhdGljIERFVklDRV9BVFRSX1JPKG5h bWUpOwo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGNvbm5lY3Rvcl9zaG93KHN0cnVjdCBkZXZp Y2UgKmRldiwKPiA+ICsJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hh ciAqYnVmKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0KPiA+ ICsJCWRybV9kcF9hdXhfZGV2X2dldF9ieV9taW5vcihNSU5PUihkZXYtPmRldnQpKTsKPiA+ICsJ c3RydWN0IGRybV9kcF9hdXggKmF1eDsKPiA+ICsJc3RydWN0IGRldmljZSAqY29ubl9kZXY7Cj4g PiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBOVUxMOwo+ID4gKwo+ID4gKwlp ZiAoIWF1eF9kZXYpCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsKPiA+ICsJYXV4ID0gYXV4X2Rldi0+ YXV4Owo+ID4gKwljb25uX2RldiA9IGF1eC0+Y29ubmVjdG9yOwo+ID4gKwlpZiAoIWNvbm5fZGV2 KQo+ID4gKwkJcmV0dXJuIHNwcmludGYoYnVmLCAidW5rbm93blxuIik7Cj4gPiArCj4gPiArCWNv bm5lY3RvciA9IGRldl9nZXRfZHJ2ZGF0YShhdXgtPmNvbm5lY3Rvcik7Cj4gPiArCj4gPiArCXJl dHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjb25uZWN0b3ItPm5hbWUpOwo+ID4gK30KPiA+ICtz dGF0aWMgREVWSUNFX0FUVFJfUk8oY29ubmVjdG9yKTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0 IGF0dHJpYnV0ZSAqZHJtX2RwX2F1eF9hdHRyc1tdID0gewo+ID4gKwkmZGV2X2F0dHJfbmFtZS5h dHRyLAo+ID4gKwkmZGV2X2F0dHJfY29ubmVjdG9yLmF0dHIsCj4gPiArCU5VTEwsCj4gPiArfTsK PiA+ICtBVFRSSUJVVEVfR1JPVVBTKGRybV9kcF9hdXgpOwo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg YXV4ZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCj4gPiAr ewo+ID4gKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwo+ID4gKwlzdHJ1Y3Qg ZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXY7Cj4gPiArCj4gPiArCWF1eF9kZXYgPSBkcm1fZHBfYXV4 X2Rldl9nZXRfYnlfbWlub3IobWlub3IpOwo+ID4gKwlpZiAoIWF1eF9kZXYpCj4gPiArCQlyZXR1 cm4gLUVOT0RFVjsKPiA+ICsKPiA+ICsJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYXV4X2RldjsKPiA+ ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBsb2ZmX3QgYXV4ZGV2X2xsc2Vl ayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKPiA+ICt7Cj4g PiArCXJldHVybiBmaXhlZF9zaXplX2xsc2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSwgYXV4X21h eF9vZmZzZXQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVfdCBhdXhkZXZfcmVhZChz dHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAo+ID4gKwkJ CSAgIGxvZmZfdCAqb2Zmc2V0KQo+ID4gK3sKPiA+ICsJc3NpemVfdCBieXRlc19wZW5kaW5nLCBu dW1fYnl0ZXNfcHJvY2Vzc2VkID0gMDsKPiA+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhf ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ID4gKwo+ID4gKwlieXRlc19wZW5kaW5nID0gYXV4 X21heF9vZmZzZXQgLSAqb2Zmc2V0Owo+ID4gKwlieXRlc19wZW5kaW5nID0gY291bnQgPCBieXRl c19wZW5kaW5nID8gY291bnQgOiBieXRlc19wZW5kaW5nOwo+IAo+IEkgd291bGQgd3JpdGUgaXQg YXMKPiBieXRlc19wZW5kaW5nID0gbWluKGNvdW50LCBhdXhfbWF4X29mZnNldCAtICpvZmZzZXQp Owo+IAo+ID4gKwlpZiAoYnl0ZXNfcGVuZGluZyA8IDApCj4gPiArCQlyZXR1cm4gLUVGQVVMVDsK PiAKPiBDYW4gdGhpcyBhY3R1YWxseSBoYXBwZW4gc29tZWhvdz8KCkkgYmVsaWV2ZSB0aGUgImNv dW50IiBhcmd1bWVudCBjb3VsZCBiZSBuZWdhdGl2ZSwgbm90IHN1cmUgaWYgdGhlIGtlcm5lbApk b2VzIGFueSBjaGVja3Mgb24gdGhhdC4gU3RpbGwgaGF2ZSB0byBsb29rIHRoYXQgdXAuIEJ1dCBp ZiB0aGF0J3MgdGhlCmNhc2UsIEkgY291bGQganVzdCBjaGVjayBmb3IgY291bnQgPCAwIGVhcmxp ZXIgb24sIHJpZ2h0PwoKPiA+ICsKPiA+ICsJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBi dWYsIGJ5dGVzX3BlbmRpbmcpKQo+ID4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gPiArCj4gPiArCXdo aWxlIChieXRlc19wZW5kaW5nID4gMCkgewo+ID4gKwkJdWludDhfdCBsb2NhbGJ1ZltEUF9BVVhf TUFYX1BBWUxPQURfQllURVNdOwo+ID4gKwkJc3NpemVfdCB0b2RvID0gc2l6ZW9mKGxvY2FsYnVm KTsKPiA+ICsJCXNzaXplX3QgcmVzOwo+ID4gKwkJdG9kbyA9IGJ5dGVzX3BlbmRpbmcgPCB0b2Rv ID8gYnl0ZXNfcGVuZGluZyA6IHRvZG87Cj4gCj4gV291bGQgd3JpdGUgaXQgYXMKPiB0b2RvID0g bWluKGJ5dGVzX3BlbmRpbmcsIHNpemVvZihsb2NhbGJ1ZikpOwo+IAo+ID4gKwo+ID4gKwkJcmVz ID0gZHJtX2RwX2RwY2RfcmVhZChhdXhfZGV2LT5hdXgsICpvZmZzZXQsIGxvY2FsYnVmLCB0b2Rv KTsKPiA+ICsJCWlmIChyZXMgPD0gMCkgewo+ID4gKwkJCXJldHVybiBudW1fYnl0ZXNfcHJvY2Vz c2VkID8gbnVtX2J5dGVzX3Byb2Nlc3NlZCA6IHJlczsKPiA+ICsJCX0KPiAKPiBDb3VsZCBkcm9w IHRoZSBleHRyYSB7fQo+IAo+ID4gKwkJaWYgKF9fY29weV90b191c2VyKGJ1ZiArIG51bV9ieXRl c19wcm9jZXNzZWQsIGxvY2FsYnVmLCByZXMpKSB7Cj4gPiArCQkJcmV0dXJuIG51bV9ieXRlc19w cm9jZXNzZWQgPwo+ID4gKwkJCQludW1fYnl0ZXNfcHJvY2Vzc2VkIDogLUVGQVVMVDsKPiA+ICsJ CX0KPiAKPiBkaXR0bwo+IAo+ID4gKwkJYnl0ZXNfcGVuZGluZyAtPSByZXM7Cj4gPiArCQkqb2Zm c2V0ICs9IHJlczsKPiA+ICsJCW51bV9ieXRlc19wcm9jZXNzZWQgKz0gcmVzOwo+ID4gKwl9Cj4g PiArCj4gPiArCXJldHVybiBudW1fYnl0ZXNfcHJvY2Vzc2VkOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgc3NpemVfdCBhdXhkZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIg X191c2VyICpidWYsCj4gPiArCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCj4g PiArewo+ID4gKwlzc2l6ZV90IGJ5dGVzX3BlbmRpbmcsIG51bV9ieXRlc19wcm9jZXNzZWQgPSAw Owo+ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYgPSBmaWxlLT5wcml2YXRlX2Rh dGE7Cj4gPiArCj4gPiArCWJ5dGVzX3BlbmRpbmcgPSBhdXhfbWF4X29mZnNldCAtICpvZmZzZXQ7 Cj4gPiArCWJ5dGVzX3BlbmRpbmcgPSBjb3VudCA8IGJ5dGVzX3BlbmRpbmcgPyBjb3VudCA6IGJ5 dGVzX3BlbmRpbmc7Cj4gPiArCWlmIChieXRlc19wZW5kaW5nIDwgMCkKPiA+ICsJCXJldHVybiAt RUZBVUxUOwo+ID4gKwo+ID4gKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmLCBieXRl c19wZW5kaW5nKSkKPiA+ICsJCXJldHVybiAtRUZBVUxUOwo+ID4gKwo+ID4gKwl3aGlsZSAoYnl0 ZXNfcGVuZGluZyA+IDApIHsKPiA+ICsJCXVpbnQ4X3QgbG9jYWxidWZbRFBfQVVYX01BWF9QQVlM T0FEX0JZVEVTXTsKPiA+ICsJCXNzaXplX3QgdG9kbyA9IHNpemVvZihsb2NhbGJ1Zik7Cj4gPiAr CQlzc2l6ZV90IHJlczsKPiA+ICsJCXRvZG8gPSBieXRlc19wZW5kaW5nIDwgdG9kbyA/IGJ5dGVz X3BlbmRpbmcgOiB0b2RvOwo+ID4gKwkJaWYgKF9fY29weV9mcm9tX3VzZXIobG9jYWxidWYsCj4g PiArCQkJCSAgICAgYnVmICsgbnVtX2J5dGVzX3Byb2Nlc3NlZCwgdG9kbykpIHsKPiA+ICsJCQly ZXR1cm4gbnVtX2J5dGVzX3Byb2Nlc3NlZCA/Cj4gPiArCQkJCW51bV9ieXRlc19wcm9jZXNzZWQg OiAtRUZBVUxUOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJcmVzID0gZHJtX2RwX2RwY2Rfd3JpdGUo YXV4X2Rldi0+YXV4LCAqb2Zmc2V0LCBsb2NhbGJ1ZiwgdG9kbyk7Cj4gPiArCQlpZiAocmVzIDw9 IDApIHsKPiA+ICsJCQlyZXR1cm4gbnVtX2J5dGVzX3Byb2Nlc3NlZCA/IG51bV9ieXRlc19wcm9j ZXNzZWQgOiByZXM7Cj4gPiArCQl9Cj4gCj4gc2FtZSBjb21tZW50cyBmb3Igd3JpdGUgYXMgZm9y IHJlYWQuCj4gCj4gPiArCQlieXRlc19wZW5kaW5nIC09IHJlczsKPiA+ICsJCSpvZmZzZXQgKz0g cmVzOwo+ID4gKwkJbnVtX2J5dGVzX3Byb2Nlc3NlZCArPSByZXM7Cj4gPiArCX0KPiA+ICsKPiA+ ICsJcmV0dXJuIG51bV9ieXRlc19wcm9jZXNzZWQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF1eGRldl9mb3BzID0gewo+ID4gKwkub3duZXIJ CT0gVEhJU19NT0RVTEUsCj4gPiArCS5sbHNlZWsJCT0gYXV4ZGV2X2xsc2VlaywKPiA+ICsJLnJl YWQJCT0gYXV4ZGV2X3JlYWQsCj4gPiArCS53cml0ZQkJPSBhdXhkZXZfd3JpdGUsCj4gPiArCS5v cGVuCQk9IGF1eGRldl9vcGVuLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBjbGFz cyAqZHJtX2RwX2F1eF9kZXZfY2xhc3M7Cj4gPiArc3RhdGljIGludCBkcm1fZGV2X21ham9yID0g LTE7Cj4gPiArCj4gPiArI2RlZmluZSB0b19hdXhkZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVj dCBkcm1fZHBfYXV4X2RldiwgYXV4KQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9kcF9hdXhf cmVnaXN0ZXJfZGV2bm9kZSgpIC0gcmVnaXN0ZXIgYSBkZXZub2RlIGZvciB0aGlzIGF1eCBjaGFu bmVsCj4gPiArICogQGF1eDogRGlzcGxheVBvcnQgQVVYIGNoYW5uZWwKPiA+ICsgKgo+ID4gKyAq IFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJl Lgo+ID4gKyAqLwo+ID4gK2ludCBkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRy bV9kcF9hdXggKmF1eCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2Rl djsKPiA+ICsJaW50IHJlczsKPiA+ICsKPiA+ICsJYXV4X2RldiA9IGdldF9mcmVlX2RybV9kcF9h dXhfZGV2KGF1eCk7Cj4gPiArCWlmIChJU19FUlIoYXV4X2RldikpCj4gPiArCQlyZXR1cm4gUFRS X0VSUihhdXhfZGV2KTsKPiA+ICsKPiA+ICsJYXV4X2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShk cm1fZHBfYXV4X2Rldl9jbGFzcywgYXV4LT5kZXYsCj4gPiArCQkJCSAgICAgTUtERVYoZHJtX2Rl dl9tYWpvciwgYXV4X2Rldi0+aW5kZXgpLCBOVUxMLAo+ID4gKwkJCQkgICAgICJkcm1fZHBfYXV4 JWQiLCBhdXhfZGV2LT5pbmRleCk7Cj4gPiArCWlmIChJU19FUlIoYXV4X2Rldi0+ZGV2KSkgewo+ ID4gKwkJcmVzID0gUFRSX0VSUihhdXhfZGV2LT5kZXYpOwo+ID4gKwkJZ290byBlcnJvcjsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlwcl9kZWJ1ZygiZHJtX2RwX2F1eF9kZXY6IGF1eCBbJXNdIHJlZ2lz dGVyZWQgYXMgbWlub3IgJWRcbiIsCj4gPiArCQkgYXV4LT5uYW1lLCBhdXhfZGV2LT5pbmRleCk7 Cj4gPiArCXJldHVybiAwOwo+ID4gK2Vycm9yOgo+ID4gKwlyZXR1cm5fZHJtX2RwX2F1eF9kZXYo YXV4X2Rldik7Cj4gPiArCXJldHVybiByZXM7Cj4gPiArCj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ ID4gKyAqIGRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKCkgLSB1bnJlZ2lzdGVyIGEgZGV2 bm9kZSBmb3IgdGhpcyBhdXggY2hhbm5lbAo+ID4gKyAqIEBhdXg6IERpc3BsYXlQb3J0IEFVWCBj aGFubmVsCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZl IGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ICsgKi8KPiA+ICtpbnQgZHJtX2RwX2F1eF91bnJl Z2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ICt7Cj4gPiArCWludCBt aW5vcjsKPiA+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2Owo+ID4gKwo+ID4gKwlh dXhfZGV2ID0gZHJtX2RwX2F1eF9kZXZfZ2V0X2J5X2F1eChhdXgpOwo+ID4gKwlpZiAoIWF1eF9k ZXYpIC8qIGF0dGFjaCBtdXN0IGhhdmUgZmFpbGVkICovCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsK PiA+ICsJbWlub3IgPSBhdXhfZGV2LT5pbmRleDsKPiA+ICsJcmV0dXJuX2RybV9kcF9hdXhfZGV2 KGF1eF9kZXYpOwo+ID4gKwlkZXZpY2VfZGVzdHJveShkcm1fZHBfYXV4X2Rldl9jbGFzcywgTUtE RVYoZHJtX2Rldl9tYWpvciwgbWlub3IpKTsKPiAKPiBkZXZpY2VfZGVzdHJveSBiZWZvcmUgeW91 IGZyZWUgdGhlIGF1eGRldiBzZWVtIHNhZmVyLgo+IAo+IFdoYXQgaGFwcGVucyBpZiBzb21lb25l IGhhcyB0aGUgZGV2aWNlIHN0aWxsIG9wZW4/IERvIHdlIG5lZWQgdG8ga3JlZiB0aGUKPiBhdXhf ZGV2IGFuZCBhZGQgc29tZSBraW5kIG9mIGRlYWQgZmxhZyBvciBzb21ldGhpbmc/CgpZZWFoLCBJ IGNvdWxkbid0IGZpbmQgYW55dGhpbmcgdGhhdCBzYXlzIHRoZSBkZXZpY2Ugd291bGQgc3RheSBh cm91bmQKd2hpbGUgdGhlIGZpbGUgaXMgc3RpbGwgb3Blbiwgc28gSSBndWVzcyB5b3UgYXJlIHJp Z2h0LiBTbywgSSB3b3VsZCBuZWVkCnRvIHB1dCBzb21lIGxvY2tzIGFyb3VuZCB0aGUgYXV4X2Rl diB1c2FnZSB0b28sIHJpZ2h0PwoKPiA+ICsKPiA+ICsJcHJfZGVidWcoImRybV9kcF9hdXhfZGV2 OiBhdXggWyVzXSB1bnJlZ2lzdGVyZWRcbiIsIGF1eC0+bmFtZSk7Cj4gPiArCXJldHVybiAwOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IF9faW5pdCBkcm1fZHBfYXV4X2Rldl9pbml0KHZv aWQpCj4gPiArewo+ID4gKwlpbnQgcmVzOwo+ID4gKwo+ID4gKwlwcmludGsoS0VSTl9JTkZPICJk cm0gZHAgYXV4IC9kZXYgZW50cmllcyBkcml2ZXJcbiIpOwo+IAo+IEkgZG9uJ3Qgc2VlIG11Y2gg cG9pbnQgaW4gdGhpcyBwcmludGsuCj4gCj4gPiArCj4gPiArCXJlcyA9IHJlZ2lzdGVyX2NocmRl digwLCAiYXV4IiwgJmF1eGRldl9mb3BzKTsKPiA+ICsJaWYgKHJlcyA8IDApCj4gPiArCQlnb3Rv IG91dDsKPiA+ICsJZHJtX2Rldl9tYWpvciA9IHJlczsKPiA+ICsKPiA+ICsJZHJtX2RwX2F1eF9k ZXZfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJkcm1fZHBfYXV4X2RldiIpOwo+ ID4gKwlpZiAoSVNfRVJSKGRybV9kcF9hdXhfZGV2X2NsYXNzKSkgewo+ID4gKwkJcmVzID0gUFRS X0VSUihkcm1fZHBfYXV4X2Rldl9jbGFzcyk7Cj4gPiArCQlnb3RvIG91dF91bnJlZ19jaHJkZXY7 Cj4gPiArCX0KPiA+ICsJZHJtX2RwX2F1eF9kZXZfY2xhc3MtPmRldl9ncm91cHMgPSBkcm1fZHBf YXV4X2dyb3VwczsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArb3V0X3VucmVnX2No cmRldjoKPiA+ICsJdW5yZWdpc3Rlcl9jaHJkZXYoZHJtX2Rldl9tYWpvciwgImF1eCIpOwo+ID4g K291dDoKPiA+ICsJcHJpbnRrKEtFUk5fRVJSICIlczogRHJpdmVyIEluaXRpYWxpc2F0aW9uIGZh aWxlZFxuIiwgX19GSUxFX18pOwo+ID4gKwlyZXR1cm4gcmVzOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgdm9pZCBfX2V4aXQgZHJtX2RwX2F1eF9kZXZfZXhpdCh2b2lkKQo+ID4gK3sKPiA+ICsJ cHJpbnRrKEtFUk5fSU5GTyAiZHJtIGRwIGF1eCAvZGV2IGVudHJpZXMgZHJpdmVyIC0gdW5sb2Fk aW5nXG4iKTsKPiAKPiBkaXR0bwo+IAo+ID4gKwljbGFzc19kZXN0cm95KGRybV9kcF9hdXhfZGV2 X2NsYXNzKTsKPiA+ICsJdW5yZWdpc3Rlcl9jaHJkZXYoZHJtX2Rldl9tYWpvciwgImF1eCIpOwo+ ID4gK30KPiA+ICsKPiA+ICtNT0RVTEVfQVVUSE9SKCJSYWZhZWwgQW50b2dub2xsaSA8cmFmYWVs LmFudG9nbm9sbGlAaW50ZWwuY29tPiIpOwo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiRFJNIERQ IEFVWCAvZGV2IGVudHJpZXMgZHJpdmVyIik7Cj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+ IAo+IERvZXNuJ3QgbWF0Y2ggeW91ciBsaWNlbnNlIGJvaWxlcnBsYXRlLgoKU28sIHNob3VsZCBp dCBiZSAiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyI/Cgo+ID4gKwo+ID4gK21vZHVsZV9pbml0 KGRybV9kcF9hdXhfZGV2X2luaXQpOwo+ID4gK21vZHVsZV9leGl0KGRybV9kcF9hdXhfZGV2X2V4 aXQpOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jCj4gPiBpbmRleCA5NTM1YzViLi5mM2EyZWIw IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+ID4gQEAgLTI4LDYgKzI4LDcgQEAK PiA+ICAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KPiA+ICAjaW5jbHVkZSA8bGludXgvaTJjLmg+ Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9k cm1fZHBfYXV4X2Rldi5oPgo+ID4gICNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gIAo+ID4gIC8q Kgo+ID4gQEAgLTc2OCw2ICs3NjksOSBAQCBpbnQgZHJtX2RwX2F1eF9yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2RwX2F1eCAqYXV4KQo+ID4gIAlzdHJsY3B5KGF1eC0+ZGRjLm5hbWUsIGF1eC0+bmFtZSA/ IGF1eC0+bmFtZSA6IGRldl9uYW1lKGF1eC0+ZGV2KSwKPiA+ICAJCXNpemVvZihhdXgtPmRkYy5u YW1lKSk7Cj4gPiAgCj4gPiArCj4gPiArCWRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9kZShhdXgp Owo+ID4gKwo+ID4gIAlyZXR1cm4gaTJjX2FkZF9hZGFwdGVyKCZhdXgtPmRkYyk7Cj4gPiAgfQo+ ID4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F1eF9yZWdpc3Rlcik7Cj4gPiBAQCAtNzc4LDYgKzc4 Miw3IEBAIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F1eF9yZWdpc3Rlcik7Cj4gPiAgICovCj4gPiAg dm9pZCBkcm1fZHBfYXV4X3VucmVnaXN0ZXIoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ICB7 Cj4gPiArCWRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKGF1eCk7Cj4gPiAgCWkyY19kZWxf YWRhcHRlcigmYXV4LT5kZGMpOwo+ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9hdXhf dW5yZWdpc3Rlcik7Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYu aCBiL2luY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gPiBpbmRleCAwMDAwMDAwLi43NzUzNGU4Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9p bmNsdWRlL2RybS9kcm1fZHBfYXV4X2Rldi5oCj4gPiBAQCAtMCwwICsxLDUwIEBACj4gPiArLyoK PiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiAr ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK PiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ID4g KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiArICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPiAr ICoKPiA+ICsgKiBBdXRob3JzOgo+ID4gKyAqICAgIFJhZmFlbCBBbnRvZ25vbGxpIDxyYWZhZWwu YW50b2dub2xsaUBpbnRlbC5jb20+Cj4gPiArICoKPiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVm IF9VQVBJX0xJTlVYX0RSTV9EUF9BVVhfREVWXwo+ID4gKyNkZWZpbmUgX1VBUElfTElOVVhfRFJN X0RQX0FVWF9ERVZfCj4gCj4gTm90IHVhcGkuCj4gCj4gI2lmbmRlZiBEUk1fRFBfQVVYX0RFVl9I Cj4gI2RlZmluZSAuLi4KPiB3b3VsZCBzZWVtIGxpbmUgZW5vdWdoLgo+IAo+ID4gKwo+ID4gKyNp ZmRlZiBDT05GSUdfRFJNX0RQX0FVWF9DSEFSREVWCj4gPiArCj4gPiAraW50IGRybV9kcF9hdXhf cmVnaXN0ZXJfZGV2bm9kZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KTsKPiA+ICtpbnQgZHJtX2Rw X2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCk7Cj4gPiArCj4g PiArI2Vsc2UKPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIGludCBkcm1fZHBfYXV4X3JlZ2lzdGVy X2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ICt7Cj4gPiArCXJldHVybiAwOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIGludCBkcm1fZHBfYXV4X3VucmVnaXN0ZXJf ZGV2bm9kZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KQo+ID4gK3sKPiA+ICsJcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gKyNlbmRpZgo+ID4gLS0gCj4gPiAyLjQu Mwo+ID4gCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwo+ID4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAoKVGhhbmtzLApSYWZhZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK