From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 4/8] drm/i915: Reduce duplicated forcewake logic Date: Tue, 16 Dec 2014 17:26:17 +0200 Message-ID: <8761db62g6.fsf@gaia.fi.intel.com> References: <1418063262-32256-1-git-send-email-mika.kuoppala@intel.com> <1418063262-32256-4-git-send-email-mika.kuoppala@intel.com> <548AE410.4080007@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 93C49899FF for ; Tue, 16 Dec 2014 07:34:58 -0800 (PST) In-Reply-To: <548AE410.4080007@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Deepak S , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RGVlcGFrIFMgPGRlZXBhay5zQGxpbnV4LmludGVsLmNvbT4gd3JpdGVzOgoKPiBPbiBNb25kYXkg MDggRGVjZW1iZXIgMjAxNCAxMTo1NyBQTSwgTWlrYSBLdW9wcGFsYSB3cm90ZToKPj4gRnJvbTog Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+Cj4+IEludHJvZHVjZSBh IHN0cnVjdHVyZSB0byB0cmFjayB0aGUgaW5kaXZpZHVhbCBmb3JjZXdha2UgZG9tYWlucyBhbmQg dXNlCj4+IHRoYXQgdG8gZWxpbWluYXRlIGR1cGxpY2F0ZSBsb2dpYy4KPj4KPj4gdjI6IC0gUmVi YXNlIG9uIGxhdGVzdCBkaW5xIChNaWthKQo+PiAgICAgIC0gZm9yX2VhY2hfZndfZG9tYWluIG1h Y3JvIChNaWthKQo+PiAgICAgIC0gSGFuZGxlIHJlc2V0IGF0b21pY2FsbHksIGtlZXBpbmcgdGhl IHRpbWVyIHJ1bm5pbmcgKE1pa2EpCj4+ICAgICAgLSBmb3JfZWFjaF9md19kb21haW4gcGFyYW1l dGVyIG9yZGVyaW5nIChDaHJpcykKPj4gICAgICAtIGRlZmVyIHRpbWVyIG9uIG5ldyByZWdpc3Rl ciBhY2Nlc3MgKE1pa2EpCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNA Y2hyaXMtd2lsc29uLmNvLnVrPiAodjEpCj4+IFNpZ25lZC1vZmYtYnk6IE1pa2EgS3VvcHBhbGEg PG1pa2Eua3VvcHBhbGFAaW50ZWwuY29tPgo+PiAtLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RlYnVnZnMuYyB8ICA2NSArKystLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oICAgICB8ICA1NCArKystLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3VuY29yZS5jIHwgNDEwICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+PiAg IDMgZmlsZXMgY2hhbmdlZCwgMjA4IGluc2VydGlvbnMoKyksIDMyMSBkZWxldGlvbnMoLSkKPj4K Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPj4gaW5kZXggZTE0MjYyOS4uNWNjODM4 YiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPj4gQEAgLTEyMzUsMTQg KzEyMzUsMzYgQEAgc3RhdGljIGludCBpcm9ubGFrZV9kcnBjX2luZm8oc3RydWN0IHNlcV9maWxl ICptKQo+PiAgIAlyZXR1cm4gMDsKPj4gICB9Cj4+ICAgCj4+IC1zdGF0aWMgaW50IHZsdl9kcnBj X2luZm8oc3RydWN0IHNlcV9maWxlICptKQo+PiArc3RhdGljIGludCBpOTE1X2dlbjZfZm9yY2V3 YWtlX2NvdW50X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+PiAgIHsKPj4g KwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IG0tPnByaXZhdGU7Cj4+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7Cj4+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPj4gKwlzdHJ1Y3QgaW50ZWxfdW5j b3JlX2ZvcmNld2FrZV9kb21haW4gKmZ3X2RvbWFpbjsKPj4gKwljb25zdCBjaGFyICpkb21haW5f bmFtZXNbXSA9IHsKPj4gKwkJInJlbmRlciIsCj4+ICsJCSJibGl0dGVyIiwKPj4gKwkJIm1lZGlh IiwKPj4gKwl9Owo+PiArCWludCBpOwo+PiArCj4+ICsJc3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYt PnVuY29yZS5sb2NrKTsKPj4gKwlmb3JfZWFjaF9md19kb21haW4oZndfZG9tYWluLCBkZXZfcHJp diwgaSkgewo+PiArCQlzZXFfcHJpbnRmKG0sICIlcy53YWtlX2NvdW50ID0gJXVcbiIsCj4+ICsJ CQkgICBkb21haW5fbmFtZXNbaV0sCj4+ICsJCQkgICBmd19kb21haW4tPndha2VfY291bnQpOwo+ PiArCX0KPj4gKwlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT51bmNvcmUubG9jayk7Cj4+ICAg Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdmx2X2RycGNfaW5mbyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4+ICt7Cj4+ICAgCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2Rl ID0gbS0+cHJpdmF0ZTsKPj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9y LT5kZXY7Cj4+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7Cj4+ICAgCXUzMiBycG1vZGVjdGwxLCByY2N0bDEsIHB3X3N0YXR1czsKPj4gLQl1 bnNpZ25lZCBmd19yZW5kZXJjb3VudCA9IDAsIGZ3X21lZGlhY291bnQgPSAwOwo+PiAgIAo+PiAg IAlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7Cj4+ICAgCj4+IEBAIC0xMjc0LDIyICsx Mjk2LDExIEBAIHN0YXRpYyBpbnQgdmx2X2RycGNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4+ ICAgCXNlcV9wcmludGYobSwgIk1lZGlhIFJDNiByZXNpZGVuY3kgc2luY2UgYm9vdDogJXVcbiIs Cj4+ICAgCQkgICBJOTE1X1JFQUQoVkxWX0dUX01FRElBX1JDNikpOwo+PiAgIAo+PiAtCXNwaW5f bG9ja19pcnEoJmRldl9wcml2LT51bmNvcmUubG9jayk7Cj4+IC0JZndfcmVuZGVyY291bnQgPSBk ZXZfcHJpdi0+dW5jb3JlLmZ3X3JlbmRlcmNvdW50Owo+PiAtCWZ3X21lZGlhY291bnQgPSBkZXZf cHJpdi0+dW5jb3JlLmZ3X21lZGlhY291bnQ7Cj4+IC0Jc3Bpbl91bmxvY2tfaXJxKCZkZXZfcHJp di0+dW5jb3JlLmxvY2spOwo+PiAtCj4+IC0Jc2VxX3ByaW50ZihtLCAiRm9yY2V3YWtlIFJlbmRl ciBDb3VudCA9ICV1XG4iLCBmd19yZW5kZXJjb3VudCk7Cj4+IC0Jc2VxX3ByaW50ZihtLCAiRm9y Y2V3YWtlIE1lZGlhIENvdW50ID0gJXVcbiIsIGZ3X21lZGlhY291bnQpOwo+PiAtCj4+IC0KPj4g LQlyZXR1cm4gMDsKPj4gKwlyZXR1cm4gaTkxNV9nZW42X2ZvcmNld2FrZV9jb3VudF9pbmZvKG0s IE5VTEwpOwo+PiAgIH0KPj4gICAKPj4gLQo+PiAgIHN0YXRpYyBpbnQgZ2VuNl9kcnBjX2luZm8o c3RydWN0IHNlcV9maWxlICptKQo+PiAgIHsKPj4gLQo+PiAgIAlzdHJ1Y3QgZHJtX2luZm9fbm9k ZSAqbm9kZSA9IG0tPnByaXZhdGU7Cj4+ICAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2Rl LT5taW5vci0+ZGV2Owo+PiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwo+PiBAQCAtMTMwMyw3ICsxMzE0LDcgQEAgc3RhdGljIGludCBnZW42 X2RycGNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4+ICAgCWludGVsX3J1bnRpbWVfcG1fZ2V0 KGRldl9wcml2KTsKPj4gICAKPj4gICAJc3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrKTsKPj4gLQlmb3JjZXdha2VfY291bnQgPSBkZXZfcHJpdi0+dW5jb3JlLmZvcmNld2FrZV9j b3VudDsKPj4gKwlmb3JjZXdha2VfY291bnQgPSBkZXZfcHJpdi0+dW5jb3JlLmZ3X2RvbWFpbltG V19ET01BSU5fSURfUkVOREVSXS53YWtlX2NvdW50Owo+PiAgIAlzcGluX3VubG9ja19pcnEoJmRl dl9wcml2LT51bmNvcmUubG9jayk7Cj4+ICAgCj4+ICAgCWlmIChmb3JjZXdha2VfY291bnQpIHsK Pj4gQEAgLTE5MzEsMzAgKzE5NDIsNiBAQCBzdGF0aWMgaW50IGk5MTVfZXhlY2xpc3RzKHN0cnVj dCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPj4gICAJcmV0dXJuIDA7Cj4+ICAgfQo+PiAgIAo+ PiAtc3RhdGljIGludCBpOTE1X2dlbjZfZm9yY2V3YWtlX2NvdW50X2luZm8oc3RydWN0IHNlcV9m aWxlICptLCB2b2lkICpkYXRhKQo+PiAtewo+PiAtCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2Rl ID0gbS0+cHJpdmF0ZTsKPj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3It PmRldjsKPj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOwo+PiAtCXVuc2lnbmVkIGZvcmNld2FrZV9jb3VudCA9IDAsIGZ3X3JlbmRlcmNvdW50 ID0gMCwgZndfbWVkaWFjb3VudCA9IDA7Cj4+IC0KPj4gLQlzcGluX2xvY2tfaXJxKCZkZXZfcHJp di0+dW5jb3JlLmxvY2spOwo+PiAtCWlmIChJU19WQUxMRVlWSUVXKGRldikpIHsKPj4gLQkJZndf cmVuZGVyY291bnQgPSBkZXZfcHJpdi0+dW5jb3JlLmZ3X3JlbmRlcmNvdW50Owo+PiAtCQlmd19t ZWRpYWNvdW50ID0gZGV2X3ByaXYtPnVuY29yZS5md19tZWRpYWNvdW50Owo+PiAtCX0gZWxzZQo+ PiAtCQlmb3JjZXdha2VfY291bnQgPSBkZXZfcHJpdi0+dW5jb3JlLmZvcmNld2FrZV9jb3VudDsK Pj4gLQlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT51bmNvcmUubG9jayk7Cj4+IC0KPj4gLQlp ZiAoSVNfVkFMTEVZVklFVyhkZXYpKSB7Cj4+IC0JCXNlcV9wcmludGYobSwgImZ3X3JlbmRlcmNv dW50ID0gJXVcbiIsIGZ3X3JlbmRlcmNvdW50KTsKPj4gLQkJc2VxX3ByaW50ZihtLCAiZndfbWVk aWFjb3VudCA9ICV1XG4iLCBmd19tZWRpYWNvdW50KTsKPj4gLQl9IGVsc2UKPj4gLQkJc2VxX3By aW50ZihtLCAiZm9yY2V3YWtlIGNvdW50ID0gJXVcbiIsIGZvcmNld2FrZV9jb3VudCk7Cj4+IC0K Pj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAgIHN0YXRpYyBjb25zdCBjaGFyICpzd2l6emxl X3N0cmluZyh1bnNpZ25lZCBzd2l6emxlKQo+PiAgIHsKPj4gICAJc3dpdGNoIChzd2l6emxlKSB7 Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiBpbmRleCA5NWRmYTJkLi40MTA1NThhIDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4gQEAgLTU1NCwyMCArNTU0LDQ1IEBAIHN0cnVj dCBpbnRlbF91bmNvcmVfZnVuY3Mgewo+PiAgIAkJCQl1aW50NjRfdCB2YWwsIGJvb2wgdHJhY2Up Owo+PiAgIH07Cj4+ICAgCj4+ICtlbnVtIHsKPj4gKwlGV19ET01BSU5fSURfUkVOREVSID0gMCwK Pj4gKwlGV19ET01BSU5fSURfQkxJVFRFUiwKPj4gKwlGV19ET01BSU5fSURfTUVESUEsCj4+ICsK Pj4gKwlGV19ET01BSU5fSURfQ09VTlQKPj4gK307Cj4+ICsKPj4gICBzdHJ1Y3QgaW50ZWxfdW5j b3JlIHsKPj4gICAJc3BpbmxvY2tfdCBsb2NrOyAvKiogbG9jayBpcyBhbHNvIHRha2VuIGluIGly cSBjb250ZXh0cy4gKi8KPj4gICAKPj4gICAJc3RydWN0IGludGVsX3VuY29yZV9mdW5jcyBmdW5j czsKPj4gICAKPj4gICAJdW5zaWduZWQgZmlmb19jb3VudDsKPj4gLQl1bnNpZ25lZCBmb3JjZXdh a2VfY291bnQ7Cj4+IC0KPj4gLQl1bnNpZ25lZCBmd19yZW5kZXJjb3VudDsKPj4gLQl1bnNpZ25l ZCBmd19tZWRpYWNvdW50Owo+PiAtCXVuc2lnbmVkIGZ3X2JsaXR0ZXJjb3VudDsKPj4gLQo+PiAt CXN0cnVjdCB0aW1lcl9saXN0IGZvcmNlX3dha2VfdGltZXI7Cj4+IC19Owo+PiArCXVuc2lnbmVk IGZ3X2RvbWFpbnM7Cj4+ICsKPj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21h aW4gewo+PiArCQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKPj4gKwkJaW50IGlkOwo+ PiArCQl1bnNpZ25lZCB3YWtlX2NvdW50Owo+PiArCQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsK Pj4gKwl9IGZ3X2RvbWFpbltGV19ET01BSU5fSURfQ09VTlRdOwo+PiArI2RlZmluZSBGT1JDRVdB S0VfUkVOREVSCSgxIDw8IEZXX0RPTUFJTl9JRF9SRU5ERVIpCj4+ICsjZGVmaW5lIEZPUkNFV0FL RV9CTElUVEVSCSgxIDw8IEZXX0RPTUFJTl9JRF9CTElUVEVSKQo+PiArI2RlZmluZSBGT1JDRVdB S0VfTUVESUEJCSgxIDw8IEZXX0RPTUFJTl9JRF9NRURJQSkKPj4gKyNkZWZpbmUgRk9SQ0VXQUtF X0FMTAkJKEZPUkNFV0FLRV9SRU5ERVIgfCBcCj4+ICsJCQkJIEZPUkNFV0FLRV9CTElUVEVSIHwg XAo+PiArCQkJCSBGT1JDRVdBS0VfTUVESUEpCj4+ICt9Owo+PiArCj4+ICsvKiBJdGVyYXRlIG92 ZXIgaW5pdGlhbGlzZWQgZncgZG9tYWlucyAqLwo+PiArI2RlZmluZSBmb3JfZWFjaF9md19kb21h aW5fbWFzayhkb21haW5fXywgbWFza19fLCBkZXZfcHJpdl9fLCBpX18pIFwKPj4gKwlmb3IgKChp X18pID0gMCwgKGRvbWFpbl9fKSA9ICYoZGV2X3ByaXZfXyktPnVuY29yZS5md19kb21haW5bMF07 IFwKPj4gKwkgICAgIChpX18pIDwgRldfRE9NQUlOX0lEX0NPVU5UOyBcCj4+ICsJICAgICAoaV9f KSsrLCAoZG9tYWluX18pID0gJihkZXZfcHJpdl9fKS0+dW5jb3JlLmZ3X2RvbWFpbltpX19dKSBc Cj4+ICsJCWlmICgoKG1hc2tfXykgJiAoZGV2X3ByaXZfXyktPnVuY29yZS5md19kb21haW5zKSAm ICgxIDw8IChpX18pKSkKPj4gKwo+PiArI2RlZmluZSBmb3JfZWFjaF9md19kb21haW4oZG9tYWlu X18sIGRldl9wcml2X18sIGlfXykgXAo+PiArCWZvcl9lYWNoX2Z3X2RvbWFpbl9tYXNrKGRvbWFp bl9fLCBGT1JDRVdBS0VfQUxMLCBkZXZfcHJpdl9fLCBpX18pCj4+ICAgCj4+ICAgI2RlZmluZSBE RVZfSU5GT19GT1JfRUFDSF9GTEFHKGZ1bmMsIHNlcCkgXAo+PiAgIAlmdW5jKGlzX21vYmlsZSkg c2VwIFwKPj4gQEAgLTI5OTgsOCArMzAyMywxMCBAQCBleHRlcm4gdm9pZCBpbnRlbF9kaXNwbGF5 X3ByaW50X2Vycm9yX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKmUsCj4+ ICAgICogbXVzdCBiZSBzZXQgdG8gcHJldmVudCBHVCBjb3JlIGZyb20gcG93ZXIgZG93biBhbmQg c3RhbGUgdmFsdWVzIGJlaW5nCj4+ICAgICogcmV0dXJuZWQuCj4+ICAgICovCj4+IC12b2lkIGdl bjZfZ3RfZm9yY2Vfd2FrZV9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBp bnQgZndfZW5naW5lKTsKPj4gLXZvaWQgZ2VuNl9ndF9mb3JjZV93YWtlX3B1dChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBmd19lbmdpbmUpOwo+PiArdm9pZCBnZW42X2d0 X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gKwkJ CSAgICB1bnNpZ25lZCBmd19kb21haW5zKTsKPj4gK3ZvaWQgZ2VuNl9ndF9mb3JjZV93YWtlX3B1 dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICsJCQkgICAgdW5zaWduZWQg ZndfZG9tYWlucyk7Cj4+ICAgdm9pZCBhc3NlcnRfZm9yY2Vfd2FrZV9pbmFjdGl2ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+PiAgIAo+PiAgIGludCBzYW5keWJyaWRnZV9w Y29kZV9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIG1ib3gsIHUz MiAqdmFsKTsKPj4gQEAgLTMwMzEsMTMgKzMwNTgsNiBAQCB2b2lkIHZsdl9mbGlzZHNpX3dyaXRl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7Cj4+ ICAgaW50IHZsdl9ncHVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGlu dCB2YWwpOwo+PiAgIGludCB2bHZfZnJlcV9vcGNvZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCBpbnQgdmFsKTsKPj4gICAKPj4gLSNkZWZpbmUgRk9SQ0VXQUtFX1JFTkRFUgko MSA8PCAwKQo+PiAtI2RlZmluZSBGT1JDRVdBS0VfTUVESUEJCSgxIDw8IDEpCj4+IC0jZGVmaW5l IEZPUkNFV0FLRV9CTElUVEVSCSgxIDw8IDIpCj4+IC0jZGVmaW5lIEZPUkNFV0FLRV9BTEwJCShG T1JDRVdBS0VfUkVOREVSIHwgRk9SQ0VXQUtFX01FRElBIHwgXAo+PiAtCQkJCQlGT1JDRVdBS0Vf QkxJVFRFUikKPj4gLQo+PiAtCj4+ICAgI2RlZmluZSBJOTE1X1JFQUQ4KHJlZykJCWRldl9wcml2 LT51bmNvcmUuZnVuY3MubW1pb19yZWFkYihkZXZfcHJpdiwgKHJlZyksIHRydWUpCj4+ICAgI2Rl ZmluZSBJOTE1X1dSSVRFOChyZWcsIHZhbCkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5tbWlvX3dy aXRlYihkZXZfcHJpdiwgKHJlZyksICh2YWwpLCB0cnVlKQo+PiAgIAo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF91bmNvcmUuYwo+PiBpbmRleCAwNjlmZTdhLi44NWU0NmIwIDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwo+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwo+PiBAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgdm9p ZCBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4+ICAgfQo+PiAgIAo+PiAgIHN0YXRpYyB2b2lkIF9fZ2VuNl9ndF9mb3JjZV93YWtl X2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+IC0JCQkJCQkJaW50IGZ3 X2VuZ2luZSkKPj4gKwkJCQkgICAgIGludCBmd19lbmdpbmUpCj4+ICAgewo+PiAgIAlpZiAod2Fp dF9mb3JfYXRvbWljKChfX3Jhd19pOTE1X3JlYWQzMihkZXZfcHJpdiwgRk9SQ0VXQUtFX0FDSykg JiAxKSA9PSAwLAo+PiAgIAkJCSAgICBGT1JDRVdBS0VfQUNLX1RJTUVPVVRfTVMpKQo+PiBAQCAt OTMsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCBfX2dlbjdfZ3RfZm9yY2Vfd2FrZV9tdF9yZXNldChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ICAgfQo+PiAgIAo+PiAgIHN0YXRp YyB2b2lkIF9fZ2VuN19ndF9mb3JjZV93YWtlX210X2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4+IC0JCQkJCQkJaW50IGZ3X2VuZ2luZSkKPj4gKwkJCQkJaW50IGZ3X2Vu Z2luZSkKPj4gICB7Cj4+ICAgCXUzMiBmb3JjZXdha2VfYWNrOwo+PiAgIAo+PiBAQCAtMTI5LDcg KzEyOSw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfZ3RfY2hlY2tfZmlmb2RiZyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ICAgfQo+PiAgIAo+PiAgIHN0YXRpYyB2b2lkIF9fZ2Vu Nl9ndF9mb3JjZV93YWtlX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ IC0JCQkJCQkJaW50IGZ3X2VuZ2luZSkKPj4gKwkJCQkgICAgIGludCBmd19lbmdpbmUpCj4+ICAg ewo+PiAgIAlfX3Jhd19pOTE1X3dyaXRlMzIoZGV2X3ByaXYsIEZPUkNFV0FLRSwgMCk7Cj4+ICAg CS8qIHNvbWV0aGluZyBmcm9tIHNhbWUgY2FjaGVsaW5lLCBidXQgIUZPUkNFV0FLRSAqLwo+PiBA QCAtMTM4LDcgKzEzOCw3IEBAIHN0YXRpYyB2b2lkIF9fZ2VuNl9ndF9mb3JjZV93YWtlX3B1dChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICAgfQo+PiAgIAo+PiAgIHN0YXRp YyB2b2lkIF9fZ2VuN19ndF9mb3JjZV93YWtlX210X3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4+IC0JCQkJCQkJaW50IGZ3X2VuZ2luZSkKPj4gKwkJCQkJaW50IGZ3X2Vu Z2luZSkKPj4gICB7Cj4+ICAgCV9fcmF3X2k5MTVfd3JpdGUzMihkZXZfcHJpdiwgRk9SQ0VXQUtF X01ULAo+PiAgIAkJCSAgIF9NQVNLRURfQklUX0RJU0FCTEUoRk9SQ0VXQUtFX0tFUk5FTCkpOwo+ PiBAQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyB2b2lkIHZsdl9mb3JjZV93YWtlX3Jlc2V0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gICB9Cj4+ICAgCj4+ICAgc3RhdGlj IHZvaWQgX192bHZfZm9yY2Vfd2FrZV9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+PiAtCQkJCQkJaW50IGZ3X2VuZ2luZSkKPj4gKwkJCQkgaW50IGZ3X2VuZ2luZSkKPj4g ICB7Cj4+ICAgCS8qIENoZWNrIGZvciBSZW5kZXIgRW5naW5lICovCj4+ICAgCWlmIChGT1JDRVdB S0VfUkVOREVSICYgZndfZW5naW5lKSB7Cj4+IEBAIC0yMjcsOSArMjI3LDggQEAgc3RhdGljIHZv aWQgX192bHZfZm9yY2Vfd2FrZV9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+PiAgIH0KPj4gICAKPj4gICBzdGF0aWMgdm9pZCBfX3Zsdl9mb3JjZV93YWtlX3B1dChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+IC0JCQkJCWludCBmd19lbmdpbmUpCj4+ ICsJCQkJIGludCBmd19lbmdpbmUpCj4+ICAgewo+PiAtCj4+ICAgCS8qIENoZWNrIGZvciBSZW5k ZXIgRW5naW5lICovCj4+ICAgCWlmIChGT1JDRVdBS0VfUkVOREVSICYgZndfZW5naW5lKQo+PiAg IAkJX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBGT1JDRVdBS0VfVkxWLAo+PiBAQCAtMjQ3 LDM3ICsyNDYsNiBAQCBzdGF0aWMgdm9pZCBfX3Zsdl9mb3JjZV93YWtlX3B1dChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICAgCQlnZW42X2d0X2NoZWNrX2ZpZm9kYmcoZGV2 X3ByaXYpOwo+PiAgIH0KPj4gICAKPj4gLXN0YXRpYyB2b2lkIHZsdl9mb3JjZV93YWtlX2dldChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBmd19lbmdpbmUpCj4+IC17Cj4+ IC0JaWYgKGZ3X2VuZ2luZSAmIEZPUkNFV0FLRV9SRU5ERVIgJiYKPj4gLQkgICAgZGV2X3ByaXYt PnVuY29yZS5md19yZW5kZXJjb3VudCsrICE9IDApCj4+IC0JCWZ3X2VuZ2luZSAmPSB+Rk9SQ0VX QUtFX1JFTkRFUjsKPj4gLQlpZiAoZndfZW5naW5lICYgRk9SQ0VXQUtFX01FRElBICYmCj4+IC0J ICAgIGRldl9wcml2LT51bmNvcmUuZndfbWVkaWFjb3VudCsrICE9IDApCj4+IC0JCWZ3X2VuZ2lu ZSAmPSB+Rk9SQ0VXQUtFX01FRElBOwo+PiAtCj4+IC0JaWYgKGZ3X2VuZ2luZSkKPj4gLQkJZGV2 X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldChkZXZfcHJpdiwgZndfZW5naW5lKTsK Pj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgdmx2X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IGZ3X2VuZ2luZSkKPj4gLXsKPj4gLQlpZiAoZndf ZW5naW5lICYgRk9SQ0VXQUtFX1JFTkRFUikgewo+PiAtCQlXQVJOX09OKCFkZXZfcHJpdi0+dW5j b3JlLmZ3X3JlbmRlcmNvdW50KTsKPj4gLQkJaWYgKC0tZGV2X3ByaXYtPnVuY29yZS5md19yZW5k ZXJjb3VudCAhPSAwKQo+PiAtCQkJZndfZW5naW5lICY9IH5GT1JDRVdBS0VfUkVOREVSOwo+PiAt CX0KPj4gLQo+PiAtCWlmIChmd19lbmdpbmUgJiBGT1JDRVdBS0VfTUVESUEpIHsKPj4gLQkJV0FS Tl9PTighZGV2X3ByaXYtPnVuY29yZS5md19tZWRpYWNvdW50KTsKPj4gLQkJaWYgKC0tZGV2X3By aXYtPnVuY29yZS5md19tZWRpYWNvdW50ICE9IDApCj4+IC0JCQlmd19lbmdpbmUgJj0gfkZPUkNF V0FLRV9NRURJQTsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAoZndfZW5naW5lKQo+PiAtCQlkZXZfcHJp di0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0KGRldl9wcml2LCBmd19lbmdpbmUpOwo+PiAt fQo+PiAtCj4+ICAgc3RhdGljIHZvaWQgX19nZW45X2d0X2ZvcmNlX3dha2VfbXRfcmVzZXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiAgIHsKPj4gICAJX19yYXdfaTkxNV93 cml0ZTMyKGRldl9wcml2LCBGT1JDRVdBS0VfUkVOREVSX0dFTjksCj4+IEBAIC0zNjcsODAgKzMz NSw0MCBAQCBfX2dlbjlfZm9yY2Vfd2FrZV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCBpbnQgZndfZW5naW5lKQo+PiAgIAkJCQlfTUFTS0VEX0JJVF9ESVNBQkxFKEZPUkNF V0FLRV9LRVJORUwpKTsKPj4gICB9Cj4+ICAgCj4+IC1zdGF0aWMgdm9pZAo+PiAtZ2VuOV9mb3Jj ZV93YWtlX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBmd19lbmdp bmUpCj4+IC17Cj4+IC0JaWYgKEZPUkNFV0FLRV9SRU5ERVIgJiBmd19lbmdpbmUpIHsKPj4gLQkJ aWYgKGRldl9wcml2LT51bmNvcmUuZndfcmVuZGVyY291bnQrKyA9PSAwKQo+PiAtCQkJZGV2X3By aXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldChkZXZfcHJpdiwKPj4gLQkJCQkJCQlGT1JD RVdBS0VfUkVOREVSKTsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAoRk9SQ0VXQUtFX01FRElBICYgZndf ZW5naW5lKSB7Cj4+IC0JCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlhY291bnQrKyA9PSAw KQo+PiAtCQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldChkZXZfcHJpdiwK Pj4gLQkJCQkJCQlGT1JDRVdBS0VfTUVESUEpOwo+PiAtCX0KPj4gLQo+PiAtCWlmIChGT1JDRVdB S0VfQkxJVFRFUiAmIGZ3X2VuZ2luZSkgewo+PiAtCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19i bGl0dGVyY291bnQrKyA9PSAwKQo+PiAtCQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93 YWtlX2dldChkZXZfcHJpdiwKPj4gLQkJCQkJCQlGT1JDRVdBS0VfQkxJVFRFUik7Cj4+IC0JfQo+ PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZAo+PiAtZ2VuOV9mb3JjZV93YWtlX3B1dChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBmd19lbmdpbmUpCj4+IC17Cj4+IC0JaWYg KEZPUkNFV0FLRV9SRU5ERVIgJiBmd19lbmdpbmUpIHsKPj4gLQkJV0FSTl9PTihkZXZfcHJpdi0+ dW5jb3JlLmZ3X3JlbmRlcmNvdW50ID09IDApOwo+PiAtCQlpZiAoLS1kZXZfcHJpdi0+dW5jb3Jl LmZ3X3JlbmRlcmNvdW50ID09IDApCj4+IC0JCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNl X3dha2VfcHV0KGRldl9wcml2LAo+PiAtCQkJCQkJCUZPUkNFV0FLRV9SRU5ERVIpOwo+PiAtCX0K Pj4gLQo+PiAtCWlmIChGT1JDRVdBS0VfTUVESUEgJiBmd19lbmdpbmUpIHsKPj4gLQkJV0FSTl9P TihkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlhY291bnQgPT0gMCk7Cj4+IC0JCWlmICgtLWRldl9w cml2LT51bmNvcmUuZndfbWVkaWFjb3VudCA9PSAwKQo+PiAtCQkJZGV2X3ByaXYtPnVuY29yZS5m dW5jcy5mb3JjZV93YWtlX3B1dChkZXZfcHJpdiwKPj4gLQkJCQkJCQlGT1JDRVdBS0VfTUVESUEp Owo+PiAtCX0KPj4gLQo+PiAtCWlmIChGT1JDRVdBS0VfQkxJVFRFUiAmIGZ3X2VuZ2luZSkgewo+ PiAtCQlXQVJOX09OKGRldl9wcml2LT51bmNvcmUuZndfYmxpdHRlcmNvdW50ID09IDApOwo+PiAt CQlpZiAoLS1kZXZfcHJpdi0+dW5jb3JlLmZ3X2JsaXR0ZXJjb3VudCA9PSAwKQo+PiAtCQkJZGV2 X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX3B1dChkZXZfcHJpdiwKPj4gLQkJCQkJCQlG T1JDRVdBS0VfQkxJVFRFUik7Cj4+IC0JfQo+PiAtfQo+PiAtCj4+ICAgc3RhdGljIHZvaWQgZ2Vu Nl9mb3JjZV93YWtlX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQo+PiAgIHsKPj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSAodm9pZCAqKWFyZzsKPj4gKwlzdHJ1Y3QgaW50 ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmRvbWFpbiA9ICh2b2lkICopYXJnOwo+PiAgIAl1 bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+PiAgIAo+PiAtCWFzc2VydF9kZXZpY2Vfbm90X3N1c3Bl bmRlZChkZXZfcHJpdik7Cj4+ICsJYXNzZXJ0X2RldmljZV9ub3Rfc3VzcGVuZGVkKGRvbWFpbi0+ aTkxNSk7Cj4+ICAgCj4+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9j aywgaXJxZmxhZ3MpOwo+PiAtCVdBUk5fT04oIWRldl9wcml2LT51bmNvcmUuZm9yY2V3YWtlX2Nv dW50KTsKPj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG9tYWluLT5pOTE1LT51bmNvcmUubG9jaywg aXJxZmxhZ3MpOwo+PiArCVdBUk5fT04oIWRvbWFpbi0+d2FrZV9jb3VudCk7Cj4+ICAgCj4+IC0J aWYgKC0tZGV2X3ByaXYtPnVuY29yZS5mb3JjZXdha2VfY291bnQgPT0gMCkKPj4gLQkJZGV2X3By aXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7 Cj4+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFm bGFncyk7Cj4+ICsJaWYgKC0tZG9tYWluLT53YWtlX2NvdW50ID09IDApCj4+ICsJCWRvbWFpbi0+ aTkxNS0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0KGRvbWFpbi0+aTkxNSwKPj4gKwkJCQkJ CQkgIDEgPDwgZG9tYWluLT5pZCk7Cj4+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWlu LT5pOTE1LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+PiAgIH0KPj4gICAKPj4gICB2b2lkIGlu dGVsX3VuY29yZV9mb3JjZXdha2VfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBy ZXN0b3JlKQo+PiAgIHsKPj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKPj4gLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+PiAtCj4+IC0J aWYgKGRlbF90aW1lcl9zeW5jKCZkZXZfcHJpdi0+dW5jb3JlLmZvcmNlX3dha2VfdGltZXIpKQo+ PiAtCQlnZW42X2ZvcmNlX3dha2VfdGltZXIoKHVuc2lnbmVkIGxvbmcpZGV2X3ByaXYpOwo+PiAr CXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsIGZ3ID0gMDsKPj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9kb21haW4gKmRvbWFpbjsKPj4gKwlpbnQgaWQ7Cj4+ICAgCj4+ICsJc3Bpbl9s b2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+PiAgIAkvKiBI b2xkIHVuY29yZS5sb2NrIGFjcm9zcyByZXNldCB0byBwcmV2ZW50IGFueSByZWdpc3RlciBhY2Nl c3MKPj4gICAJICogd2l0aCBmb3JjZXdha2Ugbm90IHNldCBjb3JyZWN0bHkKPj4gICAJICovCj4+ IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+ PiArCj4+ICsJZm9yX2VhY2hfZndfZG9tYWluKGRvbWFpbiwgZGV2X3ByaXYsIGlkKQo+PiArCQlp ZiAoZG9tYWluLT53YWtlX2NvdW50KQo+PiArCQkJZncgfD0gMSA8PCBpZDsKPj4gKwo+PiArCWlm IChmdykKPj4gKwkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX3B1dChkZXZfcHJp diwgZncpOwo+PiAgIAo+Cj4gSGkgTWlrYSwKPgo+IFdoeSBkbyBwdXQ/Cj4KPiBJcyB0aGVyZSBh IHBvc3NpYmlsaXR5IG9mIGdldHRpbmcgZ2V0ICYgcHV0IGNvdW50IG1pc21hdGNoPyBmb3IgZXhh bXBsZSwKPiAxLiBXZSBSZWFkIHRoZSByZWdpc3Rlcgo+ICAgICAtPiBmb3JjZXdha2VfZ2V0ICYg c3RhcnQgZG9tYWluX3RpbWVyLiAoY291bnQgPSAxKQo+IDIuIE5vdyB3ZSBjYWxsICJpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX3Jlc2V0IiB3aGljaCBkb2VzIGEgcHV0LiAoY291bnQgPSAwKQo+IDMu IG5vdyB0aGUgZG9tYWluX3RpbWVyIGZyb20gc3RlcCAjMSBjb21lcyAoY291bnQgLTEpPyByaWdo dD8KPiAgICAgb3IgaSBhbSBtaXNzaW5nIHNvbWV0aGluZyBoZXJlPwoKMS4gV2UgcmVhZCB0aGUg cmVnaXN0ZXIsIHdha2VfY291bnQgPSAxIGFuZCBkb21haW4gdGltZXIgaXMgYXJtZWQuCjIuIElu IHJlc2V0IHdlIHNlZSB3aGljaCBkb21haW5zIGFyZSBhd2FrZSBhbmQgc3RvcmUgdGhlbSBpbiBm dwozLiBXZSBkbyBhIHB1dCBmb3IgYWxsIGRvbWFpbnMgd2l0aCB0aGUgaHcgY2FsbGJhY2ssCiAg IHRoaXMgZG9lc24ndCB0b3VjaCB0aGUgd2FrZV9jb3VudC4gSSB3YW50ZWQgdGhpcyBzbyB0aGF0 CiAgIHdlIGZpcnN0IHRyeSB3aXRoIHRoZSBzb2Z0IGFwcHJvYWNoIGJ5IGRvaW5nIHRoZSBkaXNh YmxlIGFuZAogICBhbGwgdGhlIHJlbGF0ZWQgZmlmb2RiZyBkYW5jZSBoZXJlIGxpa2UgdGhpcyB3 YXMgYSBub3JtYWwgcHV0Lgo0LiBSZWdhcmRsZXNzIGlmIHRoZSBhYm92ZSBkaWQgdGhlIHRyaWNr LCB3ZSB0aGVuIHdlIHRha2UgdGhlIGdsb3ZlcwogICBvZmYgYW5kIHVzZSBtb3JlIGJsdW50IGFw cHJvYWNoIGJ5IHJlc2V0dGluZyB0aGUgcmVnaXN0ZXIuCjUuIFdlIHJlc3RvcmUgYWxsIHRoZSBm b3JjZXdha2VzCgpCdXQgd2hpbGUgSSB3YXMgcmVhZGluZyB0aGlzIHRocm91Z2gsIHRoZXJlIGlz IG9uZSBvdGhlcgpwcm9ibGVtIHdoaWNoIGlzIHRoYXQgaWYgd2UgZG9uJ3QgcmVzdG9yZSwgd2Ug bWVzcyB0aGUgY291bnRzCmFuZCB0aGUgdGltZXJzIHdpbGwgYmUgc3RpbGwgcnVubmluZy4KCkkg cG9zdGVkIGEgbmV3IHNlcmllcyB3aXRoIGEgZml4IGZvciB0aGlzLgoKLU1pa2EKCj4KPgo+IE90 aGVycyBMb29rcyBmaW5lIHRvIG1lLgo+IEFja2VkLWJ5OiBEZWVwYWsgUyA8ZGVlcGFrLnNAbGlu dXguaW50ZWwuY29tPgo+Cj4+ICAgCWlmIChJU19WQUxMRVlWSUVXKGRldikpCj4+ICAgCQl2bHZf Zm9yY2Vfd2FrZV9yZXNldChkZXZfcHJpdik7Cj4+IEBAIC00NTQsMjggKzM4Miw2IEBAIHZvaWQg aW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29s IHJlc3RvcmUpCj4+ICAgCQlfX2dlbjlfZ3RfZm9yY2Vfd2FrZV9tdF9yZXNldChkZXZfcHJpdik7 Cj4+ICAgCj4+ICAgCWlmIChyZXN0b3JlKSB7IC8qIElmIHJlc2V0IHdpdGggYSB1c2VyIGZvcmNl d2FrZSwgdHJ5IHRvIHJlc3RvcmUgKi8KPj4gLQkJdW5zaWduZWQgZncgPSAwOwo+PiAtCj4+IC0J CWlmIChJU19WQUxMRVlWSUVXKGRldikpIHsKPj4gLQkJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3 X3JlbmRlcmNvdW50KQo+PiAtCQkJCWZ3IHw9IEZPUkNFV0FLRV9SRU5ERVI7Cj4+IC0KPj4gLQkJ CWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlhY291bnQpCj4+IC0JCQkJZncgfD0gRk9SQ0VX QUtFX01FRElBOwo+PiAtCQl9IGVsc2UgaWYgKElTX0dFTjkoZGV2KSkgewo+PiAtCQkJaWYgKGRl dl9wcml2LT51bmNvcmUuZndfcmVuZGVyY291bnQpCj4+IC0JCQkJZncgfD0gRk9SQ0VXQUtFX1JF TkRFUjsKPj4gLQo+PiAtCQkJaWYgKGRldl9wcml2LT51bmNvcmUuZndfbWVkaWFjb3VudCkKPj4g LQkJCQlmdyB8PSBGT1JDRVdBS0VfTUVESUE7Cj4+IC0KPj4gLQkJCWlmIChkZXZfcHJpdi0+dW5j b3JlLmZ3X2JsaXR0ZXJjb3VudCkKPj4gLQkJCQlmdyB8PSBGT1JDRVdBS0VfQkxJVFRFUjsKPj4g LQkJfSBlbHNlIHsKPj4gLQkJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZvcmNld2FrZV9jb3VudCkK Pj4gLQkJCQlmdyA9IEZPUkNFV0FLRV9BTEw7Cj4+IC0JCX0KPj4gLQo+PiAgIAkJaWYgKGZ3KQo+ PiAgIAkJCWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsIGZ3 KTsKPj4gICAKPj4gQEAgLTUzMywyOCArNDM5LDI4IEBAIHZvaWQgaW50ZWxfdW5jb3JlX3Nhbml0 aXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4+ICAgICogYmUgY2FsbGVkIGF0IHRoZSBiZWdp bm5pbmcgb2YgdGhlIHNlcXVlbmNlIGZvbGxvd2VkIGJ5IGEgY2FsbCB0bwo+PiAgICAqIGdlbjZf Z3RfZm9yY2Vfd2FrZV9wdXQoKSBhdCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZS4KPj4gICAgKi8K Pj4gLXZvaWQgZ2VuNl9ndF9mb3JjZV93YWtlX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIGludCBmd19lbmdpbmUpCj4+ICt2b2lkIGdlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiArCQkJICAgIHVuc2lnbmVkIGZ3 X2RvbWFpbnMpCj4+ICAgewo+PiAgIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+PiArCXN0cnVj dCBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2RvbWFpbiAqZG9tYWluOwo+PiArCWludCBpZDsKPj4g ICAKPj4gICAJaWYgKCFkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0KQo+PiAg IAkJcmV0dXJuOwo+PiAgIAo+PiAtCWludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPj4g LQo+Cj4geW91IG5lZWQgdG8gY2hhbmdlIHRoaXMgaW4gUGF0Y2ggIzIKPgo+PiAgIAlXQVJOX09O KCFwbV9ydW50aW1lX2FjdGl2ZSgmZGV2X3ByaXYtPmRldi0+cGRldi0+ZGV2KSk7Cj4+ICAgCj4+ ICsJZndfZG9tYWlucyAmPSBkZXZfcHJpdi0+dW5jb3JlLmZ3X2RvbWFpbnM7Cj4+ICsKPj4gICAJ c3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+PiAg IAo+PiAtCWlmIChJU19HRU45KGRldl9wcml2LT5kZXYpKSB7Cj4+IC0JCWdlbjlfZm9yY2Vfd2Fr ZV9nZXQoZGV2X3ByaXYsIGZ3X2VuZ2luZSk7Cj4+IC0JfSBlbHNlIGlmIChJU19WQUxMRVlWSUVX KGRldl9wcml2LT5kZXYpKSB7Cj4+IC0JCXZsdl9mb3JjZV93YWtlX2dldChkZXZfcHJpdiwgZndf ZW5naW5lKTsKPj4gLQl9IGVsc2Ugewo+PiAtCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5mb3JjZXdh a2VfY291bnQrKyA9PSAwKQo+PiAtCQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtl X2dldChkZXZfcHJpdiwKPj4gLQkJCQkJCQkgICAgICBGT1JDRVdBS0VfQUxMKTsKPj4gLQl9Cj4+ ICsJZm9yX2VhY2hfZndfZG9tYWluX21hc2soZG9tYWluLCBmd19kb21haW5zLCBkZXZfcHJpdiwg aWQpCj4+ICsJCWlmIChkb21haW4tPndha2VfY291bnQrKykKPj4gKwkJCWZ3X2RvbWFpbnMgJj0g figxIDw8IGlkKTsKPj4gKwo+PiArCWlmIChmd19kb21haW5zKQo+PiArCQlkZXZfcHJpdi0+dW5j b3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0KGRldl9wcml2LCBmd19kb21haW5zKTsKPj4gICAKPj4g ICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFn cyk7Cj4+ICAgfQo+PiBAQCAtNTYyLDI2ICs0NjgsMjcgQEAgdm9pZCBnZW42X2d0X2ZvcmNlX3dh a2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IGZ3X2VuZ2luZSkK Pj4gICAvKgo+PiAgICAqIHNlZSBnZW42X2d0X2ZvcmNlX3dha2VfZ2V0KCkKPj4gICAgKi8KPj4g LXZvaWQgZ2VuNl9ndF9mb3JjZV93YWtlX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsIGludCBmd19lbmdpbmUpCj4+ICt2b2lkIGdlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiArCQkJICAgIHVuc2lnbmVkIGZ3X2Rv bWFpbnMpCj4+ICAgewo+PiAgIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+PiArCXN0cnVjdCBp bnRlbF91bmNvcmVfZm9yY2V3YWtlX2RvbWFpbiAqZG9tYWluOwo+PiArCWludCBpZDsKPj4gICAK Pj4gICAJaWYgKCFkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0KQo+PiAgIAkJ cmV0dXJuOwo+PiAgIAo+PiArCWZ3X2RvbWFpbnMgJj0gZGV2X3ByaXYtPnVuY29yZS5md19kb21h aW5zOwo+PiArCj4+ICAgCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ss IGlycWZsYWdzKTsKPj4gICAKPj4gLQlpZiAoSVNfR0VOOShkZXZfcHJpdi0+ZGV2KSkgewo+PiAt CQlnZW45X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2LCBmd19lbmdpbmUpOwo+PiAtCX0gZWxzZSBp ZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdi0+ZGV2KSkgewo+PiAtCQl2bHZfZm9yY2Vfd2FrZV9w dXQoZGV2X3ByaXYsIGZ3X2VuZ2luZSk7Cj4+IC0JfSBlbHNlIHsKPj4gLQkJV0FSTl9PTighZGV2 X3ByaXYtPnVuY29yZS5mb3JjZXdha2VfY291bnQpOwo+PiAtCQlpZiAoLS1kZXZfcHJpdi0+dW5j b3JlLmZvcmNld2FrZV9jb3VudCA9PSAwKSB7Cj4+IC0JCQlkZXZfcHJpdi0+dW5jb3JlLmZvcmNl d2FrZV9jb3VudCsrOwo+PiAtCQkJbW9kX3RpbWVyX3Bpbm5lZCgmZGV2X3ByaXYtPnVuY29yZS5m b3JjZV93YWtlX3RpbWVyLAo+PiAtCQkJCQkgamlmZmllcyArIDEpOwo+PiAtCQl9Cj4+ICsJZm9y X2VhY2hfZndfZG9tYWluX21hc2soZG9tYWluLCBmd19kb21haW5zLCBkZXZfcHJpdiwgaWQpIHsK Pj4gKwkJV0FSTl9PTighZG9tYWluLT53YWtlX2NvdW50KTsKPj4gKwkJaWYgKC0tZG9tYWluLT53 YWtlX2NvdW50KQo+PiArCQkJY29udGludWU7Cj4+ICsKPj4gKwkJZG9tYWluLT53YWtlX2NvdW50 Kys7Cj4+ICsJCW1vZF90aW1lcl9waW5uZWQoJmRvbWFpbi0+dGltZXIsIGppZmZpZXMgKyAxKTsK Pj4gICAJfQo+PiAgIAo+PiAgIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5j b3JlLmxvY2ssIGlycWZsYWdzKTsKPj4gQEAgLTU4OSwxMCArNDk2LDE0IEBAIHZvaWQgZ2VuNl9n dF9mb3JjZV93YWtlX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBm d19lbmdpbmUpCj4+ICAgCj4+ICAgdm9pZCBhc3NlcnRfZm9yY2Vfd2FrZV9pbmFjdGl2ZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ICAgewo+PiArCXN0cnVjdCBpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX2RvbWFpbiAqZG9tYWluOwo+PiArCWludCBpOwo+PiArCj4+ICAgCWlm ICghZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldCkKPj4gICAJCXJldHVybjsK Pj4gICAKPj4gLQlXQVJOX09OKGRldl9wcml2LT51bmNvcmUuZm9yY2V3YWtlX2NvdW50ID4gMCk7 Cj4+ICsJZm9yX2VhY2hfZndfZG9tYWluKGRvbWFpbiwgZGV2X3ByaXYsIGkpCj4+ICsJCVdBUk5f T04oZG9tYWluLT53YWtlX2NvdW50KTsKPj4gICB9Cj4+ICAgCj4+ICAgLyogV2UgZ2l2ZSBmYXN0 IHBhdGhzIGZvciB0aGUgcmVhbGx5IGNvb2wgcmVnaXN0ZXJzICovCj4+IEBAIC03NTgsMTkgKzY2 OSwzNiBAQCBfX2dlbjJfcmVhZCg2NCkKPj4gICAJdHJhY2VfaTkxNV9yZWdfcncoZmFsc2UsIHJl ZywgdmFsLCBzaXplb2YodmFsKSwgdHJhY2UpOyBcCj4+ICAgCXJldHVybiB2YWwKPj4gICAKPj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPj4gKwkJCQkgICAgdW5zaWduZWQgZndfZG9tYWlucykKPj4gK3sKPj4g KwlzdHJ1Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmRvbWFpbjsKPj4gKwlpbnQg aTsKPj4gKwo+PiArCWlmIChXQVJOX09OKCFmd19kb21haW5zKSkKPj4gKwkJcmV0dXJuOwo+PiAr Cj4+ICsJLyogSWRlYWxseSBHQ0Mgd291bGQgYmUgY29uc3RhbnQtZm9sZCBhbmQgZWxpbWluYXRl IHRoaXMgbG9vcCAqLwo+PiArCWZvcl9lYWNoX2Z3X2RvbWFpbl9tYXNrKGRvbWFpbiwgZndfZG9t YWlucywgZGV2X3ByaXYsIGkpIHsKPj4gKwkJaWYgKGRvbWFpbi0+d2FrZV9jb3VudCkKPj4gKwkJ CWZ3X2RvbWFpbnMgJj0gfigxIDw8IGkpOwo+PiArCQllbHNlCj4+ICsJCQlkb21haW4tPndha2Vf Y291bnQrKzsKPj4gKwo+PiArCQltb2RfdGltZXJfcGlubmVkKCZkb21haW4tPnRpbWVyLCBqaWZm aWVzICsgMSk7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGZ3X2RvbWFpbnMpCj4+ICsJCWRldl9wcml2 LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsIGZ3X2RvbWFpbnMpOwo+PiAr fQo+PiArCj4+ICAgI2RlZmluZSBfX2dlbjZfcmVhZCh4KSBcCj4+ICAgc3RhdGljIHUjI3ggXAo+ PiAgIGdlbjZfcmVhZCMjeChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIG9mZl90 IHJlZywgYm9vbCB0cmFjZSkgeyBcCj4+ICAgCUdFTjZfUkVBRF9IRUFERVIoeCk7IFwKPj4gICAJ aHN3X3VuY2xhaW1lZF9yZWdfZGVidWcoZGV2X3ByaXYsIHJlZywgdHJ1ZSwgdHJ1ZSk7IFwKPj4g LQlpZiAoZGV2X3ByaXYtPnVuY29yZS5mb3JjZXdha2VfY291bnQgPT0gMCAmJiBcCj4+IC0JICAg IE5FRURTX0ZPUkNFX1dBS0UoKGRldl9wcml2KSwgKHJlZykpKSB7IFwKPj4gLQkJZGV2X3ByaXYt PnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldChkZXZfcHJpdiwgXAo+PiAtCQkJCQkJICAgICAg Rk9SQ0VXQUtFX0FMTCk7IFwKPj4gLQkJZGV2X3ByaXYtPnVuY29yZS5mb3JjZXdha2VfY291bnQr KzsgXAo+PiAtCQltb2RfdGltZXJfcGlubmVkKCZkZXZfcHJpdi0+dW5jb3JlLmZvcmNlX3dha2Vf dGltZXIsIFwKPj4gLQkJCQkgamlmZmllcyArIDEpOyBcCj4+IC0JfSBcCj4+ICsJaWYgKE5FRURT X0ZPUkNFX1dBS0UoKGRldl9wcml2KSwgKHJlZykpKSBcCj4+ICsJCV9fZm9yY2Vfd2FrZV9nZXQo ZGV2X3ByaXYsIEZPUkNFV0FLRV9SRU5ERVIpOyBcCj4+ICAgCXZhbCA9IF9fcmF3X2k5MTVfcmVh ZCMjeChkZXZfcHJpdiwgcmVnKTsgXAo+PiAgIAloc3dfdW5jbGFpbWVkX3JlZ19kZWJ1ZyhkZXZf cHJpdiwgcmVnLCB0cnVlLCBmYWxzZSk7IFwKPj4gICAJR0VONl9SRUFEX0ZPT1RFUjsgXAo+PiBA QCAtNzc5LDQ1ICs3MDcsMjcgQEAgZ2VuNl9yZWFkIyN4KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgb2ZmX3QgcmVnLCBib29sIHRyYWNlKSB7IFwKPj4gICAjZGVmaW5lIF9fdmx2 X3JlYWQoeCkgXAo+PiAgIHN0YXRpYyB1IyN4IFwKPj4gICB2bHZfcmVhZCMjeChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIG9mZl90IHJlZywgYm9vbCB0cmFjZSkgeyBcCj4+IC0J dW5zaWduZWQgZndlbmdpbmUgPSAwOyBcCj4+ICAgCUdFTjZfUkVBRF9IRUFERVIoeCk7IFwKPj4g LQlpZiAoRk9SQ0VXQUtFX1ZMVl9SRU5ERVJfUkFOR0VfT0ZGU0VUKHJlZykpIHsgXAo+PiAtCQlp ZiAoZGV2X3ByaXYtPnVuY29yZS5md19yZW5kZXJjb3VudCA9PSAwKSBcCj4+IC0JCQlmd2VuZ2lu ZSA9IEZPUkNFV0FLRV9SRU5ERVI7IFwKPj4gLQl9IGVsc2UgaWYgKEZPUkNFV0FLRV9WTFZfTUVE SUFfUkFOR0VfT0ZGU0VUKHJlZykpIHsgXAo+PiAtCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19t ZWRpYWNvdW50ID09IDApIFwKPj4gLQkJCWZ3ZW5naW5lID0gRk9SQ0VXQUtFX01FRElBOyBcCj4+ IC0JfSAgXAo+PiAtCWlmIChmd2VuZ2luZSkgXAo+PiAtCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNz LmZvcmNlX3dha2VfZ2V0KGRldl9wcml2LCBmd2VuZ2luZSk7IFwKPj4gKwlpZiAoRk9SQ0VXQUtF X1ZMVl9SRU5ERVJfUkFOR0VfT0ZGU0VUKHJlZykpIFwKPj4gKwkJX19mb3JjZV93YWtlX2dldChk ZXZfcHJpdiwgRk9SQ0VXQUtFX1JFTkRFUik7IFwKPj4gKwllbHNlIGlmIChGT1JDRVdBS0VfVkxW X01FRElBX1JBTkdFX09GRlNFVChyZWcpKSBcCj4+ICsJCV9fZm9yY2Vfd2FrZV9nZXQoZGV2X3By aXYsIEZPUkNFV0FLRV9NRURJQSk7IFwKPj4gICAJdmFsID0gX19yYXdfaTkxNV9yZWFkIyN4KGRl dl9wcml2LCByZWcpOyBcCj4+IC0JaWYgKGZ3ZW5naW5lKSBcCj4+IC0JCWRldl9wcml2LT51bmNv cmUuZnVuY3MuZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYsIGZ3ZW5naW5lKTsgXAo+PiAgIAlHRU42 X1JFQURfRk9PVEVSOyBcCj4+ICAgfQo+PiAgIAo+PiAgICNkZWZpbmUgX19jaHZfcmVhZCh4KSBc Cj4+ICAgc3RhdGljIHUjI3ggXAo+PiAgIGNodl9yZWFkIyN4KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgb2ZmX3QgcmVnLCBib29sIHRyYWNlKSB7IFwKPj4gLQl1bnNpZ25lZCBm d2VuZ2luZSA9IDA7IFwKPj4gICAJR0VONl9SRUFEX0hFQURFUih4KTsgXAo+PiAtCWlmIChGT1JD RVdBS0VfQ0hWX1JFTkRFUl9SQU5HRV9PRkZTRVQocmVnKSkgeyBcCj4+IC0JCWlmIChkZXZfcHJp di0+dW5jb3JlLmZ3X3JlbmRlcmNvdW50ID09IDApIFwKPj4gLQkJCWZ3ZW5naW5lID0gRk9SQ0VX QUtFX1JFTkRFUjsgXAo+PiAtCX0gZWxzZSBpZiAoRk9SQ0VXQUtFX0NIVl9NRURJQV9SQU5HRV9P RkZTRVQocmVnKSkgeyBcCj4+IC0JCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlhY291bnQg PT0gMCkgXAo+PiAtCQkJZndlbmdpbmUgPSBGT1JDRVdBS0VfTUVESUE7IFwKPj4gLQl9IGVsc2Ug aWYgKEZPUkNFV0FLRV9DSFZfQ09NTU9OX1JBTkdFX09GRlNFVChyZWcpKSB7IFwKPj4gLQkJaWYg KGRldl9wcml2LT51bmNvcmUuZndfcmVuZGVyY291bnQgPT0gMCkgXAo+PiAtCQkJZndlbmdpbmUg fD0gRk9SQ0VXQUtFX1JFTkRFUjsgXAo+PiAtCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19tZWRp YWNvdW50ID09IDApIFwKPj4gLQkJCWZ3ZW5naW5lIHw9IEZPUkNFV0FLRV9NRURJQTsgXAo+PiAt CX0gXAo+PiAtCWlmIChmd2VuZ2luZSkgXAo+PiAtCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZv cmNlX3dha2VfZ2V0KGRldl9wcml2LCBmd2VuZ2luZSk7IFwKPj4gKwlpZiAoRk9SQ0VXQUtFX0NI Vl9SRU5ERVJfUkFOR0VfT0ZGU0VUKHJlZykpIFwKPj4gKwkJX19mb3JjZV93YWtlX2dldChkZXZf cHJpdiwgRk9SQ0VXQUtFX1JFTkRFUik7IFwKPj4gKwllbHNlIGlmIChGT1JDRVdBS0VfQ0hWX01F RElBX1JBTkdFX09GRlNFVChyZWcpKSBcCj4+ICsJCV9fZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYs IEZPUkNFV0FLRV9NRURJQSk7IFwKPj4gKwllbHNlIGlmIChGT1JDRVdBS0VfQ0hWX0NPTU1PTl9S QU5HRV9PRkZTRVQocmVnKSkgXAo+PiArCQlfX2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2LCBcCj4+ ICsJCQkJIEZPUkNFV0FLRV9SRU5ERVIgfCBGT1JDRVdBS0VfTUVESUEpOyBcCj4+ICAgCXZhbCA9 IF9fcmF3X2k5MTVfcmVhZCMjeChkZXZfcHJpdiwgcmVnKTsgXAo+PiAtCWlmIChmd2VuZ2luZSkg XAo+PiAtCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0KGRldl9wcml2LCBm d2VuZ2luZSk7IFwKPj4gICAJR0VONl9SRUFEX0ZPT1RFUjsgXAo+PiAgIH0KPj4gICAKPj4gQEAg LTgyNywzMiArNzM3LDIxIEBAIGNodl9yZWFkIyN4KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgb2ZmX3QgcmVnLCBib29sIHRyYWNlKSB7IFwKPj4gICAjZGVmaW5lIF9fZ2VuOV9y ZWFkKHgpIFwKPj4gICBzdGF0aWMgdSMjeCBcCj4+ICAgZ2VuOV9yZWFkIyN4KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgb2ZmX3QgcmVnLCBib29sIHRyYWNlKSB7IFwKPj4gKwl1 bnNpZ25lZCBmd19lbmdpbmU7IFwKPj4gICAJR0VONl9SRUFEX0hFQURFUih4KTsgXAo+PiAtCWlm ICghU0tMX05FRURTX0ZPUkNFX1dBS0UoKGRldl9wcml2KSwgKHJlZykpKSB7IFwKPj4gLQkJdmFs ID0gX19yYXdfaTkxNV9yZWFkIyN4KGRldl9wcml2LCByZWcpOyBcCj4+IC0JfSBlbHNlIHsgXAo+ PiAtCQl1bnNpZ25lZCBmd2VuZ2luZSA9IDA7IFwKPj4gLQkJaWYgKEZPUkNFV0FLRV9HRU45X1JF TkRFUl9SQU5HRV9PRkZTRVQocmVnKSkgeyBcCj4+IC0JCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5m d19yZW5kZXJjb3VudCA9PSAwKSBcCj4+IC0JCQkJZndlbmdpbmUgPSBGT1JDRVdBS0VfUkVOREVS OyBcCj4+IC0JCX0gZWxzZSBpZiAoRk9SQ0VXQUtFX0dFTjlfTUVESUFfUkFOR0VfT0ZGU0VUKHJl ZykpIHsgXAo+PiAtCQkJaWYgKGRldl9wcml2LT51bmNvcmUuZndfbWVkaWFjb3VudCA9PSAwKSBc Cj4+IC0JCQkJZndlbmdpbmUgPSBGT1JDRVdBS0VfTUVESUE7IFwKPj4gLQkJfSBlbHNlIGlmIChG T1JDRVdBS0VfR0VOOV9DT01NT05fUkFOR0VfT0ZGU0VUKHJlZykpIHsgXAo+PiAtCQkJaWYgKGRl dl9wcml2LT51bmNvcmUuZndfcmVuZGVyY291bnQgPT0gMCkgXAo+PiAtCQkJCWZ3ZW5naW5lIHw9 IEZPUkNFV0FLRV9SRU5ERVI7IFwKPj4gLQkJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlh Y291bnQgPT0gMCkgXAo+PiAtCQkJCWZ3ZW5naW5lIHw9IEZPUkNFV0FLRV9NRURJQTsgXAo+PiAt CQl9IGVsc2UgeyBcCj4+IC0JCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19ibGl0dGVyY291bnQg PT0gMCkgXAo+PiAtCQkJCWZ3ZW5naW5lID0gRk9SQ0VXQUtFX0JMSVRURVI7IFwKPj4gLQkJfSBc Cj4+IC0JCWlmIChmd2VuZ2luZSkgXAo+PiAtCQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3Jj ZV93YWtlX2dldChkZXZfcHJpdiwgZndlbmdpbmUpOyBcCj4+IC0JCXZhbCA9IF9fcmF3X2k5MTVf cmVhZCMjeChkZXZfcHJpdiwgcmVnKTsgXAo+PiAtCQlpZiAoZndlbmdpbmUpIFwKPj4gLQkJCWRl dl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYsIGZ3ZW5naW5lKTsg XAo+PiAtCX0gXAo+PiArCWlmICghU0tMX05FRURTX0ZPUkNFX1dBS0UoKGRldl9wcml2KSwgKHJl ZykpKQlcCj4+ICsJCWZ3X2VuZ2luZSA9IDA7IFwKPj4gKwllbHNlIGlmIChGT1JDRVdBS0VfR0VO OV9SRU5ERVJfUkFOR0VfT0ZGU0VUKHJlZykpCVwKPj4gKwkJZndfZW5naW5lID0gRk9SQ0VXQUtF X1JFTkRFUjsgXAo+PiArCWVsc2UgaWYgKEZPUkNFV0FLRV9HRU45X01FRElBX1JBTkdFX09GRlNF VChyZWcpKSBcCj4+ICsJCWZ3X2VuZ2luZSA9IEZPUkNFV0FLRV9NRURJQTsgXAo+PiArCWVsc2Ug aWYgKEZPUkNFV0FLRV9HRU45X0NPTU1PTl9SQU5HRV9PRkZTRVQocmVnKSkgXAo+PiArCQlmd19l bmdpbmUgPSBGT1JDRVdBS0VfUkVOREVSIHwgRk9SQ0VXQUtFX01FRElBOyBcCj4+ICsJZWxzZSBc Cj4+ICsJCWZ3X2VuZ2luZSA9IEZPUkNFV0FLRV9CTElUVEVSOyBcCj4+ICsJaWYgKGZ3X2VuZ2lu ZSkgXAo+PiArCQlfX2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2LCBmd19lbmdpbmUpOyBcCj4+ICsJ dmFsID0gX19yYXdfaTkxNV9yZWFkIyN4KGRldl9wcml2LCByZWcpOyBcCj4+ICAgCUdFTjZfUkVB RF9GT09URVI7IFwKPj4gICB9Cj4+ICAgCj4+IEBAIC05ODYsMTcgKzg4NSw5IEBAIHN0YXRpYyB2 b2lkIFwKPj4gICBnZW44X3dyaXRlIyN4KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgb2ZmX3QgcmVnLCB1IyN4IHZhbCwgYm9vbCB0cmFjZSkgeyBcCj4+ICAgCUdFTjZfV1JJVEVf SEVBREVSOyBcCj4+ICAgCWhzd191bmNsYWltZWRfcmVnX2RlYnVnKGRldl9wcml2LCByZWcsIGZh bHNlLCB0cnVlKTsgXAo+PiAtCWlmIChyZWcgPCAweDQwMDAwICYmICFpc19nZW44X3NoYWRvd2Vk KGRldl9wcml2LCByZWcpKSB7IFwKPj4gLQkJaWYgKGRldl9wcml2LT51bmNvcmUuZm9yY2V3YWtl X2NvdW50ID09IDApIFwKPj4gLQkJCWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9n ZXQoZGV2X3ByaXYsCVwKPj4gLQkJCQkJCQkgICAgICBGT1JDRVdBS0VfQUxMKTsgXAo+PiAtCQlf X3Jhd19pOTE1X3dyaXRlIyN4KGRldl9wcml2LCByZWcsIHZhbCk7IFwKPj4gLQkJaWYgKGRldl9w cml2LT51bmNvcmUuZm9yY2V3YWtlX2NvdW50ID09IDApIFwKPj4gLQkJCWRldl9wcml2LT51bmNv cmUuZnVuY3MuZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYsIFwKPj4gLQkJCQkJCQkgICAgICBGT1JD RVdBS0VfQUxMKTsgXAo+PiAtCX0gZWxzZSB7IFwKPj4gLQkJX19yYXdfaTkxNV93cml0ZSMjeChk ZXZfcHJpdiwgcmVnLCB2YWwpOyBcCj4+IC0JfSBcCj4+ICsJaWYgKHJlZyA8IDB4NDAwMDAgJiYg IWlzX2dlbjhfc2hhZG93ZWQoZGV2X3ByaXYsIHJlZykpIFwKPj4gKwkJX19mb3JjZV93YWtlX2dl dChkZXZfcHJpdiwgRk9SQ0VXQUtFX1JFTkRFUik7IFwKPj4gKwlfX3Jhd19pOTE1X3dyaXRlIyN4 KGRldl9wcml2LCByZWcsIHZhbCk7IFwKPj4gICAJaHN3X3VuY2xhaW1lZF9yZWdfZGVidWcoZGV2 X3ByaXYsIHJlZywgZmFsc2UsIGZhbHNlKTsgXAo+PiAgIAloc3dfdW5jbGFpbWVkX3JlZ19kZXRl Y3QoZGV2X3ByaXYpOyBcCj4+ICAgCUdFTjZfV1JJVEVfRk9PVEVSOyBcCj4+IEBAIC0xMDA1LDI4 ICs4OTYsMTcgQEAgZ2VuOF93cml0ZSMjeChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIG9mZl90IHJlZywgdSMjeCB2YWwsIGJvb2wgdHJhY2UKPj4gICAjZGVmaW5lIF9fY2h2X3dy aXRlKHgpIFwKPj4gICBzdGF0aWMgdm9pZCBcCj4+ICAgY2h2X3dyaXRlIyN4KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgb2ZmX3QgcmVnLCB1IyN4IHZhbCwgYm9vbCB0cmFjZSkg eyBcCj4+IC0JdW5zaWduZWQgZndlbmdpbmUgPSAwOyBcCj4+ICAgCWJvb2wgc2hhZG93ZWQgPSBp c19nZW44X3NoYWRvd2VkKGRldl9wcml2LCByZWcpOyBcCj4+ICAgCUdFTjZfV1JJVEVfSEVBREVS OyBcCj4+ICAgCWlmICghc2hhZG93ZWQpIHsgXAo+PiAtCQlpZiAoRk9SQ0VXQUtFX0NIVl9SRU5E RVJfUkFOR0VfT0ZGU0VUKHJlZykpIHsgXAo+PiAtCQkJaWYgKGRldl9wcml2LT51bmNvcmUuZndf cmVuZGVyY291bnQgPT0gMCkgXAo+PiAtCQkJCWZ3ZW5naW5lID0gRk9SQ0VXQUtFX1JFTkRFUjsg XAo+PiAtCQl9IGVsc2UgaWYgKEZPUkNFV0FLRV9DSFZfTUVESUFfUkFOR0VfT0ZGU0VUKHJlZykp IHsgXAo+PiAtCQkJaWYgKGRldl9wcml2LT51bmNvcmUuZndfbWVkaWFjb3VudCA9PSAwKSBcCj4+ IC0JCQkJZndlbmdpbmUgPSBGT1JDRVdBS0VfTUVESUE7IFwKPj4gLQkJfSBlbHNlIGlmIChGT1JD RVdBS0VfQ0hWX0NPTU1PTl9SQU5HRV9PRkZTRVQocmVnKSkgeyBcCj4+IC0JCQlpZiAoZGV2X3By aXYtPnVuY29yZS5md19yZW5kZXJjb3VudCA9PSAwKSBcCj4+IC0JCQkJZndlbmdpbmUgfD0gRk9S Q0VXQUtFX1JFTkRFUjsgXAo+PiAtCQkJaWYgKGRldl9wcml2LT51bmNvcmUuZndfbWVkaWFjb3Vu dCA9PSAwKSBcCj4+IC0JCQkJZndlbmdpbmUgfD0gRk9SQ0VXQUtFX01FRElBOyBcCj4+IC0JCX0g XAo+PiArCQlpZiAoRk9SQ0VXQUtFX0NIVl9SRU5ERVJfUkFOR0VfT0ZGU0VUKHJlZykpIFwKPj4g KwkJCV9fZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9SRU5ERVIpOyBcCj4+ICsJ CWVsc2UgaWYgKEZPUkNFV0FLRV9DSFZfTUVESUFfUkFOR0VfT0ZGU0VUKHJlZykpIFwKPj4gKwkJ CV9fZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9NRURJQSk7IFwKPj4gKwkJZWxz ZSBpZiAoRk9SQ0VXQUtFX0NIVl9DT01NT05fUkFOR0VfT0ZGU0VUKHJlZykpIFwKPj4gKwkJCV9f Zm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9SRU5ERVIgfCBGT1JDRVdBS0VfTUVE SUEpOyBcCj4+ICAgCX0gXAo+PiAtCWlmIChmd2VuZ2luZSkgXAo+PiAtCQlkZXZfcHJpdi0+dW5j b3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0KGRldl9wcml2LCBmd2VuZ2luZSk7IFwKPj4gICAJX19y YXdfaTkxNV93cml0ZSMjeChkZXZfcHJpdiwgcmVnLCB2YWwpOyBcCj4+IC0JaWYgKGZ3ZW5naW5l KSBcCj4+IC0JCWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYs IGZ3ZW5naW5lKTsgXAo+PiAgIAlHRU42X1dSSVRFX0ZPT1RFUjsgXAo+PiAgIH0KPj4gICAKPj4g QEAgLTEwNTcsMzUgKzkzNywyMiBAQCBzdGF0aWMgYm9vbCBpc19nZW45X3NoYWRvd2VkKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZykKPj4gICBzdGF0aWMgdm9pZCBc Cj4+ICAgZ2VuOV93cml0ZSMjeChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIG9m Zl90IHJlZywgdSMjeCB2YWwsIFwKPj4gICAJCWJvb2wgdHJhY2UpIHsgXAo+PiArCXVuc2lnbmVk IGZ3X2VuZ2luZTsgXAo+PiAgIAlHRU42X1dSSVRFX0hFQURFUjsgXAo+PiAtCWlmICghU0tMX05F RURTX0ZPUkNFX1dBS0UoKGRldl9wcml2KSwgKHJlZykpIHx8IFwKPj4gLQkJCWlzX2dlbjlfc2hh ZG93ZWQoZGV2X3ByaXYsIHJlZykpIHsgXAo+PiAtCQlfX3Jhd19pOTE1X3dyaXRlIyN4KGRldl9w cml2LCByZWcsIHZhbCk7IFwKPj4gLQl9IGVsc2UgeyBcCj4+IC0JCXVuc2lnbmVkIGZ3ZW5naW5l ID0gMDsgXAo+PiAtCQlpZiAoRk9SQ0VXQUtFX0dFTjlfUkVOREVSX1JBTkdFX09GRlNFVChyZWcp KSB7IFwKPj4gLQkJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X3JlbmRlcmNvdW50ID09IDApIFwK Pj4gLQkJCQlmd2VuZ2luZSA9IEZPUkNFV0FLRV9SRU5ERVI7IFwKPj4gLQkJfSBlbHNlIGlmIChG T1JDRVdBS0VfR0VOOV9NRURJQV9SQU5HRV9PRkZTRVQocmVnKSkgeyBcCj4+IC0JCQlpZiAoZGV2 X3ByaXYtPnVuY29yZS5md19tZWRpYWNvdW50ID09IDApIFwKPj4gLQkJCQlmd2VuZ2luZSA9IEZP UkNFV0FLRV9NRURJQTsgXAo+PiAtCQl9IGVsc2UgaWYgKEZPUkNFV0FLRV9HRU45X0NPTU1PTl9S QU5HRV9PRkZTRVQocmVnKSkgeyBcCj4+IC0JCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19yZW5k ZXJjb3VudCA9PSAwKSBcCj4+IC0JCQkJZndlbmdpbmUgfD0gRk9SQ0VXQUtFX1JFTkRFUjsgXAo+ PiAtCQkJaWYgKGRldl9wcml2LT51bmNvcmUuZndfbWVkaWFjb3VudCA9PSAwKSBcCj4+IC0JCQkJ ZndlbmdpbmUgfD0gRk9SQ0VXQUtFX01FRElBOyBcCj4+IC0JCX0gZWxzZSB7IFwKPj4gLQkJCWlm IChkZXZfcHJpdi0+dW5jb3JlLmZ3X2JsaXR0ZXJjb3VudCA9PSAwKSBcCj4+IC0JCQkJZndlbmdp bmUgPSBGT1JDRVdBS0VfQkxJVFRFUjsgXAo+PiAtCQl9IFwKPj4gLQkJaWYgKGZ3ZW5naW5lKSBc Cj4+IC0JCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0KGRldl9wcml2LCBc Cj4+IC0JCQkJCWZ3ZW5naW5lKTsgXAo+PiAtCQlfX3Jhd19pOTE1X3dyaXRlIyN4KGRldl9wcml2 LCByZWcsIHZhbCk7IFwKPj4gLQkJaWYgKGZ3ZW5naW5lKSBcCj4+IC0JCQlkZXZfcHJpdi0+dW5j b3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0KGRldl9wcml2LCBcCj4+IC0JCQkJCWZ3ZW5naW5lKTsg XAo+PiAtCX0gXAo+PiArCWlmICghU0tMX05FRURTX0ZPUkNFX1dBS0UoKGRldl9wcml2KSwgKHJl ZykpIHx8CVwKPj4gKwkgICAgaXNfZ2VuOV9zaGFkb3dlZChkZXZfcHJpdiwgcmVnKSkgXAo+PiAr CQlmd19lbmdpbmUgPSAwOyBcCj4+ICsJZWxzZSBpZiAoRk9SQ0VXQUtFX0dFTjlfUkVOREVSX1JB TkdFX09GRlNFVChyZWcpKSBcCj4+ICsJCWZ3X2VuZ2luZSA9IEZPUkNFV0FLRV9SRU5ERVI7IFwK Pj4gKwllbHNlIGlmIChGT1JDRVdBS0VfR0VOOV9NRURJQV9SQU5HRV9PRkZTRVQocmVnKSkgXAo+ PiArCQlmd19lbmdpbmUgPSBGT1JDRVdBS0VfTUVESUE7IFwKPj4gKwllbHNlIGlmIChGT1JDRVdB S0VfR0VOOV9DT01NT05fUkFOR0VfT0ZGU0VUKHJlZykpIFwKPj4gKwkJZndfZW5naW5lID0gRk9S Q0VXQUtFX1JFTkRFUiB8IEZPUkNFV0FLRV9NRURJQTsgXAo+PiArCWVsc2UgXAo+PiArCQlmd19l bmdpbmUgPSBGT1JDRVdBS0VfQkxJVFRFUjsgXAo+PiArCWlmIChmd19lbmdpbmUpIFwKPj4gKwkJ X19mb3JjZV93YWtlX2dldChkZXZfcHJpdiwgZndfZW5naW5lKTsgXAo+PiArCV9fcmF3X2k5MTVf d3JpdGUjI3goZGV2X3ByaXYsIHJlZywgdmFsKTsgXAo+PiAgIAlHRU42X1dSSVRFX0ZPT1RFUjsg XAo+PiAgIH0KPj4gICAKPj4gQEAgLTExMzcsMjEgKzEwMDQsMjQgQEAgZG8geyBcCj4+ICAgdm9p ZCBpbnRlbF91bmNvcmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+PiAgIHsKPj4gICAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPj4g LQo+PiAtCXNldHVwX3RpbWVyKCZkZXZfcHJpdi0+dW5jb3JlLmZvcmNlX3dha2VfdGltZXIsCj4+ IC0JCSAgICBnZW42X2ZvcmNlX3dha2VfdGltZXIsICh1bnNpZ25lZCBsb25nKWRldl9wcml2KTsK Pj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmRvbWFpbjsKPj4gKwlp bnQgaTsKPj4gICAKPj4gICAJX19pbnRlbF91bmNvcmVfZWFybHlfc2FuaXRpemUoZGV2LCBmYWxz ZSk7Cj4+ICAgCj4+ICAgCWlmIChJU19HRU45KGRldikpIHsKPj4gICAJCWRldl9wcml2LT51bmNv cmUuZnVuY3MuZm9yY2Vfd2FrZV9nZXQgPSBfX2dlbjlfZm9yY2Vfd2FrZV9nZXQ7Cj4+ICAgCQlk ZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0ID0gX19nZW45X2ZvcmNlX3dha2Vf cHV0Owo+PiArCQlkZXZfcHJpdi0+dW5jb3JlLmZ3X2RvbWFpbnMgPSBGT1JDRVdBS0VfUkVOREVS IHwKPj4gKwkJCUZPUkNFV0FLRV9CTElUVEVSIHwgRk9SQ0VXQUtFX01FRElBOwo+PiAgIAl9IGVs c2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgewo+PiAgIAkJZGV2X3ByaXYtPnVuY29yZS5mdW5j cy5mb3JjZV93YWtlX2dldCA9IF9fdmx2X2ZvcmNlX3dha2VfZ2V0Owo+PiAgIAkJZGV2X3ByaXYt PnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX3B1dCA9IF9fdmx2X2ZvcmNlX3dha2VfcHV0Owo+PiAr CQlkZXZfcHJpdi0+dW5jb3JlLmZ3X2RvbWFpbnMgPSBGT1JDRVdBS0VfUkVOREVSIHwgRk9SQ0VX QUtFX01FRElBOwo+PiAgIAl9IGVsc2UgaWYgKElTX0hBU1dFTEwoZGV2KSB8fCBJU19CUk9BRFdF TEwoZGV2KSkgewo+PiAgIAkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldCA9 IF9fZ2VuN19ndF9mb3JjZV93YWtlX210X2dldDsKPj4gICAJCWRldl9wcml2LT51bmNvcmUuZnVu Y3MuZm9yY2Vfd2FrZV9wdXQgPSBfX2dlbjdfZ3RfZm9yY2Vfd2FrZV9tdF9wdXQ7Cj4+ICsJCWRl dl9wcml2LT51bmNvcmUuZndfZG9tYWlucyA9IEZPUkNFV0FLRV9SRU5ERVI7Cj4+ICAgCX0gZWxz ZSBpZiAoSVNfSVZZQlJJREdFKGRldikpIHsKPj4gICAJCXUzMiBlY29idXM7Cj4+ICAgCj4+IEBA IC0xMTgzLDExICsxMDUzLDIxIEBAIHZvaWQgaW50ZWxfdW5jb3JlX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPj4gICAJCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0 ID0KPj4gICAJCQkJX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0Owo+PiAgIAkJfQo+PiArCQlkZXZf cHJpdi0+dW5jb3JlLmZ3X2RvbWFpbnMgPSBGT1JDRVdBS0VfUkVOREVSOwo+PiAgIAl9IGVsc2Ug aWYgKElTX0dFTjYoZGV2KSkgewo+PiAgIAkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93 YWtlX2dldCA9Cj4+ICAgCQkJX19nZW42X2d0X2ZvcmNlX3dha2VfZ2V0Owo+PiAgIAkJZGV2X3By aXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX3B1dCA9Cj4+ICAgCQkJX19nZW42X2d0X2ZvcmNl X3dha2VfcHV0Owo+PiArCQlkZXZfcHJpdi0+dW5jb3JlLmZ3X2RvbWFpbnMgPSBGT1JDRVdBS0Vf UkVOREVSOwo+PiArCX0KPj4gKwo+PiArCWZvcl9lYWNoX2Z3X2RvbWFpbihkb21haW4sIGRldl9w cml2LCBpKSB7Cj4+ICsJCWRvbWFpbi0+aTkxNSA9IGRldl9wcml2Owo+PiArCQlkb21haW4tPmlk ID0gaTsKPj4gKwo+PiArCQlzZXR1cF90aW1lcigmZG9tYWluLT50aW1lciwgZ2VuNl9mb3JjZV93 YWtlX3RpbWVyLAo+PiArCQkJICAgICh1bnNpZ25lZCBsb25nKWRvbWFpbik7Cj4+ICAgCX0KPj4g ICAKPj4gICAJc3dpdGNoIChJTlRFTF9JTkZPKGRldiktPmdlbikgewo+Cj4KPiBfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5n IGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=