From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 37/38] drm/i915: Track pinned VMA Date: Wed, 8 Jun 2016 12:08:40 +0200 Message-ID: <20160608100840.GB3363@phenom.ffwll.local> References: <1464972953-2726-1-git-send-email-chris@chris-wilson.co.uk> <1464972953-2726-38-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id E86C46E965 for ; Wed, 8 Jun 2016 10:08:46 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id k184so1679178wme.2 for ; Wed, 08 Jun 2016 03:08:46 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1464972953-2726-38-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 Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdW4gMDMsIDIwMTYgYXQgMDU6NTU6NTJQTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFRyZWF0IHRoZSBWTUEgYXMgdGhlIHByaW1hcnkgc3RydWN0IHJlc3BvbnNpYmxlIGZv ciB0cmFja2luZyBiaW5kaW5ncwo+IGludG8gdGhlIEdQVSdzIFZNLiBUaGF0IGlzIHdlIHdhbnQg dG8gdHJlYXQgdGhlIFZNQSByZXR1cm5lZCBhZnRlciB3ZQo+IHBpbiBhbiBvYmplY3QgaW50byB0 aGUgVk0gYXMgdGhlIGNvb2tpZSB3ZSBob2xkIGFuZCBldmVudHVhbGx5IHJlbGVhc2UKPiB3aGVu IHVucGlubmluZy4gRG9pbmcgc28gZWxpbWluYXRlcyB0aGUgYW1iaWd1aXR5IGluIHBpbm5pbmcg dGhlIG9iamVjdAo+IGFuZCB0aGVuIHNlYXJjaGluZyBmb3IgdGhlIHJlbGV2YW50IHBpbiBsYXRl ci4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KCkltbyB3b3VsZCBiZSBnb29kIHRvIHNwbGl0IHRoaXMgdXAgYSBiaXQgbW9yZSwgbGlr ZSB5b3UgYWxyZWFkeSBleHRyYWN0ZWQKdGhlIG92ZXJsYXkgcGFydHMuIEkga25vdyB0aGVyZSdz IHByb2JhYmx5IGEgZmV3IGNoaWNrZW4mZWdncyBpbiBoZXJlLCBidXQKc3RpbGwgaW1vIG5lZWRl ZC4KLURhbmllbAoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMg ICAgICAgICAgfCAgNzUgKysrKystLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oICAgICAgICAgICAgICB8ICA2NCArKystLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYyAgICAgICAgICAgICAgfCAyMDAgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyAgICAgIHwgIDQzICsr Ky0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgICB8ICA2 MCArKysrLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9mZW5jZS5jICAgICAg ICB8ICA2NCArKysrLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMg ICAgICAgICAgfCAgNTggKysrKystLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmggICAgICAgICAgfCAgMTQgLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f cmVuZGVyX3N0YXRlLmMgfCAgMzEgKystLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fcmVuZGVyX3N0YXRlLmggfCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fcmVxdWVzdC5jICAgICAgfCAgMTAgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fcmVxdWVzdC5oICAgICAgfCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fc3RvbGVuLmMgICAgICAgfCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fdGlsaW5nLmMgICAgICAgfCAgNDIgKysrLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ3B1X2Vycm9yLmMgICAgICAgIHwgIDU1ICsrKy0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYyAgIHwgIDI4ICsrLS0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jICAgICAgICAgfCAgNTcgKysrKystLS0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgICAgICAgICAgfCAgIDUgKy0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZmJjLmMgICAgICAgICAgICAgfCAgIDIgKy0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYyAgICAgICAgICAgfCAgMTkgKystCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYyAgICAgIHwgIDI5ICsrLS0KPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgICAgICAgICAgICAgfCAxMTMgKysrKysrKystLS0t LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX292ZXJsYXkuYyAgICAgICAgIHwgIDQ0 ICsrKy0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgICAgICB8 IDE5NCArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yaW5nYnVmZmVyLmggICAgICB8ICAyMCArLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfc3ByaXRlLmMgICAgICAgICAgfCAgIDggKy0KPiAgMjYgZmlsZXMgY2hhbmdlZCwgNTQ5 IGluc2VydGlvbnMoKyksIDY5MiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RlYnVnZnMuYwo+IGluZGV4IDQ4NWZjMjM4OTNkNi4uOTM4YTk1ZGY4YTExIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBj aGFyIGdldF90aWxpbmdfZmxhZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAK PiAgc3RhdGljIGNoYXIgZ2V0X2dsb2JhbF9mbGFnKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCj4gIHsKPiAtCXJldHVybiBpOTE1X2dlbV9vYmpfdG9fZ2d0dChvYmopID8gJ2cnIDog JyAnOwo+ICsJcmV0dXJuIGk5MTVfZ2VtX29iamVjdF90b19nZ3R0KG9iaiwgTlVMTCkgPyAgJ2cn IDogJyAnOwo+ICB9Cj4gIAo+ICBzdGF0aWMgY2hhciBnZXRfcGluX21hcHBlZF9mbGFnKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gQEAgLTI3OCw3ICsyNzgsNyBAQCBzdGF0aWMg aW50IGk5MTVfZ2VtX3N0b2xlbl9saXN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpk YXRhKQo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7Cj4gIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAtCXU2NCB0b3RhbF9vYmpfc2l6ZSwg dG90YWxfZ3R0X3NpemU7Cj4gKwl1NjQgdG90YWxfb2JqX3NpemU7Cj4gIAlMSVNUX0hFQUQoc3Rv bGVuKTsKPiAgCWludCBjb3VudCwgcmV0Owo+ICAKPiBAQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRp YyBpbnQgaTkxNV9nZW1fc3RvbGVuX2xpc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQg KmRhdGEpCj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JdG90YWxfb2JqX3Np emUgPSB0b3RhbF9ndHRfc2l6ZSA9IGNvdW50ID0gMDsKPiArCXRvdGFsX29ial9zaXplID0gY291 bnQgPSAwOwo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0uYm91bmRf bGlzdCwgZ2xvYmFsX2xpc3QpIHsKPiAgCQlpZiAob2JqLT5zdG9sZW4gPT0gTlVMTCkKPiAgCQkJ Y29udGludWU7Cj4gQEAgLTI5NCw3ICsyOTQsNiBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX3N0b2xl bl9saXN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAJCWxpc3RfYWRk KCZvYmotPm9ial9leGVjX2xpbmssICZzdG9sZW4pOwo+ICAKPiAgCQl0b3RhbF9vYmpfc2l6ZSAr PSBvYmotPmJhc2Uuc2l6ZTsKPiAtCQl0b3RhbF9ndHRfc2l6ZSArPSBpOTE1X2dlbV9vYmpfdG90 YWxfZ2d0dF9zaXplKG9iaik7Cj4gIAkJY291bnQrKzsKPiAgCX0KPiAgCWxpc3RfZm9yX2VhY2hf ZW50cnkob2JqLCAmZGV2X3ByaXYtPm1tLnVuYm91bmRfbGlzdCwgZ2xvYmFsX2xpc3QpIHsKPiBA QCAtMzE3LDggKzMxNiw4IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fc3RvbGVuX2xpc3RfaW5mbyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gIAl9Cj4gIAltdXRleF91bmxvY2soJmRl di0+c3RydWN0X211dGV4KTsKPiAgCj4gLQlzZXFfcHJpbnRmKG0sICJUb3RhbCAlZCBvYmplY3Rz LCAlbGx1IGJ5dGVzLCAlbGx1IEdUVCBzaXplXG4iLAo+IC0JCSAgIGNvdW50LCB0b3RhbF9vYmpf c2l6ZSwgdG90YWxfZ3R0X3NpemUpOwo+ICsJc2VxX3ByaW50ZihtLCAiVG90YWwgJWQgb2JqZWN0 cywgJWxsdSBieXRlc1xuIiwKPiArCQkgICBjb3VudCwgdG90YWxfb2JqX3NpemUpOwo+ICAJcmV0 dXJuIDA7Cj4gIH0KPiAgCj4gQEAgLTMyNyw3ICszMjYsNyBAQCBzdGF0aWMgaW50IGk5MTVfZ2Vt X3N0b2xlbl9saXN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAJCXNp emUgKz0gaTkxNV9nZW1fb2JqX3RvdGFsX2dndHRfc2l6ZShvYmopOyBcCj4gIAkJKytjb3VudDsg XAo+ICAJCWlmIChvYmotPm1hcF9hbmRfZmVuY2VhYmxlKSB7IFwKPiAtCQkJbWFwcGFibGVfc2l6 ZSArPSBpOTE1X2dlbV9vYmpfZ2d0dF9zaXplKG9iaik7IFwKPiArCQkJbWFwcGFibGVfc2l6ZSAr PSBvYmotPmJhc2Uuc2l6ZTsgXAo+ICAJCQkrK21hcHBhYmxlX2NvdW50OyBcCj4gIAkJfSBcCj4g IAl9IFwKPiBAQCAtNDUxLDEwICs0NTAsMTAgQEAgc3RhdGljIHZvaWQgcHJpbnRfY29udGV4dF9z dGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCj4gIAo+ICAjZGVmaW5lIGNvdW50X3ZtYXMobGlzdCwg bWVtYmVyKSBkbyB7IFwKPiAgCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCBsaXN0LCBtZW1iZXIp IHsgXAo+IC0JCXNpemUgKz0gaTkxNV9nZW1fb2JqX3RvdGFsX2dndHRfc2l6ZSh2bWEtPm9iaik7 IFwKPiArCQlzaXplICs9IHZtYS0+c2l6ZTsgXAo+ICAJCSsrY291bnQ7IFwKPiAgCQlpZiAodm1h LT5vYmotPm1hcF9hbmRfZmVuY2VhYmxlKSB7IFwKPiAtCQkJbWFwcGFibGVfc2l6ZSArPSBpOTE1 X2dlbV9vYmpfZ2d0dF9zaXplKHZtYS0+b2JqKTsgXAo+ICsJCQltYXBwYWJsZV9zaXplICs9IHZt YS0+c2l6ZTsgXAo+ICAJCQkrK21hcHBhYmxlX2NvdW50OyBcCj4gIAkJfSBcCj4gIAl9IFwKPiBA QCAtNTE3LDExICs1MTYsMTEgQEAgc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfaW5mbyhzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQqIGRhdGEpCj4gIAlzaXplID0gY291bnQgPSBtYXBwYWJsZV9z aXplID0gbWFwcGFibGVfY291bnQgPSAwOwo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZk ZXZfcHJpdi0+bW0uYm91bmRfbGlzdCwgZ2xvYmFsX2xpc3QpIHsKPiAgCQlpZiAob2JqLT5mYXVs dF9tYXBwYWJsZSkgewo+IC0JCQlzaXplICs9IGk5MTVfZ2VtX29ial9nZ3R0X3NpemUob2JqKTsK PiArCQkJc2l6ZSArPSBvYmotPmJhc2Uuc2l6ZTsKPiAgCQkJKytjb3VudDsKPiAgCQl9Cj4gIAkJ aWYgKG9iai0+cGluX2Rpc3BsYXkpIHsKPiAtCQkJbWFwcGFibGVfc2l6ZSArPSBpOTE1X2dlbV9v YmpfZ2d0dF9zaXplKG9iaik7Cj4gKwkJCW1hcHBhYmxlX3NpemUgKz0gb2JqLT5iYXNlLnNpemU7 Cj4gIAkJCSsrbWFwcGFibGVfY291bnQ7Cj4gIAkJfQo+ICAJCWlmIChvYmotPm1hZHYgPT0gSTkx NV9NQURWX0RPTlRORUVEKSB7Cj4gQEAgLTU4OSwzMCArNTg4LDI5IEBAIHN0YXRpYyBpbnQgaTkx NV9nZW1fZ3R0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAJdWludHB0 cl90IGxpc3QgPSAodWludHB0cl90KSBub2RlLT5pbmZvX2VudC0+ZGF0YTsKPiAgCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gIAlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+IC0JdTY0IHRvdGFsX29ial9zaXplLCB0b3RhbF9n dHRfc2l6ZTsKPiArCXU2NCB0b3RhbF9vYmpfc2l6ZTsKPiAgCWludCBjb3VudCwgcmV0Owo+ICAK PiAgCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXRvdGFsX29ial9zaXplID0gdG90 YWxfZ3R0X3NpemUgPSBjb3VudCA9IDA7Cj4gKwl0b3RhbF9vYmpfc2l6ZSA9IGNvdW50ID0gMDsK PiAgCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmZGV2X3ByaXYtPm1tLmJvdW5kX2xpc3QsIGds b2JhbF9saXN0KSB7Cj4gLQkJaWYgKGxpc3QgPT0gUElOTkVEX0xJU1QgJiYgIWk5MTVfZ2VtX29i al9pc19waW5uZWQob2JqKSkKPiArCQlpZiAobGlzdCA9PSBQSU5ORURfTElTVCAmJiAhb2JqLT5w aW5fZGlzcGxheSkKPiAgCQkJY29udGludWU7Cj4gIAo+ICAJCXNlcV9wdXRzKG0sICIgICAiKTsK PiAgCQlkZXNjcmliZV9vYmoobSwgb2JqKTsKPiAgCQlzZXFfcHV0YyhtLCAnXG4nKTsKPiAgCQl0 b3RhbF9vYmpfc2l6ZSArPSBvYmotPmJhc2Uuc2l6ZTsKPiAtCQl0b3RhbF9ndHRfc2l6ZSArPSBp OTE1X2dlbV9vYmpfdG90YWxfZ2d0dF9zaXplKG9iaik7Cj4gIAkJY291bnQrKzsKPiAgCX0KPiAg Cj4gIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgCj4gLQlzZXFfcHJpbnRm KG0sICJUb3RhbCAlZCBvYmplY3RzLCAlbGx1IGJ5dGVzLCAlbGx1IEdUVCBzaXplXG4iLAo+IC0J CSAgIGNvdW50LCB0b3RhbF9vYmpfc2l6ZSwgdG90YWxfZ3R0X3NpemUpOwo+ICsJc2VxX3ByaW50 ZihtLCAiVG90YWwgJWQgb2JqZWN0cywgJWxsdSBieXRlc1xuIiwKPiArCQkgICBjb3VudCwgdG90 YWxfb2JqX3NpemUpOwo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gQEAgLTIwNzUsMzggKzIwNzMs MzUgQEAgc3RhdGljIHZvaWQgaTkxNV9kdW1wX2xyY19vYmooc3RydWN0IHNlcV9maWxlICptLAo+ ICAJCQkgICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICAJCQkgICAgICBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpjdHhfb2JqID0gY3R4LT5lbmdpbmVbZW5naW5lLT5pZF0uc3RhdGU7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gY3R4LT5lbmdpbmVbZW5naW5lLT5pZF0uc3Rh dGU7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYSA9IGN0eC0+ZW5naW5lW2VuZ2luZS0+aWRdLnZt YTsKPiAgCXN0cnVjdCBwYWdlICpwYWdlOwo+IC0JdWludDMyX3QgKnJlZ19zdGF0ZTsKPiAgCWlu dCBqOwo+IC0JdW5zaWduZWQgbG9uZyBnZ3R0X29mZnNldCA9IDA7Cj4gIAo+ICAJc2VxX3ByaW50 ZihtLCAiQ09OVEVYVDogJXMgJXVcbiIsIGVuZ2luZS0+bmFtZSwgY3R4LT5od19pZCk7Cj4gLQo+ IC0JaWYgKGN0eF9vYmogPT0gTlVMTCkgewo+IC0JCXNlcV9wdXRzKG0sICJcdE5vdCBhbGxvY2F0 ZWRcbiIpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlpZiAoIWk5MTVfZ2VtX29ial9nZ3R0 X2JvdW5kKGN0eF9vYmopKQo+ICsJaWYgKHZtYSA9PSBOVUxMKSB7Cj4gIAkJc2VxX3B1dHMobSwg Ilx0Tm90IGJvdW5kIGluIEdHVFRcbiIpOwo+IC0JZWxzZQo+IC0JCWdndHRfb2Zmc2V0ID0gaTkx NV9nZW1fb2JqX2dndHRfb2Zmc2V0KGN0eF9vYmopOwo+ICsJfSBlbHNlIHsKPiArCQlzZXFfcHJp bnRmKG0sICJcdEJvdW5kIGluIEdHVFQgYXQgJXhcbiIsCj4gKwkJCSAgIGxvd2VyXzMyX2JpdHMo dm1hLT5ub2RlLnN0YXJ0KSk7Cj4gKwl9Cj4gIAo+IC0JaWYgKGk5MTVfZ2VtX29iamVjdF9nZXRf cGFnZXMoY3R4X29iaikpIHsKPiAtCQlzZXFfcHV0cyhtLCAiXHRGYWlsZWQgdG8gZ2V0IHBhZ2Vz IGZvciBjb250ZXh0IG9iamVjdFxuIik7Cj4gKwlpZiAoaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdl cyhvYmopKSB7Cj4gKwkJc2VxX3B1dHMobSwgIlx0RmFpbGVkIHRvIGdldCBwYWdlcyBmb3IgY29u dGV4dCBvYmplY3RcblxuIik7Cj4gIAkJcmV0dXJuOwo+ICAJfQo+ICAKPiAtCXBhZ2UgPSBpOTE1 X2dlbV9vYmplY3RfZ2V0X3BhZ2UoY3R4X29iaiwgTFJDX1NUQVRFX1BOKTsKPiAtCWlmICghV0FS Tl9PTihwYWdlID09IE5VTEwpKSB7Cj4gLQkJcmVnX3N0YXRlID0ga21hcF9hdG9taWMocGFnZSk7 Cj4gLQo+ICsJcGFnZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShvYmosIExSQ19TVEFURV9Q Tik7Cj4gKwlpZiAocGFnZSAhPSBOVUxMKSB7Cj4gKwkJdWludDMyX3QgKnJlZ19zdGF0ZSA9IGtt YXBfYXRvbWljKHBhZ2UpOwo+ICAJCWZvciAoaiA9IDA7IGogPCAweDYwMCAvIHNpemVvZih1MzIp IC8gNDsgaiArPSA0KSB7Cj4gLQkJCXNlcV9wcmludGYobSwgIlx0WzB4JTA4bHhdIDB4JTA4eCAw eCUwOHggMHglMDh4IDB4JTA4eFxuIiwKPiAtCQkJCSAgIGdndHRfb2Zmc2V0ICsgNDA5NiArIChq ICogNCksCj4gLQkJCQkgICByZWdfc3RhdGVbal0sIHJlZ19zdGF0ZVtqICsgMV0sCj4gLQkJCQkg ICByZWdfc3RhdGVbaiArIDJdLCByZWdfc3RhdGVbaiArIDNdKTsKPiArCQkJc2VxX3ByaW50Ziht LAo+ICsJCQkJICAgIlx0WzB4JTA4eF0gMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAo+ ICsJCQkJICAgaiAqIDQsCj4gKwkJCQkgICByZWdfc3RhdGVbal0sCj4gKwkJCQkgICByZWdfc3Rh dGVbaiArIDFdLAo+ICsJCQkJICAgcmVnX3N0YXRlW2ogKyAyXSwKPiArCQkJCSAgIHJlZ19zdGF0 ZVtqICsgM10pOwo+ICAJCX0KPiAgCQlrdW5tYXBfYXRvbWljKHJlZ19zdGF0ZSk7Cj4gIAl9Cj4g QEAgLTMyMTAsNyArMzIwNSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9zZW1hcGhvcmVfc3RhdHVzKHN0 cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ICAJCXN0cnVjdCBwYWdlICpwYWdlOwo+ ICAJCXVpbnQ2NF90ICpzZXFubzsKPiAgCj4gLQkJcGFnZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRf cGFnZShkZXZfcHJpdi0+c2VtYXBob3JlX29iaiwgMCk7Cj4gKwkJcGFnZSA9IGk5MTVfZ2VtX29i amVjdF9nZXRfcGFnZShkZXZfcHJpdi0+c2VtYXBob3JlX3ZtYS0+b2JqLCAwKTsKPiAgCj4gIAkJ c2Vxbm8gPSAodWludDY0X3QgKilrbWFwX2F0b21pYyhwYWdlKTsKPiAgCQlmb3JfZWFjaF9lbmdp bmVfaWQoZW5naW5lLCBkZXZfcHJpdiwgaWQpIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBp bmRleCA3NzU2NGYzNzg3NzEuLmVkOTY4ZGViMzZhYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAo+IEBAIC04ODAsOCArODgwLDggQEAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgewo+ICAK PiAgCXN0cnVjdCBpbnRlbF9jb250ZXh0IHsKPiAgCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqc3RhdGU7Cj4gKwkJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gIAkJc3RydWN0IGludGVsX3Jp bmcgKnJpbmc7Cj4gLQkJc3RydWN0IGk5MTVfdm1hICpscmNfdm1hOwo+ICAJCXVpbnQzMl90ICps cmNfcmVnX3N0YXRlOwo+ICAJCXU2NCBscmNfZGVzYzsKPiAgCQlpbnQgcGluX2NvdW50Owo+IEBA IC0xNzM2LDcgKzE3MzYsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gIAlzdHJ1Y3Qg cGNpX2RldiAqYnJpZGdlX2RldjsKPiAgCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICprZXJuZWxf Y29udGV4dDsKPiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgZW5naW5lW0k5MTVfTlVNX0VOR0lO RVNdOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnNlbWFwaG9yZV9vYmo7Cj4gKwlz dHJ1Y3QgaTkxNV92bWEgKnNlbWFwaG9yZV92bWE7Cj4gIAl1aW50MzJfdCBuZXh0X3NlcW5vOwo+ ICAKPiAgCXN0cnVjdCBkcm1fZG1hX2hhbmRsZSAqc3RhdHVzX3BhZ2VfZG1haDsKPiBAQCAtMjk5 Niw3ICsyOTk2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGk5MTVfdm1hX3VucGluKHN0cnVjdCBp OTE1X3ZtYSAqdm1hKQo+ICAJX19pOTE1X3ZtYV91bnBpbih2bWEpOwo+ICB9Cj4gIAo+IC1pbnQg X19tdXN0X2NoZWNrCj4gK3N0cnVjdCBpOTE1X3ZtYSAqIF9fbXVzdF9jaGVjawo+ICBpOTE1X2dl bV9vYmplY3RfZ2d0dF9waW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgCQkJ IGNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldywKPiAgCQkJIHVpbnQ2NF90IHNpemUs Cj4gQEAgLTMxNzQsMTIgKzMxNzQsMTEgQEAgaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9t YWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gIAkJCQkgIGJvb2wgd3JpdGUp Owo+ICBpbnQgX19tdXN0X2NoZWNrCj4gIGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFp bihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIHdyaXRlKTsKPiAtaW50IF9f bXVzdF9jaGVjawo+ICtzdHJ1Y3QgaTkxNV92bWEgKiBfX211c3RfY2hlY2sKPiAgaTkxNV9nZW1f b2JqZWN0X3Bpbl90b19kaXNwbGF5X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCj4gIAkJCQkgICAgIHUzMiBhbGlnbm1lbnQsCj4gIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBp OTE1X2dndHRfdmlldyAqdmlldyk7Cj4gLXZvaWQgaTkxNV9nZW1fb2JqZWN0X3VucGluX2Zyb21f ZGlzcGxheV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkJCSAg ICAgIGNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldyk7Cj4gK3ZvaWQgaTkxNV9nZW1f b2JqZWN0X3VucGluX2Zyb21fZGlzcGxheV9wbGFuZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSk7Cj4g IGludCBpOTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAgCQkJCWludCBhbGlnbik7Cj4gIGludCBpOTE1X2dlbV9vcGVuKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4gQEAgLTMyMDAsNjMgKzMx OTksMzQgQEAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICppOTE1X2dlbV9wcmltZV9pbXBvcnQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiAgc3RydWN0IGRtYV9idWYgKmk5MTVfZ2VtX3ByaW1lX2V4 cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnZW1fb2JqLCBpbnQgZmxhZ3MpOwo+ICAKPiAtdTY0IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNl dF92aWV3KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvLAo+IC0JCQkJICBjb25zdCBzdHJ1 Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpOwo+IC11NjQgaTkxNV9nZW1fb2JqX29mZnNldChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbywKPiAtCQkJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0pOwo+IC1zdGF0aWMgaW5saW5lIHU2NAo+IC1pOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm8pCj4gLXsKPiAtCXJldHVybiBpOTE1X2dlbV9v YmpfZ2d0dF9vZmZzZXRfdmlldyhvLCAmaTkxNV9nZ3R0X3ZpZXdfbm9ybWFsKTsKPiAtfQo+IC0K PiAtYm9vbCBpOTE1X2dlbV9vYmpfZ2d0dF9ib3VuZF92aWV3KHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvLAo+IC0JCQkJICBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpOwo+ IC1ib29sIGk5MTVfZ2VtX29ial9ib3VuZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbywK PiAtCQkJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pOwo+IC0KPiAgc3RydWN0IGk5MTVf dm1hICoKPiAgaTkxNV9nZW1fb2JqX3RvX3ZtYShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAo+IC0JCSAgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSk7Cj4gLXN0cnVjdCBp OTE1X3ZtYSAqCj4gLWk5MTVfZ2VtX29ial90b19nZ3R0X3ZpZXcoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiAtCQkJICBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcp Owo+ICsJCSAgICAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gKwkJICAgICBjb25z dCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpOwo+ICAKPiAgc3RydWN0IGk5MTVfdm1hICoK PiAgaTkxNV9nZW1fb2JqX2xvb2t1cF9vcl9jcmVhdGVfdm1hKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCj4gLQkJCQkgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKTsKPiAt c3RydWN0IGk5MTVfdm1hICoKPiAtaTkxNV9nZW1fb2JqX2xvb2t1cF9vcl9jcmVhdGVfZ2d0dF92 bWEoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkJCSAgICAgICBjb25zdCBz dHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpOwo+IC0KPiAtc3RhdGljIGlubGluZSBzdHJ1Y3Qg aTkxNV92bWEgKgo+IC1pOTE1X2dlbV9vYmpfdG9fZ2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQo+IC17Cj4gLQlyZXR1cm4gaTkxNV9nZW1fb2JqX3RvX2dndHRfdmlldyhvYmos ICZpOTE1X2dndHRfdmlld19ub3JtYWwpOwo+IC19Cj4gLWJvb2wgaTkxNV9nZW1fb2JqX2lzX3Bp bm5lZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPiArCQkJCSAgc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gKwkJCQkgIGNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmll dyAqdmlldyk7Cj4gIAo+IC0vKiBTb21lIEdHVFQgVk0gaGVscGVycyAqLwo+ICBzdGF0aWMgaW5s aW5lIHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICoKPiAgaTkxNV92bV90b19wcGd0dChzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgewo+ICAJcmV0dXJuIGNvbnRhaW5lcl9vZih2bSwgc3Ry dWN0IGk5MTVfaHdfcHBndHQsIGJhc2UpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5lIGJvb2wg aTkxNV9nZW1fb2JqX2dndHRfYm91bmQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK PiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaTkxNV92bWEgKgo+ICtpOTE1X2dlbV9vYmplY3RfdG9f Z2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQljb25zdCBzdHJ1Y3Qg aTkxNV9nZ3R0X3ZpZXcgKnZpZXcpCj4gIHsKPiAtCXJldHVybiBpOTE1X2dlbV9vYmpfZ2d0dF9i b3VuZF92aWV3KG9iaiwgJmk5MTVfZ2d0dF92aWV3X25vcm1hbCk7Cj4gKwlyZXR1cm4gaTkxNV9n ZW1fb2JqX3RvX3ZtYShvYmosICZ0b19pOTE1KG9iai0+YmFzZS5kZXYpLT5nZ3R0LmJhc2UsIHZp ZXcpOwo+ICB9Cj4gIAo+IC11bnNpZ25lZCBsb25nCj4gLWk5MTVfZ2VtX29ial9nZ3R0X3NpemUo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gLQo+IC12b2lkIGk5MTVfZ2VtX29i amVjdF9nZ3R0X3VucGluX3ZpZXcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAt CQkJCSAgICAgY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3KTsKPiAtc3RhdGljIGlu bGluZSB2b2lkCj4gLWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwo+ICtpOTE1X2dl bV9vYmplY3RfZ2d0dF9vZmZzZXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm8sCj4gKwkJ CSAgICBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpCj4gIHsKPiAtCWk5MTVfZ2Vt X29iamVjdF9nZ3R0X3VucGluX3ZpZXcob2JqLCAmaTkxNV9nZ3R0X3ZpZXdfbm9ybWFsKTsKPiAr CXJldHVybiBpOTE1X2dlbV9vYmplY3RfdG9fZ2d0dChvLCB2aWV3KS0+bm9kZS5zdGFydDsKPiAg fQo+ICAKPiAgLyogaTkxNV9nZW1fZmVuY2UuYyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ IGluZGV4IGRhZDAwODAwYWVlZi4uZTBkYjliMDJlZTA0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jCj4gQEAgLTg0OCwxNiArODQ4LDE4IEBAIGk5MTVfZ2VtX2d0dF9wd3JpdGVfZmFzdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gIAlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmRl dl9wcml2LT5nZ3R0Owo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gIAlzc2l6ZV90IHJlbWFp bjsKPiAgCWxvZmZfdCBvZmZzZXQsIHBhZ2VfYmFzZTsKPiAgCWNoYXIgX191c2VyICp1c2VyX2Rh dGE7Cj4gIAlpbnQgcGFnZV9vZmZzZXQsIHBhZ2VfbGVuZ3RoLCByZXQ7Cj4gIAo+IC0JcmV0ID0g aTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKG9iaiwgTlVMTCwKPiAtCQkJCSAgICAgICAwLCAwLAo+ ICsJdm1hID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKG9iaiwgTlVMTCwgMCwgMCwgCj4gIAkJ CQkgICAgICAgUElOX01BUFBBQkxFIHwgUElOX05PTkJMT0NLKTsKPiAtCWlmIChyZXQpCj4gKwlp ZiAoSVNfRVJSKHZtYSkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHZtYSk7Cj4gIAkJZ290byBvdXQ7 Cj4gKwl9Cj4gIAo+ICAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9i aiwgdHJ1ZSk7Cj4gIAlpZiAocmV0KQo+IEBAIC04NzAsNyArODcyLDcgQEAgaTkxNV9nZW1fZ3R0 X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAl1c2VyX2RhdGEgPSB1NjRf dG9fdXNlcl9wdHIoYXJncy0+ZGF0YV9wdHIpOwo+ICAJcmVtYWluID0gYXJncy0+c2l6ZTsKPiAg Cj4gLQlvZmZzZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSArIGFyZ3MtPm9mZnNl dDsKPiArCW9mZnNldCA9IHZtYS0+bm9kZS5zdGFydCArIGFyZ3MtPm9mZnNldDsKPiAgCj4gIAlp bnRlbF9mYl9vYmpfaW52YWxpZGF0ZShvYmosIE9SSUdJTl9HVFQpOwo+ICAKPiBAQCAtOTA1LDcg KzkwNyw3IEBAIGk5MTVfZ2VtX2d0dF9wd3JpdGVfZmFzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAo+ICBvdXRfZmx1c2g6Cj4gIAlpbnRlbF9mYl9vYmpfZmx1c2gob2JqLCBmYWxzZSwgT1JJR0lO X0dUVCk7Cj4gIG91dF91bnBpbjoKPiAtCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKG9iaik7 Cj4gKwlpOTE1X3ZtYV91bnBpbih2bWEpOwo+ICBvdXQ6Cj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4g QEAgLTEzODIsOCArMTM4NCw4IEBAIGludCBpOTE1X2dlbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqID0gdG9faW50ZWxfYm8odm1hLT52bV9wcml2YXRlX2RhdGEpOwo+ICAJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gLQlzdHJ1Y3QgaTkxNV9nZ3R0ICpn Z3R0ID0gJmRldl9wcml2LT5nZ3R0Owo+ICAJc3RydWN0IGk5MTVfZ2d0dF92aWV3IHZpZXcgPSBp OTE1X2dndHRfdmlld19ub3JtYWw7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKmdndHQ7Cj4gIAlwZ29m Zl90IHBhZ2Vfb2Zmc2V0Owo+ICAJdW5zaWduZWQgbG9uZyBwZm47Cj4gIAlpbnQgcmV0ID0gMDsK PiBAQCAtMTQxNyw3ICsxNDE5LDcgQEAgaW50IGk5MTVfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKPiAgCX0KPiAgCj4gIAkvKiBVc2Ug YSBwYXJ0aWFsIHZpZXcgaWYgdGhlIG9iamVjdCBpcyBiaWdnZXIgdGhhbiB0aGUgYXBlcnR1cmUu ICovCj4gLQlpZiAob2JqLT5iYXNlLnNpemUgPj0gZ2d0dC0+bWFwcGFibGVfZW5kICYmCj4gKwlp ZiAob2JqLT5iYXNlLnNpemUgPj0gZGV2X3ByaXYtPmdndHQubWFwcGFibGVfZW5kICYmCj4gIAkg ICAgb2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19OT05FKSB7Cj4gIAkJc3RhdGljIGNv bnN0IHVuc2lnbmVkIGludCBjaHVua19zaXplID0gMjU2OyAvLyAxIE1pQgo+ICAKPiBAQCAtMTQz Miw5ICsxNDM0LDExIEBAIGludCBpOTE1X2dlbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCj4gIAl9Cj4gIAo+ICAJLyogTm93IHBpbiBpdCBp bnRvIHRoZSBHVFQgaWYgbmVlZGVkICovCj4gLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9w aW4ob2JqLCAmdmlldywgMCwgMCwgUElOX01BUFBBQkxFKTsKPiAtCWlmIChyZXQpCj4gKwlnZ3R0 ID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKG9iaiwgJnZpZXcsIDAsIDAsIFBJTl9NQVBQQUJM RSk7Cj4gKwlpZiAoSVNfRVJSKGdndHQpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihnZ3R0KTsKPiAg CQlnb3RvIGVycl91bmxvY2s7Cj4gKwl9Cj4gIAo+ICAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3Nl dF90b19ndHRfZG9tYWluKG9iaiwgd3JpdGUpOwo+ICAJaWYgKHJldCkKPiBAQCAtMTQ0NSw4ICsx NDQ5LDcgQEAgaW50IGk5MTVfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBz dHJ1Y3Qgdm1fZmF1bHQgKnZtZikKPiAgCQlnb3RvIGVycl91bnBpbjsKPiAgCj4gIAkvKiBGaW5h bGx5LCByZW1hcCBpdCB1c2luZyB0aGUgbmV3IEdUVCBvZmZzZXQgKi8KPiAtCXBmbiA9IGdndHQt Pm1hcHBhYmxlX2Jhc2UgKwo+IC0JCWk5MTVfZ2VtX29ial9nZ3R0X29mZnNldF92aWV3KG9iaiwg JnZpZXcpOwo+ICsJcGZuID0gZGV2X3ByaXYtPmdndHQubWFwcGFibGVfYmFzZSArIGdndHQtPm5v ZGUuc3RhcnQ7Cj4gIAlwZm4gPj49IFBBR0VfU0hJRlQ7Cj4gIAo+ICAJaWYgKHVubGlrZWx5KHZp ZXcudHlwZSA9PSBJOTE1X0dHVFRfVklFV19QQVJUSUFMKSkgewo+IEBAIC0xNDg4LDcgKzE0OTEs NyBAQCBpbnQgaTkxNV9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVj dCB2bV9mYXVsdCAqdm1mKQo+ICAJCQkJCSAgICBwZm4gKyBwYWdlX29mZnNldCk7Cj4gIAl9Cj4g IGVycl91bnBpbjoKPiAtCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluX3ZpZXcob2JqLCAmdmll dyk7Cj4gKwlfX2k5MTVfdm1hX3VucGluKGdndHQpOwo+ICBlcnJfdW5sb2NrOgo+ICAJbXV0ZXhf dW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gIGVycl9ycG06Cj4gQEAgLTI5MjUsNyArMjky OCw3IEBAIGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLCBib29sIHdyaXRlKQo+ICAJCQkJCSAgICBvbGRfd3JpdGVfZG9tYWlu KTsKPiAgCj4gIAkvKiBBbmQgYnVtcCB0aGUgTFJVIGZvciB0aGlzIGFjY2VzcyAqLwo+IC0Jdm1h ID0gaTkxNV9nZW1fb2JqX3RvX2dndHQob2JqKTsKPiArCXZtYSA9IGk5MTVfZ2VtX29iamVjdF90 b19nZ3R0KG9iaiwgTlVMTCk7Cj4gIAlpZiAodm1hICYmCj4gIAkgICAgZHJtX21tX25vZGVfYWxs b2NhdGVkKCZ2bWEtPm5vZGUpICYmCj4gIAkgICAgIWk5MTVfdm1hX2lzX2FjdGl2ZSh2bWEpKQo+ IEBAIC0zMTQ5LDExICszMTUyLDEyIEBAIHJwbV9wdXQ6Cj4gICAqIENhbiBiZSBjYWxsZWQgZnJv bSBhbiB1bmludGVycnVwdGlibGUgcGhhc2UgKG1vZGVzZXR0aW5nKSBhbmQgYWxsb3dzCj4gICAq IGFueSBmbHVzaGVzIHRvIGJlIHBpcGVsaW5lZCAoZm9yIHBhZ2VmbGlwcykuCj4gICAqLwo+IC1p bnQKPiArc3RydWN0IGk5MTVfdm1hICoKPiAgaTkxNV9nZW1fb2JqZWN0X3Bpbl90b19kaXNwbGF5 X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gIAkJCQkgICAgIHUzMiBh bGlnbm1lbnQsCj4gIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldykK PiAgewo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gIAl1MzIgb2xkX3JlYWRfZG9tYWlucywg b2xkX3dyaXRlX2RvbWFpbjsKPiAgCWludCByZXQ7Cj4gIAo+IEBAIC0zMTczLDE5ICszMTc3LDIz IEBAIGk5MTVfZ2VtX29iamVjdF9waW5fdG9fZGlzcGxheV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAo+ICAJICovCj4gIAlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2Nh Y2hlX2xldmVsKG9iaiwKPiAgCQkJCQkgICAgICBIQVNfV1Qob2JqLT5iYXNlLmRldikgPyBJOTE1 X0NBQ0hFX1dUIDogSTkxNV9DQUNIRV9OT05FKTsKPiAtCWlmIChyZXQpCj4gKwlpZiAocmV0KSB7 Cj4gKwkJdm1hID0gRVJSX1BUUihyZXQpOwo+ICAJCWdvdG8gZXJyX3VucGluX2Rpc3BsYXk7Cj4g Kwl9Cj4gIAo+ICAJLyogQXMgdGhlIHVzZXIgbWF5IG1hcCB0aGUgYnVmZmVyIG9uY2UgcGlubmVk IGluIHRoZSBkaXNwbGF5IHBsYW5lCj4gIAkgKiAoZS5nLiBsaWJrbXMgZm9yIHRoZSBib290dXAg c3BsYXNoKSwgd2UgaGF2ZSB0byBlbnN1cmUgdGhhdCB3ZQo+ICAJICogYWx3YXlzIHVzZSBtYXBf YW5kX2ZlbmNlYWJsZSBmb3IgYWxsIHNjYW5vdXQgYnVmZmVycy4KPiAgCSAqLwo+IC0JcmV0ID0g aTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKG9iaiwgdmlldywgMCwgYWxpZ25tZW50LAo+ICsJdm1h ID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKG9iaiwgdmlldywgMCwgYWxpZ25tZW50LAo+ICAJ CQkJICAgICAgIHZpZXctPnR5cGUgPT0gSTkxNV9HR1RUX1ZJRVdfTk9STUFMID8KPiAgCQkJCSAg ICAgICBQSU5fTUFQUEFCTEUgOiAwKTsKPiAtCWlmIChyZXQpCj4gKwlpZiAoSVNfRVJSKHZtYSkp Cj4gIAkJZ290byBlcnJfdW5waW5fZGlzcGxheTsKPiAgCj4gKwlXQVJOX09OKG9iai0+cGluX2Rp c3BsYXkgPiB2bWEtPnBpbl9jb3VudCk7Cj4gKwo+ICAJaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2Nw dV93cml0ZV9kb21haW4ob2JqKTsKPiAgCj4gIAlvbGRfd3JpdGVfZG9tYWluID0gb2JqLT5iYXNl LndyaXRlX2RvbWFpbjsKPiBAQCAtMzIwNCwyNCArMzIxMiwyNCBAQCBpOTE1X2dlbV9vYmplY3Rf cGluX3RvX2Rpc3BsYXlfcGxhbmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAg CS8qIEluY3JlbWVudCB0aGUgcGFnZXNfcGluX2NvdW50IHRvIGd1YXJkIGFnYWluc3QgdGhlIHNo cmlua2VyICovCj4gIAlvYmotPnBhZ2VzX3Bpbl9jb3VudCsrOwo+ICAKPiAtCXJldHVybiAwOwo+ ICsJcmV0dXJuIHZtYTsKPiAgCj4gIGVycl91bnBpbl9kaXNwbGF5Ogo+ICAJb2JqLT5waW5fZGlz cGxheS0tOwo+IC0JcmV0dXJuIHJldDsKPiArCXJldHVybiB2bWE7Cj4gIH0KPiAgCj4gIHZvaWQK PiAtaTkxNV9nZW1fb2JqZWN0X3VucGluX2Zyb21fZGlzcGxheV9wbGFuZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkJCSBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcg KnZpZXcpCj4gK2k5MTVfZ2VtX29iamVjdF91bnBpbl9mcm9tX2Rpc3BsYXlfcGxhbmUoc3RydWN0 IGk5MTVfdm1hICp2bWEpCj4gIHsKPiAtCWlmIChXQVJOX09OKG9iai0+cGluX2Rpc3BsYXkgPT0g MCkpCj4gKwlpZiAoV0FSTl9PTih2bWEtPm9iai0+cGluX2Rpc3BsYXkgPT0gMCkpCj4gIAkJcmV0 dXJuOwo+ICAKPiAtCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluX3ZpZXcob2JqLCB2aWV3KTsK PiArCXZtYS0+b2JqLT5waW5fZGlzcGxheS0tOwo+ICsJdm1hLT5vYmotPnBhZ2VzX3Bpbl9jb3Vu dC0tOwo+ICAKPiAtCW9iai0+cGFnZXNfcGluX2NvdW50LS07Cj4gLQlvYmotPnBpbl9kaXNwbGF5 LS07Cj4gKwlpOTE1X3ZtYV91bnBpbih2bWEpOwo+ICsJV0FSTl9PTih2bWEtPm9iai0+cGluX2Rp c3BsYXkgPiB2bWEtPnBpbl9jb3VudCk7Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC0zNDIxLDI2ICsz NDI5LDI0IEBAIGVycjoKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLWludAo+ICtzdHJ1Y3Qg aTkxNV92bWEgKgo+ICBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4oc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiAtCQkJIGNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldywK PiArCQkJIGNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmlldyAqZ2d0dF92aWV3LAo+ICAJCQkgdWlu dDY0X3Qgc2l6ZSwKPiAgCQkJIHVpbnQ2NF90IGFsaWdubWVudCwKPiAgCQkJIHVpbnQ2NF90IGZs YWdzKQo+ICB7Cj4gKwlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9ICZ0b19pOTE1KG9i ai0+YmFzZS5kZXYpLT5nZ3R0LmJhc2U7Cj4gIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgCWlu dCByZXQ7Cj4gIAo+IC0JaWYgKHZpZXcgPT0gTlVMTCkKPiAtCQl2aWV3ID0gJmk5MTVfZ2d0dF92 aWV3X25vcm1hbDsKPiAtCj4gLQl2bWEgPSBpOTE1X2dlbV9vYmpfbG9va3VwX29yX2NyZWF0ZV9n Z3R0X3ZtYShvYmosIHZpZXcpOwo+ICsJdm1hID0gaTkxNV9nZW1fb2JqX2xvb2t1cF9vcl9jcmVh dGVfdm1hKG9iaiwgdm0sIGdndHRfdmlldyk7Cj4gIAlpZiAoSVNfRVJSKHZtYSkpCj4gLQkJcmV0 dXJuIFBUUl9FUlIodm1hKTsKPiArCQlyZXR1cm4gdm1hOwo+ICAKPiAgCWlmIChpOTE1X3ZtYV9t aXNwbGFjZWQodm1hLCBzaXplLCBhbGlnbm1lbnQsIGZsYWdzKSkgewo+ICAJCWlmIChmbGFncyAm IFBJTl9OT05CTE9DSyAmJiAodm1hLT5waW5fY291bnQgfCB2bWEtPmFjdGl2ZSkpCj4gLQkJCXJl dHVybiAtRU5PU1BDOwo+ICsJCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKPiAgCj4gIAkJV0FS Tih2bWEtPnBpbl9jb3VudCwKPiAgCQkgICAgICJibyBpcyBhbHJlYWR5IHBpbm5lZCBpbiBnZ3R0 IHdpdGggaW5jb3JyZWN0IGFsaWdubWVudDoiCj4gQEAgLTM0NTMsMTcgKzM0NTksMTQgQEAgaTkx NV9nZW1fb2JqZWN0X2dndHRfcGluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4g IAkJICAgICBvYmotPm1hcF9hbmRfZmVuY2VhYmxlKTsKPiAgCQlyZXQgPSBpOTE1X3ZtYV91bmJp bmQodm1hKTsKPiAgCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+ICsJCQlyZXR1cm4gRVJS X1BUUihyZXQpOwo+ICAJfQo+ICAKPiAtCXJldHVybiBpOTE1X3ZtYV9waW4odm1hLCBzaXplLCBh bGlnbm1lbnQsIGZsYWdzIHwgUElOX0dMT0JBTCk7Cj4gLX0KPiArCXJldCA9IGk5MTVfdm1hX3Bp bih2bWEsIHNpemUsIGFsaWdubWVudCwgZmxhZ3MgfCBQSU5fR0xPQkFMKTsKPiArCWlmIChyZXQp Cj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgCj4gLXZvaWQKPiAtaTkxNV9nZW1fb2JqZWN0 X2dndHRfdW5waW5fdmlldyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkJ Y29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3KQo+IC17Cj4gLQlpOTE1X3ZtYV91bnBp bihpOTE1X2dlbV9vYmpfdG9fZ2d0dF92aWV3KG9iaiwgdmlldykpOwo+ICsJcmV0dXJuIHZtYTsK PiAgfQo+ICAKPiAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZAo+IEBAIC0zNzk5LDMx ICszODAyLDYgQEAgdm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKmdlbV9vYmopCj4gIAlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7Cj4gIH0KPiAg Cj4gLXN0cnVjdCBpOTE1X3ZtYSAqaTkxNV9nZW1fb2JqX3RvX3ZtYShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAo+IC0JCQkJICAgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSkKPiAtewo+IC0Jc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KHZtYSwgJm9iai0+dm1hX2xpc3QsIG9ial9saW5rKSB7Cj4gLQkJaWYgKHZtYS0+Z2d0dF92aWV3 LnR5cGUgPT0gSTkxNV9HR1RUX1ZJRVdfTk9STUFMICYmCj4gLQkJICAgIHZtYS0+dm0gPT0gdm0p Cj4gLQkJCXJldHVybiB2bWE7Cj4gLQl9Cj4gLQlyZXR1cm4gTlVMTDsKPiAtfQo+IC0KPiAtc3Ry dWN0IGk5MTVfdm1hICppOTE1X2dlbV9vYmpfdG9fZ2d0dF92aWV3KHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCj4gLQkJCQkJICAgY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2 aWV3KQo+IC17Cj4gLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAtCj4gLQlHRU1fQlVHX09OKCF2 aWV3KTsKPiAtCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm9iai0+dm1hX2xpc3QsIG9i al9saW5rKQo+IC0JCWlmICh2bWEtPmlzX2dndHQgJiYgaTkxNV9nZ3R0X3ZpZXdfZXF1YWwoJnZt YS0+Z2d0dF92aWV3LCB2aWV3KSkKPiAtCQkJcmV0dXJuIHZtYTsKPiAtCXJldHVybiBOVUxMOwo+ IC19Cj4gLQo+ICBpbnQKPiAgaTkxNV9nZW1fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+ICB7Cj4gQEAgLTQzMjEsOTYgKzQyOTksNiBAQCB2b2lkIGk5MTVfZ2VtX3RyYWNrX2ZiKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvbGQsCj4gIAl9Cj4gIH0KPiAgCj4gLS8qIEFsbCB0 aGUgbmV3IFZNIHN0dWZmICovCj4gLXU2NCBpOTE1X2dlbV9vYmpfb2Zmc2V0KHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvLAo+IC0JCQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkK PiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gby0+YmFzZS5kZXYt PmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gLQo+IC0JV0FSTl9PTih2 bSA9PSAmZGV2X3ByaXYtPm1tLmFsaWFzaW5nX3BwZ3R0LT5iYXNlKTsKPiAtCj4gLQlsaXN0X2Zv cl9lYWNoX2VudHJ5KHZtYSwgJm8tPnZtYV9saXN0LCBvYmpfbGluaykgewo+IC0JCWlmICh2bWEt PmlzX2dndHQgJiYKPiAtCQkgICAgdm1hLT5nZ3R0X3ZpZXcudHlwZSAhPSBJOTE1X0dHVFRfVklF V19OT1JNQUwpCj4gLQkJCWNvbnRpbnVlOwo+IC0JCWlmICh2bWEtPnZtID09IHZtKQo+IC0JCQly ZXR1cm4gdm1hLT5ub2RlLnN0YXJ0Owo+IC0JfQo+IC0KPiAtCVdBUk4oMSwgIiVzIHZtYSBmb3Ig dGhpcyBvYmplY3Qgbm90IGZvdW5kLlxuIiwKPiAtCSAgICAgaTkxNV9pc19nZ3R0KHZtKSA/ICJn bG9iYWwiIDogInBwZ3R0Iik7Cj4gLQlyZXR1cm4gLTE7Cj4gLX0KPiAtCj4gLXU2NCBpOTE1X2dl bV9vYmpfZ2d0dF9vZmZzZXRfdmlldyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbywKPiAt CQkJCSAgY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3KQo+IC17Cj4gLQlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKPiAtCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm8tPnZtYV9s aXN0LCBvYmpfbGluaykKPiAtCQlpZiAodm1hLT5pc19nZ3R0ICYmIGk5MTVfZ2d0dF92aWV3X2Vx dWFsKCZ2bWEtPmdndHRfdmlldywgdmlldykpCj4gLQkJCXJldHVybiB2bWEtPm5vZGUuc3RhcnQ7 Cj4gLQo+IC0JV0FSTigxLCAiZ2xvYmFsIHZtYSBmb3IgdGhpcyBvYmplY3Qgbm90IGZvdW5kLiAo dmlldz0ldSlcbiIsIHZpZXctPnR5cGUpOwo+IC0JcmV0dXJuIC0xOwo+IC19Cj4gLQo+IC1ib29s IGk5MTVfZ2VtX29ial9ib3VuZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbywKPiAtCQkJ c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gLXsKPiAtCXN0cnVjdCBpOTE1X3ZtYSAq dm1hOwo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmby0+dm1hX2xpc3QsIG9ial9s aW5rKSB7Cj4gLQkJaWYgKHZtYS0+aXNfZ2d0dCAmJgo+IC0JCSAgICB2bWEtPmdndHRfdmlldy50 eXBlICE9IEk5MTVfR0dUVF9WSUVXX05PUk1BTCkKPiAtCQkJY29udGludWU7Cj4gLQkJaWYgKHZt YS0+dm0gPT0gdm0gJiYgZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUpKQo+IC0JCQly ZXR1cm4gdHJ1ZTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gZmFsc2U7Cj4gLX0KPiAtCj4gLWJvb2wg aTkxNV9nZW1fb2JqX2dndHRfYm91bmRfdmlldyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq bywKPiAtCQkJCSAgY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3KQo+IC17Cj4gLQlz dHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAtCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm8t PnZtYV9saXN0LCBvYmpfbGluaykKPiAtCQlpZiAodm1hLT5pc19nZ3R0ICYmCj4gLQkJICAgIGk5 MTVfZ2d0dF92aWV3X2VxdWFsKCZ2bWEtPmdndHRfdmlldywgdmlldykgJiYKPiAtCQkgICAgZHJt X21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUpKQo+IC0JCQlyZXR1cm4gdHJ1ZTsKPiAtCj4g LQlyZXR1cm4gZmFsc2U7Cj4gLX0KPiAtCj4gLXVuc2lnbmVkIGxvbmcgaTkxNV9nZW1fb2JqX2dn dHRfc2l6ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbykKPiAtewo+IC0Jc3RydWN0IGk5 MTVfdm1hICp2bWE7Cj4gLQo+IC0JR0VNX0JVR19PTihsaXN0X2VtcHR5KCZvLT52bWFfbGlzdCkp Owo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmby0+dm1hX2xpc3QsIG9ial9saW5r KSB7Cj4gLQkJaWYgKHZtYS0+aXNfZ2d0dCAmJgo+IC0JCSAgICB2bWEtPmdndHRfdmlldy50eXBl ID09IEk5MTVfR0dUVF9WSUVXX05PUk1BTCkKPiAtCQkJcmV0dXJuIHZtYS0+bm9kZS5zaXplOwo+ IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1ib29sIGk5MTVfZ2VtX29ial9pc19w aW5uZWQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAtewo+IC0Jc3RydWN0IGk5 MTVfdm1hICp2bWE7Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm9iai0+dm1hX2xpc3Qs IG9ial9saW5rKQo+IC0JCWlmIChpOTE1X3ZtYV9pc19waW5uZWQodm1hKSkKPiAtCQkJcmV0dXJu IHRydWU7Cj4gLQo+IC0JcmV0dXJuIGZhbHNlOwo+IC19Cj4gLQo+ICAvKiBMaWtlIGk5MTVfZ2Vt X29iamVjdF9nZXRfcGFnZSgpLCBidXQgbWFyayB0aGUgcmV0dXJuZWQgcGFnZSBkaXJ0eSAqLwo+ ICBzdHJ1Y3QgcGFnZSAqCj4gIGk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBpbnQgbikKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fY29udGV4dC5jCj4gaW5kZXggYzliOGMyYzYyODI4Li4wZWQ4YTRhNzMyMWEgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gQEAgLTM2MCw4ICszNjAs OCBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9jb250ZXh0X3VucGluKHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHgsCj4gIAl9IGVsc2Ugewo+ICAJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9 ICZjdHgtPmVuZ2luZVtlbmdpbmUtPmlkXTsKPiAgCj4gLQkJaWYgKGNlLT5zdGF0ZSkKPiAtCQkJ aTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4oY2UtPnN0YXRlKTsKPiArCQlpZiAoY2UtPnZtYSkK PiArCQkJaTkxNV92bWFfdW5waW4oY2UtPnZtYSk7Cj4gIAo+ICAJCWk5MTVfZ2VtX2NvbnRleHRf cHV0KGN0eCk7Cj4gIAl9Cj4gQEAgLTU4MCw5ICs1ODAsNyBAQCBtaV9zZXRfY29udGV4dChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwgdTMyIGh3X2ZsYWdzKQo+ICAKPiAgCWludGVs X3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKPiAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9T RVRfQ09OVEVYVCk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQocmluZywKPiAtCQkJaTkxNV9nZW1fb2Jq X2dndHRfb2Zmc2V0KHJlcS0+Y3R4LT5lbmdpbmVbUkNTXS5zdGF0ZSkgfAo+IC0JCQlmbGFncyk7 Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgcmVxLT5jdHgtPmVuZ2luZVtSQ1NdLnZtYS0+bm9k ZS5zdGFydCB8IGZsYWdzKTsKPiAgCS8qCj4gIAkgKiB3L2E6IE1JX1NFVF9DT05URVhUIG11c3Qg YWx3YXlzIGJlIGZvbGxvd2VkIGJ5IE1JX05PT1AKPiAgCSAqIFdhTWlTZXRDb250ZXh0X0hhbmc6 c25iLGl2Yix2bHYKPiBAQCAtNjEwLDcgKzYwOCw3IEBAIG1pX3NldF9jb250ZXh0KHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCB1MzIgaHdfZmxhZ3MpCj4gIAkJCQkJTUlfU1RPUkVf UkVHSVNURVJfTUVNIHwKPiAgCQkJCQlNSV9TUk1fTFJNX0dMT0JBTF9HVFQpOwo+ICAJCQlpbnRl bF9yaW5nX2VtaXRfcmVnKHJpbmcsIGxhc3RfcmVnKTsKPiAtCQkJaW50ZWxfcmluZ19lbWl0KHJp bmcsIHJlcS0+ZW5naW5lLT5zY3JhdGNoLmd0dF9vZmZzZXQpOwo+ICsJCQlpbnRlbF9yaW5nX2Vt aXQocmluZywgcmVxLT5lbmdpbmUtPnNjcmF0Y2gtPm5vZGUuc3RhcnQpOwo+ICAJCQlpbnRlbF9y aW5nX2VtaXQocmluZywgTUlfTk9PUCk7Cj4gIAkJfQo+ICAJCWludGVsX3JpbmdfZW1pdChyaW5n LCBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRSk7Cj4gQEAgLTcxNSw2ICs3MTMsNyBAQCBz dGF0aWMgaW50IGRvX3Jjc19zd2l0Y2goc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEp Cj4gIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSByZXEtPmVuZ2luZTsKPiAgCXN0 cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9IHRvLT5wcGd0dCA/OiByZXEtPmk5MTUtPm1tLmFs aWFzaW5nX3BwZ3R0Owo+ICAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmZyb207Cj4gKwlzdHJ1 Y3QgaTkxNV92bWEgKnZtYTsKPiAgCXUzMiBod19mbGFnczsKPiAgCWludCByZXQsIGk7Cj4gIAo+ IEBAIC03MjIsMTAgKzcyMSwxNyBAQCBzdGF0aWMgaW50IGRvX3Jjc19zd2l0Y2goc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+ICAJLyogVHJ5aW5n IHRvIHBpbiBmaXJzdCBtYWtlcyBlcnJvciBoYW5kbGluZyBlYXNpZXIuICovCj4gLQlyZXQgPSBp OTE1X2dlbV9vYmplY3RfZ2d0dF9waW4odG8tPmVuZ2luZVtSQ1NdLnN0YXRlLCBOVUxMLCAwLAo+ ICsJdm1hID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKHRvLT5lbmdpbmVbUkNTXS5zdGF0ZSwg TlVMTCwgMCwKPiAgCQkJCSAgICAgICB0by0+Z2d0dF9hbGlnbm1lbnQsIDApOwo+IC0JaWYgKHJl dCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJaWYgKElTX0VSUih2bWEpKQo+ICsJCXJldHVybiBQVFJf RVJSKHZtYSk7Cj4gKwo+ICsJdG8tPmVuZ2luZVtSQ1NdLnZtYSA9IHZtYTsKPiArCj4gKwlpZiAo V0FSTl9PTighKHZtYS0+Ym91bmQgJiBHTE9CQUxfQklORCkpKSB7Cj4gKwkJcmV0ID0gLUVOT0RF VjsKPiArCQlnb3RvIHVucGluX3ZtYTsKPiArCX0KPiAgCj4gIAkvKgo+ICAJICogUGluIGNhbiBz d2l0Y2ggYmFjayB0byB0aGUgZGVmYXVsdCBjb250ZXh0IGlmIHdlIGVuZCB1cCBjYWxsaW5nIGlu dG8KPiBAQCAtNzQ2LDcgKzc1Miw3IEBAIHN0YXRpYyBpbnQgZG9fcmNzX3N3aXRjaChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiAgCSAqLwo+ICAJcmV0ID0gaTkxNV9nZW1fb2Jq ZWN0X3NldF90b19ndHRfZG9tYWluKHRvLT5lbmdpbmVbUkNTXS5zdGF0ZSwgZmFsc2UpOwo+ICAJ aWYgKHJldCkKPiAtCQlnb3RvIHVucGluX291dDsKPiArCQlnb3RvIHVucGluX3ZtYTsKPiAgCj4g IAlpZiAobmVlZHNfcGRfbG9hZF9wcmUocHBndHQsIGVuZ2luZSwgdG8pKSB7Cj4gIAkJLyogT2xk ZXIgR0VOcyBhbmQgbm9uIHJlbmRlciByaW5ncyBzdGlsbCB3YW50IHRoZSBsb2FkIGZpcnN0LAo+ IEBAIC03NTYsNyArNzYyLDcgQEAgc3RhdGljIGludCBkb19yY3Nfc3dpdGNoKHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICAJCXRyYWNlX3N3aXRjaF9tbShlbmdpbmUsIHRvKTsK PiAgCQlyZXQgPSBwcGd0dC0+c3dpdGNoX21tKHBwZ3R0LCByZXEpOwo+ICAJCWlmIChyZXQpCj4g LQkJCWdvdG8gdW5waW5fb3V0Owo+ICsJCQlnb3RvIHVucGluX3ZtYTsKPiAgCX0KPiAgCj4gIAlp ZiAoIXRvLT5lbmdpbmVbUkNTXS5pbml0aWFsaXNlZCB8fCBpOTE1X2dlbV9jb250ZXh0X2lzX2Rl ZmF1bHQodG8pKQo+IEBAIC03NzMsNyArNzc5LDcgQEAgc3RhdGljIGludCBkb19yY3Nfc3dpdGNo KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICAJaWYgKHRvICE9IGZyb20gfHwg KGh3X2ZsYWdzICYgTUlfRk9SQ0VfUkVTVE9SRSkpIHsKPiAgCQlyZXQgPSBtaV9zZXRfY29udGV4 dChyZXEsIGh3X2ZsYWdzKTsKPiAgCQlpZiAocmV0KQo+IC0JCQlnb3RvIHVucGluX291dDsKPiAr CQkJZ290byB1bnBpbl92bWE7Cj4gIAl9Cj4gIAo+ICAJLyogVGhlIGJhY2tpbmcgb2JqZWN0IGZv ciB0aGUgY29udGV4dCBpcyBkb25lIGFmdGVyIHN3aXRjaGluZyB0byB0aGUKPiBAQCAtNzgzLDgg Kzc4OSw2IEBAIHN0YXRpYyBpbnQgZG9fcmNzX3N3aXRjaChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcSkKPiAgCSAqIE1JX1NFVF9DT05URVhUIGluc3RlYWQgb2Ygd2hlbiB0aGUgbmV4 dCBzZXFubyBoYXMgY29tcGxldGVkLgo+ICAJICovCj4gIAlpZiAoZnJvbSAhPSBOVUxMKSB7Cj4g LQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGZyb20tPmVuZ2luZVtSQ1NdLnN0 YXRlOwo+IC0KPiAgCQkvKiBBcyBsb25nIGFzIE1JX1NFVF9DT05URVhUIGlzIHNlcmlhbGl6aW5n LCBpZS4gaXQgZmx1c2hlcyB0aGUKPiAgCQkgKiB3aG9sZSBkYW1uIHBpcGVsaW5lLCB3ZSBkb24n dCBuZWVkIHRvIGV4cGxpY2l0bHkgbWFyayB0aGUKPiAgCQkgKiBvYmplY3QgZGlydHkuIFRoZSBv bmx5IGV4Y2VwdGlvbiBpcyB0aGF0IHRoZSBjb250ZXh0IG11c3QgYmUKPiBAQCAtNzkyLDExICs3 OTYsMTAgQEAgc3RhdGljIGludCBkb19yY3Nfc3dpdGNoKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxKQo+ICAJCSAqIGFibGUgdG8gZGVmZXIgZG9pbmcgdGhpcyB1bnRpbCB3ZSBrbm93 IHRoZSBvYmplY3Qgd291bGQgYmUKPiAgCQkgKiBzd2FwcGVkLCBidXQgdGhlcmUgaXMgbm8gd2F5 IHRvIGRvIHRoYXQgeWV0Lgo+ICAJCSAqLwo+IC0JCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSBJ OTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT047Cj4gLQkJaTkxNV92bWFfbW92ZV90b19hY3RpdmUo aTkxNV9nZW1fb2JqX3RvX2dndHQob2JqKSwgcmVxLCAwKTsKPiAtCj4gKwkJaTkxNV92bWFfbW92 ZV90b19hY3RpdmUoZnJvbS0+ZW5naW5lW1JDU10udm1hLCByZXEsIDApOwo+ICAJCS8qIG9iaiBp cyBrZXB0IGFsaXZlIHVudGlsIHRoZSBuZXh0IHJlcXVlc3QgYnkgaXRzIGFjdGl2ZSByZWYgKi8K PiAtCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihvYmopOwo+ICsJCWk5MTVfdm1hX3VucGlu KGZyb20tPmVuZ2luZVtSQ1NdLnZtYSk7Cj4gKwo+ICAJCWk5MTVfZ2VtX2NvbnRleHRfcHV0KGZy b20pOwo+ICAJfQo+ICAJZW5naW5lLT5sYXN0X2NvbnRleHQgPSBpOTE1X2dlbV9jb250ZXh0X2dl dCh0byk7Cj4gQEAgLTg0MSw4ICs4NDQsOCBAQCBzdGF0aWMgaW50IGRvX3Jjc19zd2l0Y2goc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gIAo+ICAJcmV0dXJuIDA7Cj4gIAo+IC11 bnBpbl9vdXQ6Cj4gLQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbih0by0+ZW5naW5lW1JDU10u c3RhdGUpOwo+ICt1bnBpbl92bWE6Cj4gKwlpOTE1X3ZtYV91bnBpbih2bWEpOwo+ICAJcmV0dXJu IHJldDsKPiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fZXhlY2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZl ci5jCj4gaW5kZXggYjg5ZTlkMmIzM2M0Li5hMjljNGI2ZmVhMjggMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gQEAgLTE3NCw4ICsxNzQsOCBAQCBl Yl9sb29rdXBfdm1hcyhzdHJ1Y3QgZWJfdm1hcyAqZWIsCj4gIAkJICogZnJvbSB0aGUgKG9iaiwg dm0pIHdlIGRvbid0IHJ1biB0aGUgcmlzayBvZiBjcmVhdGluZwo+ICAJCSAqIGR1cGxpY2F0ZWQg dm1hcyBmb3IgdGhlIHNhbWUgdm0uCj4gIAkJICovCj4gLQkJdm1hID0gaTkxNV9nZW1fb2JqX2xv b2t1cF9vcl9jcmVhdGVfdm1hKG9iaiwgdm0pOwo+IC0JCWlmIChJU19FUlIodm1hKSkgewo+ICsJ CXZtYSA9IGk5MTVfZ2VtX29ial9sb29rdXBfb3JfY3JlYXRlX3ZtYShvYmosIHZtLCBOVUxMKTsK PiArCQlpZiAodW5saWtlbHkoSVNfRVJSKHZtYSkpKSB7Cj4gIAkJCURSTV9ERUJVRygiRmFpbGVk IHRvIGxvb2t1cCBWTUFcbiIpOwo+ICAJCQlyZXQgPSBQVFJfRVJSKHZtYSk7Cj4gIAkJCWdvdG8g ZXJyOwo+IEBAIC0zNDMsMzAgKzM0MywzNCBAQCByZWxvY2F0ZV9lbnRyeV9ndHQoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9j YXRpb25fZW50cnkgKnJlbG9jLAo+ICAJCSAgIHVpbnQ2NF90IHRhcmdldF9vZmZzZXQpCj4gIHsK PiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2Owo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKPiAgCXN0cnVj dCBpOTE1X2dndHQgKmdndHQgPSAmZGV2X3ByaXYtPmdndHQ7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEg KnZtYTsKPiAgCXVpbnQ2NF90IGRlbHRhID0gcmVsb2NhdGlvbl90YXJnZXQocmVsb2MsIHRhcmdl dF9vZmZzZXQpOwo+ICAJdWludDY0X3Qgb2Zmc2V0Owo+ICAJdm9pZCBfX2lvbWVtICpyZWxvY19w YWdlOwo+ICAJaW50IHJldDsKPiAgCj4gKwl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4o b2JqLCBOVUxMLCAwLCAwLCBQSU5fTUFQUEFCTEUpOwo+ICsJaWYgKElTX0VSUih2bWEpKQo+ICsJ CXJldHVybiBQVFJfRVJSKHZtYSk7Cj4gKwo+ICAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90 b19ndHRfZG9tYWluKG9iaiwgdHJ1ZSk7Cj4gIAlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4g KwkJZ290byB1bnBpbjsKPiAgCj4gIAlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcHV0X2ZlbmNlKG9i aik7Cj4gIAlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwkJZ290byB1bnBpbjsKPiAgCj4g IAkvKiBNYXAgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgcmVsb2NhdGlvbiB3ZSdyZSBnb2luZyB0 byBwZXJmb3JtLiAgKi8KPiAtCW9mZnNldCA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmop Owo+ICsJb2Zmc2V0ID0gdm1hLT5ub2RlLnN0YXJ0Owo+ICAJb2Zmc2V0ICs9IHJlbG9jLT5vZmZz ZXQ7Cj4gIAlyZWxvY19wYWdlID0gaW9fbWFwcGluZ19tYXBfYXRvbWljX3djKGdndHQtPm1hcHBh YmxlLAo+ICAJCQkJCSAgICAgIG9mZnNldCAmIFBBR0VfTUFTSyk7Cj4gIAlpb3dyaXRlMzIobG93 ZXJfMzJfYml0cyhkZWx0YSksIHJlbG9jX3BhZ2UgKyBvZmZzZXRfaW5fcGFnZShvZmZzZXQpKTsK PiAgCj4gLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOCkgewo+ICsJaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gOCkgewo+ICAJCW9mZnNldCArPSBzaXplb2YodWludDMyX3QpOwo+ICAK PiAgCQlpZiAob2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KSA9PSAwKSB7Cj4gQEAgLTM4Miw3ICszODYs OSBAQCByZWxvY2F0ZV9lbnRyeV9ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK PiAgCj4gIAlpb19tYXBwaW5nX3VubWFwX2F0b21pYyhyZWxvY19wYWdlKTsKPiAgCj4gLQlyZXR1 cm4gMDsKPiArdW5waW46Cj4gKwlpOTE1X3ZtYV91bnBpbih2bWEpOwo+ICsJcmV0dXJuIHJldDsK PiAgfQo+ICAKPiAgc3RhdGljIHZvaWQKPiBAQCAtMTIzNiw3ICsxMjQyLDcgQEAgaTkxNV9yZXNl dF9nZW43X3NvbF9vZmZzZXRzKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICAJ cmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEqCj4gK3N0YXRpYyBz dHJ1Y3QgaTkxNV92bWEgKgo+ICBpOTE1X2dlbV9leGVjYnVmZmVyX3BhcnNlKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2Jq ZWN0MiAqc2hhZG93X2V4ZWNfZW50cnksCj4gIAkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKmJhdGNoX29iaiwKPiBAQCAtMTI2MCwzMSArMTI2NiwzMCBAQCBpOTE1X2dlbV9leGVjYnVm ZmVyX3BhcnNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCQkJICAgICAgYmF0 Y2hfc3RhcnRfb2Zmc2V0LAo+ICAJCQkgICAgICBiYXRjaF9sZW4sCj4gIAkJCSAgICAgIGlzX21h c3Rlcik7Cj4gLQlpZiAocmV0KQo+ICsJaWYgKHJldCkgewo+ICsJCWlmIChyZXQgPT0gLUVBQ0NF UykgLyogdW5oYW5kbGVkIGNoYWluZWQgYmF0Y2ggKi8KPiArCQkJdm1hID0gTlVMTDsKPiArCQll bHNlCj4gKwkJCXZtYSA9IEVSUl9QVFIocmV0KTsKPiAgCQlnb3RvIGVycjsKPiArCX0KPiAgCj4g LQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4oc2hhZG93X2JhdGNoX29iaiwgTlVMTCwg MCwgMCwgMCk7Cj4gLQlpZiAocmV0KQo+ICsJdm1hID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGlu KHNoYWRvd19iYXRjaF9vYmosIE5VTEwsIDAsIDAsIDApOwo+ICsJaWYgKElTX0VSUih2bWEpKSB7 Cj4gKwkJcmV0ID0gUFRSX0VSUih2bWEpOwo+ICAJCWdvdG8gZXJyOwo+IC0KPiAtCWk5MTVfZ2Vt X29iamVjdF91bnBpbl9wYWdlcyhzaGFkb3dfYmF0Y2hfb2JqKTsKPiArCX0KPiAgCj4gIAltZW1z ZXQoc2hhZG93X2V4ZWNfZW50cnksIDAsIHNpemVvZigqc2hhZG93X2V4ZWNfZW50cnkpKTsKPiAg Cj4gLQl2bWEgPSBpOTE1X2dlbV9vYmpfdG9fZ2d0dChzaGFkb3dfYmF0Y2hfb2JqKTsKPiAgCXZt YS0+ZXhlY19lbnRyeSA9IHNoYWRvd19leGVjX2VudHJ5Owo+ICAJdm1hLT5leGVjX2VudHJ5LT5m bGFncyA9IF9fRVhFQ19PQkpFQ1RfSEFTX1BJTjsKPiAgCWk5MTVfZ2VtX29iamVjdF9nZXQoc2hh ZG93X2JhdGNoX29iaik7Cj4gIAlsaXN0X2FkZF90YWlsKCZ2bWEtPmV4ZWNfbGlzdCwgJmViLT52 bWFzKTsKPiAgCj4gLQlyZXR1cm4gdm1hOwo+IC0KPiAgZXJyOgo+ICAJaTkxNV9nZW1fb2JqZWN0 X3VucGluX3BhZ2VzKHNoYWRvd19iYXRjaF9vYmopOwo+IC0JaWYgKHJldCA9PSAtRUFDQ0VTKSAv KiB1bmhhbmRsZWQgY2hhaW5lZCBiYXRjaCAqLwo+IC0JCXJldHVybiBOVUxMOwo+IC0JZWxzZQo+ IC0JCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwlyZXR1cm4gdm1hOwo+ICB9Cj4gIAo+ICBzdGF0 aWMgaW50Cj4gQEAgLTE2MzEsNiArMTYzNiw3IEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgCSAqIGhzdyBzaG91bGQgaGF2ZSB0 aGlzIGZpeGVkLCBidXQgYmR3IG11Y2tzIGl0IHVwIGFnYWluLiAqLwo+ICAJaWYgKGRpc3BhdGNo X2ZsYWdzICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUpIHsKPiAgCQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqID0gcGFyYW1zLT5iYXRjaF92bWEtPm9iajsKPiArCQlzdHJ1Y3QgaTkxNV92 bWEgKnZtYTsKPiAgCj4gIAkJLyoKPiAgCQkgKiBTbyBvbiBmaXJzdCBnbGFuY2UgaXQgbG9va3Mg ZnJlYWt5IHRoYXQgd2UgcGluIHRoZSBiYXRjaCBoZXJlCj4gQEAgLTE2NDIsMTEgKzE2NDgsMTMg QEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAo+ICAJCSAqICAgZml0dGluZyBkdWUgdG8gZnJhZ21lbnRhdGlvbi4KPiAgCQkgKiBTbyB0 aGlzIGlzIGFjdHVhbGx5IHNhZmUuCj4gIAkJICovCj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0 X2dndHRfcGluKG9iaiwgTlVMTCwgMCwgMCwgMCk7Cj4gLQkJaWYgKHJldCkKPiArCQl2bWEgPSBp OTE1X2dlbV9vYmplY3RfZ2d0dF9waW4ob2JqLCBOVUxMLCAwLCAwLCAwKTsKPiArCQlpZiAoSVNf RVJSKHZtYSkpIHsKPiArCQkJcmV0ID0gUFRSX0VSUih2bWEpOwo+ICAJCQlnb3RvIGVycjsKPiAr CQl9Cj4gIAo+IC0JCXBhcmFtcy0+YmF0Y2hfdm1hID0gaTkxNV9nZW1fb2JqX3RvX2dndHQob2Jq KTsKPiArCQlwYXJhbXMtPmJhdGNoX3ZtYSA9IHZtYTsKPiAgCX0KPiAgCj4gIAkvKiBBbGxvY2F0 ZSBhIHJlcXVlc3QgZm9yIHRoaXMgYmF0Y2ggYnVmZmVyIG5pY2UgYW5kIGVhcmx5LiAqLwo+IEBA IC0xNjYyLDcgKzE2NzAsNyBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gIAkgKiBpbmFjdGl2ZV9saXN0IGFuZCBsb3NlIGl0cyBh Y3RpdmUgcmVmZXJlbmNlLiBIZW5jZSB3ZSBkbyBub3QgbmVlZAo+ICAJICogdG8gZXhwbGljaXRs eSBob2xkIGFub3RoZXIgcmVmZXJlbmNlIGhlcmUuCj4gIAkgKi8KPiAtCXBhcmFtcy0+cmVxdWVz dC0+YmF0Y2hfb2JqID0gcGFyYW1zLT5iYXRjaF92bWEtPm9iajsKPiArCXBhcmFtcy0+cmVxdWVz dC0+YmF0Y2ggPSBwYXJhbXMtPmJhdGNoX3ZtYTsKPiAgCj4gIAlyZXQgPSBpOTE1X2dlbV9yZXF1 ZXN0X2FkZF90b19jbGllbnQocGFyYW1zLT5yZXF1ZXN0LCBmaWxlKTsKPiAgCWlmIChyZXQpCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ZlbmNlLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9mZW5jZS5jCj4gaW5kZXggZWU5MTcwNTczNGJjLi4x ODc2MTFlYWZhOTkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f ZmVuY2UuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ZlbmNlLmMKPiBA QCAtODUsMjAgKzg1LDE0IEBAIHN0YXRpYyB2b2lkIGk5NjVfd3JpdGVfZmVuY2VfcmVnKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIGludCByZWcsCj4gIAlQT1NUSU5HX1JFQUQoZmVuY2VfcmVnX2xv KTsKPiAgCj4gIAlpZiAob2JqKSB7Cj4gLQkJdTMyIHNpemUgPSBpOTE1X2dlbV9vYmpfZ2d0dF9z aXplKG9iaik7Cj4gLQkJdWludDY0X3QgdmFsOwo+IC0KPiAtCQkvKiBBZGp1c3QgZmVuY2Ugc2l6 ZSB0byBtYXRjaCB0aWxlZCBhcmVhICovCj4gLQkJaWYgKG9iai0+dGlsaW5nX21vZGUgIT0gSTkx NV9USUxJTkdfTk9ORSkgewo+IC0JCQl1aW50MzJfdCByb3dfc2l6ZSA9IG9iai0+c3RyaWRlICoK PiAtCQkJCShvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kgPyAzMiA6IDgpOwo+IC0J CQlzaXplID0gKHNpemUgLyByb3dfc2l6ZSkgKiByb3dfc2l6ZTsKPiAtCQl9Cj4gLQo+IC0JCXZh bCA9ICh1aW50NjRfdCkoKGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsgc2l6ZSAtIDQw OTYpICYKPiAtCQkJCSAweGZmZmZmMDAwKSA8PCAzMjsKPiAtCQl2YWwgfD0gaTkxNV9nZW1fb2Jq X2dndHRfb2Zmc2V0KG9iaikgJiAweGZmZmZmMDAwOwo+IC0JCXZhbCB8PSAodWludDY0X3QpKChv YmotPnN0cmlkZSAvIDEyOCkgLSAxKSA8PCBmZW5jZV9waXRjaF9zaGlmdDsKPiArCQlzdHJ1Y3Qg aTkxNV92bWEgKnZtYSA9IGk5MTVfZ2VtX29iamVjdF90b19nZ3R0KG9iaiwgTlVMTCk7Cj4gKwkJ dTMyIHJvd19zaXplID0gb2JqLT5zdHJpZGUgKiAob2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJ TElOR19ZICA/IDMyIDogOCk7Cj4gKwkJdTMyIHNpemUgPSAodTMyKXZtYS0+bm9kZS5zaXplIC8g cm93X3NpemUgKiByb3dfc2l6ZTsKPiArCQl1NjQgdmFsOwo+ICsKPiArCQl2YWwgPSAoKHZtYS0+ bm9kZS5zdGFydCArIHNpemUgLSA0MDk2KSAmIDB4ZmZmZmYwMDApIDw8IDMyOwo+ICsJCXZhbCB8 PSB2bWEtPm5vZGUuc3RhcnQgJiAweGZmZmZmMDAwOwo+ICsJCXZhbCB8PSAodTY0KSgob2JqLT5z dHJpZGUgLyAxMjgpIC0gMSkgPDwgZmVuY2VfcGl0Y2hfc2hpZnQ7Cj4gIAkJaWYgKG9iai0+dGls aW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSkKPiAgCQkJdmFsIHw9IDEgPDwgSTk2NV9GRU5DRV9U SUxJTkdfWV9TSElGVDsKPiAgCQl2YWwgfD0gSTk2NV9GRU5DRV9SRUdfVkFMSUQ7Cj4gQEAgLTEy MSwxNSArMTE1LDE3IEBAIHN0YXRpYyB2b2lkIGk5MTVfd3JpdGVfZmVuY2VfcmVnKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIGludCByZWcsCj4gIAl1MzIgdmFsOwo+ICAKPiAgCWlmIChvYmopIHsK PiAtCQl1MzIgc2l6ZSA9IGk5MTVfZ2VtX29ial9nZ3R0X3NpemUob2JqKTsKPiArCQlzdHJ1Y3Qg aTkxNV92bWEgKnZtYSA9IGk5MTVfZ2VtX29iamVjdF90b19nZ3R0KG9iaiwgTlVMTCk7Cj4gIAkJ aW50IHBpdGNoX3ZhbDsKPiAgCQlpbnQgdGlsZV93aWR0aDsKPiAgCj4gLQkJV0FSTigoaTkxNV9n ZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgJiB+STkxNV9GRU5DRV9TVEFSVF9NQVNLKSB8fAo+IC0J CSAgICAgKHNpemUgJiAtc2l6ZSkgIT0gc2l6ZSB8fAo+IC0JCSAgICAgKGk5MTVfZ2VtX29ial9n Z3R0X29mZnNldChvYmopICYgKHNpemUgLSAxKSksCj4gLQkJICAgICAib2JqZWN0IDB4JTA4bGx4 IFtmZW5jZWFibGU/ICVkXSBub3QgMU0gb3IgcG90LXNpemUgKDB4JTA4eCkgYWxpZ25lZFxuIiwK PiAtCQkgICAgIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopLCBvYmotPm1hcF9hbmRfZmVu Y2VhYmxlLCBzaXplKTsKPiArCQlXQVJOKCh2bWEtPm5vZGUuc3RhcnQgJiB+STkxNV9GRU5DRV9T VEFSVF9NQVNLKSB8fAo+ICsJCSAgICAgIWlzX3Bvd2VyX29mXzIodm1hLT5ub2RlLnNpemUpIHx8 Cj4gKwkJICAgICAodm1hLT5ub2RlLnN0YXJ0ICYgKHZtYS0+bm9kZS5zaXplIC0gMSkpLAo+ICsJ CSAgICAgIm9iamVjdCAweCUwOGx4IFtmZW5jZWFibGU/ICVkXSBub3QgMU0gb3IgcG90LXNpemUg KDB4JTA4bHgpIGFsaWduZWRcbiIsCj4gKwkJICAgICAobG9uZyl2bWEtPm5vZGUuc3RhcnQsCj4g KwkJICAgICBvYmotPm1hcF9hbmRfZmVuY2VhYmxlLAo+ICsJCSAgICAgKGxvbmcpdm1hLT5ub2Rl LnNpemUpOwo+ICAKPiAgCQlpZiAob2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZICYm IEhBU18xMjhfQllURV9ZX1RJTElORyhkZXYpKQo+ICAJCQl0aWxlX3dpZHRoID0gMTI4Owo+IEBA IC0xNDAsMTAgKzEzNiwxMCBAQCBzdGF0aWMgdm9pZCBpOTE1X3dyaXRlX2ZlbmNlX3JlZyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcmVnLAo+ICAJCXBpdGNoX3ZhbCA9IG9iai0+c3RyaWRl IC8gdGlsZV93aWR0aDsKPiAgCQlwaXRjaF92YWwgPSBmZnMocGl0Y2hfdmFsKSAtIDE7Cj4gIAo+ IC0JCXZhbCA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopOwo+ICsJCXZhbCA9IHZtYS0+ bm9kZS5zdGFydDsKPiAgCQlpZiAob2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZKQo+ ICAJCQl2YWwgfD0gMSA8PCBJODMwX0ZFTkNFX1RJTElOR19ZX1NISUZUOwo+IC0JCXZhbCB8PSBJ OTE1X0ZFTkNFX1NJWkVfQklUUyhzaXplKTsKPiArCQl2YWwgfD0gSTkxNV9GRU5DRV9TSVpFX0JJ VFModm1hLT5ub2RlLnNpemUpOwo+ICAJCXZhbCB8PSBwaXRjaF92YWwgPDwgSTgzMF9GRU5DRV9Q SVRDSF9TSElGVDsKPiAgCQl2YWwgfD0gSTgzMF9GRU5DRV9SRUdfVkFMSUQ7Cj4gIAl9IGVsc2UK PiBAQCAtMTYwLDIyICsxNTYsMjIgQEAgc3RhdGljIHZvaWQgaTgzMF93cml0ZV9mZW5jZV9yZWco c3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHJlZywKPiAgCXVpbnQzMl90IHZhbDsKPiAgCj4g IAlpZiAob2JqKSB7Cj4gLQkJdTMyIHNpemUgPSBpOTE1X2dlbV9vYmpfZ2d0dF9zaXplKG9iaik7 Cj4gKwkJc3RydWN0IGk5MTVfdm1hICp2bWEgPSBpOTE1X2dlbV9vYmplY3RfdG9fZ2d0dChvYmos IE5VTEwpOwo+ICAJCXVpbnQzMl90IHBpdGNoX3ZhbDsKPiAgCj4gLQkJV0FSTigoaTkxNV9nZW1f b2JqX2dndHRfb2Zmc2V0KG9iaikgJiB+STgzMF9GRU5DRV9TVEFSVF9NQVNLKSB8fAo+IC0JCSAg ICAgKHNpemUgJiAtc2l6ZSkgIT0gc2l6ZSB8fAo+IC0JCSAgICAgKGk5MTVfZ2VtX29ial9nZ3R0 X29mZnNldChvYmopICYgKHNpemUgLSAxKSksCj4gLQkJICAgICAib2JqZWN0IDB4JTA4bGx4IG5v dCA1MTJLIG9yIHBvdC1zaXplIDB4JTA4eCBhbGlnbmVkXG4iLAo+IC0JCSAgICAgaTkxNV9nZW1f b2JqX2dndHRfb2Zmc2V0KG9iaiksIHNpemUpOwo+ICsJCVdBUk4oKHZtYS0+bm9kZS5zdGFydCAm IH5JODMwX0ZFTkNFX1NUQVJUX01BU0spIHx8Cj4gKwkJICAgICAhaXNfcG93ZXJfb2ZfMih2bWEt Pm5vZGUuc2l6ZSkgfHwKPiArCQkgICAgICh2bWEtPm5vZGUuc3RhcnQgJiAodm1hLT5ub2RlLnNp emUgLSAxKSksCj4gKwkJICAgICAib2JqZWN0IDB4JTA4bHggbm90IDUxMksgb3IgcG90LXNpemUg MHglMDhseCBhbGlnbmVkXG4iLAo+ICsJCSAgICAgKGxvbmcpdm1hLT5ub2RlLnN0YXJ0LCAobG9u Zyl2bWEtPm5vZGUuc2l6ZSk7Cj4gIAo+ICAJCXBpdGNoX3ZhbCA9IG9iai0+c3RyaWRlIC8gMTI4 Owo+ICAJCXBpdGNoX3ZhbCA9IGZmcyhwaXRjaF92YWwpIC0gMTsKPiAgCj4gLQkJdmFsID0gaTkx NV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaik7Cj4gKwkJdmFsID0gdm1hLT5ub2RlLnN0YXJ0Owo+ ICAJCWlmIChvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kpCj4gIAkJCXZhbCB8PSAx IDw8IEk4MzBfRkVOQ0VfVElMSU5HX1lfU0hJRlQ7Cj4gLQkJdmFsIHw9IEk4MzBfRkVOQ0VfU0la RV9CSVRTKHNpemUpOwo+ICsJCXZhbCB8PSBJODMwX0ZFTkNFX1NJWkVfQklUUyh2bWEtPm5vZGUu c2l6ZSk7Cj4gIAkJdmFsIHw9IHBpdGNoX3ZhbCA8PCBJODMwX0ZFTkNFX1BJVENIX1NISUZUOwo+ ICAJCXZhbCB8PSBJODMwX0ZFTkNFX1JFR19WQUxJRDsKPiAgCX0gZWxzZQo+IEBAIC00MjYsMTMg KzQyMiw3IEBAIGJvb2wKPiAgaTkxNV9nZW1fb2JqZWN0X3Bpbl9mZW5jZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQo+ICB7Cj4gIAlpZiAob2JqLT5mZW5jZV9yZWcgIT0gSTkxNV9G RU5DRV9SRUdfTk9ORSkgewo+IC0JCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IG9iai0+YmFzZS5kZXYtPmRldl9wcml2YXRlOwo+IC0JCXN0cnVjdCBpOTE1X3ZtYSAqZ2d0dF92 bWEgPSBpOTE1X2dlbV9vYmpfdG9fZ2d0dChvYmopOwo+IC0KPiAtCQlXQVJOX09OKCFnZ3R0X3Zt YSB8fAo+IC0JCQlkZXZfcHJpdi0+ZmVuY2VfcmVnc1tvYmotPmZlbmNlX3JlZ10ucGluX2NvdW50 ID4KPiAtCQkJZ2d0dF92bWEtPnBpbl9jb3VudCk7Cj4gLQkJZGV2X3ByaXYtPmZlbmNlX3JlZ3Nb b2JqLT5mZW5jZV9yZWddLnBpbl9jb3VudCsrOwo+ICsJCXRvX2k5MTUob2JqLT5iYXNlLmRldikt PmZlbmNlX3JlZ3Nbb2JqLT5mZW5jZV9yZWddLnBpbl9jb3VudCsrOwo+ICAJCXJldHVybiB0cnVl Owo+ICAJfSBlbHNlCj4gIAkJcmV0dXJuIGZhbHNlOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5jCj4gaW5kZXggYzdhNzdlMGYxOGMyLi43NzViNWE0ZThhNWIgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0zMzI1LDE0ICszMzI1LDEwIEBAIF9faTkxNV9n ZW1fdm1hX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAKPiAgCUdF TV9CVUdfT04odm0tPmNsb3NlZCk7Cj4gIAo+IC0JaWYgKFdBUk5fT04oaTkxNV9pc19nZ3R0KHZt KSAhPSAhIWdndHRfdmlldykpCj4gLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gLQo+ICAJ dm1hID0ga21lbV9jYWNoZV96YWxsb2ModG9faTkxNShvYmotPmJhc2UuZGV2KS0+dm1hcywgR0ZQ X0tFUk5FTCk7Cj4gIAlpZiAodm1hID09IE5VTEwpCj4gIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Cj4gIAo+IC0JSU5JVF9MSVNUX0hFQUQoJnZtYS0+b2JqX2xpbmspOwo+ICAJSU5JVF9MSVNU X0hFQUQoJnZtYS0+ZXhlY19saXN0KTsKPiAgCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZt YS0+bGFzdF9yZWFkKTsgaSsrKQo+ICAJCWluaXRfcmVxdWVzdF9hY3RpdmUoJnZtYS0+bGFzdF9y ZWFkW2ldLCBpOTE1X3ZtYV9yZXRpcmUpOwo+IEBAIC0zMzQyLDQ5ICszMzM4LDY5IEBAIF9faTkx NV9nZW1fdm1hX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAJdm1h LT5zaXplID0gb2JqLT5iYXNlLnNpemU7Cj4gIAl2bWEtPmlzX2dndHQgPSBpOTE1X2lzX2dndHQo dm0pOwo+ICAKPiAtCWlmIChpOTE1X2lzX2dndHQodm0pKSB7Cj4gKwlpZiAoZ2d0dF92aWV3KSB7 Cj4gIAkJdm1hLT5nZ3R0X3ZpZXcgPSAqZ2d0dF92aWV3Owo+ICAJCWlmIChnZ3R0X3ZpZXctPnR5 cGUgPT0gSTkxNV9HR1RUX1ZJRVdfUEFSVElBTCkKPiAgCQkJdm1hLT5zaXplID0gZ2d0dF92aWV3 LT5wYXJhbXMucGFydGlhbC5zaXplIDw8IFBBR0VfU0hJRlQ7Cj4gIAkJZWxzZSBpZiAoZ2d0dF92 aWV3LT50eXBlID09IEk5MTVfR0dUVF9WSUVXX1JPVEFURUQpCj4gIAkJCXZtYS0+c2l6ZSA9IGlu dGVsX3JvdGF0aW9uX2luZm9fc2l6ZSgmZ2d0dF92aWV3LT5wYXJhbXMucm90YXRlZCkgPDwgUEFH RV9TSElGVDsKPiAgCX0gZWxzZQo+ICsKPiArCWlmICghdm1hLT5pc19nZ3R0KQo+ICAJCWk5MTVf cHBndHRfZ2V0KGk5MTVfdm1fdG9fcHBndHQodm0pKTsKPiAgCj4gIAlsaXN0X2FkZF90YWlsKCZ2 bWEtPm9ial9saW5rLCAmb2JqLT52bWFfbGlzdCk7Cj4gLQo+ICAJcmV0dXJuIHZtYTsKPiAgfQo+ ICAKPiArc3RhdGljIGlubGluZSBib29sIHZtYV9tYXRjaGVzKHN0cnVjdCBpOTE1X3ZtYSAqdm1h LAo+ICsJCQkgICAgICAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gKwkJCSAgICAg ICBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpCj4gK3sKPiArCWlmICh2bWEtPnZt ICE9IHZtKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAoIXZtYS0+aXNfZ2d0dCkKPiAr CQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlpZiAodmlldyA9PSBOVUxMKQo+ICsJCXJldHVybiB2bWEt PmdndHRfdmlldy50eXBlID09IDA7Cj4gKwo+ICsJaWYgKHZtYS0+Z2d0dF92aWV3LnR5cGUgIT0g dmlldy0+dHlwZSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIG1lbWNtcCgmdm1h LT5nZ3R0X3ZpZXcucGFyYW1zLAo+ICsJCSAgICAgICZ2aWV3LT5wYXJhbXMsCj4gKwkJICAgICAg c2l6ZW9mKHZpZXctPnBhcmFtcykpID09IDA7Cj4gK30KPiArCj4gIHN0cnVjdCBpOTE1X3ZtYSAq Cj4gLWk5MTVfZ2VtX29ial9sb29rdXBfb3JfY3JlYXRlX3ZtYShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+IC0JCQkJICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAr aTkxNV9nZW1fb2JqX3RvX3ZtYShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJ CSAgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiArCQkgICAgY29uc3Qgc3RydWN0 IGk5MTVfZ2d0dF92aWV3ICp2aWV3KQo+ICB7Cj4gIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAg Cj4gLQl2bWEgPSBpOTE1X2dlbV9vYmpfdG9fdm1hKG9iaiwgdm0pOwo+IC0JaWYgKCF2bWEpCj4g LQkJdm1hID0gX19pOTE1X2dlbV92bWFfY3JlYXRlKG9iaiwgdm0sCj4gLQkJCQkJICAgIGk5MTVf aXNfZ2d0dCh2bSkgPyAmaTkxNV9nZ3R0X3ZpZXdfbm9ybWFsIDogTlVMTCk7Cj4gKwlsaXN0X2Zv cl9lYWNoX2VudHJ5X3JldmVyc2Uodm1hLCAmb2JqLT52bWFfbGlzdCwgb2JqX2xpbmspCj4gKwkJ aWYgKHZtYV9tYXRjaGVzKHZtYSwgdm0sIHZpZXcpKQo+ICsJCQlyZXR1cm4gdm1hOwo+ICAKPiAt CXJldHVybiB2bWE7Cj4gKwlyZXR1cm4gTlVMTDsKPiAgfQo+ICAKPiAgc3RydWN0IGk5MTVfdm1h ICoKPiAtaTkxNV9nZW1fb2JqX2xvb2t1cF9vcl9jcmVhdGVfZ2d0dF92bWEoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0 X3ZpZXcgKnZpZXcpCj4gK2k5MTVfZ2VtX29ial9sb29rdXBfb3JfY3JlYXRlX3ZtYShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkJICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwKPiArCQkJCSAgY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3KQo+ICB7 Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKPiAtCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAtCXN0cnVjdCBpOTE1 X2dndHQgKmdndHQgPSAmZGV2X3ByaXYtPmdndHQ7Cj4gLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYSA9 IGk5MTVfZ2VtX29ial90b19nZ3R0X3ZpZXcob2JqLCB2aWV3KTsKPiArCXN0cnVjdCBpOTE1X3Zt YSAqdm1hOwo+ICAKPiArCXZtYSA9IGk5MTVfZ2VtX29ial90b192bWEob2JqLCB2bSwgdmlldyk7 Cj4gIAlpZiAoIXZtYSkKPiAtCQl2bWEgPSBfX2k5MTVfZ2VtX3ZtYV9jcmVhdGUob2JqLCAmZ2d0 dC0+YmFzZSwgdmlldyk7Cj4gKwkJdm1hID0gX19pOTE1X2dlbV92bWFfY3JlYXRlKG9iaiwgdm0s IHZpZXcpOwo+ICAKPiAgCUdFTV9CVUdfT04odm1hLT5jbG9zZWQpOwo+ICAJcmV0dXJuIHZtYTsK PiAtCj4gIH0KPiAgCj4gIHN0YXRpYyBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5oCj4gaW5kZXggNTY1NTM1OGE2MGUxLi41YjI4ZGMyNTFlNjAgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+IEBAIC01OTAsMjAgKzU5MCw2IEBA IHZvaWQgaTkxNV9nZW1fcmVzdG9yZV9ndHRfbWFwcGluZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRl dik7Cj4gIGludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fZ3R0X3ByZXBhcmVfb2JqZWN0KHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwo+ICB2b2lkIGk5MTVfZ2VtX2d0dF9maW5pc2hf b2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwo+ICAKPiAtc3RhdGljIGlu bGluZSBib29sCj4gLWk5MTVfZ2d0dF92aWV3X2VxdWFsKGNvbnN0IHN0cnVjdCBpOTE1X2dndHRf dmlldyAqYSwKPiAtICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92 aWV3ICpiKQo+IC17Cj4gLQlpZiAoV0FSTl9PTighYSB8fCAhYikpCj4gLQkJcmV0dXJuIGZhbHNl Owo+IC0KPiAtCWlmIChhLT50eXBlICE9IGItPnR5cGUpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0J aWYgKGEtPnR5cGUgIT0gSTkxNV9HR1RUX1ZJRVdfTk9STUFMKQo+IC0JCXJldHVybiAhbWVtY21w KCZhLT5wYXJhbXMsICZiLT5wYXJhbXMsIHNpemVvZihhLT5wYXJhbXMpKTsKPiAtCXJldHVybiB0 cnVlOwo+IC19Cj4gLQo+ICAvKioKPiAgICogaTkxNV92bWFfcGluX2lvbWFwIC0gY2FsbHMgaW9y ZW1hcF93YyB0byBtYXAgdGhlIEdHVFQgVk1BIHZpYSB0aGUgYXBlcnR1cmUKPiAgICogQHZtYTog Vk1BIHRvIGlvbWFwCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X3JlbmRlcl9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVyX3N0 YXRlLmMKPiBpbmRleCA0Y2Y4MjY5N2IzZGIuLjZlNmVhYzQzZGIxOSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZW5kZXJfc3RhdGUuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5jCj4gQEAgLTMxLDcgKzMxLDcg QEAKPiAgc3RydWN0IHJlbmRlcl9zdGF0ZSB7Cj4gIAljb25zdCBzdHJ1Y3QgaW50ZWxfcmVuZGVy c3RhdGVfcm9kYXRhICpyb2RhdGE7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq Owo+IC0JdTY0IGdndHRfb2Zmc2V0Owo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gIAlpbnQg Z2VuOwo+ICAJdTMyIGF1eF9iYXRjaF9zaXplOwo+ICAJdTMyIGF1eF9iYXRjaF9vZmZzZXQ7Cj4g QEAgLTU3LDEwICs1Nyw5IEBAIHJlbmRlcl9zdGF0ZV9nZXRfcm9kYXRhKGNvbnN0IGludCBnZW4p Cj4gIHN0YXRpYyBpbnQgcmVuZGVyX3N0YXRlX2luaXQoc3RydWN0IHJlbmRlcl9zdGF0ZSAqc28s Cj4gIAkJCSAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gLQlp bnQgcmV0Owo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gIAo+ICAJc28tPmdlbiA9IElOVEVM X0dFTihkZXZfcHJpdik7Cj4gLQlzby0+Z2d0dF9vZmZzZXQgPSAwOwo+ICAJc28tPnJvZGF0YSA9 IHJlbmRlcl9zdGF0ZV9nZXRfcm9kYXRhKHNvLT5nZW4pOwo+ICAJaWYgKHNvLT5yb2RhdGEgPT0g TlVMTCkKPiAgCQlyZXR1cm4gMDsKPiBAQCAtNzIsMTYgKzcxLDE0IEBAIHN0YXRpYyBpbnQgcmVu ZGVyX3N0YXRlX2luaXQoc3RydWN0IHJlbmRlcl9zdGF0ZSAqc28sCj4gIAlpZiAoSVNfRVJSKHNv LT5vYmopKQo+ICAJCXJldHVybiBQVFJfRVJSKHNvLT5vYmopOwo+ICAKPiAtCXJldCA9IGk5MTVf Z2VtX29iamVjdF9nZ3R0X3Bpbihzby0+b2JqLCBOVUxMLCAwLCAwLCAwKTsKPiAtCWlmIChyZXQp Cj4gLQkJZ290byBmcmVlX2dlbTsKPiArCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3Bpbihz by0+b2JqLCBOVUxMLCAwLCAwLCAwKTsKPiArCWlmIChJU19FUlIodm1hKSkgewo+ICsJCWk5MTVf Z2VtX29iamVjdF9wdXQoc28tPm9iaik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIodm1hKTsKPiArCX0K PiAgCj4gLQlzby0+Z2d0dF9vZmZzZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoc28tPm9i aik7Cj4gKwlzby0+dm1hID0gdm1hOwo+ICAJcmV0dXJuIDA7Cj4gLQo+IC1mcmVlX2dlbToKPiAt CWk5MTVfZ2VtX29iamVjdF9wdXQoc28tPm9iaik7Cj4gLQlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ ICAvKgo+IEBAIC0xMjEsNyArMTE4LDcgQEAgc3RhdGljIGludCByZW5kZXJfc3RhdGVfc2V0dXAo c3RydWN0IHJlbmRlcl9zdGF0ZSAqc28pCj4gIAkJdTMyIHMgPSByb2RhdGEtPmJhdGNoW2ldOwo+ ICAKPiAgCQlpZiAoaSAqIDQgID09IHJvZGF0YS0+cmVsb2NbcmVsb2NfaW5kZXhdKSB7Cj4gLQkJ CXU2NCByID0gcyArIHNvLT5nZ3R0X29mZnNldDsKPiArCQkJdTY0IHIgPSBzICsgc28tPnZtYS0+ bm9kZS5zdGFydCwKPiAgCQkJcyA9IGxvd2VyXzMyX2JpdHMocik7Cj4gIAkJCWlmIChzby0+Z2Vu ID49IDgpIHsKPiAgCQkJCWlmIChpICsgMSA+PSByb2RhdGEtPmJhdGNoX2l0ZW1zIHx8Cj4gQEAg LTE3Niw3ICsxNzMsNyBAQCBlcnJfb3V0Ogo+ICAKPiAgc3RhdGljIHZvaWQgcmVuZGVyX3N0YXRl X2Zpbmkoc3RydWN0IHJlbmRlcl9zdGF0ZSAqc28pCj4gIHsKPiAtCWk5MTVfZ2VtX29iamVjdF9n Z3R0X3VucGluKHNvLT5vYmopOwo+ICsJaTkxNV92bWFfdW5waW4oc28tPnZtYSk7Cj4gIAlpOTE1 X2dlbV9vYmplY3RfcHV0KHNvLT5vYmopOwo+ICB9Cj4gIAo+IEBAIC0yMDksMTQgKzIwNiwxNCBA QCBpbnQgaTkxNV9nZW1fcmVuZGVyX3N0YXRlX2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXEpCj4gIAlzdHJ1Y3QgcmVuZGVyX3N0YXRlIHNvOwo+ICAJaW50IHJldDsKPiAgCj4g LQlyZXQgPSByZW5kZXJfc3RhdGVfcHJlcGFyZShyZXEtPmVuZ2luZSwgJnNvKTsKPiArCXJldCA9 IHJlbmRlcl9zdGF0ZV9wcmVwYXJlKHJlcS0+ZW5naW5lLCBtZW1zZXQoJnNvLCAwLCBzaXplb2Yo c28pKSk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ICAJaWYgKHNvLnJvZGF0 YSA9PSBOVUxMKQo+ICAJCXJldHVybiAwOwo+ICAKPiAtCXJldCA9IHJlcS0+ZW5naW5lLT5lbWl0 X2JiX3N0YXJ0KHJlcSwgc28uZ2d0dF9vZmZzZXQsCj4gKwlyZXQgPSByZXEtPmVuZ2luZS0+ZW1p dF9iYl9zdGFydChyZXEsIHNvLnZtYS0+bm9kZS5zdGFydCwKPiAgCQkJCQkgc28ucm9kYXRhLT5i YXRjaF9pdGVtcyAqIDQsCj4gIAkJCQkJIEk5MTVfRElTUEFUQ0hfU0VDVVJFKTsKPiAgCWlmIChy ZXQpCj4gQEAgLTIyNCw3ICsyMjEsNyBAQCBpbnQgaTkxNV9nZW1fcmVuZGVyX3N0YXRlX2luaXQo c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gIAo+ICAJaWYgKHNvLmF1eF9iYXRj aF9zaXplID4gOCkgewo+ICAJCXJldCA9IHJlcS0+ZW5naW5lLT5lbWl0X2JiX3N0YXJ0KHJlcSwK PiAtCQkJCQkJIChzby5nZ3R0X29mZnNldCArCj4gKwkJCQkJCSAoc28udm1hLT5ub2RlLnN0YXJ0 ICsKPiAgCQkJCQkJICBzby5hdXhfYmF0Y2hfb2Zmc2V0KSwKPiAgCQkJCQkJIHNvLmF1eF9iYXRj aF9zaXplLAo+ICAJCQkJCQkgSTkxNV9ESVNQQVRDSF9TRUNVUkUpOwo+IEBAIC0yMzIsNyArMjI5 LDcgQEAgaW50IGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZV9pbml0KHN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxKQo+ICAJCQlnb3RvIG91dDsKPiAgCX0KPiAgCj4gLQlpOTE1X3ZtYV9tb3Zl X3RvX2FjdGl2ZShpOTE1X2dlbV9vYmpfdG9fZ2d0dChzby5vYmopLCByZXEsIDApOwo+ICsJaTkx NV92bWFfbW92ZV90b19hY3RpdmUoc28udm1hLCByZXEsIDApOwo+ICBvdXQ6Cj4gIAlyZW5kZXJf c3RhdGVfZmluaSgmc28pOwo+ICAJcmV0dXJuIHJldDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVyX3N0YXRlLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9yZW5kZXJfc3RhdGUuaAo+IGluZGV4IGM0NGZjYTg1OTliYi4uMThjY2UzZjA2 ZTljIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlbmRlcl9z dGF0ZS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVyX3N0YXRl LmgKPiBAQCAtMjQsNyArMjQsNyBAQAo+ICAjaWZuZGVmIF9JOTE1X0dFTV9SRU5ERVJfU1RBVEVf SF8KPiAgI2RlZmluZSBfSTkxNV9HRU1fUkVOREVSX1NUQVRFX0hfCj4gIAo+IC0jaW5jbHVkZSA8 bGludXgvdHlwZXMuaD4KPiArc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0Owo+ICAKPiAgaW50 IGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZV9pbml0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Jl cXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYwo+IGluZGV4 IDgxMDFkOTE2OTAyNy4uNWEzZDgxZTU0NThiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX3JlcXVlc3QuYwo+IEBAIC00MDQsMTggKzQwNCwxMiBAQCBzdGF0aWMgdm9pZCBpOTE1 X2dlbV9tYXJrX2J1c3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgKi8K PiAgdm9pZCBfX2k5MTVfYWRkX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpy ZXF1ZXN0LCBib29sIGZsdXNoX2NhY2hlcykKPiAgewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lOwo+IC0Jc3RydWN0IGludGVsX3JpbmcgKnJpbmc7Cj4gKwlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUgPSByZXF1ZXN0LT5lbmdpbmU7Cj4gKwlzdHJ1Y3QgaW50ZWxfcmlu ZyAqcmluZyA9IHJlcXVlc3QtPnJpbmc7Cj4gIAl1MzIgcmVxdWVzdF9zdGFydDsKPiAgCXUzMiBy ZXNlcnZlZF90YWlsOwo+ICAJaW50IHJldDsKPiAgCj4gLQlpZiAoV0FSTl9PTihyZXF1ZXN0ID09 IE5VTEwpKQo+IC0JCXJldHVybjsKPiAtCj4gLQllbmdpbmUgPSByZXF1ZXN0LT5lbmdpbmU7Cj4g LQlyaW5nID0gcmVxdWVzdC0+cmluZzsKPiAtCj4gIAkvKgo+ICAJICogVG8gZW5zdXJlIHRoYXQg dGhpcyBjYWxsIHdpbGwgbm90IGZhaWwsIHNwYWNlIGZvciBpdHMgZW1pc3Npb25zCj4gIAkgKiBz aG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gcmVzZXJ2ZWQgaW4gdGhlIHJpbmcgYnVmZmVyLiBMZXQg dGhlIHJpbmcKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVx dWVzdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oCj4gaW5kZXgg ODdlMDU1MjY3OTA0Li5hOGUyMjhmNWNlYjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fcmVxdWVzdC5oCj4gQEAgLTExMSw3ICsxMTEsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3Qgewo+ICAKPiAgCS8qKiBCYXRjaCBidWZmZXIgcmVsYXRlZCB0byB0aGlzIHJlcXVl c3QgaWYgYW55ICh1c2VkIGZvcgo+ICAJICogZXJyb3Igc3RhdGUgZHVtcCBvbmx5KSAqLwo+IC0J c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iajsKPiArCXN0cnVjdCBpOTE1X3Zt YSAqYmF0Y2g7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9saXN0Owo+ICAKPiAgCS8qKiBU aW1lIGF0IHdoaWNoIHRoaXMgcmVxdWVzdCB3YXMgZW1pdHRlZCwgaW4gamlmZmllcy4gKi8KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwo+IGluZGV4IGE4ODFjMjQzZmNhMi4u NDE1ZmEwNGQ1MjMyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X3N0b2xlbi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMK PiBAQCAtNjgzLDcgKzY4Myw3IEBAIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVuX2Zvcl9w cmVhbGxvY2F0ZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCWlmIChndHRfb2Zmc2V0ID09 IEk5MTVfR1RUX09GRlNFVF9OT05FKQo+ICAJCXJldHVybiBvYmo7Cj4gIAo+IC0Jdm1hID0gaTkx NV9nZW1fb2JqX2xvb2t1cF9vcl9jcmVhdGVfdm1hKG9iaiwgJmdndHQtPmJhc2UpOwo+ICsJdm1h ID0gaTkxNV9nZW1fb2JqX2xvb2t1cF9vcl9jcmVhdGVfdm1hKG9iaiwgJmdndHQtPmJhc2UsIE5V TEwpOwo+ICAJaWYgKElTX0VSUih2bWEpKSB7Cj4gIAkJcmV0ID0gUFRSX0VSUih2bWEpOwo+ICAJ CWdvdG8gZXJyOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90 aWxpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCj4gaW5kZXgg ZDZhY2QwYTI3YzA2Li4yOWZjNGRmZDE5NDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV90aWxpbmcuYwo+IEBAIC0xMTQsMzMgKzExNCw0NCBAQCBpOTE1X3RpbGluZ19vayhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgc3RyaWRlLCBpbnQgc2l6ZSwgaW50IHRpbGluZ19tb2Rl KQo+ICB9Cj4gIAo+ICAvKiBJcyB0aGUgY3VycmVudCBHVFQgYWxsb2NhdGlvbiB2YWxpZCBmb3Ig dGhlIGNoYW5nZSBpbiB0aWxpbmc/ICovCj4gLXN0YXRpYyBib29sCj4gK3N0YXRpYyBpbnQKPiAg aTkxNV9nZW1fb2JqZWN0X2ZlbmNlX29rKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos IGludCB0aWxpbmdfbW9kZSkKPiAgewo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gIAl1MzIg c2l6ZTsKPiAgCj4gIAlpZiAodGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfTk9ORSkKPiAtCQly ZXR1cm4gdHJ1ZTsKPiArCQlyZXR1cm4gMDsKPiAgCj4gLQlpZiAoSU5URUxfSU5GTyhvYmotPmJh c2UuZGV2KS0+Z2VuID49IDQpCj4gLQkJcmV0dXJuIHRydWU7Cj4gKwlpZiAoSU5URUxfR0VOKG9i ai0+YmFzZS5kZXYpID49IDQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJdm1hID0gaTkxNV9nZW1f b2JqZWN0X3RvX2dndHQob2JqLCBOVUxMKTsKPiArCWlmICh2bWEgPT0gTlVMTCkKPiArCQlyZXR1 cm4gMDsKPiArCj4gKwlpZiAoIW9iai0+bWFwX2FuZF9mZW5jZWFibGUpCj4gKwkJcmV0dXJuIDA7 Cj4gIAo+ICAJaWYgKElTX0dFTjMob2JqLT5iYXNlLmRldikpIHsKPiAtCQlpZiAoaTkxNV9nZW1f b2JqX2dndHRfb2Zmc2V0KG9iaikgJiB+STkxNV9GRU5DRV9TVEFSVF9NQVNLKQo+IC0JCQlyZXR1 cm4gZmFsc2U7Cj4gKwkJaWYgKHZtYS0+bm9kZS5zdGFydCAmIH5JOTE1X0ZFTkNFX1NUQVJUX01B U0spCj4gKwkJCWdvdG8gYmFkOwo+ICAJfSBlbHNlIHsKPiAtCQlpZiAoaTkxNV9nZW1fb2JqX2dn dHRfb2Zmc2V0KG9iaikgJiB+STgzMF9GRU5DRV9TVEFSVF9NQVNLKQo+IC0JCQlyZXR1cm4gZmFs c2U7Cj4gKwkJaWYgKHZtYS0+bm9kZS5zdGFydCAmIH5JODMwX0ZFTkNFX1NUQVJUX01BU0spCj4g KwkJCWdvdG8gYmFkOwo+ICAJfQo+ICAKPiAgCXNpemUgPSBpOTE1X2dlbV9nZXRfZ3R0X3NpemUo b2JqLT5iYXNlLmRldiwgb2JqLT5iYXNlLnNpemUsIHRpbGluZ19tb2RlKTsKPiAtCWlmIChpOTE1 X2dlbV9vYmpfZ2d0dF9zaXplKG9iaikgIT0gc2l6ZSkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gKwlp ZiAodm1hLT5ub2RlLnNpemUgPCBzaXplKQo+ICsJCWdvdG8gYmFkOwo+ICAKPiAtCWlmIChpOTE1 X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSAmIChzaXplIC0gMSkpCj4gLQkJcmV0dXJuIGZhbHNl Owo+ICsJaWYgKHZtYS0+bm9kZS5zdGFydCAmIChzaXplIC0gMSkpCj4gKwkJZ290byBiYWQ7Cj4g IAo+IC0JcmV0dXJuIHRydWU7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK2JhZDoKPiArCXJldHVybiBp OTE1X3ZtYV91bmJpbmQodm1hKTsKPiAgfQo+ICAKPiAgLyoqCj4gQEAgLTIyNywxMCArMjM4LDcg QEAgaTkxNV9nZW1fc2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAo+ICAJCSAqIGhhcyB0byBhbHNvIGluY2x1ZGUgdGhlIHVuZmVuY2VkIHJlZ2lzdGVyIHRoZSBH UFUgdXNlcwo+ICAJCSAqIHdoaWxzdCBleGVjdXRpbmcgYSBmZW5jZWQgY29tbWFuZCBmb3IgYW4g dW50aWxlZCBvYmplY3QuCj4gIAkJICovCj4gLQkJaWYgKG9iai0+bWFwX2FuZF9mZW5jZWFibGUg JiYKPiAtCQkgICAgIWk5MTVfZ2VtX29iamVjdF9mZW5jZV9vayhvYmosIGFyZ3MtPnRpbGluZ19t b2RlKSkKPiAtCQkJcmV0ID0gaTkxNV92bWFfdW5iaW5kKGk5MTVfZ2VtX29ial90b19nZ3R0KG9i aikpOwo+IC0KPiArCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZmVuY2Vfb2sob2JqLCBhcmdzLT50 aWxpbmdfbW9kZSk7Cj4gIAkJaWYgKHJldCA9PSAwKSB7Cj4gIAkJCWlmIChvYmotPnBhZ2VzICYm Cj4gIAkJCSAgICBvYmotPm1hZHYgPT0gSTkxNV9NQURWX1dJTExORUVEICYmCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCj4gaW5kZXggMzY3YjhiMmNlNWYyLi4zZTQyNzA1ZTJm YTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBAQCAtNjMyLDE4 ICs2MzIsMjEgQEAgc3RhdGljIHZvaWQgaTkxNV9lcnJvcl9zdGF0ZV9mcmVlKHN0cnVjdCBrcmVm ICplcnJvcl9yZWYpCj4gIAo+ICBzdGF0aWMgc3RydWN0IGRybV9pOTE1X2Vycm9yX29iamVjdCAq Cj4gIGk5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gLQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqc3JjLAo+IC0JCQkgc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gKwkJCSBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkK PiAgewo+ICAJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9ICZkZXZfcHJpdi0+Z2d0dDsKPiArCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpzcmM7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jf b2JqZWN0ICpkc3Q7Cj4gLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYSA9IE5VTEw7Cj4gIAlpbnQgbnVt X3BhZ2VzOwo+ICAJYm9vbCB1c2VfZ2d0dDsKPiAgCWludCBpID0gMDsKPiAgCXU2NCByZWxvY19v ZmZzZXQ7Cj4gIAo+IC0JaWYgKHNyYyA9PSBOVUxMIHx8IHNyYy0+cGFnZXMgPT0gTlVMTCkKPiAr CWlmICh2bWEgPT0gTlVMTCkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlzcmMgPSB2bWEtPm9i ajsKPiArCWlmIChzcmMtPnBhZ2VzID09IE5VTEwpCj4gIAkJcmV0dXJuIE5VTEw7Cj4gIAo+ICAJ bnVtX3BhZ2VzID0gc3JjLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKPiBAQCAtNjUyLDI2ICs2 NTUsMTkgQEAgaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiAgCWlmIChkc3QgPT0gTlVMTCkKPiAgCQlyZXR1cm4gTlVMTDsKPiAgCj4g LQlpZiAoaTkxNV9nZW1fb2JqX2JvdW5kKHNyYywgdm0pKQo+IC0JCWRzdC0+Z3R0X29mZnNldCA9 IGk5MTVfZ2VtX29ial9vZmZzZXQoc3JjLCB2bSk7Cj4gLQllbHNlCj4gLQkJZHN0LT5ndHRfb2Zm c2V0ID0gLTE7Cj4gLQo+IC0JcmVsb2Nfb2Zmc2V0ID0gZHN0LT5ndHRfb2Zmc2V0Owo+IC0JaWYg KGk5MTVfaXNfZ2d0dCh2bSkpCj4gLQkJdm1hID0gaTkxNV9nZW1fb2JqX3RvX2dndHQoc3JjKTsK PiArCXJlbG9jX29mZnNldCA9IGRzdC0+Z3R0X29mZnNldCA9IHZtYS0+bm9kZS5zdGFydDsKPiAg CXVzZV9nZ3R0ID0gKHNyYy0+Y2FjaGVfbGV2ZWwgPT0gSTkxNV9DQUNIRV9OT05FICYmCj4gLQkJ ICAgdm1hICYmICh2bWEtPmJvdW5kICYgR0xPQkFMX0JJTkQpICYmCj4gKwkJICAgKHZtYS0+Ym91 bmQgJiBHTE9CQUxfQklORCkgJiYKPiAgCQkgICByZWxvY19vZmZzZXQgKyBudW1fcGFnZXMgKiBQ QUdFX1NJWkUgPD0gZ2d0dC0+bWFwcGFibGVfZW5kKTsKPiAgCj4gIAkvKiBDYW5ub3QgYWNjZXNz IHN0b2xlbiBhZGRyZXNzIGRpcmVjdGx5LCB0cnkgdG8gdXNlIHRoZSBhcGVydHVyZSAqLwo+ICAJ aWYgKHNyYy0+c3RvbGVuKSB7Cj4gIAkJdXNlX2dndHQgPSB0cnVlOwo+ICAKPiAtCQlpZiAoISh2 bWEgJiYgdm1hLT5ib3VuZCAmIEdMT0JBTF9CSU5EKSkKPiArCQlpZiAoISh2bWEtPmJvdW5kICYg R0xPQkFMX0JJTkQpKQo+ICAJCQlnb3RvIHVud2luZDsKPiAgCj4gLQkJcmVsb2Nfb2Zmc2V0ID0g aTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KHNyYyk7Cj4gKwkJcmVsb2Nfb2Zmc2V0ID0gdm1hLT5u b2RlLnN0YXJ0Owo+ICAJCWlmIChyZWxvY19vZmZzZXQgKyBudW1fcGFnZXMgKiBQQUdFX1NJWkUg PiBnZ3R0LT5tYXBwYWJsZV9lbmQpCj4gIAkJCWdvdG8gdW53aW5kOwo+ICAJfQo+IEBAIC03MjQs OCArNzIwLDYgQEAgdW53aW5kOgo+ICAJa2ZyZWUoZHN0KTsKPiAgCXJldHVybiBOVUxMOwo+ICB9 Cj4gLSNkZWZpbmUgaTkxNV9lcnJvcl9nZ3R0X29iamVjdF9jcmVhdGUoZGV2X3ByaXYsIHNyYykg XAo+IC0JaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKChkZXZfcHJpdiksIChzcmMpLCAmKGRldl9w cml2KS0+Z2d0dC5iYXNlKQo+ICAKPiAgLyogVGhlIGVycm9yIGNhcHR1cmUgaXMgc3BlY2lhbCBh cyB0cmllcyB0byBydW4gdW5kZXJuZWF0aCB0aGUgbm9ybWFsCj4gICAqIGxvY2tpbmcgcnVsZXMg LSBzbyB3ZSB1c2UgdGhlIHJhdyB2ZXJzaW9uIG9mIHRoZSBpOTE1X2dlbV9hY3RpdmUgbG9va3Vw Lgo+IEBAIC04NTEsMTAgKzg0NSwxMCBAQCBzdGF0aWMgdm9pZCBnZW44X3JlY29yZF9zZW1hcGhv cmVfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJaWYgKCFpOTE1 LnNlbWFwaG9yZXMpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWlmICghZXJyb3ItPnNlbWFwaG9yZV9v YmopCj4gKwlpZiAoIWVycm9yLT5zZW1hcGhvcmVfb2JqICYmIGRldl9wcml2LT5zZW1hcGhvcmVf dm1hKQo+ICAJCWVycm9yLT5zZW1hcGhvcmVfb2JqID0KPiAtCQkJaTkxNV9lcnJvcl9nZ3R0X29i amVjdF9jcmVhdGUoZGV2X3ByaXYsCj4gLQkJCQkJCSAgICAgIGRldl9wcml2LT5zZW1hcGhvcmVf b2JqKTsKPiArCQkJaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKGRldl9wcml2LAo+ICsJCQkJCQkg ZGV2X3ByaXYtPnNlbWFwaG9yZV92bWEpOwo+ICAKPiAgCWZvcl9lYWNoX2VuZ2luZV9pZCh0bywg ZGV2X3ByaXYsIGlkKSB7Cj4gIAkJaW50IGlkeDsKPiBAQCAtMTA0Miw5ICsxMDM2LDcgQEAgc3Rh dGljIHZvaWQgaTkxNV9nZW1fcmVjb3JkX2FjdGl2ZV9jb250ZXh0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiAgCj4gIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmRldl9wcml2 LT5nZ3R0LmJhc2UuYWN0aXZlX2xpc3QsIHZtX2xpbmspIHsKPiAgCQlpZiAoKGVycm9yLT5jY2lk ICYgUEFHRV9NQVNLKSA9PSB2bWEtPm5vZGUuc3RhcnQpIHsKPiAtCQkJZXJpbmctPmN0eCA9IGk5 MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShkZXZfcHJpdiwKPiAtCQkJCQkJCSAgICAgIHZtYS0+b2Jq LAo+IC0JCQkJCQkJICAgICAgdm1hLT52bSk7Cj4gKwkJCWVyaW5nLT5jdHggPSBpOTE1X2Vycm9y X29iamVjdF9jcmVhdGUoZGV2X3ByaXYsIHZtYSk7Cj4gIAkJCWJyZWFrOwo+ICAJCX0KPiAgCX0K PiBAQCAtMTA4NiwxMyArMTA3OCwxMiBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9yZWNvcmRfcmlu Z3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJCQkgKi8KPiAgCQkJZXJy b3ItPnJpbmdbaV0uYmF0Y2hidWZmZXIgPQo+ICAJCQkJaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRl KGRldl9wcml2LAo+IC0JCQkJCQkJIHJlcXVlc3QtPmJhdGNoX29iaiwKPiAtCQkJCQkJCSB2bSk7 Cj4gKwkJCQkJCQkgcmVxdWVzdC0+YmF0Y2gpOwo+ICAKPiAgCQkJaWYgKEhBU19CUk9LRU5fQ1Nf VExCKGRldl9wcml2KSkKPiAgCQkJCWVycm9yLT5yaW5nW2ldLndhX2JhdGNoYnVmZmVyID0KPiAt CQkJCQlpOTE1X2Vycm9yX2dndHRfb2JqZWN0X2NyZWF0ZShkZXZfcHJpdiwKPiAtCQkJCQkJCQkg ICAgICBlbmdpbmUtPnNjcmF0Y2gub2JqKTsKPiArCQkJCQlpOTE1X2Vycm9yX29iamVjdF9jcmVh dGUoZGV2X3ByaXYsCj4gKwkJCQkJCQkJIGVuZ2luZS0+c2NyYXRjaCk7Cj4gIAo+ICAJCQlpZiAo cmVxdWVzdC0+cGlkKSB7Cj4gIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Cj4gQEAgLTEx MTIsMTcgKzExMDMsMTUgQEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVjb3JkX3JpbmdzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCQkJZXJyb3ItPnJpbmdbaV0uY3B1X3Jp bmdfaGVhZCA9IHJpbmctPmhlYWQ7Cj4gIAkJCWVycm9yLT5yaW5nW2ldLmNwdV9yaW5nX3RhaWwg PSByaW5nLT50YWlsOwo+ICAJCQllcnJvci0+cmluZ1tpXS5yaW5nYnVmZmVyID0KPiAtCQkJCWk5 MTVfZXJyb3JfZ2d0dF9vYmplY3RfY3JlYXRlKGRldl9wcml2LAo+IC0JCQkJCQkJICAgICAgcmlu Zy0+b2JqKTsKPiArCQkJCWk5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShkZXZfcHJpdiwgcmluZy0+ dm1hKTsKPiAgCQl9Cj4gIAo+ICAJCWVycm9yLT5yaW5nW2ldLmh3c19wYWdlID0KPiAtCQkJaTkx NV9lcnJvcl9nZ3R0X29iamVjdF9jcmVhdGUoZGV2X3ByaXYsCj4gLQkJCQkJCSAgICAgIGVuZ2lu ZS0+c3RhdHVzX3BhZ2Uub2JqKTsKPiArCQkJaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKGRldl9w cml2LAo+ICsJCQkJCQkgZW5naW5lLT5zdGF0dXNfcGFnZS52bWEpOwo+ICAKPiAgCQllcnJvci0+ cmluZ1tpXS53YV9jdHggPQo+IC0JCQlpOTE1X2Vycm9yX2dndHRfb2JqZWN0X2NyZWF0ZShkZXZf cHJpdiwKPiAtCQkJCQkJICAgICAgZW5naW5lLT53YV9jdHgub2JqKTsKPiArCQkJaTkxNV9lcnJv cl9vYmplY3RfY3JlYXRlKGRldl9wcml2LCBlbmdpbmUtPndhX2N0eC52bWEpOwo+ICAKPiAgCQlp OTE1X2dlbV9yZWNvcmRfYWN0aXZlX2NvbnRleHQoZW5naW5lLCBlcnJvciwgJmVycm9yLT5yaW5n W2ldKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1 Ym1pc3Npb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+ IGluZGV4IDFjOTJjNGM2YjBlMS4uOTBkYjlhODhmZGRjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+IEBAIC0zNzUsNyArMzc1LDYgQEAgc3RhdGlj IHZvaWQgZ3VjX2luaXRfY3R4X2Rlc2Moc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+ICAJZm9yX2Vh Y2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYpIHsKPiAgCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y2UgPSAmY3R4LT5lbmdpbmVbZW5naW5lLT5pZF07Cj4gIAkJc3RydWN0IGd1Y19leGVjbGlzdF9j b250ZXh0ICpscmMgPSAmZGVzYy5scmNbZW5naW5lLT5ndWNfaWRdOwo+IC0JCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gIAo+ICAJCS8qIFRPRE86IFdlIGhhdmUgYSBkZXNpZ24g aXNzdWUgdG8gYmUgc29sdmVkIGhlcmUuIE9ubHkgd2hlbiB3ZQo+ICAJCSAqIHJlY2VpdmUgdGhl IGZpcnN0IGJhdGNoLCB3ZSBrbm93IHdoaWNoIGVuZ2luZSBpcyB1c2VkIGJ5IHRoZQo+IEBAIC0z ODQsMjMgKzM4MywyMCBAQCBzdGF0aWMgdm9pZCBndWNfaW5pdF9jdHhfZGVzYyhzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMsCj4gIAkJICogZm9yIG5vdyB3aG8gb3ducyBhIEd1QyBjbGllbnQuIEJ1dCBm b3IgZnV0dXJlIG93bmVyIG9mIEd1Qwo+ICAJCSAqIGNsaWVudCwgbmVlZCB0byBtYWtlIHN1cmUg bHJjIGlzIHBpbm5lZCBwcmlvciB0byBlbnRlciBoZXJlLgo+ICAJCSAqLwo+IC0JCWlmICghY2Ut PnN0YXRlKQo+ICsJCWlmICghY2UtPnZtYSkKPiAgCQkJYnJlYWs7CS8qIFhYWDogY29udGludWU/ ICovCj4gIAo+ICAJCWxyYy0+Y29udGV4dF9kZXNjID0gbG93ZXJfMzJfYml0cyhjZS0+bHJjX2Rl c2MpOwo+ICAKPiAgCQkvKiBUaGUgc3RhdGUgcGFnZSBpcyBhZnRlciBQUEhXU1AgKi8KPiAtCQln ZnhfYWRkciA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChjZS0+c3RhdGUpOwo+ICsJCWdmeF9h ZGRyID0gY2UtPnZtYS0+bm9kZS5zdGFydDsKPiAgCQlscmMtPnJpbmdfbGNyYSA9IGdmeF9hZGRy ICsgTFJDX1NUQVRFX1BOICogUEFHRV9TSVpFOwo+ICAJCWxyYy0+Y29udGV4dF9pZCA9IChjbGll bnQtPmN0eF9pbmRleCA8PCBHVUNfRUxDX0NUWElEX09GRlNFVCkgfAo+ICAJCQkJKGVuZ2luZS0+ Z3VjX2lkIDw8IEdVQ19FTENfRU5HSU5FX09GRlNFVCk7Cj4gIAo+IC0JCW9iaiA9IGNlLT5yaW5n LT5vYmo7Cj4gLQkJZ2Z4X2FkZHIgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKTsKPiAt Cj4gLQkJbHJjLT5yaW5nX2JlZ2luID0gZ2Z4X2FkZHI7Cj4gLQkJbHJjLT5yaW5nX2VuZCA9IGdm eF9hZGRyICsgb2JqLT5iYXNlLnNpemUgLSAxOwo+IC0JCWxyYy0+cmluZ19uZXh0X2ZyZWVfbG9j YXRpb24gPSBnZnhfYWRkcjsKPiArCQlscmMtPnJpbmdfYmVnaW4gPSBjZS0+cmluZy0+dm1hLT5u b2RlLnN0YXJ0Owo+ICsJCWxyYy0+cmluZ19lbmQgPSBnZnhfYWRkciArIGNlLT5yaW5nLT52bWEt Pm5vZGUuc2l6ZSAtIDE7Cj4gKwkJbHJjLT5yaW5nX25leHRfZnJlZV9sb2NhdGlvbiA9IGxyYy0+ cmluZ19iZWdpbjsKPiAgCQlscmMtPnJpbmdfY3VycmVudF90YWlsX3BvaW50ZXJfdmFsdWUgPSAw Owo+ICAKPiAgCQlkZXNjLmVuZ2luZXNfdXNlZCB8PSAoMSA8PCBlbmdpbmUtPmd1Y19pZCk7Cj4g QEAgLTYwMiwyMyArNTk4LDIzIEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKmd1Y19hbGxvY2F0 ZV92bWEoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgc2l6ZSkKPiAgewo+ICAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKPiAgCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gLQlpbnQgcmV0Owo+ICsJc3RydWN0IGk5MTVfdm1h ICp2bWE7Cj4gIAo+ICAJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShkZXZfcHJpdi0+ZGV2 LCBzaXplKTsKPiAgCWlmIChJU19FUlIob2JqKSkKPiAgCQlyZXR1cm4gRVJSX0NBU1Qob2JqKTsK PiAgCj4gLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4ob2JqLCBOVUxMLCAwLCBQQUdF X1NJWkUsCj4gKwl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4ob2JqLCBOVUxMLCAwLCBQ QUdFX1NJWkUsCj4gIAkJCQkgICAgICAgUElOX09GRlNFVF9CSUFTIHwgR1VDX1dPUENNX1RPUCk7 Cj4gLQlpZiAocmV0KSB7Cj4gKwlpZiAoSVNfRVJSKHZtYSkpIHsKPiAgCQlpOTE1X2dlbV9vYmpl Y3RfcHV0KG9iaik7Cj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCQlyZXR1cm4gdm1hOwo+ ICAJfQo+ICAKPiAgCS8qIEludmFsaWRhdGUgR3VDIFRMQiB0byBsZXQgR3VDIHRha2UgdGhlIGxh dGVzdCB1cGRhdGVzIHRvIEdUVC4gKi8KPiAgCUk5MTVfV1JJVEUoR0VOOF9HVENSLCBHRU44X0dU Q1JfSU5WQUxJREFURSk7Cj4gIAo+IC0JcmV0dXJuIGk5MTVfZ2VtX29ial90b19nZ3R0KG9iaik7 Cj4gKwlyZXR1cm4gdm1hOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtOTg4LDcgKzk4NCw3IEBAIGlu dCBpbnRlbF9ndWNfc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJLyogYW55IHZh bHVlIGdyZWF0ZXIgdGhhbiBHVUNfUE9XRVJfRDAgKi8KPiAgCWRhdGFbMV0gPSBHVUNfUE9XRVJf RDE7Cj4gIAkvKiBmaXJzdCBwYWdlIGlzIHNoYXJlZCBkYXRhIHdpdGggR3VDICovCj4gLQlkYXRh WzJdID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KGN0eC0+ZW5naW5lW1JDU10uc3RhdGUpOwo+ ICsJZGF0YVsyXSA9IGN0eC0+ZW5naW5lW1JDU10udm1hLT5ub2RlLnN0YXJ0Owo+ICAKPiAgCXJl dHVybiBob3N0Mmd1Y19hY3Rpb24oZ3VjLCBkYXRhLCBBUlJBWV9TSVpFKGRhdGEpKTsKPiAgfQo+ IEBAIC0xMDEzLDcgKzEwMDksNyBAQCBpbnQgaW50ZWxfZ3VjX3Jlc3VtZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQo+ICAJZGF0YVswXSA9IEhPU1QyR1VDX0FDVElPTl9FWElUX1NfU1RBVEU7Cj4g IAlkYXRhWzFdID0gR1VDX1BPV0VSX0QwOwo+ICAJLyogZmlyc3QgcGFnZSBpcyBzaGFyZWQgZGF0 YSB3aXRoIEd1QyAqLwo+IC0JZGF0YVsyXSA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChjdHgt PmVuZ2luZVtSQ1NdLnN0YXRlKTsKPiArCWRhdGFbMl0gPSBjdHgtPmVuZ2luZVtSQ1NdLnZtYS0+ bm9kZS5zdGFydDsKPiAgCj4gIAlyZXR1cm4gaG9zdDJndWNfYWN0aW9uKGd1YywgZGF0YSwgQVJS QVlfU0laRShkYXRhKSk7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4g aW5kZXggMGNmYWFjZTM4MzcwLi5jYzZmN2E0OWJmNTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jCj4gQEAgLTIyNDAsMTQgKzIyNDAsMTQgQEAgc3RhdGljIHVuc2lnbmVk IGludCBpbnRlbF9zdXJmX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYKPiAgCX0KPiAgfQo+ICAKPiAtaW50Cj4gLWludGVsX3Bpbl9hbmRfZmVuY2VfZmJf b2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+IC0JCQkgICB1bnNpZ25lZCBpbnQgcm90 YXRpb24pCj4gK3N0cnVjdCBpOTE1X3ZtYSAqCj4gK2ludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2Jq KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gIHsK PiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYi0+ZGV2Owo+ICAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwo+ICAJc3RydWN0IGk5MTVfZ2d0 dF92aWV3IHZpZXc7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgCXUzMiBhbGlnbm1lbnQ7 Cj4gIAlpbnQgcmV0Owo+ICAKPiBAQCAtMjI3NCwxMCArMjI3NCwxMSBAQCBpbnRlbF9waW5fYW5k X2ZlbmNlX2ZiX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAgCSAqLwo+ICAJaW50 ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwo+ICAKPiAtCXJldCA9IGk5MTVfZ2VtX29iamVj dF9waW5fdG9fZGlzcGxheV9wbGFuZShvYmosIGFsaWdubWVudCwKPiAtCQkJCQkJICAgJnZpZXcp Owo+IC0JaWYgKHJldCkKPiArCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9waW5fdG9fZGlzcGxheV9w bGFuZShvYmosIGFsaWdubWVudCwgJnZpZXcpOwo+ICsJaWYgKElTX0VSUih2bWEpKSB7Cj4gKwkJ cmV0ID0gUFRSX0VSUih2bWEpOwo+ICAJCWdvdG8gZXJyX3BtOwo+ICsJfQo+ICAKPiAgCS8qIElu c3RhbGwgYSBmZW5jZSBmb3IgdGlsZWQgc2Nhbi1vdXQuIFByZS1pOTY1IGFsd2F5cyBuZWVkcyBh Cj4gIAkgKiBmZW5jZSwgd2hlcmVhcyA5NjUrIG9ubHkgcmVxdWlyZXMgYSBmZW5jZSBpZiB1c2lu Zwo+IEBAIC0yMzA0LDE5ICsyMzA1LDIwIEBAIGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAJfQo+ICAKPiAgCWludGVsX3J1bnRpbWVfcG1f cHV0KGRldl9wcml2KTsKPiAtCXJldHVybiAwOwo+ICsJcmV0dXJuIHZtYTsKPiAgCj4gIGVycl91 bnBpbjoKPiAtCWk5MTVfZ2VtX29iamVjdF91bnBpbl9mcm9tX2Rpc3BsYXlfcGxhbmUob2JqLCAm dmlldyk7Cj4gKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fZnJvbV9kaXNwbGF5X3BsYW5lKHZtYSk7 Cj4gIGVycl9wbToKPiAgCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPiAtCXJldHVy biByZXQ7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICB9Cj4gIAo+ICB2b2lkIGludGVsX3Vu cGluX2ZiX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgdW5zaWduZWQgaW50IHJvdGF0 aW9uKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJf b2JqKGZiKTsKPiAgCXN0cnVjdCBpOTE1X2dndHRfdmlldyB2aWV3Owo+ICsJc3RydWN0IGk5MTVf dm1hICp2bWE7Cj4gIAo+ICAJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZvYmotPmJhc2UuZGV2 LT5zdHJ1Y3RfbXV0ZXgpKTsKPiAgCj4gQEAgLTIzMjUsNyArMjMyNyw4IEBAIHZvaWQgaW50ZWxf dW5waW5fZmJfb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB1bnNpZ25lZCBpbnQgcm90 YXRpb24pCj4gIAlpZiAodmlldy50eXBlID09IEk5MTVfR0dUVF9WSUVXX05PUk1BTCkKPiAgCQlp OTE1X2dlbV9vYmplY3RfdW5waW5fZmVuY2Uob2JqKTsKPiAgCj4gLQlpOTE1X2dlbV9vYmplY3Rf dW5waW5fZnJvbV9kaXNwbGF5X3BsYW5lKG9iaiwgJnZpZXcpOwo+ICsJdm1hID0gaTkxNV9nZW1f b2JqZWN0X3RvX2dndHQob2JqLCAmdmlldyk7Cj4gKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fZnJv bV9kaXNwbGF5X3BsYW5lKHZtYSk7Cj4gIH0KPiAgCj4gIC8qCj4gQEAgLTI1ODcsNyArMjU5MCw3 IEBAIGludGVsX2ZpbmRfaW5pdGlhbF9wbGFuZV9vYmooc3RydWN0IGludGVsX2NydGMgKmludGVs X2NydGMsCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAgCQlvYmogPSBpbnRlbF9mYl9vYmooZmIpOwo+ IC0JCWlmIChpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSA9PSBwbGFuZV9jb25maWctPmJh c2UpIHsKPiArCQlpZiAoaTkxNV9nZW1fb2JqZWN0X2dndHRfb2Zmc2V0KG9iaiwgTlVMTCkgPT0g cGxhbmVfY29uZmlnLT5iYXNlKSB7Cj4gIAkJCWRybV9mcmFtZWJ1ZmZlcl9yZWZlcmVuY2UoZmIp Owo+ICAJCQlnb3RvIHZhbGlkX2ZiOwo+ICAJCX0KPiBAQCAtMjc0NSwxMSArMjc0OCwxMSBAQCBz dGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBy aW1hcnksCj4gIAlJOTE1X1dSSVRFKERTUFNUUklERShwbGFuZSksIGZiLT5waXRjaGVzWzBdKTsK PiAgCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KSB7Cj4gIAkJSTkxNV9XUklURShEU1BT VVJGKHBsYW5lKSwKPiAtCQkJICAgaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgKyBpbnRl bF9jcnRjLT5kc3BhZGRyX29mZnNldCk7Cj4gKwkJCSAgIGk5MTVfZ2VtX29iamVjdF9nZ3R0X29m ZnNldChvYmosIE5VTEwpICsgaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQpOwo+ICAJCUk5MTVf V1JJVEUoRFNQVElMRU9GRihwbGFuZSksICh5IDw8IDE2KSB8IHgpOwo+ICAJCUk5MTVfV1JJVEUo RFNQTElOT0ZGKHBsYW5lKSwgbGluZWFyX29mZnNldCk7Cj4gIAl9IGVsc2UKPiAtCQlJOTE1X1dS SVRFKERTUEFERFIocGxhbmUpLCBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSArIGxpbmVh cl9vZmZzZXQpOwo+ICsJCUk5MTVfV1JJVEUoRFNQQUREUihwbGFuZSksIGk5MTVfZ2VtX29iamVj dF9nZ3R0X29mZnNldChvYmosIE5VTEwpICsgbGluZWFyX29mZnNldCk7Cj4gIAlQT1NUSU5HX1JF QUQocmVnKTsKPiAgfQo+ICAKPiBAQCAtMjg0OSw3ICsyODUyLDcgQEAgc3RhdGljIHZvaWQgaXJv bmxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKPiAg Cj4gIAlJOTE1X1dSSVRFKERTUFNUUklERShwbGFuZSksIGZiLT5waXRjaGVzWzBdKTsKPiAgCUk5 MTVfV1JJVEUoRFNQU1VSRihwbGFuZSksCj4gLQkJICAgaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0 KG9iaikgKyBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldCk7Cj4gKwkJICAgaTkxNV9nZW1fb2Jq ZWN0X2dndHRfb2Zmc2V0KG9iaiwgTlVMTCkgKyBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldCk7 Cj4gIAlpZiAoSVNfSEFTV0VMTChkZXYpIHx8IElTX0JST0FEV0VMTChkZXYpKSB7Cj4gIAkJSTkx NV9XUklURShEU1BPRkZTRVQocGxhbmUpLCAoeSA8PCAxNikgfCB4KTsKPiAgCX0gZWxzZSB7Cj4g QEAgLTI4ODIsNyArMjg4NSw3IEBAIHUzMiBpbnRlbF9wbGFuZV9vYmpfb2Zmc2V0KHN0cnVjdCBp bnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUsCj4gIAlpbnRlbF9maWxsX2ZiX2dndHRfdmlldygmdmll dywgaW50ZWxfcGxhbmUtPmJhc2Uuc3RhdGUtPmZiLAo+ICAJCQkJaW50ZWxfcGxhbmUtPmJhc2Uu c3RhdGUtPnJvdGF0aW9uKTsKPiAgCj4gLQl2bWEgPSBpOTE1X2dlbV9vYmpfdG9fZ2d0dF92aWV3 KG9iaiwgJnZpZXcpOwo+ICsJdm1hID0gaTkxNV9nZW1fb2JqZWN0X3RvX2dndHQob2JqLCAmdmll dyk7Cj4gIAlpZiAoV0FSTighdm1hLCAiZ2d0dCB2bWEgZm9yIGRpc3BsYXkgb2JqZWN0IG5vdCBm b3VuZCEgKHZpZXc9JXUpXG4iLAo+ICAJCXZpZXcudHlwZSkpCj4gIAkJcmV0dXJuIC0xOwo+IEBA IC0xMTM4NSw3ICsxMTM4OCw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfZ2VuN19xdWV1ZV9mbGlwKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9TVE9S RV9SRUdJU1RFUl9NRU0gfAo+ICAJCQkJCSAgICAgIE1JX1NSTV9MUk1fR0xPQkFMX0dUVCk7Cj4g IAkJaW50ZWxfcmluZ19lbWl0X3JlZyhyaW5nLCBERVJSTVIpOwo+IC0JCWludGVsX3JpbmdfZW1p dChyaW5nLCByZXEtPmVuZ2luZS0+c2NyYXRjaC5ndHRfb2Zmc2V0ICsgMjU2KTsKPiArCQlpbnRl bF9yaW5nX2VtaXQocmluZywgcmVxLT5lbmdpbmUtPnNjcmF0Y2gtPm5vZGUuc3RhcnQgKyAyNTYp Owo+ICAJCWlmIChJU19HRU44KGRldikpIHsKPiAgCQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDAp Owo+ICAJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7Cj4gQEAgLTExNjM0LDYgKzEx NjM3LDcgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gIAlib29sIG1taW9f ZmxpcDsKPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKPiArCXN0cnVj dCBpOTE1X3ZtYSAqdm1hOwo+ICAJaW50IHJldDsKPiAgCj4gIAkvKgo+IEBAIC0xMTczOSw5ICsx MTc0MywxMSBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKPiAgCj4gIAltbWlvX2ZsaXAgPSB1c2VfbW1pb19mbGlwKGVuZ2luZSwgb2JqKTsK PiAgCj4gLQlyZXQgPSBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihmYiwgcHJpbWFyeS0+c3Rh dGUtPnJvdGF0aW9uKTsKPiAtCWlmIChyZXQpCj4gKwl2bWEgPSBpbnRlbF9waW5fYW5kX2ZlbmNl X2ZiX29iaihmYiwgcHJpbWFyeS0+c3RhdGUtPnJvdGF0aW9uKTsKPiArCWlmIChJU19FUlIodm1h KSkgewo+ICsJCXJldCA9IFBUUl9FUlIodm1hKTsKPiAgCQlnb3RvIGNsZWFudXBfcGVuZGluZzsK PiArCX0KPiAgCj4gIAl3b3JrLT5ndHRfb2Zmc2V0ID0gaW50ZWxfcGxhbmVfb2JqX29mZnNldCh0 b19pbnRlbF9wbGFuZShwcmltYXJ5KSwKPiAgCQkJCQkJICBvYmosIDApOwo+IEBAIC0xMzk2NSw3 ICsxMzk3MSwxMSBAQCBpbnRlbF9wcmVwYXJlX3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAo+ICAJCWlmIChyZXQpCj4gIAkJCURSTV9ERUJVR19LTVMoImZhaWxlZCB0byBhdHRhY2gg cGh5cyBvYmplY3RcbiIpOwo+ICAJfSBlbHNlIHsKPiAtCQlyZXQgPSBpbnRlbF9waW5fYW5kX2Zl bmNlX2ZiX29iaihmYiwgbmV3X3N0YXRlLT5yb3RhdGlvbik7Cj4gKwkJc3RydWN0IGk5MTVfdm1h ICp2bWE7Cj4gKwo+ICsJCXZtYSA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKGZiLCBuZXdf c3RhdGUtPnJvdGF0aW9uKTsKPiArCQlpZiAoSVNfRVJSKHZtYSkpCj4gKwkJCXJldCA9IFBUUl9F UlIodm1hKTsKPiAgCX0KPiAgCj4gIAlpZiAocmV0ID09IDApIHsKPiBAQCAtMTQzMzQsNyArMTQz NDQsNyBAQCBpbnRlbF91cGRhdGVfY3Vyc29yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAo+ICAJaWYgKCFvYmopCj4gIAkJYWRkciA9IDA7Cj4gIAllbHNlIGlmICghSU5URUxfSU5GTyhk ZXYpLT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwpCj4gLQkJYWRkciA9IGk5MTVfZ2VtX29ial9nZ3R0 X29mZnNldChvYmopOwo+ICsJCWFkZHIgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9vZmZzZXQob2Jq LCBOVUxMKTsKPiAgCWVsc2UKPiAgCQlhZGRyID0gb2JqLT5waHlzX2hhbmRsZS0+YnVzYWRkcjsK PiAgCj4gQEAgLTE2MTYwLDcgKzE2MTcwLDYgQEAgdm9pZCBpbnRlbF9tb2Rlc2V0X2dlbV9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gIAlzdHJ1Y3QgZHJtX2NydGMgKmM7Cj4gIAlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+IC0JaW50IHJldDsKPiAgCj4gIAlpbnRlbF9pbml0 X2d0X3Bvd2Vyc2F2ZShkZXZfcHJpdik7Cj4gIAo+IEBAIC0xNjE3NCwxNSArMTYxODMsMTcgQEAg dm9pZCBpbnRlbF9tb2Rlc2V0X2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAkg KiBmb3IgdGhpcy4KPiAgCSAqLwo+ICAJZm9yX2VhY2hfY3J0YyhkZXYsIGMpIHsKPiArCQlzdHJ1 Y3QgaTkxNV92bWEgKnZtYTsKPiArCj4gIAkJb2JqID0gaW50ZWxfZmJfb2JqKGMtPnByaW1hcnkt PmZiKTsKPiAgCQlpZiAob2JqID09IE5VTEwpCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAgCQltdXRl eF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQkJcmV0ID0gaW50ZWxfcGluX2FuZF9mZW5j ZV9mYl9vYmooYy0+cHJpbWFyeS0+ZmIsCj4gKwkJdm1hID0gaW50ZWxfcGluX2FuZF9mZW5jZV9m Yl9vYmooYy0+cHJpbWFyeS0+ZmIsCj4gIAkJCQkJCSBjLT5wcmltYXJ5LT5zdGF0ZS0+cm90YXRp b24pOwo+ICAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0JCWlmIChyZXQp IHsKPiArCQlpZiAoSVNfRVJSKHZtYSkpIHsKPiAgCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGlu IGJvb3QgZmIgb24gcGlwZSAlZFxuIiwKPiAgCQkJCSAgdG9faW50ZWxfY3J0YyhjKS0+cGlwZSk7 Cj4gIAkJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShjLT5wcmltYXJ5LT5mYik7Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBpbmRleCA4MzQ2NDZiNGNjM2YuLjMwZWYyOTg3MzU3MSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gQEAgLTE1OSw2ICsxNTksNyBAQCBzdHJ1 Y3QgaW50ZWxfZnJhbWVidWZmZXIgewo+ICBzdHJ1Y3QgaW50ZWxfZmJkZXYgewo+ICAJc3RydWN0 IGRybV9mYl9oZWxwZXIgaGVscGVyOwo+ICAJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICpmYjsK PiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAJYXN5bmNfY29va2llX3QgY29va2llOwo+ICAJ aW50IHByZWZlcnJlZF9icHA7Cj4gIH07Cj4gQEAgLTEyMDcsOCArMTIwOCw4IEBAIGJvb2wgaW50 ZWxfZ2V0X2xvYWRfZGV0ZWN0X3BpcGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwK PiAgdm9pZCBpbnRlbF9yZWxlYXNlX2xvYWRfZGV0ZWN0X3BpcGUoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKPiAgCQkJCSAgICBzdHJ1Y3QgaW50ZWxfbG9hZF9kZXRlY3RfcGlwZSAq b2xkLAo+ICAJCQkJICAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KTsKPiAt aW50IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LAo+IC0JCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKTsKPiArc3RydWN0IGk5MTVfdm1h ICoKPiAraW50ZWxfcGluX2FuZF9mZW5jZV9mYl9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsIHVuc2lnbmVkIGludCByb3RhdGlvbik7Cj4gIHZvaWQgaW50ZWxfdW5waW5fZmJfb2JqKHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB1bnNpZ25lZCBpbnQgcm90YXRpb24pOwo+ICBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICoKPiAgX19pbnRlbF9mcmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZmJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmMuYwo+IGluZGV4IDQ1ZWUw N2I4ODhhMC4uZTFlYjk2YjUwZWMxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2ZiYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJjLmMKPiBA QCAtNzQyLDcgKzc0Miw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2ZiY191cGRhdGVfc3RhdGVfY2Fj aGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gIAkvKiBGSVhNRTogV2UgbGFjayB0aGUgcHJv cGVyIGxvY2tpbmcgaGVyZSwgc28gb25seSBydW4gdGhpcyBvbiB0aGUKPiAgCSAqIHBsYXRmb3Jt cyB0aGF0IG5lZWQuICovCj4gIAlpZiAoSVNfR0VOKGRldl9wcml2LCA1LCA2KSkKPiAtCQljYWNo ZS0+ZmIuaWxrX2dndHRfb2Zmc2V0ID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaik7Cj4g KwkJY2FjaGUtPmZiLmlsa19nZ3R0X29mZnNldCA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X29mZnNl dChvYmosIE5VTEwpOwo+ICAJY2FjaGUtPmZiLnBpeGVsX2Zvcm1hdCA9IGZiLT5waXhlbF9mb3Jt YXQ7Cj4gIAljYWNoZS0+ZmIuc3RyaWRlID0gZmItPnBpdGNoZXNbMF07Cj4gIAljYWNoZS0+ZmIu ZmVuY2VfcmVnID0gb2JqLT5mZW5jZV9yZWc7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2ZiZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5j Cj4gaW5kZXggMTA2MDA5NzVmZThkLi5lNzZkMThmN2M3MzMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2ZiZGV2LmMKPiBAQCAtMTg3LDcgKzE4Nyw2IEBAIHN0YXRpYyBpbnQgaW50ZWxmYl9j cmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiAgCXN0cnVjdCBmYl9pbmZvICpp bmZvOwo+ICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gIAlzdHJ1Y3QgaTkxNV92bWEg KnZtYTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gIAlib29sIHByZWFs bG9jID0gZmFsc2U7Cj4gIAl2b2lkICp2YWRkcjsKPiAgCWludCByZXQ7Cj4gQEAgLTIxNSwxNyAr MjE0LDE3IEBAIHN0YXRpYyBpbnQgaW50ZWxmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIg KmhlbHBlciwKPiAgCQlzaXplcy0+ZmJfaGVpZ2h0ID0gaW50ZWxfZmItPmJhc2UuaGVpZ2h0Owo+ ICAJfQo+ICAKPiAtCW9iaiA9IGludGVsX2ZiLT5vYmo7Cj4gLQo+ICAJbXV0ZXhfbG9jaygmZGV2 LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAKPiAgCS8qIFBpbiB0aGUgR0dUVCB2bWEgZm9yIG91ciBhY2Nl c3MgdmlhIGluZm8tPnNjcmVlbl9iYXNlLgo+ICAJICogVGhpcyBhbHNvIHZhbGlkYXRlcyB0aGF0 IGFueSBleGlzdGluZyBmYiBpbmhlcml0ZWQgZnJvbSB0aGUKPiAgCSAqIEJJT1MgaXMgc3VpdGFi bGUgZm9yIG93biBhY2Nlc3MuCj4gIAkgKi8KPiAtCXJldCA9IGludGVsX3Bpbl9hbmRfZmVuY2Vf ZmJfb2JqKCZpZmJkZXYtPmZiLT5iYXNlLCBCSVQoRFJNX1JPVEFURV8wKSk7Cj4gLQlpZiAocmV0 KQo+ICsJdm1hID0gaW50ZWxfcGluX2FuZF9mZW5jZV9mYl9vYmooJmlmYmRldi0+ZmItPmJhc2Us IEJJVChEUk1fUk9UQVRFXzApKTsKPiArCWlmIChJU19FUlIodm1hKSkgewo+ICsJCXJldCA9IFBU Ul9FUlIodm1hKTsKPiAgCQlnb3RvIG91dF91bmxvY2s7Cj4gKwl9Cj4gIAo+ICAJaW5mbyA9IGRy bV9mYl9oZWxwZXJfYWxsb2NfZmJpKGhlbHBlcik7Cj4gIAlpZiAoSVNfRVJSKGluZm8pKSB7Cj4g QEAgLTI0NSw4ICsyNDQsNiBAQCBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpoZWxwZXIsCj4gIAlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJ TkZPX0NBTl9GT1JDRV9PVVRQVVQ7Cj4gIAlpbmZvLT5mYm9wcyA9ICZpbnRlbGZiX29wczsKPiAg Cj4gLQl2bWEgPSBpOTE1X2dlbV9vYmpfdG9fZ2d0dChvYmopOwo+IC0KPiAgCS8qIHNldHVwIGFw ZXJ0dXJlIGJhc2Uvc2l6ZSBmb3IgdmVzYWZiIHRha2VvdmVyICovCj4gIAlpbmZvLT5hcGVydHVy ZXMtPnJhbmdlc1swXS5iYXNlID0gZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlOwo+ICAJaW5mby0+ YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSA9IGdndHQtPm1hcHBhYmxlX2VuZDsKPiBAQCAtMjcz LDE0ICsyNzAsMTQgQEAgc3RhdGljIGludCBpbnRlbGZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZiX2hl bHBlciAqaGVscGVyLAo+ICAJICogSWYgdGhlIG9iamVjdCBpcyBzdG9sZW4gaG93ZXZlciwgaXQg d2lsbCBiZSBmdWxsIG9mIHdoYXRldmVyCj4gIAkgKiBnYXJiYWdlIHdhcyBsZWZ0IGluIHRoZXJl Lgo+ICAJICovCj4gLQlpZiAoaWZiZGV2LT5mYi0+b2JqLT5zdG9sZW4gJiYgIXByZWFsbG9jKQo+ ICsJaWYgKGludGVsX2ZiLT5vYmotPnN0b2xlbiAmJiAhcHJlYWxsb2MpCj4gIAkJbWVtc2V0X2lv KGluZm8tPnNjcmVlbl9iYXNlLCAwLCBpbmZvLT5zY3JlZW5fc2l6ZSk7Cj4gIAo+ICAJLyogVXNl IGRlZmF1bHQgc2NyYXRjaCBwaXhtYXAgKGluZm8tPnBpeG1hcC5mbGFncyA9IEZCX1BJWE1BUF9T WVNURU0pICovCj4gIAo+IC0JRFJNX0RFQlVHX0tNUygiYWxsb2NhdGVkICVkeCVkIGZiOiAweCUw OGxseCwgYm8gJXBcbiIsCj4gLQkJICAgICAgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAo+IC0JCSAg ICAgIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopLCBvYmopOwo+ICsJRFJNX0RFQlVHX0tN UygiYWxsb2NhdGVkICVkeCVkIGZiOiAweCUwOGxseFxuIiwKPiArCQkgICAgICBmYi0+d2lkdGgs IGZiLT5oZWlnaHQsIHZtYS0+bm9kZS5zdGFydCk7Cj4gKwlpZmJkZXYtPnZtYSA9IHZtYTsKPiAg Cj4gIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgCXZnYV9zd2l0Y2hlcm9v X2NsaWVudF9mYl9zZXQoZGV2LT5wZGV2LCBpbmZvKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZ3VjX2xvYWRlci5jCj4gaW5kZXggMWVjZjg4ZmQwYjEwLi42NGY1N2MwN2FmY2MgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jCj4gQEAgLTIzNSwxMiArMjM1 LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBndWNfdWNvZGVfcmVzcG9uc2Uoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgKiBOb3RlIHRoYXQgR3VDIG5lZWRzIHRoZSBDU1Mg aGVhZGVyIHBsdXMgdUtlcm5lbCBjb2RlIHRvIGJlIGNvcGllZCBieSB0aGUKPiAgICogRE1BIGVu Z2luZSBpbiBvbmUgb3BlcmF0aW9uLCB3aGVyZWFzIHRoZSBSU0Egc2lnbmF0dXJlIGlzIGxvYWRl ZCB2aWEgTU1JTy4KPiAgICovCj4gLXN0YXRpYyBpbnQgZ3VjX3Vjb2RlX3hmZXJfZG1hKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArc3RhdGljIGludCBndWNfdWNvZGVfeGZl cl9kbWEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkgICAgICBzdHJ1 Y3QgaTkxNV92bWEgKnZtYSkKPiAgewo+ICAJc3RydWN0IGludGVsX2d1Y19mdyAqZ3VjX2Z3ID0g JmRldl9wcml2LT5ndWMuZ3VjX2Z3Owo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmZ3 X29iaiA9IGd1Y19mdy0+Z3VjX2Z3X29iajsKPiAgCXVuc2lnbmVkIGxvbmcgb2Zmc2V0Owo+IC0J c3RydWN0IHNnX3RhYmxlICpzZyA9IGZ3X29iai0+cGFnZXM7Cj4gKwlzdHJ1Y3Qgc2dfdGFibGUg KnNnID0gdm1hLT5vYmotPnBhZ2VzOwo+ICAJdTMyIHN0YXR1cywgcnNhW1VPU19SU0FfU0NSQVRD SF9NQVhfQ09VTlRdOwo+ICAJaW50IGksIHJldCA9IDA7Cj4gIAo+IEBAIC0yNTcsNyArMjU3LDcg QEAgc3RhdGljIGludCBndWNfdWNvZGVfeGZlcl9kbWEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ICAJSTkxNV9XUklURShETUFfQ09QWV9TSVpFLCBndWNfZnctPmhlYWRlcl9z aXplICsgZ3VjX2Z3LT51Y29kZV9zaXplKTsKPiAgCj4gIAkvKiBTZXQgdGhlIHNvdXJjZSBhZGRy ZXNzIGZvciB0aGUgbmV3IGJsb2IgKi8KPiAtCW9mZnNldCA9IGk5MTVfZ2VtX29ial9nZ3R0X29m ZnNldChmd19vYmopICsgZ3VjX2Z3LT5oZWFkZXJfb2Zmc2V0Owo+ICsJb2Zmc2V0ID0gdm1hLT5u b2RlLnN0YXJ0ICsgZ3VjX2Z3LT5oZWFkZXJfb2Zmc2V0Owo+ICAJSTkxNV9XUklURShETUFfQURE Ul8wX0xPVywgbG93ZXJfMzJfYml0cyhvZmZzZXQpKTsKPiAgCUk5MTVfV1JJVEUoRE1BX0FERFJf MF9ISUdILCB1cHBlcl8zMl9iaXRzKG9mZnNldCkgJiAweEZGRkYpOwo+ICAKPiBAQCAtMzEyLDYg KzMxMiw3IEBAIHN0YXRpYyBpbnQgZ3VjX3Vjb2RlX3hmZXIoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfZ3VjX2Z3ICpndWNfZncgPSAmZGV2 X3ByaXYtPmd1Yy5ndWNfZnc7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYt PmRldjsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAJaW50IHJldDsKPiAgCj4gIAlyZXQg PSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4oZ3VjX2Z3LT5ndWNfZndfb2JqLCBm YWxzZSk7Cj4gQEAgLTMyMCwxMCArMzIxLDEwIEBAIHN0YXRpYyBpbnQgZ3VjX3Vjb2RlX3hmZXIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJCXJldHVybiByZXQ7Cj4gIAl9 Cj4gIAo+IC0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKGd1Y19mdy0+Z3VjX2Z3X29i aiwgTlVMTCwgMCwgMCwgMCk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigi cGluIGZhaWxlZCAlZFxuIiwgcmV0KTsKPiAtCQlyZXR1cm4gcmV0Owo+ICsJdm1hID0gaTkxNV9n ZW1fb2JqZWN0X2dndHRfcGluKGd1Y19mdy0+Z3VjX2Z3X29iaiwgTlVMTCwgMCwgMCwgMCk7Cj4g KwlpZiAoSVNfRVJSKHZtYSkpIHsKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJwaW4gZmFpbGVkICVk XG4iLCAoaW50KVBUUl9FUlIodm1hKSk7Cj4gKwkJcmV0dXJuIFBUUl9FUlIodm1hKTsKPiAgCX0K PiAgCj4gIAkvKiBJbnZhbGlkYXRlIEd1QyBUTEIgdG8gbGV0IEd1QyB0YWtlIHRoZSBsYXRlc3Qg dXBkYXRlcyB0byBHVFQuICovCj4gQEAgLTM2NCw3ICszNjUsNyBAQCBzdGF0aWMgaW50IGd1Y191 Y29kZV94ZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCj4gIAlzZXRf Z3VjX2luaXRfcGFyYW1zKGRldl9wcml2KTsKPiAgCj4gLQlyZXQgPSBndWNfdWNvZGVfeGZlcl9k bWEoZGV2X3ByaXYpOwo+ICsJcmV0ID0gZ3VjX3Vjb2RlX3hmZXJfZG1hKGRldl9wcml2LCB2bWEp Owo+ICAKPiAgCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0Vf QUxMKTsKPiAgCj4gQEAgLTM3Miw3ICszNzMsNyBAQCBzdGF0aWMgaW50IGd1Y191Y29kZV94ZmVy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCSAqIFdlIGtlZXAgdGhlIG9i amVjdCBwYWdlcyBmb3IgcmV1c2UgZHVyaW5nIHJlc3VtZS4gQnV0IHdlIGNhbiB1bnBpbiBpdAo+ ICAJICogbm93IHRoYXQgRE1BIGhhcyBjb21wbGV0ZWQsIHNvIGl0IGRvZXNuJ3QgY29udGludWUg dG8gdGFrZSB1cCBzcGFjZS4KPiAgCSAqLwo+IC0JaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4o Z3VjX2Z3LT5ndWNfZndfb2JqKTsKPiArCWk5MTVfdm1hX3VucGluKHZtYSk7Cj4gIAo+ICAJcmV0 dXJuIHJldDsKPiAgfQo+IEBAIC02NTMsMTIgKzY1NCw4IEBAIGZhaWw6Cj4gIAlEUk1fRVJST1Io IkZhaWxlZCB0byBmZXRjaCBHdUMgZmlybXdhcmUgZnJvbSAlcyAoZXJyb3IgJWQpXG4iLAo+ICAJ CSAgZ3VjX2Z3LT5ndWNfZndfcGF0aCwgZXJyKTsKPiAgCj4gLQltdXRleF9sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7Cj4gLQlvYmogPSBndWNfZnctPmd1Y19md19vYmo7Cj4gLQlpZiAob2JqKQo+ IC0JCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiArCWk5MTVfZ2VtX29iamVjdF9wdXRfdW5s b2NrZWQoZ3VjX2Z3LT5ndWNfZndfb2JqKTsKPiAgCWd1Y19mdy0+Z3VjX2Z3X29iaiA9IE5VTEw7 Cj4gLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgCj4gIAlyZWxlYXNlX2Zp cm13YXJlKGZ3KTsJCS8qIE9LIGV2ZW4gaWYgZncgaXMgTlVMTCAqLwo+ICAJZ3VjX2Z3LT5ndWNf ZndfZmV0Y2hfc3RhdHVzID0gR1VDX0ZJUk1XQVJFX0ZBSUw7Cj4gQEAgLTczNyw3ICs3MzQsNyBA QCB2b2lkIGludGVsX2d1Y19maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAo+ICAJaTkx NV9nZW1fb2JqZWN0X3B1dChndWNfZnctPmd1Y19md19vYmopOwo+ICAJZ3VjX2Z3LT5ndWNfZndf b2JqID0gTlVMTDsKPiAtCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAKPiAg CWd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cyA9IEdVQ19GSVJNV0FSRV9OT05FOwo+ICsJbXV0 ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuYwo+IGluZGV4IDRiZjYzYWYyYTI4Mi4uNDllN2JmMTcwYTA0IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbHJjLmMKPiBAQCAtMzI2LDcgKzMyNiw3IEBAIGludGVsX2xyX2NvbnRleHRfZGVz Y3JpcHRvcl91cGRhdGUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgCUJVSUxEX0JV R19PTihNQVhfQ09OVEVYVF9IV19JRCA+ICgxPDxHRU44X0NUWF9JRF9XSURUSCkpOwo+ICAKPiAg CWRlc2MgPSBlbmdpbmUtPmN0eF9kZXNjX3RlbXBsYXRlOwkJCS8qIGJpdHMgIDAtMTEgKi8KPiAt CWRlc2MgfD0gY2UtPmxyY192bWEtPm5vZGUuc3RhcnQgKyBMUkNfUFBIV1NQX1BOICogUEFHRV9T SVpFOwo+ICsJZGVzYyB8PSBjZS0+dm1hLT5ub2RlLnN0YXJ0ICsgTFJDX1BQSFdTUF9QTiAqIFBB R0VfU0laRTsKPiAgCQkJCQkJCQkvKiBiaXRzIDEyLTMxICovCj4gIAlkZXNjIHw9ICh1NjQpY3R4 LT5od19pZCA8PCBHRU44X0NUWF9JRF9TSElGVDsJCS8qIGJpdHMgMzItNTIgKi8KPiAgCj4gQEAg LTc2NSw2ICs3NjUsNyBAQCBzdGF0aWMgaW50IGludGVsX2xyX2NvbnRleHRfcGluKHN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGN0eC0+aTkxNTsKPiAgCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9ICZjdHgt PmVuZ2luZVtlbmdpbmUtPmlkXTsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAJdm9pZCAq dmFkZHI7Cj4gIAl1MzIgKmxyY19yZWdfc3RhdGU7Cj4gIAlpbnQgcmV0Owo+IEBAIC03NzQsMTYg Kzc3NSwxOCBAQCBzdGF0aWMgaW50IGludGVsX2xyX2NvbnRleHRfcGluKHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHgsCj4gIAlpZiAoY2UtPnBpbl9jb3VudCsrKQo+ICAJCXJldHVybiAwOwo+ ICAKPiAtCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihjZS0+c3RhdGUsIE5VTEwsCj4g Kwl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4oY2UtPnN0YXRlLCBOVUxMLAo+ICAJCQkJ ICAgICAgIDAsIEdFTjhfTFJfQ09OVEVYVF9BTElHTiwKPiAgCQkJCSAgICAgICBQSU5fT0ZGU0VU X0JJQVMgfCBHVUNfV09QQ01fVE9QKTsKPiAtCWlmIChyZXQpCj4gKwlpZiAoSVNfRVJSKHZtYSkp IHsKPiArCQlyZXQgPSBQVFJfRVJSKHZtYSk7Cj4gIAkJZ290byBlcnI7Cj4gKwl9Cj4gIAo+IC0J dmFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChjZS0+c3RhdGUpOwo+ICsJdmFkZHIgPSBp OTE1X2dlbV9vYmplY3RfcGluX21hcCh2bWEtPm9iaik7Cj4gIAlpZiAoSVNfRVJSKHZhZGRyKSkg ewo+ICAJCXJldCA9IFBUUl9FUlIodmFkZHIpOwo+IC0JCWdvdG8gdW5waW5fY3R4X29iajsKPiAr CQlnb3RvIHVucGluX3ZtYTsKPiAgCX0KPiAgCj4gIAlscmNfcmVnX3N0YXRlID0gdmFkZHIgKyBM UkNfU1RBVEVfUE4gKiBQQUdFX1NJWkU7Cj4gQEAgLTc5MiwxMiArNzk1LDEyIEBAIHN0YXRpYyBp bnQgaW50ZWxfbHJfY29udGV4dF9waW4oc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAg CWlmIChyZXQpCj4gIAkJZ290byB1bnBpbl9tYXA7Cj4gIAo+IC0JY2UtPmxyY192bWEgPSBpOTE1 X2dlbV9vYmpfdG9fZ2d0dChjZS0+c3RhdGUpOwo+ICsJY2UtPnZtYSA9IHZtYTsKPiAgCWludGVs X2xyX2NvbnRleHRfZGVzY3JpcHRvcl91cGRhdGUoY3R4LCBlbmdpbmUpOwo+ICAKPiAgCWxyY19y ZWdfc3RhdGVbQ1RYX1JJTkdfQlVGRkVSX1NUQVJUKzFdID0gY2UtPnJpbmctPnZtYS0+bm9kZS5z dGFydDsKPiAgCWNlLT5scmNfcmVnX3N0YXRlID0gbHJjX3JlZ19zdGF0ZTsKPiAtCWNlLT5zdGF0 ZS0+ZGlydHkgPSB0cnVlOwo+ICsJdm1hLT5vYmotPmRpcnR5ID0gdHJ1ZTsKPiAgCj4gIAkvKiBJ bnZhbGlkYXRlIEd1QyBUTEIuICovCj4gIAlpZiAoaTkxNS5lbmFibGVfZ3VjX3N1Ym1pc3Npb24p Cj4gQEAgLTgwNyw5ICs4MTAsOSBAQCBzdGF0aWMgaW50IGludGVsX2xyX2NvbnRleHRfcGluKHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gIAlyZXR1cm4gMDsKPiAgCj4gIHVucGluX21h cDoKPiAtCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoY2UtPnN0YXRlKTsKPiAtdW5waW5fY3R4 X29iajoKPiAtCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKGNlLT5zdGF0ZSk7Cj4gKwlpOTE1 X2dlbV9vYmplY3RfdW5waW5fbWFwKHZtYS0+b2JqKTsKPiArdW5waW5fdm1hOgo+ICsJX19pOTE1 X3ZtYV91bnBpbih2bWEpOwo+ICBlcnI6Cj4gIAljZS0+cGluX2NvdW50ID0gMDsKPiAgCXJldHVy biByZXQ7Cj4gQEAgLTgyOSw5ICs4MzIsOSBAQCB2b2lkIGludGVsX2xyX2NvbnRleHRfdW5waW4o c3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgCWludGVsX3JpbmdfdW5waW4oY2UtPnJp bmcpOwo+ICAKPiAgCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoY2UtPnN0YXRlKTsKPiAtCWk5 MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKGNlLT5zdGF0ZSk7Cj4gKwlpOTE1X3ZtYV91bnBpbihj ZS0+dm1hKTsKPiAgCj4gLQljZS0+bHJjX3ZtYSA9IE5VTEw7Cj4gKwljZS0+dm1hID0gTlVMTDsK PiAgCWNlLT5scmNfZGVzYyA9IDA7Cj4gIAljZS0+bHJjX3JlZ19zdGF0ZSA9IE5VTEw7Cj4gIAo+ IEBAIC05MjEsNyArOTI0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZ2VuOF9lbWl0X2ZsdXNoX2Nv aGVyZW50bDNfd2Eoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAJd2FfY3R4X2Vt aXQoYmF0Y2gsIGluZGV4LCAoTUlfU1RPUkVfUkVHSVNURVJfTUVNX0dFTjggfAo+ICAJCQkJICAg TUlfU1JNX0xSTV9HTE9CQUxfR1RUKSk7Cj4gIAl3YV9jdHhfZW1pdF9yZWcoYmF0Y2gsIGluZGV4 LCBHRU44X0wzU1FDUkVHNCk7Cj4gLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIGVuZ2luZS0+ c2NyYXRjaC5ndHRfb2Zmc2V0ICsgMjU2KTsKPiArCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwg ZW5naW5lLT5zY3JhdGNoLT5ub2RlLnN0YXJ0ICsgMjU2KTsKPiAgCXdhX2N0eF9lbWl0KGJhdGNo LCBpbmRleCwgMCk7Cj4gIAo+ICAJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9MT0FEX1JF R0lTVEVSX0lNTSgxKSk7Cj4gQEAgLTkzOSw3ICs5NDIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBn ZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsCj4gIAl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIChNSV9MT0FEX1JFR0lTVEVSX01FTV9H RU44IHwKPiAgCQkJCSAgIE1JX1NSTV9MUk1fR0xPQkFMX0dUVCkpOwo+ICAJd2FfY3R4X2VtaXRf cmVnKGJhdGNoLCBpbmRleCwgR0VOOF9MM1NRQ1JFRzQpOwo+IC0Jd2FfY3R4X2VtaXQoYmF0Y2gs IGluZGV4LCBlbmdpbmUtPnNjcmF0Y2guZ3R0X29mZnNldCArIDI1Nik7Cj4gKwl3YV9jdHhfZW1p dChiYXRjaCwgaW5kZXgsIGVuZ2luZS0+c2NyYXRjaC0+bm9kZS5zdGFydCArIDI1Nik7Cj4gIAl3 YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwo+ICAKPiAgCXJldHVybiBpbmRleDsKPiBAQCAt MTAxMyw3ICsxMDE2LDcgQEAgc3RhdGljIGludCBnZW44X2luaXRfaW5kaXJlY3RjdHhfYmIoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAKPiAgCS8qIFdhQ2xlYXJTbG1TcGFjZUF0 Q29udGV4dFN3aXRjaDpiZHcsY2h2ICovCj4gIAkvKiBBY3R1YWwgc2NyYXRjaCBsb2NhdGlvbiBp cyBhdCAxMjggYnl0ZXMgb2Zmc2V0ICovCj4gLQlzY3JhdGNoX2FkZHIgPSBlbmdpbmUtPnNjcmF0 Y2guZ3R0X29mZnNldCArIDIqQ0FDSEVMSU5FX0JZVEVTOwo+ICsJc2NyYXRjaF9hZGRyID0gZW5n aW5lLT5zY3JhdGNoLT5ub2RlLnN0YXJ0ICsgMipDQUNIRUxJTkVfQllURVM7Cj4gIAo+ICAJd2Ff Y3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBHRlhfT1BfUElQRV9DT05UUk9MKDYpKTsKPiAgCXdhX2N0 eF9lbWl0KGJhdGNoLCBpbmRleCwgKFBJUEVfQ09OVFJPTF9GTFVTSF9MMyB8Cj4gQEAgLTExNDIs NDcgKzExNDUsNDEgQEAgc3RhdGljIGludCBnZW45X2luaXRfcGVyY3R4X2JiKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCXJldHVybiB3YV9jdHhfZW5kKHdhX2N0eCwgKm9mZnNl dCA9IGluZGV4LCAxKTsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBscmNfc2V0dXBfd2FfY3R4X29i aihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBzaXplKQo+ICtzdGF0aWMgc3Ry dWN0IGk5MTVfdm1hICoKPiArbHJjX3NldHVwX3dhX2N0eF9vYmooc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLCB1MzIgc2l6ZSkKPiAgewo+IC0JaW50IHJldDsKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgCj4gLQll bmdpbmUtPndhX2N0eC5vYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGVuZ2luZS0+aTkxNS0+ ZGV2LAo+IC0JCQkJCQkgICBQQUdFX0FMSUdOKHNpemUpKTsKPiAtCWlmIChJU19FUlIoZW5naW5l LT53YV9jdHgub2JqKSkgewo+IC0JCURSTV9ERUJVR19EUklWRVIoImFsbG9jIExSQyBXQSBjdHgg YmFja2luZyBvYmogZmFpbGVkLlxuIik7Cj4gLQkJcmV0ID0gUFRSX0VSUihlbmdpbmUtPndhX2N0 eC5vYmopOwo+IC0JCWVuZ2luZS0+d2FfY3R4Lm9iaiA9IE5VTEw7Cj4gLQkJcmV0dXJuIHJldDsK PiAtCX0KPiArCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoZW5naW5lLT5pOTE1LT5kZXYs IFBBR0VfQUxJR04oc2l6ZSkpOwo+ICsJaWYgKElTX0VSUihvYmopKQo+ICsJCXJldHVybiBFUlJf Q0FTVChvYmopOwo+ICAKPiAtCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihlbmdpbmUt PndhX2N0eC5vYmosIE5VTEwsCj4gLQkJCQkgICAgICAgMCwgUEFHRV9TSVpFLCAwKTsKPiAtCWlm IChyZXQpIHsKPiAtCQlEUk1fREVCVUdfRFJJVkVSKCJwaW4gTFJDIFdBIGN0eCBiYWNraW5nIG9i aiBmYWlsZWQ6ICVkXG4iLAo+IC0JCQkJIHJldCk7Cj4gLQkJaTkxNV9nZW1fb2JqZWN0X3B1dChl bmdpbmUtPndhX2N0eC5vYmopOwo+IC0JCXJldHVybiByZXQ7Cj4gKwl2bWEgPSBpOTE1X2dlbV9v YmplY3RfZ2d0dF9waW4ob2JqLCBOVUxMLCAwLCBQQUdFX1NJWkUsIDApOwo+ICsJaWYgKElTX0VS Uih2bWEpKSB7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJCXJldHVybiB2bWE7 Cj4gIAl9Cj4gIAo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4gdm1hOwo+ICB9Cj4gIAo+ICBzdGF0 aWMgdm9pZCBscmNfZGVzdHJveV93YV9jdHhfb2JqKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiAgewo+IC0JaWYgKGVuZ2luZS0+d2FfY3R4Lm9iaikgewo+IC0JCWk5MTVfZ2VtX29i amVjdF9nZ3R0X3VucGluKGVuZ2luZS0+d2FfY3R4Lm9iaik7Cj4gLQkJaTkxNV9nZW1fb2JqZWN0 X3B1dChlbmdpbmUtPndhX2N0eC5vYmopOwo+IC0JCWVuZ2luZS0+d2FfY3R4Lm9iaiA9IE5VTEw7 Cj4gKwlpZiAoZW5naW5lLT53YV9jdHgudm1hKSB7Cj4gKwkJaTkxNV92bWFfdW5waW4oZW5naW5l LT53YV9jdHgudm1hKTsKPiArCQlpOTE1X2dlbV9vYmplY3RfcHV0KGVuZ2luZS0+d2FfY3R4LnZt YS0+b2JqKTsKPiArCQllbmdpbmUtPndhX2N0eC52bWEgPSBOVUxMOwo+ICAJfQo+ICB9Cj4gIAo+ ICBzdGF0aWMgaW50IGludGVsX2luaXRfd29ya2Fyb3VuZF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gIHsKPiAtCWludCByZXQ7Cj4gKwlzdHJ1Y3QgaTkxNV9jdHhfd29ya2Fy b3VuZHMgKndhX2N0eCA9ICZlbmdpbmUtPndhX2N0eDsKPiAgCXVpbnQzMl90ICpiYXRjaDsKPiAg CXVpbnQzMl90IG9mZnNldDsKPiAgCXN0cnVjdCBwYWdlICpwYWdlOwo+IC0Jc3RydWN0IGk5MTVf Y3R4X3dvcmthcm91bmRzICp3YV9jdHggPSAmZW5naW5lLT53YV9jdHg7Cj4gKwlpbnQgcmV0Owo+ ICAKPiAgCVdBUk5fT04oZW5naW5lLT5pZCAhPSBSQ1MpOwo+ICAKPiBAQCAtMTE5NCwyMCArMTE5 MSwyMiBAQCBzdGF0aWMgaW50IGludGVsX2luaXRfd29ya2Fyb3VuZF9iYihzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gIAl9Cj4gIAo+ICAJLyogc29tZSBXQSBwZXJmb3JtIHdyaXRl cyB0byBzY3JhdGNoIHBhZ2UsIGVuc3VyZSBpdCBpcyB2YWxpZCAqLwo+IC0JaWYgKGVuZ2luZS0+ c2NyYXRjaC5vYmogPT0gTlVMTCkgewo+ICsJaWYgKGVuZ2luZS0+c2NyYXRjaCA9PSBOVUxMKSB7 Cj4gIAkJRFJNX0VSUk9SKCJzY3JhdGNoIHBhZ2Ugbm90IGFsbG9jYXRlZCBmb3IgJXNcbiIsIGVu Z2luZS0+bmFtZSk7Cj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gIAl9Cj4gIAo+IC0JcmV0ID0gbHJj X3NldHVwX3dhX2N0eF9vYmooZW5naW5lLCBQQUdFX1NJWkUpOwo+IC0JaWYgKHJldCkgewo+ICsJ d2FfY3R4LT52bWEgPSBscmNfc2V0dXBfd2FfY3R4X29iaihlbmdpbmUsIFBBR0VfU0laRSk7Cj4g KwlpZiAoSVNfRVJSKHdhX2N0eC0+dm1hKSkgewo+ICsJCXJldCA9IFBUUl9FUlIod2FfY3R4LT52 bWEpOwo+ICAJCURSTV9ERUJVR19EUklWRVIoIkZhaWxlZCB0byBzZXR1cCBjb250ZXh0IFdBIHBh Z2U6ICVkXG4iLCByZXQpOwo+ICAJCXJldHVybiByZXQ7Cj4gIAl9Cj4gIAo+IC0JcGFnZSA9IGk5 MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZSh3YV9jdHgtPm9iaiwgMCk7Cj4gKwlwYWdlID0g aTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKHdhX2N0eC0+dm1hLT5vYmosIDApOwo+ICAJ YmF0Y2ggPSBrbWFwX2F0b21pYyhwYWdlKTsKPiAgCW9mZnNldCA9IDA7Cj4gKwlyZXQgPSAwOwo+ ICAKPiAgCWlmIChJU19HRU44KGVuZ2luZS0+aTkxNSkpIHsKPiAgCQlyZXQgPSBnZW44X2luaXRf aW5kaXJlY3RjdHhfYmIoZW5naW5lLAo+IEBAIC0xNDY0LDcgKzE0NjMsNyBAQCBzdGF0aWMgaW50 IGdlbjhfZW1pdF9mbHVzaF9yZW5kZXIoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1 ZXN0LAo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyA9IHJlcXVlc3QtPnJpbmc7Cj4g IAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSByZXF1ZXN0LT5lbmdpbmU7Cj4gLQl1 MzIgc2NyYXRjaF9hZGRyID0gZW5naW5lLT5zY3JhdGNoLmd0dF9vZmZzZXQgKyAyICogQ0FDSEVM SU5FX0JZVEVTOwo+ICsJdTMyIHNjcmF0Y2hfYWRkciA9IGVuZ2luZS0+c2NyYXRjaC0+bm9kZS5z dGFydCArIDIgKiBDQUNIRUxJTkVfQllURVM7Cj4gIAlib29sIHZmX2ZsdXNoX3dhID0gZmFsc2U7 Cj4gIAl1MzIgZmxhZ3MgPSAwOwo+ICAJaW50IHJldDsKPiBAQCAtMTY1MCw5ICsxNjQ5LDkgQEAg dm9pZCBpbnRlbF9sb2dpY2FsX3JpbmdfY2xlYW51cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4gIAo+ICAJaW50ZWxfZW5naW5lX2ZpbmlfYnJlYWRjcnVtYnMoZW5naW5lKTsKPiAg Cj4gLQlpZiAoZW5naW5lLT5zdGF0dXNfcGFnZS5vYmopIHsKPiAtCQlpOTE1X2dlbV9vYmplY3Rf dW5waW5fbWFwKGVuZ2luZS0+c3RhdHVzX3BhZ2Uub2JqKTsKPiAtCQllbmdpbmUtPnN0YXR1c19w YWdlLm9iaiA9IE5VTEw7Cj4gKwlpZiAoZW5naW5lLT5zdGF0dXNfcGFnZS52bWEpIHsKPiArCQlp OTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGVuZ2luZS0+c3RhdHVzX3BhZ2Uudm1hLT5vYmopOwo+ ICsJCWVuZ2luZS0+c3RhdHVzX3BhZ2Uudm1hID0gTlVMTDsKPiAgCX0KPiAgCWludGVsX2xyX2Nv bnRleHRfdW5waW4oZGV2X3ByaXYtPmtlcm5lbF9jb250ZXh0LCBlbmdpbmUpOwo+ICAKPiBAQCAt MTY5MiwxOSArMTY5MSwxOSBAQCBsb2dpY2FsX3JpbmdfZGVmYXVsdF9pcnFzKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwgdW5zaWduZWQgc2hpZnQpCj4gIH0KPiAgCj4gIHN0YXRpYyBp bnQKPiAtbHJjX3NldHVwX2h3cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gLQkg ICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqZGN0eF9vYmopCj4gK2xyY19zZXR1cF9o d3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkK PiAgewo+ICsjZGVmaW5lIEhXU19PRkZTRVQgKExSQ19QUEhXU1BfUE4gKiBQQUdFX1NJWkUpCj4g IAl2b2lkICpod3M7Cj4gIAo+ICAJLyogVGhlIEhXU1AgaXMgcGFydCBvZiB0aGUgZGVmYXVsdCBj b250ZXh0IG9iamVjdCBpbiBMUkMgbW9kZS4gKi8KPiAtCWVuZ2luZS0+c3RhdHVzX3BhZ2UuZ2Z4 X2FkZHIgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoZGN0eF9vYmopICsKPiAtCQkJCSAgICAg ICBMUkNfUFBIV1NQX1BOICogUEFHRV9TSVpFOwo+IC0JaHdzID0gaTkxNV9nZW1fb2JqZWN0X3Bp bl9tYXAoZGN0eF9vYmopOwo+ICsJaHdzID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAodm1hLT5v YmopOwo+ICAJaWYgKElTX0VSUihod3MpKQo+ICAJCXJldHVybiBQVFJfRVJSKGh3cyk7Cj4gLQll bmdpbmUtPnN0YXR1c19wYWdlLnBhZ2VfYWRkciA9IGh3cyArIExSQ19QUEhXU1BfUE4gKiBQQUdF X1NJWkU7Cj4gLQllbmdpbmUtPnN0YXR1c19wYWdlLm9iaiA9IGRjdHhfb2JqOwo+ICsKPiArCWVu Z2luZS0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyID0gaHdzICsgSFdTX09GRlNFVDsKPiArCWVuZ2lu ZS0+c3RhdHVzX3BhZ2UuZ2Z4X2FkZHIgPSB2bWEtPm5vZGUuc3RhcnQgKyBIV1NfT0ZGU0VUOwo+ ICsJZW5naW5lLT5zdGF0dXNfcGFnZS52bWEgPSB2bWE7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0K PiBAQCAtMTgyOCw3ICsxODI3LDcgQEAgbG9naWNhbF9yaW5nX2luaXQoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+ICAJfQo+ICAKPiAgCS8qIEFuZCBzZXR1cCB0aGUgaGFyZHdhcmUg c3RhdHVzIHBhZ2UuICovCj4gLQlyZXQgPSBscmNfc2V0dXBfaHdzKGVuZ2luZSwgZGN0eC0+ZW5n aW5lW2VuZ2luZS0+aWRdLnN0YXRlKTsKPiArCXJldCA9IGxyY19zZXR1cF9od3MoZW5naW5lLCBk Y3R4LT5lbmdpbmVbZW5naW5lLT5pZF0udm1hKTsKPiAgCWlmIChyZXQpIHsKPiAgCQlEUk1fRVJS T1IoIkZhaWxlZCB0byBzZXQgdXAgaHdzICVzOiAlZFxuIiwgZW5naW5lLT5uYW1lLCByZXQpOwo+ ICAJCWdvdG8gZXJyb3I7Cj4gQEAgLTIxMDksOSArMjEwOCw5IEBAIHBvcHVsYXRlX2xyX2NvbnRl eHQoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgCQkJICAgICAgIFJJTkdfSU5ESVJF Q1RfQ1RYKGVuZ2luZS0+bW1pb19iYXNlKSwgMCk7Cj4gIAkJQVNTSUdOX0NUWF9SRUcocmVnX3N0 YXRlLCBDVFhfUkNTX0lORElSRUNUX0NUWF9PRkZTRVQsCj4gIAkJCSAgICAgICBSSU5HX0lORElS RUNUX0NUWF9PRkZTRVQoZW5naW5lLT5tbWlvX2Jhc2UpLCAwKTsKPiAtCQlpZiAoZW5naW5lLT53 YV9jdHgub2JqKSB7Cj4gKwkJaWYgKGVuZ2luZS0+d2FfY3R4LnZtYSkgewo+ICAJCQlzdHJ1Y3Qg aTkxNV9jdHhfd29ya2Fyb3VuZHMgKndhX2N0eCA9ICZlbmdpbmUtPndhX2N0eDsKPiAtCQkJdWlu dDMyX3QgZ2d0dF9vZmZzZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQod2FfY3R4LT5vYmop Owo+ICsJCQl1aW50MzJfdCBnZ3R0X29mZnNldCA9IHdhX2N0eC0+dm1hLT5ub2RlLnN0YXJ0Owo+ ICAKPiAgCQkJcmVnX3N0YXRlW0NUWF9SQ1NfSU5ESVJFQ1RfQ1RYKzFdID0KPiAgCQkJCShnZ3R0 X29mZnNldCArIHdhX2N0eC0+aW5kaXJlY3RfY3R4Lm9mZnNldCAqIHNpemVvZih1aW50MzJfdCkp IHwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jCj4gaW5kZXggOWIwZmI3ZTIzY2Ji Li43NWJkZDMzNWQ1NjUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf b3ZlcmxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jCj4g QEAgLTE3MCw4ICsxNzAsOCBAQCBzdHJ1Y3Qgb3ZlcmxheV9yZWdpc3RlcnMgewo+ICBzdHJ1Y3Qg aW50ZWxfb3ZlcmxheSB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKPiAgCXN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnZp ZF9ibzsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvbGRfdmlkX2JvOwo+ICsJc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnZpZF9ibywgKm9sZF92aWRfYm87Cj4gKwlzdHJ1Y3Qg aTkxNV92bWEgKnZpZF92bWEsICpvbGRfdmlkX3ZtYTsKPiAgCWJvb2wgYWN0aXZlOwo+ICAJYm9v bCBwZml0X2FjdGl2ZTsKPiAgCXUzMiBwZml0X3ZzY2FsZV9yYXRpbzsgLyogc2hpZnRlZC1wb2lu dCBudW1iZXIsICgxPDwxMikgPT0gMS4wICovCj4gQEAgLTMxNiw3ICszMTYsNyBAQCBzdGF0aWMg dm9pZCBpbnRlbF9vdmVybGF5X3JlbGVhc2Vfb2xkX3ZpZF90YWlsKHN0cnVjdCBpbnRlbF9vdmVy bGF5ICpvdmVybGF5KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0g b3ZlcmxheS0+b2xkX3ZpZF9ibzsKPiAgCj4gLQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihv YmopOwo+ICsJaTkxNV9nZW1fb2JqZWN0X3VucGluX2Zyb21fZGlzcGxheV9wbGFuZShvdmVybGF5 LT5vbGRfdmlkX3ZtYSk7Cj4gIAlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gIAo+ICAJb3Zl cmxheS0+b2xkX3ZpZF9ibyA9IE5VTEw7Cj4gQEAgLTMyNCwxNCArMzI0LDEzIEBAIHN0YXRpYyB2 b2lkIGludGVsX292ZXJsYXlfcmVsZWFzZV9vbGRfdmlkX3RhaWwoc3RydWN0IGludGVsX292ZXJs YXkgKm92ZXJsYXkpCj4gIAo+ICBzdGF0aWMgdm9pZCBpbnRlbF9vdmVybGF5X29mZl90YWlsKHN0 cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5KQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqID0gb3ZlcmxheS0+dmlkX2JvOwo+IC0KPiAgCS8qIG5ldmVyIGhhdmUgdGhl IG92ZXJsYXkgaHcgb24gd2l0aG91dCBzaG93aW5nIGEgZnJhbWUgKi8KPiAtCWlmIChXQVJOX09O KCFvYmopKQo+ICsJaWYgKFdBUk5fT04ob3ZlcmxheS0+dmlkX3ZtYSkpCj4gIAkJcmV0dXJuOwo+ ICAKPiAtCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKG9iaik7Cj4gLQlpOTE1X2dlbV9vYmpl Y3RfcHV0KG9iaik7Cj4gKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fZnJvbV9kaXNwbGF5X3BsYW5l KG92ZXJsYXktPnZpZF92bWEpOwo+ICsJaTkxNV9nZW1fb2JqZWN0X3B1dChvdmVybGF5LT52aWRf Ym8pOwo+ICsJb3ZlcmxheS0+dmlkX3ZtYSA9IE5VTEw7Cj4gIAlvdmVybGF5LT52aWRfYm8gPSBO VUxMOwo+ICAKPiAgCW92ZXJsYXktPmNydGMtPm92ZXJsYXkgPSBOVUxMOwo+IEBAIC03NTEsNiAr NzUwLDcgQEAgc3RhdGljIGludCBpbnRlbF9vdmVybGF5X2RvX3B1dF9pbWFnZShzdHJ1Y3QgaW50 ZWxfb3ZlcmxheSAqb3ZlcmxheSwKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IG92ZXJsYXktPmk5MTU7Cj4gIAl1MzIgc3dpZHRoLCBzd2lkdGhzdywgc2hlaWdodCwgb3N0 cmlkZTsKPiAgCWVudW0gcGlwZSBwaXBlID0gb3ZlcmxheS0+Y3J0Yy0+cGlwZTsKPiArCXN0cnVj dCBpOTE1X3ZtYSAqdm1hOwo+ICAKPiAgCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5k ZXYtPnN0cnVjdF9tdXRleCk7Cj4gIAlXQVJOX09OKCFkcm1fbW9kZXNldF9pc19sb2NrZWQoJmRl dl9wcml2LT5kZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgpKTsKPiBAQCAtNzU5LDEw ICs3NTksMTAgQEAgc3RhdGljIGludCBpbnRlbF9vdmVybGF5X2RvX3B1dF9pbWFnZShzdHJ1Y3Qg aW50ZWxfb3ZlcmxheSAqb3ZlcmxheSwKPiAgCWlmIChyZXQgIT0gMCkKPiAgCQlyZXR1cm4gcmV0 Owo+ICAKPiAtCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW5fdG9fZGlzcGxheV9wbGFuZShuZXdf Ym8sIDAsCj4gKwl2bWEgPSBpOTE1X2dlbV9vYmplY3RfcGluX3RvX2Rpc3BsYXlfcGxhbmUobmV3 X2JvLCAwLAo+ICAJCQkJCQkgICAmaTkxNV9nZ3R0X3ZpZXdfbm9ybWFsKTsKPiAtCWlmIChyZXQg IT0gMCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJaWYgKElTX0VSUih2bWEpKQo+ICsJCXJldHVybiBQ VFJfRVJSKHZtYSk7Cj4gIAo+ICAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZShuZXdf Ym8pOwo+ICAJaWYgKHJldCkKPiBAQCAtODA1LDcgKzgwNSw3IEBAIHN0YXRpYyBpbnQgaW50ZWxf b3ZlcmxheV9kb19wdXRfaW1hZ2Uoc3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXksCj4gIAlz d2lkdGggPSBwYXJhbXMtPnNyY193Owo+ICAJc3dpZHRoc3cgPSBjYWxjX3N3aWR0aHN3KGRldl9w cml2LCBwYXJhbXMtPm9mZnNldF9ZLCB0bXBfd2lkdGgpOwo+ICAJc2hlaWdodCA9IHBhcmFtcy0+ c3JjX2g7Cj4gLQlpb3dyaXRlMzIoaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG5ld19ibykgKyBw YXJhbXMtPm9mZnNldF9ZLCAmcmVncy0+T0JVRl8wWSk7Cj4gKwlpb3dyaXRlMzIodm1hLT5ub2Rl LnN0YXJ0ICsgcGFyYW1zLT5vZmZzZXRfWSwgJnJlZ3MtPk9CVUZfMFkpOwo+ICAJb3N0cmlkZSA9 IHBhcmFtcy0+c3RyaWRlX1k7Cj4gIAo+ICAJaWYgKHBhcmFtcy0+Zm9ybWF0ICYgSTkxNV9PVkVS TEFZX1lVVl9QTEFOQVIpIHsKPiBAQCAtODE5LDggKzgxOSw4IEBAIHN0YXRpYyBpbnQgaW50ZWxf b3ZlcmxheV9kb19wdXRfaW1hZ2Uoc3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXksCj4gIAkJ CQkgICAgICBwYXJhbXMtPnNyY193L3V2X2hzY2FsZSk7Cj4gIAkJc3dpZHRoc3cgfD0gbWF4X3Qo dTMyLCB0bXBfVSwgdG1wX1YpIDw8IDE2Owo+ICAJCXNoZWlnaHQgfD0gKHBhcmFtcy0+c3JjX2gv dXZfdnNjYWxlKSA8PCAxNjsKPiAtCQlpb3dyaXRlMzIoaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0 KG5ld19ibykgKyBwYXJhbXMtPm9mZnNldF9VLCAmcmVncy0+T0JVRl8wVSk7Cj4gLQkJaW93cml0 ZTMyKGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChuZXdfYm8pICsgcGFyYW1zLT5vZmZzZXRfViwg JnJlZ3MtPk9CVUZfMFYpOwo+ICsJCWlvd3JpdGUzMih2bWEtPm5vZGUuc3RhcnQgKyBwYXJhbXMt Pm9mZnNldF9VLCAmcmVncy0+T0JVRl8wVSk7Cj4gKwkJaW93cml0ZTMyKHZtYS0+bm9kZS5zdGFy dCArIHBhcmFtcy0+b2Zmc2V0X1YsICZyZWdzLT5PQlVGXzBWKTsKPiAgCQlvc3RyaWRlIHw9IHBh cmFtcy0+c3RyaWRlX1VWIDw8IDE2Owo+ICAJfQo+ICAKPiBAQCAtODQ1LDE0ICs4NDUsMTYgQEAg c3RhdGljIGludCBpbnRlbF9vdmVybGF5X2RvX3B1dF9pbWFnZShzdHJ1Y3QgaW50ZWxfb3Zlcmxh eSAqb3ZlcmxheSwKPiAgCQkJICBJTlRFTF9GUk9OVEJVRkZFUl9PVkVSTEFZKHBpcGUpKTsKPiAg Cj4gIAlvdmVybGF5LT5vbGRfdmlkX2JvID0gb3ZlcmxheS0+dmlkX2JvOwo+ICsJb3ZlcmxheS0+ b2xkX3ZpZF92bWEgPSBvdmVybGF5LT52aWRfdm1hOwo+ICAJb3ZlcmxheS0+dmlkX2JvID0gbmV3 X2JvOwo+ICsJb3ZlcmxheS0+dmlkX3ZtYSA9IHZtYTsKPiAgCj4gIAlpbnRlbF9mcm9udGJ1ZmZl cl9mbGlwKGRldl9wcml2LT5kZXYsIElOVEVMX0ZST05UQlVGRkVSX09WRVJMQVkocGlwZSkpOwo+ ICAKPiAgCXJldHVybiAwOwo+ICAKPiAgb3V0X3VucGluOgo+IC0JaTkxNV9nZW1fb2JqZWN0X2dn dHRfdW5waW4obmV3X2JvKTsKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9mcm9tX2Rpc3BsYXlf cGxhbmUodm1hKTsKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gQEAgLTEzODAsNiArMTM4Miw3 IEBAIHZvaWQgaW50ZWxfc2V0dXBfb3ZlcmxheShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gIAlzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheTsKPiAgCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpyZWdfYm87Cj4gIAlzdHJ1Y3Qgb3ZlcmxheV9yZWdpc3RlcnMgX19p b21lbSAqcmVnczsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0gTlVMTDsKPiAgCWludCByZXQ7 Cj4gIAo+ICAJaWYgKCFIQVNfT1ZFUkxBWShkZXZfcHJpdikpCj4gQEAgLTE0MTIsMTMgKzE0MTUs MTQgQEAgdm9pZCBpbnRlbF9zZXR1cF9vdmVybGF5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAgCQl9Cj4gIAkJb3ZlcmxheS0+ZmxpcF9hZGRyID0gcmVnX2JvLT5waHlzX2hh bmRsZS0+YnVzYWRkcjsKPiAgCX0gZWxzZSB7Cj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dn dHRfcGluKHJlZ19ibywgTlVMTCwKPiArCQl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4o cmVnX2JvLCBOVUxMLAo+ICAJCQkJCSAgICAgICAwLCBQQUdFX1NJWkUsIFBJTl9NQVBQQUJMRSk7 Cj4gLQkJaWYgKHJldCkgewo+ICsJCWlmIChJU19FUlIodm1hKSkgewo+ICAJCQlEUk1fRVJST1Io ImZhaWxlZCB0byBwaW4gb3ZlcmxheSByZWdpc3RlciBib1xuIik7Cj4gKwkJCXJldCA9IFBUUl9F UlIodm1hKTsKPiAgCQkJZ290byBvdXRfZnJlZV9ibzsKPiAgCQl9Cj4gLQkJb3ZlcmxheS0+Zmxp cF9hZGRyID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KHJlZ19ibyk7Cj4gKwkJb3ZlcmxheS0+ ZmxpcF9hZGRyID0gdm1hLT5ub2RlLnN0YXJ0Owo+ICAKPiAgCQlyZXQgPSBpOTE1X2dlbV9vYmpl Y3Rfc2V0X3RvX2d0dF9kb21haW4ocmVnX2JvLCB0cnVlKTsKPiAgCQlpZiAocmV0KSB7Cj4gQEAg LTE0NTAsOCArMTQ1NCw4IEBAIHZvaWQgaW50ZWxfc2V0dXBfb3ZlcmxheShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAlyZXR1cm47Cj4gIAo+ICBvdXRfdW5waW5fYm86Cj4g LQlpZiAoIU9WRVJMQVlfTkVFRFNfUEhZU0lDQUwoZGV2X3ByaXYpKQo+IC0JCWk5MTVfZ2VtX29i amVjdF9nZ3R0X3VucGluKHJlZ19ibyk7Cj4gKwlpZiAodm1hKQo+ICsJCWk5MTVfdm1hX3VucGlu KHZtYSk7Cj4gIG91dF9mcmVlX2JvOgo+ICAJaTkxNV9nZW1fb2JqZWN0X3B1dChyZWdfYm8pOwo+ ICBvdXRfZnJlZToKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmlu Z2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gaW5k ZXggYzgyMTE5MTNmMmQ2Li4zMmFkZDM5ZWU5ZGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcmluZ2J1ZmZlci5jCj4gQEAgLTE4Miw3ICsxODIsNyBAQCBpbnRlbF9lbWl0X3Bvc3Rf c3luY19ub256ZXJvX2ZsdXNoKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICB7 Cj4gIAlzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyA9IHJlcS0+cmluZzsKPiAgCXUzMiBzY3JhdGNo X2FkZHIgPQo+IC0JICAgICAgIAlyZXEtPmVuZ2luZS0+c2NyYXRjaC5ndHRfb2Zmc2V0ICsgMiAq IENBQ0hFTElORV9CWVRFUzsKPiArCSAgICAgICAJcmVxLT5lbmdpbmUtPnNjcmF0Y2gtPm5vZGUu c3RhcnQgKyAyICogQ0FDSEVMSU5FX0JZVEVTOwo+ICAJaW50IHJldDsKPiAgCj4gIAlyZXQgPSBp bnRlbF9yaW5nX2JlZ2luKHJlcSwgNik7Cj4gQEAgLTIxOSw3ICsyMTksNyBAQCBnZW42X3JlbmRl cl9yaW5nX2ZsdXNoKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+ICB7Cj4gIAlz dHJ1Y3QgaW50ZWxfcmluZyAqcmluZyA9IHJlcS0+cmluZzsKPiAgCXUzMiBzY3JhdGNoX2FkZHIg PQo+IC0JICAgICAgIAlyZXEtPmVuZ2luZS0+c2NyYXRjaC5ndHRfb2Zmc2V0ICsgMiAqIENBQ0hF TElORV9CWVRFUzsKPiArCSAgICAgICAJcmVxLT5lbmdpbmUtPnNjcmF0Y2gtPm5vZGUuc3RhcnQg KyAyICogQ0FDSEVMSU5FX0JZVEVTOwo+ICAJdTMyIGZsYWdzID0gMDsKPiAgCWludCByZXQ7Cj4g IAo+IEBAIC0yOTQsNyArMjk0LDcgQEAgZ2VuN19yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiAgewo+ICAJc3RydWN0IGludGVsX3JpbmcgKnJpbmcg PSByZXEtPnJpbmc7Cj4gIAl1MzIgc2NyYXRjaF9hZGRyID0KPiAtCSAgICAgICAJcmVxLT5lbmdp bmUtPnNjcmF0Y2guZ3R0X29mZnNldCArIDIgKiBDQUNIRUxJTkVfQllURVM7Cj4gKwkgICAgICAg CXJlcS0+ZW5naW5lLT5zY3JhdGNoLT5ub2RlLnN0YXJ0ICsgMiAqIENBQ0hFTElORV9CWVRFUzsK PiAgCXUzMiBmbGFncyA9IDA7Cj4gIAlpbnQgcmV0Owo+ICAKPiBAQCAtMzc5LDcgKzM3OSw4IEBA IHN0YXRpYyBpbnQKPiAgZ2VuOF9yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcSwKPiAgCQkgICAgICAgdTMyIGludmFsaWRhdGVfZG9tYWlucywgdTMyIGZs dXNoX2RvbWFpbnMpCj4gIHsKPiAtCXUzMiBzY3JhdGNoX2FkZHIgPSByZXEtPmVuZ2luZS0+c2Ny YXRjaC5ndHRfb2Zmc2V0ICsgMiAqIENBQ0hFTElORV9CWVRFUzsKPiArCXUzMiBzY3JhdGNoX2Fk ZHIgPQo+ICsJICAgICAgIAlyZXEtPmVuZ2luZS0+c2NyYXRjaC0+bm9kZS5zdGFydCArIDIgKiBD QUNIRUxJTkVfQllURVM7Cj4gIAl1MzIgZmxhZ3MgPSAwOwo+ICAJaW50IHJldDsKPiAgCj4gQEAg LTU0MCw3ICs1NDEsNyBAQCBzdGF0aWMgaW50IGluaXRfcmluZ19jb21tb24oc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gIAlzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyA9IGVuZ2lu ZS0+YnVmZmVyOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHJpbmctPm9i ajsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0gcmluZy0+dm1hOwo+ICAJaW50IHJldCA9IDA7 Cj4gIAo+ICAJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9B TEwpOwo+IEBAIC01ODAsNyArNTgxLDcgQEAgc3RhdGljIGludCBpbml0X3JpbmdfY29tbW9uKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCSAqIHJlZ2lzdGVycyB3aXRoIHRoZSBh Ym92ZSBzZXF1ZW5jZSAodGhlIHJlYWRiYWNrIG9mIHRoZSBIRUFEIHJlZ2lzdGVycwo+ICAJICog YWxzbyBlbmZvcmNlcyBvcmRlcmluZyksIG90aGVyd2lzZSB0aGUgaHcgbWlnaHQgbG9zZSB0aGUg bmV3IHJpbmcKPiAgCSAqIHJlZ2lzdGVyIHZhbHVlcy4gKi8KPiAtCUk5MTVfV1JJVEVfU1RBUlQo ZW5naW5lLCBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSk7Cj4gKwlJOTE1X1dSSVRFX1NU QVJUKGVuZ2luZSwgdm1hLT5ub2RlLnN0YXJ0KTsKPiAgCj4gIAkvKiBXYUNsZWFyUmluZ0J1Zkhl YWRSZWdBdEluaXQ6Y3RnLGVsayAqLwo+ICAJaWYgKEk5MTVfUkVBRF9IRUFEKGVuZ2luZSkpCj4g QEAgLTU5NSwxNiArNTk2LDE1IEBAIHN0YXRpYyBpbnQgaW5pdF9yaW5nX2NvbW1vbihzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAo+ICAJLyogSWYgdGhlIGhlYWQgaXMgc3RpbGwg bm90IHplcm8sIHRoZSByaW5nIGlzIGRlYWQgKi8KPiAgCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFE X0NUTChlbmdpbmUpICYgUklOR19WQUxJRCkgIT0gMCAmJgo+IC0JCSAgICAgSTkxNV9SRUFEX1NU QVJUKGVuZ2luZSkgPT0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgJiYKPiArCQkgICAg IEk5MTVfUkVBRF9TVEFSVChlbmdpbmUpID09IHZtYS0+bm9kZS5zdGFydCAmJgo+ICAJCSAgICAg KEk5MTVfUkVBRF9IRUFEKGVuZ2luZSkgJiBIRUFEX0FERFIpID09IDAsIDUwKSkgewo+ICAJCURS TV9FUlJPUigiJXMgaW5pdGlhbGl6YXRpb24gZmFpbGVkICIKPiAtCQkJICAiY3RsICUwOHggKHZh bGlkPyAlZCkgaGVhZCAlMDh4IHRhaWwgJTA4eCBzdGFydCAlMDh4IFtleHBlY3RlZCAlMDhseF1c biIsCj4gKwkJCSAgImN0bCAlMDh4ICh2YWxpZD8gJWQpIGhlYWQgJTA4eCB0YWlsICUwOHggc3Rh cnQgJTA4eCBbZXhwZWN0ZWQgJTA4eF1cbiIsCj4gIAkJCSAgZW5naW5lLT5uYW1lLAo+ICAJCQkg IEk5MTVfUkVBRF9DVEwoZW5naW5lKSwKPiAgCQkJICBJOTE1X1JFQURfQ1RMKGVuZ2luZSkgJiBS SU5HX1ZBTElELAo+ICAJCQkgIEk5MTVfUkVBRF9IRUFEKGVuZ2luZSksIEk5MTVfUkVBRF9UQUlM KGVuZ2luZSksCj4gLQkJCSAgSTkxNV9SRUFEX1NUQVJUKGVuZ2luZSksCj4gLQkJCSAgKHVuc2ln bmVkIGxvbmcpaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikpOwo+ICsJCQkgIEk5MTVfUkVB RF9TVEFSVChlbmdpbmUpLCAodTMyKXZtYS0+bm9kZS5zdGFydCk7Cj4gIAkJcmV0ID0gLUVJTzsK PiAgCQlnb3RvIG91dDsKPiAgCX0KPiBAQCAtNjI0LDIwICs2MjQsMjEgQEAgb3V0Ogo+ICAKPiAg dm9pZCBpbnRlbF9maW5pX3BpcGVfY29udHJvbChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCj4gIHsKPiAtCWlmIChlbmdpbmUtPnNjcmF0Y2gub2JqID09IE5VTEwpCj4gKwlpZiAoIWVu Z2luZS0+c2NyYXRjaCkKPiAgCQlyZXR1cm47Cj4gIAo+IC0JaTkxNV9nZW1fb2JqZWN0X2dndHRf dW5waW4oZW5naW5lLT5zY3JhdGNoLm9iaik7Cj4gLQlpOTE1X2dlbV9vYmplY3RfcHV0KGVuZ2lu ZS0+c2NyYXRjaC5vYmopOwo+IC0JZW5naW5lLT5zY3JhdGNoLm9iaiA9IE5VTEw7Cj4gKwlpOTE1 X3ZtYV91bnBpbihlbmdpbmUtPnNjcmF0Y2gpOwo+ICsJaTkxNV9nZW1fb2JqZWN0X3B1dChlbmdp bmUtPnNjcmF0Y2gtPm9iaik7Cj4gKwllbmdpbmUtPnNjcmF0Y2ggPSBOVUxMOwo+ICB9Cj4gIAo+ ICBpbnQgaW50ZWxfaW5pdF9waXBlX2NvbnRyb2woc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLCBpbnQgc2l6ZSkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsK PiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAJaW50IHJldDsKPiAgCj4gLQlXQVJOX09OKGVu Z2luZS0+c2NyYXRjaC5vYmopOwo+ICsJV0FSTl9PTihlbmdpbmUtPnNjcmF0Y2gpOwo+ICAKPiAg CW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVuKGVuZ2luZS0+aTkxNS0+ZGV2LCBz aXplKTsKPiAgCWlmIChvYmogPT0gTlVMTCkKPiBAQCAtNjQ4LDE4ICs2NDksMTkgQEAgaW50IGlu dGVsX2luaXRfcGlwZV9jb250cm9sKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgaW50 IHNpemUpCj4gIAkJZ290byBlcnI7Cj4gIAl9Cj4gIAo+IC0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0 X2dndHRfcGluKG9iaiwgTlVMTCwgMCwgNDA5NiwgUElOX0hJR0gpOwo+IC0JaWYgKHJldCkKPiAr CXZtYSA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihvYmosIE5VTEwsIDAsIDQwOTYsIFBJTl9I SUdIKTsKPiArCWlmIChJU19FUlIodm1hKSkgewo+ICsJCXJldCA9IFBUUl9FUlIodm1hKTsKPiAg CQlnb3RvIGVycl91bnJlZjsKPiArCX0KPiAgCj4gLQllbmdpbmUtPnNjcmF0Y2gub2JqID0gb2Jq Owo+IC0JZW5naW5lLT5zY3JhdGNoLmd0dF9vZmZzZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZz ZXQob2JqKTsKPiAtCURSTV9ERUJVR19EUklWRVIoIiVzIHBpcGUgY29udHJvbCBvZmZzZXQ6IDB4 JTA4eFxuIiwKPiAtCQkJIGVuZ2luZS0+bmFtZSwgZW5naW5lLT5zY3JhdGNoLmd0dF9vZmZzZXQp Owo+ICsJZW5naW5lLT5zY3JhdGNoID0gdm1hOwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiJXMgcGlw ZSBjb250cm9sIG9mZnNldDogMHglMDhsbHhcbiIsCj4gKwkJCSBlbmdpbmUtPm5hbWUsIChsb25n IGxvbmcpdm1hLT5ub2RlLnN0YXJ0KTsKPiAgCXJldHVybiAwOwo+ICAKPiAgZXJyX3VucmVmOgo+ IC0JaTkxNV9nZW1fb2JqZWN0X3B1dChlbmdpbmUtPnNjcmF0Y2gub2JqKTsKPiArCWk5MTVfZ2Vt X29iamVjdF9wdXQob2JqKTsKPiAgZXJyOgo+ICAJcmV0dXJuIHJldDsKPiAgfQo+IEBAIC0xMjE3 LDEwICsxMjE5LDEzIEBAIHN0YXRpYyB2b2lkIHJlbmRlcl9yaW5nX2NsZWFudXAoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gIAo+IC0JaWYgKGRldl9wcml2LT5zZW1hcGhvcmVf b2JqKSB7Cj4gLQkJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4oZGV2X3ByaXYtPnNlbWFwaG9y ZV9vYmopOwo+IC0JCWk5MTVfZ2VtX29iamVjdF9wdXQoZGV2X3ByaXYtPnNlbWFwaG9yZV9vYmop Owo+IC0JCWRldl9wcml2LT5zZW1hcGhvcmVfb2JqID0gTlVMTDsKPiArCWlmIChkZXZfcHJpdi0+ c2VtYXBob3JlX3ZtYSkgewo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBk ZXZfcHJpdi0+c2VtYXBob3JlX3ZtYS0+b2JqOwo+ICsKPiArCQlpOTE1X3ZtYV91bnBpbihkZXZf cHJpdi0+c2VtYXBob3JlX3ZtYSk7Cj4gKwkJZGV2X3ByaXYtPnNlbWFwaG9yZV92bWEgPSBOVUxM Owo+ICsKPiArCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gIAl9Cj4gIAo+ICAJaW50ZWxf ZmluaV9waXBlX2NvbnRyb2woZW5naW5lKTsKPiBAQCAtMTY4NCw3ICsxNjg5LDcgQEAgaTgzMF9l bWl0X2JiX3N0YXJ0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+ICAJCSAgIHVu c2lnbmVkIGRpc3BhdGNoX2ZsYWdzKQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyA9 IHJlcS0+cmluZzsKPiAtCXUzMiBjc19vZmZzZXQgPSByZXEtPmVuZ2luZS0+c2NyYXRjaC5ndHRf b2Zmc2V0Owo+ICsJdTMyIGNzX29mZnNldCA9IHJlcS0+ZW5naW5lLT5zY3JhdGNoLT5ub2RlLnN0 YXJ0Owo+ICAJaW50IHJldDsKPiAgCj4gIAlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcSwgNik7 Cj4gQEAgLTE3NzMsNjcgKzE3NzgsNjggQEAgc3RhdGljIHZvaWQgY2xlYW51cF9waHlzX3N0YXR1 c19wYWdlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCj4gIHN0YXRpYyB2b2lk IGNsZWFudXBfc3RhdHVzX3BhZ2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsJc3RydWN0IGk5MTVfdm1h ICp2bWE7Cj4gIAo+IC0Jb2JqID0gZW5naW5lLT5zdGF0dXNfcGFnZS5vYmo7Cj4gLQlpZiAob2Jq ID09IE5VTEwpCj4gKwl2bWEgPSBlbmdpbmUtPnN0YXR1c19wYWdlLnZtYTsKPiArCWlmICh2bWEg PT0gTlVMTCkKPiAgCQlyZXR1cm47Cj4gKwllbmdpbmUtPnN0YXR1c19wYWdlLnZtYSA9IE5VTEw7 Cj4gIAo+IC0Ja3VubWFwKHNnX3BhZ2Uob2JqLT5wYWdlcy0+c2dsKSk7Cj4gLQlpOTE1X2dlbV9v YmplY3RfZ2d0dF91bnBpbihvYmopOwo+IC0JaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+IC0J ZW5naW5lLT5zdGF0dXNfcGFnZS5vYmogPSBOVUxMOwo+ICsJa3VubWFwKHNnX3BhZ2Uodm1hLT5v YmotPnBhZ2VzLT5zZ2wpKTsKPiArCWk5MTVfdm1hX3VucGluKHZtYSk7Cj4gIH0KPiAgCj4gIHN0 YXRpYyBpbnQgaW5pdF9zdGF0dXNfcGFnZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBlbmdpbmUtPnN0YXR1 c19wYWdlLm9iajsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlzdHJ1 Y3QgaTkxNV92bWEgKnZtYTsKPiArCXVuc2lnbmVkIGZsYWdzOwo+ICsJaW50IHJldDsKPiAgCj4g LQlpZiAob2JqID09IE5VTEwpIHsKPiAtCQl1bnNpZ25lZCBmbGFnczsKPiAtCQlpbnQgcmV0Owo+ ICsJaWYgKGVuZ2luZS0+c3RhdHVzX3BhZ2Uudm1hKQo+ICsJCXJldHVybiAwOwo+ICAKPiAtCQlv YmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGVuZ2luZS0+aTkxNS0+ZGV2LCA0MDk2KTsKPiAt CQlpZiAoSVNfRVJSKG9iaikpIHsKPiAtCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUg c3RhdHVzIHBhZ2VcbiIpOwo+IC0JCQlyZXR1cm4gUFRSX0VSUihvYmopOwo+IC0JCX0KPiArCW9i aiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoZW5naW5lLT5pOTE1LT5kZXYsIDQwOTYpOwo+ICsJ aWYgKElTX0VSUihvYmopKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgc3Rh dHVzIHBhZ2VcbiIpOwo+ICsJCXJldHVybiBQVFJfRVJSKG9iaik7Cj4gKwl9Cj4gIAo+IC0JCXJl dCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfY2FjaGVfbGV2ZWwob2JqLCBJOTE1X0NBQ0hFX0xMQyk7 Cj4gLQkJaWYgKHJldCkKPiAtCQkJZ290byBlcnJfdW5yZWY7Cj4gLQo+IC0JCWZsYWdzID0gMDsK PiAtCQlpZiAoIUhBU19MTEMoZW5naW5lLT5pOTE1KSkKPiAtCQkJLyogT24gZzMzLCB3ZSBjYW5u b3QgcGxhY2UgSFdTIGFib3ZlIDI1Nk1pQiwgc28KPiAtCQkJICogcmVzdHJpY3QgaXRzIHBpbm5p bmcgdG8gdGhlIGxvdyBtYXBwYWJsZSBhcmVuYS4KPiAtCQkJICogVGhvdWdoIHRoaXMgcmVzdHJp Y3Rpb24gaXMgbm90IGRvY3VtZW50ZWQgZm9yCj4gLQkJCSAqIGdlbjQsIGdlbjUsIG9yIGJ5dCwg dGhleSBhbHNvIGJlaGF2ZSBzaW1pbGFybHkKPiAtCQkJICogYW5kIGhhbmcgaWYgdGhlIEhXUyBp cyBwbGFjZWQgYXQgdGhlIHRvcCBvZiB0aGUKPiAtCQkJICogR1RULiBUbyBnZW5lcmFsaXNlLCBp dCBhcHBlYXJzIHRoYXQgYWxsICFsbGMKPiAtCQkJICogcGxhdGZvcm1zIGhhdmUgaXNzdWVzIHdp dGggdXMgcGxhY2luZyB0aGUgSFdTCj4gLQkJCSAqIGFib3ZlIHRoZSBtYXBwYWJsZSByZWdpb24g KGV2ZW4gdGhvdWdoIHdlIG5ldmVyCj4gLQkJCSAqIGFjdHVhbHkgbWFwIGl0KS4KPiAtCQkJICov Cj4gLQkJCWZsYWdzIHw9IFBJTl9NQVBQQUJMRTsKPiAtCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rf Z2d0dF9waW4ob2JqLCBOVUxMLCAwLCA0MDk2LCBmbGFncyk7Cj4gLQkJaWYgKHJldCkgewo+IC1l cnJfdW5yZWY6Cj4gLQkJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiAtCQkJcmV0dXJuIHJl dDsKPiAtCQl9Cj4gKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2xldmVsKG9iaiwg STkxNV9DQUNIRV9MTEMpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl91bnJlZjsKPiAgCj4g LQkJZW5naW5lLT5zdGF0dXNfcGFnZS5vYmogPSBvYmo7Cj4gKwlmbGFncyA9IDA7Cj4gKwlpZiAo IUhBU19MTEMoZW5naW5lLT5pOTE1KSkKPiArCQkvKiBPbiBnMzMsIHdlIGNhbm5vdCBwbGFjZSBI V1MgYWJvdmUgMjU2TWlCLCBzbwo+ICsJCSAqIHJlc3RyaWN0IGl0cyBwaW5uaW5nIHRvIHRoZSBs b3cgbWFwcGFibGUgYXJlbmEuCj4gKwkJICogVGhvdWdoIHRoaXMgcmVzdHJpY3Rpb24gaXMgbm90 IGRvY3VtZW50ZWQgZm9yCj4gKwkJICogZ2VuNCwgZ2VuNSwgb3IgYnl0LCB0aGV5IGFsc28gYmVo YXZlIHNpbWlsYXJseQo+ICsJCSAqIGFuZCBoYW5nIGlmIHRoZSBIV1MgaXMgcGxhY2VkIGF0IHRo ZSB0b3Agb2YgdGhlCj4gKwkJICogR1RULiBUbyBnZW5lcmFsaXNlLCBpdCBhcHBlYXJzIHRoYXQg YWxsICFsbGMKPiArCQkgKiBwbGF0Zm9ybXMgaGF2ZSBpc3N1ZXMgd2l0aCB1cyBwbGFjaW5nIHRo ZSBIV1MKPiArCQkgKiBhYm92ZSB0aGUgbWFwcGFibGUgcmVnaW9uIChldmVuIHRob3VnaCB3ZSBu ZXZlcgo+ICsJCSAqIGFjdHVhbHkgbWFwIGl0KS4KPiArCQkgKi8KPiArCQlmbGFncyB8PSBQSU5f TUFQUEFCTEU7Cj4gKwl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4ob2JqLCBOVUxMLCAw LCA0MDk2LCBmbGFncyk7Cj4gKwlpZiAoSVNfRVJSKHZtYSkpIHsKPiArCQlyZXQgPSBQVFJfRVJS KHZtYSk7Cj4gKwkJZ290byBlcnJfdW5yZWY7Cj4gIAl9Cj4gIAo+IC0JZW5naW5lLT5zdGF0dXNf cGFnZS5nZnhfYWRkciA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopOwo+ICsJZW5naW5l LT5zdGF0dXNfcGFnZS52bWEgPSB2bWE7Cj4gKwllbmdpbmUtPnN0YXR1c19wYWdlLmdmeF9hZGRy ID0gdm1hLT5ub2RlLnN0YXJ0Owo+ICAJZW5naW5lLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHIgPSBr bWFwKHNnX3BhZ2Uob2JqLT5wYWdlcy0+c2dsKSk7Cj4gLQltZW1zZXQoZW5naW5lLT5zdGF0dXNf cGFnZS5wYWdlX2FkZHIsIDAsIFBBR0VfU0laRSk7Cj4gIAo+ICAJRFJNX0RFQlVHX0RSSVZFUigi JXMgaHdzIG9mZnNldDogMHglMDh4XG4iLAo+ICAJCQllbmdpbmUtPm5hbWUsIGVuZ2luZS0+c3Rh dHVzX3BhZ2UuZ2Z4X2FkZHIpOwo+ICAKPiAgCXJldHVybiAwOwo+ICsKPiArZXJyX3VucmVmOgo+ ICsJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAg c3RhdGljIGludCBpbml0X3BoeXNfc3RhdHVzX3BhZ2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+IEBAIC0xODU3LDE1ICsxODYzLDE2IEBAIGludCBpbnRlbF9yaW5nX3BpbihzdHJ1 Y3QgaW50ZWxfcmluZyAqcmluZykKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gcmluZy0+ZW5naW5lLT5pOTE1Owo+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiA9IHJpbmctPm9iajsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAJLyogUmlu ZyB3cmFwYXJvdW5kIGF0IG9mZnNldCAwIHNvbWV0aW1lcyBoYW5ncy4gTm8gaWRlYSB3aHkuICov Cj4gIAl1bnNpZ25lZCBmbGFncyA9IFBJTl9PRkZTRVRfQklBUyB8IDQwOTY7Cj4gIAl2b2lkICph ZGRyOwo+ICAJaW50IHJldDsKPiAgCj4gIAlpZiAoSEFTX0xMQyhkZXZfcHJpdikgJiYgIW9iai0+ c3RvbGVuKSB7Cj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKG9iaiwgTlVMTCwg MCwgUEFHRV9TSVpFLCBmbGFncyk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAr CQl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4ob2JqLCBOVUxMLCAwLCBQQUdFX1NJWkUs IGZsYWdzKTsKPiArCQlpZiAoSVNfRVJSKHZtYSkpCj4gKwkJCXJldHVybiBQVFJfRVJSKHZtYSk7 Cj4gIAo+ICAJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihvYmosIHRy dWUpOwo+ICAJCWlmIChyZXQpCj4gQEAgLTE4NzcsMTAgKzE4ODQsMTAgQEAgaW50IGludGVsX3Jp bmdfcGluKHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nKQo+ICAJCQlnb3RvIGVycl91bnBpbjsKPiAg CQl9Cj4gIAl9IGVsc2Ugewo+IC0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihvYmos IE5VTEwsIDAsIFBBR0VfU0laRSwKPiArCQl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4o b2JqLCBOVUxMLCAwLCBQQUdFX1NJWkUsCj4gIAkJCQkJICAgICAgIGZsYWdzIHwgUElOX01BUFBB QkxFKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+ICsJCWlmIChJU19FUlIodm1h KSkKPiArCQkJcmV0dXJuIFBUUl9FUlIodm1hKTsKPiAgCj4gIAkJcmV0ID0gaTkxNV9nZW1fb2Jq ZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgdHJ1ZSk7Cj4gIAkJaWYgKHJldCkKPiBAQCAtMTg4 OSw3ICsxODk2LDcgQEAgaW50IGludGVsX3JpbmdfcGluKHN0cnVjdCBpbnRlbF9yaW5nICpyaW5n KQo+ICAJCS8qIEFjY2VzcyB0aHJvdWdoIHRoZSBHVFQgcmVxdWlyZXMgdGhlIGRldmljZSB0byBi ZSBhd2FrZS4gKi8KPiAgCQlhc3NlcnRfcnBtX3dha2Vsb2NrX2hlbGQoZGV2X3ByaXYpOwo+ICAK PiAtCQlhZGRyID0gaTkxNV92bWFfcGluX2lvbWFwKGk5MTVfZ2VtX29ial90b19nZ3R0KG9iaikp Owo+ICsJCWFkZHIgPSBpOTE1X3ZtYV9waW5faW9tYXAodm1hKTsKPiAgCQlpZiAoSVNfRVJSKGFk ZHIpKSB7Cj4gIAkJCXJldCA9IFBUUl9FUlIoYWRkcik7Cj4gIAkJCWdvdG8gZXJyX3VucGluOwo+ IEBAIC0xODk3LDExICsxOTA0LDExIEBAIGludCBpbnRlbF9yaW5nX3BpbihzdHJ1Y3QgaW50ZWxf cmluZyAqcmluZykKPiAgCX0KPiAgCj4gIAlyaW5nLT52YWRkciA9IGFkZHI7Cj4gLQlyaW5nLT52 bWEgPSBpOTE1X2dlbV9vYmpfdG9fZ2d0dChvYmopOwo+ICsJcmluZy0+dm1hID0gdm1hOwo+ICAJ cmV0dXJuIDA7Cj4gIAo+ICBlcnJfdW5waW46Cj4gLQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBp bihvYmopOwo+ICsJaTkxNV92bWFfdW5waW4odm1hKTsKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAg Cj4gQEAgLTE5MTYsNyArMTkyMyw3IEBAIHZvaWQgaW50ZWxfcmluZ191bnBpbihzdHJ1Y3QgaW50 ZWxfcmluZyAqcmluZykKPiAgCQlpOTE1X3ZtYV91bnBpbl9pb21hcChyaW5nLT52bWEpOwo+ICAJ cmluZy0+dmFkZHIgPSBOVUxMOwo+ICAKPiAtCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKHJp bmctPm9iaik7Cj4gKwlpOTE1X3ZtYV91bnBpbihyaW5nLT52bWEpOwo+ICAJcmluZy0+dm1hID0g TlVMTDsKPiAgfQo+ICAKPiBAQCAtMjAwNywxMCArMjAxNCwxNCBAQCBzdGF0aWMgaW50IGludGVs X3JpbmdfY29udGV4dF9waW4oc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgCQlyZXR1 cm4gMDsKPiAgCj4gIAlpZiAoY2UtPnN0YXRlKSB7Cj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0 X2dndHRfcGluKGNlLT5zdGF0ZSwgTlVMTCwgMCwKPiArCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsK PiArCj4gKwkJdm1hID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKGNlLT5zdGF0ZSwgTlVMTCwg MCwKPiAgCQkJCQkgICAgICAgY3R4LT5nZ3R0X2FsaWdubWVudCwgUElOX0hJR0gpOwo+IC0JCWlm IChyZXQpCj4gKwkJaWYgKHZtYSkKPiAgCQkJZ290byBlcnJvcjsKPiArCj4gKwkJY2UtPnZtYSA9 IHZtYTsKPiAgCX0KPiAgCj4gIAkvKiBUaGUga2VybmVsIGNvbnRleHQgaXMgb25seSB1c2VkIGFz IGEgcGxhY2Vob2xkZXIgZm9yIGZsdXNoaW5nIHRoZQo+IEBAIC0yMDQxLDggKzIwNTIsOCBAQCBz dGF0aWMgdm9pZCBpbnRlbF9yaW5nX2NvbnRleHRfdW5waW4oc3RydWN0IGk5MTVfZ2VtX2NvbnRl eHQgKmN0eCwKPiAgCWlmICgtLWNlLT5waW5fY291bnQpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWlm IChjZS0+c3RhdGUpCj4gLQkJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4oY2UtPnN0YXRlKTsK PiArCWlmIChjZS0+dm1hKQo+ICsJCWk5MTVfdm1hX3VucGluKGNlLT52bWEpOwo+ICAKPiAgCWk5 MTVfZ2VtX2NvbnRleHRfcHV0KGN0eCk7Cj4gIH0KPiBAQCAtMjMzNSw4ICsyMzQ2LDggQEAgdm9p ZCBpbnRlbF9lbmdpbmVfaW5pdF9zZXFubyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs IHUzMiBzZXFubykKPiAgCQlpZiAoSEFTX1ZFQk9YKGRldl9wcml2KSkKPiAgCQkJSTkxNV9XUklU RShSSU5HX1NZTkNfMihlbmdpbmUtPm1taW9fYmFzZSksIDApOwo+ICAJfQo+IC0JaWYgKGRldl9w cml2LT5zZW1hcGhvcmVfb2JqKSB7Cj4gLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiA9IGRldl9wcml2LT5zZW1hcGhvcmVfb2JqOwo+ICsJaWYgKGRldl9wcml2LT5zZW1hcGhvcmVf dm1hKSB7Cj4gKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGRldl9wcml2LT5z ZW1hcGhvcmVfdm1hLT5vYmo7Cj4gIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBpOTE1X2dlbV9vYmpl Y3RfZ2V0X2RpcnR5X3BhZ2Uob2JqLCAwKTsKPiAgCQl2b2lkICpzZW1hcGhvcmVzID0ga21hcChw YWdlKTsKPiAgCQltZW1zZXQoc2VtYXBob3JlcyArIEdFTjhfU0VNQVBIT1JFX09GRlNFVChlbmdp bmUtPmlkLCAwKSwKPiBAQCAtMjU3NiwxNiArMjU4NywyMCBAQCBpbnQgaW50ZWxfaW5pdF9yZW5k ZXJfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCQkJCURSTV9FUlJPUigi RmFpbGVkIHRvIGFsbG9jYXRlIHNlbWFwaG9yZSBiby4gRGlzYWJsaW5nIHNlbWFwaG9yZXNcbiIp Owo+ICAJCQkJaTkxNS5zZW1hcGhvcmVzID0gMDsKPiAgCQkJfSBlbHNlIHsKPiArCQkJCXN0cnVj dCBpOTE1X3ZtYSAqdm1hOwo+ICsKPiAgCQkJCWk5MTVfZ2VtX29iamVjdF9zZXRfY2FjaGVfbGV2 ZWwob2JqLCBJOTE1X0NBQ0hFX0xMQyk7Cj4gLQkJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2d0 dF9waW4ob2JqLCBOVUxMLAo+ICsJCQkJdm1hID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKG9i aiwgTlVMTCwKPiAgCQkJCQkJCSAgICAgICAwLCAwLAo+ICAJCQkJCQkJICAgICAgIFBJTl9ISUdI KTsKPiAtCQkJCWlmIChyZXQgIT0gMCkgewo+ICsJCQkJaWYgKElTX0VSUih2bWEpKSB7Cj4gIAkJ CQkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICAJCQkJCURSTV9FUlJPUigiRmFpbGVkIHRv IHBpbiBzZW1hcGhvcmUgYm8uIERpc2FibGluZyBzZW1hcGhvcmVzXG4iKTsKPiAgCQkJCQlpOTE1 LnNlbWFwaG9yZXMgPSAwOwo+IC0JCQkJfSBlbHNlCj4gLQkJCQkJZGV2X3ByaXYtPnNlbWFwaG9y ZV9vYmogPSBvYmo7Cj4gKwkJCQkJdm1hID0gTlVMTDsKPiArCQkJCX0KPiArCj4gKwkJCQlkZXZf cHJpdi0+c2VtYXBob3JlX3ZtYSA9IHZtYTsKPiAgCQkJfQo+ICAJCX0KPiAgCj4gQEAgLTI1OTYs NyArMjYxMSw2IEBAIGludCBpbnRlbF9pbml0X3JlbmRlcl9yaW5nX2J1ZmZlcihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+ICAJCWVuZ2luZS0+aXJxX2Rpc2FibGUgPSBnZW44X3JpbmdfZGlzYWJs ZV9pcnE7Cj4gIAkJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBHVF9SRU5ERVJfVVNFUl9JTlRF UlJVUFQ7Cj4gIAkJaWYgKGk5MTUuc2VtYXBob3Jlcykgewo+IC0JCQlXQVJOX09OKCFkZXZfcHJp di0+c2VtYXBob3JlX29iaik7Cj4gIAkJCWVuZ2luZS0+c2VtYXBob3JlLnN5bmNfdG8gPSBnZW44 X3Jpbmdfc3luYzsKPiAgCQkJZW5naW5lLT5zZW1hcGhvcmUuc2lnbmFsID0gZ2VuOF9yY3Nfc2ln bmFsOwo+ICAJCQlHRU44X1JJTkdfU0VNQVBIT1JFX0lOSVQoZW5naW5lKTsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gaW5kZXggZDE5ZmI4YzI0OTE5Li45MzRkNTcy MmRjMjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZl ci5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gQEAg LTI2LDEwICsyNiwxMCBAQAo+ICAgKi8KPiAgI2RlZmluZSBJOTE1X1JJTkdfRlJFRV9TUEFDRSA2 NAo+ICAKPiAtc3RydWN0ICBpbnRlbF9od19zdGF0dXNfcGFnZSB7Cj4gK3N0cnVjdCBpbnRlbF9o d19zdGF0dXNfcGFnZSB7Cj4gIAl1MzIJCSpwYWdlX2FkZHI7Cj4gIAl1bnNpZ25lZCBpbnQJZ2Z4 X2FkZHI7Cj4gLQlzdHJ1Y3QJCWRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVjdAkJ aTkxNV92bWEgKnZtYTsKPiAgfTsKPiAgCj4gICNkZWZpbmUgSTkxNV9SRUFEX1RBSUwocmluZykg STkxNV9SRUFEKFJJTkdfVEFJTCgocmluZyktPm1taW9fYmFzZSkpCj4gQEAgLTU3LDE2ICs1Nywx MyBAQCBzdHJ1Y3QgIGludGVsX2h3X3N0YXR1c19wYWdlIHsKPiAgI2RlZmluZSBHRU44X1NFTUFQ SE9SRV9PRkZTRVQoX19mcm9tLCBfX3RvKQkJCSAgICAgXAo+ICAJKCgoX19mcm9tKSAqIEk5MTVf TlVNX0VOR0lORVMgICsgKF9fdG8pKSAqIGdlbjhfc2VtYXBob3JlX3NlcW5vX3NpemUpCj4gICNk ZWZpbmUgR0VOOF9TSUdOQUxfT0ZGU0VUKF9fcmluZywgdG8pCQkJICAgICBcCj4gLQkoaTkxNV9n ZW1fb2JqX2dndHRfb2Zmc2V0KGRldl9wcml2LT5zZW1hcGhvcmVfb2JqKSArIFwKPiArCShkZXZf cHJpdi0+c2VtYXBob3JlX3ZtYS0+bm9kZS5zdGFydCArIFwKPiAgCSBHRU44X1NFTUFQSE9SRV9P RkZTRVQoKF9fcmluZyktPmlkLCAodG8pKSkKPiAgI2RlZmluZSBHRU44X1dBSVRfT0ZGU0VUKF9f cmluZywgZnJvbSkJCQkgICAgIFwKPiAtCShpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoZGV2X3By aXYtPnNlbWFwaG9yZV9vYmopICsgXAo+ICsJKGRldl9wcml2LT5zZW1hcGhvcmVfdm1hLT5ub2Rl LnN0YXJ0ICsgXAo+ICAJIEdFTjhfU0VNQVBIT1JFX09GRlNFVChmcm9tLCAoX19yaW5nKS0+aWQp KQo+ICAKPiAgI2RlZmluZSBHRU44X1JJTkdfU0VNQVBIT1JFX0lOSVQoZSkgZG8geyBcCj4gLQlp ZiAoIWRldl9wcml2LT5zZW1hcGhvcmVfb2JqKSB7IFwKPiAtCQlicmVhazsgXAo+IC0JfSBcCj4g IAkoZSktPnNlbWFwaG9yZS5zaWduYWxfZ2d0dFtSQ1NdID0gR0VOOF9TSUdOQUxfT0ZGU0VUKChl KSwgUkNTKTsgXAo+ICAJKGUpLT5zZW1hcGhvcmUuc2lnbmFsX2dndHRbVkNTXSA9IEdFTjhfU0lH TkFMX09GRlNFVCgoZSksIFZDUyk7IFwKPiAgCShlKS0+c2VtYXBob3JlLnNpZ25hbF9nZ3R0W0JD U10gPSBHRU44X1NJR05BTF9PRkZTRVQoKGUpLCBCQ1MpOyBcCj4gQEAgLTk3LDggKzk0LDggQEAg c3RydWN0IGludGVsX2VuZ2luZV9oYW5nY2hlY2sgewo+ICAKPiAgc3RydWN0IGludGVsX3Jpbmcg ewo+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAtCXZvaWQgKnZhZGRyOwo+ ICAJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwl2b2lkICp2YWRkcjsKPiAgCj4gIAlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Cj4gQEAg LTEzOSw3ICsxMzYsNyBAQCBzdHJ1Y3QgIGk5MTVfY3R4X3dvcmthcm91bmRzIHsKPiAgCQl1MzIg b2Zmc2V0Owo+ICAJCXUzMiBzaXplOwo+ICAJfSBpbmRpcmVjdF9jdHgsIHBlcl9jdHg7Cj4gLQlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7 Cj4gIH07Cj4gIAo+ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Q7Cj4gQEAgLTMyNSwxMCAr MzIyLDcgQEAgc3RydWN0IGludGVsX2VuZ2luZV9jcyB7Cj4gIAo+ICAJc3RydWN0IGludGVsX2Vu Z2luZV9oYW5nY2hlY2sgaGFuZ2NoZWNrOwo+ICAKPiAtCXN0cnVjdCB7Cj4gLQkJc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAtCQl1MzIgZ3R0X29mZnNldDsKPiAtCX0gc2NyYXRj aDsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqc2NyYXRjaDsKPiAgCj4gIAlib29sIG5lZWRzX2NtZF9w YXJzZXI7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJp dGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gaW5kZXggMzI0Y2Ni MDYzOTdkLi45OWJkYmI5ZTQwMzcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfc3ByaXRlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUu Ywo+IEBAIC00NjIsOCArNDYyLDggQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5l ICpkcGxhbmUsCj4gIAo+ICAJSTkxNV9XUklURShTUFNJWkUocGlwZSwgcGxhbmUpLCAoY3J0Y19o IDw8IDE2KSB8IGNydGNfdyk7Cj4gIAlJOTE1X1dSSVRFKFNQQ05UUihwaXBlLCBwbGFuZSksIHNw cmN0bCk7Cj4gLQlJOTE1X1dSSVRFKFNQU1VSRihwaXBlLCBwbGFuZSksIGk5MTVfZ2VtX29ial9n Z3R0X29mZnNldChvYmopICsKPiAtCQkgICBzcHJzdXJmX29mZnNldCk7Cj4gKwlJOTE1X1dSSVRF KFNQU1VSRihwaXBlLCBwbGFuZSksCj4gKwkJICAgaTkxNV9nZW1fb2JqZWN0X2dndHRfb2Zmc2V0 KG9iaiwgTlVMTCkgKyBzcHJzdXJmX29mZnNldCk7Cj4gIAlQT1NUSU5HX1JFQUQoU1BTVVJGKHBp cGUsIHBsYW5lKSk7Cj4gIH0KPiAgCj4gQEAgLTYwMiw3ICs2MDIsNyBAQCBpdmJfdXBkYXRlX3Bs YW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJCUk5MTVfV1JJVEUoU1BSU0NBTEUocGlw ZSksIHNwcnNjYWxlKTsKPiAgCUk5MTVfV1JJVEUoU1BSQ1RMKHBpcGUpLCBzcHJjdGwpOwo+ICAJ STkxNV9XUklURShTUFJTVVJGKHBpcGUpLAo+IC0JCSAgIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNl dChvYmopICsgc3Byc3VyZl9vZmZzZXQpOwo+ICsJCSAgIGk5MTVfZ2VtX29iamVjdF9nZ3R0X29m ZnNldChvYmosIE5VTEwpICsgc3Byc3VyZl9vZmZzZXQpOwo+ICAJUE9TVElOR19SRUFEKFNQUlNV UkYocGlwZSkpOwo+ICB9Cj4gIAo+IEBAIC03MzEsNyArNzMxLDcgQEAgaWxrX3VwZGF0ZV9wbGFu ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCUk5MTVfV1JJVEUoRFZTU0NBTEUocGlwZSks IGR2c3NjYWxlKTsKPiAgCUk5MTVfV1JJVEUoRFZTQ05UUihwaXBlKSwgZHZzY250cik7Cj4gIAlJ OTE1X1dSSVRFKERWU1NVUkYocGlwZSksCj4gLQkJICAgaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0 KG9iaikgKyBkdnNzdXJmX29mZnNldCk7Cj4gKwkJICAgaTkxNV9nZW1fb2JqZWN0X2dndHRfb2Zm c2V0KG9iaiwgTlVMTCkgKyBkdnNzdXJmX29mZnNldCk7Cj4gIAlQT1NUSU5HX1JFQUQoRFZTU1VS RihwaXBlKSk7Cj4gIH0KPiAgCj4gLS0gCj4gMi44LjEKPiAKPiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3 YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK