From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v4] drm/i915: Implement inter-engine read-read optimisations Date: Thu, 26 Mar 2015 17:43:33 +0000 Message-ID: <55144545.8080905@linux.intel.com> References: <1426586098-12124-1-git-send-email-chris@chris-wilson.co.uk> <1426755584-24895-1-git-send-email-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 ESMTP id B9A086EA7C for ; Thu, 26 Mar 2015 10:43:35 -0700 (PDT) In-Reply-To: <1426755584-24895-1-git-send-email-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: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: Lionel Landwerlin List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKT24gMDMvMTkvMjAxNSAwODo1OSBBTSwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+IEN1cnJl bnRseSwgd2Ugb25seSB0cmFjayB0aGUgbGFzdCByZXF1ZXN0IGdsb2JhbGx5IGFjcm9zcyBhbGwg ZW5naW5lcy4KPiBUaGlzIHByZXZlbnRzIHVzIGZyb20gaXNzdWluZyBjb25jdXJyZW50IHJlYWQg cmVxdWVzdHMgb24gZS5nLiB0aGUgUkNTCj4gYW5kIEJDUyBlbmdpbmVzIChvciBtb3JlIGxpa2Vs eSB0aGUgcmVuZGVyIGFuZCBtZWRpYSBlbmdpbmVzKS4gV2l0aG91dAo+IHNlbWFwaG9yZXMsIHdl IGluY3VyIGNvc3RseSBzdGFsbHMgYXMgd2Ugc3luY2hyb25pc2UgYmV0d2VlbiByaW5ncyAtCj4g Z3JlYXRseSBpbXBhY3RpbmcgdGhlIGN1cnJlbnQgcGVyZm9ybWFuY2Ugb2YgQnJvYWR3ZWxsIHZl cnN1cyBIYXN3ZWxsIGluCj4gY2VydGFpbiB3b3JrbG9hZHMgKGxpa2UgdmlkZW8gZGVjb2RlKS4g V2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mCj4gcmVmZXJlbmNlIGNvdW50ZWQgcmVxdWVzdHMsIGl0 IGlzIG11Y2ggZWFzaWVyIHRvIHRyYWNrIHRoZSBsYXN0IHJlcXVlc3QKPiBwZXIgcmluZywgYXMg d2VsbCBhcyB0aGUgbGFzdCBnbG9iYWwgd3JpdGUgcmVxdWVzdCBzbyB0aGF0IHdlIGNhbgo+IG9w dGltaXNlIGludGVyLWVuZ2luZSByZWFkIHJlYWQgcmVxdWVzdHMgKGFzIHdlbGwgYXMgYmV0dGVy IG9wdGltaXNlCj4gY2VydGFpbiBDUFUgd2FpdHMpLgoKVGhpcyBpcyBxdWl0ZSBjb21wbGV4IGFu ZCBiaWcgc28gb24gZmlyc3QgcGFzcyB0aGVyZSB3aWxsIGJlIGEgbG90IG9mIApxdWVzdGlvbnMg YmVsb3cuIEVzcGVjaWFsbHkgc2luY2UgY29tbWVudHMgYXJlIHNwYXJzZS4gQ2FsbCBpdCBhIGZp cnN0IApwYXNzIHJldmlldyBpZiB0aGF0J3MgT0sgd2l0aCB5b3UuCgo+IHYyOiBGaXggaW52ZXJ0 ZWQgcmVhZG9ubHkgY29uZGl0aW9uIGZvciBub25ibG9ja2luZyB3YWl0cy4KPiB2MzogSGFuZGxl IG5vbi1jb250aW5ndW91cyBlbmdpbmUgYXJyYXkgYWZ0ZXIgd2FpdHMKPiB2NDogUmViYXNlLCB0 aWR5LCByZXdyaXRlIHJpbmcgbGlzdCBkZWJ1Z2dpbmcKPgo+IEJlbmNobWFyazogaWd0L2dlbV9y ZWFkX3JlYWRfc3BlZWQKPiBoc3c6Z3QzZSAod2l0aCBzZW1hcGhvcmVzKToKPiBCZWZvcmU6IFRp bWUgdG8gcmVhZC1yZWFkIDEwMjRrOgkJMjc1Ljc5NMK1cwo+IEFmdGVyOiAgVGltZSB0byByZWFk LXJlYWQgMTAyNGs6CQkxMjMuMjYwwrVzCj4KPiBoc3c6Z3QzZSAody9vIHNlbWFwaG9yZXMpOgo+ IEJlZm9yZTogVGltZSB0byByZWFkLXJlYWQgMTAyNGs6CQkyMzAuNDMzwrVzCj4gQWZ0ZXI6ICBU aW1lIHRvIHJlYWQtcmVhZCAxMDI0azoJCTEyNC41OTPCtXMKPgo+IGJkdy11ICh3L28gc2VtYXBo b3Jlcyk6ICAgICAgICAgICAgIEJlZm9yZSAgICAgICAgICBBZnRlcgo+IFRpbWUgdG8gcmVhZC1y ZWFkIDF4MTogICAgICAgICAgICAyNi4yNzTCtXMgICAgICAgMTAuMzUwwrVzCj4gVGltZSB0byBy ZWFkLXJlYWQgMTI4eDEyODogICAgICAgIDQwLjA5N8K1cyAgICAgICAyMS4zNjbCtXMKPiBUaW1l IHRvIHJlYWQtcmVhZCAyNTZ4MjU2OiAgICAgICAgNzcuMDg3wrVzICAgICAgIDQyLjYwOMK1cwo+ IFRpbWUgdG8gcmVhZC1yZWFkIDUxMng1MTI6ICAgICAgIDI4MS45OTnCtXMgICAgICAxODEuMTU1 wrVzCj4gVGltZSB0byByZWFkLXJlYWQgMTAyNHgxMDI0OiAgICAxMTk2LjE0McK1cyAgICAgMTEx OC4yMjPCtXMKPiBUaW1lIHRvIHJlYWQtcmVhZCAyMDQ4eDIwNDg6ICAgIDU2MzkuMDcywrVzICAg ICA1MjI1LjgzN8K1cwo+IFRpbWUgdG8gcmVhZC1yZWFkIDQwOTZ4NDA5NjogICAyMjQwMS42NjLC tXMgICAgMjExMzcuMDY3wrVzCj4gVGltZSB0byByZWFkLXJlYWQgODE5Mng4MTkyOiAgIDg5NjE3 LjczNcK1cyAgICA4NTYzNy42ODHCtXMKPgo+IFRlc3RjYXNlOiBpZ3QvZ2VtX2NvbmN1cnJlbnRf YmxpdCAocmVhZC1yZWFkIGFuZCBmcmllbmRzKQo+IENjOiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlv bmVsLmcubGFuZHdlcmxpbkBsaW51eC5pbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMg V2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgfCAgMTYgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAxMSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYyAgICAgICAgIHwgNDI3ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgfCAgIDIgLQo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWcuYyAgIHwgMTAwICsrKy0tLS0tCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jICAgfCAgMTkgKy0KPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgICB8ICAgNCArLQo+ICAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHwgICAxICsKPiAgIDggZmlsZXMgY2hh bmdlZCwgMzIxIGluc2VydGlvbnMoKyksIDI1OSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZGVidWdmcy5jCj4gaW5kZXggN2VmNjI5NTQzOGU5Li41Y2VhOWE5YzFjYjkgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IEBAIC0xMjAsMTAgKzEyMCwxMyBA QCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmdldF9nbG9iYWxfZmxhZyhzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgc3RhdGljIHZvaWQKPiAgIGRlc2NyaWJlX29iaihzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICB7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG9iai0+YmFzZS5k ZXYpOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZzsKPiAgIAlzdHJ1Y3QgaTkxNV92 bWEgKnZtYTsKPiAgIAlpbnQgcGluX2NvdW50ID0gMDsKPiArCWludCBpOwo+Cj4gLQlzZXFfcHJp bnRmKG0sICIlcEs6ICVzJXMlcyVzICU4emRLaUIgJTAyeCAlMDJ4ICV4ICV4ICV4JXMlcyVzIiwK PiArCXNlcV9wcmludGYobSwgIiVwSzogJXMlcyVzJXMgJTh6ZEtpQiAlMDJ4ICUwMnggWyAiLAo+ ICAgCQkgICAmb2JqLT5iYXNlLAo+ICAgCQkgICBvYmotPmFjdGl2ZSA/ICIqIiA6ICIgIiwKPiAg IAkJICAgZ2V0X3Bpbl9mbGFnKG9iaiksCj4gQEAgLTEzMSw4ICsxMzQsMTEgQEAgZGVzY3JpYmVf b2JqKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK PiAgIAkJICAgZ2V0X2dsb2JhbF9mbGFnKG9iaiksCj4gICAJCSAgIG9iai0+YmFzZS5zaXplIC8g MTAyNCwKPiAgIAkJICAgb2JqLT5iYXNlLnJlYWRfZG9tYWlucywKPiAtCQkgICBvYmotPmJhc2Uu d3JpdGVfZG9tYWluLAo+IC0JCSAgIGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3NlcW5vKG9iai0+bGFz dF9yZWFkX3JlcSksCj4gKwkJICAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbik7Cj4gKwlmb3JfZWFj aF9yaW5nKHJpbmcsIGRldl9wcml2LCBpKQo+ICsJCXNlcV9wcmludGYobSwgIiV4ICIsCj4gKwkJ CQlpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmotPmxhc3RfcmVhZF9yZXFbaV0pKTsKPiAr CXNlcV9wcmludGYobSwgIl0gJXggJXglcyVzJXMiLAo+ICAgCQkgICBpOTE1X2dlbV9yZXF1ZXN0 X2dldF9zZXFubyhvYmotPmxhc3Rfd3JpdGVfcmVxKSwKPiAgIAkJICAgaTkxNV9nZW1fcmVxdWVz dF9nZXRfc2Vxbm8ob2JqLT5sYXN0X2ZlbmNlZF9yZXEpLAo+ICAgCQkgICBpOTE1X2NhY2hlX2xl dmVsX3N0cih0b19pOTE1KG9iai0+YmFzZS5kZXYpLCBvYmotPmNhY2hlX2xldmVsKSwKPiBAQCAt MTY5LDkgKzE3NSw5IEBAIGRlc2NyaWJlX29iaihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJCSp0ID0gJ1wwJzsKPiAgIAkJc2VxX3ByaW50 ZihtLCAiICglcyBtYXBwYWJsZSkiLCBzKTsKPiAgIAl9Cj4gLQlpZiAob2JqLT5sYXN0X3JlYWRf cmVxICE9IE5VTEwpCj4gKwlpZiAob2JqLT5sYXN0X3dyaXRlX3JlcSAhPSBOVUxMKQo+ICAgCQlz ZXFfcHJpbnRmKG0sICIgKCVzKSIsCj4gLQkJCSAgIGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmco b2JqLT5sYXN0X3JlYWRfcmVxKS0+bmFtZSk7Cj4gKwkJCSAgIGk5MTVfZ2VtX3JlcXVlc3RfZ2V0 X3Jpbmcob2JqLT5sYXN0X3dyaXRlX3JlcSktPm5hbWUpOwo+ICAgCWlmIChvYmotPmZyb250YnVm ZmVyX2JpdHMpCj4gICAJCXNlcV9wcmludGYobSwgIiAoZnJvbnRidWZmZXI6IDB4JTAzeCkiLCBv YmotPmZyb250YnVmZmVyX2JpdHMpOwo+ICAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGlu ZGV4IDgxOTUwM2U2YzNkNC4uNDQzNmMxY2EyNDdkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCj4gQEAgLTQ5OCw3ICs0OTgsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGUgewo+ ICAgCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9idWZmZXIgewo+ICAgCQl1MzIgc2l6ZTsKPiAgIAkJ dTMyIG5hbWU7Cj4gLQkJdTMyIHJzZXFubywgd3NlcW5vOwo+ICsJCXUzMiByc2Vxbm9bSTkxNV9O VU1fUklOR1NdLCB3c2Vxbm87Cj4gICAJCXUzMiBndHRfb2Zmc2V0Owo+ICAgCQl1MzIgcmVhZF9k b21haW5zOwo+ICAgCQl1MzIgd3JpdGVfZG9tYWluOwo+IEBAIC0xOTAzLDcgKzE5MDMsNyBAQCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7Cj4gICAJc3RydWN0IGRybV9tbV9ub2RlICpzdG9s ZW47Cj4gICAJc3RydWN0IGxpc3RfaGVhZCBnbG9iYWxfbGlzdDsKPgo+IC0Jc3RydWN0IGxpc3Rf aGVhZCByaW5nX2xpc3Q7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHJpbmdfbGlzdFtJOTE1X05VTV9S SU5HU107Cj4gICAJLyoqIFVzZWQgaW4gZXhlY2J1ZiB0byB0ZW1wb3JhcmlseSBob2xkIGEgcmVm ICovCj4gICAJc3RydWN0IGxpc3RfaGVhZCBvYmpfZXhlY19saW5rOwo+Cj4gQEAgLTE5MTQsNyAr MTkxNCw3IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0IHsKPiAgIAkgKiByZW5kZXJpbmcg YW5kIHNvIGEgbm9uLXplcm8gc2Vxbm8pLCBhbmQgaXMgbm90IHNldCBpZiBpdCBpIHMgb24KPiAg IAkgKiBpbmFjdGl2ZSAocmVhZHkgdG8gYmUgdW5ib3VuZCkgbGlzdC4KPiAgIAkgKi8KPiAtCXVu c2lnbmVkIGludCBhY3RpdmU6MTsKPiArCXVuc2lnbmVkIGludCBhY3RpdmU6STkxNV9NQVhfUklO R19CSVQ7Cj4KPiAgIAkvKioKPiAgIAkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0IGhhcyBi ZWVuIHdyaXR0ZW4gdG8gc2luY2UgbGFzdCBib3VuZAo+IEBAIC0xOTgyLDcgKzE5ODIsNyBAQCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7Cj4gICAJaW50IHZtYXBwaW5nX2NvdW50Owo+Cj4g ICAJLyoqIEJyZWFkY3J1bWIgb2YgbGFzdCByZW5kZXJpbmcgdG8gdGhlIGJ1ZmZlci4gKi8KPiAt CXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqbGFzdF9yZWFkX3JlcTsKPiArCXN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqbGFzdF9yZWFkX3JlcVtJOTE1X05VTV9SSU5HU107Cj4gICAJ c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpsYXN0X3dyaXRlX3JlcTsKPiAgIAkvKiogQnJl YWRjcnVtYiBvZiBsYXN0IGZlbmNlZCBHUFUgYWNjZXNzIHRvIHRoZSBidWZmZXIuICovCj4gICAJ c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpsYXN0X2ZlbmNlZF9yZXE7Cj4gQEAgLTIxMjAs MTAgKzIxMjAsMTEgQEAgaTkxNV9nZW1fcmVxdWVzdF9nZXRfcmluZyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSkKPiAgIAlyZXR1cm4gcmVxID8gcmVxLT5yaW5nIDogTlVMTDsKPiAg IH0KPgo+IC1zdGF0aWMgaW5saW5lIHZvaWQKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKgo+ICAgaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2Uoc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gICB7Cj4gICAJa3JlZl9nZXQoJnJlcS0+cmVmKTsK PiArCXJldHVybiByZXE7Cj4gICB9Cj4KPiAgIHN0YXRpYyBpbmxpbmUgdm9pZAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYwo+IGluZGV4IDNkNmQzY2VjNWEwNi4uYmNhNDMzYTI3OWY2IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTQwLDEyICs0MCwxMyBAQAo+Cj4gICBzdGF0aWMg dm9pZCBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3R0X3dyaXRlX2RvbWFpbihzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKTsKPiAgIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9mbHVz aF9jcHVfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwo+ICtz dGF0aWMgdm9pZAo+ICtpOTE1X2dlbV9vYmplY3RfcmV0aXJlX193cml0ZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKTsKPiArc3RhdGljIHZvaWQKPiAraTkxNV9nZW1fb2JqZWN0X3Jl dGlyZV9fcmVhZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBpbnQgcmluZyk7Cj4g ICBzdGF0aWMgX19tdXN0X2NoZWNrIGludAo+ICAgaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVy aW5nKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCQkgICAgICAgYm9vbCBy ZWFkb25seSk7Cj4gLXN0YXRpYyB2b2lkCj4gLWk5MTVfZ2VtX29iamVjdF9yZXRpcmUoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gLQo+ICAgc3RhdGljIHZvaWQgaTkxNV9nZW1f d3JpdGVfZmVuY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHJlZywKPiAgIAkJCQkgc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gICBzdGF0aWMgdm9pZCBpOTE1X2dlbV9v YmplY3RfdXBkYXRlX2ZlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gQEAg LTUxOCw4ICs1MTksNiBAQCBpbnQgaTkxNV9nZW1fb2JqX3ByZXBhcmVfc2htZW1fcmVhZChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rf d2FpdF9yZW5kZXJpbmcob2JqLCB0cnVlKTsKPiAgIAkJaWYgKHJldCkKPiAgIAkJCXJldHVybiBy ZXQ7Cj4gLQo+IC0JCWk5MTVfZ2VtX29iamVjdF9yZXRpcmUob2JqKTsKPiAgIAl9Cj4KPiAgIAly ZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7Cj4gQEAgLTkzOSw4ICs5MzgsNiBA QCBpOTE1X2dlbV9zaG1lbV9wd3JpdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJcmV0 ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaiwgZmFsc2UpOwo+ICAgCQlpZiAo cmV0KQo+ICAgCQkJcmV0dXJuIHJldDsKPiAtCj4gLQkJaTkxNV9nZW1fb2JqZWN0X3JldGlyZShv YmopOwo+ICAgCX0KPiAgIAkvKiBTYW1lIHRyaWNrIGFwcGxpZXMgdG8gaW52YWxpZGF0ZSBwYXJ0 aWFsbHkgd3JpdHRlbiBjYWNoZWxpbmVzIHJlYWQKPiAgIAkgKiBiZWZvcmUgd3JpdGluZy4gKi8K PiBAQCAtMTM3MiwyOSArMTM2OSw4IEBAIGk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxKQo+ICAgCQlyZXR1cm4gcmV0Owo+Cj4gICAJcmVzZXRfY291bnRl ciA9IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpOwo+IC0J aTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2UocmVxKTsKPiAtCXJldCA9IF9faTkxNV93YWl0X3Jl cXVlc3QocmVxLCByZXNldF9jb3VudGVyLAo+IC0JCQkJICBpbnRlcnJ1cHRpYmxlLCBOVUxMLCBO VUxMKTsKPiAtCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UocmVxKTsKPiAtCXJldHVybiBy ZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQKPiAtaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVy aW5nX190YWlsKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gLXsKPiAtCWlmICgh b2JqLT5hY3RpdmUpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JLyogTWFudWFsbHkgbWFuYWdlIHRo ZSB3cml0ZSBmbHVzaCBhcyB3ZSBtYXkgaGF2ZSBub3QgeWV0Cj4gLQkgKiByZXRpcmVkIHRoZSBi dWZmZXIuCj4gLQkgKgo+IC0JICogTm90ZSB0aGF0IHRoZSBsYXN0X3dyaXRlX3JlcSBpcyBhbHdh eXMgdGhlIGVhcmxpZXIgb2YKPiAtCSAqIHRoZSB0d28gKHJlYWQvd3JpdGUpIHJlcXVlc3RzLCBz byBpZiB3ZSBoYXZlZCBzdWNjZXNzZnVsbHkgd2FpdGVkLAo+IC0JICogd2Uga25vdyB3ZSBoYXZl IHBhc3NlZCB0aGUgbGFzdCB3cml0ZS4KPiAtCSAqLwo+IC0JaTkxNV9nZW1fcmVxdWVzdF9hc3Np Z24oJm9iai0+bGFzdF93cml0ZV9yZXEsIE5VTEwpOwo+IC0KPiAtCXJldHVybiAwOwo+ICsJcmV0 dXJuIF9faTkxNV93YWl0X3JlcXVlc3QocmVxLCByZXNldF9jb3VudGVyLAo+ICsJCQkJICAgaW50 ZXJydXB0aWJsZSwgTlVMTCwgTlVMTCk7Cj4gICB9CgpOZXQgY29kZSBjb21tZW50cyAtLysgZm9y IHRoaXMgcGF0Y2ggbmVlZHMgaW1wcm92ZW1lbnQuIDopIEFib3ZlIHlvdSAKZGVsZXRlZCBhIGNo dW5rIGJ1dCBiZWxvdyBhZGRlZCBub3RoaW5nLgoKSSB0aGluayBzb21ldGhpbmcgaGlnaCBsZXZl bCBpcyBuZWVkZWQgdG8gZXhwbGFpbiB0aGUgYWN0aXZlIGxpc3RzIGFuZCAKdHJhY2tpbmcgZXRj LgoKPiAgIC8qKgo+IEBAIC0xNDA1LDE4ICsxMzgxLDM5IEBAIHN0YXRpYyBfX211c3RfY2hlY2sg aW50Cj4gICBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiAgIAkJCSAgICAgICBib29sIHJlYWRvbmx5KQo+ICAgewo+IC0Jc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXE7Cj4gLQlpbnQgcmV0Owo+ICsJaW50IHJldCwg aTsKPgo+IC0JcmVxID0gcmVhZG9ubHkgPyBvYmotPmxhc3Rfd3JpdGVfcmVxIDogb2JqLT5sYXN0 X3JlYWRfcmVxOwo+IC0JaWYgKCFyZXEpCj4gKwlpZiAoIW9iai0+YWN0aXZlKQo+ICAgCQlyZXR1 cm4gMDsKPgo+IC0JcmV0ID0gaTkxNV93YWl0X3JlcXVlc3QocmVxKTsKPiAtCWlmIChyZXQpCj4g LQkJcmV0dXJuIHJldDsKPiArCWlmIChyZWFkb25seSkgewo+ICsJCWlmIChvYmotPmxhc3Rfd3Jp dGVfcmVxICE9IE5VTEwpIHsKPiArCQkJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3Qob2JqLT5sYXN0 X3dyaXRlX3JlcSk7Cj4gKwkJCWlmIChyZXQpCj4gKwkJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQkJ aSA9IG9iai0+bGFzdF93cml0ZV9yZXEtPnJpbmctPmlkOwo+ICsJCQlpZiAob2JqLT5sYXN0X3Jl YWRfcmVxW2ldID09IG9iai0+bGFzdF93cml0ZV9yZXEpCj4gKwkJCQlpOTE1X2dlbV9vYmplY3Rf cmV0aXJlX19yZWFkKG9iaiwgaSk7Cj4gKwkJCWVsc2UKPiArCQkJCWk5MTVfZ2VtX29iamVjdF9y ZXRpcmVfX3dyaXRlKG9iaik7CgpBYm92ZSBtZW50aW9uZWQgY29tbWVudHMgd291bGQgZXNwZWNp YWxseSBoZWxwIHVuZGVyc3RhbmQgdGhlIG9yZGVyaW5nIApydWxlcyBoZXJlLgoKPiArCQl9Cj4g Kwl9IGVsc2Ugewo+ICsJCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7Cj4g KwkJCWlmIChvYmotPmxhc3RfcmVhZF9yZXFbaV0gPT0gTlVMTCkKPiArCQkJCWNvbnRpbnVlOwo+ ICsKPiArCQkJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3Qob2JqLT5sYXN0X3JlYWRfcmVxW2ldKTsK PiArCQkJaWYgKHJldCkKPiArCQkJCXJldHVybiByZXQ7Cj4gKwo+ICsJCQlpOTE1X2dlbV9vYmpl Y3RfcmV0aXJlX19yZWFkKG9iaiwgaSk7Cj4gKwkJfQoKSSB0aGluayB3aXRoIG9wdGltaXN0aWMg c3Bpbm5pbmcgdGhpcyBjb3VsZCBlbmQgdXAgZG9pbmcgbnVtX3JpbmdzIHNwaW5zIApldGMgaW4g c2VxdWVuY2UuIFdvdWxkIGl0IGJlIHdvcnRoIHNtYXJ0aW5nIGl0IHVwIHNvbWVob3c/Cgo+ICsJ CUJVR19PTihvYmotPmFjdGl2ZSk7CgpCZXR0ZXIgV0FSTiBhbmQgaGFsdCB0aGUgZHJpdmVyIGlu ZGlyZWN0bHkgaWYgdW5hdm9pZGFibGUuCgo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+Cj4gLQly ZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nX190YWlsKG9iaik7Cj4gICB9Cj4K PiAgIC8qIEEgbm9uYmxvY2tpbmcgdmFyaWFudCBvZiB0aGUgYWJvdmUgd2FpdC4gVGhpcyBpcyBh IGhpZ2hseSBkYW5nZXJvdXMgcm91dGluZQo+IEBAIC0xNDI3LDM3ICsxNDI0LDcxIEBAIGk5MTVf Z2VtX29iamVjdF93YWl0X3JlbmRlcmluZ19fbm9uYmxvY2tpbmcoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiAgIAkJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUg KmZpbGVfcHJpdiwKPiAgIAkJCQkJICAgIGJvb2wgcmVhZG9ubHkpCj4gICB7Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcTsKPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g b2JqLT5iYXNlLmRldjsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0 c1tJOTE1X05VTV9SSU5HU107Cj4gICAJdW5zaWduZWQgcmVzZXRfY291bnRlcjsKPiAtCWludCBy ZXQ7Cj4gKwlpbnQgcmV0LCBpLCBuID0gMDsKPgo+ICAgCUJVR19PTighbXV0ZXhfaXNfbG9ja2Vk KCZkZXYtPnN0cnVjdF9tdXRleCkpOwo+ICAgCUJVR19PTighZGV2X3ByaXYtPm1tLmludGVycnVw dGlibGUpOwo+Cj4gLQlyZXEgPSByZWFkb25seSA/IG9iai0+bGFzdF93cml0ZV9yZXEgOiBvYmot Pmxhc3RfcmVhZF9yZXE7Cj4gLQlpZiAoIXJlcSkKPiArCWlmICghb2JqLT5hY3RpdmUpCj4gICAJ CXJldHVybiAwOwo+Cj4gICAJcmV0ID0gaTkxNV9nZW1fY2hlY2tfd2VkZ2UoJmRldl9wcml2LT5n cHVfZXJyb3IsIHRydWUpOwo+ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7Cj4KPiAtCXJl dCA9IGk5MTVfZ2VtX2NoZWNrX29scihyZXEpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0 Owo+IC0KPiAgIAlyZXNldF9jb3VudGVyID0gYXRvbWljX3JlYWQoJmRldl9wcml2LT5ncHVfZXJy b3IucmVzZXRfY291bnRlcik7Cj4gLQlpOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShyZXEpOwoK R29vZCBwbGFjZSBmb3IgYSBjb21tZW50OiBCdWlsZCBhbiBhcnJheSBvZiByZXF1ZXN0cyB0byBi ZSB3YWl0ZWQgdXBvbiBldGMuLgoKPiArCj4gKwlpZiAocmVhZG9ubHkpIHsKPiArCQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxOwo+ICsKPiArCQlycSA9IG9iai0+bGFzdF93cml0ZV9y ZXE7Cj4gKwkJaWYgKHJxID09IE5VTEwpCj4gKwkJCXJldHVybiAwOwo+ICsKPiArCQlyZXQgPSBp OTE1X2dlbV9jaGVja19vbHIocnEpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gZXJyOwo+ICsK PiArCQlyZXF1ZXN0c1tuKytdID0gaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2UocnEpOwo+ICsJ fSBlbHNlIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgewo+ICsJ CQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxOwo+ICsKPiArCQkJcnEgPSBvYmotPmxh c3RfcmVhZF9yZXFbaV07Cj4gKwkJCWlmIChycSA9PSBOVUxMKQo+ICsJCQkJY29udGludWU7Cj4g Kwo+ICsJCQlyZXQgPSBpOTE1X2dlbV9jaGVja19vbHIocnEpOwo+ICsJCQlpZiAocmV0KQo+ICsJ CQkJZ290byBlcnI7Cj4gKwo+ICsJCQlyZXF1ZXN0c1tuKytdID0gaTkxNV9nZW1fcmVxdWVzdF9y ZWZlcmVuY2UocnEpOwo+ICsJCX0KPiArCX0KCkkgd29uZGVyIGlmIG1lcmdpbmcgdGhlIHRyYWNr ZWQgcmVxdWVzdHMgdG8gYSBzaW5nbGUgYXJyYXksIHJvdWdobHkgCnNvbWV0aGluZyBsaWtlOgoK CW9iai0+bGFzdF9yZXFbMSArIE5VTV9SSU5HU10KCmFuZDoKCglMQVNUX1dSSVRFX1JFUSA9IDAK CUxBU1RfUkVBRF9SRVEocmluZykgPSAxICsgcmluZwoKQ291bGQgbWFrZSB0aGUgYWJvdmUgbG9n aWMgbW9yZSBjb21wYWN0IGFuZCBob3cgd291bGQgaXQgbG9vayBlbHNld2hlcmUgCmluIHRoZSBj b2RlPyBEZWZpbml0ZWx5IGxvb2tzIGxpa2UgaXQgd291bGQgd29yayBmb3IgdGhlIGFib3ZlIGxv b3A6CgoJZm9yIChpID0gTEFTVF9XUklURV9SRVE7IGkgPD0gTEFTVF9UUkFDS0VEX1JFUVVFU1Q7 IGkrKykgewoJCXJxID0gb2JqLT5sYXN0X3JlcVtpXTsKCQlpZiAocnEgPT0gTlVMTCAmJiByZWFk b25seSkKCQkJcmV0dXJuIDA7CgkJZWxzZSBpZiAocnEgPT0gTlVMTCkKCQkJY29udGludWU7CgkJ Li4uCgkJcmVxdWVzdHNbbisrXSA9IC4uLgoJCWlmIChyZWFkb25seSkKCQkJYnJlYWs7Cgl9CgpO b3Qgc3VyZSwgbWlnaHQgbm90IGJlIHRoYXQgZ3JlYXQgaWRlYS4KCj4gKwo+ICAgCW11dGV4X3Vu bG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0JcmV0ID0gX19pOTE1X3dhaXRfcmVxdWVzdChy ZXEsIHJlc2V0X2NvdW50ZXIsIHRydWUsIE5VTEwsIGZpbGVfcHJpdik7Cj4gKwlmb3IgKGkgPSAw OyByZXQgPT0gMCAmJiBpIDwgbjsgaSsrKQo+ICsJCXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3Qo cmVxdWVzdHNbaV0sIHJlc2V0X2NvdW50ZXIsIHRydWUsCj4gKwkJCQkJICBOVUxMLCBmaWxlX3By aXYpOwoKQW5vdGhlciBjaGFuY2UgZm9yIG1vcmUgb3B0aW1hbCAiZ3JvdXAiIHdhaXRpbmcuCgo+ ICAgCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAtCWk5MTVfZ2VtX3JlcXVlc3Rf dW5yZWZlcmVuY2UocmVxKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPgo+IC0JcmV0 dXJuIGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZ19fdGFpbChvYmopOwo+ICtlcnI6Cj4g Kwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4gKwkJaWYgKHJldCA9PSAwKSB7Cj4gKwkJCWlu dCByaW5nID0gcmVxdWVzdHNbaV0tPnJpbmctPmlkOwo+ICsJCQlpZiAob2JqLT5sYXN0X3JlYWRf cmVxW3JpbmddID09IHJlcXVlc3RzW2ldKQo+ICsJCQkJaTkxNV9nZW1fb2JqZWN0X3JldGlyZV9f cmVhZChvYmosIHJpbmcpOwo+ICsJCQlpZiAob2JqLT5sYXN0X3dyaXRlX3JlcSA9PSByZXF1ZXN0 c1tpXSkKPiArCQkJCWk5MTVfZ2VtX29iamVjdF9yZXRpcmVfX3dyaXRlKG9iaik7Cj4gKwkJfQoK V2hhdCBpZiBvbmUgd2FpdCBzdWNjZWVkZWQgYW5kIG9uZSBmYWlsZWQsIG5vIG5lZWQgdG8gdXBk YXRlIGFueXRoaW5nPwoKPiArCQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKHJlcXVlc3Rz W2ldKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICAgfQo+Cj4gICAvKioKPiBAQCAtMjIw NCw3OCArMjIzNSw1OSBAQCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4KPiAtc3RhdGljIHZvaWQK PiAtaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9fYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCj4gLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICt2 b2lkIGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ICsJCQkg ICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm9sZF9yaW5n Owo+IC0KPiAtCUJVR19PTihyaW5nID09IE5VTEwpOwo+IC0KPiAtCXJlcSA9IGludGVsX3Jpbmdf Z2V0X3JlcXVlc3QocmluZyk7Cj4gLQlvbGRfcmluZyA9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jp bmcob2JqLT5sYXN0X3JlYWRfcmVxKTsKPiAtCj4gLQlpZiAob2xkX3JpbmcgIT0gcmluZyAmJiBv YmotPmxhc3Rfd3JpdGVfcmVxKSB7Cj4gLQkJLyogS2VlcCB0aGUgcmVxdWVzdCByZWxhdGl2ZSB0 byB0aGUgY3VycmVudCByaW5nICovCj4gLQkJaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oJm9iai0+ bGFzdF93cml0ZV9yZXEsIHJlcSk7Cj4gLQl9Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqID0gdm1hLT5vYmo7Cj4KPiAgIAkvKiBBZGQgYSByZWZlcmVuY2UgaWYgd2UncmUgbmV3 bHkgZW50ZXJpbmcgdGhlIGFjdGl2ZSBsaXN0LiAqLwo+IC0JaWYgKCFvYmotPmFjdGl2ZSkgewo+ ICsJaWYgKG9iai0+bGFzdF9yZWFkX3JlcVtyaW5nLT5pZF0gPT0gTlVMTCAmJiBvYmotPmFjdGl2 ZSsrID09IDApCj4gICAJCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZSgmb2JqLT5iYXNlKTsKPiAt CQlvYmotPmFjdGl2ZSA9IDE7Cj4gLQl9Cj4gKwlCVUdfT04ob2JqLT5hY3RpdmUgPT0gMCB8fCBv YmotPmFjdGl2ZSA+IEk5MTVfTlVNX1JJTkdTKTsKCk1heWJlIHdlIG5lZWQgSTkxNV9XQVJOX0FO RF9IQUxUKCkgd2hpY2ggd291bGQgYmUgYSBXQVJOKCkgcGx1cyBwdXQgdGhlIApkcml2ZXIgaW4g aGFsdGVkIHN0YXRlPwoKPgo+IC0JbGlzdF9tb3ZlX3RhaWwoJm9iai0+cmluZ19saXN0LCAmcmlu Zy0+YWN0aXZlX2xpc3QpOwo+ICsJbGlzdF9tb3ZlX3RhaWwoJm9iai0+cmluZ19saXN0W3Jpbmct PmlkXSwgJnJpbmctPmFjdGl2ZV9saXN0KTsKPiArCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZv YmotPmxhc3RfcmVhZF9yZXFbcmluZy0+aWRdLAo+ICsJCQkJaW50ZWxfcmluZ19nZXRfcmVxdWVz dChyaW5nKSk7Cj4KPiAtCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZvYmotPmxhc3RfcmVhZF9y ZXEsIHJlcSk7Cj4gKwlsaXN0X21vdmVfdGFpbCgmdm1hLT5tbV9saXN0LCAmdm1hLT52bS0+YWN0 aXZlX2xpc3QpOwo+ICAgfQo+Cj4gLXZvaWQgaTkxNV92bWFfbW92ZV90b19hY3RpdmUoc3RydWN0 IGk5MTVfdm1hICp2bWEsCj4gLQkJCSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykK PiArc3RhdGljIHZvaWQKPiAraTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fd3JpdGUoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIHsKPiAtCWxpc3RfbW92ZV90YWlsKCZ2bWEtPm1t X2xpc3QsICZ2bWEtPnZtLT5hY3RpdmVfbGlzdCk7Cj4gLQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0 X21vdmVfdG9fYWN0aXZlKHZtYS0+b2JqLCByaW5nKTsKPiArCUJVR19PTihvYmotPmxhc3Rfd3Jp dGVfcmVxID09IE5VTEwpOwo+ICsJQlVHX09OKCFvYmotPmFjdGl2ZSk7Cj4gKwo+ICsJaTkxNV9n ZW1fcmVxdWVzdF9hc3NpZ24oJm9iai0+bGFzdF93cml0ZV9yZXEsIE5VTEwpOwo+ICsKPiArCWlu dGVsX2ZiX29ial9mbHVzaChvYmosIHRydWUpOwo+ICAgfQo+Cj4gICBzdGF0aWMgdm9pZAo+IC1p OTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKQo+ICtpOTE1X2dlbV9vYmplY3RfcmV0aXJlX19yZWFkKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosIGludCByaW5nKQo+ICAgewo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1h Owo+Cj4gLQlCVUdfT04ob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIH5JOTE1X0dFTV9HUFVfRE9N QUlOUyk7Cj4gKwlCVUdfT04ob2JqLT5sYXN0X3JlYWRfcmVxW3JpbmddID09IE5VTEwpOwo+ICAg CUJVR19PTighb2JqLT5hY3RpdmUpOwo+Cj4gKwlsaXN0X2RlbF9pbml0KCZvYmotPnJpbmdfbGlz dFtyaW5nXSk7Cj4gKwlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmb2JqLT5sYXN0X3JlYWRfcmVx W3JpbmddLCBOVUxMKTsKPiArCj4gKwlpZiAob2JqLT5sYXN0X3dyaXRlX3JlcSAmJiBvYmotPmxh c3Rfd3JpdGVfcmVxLT5yaW5nLT5pZCA9PSByaW5nKQo+ICsJCWk5MTVfZ2VtX29iamVjdF9yZXRp cmVfX3dyaXRlKG9iaik7Cj4gKwo+ICsJaWYgKC0tb2JqLT5hY3RpdmUpCj4gKwkJcmV0dXJuOwo+ ICsKPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm9iai0+dm1hX2xpc3QsIHZtYV9saW5r KSB7Cj4gICAJCWlmICghbGlzdF9lbXB0eSgmdm1hLT5tbV9saXN0KSkKPiAgIAkJCWxpc3RfbW92 ZV90YWlsKCZ2bWEtPm1tX2xpc3QsICZ2bWEtPnZtLT5pbmFjdGl2ZV9saXN0KTsKPiAgIAl9Cj4K PiAtCWludGVsX2ZiX29ial9mbHVzaChvYmosIHRydWUpOwo+IC0KPiAtCWxpc3RfZGVsX2luaXQo Jm9iai0+cmluZ19saXN0KTsKPiAtCj4gLQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmb2JqLT5s YXN0X3JlYWRfcmVxLCBOVUxMKTsKPiAtCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZvYmotPmxh c3Rfd3JpdGVfcmVxLCBOVUxMKTsKPiAtCW9iai0+YmFzZS53cml0ZV9kb21haW4gPSAwOwo+IC0K PiAgIAlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmb2JqLT5sYXN0X2ZlbmNlZF9yZXEsIE5VTEwp Owo+Cj4gLQlvYmotPmFjdGl2ZSA9IDA7Cj4gICAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uo Jm9iai0+YmFzZSk7Cj4gLQo+IC0JV0FSTl9PTihpOTE1X3ZlcmlmeV9saXN0cyhkZXYpKTsKPiAt fQo+IC0KPiAtc3RhdGljIHZvaWQKPiAtaTkxNV9nZW1fb2JqZWN0X3JldGlyZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlpZiAob2JqLT5sYXN0X3JlYWRfcmVxID09 IE5VTEwpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRl ZChvYmotPmxhc3RfcmVhZF9yZXEsIHRydWUpKQo+IC0JCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3Rv X2luYWN0aXZlKG9iaik7Cj4gICB9Cj4KPiAgIHN0YXRpYyBpbnQKPiBAQCAtMjU4Myw5ICsyNTk1 LDkgQEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVzZXRfcmluZ19jbGVhbnVwKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPgo+ICAgCQlvYmogPSBsaXN0X2ZpcnN0X2VudHJ5KCZy aW5nLT5hY3RpdmVfbGlzdCwKPiAgIAkJCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QsCj4gLQkJCQkgICAgICAgcmluZ19saXN0KTsKPiArCQkJCSAgICAgICByaW5nX2xpc3Rbcmlu Zy0+aWRdKTsKPgo+IC0JCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7Cj4g KwkJaTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fcmVhZChvYmosIHJpbmctPmlkKTsKPiAgIAl9Cj4K PiAgIAkvKgo+IEBAIC0yNjcwLDYgKzI2ODIsOCBAQCB2b2lkIGk5MTVfZ2VtX3Jlc2V0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCj4gICAJaTkxNV9nZW1fY29udGV4dF9yZXNldChkZXYpOwo+Cj4g ICAJaTkxNV9nZW1fcmVzdG9yZV9mZW5jZXMoZGV2KTsKPiArCj4gKwlXQVJOX09OKGk5MTVfdmVy aWZ5X2xpc3RzKGRldikpOwo+ICAgfQo+Cj4gICAvKioKPiBAQCAtMjY3OCwxMSArMjY5MiwxMSBA QCB2b2lkIGk5MTVfZ2VtX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICB2b2lkCj4g ICBpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHNfcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpy aW5nKQo+ICAgewo+ICsJV0FSTl9PTihpOTE1X3ZlcmlmeV9saXN0cyhyaW5nLT5kZXYpKTsKPiAr Cj4gICAJaWYgKGxpc3RfZW1wdHkoJnJpbmctPnJlcXVlc3RfbGlzdCkpCj4gICAJCXJldHVybjsK Pgo+IC0JV0FSTl9PTihpOTE1X3ZlcmlmeV9saXN0cyhyaW5nLT5kZXYpKTsKPiAtCj4gICAJLyog UmV0aXJlIHJlcXVlc3RzIGZpcnN0IGFzIHdlIHVzZSBpdCBhYm92ZSBmb3IgdGhlIGVhcmx5IHJl dHVybi4KPiAgIAkgKiBJZiB3ZSByZXRpcmUgcmVxdWVzdHMgbGFzdCwgd2UgbWF5IHVzZSBhIGxh dGVyIHNlcW5vIGFuZCBzbyBjbGVhcgo+ICAgCSAqIHRoZSByZXF1ZXN0cyBsaXN0cyB3aXRob3V0 IGNsZWFyaW5nIHRoZSBhY3RpdmUgbGlzdCwgbGVhZGluZyB0bwo+IEBAIC0yNzE5LDEyICsyNzMz LDEzIEBAIGk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcpCj4KPiAgIAkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+YWN0aXZlX2xp c3QsCj4gICAJCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCj4gLQkJCQkgICAg ICByaW5nX2xpc3QpOwo+ICsJCQkJICAgICAgcmluZ19saXN0W3JpbmctPmlkXSk7Cj4KPiAtCQlp ZiAoIWk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKG9iai0+bGFzdF9yZWFkX3JlcSwgdHJ1ZSkp Cj4gKwkJaWYgKCFpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChvYmotPmxhc3RfcmVhZF9yZXFb cmluZy0+aWRdLAo+ICsJCQkJCQl0cnVlKSkKPiAgIAkJCWJyZWFrOwo+Cj4gLQkJaTkxNV9nZW1f b2JqZWN0X21vdmVfdG9faW5hY3RpdmUob2JqKTsKPiArCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJl X19yZWFkKG9iaiwgcmluZy0+aWQpOwo+ICAgCX0KPgo+ICAgCWlmICh1bmxpa2VseShyaW5nLT50 cmFjZV9pcnFfcmVxICYmCj4gQEAgLTI4MTMsMTcgKzI4MjgsMjMgQEAgaTkxNV9nZW1faWRsZV93 b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAgc3RhdGljIGludAo+ICAg aTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQo+ICAgewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZzsKPiAtCWludCByZXQ7 Cj4gKwlpbnQgcmV0LCBpOwo+Cj4gLQlpZiAob2JqLT5hY3RpdmUpIHsKPiAtCQlyaW5nID0gaTkx NV9nZW1fcmVxdWVzdF9nZXRfcmluZyhvYmotPmxhc3RfcmVhZF9yZXEpOwo+ICsJaWYgKCFvYmot PmFjdGl2ZSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1f UklOR1M7IGkrKykgewo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnE7Cj4gKwo+ ICsJCXJxID0gb2JqLT5sYXN0X3JlYWRfcmVxW2ldOwo+ICsJCWlmIChycSA9PSBOVUxMKQo+ICsJ CQljb250aW51ZTsKPgo+IC0JCXJldCA9IGk5MTVfZ2VtX2NoZWNrX29scihvYmotPmxhc3RfcmVh ZF9yZXEpOwo+ICsJCXJldCA9IGk5MTVfZ2VtX2NoZWNrX29scihycSk7Cj4gICAJCWlmIChyZXQp Cj4gICAJCQlyZXR1cm4gcmV0Owo+Cj4gLQkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3Jpbmco cmluZyk7Cj4gKwkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3JpbmcocnEtPnJpbmcpOwo+ICAg CX0KPgo+ICAgCXJldHVybiAwOwo+IEBAIC0yODU3LDkgKzI4NzgsMTAgQEAgaTkxNV9nZW1fd2Fp dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUpCj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3dhaXQgKmFyZ3MgPSBkYXRhOwo+ ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxW0k5 MTVfTlVNX1JJTkdTXTsKPiAgIAl1bnNpZ25lZCByZXNldF9jb3VudGVyOwo+IC0JaW50IHJldCA9 IDA7Cj4gKwlpbnQgaSwgbiA9IDA7Cj4gKwlpbnQgcmV0Owo+Cj4gICAJaWYgKGFyZ3MtPmZsYWdz ICE9IDApCj4gICAJCXJldHVybiAtRUlOVkFMOwo+IEBAIC0yODc5LDExICsyOTAxLDkgQEAgaTkx NV9nZW1fd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICAJaWYgKHJldCkKPiAgIAkJZ290byBvdXQ7Cj4KPiAtCWlm ICghb2JqLT5hY3RpdmUgfHwgIW9iai0+bGFzdF9yZWFkX3JlcSkKPiArCWlmICghb2JqLT5hY3Rp dmUpCj4gICAJCWdvdG8gb3V0Owo+Cj4gLQlyZXEgPSBvYmotPmxhc3RfcmVhZF9yZXE7Cj4gLQo+ ICAgCS8qIERvIHRoaXMgYWZ0ZXIgT0xSIGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBtYWtlIGZvcndh cmQgcHJvZ3Jlc3MgcG9sbGluZwo+ICAgCSAqIG9uIHRoaXMgSU9DVEwgd2l0aCBhIHRpbWVvdXQg PT0gMCAobGlrZSBidXN5IGlvY3RsKQo+ICAgCSAqLwo+IEBAIC0yODk0LDEzICsyOTE0LDIzIEBA IGk5MTVfZ2VtX3dhaXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwg c3RydWN0IGRybV9maWxlICpmaWxlKQo+Cj4gICAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uo Jm9iai0+YmFzZSk7Cj4gICAJcmVzZXRfY291bnRlciA9IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+ Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpOwo+IC0JaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2Uo cmVxKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgewo+ICsJ CWlmIChvYmotPmxhc3RfcmVhZF9yZXFbaV0gPT0gTlVMTCkKPiArCQkJY29udGludWU7Cj4gKwo+ ICsJCXJlcVtuKytdID0gaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2Uob2JqLT5sYXN0X3JlYWRf cmVxW2ldKTsKPiArCX0KPiArCj4gICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7 Cj4KPiAtCXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3QocmVxLCByZXNldF9jb3VudGVyLCB0cnVl LAo+IC0JCQkJICBhcmdzLT50aW1lb3V0X25zID4gMCA/ICZhcmdzLT50aW1lb3V0X25zIDogTlVM TCwKPiAtCQkJCSAgZmlsZS0+ZHJpdmVyX3ByaXYpOwo+IC0JaTkxNV9nZW1fcmVxdWVzdF91bnJl ZmVyZW5jZV9fdW5sb2NrZWQocmVxKTsKPiArCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKPiAr CQlpZiAocmV0ID09IDApCj4gKwkJCXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3QocmVxW2ldLCBy ZXNldF9jb3VudGVyLCB0cnVlLAo+ICsJCQkJCQkgIGFyZ3MtPnRpbWVvdXRfbnMgPiAwID8gJmFy Z3MtPnRpbWVvdXRfbnMgOiBOVUxMLAo+ICsJCQkJCQkgIGZpbGUtPmRyaXZlcl9wcml2KTsKPiAr CQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlX191bmxvY2tlZChyZXFbaV0pOwo+ICsJfQo+ ICAgCXJldHVybiByZXQ7Cj4KPiAgIG91dDoKPiBAQCAtMjkwOSw2ICsyOTM5LDYyIEBAIG91dDoK PiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+Cj4gK3N0YXRpYyBpbnQKPiArX19pOTE1X2dlbV9vYmpl Y3Rfc3luYyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCSAgICAgICBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICp0bywKPiArCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpycSkKPiArewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZnJvbTsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJaWYgKHJxID09IE5VTEwpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZnJv bSA9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3JpbmcocnEpOwo+ICsJaWYgKHRvID09IGZyb20pCj4g KwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJxLCB0 cnVlKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXQgPSBpOTE1X2dlbV9jaGVja19vbHIocnEp Owo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWlmICghaTkxNV9zZW1hcGhv cmVfaXNfZW5hYmxlZChvYmotPmJhc2UuZGV2KSkgewo+ICsJCXJldCA9IF9faTkxNV93YWl0X3Jl cXVlc3QocnEsCj4gKwkJCQkJICBhdG9taWNfcmVhZCgmdG9faTkxNShvYmotPmJhc2UuZGV2KS0+ Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpLAo+ICsJCQkJCSAgdG9faTkxNShvYmotPmJhc2UuZGV2 KS0+bW0uaW50ZXJydXB0aWJsZSwgTlVMTCwgTlVMTCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0 dXJuIHJldDsKPiArCj4gKwkJaWYgKG9iai0+bGFzdF9yZWFkX3JlcVtmcm9tLT5pZF0gPT0gcnEp Cj4gKwkJCWk5MTVfZ2VtX29iamVjdF9yZXRpcmVfX3JlYWQob2JqLCBmcm9tLT5pZCk7Cj4gKwkJ aWYgKG9iai0+bGFzdF93cml0ZV9yZXEgPT0gcnEpCj4gKwkJCWk5MTVfZ2VtX29iamVjdF9yZXRp cmVfX3dyaXRlKG9iaik7CgpSZXRpcmluZyByZWFkcyBpbXBsaWVzIHJldGlyaW5nIHdyaXRlcyBv biBhIHJpbmcgc28gaXMgdGhpcyBuZWVkZWQ/Cgo+ICsJfSBlbHNlIHsKPiArCQlpbnQgaWR4ID0g aW50ZWxfcmluZ19zeW5jX2luZGV4KGZyb20sIHRvKTsKPiArCQl1MzIgc2Vxbm8gPSBpOTE1X2dl bV9yZXF1ZXN0X2dldF9zZXFubyhycSk7Cj4gKwo+ICsJCWlmIChzZXFubyA8PSBmcm9tLT5zZW1h cGhvcmUuc3luY19zZXFub1tpZHhdKQo+ICsJCQlyZXR1cm4gMDsKPiArCj4gKwkJdHJhY2VfaTkx NV9nZW1fcmluZ19zeW5jX3RvKGZyb20sIHRvLCBycSk7Cj4gKwkJcmV0ID0gdG8tPnNlbWFwaG9y ZS5zeW5jX3RvKHRvLCBmcm9tLCBzZXFubyk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJl dDsKPiArCj4gKwkJLyogV2UgdXNlIGxhc3RfcmVhZF9yZXEgYmVjYXVzZSBzeW5jX3RvKCkKPiAr CQkgKiBtaWdodCBoYXZlIGp1c3QgY2F1c2VkIHNlcW5vIHdyYXAgdW5kZXIKPiArCQkgKiB0aGUg cmFkYXIuCj4gKwkJICovCj4gKwkJZnJvbS0+c2VtYXBob3JlLnN5bmNfc2Vxbm9baWR4XSA9Cj4g KwkJCWk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3NlcW5vKG9iai0+bGFzdF9yZWFkX3JlcVtmcm9tLT5p ZF0pOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICAgLyoqCj4gICAgKiBpOTE1 X2dlbV9vYmplY3Rfc3luYyAtIHN5bmMgYW4gb2JqZWN0IHRvIGEgcmluZy4KPiAgICAqCj4gQEAg LTI5MTcsNyArMzAwMywxNyBAQCBvdXQ6Cj4gICAgKgo+ICAgICogVGhpcyBjb2RlIGlzIG1lYW50 IHRvIGFic3RyYWN0IG9iamVjdCBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgR1BVLgo+ICAgICog Q2FsbGluZyB3aXRoIE5VTEwgaW1wbGllcyBzeW5jaHJvbml6aW5nIHRoZSBvYmplY3Qgd2l0aCB0 aGUgQ1BVCj4gLSAqIHJhdGhlciB0aGFuIGEgcGFydGljdWxhciBHUFUgcmluZy4KPiArICogcmF0 aGVyIHRoYW4gYSBwYXJ0aWN1bGFyIEdQVSByaW5nLiBDb25jZXB0dWFsbHkgd2Ugc2VyaWFsaXNl IHdyaXRlcwo+ICsgKiBiZXR3ZWVuIGVuZ2luZXMgaW5zaWRlIHRoZSBHUFUuIFdlIG9ubHkgYWxs b3cgb24gZW5naW5lIHRvIHdyaXRlCj4gKyAqIGludG8gYSBidWZmZXIgYXQgYW55IHRpbWUsIGJ1 dCBtdWx0aXBsZSByZWFkZXJzLiBUbyBlbnN1cmUgZWFjaCBoYXMKPiArICogYSBjb2hlcmVudCB2 aWV3IG9mIG1lbW9yeSwgd2UgbXVzdDoKPiArICoKPiArICogLSBJZiB0aGVyZSBpcyBhbiBvdXRz dGFuZGluZyB3cml0ZSByZXF1ZXN0IHRvIHRoZSBvYmplY3QsIHRoZSBuZXcKPiArICogICByZXF1 ZXN0IG11c3Qgd2FpdCBmb3IgaXQgdG8gY29tcGxldGUgKGVpdGhlciBDUFUgb3IgaW4gaHcsIHJl cXVlc3RzCj4gKyAqICAgb24gdGhlIHNhbWUgcmluZyB3aWxsIGJlIG5hdHVyYWxseSBvcmRlcmVk KS4KPiArICoKPiArICogLSBJZiB3ZSBhcmUgYSB3cml0ZSByZXF1ZXN0IChwZW5kaW5nX3dyaXRl X2RvbWFpbiBpcyBzZXQpLCB0aGUgbmV3Cj4gKyAqICAgcmVxdWVzdCBtdXN0IHdhaXQgZm9yIG91 dHN0YW5kaW5nIHJlYWQgcmVxdWVzdHMgdG8gY29tcGxldGUuCj4gICAgKgo+ICAgICogUmV0dXJu cyAwIGlmIHN1Y2Nlc3NmdWwsIGVsc2UgcHJvcGFnYXRlcyB1cCB0aGUgbG93ZXIgbGF5ZXIgZXJy b3IuCj4gICAgKi8KPiBAQCAtMjkyNSwzOSArMzAyMSwyNSBAQCBpbnQKPiAgIGk5MTVfZ2VtX29i amVjdF9zeW5jKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCSAgICAgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqdG8pCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpmcm9tOwo+IC0JdTMyIHNlcW5vOwo+IC0JaW50IHJldCwgaWR4Owo+IC0KPiAtCWZyb20gPSBp OTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF9yZWFkX3JlcSk7Cj4gLQo+IC0JaWYg KGZyb20gPT0gTlVMTCB8fCB0byA9PSBmcm9tKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCWlmICh0 byA9PSBOVUxMIHx8ICFpOTE1X3NlbWFwaG9yZV9pc19lbmFibGVkKG9iai0+YmFzZS5kZXYpKQo+ IC0JCXJldHVybiBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqLCBmYWxzZSk7Cj4g LQo+IC0JaWR4ID0gaW50ZWxfcmluZ19zeW5jX2luZGV4KGZyb20sIHRvKTsKPiArCWNvbnN0IGJv b2wgcmVhZG9ubHkgPSBvYmotPmJhc2UucGVuZGluZ193cml0ZV9kb21haW4gPT0gMDsKPiArCWlu dCByZXQsIGk7Cj4KPiAtCXNlcW5vID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8ob2JqLT5s YXN0X3JlYWRfcmVxKTsKPiAtCS8qIE9wdGltaXphdGlvbjogQXZvaWQgc2VtYXBob3JlIHN5bmMg d2hlbiB3ZSBhcmUgc3VyZSB3ZSBhbHJlYWR5Cj4gLQkgKiB3YWl0ZWQgZm9yIGFuIG9iamVjdCB3 aXRoIGhpZ2hlciBzZXFubyAqLwo+IC0JaWYgKHNlcW5vIDw9IGZyb20tPnNlbWFwaG9yZS5zeW5j X3NlcW5vW2lkeF0pCj4gKwlpZiAoIW9iai0+YWN0aXZlKQo+ICAgCQlyZXR1cm4gMDsKPgo+IC0J cmV0ID0gaTkxNV9nZW1fY2hlY2tfb2xyKG9iai0+bGFzdF9yZWFkX3JlcSk7Cj4gLQlpZiAocmV0 KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JdHJhY2VfaTkxNV9nZW1fcmluZ19zeW5jX3RvKGZy b20sIHRvLCBvYmotPmxhc3RfcmVhZF9yZXEpOwo+IC0JcmV0ID0gdG8tPnNlbWFwaG9yZS5zeW5j X3RvKHRvLCBmcm9tLCBzZXFubyk7Cj4gLQlpZiAoIXJldCkKPiAtCQkvKiBXZSB1c2UgbGFzdF9y ZWFkX3JlcSBiZWNhdXNlIHN5bmNfdG8oKQo+IC0JCSAqIG1pZ2h0IGhhdmUganVzdCBjYXVzZWQg c2Vxbm8gd3JhcCB1bmRlcgo+IC0JCSAqIHRoZSByYWRhci4KPiAtCQkgKi8KPiAtCQlmcm9tLT5z ZW1hcGhvcmUuc3luY19zZXFub1tpZHhdID0KPiAtCQkJCWk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Nl cW5vKG9iai0+bGFzdF9yZWFkX3JlcSk7Cj4gKwlpZiAodG8gPT0gTlVMTCkgewo+ICsJCXJldCA9 IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosIHJlYWRvbmx5KTsKPiArCX0gZWxz ZSBpZiAocmVhZG9ubHkpIHsKPiArCQlyZXQgPSBfX2k5MTVfZ2VtX29iamVjdF9zeW5jKG9iaiwg dG8sCj4gKwkJCQkJICAgICBvYmotPmxhc3Rfd3JpdGVfcmVxKTsKPiArCX0gZWxzZSB7Cj4gKwkJ Zm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspIHsKPiArCQkJcmV0ID0gX19pOTE1 X2dlbV9vYmplY3Rfc3luYyhvYmosIHRvLAo+ICsJCQkJCQkgICAgIG9iai0+bGFzdF9yZWFkX3Jl cVtpXSk7CgpIZXJlIEkgdGhpbmsgaXMgYW5vdGhlciBvcHBvcnR1bml0eSB0byB3YWl0IGZvciBh bGwgb2YgdGhlbSBhdCBvbmNlLiBWaWEgCmEgX19pOTE1X2dlbV9vYmplY3Rfc3luYyBoZWxwZXIg d2hpY2ggd291bGQgdGFrZSBhbiBhcnJheSwgb3IgYSAKcmluZy9yZXF1ZXN0IG1hc2suIE5vdCBz dXJlIGlmIGl0IHdvdWxkIGJlIHdvcnRoIGl0IHRob3VnaC4KCj4gKwkJCWlmIChyZXQpCj4gKwkJ CQlicmVhazsKPiArCQl9Cj4gKwl9Cj4KPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+IEBAIC0zMDQ0 LDEwICszMTI2LDYgQEAgaW50IGk5MTVfdm1hX3VuYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkK PiAgIAkvKiBTaW5jZSB0aGUgdW5ib3VuZCBsaXN0IGlzIGdsb2JhbCwgb25seSBtb3ZlIHRvIHRo YXQgbGlzdCBpZgo+ICAgCSAqIG5vIG1vcmUgVk1BcyBleGlzdC4gKi8KPiAgIAlpZiAobGlzdF9l bXB0eSgmb2JqLT52bWFfbGlzdCkpIHsKPiAtCQkvKiBUaHJvdyBhd2F5IHRoZSBhY3RpdmUgcmVm ZXJlbmNlIGJlZm9yZQo+IC0JCSAqIG1vdmluZyB0byB0aGUgdW5ib3VuZCBsaXN0LiAqLwo+IC0J CWk5MTVfZ2VtX29iamVjdF9yZXRpcmUob2JqKTsKPiAtCj4gICAJCWk5MTVfZ2VtX2d0dF9maW5p c2hfb2JqZWN0KG9iaik7Cj4gICAJCWxpc3RfbW92ZV90YWlsKCZvYmotPmdsb2JhbF9saXN0LCAm ZGV2X3ByaXYtPm1tLnVuYm91bmRfbGlzdCk7Cj4gICAJfQo+IEBAIC0zNjc4LDggKzM3NTYsNiBA QCBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwgYm9vbCB3cml0ZSkKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ Cj4gLQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlKG9iaik7Cj4gLQo+ICAgCS8qIEZsdXNoIGFuZCBh Y3F1aXJlIG9iai0+cGFnZXMgc28gdGhhdCB3ZSBhcmUgY29oZXJlbnQgdGhyb3VnaAo+ICAgCSAq IGRpcmVjdCBhY2Nlc3MgaW4gbWVtb3J5IHdpdGggcHJldmlvdXMgY2FjaGVkIHdyaXRlcyB0aHJv dWdoCj4gICAJICogc2htZW1mcyBhbmQgdGhhdCBvdXIgY2FjaGUgZG9tYWluIHRyYWNraW5nIHJl bWFpbnMgdmFsaWQuCj4gQEAgLTM5MDQsMTEgKzM5ODAsOSBAQCBpOTE1X2dlbV9vYmplY3RfcGlu X3RvX2Rpc3BsYXlfcGxhbmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAli b29sIHdhc19waW5fZGlzcGxheTsKPiAgIAlpbnQgcmV0Owo+Cj4gLQlpZiAocGlwZWxpbmVkICE9 IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3JlYWRfcmVxKSkgewo+IC0JCXJl dCA9IGk5MTVfZ2VtX29iamVjdF9zeW5jKG9iaiwgcGlwZWxpbmVkKTsKPiAtCQlpZiAocmV0KQo+ IC0JCQlyZXR1cm4gcmV0Owo+IC0JfQo+ICsJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3N5bmMob2Jq LCBwaXBlbGluZWQpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+Cj4gICAJLyogTWFy ayB0aGUgcGluX2Rpc3BsYXkgZWFybHkgc28gdGhhdCB3ZSBhY2NvdW50IGZvciB0aGUKPiAgIAkg KiBkaXNwbGF5IGNvaGVyZW5jeSB3aGlsc3Qgc2V0dGluZyB1cCB0aGUgY2FjaGUgZG9tYWlucy4K PiBAQCAtNDAwNCw3ICs0MDc4LDYgQEAgaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWlu KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wgd3JpdGUpCj4gICAJaWYgKHJl dCkKPiAgIAkJcmV0dXJuIHJldDsKPgo+IC0JaTkxNV9nZW1fb2JqZWN0X3JldGlyZShvYmopOwo+ ICAgCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9ndHRfd3JpdGVfZG9tYWluKG9iaik7Cj4KPiAgIAlv bGRfd3JpdGVfZG9tYWluID0gb2JqLT5iYXNlLndyaXRlX2RvbWFpbjsKPiBAQCAtNDI5NywxNSAr NDM3MCwyNCBAQCBpOTE1X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCj4gICAJICogbmVjZXNzYXJ5IGZsdXNoZXMgaGVyZS4KPiAgIAkgKi8KPiAgIAly ZXQgPSBpOTE1X2dlbV9vYmplY3RfZmx1c2hfYWN0aXZlKG9iaik7Cj4gKwlpZiAocmV0KQo+ICsJ CWdvdG8gdW5yZWY7Cj4gKwo+ICsJYXJncy0+YnVzeSA9IDA7Cj4gKwlpZiAob2JqLT5hY3RpdmUp IHsKPiArCQlpbnQgaTsKPgo+IC0JYXJncy0+YnVzeSA9IG9iai0+YWN0aXZlOwo+IC0JaWYgKG9i ai0+bGFzdF9yZWFkX3JlcSkgewo+IC0JCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4g ICAJCUJVSUxEX0JVR19PTihJOTE1X05VTV9SSU5HUyA+IDE2KTsKPiAtCQlyaW5nID0gaTkxNV9n ZW1fcmVxdWVzdF9nZXRfcmluZyhvYmotPmxhc3RfcmVhZF9yZXEpOwo+IC0JCWFyZ3MtPmJ1c3kg fD0gaW50ZWxfcmluZ19mbGFnKHJpbmcpIDw8IDE2Owo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwg STkxNV9OVU1fUklOR1M7IGkrKykgewo+ICsJCQlpZiAob2JqLT5sYXN0X3JlYWRfcmVxW2ldID09 IE5VTEwpCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCWFyZ3MtPmJ1c3kgfD0gMSA8PCAoMTYg KyBpKSB8IDE7CgpEb2Vzbid0IGxvb2sgbGlrZSBlcXVpdmFsZW50IGJpdHMgd2lsbCBiZSBzZXQ/ IFdoYXQgaXMgdGhlICJ8IDEiIGF0IHRoZSAKZW5kIGZvcj8KCj4gKwkJfQo+ICAgCX0KPgo+ICt1 bnJlZjoKPiAgIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKPiAgIHVu bG9jazoKPiAgIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiBAQCAtNDM3OSw4 ICs0NDYxLDExIEBAIHVubG9jazoKPiAgIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2luaXQoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkJCSAgY29uc3Qgc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3Rfb3BzICpvcHMpCj4gICB7Cj4gKwlpbnQgaTsKPiArCj4gICAJSU5JVF9MSVNU X0hFQUQoJm9iai0+Z2xvYmFsX2xpc3QpOwo+IC0JSU5JVF9MSVNUX0hFQUQoJm9iai0+cmluZ19s aXN0KTsKPiArCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKQo+ICsJCUlOSVRf TElTVF9IRUFEKCZvYmotPnJpbmdfbGlzdFtpXSk7Cj4gICAJSU5JVF9MSVNUX0hFQUQoJm9iai0+ b2JqX2V4ZWNfbGluayk7Cj4gICAJSU5JVF9MSVNUX0hFQUQoJm9iai0+dm1hX2xpc3QpOwo+ICAg CUlOSVRfTElTVF9IRUFEKCZvYmotPmJhdGNoX3Bvb2xfbGluayk7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+IGluZGV4IDcwMzQ2YjAwMjhmOS4uMzE4MjZlN2U5MDRj IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+IEBAIC02NzMs OCArNjczLDYgQEAgc3RhdGljIGludCBkb19zd2l0Y2goc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZywKPiAgIAkJICogc3dhcHBlZCwgYnV0IHRoZXJlIGlzIG5vIHdheSB0byBkbyB0aGF0IHll dC4KPiAgIAkJICovCj4gICAJCWZyb20tPmxlZ2FjeV9od19jdHgucmNzX3N0YXRlLT5kaXJ0eSA9 IDE7Cj4gLQkJQlVHX09OKGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3JpbmcoCj4gLQkJCWZyb20tPmxl Z2FjeV9od19jdHgucmNzX3N0YXRlLT5sYXN0X3JlYWRfcmVxKSAhPSByaW5nKTsKPgo+ICAgCQkv KiBvYmogaXMga2VwdCBhbGl2ZSB1bnRpbCB0aGUgbmV4dCByZXF1ZXN0IGJ5IGl0cyBhY3RpdmUg cmVmICovCj4gICAJCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKGZyb20tPmxlZ2FjeV9od19j dHgucmNzX3N0YXRlKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fZGVidWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMKPiBpbmRl eCBmNDYyZDFiNTFkOTcuLmYxY2RkZGFkYTM2OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZGVidWcuYwo+IEBAIC0zNCw4MiArMzQsNDYgQEAgaW50Cj4gICBpOTE1X3ZlcmlmeV9s aXN0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgewo+ICAgCXN0YXRpYyBpbnQgd2FybmVk Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsK PiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcmluZzsKPiAgIAlpbnQgZXJyID0gMDsKPiArCWludCBpOwo+Cj4gICAJaWYgKHdh cm5lZCkKPiAgIAkJcmV0dXJuIDA7Cj4KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmZGV2 X3ByaXYtPnJlbmRlcl9yaW5nLmFjdGl2ZV9saXN0LCBsaXN0KSB7Cj4gLQkJaWYgKG9iai0+YmFz ZS5kZXYgIT0gZGV2IHx8Cj4gLQkJICAgICFhdG9taWNfcmVhZCgmb2JqLT5iYXNlLnJlZmNvdW50 LnJlZmNvdW50KSkgewo+IC0JCQlEUk1fRVJST1IoImZyZWVkIHJlbmRlciBhY3RpdmUgJXBcbiIs IG9iaik7Cj4gLQkJCWVycisrOwo+IC0JCQlicmVhazsKPiAtCQl9IGVsc2UgaWYgKCFvYmotPmFj dGl2ZSB8fAo+IC0JCQkgICAob2JqLT5iYXNlLnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0dQVV9E T01BSU5TKSA9PSAwKSB7Cj4gLQkJCURSTV9FUlJPUigiaW52YWxpZCByZW5kZXIgYWN0aXZlICVw IChhICVkIHIgJXgpXG4iLAo+IC0JCQkJICBvYmosCj4gLQkJCQkgIG9iai0+YWN0aXZlLAo+IC0J CQkJICBvYmotPmJhc2UucmVhZF9kb21haW5zKTsKPiAtCQkJZXJyKys7Cj4gLQkJfSBlbHNlIGlm IChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYmIGxpc3RfZW1wdHkoJm9iai0+Z3B1X3dyaXRlX2xp c3QpKSB7Cj4gLQkJCURSTV9FUlJPUigiaW52YWxpZCByZW5kZXIgYWN0aXZlICVwICh3ICV4LCBn d2wgJWQpXG4iLAo+IC0JCQkJICBvYmosCj4gLQkJCQkgIG9iai0+YmFzZS53cml0ZV9kb21haW4s Cj4gLQkJCQkgICFsaXN0X2VtcHR5KCZvYmotPmdwdV93cml0ZV9saXN0KSk7Cj4gLQkJCWVycisr Owo+ICsJZm9yX2VhY2hfcmluZyhyaW5nLCBkZXZfcHJpdiwgaSkgewo+ICsJCWlmIChsaXN0X2Vt cHR5KCZyaW5nLT5yZXF1ZXN0X2xpc3QpKSB7Cj4gKwkJCWlmICghbGlzdF9lbXB0eSgmcmluZy0+ YWN0aXZlX2xpc3QpKSB7Cj4gKwkJCQlEUk1fRVJST1IoIiVzOiBhY3RpdmUgbGlzdCBub3QgZW1w dHksIGJ1dCBubyByZXF1ZXN0c1xuIiwgcmluZy0+bmFtZSk7Cj4gKwkJCQllcnIrKzsKPiArCQkJ fQo+ICsJCQljb250aW51ZTsKPiAgIAkJfQo+IC0JfQo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50 cnkob2JqLCAmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QsIGxpc3QpIHsKPiAtCQlpZiAob2Jq LT5iYXNlLmRldiAhPSBkZXYgfHwKPiAtCQkgICAgIWF0b21pY19yZWFkKCZvYmotPmJhc2UucmVm Y291bnQucmVmY291bnQpKSB7Cj4gLQkJCURSTV9FUlJPUigiZnJlZWQgZmx1c2hpbmcgJXBcbiIs IG9iaik7Cj4gLQkJCWVycisrOwo+IC0JCQlicmVhazsKPiAtCQl9IGVsc2UgaWYgKCFvYmotPmFj dGl2ZSB8fAo+IC0JCQkgICAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9E T01BSU5TKSA9PSAwIHx8Cj4gLQkJCSAgIGxpc3RfZW1wdHkoJm9iai0+Z3B1X3dyaXRlX2xpc3Qp KSB7Cj4gLQkJCURSTV9FUlJPUigiaW52YWxpZCBmbHVzaGluZyAlcCAoYSAlZCB3ICV4IGd3bCAl ZClcbiIsCj4gLQkJCQkgIG9iaiwKPiAtCQkJCSAgb2JqLT5hY3RpdmUsCj4gLQkJCQkgIG9iai0+ YmFzZS53cml0ZV9kb21haW4sCj4gLQkJCQkgICFsaXN0X2VtcHR5KCZvYmotPmdwdV93cml0ZV9s aXN0KSk7Cj4gLQkJCWVycisrOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KG9iaiwgJmRldl9wcml2LT5tbS5ncHVfd3JpdGVfbGlzdCwgZ3B1X3dyaXRlX2xpc3QpIHsK PiAtCQlpZiAob2JqLT5iYXNlLmRldiAhPSBkZXYgfHwKPiAtCQkgICAgIWF0b21pY19yZWFkKCZv YmotPmJhc2UucmVmY291bnQucmVmY291bnQpKSB7Cj4gLQkJCURSTV9FUlJPUigiZnJlZWQgZ3B1 IHdyaXRlICVwXG4iLCBvYmopOwo+IC0JCQllcnIrKzsKPiAtCQkJYnJlYWs7Cj4gLQkJfSBlbHNl IGlmICghb2JqLT5hY3RpdmUgfHwKPiAtCQkJICAgKG9iai0+YmFzZS53cml0ZV9kb21haW4gJiBJ OTE1X0dFTV9HUFVfRE9NQUlOUykgPT0gMCkgewo+IC0JCQlEUk1fRVJST1IoImludmFsaWQgZ3B1 IHdyaXRlICVwIChhICVkIHcgJXgpXG4iLAo+IC0JCQkJICBvYmosCj4gLQkJCQkgIG9iai0+YWN0 aXZlLAo+IC0JCQkJICBvYmotPmJhc2Uud3JpdGVfZG9tYWluKTsKPiAtCQkJZXJyKys7Cj4gLQkJ fQo+IC0JfQo+Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgJmk5MTVfZ3R0X3ZtLT5pbmFj dGl2ZV9saXN0LCBsaXN0KSB7Cj4gLQkJaWYgKG9iai0+YmFzZS5kZXYgIT0gZGV2IHx8Cj4gLQkJ ICAgICFhdG9taWNfcmVhZCgmb2JqLT5iYXNlLnJlZmNvdW50LnJlZmNvdW50KSkgewo+IC0JCQlE Uk1fRVJST1IoImZyZWVkIGluYWN0aXZlICVwXG4iLCBvYmopOwo+IC0JCQllcnIrKzsKPiAtCQkJ YnJlYWs7Cj4gLQkJfSBlbHNlIGlmIChvYmotPnBpbl9jb3VudCB8fCBvYmotPmFjdGl2ZSB8fAo+ IC0JCQkgICAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKSkg ewo+IC0JCQlEUk1fRVJST1IoImludmFsaWQgaW5hY3RpdmUgJXAgKHAgJWQgYSAlZCB3ICV4KVxu IiwKPiAtCQkJCSAgb2JqLAo+IC0JCQkJICBvYmotPnBpbl9jb3VudCwgb2JqLT5hY3RpdmUsCj4g LQkJCQkgIG9iai0+YmFzZS53cml0ZV9kb21haW4pOwo+IC0JCQllcnIrKzsKPiArCQlsaXN0X2Zv cl9lYWNoX2VudHJ5KG9iaiwgJnJpbmctPmFjdGl2ZV9saXN0LCByaW5nX2xpc3RbcmluZy0+aWRd KSB7Cj4gKwkJCWlmIChvYmotPmJhc2UuZGV2ICE9IGRldiB8fAo+ICsJCQkgICAgIWF0b21pY19y ZWFkKCZvYmotPmJhc2UucmVmY291bnQucmVmY291bnQpKSB7Cj4gKwkJCQlEUk1fRVJST1IoIiVz OiBmcmVlZCBhY3RpdmUgb2JqICVwXG4iLAo+ICsJCQkJCSAgcmluZy0+bmFtZSwgb2JqKTsKPiAr CQkJCWVycisrOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0gZWxzZSBpZiAoIW9iai0+YWN0aXZlIHx8 Cj4gKwkJCQkgICBvYmotPmxhc3RfcmVhZF9yZXFbcmluZy0+aWRdID09IE5VTEwpIHsKPiArCQkJ CURSTV9FUlJPUigiJXM6IGludmFsaWQgYWN0aXZlIG9iaiAlcFxuIiwKPiArCQkJCQkgIHJpbmct Pm5hbWUsIG9iaik7Cj4gKwkJCQllcnIrKzsKPiArCQkJfSBlbHNlIGlmIChvYmotPmJhc2Uud3Jp dGVfZG9tYWluKSB7Cj4gKwkJCQlEUk1fRVJST1IoIiVzOiBpbnZhbGlkIHdyaXRlIG9iaiAlcCAo dyAleClcbiIsCj4gKwkJCQkJICByaW5nLT5uYW1lLAo+ICsJCQkJCSAgb2JqLCBvYmotPmJhc2Uu d3JpdGVfZG9tYWluKTsKPiArCQkJCWVycisrOwo+ICsJCQl9IGVsc2UgaWYgKGxpc3RfZW1wdHko Jm9iai0+bGFzdF9yZWFkX3JlcVtyaW5nLT5pZF0tPmxpc3QpKSB7Cj4gKwkJCQlEUk1fRVJST1Io IiVzOiBpbnZhbGlkIHJlcXVlc3QgZm9yIG9iaiAlcFxuIiwKPiArCQkJCQkgIHJpbmctPm5hbWUs IG9iaik7Cj4gKwkJCQllcnIrKzsKPiArCQkJfQo+ICAgCQl9Cj4gICAJfQo+Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCj4gaW5kZXggYTk4Mjg0OWE1ZWRkLi5mYTVkNTNmMTI0 MGYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBAQCAtMTkyLDE1 ICsxOTIsMjAgQEAgc3RhdGljIHZvaWQgcHJpbnRfZXJyb3JfYnVmZmVycyhzdHJ1Y3QgZHJtX2k5 MTVfZXJyb3Jfc3RhdGVfYnVmICptLAo+ICAgCQkJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9idWZm ZXIgKmVyciwKPiAgIAkJCQlpbnQgY291bnQpCj4gICB7Cj4gKwlpbnQgaTsKPiArCj4gICAJZXJy X3ByaW50ZihtLCAiICAlcyBbJWRdOlxuIiwgbmFtZSwgY291bnQpOwo+Cj4gICAJd2hpbGUgKGNv dW50LS0pIHsKPiAtCQllcnJfcHJpbnRmKG0sICIgICAgJTA4eCAlOHUgJTAyeCAlMDJ4ICV4ICV4 IiwKPiArCQllcnJfcHJpbnRmKG0sICIgICAgJTA4eCAlOHUgJTAyeCAlMDJ4IFsgIiwKPiAgIAkJ CSAgIGVyci0+Z3R0X29mZnNldCwKPiAgIAkJCSAgIGVyci0+c2l6ZSwKPiAgIAkJCSAgIGVyci0+ cmVhZF9kb21haW5zLAo+IC0JCQkgICBlcnItPndyaXRlX2RvbWFpbiwKPiAtCQkJICAgZXJyLT5y c2Vxbm8sIGVyci0+d3NlcW5vKTsKPiArCQkJICAgZXJyLT53cml0ZV9kb21haW4pOwo+ICsJCWZv ciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKQo+ICsJCQllcnJfcHJpbnRmKG0sICIl MDJ4ICIsIGVyci0+cnNlcW5vW2ldKTsKPiArCj4gKwkJZXJyX3ByaW50ZihtLCAiXSAlMDJ4Iiwg ZXJyLT53c2Vxbm8pOwo+ICAgCQllcnJfcHV0cyhtLCBwaW5fZmxhZyhlcnItPnBpbm5lZCkpOwo+ ICAgCQllcnJfcHV0cyhtLCB0aWxpbmdfZmxhZyhlcnItPnRpbGluZykpOwo+ICAgCQllcnJfcHV0 cyhtLCBkaXJ0eV9mbGFnKGVyci0+ZGlydHkpKTsKPiBAQCAtNjY3LDEwICs2NzIsMTIgQEAgc3Rh dGljIHZvaWQgY2FwdHVyZV9ibyhzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfYnVmZmVyICplcnIsCj4g ICAJCSAgICAgICBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqID0gdm1hLT5vYmo7Cj4gKwlpbnQgaTsKPgo+ICAgCWVyci0+c2l6 ZSA9IG9iai0+YmFzZS5zaXplOwo+ICAgCWVyci0+bmFtZSA9IG9iai0+YmFzZS5uYW1lOwo+IC0J ZXJyLT5yc2Vxbm8gPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmotPmxhc3RfcmVhZF9y ZXEpOwo+ICsJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspCj4gKwkJZXJyLT5y c2Vxbm9baV0gPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmotPmxhc3RfcmVhZF9yZXFb aV0pOwo+ICAgCWVyci0+d3NlcW5vID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8ob2JqLT5s YXN0X3dyaXRlX3JlcSk7Cj4gICAJZXJyLT5ndHRfb2Zmc2V0ID0gdm1hLT5ub2RlLnN0YXJ0Owo+ ICAgCWVyci0+cmVhZF9kb21haW5zID0gb2JqLT5iYXNlLnJlYWRfZG9tYWluczsKPiBAQCAtNjgz LDggKzY5MCw4IEBAIHN0YXRpYyB2b2lkIGNhcHR1cmVfYm8oc3RydWN0IGRybV9pOTE1X2Vycm9y X2J1ZmZlciAqZXJyLAo+ICAgCWVyci0+ZGlydHkgPSBvYmotPmRpcnR5Owo+ICAgCWVyci0+cHVy Z2VhYmxlID0gb2JqLT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRDsKPiAgIAllcnItPnVzZXJw dHIgPSBvYmotPnVzZXJwdHIubW0gIT0gTlVMTDsKPiAtCWVyci0+cmluZyA9IG9iai0+bGFzdF9y ZWFkX3JlcSA/Cj4gLQkJCWk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3JlYWRf cmVxKS0+aWQgOiAtMTsKPiArCWVyci0+cmluZyA9IG9iai0+bGFzdF93cml0ZV9yZXEgPwo+ICsJ CQlpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF93cml0ZV9yZXEpLT5pZCA6IC0x Owo+ICAgCWVyci0+Y2FjaGVfbGV2ZWwgPSBvYmotPmNhY2hlX2xldmVsOwo+ICAgfQo+Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4IDBlZmIxOWE5YjlhNS4uMWEzNzU2 ZTZiZWE0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IEBAIC05Njc0 LDcgKzk2NzQsNyBAQCBzdGF0aWMgYm9vbCB1c2VfbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcsCj4gICAJZWxzZSBpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKQo+ICAgCQly ZXR1cm4gdHJ1ZTsKPiAgIAllbHNlCj4gLQkJcmV0dXJuIHJpbmcgIT0gaTkxNV9nZW1fcmVxdWVz dF9nZXRfcmluZyhvYmotPmxhc3RfcmVhZF9yZXEpOwo+ICsJCXJldHVybiByaW5nICE9IGk5MTVf Z2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3dyaXRlX3JlcSk7Cj4gICB9CgpXaHkgdGhp cz8KCj4gICBzdGF0aWMgdm9pZCBza2xfZG9fbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjKQo+IEBAIC05OTc3LDcgKzk5NzcsNyBAQCBzdGF0aWMgaW50IGludGVsX2NydGNf cGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgIAl9IGVsc2UgaWYgKElTX0lWWUJS SURHRShkZXYpIHx8IElTX0hBU1dFTEwoZGV2KSkgewo+ICAgCQlyaW5nID0gJmRldl9wcml2LT5y aW5nW0JDU107Cj4gICAJfSBlbHNlIGlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA3KSB7Cj4g LQkJcmluZyA9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3JlYWRfcmVxKTsK PiArCQlyaW5nID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfcmluZyhvYmotPmxhc3Rfd3JpdGVfcmVx KTsKPiAgIAkJaWYgKHJpbmcgPT0gTlVMTCB8fCByaW5nLT5pZCAhPSBSQ1MpCj4gICAJCQlyaW5n ID0gJmRldl9wcml2LT5yaW5nW0JDU107Cj4gICAJfSBlbHNlIHsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gaW5kZXggMWQwOGQ4ZjkxNDlkLi5hNGEyNWM5MzJiMGIg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gQEAgLTEyOSw2 ICsxMjksNyBAQCBzdHJ1Y3QgIGludGVsX2VuZ2luZV9jcyB7Cj4gICAJCVZDUzIKPiAgIAl9IGlk Owo+ICAgI2RlZmluZSBJOTE1X05VTV9SSU5HUyA1Cj4gKyNkZWZpbmUgSTkxNV9NQVhfUklOR19C SVQgMwo+ICAgI2RlZmluZSBMQVNUX1VTRVJfUklORyAoVkVDUyArIDEpCj4gICAJdTMyCQltbWlv X2Jhc2U7Cj4gICAJc3RydWN0CQlkcm1fZGV2aWNlICpkZXY7CgpSZWdhcmRzLAoKVHZydGtvCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK