From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Harrison Subject: Re: [PATCH 09/17] drm/i915: Amalgamate execbuffer parameter structures Date: Wed, 24 Aug 2016 14:20:00 +0100 Message-ID: References: <20160822080350.4964-1-chris@chris-wilson.co.uk> <20160822080350.4964-10-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9ECE46E8A3 for ; Wed, 24 Aug 2016 13:20:17 +0000 (UTC) In-Reply-To: <20160822080350.4964-10-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMjIvMDgvMjAxNiAwOTowMywgQ2hyaXMgV2lsc29uIHdyb3RlOgo+IENvbWJpbmUgdGhlIHR3 byBzbGlnaHRseSBvdmVybGFwcGluZyBwYXJhbWV0ZXIgc3RydWN0dXJlcyB3ZSBwYXNzIGFyb3Vu ZAo+IHRoZSBleGVjYnVmZmVyIHJvdXRpbmVzIGludG8gb25lLgpTaG91bGQgYWxzbyBpbmNsdWRl IHNvbWV0aGluZyBhYm91dCBhbHNvIHJlbmFtaW5nIGFuZCByZWZhY3RvcmluZyB0aGUgCmViXyog LyBpOTE1X2dlbV9leGVjYnVmZmVyXyogaGVscGVyIGZ1bmN0aW9ucyB0b28uCgpBbHNvLCB3aGls ZSB5b3UgYXJlIGRvaW5nIHRoZSByZW5hbWUvcmVmYWN0b3IsIG1heWJlIGFkZCBhdCBsZWFzdCBz b21lIApicmllZiBrZXJuZWxkb2NzPwoKCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxj aHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9leGVjYnVmZmVyLmMgfCA1NTcgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0K PiAgIDEgZmlsZSBjaGFuZ2VkLCAyMzUgaW5zZXJ0aW9ucygrKSwgMzIyIGRlbGV0aW9ucygtKQo+ Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+IGluZGV4IDU2 ODk0NDViMWNkMy4uN2NiNWI5YWQ5MjEyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2V4ZWNidWZmZXIuYwo+IEBAIC00OSw3MCArNDksNzMgQEAKPiAgIAo+ICAgI2RlZmlu ZSBCQVRDSF9PRkZTRVRfQklBUyAoMjU2KjEwMjQpCj4gICAKPiAtc3RydWN0IGk5MTVfZXhlY2J1 ZmZlcl9wYXJhbXMgewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgICAgICAgICAgICAgICAqZGV2Owo+ IC0Jc3RydWN0IGRybV9maWxlICAgICAgICAgICAgICAgICAqZmlsZTsKPiAtCXN0cnVjdCBpOTE1 X3ZtYQkJCSpiYXRjaDsKPiAtCXUzMgkJCQlkaXNwYXRjaF9mbGFnczsKPiAtCXUzMgkJCQlhcmdz X2JhdGNoX3N0YXJ0X29mZnNldDsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgICAgICAgICAg KmVuZ2luZTsKPiAtCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICAgICAgICAgKmN0eDsKPiAtCXN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAgICAgKnJlcXVlc3Q7Cj4gLX07Cj4gLQo+IC1zdHJ1 Y3QgZWJfdm1hcyB7Cj4gK3N0cnVjdCBpOTE1X2V4ZWNidWZmZXIgewo+ICAgCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1Owo+ICsJc3RydWN0IGRybV9maWxlICpmaWxlOwo+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJnczsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyICpleGVjOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPiArCXN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKnZtOwo+ICsJc3RydWN0IGk5MTVfdm1hICpiYXRjaDsKPiArCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKPiArCXUzMiBiYXRjaF9zdGFydF9vZmZzZXQ7Cj4gKwl1 bnNpZ25lZCBpbnQgZGlzcGF0Y2hfZmxhZ3M7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNf b2JqZWN0MiBzaGFkb3dfZXhlY19lbnRyeTsKPiArCWJvb2wgbmVlZF9yZWxvY3M7Cj4gICAJc3Ry dWN0IGxpc3RfaGVhZCB2bWFzOwo+ICsJc3RydWN0IHJlbG9jX2NhY2hlIHsKPiArCQlzdHJ1Y3Qg ZHJtX21tX25vZGUgbm9kZTsKPiArCQl1bnNpZ25lZCBsb25nIHZhZGRyOwo+ICsJCXVuc2lnbmVk IGludCBwYWdlOwo+ICsJCWJvb2wgdXNlXzY0Yml0X3JlbG9jOwo+ICsJfSByZWxvY19jYWNoZTsK PiAgIAlpbnQgYW5kOwo+ICAgCXVuaW9uIHsKPiAtCQlzdHJ1Y3QgaTkxNV92bWEgKmx1dFswXTsK PiAtCQlzdHJ1Y3QgaGxpc3RfaGVhZCBidWNrZXRzWzBdOwo+ICsJCXN0cnVjdCBpOTE1X3ZtYSAq Kmx1dDsKPiArCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0czsKPiAgIAl9Owo+ICAgfTsKPiAg IAo+IC1zdGF0aWMgc3RydWN0IGViX3ZtYXMgKgo+IC1lYl9jcmVhdGUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCj4gLQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmFy Z3MpCj4gK3N0YXRpYyBpbnQKPiArZWJfY3JlYXRlKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmVi KQpXb3VsZCB0aGlzIGJlIGJldHRlciBjYWxsZWQgZWJfY3JlYXRlX3ZtYV9sdXQoKSBvciBzaW1p bGFyPyBJdCBkb2Vzbid0IApjcmVhdGUgdGhlIGViIGl0c2VsZiAodGhhdCBpcyBsb2NhbCB0byBp OTE1X2dlbV9kb19leGVjYnVmZmVyKSBhbmQgYWxsIAp0aGUgYmFzaWMgaW5pdGlhbGlzYXRpb24g aXMgb3V0c2lkZSBhcyB3ZWxsLgoKPiAgIHsKPiAtCXN0cnVjdCBlYl92bWFzICplYiA9IE5VTEw7 Cj4gLQo+IC0JaWYgKGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX0hBTkRMRV9MVVQpIHsKPiAtCQl1 bnNpZ25lZCBzaXplID0gYXJncy0+YnVmZmVyX2NvdW50Owo+ICsJZWItPmx1dCA9IE5VTEw7Cj4g KwlpZiAoZWItPmFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX0hBTkRMRV9MVVQpIHsKPiArCQl1bnNp Z25lZCBpbnQgc2l6ZSA9IGViLT5hcmdzLT5idWZmZXJfY291bnQ7Cj4gICAJCXNpemUgKj0gc2l6 ZW9mKHN0cnVjdCBpOTE1X3ZtYSAqKTsKPiAtCQlzaXplICs9IHNpemVvZihzdHJ1Y3QgZWJfdm1h cyk7Cj4gLQkJZWIgPSBrbWFsbG9jKHNpemUsIEdGUF9URU1QT1JBUlkgfCBfX0dGUF9OT1dBUk4g fCBfX0dGUF9OT1JFVFJZKTsKPiArCQllYi0+bHV0ID0ga21hbGxvYyhzaXplLAo+ICsJCQkJICBH RlBfVEVNUE9SQVJZIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSk7Cj4gICAJfQo+ICAg Cj4gLQlpZiAoZWIgPT0gTlVMTCkgewo+IC0JCXVuc2lnbmVkIHNpemUgPSBhcmdzLT5idWZmZXJf Y291bnQ7Cj4gLQkJdW5zaWduZWQgY291bnQgPSBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGhs aXN0X2hlYWQpIC8gMjsKPiArCWlmICghZWItPmx1dCkgewo+ICsJCXVuc2lnbmVkIGludCBzaXpl ID0gZWItPmFyZ3MtPmJ1ZmZlcl9jb3VudDsKPiArCQl1bnNpZ25lZCBpbnQgY291bnQgPSBQQUdF X1NJWkUgLyBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpIC8gMjsKPiAgIAkJQlVJTERfQlVHX09O X05PVF9QT1dFUl9PRl8yKFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkpOwo+ ICAgCQl3aGlsZSAoY291bnQgPiAyKnNpemUpCj4gICAJCQljb3VudCA+Pj0gMTsKPiAtCQllYiA9 IGt6YWxsb2MoY291bnQqc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSArCj4gLQkJCSAgICAgc2l6 ZW9mKHN0cnVjdCBlYl92bWFzKSwKPiAtCQkJICAgICBHRlBfVEVNUE9SQVJZKTsKPiAtCQlpZiAo ZWIgPT0gTlVMTCkKPiAtCQkJcmV0dXJuIGViOwo+ICsJCWViLT5sdXQgPSBremFsbG9jKGNvdW50 KnNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCksCj4gKwkJCQkgIEdGUF9URU1QT1JBUlkpOwo+ICsJ CWlmICghZWItPmx1dCkKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gICAKPiAgIAkJZWItPmFuZCA9 IGNvdW50IC0gMTsKPiAgIAl9IGVsc2UKPiAtCQllYi0+YW5kID0gLWFyZ3MtPmJ1ZmZlcl9jb3Vu dDsKPiArCQllYi0+YW5kID0gLWViLT5hcmdzLT5idWZmZXJfY291bnQ7Cj4gICAKPiAtCWViLT5p OTE1ID0gaTkxNTsKPiAgIAlJTklUX0xJU1RfSEVBRCgmZWItPnZtYXMpOwo+IC0JcmV0dXJuIGVi Owo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkCj4gLWViX3Jlc2V0KHN0 cnVjdCBlYl92bWFzICplYikKPiArZWJfcmVzZXQoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIp Cj4gICB7Cj4gICAJaWYgKGViLT5hbmQgPj0gMCkKPiAgIAkJbWVtc2V0KGViLT5idWNrZXRzLCAw LCAoZWItPmFuZCsxKSpzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpKTsKPiAgIH0KPiAgIAo+ICAg c3RhdGljIHN0cnVjdCBpOTE1X3ZtYSAqCj4gLWViX2dldF9iYXRjaChzdHJ1Y3QgZWJfdm1hcyAq ZWIpCj4gK2ViX2dldF9iYXRjaChzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKPiAgIHsKPiAg IAlzdHJ1Y3QgaTkxNV92bWEgKnZtYSA9IGxpc3RfZW50cnkoZWItPnZtYXMucHJldiwgdHlwZW9m KCp2bWEpLCBleGVjX2xpc3QpOwo+ICAgCj4gQEAgLTEzMiw0MSArMTM1LDM3IEBAIGViX2dldF9i YXRjaChzdHJ1Y3QgZWJfdm1hcyAqZWIpCj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiAtZWJf bG9va3VwX3ZtYXMoc3RydWN0IGViX3ZtYXMgKmViLAo+IC0JICAgICAgIHN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY19vYmplY3QyICpleGVjLAo+IC0JICAgICAgIGNvbnN0IHN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY2J1ZmZlcjIgKmFyZ3MsCj4gLQkgICAgICAgc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0sCj4gLQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICtlYl9sb29rdXBf dm1hcyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqOwo+ICAgCXN0cnVjdCBsaXN0X2hlYWQgb2JqZWN0czsKPiAgIAlp bnQgaSwgcmV0Owo+ICAgCj4gICAJSU5JVF9MSVNUX0hFQUQoJm9iamVjdHMpOwo+IC0Jc3Bpbl9s b2NrKCZmaWxlLT50YWJsZV9sb2NrKTsKPiArCXNwaW5fbG9jaygmZWItPmZpbGUtPnRhYmxlX2xv Y2spOwo+ICAgCS8qIEdyYWIgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBhbmQgcmVsZWFzZSB0 aGUgbG9jayBzbyB3ZSBjYW4gbG9va3VwCj4gICAJICogb3IgY3JlYXRlIHRoZSBWTUEgd2l0aG91 dCB1c2luZyBHRlBfQVRPTUlDICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2Nv dW50OyBpKyspIHsKPiAtCQlvYmogPSB0b19pbnRlbF9ibyhpZHJfZmluZCgmZmlsZS0+b2JqZWN0 X2lkciwgZXhlY1tpXS5oYW5kbGUpKTsKPiArCWZvciAoaSA9IDA7IGkgPCBlYi0+YXJncy0+YnVm ZmVyX2NvdW50OyBpKyspIHsKPiArCQlvYmogPSB0b19pbnRlbF9ibyhpZHJfZmluZCgmZWItPmZp bGUtPm9iamVjdF9pZHIsIGViLT5leGVjW2ldLmhhbmRsZSkpOwo+ICAgCQlpZiAob2JqID09IE5V TEwpIHsKPiAtCQkJc3Bpbl91bmxvY2soJmZpbGUtPnRhYmxlX2xvY2spOwo+ICsJCQlzcGluX3Vu bG9jaygmZWItPmZpbGUtPnRhYmxlX2xvY2spOwo+ICAgCQkJRFJNX0RFQlVHKCJJbnZhbGlkIG9i amVjdCBoYW5kbGUgJWQgYXQgaW5kZXggJWRcbiIsCj4gLQkJCQkgICBleGVjW2ldLmhhbmRsZSwg aSk7Cj4gKwkJCQkgICBlYi0+ZXhlY1tpXS5oYW5kbGUsIGkpOwo+ICAgCQkJcmV0ID0gLUVOT0VO VDsKPiAgIAkJCWdvdG8gZXJyOwo+ICAgCQl9Cj4gICAKPiAgIAkJaWYgKCFsaXN0X2VtcHR5KCZv YmotPm9ial9leGVjX2xpbmspKSB7Cj4gLQkJCXNwaW5fdW5sb2NrKCZmaWxlLT50YWJsZV9sb2Nr KTsKPiArCQkJc3Bpbl91bmxvY2soJmViLT5maWxlLT50YWJsZV9sb2NrKTsKPiAgIAkJCURSTV9E RUJVRygiT2JqZWN0ICVwIFtoYW5kbGUgJWQsIGluZGV4ICVkXSBhcHBlYXJzIG1vcmUgdGhhbiBv bmNlIGluIG9iamVjdCBsaXN0XG4iLAo+IC0JCQkJICAgb2JqLCBleGVjW2ldLmhhbmRsZSwgaSk7 Cj4gKwkJCQkgICBvYmosIGViLT5leGVjW2ldLmhhbmRsZSwgaSk7Cj4gICAJCQlyZXQgPSAtRUlO VkFMOwo+ICAgCQkJZ290byBlcnI7Cj4gICAJCX0KPiAgIAo+ICAgCQlsaXN0X2FkZF90YWlsKCZv YmotPm9ial9leGVjX2xpbmssICZvYmplY3RzKTsKPiAgIAl9Cj4gLQlzcGluX3VubG9jaygmZmls ZS0+dGFibGVfbG9jayk7Cj4gKwlzcGluX3VubG9jaygmZWItPmZpbGUtPnRhYmxlX2xvY2spOwo+ ICAgCj4gICAJaSA9IDA7Cj4gICAJd2hpbGUgKCFsaXN0X2VtcHR5KCZvYmplY3RzKSkgewo+IEBA IC0xODQsNyArMTgzLDcgQEAgZWJfbG9va3VwX3ZtYXMoc3RydWN0IGViX3ZtYXMgKmViLAo+ICAg CQkgKiBmcm9tIHRoZSAob2JqLCB2bSkgd2UgZG9uJ3QgcnVuIHRoZSByaXNrIG9mIGNyZWF0aW5n Cj4gICAJCSAqIGR1cGxpY2F0ZWQgdm1hcyBmb3IgdGhlIHNhbWUgdm0uCj4gICAJCSAqLwo+IC0J CXZtYSA9IGk5MTVfZ2VtX29ial9sb29rdXBfb3JfY3JlYXRlX3ZtYShvYmosIHZtLCBOVUxMKTsK PiArCQl2bWEgPSBpOTE1X2dlbV9vYmpfbG9va3VwX29yX2NyZWF0ZV92bWEob2JqLCBlYi0+dm0s IE5VTEwpOwo+ICAgCQlpZiAodW5saWtlbHkoSVNfRVJSKHZtYSkpKSB7Cj4gICAJCQlEUk1fREVC VUcoIkZhaWxlZCB0byBsb29rdXAgVk1BXG4iKTsKPiAgIAkJCXJldCA9IFBUUl9FUlIodm1hKTsK PiBAQCAtMTk1LDExICsxOTQsMTMgQEAgZWJfbG9va3VwX3ZtYXMoc3RydWN0IGViX3ZtYXMgKmVi LAo+ICAgCQlsaXN0X2FkZF90YWlsKCZ2bWEtPmV4ZWNfbGlzdCwgJmViLT52bWFzKTsKPiAgIAkJ bGlzdF9kZWxfaW5pdCgmb2JqLT5vYmpfZXhlY19saW5rKTsKPiAgIAo+IC0JCXZtYS0+ZXhlY19l bnRyeSA9ICZleGVjW2ldOwo+ICsJCXZtYS0+ZXhlY19lbnRyeSA9ICZlYi0+ZXhlY1tpXTsKPiAg IAkJaWYgKGViLT5hbmQgPCAwKSB7Cj4gICAJCQllYi0+bHV0W2ldID0gdm1hOwo+ICAgCQl9IGVs c2Ugewo+IC0JCQl1aW50MzJfdCBoYW5kbGUgPSBhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19IQU5E TEVfTFVUID8gaSA6IGV4ZWNbaV0uaGFuZGxlOwo+ICsJCQl1MzIgaGFuZGxlID0KPiArCQkJCWVi LT5hcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19IQU5ETEVfTFVUID8KPiArCQkJCWkgOiBlYi0+ZXhl Y1tpXS5oYW5kbGU7Cj4gICAJCQl2bWEtPmV4ZWNfaGFuZGxlID0gaGFuZGxlOwo+ICAgCQkJaGxp c3RfYWRkX2hlYWQoJnZtYS0+ZXhlY19ub2RlLAo+ICAgCQkJCSAgICAgICAmZWItPmJ1Y2tldHNb aGFuZGxlICYgZWItPmFuZF0pOwo+IEBAIC0yMjYsNyArMjI3LDcgQEAgZXJyOgo+ICAgCXJldHVy biByZXQ7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHN0cnVjdCBpOTE1X3ZtYSAqZWJfZ2V0X3ZtYShz dHJ1Y3QgZWJfdm1hcyAqZWIsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKQo+ICtzdGF0aWMgc3RydWN0 IGk5MTVfdm1hICplYl9nZXRfdm1hKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLCB1bnNpZ25l ZCBsb25nIGhhbmRsZSkKPiAgIHsKPiAgIAlpZiAoZWItPmFuZCA8IDApIHsKPiAgIAkJaWYgKGhh bmRsZSA+PSAtZWItPmFuZCkKPiBAQCAtMjQ2LDcgKzI0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgaTkx NV92bWEgKmViX2dldF92bWEoc3RydWN0IGViX3ZtYXMgKmViLCB1bnNpZ25lZCBsb25nIGhhbmRs ZSkKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQKPiAtaTkxNV9nZW1fZXhlY2J1ZmZlcl91bnJl c2VydmVfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICtlYl91bnJlc2VydmVfdm1hKHN0cnVj dCBpOTE1X3ZtYSAqdm1hKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmpl Y3QyICplbnRyeTsKPiAgIAo+IEBAIC0yNjQsOCArMjY1LDEwIEBAIGk5MTVfZ2VtX2V4ZWNidWZm ZXJfdW5yZXNlcnZlX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIAllbnRyeS0+ZmxhZ3Mg Jj0gfihfX0VYRUNfT0JKRUNUX0hBU19GRU5DRSB8IF9fRVhFQ19PQkpFQ1RfSEFTX1BJTik7Cj4g ICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgZWJfZGVzdHJveShzdHJ1Y3QgZWJfdm1hcyAqZWIpCj4g K3N0YXRpYyB2b2lkIGViX2Rlc3Ryb3koc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCj4gICB7 Cj4gKwlpOTE1X2dlbV9jb250ZXh0X3B1dChlYi0+Y3R4KTsKPiArCj4gICAJd2hpbGUgKCFsaXN0 X2VtcHR5KCZlYi0+dm1hcykpIHsKPiAgIAkJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gICAKPiBA QCAtMjczLDkgKzI3Niw4IEBAIHN0YXRpYyB2b2lkIGViX2Rlc3Ryb3koc3RydWN0IGViX3ZtYXMg KmViKQo+ICAgCQkJCSAgICAgICBzdHJ1Y3QgaTkxNV92bWEsCj4gICAJCQkJICAgICAgIGV4ZWNf bGlzdCk7Cj4gICAJCWxpc3RfZGVsX2luaXQoJnZtYS0+ZXhlY19saXN0KTsKPiAtCQlpOTE1X2dl bV9leGVjYnVmZmVyX3VucmVzZXJ2ZV92bWEodm1hKTsKPiArCQllYl91bnJlc2VydmVfdm1hKHZt YSk7Cj4gICAJfQo+IC0Ja2ZyZWUoZWIpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW5saW5lIGlu dCB1c2VfY3B1X3JlbG9jKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gQEAgLTMx NiwyMSArMzE4LDEyIEBAIHJlbG9jYXRpb25fdGFyZ2V0KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2MsCj4gICAJcmV0dXJuIGdlbjhfY2Fub25pY2FsX2Fk ZHIoKGludClyZWxvYy0+ZGVsdGEgKyB0YXJnZXRfb2Zmc2V0KTsKPiAgIH0KPiAgIAo+IC1zdHJ1 Y3QgcmVsb2NfY2FjaGUgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gLQlz dHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKPiAtCXVuc2lnbmVkIGxvbmcgdmFkZHI7Cj4gLQl1bnNp Z25lZCBpbnQgcGFnZTsKPiAtCWJvb2wgdXNlXzY0Yml0X3JlbG9jOwo+IC19Owo+IC0KPiAgIHN0 YXRpYyB2b2lkIHJlbG9jX2NhY2hlX2luaXQoc3RydWN0IHJlbG9jX2NhY2hlICpjYWNoZSwKPiAg IAkJCSAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICB7Cj4gICAJY2FjaGUt PnBhZ2UgPSAtMTsKPiAgIAljYWNoZS0+dmFkZHIgPSAwOwo+IC0JY2FjaGUtPmk5MTUgPSBpOTE1 Owo+IC0JY2FjaGUtPnVzZV82NGJpdF9yZWxvYyA9IElOVEVMX0dFTihjYWNoZS0+aTkxNSkgPj0g ODsKPiArCWNhY2hlLT51c2VfNjRiaXRfcmVsb2MgPSBJTlRFTF9HRU4oaTkxNSkgPj0gODsKPiAg IAljYWNoZS0+bm9kZS5hbGxvY2F0ZWQgPSBmYWxzZTsKPiAgIH0KPiAgIAo+IEBAIC0zNDYsNyAr MzM5LDE0IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVubWFza19mbGFncyh1bnNpZ25l ZCBsb25nIHApCj4gICAKPiAgICNkZWZpbmUgS01BUCAweDQgLyogYWZ0ZXIgQ0xGTFVTSF9GTEFH UyAqLwo+ICAgCj4gLXN0YXRpYyB2b2lkIHJlbG9jX2NhY2hlX2Zpbmkoc3RydWN0IHJlbG9jX2Nh Y2hlICpjYWNoZSkKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaTkxNV9nZ3R0ICpjYWNoZV90b19n Z3R0KHN0cnVjdCByZWxvY19jYWNoZSAqY2FjaGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0KPiArCQljb250YWluZXJfb2YoY2FjaGUsIHN0cnVjdCBpOTE1X2V4ZWNi dWZmZXIsIHJlbG9jX2NhY2hlKS0+aTkxNTsKPiArCXJldHVybiAmaTkxNS0+Z2d0dDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgcmVsb2NfY2FjaGVfcmVzZXQoc3RydWN0IHJlbG9jX2NhY2hlICpj YWNoZSkKPiAgIHsKPiAgIAl2b2lkICp2YWRkcjsKPiAgIAo+IEBAIC0zNjQsNyArMzY0LDcgQEAg c3RhdGljIHZvaWQgcmVsb2NfY2FjaGVfZmluaShzdHJ1Y3QgcmVsb2NfY2FjaGUgKmNhY2hlKQo+ ICAgCQl3bWIoKTsKPiAgIAkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMoKHZvaWQgX19pb21lbSAq KXZhZGRyKTsKPiAgIAkJaWYgKGNhY2hlLT5ub2RlLmFsbG9jYXRlZCkgewo+IC0JCQlzdHJ1Y3Qg aTkxNV9nZ3R0ICpnZ3R0ID0gJmNhY2hlLT5pOTE1LT5nZ3R0Owo+ICsJCQlzdHJ1Y3QgaTkxNV9n Z3R0ICpnZ3R0ID0gY2FjaGVfdG9fZ2d0dChjYWNoZSk7Cj4gICAKPiAgIAkJCWdndHQtPmJhc2Uu Y2xlYXJfcmFuZ2UoJmdndHQtPmJhc2UsCj4gICAJCQkJCSAgICAgICBjYWNoZS0+bm9kZS5zdGFy dCwKPiBAQCAtMzc1LDYgKzM3NSw5IEBAIHN0YXRpYyB2b2lkIHJlbG9jX2NhY2hlX2Zpbmkoc3Ry dWN0IHJlbG9jX2NhY2hlICpjYWNoZSkKPiAgIAkJCWk5MTVfdm1hX3VucGluKChzdHJ1Y3QgaTkx NV92bWEgKiljYWNoZS0+bm9kZS5tbSk7Cj4gICAJCX0KPiAgIAl9Cj4gKwo+ICsJY2FjaGUtPnZh ZGRyID0gMDsKPiArCWNhY2hlLT5wYWdlID0gLTE7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lk ICpyZWxvY19rbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gQEAgLTQxMyw3 ICs0MTYsNyBAQCBzdGF0aWMgdm9pZCAqcmVsb2NfaW9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwKPiAgIAkJCSBzdHJ1Y3QgcmVsb2NfY2FjaGUgKmNhY2hlLAo+ICAgCQkJIGlu dCBwYWdlKQo+ICAgewo+IC0Jc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9ICZjYWNoZS0+aTkxNS0+ Z2d0dDsKPiArCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSBjYWNoZV90b19nZ3R0KGNhY2hlKTsK PiAgIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKPiAgIAl2b2lkICp2YWRkcjsKPiAgIAo+IEBAIC00 NzIsNyArNDc1LDcgQEAgc3RhdGljIHZvaWQgKnJlbG9jX2lvbWFwKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCj4gICAJCW9mZnNldCArPSBwYWdlIDw8IFBBR0VfU0hJRlQ7Cj4gICAJ fQo+ICAgCj4gLQl2YWRkciA9IGlvX21hcHBpbmdfbWFwX2F0b21pY193YygmY2FjaGUtPmk5MTUt PmdndHQubWFwcGFibGUsIG9mZnNldCk7Cj4gKwl2YWRkciA9IGlvX21hcHBpbmdfbWFwX2F0b21p Y193YygmZ2d0dC0+bWFwcGFibGUsIG9mZnNldCk7Cj4gICAJY2FjaGUtPnBhZ2UgPSBwYWdlOwo+ ICAgCWNhY2hlLT52YWRkciA9ICh1bnNpZ25lZCBsb25nKXZhZGRyOwo+ICAgCj4gQEAgLTU2NSwx MiArNTY4LDEwIEBAIHN0YXRpYyBib29sIG9iamVjdF9pc19pZGxlKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiAtaTkxNV9nZW1fZXhl Y2J1ZmZlcl9yZWxvY2F0ZV9lbnRyeShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ IC0JCQkJICAgc3RydWN0IGViX3ZtYXMgKmViLAo+IC0JCQkJICAgc3RydWN0IGRybV9pOTE1X2dl bV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvYywKPiAtCQkJCSAgIHN0cnVjdCByZWxvY19jYWNoZSAq Y2FjaGUpCj4gK2ViX3JlbG9jYXRlX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCj4gKwkJICBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKPiArCQkgIHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2MpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKPiAgIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnRh cmdldF9vYmo7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnRhcmdldF9pOTE1X29i ajsKPiAgIAlzdHJ1Y3QgaTkxNV92bWEgKnRhcmdldF92bWE7Cj4gQEAgLTU4OSw4ICs1OTAsOCBA QCBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCj4gICAJLyogU2FuZHlicmlkZ2UgUFBHVFQgZXJyYXRhOiBXZSBuZWVkIGEg Z2xvYmFsIGd0dCBtYXBwaW5nIGZvciBNSSBhbmQKPiAgIAkgKiBwaXBlX2NvbnRyb2wgd3JpdGVz IGJlY2F1c2UgdGhlIGdwdSBkb2Vzbid0IHByb3Blcmx5IHJlZGlyZWN0IHRoZW0KPiAgIAkgKiB0 aHJvdWdoIHRoZSBwcGd0dCBmb3Igbm9uX3NlY3VyZSBiYXRjaGJ1ZmZlcnMuICovCj4gLQlpZiAo dW5saWtlbHkoSVNfR0VONihkZXYpICYmCj4gLQkgICAgcmVsb2MtPndyaXRlX2RvbWFpbiA9PSBJ OTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04pKSB7Cj4gKwlpZiAodW5saWtlbHkoSVNfR0VONihl Yi0+aTkxNSkgJiYKPiArCQkgICAgIHJlbG9jLT53cml0ZV9kb21haW4gPT0gSTkxNV9HRU1fRE9N QUlOX0lOU1RSVUNUSU9OKSkgewo+ICAgCQlyZXQgPSBpOTE1X3ZtYV9iaW5kKHRhcmdldF92bWEs IHRhcmdldF9pOTE1X29iai0+Y2FjaGVfbGV2ZWwsCj4gICAJCQkJICAgIFBJTl9HTE9CQUwpOwo+ ICAgCQlpZiAoV0FSTl9PTkNFKHJldCwgIlVuZXhwZWN0ZWQgZmFpbHVyZSB0byBiaW5kIHRhcmdl dCBWTUEhIikpCj4gQEAgLTYzMSw3ICs2MzIsNyBAQCBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9j YXRlX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAKPiAgIAkvKiBD aGVjayB0aGF0IHRoZSByZWxvY2F0aW9uIGFkZHJlc3MgaXMgdmFsaWQuLi4gKi8KPiAgIAlpZiAo dW5saWtlbHkocmVsb2MtPm9mZnNldCA+Cj4gLQkJICAgICBvYmotPmJhc2Uuc2l6ZSAtIChjYWNo ZS0+dXNlXzY0Yml0X3JlbG9jID8gOCA6IDQpKSkgewo+ICsJCSAgICAgb2JqLT5iYXNlLnNpemUg LSAoZWItPnJlbG9jX2NhY2hlLnVzZV82NGJpdF9yZWxvYyA/IDggOiA0KSkpIHsKPiAgIAkJRFJN X0RFQlVHKCJSZWxvY2F0aW9uIGJleW9uZCBvYmplY3QgYm91bmRzOiAiCj4gICAJCQkgICJvYmog JXAgdGFyZ2V0ICVkIG9mZnNldCAlZCBzaXplICVkLlxuIiwKPiAgIAkJCSAgb2JqLCByZWxvYy0+ dGFyZ2V0X2hhbmRsZSwKPiBAQCAtNjUxLDcgKzY1Miw3IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJf cmVsb2NhdGVfZW50cnkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAlpZiAo cGFnZWZhdWx0X2Rpc2FibGVkKCkgJiYgIW9iamVjdF9pc19pZGxlKG9iaikpCj4gICAJCXJldHVy biAtRUZBVUxUOwo+ICAgCj4gLQlyZXQgPSByZWxvY2F0ZV9lbnRyeShvYmosIHJlbG9jLCBjYWNo ZSwgdGFyZ2V0X29mZnNldCk7Cj4gKwlyZXQgPSByZWxvY2F0ZV9lbnRyeShvYmosIHJlbG9jLCAm ZWItPnJlbG9jX2NhY2hlLCB0YXJnZXRfb2Zmc2V0KTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1 cm4gcmV0Owo+ICAgCj4gQEAgLTY2MCwxOSArNjYxLDE1IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJf cmVsb2NhdGVfZW50cnkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAlyZXR1 cm4gMDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50Cj4gLWk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVs b2NhdGVfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+IC0JCQkJIHN0cnVjdCBlYl92bWFzICpl YikKPiArc3RhdGljIGludCBlYl9yZWxvY2F0ZV92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsIHN0 cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQo+ICAgewo+ICAgI2RlZmluZSBOX1JFTE9DKHgpICgo eCkgLyBzaXplb2Yoc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5KSkKPiAgIAlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgc3RhY2tfcmVsb2NbTl9SRUxPQyg1 MTIpXTsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgX191c2VyICp1 c2VyX3JlbG9jczsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnkg PSB2bWEtPmV4ZWNfZW50cnk7Cj4gLQlzdHJ1Y3QgcmVsb2NfY2FjaGUgY2FjaGU7Cj4gICAJaW50 IHJlbWFpbiwgcmV0ID0gMDsKPiAgIAo+ICAgCXVzZXJfcmVsb2NzID0gdTY0X3RvX3VzZXJfcHRy KGVudHJ5LT5yZWxvY3NfcHRyKTsKPiAtCXJlbG9jX2NhY2hlX2luaXQoJmNhY2hlLCBlYi0+aTkx NSk7Cj4gICAKPiAgIAlyZW1haW4gPSBlbnRyeS0+cmVsb2NhdGlvbl9jb3VudDsKPiAgIAl3aGls ZSAocmVtYWluKSB7Cj4gQEAgLTY5MCw3ICs2ODcsNyBAQCBpOTE1X2dlbV9leGVjYnVmZmVyX3Jl bG9jYXRlX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAkJZG8gewo+ICAgCQkJdTY0IG9m ZnNldCA9IHItPnByZXN1bWVkX29mZnNldDsKPiAgIAo+IC0JCQlyZXQgPSBpOTE1X2dlbV9leGVj YnVmZmVyX3JlbG9jYXRlX2VudHJ5KHZtYS0+b2JqLCBlYiwgciwgJmNhY2hlKTsKPiArCQkJcmV0 ID0gZWJfcmVsb2NhdGVfZW50cnkodm1hLT5vYmosIGViLCByKTsKPiAgIAkJCWlmIChyZXQpCj4g ICAJCQkJZ290byBvdXQ7Cj4gICAKPiBAQCAtNzA3LDMzICs3MDQsMjkgQEAgaTkxNV9nZW1fZXhl Y2J1ZmZlcl9yZWxvY2F0ZV92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gICAJfQo+ICAgCj4g ICBvdXQ6Cj4gLQlyZWxvY19jYWNoZV9maW5pKCZjYWNoZSk7Cj4gKwlyZWxvY19jYWNoZV9yZXNl dCgmZWItPnJlbG9jX2NhY2hlKTsKPiAgIAlyZXR1cm4gcmV0Owo+ICAgI3VuZGVmIE5fUkVMT0MK PiAgIH0KPiAgIAo+ICAgc3RhdGljIGludAo+IC1pOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRl X3ZtYV9zbG93KHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+IC0JCQkJICAgICAgc3RydWN0IGViX3Zt YXMgKmViLAo+IC0JCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5 ICpyZWxvY3MpCj4gK2ViX3JlbG9jYXRlX3ZtYV9zbG93KHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ ICsJCSAgICAgc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCj4gKwkJICAgICBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jcykKPiAgIHsKPiAgIAljb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnkgPSB2bWEtPmV4ZWNfZW50cnk7Cj4g LQlzdHJ1Y3QgcmVsb2NfY2FjaGUgY2FjaGU7Cj4gICAJaW50IGksIHJldCA9IDA7Cj4gICAKPiAt CXJlbG9jX2NhY2hlX2luaXQoJmNhY2hlLCBlYi0+aTkxNSk7Cj4gICAJZm9yIChpID0gMDsgaSA8 IGVudHJ5LT5yZWxvY2F0aW9uX2NvdW50OyBpKyspIHsKPiAtCQlyZXQgPSBpOTE1X2dlbV9leGVj YnVmZmVyX3JlbG9jYXRlX2VudHJ5KHZtYS0+b2JqLCBlYiwgJnJlbG9jc1tpXSwgJmNhY2hlKTsK PiArCQlyZXQgPSBlYl9yZWxvY2F0ZV9lbnRyeSh2bWEtPm9iaiwgZWIsICZyZWxvY3NbaV0pOwo+ ICAgCQlpZiAocmV0KQo+ICAgCQkJYnJlYWs7Cj4gICAJfQo+IC0JcmVsb2NfY2FjaGVfZmluaSgm Y2FjaGUpOwo+IC0KPiArCXJlbG9jX2NhY2hlX3Jlc2V0KCZlYi0+cmVsb2NfY2FjaGUpOwo+ICAg CXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludAo+IC1pOTE1X2dlbV9leGVjYnVm ZmVyX3JlbG9jYXRlKHN0cnVjdCBlYl92bWFzICplYikKPiArc3RhdGljIGludCBlYl9yZWxvY2F0 ZShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV92bWEg KnZtYTsKPiAgIAlpbnQgcmV0ID0gMDsKPiBAQCAtNzQ3LDcgKzc0MCw3IEBAIGk5MTVfZ2VtX2V4 ZWNidWZmZXJfcmVsb2NhdGUoc3RydWN0IGViX3ZtYXMgKmViKQo+ICAgCSAqLwo+ICAgCXBhZ2Vm YXVsdF9kaXNhYmxlKCk7Cj4gICAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1hcywg ZXhlY19saXN0KSB7Cj4gLQkJcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV92bWEo dm1hLCBlYik7Cj4gKwkJcmV0ID0gZWJfcmVsb2NhdGVfdm1hKHZtYSwgZWIpOwo+ICAgCQlpZiAo cmV0KQo+ICAgCQkJYnJlYWs7Cj4gICAJfQo+IEBAIC03NjMsOSArNzU2LDkgQEAgc3RhdGljIGJv b2wgb25seV9tYXBwYWJsZV9mb3JfcmVsb2ModW5zaWduZWQgaW50IGZsYWdzKQo+ICAgfQo+ICAg Cj4gICBzdGF0aWMgaW50Cj4gLWk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVzZXJ2ZV92bWEoc3RydWN0 IGk5MTVfdm1hICp2bWEsCj4gLQkJCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4g LQkJCQlib29sICpuZWVkX3JlbG9jKQo+ICtlYl9yZXNlcnZlX3ZtYShzdHJ1Y3QgaTkxNV92bWEg KnZtYSwKPiArCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkgICAg ICAgYm9vbCAqbmVlZF9yZWxvYykKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqID0gdm1hLT5vYmo7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIg KmVudHJ5ID0gdm1hLT5leGVjX2VudHJ5Owo+IEBAIC04ODUsMzMgKzg3OCwyNiBAQCBlYl92bWFf bWlzcGxhY2VkKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgCXJldHVybiBmYWxzZTsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgaW50Cj4gLWk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVzZXJ2ZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gLQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICp2bWFz LAo+IC0JCQkgICAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAtCQkJICAgIGJvb2wg Km5lZWRfcmVsb2NzKQo+ICtzdGF0aWMgaW50IGViX3Jlc2VydmUoc3RydWN0IGk5MTVfZXhlY2J1 ZmZlciAqZWIpCj4gICB7Cj4gKwljb25zdCBib29sIGhhc19mZW5jZWRfZ3B1X2FjY2VzcyA9IElO VEVMX0dFTihlYi0+aTkxNSkgPCA0Owo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv Ymo7Cj4gICAJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gLQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bTsKPiAgIAlzdHJ1Y3QgbGlzdF9oZWFkIG9yZGVyZWRfdm1hczsKPiAgIAlzdHJ1Y3Qg bGlzdF9oZWFkIHBpbm5lZF92bWFzOwo+IC0JYm9vbCBoYXNfZmVuY2VkX2dwdV9hY2Nlc3MgPSBJ TlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDQ7Cj4gICAJaW50IHJldHJ5Owo+ICAgCj4gLQl2bSA9 IGxpc3RfZmlyc3RfZW50cnkodm1hcywgc3RydWN0IGk5MTVfdm1hLCBleGVjX2xpc3QpLT52bTsK PiAtCj4gICAJSU5JVF9MSVNUX0hFQUQoJm9yZGVyZWRfdm1hcyk7Cj4gICAJSU5JVF9MSVNUX0hF QUQoJnBpbm5lZF92bWFzKTsKPiAtCXdoaWxlICghbGlzdF9lbXB0eSh2bWFzKSkgewo+ICsJd2hp bGUgKCFsaXN0X2VtcHR5KCZlYi0+dm1hcykpIHsKPiAgIAkJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjX29iamVjdDIgKmVudHJ5Owo+ICAgCQlib29sIG5lZWRfZmVuY2UsIG5lZWRfbWFwcGFibGU7 Cj4gICAKPiAtCQl2bWEgPSBsaXN0X2ZpcnN0X2VudHJ5KHZtYXMsIHN0cnVjdCBpOTE1X3ZtYSwg ZXhlY19saXN0KTsKPiArCQl2bWEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZlYi0+dm1hcywgc3RydWN0 IGk5MTVfdm1hLCBleGVjX2xpc3QpOwo+ICAgCQlvYmogPSB2bWEtPm9iajsKPiAgIAkJZW50cnkg PSB2bWEtPmV4ZWNfZW50cnk7Cj4gICAKPiAtCQlpZiAoY3R4LT5mbGFncyAmIENPTlRFWFRfTk9f WkVST01BUCkKPiArCQlpZiAoZWItPmN0eC0+ZmxhZ3MgJiBDT05URVhUX05PX1pFUk9NQVApCj4g ICAJCQllbnRyeS0+ZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9ORUVEU19CSUFTOwo+ICAgCj4gICAJ CWlmICghaGFzX2ZlbmNlZF9ncHVfYWNjZXNzKQo+IEBAIC05MzIsOCArOTE4LDggQEAgaTkxNV9n ZW1fZXhlY2J1ZmZlcl9yZXNlcnZlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAg IAkJb2JqLT5iYXNlLnBlbmRpbmdfcmVhZF9kb21haW5zID0gSTkxNV9HRU1fR1BVX0RPTUFJTlMg JiB+STkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7Cj4gICAJCW9iai0+YmFzZS5wZW5kaW5nX3dyaXRl X2RvbWFpbiA9IDA7Cj4gICAJfQo+IC0JbGlzdF9zcGxpY2UoJm9yZGVyZWRfdm1hcywgdm1hcyk7 Cj4gLQlsaXN0X3NwbGljZSgmcGlubmVkX3ZtYXMsIHZtYXMpOwo+ICsJbGlzdF9zcGxpY2UoJm9y ZGVyZWRfdm1hcywgJmViLT52bWFzKTsKPiArCWxpc3Rfc3BsaWNlKCZwaW5uZWRfdm1hcywgJmVi LT52bWFzKTsKPiAgIAo+ICAgCS8qIEF0dGVtcHQgdG8gcGluIGFsbCBvZiB0aGUgYnVmZmVycyBp bnRvIHRoZSBHVFQuCj4gICAJICogVGhpcyBpcyBkb25lIGluIDMgcGhhc2VzOgo+IEBAIC05NTIs MjcgKzkzOCwyNCBAQCBpOTE1X2dlbV9leGVjYnVmZmVyX3Jlc2VydmUoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAo+ICAgCQlpbnQgcmV0ID0gMDsKPiAgIAo+ICAgCQkvKiBVbmJpbmQg YW55IGlsbC1maXR0aW5nIG9iamVjdHMgb3IgcGluLiAqLwo+IC0JCWxpc3RfZm9yX2VhY2hfZW50 cnkodm1hLCB2bWFzLCBleGVjX2xpc3QpIHsKPiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwg JmViLT52bWFzLCBleGVjX2xpc3QpIHsKPiAgIAkJCWlmICghZHJtX21tX25vZGVfYWxsb2NhdGVk KCZ2bWEtPm5vZGUpKQo+ICAgCQkJCWNvbnRpbnVlOwo+ICAgCj4gICAJCQlpZiAoZWJfdm1hX21p c3BsYWNlZCh2bWEpKQo+ICAgCQkJCXJldCA9IGk5MTVfdm1hX3VuYmluZCh2bWEpOwo+ICAgCQkJ ZWxzZQo+IC0JCQkJcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZXNlcnZlX3ZtYSh2bWEsCj4g LQkJCQkJCQkJICAgICAgZW5naW5lLAo+IC0JCQkJCQkJCSAgICAgIG5lZWRfcmVsb2NzKTsKPiAr CQkJCXJldCA9IGViX3Jlc2VydmVfdm1hKHZtYSwgZWItPmVuZ2luZSwgJmViLT5uZWVkX3JlbG9j cyk7Cj4gICAJCQlpZiAocmV0KQo+ICAgCQkJCWdvdG8gZXJyOwo+ICAgCQl9Cj4gICAKPiAgIAkJ LyogQmluZCBmcmVzaCBvYmplY3RzICovCj4gLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsIHZt YXMsIGV4ZWNfbGlzdCkgewo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmZWItPnZtYXMs IGV4ZWNfbGlzdCkgewo+ICAgCQkJaWYgKGRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2Rl KSkKPiAgIAkJCQljb250aW51ZTsKPiAgIAo+IC0JCQlyZXQgPSBpOTE1X2dlbV9leGVjYnVmZmVy X3Jlc2VydmVfdm1hKHZtYSwgZW5naW5lLAo+IC0JCQkJCQkJICAgICAgbmVlZF9yZWxvY3MpOwo+ ICsJCQlyZXQgPSBlYl9yZXNlcnZlX3ZtYSh2bWEsIGViLT5lbmdpbmUsICZlYi0+bmVlZF9yZWxv Y3MpOwo+ICAgCQkJaWYgKHJldCkKPiAgIAkJCQlnb3RvIGVycjsKPiAgIAkJfQo+IEBAIC05ODIs NDYgKzk2NSwzNyBAQCBlcnI6Cj4gICAJCQlyZXR1cm4gcmV0Owo+ICAgCj4gICAJCS8qIERlY3Jl bWVudCBwaW4gY291bnQgZm9yIGJvdW5kIG9iamVjdHMgKi8KPiAtCQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHZtYSwgdm1hcywgZXhlY19saXN0KQo+IC0JCQlpOTE1X2dlbV9leGVjYnVmZmVyX3VucmVz ZXJ2ZV92bWEodm1hKTsKPiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmViLT52bWFzLCBl eGVjX2xpc3QpCj4gKwkJCWViX3VucmVzZXJ2ZV92bWEodm1hKTsKPiAgIAo+IC0JCXJldCA9IGk5 MTVfZ2VtX2V2aWN0X3ZtKHZtLCB0cnVlKTsKPiArCQlyZXQgPSBpOTE1X2dlbV9ldmljdF92bShl Yi0+dm0sIHRydWUpOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJcmV0dXJuIHJldDsKPiAgIAl9IHdo aWxlICgxKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGludAo+IC1pOTE1X2dlbV9leGVjYnVmZmVy X3JlbG9jYXRlX3Nsb3coc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAtCQkJCSAgc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJncywKPiAtCQkJCSAgc3RydWN0IGRybV9maWxlICpm aWxlLAo+IC0JCQkJICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gLQkJCQkgIHN0 cnVjdCBlYl92bWFzICplYiwKPiAtCQkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVj dDIgKmV4ZWMsCj4gLQkJCQkgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gK2ViX3Jl bG9jYXRlX3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCj4gICB7Cj4gKwljb25zdCB1 bnNpZ25lZCBpbnQgY291bnQgPSBlYi0+YXJncy0+YnVmZmVyX2NvdW50Owo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9ICZlYi0+aTkxNS0+ZHJtOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVsb2NhdGlvbl9lbnRyeSAqcmVsb2M7Cj4gLQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bTsKPiAgIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAtCWJvb2wgbmVlZF9yZWxvY3M7Cj4gICAJ aW50ICpyZWxvY19vZmZzZXQ7Cj4gICAJaW50IGksIHRvdGFsLCByZXQ7Cj4gLQl1bnNpZ25lZCBj b3VudCA9IGFyZ3MtPmJ1ZmZlcl9jb3VudDsKPiAtCj4gLQl2bSA9IGxpc3RfZmlyc3RfZW50cnko JmViLT52bWFzLCBzdHJ1Y3QgaTkxNV92bWEsIGV4ZWNfbGlzdCktPnZtOwo+ICAgCj4gICAJLyog V2UgbWF5IHByb2Nlc3MgYW5vdGhlciBleGVjYnVmZmVyIGR1cmluZyB0aGUgdW5sb2NrLi4uICov Cj4gICAJd2hpbGUgKCFsaXN0X2VtcHR5KCZlYi0+dm1hcykpIHsKPiAgIAkJdm1hID0gbGlzdF9m aXJzdF9lbnRyeSgmZWItPnZtYXMsIHN0cnVjdCBpOTE1X3ZtYSwgZXhlY19saXN0KTsKPiAgIAkJ bGlzdF9kZWxfaW5pdCgmdm1hLT5leGVjX2xpc3QpOwo+IC0JCWk5MTVfZ2VtX2V4ZWNidWZmZXJf dW5yZXNlcnZlX3ZtYSh2bWEpOwo+ICsJCWViX3VucmVzZXJ2ZV92bWEodm1hKTsKPiAgIAl9Cj4g ICAKPiAgIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgIAo+ICAgCXRvdGFs ID0gMDsKPiAgIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKPiAtCQl0b3RhbCArPSBleGVj W2ldLnJlbG9jYXRpb25fY291bnQ7Cj4gKwkJdG90YWwgKz0gZWItPmV4ZWNbaV0ucmVsb2NhdGlv bl9jb3VudDsKPiAgIAo+ICAgCXJlbG9jX29mZnNldCA9IGRybV9tYWxsb2NfYWIoY291bnQsIHNp emVvZigqcmVsb2Nfb2Zmc2V0KSk7Cj4gICAJcmVsb2MgPSBkcm1fbWFsbG9jX2FiKHRvdGFsLCBz aXplb2YoKnJlbG9jKSk7Cj4gQEAgLTEwMzgsMTAgKzEwMTIsMTAgQEAgaTkxNV9nZW1fZXhlY2J1 ZmZlcl9yZWxvY2F0ZV9zbG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCXU2NCBpbnZh bGlkX29mZnNldCA9ICh1NjQpLTE7Cj4gICAJCWludCBqOwo+ICAgCj4gLQkJdXNlcl9yZWxvY3Mg PSB1NjRfdG9fdXNlcl9wdHIoZXhlY1tpXS5yZWxvY3NfcHRyKTsKPiArCQl1c2VyX3JlbG9jcyA9 IHU2NF90b191c2VyX3B0cihlYi0+ZXhlY1tpXS5yZWxvY3NfcHRyKTsKPiAgIAo+ICAgCQlpZiAo Y29weV9mcm9tX3VzZXIocmVsb2MrdG90YWwsIHVzZXJfcmVsb2NzLAo+IC0JCQkJICAgZXhlY1tp XS5yZWxvY2F0aW9uX2NvdW50ICogc2l6ZW9mKCpyZWxvYykpKSB7Cj4gKwkJCQkgICBlYi0+ZXhl Y1tpXS5yZWxvY2F0aW9uX2NvdW50ICogc2l6ZW9mKCpyZWxvYykpKSB7Cj4gICAJCQlyZXQgPSAt RUZBVUxUOwo+ICAgCQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCQkJZ290 byBlcnI7Cj4gQEAgLTEwNTYsNyArMTAzMCw3IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2Nh dGVfc2xvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCQkgKiBoYXBwZW5lZCB3ZSB3b3Vs ZCBtYWtlIHRoZSBtaXN0YWtlIG9mIGFzc3VtaW5nIHRoYXQgdGhlCj4gICAJCSAqIHJlbG9jYXRp b25zIHdlcmUgdmFsaWQuCj4gICAJCSAqLwo+IC0JCWZvciAoaiA9IDA7IGogPCBleGVjW2ldLnJl bG9jYXRpb25fY291bnQ7IGorKykgewo+ICsJCWZvciAoaiA9IDA7IGogPCBlYi0+ZXhlY1tpXS5y ZWxvY2F0aW9uX2NvdW50OyBqKyspIHsKPiAgIAkJCWlmIChfX2NvcHlfdG9fdXNlcigmdXNlcl9y ZWxvY3Nbal0ucHJlc3VtZWRfb2Zmc2V0LAo+ICAgCQkJCQkgICAmaW52YWxpZF9vZmZzZXQsCj4g ICAJCQkJCSAgIHNpemVvZihpbnZhbGlkX29mZnNldCkpKSB7Cj4gQEAgLTEwNjcsNyArMTA0MSw3 IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfc2xvdyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+ICAgCQl9Cj4gICAKPiAgIAkJcmVsb2Nfb2Zmc2V0W2ldID0gdG90YWw7Cj4gLQkJdG90 YWwgKz0gZXhlY1tpXS5yZWxvY2F0aW9uX2NvdW50Owo+ICsJCXRvdGFsICs9IGViLT5leGVjW2ld LnJlbG9jYXRpb25fY291bnQ7Cj4gICAJfQo+ICAgCj4gICAJcmV0ID0gaTkxNV9tdXRleF9sb2Nr X2ludGVycnVwdGlibGUoZGV2KTsKPiBAQCAtMTA3OCwyMCArMTA1MiwxOCBAQCBpOTE1X2dlbV9l eGVjYnVmZmVyX3JlbG9jYXRlX3Nsb3coc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAo+ICAg CS8qIHJlYWNxdWlyZSB0aGUgb2JqZWN0cyAqLwo+ICAgCWViX3Jlc2V0KGViKTsKPiAtCXJldCA9 IGViX2xvb2t1cF92bWFzKGViLCBleGVjLCBhcmdzLCB2bSwgZmlsZSk7Cj4gKwlyZXQgPSBlYl9s b29rdXBfdm1hcyhlYik7Cj4gICAJaWYgKHJldCkKPiAgIAkJZ290byBlcnI7Cj4gICAKPiAtCW5l ZWRfcmVsb2NzID0gKGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX05PX1JFTE9DKSA9PSAwOwo+IC0J cmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZXNlcnZlKGVuZ2luZSwgJmViLT52bWFzLCBjdHgs Cj4gLQkJCQkJICAmbmVlZF9yZWxvY3MpOwo+ICsJcmV0ID0gZWJfcmVzZXJ2ZShlYik7Cj4gICAJ aWYgKHJldCkKPiAgIAkJZ290byBlcnI7Cj4gICAKPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZt YSwgJmViLT52bWFzLCBleGVjX2xpc3QpIHsKPiAtCQlpbnQgb2Zmc2V0ID0gdm1hLT5leGVjX2Vu dHJ5IC0gZXhlYzsKPiAtCQlyZXQgPSBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX3ZtYV9z bG93KHZtYSwgZWIsCj4gLQkJCQkJCQkgICAgcmVsb2MgKyByZWxvY19vZmZzZXRbb2Zmc2V0XSk7 Cj4gKwkJaW50IGlkeCA9IHZtYS0+ZXhlY19lbnRyeSAtIGViLT5leGVjOwo+ICsKPiArCQlyZXQg PSBlYl9yZWxvY2F0ZV92bWFfc2xvdyh2bWEsIGViLCByZWxvYyArIHJlbG9jX29mZnNldFtpZHhd KTsKPiAgIAkJaWYgKHJldCkKPiAgIAkJCWdvdG8gZXJyOwo+ICAgCX0KPiBAQCAtMTEwOCwyOSAr MTA4MCwyOCBAQCBlcnI6Cj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdW5z aWduZWQgaW50IGViX290aGVyX2VuZ2luZXMoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpy ZXEpCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZWJfb3RoZXJfZW5naW5lcyhzdHJ1Y3QgaTkxNV9l eGVjYnVmZmVyICplYikKPiAgIHsKPiAgIAl1bnNpZ25lZCBpbnQgbWFzazsKPiAgIAo+IC0JbWFz ayA9IH5pbnRlbF9lbmdpbmVfZmxhZyhyZXEtPmVuZ2luZSkgJiBJOTE1X0JPX0FDVElWRV9NQVNL Owo+ICsJbWFzayA9IH5pbnRlbF9lbmdpbmVfZmxhZyhlYi0+ZW5naW5lKSAmIEk5MTVfQk9fQUNU SVZFX01BU0s7Cj4gICAJbWFzayA8PD0gSTkxNV9CT19BQ1RJVkVfU0hJRlQ7Cj4gICAKPiAgIAly ZXR1cm4gbWFzazsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGludAo+IC1pOTE1X2dlbV9leGVjYnVm ZmVyX21vdmVfdG9fZ3B1KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+IC0JCQkJ c3RydWN0IGxpc3RfaGVhZCAqdm1hcykKPiArZWJfbW92ZV90b19ncHUoc3RydWN0IGk5MTVfZXhl Y2J1ZmZlciAqZWIpCj4gICB7Cj4gLQljb25zdCB1bnNpZ25lZCBpbnQgb3RoZXJfcmluZ3MgPSBl Yl9vdGhlcl9lbmdpbmVzKHJlcSk7Cj4gKwljb25zdCB1bnNpZ25lZCBpbnQgb3RoZXJfcmluZ3Mg PSBlYl9vdGhlcl9lbmdpbmVzKGViKTsKPiAgIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgIAlp bnQgcmV0Owo+ICAgCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgdm1hcywgZXhlY19saXN0 KSB7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmViLT52bWFzLCBleGVjX2xpc3QpIHsK PiAgIAkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+b2JqOwo+ICAgCj4g ICAJCWlmIChvYmotPmZsYWdzICYgb3RoZXJfcmluZ3MpIHsKPiAtCQkJcmV0ID0gaTkxNV9nZW1f b2JqZWN0X3N5bmMob2JqLCByZXEpOwo+ICsJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc3luYyhv YmosIGViLT5yZXF1ZXN0KTsKPiAgIAkJCWlmIChyZXQpCj4gICAJCQkJcmV0dXJuIHJldDsKPiAg IAkJfQo+IEBAIC0xMTQwLDEwICsxMTExLDEwIEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfbW92ZV90 b19ncHUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gICAJfQo+ICAgCj4gICAJ LyogVW5jb25kaXRpb25hbGx5IGZsdXNoIGFueSBjaGlwc2V0IGNhY2hlcyAoZm9yIHN0cmVhbWlu ZyB3cml0ZXMpLiAqLwo+IC0JaTkxNV9nZW1fY2hpcHNldF9mbHVzaChyZXEtPmVuZ2luZS0+aTkx NSk7Cj4gKwlpOTE1X2dlbV9jaGlwc2V0X2ZsdXNoKGViLT5pOTE1KTsKPiAgIAo+ICAgCS8qIFVu Y29uZGl0aW9uYWxseSBpbnZhbGlkYXRlIEdQVSBjYWNoZXMgYW5kIFRMQnMuICovCj4gLQlyZXR1 cm4gcmVxLT5lbmdpbmUtPmVtaXRfZmx1c2gocmVxLCBFTUlUX0lOVkFMSURBVEUpOwo+ICsJcmV0 dXJuIGViLT5lbmdpbmUtPmVtaXRfZmx1c2goZWItPnJlcXVlc3QsIEVNSVRfSU5WQUxJREFURSk7 Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBib29sCj4gQEAgLTEyNDYsMjQgKzEyMTcsMjUgQEAgdmFs aWRhdGVfZXhlY19saXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJcmV0dXJuIDA7Cj4g ICB9Cj4gICAKPiAtc3RhdGljIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICoKPiAtaTkxNV9nZW1f dmFsaWRhdGVfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUsCj4gLQkJCSAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBjb25zdCB1MzIg Y3R4X2lkKQo+ICtzdGF0aWMgaW50IGViX3NlbGVjdF9jb250ZXh0KHN0cnVjdCBpOTE1X2V4ZWNi dWZmZXIgKmViKQo+ICAgewo+ICAgCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4gLQlz dHJ1Y3QgaTkxNV9jdHhfaGFuZ19zdGF0cyAqaHM7Cj4gKwl1bnNpZ25lZCBpbnQgY3R4X2lkOwo+ ICAgCj4gLQljdHggPSBpOTE1X2dlbV9jb250ZXh0X2xvb2t1cChmaWxlLT5kcml2ZXJfcHJpdiwg Y3R4X2lkKTsKPiAtCWlmIChJU19FUlIoY3R4KSkKPiAtCQlyZXR1cm4gY3R4Owo+ICsJY3R4X2lk ID0gaTkxNV9leGVjYnVmZmVyMl9nZXRfY29udGV4dF9pZCgqZWItPmFyZ3MpOwo+ICsJY3R4ID0g aTkxNV9nZW1fY29udGV4dF9sb29rdXAoZWItPmZpbGUtPmRyaXZlcl9wcml2LCBjdHhfaWQpOwo+ ICsJaWYgKHVubGlrZWx5KElTX0VSUihjdHgpKSkKPiArCQlyZXR1cm4gUFRSX0VSUihjdHgpOwo+ ICAgCj4gLQlocyA9ICZjdHgtPmhhbmdfc3RhdHM7Cj4gLQlpZiAoaHMtPmJhbm5lZCkgewo+ICsJ aWYgKHVubGlrZWx5KGN0eC0+aGFuZ19zdGF0cy5iYW5uZWQpKSB7Cj4gICAJCURSTV9ERUJVRygi Q29udGV4dCAldSB0cmllZCB0byBzdWJtaXQgd2hpbGUgYmFubmVkXG4iLCBjdHhfaWQpOwo+IC0J CXJldHVybiBFUlJfUFRSKC1FSU8pOwo+ICsJCXJldHVybiAtRUlPOwo+ICAgCX0KPiAgIAo+IC0J cmV0dXJuIGN0eDsKPiArCWViLT5jdHggPSBpOTE1X2dlbV9jb250ZXh0X2dldChjdHgpOwo+ICsJ ZWItPnZtID0gY3R4LT5wcGd0dCA/ICZjdHgtPnBwZ3R0LT5iYXNlIDogJmViLT5pOTE1LT5nZ3R0 LmJhc2U7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIHZvaWQgaTkxNV92bWFfbW92 ZV90b19hY3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gQEAgLTEzMjUsMTIgKzEyOTcsMTEg QEAgc3RhdGljIHZvaWQgZWJfZXhwb3J0X2ZlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkCj4gLWk5MTVfZ2VtX2V4ZWNidWZmZXJf bW92ZV90b19hY3RpdmUoc3RydWN0IGxpc3RfaGVhZCAqdm1hcywKPiAtCQkJCSAgIHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICtlYl9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkx NV9leGVjYnVmZmVyICplYikKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgIAo+ IC0JbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsIHZtYXMsIGV4ZWNfbGlzdCkgewo+ICsJbGlzdF9m b3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1hcywgZXhlY19saXN0KSB7Cj4gICAJCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9iajsKPiAgIAkJdTMyIG9sZF9yZWFkID0g b2JqLT5iYXNlLnJlYWRfZG9tYWluczsKPiAgIAkJdTMyIG9sZF93cml0ZSA9IG9iai0+YmFzZS53 cml0ZV9kb21haW47Cj4gQEAgLTEzNDIsOCArMTMxMyw4IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJf bW92ZV90b19hY3RpdmUoc3RydWN0IGxpc3RfaGVhZCAqdm1hcywKPiAgIAkJCW9iai0+YmFzZS5w ZW5kaW5nX3JlYWRfZG9tYWlucyB8PSBvYmotPmJhc2UucmVhZF9kb21haW5zOwo+ICAgCQlvYmot PmJhc2UucmVhZF9kb21haW5zID0gb2JqLT5iYXNlLnBlbmRpbmdfcmVhZF9kb21haW5zOwo+ICAg Cj4gLQkJaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1hLCByZXEsIHZtYS0+ZXhlY19lbnRyeS0+ ZmxhZ3MpOwo+IC0JCWViX2V4cG9ydF9mZW5jZShvYmosIHJlcSwgdm1hLT5leGVjX2VudHJ5LT5m bGFncyk7Cj4gKwkJaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1hLCBlYi0+cmVxdWVzdCwgdm1h LT5leGVjX2VudHJ5LT5mbGFncyk7Cj4gKwkJZWJfZXhwb3J0X2ZlbmNlKG9iaiwgZWItPnJlcXVl c3QsIHZtYS0+ZXhlY19lbnRyeS0+ZmxhZ3MpOwo+ICAgCQl0cmFjZV9pOTE1X2dlbV9vYmplY3Rf Y2hhbmdlX2RvbWFpbihvYmosIG9sZF9yZWFkLCBvbGRfd3JpdGUpOwo+ICAgCX0KPiAgIH0KPiBA QCAtMTM3NCwyOSArMTM0NSwyMiBAQCBpOTE1X3Jlc2V0X2dlbjdfc29sX29mZnNldHMoc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAt c3RhdGljIHN0cnVjdCBpOTE1X3ZtYSAqCj4gLWk5MTVfZ2VtX2V4ZWNidWZmZXJfcGFyc2Uoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyICpzaGFkb3dfZXhlY19lbnRyeSwKPiAtCQkJICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqYmF0Y2hfb2JqLAo+IC0JCQkgIHN0cnVjdCBlYl92bWFzICplYiwKPiAtCQkJ ICB1MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0LAo+IC0JCQkgIHUzMiBiYXRjaF9sZW4sCj4gLQkJCSAg Ym9vbCBpc19tYXN0ZXIpCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKmViX3BhcnNlKHN0cnVj dCBpOTE1X2V4ZWNidWZmZXIgKmViLCBib29sIGlzX21hc3RlcikKPiAgIHsKPiAgIAlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqc2hhZG93X2JhdGNoX29iajsKPiAgIAlzdHJ1Y3QgaTkxNV92 bWEgKnZtYTsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gLQlzaGFkb3dfYmF0Y2hfb2JqID0gaTkxNV9n ZW1fYmF0Y2hfcG9vbF9nZXQoJmVuZ2luZS0+YmF0Y2hfcG9vbCwKPiAtCQkJCQkJICAgUEFHRV9B TElHTihiYXRjaF9sZW4pKTsKPiArCXNoYWRvd19iYXRjaF9vYmogPSBpOTE1X2dlbV9iYXRjaF9w b29sX2dldCgmZWItPmVuZ2luZS0+YmF0Y2hfcG9vbCwKPiArCQkJCQkJICAgUEFHRV9BTElHTihl Yi0+YXJncy0+YmF0Y2hfbGVuKSk7Cj4gICAJaWYgKElTX0VSUihzaGFkb3dfYmF0Y2hfb2JqKSkK PiAgIAkJcmV0dXJuIEVSUl9DQVNUKHNoYWRvd19iYXRjaF9vYmopOwo+ICAgCj4gLQlyZXQgPSBp bnRlbF9lbmdpbmVfY21kX3BhcnNlcihlbmdpbmUsCj4gLQkJCQkgICAgICBiYXRjaF9vYmosCj4g KwlyZXQgPSBpbnRlbF9lbmdpbmVfY21kX3BhcnNlcihlYi0+ZW5naW5lLAo+ICsJCQkJICAgICAg ZWItPmJhdGNoLT5vYmosCj4gICAJCQkJICAgICAgc2hhZG93X2JhdGNoX29iaiwKPiAtCQkJCSAg ICAgIGJhdGNoX3N0YXJ0X29mZnNldCwKPiAtCQkJCSAgICAgIGJhdGNoX2xlbiwKPiArCQkJCSAg ICAgIGViLT5hcmdzLT5iYXRjaF9zdGFydF9vZmZzZXQsCj4gKwkJCQkgICAgICBlYi0+YXJncy0+ YmF0Y2hfbGVuLAo+ICAgCQkJCSAgICAgIGlzX21hc3Rlcik7Cj4gICAJaWYgKHJldCkgewo+ICAg CQlpZiAocmV0ID09IC1FQUNDRVMpIC8qIHVuaGFuZGxlZCBjaGFpbmVkIGJhdGNoICovCj4gQEAg LTE0MTAsOSArMTM3NCw4IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcGFyc2Uoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCWlmIChJU19FUlIodm1hKSkKPiAgIAkJZ290byBvdXQ7 Cj4gICAKPiAtCW1lbXNldChzaGFkb3dfZXhlY19lbnRyeSwgMCwgc2l6ZW9mKCpzaGFkb3dfZXhl Y19lbnRyeSkpOwo+IC0KPiAtCXZtYS0+ZXhlY19lbnRyeSA9IHNoYWRvd19leGVjX2VudHJ5Owo+ ICsJdm1hLT5leGVjX2VudHJ5ID0KPiArCQltZW1zZXQoJmViLT5zaGFkb3dfZXhlY19lbnRyeSwg MCwgc2l6ZW9mKCp2bWEtPmV4ZWNfZW50cnkpKTsKSSB3b3VsZCBzYXkgbGVhdmUgdGhpcyBhcyB0 d28gbGluZXMuIE1lcmdpbmcgdGhlbSBkb2Vzbid0IGdhaW4geW91IAphbnl0aGluZyBidXQgZ2l2 ZXMgeW91IGFuIHVnbHkgbGluZSBicmVhayBtaWQgYXNzaWdubWVudC4KCj4gICAJdm1hLT5leGVj X2VudHJ5LT5mbGFncyA9IF9fRVhFQ19PQkpFQ1RfSEFTX1BJTjsKPiAgIAlsaXN0X2FkZF90YWls KCZ2bWEtPmV4ZWNfbGlzdCwgJmViLT52bWFzKTsKPiAgIAo+IEBAIC0xNDMwLDQ5ICsxMzkzLDQ1 IEBAIGFkZF90b19jbGllbnQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gICB9 Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiAtZXhlY2J1Zl9zdWJtaXQoc3RydWN0IGk5MTVfZXhlY2J1 ZmZlcl9wYXJhbXMgKnBhcmFtcywKPiAtCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNi dWZmZXIyICphcmdzLAo+IC0JICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnZtYXMpCj4gK2V4ZWNi dWZfc3VibWl0KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQo+ICAgewo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcGFyYW1zLT5yZXF1ZXN0LT5pOTE1Owo+IC0JdTY0 IGV4ZWNfc3RhcnQsIGV4ZWNfbGVuOwo+ICAgCWludCBpbnN0cF9tb2RlOwo+ICAgCXUzMiBpbnN0 cF9tYXNrOwo+ICAgCWludCByZXQ7Cj4gICAKPiAtCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJf bW92ZV90b19ncHUocGFyYW1zLT5yZXF1ZXN0LCB2bWFzKTsKPiArCXJldCA9IGViX21vdmVfdG9f Z3B1KGViKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyZXQgPSBp OTE1X3N3aXRjaF9jb250ZXh0KHBhcmFtcy0+cmVxdWVzdCk7Cj4gKwlyZXQgPSBpOTE1X3N3aXRj aF9jb250ZXh0KGViLT5yZXF1ZXN0KTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ ICAgCj4gLQlpbnN0cF9tb2RlID0gYXJncy0+ZmxhZ3MgJiBJOTE1X0VYRUNfQ09OU1RBTlRTX01B U0s7Cj4gKwlpbnN0cF9tb2RlID0gZWItPmFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX0NPTlNUQU5U U19NQVNLOwo+ICAgCWluc3RwX21hc2sgPSBJOTE1X0VYRUNfQ09OU1RBTlRTX01BU0s7Cj4gICAJ c3dpdGNoIChpbnN0cF9tb2RlKSB7Cj4gICAJY2FzZSBJOTE1X0VYRUNfQ09OU1RBTlRTX1JFTF9H RU5FUkFMOgo+ICAgCWNhc2UgSTkxNV9FWEVDX0NPTlNUQU5UU19BQlNPTFVURToKPiAgIAljYXNl IEk5MTVfRVhFQ19DT05TVEFOVFNfUkVMX1NVUkZBQ0U6Cj4gLQkJaWYgKGluc3RwX21vZGUgIT0g MCAmJiBwYXJhbXMtPmVuZ2luZS0+aWQgIT0gUkNTKSB7Cj4gKwkJaWYgKGluc3RwX21vZGUgIT0g MCAmJiBlYi0+ZW5naW5lLT5pZCAhPSBSQ1MpIHsKPiAgIAkJCURSTV9ERUJVRygibm9uLTAgcmVs IGNvbnN0YW50cyBtb2RlIG9uIG5vbi1SQ1NcbiIpOwo+ICAgCQkJcmV0dXJuIC1FSU5WQUw7Cj4g ICAJCX0KPiAgIAo+IC0JCWlmIChpbnN0cF9tb2RlICE9IGRldl9wcml2LT5yZWxhdGl2ZV9jb25z dGFudHNfbW9kZSkgewo+IC0JCQlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA8IDQpIHsK PiArCQlpZiAoaW5zdHBfbW9kZSAhPSBlYi0+aTkxNS0+cmVsYXRpdmVfY29uc3RhbnRzX21vZGUp IHsKPiArCQkJaWYgKElOVEVMX0lORk8oZWItPmk5MTUpLT5nZW4gPCA0KSB7Cj4gICAJCQkJRFJN X0RFQlVHKCJubyByZWwgY29uc3RhbnRzIG9uIHByZS1nZW40XG4iKTsKPiAgIAkJCQlyZXR1cm4g LUVJTlZBTDsKPiAgIAkJCX0KPiAgIAo+IC0JCQlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdl biA+IDUgJiYKPiArCQkJaWYgKElOVEVMX0lORk8oZWItPmk5MTUpLT5nZW4gPiA1ICYmCj4gICAJ CQkgICAgaW5zdHBfbW9kZSA9PSBJOTE1X0VYRUNfQ09OU1RBTlRTX1JFTF9TVVJGQUNFKSB7Cj4g ICAJCQkJRFJNX0RFQlVHKCJyZWwgc3VyZmFjZSBjb25zdGFudHMgbW9kZSBpbnZhbGlkIG9uIGdl bjUrXG4iKTsKPiAgIAkJCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAkJCX0KPiAgIAo+ICAgCQkJLyog VGhlIEhXIGNoYW5nZWQgdGhlIG1lYW5pbmcgb24gdGhpcyBiaXQgb24gZ2VuNiAqLwo+IC0JCQlp ZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA2KQo+ICsJCQlpZiAoSU5URUxfSU5GTyhl Yi0+aTkxNSktPmdlbiA+PSA2KQo+ICAgCQkJCWluc3RwX21hc2sgJj0gfkk5MTVfRVhFQ19DT05T VEFOVFNfUkVMX1NVUkZBQ0U7Cj4gICAJCX0KPiAgIAkJYnJlYWs7Cj4gQEAgLTE0ODEsMTEgKzE0 NDAsMTEgQEAgZXhlY2J1Zl9zdWJtaXQoc3RydWN0IGk5MTVfZXhlY2J1ZmZlcl9wYXJhbXMgKnBh cmFtcywKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ICAgCj4gLQlpZiAocGFyYW1zLT5l bmdpbmUtPmlkID09IFJDUyAmJgo+IC0JICAgIGluc3RwX21vZGUgIT0gZGV2X3ByaXYtPnJlbGF0 aXZlX2NvbnN0YW50c19tb2RlKSB7Cj4gLQkJc3RydWN0IGludGVsX3JpbmcgKnJpbmcgPSBwYXJh bXMtPnJlcXVlc3QtPnJpbmc7Cj4gKwlpZiAoZWItPmVuZ2luZS0+aWQgPT0gUkNTICYmCj4gKwkg ICAgaW5zdHBfbW9kZSAhPSBlYi0+aTkxNS0+cmVsYXRpdmVfY29uc3RhbnRzX21vZGUpIHsKPiAr CQlzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyA9IGViLT5yZXF1ZXN0LT5yaW5nOwo+ICAgCj4gLQkJ cmV0ID0gaW50ZWxfcmluZ19iZWdpbihwYXJhbXMtPnJlcXVlc3QsIDQpOwo+ICsJCXJldCA9IGlu dGVsX3JpbmdfYmVnaW4oZWItPnJlcXVlc3QsIDQpOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJcmV0 dXJuIHJldDsKPiAgIAo+IEBAIC0xNDk1LDMyICsxNDU0LDI3IEBAIGV4ZWNidWZfc3VibWl0KHN0 cnVjdCBpOTE1X2V4ZWNidWZmZXJfcGFyYW1zICpwYXJhbXMsCj4gICAJCWludGVsX3JpbmdfZW1p dChyaW5nLCBpbnN0cF9tYXNrIDw8IDE2IHwgaW5zdHBfbW9kZSk7Cj4gICAJCWludGVsX3Jpbmdf YWR2YW5jZShyaW5nKTsKPiAgIAo+IC0JCWRldl9wcml2LT5yZWxhdGl2ZV9jb25zdGFudHNfbW9k ZSA9IGluc3RwX21vZGU7Cj4gKwkJZWItPmk5MTUtPnJlbGF0aXZlX2NvbnN0YW50c19tb2RlID0g aW5zdHBfbW9kZTsKPiAgIAl9Cj4gICAKPiAtCWlmIChhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19H RU43X1NPTF9SRVNFVCkgewo+IC0JCXJldCA9IGk5MTVfcmVzZXRfZ2VuN19zb2xfb2Zmc2V0cyhw YXJhbXMtPnJlcXVlc3QpOwo+ICsJaWYgKGViLT5hcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19HRU43 X1NPTF9SRVNFVCkgewo+ICsJCXJldCA9IGk5MTVfcmVzZXRfZ2VuN19zb2xfb2Zmc2V0cyhlYi0+ cmVxdWVzdCk7Cj4gICAJCWlmIChyZXQpCj4gICAJCQlyZXR1cm4gcmV0Owo+ICAgCX0KPiAgIAo+ IC0JZXhlY19sZW4gICA9IGFyZ3MtPmJhdGNoX2xlbjsKPiAtCWV4ZWNfc3RhcnQgPSBwYXJhbXMt PmJhdGNoLT5ub2RlLnN0YXJ0ICsKPiAtCQkgICAgIHBhcmFtcy0+YXJnc19iYXRjaF9zdGFydF9v ZmZzZXQ7Cj4gLQo+IC0JaWYgKGV4ZWNfbGVuID09IDApCj4gLQkJZXhlY19sZW4gPSBwYXJhbXMt PmJhdGNoLT5zaXplIC0gcGFyYW1zLT5hcmdzX2JhdGNoX3N0YXJ0X29mZnNldDsKPiAtCj4gLQly ZXQgPSBwYXJhbXMtPmVuZ2luZS0+ZW1pdF9iYl9zdGFydChwYXJhbXMtPnJlcXVlc3QsCj4gLQkJ CQkJICAgIGV4ZWNfc3RhcnQsIGV4ZWNfbGVuLAo+IC0JCQkJCSAgICBwYXJhbXMtPmRpc3BhdGNo X2ZsYWdzKTsKPiArCXJldCA9IGViLT5lbmdpbmUtPmVtaXRfYmJfc3RhcnQoZWItPnJlcXVlc3Qs Cj4gKwkJCQkJZWItPmJhdGNoLT5ub2RlLnN0YXJ0ICsKPiArCQkJCQllYi0+YmF0Y2hfc3RhcnRf b2Zmc2V0LAo+ICsJCQkJCWViLT5hcmdzLT5iYXRjaF9sZW4sCj4gKwkJCQkJZWItPmRpc3BhdGNo X2ZsYWdzKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQl0cmFjZV9p OTE1X2dlbV9yaW5nX2Rpc3BhdGNoKHBhcmFtcy0+cmVxdWVzdCwgcGFyYW1zLT5kaXNwYXRjaF9m bGFncyk7Cj4gKwl0cmFjZV9pOTE1X2dlbV9yaW5nX2Rpc3BhdGNoKGViLT5yZXF1ZXN0LCBlYi0+ ZGlzcGF0Y2hfZmxhZ3MpOwo+ICAgCj4gLQlpOTE1X2dlbV9leGVjYnVmZmVyX21vdmVfdG9fYWN0 aXZlKHZtYXMsIHBhcmFtcy0+cmVxdWVzdCk7Cj4gLQlhZGRfdG9fY2xpZW50KHBhcmFtcy0+cmVx dWVzdCwgcGFyYW1zLT5maWxlKTsKPiArCWViX21vdmVfdG9fYWN0aXZlKGViKTsKPiArCWFkZF90 b19jbGllbnQoZWItPnJlcXVlc3QsIGViLT5maWxlKTsKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAg fQo+IEBAIC0xNjA2LDI0ICsxNTYwLDEzIEBAIGViX3NlbGVjdF9lbmdpbmUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50Cj4gLWk5MTVf Z2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAr aTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCQkgICAg ICAgc3RydWN0IGRybV9maWxlICpmaWxlLAo+ICAgCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dl bV9leGVjYnVmZmVyMiAqYXJncywKPiAgIAkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyICpleGVjKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShkZXYpOwo+IC0Jc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9ICZkZXZfcHJp di0+Z2d0dDsKPiAtCXN0cnVjdCBlYl92bWFzICplYjsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyIHNoYWRvd19leGVjX2VudHJ5Owo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lOwo+IC0Jc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPiAtCXN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtOwo+IC0Jc3RydWN0IGk5MTVfZXhlY2J1ZmZlcl9wYXJhbXMg cGFyYW1zX21hc3RlcjsgLyogWFhYOiB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIgKi8KPiAtCXN0cnVj dCBpOTE1X2V4ZWNidWZmZXJfcGFyYW1zICpwYXJhbXMgPSAmcGFyYW1zX21hc3RlcjsKPiAtCWNv bnN0IHUzMiBjdHhfaWQgPSBpOTE1X2V4ZWNidWZmZXIyX2dldF9jb250ZXh0X2lkKCphcmdzKTsK PiAtCXUzMiBkaXNwYXRjaF9mbGFnczsKPiArCXN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgZWI7Cj4g ICAJaW50IHJldDsKPiAtCWJvb2wgbmVlZF9yZWxvY3M7Cj4gICAKPiAgIAlpZiAoIWk5MTVfZ2Vt X2NoZWNrX2V4ZWNidWZmZXIoYXJncykpCj4gICAJCXJldHVybiAtRUlOVkFMOwo+IEBAIC0xNjMy LDM3ICsxNTc1LDM5IEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4g LQlkaXNwYXRjaF9mbGFncyA9IDA7Cj4gKwllYi5pOTE1ID0gdG9faTkxNShkZXYpOwo+ICsJZWIu ZmlsZSA9IGZpbGU7Cj4gKwllYi5hcmdzID0gYXJnczsKPiArCWViLmV4ZWMgPSBleGVjOwo+ICsJ ZWIubmVlZF9yZWxvY3MgPSAoYXJncy0+ZmxhZ3MgJiBJOTE1X0VYRUNfTk9fUkVMT0MpID09IDA7 Cj4gKwlyZWxvY19jYWNoZV9pbml0KCZlYi5yZWxvY19jYWNoZSwgZWIuaTkxNSk7Cj4gKwo+ICsJ ZWIuZGlzcGF0Y2hfZmxhZ3MgPSAwOwo+ICAgCWlmIChhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19T RUNVUkUpIHsKPiAgIAkJaWYgKCFkcm1faXNfY3VycmVudF9tYXN0ZXIoZmlsZSkgfHwgIWNhcGFi bGUoQ0FQX1NZU19BRE1JTikpCj4gICAJCSAgICByZXR1cm4gLUVQRVJNOwo+ICAgCj4gLQkJZGlz cGF0Y2hfZmxhZ3MgfD0gSTkxNV9ESVNQQVRDSF9TRUNVUkU7Cj4gKwkJZWIuZGlzcGF0Y2hfZmxh Z3MgfD0gSTkxNV9ESVNQQVRDSF9TRUNVUkU7Cj4gICAJfQo+ICAgCWlmIChhcmdzLT5mbGFncyAm IEk5MTVfRVhFQ19JU19QSU5ORUQpCj4gLQkJZGlzcGF0Y2hfZmxhZ3MgfD0gSTkxNV9ESVNQQVRD SF9QSU5ORUQ7Cj4gLQo+IC0JZW5naW5lID0gZWJfc2VsZWN0X2VuZ2luZShkZXZfcHJpdiwgZmls ZSwgYXJncyk7Cj4gLQlpZiAoIWVuZ2luZSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiArCQllYi5k aXNwYXRjaF9mbGFncyB8PSBJOTE1X0RJU1BBVENIX1BJTk5FRDsKPiAgIAo+IC0JaWYgKGFyZ3Mt PmJ1ZmZlcl9jb3VudCA8IDEpIHsKPiAtCQlEUk1fREVCVUcoImV4ZWNidWYgd2l0aCAlZCBidWZm ZXJzXG4iLCBhcmdzLT5idWZmZXJfY291bnQpOwo+ICsJZWIuZW5naW5lID0gZWJfc2VsZWN0X2Vu Z2luZShlYi5pOTE1LCBmaWxlLCBhcmdzKTsKPiArCWlmICghZWIuZW5naW5lKQo+ICAgCQlyZXR1 cm4gLUVJTlZBTDsKPiAtCX0KPiAgIAo+ICAgCWlmIChhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19S RVNPVVJDRV9TVFJFQU1FUikgewo+IC0JCWlmICghSEFTX1JFU09VUkNFX1NUUkVBTUVSKGRldikp IHsKPiArCQlpZiAoIUhBU19SRVNPVVJDRV9TVFJFQU1FUihlYi5pOTE1KSkgewo+ICAgCQkJRFJN X0RFQlVHKCJSUyBpcyBvbmx5IGFsbG93ZWQgZm9yIEhhc3dlbGwsIEdlbjggYW5kIGFib3ZlXG4i KTsKPiAgIAkJCXJldHVybiAtRUlOVkFMOwo+ICAgCQl9Cj4gLQkJaWYgKGVuZ2luZS0+aWQgIT0g UkNTKSB7Cj4gKwkJaWYgKGViLmVuZ2luZS0+aWQgIT0gUkNTKSB7Cj4gICAJCQlEUk1fREVCVUco IlJTIGlzIG5vdCBhdmFpbGFibGUgb24gJXNcbiIsCj4gLQkJCQkgZW5naW5lLT5uYW1lKTsKPiAr CQkJCSBlYi5lbmdpbmUtPm5hbWUpOwo+ICAgCQkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJCX0KPiAg IAo+IC0JCWRpc3BhdGNoX2ZsYWdzIHw9IEk5MTVfRElTUEFUQ0hfUlM7Cj4gKwkJZWIuZGlzcGF0 Y2hfZmxhZ3MgfD0gSTkxNV9ESVNQQVRDSF9SUzsKPiAgIAl9Cj4gICAKPiAgIAkvKiBUYWtlIGEg bG9jYWwgd2FrZXJlZiBmb3IgcHJlcGFyaW5nIHRvIGRpc3BhdGNoIHRoZSBleGVjYnVmIGFzCj4g QEAgLTE2NzEsNTkgKzE2MTYsNDQgQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgCSAqIHdha2VyZWYgdGhhdCB3ZSBob2xkIHVu dGlsIHRoZSBHUFUgaGFzIGJlZW4gaWRsZSBmb3IgYXQgbGVhc3QKPiAgIAkgKiAxMDBtcy4KPiAg IAkgKi8KPiAtCWludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiArCWludGVsX3J1bnRp bWVfcG1fZ2V0KGViLmk5MTUpOwo+ICAgCj4gICAJcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVy cnVwdGlibGUoZGV2KTsKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIHByZV9tdXRleF9lcnI7Cj4g ICAKPiAtCWN0eCA9IGk5MTVfZ2VtX3ZhbGlkYXRlX2NvbnRleHQoZGV2LCBmaWxlLCBlbmdpbmUs IGN0eF9pZCk7Cj4gLQlpZiAoSVNfRVJSKGN0eCkpIHsKPiArCXJldCA9IGViX3NlbGVjdF9jb250 ZXh0KCZlYik7Cj4gKwlpZiAocmV0KSB7Cj4gICAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwo+IC0JCXJldCA9IFBUUl9FUlIoY3R4KTsKPiAgIAkJZ290byBwcmVfbXV0ZXhfZXJy Owo+ICAgCX0KPiAgIAo+IC0JaTkxNV9nZW1fY29udGV4dF9nZXQoY3R4KTsKPiAtCj4gLQlpZiAo Y3R4LT5wcGd0dCkKPiAtCQl2bSA9ICZjdHgtPnBwZ3R0LT5iYXNlOwo+IC0JZWxzZQo+IC0JCXZt ID0gJmdndHQtPmJhc2U7Cj4gLQo+IC0JbWVtc2V0KCZwYXJhbXNfbWFzdGVyLCAweDAwLCBzaXpl b2YocGFyYW1zX21hc3RlcikpOwo+IC0KPiAtCWViID0gZWJfY3JlYXRlKGRldl9wcml2LCBhcmdz KTsKPiAtCWlmIChlYiA9PSBOVUxMKSB7Cj4gLQkJaTkxNV9nZW1fY29udGV4dF9wdXQoY3R4KTsK PiArCWlmIChlYl9jcmVhdGUoJmViKSkgewo+ICsJCWk5MTVfZ2VtX2NvbnRleHRfcHV0KGViLmN0 eCk7Cj4gICAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCQlyZXQgPSAt RU5PTUVNOwo+ICAgCQlnb3RvIHByZV9tdXRleF9lcnI7Cj4gICAJfQo+ICAgCj4gICAJLyogTG9v ayB1cCBvYmplY3QgaGFuZGxlcyAqLwo+IC0JcmV0ID0gZWJfbG9va3VwX3ZtYXMoZWIsIGV4ZWMs IGFyZ3MsIHZtLCBmaWxlKTsKPiArCXJldCA9IGViX2xvb2t1cF92bWFzKCZlYik7Cj4gICAJaWYg KHJldCkKPiAgIAkJZ290byBlcnI7Cj4gICAKPiAgIAkvKiB0YWtlIG5vdGUgb2YgdGhlIGJhdGNo IGJ1ZmZlciBiZWZvcmUgd2UgbWlnaHQgcmVvcmRlciB0aGUgbGlzdHMgKi8KPiAtCXBhcmFtcy0+ YmF0Y2ggPSBlYl9nZXRfYmF0Y2goZWIpOwo+ICsJZWIuYmF0Y2ggPSBlYl9nZXRfYmF0Y2goJmVi KTsKPiAgIAo+ICAgCS8qIE1vdmUgdGhlIG9iamVjdHMgZW4tbWFzc2UgaW50byB0aGUgR1RULCBl dmljdGluZyBpZiBuZWNlc3NhcnkuICovCj4gLQluZWVkX3JlbG9jcyA9IChhcmdzLT5mbGFncyAm IEk5MTVfRVhFQ19OT19SRUxPQykgPT0gMDsKPiAtCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJf cmVzZXJ2ZShlbmdpbmUsICZlYi0+dm1hcywgY3R4LAo+IC0JCQkJCSAgJm5lZWRfcmVsb2NzKTsK PiArCXJldCA9IGViX3Jlc2VydmUoJmViKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIGVycjsK PiAgIAo+ICAgCS8qIFRoZSBvYmplY3RzIGFyZSBpbiB0aGVpciBmaW5hbCBsb2NhdGlvbnMsIGFw cGx5IHRoZSByZWxvY2F0aW9ucy4gKi8KPiAtCWlmIChuZWVkX3JlbG9jcykKPiAtCQlyZXQgPSBp OTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlKGViKTsKPiArCWlmIChlYi5uZWVkX3JlbG9jcykK PiArCQlyZXQgPSBlYl9yZWxvY2F0ZSgmZWIpOwo+ICAgCWlmIChyZXQpIHsKPiAgIAkJaWYgKHJl dCA9PSAtRUZBVUxUKSB7Cj4gLQkJCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVf c2xvdyhkZXYsIGFyZ3MsIGZpbGUsCj4gLQkJCQkJCQkJZW5naW5lLAo+IC0JCQkJCQkJCWViLCBl eGVjLCBjdHgpOwo+ICsJCQlyZXQgPSBlYl9yZWxvY2F0ZV9zbG93KCZlYik7Cj4gICAJCQlCVUdf T04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiAgIAkJfQo+ICAgCQlp ZiAocmV0KQo+IEBAIC0xNzMxLDI4ICsxNjYxLDIzIEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAl9Cj4gICAKPiAgIAkvKiBT ZXQgdGhlIHBlbmRpbmcgcmVhZCBkb21haW5zIGZvciB0aGUgYmF0Y2ggYnVmZmVyIHRvIENPTU1B TkQgKi8KPiAtCWlmIChwYXJhbXMtPmJhdGNoLT5vYmotPmJhc2UucGVuZGluZ193cml0ZV9kb21h aW4pIHsKPiArCWlmIChlYi5iYXRjaC0+b2JqLT5iYXNlLnBlbmRpbmdfd3JpdGVfZG9tYWluKSB7 Cj4gICAJCURSTV9ERUJVRygiQXR0ZW1wdGluZyB0byB1c2Ugc2VsZi1tb2RpZnlpbmcgYmF0Y2gg YnVmZmVyXG4iKTsKPiAgIAkJcmV0ID0gLUVJTlZBTDsKPiAgIAkJZ290byBlcnI7Cj4gICAJfQo+ IC0JaWYgKGFyZ3MtPmJhdGNoX3N0YXJ0X29mZnNldCA+IHBhcmFtcy0+YmF0Y2gtPnNpemUgfHwK PiAtCSAgICBhcmdzLT5iYXRjaF9sZW4gPiBwYXJhbXMtPmJhdGNoLT5zaXplIC0gYXJncy0+YmF0 Y2hfc3RhcnRfb2Zmc2V0KSB7Cj4gKwlpZiAoYXJncy0+YmF0Y2hfc3RhcnRfb2Zmc2V0ID4gZWIu YmF0Y2gtPnNpemUgfHwKPiArCSAgICBhcmdzLT5iYXRjaF9sZW4gPiBlYi5iYXRjaC0+c2l6ZSAt IGFyZ3MtPmJhdGNoX3N0YXJ0X29mZnNldCkgewo+ICAgCQlEUk1fREVCVUcoIkF0dGVtcHRpbmcg dG8gdXNlIG91dC1vZi1ib3VuZHMgYmF0Y2hcbiIpOwo+ICAgCQlyZXQgPSAtRUlOVkFMOwo+ICAg CQlnb3RvIGVycjsKPiAgIAl9Cj4gICAKPiAtCXBhcmFtcy0+YXJnc19iYXRjaF9zdGFydF9vZmZz ZXQgPSBhcmdzLT5iYXRjaF9zdGFydF9vZmZzZXQ7Cj4gLQlpZiAoaW50ZWxfZW5naW5lX25lZWRz X2NtZF9wYXJzZXIoZW5naW5lKSAmJiBhcmdzLT5iYXRjaF9sZW4pIHsKPiArCWViLmJhdGNoX3N0 YXJ0X29mZnNldCA9IGFyZ3MtPmJhdGNoX3N0YXJ0X29mZnNldDsKPiArCWlmIChpbnRlbF9lbmdp bmVfbmVlZHNfY21kX3BhcnNlcihlYi5lbmdpbmUpICYmIGFyZ3MtPmJhdGNoX2xlbikgewo+ICAg CQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgIAo+IC0JCXZtYSA9IGk5MTVfZ2VtX2V4ZWNidWZm ZXJfcGFyc2UoZW5naW5lLCAmc2hhZG93X2V4ZWNfZW50cnksCj4gLQkJCQkJCXBhcmFtcy0+YmF0 Y2gtPm9iaiwKPiAtCQkJCQkJZWIsCj4gLQkJCQkJCWFyZ3MtPmJhdGNoX3N0YXJ0X29mZnNldCwK PiAtCQkJCQkJYXJncy0+YmF0Y2hfbGVuLAo+IC0JCQkJCQlkcm1faXNfY3VycmVudF9tYXN0ZXIo ZmlsZSkpOwo+ICsJCXZtYSA9IGViX3BhcnNlKCZlYiwgZHJtX2lzX2N1cnJlbnRfbWFzdGVyKGZp bGUpKTsKPiAgIAkJaWYgKElTX0VSUih2bWEpKSB7Cj4gICAJCQlyZXQgPSBQVFJfRVJSKHZtYSk7 Cj4gICAJCQlnb3RvIGVycjsKPiBAQCAtMTc2OCwxOSArMTY5MywyMSBAQCBpOTE1X2dlbV9kb19l eGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJCQkgKiBz cGVjaWZpY2FsbHkgZG9uJ3Qgd2FudCB0aGF0IHNldCBvbiBiYXRjaGVzIHRoZQo+ICAgCQkJICog Y29tbWFuZCBwYXJzZXIgaGFzIGFjY2VwdGVkLgo+ICAgCQkJICovCj4gLQkJCWRpc3BhdGNoX2Zs YWdzIHw9IEk5MTVfRElTUEFUQ0hfU0VDVVJFOwo+IC0JCQlwYXJhbXMtPmFyZ3NfYmF0Y2hfc3Rh cnRfb2Zmc2V0ID0gMDsKPiAtCQkJcGFyYW1zLT5iYXRjaCA9IHZtYTsKPiArCQkJZWIuZGlzcGF0 Y2hfZmxhZ3MgfD0gSTkxNV9ESVNQQVRDSF9TRUNVUkU7Cj4gKwkJCWViLmJhdGNoX3N0YXJ0X29m ZnNldCA9IDA7Cj4gKwkJCWViLmJhdGNoID0gdm1hOwo+ICAgCQl9Cj4gICAJfQo+ICAgCj4gLQlw YXJhbXMtPmJhdGNoLT5vYmotPmJhc2UucGVuZGluZ19yZWFkX2RvbWFpbnMgfD0gSTkxNV9HRU1f RE9NQUlOX0NPTU1BTkQ7Cj4gKwllYi5iYXRjaC0+b2JqLT5iYXNlLnBlbmRpbmdfcmVhZF9kb21h aW5zIHw9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOwo+ICsJaWYgKGFyZ3MtPmJhdGNoX2xlbiA9 PSAwKQo+ICsJCWFyZ3MtPmJhdGNoX2xlbiA9IGViLmJhdGNoLT5zaXplIC0gZWIuYmF0Y2hfc3Rh cnRfb2Zmc2V0Owo+ICAgCj4gICAJLyogc25iL2l2Yi92bHYgY29uZmxhdGUgdGhlICJiYXRjaCBp biBwcGd0dCIgYml0IHdpdGggdGhlICJub24tc2VjdXJlCj4gICAJICogYmF0Y2giIGJpdC4gSGVu Y2Ugd2UgbmVlZCB0byBwaW4gc2VjdXJlIGJhdGNoZXMgaW50byB0aGUgZ2xvYmFsIGd0dC4KPiAg IAkgKiBoc3cgc2hvdWxkIGhhdmUgdGhpcyBmaXhlZCwgYnV0IGJkdyBtdWNrcyBpdCB1cCBhZ2Fp bi4gKi8KPiAtCWlmIChkaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKSB7Cj4g LQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHBhcmFtcy0+YmF0Y2gtPm9iajsK PiArCWlmIChlYi5kaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKSB7Cj4gKwkJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGViLmJhdGNoLT5vYmo7Cj4gICAJCXN0 cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAgCj4gICAJCS8qCj4gQEAgLTE3OTksMTMgKzE3MjYsMTMg QEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAo+ICAgCQkJZ290byBlcnI7Cj4gICAJCX0KPiAgIAo+IC0JCXBhcmFtcy0+YmF0Y2ggPSB2 bWE7Cj4gKwkJZWIuYmF0Y2ggPSB2bWE7Cj4gICAJfQo+ICAgCj4gICAJLyogQWxsb2NhdGUgYSBy ZXF1ZXN0IGZvciB0aGlzIGJhdGNoIGJ1ZmZlciBuaWNlIGFuZCBlYXJseS4gKi8KPiAtCXBhcmFt cy0+cmVxdWVzdCA9IGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2MoZW5naW5lLCBjdHgpOwo+IC0JaWYg KElTX0VSUihwYXJhbXMtPnJlcXVlc3QpKSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihwYXJhbXMtPnJl cXVlc3QpOwo+ICsJZWIucmVxdWVzdCA9IGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2MoZWIuZW5naW5l LCBlYi5jdHgpOwo+ICsJaWYgKElTX0VSUihlYi5yZXF1ZXN0KSkgewo+ICsJCXJldCA9IFBUUl9F UlIoZWIucmVxdWVzdCk7Cj4gICAJCWdvdG8gZXJyX2JhdGNoX3VucGluOwo+ICAgCX0KPiAgIAo+ IEBAIC0xODE1LDIyICsxNzQyLDEwIEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAkgKiBpbmFjdGl2ZV9saXN0IGFuZCBsb3Nl IGl0cyBhY3RpdmUgcmVmZXJlbmNlLiBIZW5jZSB3ZSBkbyBub3QgbmVlZAo+ICAgCSAqIHRvIGV4 cGxpY2l0bHkgaG9sZCBhbm90aGVyIHJlZmVyZW5jZSBoZXJlLgo+ICAgCSAqLwo+IC0JcGFyYW1z LT5yZXF1ZXN0LT5iYXRjaCA9IHBhcmFtcy0+YmF0Y2g7Cj4gKwllYi5yZXF1ZXN0LT5iYXRjaCA9 IGViLmJhdGNoOwo+ICAgCj4gLQkvKgo+IC0JICogU2F2ZSBhc3NvcnRlZCBzdHVmZiBhd2F5IHRv IHBhc3MgdGhyb3VnaCB0byAqX3N1Ym1pc3Npb24oKS4KPiAtCSAqIE5COiBUaGlzIGRhdGEgc2hv dWxkIGJlICdwZXJzaXN0ZW50JyBhbmQgbm90IGxvY2FsIGFzIGl0IHdpbGwKPiAtCSAqIGtlcHQg YXJvdW5kIGJleW9uZCB0aGUgZHVyYXRpb24gb2YgdGhlIElPQ1RMIG9uY2UgdGhlIEdQVQo+IC0J ICogc2NoZWR1bGVyIGFycml2ZXMuCj4gLQkgKi8KPiAtCXBhcmFtcy0+ZGV2ICAgICAgICAgICAg ICAgICAgICAgPSBkZXY7Cj4gLQlwYXJhbXMtPmZpbGUgICAgICAgICAgICAgICAgICAgID0gZmls ZTsKPiAtCXBhcmFtcy0+ZW5naW5lICAgICAgICAgICAgICAgICAgICA9IGVuZ2luZTsKPiAtCXBh cmFtcy0+ZGlzcGF0Y2hfZmxhZ3MgICAgICAgICAgPSBkaXNwYXRjaF9mbGFnczsKPiAtCXBhcmFt cy0+Y3R4ICAgICAgICAgICAgICAgICAgICAgPSBjdHg7Cj4gLQo+IC0JcmV0ID0gZXhlY2J1Zl9z dWJtaXQocGFyYW1zLCBhcmdzLCAmZWItPnZtYXMpOwo+IC0JX19pOTE1X2FkZF9yZXF1ZXN0KHBh cmFtcy0+cmVxdWVzdCwgcmV0ID09IDApOwo+ICsJcmV0ID0gZXhlY2J1Zl9zdWJtaXQoJmViKTsK PiArCV9faTkxNV9hZGRfcmVxdWVzdChlYi5yZXF1ZXN0LCByZXQgPT0gMCk7Cj4gICAKPiAgIGVy cl9iYXRjaF91bnBpbjoKPiAgIAkvKgo+IEBAIC0xODM5LDE5ICsxNzU0LDE3IEBAIGVycl9iYXRj aF91bnBpbjoKPiAgIAkgKiBuZWVkcyB0byBiZSBhZGp1c3RlZCB0byBhbHNvIHRyYWNrIHRoZSBn Z3R0IGJhdGNoIHZtYSBwcm9wZXJseSBhcwo+ICAgCSAqIGFjdGl2ZS4KPiAgIAkgKi8KPiAtCWlm IChkaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKQo+IC0JCWk5MTVfdm1hX3Vu cGluKHBhcmFtcy0+YmF0Y2gpOwo+ICsJaWYgKGViLmRpc3BhdGNoX2ZsYWdzICYgSTkxNV9ESVNQ QVRDSF9TRUNVUkUpCj4gKwkJaTkxNV92bWFfdW5waW4oZWIuYmF0Y2gpOwo+ICAgZXJyOgo+ICAg CS8qIHRoZSByZXF1ZXN0IG93bnMgdGhlIHJlZiBub3cgKi8KVGhpcyBjb21tZW50IHJlZmVycyB0 byB0aGUgZHJvcHBpbmcgb2YgdGhlIGNvbnRleHQgcmVmZXJlbmNlIG9uIHRoZSBsaW5lIApiZWxv dy4gVGhhdCBsaW5lIGlzIG5vdyBpbnNpZGUgZWJfZGVzdHJveSgpIHNvIHRoZSBjb21tZW50IHNo b3VsZCBiZSAKbW92ZWQvdXBkYXRlZCBhcyB3ZWxsLiBPciBqdXN0IHJlbW92ZWQgZW50aXJlbHku Cgo+IC0JaTkxNV9nZW1fY29udGV4dF9wdXQoY3R4KTsKPiAtCWViX2Rlc3Ryb3koZWIpOwo+IC0K PiArCWViX2Rlc3Ryb3koJmViKTsKPiAgIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4 KTsKPiAgIAo+ICAgcHJlX211dGV4X2VycjoKPiAgIAkvKiBpbnRlbF9ncHVfYnVzeSBzaG91bGQg YWxzbyBnZXQgYSByZWYsIHNvIGl0IHdpbGwgZnJlZSB3aGVuIHRoZSBkZXZpY2UKPiAgIAkgKiBp cyByZWFsbHkgaWRsZS4gKi8KPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPiAr CWludGVsX3J1bnRpbWVfcG1fcHV0KGViLmk5MTUpOwo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4g ICAKPiBAQCAtMTkxOCw3ICsxODMxLDcgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgCWV4ZWMyLmZsYWdzID0gSTkxNV9FWEVDX1JF TkRFUjsKPiAgIAlpOTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKGV4ZWMyLCAwKTsKPiAg IAo+IC0JcmV0ID0gaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihkZXYsIGRhdGEsIGZpbGUsICZleGVj MiwgZXhlYzJfbGlzdCk7Cj4gKwlyZXQgPSBpOTE1X2dlbV9kb19leGVjYnVmZmVyKGRldiwgZmls ZSwgJmV4ZWMyLCBleGVjMl9saXN0KTsKPiAgIAlpZiAoIXJldCkgewo+ICAgCQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNfb2JqZWN0IF9fdXNlciAqdXNlcl9leGVjX2xpc3QgPQo+ICAgCQkJdTY0 X3RvX3VzZXJfcHRyKGFyZ3MtPmJ1ZmZlcnNfcHRyKTsKPiBAQCAtMTk4Miw3ICsxODk1LDcgQEAg aTkxNV9nZW1fZXhlY2J1ZmZlcjIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK PiAgIAkJcmV0dXJuIC1FRkFVTFQ7Cj4gICAJfQo+ICAgCj4gLQlyZXQgPSBpOTE1X2dlbV9kb19l eGVjYnVmZmVyKGRldiwgZGF0YSwgZmlsZSwgYXJncywgZXhlYzJfbGlzdCk7Cj4gKwlyZXQgPSBp OTE1X2dlbV9kb19leGVjYnVmZmVyKGRldiwgZmlsZSwgYXJncywgZXhlYzJfbGlzdCk7Cj4gICAJ aWYgKCFyZXQpIHsKPiAgIAkJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8g dGhlIHVzZXIncyBleGVjIGxpc3QuICovCj4gICAJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyIF9fdXNlciAqdXNlcl9leGVjX2xpc3QgPQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==