From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v6,1/6] typec: tcpm: Add core support for sink side PPS From: Guenter Roeck Message-Id: <20180322201542.GA8509@roeck-us.net> Date: Thu, 22 Mar 2018 13:15:42 -0700 To: Adam Thomson Cc: Heikki Krogerus , Greg Kroah-Hartman , Sebastian Reichel , Hans de Goede , Jun Li , linux-usb@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, support.opensource@diasemi.com List-ID: T24gVGh1LCBNYXIgMjIsIDIwMTggYXQgMDM6NTI6MDJQTSArMDAwMCwgQWRhbSBUaG9tc29uIHdy b3RlOgo+IFRoaXMgY29tbWl0IGFkZHMgY29kZSB0byBoYW5kbGUgcmVxdWVzdGluZyBvZiBQUFMg QVBET3MuIFN3aXRjaGluZwo+IGJldHdlZW4gc3RhbmRhcmQgUERPcyBhbmQgQVBET3MsIGFuZCBy ZS1yZXF1ZXN0aW5nIGFuIEFQRE8gdG8KPiBtb2RpZnkgb3BlcmF0aW5nIHZvbHRhZ2UvY3VycmVu dCB3aWxsIGJlIHRyaWdnZXJlZCBieSBhbgo+IGV4dGVybmFsIGNhbGwgaW50byBUQ1BNLgo+IAo+ IFNpZ25lZC1vZmYtYnk6IEFkYW0gVGhvbXNvbiA8QWRhbS5UaG9tc29uLk9wZW5zb3VyY2VAZGlh c2VtaS5jb20+Cj4gQWNrZWQtYnk6IEhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxp bnV4LmludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy91c2IvdHlwZWMvdGNwbS5jIHwgNTI0ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCj4gIGluY2x1ZGUv bGludXgvdXNiL3BkLmggICB8ICAgNCArLQo+ICBpbmNsdWRlL2xpbnV4L3VzYi90Y3BtLmggfCAg IDIgKy0KPiAgMyBmaWxlcyBjaGFuZ2VkLCA1MTMgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25z KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3RjcG0uYyBiL2RyaXZlcnMv dXNiL3R5cGVjL3RjcG0uYwo+IGluZGV4IDRjMGZjNTQuLjU2MThiM2YgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy91c2IvdHlwZWMvdGNwbS5jCj4gKysrIGIvZHJpdmVycy91c2IvdHlwZWMvdGNwbS5j Cj4gQEAgLTQ3LDYgKzQ3LDcgQEAKPiAgCVMoU05LX0RJU0NPVkVSWV9ERUJPVU5DRV9ET05FKSwJ CVwKPiAgCVMoU05LX1dBSVRfQ0FQQUJJTElUSUVTKSwJCVwKPiAgCVMoU05LX05FR09USUFURV9D QVBBQklMSVRJRVMpLAkJXAo+ICsJUyhTTktfTkVHT1RJQVRFX1BQU19DQVBBQklMSVRJRVMpLAlc Cj4gIAlTKFNOS19UUkFOU0lUSU9OX1NJTkspLAkJCVwKPiAgCVMoU05LX1RSQU5TSVRJT05fU0lO S19WQlVTKSwJCVwKPiAgCVMoU05LX1JFQURZKSwJCQkJXAo+IEBAIC0xNjYsNiArMTY3LDE2IEBA IHN0cnVjdCBwZF9tb2RlX2RhdGEgewo+ICAJc3RydWN0IHR5cGVjX2FsdG1vZGVfZGVzYyBhbHRt b2RlX2Rlc2NbU1ZJRF9ESVNDT1ZFUllfTUFYXTsKPiAgfTsKPiAgCj4gK3N0cnVjdCBwZF9wcHNf ZGF0YSB7Cj4gKwl1MzIgbWluX3ZvbHQ7Cj4gKwl1MzIgbWF4X3ZvbHQ7Cj4gKwl1MzIgbWF4X2N1 cnI7Cj4gKwl1MzIgb3V0X3ZvbHQ7Cj4gKwl1MzIgb3BfY3VycjsKPiArCWJvb2wgc3VwcG9ydGVk Owo+ICsJYm9vbCBhY3RpdmU7Cj4gK307Cj4gKwo+ICBzdHJ1Y3QgdGNwbV9wb3J0IHsKPiAgCXN0 cnVjdCBkZXZpY2UgKmRldjsKPiAgCj4gQEAgLTIzMyw2ICsyNDQsNyBAQCBzdHJ1Y3QgdGNwbV9w b3J0IHsKPiAgCXN0cnVjdCBjb21wbGV0aW9uIHN3YXBfY29tcGxldGU7Cj4gIAlpbnQgc3dhcF9z dGF0dXM7Cj4gIAo+ICsJdW5zaWduZWQgaW50IG5lZ290aWF0ZWRfcmV2Owo+ICAJdW5zaWduZWQg aW50IG1lc3NhZ2VfaWQ7Cj4gIAl1bnNpZ25lZCBpbnQgY2Fwc19jb3VudDsKPiAgCXVuc2lnbmVk IGludCBoYXJkX3Jlc2V0X2NvdW50Owo+IEBAIC0yNTksNiArMjcxLDcgQEAgc3RydWN0IHRjcG1f cG9ydCB7Cj4gIAl1bnNpZ25lZCBpbnQgbWF4X3Nua19tYTsKPiAgCXVuc2lnbmVkIGludCBtYXhf c25rX213Owo+ICAJdW5zaWduZWQgaW50IG9wZXJhdGluZ19zbmtfbXc7Cj4gKwlib29sIHVwZGF0 ZV9zaW5rX2NhcHM7Cj4gIAo+ICAJLyogUmVxdWVzdGVkIGN1cnJlbnQgLyB2b2x0YWdlICovCj4g IAl1MzIgY3VycmVudF9saW1pdDsKPiBAQCAtMjc1LDggKzI4OCwxMyBAQCBzdHJ1Y3QgdGNwbV9w b3J0IHsKPiAgCS8qIFZETyB0byByZXRyeSBpZiBVRlAgcmVzcG9uZGVyIHJlcGxpZWQgYnVzeSAq Lwo+ICAJdTMyIHZkb19yZXRyeTsKPiAgCj4gLQkvKiBBbHRlcm5hdGUgbW9kZSBkYXRhICovCj4g KwkvKiBQUFMgKi8KPiArCXN0cnVjdCBwZF9wcHNfZGF0YSBwcHNfZGF0YTsKPiArCXN0cnVjdCBj b21wbGV0aW9uIHBwc19jb21wbGV0ZTsKPiArCWJvb2wgcHBzX3BlbmRpbmc7Cj4gKwlpbnQgcHBz X3N0YXR1czsKPiAgCj4gKwkvKiBBbHRlcm5hdGUgbW9kZSBkYXRhICovCj4gIAlzdHJ1Y3QgcGRf bW9kZV9kYXRhIG1vZGVfZGF0YTsKPiAgCXN0cnVjdCB0eXBlY19hbHRtb2RlICpwYXJ0bmVyX2Fs dG1vZGVbU1ZJRF9ESVNDT1ZFUllfTUFYXTsKPiAgCXN0cnVjdCB0eXBlY19hbHRtb2RlICpwb3J0 X2FsdG1vZGVbU1ZJRF9ESVNDT1ZFUllfTUFYXTsKPiBAQCAtNDk0LDYgKzUxMiwxNiBAQCBzdGF0 aWMgdm9pZCB0Y3BtX2xvZ19zb3VyY2VfY2FwcyhzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ICAJ CQkJICBwZG9fbWF4X3ZvbHRhZ2UocGRvKSwKPiAgCQkJCSAgcGRvX21heF9wb3dlcihwZG8pKTsK PiAgCQkJYnJlYWs7Cj4gKwkJY2FzZSBQRE9fVFlQRV9BUERPOgo+ICsJCQlpZiAocGRvX2FwZG9f dHlwZShwZG8pID09IEFQRE9fVFlQRV9QUFMpCj4gKwkJCQlzY25wcmludGYobXNnLCBzaXplb2Yo bXNnKSwKPiArCQkJCQkgICIldS0ldSBtViwgJXUgbUEiLAo+ICsJCQkJCSAgcGRvX3Bwc19hcGRv X21pbl92b2x0YWdlKHBkbyksCj4gKwkJCQkJICBwZG9fcHBzX2FwZG9fbWF4X3ZvbHRhZ2UocGRv KSwKPiArCQkJCQkgIHBkb19wcHNfYXBkb19tYXhfY3VycmVudChwZG8pKTsKPiArCQkJZWxzZQo+ ICsJCQkJc3RyY3B5KG1zZywgInVuZGVmaW5lZCBBUERPIik7Cj4gKwkJCWJyZWFrOwo+ICAJCWRl ZmF1bHQ6Cj4gIAkJCXN0cmNweShtc2csICJ1bmRlZmluZWQiKTsKPiAgCQkJYnJlYWs7Cj4gQEAg LTc3NywxMSArODA1LDEzIEBAIHN0YXRpYyBpbnQgdGNwbV9wZF9zZW5kX3NvdXJjZV9jYXBzKHN0 cnVjdCB0Y3BtX3BvcnQgKnBvcnQpCj4gIAkJbXNnLmhlYWRlciA9IFBEX0hFQURFUl9MRShQRF9D VFJMX1JFSkVDVCwKPiAgCQkJCQkgIHBvcnQtPnB3cl9yb2xlLAo+ICAJCQkJCSAgcG9ydC0+ZGF0 YV9yb2xlLAo+ICsJCQkJCSAgcG9ydC0+bmVnb3RpYXRlZF9yZXYsCj4gIAkJCQkJICBwb3J0LT5t ZXNzYWdlX2lkLCAwKTsKPiAgCX0gZWxzZSB7Cj4gIAkJbXNnLmhlYWRlciA9IFBEX0hFQURFUl9M RShQRF9EQVRBX1NPVVJDRV9DQVAsCj4gIAkJCQkJICBwb3J0LT5wd3Jfcm9sZSwKPiAgCQkJCQkg IHBvcnQtPmRhdGFfcm9sZSwKPiArCQkJCQkgIHBvcnQtPm5lZ290aWF0ZWRfcmV2LAo+ICAJCQkJ CSAgcG9ydC0+bWVzc2FnZV9pZCwKPiAgCQkJCQkgIHBvcnQtPm5yX3NyY19wZG8pOwo+ICAJfQo+ IEBAIC04MDIsMTEgKzgzMiwxMyBAQCBzdGF0aWMgaW50IHRjcG1fcGRfc2VuZF9zaW5rX2NhcHMo c3RydWN0IHRjcG1fcG9ydCAqcG9ydCkKPiAgCQltc2cuaGVhZGVyID0gUERfSEVBREVSX0xFKFBE X0NUUkxfUkVKRUNULAo+ICAJCQkJCSAgcG9ydC0+cHdyX3JvbGUsCj4gIAkJCQkJICBwb3J0LT5k YXRhX3JvbGUsCj4gKwkJCQkJICBwb3J0LT5uZWdvdGlhdGVkX3JldiwKPiAgCQkJCQkgIHBvcnQt Pm1lc3NhZ2VfaWQsIDApOwo+ICAJfSBlbHNlIHsKPiAgCQltc2cuaGVhZGVyID0gUERfSEVBREVS X0xFKFBEX0RBVEFfU0lOS19DQVAsCj4gIAkJCQkJICBwb3J0LT5wd3Jfcm9sZSwKPiAgCQkJCQkg IHBvcnQtPmRhdGFfcm9sZSwKPiArCQkJCQkgIHBvcnQtPm5lZ290aWF0ZWRfcmV2LAo+ICAJCQkJ CSAgcG9ydC0+bWVzc2FnZV9pZCwKPiAgCQkJCQkgIHBvcnQtPm5yX3Nua19wZG8pOwo+ICAJfQo+ IEBAIC0xMTczLDYgKzEyMDUsNyBAQCBzdGF0aWMgdm9pZCB2ZG1fcnVuX3N0YXRlX21hY2hpbmUo c3RydWN0IHRjcG1fcG9ydCAqcG9ydCkKPiAgCQltc2cuaGVhZGVyID0gUERfSEVBREVSX0xFKFBE X0RBVEFfVkVORE9SX0RFRiwKPiAgCQkJCQkgIHBvcnQtPnB3cl9yb2xlLAo+ICAJCQkJCSAgcG9y dC0+ZGF0YV9yb2xlLAo+ICsJCQkJCSAgcG9ydC0+bmVnb3RpYXRlZF9yZXYsCj4gIAkJCQkJICBw b3J0LT5tZXNzYWdlX2lkLCBwb3J0LT52ZG9fY291bnQpOwo+ICAJCWZvciAoaSA9IDA7IGkgPCBw b3J0LT52ZG9fY291bnQ7IGkrKykKPiAgCQkJbXNnLnBheWxvYWRbaV0gPSBjcHVfdG9fbGUzMihw b3J0LT52ZG9fZGF0YVtpXSk7Cj4gQEAgLTEyNDQsNiArMTI3Nyw4IEBAIGVudW0gcGRvX2VyciB7 Cj4gIAlQRE9fRVJSX0ZJWEVEX05PVF9TT1JURUQsCj4gIAlQRE9fRVJSX1ZBUklBQkxFX0JBVFRf Tk9UX1NPUlRFRCwKPiAgCVBET19FUlJfRFVQRV9QRE8sCj4gKwlQRE9fRVJSX1BQU19BUERPX05P VF9TT1JURUQsCj4gKwlQRE9fRVJSX0RVUEVfUFBTX0FQRE8sCj4gIH07Cj4gIAo+ICBzdGF0aWMg Y29uc3QgY2hhciAqIGNvbnN0IHBkb19lcnJfbXNnW10gPSB7Cj4gQEAgLTEyNTksNiArMTI5NCwx MCBAQCBlbnVtIHBkb19lcnIgewo+ICAJIiBlcnI6IFZhcmlhYmxlL0JhdHRlcnkgc3VwcGx5IHBk b3Mgc2hvdWxkIGJlIGluIGluY3JlYXNpbmcgb3JkZXIgb2YgdGhlaXIgbWluaW11bSB2b2x0YWdl IiwKPiAgCVtQRE9fRVJSX0RVUEVfUERPXSA9Cj4gIAkiIGVycjogVmFyaWFibGUvQmF0dCBzdXBw bHkgcGRvcyBjYW5ub3QgaGF2ZSBzYW1lIG1pbi9tYXggdm9sdGFnZSIsCj4gKwlbUERPX0VSUl9Q UFNfQVBET19OT1RfU09SVEVEXSA9Cj4gKwkiIGVycjogUHJvZ3JhbW1hYmxlIHBvd2VyIHN1cHBs eSBhcGRvcyBzaG91bGQgYmUgaW4gaW5jcmVhc2luZyBvcmRlciBvZiB0aGVpciBtYXhpbXVtIHZv bHRhZ2UiLAo+ICsJW1BET19FUlJfRFVQRV9QUFNfQVBET10gPQo+ICsJIiBlcnI6IFByb2dyYW1t YWJsZSBwb3dlciBzdXBwbHkgYXBkb3MgY2Fubm90IGhhdmUgc2FtZSBtaW4vbWF4IHZvbHRhZ2Ug YW5kIG1heCBjdXJyZW50IiwKPiAgfTsKPiAgCj4gIHN0YXRpYyBlbnVtIHBkb19lcnIgdGNwbV9j YXBzX2VycihzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0LCBjb25zdCB1MzIgKnBkbywKPiBAQCAtMTMw OCw2ICsxMzQ3LDI2IEBAIHN0YXRpYyBlbnVtIHBkb19lcnIgdGNwbV9jYXBzX2VycihzdHJ1Y3Qg dGNwbV9wb3J0ICpwb3J0LCBjb25zdCB1MzIgKnBkbywKPiAgCQkJCQkgIHBkb19taW5fdm9sdGFn ZShwZG9baSAtIDFdKSkpCj4gIAkJCQkJcmV0dXJuIFBET19FUlJfRFVQRV9QRE87Cj4gIAkJCQli cmVhazsKPiArCQkJLyoKPiArCQkJICogVGhlIFByb2dyYW1tYWJsZSBQb3dlciBTdXBwbHkgQVBE T3MsIGlmIHByZXNlbnQsCj4gKwkJCSAqIHNoYWxsIGJlIHNlbnQgaW4gTWF4aW11bSBWb2x0YWdl IG9yZGVyOwo+ICsJCQkgKiBsb3dlc3QgdG8gaGlnaGVzdC4KPiArCQkJICovCj4gKwkJCWNhc2Ug UERPX1RZUEVfQVBETzoKPiArCQkJCWlmIChwZG9fYXBkb190eXBlKHBkb1tpXSkgIT0gQVBET19U WVBFX1BQUykKPiArCQkJCQlicmVhazsKPiArCj4gKwkJCQlpZiAocGRvX3Bwc19hcGRvX21heF9j dXJyZW50KHBkb1tpXSkgPAo+ICsJCQkJICAgIHBkb19wcHNfYXBkb19tYXhfY3VycmVudChwZG9b aSAtIDFdKSkKPiArCQkJCQlyZXR1cm4gUERPX0VSUl9QUFNfQVBET19OT1RfU09SVEVEOwo+ICsJ CQkJZWxzZSBpZiAocGRvX3Bwc19hcGRvX21pbl92b2x0YWdlKHBkb1tpXSkgPT0KPiArCQkJCQkg IHBkb19wcHNfYXBkb19taW5fdm9sdGFnZShwZG9baSAtIDFdKSAmJgo+ICsJCQkJCSBwZG9fcHBz X2FwZG9fbWF4X3ZvbHRhZ2UocGRvW2ldKSA9PQo+ICsJCQkJCSAgcGRvX3Bwc19hcGRvX21heF92 b2x0YWdlKHBkb1tpIC0gMV0pICYmCj4gKwkJCQkJIHBkb19wcHNfYXBkb19tYXhfY3VycmVudChw ZG9baV0pID09Cj4gKwkJCQkJICBwZG9fcHBzX2FwZG9fbWF4X2N1cnJlbnQocGRvW2kgLSAxXSkp Cj4gKwkJCQkJcmV0dXJuIFBET19FUlJfRFVQRV9QUFNfQVBETzsKPiArCQkJCWJyZWFrOwo+ICAJ CQlkZWZhdWx0Ogo+ICAJCQkJdGNwbV9sb2dfZm9yY2UocG9ydCwgIiBVbmtub3duIHBkbyB0eXBl Iik7Cj4gIAkJCX0KPiBAQCAtMTMzMywxMSArMTM5MiwxNiBAQCBzdGF0aWMgaW50IHRjcG1fdmFs aWRhdGVfY2FwcyhzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0LCBjb25zdCB1MzIgKnBkbywKPiAgLyoK PiAgICogUEQgKGRhdGEsIGNvbnRyb2wpIGNvbW1hbmQgaGFuZGxpbmcgZnVuY3Rpb25zCj4gICAq Lwo+ICsKPiArc3RhdGljIGludCB0Y3BtX3BkX3NlbmRfY29udHJvbChzdHJ1Y3QgdGNwbV9wb3J0 ICpwb3J0LAo+ICsJCQkJZW51bSBwZF9jdHJsX21zZ190eXBlIHR5cGUpOwo+ICsKPiAgc3RhdGlj IHZvaWQgdGNwbV9wZF9kYXRhX3JlcXVlc3Qoc3RydWN0IHRjcG1fcG9ydCAqcG9ydCwKPiAgCQkJ CSBjb25zdCBzdHJ1Y3QgcGRfbWVzc2FnZSAqbXNnKQo+ICB7Cj4gIAllbnVtIHBkX2RhdGFfbXNn X3R5cGUgdHlwZSA9IHBkX2hlYWRlcl90eXBlX2xlKG1zZy0+aGVhZGVyKTsKPiAgCXVuc2lnbmVk IGludCBjbnQgPSBwZF9oZWFkZXJfY250X2xlKG1zZy0+aGVhZGVyKTsKPiArCXVuc2lnbmVkIGlu dCByZXYgPSBwZF9oZWFkZXJfcmV2X2xlKG1zZy0+aGVhZGVyKTsKPiAgCXVuc2lnbmVkIGludCBp Owo+ICAKPiAgCXN3aXRjaCAodHlwZSkgewo+IEBAIC0xMzU2LDYgKzE0MjAsMTYgQEAgc3RhdGlj IHZvaWQgdGNwbV9wZF9kYXRhX3JlcXVlc3Qoc3RydWN0IHRjcG1fcG9ydCAqcG9ydCwKPiAgCQkJ CSAgIHBvcnQtPm5yX3NvdXJjZV9jYXBzKTsKPiAgCj4gIAkJLyoKPiArCQkgKiBBZGp1c3QgcmV2 aXNpb24gaW4gc3Vic2VxdWVudCBtZXNzYWdlIGhlYWRlcnMsIGFzIHJlcXVpcmVkLAo+ICsJCSAq IHRvIGNvbXBseSB3aXRoIDYuMi4xLjEuNSBvZiB0aGUgVVNCIFBEIDMuMCBzcGVjLiBXZSBkb24n dAo+ICsJCSAqIHN1cHBvcnQgUmV2IDEuMCBzbyBqdXN0IGRvIG5vdGhpbmcgaW4gdGhhdCBzY2Vu YXJpby4KPiArCQkgKi8KPiArCQlpZiAocmV2ID09IFBEX1JFVjEwKQo+ICsJCQlicmVhazsKPiAr CQllbHNlIGlmIChyZXYgPCBQRF9NQVhfUkVWKQoKU29tZSBzdGF0aWMgY2hlY2tlcnMgY29tcGxh aW4gYWJvdXQgZWxzZSBhZnRlciBicmVhaywgYW5kIEkgdGVuZCB0byBhZ3JlZS4KCj4gKwkJCXBv cnQtPm5lZ290aWF0ZWRfcmV2ID0gcmV2Owo+ICsKPiArCQkvKgo+ICAJCSAqIFRoaXMgbWVzc2Fn ZSBtYXkgYmUgcmVjZWl2ZWQgZXZlbiBpZiBWQlVTIGlzIG5vdAo+ICAJCSAqIHByZXNlbnQuIFRo aXMgaXMgcXVpdGUgdW5leHBlY3RlZDsgc2VlIFVTQiBQRAo+ICAJCSAqIHNwZWNpZmljYXRpb24s IHNlY3Rpb25zIDguMy4zLjYuMy4xIGFuZCA4LjMuMy42LjMuMi4KPiBAQCAtMTM3Niw2ICsxNDUw LDE5IEBAIHN0YXRpYyB2b2lkIHRjcG1fcGRfZGF0YV9yZXF1ZXN0KHN0cnVjdCB0Y3BtX3BvcnQg KnBvcnQsCj4gIAkJCXRjcG1fcXVldWVfbWVzc2FnZShwb3J0LCBQRF9NU0dfQ1RSTF9SRUpFQ1Qp Owo+ICAJCQlicmVhazsKICAJCX0KPiArCj4gKwkJLyoKPiArCQkgKiBBZGp1c3QgcmV2aXNpb24g aW4gc3Vic2VxdWVudCBtZXNzYWdlIGhlYWRlcnMsIGFzIHJlcXVpcmVkLAo+ICsJCSAqIHRvIGNv bXBseSB3aXRoIDYuMi4xLjEuNSBvZiB0aGUgVVNCIFBEIDMuMCBzcGVjLiBXZSBkb24ndAo+ICsJ CSAqIHN1cHBvcnQgUmV2IDEuMCBzbyBqdXN0IHJlamVjdCBpbiB0aGF0IHNjZW5hcmlvLgo+ICsJ CSAqLwo+ICsJCWlmIChyZXYgPT0gUERfUkVWMTApIHsKPiArCQkJdGNwbV9xdWV1ZV9tZXNzYWdl KHBvcnQsIFBEX01TR19DVFJMX1JFSkVDVCk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0gZWxzZSBpZiAo cmV2IDwgUERfTUFYX1JFVikgewoKU2FtZSBoZXJlLgoKPiArCQkJcG9ydC0+bmVnb3RpYXRlZF9y ZXYgPSByZXY7Cj4gKwkJfQo+ICsKPiAgCQlwb3J0LT5zaW5rX3JlcXVlc3QgPSBsZTMyX3RvX2Nw dShtc2ctPnBheWxvYWRbMF0pOwo+ICAJCXRjcG1fc2V0X3N0YXRlKHBvcnQsIFNSQ19ORUdPVElB VEVfQ0FQQUJJTElUSUVTLCAwKTsKPiAgCQlicmVhazsKPiBAQCAtMTQwMCw2ICsxNDg3LDE1IEBA IHN0YXRpYyB2b2lkIHRjcG1fcGRfZGF0YV9yZXF1ZXN0KHN0cnVjdCB0Y3BtX3BvcnQgKnBvcnQs Cj4gIAl9Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkIHRjcG1fcHBzX2NvbXBsZXRlKHN0cnVjdCB0 Y3BtX3BvcnQgKnBvcnQsIGludCByZXN1bHQpCj4gK3sKPiArCWlmIChwb3J0LT5wcHNfcGVuZGlu Zykgewo+ICsJCXBvcnQtPnBwc19zdGF0dXMgPSByZXN1bHQ7Cj4gKwkJcG9ydC0+cHBzX3BlbmRp bmcgPSBmYWxzZTsKPiArCQljb21wbGV0ZSgmcG9ydC0+cHBzX2NvbXBsZXRlKTsKPiArCX0KPiAr fQo+ICsKPiAgc3RhdGljIHZvaWQgdGNwbV9wZF9jdHJsX3JlcXVlc3Qoc3RydWN0IHRjcG1fcG9y dCAqcG9ydCwKPiAgCQkJCSBjb25zdCBzdHJ1Y3QgcGRfbWVzc2FnZSAqbXNnKQo+ICB7Cj4gQEAg LTE0NzYsNiArMTU3MiwxNCBAQCBzdGF0aWMgdm9pZCB0Y3BtX3BkX2N0cmxfcmVxdWVzdChzdHJ1 Y3QgdGNwbV9wb3J0ICpwb3J0LAo+ICAJCQkJbmV4dF9zdGF0ZSA9IFNOS19XQUlUX0NBUEFCSUxJ VElFUzsKPiAgCQkJdGNwbV9zZXRfc3RhdGUocG9ydCwgbmV4dF9zdGF0ZSwgMCk7Cj4gIAkJCWJy ZWFrOwo+ICsJCWNhc2UgU05LX05FR09USUFURV9QUFNfQ0FQQUJJTElUSUVTOgo+ICsJCQkvKiBS ZXZlcnQgZGF0YSBiYWNrIGZyb20gYW55IHJlcXVlc3RlZCBQUFMgdXBkYXRlcyAqLwo+ICsJCQlw b3J0LT5wcHNfZGF0YS5vdXRfdm9sdCA9IHBvcnQtPnN1cHBseV92b2x0YWdlOwo+ICsJCQlwb3J0 LT5wcHNfZGF0YS5vcF9jdXJyID0gcG9ydC0+Y3VycmVudF9saW1pdDsKPiArCQkJcG9ydC0+cHBz X3N0YXR1cyA9ICh0eXBlID09IFBEX0NUUkxfV0FJVCA/Cj4gKwkJCQkJICAgIC1FQUdBSU4gOiAt RU9QTk9UU1VQUCk7Cj4gKwkJCXRjcG1fc2V0X3N0YXRlKHBvcnQsIFNOS19SRUFEWSwgMCk7Cj4g KwkJCWJyZWFrOwo+ICAJCWNhc2UgRFJfU1dBUF9TRU5EOgo+ICAJCQlwb3J0LT5zd2FwX3N0YXR1 cyA9ICh0eXBlID09IFBEX0NUUkxfV0FJVCA/Cj4gIAkJCQkJICAgICAtRUFHQUlOIDogLUVPUE5P VFNVUFApOwo+IEBAIC0xNDk4LDYgKzE2MDIsMTMgQEAgc3RhdGljIHZvaWQgdGNwbV9wZF9jdHJs X3JlcXVlc3Qoc3RydWN0IHRjcG1fcG9ydCAqcG9ydCwKPiAgCWNhc2UgUERfQ1RSTF9BQ0NFUFQ6 Cj4gIAkJc3dpdGNoIChwb3J0LT5zdGF0ZSkgewo+ICAJCWNhc2UgU05LX05FR09USUFURV9DQVBB QklMSVRJRVM6Cj4gKwkJCXBvcnQtPnBwc19kYXRhLmFjdGl2ZSA9IGZhbHNlOwo+ICsJCQl0Y3Bt X3NldF9zdGF0ZShwb3J0LCBTTktfVFJBTlNJVElPTl9TSU5LLCAwKTsKPiArCQkJYnJlYWs7Cj4g KwkJY2FzZSBTTktfTkVHT1RJQVRFX1BQU19DQVBBQklMSVRJRVM6Cj4gKwkJCXBvcnQtPnBwc19k YXRhLmFjdGl2ZSA9IHRydWU7Cj4gKwkJCXBvcnQtPnN1cHBseV92b2x0YWdlID0gcG9ydC0+cHBz X2RhdGEub3V0X3ZvbHQ7Cj4gKwkJCXBvcnQtPmN1cnJlbnRfbGltaXQgPSBwb3J0LT5wcHNfZGF0 YS5vcF9jdXJyOwo+ICAJCQl0Y3BtX3NldF9zdGF0ZShwb3J0LCBTTktfVFJBTlNJVElPTl9TSU5L LCAwKTsKPiAgCQkJYnJlYWs7Cj4gIAkJY2FzZSBTT0ZUX1JFU0VUX1NFTkQ6Cj4gQEAgLTE2NTIs NiArMTc2Myw3IEBAIHN0YXRpYyBpbnQgdGNwbV9wZF9zZW5kX2NvbnRyb2woc3RydWN0IHRjcG1f cG9ydCAqcG9ydCwKPiAgCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7Cj4gIAltc2cuaGVh ZGVyID0gUERfSEVBREVSX0xFKHR5cGUsIHBvcnQtPnB3cl9yb2xlLAo+ICAJCQkJICBwb3J0LT5k YXRhX3JvbGUsCj4gKwkJCQkgIHBvcnQtPm5lZ290aWF0ZWRfcmV2LAo+ICAJCQkJICBwb3J0LT5t ZXNzYWdlX2lkLCAwKTsKPiAgCj4gIAlyZXR1cm4gdGNwbV9wZF90cmFuc21pdChwb3J0LCBUQ1BD X1RYX1NPUCwgJm1zZyk7Cj4gQEAgLTE3NjEsNiArMTg3Myw4IEBAIHN0YXRpYyBpbnQgdGNwbV9w ZF9zZWxlY3RfcGRvKHN0cnVjdCB0Y3BtX3BvcnQgKnBvcnQpCj4gIAl1bnNpZ25lZCBpbnQgaSwg bWF4X213ID0gMCwgbWF4X212ID0gMDsKPiAgCWludCByZXQgPSAtRUlOVkFMOwo+ICAKPiArCXBv cnQtPnBwc19kYXRhLnN1cHBvcnRlZCA9IGZhbHNlOwo+ICsKPiAgCS8qCj4gIAkgKiBTZWxlY3Qg dGhlIHNvdXJjZSBQRE8gcHJvdmlkaW5nIHRoZSBtb3N0IHBvd2VyIHdoaWxlIHN0YXlpbmcgd2l0 aGluCj4gIAkgKiB0aGUgYm9hcmQncyB2b2x0YWdlIGxpbWl0cy4gUHJlZmVyIFBETyBwcm92aWRp bmcgZXhwCj4gQEAgLTE3NzAsMjAgKzE4ODQsNDEgQEAgc3RhdGljIGludCB0Y3BtX3BkX3NlbGVj dF9wZG8oc3RydWN0IHRjcG1fcG9ydCAqcG9ydCkKPiAgCQllbnVtIHBkX3Bkb190eXBlIHR5cGUg PSBwZG9fdHlwZShwZG8pOwo+ICAJCXVuc2lnbmVkIGludCBtdiwgbWEsIG13Owo+ICAKPiAtCQlp ZiAodHlwZSA9PSBQRE9fVFlQRV9GSVhFRCkKPiArCQlzd2l0Y2ggKHR5cGUpIHsKPiArCQljYXNl IFBET19UWVBFX0ZJWEVEOgo+ICAJCQltdiA9IHBkb19maXhlZF92b2x0YWdlKHBkbyk7Cj4gLQkJ ZWxzZQo+ICsJCQlicmVhazsKPiArCQljYXNlIFBET19UWVBFX0JBVFQ6Cj4gKwkJY2FzZSBQRE9f VFlQRV9WQVI6Cj4gIAkJCW12ID0gcGRvX21pbl92b2x0YWdlKHBkbyk7Cj4gKwkJCWJyZWFrOwo+ ICsJCWNhc2UgUERPX1RZUEVfQVBETzoKPiArCQkJaWYgKHBkb19hcGRvX3R5cGUocGRvKSA9PSBB UERPX1RZUEVfUFBTKQo+ICsJCQkJcG9ydC0+cHBzX2RhdGEuc3VwcG9ydGVkID0gdHJ1ZTsKPiAr CQkJY29udGludWU7Cj4gKwkJZGVmYXVsdDoKPiArCQkJdGNwbV9sb2cocG9ydCwgIkludmFsaWQg UERPIHR5cGUsIGlnbm9yaW5nIik7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiAgCj4gLQkJaWYg KHR5cGUgPT0gUERPX1RZUEVfQkFUVCkgewo+IC0JCQltdyA9IHBkb19tYXhfcG93ZXIocGRvKTsK PiAtCQl9IGVsc2Ugewo+ICsJCXN3aXRjaCAodHlwZSkgewo+ICsJCWNhc2UgUERPX1RZUEVfRklY RUQ6Cj4gKwkJY2FzZSBQRE9fVFlQRV9WQVI6Cj4gIAkJCW1hID0gbWluKHBkb19tYXhfY3VycmVu dChwZG8pLAo+ICAJCQkJIHBvcnQtPm1heF9zbmtfbWEpOwo+ICAJCQltdyA9IG1hICogbXYgLyAx MDAwOwo+ICsJCQlicmVhazsKPiArCQljYXNlIFBET19UWVBFX0JBVFQ6Cj4gKwkJCW13ID0gcGRv X21heF9wb3dlcihwZG8pOwo+ICsJCQlicmVhazsKPiArCQljYXNlIFBET19UWVBFX0FQRE86Cj4g KwkJCWNvbnRpbnVlOwo+ICsJCWRlZmF1bHQ6Cj4gKwkJCXRjcG1fbG9nKHBvcnQsICJJbnZhbGlk IFBETyB0eXBlLCBpZ25vcmluZyIpOwo+ICsJCQljb250aW51ZTsKPiAgCQl9Cj4gIAo+IC0JCS8q IFBlcmZlciBoaWdoZXIgdm9sdGFnZXMgaWYgYXZhaWxhYmxlICovCj4gKwkJLyogUHJlZmVyIGhp Z2hlciB2b2x0YWdlcyBpZiBhdmFpbGFibGUgKi8KPiAgCQlpZiAoKG13ID4gbWF4X213IHx8ICht dyA9PSBtYXhfbXcgJiYgbXYgPiBtYXhfbXYpKSAmJgo+ICAJCSAgICBtdiA8PSBwb3J0LT5tYXhf c25rX212KSB7Cj4gIAkJCXJldCA9IGk7Cj4gQEAgLTE3OTUsNiArMTkzMCw2NSBAQCBzdGF0aWMg aW50IHRjcG1fcGRfc2VsZWN0X3BkbyhzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ICAJcmV0dXJu IHJldDsKPiAgfQo+ICAKPiArc3RhdGljIHVuc2lnbmVkIGludCB0Y3BtX3BkX3NlbGVjdF9wcHNf YXBkbyhzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgaSwgbWF4 X213ID0gMCwgbWF4X212ID0gMDsKPiArCXVuc2lnbmVkIGludCBwcHNfbWluX212LCBwcHNfbWF4 X212LCBtYSwgbXc7Cj4gKwllbnVtIHBkX3Bkb190eXBlIHR5cGU7Cj4gKwl1MzIgcGRvOwo+ICsJ dW5zaWduZWQgaW50IGluZGV4ID0gMDsKPiArCj4gKwkvKgo+ICsJICogU2VsZWN0IHRoZSBzb3Vy Y2UgUFBTIEFQRE8gcHJvdmlkaW5nIHRoZSBtb3N0IHBvd2VyIHdoaWxlIHN0YXlpbmcKPiArCSAq IHdpdGhpbiB0aGUgYm9hcmQncyBsaW1pdHMuIFdlIHNraXAgdGhlIGZpcnN0IFBETyBhcyB0aGlz IGlzIGFsd2F5cwo+ICsJICogNVYgM0EuCj4gKwkgKi8KPiArCWZvciAoaSA9IDE7IGkgPCBwb3J0 LT5ucl9zb3VyY2VfY2FwczsgKytpKSB7Cj4gKwkJcGRvID0gcG9ydC0+c291cmNlX2NhcHNbaV07 Cj4gKwkJdHlwZSA9IHBkb190eXBlKHBkbyk7Cj4gKwo+ICsJCXN3aXRjaCAodHlwZSkgewo+ICsJ CWNhc2UgUERPX1RZUEVfQVBETzoKPiArCQkJaWYgKHBkb19hcGRvX3R5cGUocGRvKSAhPSBBUERP X1RZUEVfUFBTKSB7Cj4gKwkJCQl0Y3BtX2xvZyhwb3J0LCAiTm90IFBQUyBBUERPLCBpZ25vcmlu ZyIpOwo+ICsJCQkJY29udGludWU7Cj4gKwkJCX0KPiArCj4gKwkJCXBwc19taW5fbXYgPSBwZG9f cHBzX2FwZG9fbWluX3ZvbHRhZ2UocGRvKTsKPiArCQkJcHBzX21heF9tdiA9IHBkb19wcHNfYXBk b19tYXhfdm9sdGFnZShwZG8pOwo+ICsJCQltYSA9IG1pbihwZG9fcHBzX2FwZG9fbWF4X2N1cnJl bnQocGRvKSwgcG9ydC0+bWF4X3Nua19tYSk7Cj4gKwkJCW13ID0gKG1hICogcHBzX21heF9tdikg LyAxMDAwOwo+ICsJCQlicmVhazsKPiArCQlkZWZhdWx0Ogo+ICsJCQl0Y3BtX2xvZyhwb3J0LCAi Tm90IEFQRE8gdHlwZSwgaWdub3JpbmciKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiAr CQkvKiBQcmVmZXIgaGlnaGVyIHZvbHRhZ2VzIGlmIGF2YWlsYWJsZSAqLwo+ICsJCWlmICgobXcg PiBtYXhfbXcgfHwgKG13ID09IG1heF9tdyAmJiBwcHNfbWF4X212ID4gbWF4X212KSkgJiYKPiAr CQkgICAgcHBzX21heF9tdiA8PSBwb3J0LT5tYXhfc25rX212KSB7Cj4gKwkJCWluZGV4ID0gaTsK PiArCQkJbWF4X213ID0gbXc7Cj4gKwkJCW1heF9tdiA9IHBwc19tYXhfbXY7Cj4gKwkJfQo+ICsJ fQo+ICsKPiArCWlmIChpbmRleCkgewo+ICsJCXBkbyA9IHBvcnQtPnNvdXJjZV9jYXBzW2luZGV4 XTsKPiArCj4gKwkJcG9ydC0+cHBzX2RhdGEubWluX3ZvbHQgPSBwZG9fcHBzX2FwZG9fbWluX3Zv bHRhZ2UocGRvKTsKPiArCQlwb3J0LT5wcHNfZGF0YS5tYXhfdm9sdCA9IHBkb19wcHNfYXBkb19t YXhfdm9sdGFnZShwZG8pOwo+ICsJCXBvcnQtPnBwc19kYXRhLm1heF9jdXJyID0KPiArCQkJbWlu KHBkb19wcHNfYXBkb19tYXhfY3VycmVudChwZG8pLCBwb3J0LT5tYXhfc25rX21hKTsKPiArCQlw b3J0LT5wcHNfZGF0YS5vdXRfdm9sdCA9Cj4gKwkJCW1pbihwZG9fcHBzX2FwZG9fbWF4X3ZvbHRh Z2UocGRvKSwgcG9ydC0+cHBzX2RhdGEub3V0X3ZvbHQpOwo+ICsJCXBvcnQtPnBwc19kYXRhLm9w X2N1cnIgPQo+ICsJCQltaW4ocGRvX3Bwc19hcGRvX21heF9jdXJyZW50KHBkbyksIHBvcnQtPnBw c19kYXRhLm9wX2N1cnIpOwo+ICsJfQo+ICsKPiArCXJldHVybiBpbmRleDsKPiArfQo+ICsKPiAg c3RhdGljIGludCB0Y3BtX3BkX2J1aWxkX3JlcXVlc3Qoc3RydWN0IHRjcG1fcG9ydCAqcG9ydCwg dTMyICpyZG8pCj4gIHsKPiAgCXVuc2lnbmVkIGludCBtdiwgbWEsIG13LCBmbGFnczsKPiBAQCAt MTgwOSwxMCArMjAwMywxOCBAQCBzdGF0aWMgaW50IHRjcG1fcGRfYnVpbGRfcmVxdWVzdChzdHJ1 Y3QgdGNwbV9wb3J0ICpwb3J0LCB1MzIgKnJkbykKPiAgCXBkbyA9IHBvcnQtPnNvdXJjZV9jYXBz W2luZGV4XTsKPiAgCXR5cGUgPSBwZG9fdHlwZShwZG8pOwo+ICAKPiAtCWlmICh0eXBlID09IFBE T19UWVBFX0ZJWEVEKQo+ICsJc3dpdGNoICh0eXBlKSB7Cj4gKwljYXNlIFBET19UWVBFX0ZJWEVE Ogo+ICAJCW12ID0gcGRvX2ZpeGVkX3ZvbHRhZ2UocGRvKTsKPiAtCWVsc2UKPiArCQlicmVhazsK PiArCWNhc2UgUERPX1RZUEVfQkFUVDoKPiArCWNhc2UgUERPX1RZUEVfVkFSOgo+ICAJCW12ID0g cGRvX21pbl92b2x0YWdlKHBkbyk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXRjcG1f bG9nKHBvcnQsICJJbnZhbGlkIFBETyBzZWxlY3RlZCEiKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCX0KPiAgCj4gIAkvKiBTZWxlY3QgbWF4aW11bSBhdmFpbGFibGUgY3VycmVudCB3aXRoaW4g dGhlIGJvYXJkJ3MgcG93ZXIgbGltaXQgKi8KPiAgCWlmICh0eXBlID09IFBET19UWVBFX0JBVFQp IHsKPiBAQCAtMTg3NSw2ICsyMDc3LDEwNSBAQCBzdGF0aWMgaW50IHRjcG1fcGRfc2VuZF9yZXF1 ZXN0KHN0cnVjdCB0Y3BtX3BvcnQgKnBvcnQpCj4gIAltc2cuaGVhZGVyID0gUERfSEVBREVSX0xF KFBEX0RBVEFfUkVRVUVTVCwKPiAgCQkJCSAgcG9ydC0+cHdyX3JvbGUsCj4gIAkJCQkgIHBvcnQt PmRhdGFfcm9sZSwKPiArCQkJCSAgcG9ydC0+bmVnb3RpYXRlZF9yZXYsCj4gKwkJCQkgIHBvcnQt Pm1lc3NhZ2VfaWQsIDEpOwo+ICsJbXNnLnBheWxvYWRbMF0gPSBjcHVfdG9fbGUzMihyZG8pOwo+ ICsKPiArCXJldHVybiB0Y3BtX3BkX3RyYW5zbWl0KHBvcnQsIFRDUENfVFhfU09QLCAmbXNnKTsK PiArfQo+ICsKPiArc3RhdGljIGludCB0Y3BtX3BkX2J1aWxkX3Bwc19yZXF1ZXN0KHN0cnVjdCB0 Y3BtX3BvcnQgKnBvcnQsIHUzMiAqcmRvKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgb3V0X212LCBv cF9tYSwgb3BfbXcsIG1pbl9tdiwgbWF4X212LCBtYXhfbWEsIGZsYWdzOwo+ICsJZW51bSBwZF9w ZG9fdHlwZSB0eXBlOwo+ICsJaW50IGluZGV4Owo+ICsJdTMyIHBkbzsKPiArCj4gKwlpbmRleCA9 IHRjcG1fcGRfc2VsZWN0X3Bwc19hcGRvKHBvcnQpOwo+ICsJaWYgKCFpbmRleCkKPiArCQlyZXR1 cm4gLUVPUE5PVFNVUFA7Cj4gKwo+ICsJcGRvID0gcG9ydC0+c291cmNlX2NhcHNbaW5kZXhdOwo+ ICsJdHlwZSA9IHBkb190eXBlKHBkbyk7Cj4gKwo+ICsJc3dpdGNoICh0eXBlKSB7Cj4gKwljYXNl IFBET19UWVBFX0FQRE86Cj4gKwkJaWYgKHBkb19hcGRvX3R5cGUocGRvKSAhPSBBUERPX1RZUEVf UFBTKSB7Cj4gKwkJCXRjcG1fbG9nKHBvcnQsICJJbnZhbGlkIEFQRE8gc2VsZWN0ZWQhIik7Cj4g KwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCQltaW5fbXYgPSBwb3J0LT5wcHNfZGF0YS5t aW5fdm9sdDsKPiArCQltYXhfbXYgPSBwb3J0LT5wcHNfZGF0YS5tYXhfdm9sdDsKPiArCQltYXhf bWEgPSBwb3J0LT5wcHNfZGF0YS5tYXhfY3VycjsKPiArCQlvdXRfbXYgPSBwb3J0LT5wcHNfZGF0 YS5vdXRfdm9sdDsKPiArCQlvcF9tYSA9IHBvcnQtPnBwc19kYXRhLm9wX2N1cnI7Cj4gKwkJYnJl YWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXRjcG1fbG9nKHBvcnQsICJJbnZhbGlkIFBETyBzZWxlY3Rl ZCEiKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlmbGFncyA9IFJET19VU0Jf Q09NTSB8IFJET19OT19TVVNQRU5EOwo+ICsKPiArCW9wX213ID0gKG9wX21hICogb3V0X212KSAv IDEwMDA7Cj4gKwlpZiAob3BfbXcgPCBwb3J0LT5vcGVyYXRpbmdfc25rX213KSB7Cj4gKwkJLyoK PiArCQkgKiBUcnkgcmFpc2luZyBjdXJyZW50IHRvIG1lZXQgcG93ZXIgbmVlZHMuIElmIHRoYXQn cyBub3QgZW5vdWdoCj4gKwkJICogdGhlbiB0cnkgdXBwaW5nIHRoZSB2b2x0YWdlLiBJZiB0aGF0 J3Mgc3RpbGwgbm90IGVub3VnaAo+ICsJCSAqIHRoZW4gd2UndmUgb2J2aW91c2x5IGNob3NlbiBh IFBQUyBBUERPIHdoaWNoIHJlYWxseSBpc24ndAo+ICsJCSAqIHN1aXRhYmxlIHNvIGFiYW5kb24g c2hpcC4KPiArCQkgKi8KPiArCQlvcF9tYSA9ICgocG9ydC0+b3BlcmF0aW5nX3Nua19tdyAqIDEw MDApIC8gb3V0X212KTsKClN0aWxsIHVubmVjZXNzYXJ5IG91dGVyICggKS4KCj4gKwkJaWYgKChw b3J0LT5vcGVyYXRpbmdfc25rX213ICogMTAwMCkgJSBvdXRfbXYpCj4gKwkJCSsrb3BfbWE7Cj4g KwkJb3BfbWEgKz0gUkRPX1BST0dfQ1VSUl9NQV9TVEVQIC0gKG9wX21hICUgUkRPX1BST0dfQ1VS Ul9NQV9TVEVQKTsKPiArCj4gKwkJaWYgKG9wX21hID4gbWF4X21hKSB7Cj4gKwkJCW9wX21hID0g bWF4X21hOwo+ICsJCQlvdXRfbXYgPSAoKHBvcnQtPm9wZXJhdGluZ19zbmtfbXcgKiAxMDAwKSAv IG9wX21hKTsKClNhbWUgaGVyZS4KCj4gKwkJCWlmICgocG9ydC0+b3BlcmF0aW5nX3Nua19tdyAq IDEwMDApICUgb3BfbWEpCj4gKwkJCQkrK291dF9tdjsKPiArCQkJb3V0X212ICs9IFJET19QUk9H X1ZPTFRfTVZfU1RFUCAtCj4gKwkJCQkgIChvdXRfbXYgJSBSRE9fUFJPR19WT0xUX01WX1NURVAp Owo+ICsKPiArCQkJaWYgKG91dF9tdiA+IG1heF9tdikgewo+ICsJCQkJdGNwbV9sb2cocG9ydCwg IkludmFsaWQgUFBTIEFQRE8gc2VsZWN0ZWQhIik7Cj4gKwkJCQlyZXR1cm4gLUVJTlZBTDsKPiAr CQkJfQo+ICsJCX0KPiArCX0KPiArCj4gKwl0Y3BtX2xvZyhwb3J0LCAiY2M9JWQgY2MxPSVkIGNj Mj0lZCB2YnVzPSVkIHZjb25uPSVzIHBvbGFyaXR5PSVkIiwKPiArCQkgcG9ydC0+Y2NfcmVxLCBw b3J0LT5jYzEsIHBvcnQtPmNjMiwgcG9ydC0+dmJ1c19zb3VyY2UsCj4gKwkJIHBvcnQtPnZjb25u X3JvbGUgPT0gVFlQRUNfU09VUkNFID8gInNvdXJjZSIgOiAic2luayIsCj4gKwkJIHBvcnQtPnBv bGFyaXR5KTsKPiArCj4gKwkqcmRvID0gUkRPX1BST0coaW5kZXggKyAxLCBvdXRfbXYsIG9wX21h LCBmbGFncyk7Cj4gKwo+ICsJdGNwbV9sb2cocG9ydCwgIlJlcXVlc3RpbmcgQVBETyAlZDogJXUg bVYsICV1IG1BIiwKPiArCQkgaW5kZXgsIG91dF9tdiwgb3BfbWEpOwo+ICsKPiArCXBvcnQtPnBw c19kYXRhLm9wX2N1cnIgPSBvcF9tYTsKPiArCXBvcnQtPnBwc19kYXRhLm91dF92b2x0ID0gb3V0 X212Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRjcG1fcGRfc2Vu ZF9wcHNfcmVxdWVzdChzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ICt7Cj4gKwlzdHJ1Y3QgcGRf bWVzc2FnZSBtc2c7Cj4gKwlpbnQgcmV0Owo+ICsJdTMyIHJkbzsKPiArCj4gKwlyZXQgPSB0Y3Bt X3BkX2J1aWxkX3Bwc19yZXF1ZXN0KHBvcnQsICZyZG8pOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJ cmV0dXJuIHJldDsKPiArCj4gKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOwo+ICsJbXNn LmhlYWRlciA9IFBEX0hFQURFUl9MRShQRF9EQVRBX1JFUVVFU1QsCj4gKwkJCQkgIHBvcnQtPnB3 cl9yb2xlLAo+ICsJCQkJICBwb3J0LT5kYXRhX3JvbGUsCj4gKwkJCQkgIHBvcnQtPm5lZ290aWF0 ZWRfcmV2LAo+ICAJCQkJICBwb3J0LT5tZXNzYWdlX2lkLCAxKTsKPiAgCW1zZy5wYXlsb2FkWzBd ID0gY3B1X3RvX2xlMzIocmRvKTsKPiAgCj4gQEAgLTIwNjAsNiArMjM2MSw3IEBAIHN0YXRpYyB2 b2lkIHRjcG1fcmVzZXRfcG9ydChzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ICAJdGNwbV90eXBl Y19kaXNjb25uZWN0KHBvcnQpOwo+ICAJcG9ydC0+YXR0YWNoZWQgPSBmYWxzZTsKPiAgCXBvcnQt PnBkX2NhcGFibGUgPSBmYWxzZTsKPiArCXBvcnQtPnBwc19kYXRhLnN1cHBvcnRlZCA9IGZhbHNl Owo+ICAKPiAgCS8qCj4gIAkgKiBGaXJzdCBSeCBJRCBzaG91bGQgYmUgMDsgc2V0IHRoaXMgdG8g YSBzZW50aW5lbCBvZiAtMSBzbyB0aGF0Cj4gQEAgLTIwNzUsNiArMjM3Nyw4IEBAIHN0YXRpYyB2 b2lkIHRjcG1fcmVzZXRfcG9ydChzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ICAJdGNwbV9zZXRf YXR0YWNoZWRfc3RhdGUocG9ydCwgZmFsc2UpOwo+ICAJcG9ydC0+dHJ5X3NyY19jb3VudCA9IDA7 Cj4gIAlwb3J0LT50cnlfc25rX2NvdW50ID0gMDsKPiArCXBvcnQtPnN1cHBseV92b2x0YWdlID0g MDsKPiArCXBvcnQtPmN1cnJlbnRfbGltaXQgPSAwOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCB0 Y3BtX2RldGFjaChzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+IEBAIC0yMzIxLDYgKzI2MjUsNyBA QCBzdGF0aWMgdm9pZCBydW5fc3RhdGVfbWFjaGluZShzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ ICAJCXR5cGVjX3NldF9wd3Jfb3Btb2RlKHBvcnQtPnR5cGVjX3BvcnQsIG9wbW9kZSk7Cj4gIAkJ cG9ydC0+cHdyX29wbW9kZSA9IFRZUEVDX1BXUl9NT0RFX1VTQjsKPiAgCQlwb3J0LT5jYXBzX2Nv dW50ID0gMDsKPiArCQlwb3J0LT5uZWdvdGlhdGVkX3JldiA9IFBEX01BWF9SRVY7Cj4gIAkJcG9y dC0+bWVzc2FnZV9pZCA9IDA7Cj4gIAkJcG9ydC0+cnhfbXNnaWQgPSAtMTsKPiAgCQlwb3J0LT5l eHBsaWNpdF9jb250cmFjdCA9IGZhbHNlOwo+IEBAIC0yMzgxLDYgKzI2ODYsNyBAQCBzdGF0aWMg dm9pZCBydW5fc3RhdGVfbWFjaGluZShzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ICAKPiAgCQl0 Y3BtX3N3YXBfY29tcGxldGUocG9ydCwgMCk7Cj4gIAkJdGNwbV90eXBlY19jb25uZWN0KHBvcnQp Owo+ICsKPiAgCQl0Y3BtX2NoZWNrX3NlbmRfZGlzY292ZXIocG9ydCk7Cj4gIAkJLyoKPiAgCQkg KiA2LjMuNQo+IEBAIC0yNDA0LDYgKzI3MTAsNyBAQCBzdGF0aWMgdm9pZCBydW5fc3RhdGVfbWFj aGluZShzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ICAJY2FzZSBTTktfVU5BVFRBQ0hFRDoKPiAg CQlpZiAoIXBvcnQtPm5vbl9wZF9yb2xlX3N3YXApCj4gIAkJCXRjcG1fc3dhcF9jb21wbGV0ZShw b3J0LCAtRU5PVENPTk4pOwo+ICsJCXRjcG1fcHBzX2NvbXBsZXRlKHBvcnQsIC1FTk9UQ09OTik7 Cj4gIAkJdGNwbV9zbmtfZGV0YWNoKHBvcnQpOwo+ICAJCWlmICh0Y3BtX3N0YXJ0X2RycF90b2dn bGluZyhwb3J0KSkgewo+ICAJCQl0Y3BtX3NldF9zdGF0ZShwb3J0LCBEUlBfVE9HR0xJTkcsIDAp Owo+IEBAIC0yNDEyLDYgKzI3MTksNyBAQCBzdGF0aWMgdm9pZCBydW5fc3RhdGVfbWFjaGluZShz dHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ICAJCXRjcG1fc2V0X2NjKHBvcnQsIFRZUEVDX0NDX1JE KTsKPiAgCQlpZiAocG9ydC0+cG9ydF90eXBlID09IFRZUEVDX1BPUlRfRFJQKQo+ICAJCQl0Y3Bt X3NldF9zdGF0ZShwb3J0LCBTUkNfVU5BVFRBQ0hFRCwgUERfVF9EUlBfU1JDKTsKPiArCgpQbGVh c2Ugbm8gd2hpdGVzcGFjZSBjaGFuZ2VzLgoKPiAgCQlicmVhazsKPiAgCWNhc2UgU05LX0FUVEFD SF9XQUlUOgo+ICAJCWlmICgocG9ydC0+Y2MxID09IFRZUEVDX0NDX09QRU4gJiYKPiBAQCAtMjQ5 Myw2ICsyODAxLDcgQEAgc3RhdGljIHZvaWQgcnVuX3N0YXRlX21hY2hpbmUoc3RydWN0IHRjcG1f cG9ydCAqcG9ydCkKPiAgCQkJCQkgICAgICBwb3J0LT5jYzIgOiBwb3J0LT5jYzEpOwo+ICAJCXR5 cGVjX3NldF9wd3Jfb3Btb2RlKHBvcnQtPnR5cGVjX3BvcnQsIG9wbW9kZSk7Cj4gIAkJcG9ydC0+ cHdyX29wbW9kZSA9IFRZUEVDX1BXUl9NT0RFX1VTQjsKPiArCQlwb3J0LT5uZWdvdGlhdGVkX3Jl diA9IFBEX01BWF9SRVY7Cj4gIAkJcG9ydC0+bWVzc2FnZV9pZCA9IDA7Cj4gIAkJcG9ydC0+cnhf bXNnaWQgPSAtMTsKPiAgCQlwb3J0LT5leHBsaWNpdF9jb250cmFjdCA9IGZhbHNlOwo+IEBAIC0y NTYzLDYgKzI4NzIsMjQgQEAgc3RhdGljIHZvaWQgcnVuX3N0YXRlX21hY2hpbmUoc3RydWN0IHRj cG1fcG9ydCAqcG9ydCkKPiAgCQkJCQkgICAgUERfVF9TRU5ERVJfUkVTUE9OU0UpOwo+ICAJCX0K PiAgCQlicmVhazsKPiArCWNhc2UgU05LX05FR09USUFURV9QUFNfQ0FQQUJJTElUSUVTOgo+ICsJ CXJldCA9IHRjcG1fcGRfc2VuZF9wcHNfcmVxdWVzdChwb3J0KTsKPiArCQlpZiAocmV0IDwgMCkg ewo+ICsJCQlwb3J0LT5wcHNfc3RhdHVzID0gcmV0Owo+ICsJCQkvKgo+ICsJCQkgKiBJZiB0aGlz IHdhcyBjYWxsZWQgZHVlIHRvIHVwZGF0ZXMgdG8gc2luawo+ICsJCQkgKiBjYXBhYmlsaXRpZXMs IGFuZCBwcHMgaXMgbm8gbG9uZ2VyIHZhbGlkLCB3ZSBzaG91bGQKPiArCQkJICogc2FmZWx5IGZh bGwgYmFjayB0byBhIHN0YW5kYXJkIFBETy4KPiArCQkJICovCj4gKwkJCWlmIChwb3J0LT51cGRh dGVfc2lua19jYXBzKQo+ICsJCQkJdGNwbV9zZXRfc3RhdGUocG9ydCwgU05LX05FR09USUFURV9D QVBBQklMSVRJRVMsIDApOwo+ICsJCQllbHNlCj4gKwkJCQl0Y3BtX3NldF9zdGF0ZShwb3J0LCBT TktfUkVBRFksIDApOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCXRjcG1fc2V0X3N0YXRlX2NvbmQocG9y dCwgaGFyZF9yZXNldF9zdGF0ZShwb3J0KSwKPiArCQkJCQkgICAgUERfVF9TRU5ERVJfUkVTUE9O U0UpOwo+ICsJCX0KPiArCQlicmVhazsKPiAgCWNhc2UgU05LX1RSQU5TSVRJT05fU0lOSzoKPiAg CWNhc2UgU05LX1RSQU5TSVRJT05fU0lOS19WQlVTOgo+ICAJCXRjcG1fc2V0X3N0YXRlKHBvcnQs IGhhcmRfcmVzZXRfc3RhdGUocG9ydCksCj4gQEAgLTI1NzAsNiArMjg5Nyw3IEBAIHN0YXRpYyB2 b2lkIHJ1bl9zdGF0ZV9tYWNoaW5lKHN0cnVjdCB0Y3BtX3BvcnQgKnBvcnQpCj4gIAkJYnJlYWs7 Cj4gIAljYXNlIFNOS19SRUFEWToKPiAgCQlwb3J0LT50cnlfc25rX2NvdW50ID0gMDsKPiArCQlw b3J0LT51cGRhdGVfc2lua19jYXBzID0gZmFsc2U7Cj4gIAkJaWYgKHBvcnQtPmV4cGxpY2l0X2Nv bnRyYWN0KSB7Cj4gIAkJCXR5cGVjX3NldF9wd3Jfb3Btb2RlKHBvcnQtPnR5cGVjX3BvcnQsCj4g IAkJCQkJICAgICBUWVBFQ19QV1JfTU9ERV9QRCk7Cj4gQEAgLTI1NzgsNyArMjkwNiwxMSBAQCBz dGF0aWMgdm9pZCBydW5fc3RhdGVfbWFjaGluZShzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ICAK PiAgCQl0Y3BtX3N3YXBfY29tcGxldGUocG9ydCwgMCk7Cj4gIAkJdGNwbV90eXBlY19jb25uZWN0 KHBvcnQpOwo+ICsKClBsZWFzZSBubyB3aGl0ZXNwYWNlIGNoYW5nZXMuCgo+ICAJCXRjcG1fY2hl Y2tfc2VuZF9kaXNjb3Zlcihwb3J0KTsKPiArCj4gKwkJdGNwbV9wcHNfY29tcGxldGUocG9ydCwg cG9ydC0+cHBzX3N0YXR1cyk7Cj4gKwo+ICAJCWJyZWFrOwo+ICAKPiAgCS8qIEFjY2Vzc29yeSBz dGF0ZXMgKi8KPiBAQCAtMjYyNSw2ICsyOTU3LDcgQEAgc3RhdGljIHZvaWQgcnVuX3N0YXRlX21h Y2hpbmUoc3RydWN0IHRjcG1fcG9ydCAqcG9ydCkKPiAgCQl0Y3BtX3NldF9zdGF0ZShwb3J0LCBT UkNfVU5BVFRBQ0hFRCwgUERfVF9QU19TT1VSQ0VfT04pOwo+ICAJCWJyZWFrOwo+ICAJY2FzZSBT TktfSEFSRF9SRVNFVF9TSU5LX09GRjoKPiArCQltZW1zZXQoJnBvcnQtPnBwc19kYXRhLCAwLCBz aXplb2YocG9ydC0+cHBzX2RhdGEpKTsKPiAgCQl0Y3BtX3NldF92Y29ubihwb3J0LCBmYWxzZSk7 Cj4gIAkJdGNwbV9zZXRfY2hhcmdlKHBvcnQsIGZhbHNlKTsKPiAgCQl0Y3BtX3NldF9yb2xlcyhw b3J0LCBmYWxzZSwgVFlQRUNfU0lOSywgVFlQRUNfREVWSUNFKTsKPiBAQCAtMjg0NSw2ICszMTc4 LDcgQEAgc3RhdGljIHZvaWQgcnVuX3N0YXRlX21hY2hpbmUoc3RydWN0IHRjcG1fcG9ydCAqcG9y dCkKPiAgCQlicmVhazsKPiAgCWNhc2UgRVJST1JfUkVDT1ZFUlk6Cj4gIAkJdGNwbV9zd2FwX2Nv bXBsZXRlKHBvcnQsIC1FUFJPVE8pOwo+ICsJCXRjcG1fcHBzX2NvbXBsZXRlKHBvcnQsIC1FUFJP VE8pOwo+ICAJCXRjcG1fc2V0X3N0YXRlKHBvcnQsIFBPUlRfUkVTRVQsIDApOwo+ICAJCWJyZWFr Owo+ICAJY2FzZSBQT1JUX1JFU0VUOgo+IEBAIC0zMzEwLDcgKzM2NDQsNyBAQCBzdGF0aWMgaW50 IHRjcG1fZHJfc2V0KGNvbnN0IHN0cnVjdCB0eXBlY19jYXBhYmlsaXR5ICpjYXAsCj4gIAltdXRl eF91bmxvY2soJnBvcnQtPmxvY2spOwo+ICAKPiAgCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90 aW1lb3V0KCZwb3J0LT5zd2FwX2NvbXBsZXRlLAo+IC0JCQkJbXNlY3NfdG9famlmZmllcyhQRF9S T0xFX1NXQVBfVElNRU9VVCkpKQo+ICsJCQkJbXNlY3NfdG9famlmZmllcyhQRF9TVEFURV9NQUNI SU5FX1RJTUVPVVQpKSkKCkhtbS4gSSBkb24ndCB0aGluayBjaGFuZ2luZyB0aGlzIGRlZmluZSBp cyBhbiBpbXByb3ZlbWVudC4KSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGRlZmluZSBhIG5ldyB0aW1l b3V0IGZvciB0aGUgUFBTIGNvbW1hbmRzCmluc3RlYWQgb2YgY2hhbmdpbmcgdGhlIGV4aXN0aW5n IGNvZGUuCgo+ICAJCXJldCA9IC1FVElNRURPVVQ7Cj4gIAllbHNlCj4gIAkJcmV0ID0gcG9ydC0+ c3dhcF9zdGF0dXM7Cj4gQEAgLTMzNTUsNyArMzY4OSw3IEBAIHN0YXRpYyBpbnQgdGNwbV9wcl9z ZXQoY29uc3Qgc3RydWN0IHR5cGVjX2NhcGFiaWxpdHkgKmNhcCwKPiAgCW11dGV4X3VubG9jaygm cG9ydC0+bG9jayk7Cj4gIAo+ICAJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnBv cnQtPnN3YXBfY29tcGxldGUsCj4gLQkJCQltc2Vjc190b19qaWZmaWVzKFBEX1JPTEVfU1dBUF9U SU1FT1VUKSkpCj4gKwkJCQltc2Vjc190b19qaWZmaWVzKFBEX1NUQVRFX01BQ0hJTkVfVElNRU9V VCkpKQo+ICAJCXJldCA9IC1FVElNRURPVVQ7Cj4gIAllbHNlCj4gIAkJcmV0ID0gcG9ydC0+c3dh cF9zdGF0dXM7Cj4gQEAgLTMzOTUsNyArMzcyOSw3IEBAIHN0YXRpYyBpbnQgdGNwbV92Y29ubl9z ZXQoY29uc3Qgc3RydWN0IHR5cGVjX2NhcGFiaWxpdHkgKmNhcCwKPiAgCW11dGV4X3VubG9jaygm cG9ydC0+bG9jayk7Cj4gIAo+ICAJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnBv cnQtPnN3YXBfY29tcGxldGUsCj4gLQkJCQltc2Vjc190b19qaWZmaWVzKFBEX1JPTEVfU1dBUF9U SU1FT1VUKSkpCj4gKwkJCQltc2Vjc190b19qaWZmaWVzKFBEX1NUQVRFX01BQ0hJTkVfVElNRU9V VCkpKQo+ICAJCXJldCA9IC1FVElNRURPVVQ7Cj4gIAllbHNlCj4gIAkJcmV0ID0gcG9ydC0+c3dh cF9zdGF0dXM7Cj4gQEAgLTM0MjcsNiArMzc2MSwxNjIgQEAgc3RhdGljIGludCB0Y3BtX3RyeV9y b2xlKGNvbnN0IHN0cnVjdCB0eXBlY19jYXBhYmlsaXR5ICpjYXAsIGludCByb2xlKQo+ICAJcmV0 dXJuIHJldDsKPiAgfQo+ICAKPiArc3RhdGljIGludCB0Y3BtX3Bwc19zZXRfb3BfY3VycihzdHJ1 Y3QgdGNwbV9wb3J0ICpwb3J0LCB1MTYgb3BfY3VycikKPiArewo+ICsJdW5zaWduZWQgaW50IHRh cmdldF9tdzsKPiArCWludCByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmcG9ydC0+c3dhcF9sb2Nr KTsKPiArCW11dGV4X2xvY2soJnBvcnQtPmxvY2spOwo+ICsKPiArCWlmICghcG9ydC0+cHBzX2Rh dGEuYWN0aXZlKSB7Cj4gKwkJcmV0ID0gLUVPUE5PVFNVUFA7Cj4gKwkJZ290byBwb3J0X3VubG9j azsKPiArCX0KPiArCj4gKwlpZiAocG9ydC0+c3RhdGUgIT0gU05LX1JFQURZKSB7Cj4gKwkJcmV0 ID0gLUVBR0FJTjsKPiArCQlnb3RvIHBvcnRfdW5sb2NrOwo+ICsJfQo+ICsKPiArCWlmIChvcF9j dXJyID4gcG9ydC0+cHBzX2RhdGEubWF4X2N1cnIpIHsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJ CWdvdG8gcG9ydF91bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJdGFyZ2V0X213ID0gKG9wX2N1cnIgKiBw b3J0LT5wcHNfZGF0YS5vdXRfdm9sdCkgLyAxMDAwOwo+ICsJaWYgKHRhcmdldF9tdyA8IHBvcnQt Pm9wZXJhdGluZ19zbmtfbXcpIHsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gcG9ydF91 bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJcmVpbml0X2NvbXBsZXRpb24oJnBvcnQtPnBwc19jb21wbGV0 ZSk7Cj4gKwlwb3J0LT5wcHNfZGF0YS5vcF9jdXJyID0gb3BfY3VycjsKPiArCXBvcnQtPnBwc19z dGF0dXMgPSAwOwo+ICsJcG9ydC0+cHBzX3BlbmRpbmcgPSB0cnVlOwo+ICsJdGNwbV9zZXRfc3Rh dGUocG9ydCwgU05LX05FR09USUFURV9QUFNfQ0FQQUJJTElUSUVTLCAwKTsKPiArCW11dGV4X3Vu bG9jaygmcG9ydC0+bG9jayk7Cj4gKwo+ICsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVv dXQoJnBvcnQtPnBwc19jb21wbGV0ZSwKPiArCQkJCW1zZWNzX3RvX2ppZmZpZXMoUERfU1RBVEVf TUFDSElORV9USU1FT1VUKSkpCj4gKwkJcmV0ID0gLUVUSU1FRE9VVDsKPiArCWVsc2UKPiArCQly ZXQgPSBwb3J0LT5wcHNfc3RhdHVzOwo+ICsKPiArCWdvdG8gc3dhcF91bmxvY2s7Cj4gKwo+ICtw b3J0X3VubG9jazoKPiArCW11dGV4X3VubG9jaygmcG9ydC0+bG9jayk7Cj4gK3N3YXBfdW5sb2Nr Ogo+ICsJbXV0ZXhfdW5sb2NrKCZwb3J0LT5zd2FwX2xvY2spOwo+ICsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGNwbV9wcHNfc2V0X291dF92b2x0KHN0cnVjdCB0Y3Bt X3BvcnQgKnBvcnQsIHUxNiBvdXRfdm9sdCkKPiArewo+ICsJdW5zaWduZWQgaW50IHRhcmdldF9t dzsKPiArCWludCByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmcG9ydC0+c3dhcF9sb2NrKTsKPiAr CW11dGV4X2xvY2soJnBvcnQtPmxvY2spOwo+ICsKPiArCWlmICghcG9ydC0+cHBzX2RhdGEuYWN0 aXZlKSB7Cj4gKwkJcmV0ID0gLUVPUE5PVFNVUFA7Cj4gKwkJZ290byBwb3J0X3VubG9jazsKPiAr CX0KPiArCj4gKwlpZiAocG9ydC0+c3RhdGUgIT0gU05LX1JFQURZKSB7Cj4gKwkJcmV0ID0gLUVB R0FJTjsKPiArCQlnb3RvIHBvcnRfdW5sb2NrOwo+ICsJfQo+ICsKPiArCWlmIChvdXRfdm9sdCA8 IHBvcnQtPnBwc19kYXRhLm1pbl92b2x0IHx8Cj4gKwkgICAgb3V0X3ZvbHQgPiBwb3J0LT5wcHNf ZGF0YS5tYXhfdm9sdCkgewo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBwb3J0X3VubG9j azsKPiArCX0KPiArCj4gKwl0YXJnZXRfbXcgPSAocG9ydC0+cHBzX2RhdGEub3BfY3VyciAqIG91 dF92b2x0KSAvIDEwMDA7Cj4gKwlpZiAodGFyZ2V0X213IDwgcG9ydC0+b3BlcmF0aW5nX3Nua19t dykgewo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBwb3J0X3VubG9jazsKPiArCX0KPiAr Cj4gKwlyZWluaXRfY29tcGxldGlvbigmcG9ydC0+cHBzX2NvbXBsZXRlKTsKPiArCXBvcnQtPnBw c19kYXRhLm91dF92b2x0ID0gb3V0X3ZvbHQ7Cj4gKwlwb3J0LT5wcHNfc3RhdHVzID0gMDsKPiAr CXBvcnQtPnBwc19wZW5kaW5nID0gdHJ1ZTsKPiArCXRjcG1fc2V0X3N0YXRlKHBvcnQsIFNOS19O RUdPVElBVEVfUFBTX0NBUEFCSUxJVElFUywgMCk7Cj4gKwltdXRleF91bmxvY2soJnBvcnQtPmxv Y2spOwo+ICsKPiArCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZwb3J0LT5wcHNf Y29tcGxldGUsCj4gKwkJCQltc2Vjc190b19qaWZmaWVzKFBEX1NUQVRFX01BQ0hJTkVfVElNRU9V VCkpKQo+ICsJCXJldCA9IC1FVElNRURPVVQ7Cj4gKwllbHNlCj4gKwkJcmV0ID0gcG9ydC0+cHBz X3N0YXR1czsKPiArCj4gKwlnb3RvIHN3YXBfdW5sb2NrOwo+ICsKPiArcG9ydF91bmxvY2s6Cj4g KwltdXRleF91bmxvY2soJnBvcnQtPmxvY2spOwo+ICtzd2FwX3VubG9jazoKPiArCW11dGV4X3Vu bG9jaygmcG9ydC0+c3dhcF9sb2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHRjcG1fcHBzX2FjdGl2YXRlKHN0cnVjdCB0Y3BtX3BvcnQgKnBvcnQsIGJvb2wg YWN0aXZhdGUpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsKPiArCW11dGV4X2xvY2soJnBvcnQt PnN3YXBfbG9jayk7Cj4gKwltdXRleF9sb2NrKCZwb3J0LT5sb2NrKTsKPiArCj4gKwlpZiAoIXBv cnQtPnBwc19kYXRhLnN1cHBvcnRlZCkgewo+ICsJCXJldCA9IC1FT1BOT1RTVVBQOwo+ICsJCWdv dG8gcG9ydF91bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJLyogVHJ5aW5nIHRvIGRlYWN0aXZhdGUgUFBT IHdoZW4gYWxyZWFkeSBkZWFjdGl2YXRlZCBzbyBqdXN0IGJhaWwgKi8KPiArCWlmICghcG9ydC0+ cHBzX2RhdGEuYWN0aXZlICYmICFhY3RpdmF0ZSkKPiArCQlnb3RvIHBvcnRfdW5sb2NrOwo+ICsK PiArCWlmIChwb3J0LT5zdGF0ZSAhPSBTTktfUkVBRFkpIHsKPiArCQlyZXQgPSAtRUFHQUlOOwo+ ICsJCWdvdG8gcG9ydF91bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJcmVpbml0X2NvbXBsZXRpb24oJnBv cnQtPnBwc19jb21wbGV0ZSk7Cj4gKwlwb3J0LT5wcHNfc3RhdHVzID0gMDsKPiArCXBvcnQtPnBw c19wZW5kaW5nID0gdHJ1ZTsKPiArCj4gKwkvKiBUcmlnZ2VyIFBQUyByZXF1ZXN0IG9yIG1vdmUg YmFjayB0byBzdGFuZGFyZCBQRE8gY29udHJhY3QgKi8KPiArCWlmIChhY3RpdmF0ZSkgewo+ICsJ CXBvcnQtPnBwc19kYXRhLm91dF92b2x0ID0gcG9ydC0+c3VwcGx5X3ZvbHRhZ2U7Cj4gKwkJcG9y dC0+cHBzX2RhdGEub3BfY3VyciA9IHBvcnQtPmN1cnJlbnRfbGltaXQ7Cj4gKwkJdGNwbV9zZXRf c3RhdGUocG9ydCwgU05LX05FR09USUFURV9QUFNfQ0FQQUJJTElUSUVTLCAwKTsKPiArCX0gZWxz ZSB7Cj4gKwkJdGNwbV9zZXRfc3RhdGUocG9ydCwgU05LX05FR09USUFURV9DQVBBQklMSVRJRVMs IDApOwo+ICsJfQo+ICsJbXV0ZXhfdW5sb2NrKCZwb3J0LT5sb2NrKTsKPiArCj4gKwlpZiAoIXdh aXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcG9ydC0+cHBzX2NvbXBsZXRlLAo+ICsJCQkJbXNl Y3NfdG9famlmZmllcyhQRF9TVEFURV9NQUNISU5FX1RJTUVPVVQpKSkKPiArCQlyZXQgPSAtRVRJ TUVET1VUOwo+ICsJZWxzZQo+ICsJCXJldCA9IHBvcnQtPnBwc19zdGF0dXM7Cj4gKwo+ICsJZ290 byBzd2FwX3VubG9jazsKPiArCj4gK3BvcnRfdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZwb3J0 LT5sb2NrKTsKPiArc3dhcF91bmxvY2s6Cj4gKwltdXRleF91bmxvY2soJnBvcnQtPnN3YXBfbG9j ayk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQgdGNwbV9pbml0 KHN0cnVjdCB0Y3BtX3BvcnQgKnBvcnQpCj4gIHsKPiAgCWVudW0gdHlwZWNfY2Nfc3RhdHVzIGNj MSwgY2MyOwo+IEBAIC0zNTY2LDEzICs0MDU2LDE4IEBAIGludCB0Y3BtX3VwZGF0ZV9zaW5rX2Nh cGFiaWxpdGllcyhzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0LCBjb25zdCB1MzIgKnBkbywKPiAgCXBv cnQtPm1heF9zbmtfbWEgPSBtYXhfc25rX21hOwo+ICAJcG9ydC0+bWF4X3Nua19tdyA9IG1heF9z bmtfbXc7Cj4gIAlwb3J0LT5vcGVyYXRpbmdfc25rX213ID0gb3BlcmF0aW5nX3Nua19tdzsKPiAr CXBvcnQtPnVwZGF0ZV9zaW5rX2NhcHMgPSB0cnVlOwo+ICAKPiAgCXN3aXRjaCAocG9ydC0+c3Rh dGUpIHsKPiAgCWNhc2UgU05LX05FR09USUFURV9DQVBBQklMSVRJRVM6Cj4gKwljYXNlIFNOS19O RUdPVElBVEVfUFBTX0NBUEFCSUxJVElFUzoKPiAgCWNhc2UgU05LX1JFQURZOgo+ICAJY2FzZSBT TktfVFJBTlNJVElPTl9TSU5LOgo+ICAJY2FzZSBTTktfVFJBTlNJVElPTl9TSU5LX1ZCVVM6Cj4g LQkJdGNwbV9zZXRfc3RhdGUocG9ydCwgU05LX05FR09USUFURV9DQVBBQklMSVRJRVMsIDApOwo+ ICsJCWlmIChwb3J0LT5wcHNfZGF0YS5hY3RpdmUpCj4gKwkJCXRjcG1fc2V0X3N0YXRlKHBvcnQs IFNOS19ORUdPVElBVEVfUFBTX0NBUEFCSUxJVElFUywgMCk7Cj4gKwkJZWxzZQo+ICsJCQl0Y3Bt X3NldF9zdGF0ZShwb3J0LCBTTktfTkVHT1RJQVRFX0NBUEFCSUxJVElFUywgMCk7Cj4gIAkJYnJl YWs7Cj4gIAlkZWZhdWx0Ogo+ICAJCWJyZWFrOwo+IEBAIC0zNjE0LDYgKzQxMDksNyBAQCBzdHJ1 Y3QgdGNwbV9wb3J0ICp0Y3BtX3JlZ2lzdGVyX3BvcnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgdGNwY19kZXYgKnRjcGMpCj4gIAo+ICAJaW5pdF9jb21wbGV0aW9uKCZwb3J0LT50eF9jb21w bGV0ZSk7Cj4gIAlpbml0X2NvbXBsZXRpb24oJnBvcnQtPnN3YXBfY29tcGxldGUpOwo+ICsJaW5p dF9jb21wbGV0aW9uKCZwb3J0LT5wcHNfY29tcGxldGUpOwo+ICAJdGNwbV9kZWJ1Z2ZzX2luaXQo cG9ydCk7Cj4gIAo+ICAJaWYgKHRjcG1fdmFsaWRhdGVfY2Fwcyhwb3J0LCB0Y3BjLT5jb25maWct PnNyY19wZG8sCj4gQEAgLTM2NDIsNyArNDEzOCw3IEBAIHN0cnVjdCB0Y3BtX3BvcnQgKnRjcG1f cmVnaXN0ZXJfcG9ydChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0Y3BjX2RldiAqdGNwYykK PiAgCXBvcnQtPnR5cGVjX2NhcHMucHJlZmVyX3JvbGUgPSB0Y3BjLT5jb25maWctPmRlZmF1bHRf cm9sZTsKPiAgCXBvcnQtPnR5cGVjX2NhcHMudHlwZSA9IHRjcGMtPmNvbmZpZy0+dHlwZTsKPiAg CXBvcnQtPnR5cGVjX2NhcHMucmV2aXNpb24gPSAweDAxMjA7CS8qIFR5cGUtQyBzcGVjIHJlbGVh c2UgMS4yICovCj4gLQlwb3J0LT50eXBlY19jYXBzLnBkX3JldmlzaW9uID0gMHgwMjAwOwkvKiBV U0ItUEQgc3BlYyByZWxlYXNlIDIuMCAqLwo+ICsJcG9ydC0+dHlwZWNfY2Fwcy5wZF9yZXZpc2lv biA9IDB4MDMwMDsJLyogVVNCLVBEIHNwZWMgcmVsZWFzZSAzLjAgKi8KPiAgCXBvcnQtPnR5cGVj X2NhcHMuZHJfc2V0ID0gdGNwbV9kcl9zZXQ7Cj4gIAlwb3J0LT50eXBlY19jYXBzLnByX3NldCA9 IHRjcG1fcHJfc2V0Owo+ICAJcG9ydC0+dHlwZWNfY2Fwcy52Y29ubl9zZXQgPSB0Y3BtX3Zjb25u X3NldDsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvcGQuaCBiL2luY2x1ZGUvbGlu dXgvdXNiL3BkLmgKPiBpbmRleCBmZjM1OWJkZi4uMDliNTcwZiAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL2xpbnV4L3VzYi9wZC5oCj4gKysrIGIvaW5jbHVkZS9saW51eC91c2IvcGQuaAo+IEBAIC0x MDMsOCArMTAzLDggQEAgZW51bSBwZF9leHRfbXNnX3R5cGUgewo+ICAJICgoKGNudCkgJiBQRF9I RUFERVJfQ05UX01BU0spIDw8IFBEX0hFQURFUl9DTlRfU0hJRlQpIHwJXAo+ICAJICgoZXh0X2hk cikgPyBQRF9IRUFERVJfRVhUX0hEUiA6IDApKQo+ICAKPiAtI2RlZmluZSBQRF9IRUFERVJfTEUo dHlwZSwgcHdyLCBkYXRhLCBpZCwgY250KSBcCj4gLQljcHVfdG9fbGUxNihQRF9IRUFERVIoKHR5 cGUpLCAocHdyKSwgKGRhdGEpLCBQRF9SRVYyMCwgKGlkKSwgKGNudCksICgwKSkpCj4gKyNkZWZp bmUgUERfSEVBREVSX0xFKHR5cGUsIHB3ciwgZGF0YSwgcmV2LCBpZCwgY250KSBcCj4gKwljcHVf dG9fbGUxNihQRF9IRUFERVIoKHR5cGUpLCAocHdyKSwgKGRhdGEpLCAocmV2KSwgKGlkKSwgKGNu dCksICgwKSkpCj4gIAo+ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwZF9oZWFkZXJfY250 KHUxNiBoZWFkZXIpCj4gIHsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdGNwbS5o IGIvaW5jbHVkZS9saW51eC91c2IvdGNwbS5oCj4gaW5kZXggY2ExYzBiNS4uZDY2NzNmNyAxMDA2 NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi90Y3BtLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4 L3VzYi90Y3BtLmgKPiBAQCAtMzUsNyArMzUsNyBAQCBlbnVtIHR5cGVjX2NjX3BvbGFyaXR5IHsK PiAgCj4gIC8qIFRpbWUgdG8gd2FpdCBmb3IgVENQQyB0byBjb21wbGV0ZSB0cmFuc21pdCAqLwo+ ICAjZGVmaW5lIFBEX1RfVENQQ19UWF9USU1FT1VUCTEwMAkJLyogaW4gbXMJKi8KPiAtI2RlZmlu ZSBQRF9ST0xFX1NXQVBfVElNRU9VVAkoTVNFQ19QRVJfU0VDICogMTApCj4gKyNkZWZpbmUgUERf U1RBVEVfTUFDSElORV9USU1FT1VUCShNU0VDX1BFUl9TRUMgKiAxMCkKPiAgCj4gIGVudW0gdGNw bV90cmFuc21pdF9zdGF0dXMgewo+ICAJVENQQ19UWF9TVUNDRVNTID0gMCwKPiAtLSAKPiAxLjku MQo+Ci0tLQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5z dWJzY3JpYmUgbGludXgtdXNiIiBpbgp0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21v QHZnZXIua2VybmVsLm9yZwpNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJu ZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK