From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 13/21] drm/i915: Pull i915_vma_pin under the vm->mutex Date: Mon, 16 Sep 2019 11:13:23 +0100 Message-ID: <5ced7c80-b410-1f86-68da-c19b8e1798ec@linux.intel.com> References: <20190902040303.14195-1-chris@chris-wilson.co.uk> <20190902040303.14195-13-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id BFC946E8E3 for ; Mon, 16 Sep 2019 10:13:27 +0000 (UTC) In-Reply-To: <20190902040303.14195-13-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDAyLzA5LzIwMTkgMDU6MDIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBSZXBsYWNlIHRoZSBz dHJ1Y3RfbXV0ZXggcmVxdWlyZW1lbnQgZm9yIHBpbm5pbmcgdGhlIGk5MTVfdm1hIHdpdGggdGhl Cj4gbG9jYWwgdm0tPm11dGV4IGluc3RlYWQuIE5vdGUgdGhhdCB0aGUgdm0tPm11dGV4IGlzIHRh aW50ZWQgYnkgdGhlCj4gc2hyaW5rZXIgKHdlIHJlcXVpcmUgdW5iaW5kaW5nIGZyb20gaW5zaWRl IGZzLXJlY2xhaW0pIGFuZCBzbyB3ZSBjYW5ub3QKPiBhbGxvY2F0ZSB3aGlsZSBob2xkaW5nIHRo YXQgbXV0ZXguIEluc3RlYWQgd2UgaGF2ZSB0byBwcmVhbGxvY2F0ZQo+IHdvcmtlcnMgdG8gZG8g YWxsb2NhdGUgYW5kIGFwcGx5IHRoZSBQVEUgdXBkYXRlcyBhZnRlciB3ZSBoYXZlIHdlCj4gcmVz ZXJ2ZWQgdGhlaXIgc2xvdCBpbiB0aGUgZHJtX21tICh1c2luZyBmZW5jZXMgdG8gb3JkZXIgdGhl IFBURSB3cml0ZXMKPiB3aXRoIHRoZSBHUFUgd29yayBhbmQgd2l0aCBsYXRlciB1bmJpbmQpLgoK Q2FuIHlvdSBwdXQgc29tZSBwYXJhZ3JhcGhzIGludG8gdGhlIGNvbW1pdCBkZXNjcmliaW5nIHRo ZSAKaW5mcmFzdHJ1Y3R1cmUgY2hhbmdlcz8gTGlrZSBjaGFuZ2VzIHRvIGFjdGl2ZSB0cmFja2Vy IGF0IGxlYXN0LgoKVGhlbiBjb21tZW50YXJ5IG9uIGVmZmVjdHMgb24gc2hyaW5rZXIsIGZlbmNl cywgb2JqZWN0IG1hbmFnZW1lbnQsIApleGVjYnVmLCBiYXNpY2FsbHkgYWxsIG1ham9yIHBhcnRz IG9mIHRoZSBjb2RlIHdoaWNoIGhhdmUgbm93IGJlZW4gCmZ1bmRhbWVudGFsbHkgaW1wcm92ZWQg b3IgY2hhbmdlZC4gSXQgd291bGQgaGVscCB3aXRoIHJldmlldy4gSXQncyBhIApjaHVua3kgcGF0 Y2gvY2hhbmdlIGFuZCBJIHRoaW5rIGl0IG5lZWRzIHNvbWUgdGhlb3J5IG9mIG9wZXJhdGlvbiB0 ZXh0LgoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNv bi5jby51az4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheS5jICB8ICAyOSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9m YmRldi5jICAgIHwgICA4ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X292ZXJsYXkuYyAgfCAgMTEgKy0KPiAgIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2Ns aWVudF9ibHQuYyAgICB8ICAxMyArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX2NvbnRleHQuYyAgIHwgIDIwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fZG9tYWluLmMgICAgfCAgMTkgKy0KPiAgIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX2V4ZWNidWZmZXIuYyAgICB8ICA0OCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX21tYW4uYyAgICAgIHwgIDI0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fb2JqZWN0LmMgICAgfCAgMzMgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9vYmplY3QuaCAgICB8ICAgNSArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYyAgfCAgNzEgKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fc3RvbGVuLmMgICAgfCAgIDggKy0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV90aWxpbmcuYyAgICB8ICAxNSArLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYyAgIHwgIDI3ICstCj4gICAuLi4vZ3B1L2Ry bS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jICAgfCAgMjMgKy0KPiAgIC4uLi9kcm0v aTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYyB8ICAxMiArLQo+ICAgLi4uL2Ry bS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbW1hbi5jICAgIHwgICAyIC0KPiAgIC4uLi9k cm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuYyAgICB8ICAgNyArLQo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3QuYyAgICAgICAgICAgIHwgICA1ICstCj4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMgICAgfCAgIDQgKy0KPiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2hhbmdjaGVjay5jICB8ICAxOSArLQo+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2FwZXJ0dXJlX2dtLmMgICAgICAgIHwgIDEyICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZS5jICAgICAgICAgICAgfCAgOTQg KysrLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuaCAgICAgICAgICAgIHwg ICA3ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlX3R5cGVzLmggICAgICB8 ICAgNSArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICAg fCAgOTQgKystLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3QuYyAgICAg ICAgIHwgIDIwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9mZW5jZV9yZWcu YyAgICAgfCAgIDUgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jICAg ICAgICAgICB8IDEwNCArKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu aCAgICAgICAgICAgfCAgMzggKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5j ICAgICAgICAgICAgICB8ICAzMiArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEu YyAgICAgICAgICAgICAgIHwgNDc2ICsrKysrKysrKysrKy0tLS0tLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV92bWEuaCAgICAgICAgICAgICAgIHwgIDc1ICsrLQo+ICAgLi4uL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fZXZpY3QuYyAgIHwgIDM2ICstCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fZ3R0LmMgfCAgOTEgKystLQo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfdm1hLmMgICAgIHwgICA4ICstCj4gICAz NiBmaWxlcyBjaGFuZ2VkLCA4MTggaW5zZXJ0aW9ucygrKSwgNjgyIGRlbGV0aW9ucygtKQo+IAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gaW5kZXgg NWUzYjIyZTNmNjFkLi44MWMwZDdhMzVjNGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+IEBAIC0yMDc5LDcgKzIwNzksNiBAQCBpbnRlbF9w aW5fYW5kX2ZlbmNlX2ZiX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAgIAl1bnNp Z25lZCBpbnQgcGluY3RsOwo+ICAgCXUzMiBhbGlnbm1lbnQ7Cj4gICAKPiAtCVdBUk5fT04oIW11 dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiAgIAlpZiAoV0FSTl9PTighaTkx NV9nZW1fb2JqZWN0X2lzX2ZyYW1lYnVmZmVyKG9iaikpKQo+ICAgCQlyZXR1cm4gRVJSX1BUUigt RUlOVkFMKTsKPiAgIAo+IEBAIC0yMTYzLDggKzIxNjIsNiBAQCBpbnRlbF9waW5fYW5kX2ZlbmNl X2ZiX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAgIAo+ICAgdm9pZCBpbnRlbF91 bnBpbl9mYl92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4g ICB7Cj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bWEtPnZtLT5pOTE1LT5kcm0uc3RydWN0X211 dGV4KTsKPiAtCj4gICAJaTkxNV9nZW1fb2JqZWN0X2xvY2sodm1hLT5vYmopOwo+ICAgCWlmIChm bGFncyAmIFBMQU5FX0hBU19GRU5DRSkKPiAgIAkJaTkxNV92bWFfdW5waW5fZmVuY2Uodm1hKTsK PiBAQCAtMzA2NSwxMiArMzA2MiwxMCBAQCBpbnRlbF9hbGxvY19pbml0aWFsX3BsYW5lX29iaihz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAgIAkJcmV0dXJuIGZhbHNlOwo+ICAgCX0KPiAgIAo+ IC0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCW9iaiA9IGk5MTVfZ2VtX29i amVjdF9jcmVhdGVfc3RvbGVuX2Zvcl9wcmVhbGxvY2F0ZWQoZGV2X3ByaXYsCj4gICAJCQkJCQkJ ICAgICBiYXNlX2FsaWduZWQsCj4gICAJCQkJCQkJICAgICBiYXNlX2FsaWduZWQsCj4gICAJCQkJ CQkJICAgICBzaXplX2FsaWduZWQpOwo+IC0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRl eCk7Cj4gICAJaWYgKCFvYmopCj4gICAJCXJldHVybiBmYWxzZTsKPiAgIAo+IEBAIC0zMjMyLDEz ICszMjI3LDExIEBAIGludGVsX2ZpbmRfaW5pdGlhbF9wbGFuZV9vYmooc3RydWN0IGludGVsX2Ny dGMgKmludGVsX2NydGMsCj4gICAJaW50ZWxfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSA9 Cj4gICAJCWludGVsX2ZiX3BpdGNoKGZiLCAwLCBpbnRlbF9zdGF0ZS0+YmFzZS5yb3RhdGlvbik7 Cj4gICAKPiAtCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgIAlpbnRlbF9zdGF0 ZS0+dm1hID0KPiAgIAkJaW50ZWxfcGluX2FuZF9mZW5jZV9mYl9vYmooZmIsCj4gICAJCQkJCSAg ICZpbnRlbF9zdGF0ZS0+dmlldywKPiAgIAkJCQkJICAgaW50ZWxfcGxhbmVfdXNlc19mZW5jZShp bnRlbF9zdGF0ZSksCj4gICAJCQkJCSAgICZpbnRlbF9zdGF0ZS0+ZmxhZ3MpOwo+IC0JbXV0ZXhf dW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gICAJaWYgKElTX0VSUihpbnRlbF9zdGF0ZS0+ dm1hKSkgewo+ICAgCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gYm9vdCBmYiBvbiBwaXBlICVk OiAlbGlcbiIsCj4gICAJCQkgIGludGVsX2NydGMtPnBpcGUsIFBUUl9FUlIoaW50ZWxfc3RhdGUt PnZtYSkpOwo+IEBAIC0xNDM2NCw4ICsxNDM1Nyw2IEBAIHN0YXRpYyB2b2lkIGZiX29ial9idW1w X3JlbmRlcl9wcmlvcml0eShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgICog Yml0cy4gIFNvbWUgb2xkZXIgcGxhdGZvcm1zIG5lZWQgc3BlY2lhbCBwaHlzaWNhbCBhZGRyZXNz IGhhbmRsaW5nIGZvcgo+ICAgICogY3Vyc29yIHBsYW5lcy4KPiAgICAqCj4gLSAqIE11c3QgYmUg Y2FsbGVkIHdpdGggc3RydWN0X211dGV4IGhlbGQuCj4gLSAqCj4gICAgKiBSZXR1cm5zIDAgb24g c3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ICAgICovCj4gICBpbnQK PiBAQCAtMTQ0MjIsMTUgKzE0NDEzLDggQEAgaW50ZWxfcHJlcGFyZV9wbGFuZV9mYihzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4g LQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9wcml2LT5kcm0uc3RydWN0X211 dGV4KTsKPiAtCWlmIChyZXQpIHsKPiAtCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2Jq KTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAgIAlyZXQgPSBpbnRlbF9wbGFuZV9waW5f ZmIodG9faW50ZWxfcGxhbmVfc3RhdGUobmV3X3N0YXRlKSk7Cj4gICAKPiAtCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWk5MTVfZ2VtX29iamVjdF91bnBp bl9wYWdlcyhvYmopOwo+ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7Cj4gQEAgLTE0NDc5 LDggKzE0NDYzLDYgQEAgaW50ZWxfcHJlcGFyZV9wbGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKPiAgICAqIEBvbGRfc3RhdGU6IHRoZSBzdGF0ZSBmcm9tIHRoZSBwcmV2aW91cyBtb2Rl c2V0Cj4gICAgKgo+ICAgICogQ2xlYW5zIHVwIGEgZnJhbWVidWZmZXIgdGhhdCBoYXMganVzdCBi ZWVuIHJlbW92ZWQgZnJvbSBhIHBsYW5lLgo+IC0gKgo+IC0gKiBNdXN0IGJlIGNhbGxlZCB3aXRo IHN0cnVjdF9tdXRleCBoZWxkLgo+ICAgICovCj4gICB2b2lkCj4gICBpbnRlbF9jbGVhbnVwX3Bs YW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IEBAIC0xNDQ5Niw5ICsxNDQ3OCw3IEBA IGludGVsX2NsZWFudXBfcGxhbmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJfQo+ ICAgCj4gICAJLyogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBpbnRl bF9wcmVwYXJlX3BsYW5lX2ZiKCkhICovCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0 cnVjdF9tdXRleCk7Cj4gICAJaW50ZWxfcGxhbmVfdW5waW5fZmIodG9faW50ZWxfcGxhbmVfc3Rh dGUob2xkX3N0YXRlKSk7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211 dGV4KTsKPiAgIH0KPiAgIAo+ICAgaW50Cj4gQEAgLTE0Njk4LDcgKzE0Njc4LDYgQEAgaW50ZWxf bGVnYWN5X2N1cnNvcl91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJCQkgICB1 MzIgc3JjX3csIHUzMiBzcmNfaCwKPiAgIAkJCSAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJl X2N0eCAqY3R4KQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShjcnRjLT5kZXYpOwo+ICAgCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9wbGFu ZV9zdGF0ZSwgKm5ld19wbGFuZV9zdGF0ZTsKPiAgIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVs X3BsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmUpOwo+ICAgCXN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlID0KPiBAQCAtMTQ3NjQsMTMgKzE0NzQzLDkgQEAgaW50ZWxfbGVnYWN5 X2N1cnNvcl91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJaWYgKHJldCkKPiAg IAkJZ290byBvdXRfZnJlZTsKPiAgIAo+IC0JcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxl KCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gb3V0 X2ZyZWU7Cj4gLQo+ICAgCXJldCA9IGludGVsX3BsYW5lX3Bpbl9mYih0b19pbnRlbF9wbGFuZV9z dGF0ZShuZXdfcGxhbmVfc3RhdGUpKTsKPiAgIAlpZiAocmV0KQo+IC0JCWdvdG8gb3V0X3VubG9j azsKPiArCQlnb3RvIG91dF9mcmVlOwo+ICAgCj4gICAJaW50ZWxfZnJvbnRidWZmZXJfZmx1c2go dG9faW50ZWxfZnJvbnRidWZmZXIoZmIpLCBPUklHSU5fRkxJUCk7Cj4gICAJaW50ZWxfZnJvbnRi dWZmZXJfdHJhY2sodG9faW50ZWxfZnJvbnRidWZmZXIob2xkX3BsYW5lX3N0YXRlLT5mYiksCj4g QEAgLTE0ODAwLDggKzE0Nzc1LDYgQEAgaW50ZWxfbGVnYWN5X2N1cnNvcl91cGRhdGUoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4gICAKPiAgIAlpbnRlbF9wbGFuZV91bnBpbl9mYih0b19pbnRl bF9wbGFuZV9zdGF0ZShvbGRfcGxhbmVfc3RhdGUpKTsKPiAgIAo+IC1vdXRfdW5sb2NrOgo+IC0J bXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICBvdXRfZnJlZToK PiAgIAlpZiAobmV3X2NydGNfc3RhdGUpCj4gICAJCWludGVsX2NydGNfZGVzdHJveV9zdGF0ZShj cnRjLCAmbmV3X2NydGNfc3RhdGUtPmJhc2UpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZiZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2ZiZGV2LmMKPiBpbmRleCBkNTllZWU1YzVkOWMuLmEzZGVhM2YyZGFjZCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZiZGV2LmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZiZGV2LmMKPiBAQCAtMjA0 LDcgKzIwNCw2IEBAIHN0YXRpYyBpbnQgaW50ZWxmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxw ZXIgKmhlbHBlciwKPiAgIAkJc2l6ZXMtPmZiX2hlaWdodCA9IGludGVsX2ZiLT5iYXNlLmhlaWdo dDsKPiAgIAl9Cj4gICAKPiAtCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgIAl3 YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJmRldl9wcml2LT5ydW50aW1lX3BtKTsKPiAg IAo+ICAgCS8qIFBpbiB0aGUgR0dUVCB2bWEgZm9yIG91ciBhY2Nlc3MgdmlhIGluZm8tPnNjcmVl bl9iYXNlLgo+IEBAIC0yNjYsNyArMjY1LDYgQEAgc3RhdGljIGludCBpbnRlbGZiX2NyZWF0ZShz dHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAo+ICAgCWlmYmRldi0+dm1hX2ZsYWdzID0gZmxh Z3M7Cj4gICAKPiAgIAlpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0s IHdha2VyZWYpOwo+IC0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gICAJdmdh X3N3aXRjaGVyb29fY2xpZW50X2ZiX3NldChwZGV2LCBpbmZvKTsKPiAgIAlyZXR1cm4gMDsKPiAg IAo+IEBAIC0yNzQsNyArMjcyLDYgQEAgc3RhdGljIGludCBpbnRlbGZiX2NyZWF0ZShzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqaGVscGVyLAo+ICAgCWludGVsX3VucGluX2ZiX3ZtYSh2bWEsIGZsYWdz KTsKPiAgIG91dF91bmxvY2s6Cj4gICAJaW50ZWxfcnVudGltZV9wbV9wdXQoJmRldl9wcml2LT5y dW50aW1lX3BtLCB3YWtlcmVmKTsKPiAtCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp Owo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiBAQCAtMjkxLDExICsyODgsOCBAQCBzdGF0 aWMgdm9pZCBpbnRlbF9mYmRldl9kZXN0cm95KHN0cnVjdCBpbnRlbF9mYmRldiAqaWZiZGV2KQo+ ICAgCj4gICAJZHJtX2ZiX2hlbHBlcl9maW5pKCZpZmJkZXYtPmhlbHBlcik7Cj4gICAKPiAtCWlm IChpZmJkZXYtPnZtYSkgewo+IC0JCW11dGV4X2xvY2soJmlmYmRldi0+aGVscGVyLmRldi0+c3Ry dWN0X211dGV4KTsKPiArCWlmIChpZmJkZXYtPnZtYSkKPiAgIAkJaW50ZWxfdW5waW5fZmJfdm1h KGlmYmRldi0+dm1hLCBpZmJkZXYtPnZtYV9mbGFncyk7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZpZmJk ZXYtPmhlbHBlci5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQl9Cj4gICAKPiAgIAlpZiAoaWZiZGV2 LT5mYikKPiAgIAkJZHJtX2ZyYW1lYnVmZmVyX3JlbW92ZSgmaWZiZGV2LT5mYi0+YmFzZSk7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfb3ZlcmxheS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9vdmVybGF5LmMKPiBpbmRleCAy OWVkZmMzNDM3MTYuLjRmMzY1NTdiM2YzYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX292ZXJsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfb3ZlcmxheS5jCj4gQEAgLTEzMDMsMTUgKzEzMDMsMTEgQEAgc3RhdGlj IGludCBnZXRfcmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5LCBib29sIHVz ZV9waHlzKQo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAgCWludCBlcnI7Cj4gICAKPiAt CW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAlvYmogPSBpOTE1 X2dlbV9vYmplY3RfY3JlYXRlX3N0b2xlbihpOTE1LCBQQUdFX1NJWkUpOwo+ICAgCWlmIChvYmog PT0gTlVMTCkKPiAgIAkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRlcm5hbChpOTE1 LCBQQUdFX1NJWkUpOwo+IC0JaWYgKElTX0VSUihvYmopKSB7Cj4gLQkJZXJyID0gUFRSX0VSUihv YmopOwo+IC0JCWdvdG8gZXJyX3VubG9jazsKPiAtCX0KPiArCWlmIChJU19FUlIob2JqKSkKPiAr CQlyZXR1cm4gUFRSX0VSUihvYmopOwo+ICAgCj4gICAJdm1hID0gaTkxNV9nZW1fb2JqZWN0X2dn dHRfcGluKG9iaiwgTlVMTCwgMCwgMCwgUElOX01BUFBBQkxFKTsKPiAgIAlpZiAoSVNfRVJSKHZt YSkpIHsKPiBAQCAtMTMzMiwxMyArMTMyOCwxMCBAQCBzdGF0aWMgaW50IGdldF9yZWdpc3RlcnMo c3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXksIGJvb2wgdXNlX3BoeXMpCj4gICAJfQo+ICAg Cj4gICAJb3ZlcmxheS0+cmVnX2JvID0gb2JqOwo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiAgIAlyZXR1cm4gMDsKPiAgIAo+ICAgZXJyX3B1dF9ibzoKPiAgIAlp OTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gLWVycl91bmxvY2s6Cj4gLQltdXRleF91bmxvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCXJldHVybiBlcnI7Cj4gICB9Cj4gICAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0LmMKPiBpbmRl eCBmOTk5MjA2NTI3NTEuLjllNzJiNDJhODZmNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50X2JsdC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQuYwo+IEBAIC0xNTIsNiArMTUyLDE3IEBAIHN0 YXRpYyB2b2lkIGNsZWFyX3BhZ2VzX2RtYV9mZW5jZV9jYihzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5j ZSwKPiAgIAlpcnFfd29ya19xdWV1ZSgmdy0+aXJxX3dvcmspOwo+ICAgfQo+ICAgCj4gK3N0YXRp YyBpbnQgbW92ZV90b19hY3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsIHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxKQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWVyciA9IGk5MTVfcmVxdWVzdF9h d2FpdF9hY3RpdmUocnEsICZ2bWEtPmFjdGl2ZSk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBl cnI7Cj4gKwo+ICsJcmV0dXJuIGk5MTVfYWN0aXZlX3JlZigmdm1hLT5hY3RpdmUsIHJxLT50aW1l bGluZSwgcnEpOwo+ICt9Cj4gKwo+ICAgc3RhdGljIHZvaWQgY2xlYXJfcGFnZXNfd29ya2VyKHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgIHsKPiAgIAlzdHJ1Y3QgY2xlYXJfcGFnZXNfd29y ayAqdyA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKncpLCB3b3JrKTsKPiBAQCAtMjExLDcg KzIyMiw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX3BhZ2VzX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspCj4gICAJICoga2VlcCB0cmFjayBvZiB0aGUgR1BVIGFjdGl2aXR5IHdpdGhpbiB0 aGlzIHZtYS9yZXF1ZXN0LCBhbmQKPiAgIAkgKiBwcm9wYWdhdGUgdGhlIHNpZ25hbCBmcm9tIHRo ZSByZXF1ZXN0IHRvIHctPmRtYS4KPiAgIAkgKi8KPiAtCWVyciA9IGk5MTVfYWN0aXZlX3JlZigm dm1hLT5hY3RpdmUsIHJxLT50aW1lbGluZSwgcnEpOwo+ICsJZXJyID0gbW92ZV90b19hY3RpdmUo dm1hLCBycSk7CgpXaGF0IGlzIGhhcHBlbmluZyBoZXJlPyBJdCB3YXNuJ3Qgc3VmZmljaWVudGx5 IG9yZGVyZWQgYmVmb3JlIG9yIApzb21ldGhpbmcgY2hhbmdlcyB3aXRoIHRoaXMgcGF0Y2g/Cgo+ ICAgCWlmIChlcnIpCj4gICAJCWdvdG8gb3V0X3JlcXVlc3Q7Cj4gICAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMKPiBpbmRleCBmMWMwZTVkOTU4ZjMuLjY1 M2Y3Mjc1MzA2YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fY29udGV4dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2Nv bnRleHQuYwo+IEBAIC0zMTMsOCArMzEzLDYgQEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fY29udGV4 dF9mcmVlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gICAJR0VNX0JVR19PTighaTkx NV9nZW1fY29udGV4dF9pc19jbG9zZWQoY3R4KSk7Cj4gICAKPiAgIAlyZWxlYXNlX2h3X2lkKGN0 eCk7Cj4gLQlpZiAoY3R4LT52bSkKPiAtCQlpOTE1X3ZtX3B1dChjdHgtPnZtKTsKCkNvbnRleHRz IG5vIGxvbmdlciBob2xkIGEgcmVmZXJlbmNlIHRvIHZtPyBPbmx5IHZtYXM/Cgo+ICAgCj4gICAJ ZnJlZV9lbmdpbmVzKHJjdV9hY2Nlc3NfcG9pbnRlcihjdHgtPmVuZ2luZXMpKTsKPiAgIAltdXRl eF9kZXN0cm95KCZjdHgtPmVuZ2luZXNfbXV0ZXgpOwo+IEBAIC0zNzksOSArMzc3LDEzIEBAIHZv aWQgaTkxNV9nZW1fY29udGV4dF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCj4gICAKPiAgIHN0 YXRpYyB2b2lkIGNvbnRleHRfY2xvc2Uoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiAg IHsKPiArCWk5MTVfZ2VtX2NvbnRleHRfc2V0X2Nsb3NlZChjdHgpOwo+ICsKPiArCWlmIChjdHgt PnZtKQo+ICsJCWk5MTVfdm1fY2xvc2UoY3R4LT52bSk7CgpCdXQgbm93IGNsb3NlZCBjb250ZXh0 IG1lYW4gY2xvc2VkIHZtLCBidXQgd2hhdCBhYm91dCBzaGFyZWQgdm1zPyBJcyAKb3Blbi9jbG9z ZV92bSBub3cgY291bnRlZD8KCj4gKwo+ICAgCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOwo+ICAg Cj4gLQlpOTE1X2dlbV9jb250ZXh0X3NldF9jbG9zZWQoY3R4KTsKPiAgIAljdHgtPmZpbGVfcHJp diA9IEVSUl9QVFIoLUVCQURGKTsKPiAgIAo+ICAgCS8qCj4gQEAgLTQ3NCw3ICs0NzYsNyBAQCBf X3NldF9wcGd0dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCBzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSkKPiAgIAo+ICAgCUdFTV9CVUdfT04ob2xkICYmIGk5MTVfdm1faXNfNGx2 bCh2bSkgIT0gaTkxNV92bV9pc180bHZsKG9sZCkpOwo+ICAgCj4gLQljdHgtPnZtID0gaTkxNV92 bV9nZXQodm0pOwo+ICsJY3R4LT52bSA9IGk5MTVfdm1fb3Blbih2bSk7Cj4gICAJY29udGV4dF9h cHBseV9hbGwoY3R4LCBfX2FwcGx5X3BwZ3R0LCB2bSk7Cj4gICAKPiAgIAlyZXR1cm4gb2xkOwo+ IEBAIC00ODgsNyArNDkwLDcgQEAgc3RhdGljIHZvaWQgX19hc3NpZ25fcHBndHQoc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgIAo+ICAgCXZtID0gX19zZXRfcHBndHQoY3R4LCB2bSk7 Cj4gICAJaWYgKHZtKQo+IC0JCWk5MTVfdm1fcHV0KHZtKTsKPiArCQlpOTE1X3ZtX2Nsb3NlKHZt KTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgX19zZXRfdGltZWxpbmUoc3RydWN0IGludGVs X3RpbWVsaW5lICoqZHN0LAo+IEBAIC05NTMsNyArOTU1LDcgQEAgc3RhdGljIGludCBnZXRfcHBn dHQoc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2LAo+ICAgCWlmIChyZXQg PCAwKQo+ICAgCQlnb3RvIGVycl91bmxvY2s7Cj4gICAKPiAtCWk5MTVfdm1fZ2V0KHZtKTsKPiAr CWk5MTVfdm1fb3Blbih2bSk7Cj4gICAKPiAgIAlhcmdzLT5zaXplID0gMDsKPiAgIAlhcmdzLT52 YWx1ZSA9IHJldDsKPiBAQCAtOTczLDcgKzk3NSw3IEBAIHN0YXRpYyB2b2lkIHNldF9wcGd0dF9i YXJyaWVyKHZvaWQgKmRhdGEpCj4gICAJaWYgKElOVEVMX0dFTihvbGQtPmk5MTUpIDwgOCkKPiAg IAkJZ2VuNl9wcGd0dF91bnBpbl9hbGwoaTkxNV92bV90b19wcGd0dChvbGQpKTsKPiAgIAo+IC0J aTkxNV92bV9wdXQob2xkKTsKPiArCWk5MTVfdm1fY2xvc2Uob2xkKTsKPiAgIH0KPiAgIAo+ICAg c3RhdGljIGludCBlbWl0X3BwZ3R0X3VwZGF0ZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdm9p ZCAqZGF0YSkKPiBAQCAtMTA5MCw4ICsxMDkyLDggQEAgc3RhdGljIGludCBzZXRfcHBndHQoc3Ry dWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2LAo+ICAgCQkJCSAgIHNldF9wcGd0 dF9iYXJyaWVyLAo+ICAgCQkJCSAgIG9sZCk7Cj4gICAJaWYgKGVycikgewo+IC0JCWk5MTVfdm1f cHV0KF9fc2V0X3BwZ3R0KGN0eCwgb2xkKSk7Cj4gLQkJaTkxNV92bV9wdXQob2xkKTsKPiArCQlp OTE1X3ZtX2Nsb3NlKF9fc2V0X3BwZ3R0KGN0eCwgb2xkKSk7Cj4gKwkJaTkxNV92bV9jbG9zZShv bGQpOwo+ICAgCX0KPiAgIAo+ICAgdW5sb2NrOgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fZG9tYWluLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fZG9tYWluLmMKPiBpbmRleCBmMGM0MzdiNmU5OTUuLjQ2YTIzNDA5ZTFjMCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG9tYWluLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG9tYWluLmMKPiBAQCAtMjAy LDcgKzIwMiwxMSBAQCBpbnQgaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9sZXZlbChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkgICAgaTkxNV9nZW1fdmFsaWRfZ3R0X3Nw YWNlKHZtYSwgY2FjaGVfbGV2ZWwpKQo+ICAgCQkJY29udGludWU7Cj4gICAKPiAtCQlyZXQgPSBp OTE1X3ZtYV91bmJpbmQodm1hKTsKPiArCQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUo JnZtYS0+dm0tPm11dGV4KTsKPiArCQlpZiAoIXJldCkgewo+ICsJCQlyZXQgPSBpOTE1X3ZtYV91 bmJpbmQodm1hKTsKPiArCQkJbXV0ZXhfdW5sb2NrKCZ2bWEtPnZtLT5tdXRleCk7Cj4gKwkJfQo+ ICAgCQlpZiAocmV0KQo+ICAgCQkJcmV0dXJuIHJldDsKPiAgIAo+IEBAIC0yODgsNyArMjkyLDEy IEBAIGludCBpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2xldmVsKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCj4gICAJCQlpZiAoIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5u b2RlKSkKPiAgIAkJCQljb250aW51ZTsKPiAgIAo+IC0JCQlyZXQgPSBpOTE1X3ZtYV9iaW5kKHZt YSwgY2FjaGVfbGV2ZWwsIFBJTl9VUERBVEUpOwo+ICsJCQkvKiBXYWl0IGZvciBhbiBlYXJsaWVy IGFzeW5jIGJpbmQgKi8KPiArCQkJcmV0ID0gaTkxNV9hY3RpdmVfd2FpdCgmdm1hLT5hY3RpdmUp Owo+ICsJCQlpZiAocmV0KQo+ICsJCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJCXJldCA9IGk5MTVf dm1hX2JpbmQodm1hLCBjYWNoZV9sZXZlbCwgUElOX1VQREFURSwgTlVMTCk7CgpXYWl0aW5nIHNo b3VsZCBub3QgYmUgaW1wbGllZCBpbiB0aGUgYmluZD8gSSBhbSBhc3N1bWluZyBhdCBsZWFzdCB0 aGVyZSAKd2lsbCBiZSBtYW55IGNhbGxlcnMgdG8gYmluZCBhbmQgbGlrZSB0aGlzIGFsbCBvZiB0 aGVtIHdpbGwgaGF2ZSB0byBrbm93IAp0byBkbyBpOTE1X2FjdGl2ZV93YWl0IGZpcnN0PwoKPiAg IAkJCWlmIChyZXQpCj4gICAJCQkJcmV0dXJuIHJldDsKPiAgIAkJfQo+IEBAIC0zODksMTYgKzM5 OCwxMSBAQCBpbnQgaTkxNV9nZW1fc2V0X2NhY2hpbmdfaW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0J cmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsK PiAtCWlmIChyZXQpCj4gLQkJZ290byBvdXQ7Cj4gLQo+ICAgCXJldCA9IGk5MTVfZ2VtX29iamVj dF9sb2NrX2ludGVycnVwdGlibGUob2JqKTsKPiAgIAlpZiAocmV0ID09IDApIHsKPiAgIAkJcmV0 ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9sZXZlbChvYmosIGxldmVsKTsKPiAgIAkJaTkx NV9nZW1fb2JqZWN0X3VubG9jayhvYmopOwo+ICAgCX0KPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAKPiAgIG91dDoKPiAgIAlpOTE1X2dlbV9vYmplY3RfcHV0 KG9iaik7Cj4gQEAgLTQ4Myw2ICs0ODcsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3Rf YnVtcF9pbmFjdGl2ZV9nZ3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJ CWlmICghZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUpKQo+ICAgCQkJY29udGludWU7 Cj4gICAKPiArCQlHRU1fQlVHX09OKHZtYS0+dm0gIT0gJmk5MTUtPmdndHQudm0pOwo+ICAgCQls aXN0X21vdmVfdGFpbCgmdm1hLT52bV9saW5rLCAmdm1hLT52bS0+Ym91bmRfbGlzdCk7Cj4gICAJ fQo+ICAgCW11dGV4X3VubG9jaygmaTkxNS0+Z2d0dC52bS5tdXRleCk7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gaW5kZXggYzA0OTE5OWEx ZGY1Li5jM2RkOGNlN2UyYjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9leGVjYnVmZmVyLmMKPiBAQCAtNTUwLDggKzU1MCwxMSBAQCBlYl9hZGRfdm1hKHN0 cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLAo+ICAgCQllYl91bnJlc2VydmVfdm1hKHZtYSwgdm1h LT5leGVjX2ZsYWdzKTsKPiAgIAo+ICAgCQlsaXN0X2FkZF90YWlsKCZ2bWEtPmV4ZWNfbGluaywg JmViLT51bmJvdW5kKTsKPiAtCQlpZiAoZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUp KQo+ICsJCWlmIChkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpIHsKPiArCQkJbXV0 ZXhfbG9jaygmdm1hLT52bS0+bXV0ZXgpOwo+ICAgCQkJZXJyID0gaTkxNV92bWFfdW5iaW5kKHZt YSk7Cj4gKwkJCW11dGV4X3VubG9jaygmdm1hLT52bS0+bXV0ZXgpOwoKU2hvdWxkIHRoZXJlIGJl IF9faTkxNV92bWFfdW5iaW5kIHdoaWNoIGFzc2VydHMgdGhlIGxvY2sgYW5kIAppOTE1X3ZtYV91 bmJpbmQgd2hpY2ggdGFrZXMgaXQ/Cgo+ICsJCX0KPiAgIAkJaWYgKHVubGlrZWx5KGVycikpCj4g ICAJCQl2bWEtPmV4ZWNfZmxhZ3MgPSBOVUxMOwo+ICAgCX0KPiBAQCAtNjk4LDcgKzcwMSw5IEBA IHN0YXRpYyBpbnQgZWJfcmVzZXJ2ZShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKPiAgIAo+ ICAgCQljYXNlIDE6Cj4gICAJCQkvKiBUb28gZnJhZ21lbnRlZCwgdW5iaW5kIGV2ZXJ5dGhpbmcg YW5kIHJldHJ5ICovCj4gKwkJCW11dGV4X2xvY2soJmViLT5jb250ZXh0LT52bS0+bXV0ZXgpOwo+ ICAgCQkJZXJyID0gaTkxNV9nZW1fZXZpY3Rfdm0oZWItPmNvbnRleHQtPnZtKTsKPiArCQkJbXV0 ZXhfdW5sb2NrKCZlYi0+Y29udGV4dC0+dm0tPm11dGV4KTsKPiAgIAkJCWlmIChlcnIpCj4gICAJ CQkJcmV0dXJuIGVycjsKPiAgIAkJCWJyZWFrOwo+IEBAIC05NzIsNyArOTc3LDkgQEAgc3RhdGlj IHZvaWQgcmVsb2NfY2FjaGVfcmVzZXQoc3RydWN0IHJlbG9jX2NhY2hlICpjYWNoZSkKPiAgIAkJ CWdndHQtPnZtLmNsZWFyX3JhbmdlKCZnZ3R0LT52bSwKPiAgIAkJCQkJICAgICBjYWNoZS0+bm9k ZS5zdGFydCwKPiAgIAkJCQkJICAgICBjYWNoZS0+bm9kZS5zaXplKTsKPiArCQkJbXV0ZXhfbG9j aygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQkJZHJtX21tX3JlbW92ZV9ub2RlKCZjYWNoZS0+bm9k ZSk7Cj4gKwkJCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQl9IGVsc2Ugewo+ ICAgCQkJaTkxNV92bWFfdW5waW4oKHN0cnVjdCBpOTE1X3ZtYSAqKWNhY2hlLT5ub2RlLm1tKTsK PiAgIAkJfQo+IEBAIC0xMDQ3LDExICsxMDU0LDEzIEBAIHN0YXRpYyB2b2lkICpyZWxvY19pb21h cChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJCQkgICAgICAgUElOX05P RVZJQ1QpOwo+ICAgCQlpZiAoSVNfRVJSKHZtYSkpIHsKPiAgIAkJCW1lbXNldCgmY2FjaGUtPm5v ZGUsIDAsIHNpemVvZihjYWNoZS0+bm9kZSkpOwo+ICsJCQltdXRleF9sb2NrKCZnZ3R0LT52bS5t dXRleCk7Cj4gICAJCQllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UKPiAgIAkJCQko JmdndHQtPnZtLm1tLCAmY2FjaGUtPm5vZGUsCj4gICAJCQkJIFBBR0VfU0laRSwgMCwgSTkxNV9D T0xPUl9VTkVWSUNUQUJMRSwKPiAgIAkJCQkgMCwgZ2d0dC0+bWFwcGFibGVfZW5kLAo+ICAgCQkJ CSBEUk1fTU1fSU5TRVJUX0xPVyk7Cj4gKwkJCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgp Owo+ICAgCQkJaWYgKGVycikgLyogbm8gaW5hY3RpdmUgYXBlcnR1cmUgc3BhY2UsIHVzZSBjcHUg cmVsb2MgKi8KPiAgIAkJCQlyZXR1cm4gTlVMTDsKPiAgIAkJfSBlbHNlIHsKPiBAQCAtMTQxNiw3 ICsxNDI1LDcgQEAgZWJfcmVsb2NhdGVfZW50cnkoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIs Cj4gICAJCWlmIChyZWxvYy0+d3JpdGVfZG9tYWluID09IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVD VElPTiAmJgo+ICAgCQkgICAgSVNfR0VOKGViLT5pOTE1LCA2KSkgewo+ICAgCQkJZXJyID0gaTkx NV92bWFfYmluZCh0YXJnZXQsIHRhcmdldC0+b2JqLT5jYWNoZV9sZXZlbCwKPiAtCQkJCQkgICAg UElOX0dMT0JBTCk7Cj4gKwkJCQkJICAgIFBJTl9HTE9CQUwsIE5VTEwpOwo+ICAgCQkJaWYgKFdB Uk5fT05DRShlcnIsCj4gICAJCQkJICAgICAgIlVuZXhwZWN0ZWQgZmFpbHVyZSB0byBiaW5kIHRh cmdldCBWTUEhIikpCj4gICAJCQkJcmV0dXJuIGVycjsKPiBAQCAtMjE0MCwzNSArMjE0OSw2IEBA IHN0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICplYl90aHJvdHRsZShzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY2UpCj4gICAJcmV0dXJuIGk5MTVfcmVxdWVzdF9nZXQocnEpOwo+ICAgfQo+ICAgCj4g LXN0YXRpYyBpbnQKPiAtX19lYl9waW5fY29udGV4dChzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICpl Yiwgc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+IC17Cj4gLQlpbnQgZXJyOwo+IC0KPiAtCWlm IChsaWtlbHkoYXRvbWljX2luY19ub3RfemVybygmY2UtPnBpbl9jb3VudCkpKQo+IC0JCXJldHVy biAwOwo+IC0KPiAtCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZWItPmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwo+IC0JaWYgKGVycikKPiAtCQlyZXR1cm4gZXJyOwo+IC0KPiAtCWVy ciA9IF9faW50ZWxfY29udGV4dF9kb19waW4oY2UpOwo+IC0JbXV0ZXhfdW5sb2NrKCZlYi0+aTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIGVycjsKPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQKPiAtX19lYl91bnBpbl9jb250ZXh0KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmVi LCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gLXsKPiAtCWlmIChsaWtlbHkoYXRvbWljX2Fk ZF91bmxlc3MoJmNlLT5waW5fY291bnQsIC0xLCAxKSkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCW11 dGV4X2xvY2soJmViLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCWludGVsX2NvbnRleHRf dW5waW4oY2UpOwo+IC0JbXV0ZXhfdW5sb2NrKCZlYi0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4gLX0KPiAtCj4gICBzdGF0aWMgaW50IF9fZWJfcGluX2VuZ2luZShzdHJ1Y3QgaTkxNV9leGVj YnVmZmVyICplYiwgc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICAgewo+ICAgCXN0cnVjdCBp bnRlbF90aW1lbGluZSAqdGw7Cj4gQEAgLTIxODgsNyArMjE2OCw3IEBAIHN0YXRpYyBpbnQgX19l Yl9waW5fZW5naW5lKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLCBzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY2UpCj4gICAJICogR0dUVCBzcGFjZSwgc28gZG8gdGhpcyBmaXJzdCBiZWZvcmUgd2Ug cmVzZXJ2ZSBhIHNlcW5vIGZvcgo+ICAgCSAqIG91cnNlbHZlcy4KPiAgIAkgKi8KPiAtCWVyciA9 IF9fZWJfcGluX2NvbnRleHQoZWIsIGNlKTsKPiArCWVyciA9IGludGVsX2NvbnRleHRfcGluKGNl KTsKPiAgIAlpZiAoZXJyKQo+ICAgCQlyZXR1cm4gZXJyOwo+ICAgCj4gQEAgLTIyMzIsNyArMjIx Miw3IEBAIHN0YXRpYyBpbnQgX19lYl9waW5fZW5naW5lKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIg KmViLCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gICAJaW50ZWxfY29udGV4dF9leGl0KGNl KTsKPiAgIAlpbnRlbF9jb250ZXh0X3RpbWVsaW5lX3VubG9jayh0bCk7Cj4gICBlcnJfdW5waW46 Cj4gLQlfX2ViX3VucGluX2NvbnRleHQoZWIsIGNlKTsKPiArCWludGVsX2NvbnRleHRfdW5waW4o Y2UpOwo+ICAgCXJldHVybiBlcnI7Cj4gICB9Cj4gICAKPiBAQCAtMjI0NSw3ICsyMjI1LDcgQEAg c3RhdGljIHZvaWQgZWJfdW5waW5fZW5naW5lKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQo+ ICAgCWludGVsX2NvbnRleHRfZXhpdChjZSk7Cj4gICAJbXV0ZXhfdW5sb2NrKCZ0bC0+bXV0ZXgp Owo+ICAgCj4gLQlfX2ViX3VucGluX2NvbnRleHQoZWIsIGNlKTsKPiArCWludGVsX2NvbnRleHRf dW5waW4oY2UpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdW5zaWduZWQgaW50Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jCj4gaW5kZXggODJkYjJiNzgzMTIzLi45YThj MzA3YzVhZWIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X21tYW4uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmMK PiBAQCAtMjUxLDE2ICsyNTEsNiBAQCB2bV9mYXVsdF90IGk5MTVfZ2VtX2ZhdWx0KHN0cnVjdCB2 bV9mYXVsdCAqdm1mKQo+ICAgCQlnb3RvIGVycl9ycG07Cj4gICAJfQo+ICAgCj4gLQlyZXQgPSBp OTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3Rv IGVycl9yZXNldDsKPiAtCj4gLQkvKiBBY2Nlc3MgdG8gc25vb3BhYmxlIHBhZ2VzIHRocm91Z2gg dGhlIEdUVCBpcyBpbmNvaGVyZW50LiAqLwo+IC0JaWYgKG9iai0+Y2FjaGVfbGV2ZWwgIT0gSTkx NV9DQUNIRV9OT05FICYmICFIQVNfTExDKGk5MTUpKSB7Cj4gLQkJcmV0ID0gLUVGQVVMVDsKPiAt CQlnb3RvIGVycl91bmxvY2s7Cj4gLQl9Cj4gLQo+ICAgCS8qIE5vdyBwaW4gaXQgaW50byB0aGUg R1RUIGFzIG5lZWRlZCAqLwo+ICAgCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihvYmos IE5VTEwsIDAsIDAsCj4gICAJCQkJICAgICAgIFBJTl9NQVBQQUJMRSB8Cj4gQEAgLTI5Myw3ICsy ODMsMTMgQEAgdm1fZmF1bHRfdCBpOTE1X2dlbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikK PiAgIAl9Cj4gICAJaWYgKElTX0VSUih2bWEpKSB7Cj4gICAJCXJldCA9IFBUUl9FUlIodm1hKTsK PiAtCQlnb3RvIGVycl91bmxvY2s7Cj4gKwkJZ290byBlcnJfcmVzZXQ7Cj4gKwl9Cj4gKwo+ICsJ LyogQWNjZXNzIHRvIHNub29wYWJsZSBwYWdlcyB0aHJvdWdoIHRoZSBHVFQgaXMgaW5jb2hlcmVu dC4gKi8KPiArCWlmIChvYmotPmNhY2hlX2xldmVsICE9IEk5MTVfQ0FDSEVfTk9ORSAmJiAhSEFT X0xMQyhpOTE1KSkgewo+ICsJCXJldCA9IC1FRkFVTFQ7Cj4gKwkJZ290byBlcnJfdW5waW47Cj4g ICAJfQo+ICAgCj4gICAJcmV0ID0gaTkxNV92bWFfcGluX2ZlbmNlKHZtYSk7Cj4gQEAgLTMyMSwx NCArMzE3LDEyIEBAIHZtX2ZhdWx0X3QgaTkxNV9nZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2 bWYpCj4gICAJCWludGVsX3dha2VyZWZfYXV0bygmaTkxNS0+Z2d0dC51c2VyZmF1bHRfd2FrZXJl ZiwKPiAgIAkJCQkgICBtc2Vjc190b19qaWZmaWVzX3RpbWVvdXQoQ09ORklHX0RSTV9JOTE1X1VT RVJGQVVMVF9BVVRPU1VTUEVORCkpOwo+ICAgCj4gLQlpOTE1X3ZtYV9zZXRfZ2d0dF93cml0ZSh2 bWEpOwo+IC0KPiArCWlmICh3cml0ZSkKPiArCQlpOTE1X3ZtYV9zZXRfZ2d0dF93cml0ZSh2bWEp Owo+ICAgZXJyX2ZlbmNlOgo+ICAgCWk5MTVfdm1hX3VucGluX2ZlbmNlKHZtYSk7Cj4gICBlcnJf dW5waW46Cj4gICAJX19pOTE1X3ZtYV91bnBpbih2bWEpOwo+IC1lcnJfdW5sb2NrOgo+IC0JbXV0 ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gICBlcnJfcmVzZXQ6Cj4gICAJaW50ZWxf Z3RfcmVzZXRfdW5sb2NrKGdndHQtPnZtLmd0LCBzcmN1KTsKPiAgIGVycl9ycG06Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYwo+IGluZGV4IDBlZjYwZGFlMjNh Ny4uZGJmOWJlOWE3OWY0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9vYmplY3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9vYmplY3QuYwo+IEBAIC0xNTUsMjEgKzE1NSwzMCBAQCBzdGF0aWMgdm9pZCBfX2k5MTVfZ2Vt X2ZyZWVfb2JqZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAo+ICAgCXdh a2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldCgmaTkxNS0+cnVudGltZV9wbSk7Cj4gICAJbGxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG9uLCBmcmVlZCwgZnJlZWQpIHsKPiAtCQlzdHJ1 Y3QgaTkxNV92bWEgKnZtYSwgKnZuOwo+IC0KPiAgIAkJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2Rl c3Ryb3kob2JqKTsKPiAgIAo+IC0JCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgp Owo+IC0KPiAtCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodm1hLCB2biwgJm9iai0+dm1hLmxp c3QsIG9ial9saW5rKSB7Cj4gLQkJCUdFTV9CVUdfT04oaTkxNV92bWFfaXNfYWN0aXZlKHZtYSkp Owo+IC0JCQlhdG9taWNfYW5kKH5JOTE1X1ZNQV9QSU5fTUFTSywgJnZtYS0+ZmxhZ3MpOwo+IC0J CQlpOTE1X3ZtYV9kZXN0cm95KHZtYSk7Cj4gKwkJaWYgKCFsaXN0X2VtcHR5KCZvYmotPnZtYS5s aXN0KSkgewo+ICsJCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiArCj4gKwkJCS8qCj4gKwkJCSAq IE5vdGUgdGhhdCB0aGUgdm1hIGtlZXBzIGFuIG9iamVjdCByZWZlcmVuY2Ugd2hpbGUKPiArCQkJ ICogaXQgaXMgYWN0aXZlLCBzbyBpdCAqc2hvdWxkKiBub3Qgc2xlZXAgd2hpbGUgd2UKPiArCQkJ ICogZGVzdHJveSBpdC4gT3VyIGRlYnVnIGNvZGUgZXJycyBpbnNpdHMgaXQgKm1pZ2h0Ki4KPiAr CQkJICogRm9yIHRoZSBtb21lbnQsIHBsYXkgYWxvbmcuCj4gKwkJCSAqLwo+ICsJCQlzcGluX2xv Y2soJm9iai0+dm1hLmxvY2spOwo+ICsJCQl3aGlsZSAoKHZtYSA9IGxpc3RfZmlyc3RfZW50cnlf b3JfbnVsbCgmb2JqLT52bWEubGlzdCwKPiArCQkJCQkJCSAgICAgICBzdHJ1Y3QgaTkxNV92bWEs Cj4gKwkJCQkJCQkgICAgICAgb2JqX2xpbmspKSkgewo+ICsJCQkJR0VNX0JVR19PTih2bWEtPm9i aiAhPSBvYmopOwo+ICsJCQkJc3Bpbl91bmxvY2soJm9iai0+dm1hLmxvY2spOwo+ICsKPiArCQkJ CWk5MTVfdm1hX2Rlc3Ryb3kodm1hKTsKPiArCj4gKwkJCQlzcGluX2xvY2soJm9iai0+dm1hLmxv Y2spOwo+ICsJCQl9Cj4gKwkJCXNwaW5fdW5sb2NrKCZvYmotPnZtYS5sb2NrKTsKPiAgIAkJfQo+ IC0JCUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoJm9iai0+dm1hLmxpc3QpKTsKPiAtCQlHRU1fQlVH X09OKCFSQl9FTVBUWV9ST09UKCZvYmotPnZtYS50cmVlKSk7Cj4gLQo+IC0JCW11dGV4X3VubG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAKPiAgIAkJR0VNX0JVR19PTihhdG9taWNf cmVhZCgmb2JqLT5iaW5kX2NvdW50KSk7Cj4gICAJCUdFTV9CVUdfT04ob2JqLT51c2VyZmF1bHRf Y291bnQpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f b2JqZWN0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKPiBp bmRleCAyOWI5ZWRkYzRjN2YuLmE3OGFmMjVkY2UzNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKPiBAQCAtMTA2LDYgKzEwNiwxMSBAQCBzdGF0aWMg aW5saW5lIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2xvY2soc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKPiAgIAlkbWFfcmVzdl9sb2NrKG9iai0+YmFzZS5yZXN2LCBOVUxMKTsKPiAgIH0K PiAgIAo+ICtzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9nZW1fb2JqZWN0X3RyeWxvY2soc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsJcmV0dXJuIGRtYV9yZXN2X3RyeWxv Y2sob2JqLT5iYXNlLnJlc3YpOwo+ICt9Cj4gKwo+ICAgc3RhdGljIGlubGluZSBpbnQKPiAgIGk5 MTVfZ2VtX29iamVjdF9sb2NrX2ludGVycnVwdGlibGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKPiAgIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3Nocmlua2VyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hy aW5rZXIuYwo+IGluZGV4IGQyYzA1ZDc1MjkwOS4uZmQ2MDRlYTEyZjdmIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmMKPiBAQCAtMTYsNDAgKzE2 LDYgQEAKPiAgIAo+ICAgI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKPiAgIAo+IC1zdGF0aWMgYm9v bCBzaHJpbmtlcl9sb2NrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+IC0JCQkgIHVu c2lnbmVkIGludCBmbGFncywKPiAtCQkJICBib29sICp1bmxvY2spCj4gLXsKPiAtCXN0cnVjdCBt dXRleCAqbSA9ICZpOTE1LT5kcm0uc3RydWN0X211dGV4Owo+IC0KPiAtCXN3aXRjaCAobXV0ZXhf dHJ5bG9ja19yZWN1cnNpdmUobSkpIHsKPiAtCWNhc2UgTVVURVhfVFJZTE9DS19SRUNVUlNJVkU6 Cj4gLQkJKnVubG9jayA9IGZhbHNlOwo+IC0JCXJldHVybiB0cnVlOwo+IC0KPiAtCWNhc2UgTVVU RVhfVFJZTE9DS19GQUlMRUQ6Cj4gLQkJKnVubG9jayA9IGZhbHNlOwo+IC0JCWlmIChmbGFncyAm IEk5MTVfU0hSSU5LX0FDVElWRSAmJgo+IC0JCSAgICBtdXRleF9sb2NrX2tpbGxhYmxlX25lc3Rl ZChtLCBJOTE1X01NX1NIUklOS0VSKSA9PSAwKQo+IC0JCQkqdW5sb2NrID0gdHJ1ZTsKPiAtCQly ZXR1cm4gKnVubG9jazsKPiAtCj4gLQljYXNlIE1VVEVYX1RSWUxPQ0tfU1VDQ0VTUzoKPiAtCQkq dW5sb2NrID0gdHJ1ZTsKPiAtCQlyZXR1cm4gdHJ1ZTsKPiAtCX0KPiAtCj4gLQlCVUcoKTsKPiAt fQo+IC0KPiAtc3RhdGljIHZvaWQgc2hyaW5rZXJfdW5sb2NrKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1LCBib29sIHVubG9jaykKPiAtewo+IC0JaWYgKCF1bmxvY2spCj4gLQkJcmV0dXJu Owo+IC0KPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLX0KPiAt Cj4gICBzdGF0aWMgYm9vbCBzd2FwX2F2YWlsYWJsZSh2b2lkKQo+ICAgewo+ICAgCXJldHVybiBn ZXRfbnJfc3dhcF9wYWdlcygpID4gMDsKPiBAQCAtMTU1LDEwICsxMjEsNiBAQCBpOTE1X2dlbV9z aHJpbmsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICAJaW50ZWxfd2FrZXJlZl90 IHdha2VyZWYgPSAwOwo+ICAgCXVuc2lnbmVkIGxvbmcgY291bnQgPSAwOwo+ICAgCXVuc2lnbmVk IGxvbmcgc2Nhbm5lZCA9IDA7Cj4gLQlib29sIHVubG9jazsKPiAtCj4gLQlpZiAoIXNocmlua2Vy X2xvY2soaTkxNSwgc2hyaW5rLCAmdW5sb2NrKSkKPiAtCQlyZXR1cm4gMDsKPiAgIAo+ICAgCS8q Cj4gICAJICogV2hlbiBzaHJpbmtpbmcgdGhlIGFjdGl2ZSBsaXN0LCB3ZSBzaG91bGQgYWxzbyBj b25zaWRlciBhY3RpdmUKPiBAQCAtMjY4LDggKzIzMCw2IEBAIGk5MTVfZ2VtX3NocmluayhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAlpZiAoc2hyaW5rICYgSTkxNV9TSFJJTktf Qk9VTkQpCj4gICAJCWludGVsX3J1bnRpbWVfcG1fcHV0KCZpOTE1LT5ydW50aW1lX3BtLCB3YWtl cmVmKTsKPiAgIAo+IC0Jc2hyaW5rZXJfdW5sb2NrKGk5MTUsIHVubG9jayk7Cj4gLQo+ICAgCWlm IChucl9zY2FubmVkKQo+ICAgCQkqbnJfc2Nhbm5lZCArPSBzY2FubmVkOwo+ICAgCXJldHVybiBj b3VudDsKPiBAQCAtMzM5LDE5ICsyOTksMTQgQEAgaTkxNV9nZW1fc2hyaW5rZXJfc2NhbihzdHJ1 Y3Qgc2hyaW5rZXIgKnNocmlua2VyLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQo+ICAgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KPiAgIAkJY29udGFpbmVyX29mKHNocmlua2Vy LCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgbW0uc2hyaW5rZXIpOwo+ICAgCXVuc2lnbmVkIGxv bmcgZnJlZWQ7Cj4gLQlib29sIHVubG9jazsKPiAgIAo+ICAgCXNjLT5ucl9zY2FubmVkID0gMDsK PiAgIAo+IC0JaWYgKCFzaHJpbmtlcl9sb2NrKGk5MTUsIDAsICZ1bmxvY2spKQo+IC0JCXJldHVy biBTSFJJTktfU1RPUDsKPiAtCj4gICAJZnJlZWQgPSBpOTE1X2dlbV9zaHJpbmsoaTkxNSwKPiAg IAkJCQlzYy0+bnJfdG9fc2NhbiwKPiAgIAkJCQkmc2MtPm5yX3NjYW5uZWQsCj4gICAJCQkJSTkx NV9TSFJJTktfQk9VTkQgfAo+IC0JCQkJSTkxNV9TSFJJTktfVU5CT1VORCB8Cj4gLQkJCQlJOTE1 X1NIUklOS19XUklURUJBQ0spOwo+ICsJCQkJSTkxNV9TSFJJTktfVU5CT1VORCk7Cj4gICAJaWYg KHNjLT5ucl9zY2FubmVkIDwgc2MtPm5yX3RvX3NjYW4gJiYgY3VycmVudF9pc19rc3dhcGQoKSkg ewo+ICAgCQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAgIAo+IEBAIC0zNjYsOCArMzIxLDYg QEAgaTkxNV9nZW1fc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLCBzdHJ1 Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQo+ICAgCQl9Cj4gICAJfQo+ICAgCj4gLQlzaHJpbmtlcl91 bmxvY2soaTkxNSwgdW5sb2NrKTsKPiAtCj4gICAJcmV0dXJuIHNjLT5ucl9zY2FubmVkID8gZnJl ZWQgOiBTSFJJTktfU1RPUDsKPiAgIH0KPiAgIAo+IEBAIC0zODQsNiArMzM3LDcgQEAgaTkxNV9n ZW1fc2hyaW5rZXJfb29tKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcg ZXZlbnQsIHZvaWQgKnB0cikKPiAgIAlmcmVlZF9wYWdlcyA9IDA7Cj4gICAJd2l0aF9pbnRlbF9y dW50aW1lX3BtKCZpOTE1LT5ydW50aW1lX3BtLCB3YWtlcmVmKQo+ICAgCQlmcmVlZF9wYWdlcyAr PSBpOTE1X2dlbV9zaHJpbmsoaTkxNSwgLTFVTCwgTlVMTCwKPiArCQkJCQkgICAgICAgSTkxNV9T SFJJTktfQUNUSVZFIHwKPiAgIAkJCQkJICAgICAgIEk5MTVfU0hSSU5LX0JPVU5EIHwKPiAgIAkJ CQkJICAgICAgIEk5MTVfU0hSSU5LX1VOQk9VTkQgfAo+ICAgCQkJCQkgICAgICAgSTkxNV9TSFJJ TktfV1JJVEVCQUNLKTsKPiBAQCAtNDE5LDEwICszNzMsNiBAQCBpOTE1X2dlbV9zaHJpbmtlcl92 bWFwKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQg KnB0cgo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hLCAqbmV4dDsKPiAgIAl1bnNpZ25lZCBsb25n IGZyZWVkX3BhZ2VzID0gMDsKPiAgIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCWJvb2wg dW5sb2NrOwo+IC0KPiAtCWlmICghc2hyaW5rZXJfbG9jayhpOTE1LCAwLCAmdW5sb2NrKSkKPiAt CQlyZXR1cm4gTk9USUZZX0RPTkU7Cj4gICAKPiAgIAl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmk5 MTUtPnJ1bnRpbWVfcG0sIHdha2VyZWYpCj4gICAJCWZyZWVkX3BhZ2VzICs9IGk5MTVfZ2VtX3No cmluayhpOTE1LCAtMVVMLCBOVUxMLAo+IEBAIC00MzksMTUgKzM4OSwxMSBAQCBpOTE1X2dlbV9z aHJpbmtlcl92bWFwKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZl bnQsIHZvaWQgKnB0cgo+ICAgCQlpZiAoIXZtYS0+aW9tYXAgfHwgaTkxNV92bWFfaXNfYWN0aXZl KHZtYSkpCj4gICAJCQljb250aW51ZTsKPiAgIAo+IC0JCW11dGV4X3VubG9jaygmaTkxNS0+Z2d0 dC52bS5tdXRleCk7Cj4gICAJCWlmIChpOTE1X3ZtYV91bmJpbmQodm1hKSA9PSAwKQo+ICAgCQkJ ZnJlZWRfcGFnZXMgKz0gY291bnQ7Cj4gLQkJbXV0ZXhfbG9jaygmaTkxNS0+Z2d0dC52bS5tdXRl eCk7Cj4gICAJfQo+ICAgCW11dGV4X3VubG9jaygmaTkxNS0+Z2d0dC52bS5tdXRleCk7Cj4gICAK PiAtCXNocmlua2VyX3VubG9jayhpOTE1LCB1bmxvY2spOwo+IC0KPiAgIAkqKHVuc2lnbmVkIGxv bmcgKilwdHIgKz0gZnJlZWRfcGFnZXM7Cj4gICAJcmV0dXJuIE5PVElGWV9ET05FOwo+ICAgfQo+ IEBAIC00OTAsMjIgKzQzNiw5IEBAIHZvaWQgaTkxNV9nZW1fc2hyaW5rZXJfdGFpbnRzX211dGV4 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCj4gICAJZnNfcmVjbGFpbV9hY3F1 aXJlKEdGUF9LRVJORUwpOwo+ICAgCj4gLQkvKgo+IC0JICogQXMgd2UgaW52YXJpYWJseSByZWx5 IG9uIHRoZSBzdHJ1Y3RfbXV0ZXggd2l0aGluIHRoZSBzaHJpbmtlciwKPiAtCSAqIGJ1dCBoYXZl IGEgY29tcGxpY2F0ZWQgcmVjdXJzaW9uIGRhbmNlLCB0YWludCBhbGwgdGhlIG11dGV4ZXMgdXNl ZAo+IC0JICogd2l0aGluIHRoZSBzaHJpbmtlciB3aXRoIHRoZSBzdHJ1Y3RfbXV0ZXguIEZvciBj b21wbGV0ZW5lc3MsIHdlCj4gLQkgKiB0YWludCB3aXRoIGFsbCBzdWJjbGFzcyBvZiBzdHJ1Y3Rf bXV0ZXgsIGV2ZW4gdGhvdWdoIHdlIHNob3VsZAo+IC0JICogb25seSBuZWVkIHRhaW50aW5nIGJ5 IEk5MTVfTU1fTk9STUFMIHRvIGNhdGNoIHBvc3NpYmxlIEFCQkEKPiAtCSAqIGRlYWRsb2NrcyBm cm9tIHVzaW5nIHN0cnVjdF9tdXRleCBpbnNpZGUgQG11dGV4Lgo+IC0JICovCj4gLQltdXRleF9h Y3F1aXJlKCZpOTE1LT5kcm0uc3RydWN0X211dGV4LmRlcF9tYXAsCj4gLQkJICAgICAgSTkxNV9N TV9TSFJJTktFUiwgMCwgX1JFVF9JUF8pOwo+IC0KPiAgIAltdXRleF9hY3F1aXJlKCZtdXRleC0+ ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwo+ICAgCW11dGV4X3JlbGVhc2UoJm11dGV4LT5kZXBf bWFwLCAwLCBfUkVUX0lQXyk7Cj4gICAKPiAtCW11dGV4X3JlbGVhc2UoJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXguZGVwX21hcCwgMCwgX1JFVF9JUF8pOwo+IC0KPiAgIAlmc19yZWNsYWltX3JlbGVh c2UoR0ZQX0tFUk5FTCk7Cj4gICAKPiAgIAlpZiAodW5sb2NrKQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc3RvbGVuLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fc3RvbGVuLmMKPiBpbmRleCAwZDgxZGUxNDYxYjQuLmQyYWVkNzI4 YWQ4ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc3Rv bGVuLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc3RvbGVuLmMK PiBAQCAtNjIxLDggKzYyMSw2IEBAIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVuX2Zvcl9w cmVhbGxvY2F0ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2Cj4gICAJaWYgKCFk cm1fbW1faW5pdGlhbGl6ZWQoJmRldl9wcml2LT5tbS5zdG9sZW4pKQo+ICAgCQlyZXR1cm4gTlVM TDsKPiAgIAo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwo+IC0KPiAgIAlEUk1fREVCVUdfRFJJVkVSKCJjcmVhdGluZyBwcmVhbGxvY2F0ZWQgc3Rv bGVuIG9iamVjdDogc3RvbGVuX29mZnNldD0lcGEsIGd0dF9vZmZzZXQ9JXBhLCBzaXplPSVwYVxu IiwKPiAgIAkJCSAmc3RvbGVuX29mZnNldCwgJmd0dF9vZmZzZXQsICZzaXplKTsKPiAgIAo+IEBA IC02NzQsMjEgKzY3MiwyNSBAQCBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3N0b2xlbl9mb3JfcHJl YWxsb2NhdGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdgo+ICAgCSAqIHNldHRp bmcgdXAgdGhlIEdUVCBzcGFjZS4gVGhlIGFjdHVhbCByZXNlcnZhdGlvbiB3aWxsIG9jY3VyCj4g ICAJICogbGF0ZXIuCj4gICAJICovCj4gKwltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4g ICAJcmV0ID0gaTkxNV9nZW1fZ3R0X3Jlc2VydmUoJmdndHQtPnZtLCAmdm1hLT5ub2RlLAo+ICAg CQkJCSAgIHNpemUsIGd0dF9vZmZzZXQsIG9iai0+Y2FjaGVfbGV2ZWwsCj4gICAJCQkJICAgMCk7 Cj4gICAJaWYgKHJldCkgewo+ICAgCQlEUk1fREVCVUdfRFJJVkVSKCJmYWlsZWQgdG8gYWxsb2Nh dGUgc3RvbGVuIEdUVCBzcGFjZVxuIik7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5tdXRl eCk7Cj4gICAJCWdvdG8gZXJyX3BhZ2VzOwo+ICAgCX0KPiAgIAo+ICAgCUdFTV9CVUdfT04oIWRy bV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSk7Cj4gICAKPiArCUdFTV9CVUdfT04odm1h LT5wYWdlcyk7Cj4gICAJdm1hLT5wYWdlcyA9IG9iai0+bW0ucGFnZXM7Cj4gKwlhdG9taWNfc2V0 KCZ2bWEtPnBhZ2VzX2NvdW50LCBJOTE1X1ZNQV9QQUdFU19BQ1RJVkUpOwo+ICsKPiAgIAlzZXRf Yml0KEk5MTVfVk1BX0dMT0JBTF9CSU5EX0JJVCwgX19pOTE1X3ZtYV9mbGFncyh2bWEpKTsKPiAg IAlfX2k5MTVfdm1hX3NldF9tYXBfYW5kX2ZlbmNlYWJsZSh2bWEpOwo+ICAgCj4gLQltdXRleF9s b2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJbGlzdF9hZGRfdGFpbCgmdm1hLT52bV9saW5rLCAm Z2d0dC0+dm0uYm91bmRfbGlzdCk7Cj4gICAJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5tdXRleCk7 Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Rp bGluZy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3RpbGluZy5jCj4gaW5k ZXggY2EwYzJmNDUxNzQyLi5iOWNmYWUwZTQ0MzUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3RpbGluZy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX3RpbGluZy5jCj4gQEAgLTE4MSwyMiArMTgxLDI1IEBAIHN0YXRpYyBp bnQKPiAgIGk5MTVfZ2VtX29iamVjdF9mZW5jZV9wcmVwYXJlKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCj4gICAJCQkgICAgICBpbnQgdGlsaW5nX21vZGUsIHVuc2lnbmVkIGludCBz dHJpZGUpCj4gICB7Cj4gKwlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJnRvX2k5MTUob2JqLT5i YXNlLmRldiktPmdndHQ7Cj4gICAJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gLQlpbnQgcmV0Owo+ ICsJaW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAodGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdf Tk9ORSkKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiArCW11dGV4X2xvY2soJmdndHQtPnZtLm11dGV4 KTsKPiAgIAlmb3JfZWFjaF9nZ3R0X3ZtYSh2bWEsIG9iaikgewo+ICAgCQlpZiAoaTkxNV92bWFf ZmVuY2VfcHJlcGFyZSh2bWEsIHRpbGluZ19tb2RlLCBzdHJpZGUpKQo+ICAgCQkJY29udGludWU7 Cj4gICAKPiAgIAkJcmV0ID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7Cj4gICAJCWlmIChyZXQpCj4g LQkJCXJldHVybiByZXQ7Cj4gKwkJCWJyZWFrOwo+ICAgCX0KPiArCW11dGV4X3VubG9jaygmZ2d0 dC0+dm0ubXV0ZXgpOwo+ICAgCj4gLQlyZXR1cm4gMDsKPiArCXJldHVybiByZXQ7Cj4gICB9Cj4g ICAKPiAgIGludAo+IEBAIC0yMTIsNyArMjE1LDYgQEAgaTkxNV9nZW1fb2JqZWN0X3NldF90aWxp bmcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAo+ICAgCUdFTV9CVUdfT04o IWk5MTVfdGlsaW5nX29rKG9iaiwgdGlsaW5nLCBzdHJpZGUpKTsKPiAgIAlHRU1fQlVHX09OKCFz dHJpZGUgXiAodGlsaW5nID09IEk5MTVfVElMSU5HX05PTkUpKTsKPiAtCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gICAJaWYgKCh0aWxpbmcgfCBz dHJpZGUpID09IG9iai0+dGlsaW5nX2FuZF9zdHJpZGUpCj4gICAJCXJldHVybiAwOwo+IEBAIC0z NjQsMTIgKzM2Niw3IEBAIGk5MTVfZ2VtX3NldF90aWxpbmdfaW9jdGwoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAkJfQo+ICAgCX0KPiAgIAo+IC0JZXJyID0gbXV0ZXhf bG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQlpZiAoZXJyKQo+IC0J CWdvdG8gZXJyOwo+IC0KPiAgIAllcnIgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RpbGluZyhvYmos IGFyZ3MtPnRpbGluZ19tb2RlLCBhcmdzLT5zdHJpZGUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZkZXYt PnN0cnVjdF9tdXRleCk7Cj4gICAKPiAgIAkvKiBXZSBoYXZlIHRvIG1haW50YWluIHRoaXMgZXhp c3RpbmcgQUJJLi4uICovCj4gICAJYXJncy0+c3RyaWRlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9z dHJpZGUob2JqKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX3VzZXJwdHIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRy LmMKPiBpbmRleCA3NGRhMzU2MTFkN2MuLmNkMzYyMzZlM2ZhZiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwo+IEBAIC05Miw3ICs5Miw2IEBAIHVz ZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICpfbW4s Cj4gICAJc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbiA9Cj4gICAJCWNvbnRhaW5lcl9vZihf bW4sIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciwgbW4pOwo+ICAgCXN0cnVjdCBpbnRlcnZhbF90 cmVlX25vZGUgKml0Owo+IC0Jc3RydWN0IG11dGV4ICp1bmxvY2sgPSBOVUxMOwo+ICAgCXVuc2ln bmVkIGxvbmcgZW5kOwo+ICAgCWludCByZXQgPSAwOwo+ICAgCj4gQEAgLTEyOSwzMyArMTI4LDEz IEBAIHVzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVy ICpfbW4sCj4gICAJCX0KPiAgIAkJc3Bpbl91bmxvY2soJm1uLT5sb2NrKTsKPiAgIAo+IC0JCWlm ICghdW5sb2NrKSB7Cj4gLQkJCXVubG9jayA9ICZtbi0+bW0tPmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXg7Cj4gLQo+IC0JCQlzd2l0Y2ggKG11dGV4X3RyeWxvY2tfcmVjdXJzaXZlKHVubG9jaykpIHsK PiAtCQkJZGVmYXVsdDoKPiAtCQkJY2FzZSBNVVRFWF9UUllMT0NLX0ZBSUxFRDoKPiAtCQkJCWlm IChtdXRleF9sb2NrX2tpbGxhYmxlX25lc3RlZCh1bmxvY2ssIEk5MTVfTU1fU0hSSU5LRVIpKSB7 Cj4gLQkJCQkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+IC0JCQkJCXJldHVybiAtRUlOVFI7 Cj4gLQkJCQl9Cj4gLQkJCQkvKiBmYWxsIHRocm91Z2ggKi8KPiAtCQkJY2FzZSBNVVRFWF9UUllM T0NLX1NVQ0NFU1M6Cj4gLQkJCQlicmVhazsKPiAtCj4gLQkJCWNhc2UgTVVURVhfVFJZTE9DS19S RUNVUlNJVkU6Cj4gLQkJCQl1bmxvY2sgPSBFUlJfUFRSKC1FRVhJU1QpOwo+IC0JCQkJYnJlYWs7 Cj4gLQkJCX0KPiAtCQl9Cj4gLQo+ICAgCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9i aiwKPiAgIAkJCQkJICAgICBJOTE1X0dFTV9PQkpFQ1RfVU5CSU5EX0FDVElWRSk7Cj4gICAJCWlm IChyZXQgPT0gMCkKPiAgIAkJCXJldCA9IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmos IEk5MTVfTU1fU0hSSU5LRVIpOwo+ICAgCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gICAJ CWlmIChyZXQpCj4gLQkJCWdvdG8gdW5sb2NrOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICAgCj4gICAJ CXNwaW5fbG9jaygmbW4tPmxvY2spOwo+ICAgCj4gQEAgLTE2OCwxMCArMTQ3LDYgQEAgdXNlcnB0 cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKl9tbiwKPiAg IAl9Cj4gICAJc3Bpbl91bmxvY2soJm1uLT5sb2NrKTsKPiAgIAo+IC11bmxvY2s6Cj4gLQlpZiAo IUlTX0VSUl9PUl9OVUxMKHVubG9jaykpCj4gLQkJbXV0ZXhfdW5sb2NrKHVubG9jayk7Cj4gLQo+ ICAgCXJldHVybiByZXQ7Cj4gICAKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwo+IGluZGV4IGM1Y2VhNDM3OTIxNi4uY2Q3NzExNDdi NDFmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVn ZV9wYWdlcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdl X3BhZ2VzLmMKPiBAQCAtMjUsNiArMjUsMTcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBw YWdlX3NpemVzW10gPSB7Cj4gICAJSTkxNV9HVFRfUEFHRV9TSVpFXzRLLAo+ICAgfTsKPiAgIAo+ ICtzdGF0aWMgaW50IHVubG9ja2VkX3ZtYV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4g K3sKPiArCWludCByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmdm1hLT52bS0+bXV0ZXgpOwo+ICsJ cmV0ID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7Cj4gKwltdXRleF91bmxvY2soJnZtYS0+dm0tPm11 dGV4KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICAgc3RhdGljIHVuc2lnbmVkIGlu dCBnZXRfbGFyZ2VzdF9wYWdlX3NpemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4g ICAJCQkJCSAgdTY0IHJlbSkKPiAgIHsKPiBAQCAtMzMzLDcgKzM0NCwxMSBAQCBzdGF0aWMgaW50 IGlndF9jaGVja19wYWdlX3NpemVzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gdm1hLT52bS0+aTkxNTsKPiAgIAl1bnNpZ25lZCBpbnQg c3VwcG9ydGVkID0gSU5URUxfSU5GTyhpOTE1KS0+cGFnZV9zaXplczsKPiAgIAlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdm1hLT5vYmo7Cj4gLQlpbnQgZXJyID0gMDsKPiArCWlu dCBlcnI7Cj4gKwo+ICsJZXJyID0gaTkxNV9hY3RpdmVfd2FpdCgmdm1hLT5hY3RpdmUpOwo+ICsJ aWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICAgCj4gICAJaWYgKCFIQVNfUEFHRV9TSVpFUyhp OTE1LCB2bWEtPnBhZ2Vfc2l6ZXMuc2cpKSB7Cj4gICAJCXByX2VycigidW5zdXBwb3J0ZWQgcGFn ZV9zaXplcy5zZz0ldSwgc3VwcG9ydGVkPSV1XG4iLAo+IEBAIC01MjYsNyArNTQxLDcgQEAgc3Rh dGljIGludCBpZ3RfbW9ja19wcGd0dF9taXNhbGlnbmVkX2RtYSh2b2lkICphcmcpCj4gICAJCSAq IHBhZ2VzLgo+ICAgCQkgKi8KPiAgIAkJZm9yIChvZmZzZXQgPSA0MDk2OyBvZmZzZXQgPCBwYWdl X3NpemU7IG9mZnNldCArPSA0MDk2KSB7Cj4gLQkJCWVyciA9IGk5MTVfdm1hX3VuYmluZCh2bWEp Owo+ICsJCQllcnIgPSB1bmxvY2tlZF92bWFfdW5iaW5kKHZtYSk7Cj4gICAJCQlpZiAoZXJyKSB7 Cj4gICAJCQkJaTkxNV92bWFfY2xvc2Uodm1hKTsKPiAgIAkJCQlnb3RvIG91dF91bnBpbjsKPiBA QCAtOTQxLDcgKzk1Niw3IEBAIHN0YXRpYyBpbnQgX19pZ3Rfd3JpdGVfaHVnZShzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY2UsCj4gICAJaWYgKElTX0VSUih2bWEpKQo+ICAgCQlyZXR1cm4gUFRSX0VS Uih2bWEpOwo+ICAgCj4gLQllcnIgPSBpOTE1X3ZtYV91bmJpbmQodm1hKTsKPiArCWVyciA9IHVu bG9ja2VkX3ZtYV91bmJpbmQodm1hKTsKPiAgIAlpZiAoZXJyKQo+ICAgCQlnb3RvIG91dF92bWFf Y2xvc2U7Cj4gICAKPiBAQCAtMTM5MCw3ICsxNDA1LDcgQEAgc3RhdGljIGludCBpZ3RfcHBndHRf cGluX3VwZGF0ZSh2b2lkICphcmcpCj4gICAJCQlnb3RvIG91dF91bnBpbjsKPiAgIAkJfQo+ICAg Cj4gLQkJZXJyID0gaTkxNV92bWFfYmluZCh2bWEsIEk5MTVfQ0FDSEVfTk9ORSwgUElOX1VQREFU RSk7Cj4gKwkJZXJyID0gaTkxNV92bWFfYmluZCh2bWEsIEk5MTVfQ0FDSEVfTk9ORSwgUElOX1VQ REFURSwgTlVMTCk7Cj4gICAJCWlmIChlcnIpCj4gICAJCQlnb3RvIG91dF91bnBpbjsKPiAgIAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2Vt X2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1f Y29udGV4dC5jCj4gaW5kZXggZGE1NGE3MThjNzEyLi5hYTY3YzAyYmE5OGMgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRl eHQuYwo+IEBAIC03NDcsMTAgKzc0Nyw3IEBAIGVtaXRfcnBjc19xdWVyeShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCWlmIChlcnIpCj4gICAJCWdvdG8gc2tpcF9yZXF1ZXN0 Owo+ICAgCj4gLQlpOTE1X3ZtYV91bnBpbihiYXRjaCk7Cj4gLQlpOTE1X3ZtYV9jbG9zZShiYXRj aCk7Cj4gLQlpOTE1X3ZtYV9wdXQoYmF0Y2gpOwo+IC0KPiArCWk5MTVfdm1hX3VucGluX2FuZF9y ZWxlYXNlKCZiYXRjaCwgMCk7Cj4gICAJaTkxNV92bWFfdW5waW4odm1hKTsKPiAgIAo+ICAgCSpy cV9vdXQgPSBpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKPiBAQCAtNzY0LDggKzc2MSw3IEBAIGVtaXRf cnBjc19xdWVyeShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgZXJyX3JlcXVl c3Q6Cj4gICAJaTkxNV9yZXF1ZXN0X2FkZChycSk7Cj4gICBlcnJfYmF0Y2g6Cj4gLQlpOTE1X3Zt YV91bnBpbihiYXRjaCk7Cj4gLQlpOTE1X3ZtYV9wdXQoYmF0Y2gpOwo+ICsJaTkxNV92bWFfdW5w aW5fYW5kX3JlbGVhc2UoJmJhdGNoLCAwKTsKPiAgIGVycl92bWE6Cj4gICAJaTkxNV92bWFfdW5w aW4odm1hKTsKPiAgIAo+IEBAIC0xMzA5LDkgKzEzMDUsNyBAQCBzdGF0aWMgaW50IHdyaXRlX3Rv X3NjcmF0Y2goc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgIAlpZiAoZXJyKQo+ICAg CQlnb3RvIHNraXBfcmVxdWVzdDsKPiAgIAo+IC0JaTkxNV92bWFfdW5waW4odm1hKTsKPiAtCWk5 MTVfdm1hX2Nsb3NlKHZtYSk7Cj4gLQlpOTE1X3ZtYV9wdXQodm1hKTsKPiArCWk5MTVfdm1hX3Vu cGluX2FuZF9yZWxlYXNlKCZ2bWEsIDApOwo+ICAgCj4gICAJaTkxNV9yZXF1ZXN0X2FkZChycSk7 Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9p OTE1X2dlbV9tbWFuLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVf Z2VtX21tYW4uYwo+IGluZGV4IDFkMjdiYWJmZjBjZS4uOWMyMTdkZmU5NmE5IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbW1hbi5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9tbWFuLmMK PiBAQCAtMjA1LDcgKzIwNSw2IEBAIHN0YXRpYyBpbnQgaWd0X3BhcnRpYWxfdGlsaW5nKHZvaWQg KmFyZykKPiAgIAkJZ290byBvdXQ7Cj4gICAJfQo+ICAgCj4gLQltdXRleF9sb2NrKCZpOTE1LT5k cm0uc3RydWN0X211dGV4KTsKPiAgIAl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJmk5 MTUtPnJ1bnRpbWVfcG0pOwo+ICAgCj4gICAJaWYgKDEpIHsKPiBAQCAtMzE4LDcgKzMxNyw2IEBA IG5leHRfdGlsaW5nOiA7Cj4gICAKPiAgIG91dF91bmxvY2s6Cj4gICAJaW50ZWxfcnVudGltZV9w bV9wdXQoJmk5MTUtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOwo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2Jq KTsKPiAgIG91dDoKPiAgIAlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmMKPiBpbmRleCBl ZTVkYzEzYTMwYjMuLjY3MThkYTIwZjM1ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5jCj4gQEAgLTE1NCw5ICsxNTQsNyBA QCBpbnQgaWd0X2dwdV9maWxsX2R3KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAgIAo+ICAg CWk5MTVfcmVxdWVzdF9hZGQocnEpOwo+ICAgCj4gLQlpOTE1X3ZtYV91bnBpbihiYXRjaCk7Cj4g LQlpOTE1X3ZtYV9jbG9zZShiYXRjaCk7Cj4gLQlpOTE1X3ZtYV9wdXQoYmF0Y2gpOwo+ICsJaTkx NV92bWFfdW5waW5fYW5kX3JlbGVhc2UoJmJhdGNoLCAwKTsKPiAgIAo+ICAgCXJldHVybiAwOwo+ ICAgCj4gQEAgLTE2NSw3ICsxNjMsNiBAQCBpbnQgaWd0X2dwdV9maWxsX2R3KHN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZSwKPiAgIGVycl9yZXF1ZXN0Ogo+ICAgCWk5MTVfcmVxdWVzdF9hZGQocnEp Owo+ICAgZXJyX2JhdGNoOgo+IC0JaTkxNV92bWFfdW5waW4oYmF0Y2gpOwo+IC0JaTkxNV92bWFf cHV0KGJhdGNoKTsKPiArCWk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKCZiYXRjaCwgMCk7Cj4g ICAJcmV0dXJuIGVycjsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMKPiBpbmRl eCBkNDhlYzlhNzZlZDEuLmMyYWZmZmI5NDQ3NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9ndC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3QuYwo+IEBAIC0yMDcsMTEgKzIwNywxMiBAQCB2b2lkIGludGVsX2d0X2ZsdXNoX2dndHRf d3JpdGVzKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gICAKPiAgIAl3aXRoX2ludGVsX3J1bnRpbWVf cG0oJmk5MTUtPnJ1bnRpbWVfcG0sIHdha2VyZWYpIHsKPiAgIAkJc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKPiArCQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICAgCj4g LQkJc3Bpbl9sb2NrX2lycSgmdW5jb3JlLT5sb2NrKTsKPiArCQlzcGluX2xvY2tfaXJxc2F2ZSgm dW5jb3JlLT5sb2NrLCBmbGFncyk7Cj4gICAJCWludGVsX3VuY29yZV9wb3N0aW5nX3JlYWRfZnco dW5jb3JlLAo+ICAgCQkJCQkgICAgIFJJTkdfSEVBRChSRU5ERVJfUklOR19CQVNFKSk7Cj4gLQkJ c3Bpbl91bmxvY2tfaXJxKCZ1bmNvcmUtPmxvY2spOwo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnVuY29yZS0+bG9jaywgZmxhZ3MpOwo+ICAgCX0KPiAgIH0KPiAgIAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMKPiBpbmRleCBhYzU1YTBkMDU0YmQuLjg1 NWU5N2NjYWY5ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9y aW5nYnVmZmVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVm ZmVyLmMKPiBAQCAtMTMzNiwxNSArMTMzNiwxMyBAQCB2b2lkIGludGVsX3JpbmdfZnJlZShzdHJ1 Y3Qga3JlZiAqcmVmKQo+ICAgewo+ICAgCXN0cnVjdCBpbnRlbF9yaW5nICpyaW5nID0gY29udGFp bmVyX29mKHJlZiwgdHlwZW9mKCpyaW5nKSwgcmVmKTsKPiAgIAo+IC0JaTkxNV92bWFfY2xvc2Uo cmluZy0+dm1hKTsKPiAgIAlpOTE1X3ZtYV9wdXQocmluZy0+dm1hKTsKPiAtCj4gICAJa2ZyZWUo cmluZyk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIF9fcmluZ19jb250ZXh0X2Zpbmkoc3Ry dWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICAgewo+IC0JaTkxNV9nZW1fb2JqZWN0X3B1dChjZS0+ c3RhdGUtPm9iaik7Cj4gKwlpOTE1X3ZtYV9wdXQoY2UtPnN0YXRlKTsKPiAgIH0KPiAgIAo+ICAg c3RhdGljIHZvaWQgcmluZ19jb250ZXh0X2Rlc3Ryb3koc3RydWN0IGtyZWYgKnJlZikKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYwo+IGluZGV4IGEwMDk4 ZmMzNTkyMS4uZTUzZWVhMTA1MGY4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3NlbGZ0ZXN0X2hhbmdjaGVjay5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv c2VsZnRlc3RfaGFuZ2NoZWNrLmMKPiBAQCAtMTEyNywxNSArMTEyNywxNCBAQCBzdGF0aWMgaW50 IGV2aWN0X3ZtYSh2b2lkICpkYXRhKQo+ICAgewo+ICAgCXN0cnVjdCBldmljdF92bWEgKmFyZyA9 IGRhdGE7Cj4gICAJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0gPSBhcmctPnZtYS0+dm07 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHZtLT5pOTE1Owo+ICAgCXN0cnVj dCBkcm1fbW1fbm9kZSBldmljdCA9IGFyZy0+dm1hLT5ub2RlOwo+ICAgCWludCBlcnI7Cj4gICAK PiAgIAljb21wbGV0ZSgmYXJnLT5jb21wbGV0aW9uKTsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwltdXRleF9sb2NrKCZ2bS0+bXV0ZXgpOwo+ICAgCWVy ciA9IGk5MTVfZ2VtX2V2aWN0X2Zvcl9ub2RlKHZtLCAmZXZpY3QsIDApOwo+IC0JbXV0ZXhfdW5s b2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCW11dGV4X3VubG9jaygmdm0tPm11dGV4 KTsKPiAgIAo+ICAgCXJldHVybiBlcnI7Cj4gICB9Cj4gQEAgLTExNDMsMzkgKzExNDIsMzMgQEAg c3RhdGljIGludCBldmljdF92bWEodm9pZCAqZGF0YSkKPiAgIHN0YXRpYyBpbnQgZXZpY3RfZmVu Y2Uodm9pZCAqZGF0YSkKPiAgIHsKPiAgIAlzdHJ1Y3QgZXZpY3Rfdm1hICphcmcgPSBkYXRhOwo+ IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmctPnZtYS0+dm0tPmk5MTU7Cj4g ICAJaW50IGVycjsKPiAgIAo+ICAgCWNvbXBsZXRlKCZhcmctPmNvbXBsZXRpb24pOwo+ICAgCj4g LQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gICAJLyogTWFyayB0 aGUgZmVuY2UgcmVnaXN0ZXIgYXMgZGlydHkgdG8gZm9yY2UgdGhlIG1taW8gdXBkYXRlLiAqLwo+ ICAgCWVyciA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdGlsaW5nKGFyZy0+dm1hLT5vYmosIEk5MTVf VElMSU5HX1ksIDUxMik7Cj4gICAJaWYgKGVycikgewo+ICAgCQlwcl9lcnIoIkludmFsaWQgWS10 aWxpbmcgc2V0dGluZ3M7IGVycjolZFxuIiwgZXJyKTsKPiAtCQlnb3RvIG91dF91bmxvY2s7Cj4g KwkJcmV0dXJuIGVycjsKPiAgIAl9Cj4gICAKPiAgIAllcnIgPSBpOTE1X3ZtYV9waW4oYXJnLT52 bWEsIDAsIDAsIFBJTl9HTE9CQUwgfCBQSU5fTUFQUEFCTEUpOwo+ICAgCWlmIChlcnIpIHsKPiAg IAkJcHJfZXJyKCJVbmFibGUgdG8gcGluIHZtYSBmb3IgWS10aWxlZCBmZW5jZTsgZXJyOiVkXG4i LCBlcnIpOwo+IC0JCWdvdG8gb3V0X3VubG9jazsKPiArCQlyZXR1cm4gZXJyOwo+ICAgCX0KPiAg IAo+ICAgCWVyciA9IGk5MTVfdm1hX3Bpbl9mZW5jZShhcmctPnZtYSk7Cj4gICAJaTkxNV92bWFf dW5waW4oYXJnLT52bWEpOwo+ICAgCWlmIChlcnIpIHsKPiAgIAkJcHJfZXJyKCJVbmFibGUgdG8g cGluIFktdGlsZWQgZmVuY2U7IGVycjolZFxuIiwgZXJyKTsKPiAtCQlnb3RvIG91dF91bmxvY2s7 Cj4gKwkJcmV0dXJuIGVycjsKPiAgIAl9Cj4gICAKPiAgIAlpOTE1X3ZtYV91bnBpbl9mZW5jZShh cmctPnZtYSk7Cj4gICAKPiAtb3V0X3VubG9jazoKPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJt LnN0cnVjdF9tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIGVycjsKPiArCXJldHVybiAwOwo+ICAgfQo+ ICAgCj4gICBzdGF0aWMgaW50IF9faWd0X3Jlc2V0X2V2aWN0X3ZtYShzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvYXBlcnR1cmVfZ20u YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9hcGVydHVyZV9nbS5jCj4gaW5kZXggNWZmMjQz N2IyOTk4Li5kOTk2YmJjN2VhNTkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Z0L2FwZXJ0dXJlX2dtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvYXBlcnR1 cmVfZ20uYwo+IEBAIC02MSwxNCArNjEsMTQgQEAgc3RhdGljIGludCBhbGxvY19nbShzdHJ1Y3Qg aW50ZWxfdmdwdSAqdmdwdSwgYm9vbCBoaWdoX2dtKQo+ICAgCQlmbGFncyA9IFBJTl9NQVBQQUJM RTsKPiAgIAl9Cj4gICAKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4 KTsKPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5nZ3R0LnZtLm11dGV4KTsKPiAgIAltbWlvX2h3 X2FjY2Vzc19wcmUoZGV2X3ByaXYpOwo+ICAgCXJldCA9IGk5MTVfZ2VtX2d0dF9pbnNlcnQoJmRl dl9wcml2LT5nZ3R0LnZtLCBub2RlLAo+ICAgCQkJCSAgc2l6ZSwgSTkxNV9HVFRfUEFHRV9TSVpF LAo+ICAgCQkJCSAgSTkxNV9DT0xPUl9VTkVWSUNUQUJMRSwKPiAgIAkJCQkgIHN0YXJ0LCBlbmQs IGZsYWdzKTsKPiAgIAltbWlvX2h3X2FjY2Vzc19wb3N0KGRldl9wcml2KTsKPiAtCW11dGV4X3Vu bG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZf cHJpdi0+Z2d0dC52bS5tdXRleCk7Cj4gICAJaWYgKHJldCkKPiAgIAkJZ3Z0X2VycigiZmFpbCB0 byBhbGxvYyAlcyBnbSBzcGFjZSBmcm9tIGhvc3RcbiIsCj4gICAJCQloaWdoX2dtID8gImhpZ2gi IDogImxvdyIpOwo+IEBAIC05OCw5ICs5OCw5IEBAIHN0YXRpYyBpbnQgYWxsb2NfdmdwdV9nbShz dHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSkKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgb3V0X2ZyZWVf YXBlcnR1cmU6Cj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g KwltdXRleF9sb2NrKCZkZXZfcHJpdi0+Z2d0dC52bS5tdXRleCk7Cj4gICAJZHJtX21tX3JlbW92 ZV9ub2RlKCZ2Z3B1LT5nbS5sb3dfZ21fbm9kZSk7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2 LT5kcm0uc3RydWN0X211dGV4KTsKPiArCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmdndHQudm0u bXV0ZXgpOwo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiBAQCAtMTA4LDEwICsxMDgsMTAg QEAgc3RhdGljIHZvaWQgZnJlZV92Z3B1X2dtKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1KQo+ICAg ewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHZncHUtPmd2dC0+ZGV2 X3ByaXY7Cj4gICAKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsK PiArCW11dGV4X2xvY2soJmRldl9wcml2LT5nZ3R0LnZtLm11dGV4KTsKPiAgIAlkcm1fbW1fcmVt b3ZlX25vZGUoJnZncHUtPmdtLmxvd19nbV9ub2RlKTsKPiAgIAlkcm1fbW1fcmVtb3ZlX25vZGUo JnZncHUtPmdtLmhpZ2hfZ21fbm9kZSk7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0u c3RydWN0X211dGV4KTsKPiArCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmdndHQudm0ubXV0ZXgp Owo+ICAgfQo+ICAgCj4gICAvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9hY3RpdmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmMKPiBpbmRl eCA2YTQ0N2YxZDAxMTAuLjZhMzdlZDUyOTU3YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2FjdGl2ZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9h Y3RpdmUuYwo+IEBAIC0xNDYsNiArMTQ2LDcgQEAgX19hY3RpdmVfcmV0aXJlKHN0cnVjdCBpOTE1 X2FjdGl2ZSAqcmVmKQo+ICAgCWlmICghcmV0aXJlKQo+ICAgCQlyZXR1cm47Cj4gICAKPiArCUdF TV9CVUdfT04ocmN1X2FjY2Vzc19wb2ludGVyKHJlZi0+ZXhjbCkpOwo+ICAgCXJidHJlZV9wb3N0 b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShpdCwgbiwgJnJvb3QsIG5vZGUpIHsKPiAgIAkJR0VN X0JVR19PTihpOTE1X2FjdGl2ZV9yZXF1ZXN0X2lzc2V0KCZpdC0+YmFzZSkpOwo+ICAgCQlrbWVt X2NhY2hlX2ZyZWUoZ2xvYmFsLnNsYWJfY2FjaGUsIGl0KTsKPiBAQCAtMjQ1LDYgKzI0Niw4IEBA IHZvaWQgX19pOTE1X2FjdGl2ZV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ ICAgCXJlZi0+ZmxhZ3MgPSAwOwo+ICAgCXJlZi0+YWN0aXZlID0gYWN0aXZlOwo+ICAgCXJlZi0+ cmV0aXJlID0gcmV0aXJlOwo+ICsKPiArCXJlZi0+ZXhjbCA9IE5VTEw7Cj4gICAJcmVmLT50cmVl ID0gUkJfUk9PVDsKPiAgIAlyZWYtPmNhY2hlID0gTlVMTDsKPiAgIAlpbml0X2xsaXN0X2hlYWQo JnJlZi0+cHJlYWxsb2NhdGVkX2JhcnJpZXJzKTsKPiBAQCAtMzQxLDYgKzM0NCw0NSBAQCBpbnQg aTkxNV9hY3RpdmVfcmVmKHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmLAo+ICAgCXJldHVybiBlcnI7 Cj4gICB9Cj4gICAKPiArc3RhdGljIHZvaWQgZXhjbF9jYihzdHJ1Y3QgZG1hX2ZlbmNlICpmLCBz dHJ1Y3QgZG1hX2ZlbmNlX2NiICpjYikKPiArewo+ICsJc3RydWN0IGk5MTVfYWN0aXZlICpyZWYg PSBjb250YWluZXJfb2YoY2IsIHR5cGVvZigqcmVmKSwgZXhjbF9jYik7Cj4gKwo+ICsJUkNVX0lO SVRfUE9JTlRFUihyZWYtPmV4Y2wsIE5VTEwpOwo+ICsJZG1hX2ZlbmNlX3B1dChmKTsKPiArCj4g KwlhY3RpdmVfcmV0aXJlKHJlZik7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9hY3RpdmVfc2V0X2V4 Y2x1c2l2ZShzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZiwgc3RydWN0IGRtYV9mZW5jZSAqZikKPiAr ewo+ICsJR0VNX0JVR19PTihpOTE1X2FjdGl2ZV9pc19pZGxlKHJlZikpOwo+ICsKPiArCWRtYV9m ZW5jZV9nZXQoZik7Cj4gKwo+ICsJcmN1X3JlYWRfbG9jaygpOwo+ICsJaWYgKHJjdV9hY2Nlc3Nf cG9pbnRlcihyZWYtPmV4Y2wpKSB7Cj4gKwkJc3RydWN0IGRtYV9mZW5jZSAqb2xkOwo+ICsKPiAr CQlvbGQgPSBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZlKCZyZWYtPmV4Y2wpOwo+ICsJCWlmIChvbGQp IHsKPiArCQkJaWYgKGRtYV9mZW5jZV9yZW1vdmVfY2FsbGJhY2sob2xkLCAmcmVmLT5leGNsX2Ni KSkKPiArCQkJCWF0b21pY19kZWMoJnJlZi0+Y291bnQpOwo+ICsJCQlkbWFfZmVuY2VfcHV0KG9s ZCk7Cj4gKwkJfQo+ICsJfQo+ICsJcmN1X3JlYWRfdW5sb2NrKCk7Cj4gKwo+ICsJYXRvbWljX2lu YygmcmVmLT5jb3VudCk7Cj4gKwlyY3VfYXNzaWduX3BvaW50ZXIocmVmLT5leGNsLCBmKTsKPiAr Cj4gKwlpZiAoZG1hX2ZlbmNlX2FkZF9jYWxsYmFjayhmLCAmcmVmLT5leGNsX2NiLCBleGNsX2Ni KSkgewo+ICsJCVJDVV9JTklUX1BPSU5URVIocmVmLT5leGNsLCBOVUxMKTsKPiArCQlhdG9taWNf ZGVjKCZyZWYtPmNvdW50KTsKPiArCQlkbWFfZmVuY2VfcHV0KGYpOwoKSXMgdGhpcyBzb21lIHNp bGVudCBmYWlsdXJlIHBhdGg/Cgo+ICsJfQo+ICt9Cj4gKwo+ICAgaW50IGk5MTVfYWN0aXZlX2Fj cXVpcmUoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpCj4gICB7Cj4gICAJaW50IGVycjsKPiBAQCAt Mzk5LDYgKzQ0MSwyNSBAQCB2b2lkIGk5MTVfYWN0aXZlX3VuZ3JhYihzdHJ1Y3QgaTkxNV9hY3Rp dmUgKnJlZikKPiAgIAlfX2FjdGl2ZV91bmdyYWIocmVmKTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMg aW50IGV4Y2xfd2FpdChzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZikKPiArewo+ICsJc3RydWN0IGRt YV9mZW5jZSAqb2xkOwo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJaWYgKCFyY3VfYWNjZXNzX3Bv aW50ZXIocmVmLT5leGNsKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyY3VfcmVhZF9sb2NrKCk7 Cj4gKwlvbGQgPSBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZlKCZyZWYtPmV4Y2wpOwo+ICsJcmN1X3Jl YWRfdW5sb2NrKCk7Cj4gKwlpZiAob2xkKSB7Cj4gKwkJZXJyID0gZG1hX2ZlbmNlX3dhaXQob2xk LCB0cnVlKTsKPiArCQlkbWFfZmVuY2VfcHV0KG9sZCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGVy cjsKPiArfQo+ICsKPiAgIGludCBpOTE1X2FjdGl2ZV93YWl0KHN0cnVjdCBpOTE1X2FjdGl2ZSAq cmVmKQo+ICAgewo+ICAgCXN0cnVjdCBhY3RpdmVfbm9kZSAqaXQsICpuOwo+IEBAIC00MTksNiAr NDgwLDEwIEBAIGludCBpOTE1X2FjdGl2ZV93YWl0KHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmKQo+ ICAgCQlyZXR1cm4gMDsKPiAgIAl9Cj4gICAKPiArCWVyciA9IGV4Y2xfd2FpdChyZWYpOwo+ICsJ aWYgKGVycikKPiArCQlnb3RvIG91dDsKPiArCj4gICAJcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFj aF9lbnRyeV9zYWZlKGl0LCBuLCAmcmVmLT50cmVlLCBub2RlKSB7Cj4gICAJCWlmIChpc19iYXJy aWVyKCZpdC0+YmFzZSkpIHsgLyogdW5jb25uZWN0ZWQgaWRsZS1iYXJyaWVyICovCj4gICAJCQll cnIgPSAtRUJVU1k7Cj4gQEAgLTQzMCw2ICs0OTUsNyBAQCBpbnQgaTkxNV9hY3RpdmVfd2FpdChz dHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZikKPiAgIAkJCWJyZWFrOwo+ICAgCX0KPiAgIAo+ICtvdXQ6 Cj4gICAJX19hY3RpdmVfcmV0aXJlKHJlZik7Cj4gICAJaWYgKGVycikKPiAgIAkJcmV0dXJuIGVy cjsKPiBAQCAtNDU0LDI2ICs1MjAsMjIgQEAgaW50IGk5MTVfcmVxdWVzdF9hd2FpdF9hY3RpdmVf cmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgIAo+ICAgaW50IGk5MTVfcmVxdWVz dF9hd2FpdF9hY3RpdmUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHN0cnVjdCBpOTE1X2FjdGl2 ZSAqcmVmKQo+ICAgewo+IC0Jc3RydWN0IGFjdGl2ZV9ub2RlICppdCwgKm47Cj4gLQlpbnQgZXJy Owo+IC0KPiAtCWlmIChSQl9FTVBUWV9ST09UKCZyZWYtPnRyZWUpKQo+IC0JCXJldHVybiAwOwo+ ICsJaW50IGVyciA9IDA7Cj4gICAKPiAtCS8qIGF3YWl0IGFsbG9jYXRlcyBhbmQgc28gd2UgbmVl ZCB0byBhdm9pZCBoaXR0aW5nIHRoZSBzaHJpbmtlciAqLwo+IC0JZXJyID0gaTkxNV9hY3RpdmVf YWNxdWlyZShyZWYpOwo+IC0JaWYgKGVycikKPiAtCQlyZXR1cm4gZXJyOwo+ICsJaWYgKHJjdV9h Y2Nlc3NfcG9pbnRlcihyZWYtPmV4Y2wpKSB7Cj4gKwkJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7 Cj4gICAKPiAtCW11dGV4X2xvY2soJnJlZi0+bXV0ZXgpOwo+IC0JcmJ0cmVlX3Bvc3RvcmRlcl9m b3JfZWFjaF9lbnRyeV9zYWZlKGl0LCBuLCAmcmVmLT50cmVlLCBub2RlKSB7Cj4gLQkJZXJyID0g aTkxNV9yZXF1ZXN0X2F3YWl0X2FjdGl2ZV9yZXF1ZXN0KHJxLCAmaXQtPmJhc2UpOwo+IC0JCWlm IChlcnIpCj4gLQkJCWJyZWFrOwo+ICsJCXJjdV9yZWFkX2xvY2soKTsKPiArCQlmZW5jZSA9IGRt YV9mZW5jZV9nZXRfcmN1X3NhZmUoJnJlZi0+ZXhjbCk7Cj4gKwkJcmN1X3JlYWRfdW5sb2NrKCk7 Cj4gKwkJaWYgKGZlbmNlKSB7Cj4gKwkJCWVyciA9IGk5MTVfcmVxdWVzdF9hd2FpdF9kbWFfZmVu Y2UocnEsIGZlbmNlKTsKPiArCQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gKwkJfQo+ICAgCX0K PiAtCW11dGV4X3VubG9jaygmcmVmLT5tdXRleCk7Cj4gICAKPiAtCWk5MTVfYWN0aXZlX3JlbGVh c2UocmVmKTsKPiArCS8qIEluIHRoZSBmdXR1cmUgd2UgbWF5IGNob29zZSB0byBhd2FpdCBvbiBh bGwgZmVuY2VzICovCj4gKwoKVGhpcyBpcyBjb21wbGV0ZWx5IGNoYW5nZWQgdG8ganVzdCB3YWl0 IG9uIHRoZSAiZXhjbHVzaXZlIiBmZW5jZT8gV2hhdCAKYWJvdXQgdGhlIHRyZWUgb2Ygbm9kZXM/ IEl0J3Mgc3RpbGwgaW4gdGhlIGRhdGEgc3RydWN0dXJlIGFuZCBtYW5hZ2VkIAplbHNld2hlcmUu IE5vdCBuZWVkZWQgYW55IG1vcmUgdW50aWwgImZ1dHVyZSIgZnJvbSB0aGUgY29tbWVudD8KClRo aXMgbXVjaCBmb3Igbm93LgoKUmVnYXJkcywKClR2cnRrbwoKPiAgIAlyZXR1cm4gZXJyOwo+ICAg fQo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZS5oCj4gaW5kZXggZjk1MDU4Zjk5MDU3 Li5hZjNkNTM2ZTI2ZmQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9h Y3RpdmUuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmgKPiBAQCAt MzczLDYgKzM3MywxMyBAQCBpbnQgaTkxNV9hY3RpdmVfcmVmKHN0cnVjdCBpOTE1X2FjdGl2ZSAq cmVmLAo+ICAgCQkgICAgc3RydWN0IGludGVsX3RpbWVsaW5lICp0bCwKPiAgIAkJICAgIHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxKTsKPiAgIAo+ICt2b2lkIGk5MTVfYWN0aXZlX3NldF9leGNsdXNp dmUoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYsIHN0cnVjdCBkbWFfZmVuY2UgKmYpOwo+ICsKPiAr c3RhdGljIGlubGluZSBib29sIGk5MTVfYWN0aXZlX2hhc19leGNsdXNpdmUoc3RydWN0IGk5MTVf YWN0aXZlICpyZWYpCj4gK3sKPiArCXJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIocmVmLT5leGNs KTsKPiArfQo+ICsKPiAgIGludCBpOTE1X2FjdGl2ZV93YWl0KHN0cnVjdCBpOTE1X2FjdGl2ZSAq cmVmKTsKPiAgIAo+ICAgaW50IGk5MTVfcmVxdWVzdF9hd2FpdF9hY3RpdmUoc3RydWN0IGk5MTVf cmVxdWVzdCAqcnEsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0 aXZlX3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZV90eXBlcy5oCj4g aW5kZXggMTg1NGU3ZDE2OGMxLi44NmU3YTIzMmVhM2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9hY3RpdmVfdHlwZXMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfYWN0aXZlX3R5cGVzLmgKPiBAQCAtOCw2ICs4LDcgQEAKPiAgICNkZWZpbmUgX0k5 MTVfQUNUSVZFX1RZUEVTX0hfCj4gICAKPiAgICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2RtYS1mZW5jZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2xsaXN0Lmg+ Cj4gICAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPiAgICNpbmNsdWRlIDxsaW51eC9yYnRyZWUu aD4KPiBAQCAtNTEsNiArNTIsMTAgQEAgc3RydWN0IGk5MTVfYWN0aXZlIHsKPiAgIAlzdHJ1Y3Qg bXV0ZXggbXV0ZXg7Cj4gICAJYXRvbWljX3QgY291bnQ7Cj4gICAKPiArCS8qIFByZWFsbG9jYXRl ZCAiZXhjbHVzaXZlIiBub2RlICovCj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlIF9fcmN1ICpleGNsOwo+ ICsJc3RydWN0IGRtYV9mZW5jZV9jYiBleGNsX2NiOwoKV2hhdCBmb3IgYW5kIGhvdyBpcyB0aGUg ImV4Y2x1c2l2ZSIgbm9kZSB1c2VkIGZvcj8gV2hlcmUgaXQgaXMgCnByZS1hbGxvY2F0ZWQgYW5k IGJ5IHdob20/IFdoeSBpdCBpcyBpbiBkb3VibGUgcXVvdGVzPwoKPiArCj4gICAJdW5zaWduZWQg bG9uZyBmbGFnczsKPiAgICNkZWZpbmUgSTkxNV9BQ1RJVkVfR1JBQl9CSVQgMAo+ICAgCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5kZXggODE0ZjYyZmNhNzI3Li4zZWVkMmVmYThkMTMgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAtNjIsMjAgKzYyLDMxIEBACj4gICAjaW5j bHVkZSAiaW50ZWxfcG0uaCIKPiAgIAo+ICAgc3RhdGljIGludAo+IC1pbnNlcnRfbWFwcGFibGVf bm9kZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0LAo+IC0gICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZHJtX21tX25vZGUgKm5vZGUsIHUzMiBzaXplKQo+ICtpbnNlcnRfbWFwcGFibGVfbm9kZShz dHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0LCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsIHUzMiBzaXpl KQo+ICAgewo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGli bGUoJmdndHQtPnZtLm11dGV4KTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4g ICAJbWVtc2V0KG5vZGUsIDAsIHNpemVvZigqbm9kZSkpOwo+IC0JcmV0dXJuIGRybV9tbV9pbnNl cnRfbm9kZV9pbl9yYW5nZSgmZ2d0dC0+dm0ubW0sIG5vZGUsCj4gLQkJCQkJICAgc2l6ZSwgMCwg STkxNV9DT0xPUl9VTkVWSUNUQUJMRSwKPiAtCQkJCQkgICAwLCBnZ3R0LT5tYXBwYWJsZV9lbmQs Cj4gLQkJCQkJICAgRFJNX01NX0lOU0VSVF9MT1cpOwo+ICsJZXJyID0gZHJtX21tX2luc2VydF9u b2RlX2luX3JhbmdlKCZnZ3R0LT52bS5tbSwgbm9kZSwKPiArCQkJCQkgIHNpemUsIDAsIEk5MTVf Q09MT1JfVU5FVklDVEFCTEUsCj4gKwkJCQkJICAwLCBnZ3R0LT5tYXBwYWJsZV9lbmQsCj4gKwkJ CQkJICBEUk1fTU1fSU5TRVJUX0xPVyk7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5t dXRleCk7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQKPiAt cmVtb3ZlX21hcHBhYmxlX25vZGUoc3RydWN0IGRybV9tbV9ub2RlICpub2RlKQo+ICtyZW1vdmVf bWFwcGFibGVfbm9kZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0LCBzdHJ1Y3QgZHJtX21tX25vZGUg Km5vZGUpCj4gICB7Cj4gKwltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJZHJtX21t X3JlbW92ZV9ub2RlKG5vZGUpOwo+ICsJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4g ICB9Cj4gICAKPiAgIGludAo+IEBAIC04Nyw3ICs5OCw4IEBAIGk5MTVfZ2VtX2dldF9hcGVydHVy ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgCXN0cnVjdCBp OTE1X3ZtYSAqdm1hOwo+ICAgCXU2NCBwaW5uZWQ7Cj4gICAKPiAtCW11dGV4X2xvY2soJmdndHQt PnZtLm11dGV4KTsKPiArCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdndHQtPnZtLm11 dGV4KSkKPiArCQlyZXR1cm4gLUVJTlRSOwo+ICAgCj4gICAJcGlubmVkID0gZ2d0dC0+dm0ucmVz ZXJ2ZWQ7Cj4gICAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZnZ3R0LT52bS5ib3VuZF9saXN0 LCB2bV9saW5rKQo+IEBAIC0xMDksMjAgKzEyMSwzMSBAQCBpbnQgaTkxNV9nZW1fb2JqZWN0X3Vu YmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCUxJU1RfSEVBRChzdGls bF9pbl9saXN0KTsKPiAgIAlpbnQgcmV0ID0gMDsKPiAgIAo+IC0JbG9ja2RlcF9hc3NlcnRfaGVs ZCgmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKPiAtCj4gICAJc3Bpbl9sb2NrKCZvYmot PnZtYS5sb2NrKTsKPiAgIAl3aGlsZSAoIXJldCAmJiAodm1hID0gbGlzdF9maXJzdF9lbnRyeV9v cl9udWxsKCZvYmotPnZtYS5saXN0LAo+ICAgCQkJCQkJICAgICAgIHN0cnVjdCBpOTE1X3ZtYSwK PiAgIAkJCQkJCSAgICAgICBvYmpfbGluaykpKSB7Cj4gKwkJc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0gPSB2bWEtPnZtOwo+ICsKPiArCQlyZXQgPSAtRUJVU1k7Cj4gKwkJaWYgKCFpOTE1 X3ZtX3RyeW9wZW4odm0pKQo+ICsJCQlicmVhazsKPiArCj4gICAJCWxpc3RfbW92ZV90YWlsKCZ2 bWEtPm9ial9saW5rLCAmc3RpbGxfaW5fbGlzdCk7Cj4gICAJCXNwaW5fdW5sb2NrKCZvYmotPnZt YS5sb2NrKTsKPiAgIAo+IC0JCXJldCA9IC1FQlVTWTsKPiAgIAkJaWYgKGZsYWdzICYgSTkxNV9H RU1fT0JKRUNUX1VOQklORF9BQ1RJVkUgfHwKPiAtCQkgICAgIWk5MTVfdm1hX2lzX2FjdGl2ZSh2 bWEpKQo+IC0JCQlyZXQgPSBpOTE1X3ZtYV91bmJpbmQodm1hKTsKPiArCQkgICAgIWk5MTVfdm1h X2lzX2FjdGl2ZSh2bWEpKSB7Cj4gKwkJCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtID0g dm1hLT52bTsKPiArCj4gKwkJCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdm0tPm11 dGV4KTsKPiArCQkJaWYgKCFyZXQpIHsKPiArCQkJCXJldCA9IGk5MTVfdm1hX3VuYmluZCh2bWEp Owo+ICsJCQkJbXV0ZXhfdW5sb2NrKCZ2bS0+bXV0ZXgpOwo+ICsJCQl9Cj4gKwkJfQo+ICAgCj4g KwkJaTkxNV92bV9jbG9zZSh2bSk7Cj4gICAJCXNwaW5fbG9jaygmb2JqLT52bWEubG9jayk7Cj4g ICAJfQo+ICAgCWxpc3Rfc3BsaWNlKCZzdGlsbF9pbl9saXN0LCAmb2JqLT52bWEubGlzdCk7Cj4g QEAgLTMzOCwxMCArMzYxLDYgQEAgaTkxNV9nZW1fZ3R0X3ByZWFkKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCj4gICAJdTY0IHJlbWFpbiwgb2Zmc2V0Owo+ICAgCWludCByZXQ7Cj4g ICAKPiAtCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+ICAgCXdha2VyZWYgPSBp bnRlbF9ydW50aW1lX3BtX2dldCgmaTkxNS0+cnVudGltZV9wbSk7Cj4gICAJdm1hID0gRVJSX1BU UigtRU5PREVWKTsKPiAgIAlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc190aWxlZChvYmopKQo+IEBA IC0zNTUsMTIgKzM3NCwxMCBAQCBpOTE1X2dlbV9ndHRfcHJlYWQoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiAgIAl9IGVsc2Ugewo+ICAgCQlyZXQgPSBpbnNlcnRfbWFwcGFibGVf bm9kZShnZ3R0LCAmbm9kZSwgUEFHRV9TSVpFKTsKPiAgIAkJaWYgKHJldCkKPiAtCQkJZ290byBv dXRfdW5sb2NrOwo+ICsJCQlnb3RvIG91dF9ycG07Cj4gICAJCUdFTV9CVUdfT04oIWRybV9tbV9u b2RlX2FsbG9jYXRlZCgmbm9kZSkpOwo+ICAgCX0KPiAgIAo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gICAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2xvY2tf aW50ZXJydXB0aWJsZShvYmopOwo+ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gb3V0X3VucGluOwo+ IEBAIC00MTQsMTcgKzQzMSwxNCBAQCBpOTE1X2dlbV9ndHRfcHJlYWQoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPiAgIAo+ICAgCWk5MTVfZ2VtX29iamVjdF91bmxvY2tfZmVuY2Uo b2JqLCBmZW5jZSk7Cj4gICBvdXRfdW5waW46Cj4gLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiAgIAlpZiAoZHJtX21tX25vZGVfYWxsb2NhdGVkKCZub2RlKSkgewo+ICAg CQlnZ3R0LT52bS5jbGVhcl9yYW5nZSgmZ2d0dC0+dm0sIG5vZGUuc3RhcnQsIG5vZGUuc2l6ZSk7 Cj4gLQkJcmVtb3ZlX21hcHBhYmxlX25vZGUoJm5vZGUpOwo+ICsJCXJlbW92ZV9tYXBwYWJsZV9u b2RlKGdndHQsICZub2RlKTsKPiAgIAl9IGVsc2Ugewo+ICAgCQlpOTE1X3ZtYV91bnBpbih2bWEp Owo+ICAgCX0KPiAtb3V0X3VubG9jazoKPiArb3V0X3JwbToKPiAgIAlpbnRlbF9ydW50aW1lX3Bt X3B1dCgmaTkxNS0+cnVudGltZV9wbSwgd2FrZXJlZik7Cj4gLQltdXRleF91bmxvY2soJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gQEAg LTUzMSwxMCArNTQ1LDYgQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCj4gICAJdm9pZCBfX3VzZXIgKnVzZXJfZGF0YTsKPiAgIAlpbnQg cmV0Owo+ICAgCj4gLQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAgIAlpZiAo aTkxNV9nZW1fb2JqZWN0X2hhc19zdHJ1Y3RfcGFnZShvYmopKSB7Cj4gICAJCS8qCj4gICAJCSAq IEF2b2lkIHdha2luZyB0aGUgZGV2aWNlIHVwIGlmIHdlIGNhbiBmYWxsYmFjaywgYXMKPiBAQCAt NTQ0LDEwICs1NTQsOCBAQCBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkJICogdXNpbmcgdGhlIGNhY2hlIGJ5cGFzcyBvZiBpbmRp cmVjdCBHR1RUIGFjY2Vzcy4KPiAgIAkJICovCj4gICAJCXdha2VyZWYgPSBpbnRlbF9ydW50aW1l X3BtX2dldF9pZl9pbl91c2UocnBtKTsKPiAtCQlpZiAoIXdha2VyZWYpIHsKPiAtCQkJcmV0ID0g LUVGQVVMVDsKPiAtCQkJZ290byBvdXRfdW5sb2NrOwo+IC0JCX0KPiArCQlpZiAoIXdha2VyZWYp Cj4gKwkJCXJldHVybiAtRUZBVUxUOwo+ICAgCX0gZWxzZSB7Cj4gICAJCS8qIE5vIGJhY2tpbmcg cGFnZXMsIG5vIGZhbGxiYWNrLCB3ZSBtdXN0IGZvcmNlIEdHVFQgYWNjZXNzICovCj4gICAJCXdh a2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChycG0pOwo+IEBAIC01NjksOCArNTc3LDYgQEAg aTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos Cj4gICAJCUdFTV9CVUdfT04oIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmbm9kZSkpOwo+ICAgCX0K PiAgIAo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gICAJ cmV0ID0gaTkxNV9nZW1fb2JqZWN0X2xvY2tfaW50ZXJydXB0aWJsZShvYmopOwo+ICAgCWlmIChy ZXQpCj4gICAJCWdvdG8gb3V0X3VucGluOwo+IEBAIC02MzQsMTggKzY0MCwxNSBAQCBpOTE1X2dl bV9ndHRfcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAo+ ICAgCWk5MTVfZ2VtX29iamVjdF91bmxvY2tfZmVuY2Uob2JqLCBmZW5jZSk7Cj4gICBvdXRfdW5w aW46Cj4gLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAlpbnRlbF9n dF9mbHVzaF9nZ3R0X3dyaXRlcyhnZ3R0LT52bS5ndCk7Cj4gICAJaWYgKGRybV9tbV9ub2RlX2Fs bG9jYXRlZCgmbm9kZSkpIHsKPiAgIAkJZ2d0dC0+dm0uY2xlYXJfcmFuZ2UoJmdndHQtPnZtLCBu b2RlLnN0YXJ0LCBub2RlLnNpemUpOwo+IC0JCXJlbW92ZV9tYXBwYWJsZV9ub2RlKCZub2RlKTsK PiArCQlyZW1vdmVfbWFwcGFibGVfbm9kZShnZ3R0LCAmbm9kZSk7Cj4gICAJfSBlbHNlIHsKPiAg IAkJaTkxNV92bWFfdW5waW4odm1hKTsKPiAgIAl9Cj4gICBvdXRfcnBtOgo+ICAgCWludGVsX3J1 bnRpbWVfcG1fcHV0KHJwbSwgd2FrZXJlZik7Cj4gLW91dF91bmxvY2s6Cj4gLQltdXRleF91bmxv Y2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAK PiBAQCAtOTY3LDggKzk3MCw2IEBAIGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAgCWlu dCByZXQ7Cj4gICAKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm9iai0+YmFzZS5kZXYtPnN0cnVj dF9tdXRleCk7Cj4gLQo+ICAgCWlmIChmbGFncyAmIFBJTl9NQVBQQUJMRSAmJgo+ICAgCSAgICAo IXZpZXcgfHwgdmlldy0+dHlwZSA9PSBJOTE1X0dHVFRfVklFV19OT1JNQUwpKSB7Cj4gICAJCS8q IElmIHRoZSByZXF1aXJlZCBzcGFjZSBpcyBsYXJnZXIgdGhhbiB0aGUgYXZhaWxhYmxlCj4gQEAg LTEwMTUsMTQgKzEwMTYsOSBAQCBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4oc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkJCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKPiAg IAkJfQo+ICAgCj4gLQkJV0FSTihpOTE1X3ZtYV9pc19waW5uZWQodm1hKSwKPiAtCQkgICAgICJi byBpcyBhbHJlYWR5IHBpbm5lZCBpbiBnZ3R0IHdpdGggaW5jb3JyZWN0IGFsaWdubWVudDoiCj4g LQkJICAgICAiIG9mZnNldD0lMDh4LCByZXEuYWxpZ25tZW50PSVsbHgsIgo+IC0JCSAgICAgIiBy ZXEubWFwX2FuZF9mZW5jZWFibGU9JWQsIHZtYS0+bWFwX2FuZF9mZW5jZWFibGU9JWRcbiIsCj4g LQkJICAgICBpOTE1X2dndHRfb2Zmc2V0KHZtYSksIGFsaWdubWVudCwKPiAtCQkgICAgICEhKGZs YWdzICYgUElOX01BUFBBQkxFKSwKPiAtCQkgICAgIGk5MTVfdm1hX2lzX21hcF9hbmRfZmVuY2Vh YmxlKHZtYSkpOwo+ICsJCW11dGV4X2xvY2soJnZtYS0+dm0tPm11dGV4KTsKPiAgIAkJcmV0ID0g aTkxNV92bWFfdW5iaW5kKHZtYSk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZ2bWEtPnZtLT5tdXRleCk7 Cj4gICAJCWlmIChyZXQpCj4gICAJCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICAgCX0KPiBAQCAt MTMyOCw3ICsxMzI0LDkgQEAgc3RhdGljIGludCBfX2ludGVsX2VuZ2luZXNfcmVjb3JkX2RlZmF1 bHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgCQkgKiBmcm9tIHRoZSBHVFQg dG8gcHJldmVudCBzdWNoIGFjY2lkZW50cyBhbmQgcmVjbGFpbSB0aGUKPiAgIAkJICogc3BhY2Uu Cj4gICAJCSAqLwo+ICsJCW11dGV4X2xvY2soJnN0YXRlLT52bS0+bXV0ZXgpOwo+ICAgCQllcnIg PSBpOTE1X3ZtYV91bmJpbmQoc3RhdGUpOwo+ICsJCW11dGV4X3VubG9jaygmc3RhdGUtPnZtLT5t dXRleCk7Cj4gICAJCWlmIChlcnIpCj4gICAJCQlnb3RvIG91dDsKPiAgIAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ldmljdC5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZXZpY3QuYwo+IGluZGV4IDdhYmNhYzNiNWUyZS4uNDRmNWI2MzhmYTQz IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2aWN0LmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ldmljdC5jCj4gQEAgLTQ3LDggKzQ3 LDcgQEAgc3RhdGljIGludCBnZ3R0X2ZsdXNoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQo+ICAgCSAqIGJvdW5kIGJ5IHRoZWlyIGFjdGl2ZSByZWZlcmVuY2UuCj4gICAJICovCj4gICAJ cmV0dXJuIGk5MTVfZ2VtX3dhaXRfZm9yX2lkbGUoaTkxNSwKPiAtCQkJCSAgICAgIEk5MTVfV0FJ VF9JTlRFUlJVUFRJQkxFIHwKPiAtCQkJCSAgICAgIEk5MTVfV0FJVF9MT0NLRUQsCj4gKwkJCQkg ICAgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSwKPiAgIAkJCQkgICAgICBNQVhfU0NIRURVTEVf VElNRU9VVCk7Cj4gICB9Cj4gICAKPiBAQCAtMTA0LDcgKzEwMyw3IEBAIGk5MTVfZ2VtX2V2aWN0 X3NvbWV0aGluZyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgIAlzdHJ1Y3QgaTkx NV92bWEgKmFjdGl2ZTsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxk KCZ2bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2 bS0+bXV0ZXgpOwo+ICAgCXRyYWNlX2k5MTVfZ2VtX2V2aWN0KHZtLCBtaW5fc2l6ZSwgYWxpZ25t ZW50LCBmbGFncyk7Cj4gICAKPiAgIAkvKgo+IEBAIC0xMjcsMTUgKzEyNiw2IEBAIGk5MTVfZ2Vt X2V2aWN0X3NvbWV0aGluZyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgIAkJCQkg ICAgbWluX3NpemUsIGFsaWdubWVudCwgY2FjaGVfbGV2ZWwsCj4gICAJCQkJICAgIHN0YXJ0LCBl bmQsIG1vZGUpOwo+ICAgCj4gLQkvKgo+IC0JICogUmV0aXJlIGJlZm9yZSB3ZSBzZWFyY2ggdGhl IGFjdGl2ZSBsaXN0LiBBbHRob3VnaCB3ZSBoYXZlCj4gLQkgKiByZWFzb25hYmxlIGFjY3VyYWN5 IGluIG91ciByZXRpcmVtZW50IGxpc3RzLCB3ZSBtYXkgaGF2ZQo+IC0JICogYSBzdHJheSBwaW4g KHByZXZlbnRpbmcgZXZpY3Rpb24pIHRoYXQgY2FuIG9ubHkgYmUgcmVzb2x2ZWQgYnkKPiAtCSAq IHJldGlyaW5nLgo+IC0JICovCj4gLQlpZiAoIShmbGFncyAmIFBJTl9OT05CTE9DSykpCj4gLQkJ aTkxNV9yZXRpcmVfcmVxdWVzdHMoZGV2X3ByaXYpOwo+IC0KPiAgIHNlYXJjaF9hZ2FpbjoKPiAg IAlhY3RpdmUgPSBOVUxMOwo+ICAgCUlOSVRfTElTVF9IRUFEKCZldmljdGlvbl9saXN0KTsKPiBA QCAtMjY5LDcgKzI1OSw3IEBAIGludCBpOTE1X2dlbV9ldmljdF9mb3Jfbm9kZShzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgIAlib29sIGNoZWNrX2NvbG9yOwo+ICAgCWludCByZXQg PSAwOwo+ICAgCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bS0+aTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bS0+bXV0ZXgpOwo+ICAgCUdFTV9CVUdf T04oIUlTX0FMSUdORUQoc3RhcnQsIEk5MTVfR1RUX1BBR0VfU0laRSkpOwo+ICAgCUdFTV9CVUdf T04oIUlTX0FMSUdORUQoZW5kLCBJOTE1X0dUVF9QQUdFX1NJWkUpKTsKPiAgIAo+IEBAIC0zNzUs NyArMzY1LDcgQEAgaW50IGk5MTVfZ2VtX2V2aWN0X3ZtKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtKQo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hLCAqbmV4dDsKPiAgIAlpbnQgcmV0Owo+ ICAgCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bS0+bXV0ZXgpOwo+ICAgCXRyYWNlX2k5MTVfZ2Vt X2V2aWN0X3ZtKHZtKTsKPiAgIAo+ICAgCS8qIFN3aXRjaCBiYWNrIHRvIHRoZSBkZWZhdWx0IGNv bnRleHQgaW4gb3JkZXIgdG8gdW5waW4KPiBAQCAtMzkwLDcgKzM4MCw2IEBAIGludCBpOTE1X2dl bV9ldmljdF92bShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgIAl9Cj4gICAKPiAg IAlJTklUX0xJU1RfSEVBRCgmZXZpY3Rpb25fbGlzdCk7Cj4gLQltdXRleF9sb2NrKCZ2bS0+bXV0 ZXgpOwo+ICAgCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmdm0tPmJvdW5kX2xpc3QsIHZtX2xp bmspIHsKPiAgIAkJaWYgKGk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKQo+ICAgCQkJY29udGludWU7 Cj4gQEAgLTM5OCw3ICszODcsNiBAQCBpbnQgaTkxNV9nZW1fZXZpY3Rfdm0oc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0pCj4gICAJCV9faTkxNV92bWFfcGluKHZtYSk7Cj4gICAJCWxpc3Rf YWRkKCZ2bWEtPmV2aWN0X2xpbmssICZldmljdGlvbl9saXN0KTsKPiAgIAl9Cj4gLQltdXRleF91 bmxvY2soJnZtLT5tdXRleCk7Cj4gICAKPiAgIAlyZXQgPSAwOwo+ICAgCWxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZSh2bWEsIG5leHQsICZldmljdGlvbl9saXN0LCBldmljdF9saW5rKSB7Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ZlbmNlX3JlZy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZmVuY2VfcmVnLmMKPiBpbmRleCA2MTVhOWY0ZWYz MGMuLjQxNGQ4Mzk2NjhkNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9mZW5jZV9yZWcuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2Zl bmNlX3JlZy5jCj4gQEAgLTIzNyw2ICsyMzcsNyBAQCBzdGF0aWMgaW50IGZlbmNlX3VwZGF0ZShz dHJ1Y3QgaTkxNV9mZW5jZV9yZWcgKmZlbmNlLAo+ICAgCj4gICAJb2xkID0geGNoZygmZmVuY2Ut PnZtYSwgTlVMTCk7Cj4gICAJaWYgKG9sZCkgewo+ICsJCS8qIFhYWCBJZGVhbGx5IHdlIHdvdWxk IG1vdmUgdGhlIHdhaXRpbmcgdG8gb3V0c2lkZSB0aGUgbXV0ZXggKi8KPiAgIAkJcmV0ID0gaTkx NV9hY3RpdmVfd2FpdCgmb2xkLT5hY3RpdmUpOwo+ICAgCQlpZiAocmV0KSB7Cj4gICAJCQlmZW5j ZS0+dm1hID0gb2xkOwo+IEBAIC0zMzEsMTMgKzMzMiwxNSBAQCBzdGF0aWMgc3RydWN0IGk5MTVf ZmVuY2VfcmVnICpmZW5jZV9maW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAg CXJldHVybiBFUlJfUFRSKC1FREVBRExLKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IF9faTkx NV92bWFfcGluX2ZlbmNlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICtpbnQgX19pOTE1X3ZtYV9w aW5fZmVuY2Uoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gICB7Cj4gICAJc3RydWN0IGk5MTVfZ2d0 dCAqZ2d0dCA9IGk5MTVfdm1fdG9fZ2d0dCh2bWEtPnZtKTsKPiAgIAlzdHJ1Y3QgaTkxNV9mZW5j ZV9yZWcgKmZlbmNlOwo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqc2V0ID0gaTkxNV9nZW1fb2JqZWN0 X2lzX3RpbGVkKHZtYS0+b2JqKSA/IHZtYSA6IE5VTEw7Cj4gICAJaW50IGVycjsKPiAgIAo+ICsJ bG9ja2RlcF9hc3NlcnRfaGVsZCgmdm1hLT52bS0+bXV0ZXgpOwo+ICsKPiAgIAkvKiBKdXN0IHVw ZGF0ZSBvdXIgcGxhY2UgaW4gdGhlIExSVSBpZiBvdXIgZmVuY2UgaXMgZ2V0dGluZyByZXVzZWQu ICovCj4gICAJaWYgKHZtYS0+ZmVuY2UpIHsKPiAgIAkJZmVuY2UgPSB2bWEtPmZlbmNlOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggNTZkMjdjZjA5YTNkLi5iMmU0ODI3 Nzg4ZmMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0xNTAsMTYg KzE1MCwxOCBAQCBzdGF0aWMgdm9pZCBnbWNoX2dndHRfaW52YWxpZGF0ZShzdHJ1Y3QgaTkxNV9n Z3R0ICpnZ3R0KQo+ICAgCj4gICBzdGF0aWMgaW50IHBwZ3R0X2JpbmRfdm1hKHN0cnVjdCBpOTE1 X3ZtYSAqdm1hLAo+ICAgCQkJICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsCj4g LQkJCSAgdTMyIHVudXNlZCkKPiArCQkJICB1MzIgZmxhZ3MpCj4gICB7Cj4gICAJdTMyIHB0ZV9m bGFnczsKPiAgIAlpbnQgZXJyOwo+ICAgCj4gLQlpZiAoIWk5MTVfdm1hX2lzX2JvdW5kKHZtYSwg STkxNV9WTUFfTE9DQUxfQklORCkpIHsKPiArCWlmIChmbGFncyAmIEk5MTVfVk1BX0FMTE9DKSB7 Cj4gICAJCWVyciA9IHZtYS0+dm0tPmFsbG9jYXRlX3ZhX3JhbmdlKHZtYS0+dm0sCj4gICAJCQkJ CQkgdm1hLT5ub2RlLnN0YXJ0LCB2bWEtPnNpemUpOwo+ICAgCQlpZiAoZXJyKQo+ICAgCQkJcmV0 dXJuIGVycjsKPiArCj4gKwkJc2V0X2JpdChJOTE1X1ZNQV9BTExPQ19CSVQsIF9faTkxNV92bWFf ZmxhZ3Modm1hKSk7Cj4gICAJfQo+ICAgCj4gICAJLyogQXBwbGljYWJsZSB0byBWTFYsIGFuZCBn ZW44KyAqLwo+IEBAIC0xNjcsNiArMTY5LDcgQEAgc3RhdGljIGludCBwcGd0dF9iaW5kX3ZtYShz dHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX3JlYWRvbmx5 KHZtYS0+b2JqKSkKPiAgIAkJcHRlX2ZsYWdzIHw9IFBURV9SRUFEX09OTFk7Cj4gICAKPiArCUdF TV9CVUdfT04oIXRlc3RfYml0KEk5MTVfVk1BX0FMTE9DX0JJVCwgX19pOTE1X3ZtYV9mbGFncyh2 bWEpKSk7Cj4gICAJdm1hLT52bS0+aW5zZXJ0X2VudHJpZXModm1hLT52bSwgdm1hLCBjYWNoZV9s ZXZlbCwgcHRlX2ZsYWdzKTsKPiAgIAl3bWIoKTsKPiAgIAo+IEBAIC0xNzUsNyArMTc4LDggQEAg c3RhdGljIGludCBwcGd0dF9iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAo+ICAg c3RhdGljIHZvaWQgcHBndHRfdW5iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHsK PiAtCXZtYS0+dm0tPmNsZWFyX3JhbmdlKHZtYS0+dm0sIHZtYS0+bm9kZS5zdGFydCwgdm1hLT5z aXplKTsKPiArCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSTkxNV9WTUFfQUxMT0NfQklULCBfX2k5 MTVfdm1hX2ZsYWdzKHZtYSkpKQo+ICsJCXZtYS0+dm0tPmNsZWFyX3JhbmdlKHZtYS0+dm0sIHZt YS0+bm9kZS5zdGFydCwgdm1hLT5zaXplKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGludCBwcGd0 dF9zZXRfcGFnZXMoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gQEAgLTUwMywxNSArNTA3LDI1IEBA IHN0YXRpYyB2b2lkIGk5MTVfYWRkcmVzc19zcGFjZV9maW5pKHN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKnZtKQo+ICAgCW11dGV4X2Rlc3Ryb3koJnZtLT5tdXRleCk7Cj4gICB9Cj4gICAKPiAt c3RhdGljIHZvaWQgcHBndHRfZGVzdHJveV92bWEoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq dm0pCj4gK3ZvaWQgX19pOTE1X3ZtX2Nsb3NlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt KQo+ICAgewo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hLCAqdm47Cj4gICAKPiAtCW11dGV4X2xv Y2soJnZtLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCWxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZSh2bWEsIHZuLCAmdm0tPmJvdW5kX2xpc3QsIHZtX2xpbmspCj4gKwltdXRleF9sb2NrKCZ2 bS0+bXV0ZXgpOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgdm4sICZ2bS0+Ym91 bmRfbGlzdCwgdm1fbGluaykgewo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmog PSB2bWEtPm9iajsKPiArCj4gKwkJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmb2JqLT5iYXNl LnJlZmNvdW50KSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWF0b21pY19hbmQofkk5MTVfVk1B X1BJTl9NQVNLLCAmdm1hLT5mbGFncyk7Cj4gKwkJV0FSTl9PTihpOTE1X3ZtYV91bmJpbmQodm1h KSk7Cj4gICAJCWk5MTVfdm1hX2Rlc3Ryb3kodm1hKTsKPiArCj4gKwkJaTkxNV9nZW1fb2JqZWN0 X3B1dChvYmopOwo+ICsJfQo+ICAgCUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoJnZtLT5ib3VuZF9s aXN0KSk7Cj4gLQltdXRleF91bmxvY2soJnZtLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAr CW11dGV4X3VubG9jaygmdm0tPm11dGV4KTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgX19p OTE1X3ZtX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+IEBAIC01MTksOCArNTMz LDYgQEAgc3RhdGljIHZvaWQgX19pOTE1X3ZtX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQo+ICAgCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtID0KPiAgIAkJY29udGFpbmVy X29mKHdvcmssIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UsIHJjdS53b3JrKTsKPiAgIAo+IC0J cHBndHRfZGVzdHJveV92bWEodm0pOwo+IC0KPiAgIAl2bS0+Y2xlYW51cCh2bSk7Cj4gICAJaTkx NV9hZGRyZXNzX3NwYWNlX2Zpbmkodm0pOwo+ICAgCj4gQEAgLTUzNSw3ICs1NDcsNiBAQCB2b2lk IGk5MTVfdm1fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKPiAgIAlHRU1fQlVHX09OKGk5MTVf aXNfZ2d0dCh2bSkpOwo+ICAgCXRyYWNlX2k5MTVfcHBndHRfcmVsZWFzZSh2bSk7Cj4gICAKPiAt CXZtLT5jbG9zZWQgPSB0cnVlOwo+ICAgCXF1ZXVlX3JjdV93b3JrKHZtLT5pOTE1LT53cSwgJnZt LT5yY3UpOwo+ICAgfQo+ICAgCj4gQEAgLTU0Myw2ICs1NTQsNyBAQCBzdGF0aWMgdm9pZCBpOTE1 X2FkZHJlc3Nfc3BhY2VfaW5pdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwgaW50IHN1 YmNsYXNzKQo+ICAgewo+ICAgCWtyZWZfaW5pdCgmdm0tPnJlZik7Cj4gICAJSU5JVF9SQ1VfV09S Sygmdm0tPnJjdSwgX19pOTE1X3ZtX3JlbGVhc2UpOwo+ICsJYXRvbWljX3NldCgmdm0tPm9wZW4s IDEpOwo+ICAgCj4gICAJLyoKPiAgIAkgKiBUaGUgdm0tPm11dGV4IG11c3QgYmUgcmVjbGFpbSBz YWZlIChmb3IgdXNlIGluIHRoZSBzaHJpbmtlcikuCj4gQEAgLTE3NjksMTIgKzE3ODEsOCBAQCBz dGF0aWMgdm9pZCBnZW42X3BwZ3R0X2ZyZWVfcGQoc3RydWN0IGdlbjZfcHBndHQgKnBwZ3R0KQo+ ICAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhbnVwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtKQo+ICAgewo+ICAgCXN0cnVjdCBnZW42X3BwZ3R0ICpwcGd0dCA9IHRvX2dlbjZfcHBn dHQoaTkxNV92bV90b19wcGd0dCh2bSkpOwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSB2bS0+aTkxNTsKPiAgIAo+IC0JLyogRklYTUUgcmVtb3ZlIHRoZSBzdHJ1Y3RfbXV0ZXgg dG8gYnJpbmcgdGhlIGxvY2tpbmcgdW5kZXIgY29udHJvbCAqLwo+IC0JbXV0ZXhfbG9jaygmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJaTkxNV92bWFfZGVzdHJveShwcGd0dC0+dm1hKTsK PiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAKPiAgIAlnZW42 X3BwZ3R0X2ZyZWVfcGQocHBndHQpOwo+ICAgCWZyZWVfc2NyYXRjaCh2bSk7Cj4gQEAgLTE4NjMs NyArMTg3MSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKnBkX3ZtYV9jcmVhdGUoc3RydWN0 IGdlbjZfcHBndHQgKnBwZ3R0LCBpbnQgc2l6ZSkKPiAgIAo+ICAgCWk5MTVfYWN0aXZlX2luaXQo aTkxNSwgJnZtYS0+YWN0aXZlLCBOVUxMLCBOVUxMKTsKPiAgIAo+IC0Jdm1hLT52bSA9ICZnZ3R0 LT52bTsKPiArCW11dGV4X2luaXQoJnZtYS0+cGFnZXNfbXV0ZXgpOwo+ICsJdm1hLT52bSA9IGk5 MTVfdm1fZ2V0KCZnZ3R0LT52bSk7Cj4gICAJdm1hLT5vcHMgPSAmcGRfdm1hX29wczsKPiAgIAl2 bWEtPnByaXZhdGUgPSBwcGd0dDsKPiAgIAo+IEBAIC0xODgzLDcgKzE4OTIsNyBAQCBpbnQgZ2Vu Nl9wcGd0dF9waW4oc3RydWN0IGk5MTVfcHBndHQgKmJhc2UpCj4gICAJc3RydWN0IGdlbjZfcHBn dHQgKnBwZ3R0ID0gdG9fZ2VuNl9wcGd0dChiYXNlKTsKPiAgIAlpbnQgZXJyID0gMDsKPiAgIAo+ IC0JR0VNX0JVR19PTihwcGd0dC0+YmFzZS52bS5jbG9zZWQpOwo+ICsJR0VNX0JVR19PTighYXRv bWljX3JlYWQoJnBwZ3R0LT5iYXNlLnZtLm9wZW4pKTsKPiAgIAo+ICAgCS8qCj4gICAJICogV29y a2Fyb3VuZCB0aGUgbGltaXRlZCBtYXhpbXVtIHZtYS0+cGluX2NvdW50IGFuZCB0aGUgYWxpYXNp bmdfcHBndHQKPiBAQCAtMjQ2MCwxNCArMjQ2OSwxOCBAQCBzdGF0aWMgaW50IGFsaWFzaW5nX2d0 dF9iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAlpZiAoZmxhZ3MgJiBJOTE1X1ZN QV9MT0NBTF9CSU5EKSB7Cj4gICAJCXN0cnVjdCBpOTE1X3BwZ3R0ICphbGlhcyA9IGk5MTVfdm1f dG9fZ2d0dCh2bWEtPnZtKS0+YWxpYXM7Cj4gICAKPiAtCQlpZiAoIWk5MTVfdm1hX2lzX2JvdW5k KHZtYSwgSTkxNV9WTUFfTE9DQUxfQklORCkpIHsKPiArCQlpZiAoZmxhZ3MgJiBJOTE1X1ZNQV9B TExPQykgewo+ICAgCQkJcmV0ID0gYWxpYXMtPnZtLmFsbG9jYXRlX3ZhX3JhbmdlKCZhbGlhcy0+ dm0sCj4gICAJCQkJCQkJICB2bWEtPm5vZGUuc3RhcnQsCj4gICAJCQkJCQkJICB2bWEtPnNpemUp Owo+ICAgCQkJaWYgKHJldCkKPiAgIAkJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQkJc2V0X2JpdChJ OTE1X1ZNQV9BTExPQ19CSVQsIF9faTkxNV92bWFfZmxhZ3Modm1hKSk7Cj4gICAJCX0KPiAgIAo+ ICsJCUdFTV9CVUdfT04oIXRlc3RfYml0KEk5MTVfVk1BX0FMTE9DX0JJVCwKPiArCQkJCSAgICAg X19pOTE1X3ZtYV9mbGFncyh2bWEpKSk7Cj4gICAJCWFsaWFzLT52bS5pbnNlcnRfZW50cmllcygm YWxpYXMtPnZtLCB2bWEsCj4gICAJCQkJCSBjYWNoZV9sZXZlbCwgcHRlX2ZsYWdzKTsKPiAgIAl9 Cj4gQEAgLTI0OTYsNyArMjUwOSw3IEBAIHN0YXRpYyB2b2lkIGFsaWFzaW5nX2d0dF91bmJpbmRf dm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgCQkJdm0tPmNsZWFyX3JhbmdlKHZtLCB2bWEt Pm5vZGUuc3RhcnQsIHZtYS0+c2l6ZSk7Cj4gICAJfQo+ICAgCj4gLQlpZiAoaTkxNV92bWFfaXNf Ym91bmQodm1hLCBJOTE1X1ZNQV9MT0NBTF9CSU5EKSkgewo+ICsJaWYgKHRlc3RfYW5kX2NsZWFy X2JpdChJOTE1X1ZNQV9BTExPQ19CSVQsIF9faTkxNV92bWFfZmxhZ3Modm1hKSkpIHsKPiAgIAkJ c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0gPQo+ICAgCQkJJmk5MTVfdm1fdG9fZ2d0dCh2 bWEtPnZtKS0+YWxpYXMtPnZtOwo+ICAgCj4gQEAgLTI1OTksMjIgKzI2MTIsMTYgQEAgc3RhdGlj IGludCBpbml0X2FsaWFzaW5nX3BwZ3R0KHN0cnVjdCBpOTE1X2dndHQgKmdndHQpCj4gICAKPiAg IHN0YXRpYyB2b2lkIGZpbmlfYWxpYXNpbmdfcHBndHQoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkK PiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZ2d0dC0+dm0uaTkxNTsK PiAgIAlzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQ7Cj4gICAKPiAtCW11dGV4X2xvY2soJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAlwcGd0dCA9IGZldGNoX2FuZF96ZXJvKCZnZ3R0 LT5hbGlhcyk7Cj4gICAJaWYgKCFwcGd0dCkKPiAtCQlnb3RvIG91dDsKPiArCQlyZXR1cm47Cj4g ICAKPiAgIAlpOTE1X3ZtX3B1dCgmcHBndHQtPnZtKTsKPiAgIAo+ICAgCWdndHQtPnZtLnZtYV9v cHMuYmluZF92bWEgICA9IGdndHRfYmluZF92bWE7Cj4gICAJZ2d0dC0+dm0udm1hX29wcy51bmJp bmRfdm1hID0gZ2d0dF91bmJpbmRfdm1hOwo+IC0KPiAtb3V0Ogo+IC0JbXV0ZXhfdW5sb2NrKCZp OTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGludCBnZ3R0X3Jl c2VydmVfZ3VjX3RvcChzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+IEBAIC0yNzMxLDE1ICsyNzM4 LDE0IEBAIGludCBpOTE1X2luaXRfZ2d0dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK PiAgIAo+ICAgc3RhdGljIHZvaWQgZ2d0dF9jbGVhbnVwX2h3KHN0cnVjdCBpOTE1X2dndHQgKmdn dHQpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGdndHQtPnZtLmk5 MTU7Cj4gICAJc3RydWN0IGk5MTVfdm1hICp2bWEsICp2bjsKPiAgIAo+IC0JZ2d0dC0+dm0uY2xv c2VkID0gdHJ1ZTsKPiArCWF0b21pY19zZXQoJmdndHQtPnZtLm9wZW4sIDApOwo+ICAgCj4gICAJ cmN1X2JhcnJpZXIoKTsgLyogZmx1c2ggdGhlIFJDVSdlZF9faTkxNV92bV9yZWxlYXNlICovCj4g LQlmbHVzaF93b3JrcXVldWUoaTkxNS0+d3EpOwo+ICsJZmx1c2hfd29ya3F1ZXVlKGdndHQtPnZt Lmk5MTUtPndxKTsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4gKwltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAKPiAgIAlsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUodm1hLCB2biwgJmdndHQtPnZtLmJvdW5kX2xpc3QsIHZtX2xpbmspCj4gICAJ CVdBUk5fT04oaTkxNV92bWFfdW5iaW5kKHZtYSkpOwo+IEBAIC0yNzQ4LDE1ICsyNzU0LDEyIEBA IHN0YXRpYyB2b2lkIGdndHRfY2xlYW51cF9odyhzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+ICAg CQlkcm1fbW1fcmVtb3ZlX25vZGUoJmdndHQtPmVycm9yX2NhcHR1cmUpOwo+ICAgCj4gICAJZ2d0 dF9yZWxlYXNlX2d1Y190b3AoZ2d0dCk7Cj4gLQo+IC0JaWYgKGRybV9tbV9pbml0aWFsaXplZCgm Z2d0dC0+dm0ubW0pKSB7Cj4gLQkJaW50ZWxfdmd0X2RlYmFsbG9vbihnZ3R0KTsKPiAtCQlpOTE1 X2FkZHJlc3Nfc3BhY2VfZmluaSgmZ2d0dC0+dm0pOwo+IC0JfQo+ICsJaW50ZWxfdmd0X2RlYmFs bG9vbihnZ3R0KTsKPiAgIAo+ICAgCWdndHQtPnZtLmNsZWFudXAoJmdndHQtPnZtKTsKPiAgIAo+ IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCW11dGV4X3VubG9j aygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICsJaTkxNV9hZGRyZXNzX3NwYWNlX2ZpbmkoJmdndHQtPnZt KTsKPiAgIAo+ICAgCWFyY2hfcGh5c193Y19kZWwoZ2d0dC0+bXRycik7Cj4gICAJaW9fbWFwcGlu Z19maW5pKCZnZ3R0LT5pb21hcCk7Cj4gQEAgLTMxODUsOSArMzE4OCw2IEBAIGludCBpOTE1X2dn dHRfcHJvYmVfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICBzdGF0aWMgaW50 IGdndHRfaW5pdF9odyhzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+ICAgewo+ICAgCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gZ2d0dC0+dm0uaTkxNTsKPiAtCWludCByZXQgPSAwOwo+ IC0KPiAtCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gICAJaTkx NV9hZGRyZXNzX3NwYWNlX2luaXQoJmdndHQtPnZtLCBWTV9DTEFTU19HR1RUKTsKPiAgIAo+IEBA IC0zMjAzLDE4ICszMjAzLDE0IEBAIHN0YXRpYyBpbnQgZ2d0dF9pbml0X2h3KHN0cnVjdCBpOTE1 X2dndHQgKmdndHQpCj4gICAJCQkJZ2d0dC0+Z21hZHIuc3RhcnQsCj4gICAJCQkJZ2d0dC0+bWFw cGFibGVfZW5kKSkgewo+ICAgCQlnZ3R0LT52bS5jbGVhbnVwKCZnZ3R0LT52bSk7Cj4gLQkJcmV0 ID0gLUVJTzsKPiAtCQlnb3RvIG91dDsKPiArCQlyZXR1cm4gLUVJTzsKPiAgIAl9Cj4gICAKPiAg IAlnZ3R0LT5tdHJyID0gYXJjaF9waHlzX3djX2FkZChnZ3R0LT5nbWFkci5zdGFydCwgZ2d0dC0+ bWFwcGFibGVfZW5kKTsKPiAgIAo+ICAgCWk5MTVfZ2d0dF9pbml0X2ZlbmNlcyhnZ3R0KTsKPiAg IAo+IC1vdXQ6Cj4gLQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0K PiAtCXJldHVybiByZXQ7Cj4gKwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgLyoqCj4gQEAgLTMy ODYsNiArMzI4Miw3IEBAIHN0YXRpYyB2b2lkIGdndHRfcmVzdG9yZV9tYXBwaW5ncyhzdHJ1Y3Qg aTkxNV9nZ3R0ICpnZ3R0KQo+ICAgewo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hLCAqdm47Cj4g ICAJYm9vbCBmbHVzaCA9IGZhbHNlOwo+ICsJaW50IG9wZW47Cj4gICAKPiAgIAlpbnRlbF9ndF9j aGVja19hbmRfY2xlYXJfZmF1bHRzKGdndHQtPnZtLmd0KTsKPiAgIAo+IEBAIC0zMjkzLDcgKzMy OTAsOSBAQCBzdGF0aWMgdm9pZCBnZ3R0X3Jlc3RvcmVfbWFwcGluZ3Moc3RydWN0IGk5MTVfZ2d0 dCAqZ2d0dCkKPiAgIAo+ICAgCS8qIEZpcnN0IGZpbGwgb3VyIHBvcnRpb24gb2YgdGhlIEdUVCB3 aXRoIHNjcmF0Y2ggcGFnZXMgKi8KPiAgIAlnZ3R0LT52bS5jbGVhcl9yYW5nZSgmZ2d0dC0+dm0s IDAsIGdndHQtPnZtLnRvdGFsKTsKPiAtCWdndHQtPnZtLmNsb3NlZCA9IHRydWU7IC8qIHNraXAg cmV3cml0aW5nIFBURSBvbiBWTUEgdW5iaW5kICovCj4gKwo+ICsJLyogU2tpcCByZXdyaXRpbmcg UFRFIG9uIFZNQSB1bmJpbmQuICovCj4gKwlvcGVuID0gYXRvbWljX3hjaGcoJmdndHQtPnZtLm9w ZW4sIDApOwo+ICAgCj4gICAJLyogY2xmbHVzaCBvYmplY3RzIGJvdW5kIGludG8gdGhlIEdHVFQg YW5kIHJlYmluZCB0aGVtLiAqLwo+ICAgCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bWEsIHZu LCAmZ2d0dC0+dm0uYm91bmRfbGlzdCwgdm1fbGluaykgewo+IEBAIC0zMzAyLDI0ICszMzAxLDIw IEBAIHN0YXRpYyB2b2lkIGdndHRfcmVzdG9yZV9tYXBwaW5ncyhzdHJ1Y3QgaTkxNV9nZ3R0ICpn Z3R0KQo+ICAgCQlpZiAoIWk5MTVfdm1hX2lzX2JvdW5kKHZtYSwgSTkxNV9WTUFfR0xPQkFMX0JJ TkQpKQo+ICAgCQkJY29udGludWU7Cj4gICAKPiAtCQltdXRleF91bmxvY2soJmdndHQtPnZtLm11 dGV4KTsKPiAtCj4gICAJCWlmICghaTkxNV92bWFfdW5iaW5kKHZtYSkpCj4gLQkJCWdvdG8gbG9j azsKPiArCQkJY29udGludWU7Cj4gICAKPiArCQljbGVhcl9iaXQoSTkxNV9WTUFfR0xPQkFMX0JJ TkRfQklULCBfX2k5MTVfdm1hX2ZsYWdzKHZtYSkpOwo+ICAgCQlXQVJOX09OKGk5MTVfdm1hX2Jp bmQodm1hLAo+ICAgCQkJCSAgICAgIG9iaiA/IG9iai0+Y2FjaGVfbGV2ZWwgOiAwLAo+IC0JCQkJ ICAgICAgUElOX1VQREFURSkpOwo+ICsJCQkJICAgICAgUElOX0dMT0JBTCwgTlVMTCkpOwo+ICAg CQlpZiAob2JqKSB7IC8qIG9ubHkgdXNlZCBkdXJpbmcgcmVzdW1lID0+IGV4Y2x1c2l2ZSBhY2Nl c3MgKi8KPiAgIAkJCWZsdXNoIHw9IGZldGNoX2FuZF96ZXJvKCZvYmotPndyaXRlX2RvbWFpbik7 Cj4gICAJCQlvYmotPnJlYWRfZG9tYWlucyB8PSBJOTE1X0dFTV9ET01BSU5fR1RUOwo+ICAgCQl9 Cj4gLQo+IC1sb2NrOgo+IC0JCW11dGV4X2xvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAl9Cj4g ICAKPiAtCWdndHQtPnZtLmNsb3NlZCA9IGZhbHNlOwo+ICsJYXRvbWljX3NldCgmZ2d0dC0+dm0u b3Blbiwgb3Blbik7Cj4gICAJZ2d0dC0+aW52YWxpZGF0ZShnZ3R0KTsKPiAgIAo+ICAgCW11dGV4 X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+IEBAIC0zNzExLDcgKzM3MDYsOCBAQCBpbnQgaTkx NV9nZW1fZ3R0X2luc2VydChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgIAl1NjQg b2Zmc2V0Owo+ICAgCWludCBlcnI7Cj4gICAKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnZtLT5p OTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnZtLT5tdXRl eCk7Cj4gKwo+ICAgCUdFTV9CVUdfT04oIXNpemUpOwo+ICAgCUdFTV9CVUdfT04oIUlTX0FMSUdO RUQoc2l6ZSwgSTkxNV9HVFRfUEFHRV9TSVpFKSk7Cj4gICAJR0VNX0JVR19PTihhbGlnbm1lbnQg JiYgIWlzX3Bvd2VyX29mXzIoYWxpZ25tZW50KSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmgKPiBpbmRleCAwMDdiZGFmNGJhMDAuLmU3OTRkMWY1ZWVlOCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gQEAgLTMwNyw3ICszMDcsNyBAQCBzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlIHsKPiAgIAo+ICAgCXVuc2lnbmVkIGludCBiaW5kX2FsbG9jOwo+ICAgCj4g LQlib29sIGNsb3NlZDsKPiArCWF0b21pY190IG9wZW47Cj4gICAKPiAgIAlzdHJ1Y3QgbXV0ZXgg bXV0ZXg7IC8qIHByb3RlY3RzIHZtYSBhbmQgb3VyIGxpc3RzICovCj4gICAjZGVmaW5lIFZNX0NM QVNTX0dHVFQgMAo+IEBAIC01NzUsNiArNTc1LDM1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1 X3ZtX3B1dChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgIAlrcmVmX3B1dCgmdm0t PnJlZiwgaTkxNV92bV9yZWxlYXNlKTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW5saW5lIHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKgo+ICtpOTE1X3ZtX29wZW4oc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0pCj4gK3sKPiArCUdFTV9CVUdfT04oIWF0b21pY19yZWFkKCZ2bS0+b3Blbikp Owo+ICsJYXRvbWljX2luYygmdm0tPm9wZW4pOwo+ICsJcmV0dXJuIGk5MTVfdm1fZ2V0KHZtKTsK PiArfQo+ICsKPiArc3RhdGljIGlubGluZSBib29sCj4gK2k5MTVfdm1fdHJ5b3BlbihzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiArewo+ICsJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZ2 bS0+b3BlbiwgMSwgMCkpCj4gKwkJcmV0dXJuIGk5MTVfdm1fZ2V0KHZtKTsKPiArCj4gKwlyZXR1 cm4gZmFsc2U7Cj4gK30KPiArCj4gK3ZvaWQgX19pOTE1X3ZtX2Nsb3NlKHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtKTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICtpOTE1X3ZtX2Ns b3NlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICt7Cj4gKwlHRU1fQlVHX09OKCFh dG9taWNfcmVhZCgmdm0tPm9wZW4pKTsKPiArCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ2bS0+ b3BlbikpCj4gKwkJX19pOTE1X3ZtX2Nsb3NlKHZtKTsKPiArCj4gKwlpOTE1X3ZtX3B1dCh2bSk7 Cj4gK30KPiArCj4gICBpbnQgZ2VuNl9wcGd0dF9waW4oc3RydWN0IGk5MTVfcHBndHQgKmJhc2Up Owo+ICAgdm9pZCBnZW42X3BwZ3R0X3VucGluKHN0cnVjdCBpOTE1X3BwZ3R0ICpiYXNlKTsKPiAg IHZvaWQgZ2VuNl9wcGd0dF91bnBpbl9hbGwoc3RydWN0IGk5MTVfcHBndHQgKmJhc2UpOwo+IEBA IC02MDcsMTAgKzYzNiw5IEBAIGludCBpOTE1X2dlbV9ndHRfaW5zZXJ0KHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtLAo+ICAgI2RlZmluZSBQSU5fT0ZGU0VUX0JJQVMJCUJJVF9VTEwoNikK PiAgICNkZWZpbmUgUElOX09GRlNFVF9GSVhFRAlCSVRfVUxMKDcpCj4gICAKPiAtI2RlZmluZSBQ SU5fTUJaCQkJQklUX1VMTCg4KSAvKiBJOTE1X1ZNQV9QSU5fT1ZFUkZMT1cgKi8KPiAtI2RlZmlu ZSBQSU5fR0xPQkFMCQlCSVRfVUxMKDkpIC8qIEk5MTVfVk1BX0dMT0JBTF9CSU5EICovCj4gLSNk ZWZpbmUgUElOX1VTRVIJCUJJVF9VTEwoMTApIC8qIEk5MTVfVk1BX0xPQ0FMX0JJTkQgKi8KPiAt I2RlZmluZSBQSU5fVVBEQVRFCQlCSVRfVUxMKDExKQo+ICsjZGVmaW5lIFBJTl9VUERBVEUJCUJJ VF9VTEwoOSkKPiArI2RlZmluZSBQSU5fR0xPQkFMCQlCSVRfVUxMKDEwKSAvKiBJOTE1X1ZNQV9H TE9CQUxfQklORCAqLwo+ICsjZGVmaW5lIFBJTl9VU0VSCQlCSVRfVUxMKDExKSAvKiBJOTE1X1ZN QV9MT0NBTF9CSU5EICovCj4gICAKPiAgICNkZWZpbmUgUElOX09GRlNFVF9NQVNLCQkoLUk5MTVf R1RUX1BBR0VfU0laRSkKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BlcmYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4gaW5kZXggYzFi NzY0MjMzNzYxLi4wNjYzM2I0YWQyNjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9wZXJmLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+ IEBAIC0xMjA0LDE1ICsxMjA0LDEwIEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9yZWFkKHN0cnVjdCBp OTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4gICBzdGF0aWMgc3RydWN0IGludGVsX2NvbnRleHQg Km9hX3Bpbl9jb250ZXh0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICB7Cj4g ICAJc3RydWN0IGk5MTVfZ2VtX2VuZ2luZXNfaXRlciBpdDsKPiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gc3RyZWFtLT5kZXZfcHJpdjsKPiAgIAlzdHJ1Y3QgaTkxNV9nZW1fY29u dGV4dCAqY3R4ID0gc3RyZWFtLT5jdHg7Cj4gICAJc3RydWN0IGludGVsX2NvbnRleHQgKmNlOwo+ ICAgCWludCBlcnI7Cj4gICAKPiAtCWVyciA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxl KCZpOTE1LT5kcm0pOwo+IC0JaWYgKGVycikKPiAtCQlyZXR1cm4gRVJSX1BUUihlcnIpOwo+IC0K PiAgIAlmb3JfZWFjaF9nZW1fZW5naW5lKGNlLCBpOTE1X2dlbV9jb250ZXh0X2xvY2tfZW5naW5l cyhjdHgpLCBpdCkgewo+ICAgCQlpZiAoY2UtPmVuZ2luZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNT KQo+ICAgCQkJY29udGludWU7Cj4gQEAgLTEyMjksMTAgKzEyMjQsNiBAQCBzdGF0aWMgc3RydWN0 IGludGVsX2NvbnRleHQgKm9hX3Bpbl9jb250ZXh0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpz dHJlYW0pCj4gICAJfQo+ICAgCWk5MTVfZ2VtX2NvbnRleHRfdW5sb2NrX2VuZ2luZXMoY3R4KTsK PiAgIAo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCWlmIChl cnIpCj4gLQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKPiAtCj4gICAJcmV0dXJuIHN0cmVhbS0+cGlu bmVkX2N0eDsKPiAgIH0KPiAgIAo+IEBAIC0xMzMxLDMyICsxMzIyLDIyIEBAIHN0YXRpYyBpbnQg b2FfZ2V0X3JlbmRlcl9jdHhfaWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAg ICAqLwo+ICAgc3RhdGljIHZvaWQgb2FfcHV0X3JlbmRlcl9jdHhfaWQoc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW0gKnN0cmVhbSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4gICAJc3RydWN0IGludGVsX2NvbnRleHQgKmNlOwo+ ICAgCj4gICAJc3RyZWFtLT5zcGVjaWZpY19jdHhfaWQgPSBJTlZBTElEX0NUWF9JRDsKPiAgIAlz dHJlYW0tPnNwZWNpZmljX2N0eF9pZF9tYXNrID0gMDsKPiAgIAo+ICAgCWNlID0gZmV0Y2hfYW5k X3plcm8oJnN0cmVhbS0+cGlubmVkX2N0eCk7Cj4gLQlpZiAoY2UpIHsKPiAtCQltdXRleF9sb2Nr KCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlpZiAoY2UpCj4gICAJCWludGVsX2Nv bnRleHRfdW5waW4oY2UpOwo+IC0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3Rf bXV0ZXgpOwo+IC0JfQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZAo+ICAgZnJlZV9vYV9idWZm ZXIoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gc3RyZWFtLT5kZXZfcHJpdjsKPiAtCj4gLQltdXRleF9sb2Nr KCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gICAJaTkxNV92bWFfdW5waW5fYW5kX3Jl bGVhc2UoJnN0cmVhbS0+b2FfYnVmZmVyLnZtYSwKPiAgIAkJCQkgICBJOTE1X1ZNQV9SRUxFQVNF X01BUCk7Cj4gICAKPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g LQo+ICAgCXN0cmVhbS0+b2FfYnVmZmVyLnZhZGRyID0gTlVMTDsKPiAgIH0KPiAgIAo+IEBAIC0x NTExLDE4ICsxNDkyLDEzIEBAIHN0YXRpYyBpbnQgYWxsb2Nfb2FfYnVmZmVyKHN0cnVjdCBpOTE1 X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICAJaWYgKFdBUk5fT04oc3RyZWFtLT5vYV9idWZmZXIu dm1hKSkKPiAgIAkJcmV0dXJuIC1FTk9ERVY7Cj4gICAKPiAtCXJldCA9IGk5MTVfbXV0ZXhfbG9j a19pbnRlcnJ1cHRpYmxlKCZkZXZfcHJpdi0+ZHJtKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJu IHJldDsKPiAtCj4gICAJQlVJTERfQlVHX09OX05PVF9QT1dFUl9PRl8yKE9BX0JVRkZFUl9TSVpF KTsKPiAgIAlCVUlMRF9CVUdfT04oT0FfQlVGRkVSX1NJWkUgPCBTWl8xMjhLIHx8IE9BX0JVRkZF Ul9TSVpFID4gU1pfMTZNKTsKPiAgIAo+ICAgCWJvID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9z aG1lbShkZXZfcHJpdiwgT0FfQlVGRkVSX1NJWkUpOwo+ICAgCWlmIChJU19FUlIoYm8pKSB7Cj4g ICAJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIE9BIGJ1ZmZlclxuIik7Cj4gLQkJcmV0 ID0gUFRSX0VSUihibyk7Cj4gLQkJZ290byB1bmxvY2s7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoYm8p Owo+ICAgCX0KPiAgIAo+ICAgCWk5MTVfZ2VtX29iamVjdF9zZXRfY2FjaGVfY29oZXJlbmN5KGJv LCBJOTE1X0NBQ0hFX0xMQyk7Cj4gQEAgLTE1NDYsNyArMTUyMiw3IEBAIHN0YXRpYyBpbnQgYWxs b2Nfb2FfYnVmZmVyKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICAJCQkgaTkx NV9nZ3R0X29mZnNldChzdHJlYW0tPm9hX2J1ZmZlci52bWEpLAo+ICAgCQkJIHN0cmVhbS0+b2Ff YnVmZmVyLnZhZGRyKTsKPiAgIAo+IC0JZ290byB1bmxvY2s7Cj4gKwlyZXR1cm4gMDsKPiAgIAo+ ICAgZXJyX3VucGluOgo+ICAgCV9faTkxNV92bWFfdW5waW4odm1hKTsKPiBAQCAtMTU1Nyw4ICsx NTMzLDYgQEAgc3RhdGljIGludCBhbGxvY19vYV9idWZmZXIoc3RydWN0IGk5MTVfcGVyZl9zdHJl YW0gKnN0cmVhbSkKPiAgIAlzdHJlYW0tPm9hX2J1ZmZlci52YWRkciA9IE5VTEw7Cj4gICAJc3Ry ZWFtLT5vYV9idWZmZXIudm1hID0gTlVMTDsKPiAgIAo+IC11bmxvY2s6Cj4gLQltdXRleF91bmxv Y2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCj4gaW5kZXggOWFkYjg1YmE2ZGFhLi4yODg2Nzlk OGE2YTkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmMKPiBAQCAtMzIsNiArMzIsNyBAQAo+ ICAgCj4gICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAgICNpbmNsdWRlICJpOTE1X2dsb2JhbHMu aCIKPiArI2luY2x1ZGUgImk5MTVfc3dfZmVuY2Vfd29yay5oIgo+ICAgI2luY2x1ZGUgImk5MTVf dHJhY2UuaCIKPiAgICNpbmNsdWRlICJpOTE1X3ZtYS5oIgo+ICAgCj4gQEAgLTExMCw3ICsxMTEs OCBAQCB2bWFfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJaWYg KHZtYSA9PSBOVUxMKQo+ICAgCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAgIAo+IC0Jdm1h LT52bSA9IHZtOwo+ICsJbXV0ZXhfaW5pdCgmdm1hLT5wYWdlc19tdXRleCk7Cj4gKwl2bWEtPnZt ID0gaTkxNV92bV9nZXQodm0pOwo+ICAgCXZtYS0+b3BzID0gJnZtLT52bWFfb3BzOwo+ICAgCXZt YS0+b2JqID0gb2JqOwo+ICAgCXZtYS0+cmVzdiA9IG9iai0+YmFzZS5yZXN2Owo+IEBAIC0yNjEs OCArMjYzLDYgQEAgdm1hX2xvb2t1cChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ ICAgICogT25jZSBjcmVhdGVkLCB0aGUgVk1BIGlzIGtlcHQgdW50aWwgZWl0aGVyIHRoZSBvYmpl Y3QgaXMgZnJlZWQsIG9yIHRoZQo+ICAgICogYWRkcmVzcyBzcGFjZSBpcyBjbG9zZWQuCj4gICAg Kgo+IC0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHN0cnVjdF9tdXRleCBoZWxkLgo+IC0gKgo+ICAg ICogUmV0dXJucyB0aGUgdm1hLCBvciBhbiBlcnJvciBwb2ludGVyLgo+ICAgICovCj4gICBzdHJ1 Y3QgaTkxNV92bWEgKgo+IEBAIC0yNzMsNyArMjczLDcgQEAgaTkxNV92bWFfaW5zdGFuY2Uoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsK PiAgIAo+ICAgCUdFTV9CVUdfT04odmlldyAmJiAhaTkxNV9pc19nZ3R0KHZtKSk7Cj4gLQlHRU1f QlVHX09OKHZtLT5jbG9zZWQpOwo+ICsJR0VNX0JVR19PTighYXRvbWljX3JlYWQoJnZtLT5vcGVu KSk7Cj4gICAKPiAgIAlzcGluX2xvY2soJm9iai0+dm1hLmxvY2spOwo+ICAgCXZtYSA9IHZtYV9s b29rdXAob2JqLCB2bSwgdmlldyk7Cj4gQEAgLTI4NywxOCArMjg3LDYzIEBAIGk5MTVfdm1hX2lu c3RhbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJcmV0dXJuIHZtYTsK PiAgIH0KPiAgIAo+ICtzdHJ1Y3QgaTkxNV92bWFfd29yayB7Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNl X3dvcmsgYmFzZTsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJZW51bSBpOTE1X2NhY2hl X2xldmVsIGNhY2hlX2xldmVsOwo+ICsJdW5zaWduZWQgaW50IGZsYWdzOwo+ICt9Owo+ICsKPiAr c3RhdGljIGludCBfX3ZtYV9iaW5kKHN0cnVjdCBkbWFfZmVuY2Vfd29yayAqd29yaykKPiArewo+ ICsJc3RydWN0IGk5MTVfdm1hX3dvcmsgKnZ3ID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigq dncpLCBiYXNlKTsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0gdnctPnZtYTsKPiArCWludCBl cnI7Cj4gKwo+ICsJZXJyID0gdm1hLT5vcHMtPmJpbmRfdm1hKHZtYSwgdnctPmNhY2hlX2xldmVs LCB2dy0+ZmxhZ3MpOwo+ICsJaWYgKGVycikKPiArCQlhdG9taWNfb3IoSTkxNV9WTUFfRVJST1Is ICZ2bWEtPmZsYWdzKTsKPiArCj4gKwlpZiAodm1hLT5vYmopCj4gKwkJX19pOTE1X2dlbV9vYmpl Y3RfdW5waW5fcGFnZXModm1hLT5vYmopOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX3dvcmtfb3BzIGJpbmRfb3BzID0gewo+ICsJ Lm5hbWUgPSAiYmluZCIsCj4gKwkud29yayA9IF9fdm1hX2JpbmQsCj4gK307Cj4gKwo+ICtzdHJ1 Y3QgaTkxNV92bWFfd29yayAqaTkxNV92bWFfd29yayh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkx NV92bWFfd29yayAqdnc7Cj4gKwo+ICsJdncgPSBremFsbG9jKHNpemVvZigqdncpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghdncpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJZG1hX2ZlbmNlX3dv cmtfaW5pdCgmdnctPmJhc2UsICZiaW5kX29wcyk7Cj4gKwl2dy0+YmFzZS5kbWEuZXJyb3IgPSAt RUFHQUlOOyAvKiBkaXNhYmxlIHRoZSB3b3JrZXIgYnkgZGVmYXVsdCAqLwo+ICsKPiArCXJldHVy biB2dzsKPiArfQo+ICsKPiAgIC8qKgo+ICAgICogaTkxNV92bWFfYmluZCAtIFNldHMgdXAgUFRF cyBmb3IgYW4gVk1BIGluIGl0J3MgY29ycmVzcG9uZGluZyBhZGRyZXNzIHNwYWNlLgo+ICAgICog QHZtYTogVk1BIHRvIG1hcAo+ICAgICogQGNhY2hlX2xldmVsOiBtYXBwaW5nIGNhY2hlIGxldmVs Cj4gICAgKiBAZmxhZ3M6IGZsYWdzIGxpa2UgZ2xvYmFsIG9yIGxvY2FsIG1hcHBpbmcKPiArICog QHdvcms6IHByZWFsbG9jYXRlZCB3b3JrZXIgZm9yIGFsbG9jYXRpbmcgYW5kIGJpbmRpbmcgdGhl IFBURQo+ICAgICoKPiAgICAqIERNQSBhZGRyZXNzZXMgYXJlIHRha2VuIGZyb20gdGhlIHNjYXR0 ZXItZ2F0aGVyIHRhYmxlIG9mIHRoaXMgb2JqZWN0IChvciBvZgo+ICAgICogdGhpcyBWTUEgaW4g Y2FzZSBvZiBub24tZGVmYXVsdCBHR1RUIHZpZXdzKSBhbmQgUFRFIGVudHJpZXMgc2V0IHVwLgo+ ICAgICogTm90ZSB0aGF0IERNQSBhZGRyZXNzZXMgYXJlIGFsc28gdGhlIG9ubHkgcGFydCBvZiB0 aGUgU0cgdGFibGUgd2UgY2FyZSBhYm91dC4KPiAgICAqLwo+IC1pbnQgaTkxNV92bWFfYmluZChz dHJ1Y3QgaTkxNV92bWEgKnZtYSwgZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hlX2xldmVsLAo+ IC0JCSAgdTMyIGZsYWdzKQo+ICtpbnQgaTkxNV92bWFfYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZt YSwKPiArCQkgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiArCQkgIHUzMiBm bGFncywKPiArCQkgIHN0cnVjdCBpOTE1X3ZtYV93b3JrICp3b3JrKQo+ICAgewo+ICAgCXUzMiBi aW5kX2ZsYWdzOwo+ICAgCXUzMiB2bWFfZmxhZ3M7Cj4gQEAgLTMxNSwxMSArMzYwLDggQEAgaW50 IGk5MTVfdm1hX2JpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEsIGVudW0gaTkxNV9jYWNoZV9sZXZl bCBjYWNoZV9sZXZlbCwKPiAgIAlpZiAoR0VNX0RFQlVHX1dBUk5fT04oIWZsYWdzKSkKPiAgIAkJ cmV0dXJuIC1FSU5WQUw7Cj4gICAKPiAtCWJpbmRfZmxhZ3MgPSAwOwo+IC0JaWYgKGZsYWdzICYg UElOX0dMT0JBTCkKPiAtCQliaW5kX2ZsYWdzIHw9IEk5MTVfVk1BX0dMT0JBTF9CSU5EOwo+IC0J aWYgKGZsYWdzICYgUElOX1VTRVIpCj4gLQkJYmluZF9mbGFncyB8PSBJOTE1X1ZNQV9MT0NBTF9C SU5EOwo+ICsJYmluZF9mbGFncyA9IGZsYWdzOwo+ICsJYmluZF9mbGFncyAmPSBJOTE1X1ZNQV9H TE9CQUxfQklORCB8IEk5MTVfVk1BX0xPQ0FMX0JJTkQ7Cj4gICAKPiAgIAl2bWFfZmxhZ3MgPSBh dG9taWNfcmVhZCgmdm1hLT5mbGFncyk7Cj4gICAJdm1hX2ZsYWdzICY9IEk5MTVfVk1BX0dMT0JB TF9CSU5EIHwgSTkxNV9WTUFfTE9DQUxfQklORDsKPiBAQCAtMzMzLDkgKzM3NSwzMiBAQCBpbnQg aTkxNV92bWFfYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgZW51bSBpOTE1X2NhY2hlX2xldmVs IGNhY2hlX2xldmVsLAo+ICAgCUdFTV9CVUdfT04oIXZtYS0+cGFnZXMpOwo+ICAgCj4gICAJdHJh Y2VfaTkxNV92bWFfYmluZCh2bWEsIGJpbmRfZmxhZ3MpOwo+IC0JcmV0ID0gdm1hLT5vcHMtPmJp bmRfdm1hKHZtYSwgY2FjaGVfbGV2ZWwsIGJpbmRfZmxhZ3MpOwo+IC0JaWYgKHJldCkKPiAtCQly ZXR1cm4gcmV0Owo+ICsJaWYgKHdvcmsgJiYgKGJpbmRfZmxhZ3MgJiB+dm1hX2ZsYWdzKSAmIHZt YS0+dm0tPmJpbmRfYWxsb2MpIHsKPiArCQl3b3JrLT52bWEgPSB2bWE7Cj4gKwkJd29yay0+Y2Fj aGVfbGV2ZWwgPSBjYWNoZV9sZXZlbDsKPiArCQl3b3JrLT5mbGFncyA9IGJpbmRfZmxhZ3MgfCBJ OTE1X1ZNQV9BTExPQzsKPiArCj4gKwkJLyoKPiArCQkgKiBOb3RlIHdlIG9ubHkgd2FudCB0byBj aGFpbiB1cCB0byB0aGUgbWlncmF0aW9uIGZlbmNlIG9uCj4gKwkJICogdGhlIHBhZ2VzIChub3Qg dGhlIG9iamVjdCBpdHNlbGYpLiBBcyB3ZSBkb24ndCB0cmFjayB0aGF0LAo+ICsJCSAqIHlldCwg d2UgaGF2ZSB0byB1c2UgdGhlIGV4Y2x1c2l2ZSBmZW5jZSBpbnN0ZWFkLgo+ICsJCSAqCj4gKwkJ ICogQWxzbyBub3RlIHRoYXQgd2UgZG8gbm90IHdhbnQgdG8gdHJhY2sgdGhlIGFzeW5jIHZtYSBh cwo+ICsJCSAqIHBhcnQgb2YgdGhlIG9iai0+cmVzdi0+ZXhjbF9mZW5jZSBhcyBpdCBvbmx5IGFm ZmVjdHMKPiArCQkgKiBleGVjdXRpb24gYW5kIG5vdCBjb250ZW50IG9yIG9iamVjdCdzIGJhY2tp bmcgc3RvcmUgbGlmZXRpbWUuCj4gKwkJICovCj4gKwkJR0VNX0JVR19PTihpOTE1X2FjdGl2ZV9o YXNfZXhjbHVzaXZlKCZ2bWEtPmFjdGl2ZSkpOwo+ICsJCWk5MTVfYWN0aXZlX3NldF9leGNsdXNp dmUoJnZtYS0+YWN0aXZlLCAmd29yay0+YmFzZS5kbWEpOwo+ICsJCXdvcmstPmJhc2UuZG1hLmVy cm9yID0gMDsgLyogZW5hYmxlIHRoZSBxdWV1ZV93b3JrKCkgKi8KPiArCj4gKwkJaWYgKHZtYS0+ b2JqKQo+ICsJCQlfX2k5MTVfZ2VtX29iamVjdF9waW5fcGFnZXModm1hLT5vYmopOwo+ICsJfSBl bHNlIHsKPiArCQlHRU1fQlVHX09OKChiaW5kX2ZsYWdzICYgfnZtYV9mbGFncykgJiB2bWEtPnZt LT5iaW5kX2FsbG9jKTsKPiArCQlyZXQgPSB2bWEtPm9wcy0+YmluZF92bWEodm1hLCBjYWNoZV9s ZXZlbCwgYmluZF9mbGFncyk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0K PiAgIAo+ICAgCWF0b21pY19vcihiaW5kX2ZsYWdzLCAmdm1hLT5mbGFncyk7Cj4gICAJcmV0dXJu IDA7Cj4gQEAgLTM0OCw5ICs0MTMsNyBAQCB2b2lkIF9faW9tZW0gKmk5MTVfdm1hX3Bpbl9pb21h cChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIAo+ICAgCS8qIEFjY2VzcyB0aHJvdWdoIHRoZSBH VFQgcmVxdWlyZXMgdGhlIGRldmljZSB0byBiZSBhd2FrZS4gKi8KPiAgIAlhc3NlcnRfcnBtX3dh a2Vsb2NrX2hlbGQoJnZtYS0+dm0tPmk5MTUtPnJ1bnRpbWVfcG0pOwo+IC0KPiAtCWxvY2tkZXBf YXNzZXJ0X2hlbGQoJnZtYS0+dm0tPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0JaWYgKFdB Uk5fT04oIWk5MTVfdm1hX2lzX21hcF9hbmRfZmVuY2VhYmxlKHZtYSkpKSB7Cj4gKwlpZiAoR0VN X1dBUk5fT04oIWk5MTVfdm1hX2lzX21hcF9hbmRfZmVuY2VhYmxlKHZtYSkpKSB7Cj4gICAJCWVy ciA9IC1FTk9ERVY7Cj4gICAJCWdvdG8gZXJyOwo+ICAgCX0KPiBAQCAtMzY4LDcgKzQzMSw4IEBA IHZvaWQgX19pb21lbSAqaTkxNV92bWFfcGluX2lvbWFwKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ ICAgCQkJZ290byBlcnI7Cj4gICAJCX0KPiAgIAo+IC0JCXZtYS0+aW9tYXAgPSBwdHI7Cj4gKwkJ aWYgKHVubGlrZWx5KGNtcHhjaGcoJnZtYS0+aW9tYXAsIE5VTEwsIHB0cikpKQo+ICsJCQlpb19t YXBwaW5nX3VubWFwKHB0cik7Cj4gICAJfQo+ICAgCj4gICAJX19pOTE1X3ZtYV9waW4odm1hKTsK PiBAQCAtMzg4LDE4ICs0NTIsMTIgQEAgdm9pZCBfX2lvbWVtICppOTE1X3ZtYV9waW5faW9tYXAo c3RydWN0IGk5MTVfdm1hICp2bWEpCj4gICAKPiAgIHZvaWQgaTkxNV92bWFfZmx1c2hfd3JpdGVz KHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgewo+IC0JaWYgKCFpOTE1X3ZtYV9oYXNfZ2d0dF93 cml0ZSh2bWEpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpbnRlbF9ndF9mbHVzaF9nZ3R0X3dyaXRl cyh2bWEtPnZtLT5ndCk7Cj4gLQo+IC0JaTkxNV92bWFfdW5zZXRfZ2d0dF93cml0ZSh2bWEpOwo+ ICsJaWYgKGk5MTVfdm1hX3Vuc2V0X2dndHRfd3JpdGUodm1hKSkKPiArCQlpbnRlbF9ndF9mbHVz aF9nZ3R0X3dyaXRlcyh2bWEtPnZtLT5ndCk7Cj4gICB9Cj4gICAKPiAgIHZvaWQgaTkxNV92bWFf dW5waW5faW9tYXAoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gICB7Cj4gLQlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZ2bWEtPnZtLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gICAJR0VNX0JV R19PTih2bWEtPmlvbWFwID09IE5VTEwpOwo+ICAgCj4gICAJaTkxNV92bWFfZmx1c2hfd3JpdGVz KHZtYSk7Cj4gQEAgLTQzNSw2ICs0OTMsOSBAQCBib29sIGk5MTVfdm1hX21pc3BsYWNlZChjb25z dCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAlpZiAoIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgm dm1hLT5ub2RlKSkKPiAgIAkJcmV0dXJuIGZhbHNlOwo+ICAgCj4gKwlpZiAodGVzdF9iaXQoSTkx NV9WTUFfRVJST1JfQklULCBfX2k5MTVfdm1hX2ZsYWdzKHZtYSkpKQo+ICsJCXJldHVybiB0cnVl Owo+ICsKPiAgIAlpZiAodm1hLT5ub2RlLnNpemUgPCBzaXplKQo+ICAgCQlyZXR1cm4gdHJ1ZTsK PiAgIAo+IEBAIC01MzgsNyArNTk5LDYgQEAgc3RhdGljIHZvaWQgYXNzZXJ0X2JpbmRfY291bnQo Y29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIHN0YXRpYyBpbnQKPiAg IGk5MTVfdm1hX2luc2VydChzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgdTY0IHNpemUsIHU2NCBhbGln bm1lbnQsIHU2NCBmbGFncykKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHZtYS0+dm0tPmk5MTU7Cj4gICAJdW5zaWduZWQgaW50IGNhY2hlX2xldmVsOwo+ICAg CXU2NCBzdGFydCwgZW5kOwo+ICAgCWludCByZXQ7Cj4gQEAgLTU2NCw3ICs2MjQsNyBAQCBpOTE1 X3ZtYV9pbnNlcnQoc3RydWN0IGk5MTVfdm1hICp2bWEsIHU2NCBzaXplLCB1NjQgYWxpZ25tZW50 LCB1NjQgZmxhZ3MpCj4gICAKPiAgIAllbmQgPSB2bWEtPnZtLT50b3RhbDsKPiAgIAlpZiAoZmxh Z3MgJiBQSU5fTUFQUEFCTEUpCj4gLQkJZW5kID0gbWluX3QodTY0LCBlbmQsIGRldl9wcml2LT5n Z3R0Lm1hcHBhYmxlX2VuZCk7Cj4gKwkJZW5kID0gbWluX3QodTY0LCBlbmQsIGk5MTVfdm1fdG9f Z2d0dCh2bWEtPnZtKS0+bWFwcGFibGVfZW5kKTsKPiAgIAlpZiAoZmxhZ3MgJiBQSU5fWk9ORV80 RykKPiAgIAkJZW5kID0gbWluX3QodTY0LCBlbmQsICgxVUxMIDw8IDMyKSAtIEk5MTVfR1RUX1BB R0VfU0laRSk7Cj4gICAJR0VNX0JVR19PTighSVNfQUxJR05FRChlbmQsIEk5MTVfR1RUX1BBR0Vf U0laRSkpOwo+IEBAIC01ODAsMzUgKzY0MCwyMSBAQCBpOTE1X3ZtYV9pbnNlcnQoc3RydWN0IGk5 MTVfdm1hICp2bWEsIHU2NCBzaXplLCB1NjQgYWxpZ25tZW50LCB1NjQgZmxhZ3MpCj4gICAJCXJl dHVybiAtRU5PU1BDOwo+ICAgCX0KPiAgIAo+IC0JaWYgKHZtYS0+b2JqKSB7Cj4gLQkJcmV0ID0g aTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyh2bWEtPm9iaik7Cj4gLQkJaWYgKHJldCkKPiAtCQkJ cmV0dXJuIHJldDsKPiAtCj4gKwljYWNoZV9sZXZlbCA9IDA7Cj4gKwlpZiAodm1hLT5vYmopCj4g ICAJCWNhY2hlX2xldmVsID0gdm1hLT5vYmotPmNhY2hlX2xldmVsOwo+IC0JfSBlbHNlIHsKPiAt CQljYWNoZV9sZXZlbCA9IDA7Cj4gLQl9Cj4gLQo+IC0JR0VNX0JVR19PTih2bWEtPnBhZ2VzKTsK PiAtCj4gLQlyZXQgPSB2bWEtPm9wcy0+c2V0X3BhZ2VzKHZtYSk7Cj4gLQlpZiAocmV0KQo+IC0J CWdvdG8gZXJyX3VucGluOwo+ICAgCj4gICAJaWYgKGZsYWdzICYgUElOX09GRlNFVF9GSVhFRCkg ewo+ICAgCQl1NjQgb2Zmc2V0ID0gZmxhZ3MgJiBQSU5fT0ZGU0VUX01BU0s7Cj4gICAJCWlmICgh SVNfQUxJR05FRChvZmZzZXQsIGFsaWdubWVudCkgfHwKPiAtCQkgICAgcmFuZ2Vfb3ZlcmZsb3dz KG9mZnNldCwgc2l6ZSwgZW5kKSkgewo+IC0JCQlyZXQgPSAtRUlOVkFMOwo+IC0JCQlnb3RvIGVy cl9jbGVhcjsKPiAtCQl9Cj4gKwkJICAgIHJhbmdlX292ZXJmbG93cyhvZmZzZXQsIHNpemUsIGVu ZCkpCj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICAgCj4gICAJCXJldCA9IGk5MTVfZ2VtX2d0dF9y ZXNlcnZlKHZtYS0+dm0sICZ2bWEtPm5vZGUsCj4gICAJCQkJCSAgIHNpemUsIG9mZnNldCwgY2Fj aGVfbGV2ZWwsCj4gICAJCQkJCSAgIGZsYWdzKTsKPiAgIAkJaWYgKHJldCkKPiAtCQkJZ290byBl cnJfY2xlYXI7Cj4gKwkJCXJldHVybiByZXQ7Cj4gICAJfSBlbHNlIHsKPiAgIAkJLyoKPiAgIAkJ ICogV2Ugb25seSBzdXBwb3J0IGh1Z2UgZ3R0IHBhZ2VzIHRocm91Z2ggdGhlIDQ4YiBQUEdUVCwK PiBAQCAtNjQ3LDcgKzY5Myw3IEBAIGk5MTVfdm1hX2luc2VydChzdHJ1Y3QgaTkxNV92bWEgKnZt YSwgdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsIHU2NCBmbGFncykKPiAgIAkJCQkJICBzaXplLCBh bGlnbm1lbnQsIGNhY2hlX2xldmVsLAo+ICAgCQkJCQkgIHN0YXJ0LCBlbmQsIGZsYWdzKTsKPiAg IAkJaWYgKHJldCkKPiAtCQkJZ290byBlcnJfY2xlYXI7Cj4gKwkJCXJldHVybiByZXQ7Cj4gICAK PiAgIAkJR0VNX0JVR19PTih2bWEtPm5vZGUuc3RhcnQgPCBzdGFydCk7Cj4gICAJCUdFTV9CVUdf T04odm1hLT5ub2RlLnN0YXJ0ICsgdm1hLT5ub2RlLnNpemUgPiBlbmQpOwo+IEBAIC02NTUsMjMg KzcwMSwxNSBAQCBpOTE1X3ZtYV9pbnNlcnQoc3RydWN0IGk5MTVfdm1hICp2bWEsIHU2NCBzaXpl LCB1NjQgYWxpZ25tZW50LCB1NjQgZmxhZ3MpCj4gICAJR0VNX0JVR19PTighZHJtX21tX25vZGVf YWxsb2NhdGVkKCZ2bWEtPm5vZGUpKTsKPiAgIAlHRU1fQlVHX09OKCFpOTE1X2dlbV92YWxpZF9n dHRfc3BhY2Uodm1hLCBjYWNoZV9sZXZlbCkpOwo+ICAgCj4gLQltdXRleF9sb2NrKCZ2bWEtPnZt LT5tdXRleCk7Cj4gICAJbGlzdF9hZGRfdGFpbCgmdm1hLT52bV9saW5rLCAmdm1hLT52bS0+Ym91 bmRfbGlzdCk7Cj4gLQltdXRleF91bmxvY2soJnZtYS0+dm0tPm11dGV4KTsKPiAgIAo+ICAgCWlm ICh2bWEtPm9iaikgewo+ICsJCWF0b21pY19pbmMoJnZtYS0+b2JqLT5tbS5wYWdlc19waW5fY291 bnQpOwo+ICAgCQlhdG9taWNfaW5jKCZ2bWEtPm9iai0+YmluZF9jb3VudCk7Cj4gICAJCWFzc2Vy dF9iaW5kX2NvdW50KHZtYS0+b2JqKTsKPiAgIAl9Cj4gICAKPiAgIAlyZXR1cm4gMDsKPiAtCj4g LWVycl9jbGVhcjoKPiAtCXZtYS0+b3BzLT5jbGVhcl9wYWdlcyh2bWEpOwo+IC1lcnJfdW5waW46 Cj4gLQlpZiAodm1hLT5vYmopCj4gLQkJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKHZtYS0+ b2JqKTsKPiAtCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkCj4gQEAgLTY4 MCwxMiArNzE4LDcgQEAgaTkxNV92bWFfcmVtb3ZlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAg CUdFTV9CVUdfT04oIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSk7Cj4gICAJR0VN X0JVR19PTihpOTE1X3ZtYV9pc19ib3VuZCh2bWEsIEk5MTVfVk1BX0dMT0JBTF9CSU5EIHwgSTkx NV9WTUFfTE9DQUxfQklORCkpOwo+ICAgCj4gLQl2bWEtPm9wcy0+Y2xlYXJfcGFnZXModm1hKTsK PiAtCj4gLQltdXRleF9sb2NrKCZ2bWEtPnZtLT5tdXRleCk7Cj4gLQlkcm1fbW1fcmVtb3ZlX25v ZGUoJnZtYS0+bm9kZSk7Cj4gICAJbGlzdF9kZWwoJnZtYS0+dm1fbGluayk7Cj4gLQltdXRleF91 bmxvY2soJnZtYS0+dm0tPm11dGV4KTsKPiAgIAo+ICAgCS8qCj4gICAJICogU2luY2UgdGhlIHVu Ym91bmQgbGlzdCBpcyBnbG9iYWwsIG9ubHkgbW92ZSB0byB0aGF0IGxpc3QgaWYKPiBAQCAtNzA0 LDUxICs3MzcsMjA2IEBAIGk5MTVfdm1hX3JlbW92ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAg IAkJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7Cj4gICAJCWFzc2VydF9iaW5kX2Nv dW50KG9iaik7Cj4gICAJfQo+ICsKPiArCWRybV9tbV9yZW1vdmVfbm9kZSgmdm1hLT5ub2RlKTsK PiAgIH0KPiAgIAo+IC1pbnQgX19pOTE1X3ZtYV9kb19waW4oc3RydWN0IGk5MTVfdm1hICp2bWEs Cj4gLQkJICAgICAgdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsIHU2NCBmbGFncykKPiArc3RhdGlj IGJvb2wgdHJ5X2Zhc3RfcGluKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1bnNpZ25lZCBpbnQgZmxh Z3MpCj4gICB7Cj4gLQljb25zdCB1bnNpZ25lZCBpbnQgYm91bmQgPSBhdG9taWNfcmVhZCgmdm1h LT5mbGFncyk7Cj4gLQlpbnQgcmV0Owo+ICsJdW5zaWduZWQgaW50IGJvdW5kOwo+ICsJYm9vbCBw aW5uZWQgPSB0cnVlOwo+ICAgCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bWEtPnZtLT5pOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCUdFTV9CVUdfT04oKGZsYWdzICYgKFBJTl9HTE9CQUwg fCBQSU5fVVNFUikpID09IDApOwo+IC0JR0VNX0JVR19PTigoZmxhZ3MgJiBQSU5fR0xPQkFMKSAm JiAhaTkxNV92bWFfaXNfZ2d0dCh2bWEpKTsKPiArCWJvdW5kID0gYXRvbWljX3JlYWQoJnZtYS0+ ZmxhZ3MpOwo+ICsJZG8gewo+ICsJCWlmICh1bmxpa2VseShmbGFncyAmIH5ib3VuZCkpCj4gKwkJ CXJldHVybiBmYWxzZTsKPiAgIAo+IC0JaWYgKFdBUk5fT04oYm91bmQgJiBJOTE1X1ZNQV9QSU5f T1ZFUkZMT1cpKSB7Cj4gLQkJcmV0ID0gLUVCVVNZOwo+IC0JCWdvdG8gZXJyX3VucGluOwo+ICsJ CWlmICh1bmxpa2VseShib3VuZCAmIChJOTE1X1ZNQV9PVkVSRkxPVyB8IEk5MTVfVk1BX0VSUk9S KSkpCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCj4gKwkJaWYgKCEoYm91bmQgJiBJOTE1X1ZNQV9Q SU5fTUFTSykpCj4gKwkJCWdvdG8gc2xvdzsKPiArCj4gKwkJR0VNX0JVR19PTigoKGJvdW5kICsg MSkgJiBJOTE1X1ZNQV9QSU5fTUFTSykgPT0gMCk7Cj4gKwl9IHdoaWxlICghYXRvbWljX3RyeV9j bXB4Y2hnKCZ2bWEtPmZsYWdzLCAmYm91bmQsIGJvdW5kICsgMSkpOwo+ICsKPiArCXJldHVybiB0 cnVlOwo+ICsKPiArc2xvdzoKPiArCS8qCj4gKwkgKiBJZiBwaW5fY291bnQ9PTAsIGJ1dCB3ZSBh cmUgYm91bmQsIGNoZWNrIHVuZGVyIHRoZSBsb2NrIHRvIGF2b2lkCj4gKwkgKiByYWNpbmcgd2l0 aCBhIGNvbmN1cnJlbnQgaTkxNV92bWFfdW5iaW5kKCkuCj4gKwkgKi8KPiArCW11dGV4X2xvY2so JnZtYS0+dm0tPm11dGV4KTsKPiArCWRvIHsKPiArCQlpZiAodW5saWtlbHkoYm91bmQgJiAoSTkx NV9WTUFfT1ZFUkZMT1cgfCBJOTE1X1ZNQV9FUlJPUikpKSB7Cj4gKwkJCXBpbm5lZCA9IGZhbHNl Owo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWlmICh1bmxpa2VseShmbGFncyAmIH5ib3Vu ZCkpIHsKPiArCQkJcGlubmVkID0gZmFsc2U7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0gd2hp bGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoJnZtYS0+ZmxhZ3MsICZib3VuZCwgYm91bmQgKyAxKSk7 Cj4gKwltdXRleF91bmxvY2soJnZtYS0+dm0tPm11dGV4KTsKPiArCj4gKwlyZXR1cm4gcGlubmVk Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZtYV9nZXRfcGFnZXMoc3RydWN0IGk5MTVfdm1hICp2 bWEpCj4gK3sKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCWlmIChhdG9taWNfYWRkX3VubGVzcygm dm1hLT5wYWdlc19jb3VudCwgMSwgMCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKG11dGV4 X2xvY2tfaW50ZXJydXB0aWJsZSgmdm1hLT5wYWdlc19tdXRleCkpCj4gKwkJcmV0dXJuIC1FSU5U UjsKPiArCj4gKwlpZiAoIWF0b21pY19yZWFkKCZ2bWEtPnBhZ2VzX2NvdW50KSkgewo+ICsJCWlm ICh2bWEtPm9iaikgewo+ICsJCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKHZtYS0+ b2JqKTsKPiArCQkJaWYgKGVycikKPiArCQkJCWdvdG8gdW5sb2NrOwo+ICsJCX0KPiArCj4gKwkJ ZXJyID0gdm1hLT5vcHMtPnNldF9wYWdlcyh2bWEpOwo+ICsJCWlmIChlcnIpCj4gKwkJCWdvdG8g dW5sb2NrOwo+ICAgCX0KPiArCWF0b21pY19pbmMoJnZtYS0+cGFnZXNfY291bnQpOwo+ICAgCj4g LQlpZiAoKGJvdW5kICYgSTkxNV9WTUFfQklORF9NQVNLKSA9PSAwKSB7Cj4gLQkJcmV0ID0gaTkx NV92bWFfaW5zZXJ0KHZtYSwgc2l6ZSwgYWxpZ25tZW50LCBmbGFncyk7Cj4gLQkJaWYgKHJldCkK PiAtCQkJZ290byBlcnJfdW5waW47Cj4gK3VubG9jazoKPiArCW11dGV4X3VubG9jaygmdm1hLT5w YWdlc19tdXRleCk7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg X192bWFfcHV0X3BhZ2VzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1bnNpZ25lZCBpbnQgY291bnQp Cj4gK3sKPiArCW11dGV4X2xvY2tfbmVzdGVkKCZ2bWEtPnBhZ2VzX211dGV4LCBTSU5HTEVfREVQ VEhfTkVTVElORyk7Cj4gKwlHRU1fQlVHX09OKGF0b21pY19yZWFkKCZ2bWEtPnBhZ2VzX2NvdW50 KSA8IGNvdW50KTsKPiArCWlmIChhdG9taWNfc3ViX3JldHVybihjb3VudCwgJnZtYS0+cGFnZXNf Y291bnQpID09IDApIHsKPiArCQl2bWEtPm9wcy0+Y2xlYXJfcGFnZXModm1hKTsKPiArCQlHRU1f QlVHX09OKHZtYS0+cGFnZXMpOwo+ICsJCWlmICh2bWEtPm9iaikKPiArCQkJaTkxNV9nZW1fb2Jq ZWN0X3VucGluX3BhZ2VzKHZtYS0+b2JqKTsKPiAgIAl9Cj4gLQlHRU1fQlVHX09OKCFkcm1fbW1f bm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpOwo+ICsJbXV0ZXhfdW5sb2NrKCZ2bWEtPnBhZ2Vz X211dGV4KTsKPiArfQo+ICAgCj4gLQlyZXQgPSBpOTE1X3ZtYV9iaW5kKHZtYSwgdm1hLT5vYmog PyB2bWEtPm9iai0+Y2FjaGVfbGV2ZWwgOiAwLCBmbGFncyk7Cj4gLQlpZiAocmV0KQo+IC0JCWdv dG8gZXJyX3JlbW92ZTsKPiArc3RhdGljIHZvaWQgdm1hX3B1dF9wYWdlcyhzdHJ1Y3QgaTkxNV92 bWEgKnZtYSkKPiArewo+ICsJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZ2bWEtPnBhZ2VzX2NvdW50 LCAtMSwgMSkpCj4gKwkJcmV0dXJuOwo+ICAgCj4gLQlHRU1fQlVHX09OKCFpOTE1X3ZtYV9pc19i b3VuZCh2bWEsIEk5MTVfVk1BX0JJTkRfTUFTSykpOwo+ICsJX192bWFfcHV0X3BhZ2VzKHZtYSwg MSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZtYV91bmJpbmRfcGFnZXMoc3RydWN0IGk5MTVf dm1hICp2bWEpCj4gK3sKPiArCXVuc2lnbmVkIGludCBjb3VudDsKPiArCj4gKwlsb2NrZGVwX2Fz c2VydF9oZWxkKCZ2bWEtPnZtLT5tdXRleCk7Cj4gKwo+ICsJY291bnQgPSBhdG9taWNfcmVhZCgm dm1hLT5wYWdlc19jb3VudCk7Cj4gKwljb3VudCA+Pj0gSTkxNV9WTUFfUEFHRVNfQklBUzsKPiAr CUdFTV9CVUdfT04oIWNvdW50KTsKPiArCj4gKwlfX3ZtYV9wdXRfcGFnZXModm1hLCBjb3VudCB8 IGNvdW50IDw8IEk5MTVfVk1BX1BBR0VTX0JJQVMpOwo+ICt9Cj4gKwo+ICtpbnQgaTkxNV92bWFf cGluKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1NjQgc2l6ZSwgdTY0IGFsaWdubWVudCwgdTY0IGZs YWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV92bWFfd29yayAqd29yayA9IE5VTEw7Cj4gKwl1bnNp Z25lZCBpbnQgYm91bmQ7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCUJVSUxEX0JVR19PTihQSU5fR0xP QkFMICE9IEk5MTVfVk1BX0dMT0JBTF9CSU5EKTsKPiArCUJVSUxEX0JVR19PTihQSU5fVVNFUiAh PSBJOTE1X1ZNQV9MT0NBTF9CSU5EKTsKPiArCj4gKwlHRU1fQlVHX09OKGZsYWdzICYgUElOX1VQ REFURSk7Cj4gKwlHRU1fQlVHX09OKCEoZmxhZ3MgJiAoUElOX1VTRVIgfCBQSU5fR0xPQkFMKSkp Owo+ICAgCj4gLQlpZiAoKGJvdW5kIF4gYXRvbWljX3JlYWQoJnZtYS0+ZmxhZ3MpKSAmIEk5MTVf Vk1BX0dMT0JBTF9CSU5EKQo+IC0JCV9faTkxNV92bWFfc2V0X21hcF9hbmRfZmVuY2VhYmxlKHZt YSk7Cj4gKwlpZiAodHJ5X2Zhc3RfcGluKHZtYSwgZmxhZ3MgJiBJOTE1X1ZNQV9CSU5EX01BU0sp KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWVyciA9IHZtYV9nZXRfcGFnZXModm1hKTsKPiArCWlm IChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwlpZiAoZmxhZ3MgJiBQSU5fVVNFUikgewo+ ICsJCXdvcmsgPSBpOTE1X3ZtYV93b3JrKCk7Cj4gKwkJaWYgKCF3b3JrKSB7Cj4gKwkJCWVyciA9 IC1FTk9NRU07Cj4gKwkJCWdvdG8gZXJyX3BhZ2VzOwo+ICsJCX0KPiArCX0KPiArCj4gKwllcnIg PSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZtYS0+dm0tPm11dGV4KTsKPiArCWlmIChlcnIp Cj4gKwkJZ290byBlcnJfZmVuY2U7Cj4gKwo+ICsJYm91bmQgPSBhdG9taWNfcmVhZCgmdm1hLT5m bGFncyk7Cj4gKwlpZiAodW5saWtlbHkoYm91bmQgJiBJOTE1X1ZNQV9FUlJPUikpIHsKPiArCQll cnIgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyX3VubG9jazsKPiArCX0KPiAgIAo+ICsJaWYgKHVu bGlrZWx5KCEoKGJvdW5kICsgMSkgJiBJOTE1X1ZNQV9QSU5fTUFTSykpKSB7Cj4gKwkJZXJyID0g LUVBR0FJTjsgLyogcGlucyBhcmUgbWVhbnQgdG8gYmUgZmFpcmx5IHRlbXBvcmFyeSAqLwo+ICsJ CWdvdG8gZXJyX3VubG9jazsKPiArCX0KPiArCj4gKwlpZiAodW5saWtlbHkoIShmbGFncyAmIH5i b3VuZCAmIEk5MTVfVk1BX0JJTkRfTUFTSykpKSB7Cj4gKwkJX19pOTE1X3ZtYV9waW4odm1hKTsK PiArCQlnb3RvIGVycl91bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gaTkxNV9hY3RpdmVfYWNx dWlyZSgmdm1hLT5hY3RpdmUpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIGVycl91bmxvY2s7Cj4g Kwo+ICsJaWYgKCEoYm91bmQgJiBJOTE1X1ZNQV9CSU5EX01BU0spKSB7Cj4gKwkJZXJyID0gaTkx NV92bWFfaW5zZXJ0KHZtYSwgc2l6ZSwgYWxpZ25tZW50LCBmbGFncyk7Cj4gKwkJaWYgKGVycikK PiArCQkJZ290byBlcnJfYWN0aXZlOwo+ICsKPiArCQlpZiAoaTkxNV9pc19nZ3R0KHZtYS0+dm0p KQo+ICsJCQlfX2k5MTVfdm1hX3NldF9tYXBfYW5kX2ZlbmNlYWJsZSh2bWEpOwo+ICsJfQo+ICsK PiArCUdFTV9CVUdfT04oIXZtYS0+cGFnZXMpOwo+ICsJZXJyID0gaTkxNV92bWFfYmluZCh2bWEs Cj4gKwkJCSAgICB2bWEtPm9iaiA/IHZtYS0+b2JqLT5jYWNoZV9sZXZlbCA6IDAsCj4gKwkJCSAg ICBmbGFncywgd29yayk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8gZXJyX3JlbW92ZTsKPiArCj4g KwkvKiBUaGVyZSBzaG91bGQgb25seSBiZSBhdCBtb3N0IDIgYWN0aXZlIGJpbmRpbmdzICh1c2Vy LCBnbG9iYWwpICovCj4gKwlHRU1fQlVHX09OKGJvdW5kICsgSTkxNV9WTUFfUEFHRVNfQUNUSVZF IDwgYm91bmQpOwo+ICsJYXRvbWljX2FkZChJOTE1X1ZNQV9QQUdFU19BQ1RJVkUsICZ2bWEtPnBh Z2VzX2NvdW50KTsKPiArCWxpc3RfbW92ZV90YWlsKCZ2bWEtPnZtX2xpbmssICZ2bWEtPnZtLT5i b3VuZF9saXN0KTsKPiArCj4gKwlfX2k5MTVfdm1hX3Bpbih2bWEpOwo+ICsJR0VNX0JVR19PTigh aTkxNV92bWFfaXNfcGlubmVkKHZtYSkpOwo+ICsJR0VNX0JVR19PTighaTkxNV92bWFfaXNfYm91 bmQodm1hLCBmbGFncykpOwo+ICAgCUdFTV9CVUdfT04oaTkxNV92bWFfbWlzcGxhY2VkKHZtYSwg c2l6ZSwgYWxpZ25tZW50LCBmbGFncykpOwo+IC0JcmV0dXJuIDA7Cj4gICAKPiAgIGVycl9yZW1v dmU6Cj4gLQlpZiAoKGJvdW5kICYgSTkxNV9WTUFfQklORF9NQVNLKSA9PSAwKSB7Cj4gKwlpZiAo IWk5MTVfdm1hX2lzX2JvdW5kKHZtYSwgSTkxNV9WTUFfQklORF9NQVNLKSkKPiAgIAkJaTkxNV92 bWFfcmVtb3ZlKHZtYSk7Cj4gLQkJR0VNX0JVR19PTih2bWEtPnBhZ2VzKTsKPiAtCQlHRU1fQlVH X09OKGF0b21pY19yZWFkKCZ2bWEtPmZsYWdzKSAmIEk5MTVfVk1BX0JJTkRfTUFTSyk7Cj4gLQl9 Cj4gLWVycl91bnBpbjoKPiAtCV9faTkxNV92bWFfdW5waW4odm1hKTsKPiAtCXJldHVybiByZXQ7 Cj4gK2Vycl9hY3RpdmU6Cj4gKwlpOTE1X2FjdGl2ZV9yZWxlYXNlKCZ2bWEtPmFjdGl2ZSk7Cj4g K2Vycl91bmxvY2s6Cj4gKwltdXRleF91bmxvY2soJnZtYS0+dm0tPm11dGV4KTsKPiArZXJyX2Zl bmNlOgo+ICsJaWYgKHdvcmspCj4gKwkJZG1hX2ZlbmNlX3dvcmtfY29tbWl0KCZ3b3JrLT5iYXNl KTsKPiArZXJyX3BhZ2VzOgo+ICsJdm1hX3B1dF9wYWdlcyh2bWEpOwo+ICsJcmV0dXJuIGVycjsK PiAgIH0KPiAgIAo+ICAgdm9pZCBpOTE1X3ZtYV9jbG9zZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkK PiBAQCAtNzc5LDkgKzk2Nyw2IEBAIHN0YXRpYyB2b2lkIF9faTkxNV92bWFfcmVtb3ZlX2Nsb3Nl ZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHZtYS0+dm0tPmk5MTU7Cj4gICAKPiAtCWlmICghaTkxNV92bWFfaXNfY2xvc2Vk KHZtYSkpCj4gLQkJcmV0dXJuOwo+IC0KPiAgIAlzcGluX2xvY2tfaXJxKCZpOTE1LT5ndC5jbG9z ZWRfbG9jayk7Cj4gICAJbGlzdF9kZWxfaW5pdCgmdm1hLT5jbG9zZWRfbGluayk7Cj4gICAJc3Bp bl91bmxvY2tfaXJxKCZpOTE1LT5ndC5jbG9zZWRfbG9jayk7Cj4gQEAgLTc4OSw0MCArOTc0LDM1 IEBAIHN0YXRpYyB2b2lkIF9faTkxNV92bWFfcmVtb3ZlX2Nsb3NlZChzdHJ1Y3QgaTkxNV92bWEg KnZtYSkKPiAgIAo+ICAgdm9pZCBpOTE1X3ZtYV9yZW9wZW4oc3RydWN0IGk5MTVfdm1hICp2bWEp Cj4gICB7Cj4gLQlfX2k5MTVfdm1hX3JlbW92ZV9jbG9zZWQodm1hKTsKPiArCWlmIChpOTE1X3Zt YV9pc19jbG9zZWQodm1hKSkKPiArCQlfX2k5MTVfdm1hX3JlbW92ZV9jbG9zZWQodm1hKTsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBfX2k5MTVfdm1hX2Rlc3Ryb3koc3RydWN0IGk5MTVfdm1h ICp2bWEpCj4gK3ZvaWQgaTkxNV92bWFfZGVzdHJveShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAg IHsKPiAtCUdFTV9CVUdfT04oZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUpKTsKPiAt CUdFTV9CVUdfT04odm1hLT5mZW5jZSk7Cj4gKwlpZiAoZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2 bWEtPm5vZGUpKSB7Cj4gKwkJbXV0ZXhfbG9jaygmdm1hLT52bS0+bXV0ZXgpOwo+ICsJCWF0b21p Y19hbmQofkk5MTVfVk1BX1BJTl9NQVNLLCAmdm1hLT5mbGFncyk7Cj4gKwkJV0FSTl9PTihpOTE1 X3ZtYV91bmJpbmQodm1hKSk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZ2bWEtPnZtLT5tdXRleCk7Cj4g KwkJR0VNX0JVR19PTihkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpOwo+ICsJfQo+ ICsJR0VNX0JVR19PTihpOTE1X3ZtYV9pc19hY3RpdmUodm1hKSk7Cj4gICAKPiAgIAlpZiAodm1h LT5vYmopIHsKPiAgIAkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+b2Jq Owo+ICAgCj4gICAJCXNwaW5fbG9jaygmb2JqLT52bWEubG9jayk7Cj4gICAJCWxpc3RfZGVsKCZ2 bWEtPm9ial9saW5rKTsKPiAtCQlyYl9lcmFzZSgmdm1hLT5vYmpfbm9kZSwgJnZtYS0+b2JqLT52 bWEudHJlZSk7Cj4gKwkJcmJfZXJhc2UoJnZtYS0+b2JqX25vZGUsICZvYmotPnZtYS50cmVlKTsK PiAgIAkJc3Bpbl91bmxvY2soJm9iai0+dm1hLmxvY2spOwo+ICAgCX0KPiAgIAo+IC0JaTkxNV9h Y3RpdmVfZmluaSgmdm1hLT5hY3RpdmUpOwo+IC0KPiAtCWk5MTVfdm1hX2ZyZWUodm1hKTsKPiAt fQo+IC0KPiAtdm9pZCBpOTE1X3ZtYV9kZXN0cm95KHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+IC17 Cj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bWEtPnZtLT5pOTE1LT5kcm0uc3RydWN0X211dGV4 KTsKPiAtCj4gLQlHRU1fQlVHX09OKGk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKTsKPiAtCj4gICAJ X19pOTE1X3ZtYV9yZW1vdmVfY2xvc2VkKHZtYSk7Cj4gKwlpOTE1X3ZtX3B1dCh2bWEtPnZtKTsK PiAgIAo+IC0JV0FSTl9PTihpOTE1X3ZtYV91bmJpbmQodm1hKSk7Cj4gLQlHRU1fQlVHX09OKGk5 MTVfdm1hX2lzX2FjdGl2ZSh2bWEpKTsKPiAtCj4gLQlfX2k5MTVfdm1hX2Rlc3Ryb3kodm1hKTsK PiArCWk5MTVfYWN0aXZlX2ZpbmkoJnZtYS0+YWN0aXZlKTsKPiArCWk5MTVfdm1hX2ZyZWUodm1h KTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBpOTE1X3ZtYV9wYXJrZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUpCj4gQEAgLTgzMSwxMiArMTAxMSwzMiBAQCB2b2lkIGk5MTVfdm1hX3Bhcmtl ZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAo+ICAgCXNwaW5fbG9ja19pcnEo Jmk5MTUtPmd0LmNsb3NlZF9sb2NrKTsKPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodm1h LCBuZXh0LCAmaTkxNS0+Z3QuY2xvc2VkX3ZtYSwgY2xvc2VkX2xpbmspIHsKPiAtCQlsaXN0X2Rl bF9pbml0KCZ2bWEtPmNsb3NlZF9saW5rKTsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqID0gdm1hLT5vYmo7Cj4gKwkJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0gPSB2 bWEtPnZtOwo+ICsKPiArCQkvKiBYWFggQWxsIHRvIGF2b2lkIGtlZXBpbmcgYSByZWZlcmVuY2Ug b24gaTkxNV92bWEgaXRzZWxmICovCj4gKwo+ICsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8o Jm9iai0+YmFzZS5yZWZjb3VudCkpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZiAoIWk5MTVf dm1fdHJ5b3Blbih2bSkpIHsKPiArCQkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJCQlv YmogPSBOVUxMOwo+ICsJCX0KPiArCj4gICAJCXNwaW5fdW5sb2NrX2lycSgmaTkxNS0+Z3QuY2xv c2VkX2xvY2spOwo+ICAgCj4gLQkJaTkxNV92bWFfZGVzdHJveSh2bWEpOwo+ICsJCWlmIChvYmop IHsKPiArCQkJaTkxNV92bWFfZGVzdHJveSh2bWEpOwo+ICsJCQlpOTE1X2dlbV9vYmplY3RfcHV0 KG9iaik7Cj4gKwkJfQo+ICsKPiArCQlpOTE1X3ZtX2Nsb3NlKHZtKTsKPiAgIAo+ICsJCS8qIFJl c3RhcnQgYWZ0ZXIgZHJvcHBpbmcgbG9jayAqLwo+ICAgCQlzcGluX2xvY2tfaXJxKCZpOTE1LT5n dC5jbG9zZWRfbG9jayk7Cj4gKwkJbmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoJmk5MTUtPmd0LmNs b3NlZF92bWEsCj4gKwkJCQkJdHlwZW9mKCpuZXh0KSwgY2xvc2VkX2xpbmspOwo+ICAgCX0KPiAg IAlzcGluX3VubG9ja19pcnEoJmk5MTUtPmd0LmNsb3NlZF9sb2NrKTsKPiAgIH0KPiBAQCAtODg3 LDYgKzEwODcsMTAgQEAgaW50IGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBpOTE1X3Zt YSAqdm1hLAo+ICAgCWFzc2VydF9vYmplY3RfaGVsZChvYmopOwo+ICAgCUdFTV9CVUdfT04oIWRy bV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSk7Cj4gICAKPiArCWVyciA9IGk5MTVfcmVx dWVzdF9hd2FpdF9hY3RpdmUocnEsICZ2bWEtPmFjdGl2ZSk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJl dHVybiBlcnI7Cj4gKwo+ICAgCS8qCj4gICAJICogQWRkIGEgcmVmZXJlbmNlIGlmIHdlJ3JlIG5l d2x5IGVudGVyaW5nIHRoZSBhY3RpdmUgbGlzdC4KPiAgIAkgKiBUaGUgb3JkZXIgaW4gd2hpY2gg d2UgYWRkIG9wZXJhdGlvbnMgdG8gdGhlIHJldGlyZW1lbnQgcXVldWUgaXMKPiBAQCAtOTI3LDM0 ICsxMTMxLDE5IEBAIGludCBpOTE1X3ZtYV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4g ICB7Cj4gICAJaW50IHJldDsKPiAgIAo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmdm1hLT52bS0+ aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bWEtPnZt LT5tdXRleCk7Cj4gICAKPiAgIAkvKgo+ICAgCSAqIEZpcnN0IHdhaXQgdXBvbiBhbnkgYWN0aXZp dHkgYXMgcmV0aXJpbmcgdGhlIHJlcXVlc3QgbWF5Cj4gICAJICogaGF2ZSBzaWRlLWVmZmVjdHMg c3VjaCBhcyB1bnBpbm5pbmcgb3IgZXZlbiB1bmJpbmRpbmcgdGhpcyB2bWEuCj4gKwkgKgo+ICsJ ICogWFhYIEFjdHVhbGx5IHdhaXRpbmcgdW5kZXIgdGhlIHZtLT5tdXRleCBpcyBhIGhpbmRlcmFu Y2UgYW5kCj4gKwkgKiBzaG91bGQgYmUgcGlwZWxpbmVkIHdoZXJldmVyIHBvc3NpYmxlLiBJbiBj YXNlcyB3aGVyZSB0aGF0IGlzCj4gKwkgKiB1bmF2b2lkYWJsZSwgd2Ugc2hvdWxkIGxpZnQgdGhl IHdhaXQgdG8gYmVmb3JlIHRoZSBtdXRleC4KPiAgIAkgKi8KPiAtCW1pZ2h0X3NsZWVwKCk7Cj4g LQlpZiAoaTkxNV92bWFfaXNfYWN0aXZlKHZtYSkpIHsKPiAtCQkvKgo+IC0JCSAqIFdoZW4gYSBj bG9zZWQgVk1BIGlzIHJldGlyZWQsIGl0IGlzIHVuYm91bmQgLSBlZWsuCj4gLQkJICogSW4gb3Jk ZXIgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHJlY3Vyc2l2ZWx5IGNsb3NlZCwKPiAtCQkgKiB0 YWtlIGEgcGluIG9uIHRoZSB2bWEgc28gdGhhdCB0aGUgc2Vjb25kIHVuYmluZCBpcwo+IC0JCSAq IGFib3J0ZWQuCj4gLQkJICoKPiAtCQkgKiBFdmVuIG1vcmUgc2NhcnkgaXMgdGhhdCB0aGUgcmV0 aXJlIGNhbGxiYWNrIG1heSBmcmVlCj4gLQkJICogdGhlIG9iamVjdCAobGFzdCBhY3RpdmUgdm1h KS4gVG8gcHJldmVudCB0aGUgZXhwbG9zaW9uCj4gLQkJICogd2UgZGVmZXIgdGhlIGFjdHVhbCBv YmplY3QgZnJlZSB0byBhIHdvcmtlciB0aGF0IGNhbgo+IC0JCSAqIG9ubHkgcHJvY2VlZCBvbmNl IGl0IGFjcXVpcmVzIHRoZSBzdHJ1Y3RfbXV0ZXggKHdoaWNoCj4gLQkJICogd2UgY3VycmVudGx5 IGhvbGQsIHRoZXJlZm9yZSBpdCBjYW5ub3QgZnJlZSB0aGlzIG9iamVjdAo+IC0JCSAqIGJlZm9y ZSB3ZSBhcmUgZmluaXNoZWQpLgo+IC0JCSAqLwo+IC0JCV9faTkxNV92bWFfcGluKHZtYSk7Cj4g LQkJcmV0ID0gaTkxNV9hY3RpdmVfd2FpdCgmdm1hLT5hY3RpdmUpOwo+IC0JCV9faTkxNV92bWFf dW5waW4odm1hKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0JR0VN X0JVR19PTihpOTE1X3ZtYV9pc19hY3RpdmUodm1hKSk7Cj4gKwlyZXQgPSBpOTE1X2FjdGl2ZV93 YWl0KCZ2bWEtPmFjdGl2ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gICAKPiAg IAlpZiAoaTkxNV92bWFfaXNfcGlubmVkKHZtYSkpIHsKPiAgIAkJdm1hX3ByaW50X2FsbG9jYXRv cih2bWEsICJpcyBwaW5uZWQiKTsKPiBAQCAtOTc1LDE2ICsxMTY0LDEyIEBAIGludCBpOTE1X3Zt YV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gICAJCUdFTV9CVUdfT04oaTkxNV92bWFf aGFzX2dndHRfd3JpdGUodm1hKSk7Cj4gICAKPiAgIAkJLyogcmVsZWFzZSB0aGUgZmVuY2UgcmVn IF9hZnRlcl8gZmx1c2hpbmcgKi8KPiAtCQltdXRleF9sb2NrKCZ2bWEtPnZtLT5tdXRleCk7Cj4g ICAJCXJldCA9IGk5MTVfdm1hX3Jldm9rZV9mZW5jZSh2bWEpOwo+IC0JCW11dGV4X3VubG9jaygm dm1hLT52bS0+bXV0ZXgpOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJcmV0dXJuIHJldDsKPiAgIAo+ ICAgCQkvKiBGb3JjZSBhIHBhZ2VmYXVsdCBmb3IgZG9tYWluIHRyYWNraW5nIG9uIG5leHQgdXNl ciBhY2Nlc3MgKi8KPiAtCQltdXRleF9sb2NrKCZ2bWEtPnZtLT5tdXRleCk7Cj4gICAJCWk5MTVf dm1hX3Jldm9rZV9tbWFwKHZtYSk7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZ2bWEtPnZtLT5tdXRleCk7 Cj4gICAKPiAgIAkJX19pOTE1X3ZtYV9pb3VubWFwKHZtYSk7Cj4gICAJCWNsZWFyX2JpdChJOTE1 X1ZNQV9DQU5fRkVOQ0VfQklULCBfX2k5MTVfdm1hX2ZsYWdzKHZtYSkpOwo+IEBAIC05OTIsMTIg KzExNzcsMTMgQEAgaW50IGk5MTVfdm1hX3VuYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAg IAlHRU1fQlVHX09OKHZtYS0+ZmVuY2UpOwo+ICAgCUdFTV9CVUdfT04oaTkxNV92bWFfaGFzX3Vz ZXJmYXVsdCh2bWEpKTsKPiAgIAo+IC0JaWYgKGxpa2VseSghdm1hLT52bS0+Y2xvc2VkKSkgewo+ ICsJaWYgKGxpa2VseShhdG9taWNfcmVhZCgmdm1hLT52bS0+b3BlbikpKSB7Cj4gICAJCXRyYWNl X2k5MTVfdm1hX3VuYmluZCh2bWEpOwo+ICAgCQl2bWEtPm9wcy0+dW5iaW5kX3ZtYSh2bWEpOwo+ ICAgCX0KPiAtCWF0b21pY19hbmQofkk5MTVfVk1BX0JJTkRfTUFTSywgJnZtYS0+ZmxhZ3MpOwo+ ICsJYXRvbWljX2FuZCh+KEk5MTVfVk1BX0JJTkRfTUFTSyB8IEk5MTVfVk1BX0VSUk9SKSwgJnZt YS0+ZmxhZ3MpOwo+ICAgCj4gKwl2bWFfdW5iaW5kX3BhZ2VzKHZtYSk7Cj4gICAJaTkxNV92bWFf cmVtb3ZlKHZtYSk7Cj4gICAKPiAgIAlyZXR1cm4gMDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV92bWEuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmgK PiBpbmRleCA2MDUzY2UxZGM5NWMuLmE3ODRkYzg3OTE2OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV92bWEuaAo+IEBAIC05NiwyNSArOTYsMjggQEAgc3RydWN0IGk5MTVfdm1hIHsKPiAgIAkgKiBl eGNsdXNpdmUgY2FjaGVsaW5lcyBvZiBhIHNpbmdsZSBwYWdlLCBzbyBhIG1heGltdW0gb2YgNjQg cG9zc2libGUKPiAgIAkgKiB1c2Vycy4KPiAgIAkgKi8KPiAtI2RlZmluZSBJOTE1X1ZNQV9QSU5f TUFTSyAweGZmCj4gLSNkZWZpbmUgSTkxNV9WTUFfUElOX09WRVJGTE9XX0JJVCA4Cj4gLSNkZWZp bmUgSTkxNV9WTUFfUElOX09WRVJGTE9XCSgoaW50KUJJVChJOTE1X1ZNQV9QSU5fT1ZFUkZMT1df QklUKSkKPiArI2RlZmluZSBJOTE1X1ZNQV9QSU5fTUFTSyAweDNmZgo+ICsjZGVmaW5lIEk5MTVf Vk1BX09WRVJGTE9XIDB4MjAwCj4gICAKPiAgIAkvKiogRmxhZ3MgYW5kIGFkZHJlc3Mgc3BhY2Ug dGhpcyBWTUEgaXMgYm91bmQgdG8gKi8KPiAtI2RlZmluZSBJOTE1X1ZNQV9HTE9CQUxfQklORF9C SVQgOQo+IC0jZGVmaW5lIEk5MTVfVk1BX0xPQ0FMX0JJTkRfQklUIDEwCj4gKyNkZWZpbmUgSTkx NV9WTUFfR0xPQkFMX0JJTkRfQklUIDEwCj4gKyNkZWZpbmUgSTkxNV9WTUFfTE9DQUxfQklORF9C SVQgIDExCj4gICAKPiAgICNkZWZpbmUgSTkxNV9WTUFfR0xPQkFMX0JJTkQJKChpbnQpQklUKEk5 MTVfVk1BX0dMT0JBTF9CSU5EX0JJVCkpCj4gICAjZGVmaW5lIEk5MTVfVk1BX0xPQ0FMX0JJTkQJ KChpbnQpQklUKEk5MTVfVk1BX0xPQ0FMX0JJTkRfQklUKSkKPiAgIAo+IC0jZGVmaW5lIEk5MTVf Vk1BX0JJTkRfTUFTSyAoSTkxNV9WTUFfR0xPQkFMX0JJTkQgfCBcCj4gLQkJCSAgICBJOTE1X1ZN QV9MT0NBTF9CSU5EIHwgXAo+IC0JCQkgICAgSTkxNV9WTUFfUElOX09WRVJGTE9XKQo+ICsjZGVm aW5lIEk5MTVfVk1BX0JJTkRfTUFTSyAoSTkxNV9WTUFfR0xPQkFMX0JJTkQgfCBJOTE1X1ZNQV9M T0NBTF9CSU5EKQo+ICAgCj4gLSNkZWZpbmUgSTkxNV9WTUFfR0dUVF9CSVQJMTEKPiAtI2RlZmlu ZSBJOTE1X1ZNQV9DQU5fRkVOQ0VfQklUCTEyCj4gLSNkZWZpbmUgSTkxNV9WTUFfVVNFUkZBVUxU X0JJVAkxMwo+IC0jZGVmaW5lIEk5MTVfVk1BX0dHVFRfV1JJVEVfQklUCTE0Cj4gKyNkZWZpbmUg STkxNV9WTUFfQUxMT0NfQklUCTEyCj4gKyNkZWZpbmUgSTkxNV9WTUFfQUxMT0MJCSgoaW50KUJJ VChJOTE1X1ZNQV9BTExPQ19CSVQpKQo+ICsKPiArI2RlZmluZSBJOTE1X1ZNQV9FUlJPUl9CSVQJ MTMKPiArI2RlZmluZSBJOTE1X1ZNQV9FUlJPUgkJKChpbnQpQklUKEk5MTVfVk1BX0VSUk9SX0JJ VCkpCj4gKwo+ICsjZGVmaW5lIEk5MTVfVk1BX0dHVFRfQklUCTE0Cj4gKyNkZWZpbmUgSTkxNV9W TUFfQ0FOX0ZFTkNFX0JJVAkxNQo+ICsjZGVmaW5lIEk5MTVfVk1BX1VTRVJGQVVMVF9CSVQJMTYK PiArI2RlZmluZSBJOTE1X1ZNQV9HR1RUX1dSSVRFX0JJVAkxNwo+ICAgCj4gICAjZGVmaW5lIEk5 MTVfVk1BX0dHVFQJCSgoaW50KUJJVChJOTE1X1ZNQV9HR1RUX0JJVCkpCj4gICAjZGVmaW5lIEk5 MTVfVk1BX0NBTl9GRU5DRQkoKGludClCSVQoSTkxNV9WTUFfQ0FOX0ZFTkNFX0JJVCkpCj4gQEAg LTEyMyw2ICsxMjYsMTEgQEAgc3RydWN0IGk5MTVfdm1hIHsKPiAgIAo+ICAgCXN0cnVjdCBpOTE1 X2FjdGl2ZSBhY3RpdmU7Cj4gICAKPiArI2RlZmluZSBJOTE1X1ZNQV9QQUdFU19CSUFTIDI0Cj4g KyNkZWZpbmUgSTkxNV9WTUFfUEFHRVNfQUNUSVZFIChCSVQoMjQpIHwgMSkKPiArCWF0b21pY190 IHBhZ2VzX2NvdW50OyAvKiBudW1iZXIgb2YgYWN0aXZlIGJpbmRzIHRvIHRoZSBwYWdlcyAqLwo+ ICsJc3RydWN0IG11dGV4IHBhZ2VzX211dGV4OyAvKiBwcm90ZWN0IGFjcXVpcmUvcmVsZWFzZSBv ZiBiYWNraW5nIHBhZ2VzICovCj4gKwo+ICAgCS8qKgo+ICAgCSAqIFN1cHBvcnQgZGlmZmVyZW50 IEdHVFQgdmlld3MgaW50byB0aGUgc2FtZSBvYmplY3QuCj4gICAJICogVGhpcyBtZWFucyB0aGVy ZSBjYW4gYmUgbXVsdGlwbGUgVk1BIG1hcHBpbmdzIHBlciBvYmplY3QgYW5kIHBlciBWTS4KPiBA QCAtMzA3LDggKzMxNSwxMiBAQCBpOTE1X3ZtYV9jb21wYXJlKHN0cnVjdCBpOTE1X3ZtYSAqdm1h LAo+ICAgCXJldHVybiBtZW1jbXAoJnZtYS0+Z2d0dF92aWV3LnBhcnRpYWwsICZ2aWV3LT5wYXJ0 aWFsLCB2aWV3LT50eXBlKTsKPiAgIH0KPiAgIAo+IC1pbnQgaTkxNV92bWFfYmluZChzdHJ1Y3Qg aTkxNV92bWEgKnZtYSwgZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hlX2xldmVsLAo+IC0JCSAg dTMyIGZsYWdzKTsKPiArc3RydWN0IGk5MTVfdm1hX3dvcmsgKmk5MTVfdm1hX3dvcmsodm9pZCk7 Cj4gK2ludCBpOTE1X3ZtYV9iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ICsJCSAgZW51bSBp OTE1X2NhY2hlX2xldmVsIGNhY2hlX2xldmVsLAo+ICsJCSAgdTMyIGZsYWdzLAo+ICsJCSAgc3Ry dWN0IGk5MTVfdm1hX3dvcmsgKndvcmspOwo+ICsKPiAgIGJvb2wgaTkxNV9nZW1fdmFsaWRfZ3R0 X3NwYWNlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1bnNpZ25lZCBsb25nIGNhY2hlX2xldmVsKTsK PiAgIGJvb2wgaTkxNV92bWFfbWlzcGxhY2VkKGNvbnN0IHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ ICAgCQkJdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsIHU2NCBmbGFncyk7Cj4gQEAgLTMzMiwyNiAr MzQ0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGk5MTVfdm1hX3VubG9jayhzdHJ1Y3QgaTkxNV92 bWEgKnZtYSkKPiAgIAlkbWFfcmVzdl91bmxvY2sodm1hLT5yZXN2KTsKPiAgIH0KPiAgIAo+IC1p bnQgX19pOTE1X3ZtYV9kb19waW4oc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gLQkJICAgICAgdTY0 IHNpemUsIHU2NCBhbGlnbm1lbnQsIHU2NCBmbGFncyk7Cj4gLXN0YXRpYyBpbmxpbmUgaW50IF9f bXVzdF9jaGVjawo+IC1pOTE1X3ZtYV9waW4oc3RydWN0IGk5MTVfdm1hICp2bWEsIHU2NCBzaXpl LCB1NjQgYWxpZ25tZW50LCB1NjQgZmxhZ3MpCj4gLXsKPiAtCUJVSUxEX0JVR19PTihQSU5fTUJa ICE9IEk5MTVfVk1BX1BJTl9PVkVSRkxPVyk7Cj4gLQlCVUlMRF9CVUdfT04oUElOX0dMT0JBTCAh PSBJOTE1X1ZNQV9HTE9CQUxfQklORCk7Cj4gLQlCVUlMRF9CVUdfT04oUElOX1VTRVIgIT0gSTkx NV9WTUFfTE9DQUxfQklORCk7Cj4gLQo+IC0JLyogUGluIGVhcmx5IHRvIHByZXZlbnQgdGhlIHNo cmlua2VyL2V2aWN0aW9uIGxvZ2ljIGZyb20gZGVzdHJveWluZwo+IC0JICogb3VyIHZtYSBhcyB3 ZSBpbnNlcnQgYW5kIGJpbmQuCj4gLQkgKi8KPiAtCWlmIChsaWtlbHkoKChhdG9taWNfaW5jX3Jl dHVybigmdm1hLT5mbGFncykgXiBmbGFncykgJiBJOTE1X1ZNQV9CSU5EX01BU0spID09IDApKSB7 Cj4gLQkJR0VNX0JVR19PTighZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUpKTsKPiAt CQlHRU1fQlVHX09OKGk5MTVfdm1hX21pc3BsYWNlZCh2bWEsIHNpemUsIGFsaWdubWVudCwgZmxh Z3MpKTsKPiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gX19pOTE1X3ZtYV9kb19w aW4odm1hLCBzaXplLCBhbGlnbm1lbnQsIGZsYWdzKTsKPiAtfQo+ICtpbnQgX19tdXN0X2NoZWNr Cj4gK2k5MTVfdm1hX3BpbihzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgdTY0IHNpemUsIHU2NCBhbGln bm1lbnQsIHU2NCBmbGFncyk7Cj4gICAKPiAgIHN0YXRpYyBpbmxpbmUgaW50IGk5MTVfdm1hX3Bp bl9jb3VudChjb25zdCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHsKPiBAQCAtMzY2LDE3ICsz NjAsMTcgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfdm1hX2lzX3Bpbm5lZChjb25zdCBzdHJ1 Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2k5MTVfdm1hX3Bpbihz dHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHsKPiAgIAlhdG9taWNfaW5jKCZ2bWEtPmZsYWdzKTsK PiAtCUdFTV9CVUdfT04oYXRvbWljX3JlYWQoJnZtYS0+ZmxhZ3MpICYgSTkxNV9WTUFfUElOX09W RVJGTE9XKTsKPiArCUdFTV9CVUdfT04oIWk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKTsKPiAgIH0K PiAgIAo+ICAgc3RhdGljIGlubGluZSB2b2lkIF9faTkxNV92bWFfdW5waW4oc3RydWN0IGk5MTVf dm1hICp2bWEpCj4gICB7Cj4gKwlHRU1fQlVHX09OKCFpOTE1X3ZtYV9pc19waW5uZWQodm1hKSk7 Cj4gICAJYXRvbWljX2RlYygmdm1hLT5mbGFncyk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbmxp bmUgdm9pZCBpOTE1X3ZtYV91bnBpbihzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHsKPiAtCUdF TV9CVUdfT04oIWk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKTsKPiAgIAlHRU1fQlVHX09OKCFkcm1f bW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpOwo+ICAgCV9faTkxNV92bWFfdW5waW4odm1h KTsKPiAgIH0KPiBAQCAtMzk2LDggKzM5MCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X3Zt YV9pc19ib3VuZChjb25zdCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgICAqIHRoZSBjYWxsZXIg bXVzdCBjYWxsIGk5MTVfdm1hX3VucGluX2lvbWFwIHRvIHJlbGlucXVpc2ggdGhlIHBpbm5pbmcK PiAgICAqIGFmdGVyIHRoZSBpb21hcHBpbmcgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLgo+ICAgICoK PiAtICogQ2FsbGVycyBtdXN0IGhvbGQgdGhlIHN0cnVjdF9tdXRleC4KPiAtICoKPiAgICAqIFJl dHVybnMgYSB2YWxpZCBpb21hcHBlZCBwb2ludGVyIG9yIEVSUl9QVFIuCj4gICAgKi8KPiAgIHZv aWQgX19pb21lbSAqaTkxNV92bWFfcGluX2lvbWFwKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKPiBA QCAtNDA5LDggKzQwMSw4IEBAIHZvaWQgX19pb21lbSAqaTkxNV92bWFfcGluX2lvbWFwKHN0cnVj dCBpOTE1X3ZtYSAqdm1hKTsKPiAgICAqCj4gICAgKiBVbnBpbnMgdGhlIHByZXZpb3VzbHkgaW9t YXBwZWQgVk1BIGZyb20gaTkxNV92bWFfcGluX2lvbWFwKCkuCj4gICAgKgo+IC0gKiBDYWxsZXJz IG11c3QgaG9sZCB0aGUgc3RydWN0X211dGV4LiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdmFsaWQg dG8gYmUKPiAtICogY2FsbGVkIG9uIGEgVk1BIHByZXZpb3VzbHkgaW9tYXBwZWQgYnkgdGhlIGNh bGxlciB3aXRoIGk5MTVfdm1hX3Bpbl9pb21hcCgpLgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIG9u bHkgdmFsaWQgdG8gYmUgY2FsbGVkIG9uIGEgVk1BIHByZXZpb3VzbHkKPiArICogaW9tYXBwZWQg YnkgdGhlIGNhbGxlciB3aXRoIGk5MTVfdm1hX3Bpbl9pb21hcCgpLgo+ICAgICovCj4gICB2b2lk IGk5MTVfdm1hX3VucGluX2lvbWFwKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKPiAgIAo+IEBAIC00 MzgsNiArNDMwLDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqaTkxNV92bWFfZmlyc3Rf cGFnZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIGludCBfX211c3RfY2hlY2sgaTkxNV92bWFf cGluX2ZlbmNlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKPiAgIGludCBfX211c3RfY2hlY2sgaTkx NV92bWFfcmV2b2tlX2ZlbmNlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKPiAgIAo+ICtpbnQgX19p OTE1X3ZtYV9waW5fZmVuY2Uoc3RydWN0IGk5MTVfdm1hICp2bWEpOwo+ICsKPiAgIHN0YXRpYyBp bmxpbmUgdm9pZCBfX2k5MTVfdm1hX3VucGluX2ZlbmNlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ ICAgewo+ICAgCUdFTV9CVUdfT04oYXRvbWljX3JlYWQoJnZtYS0+ZmVuY2UtPnBpbl9jb3VudCkg PD0gMCk7Cj4gQEAgLTQ1NSw3ICs0NDksNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19pOTE1X3Zt YV91bnBpbl9mZW5jZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHN0YXRpYyBpbmxpbmUgdm9p ZAo+ICAgaTkxNV92bWFfdW5waW5fZmVuY2Uoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gICB7Cj4g LQkvKiBsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bWEtPnZtLT5pOTE1LT5kcm0uc3RydWN0X211dGV4 KTsgKi8KPiAgIAlpZiAodm1hLT5mZW5jZSkKPiAgIAkJX19pOTE1X3ZtYV91bnBpbl9mZW5jZSh2 bWEpOwo+ICAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9nZW1fZXZpY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dl bV9ldmljdC5jCj4gaW5kZXggY2IzMGM2NjliMWI3Li5iYTYwNjQxNDcxNzMgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2V2aWN0LmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fZXZpY3QuYwo+IEBAIC0x MDYsMTQgKzEwNiwxMSBAQCBzdGF0aWMgaW50IHBvcHVsYXRlX2dndHQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCj4gICAKPiAgIHN0YXRpYyB2b2lkIHVucGluX2dndHQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICB7Cj4gLQlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0g Jmk5MTUtPmdndHQ7Cj4gICAJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gICAKPiAtCW11dGV4X2xv Y2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmk5MTUt PmdndHQudm0uYm91bmRfbGlzdCwgdm1fbGluaykKPiAgIAkJaWYgKHZtYS0+b2JqLT5tbS5xdWly a2VkKQo+ICAgCQkJaTkxNV92bWFfdW5waW4odm1hKTsKPiAtCW11dGV4X3VubG9jaygmZ2d0dC0+ dm0ubXV0ZXgpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZCBjbGVhbnVwX29iamVjdHMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gQEAgLTEyNywxMSArMTI0LDcgQEAgc3RhdGlj IHZvaWQgY2xlYW51cF9vYmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAg CQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gICAJfQo+ICAgCj4gLQltdXRleF91bmxvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAlpOTE1X2dlbV9kcmFpbl9mcmVlZF9v YmplY3RzKGk5MTUpOwo+IC0KPiAtCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgp Owo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGlndF9ldmljdF9zb21ldGhpbmcodm9pZCAqYXJn KQo+IEBAIC0xNDgsMTAgKzE0MSwxMiBAQCBzdGF0aWMgaW50IGlndF9ldmljdF9zb21ldGhpbmco dm9pZCAqYXJnKQo+ICAgCQlnb3RvIGNsZWFudXA7Cj4gICAKPiAgIAkvKiBFdmVyeXRoaW5nIGlz IHBpbm5lZCwgbm90aGluZyBzaG91bGQgaGFwcGVuICovCj4gKwltdXRleF9sb2NrKCZnZ3R0LT52 bS5tdXRleCk7Cj4gICAJZXJyID0gaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKCZnZ3R0LT52bSwK PiAgIAkJCQkgICAgICAgSTkxNV9HVFRfUEFHRV9TSVpFLCAwLCAwLAo+ICAgCQkJCSAgICAgICAw LCBVNjRfTUFYLAo+ICAgCQkJCSAgICAgICAwKTsKPiArCW11dGV4X3VubG9jaygmZ2d0dC0+dm0u bXV0ZXgpOwo+ICAgCWlmIChlcnIgIT0gLUVOT1NQQykgewo+ICAgCQlwcl9lcnIoImk5MTVfZ2Vt X2V2aWN0X3NvbWV0aGluZyBmYWlsZWQgb24gYSBmdWxsIEdHVFQgd2l0aCBlcnI9JWRcbiIsCj4g ICAJCSAgICAgICBlcnIpOwo+IEBAIC0xNjEsMTAgKzE1NiwxMiBAQCBzdGF0aWMgaW50IGlndF9l dmljdF9zb21ldGhpbmcodm9pZCAqYXJnKQo+ICAgCXVucGluX2dndHQoaTkxNSk7Cj4gICAKPiAg IAkvKiBFdmVyeXRoaW5nIGlzIHVucGlubmVkLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBldmljdCBz b21ldGhpbmcgKi8KPiArCW11dGV4X2xvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAllcnIgPSBp OTE1X2dlbV9ldmljdF9zb21ldGhpbmcoJmdndHQtPnZtLAo+ICAgCQkJCSAgICAgICBJOTE1X0dU VF9QQUdFX1NJWkUsIDAsIDAsCj4gICAJCQkJICAgICAgIDAsIFU2NF9NQVgsCj4gICAJCQkJICAg ICAgIDApOwo+ICsJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJaWYgKGVycikg ewo+ICAgCQlwcl9lcnIoImk5MTVfZ2VtX2V2aWN0X3NvbWV0aGluZyBmYWlsZWQgb24gYSBmdWxs IEdHVFQgd2l0aCBlcnI9JWRcbiIsCj4gICAJCSAgICAgICBlcnIpOwo+IEBAIC0yMzAsNyArMjI3 LDkgQEAgc3RhdGljIGludCBpZ3RfZXZpY3RfZm9yX3ZtYSh2b2lkICphcmcpCj4gICAJCWdvdG8g Y2xlYW51cDsKPiAgIAo+ICAgCS8qIEV2ZXJ5dGhpbmcgaXMgcGlubmVkLCBub3RoaW5nIHNob3Vs ZCBoYXBwZW4gKi8KPiArCW11dGV4X2xvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAllcnIgPSBp OTE1X2dlbV9ldmljdF9mb3Jfbm9kZSgmZ2d0dC0+dm0sICZ0YXJnZXQsIDApOwo+ICsJbXV0ZXhf dW5sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJaWYgKGVyciAhPSAtRU5PU1BDKSB7Cj4gICAJ CXByX2VycigiaTkxNV9nZW1fZXZpY3RfZm9yX25vZGUgb24gYSBmdWxsIEdHVFQgcmV0dXJuZWQg ZXJyPSVkXG4iLAo+ICAgCQkgICAgICAgZXJyKTsKPiBAQCAtMjQwLDcgKzIzOSw5IEBAIHN0YXRp YyBpbnQgaWd0X2V2aWN0X2Zvcl92bWEodm9pZCAqYXJnKQo+ICAgCXVucGluX2dndHQoaTkxNSk7 Cj4gICAKPiAgIAkvKiBFdmVyeXRoaW5nIGlzIHVucGlubmVkLCB3ZSBzaG91bGQgYmUgYWJsZSB0 byBldmljdCB0aGUgbm9kZSAqLwo+ICsJbXV0ZXhfbG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAg CWVyciA9IGk5MTVfZ2VtX2V2aWN0X2Zvcl9ub2RlKCZnZ3R0LT52bSwgJnRhcmdldCwgMCk7Cj4g KwltdXRleF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAlpZiAoZXJyKSB7Cj4gICAJCXBy X2VycigiaTkxNV9nZW1fZXZpY3RfZm9yX25vZGUgcmV0dXJuZWQgZXJyPSVkXG4iLAo+ICAgCQkg ICAgICAgZXJyKTsKPiBAQCAtMzE3LDcgKzMxOCw5IEBAIHN0YXRpYyBpbnQgaWd0X2V2aWN0X2Zv cl9jYWNoZV9jb2xvcih2b2lkICphcmcpCj4gICAJaTkxNV92bWFfdW5waW4odm1hKTsKPiAgIAo+ ICAgCS8qIFJlbW92ZSBqdXN0IHRoZSBzZWNvbmQgdm1hICovCj4gKwltdXRleF9sb2NrKCZnZ3R0 LT52bS5tdXRleCk7Cj4gICAJZXJyID0gaTkxNV9nZW1fZXZpY3RfZm9yX25vZGUoJmdndHQtPnZt LCAmdGFyZ2V0LCAwKTsKPiArCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCWlm IChlcnIpIHsKPiAgIAkJcHJfZXJyKCJbMF1pOTE1X2dlbV9ldmljdF9mb3Jfbm9kZSByZXR1cm5l ZCBlcnI9JWRcbiIsIGVycik7Cj4gICAJCWdvdG8gY2xlYW51cDsKPiBAQCAtMzI4LDcgKzMzMSw5 IEBAIHN0YXRpYyBpbnQgaWd0X2V2aWN0X2Zvcl9jYWNoZV9jb2xvcih2b2lkICphcmcpCj4gICAJ ICovCj4gICAJdGFyZ2V0LmNvbG9yID0gSTkxNV9DQUNIRV9MM19MTEM7Cj4gICAKPiArCW11dGV4 X2xvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAllcnIgPSBpOTE1X2dlbV9ldmljdF9mb3Jfbm9k ZSgmZ2d0dC0+dm0sICZ0YXJnZXQsIDApOwo+ICsJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5tdXRl eCk7Cj4gICAJaWYgKCFlcnIpIHsKPiAgIAkJcHJfZXJyKCJbMV1pOTE1X2dlbV9ldmljdF9mb3Jf bm9kZSByZXR1cm5lZCBlcnI9JWRcbiIsIGVycik7Cj4gICAJCWVyciA9IC1FSU5WQUw7Cj4gQEAg LTM1OCw3ICszNjMsOSBAQCBzdGF0aWMgaW50IGlndF9ldmljdF92bSh2b2lkICphcmcpCj4gICAJ CWdvdG8gY2xlYW51cDsKPiAgIAo+ICAgCS8qIEV2ZXJ5dGhpbmcgaXMgcGlubmVkLCBub3RoaW5n IHNob3VsZCBoYXBwZW4gKi8KPiArCW11dGV4X2xvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAll cnIgPSBpOTE1X2dlbV9ldmljdF92bSgmZ2d0dC0+dm0pOwo+ICsJbXV0ZXhfdW5sb2NrKCZnZ3R0 LT52bS5tdXRleCk7Cj4gICAJaWYgKGVycikgewo+ICAgCQlwcl9lcnIoImk5MTVfZ2VtX2V2aWN0 X3ZtIG9uIGEgZnVsbCBHR1RUIHJldHVybmVkIGVycj0lZF1cbiIsCj4gICAJCSAgICAgICBlcnIp Owo+IEBAIC0zNjcsNyArMzc0LDkgQEAgc3RhdGljIGludCBpZ3RfZXZpY3Rfdm0odm9pZCAqYXJn KQo+ICAgCj4gICAJdW5waW5fZ2d0dChpOTE1KTsKPiAgIAo+ICsJbXV0ZXhfbG9jaygmZ2d0dC0+ dm0ubXV0ZXgpOwo+ICAgCWVyciA9IGk5MTVfZ2VtX2V2aWN0X3ZtKCZnZ3R0LT52bSk7Cj4gKwlt dXRleF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAlpZiAoZXJyKSB7Cj4gICAJCXByX2Vy cigiaTkxNV9nZW1fZXZpY3Rfdm0gb24gYSBmdWxsIEdHVFQgcmV0dXJuZWQgZXJyPSVkXVxuIiwK PiAgIAkJICAgICAgIGVycik7Cj4gQEAgLTQwOCwxMSArNDE3LDExIEBAIHN0YXRpYyBpbnQgaWd0 X2V2aWN0X2NvbnRleHRzKHZvaWQgKmFyZykKPiAgIAlpZiAoIUhBU19GVUxMX1BQR1RUKGk5MTUp KQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gICAJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZpOTE1LT5ydW50aW1l X3BtKTsKPiAgIAo+ICAgCS8qIFJlc2VydmUgYSBibG9jayBzbyB0aGF0IHdlIGtub3cgd2UgaGF2 ZSBlbm91Z2ggdG8gZml0IGEgZmV3IHJxICovCj4gICAJbWVtc2V0KCZob2xlLCAwLCBzaXplb2Yo aG9sZSkpOwo+ICsJbXV0ZXhfbG9jaygmaTkxNS0+Z2d0dC52bS5tdXRleCk7Cj4gICAJZXJyID0g aTkxNV9nZW1fZ3R0X2luc2VydCgmaTkxNS0+Z2d0dC52bSwgJmhvbGUsCj4gICAJCQkJICBQUkVU RU5EX0dHVFRfU0laRSwgMCwgSTkxNV9DT0xPUl9VTkVWSUNUQUJMRSwKPiAgIAkJCQkgIDAsIGk5 MTUtPmdndHQudm0udG90YWwsCj4gQEAgLTQyNSw3ICs0MzQsOSBAQCBzdGF0aWMgaW50IGlndF9l dmljdF9jb250ZXh0cyh2b2lkICphcmcpCj4gICAJZG8gewo+ICAgCQlzdHJ1Y3QgcmVzZXJ2ZWQg KnI7Cj4gICAKPiArCQltdXRleF91bmxvY2soJmk5MTUtPmdndHQudm0ubXV0ZXgpOwo+ICAgCQly ID0ga2NhbGxvYygxLCBzaXplb2YoKnIpLCBHRlBfS0VSTkVMKTsKPiArCQltdXRleF9sb2NrKCZp OTE1LT5nZ3R0LnZtLm11dGV4KTsKPiAgIAkJaWYgKCFyKSB7Cj4gICAJCQllcnIgPSAtRU5PTUVN Owo+ICAgCQkJZ290byBvdXRfbG9ja2VkOwo+IEBAIC00NDUsNyArNDU2LDcgQEAgc3RhdGljIGlu dCBpZ3RfZXZpY3RfY29udGV4dHModm9pZCAqYXJnKQo+ICAgCQljb3VudCsrOwo+ICAgCX0gd2hp bGUgKDEpOwo+ICAgCWRybV9tbV9yZW1vdmVfbm9kZSgmaG9sZSk7Cj4gLQltdXRleF91bmxvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJbXV0ZXhfdW5sb2NrKCZpOTE1LT5nZ3R0LnZt Lm11dGV4KTsKPiAgIAlwcl9pbmZvKCJGaWxsZWQgR0dUVCB3aXRoICVsdSAxTWlCIG5vZGVzXG4i LCBjb3VudCk7Cj4gICAKPiAgIAkvKiBPdmVyZmlsbCB0aGUgR0dUVCB3aXRoIGNvbnRleHQgb2Jq ZWN0cyBhbmQgc28gdHJ5IHRvIGV2aWN0IG9uZS4gKi8KPiBAQCAtNTA4LDcgKzUxOSw3IEBAIHN0 YXRpYyBpbnQgaWd0X2V2aWN0X2NvbnRleHRzKHZvaWQgKmFyZykKPiAgIAkJCWJyZWFrOwo+ICAg CX0KPiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwltdXRl eF9sb2NrKCZpOTE1LT5nZ3R0LnZtLm11dGV4KTsKPiAgIG91dF9sb2NrZWQ6Cj4gICAJaWYgKGln dF9mbHVzaF90ZXN0KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpKQo+ICAgCQllcnIgPSAtRUlPOwo+ IEBAIC01MjIsOCArNTMzLDggQEAgc3RhdGljIGludCBpZ3RfZXZpY3RfY29udGV4dHModm9pZCAq YXJnKQo+ICAgCX0KPiAgIAlpZiAoZHJtX21tX25vZGVfYWxsb2NhdGVkKCZob2xlKSkKPiAgIAkJ ZHJtX21tX3JlbW92ZV9ub2RlKCZob2xlKTsKPiArCW11dGV4X3VubG9jaygmaTkxNS0+Z2d0dC52 bS5tdXRleCk7Cj4gICAJaW50ZWxfcnVudGltZV9wbV9wdXQoJmk5MTUtPnJ1bnRpbWVfcG0sIHdh a2VyZWYpOwo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAo+ ICAgCXJldHVybiBlcnI7Cj4gICB9Cj4gQEAgLTU0NSwxMiArNTU2LDkgQEAgaW50IGk5MTVfZ2Vt X2V2aWN0X21vY2tfc2VsZnRlc3RzKHZvaWQpCj4gICAJaWYgKCFpOTE1KQo+ICAgCQlyZXR1cm4g LUVOT01FTTsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g ICAJd2l0aF9pbnRlbF9ydW50aW1lX3BtKCZpOTE1LT5ydW50aW1lX3BtLCB3YWtlcmVmKQo+ICAg CQllcnIgPSBpOTE1X3N1YnRlc3RzKHRlc3RzLCBpOTE1KTsKPiAgIAo+IC0JbXV0ZXhfdW5sb2Nr KCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gICAJZHJtX2Rldl9wdXQoJmk5MTUtPmRy bSk7Cj4gICAJcmV0dXJuIGVycjsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggYTkwYzliZTk1ZjhjLi40MjM1ZmE0MDE5NTYg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0 dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5j Cj4gQEAgLTM1LDE2ICszNSw3IEBACj4gICAKPiAgIHN0YXRpYyB2b2lkIGNsZWFudXBfZnJlZWRf b2JqZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAtCS8qCj4gLQkg KiBBcyB3ZSBtYXkgaG9sZCBvbnRvIHRoZSBzdHJ1Y3RfbXV0ZXggZm9yIGlub3JkaW5hdGUgbGVu Z3RocyBvZgo+IC0JICogdGltZSwgdGhlIE5NSSBraHVuZ3Rhc2tkIGRldGVjdG9yIG1heSBmaXJl IGZvciB0aGUgZnJlZSBvYmplY3RzCj4gLQkgKiB3b3JrZXIuCj4gLQkgKi8KPiAtCW11dGV4X3Vu bG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ICAgCWk5MTVfZ2VtX2RyYWluX2Zy ZWVkX29iamVjdHMoaTkxNSk7Cj4gLQo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGZha2VfZnJlZV9wYWdlcyhzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IEBAIC0zMTgsNiArMzA5LDE3IEBAIHN0YXRpYyBp bnQgbG93bGV2ZWxfaG9sZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAlyZXR1 cm4gMDsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IHVubG9ja2VkX3ZtYV91bmJpbmQoc3RydWN0 IGk5MTVfdm1hICp2bWEpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmdm1h LT52bS0+bXV0ZXgpOwo+ICsJcmV0ID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7Cj4gKwltdXRleF91 bmxvY2soJnZtYS0+dm0tPm11dGV4KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICAg c3RhdGljIHZvaWQgY2xvc2Vfb2JqZWN0X2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqb2JqZWN0cywK PiAgIAkJCSAgICAgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAgewo+IEBAIC0z MjksNyArMzMxLDcgQEAgc3RhdGljIHZvaWQgY2xvc2Vfb2JqZWN0X2xpc3Qoc3RydWN0IGxpc3Rf aGVhZCAqb2JqZWN0cywKPiAgIAo+ICAgCQl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosIHZt LCBOVUxMKTsKPiAgIAkJaWYgKCFJU19FUlIodm1hKSkKPiAtCQkJaWdub3JlZCA9IGk5MTVfdm1h X3VuYmluZCh2bWEpOwo+ICsJCQlpZ25vcmVkID0gdW5sb2NrZWRfdm1hX3VuYmluZCh2bWEpOwo+ ICAgCQkvKiBPbmx5IHBwZ3R0IHZtYSBtYXkgYmUgY2xvc2VkIGJlZm9yZSB0aGUgb2JqZWN0IGlz IGZyZWVkICovCj4gICAJCWlmICghSVNfRVJSKHZtYSkgJiYgIWk5MTVfdm1hX2lzX2dndHQodm1h KSkKPiAgIAkJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7Cj4gQEAgLTQ0NCw3ICs0NDYsNyBAQCBzdGF0 aWMgaW50IGZpbGxfaG9sZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAkJCQkJ CWdvdG8gZXJyOwo+ICAgCQkJCQl9Cj4gICAKPiAtCQkJCQllcnIgPSBpOTE1X3ZtYV91bmJpbmQo dm1hKTsKPiArCQkJCQllcnIgPSB1bmxvY2tlZF92bWFfdW5iaW5kKHZtYSk7Cj4gICAJCQkJCWlm IChlcnIpIHsKPiAgIAkJCQkJCXByX2VycigiJXMoJXMpIChmb3J3YXJkKSB1bmJpbmQgb2Ygdm1h Lm5vZGU9JWxseCArICVsbHggZmFpbGVkIHdpdGggZXJyPSVkXG4iLAo+ICAgCQkJCQkJICAgICAg IF9fZnVuY19fLCBwLT5uYW1lLCB2bWEtPm5vZGUuc3RhcnQsIHZtYS0+bm9kZS5zaXplLAo+IEBA IC01MTcsNyArNTE5LDcgQEAgc3RhdGljIGludCBmaWxsX2hvbGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsCj4gICAJCQkJCQlnb3RvIGVycjsKPiAgIAkJCQkJfQo+ICAgCj4gLQkJCQkJ ZXJyID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7Cj4gKwkJCQkJZXJyID0gdW5sb2NrZWRfdm1hX3Vu YmluZCh2bWEpOwo+ICAgCQkJCQlpZiAoZXJyKSB7Cj4gICAJCQkJCQlwcl9lcnIoIiVzKCVzKSAo YmFja3dhcmQpIHVuYmluZCBvZiB2bWEubm9kZT0lbGx4ICsgJWxseCBmYWlsZWQgd2l0aCBlcnI9 JWRcbiIsCj4gICAJCQkJCQkgICAgICAgX19mdW5jX18sIHAtPm5hbWUsIHZtYS0+bm9kZS5zdGFy dCwgdm1hLT5ub2RlLnNpemUsCj4gQEAgLTYwNCw3ICs2MDYsNyBAQCBzdGF0aWMgaW50IHdhbGtf aG9sZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAkJCQlnb3RvIGVycl9jbG9z ZTsKPiAgIAkJCX0KPiAgIAo+IC0JCQllcnIgPSBpOTE1X3ZtYV91bmJpbmQodm1hKTsKPiArCQkJ ZXJyID0gdW5sb2NrZWRfdm1hX3VuYmluZCh2bWEpOwo+ICAgCQkJaWYgKGVycikgewo+ICAgCQkJ CXByX2VycigiJXMgdW5iaW5kIGZhaWxlZCBhdCAlbGx4ICsgJWxseCAgd2l0aCBlcnI9JWRcbiIs Cj4gICAJCQkJICAgICAgIF9fZnVuY19fLCBhZGRyLCB2bWEtPnNpemUsIGVycik7Cj4gQEAgLTY4 NSwxMyArNjg3LDEzIEBAIHN0YXRpYyBpbnQgcG90X2hvbGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsCj4gICAJCQkJcHJfZXJyKCIlcyBpbmNvcnJlY3QgYXQgJWxseCArICVsbHhcbiIs Cj4gICAJCQkJICAgICAgIF9fZnVuY19fLCBhZGRyLCB2bWEtPnNpemUpOwo+ICAgCQkJCWk5MTVf dm1hX3VucGluKHZtYSk7Cj4gLQkJCQllcnIgPSBpOTE1X3ZtYV91bmJpbmQodm1hKTsKPiArCQkJ CWVyciA9IHVubG9ja2VkX3ZtYV91bmJpbmQodm1hKTsKPiAgIAkJCQllcnIgPSAtRUlOVkFMOwo+ ICAgCQkJCWdvdG8gZXJyOwo+ICAgCQkJfQo+ICAgCj4gICAJCQlpOTE1X3ZtYV91bnBpbih2bWEp Owo+IC0JCQllcnIgPSBpOTE1X3ZtYV91bmJpbmQodm1hKTsKPiArCQkJZXJyID0gdW5sb2NrZWRf dm1hX3VuYmluZCh2bWEpOwo+ICAgCQkJR0VNX0JVR19PTihlcnIpOwo+ICAgCQl9Cj4gICAKPiBA QCAtNzg5LDEzICs3OTEsMTMgQEAgc3RhdGljIGludCBkcnVua19ob2xlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1LAo+ICAgCQkJCXByX2VycigiJXMgaW5jb3JyZWN0IGF0ICVsbHggKyAl bGx4XG4iLAo+ICAgCQkJCSAgICAgICBfX2Z1bmNfXywgYWRkciwgQklUX1VMTChzaXplKSk7Cj4g ICAJCQkJaTkxNV92bWFfdW5waW4odm1hKTsKPiAtCQkJCWVyciA9IGk5MTVfdm1hX3VuYmluZCh2 bWEpOwo+ICsJCQkJZXJyID0gdW5sb2NrZWRfdm1hX3VuYmluZCh2bWEpOwo+ICAgCQkJCWVyciA9 IC1FSU5WQUw7Cj4gICAJCQkJZ290byBlcnI7Cj4gICAJCQl9Cj4gICAKPiAgIAkJCWk5MTVfdm1h X3VucGluKHZtYSk7Cj4gLQkJCWVyciA9IGk5MTVfdm1hX3VuYmluZCh2bWEpOwo+ICsJCQllcnIg PSB1bmxvY2tlZF92bWFfdW5iaW5kKHZtYSk7Cj4gICAJCQlHRU1fQlVHX09OKGVycik7Cj4gICAK PiAgIAkJCWlmIChpZ3RfdGltZW91dChlbmRfdGltZSwKPiBAQCAtODY3LDcgKzg2OSw3IEBAIHN0 YXRpYyBpbnQgX19zaHJpbmtfaG9sZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAg IAkJCXByX2VycigiJXMgaW5jb3JyZWN0IGF0ICVsbHggKyAlbGx4XG4iLAo+ICAgCQkJICAgICAg IF9fZnVuY19fLCBhZGRyLCBzaXplKTsKPiAgIAkJCWk5MTVfdm1hX3VucGluKHZtYSk7Cj4gLQkJ CWVyciA9IGk5MTVfdm1hX3VuYmluZCh2bWEpOwo+ICsJCQllcnIgPSB1bmxvY2tlZF92bWFfdW5i aW5kKHZtYSk7Cj4gICAJCQllcnIgPSAtRUlOVkFMOwo+ICAgCQkJYnJlYWs7Cj4gICAJCX0KPiBA QCAtODc1LDYgKzg3NywxNSBAQCBzdGF0aWMgaW50IF9fc2hyaW5rX2hvbGUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsCj4gICAJCWk5MTVfdm1hX3VucGluKHZtYSk7Cj4gICAJCWFkZHIg Kz0gc2l6ZTsKPiAgIAo+ICsJCS8qCj4gKwkJICogU2luY2Ugd2UgYXJlIGluamVjdGluZyBhbGxv Y2F0aW9uIGZhdWx0cyBhdCByYW5kb20gaW50ZXJ2YWxzLAo+ICsJCSAqIHdhaXQgZm9yIHRoaXMg YWxsb2NhdGlvbiB0byBjb21wbGV0ZSBiZWZvcmUgd2UgY2hhbmdlIHRoZQo+ICsJCSAqIGZhdWx0 aW5qZWN0aW9uLgo+ICsJCSAqLwo+ICsJCWVyciA9IGk5MTVfYWN0aXZlX3dhaXQoJnZtYS0+YWN0 aXZlKTsKPiArCQlpZiAoZXJyKQo+ICsJCQlicmVhazsKPiArCj4gICAJCWlmIChpZ3RfdGltZW91 dChlbmRfdGltZSwKPiAgIAkJCQkiJXMgdGltZWQgb3V0IGF0IG9mc2V0ICVsbHggWyVsbHggLSAl bGx4XVxuIiwKPiAgIAkJCQlfX2Z1bmNfXywgYWRkciwgaG9sZV9zdGFydCwgaG9sZV9lbmQpKSB7 Cj4gQEAgLTEwMDgsMjEgKzEwMTksMTkgQEAgc3RhdGljIGludCBleGVyY2lzZV9wcGd0dChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAJaWYgKElTX0VSUihmaWxlKSkKPiAg IAkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7Cj4gICAKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5k cm0uc3RydWN0X211dGV4KTsKPiAgIAlwcGd0dCA9IGk5MTVfcHBndHRfY3JlYXRlKGRldl9wcml2 KTsKPiAgIAlpZiAoSVNfRVJSKHBwZ3R0KSkgewo+ICAgCQllcnIgPSBQVFJfRVJSKHBwZ3R0KTsK PiAtCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJZ290byBvdXRfZnJlZTsKPiAgIAl9Cj4gICAJR0VN X0JVR19PTihvZmZzZXRfaW5fcGFnZShwcGd0dC0+dm0udG90YWwpKTsKPiAtCUdFTV9CVUdfT04o cHBndHQtPnZtLmNsb3NlZCk7Cj4gKwlHRU1fQlVHX09OKCFhdG9taWNfcmVhZCgmcHBndHQtPnZt Lm9wZW4pKTsKPiAgIAo+ICAgCWVyciA9IGZ1bmMoZGV2X3ByaXYsICZwcGd0dC0+dm0sIDAsIHBw Z3R0LT52bS50b3RhbCwgZW5kX3RpbWUpOwo+ICAgCj4gICAJaTkxNV92bV9wdXQoJnBwZ3R0LT52 bSk7Cj4gLW91dF91bmxvY2s6Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0 X211dGV4KTsKPiAgIAo+ICtvdXRfZnJlZToKPiAgIAltb2NrX2ZpbGVfZnJlZShkZXZfcHJpdiwg ZmlsZSk7Cj4gICAJcmV0dXJuIGVycjsKPiAgIH0KPiBAQCAtMTA4NSw3ICsxMDk0LDYgQEAgc3Rh dGljIGludCBleGVyY2lzZV9nZ3R0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAg CUlHVF9USU1FT1VUKGVuZF90aW1lKTsKPiAgIAlpbnQgZXJyID0gMDsKPiAgIAo+IC0JbXV0ZXhf bG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICByZXN0YXJ0Ogo+ICAgCWxpc3Rfc29y dChOVUxMLCAmZ2d0dC0+dm0ubW0uaG9sZV9zdGFjaywgc29ydF9ob2xlcyk7Cj4gICAJZHJtX21t X2Zvcl9lYWNoX2hvbGUobm9kZSwgJmdndHQtPnZtLm1tLCBob2xlX3N0YXJ0LCBob2xlX2VuZCkg ewo+IEBAIC0xMTA2LDcgKzExMTQsNiBAQCBzdGF0aWMgaW50IGV4ZXJjaXNlX2dndHQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICAJCWxhc3QgPSBob2xlX2VuZDsKPiAgIAkJZ290 byByZXN0YXJ0Owo+ICAgCX0KPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7Cj4gICAKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+IEBAIC0xMTQ4LDEzICsxMTU1LDkgQEAg c3RhdGljIGludCBpZ3RfZ2d0dF9wYWdlKHZvaWQgKmFyZykKPiAgIAl1bnNpZ25lZCBpbnQgKm9y ZGVyLCBuOwo+ICAgCWludCBlcnI7Cj4gICAKPiAtCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+IC0KPiAgIAlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFs KGk5MTUsIFBBR0VfU0laRSk7Cj4gLQlpZiAoSVNfRVJSKG9iaikpIHsKPiAtCQllcnIgPSBQVFJf RVJSKG9iaik7Cj4gLQkJZ290byBvdXRfdW5sb2NrOwo+IC0JfQo+ICsJaWYgKElTX0VSUihvYmop KQo+ICsJCXJldHVybiBQVFJfRVJSKG9iaik7Cj4gICAKPiAgIAllcnIgPSBpOTE1X2dlbV9vYmpl Y3RfcGluX3BhZ2VzKG9iaik7Cj4gICAJaWYgKGVycikKPiBAQCAtMTIyMiw4ICsxMjI1LDYgQEAg c3RhdGljIGludCBpZ3RfZ2d0dF9wYWdlKHZvaWQgKmFyZykKPiAgIAlpOTE1X2dlbV9vYmplY3Rf dW5waW5fcGFnZXMob2JqKTsKPiAgIG91dF9mcmVlOgo+ICAgCWk5MTVfZ2VtX29iamVjdF9wdXQo b2JqKTsKPiAtb3V0X3VubG9jazoKPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gICAJcmV0dXJuIGVycjsKPiAgIH0KPiAgIAo+IEBAIC0xMjM0LDYgKzEyMzUsOSBA QCBzdGF0aWMgdm9pZCB0cmFja192bWFfYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIAlh dG9taWNfaW5jKCZvYmotPmJpbmRfY291bnQpOyAvKiB0cmFjayBmb3IgZXZpY3Rpb24gbGF0ZXIg Ki8KPiAgIAlfX2k5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKPiAgIAo+ICsJR0VNX0JV R19PTih2bWEtPnBhZ2VzKTsKPiArCWF0b21pY19zZXQoJnZtYS0+cGFnZXNfY291bnQsIEk5MTVf Vk1BX1BBR0VTX0FDVElWRSk7Cj4gKwlfX2k5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsK PiAgIAl2bWEtPnBhZ2VzID0gb2JqLT5tbS5wYWdlczsKPiAgIAo+ICAgCW11dGV4X2xvY2soJnZt YS0+dm0tPm11dGV4KTsKPiBAQCAtMTMzMCwxMSArMTMzNCwxMyBAQCBzdGF0aWMgaW50IGlndF9n dHRfcmVzZXJ2ZSh2b2lkICphcmcpCj4gICAJCQlnb3RvIG91dDsKPiAgIAkJfQo+ICAgCj4gKwkJ bXV0ZXhfbG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQllcnIgPSBpOTE1X2dlbV9ndHRfcmVz ZXJ2ZSgmZ2d0dC0+dm0sICZ2bWEtPm5vZGUsCj4gICAJCQkJCSAgIG9iai0+YmFzZS5zaXplLAo+ ICAgCQkJCQkgICB0b3RhbCwKPiAgIAkJCQkJICAgb2JqLT5jYWNoZV9sZXZlbCwKPiAgIAkJCQkJ ICAgMCk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJCWlmIChlcnIp IHsKPiAgIAkJCXByX2VycigiaTkxNV9nZW1fZ3R0X3Jlc2VydmUgKHBhc3MgMSkgZmFpbGVkIGF0 ICVsbHUvJWxsdSB3aXRoIGVycj0lZFxuIiwKPiAgIAkJCSAgICAgICB0b3RhbCwgZ2d0dC0+dm0u dG90YWwsIGVycik7Cj4gQEAgLTEzODAsMTEgKzEzODYsMTMgQEAgc3RhdGljIGludCBpZ3RfZ3R0 X3Jlc2VydmUodm9pZCAqYXJnKQo+ICAgCQkJZ290byBvdXQ7Cj4gICAJCX0KPiAgIAo+ICsJCW11 dGV4X2xvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAkJZXJyID0gaTkxNV9nZW1fZ3R0X3Jlc2Vy dmUoJmdndHQtPnZtLCAmdm1hLT5ub2RlLAo+ICAgCQkJCQkgICBvYmotPmJhc2Uuc2l6ZSwKPiAg IAkJCQkJICAgdG90YWwsCj4gICAJCQkJCSAgIG9iai0+Y2FjaGVfbGV2ZWwsCj4gICAJCQkJCSAg IDApOwo+ICsJCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQlpZiAoZXJyKSB7 Cj4gICAJCQlwcl9lcnIoImk5MTVfZ2VtX2d0dF9yZXNlcnZlIChwYXNzIDIpIGZhaWxlZCBhdCAl bGx1LyVsbHUgd2l0aCBlcnI9JWRcbiIsCj4gICAJCQkgICAgICAgdG90YWwsIGdndHQtPnZtLnRv dGFsLCBlcnIpOwo+IEBAIC0xNDE0LDcgKzE0MjIsNyBAQCBzdGF0aWMgaW50IGlndF9ndHRfcmVz ZXJ2ZSh2b2lkICphcmcpCj4gICAJCQlnb3RvIG91dDsKPiAgIAkJfQo+ICAgCj4gLQkJZXJyID0g aTkxNV92bWFfdW5iaW5kKHZtYSk7Cj4gKwkJZXJyID0gdW5sb2NrZWRfdm1hX3VuYmluZCh2bWEp Owo+ICAgCQlpZiAoZXJyKSB7Cj4gICAJCQlwcl9lcnIoImk5MTVfdm1hX3VuYmluZCBmYWlsZWQg d2l0aCBlcnI9JWQhXG4iLCBlcnIpOwo+ICAgCQkJZ290byBvdXQ7Cj4gQEAgLTE0MjQsMTEgKzE0 MzIsMTMgQEAgc3RhdGljIGludCBpZ3RfZ3R0X3Jlc2VydmUodm9pZCAqYXJnKQo+ICAgCQkJCSAg ICAgICAyKkk5MTVfR1RUX1BBR0VfU0laRSwKPiAgIAkJCQkgICAgICAgSTkxNV9HVFRfTUlOX0FM SUdOTUVOVCk7Cj4gICAKPiArCQltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJCWVy ciA9IGk5MTVfZ2VtX2d0dF9yZXNlcnZlKCZnZ3R0LT52bSwgJnZtYS0+bm9kZSwKPiAgIAkJCQkJ ICAgb2JqLT5iYXNlLnNpemUsCj4gICAJCQkJCSAgIG9mZnNldCwKPiAgIAkJCQkJICAgb2JqLT5j YWNoZV9sZXZlbCwKPiAgIAkJCQkJICAgMCk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5t dXRleCk7Cj4gICAJCWlmIChlcnIpIHsKPiAgIAkJCXByX2VycigiaTkxNV9nZW1fZ3R0X3Jlc2Vy dmUgKHBhc3MgMykgZmFpbGVkIGF0ICVsbHUvJWxsdSB3aXRoIGVycj0lZFxuIiwKPiAgIAkJCSAg ICAgICB0b3RhbCwgZ2d0dC0+dm0udG90YWwsIGVycik7Cj4gQEAgLTE0OTcsMTEgKzE1MDcsMTMg QEAgc3RhdGljIGludCBpZ3RfZ3R0X2luc2VydCh2b2lkICphcmcpCj4gICAKPiAgIAkvKiBDaGVj ayBhIGNvdXBsZSBvZiBvYnZpb3VzbHkgaW52YWxpZCByZXF1ZXN0cyAqLwo+ICAgCWZvciAoaWkg PSBpbnZhbGlkX2luc2VydDsgaWktPnNpemU7IGlpKyspIHsKPiArCQltdXRleF9sb2NrKCZnZ3R0 LT52bS5tdXRleCk7Cj4gICAJCWVyciA9IGk5MTVfZ2VtX2d0dF9pbnNlcnQoJmdndHQtPnZtLCAm dG1wLAo+ICAgCQkJCQkgIGlpLT5zaXplLCBpaS0+YWxpZ25tZW50LAo+ICAgCQkJCQkgIEk5MTVf Q09MT1JfVU5FVklDVEFCTEUsCj4gICAJCQkJCSAgaWktPnN0YXJ0LCBpaS0+ZW5kLAo+ICAgCQkJ CQkgIDApOwo+ICsJCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQlpZiAoZXJy ICE9IC1FTk9TUEMpIHsKPiAgIAkJCXByX2VycigiSW52YWxpZCBpOTE1X2dlbV9ndHRfaW5zZXJ0 KC5zaXplPSVsbHgsIC5hbGlnbm1lbnQ9JWxseCwgLnN0YXJ0PSVsbHgsIC5lbmQ9JWxseCkgc3Vj Y2VlZGVkIChlcnI9JWQpXG4iLAo+ICAgCQkJICAgICAgIGlpLT5zaXplLCBpaS0+YWxpZ25tZW50 LCBpaS0+c3RhcnQsIGlpLT5lbmQsCj4gQEAgLTE1MzcsMTAgKzE1NDksMTIgQEAgc3RhdGljIGlu dCBpZ3RfZ3R0X2luc2VydCh2b2lkICphcmcpCj4gICAJCQlnb3RvIG91dDsKPiAgIAkJfQo+ICAg Cj4gKwkJbXV0ZXhfbG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQllcnIgPSBpOTE1X2dlbV9n dHRfaW5zZXJ0KCZnZ3R0LT52bSwgJnZtYS0+bm9kZSwKPiAgIAkJCQkJICBvYmotPmJhc2Uuc2l6 ZSwgMCwgb2JqLT5jYWNoZV9sZXZlbCwKPiAgIAkJCQkJICAwLCBnZ3R0LT52bS50b3RhbCwKPiAg IAkJCQkJICAwKTsKPiArCQltdXRleF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAkJaWYg KGVyciA9PSAtRU5PU1BDKSB7Cj4gICAJCQkvKiBtYXhlZCBvdXQgdGhlIEdHVFQgc3BhY2UgKi8K PiAgIAkJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiBAQCAtMTU4OSwxNiArMTYwMywxOCBA QCBzdGF0aWMgaW50IGlndF9ndHRfaW5zZXJ0KHZvaWQgKmFyZykKPiAgIAkJR0VNX0JVR19PTigh ZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUpKTsKPiAgIAkJb2Zmc2V0ID0gdm1hLT5u b2RlLnN0YXJ0Owo+ICAgCj4gLQkJZXJyID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7Cj4gKwkJZXJy ID0gdW5sb2NrZWRfdm1hX3VuYmluZCh2bWEpOwo+ICAgCQlpZiAoZXJyKSB7Cj4gICAJCQlwcl9l cnIoImk5MTVfdm1hX3VuYmluZCBmYWlsZWQgd2l0aCBlcnI9JWQhXG4iLCBlcnIpOwo+ICAgCQkJ Z290byBvdXQ7Cj4gICAJCX0KPiAgIAo+ICsJCW11dGV4X2xvY2soJmdndHQtPnZtLm11dGV4KTsK PiAgIAkJZXJyID0gaTkxNV9nZW1fZ3R0X2luc2VydCgmZ2d0dC0+dm0sICZ2bWEtPm5vZGUsCj4g ICAJCQkJCSAgb2JqLT5iYXNlLnNpemUsIDAsIG9iai0+Y2FjaGVfbGV2ZWwsCj4gICAJCQkJCSAg MCwgZ2d0dC0+dm0udG90YWwsCj4gICAJCQkJCSAgMCk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZnZ3R0 LT52bS5tdXRleCk7Cj4gICAJCWlmIChlcnIpIHsKPiAgIAkJCXByX2VycigiaTkxNV9nZW1fZ3R0 X2luc2VydCAocGFzcyAyKSBmYWlsZWQgYXQgJWxsdS8lbGx1IHdpdGggZXJyPSVkXG4iLAo+ICAg CQkJICAgICAgIHRvdGFsLCBnZ3R0LT52bS50b3RhbCwgZXJyKTsKPiBAQCAtMTY0MiwxMCArMTY1 OCwxMiBAQCBzdGF0aWMgaW50IGlndF9ndHRfaW5zZXJ0KHZvaWQgKmFyZykKPiAgIAkJCWdvdG8g b3V0Owo+ICAgCQl9Cj4gICAKPiArCQltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJ CWVyciA9IGk5MTVfZ2VtX2d0dF9pbnNlcnQoJmdndHQtPnZtLCAmdm1hLT5ub2RlLAo+ICAgCQkJ CQkgIG9iai0+YmFzZS5zaXplLCAwLCBvYmotPmNhY2hlX2xldmVsLAo+ICAgCQkJCQkgIDAsIGdn dHQtPnZtLnRvdGFsLAo+ICAgCQkJCQkgIDApOwo+ICsJCW11dGV4X3VubG9jaygmZ2d0dC0+dm0u bXV0ZXgpOwo+ICAgCQlpZiAoZXJyKSB7Cj4gICAJCQlwcl9lcnIoImk5MTVfZ2VtX2d0dF9pbnNl cnQgKHBhc3MgMykgZmFpbGVkIGF0ICVsbHUvJWxsdSB3aXRoIGVycj0lZFxuIiwKPiAgIAkJCSAg ICAgICB0b3RhbCwgZ2d0dC0+dm0udG90YWwsIGVycik7Cj4gQEAgLTE2ODksOCArMTcwNyw5IEBA IGludCBpOTE1X2dlbV9ndHRfbW9ja19zZWxmdGVzdHModm9pZCkKPiAgIAl9Cj4gICAJbW9ja19p bml0X2dndHQoaTkxNSwgZ2d0dCk7Cj4gICAKPiAtCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+ICAgCWVyciA9IGk5MTVfc3VidGVzdHModGVzdHMsIGdndHQpOwo+ICsKPiAr CW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCW1vY2tfZGV2aWNlX2Zs dXNoKGk5MTUpOwo+ICAgCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfdm1h LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV92bWEuYwo+IGluZGV4IDk3 NzUyZGVlY2NjYi4uZTBjYTEyYzE3YTdmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X3ZtYS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfdm1hLmMKPiBAQCAtMzM3LDcgKzMzNyw5IEBAIHN0YXRpYyBpbnQgaWd0X3Zt YV9waW4xKHZvaWQgKmFyZykKPiAgIAo+ICAgCQlpZiAoIWVycikgewo+ICAgCQkJaTkxNV92bWFf dW5waW4odm1hKTsKPiArCQkJbXV0ZXhfbG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQkJZXJy ID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7Cj4gKwkJCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0 ZXgpOwo+ICAgCQkJaWYgKGVycikgewo+ICAgCQkJCXByX2VycigiRmFpbGVkIHRvIHVuYmluZCBz aW5nbGUgcGFnZSBmcm9tIEdHVFQsIGVycj0lZFxuIiwgZXJyKTsKPiAgIAkJCQlnb3RvIG91dDsK PiBAQCAtODMxLDggKzgzMyw5IEBAIGludCBpOTE1X3ZtYV9tb2NrX3NlbGZ0ZXN0cyh2b2lkKQo+ ICAgCX0KPiAgIAltb2NrX2luaXRfZ2d0dChpOTE1LCBnZ3R0KTsKPiAgIAo+IC0JbXV0ZXhfbG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJZXJyID0gaTkxNV9zdWJ0ZXN0cyh0ZXN0 cywgZ2d0dCk7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g ICAJbW9ja19kZXZpY2VfZmx1c2goaTkxNSk7Cj4gICAJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiAgIAo+IEBAIC04NzksOCArODgyLDYgQEAgc3RhdGljIGludCBpZ3Rf dm1hX3JlbWFwcGVkX2d0dCh2b2lkICphcmcpCj4gICAJaWYgKElTX0VSUihvYmopKQo+ICAgCQly ZXR1cm4gUFRSX0VSUihvYmopOwo+ICAgCj4gLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0 X211dGV4KTsKPiAtCj4gICAJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZpOTE1LT5y dW50aW1lX3BtKTsKPiAgIAo+ICAgCWZvciAodCA9IHR5cGVzOyAqdDsgdCsrKSB7Cj4gQEAgLTk3 Niw3ICs5NzcsNiBAQCBzdGF0aWMgaW50IGlndF92bWFfcmVtYXBwZWRfZ3R0KHZvaWQgKmFyZykK PiAgIAo+ICAgb3V0Ogo+ICAgCWludGVsX3J1bnRpbWVfcG1fcHV0KCZpOTE1LT5ydW50aW1lX3Bt LCB3YWtlcmVmKTsKPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g ICAJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICAgCj4gICAJcmV0dXJuIGVycjsKPiAKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4