From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v4 37/38] drm: Improve drm_mm search (and fix topdown allocation) with rbtrees Date: Wed, 28 Dec 2016 15:34:36 +0100 Message-ID: <20161228143436.GQ347@dvetter-linux.ger.corp.intel.com> References: <20161222083641.2691-1-chris@chris-wilson.co.uk> <20161222083641.2691-38-chris@chris-wilson.co.uk> <20161228134852.GO347@dvetter-linux.ger.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id D6E5D89FCE for ; Wed, 28 Dec 2016 14:34:42 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id c85so24012989wmi.1 for ; Wed, 28 Dec 2016 06:34:42 -0800 (PST) Content-Disposition: inline In-Reply-To: <20161228134852.GO347@dvetter-linux.ger.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBEZWMgMjgsIDIwMTYgYXQgMDI6NDg6NTJQTSArMDEwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUaHUsIERlYyAyMiwgMjAxNiBhdCAwODozNjo0MEFNICswMDAwLCBDaHJpcyBX aWxzb24gd3JvdGU6Cj4gPiBUaGUgZHJtX21tIHJhbmdlIG1hbmFnZXIgY2xhaW1lZCB0byBzdXBw b3J0IHRvcC1kb3duIGluc2VydGlvbiwgYnV0IGl0Cj4gPiB3YXMgbmVpdGhlciBzZWFyY2hpbmcg Zm9yIHRoZSB0b3AtbW9zdCBob2xlIHRoYXQgY291bGQgZml0IHRoZQo+ID4gYWxsb2NhdGlvbiBy ZXF1ZXN0IG5vciBmaXR0aW5nIHRoZSByZXF1ZXN0IHRvIHRoZSBob2xlIGNvcnJlY3RseS4KPiA+ IAo+ID4gSW4gb3JkZXIgdG8gc2VhcmNoIHRoZSByYW5nZSBlZmZpY2llbnRseSwgd2UgY3JlYXRl IGEgc2Vjb25kYXJ5IGluZGV4Cj4gPiBmb3IgdGhlIGhvbGVzIHVzaW5nIGVpdGhlciB0aGVpciBz aXplIG9yIHRoZWlyIGFkZHJlc3MuIFRoaXMgaW5kZXgKPiA+IGFsbG93cyB1cyB0byBmaW5kIHRo ZSBzbWFsbGVzdCBob2xlIG9yIHRoZSBob2xlIGF0IHRoZSBib3R0b20gb3IgdG9wIG9mCj4gPiB0 aGUgcmFuZ2UgZWZmaWNpZW50bHksIHdoaWxzdCBrZWVwaW5nIHRoZSBob2xlIHN0YWNrIHRvIHJh cGlkbHkgc2VydmljZQo+ID4gZXZpY3Rpb25zLgo+ID4gCj4gPiB2MjogU2VhcmNoIGZvciBob2xl cyBib3RoIGhpZ2ggYW5kIGxvdy4gUmVuYW1lIGZsYWdzIHRvIG1vZGUuCj4gPiB2MzogRGlzY292 ZXIgcmJfZW50cnlfc2FmZSgpIGFuZCB1c2UgaXQhCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+ID4gUmV2aWV3ZWQtYnk6IEpv b25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KPiAKPiBUaGlz IGZlZWxzIGxpa2UgbXVjaCB3aXRob3V0IGRyaXZlciBtYWludGFpbmVyIGFja3MuIENhbiB5b3Ug cGxzIHJlc2VuZAo+IHdpdGggdGhlbSBvbiBjYyAocGx1cyB0aGUgZ2NjIGFwcGVhc2VtZW50KSBz byB3ZSBjYW4gZ28gYWNrIGZpc2hpbmcgYSBiaXQ/Cj4gCj4gQWxzbyBwcm9iYWJseSBlYXNpZXIg dG8gZ2V0IHRoaXMgaW4gYWZ0ZXIgdGhlIGJhY2ttZXJnaW5nIGlzIGRvbmUuCj4gRXZlcnl0aGlu ZyBlbHNlIGJlc2lkZXMgdGhlc2UgMiBsYXN0IHBhdGNoZXMsIGFuZCB0aGUgMiBpOTE1LW9ubHkg cGF0Y2hlcwo+IGlzIG5vdyBpbiBkcm0tbWlzYy4KCldoaWxlIEknbSBhc2tpbmcgZm9yIHJlc2Vu ZHM6IGtlcm5lbGRvYyBmb3IgdGhlIG5ldyBEUk1fTU1fSU5TRVJUXyogZW51bXMKd291bGQgYmUg cmVhbGx5IGdyZWF0LiBJIHRoaW5rIHRoZSBjbGVhbmVkIHVwIGxvZ2ljIGluIGhlcmUgd2l0aCB1 c2luZwpzcGVjaWFsIHNlYXJjaCBsaXN0cyBmb3IgZWFjaCBtYWtlcyBhIGxvdCBtb3JlIHNlbnNl LCBhbmQgaXQncyB3b3J0aCB0bwpkb2N1bWVudCB0aGF0IGEgYml0IG1vcmUuCi1EYW5pZWwKCj4g Cj4gVGhhbmtzLCBEYW5pZWwKPiAKPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9ndHRfbWdyLmMgIHwgIDE2ICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X3ZyYW1fbWdyLmMgfCAgMjAgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vYXJt YWRhL2FybWFkYV9nZW0uYyAgICAgICAgICB8ICAgNCArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9k cm1fbW0uYyAgICAgICAgICAgICAgICAgICAgIHwgNTExICsrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fdm1hX21hbmFnZXIuYyAgICAgICAgICAgIHwg ICAzICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9tbXUuYyAgICAgICAg fCAgIDggKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAg ICB8ICAxMCArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2aWN0LmMgICAg ICAgIHwgICA5ICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZl ci5jICAgfCAgIDUgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyAg ICAgICAgICB8ICAzOSArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xl bi5jICAgICAgIHwgICA2ICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMgICAg ICAgICAgICAgICAgfCAgIDMgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fdm1h LmMgICAgICAgICAgICB8ICAgMyArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvdGVz dC1kcm1fbW0uYyAgICAgIHwgIDU4ICsrLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21t LmMgICAgICAgICAgICAgICAgIHwgICA2ICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dl bS5jICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0 bV9ib19tYW5hZ2VyLmMgICAgICAgICB8ICAxOCArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS92YzQv dmM0X2NydGMuYyAgICAgICAgICAgICAgIHwgICAyICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfaHZzLmMgICAgICAgICAgICAgICAgfCAgIDMgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9wbGFuZS5jICAgICAgICAgICAgICB8ICAgNiArLQo+ID4gIGRyaXZlcnMvZ3B1L2Ry bS92aWEvdmlhX21tLmMgICAgICAgICAgICAgICAgIHwgICA0ICstCj4gPiAgZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMgICAgICAgfCAgMTAgKy0KPiA+ICBpbmNsdWRlL2Ry bS9kcm1fbW0uaCAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzNSArKystLS0tCj4gPiAgMjMg ZmlsZXMgY2hhbmdlZCwgNDM0IGluc2VydGlvbnMoKyksIDQ0OSBkZWxldGlvbnMoLSkKPiA+IAo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ndHRfbWdy LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ3R0X21nci5jCj4gPiBpbmRl eCAwMGY0NmIwZTA3NmQuLmQ4NDFmY2IyZTcwOSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ndHRfbWdyLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9ndHRfbWdyLmMKPiA+IEBAIC05Nyw4ICs5Nyw3IEBAIGludCBh bWRncHVfZ3R0X21ncl9hbGxvYyhzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiwKPiA+ ICB7Cj4gPiAgCXN0cnVjdCBhbWRncHVfZ3R0X21nciAqbWdyID0gbWFuLT5wcml2Owo+ID4gIAlz dHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUgPSBtZW0tPm1tX25vZGU7Cj4gPiAtCWVudW0gZHJtX21t X3NlYXJjaF9mbGFncyBzZmxhZ3MgPSBEUk1fTU1fU0VBUkNIX0JFU1Q7Cj4gPiAtCWVudW0gZHJt X21tX2FsbG9jYXRvcl9mbGFncyBhZmxhZ3MgPSBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQ7Cj4gPiAr CWVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGU7Cj4gPiAgCXVuc2lnbmVkIGxvbmcgZnBmbiwg bHBmbjsKPiA+ICAJaW50IHI7Cj4gPiAgCj4gPiBAQCAtMTE1LDE1ICsxMTQsMTQgQEAgaW50IGFt ZGdwdV9ndHRfbWdyX2FsbG9jKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAo+ID4g IAllbHNlCj4gPiAgCQlscGZuID0gbWFuLT5zaXplOwo+ID4gIAo+ID4gLQlpZiAocGxhY2UgJiYg cGxhY2UtPmZsYWdzICYgVFRNX1BMX0ZMQUdfVE9QRE9XTikgewo+ID4gLQkJc2ZsYWdzID0gRFJN X01NX1NFQVJDSF9CRUxPVzsKPiA+IC0JCWFmbGFncyA9IERSTV9NTV9DUkVBVEVfVE9QOwo+ID4g LQl9Cj4gPiArCW1vZGUgPSBEUk1fTU1fSU5TRVJUX0JFU1Q7Cj4gPiArCWlmIChwbGFjZSAmJiBw bGFjZS0+bW9kZSAmIFRUTV9QTF9GTEFHX1RPUERPV04pCj4gPiArCQltb2RlID0gRFJNX01NX0lO U0VSVF9ISUdIOwo+ID4gIAo+ID4gIAlzcGluX2xvY2soJm1nci0+bG9jayk7Cj4gPiAtCXIgPSBk cm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYygmbWdyLT5tbSwgbm9kZSwgbWVtLT5u dW1fcGFnZXMsCj4gPiAtCQkJCQkJbWVtLT5wYWdlX2FsaWdubWVudCwgMCwKPiA+IC0JCQkJCQlm cGZuLCBscGZuLCBzZmxhZ3MsIGFmbGFncyk7Cj4gPiArCXIgPSBkcm1fbW1faW5zZXJ0X25vZGVf aW5fcmFuZ2UoJm1nci0+bW0sIG5vZGUsCj4gPiArCQkJCQltZW0tPm51bV9wYWdlcywgbWVtLT5w YWdlX2FsaWdubWVudCwgMCwKPiA+ICsJCQkJCWZwZm4sIGxwZm4sIG1vZGUpOwo+ID4gIAlzcGlu X3VubG9jaygmbWdyLT5sb2NrKTsKPiA+ICAKPiA+ICAJaWYgKCFyKSB7Cj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZyYW1fbWdyLmMgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdnJhbV9tZ3IuYwo+ID4gaW5kZXggZDcxMDIyNmEw ZmZmLi41ZjEwNmFkODE1Y2UgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdnJhbV9tZ3IuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3ZyYW1fbWdyLmMKPiA+IEBAIC05Nyw4ICs5Nyw3IEBAIHN0YXRpYyBpbnQgYW1k Z3B1X3ZyYW1fbWdyX25ldyhzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiwKPiA+ICAJ c3RydWN0IGFtZGdwdV92cmFtX21nciAqbWdyID0gbWFuLT5wcml2Owo+ID4gIAlzdHJ1Y3QgZHJt X21tICptbSA9ICZtZ3ItPm1tOwo+ID4gIAlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGVzOwo+ID4g LQllbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3Mgc2ZsYWdzID0gRFJNX01NX1NFQVJDSF9ERUZBVUxU Owo+ID4gLQllbnVtIGRybV9tbV9hbGxvY2F0b3JfZmxhZ3MgYWZsYWdzID0gRFJNX01NX0NSRUFU RV9ERUZBVUxUOwo+ID4gKwllbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2RlOwo+ID4gIAl1bnNp Z25lZCBsb25nIGxwZm4sIG51bV9ub2RlcywgcGFnZXNfcGVyX25vZGUsIHBhZ2VzX2xlZnQ7Cj4g PiAgCXVuc2lnbmVkIGk7Cj4gPiAgCWludCByOwo+ID4gQEAgLTEyMSwxMCArMTIwLDkgQEAgc3Rh dGljIGludCBhbWRncHVfdnJhbV9tZ3JfbmV3KHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAq bWFuLAo+ID4gIAlpZiAoIW5vZGVzKQo+ID4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gPiAgCj4gPiAt CWlmIChwbGFjZS0+ZmxhZ3MgJiBUVE1fUExfRkxBR19UT1BET1dOKSB7Cj4gPiAtCQlzZmxhZ3Mg PSBEUk1fTU1fU0VBUkNIX0JFTE9XOwo+ID4gLQkJYWZsYWdzID0gRFJNX01NX0NSRUFURV9UT1A7 Cj4gPiAtCX0KPiA+ICsJbW9kZSA9IERSTV9NTV9JTlNFUlRfQkVTVDsKPiA+ICsJaWYgKHBsYWNl LT5mbGFncyAmIFRUTV9QTF9GTEFHX1RPUERPV04pCj4gPiArCQltb2RlID0gRFJNX01NX0lOU0VS VF9ISUdIOwo+ID4gIAo+ID4gIAlwYWdlc19sZWZ0ID0gbWVtLT5udW1fcGFnZXM7Cj4gPiAgCj4g PiBAQCAtMTM1LDEzICsxMzMsMTEgQEAgc3RhdGljIGludCBhbWRncHVfdnJhbV9tZ3JfbmV3KHN0 cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAo+ID4gIAo+ID4gIAkJaWYgKHBhZ2VzID09 IHBhZ2VzX3Blcl9ub2RlKQo+ID4gIAkJCWFsaWdubWVudCA9IHBhZ2VzX3Blcl9ub2RlOwo+ID4g LQkJZWxzZQo+ID4gLQkJCXNmbGFncyB8PSBEUk1fTU1fU0VBUkNIX0JFU1Q7Cj4gPiAgCj4gPiAt CQlyID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMobW0sICZub2Rlc1tpXSwg cGFnZXMsCj4gPiAtCQkJCQkJCWFsaWdubWVudCwgMCwKPiA+IC0JCQkJCQkJcGxhY2UtPmZwZm4s IGxwZm4sCj4gPiAtCQkJCQkJCXNmbGFncywgYWZsYWdzKTsKPiA+ICsJCXIgPSBkcm1fbW1faW5z ZXJ0X25vZGVfaW5fcmFuZ2UobW0sICZub2Rlc1tpXSwKPiA+ICsJCQkJCQlwYWdlcywgYWxpZ25t ZW50LCAwLAo+ID4gKwkJCQkJCXBsYWNlLT5mcGZuLCBscGZuLAo+ID4gKwkJCQkJCW1vZGUpOwo+ ID4gIAkJaWYgKHVubGlrZWx5KHIpKQo+ID4gIAkJCWdvdG8gZXJyb3I7Cj4gPiAgCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfZ2VtLmMgYi9kcml2ZXJzL2dw dS9kcm0vYXJtYWRhL2FybWFkYV9nZW0uYwo+ID4gaW5kZXggNzY4MDg3ZGRiMDQ2Li42NWIwMjli Yzg0YjUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXJtYWRhL2FybWFkYV9nZW0u Ywo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfZ2VtLmMKPiA+IEBAIC0x NDksOCArMTQ5LDggQEAgYXJtYWRhX2dlbV9saW5lYXJfYmFjayhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBzdHJ1Y3QgYXJtYWRhX2dlbV9vYmplY3QgKm9iaikKPiA+ICAJCQlyZXR1cm4gLUVOT1NQ QzsKPiA+ICAKPiA+ICAJCW11dGV4X2xvY2soJnByaXYtPmxpbmVhcl9sb2NrKTsKPiA+IC0JCXJl dCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmcHJpdi0+bGluZWFyLCBub2RlLCBzaXplLCBhbGlnbiwK PiA+IC0JCQkJCSBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOwo+ID4gKwkJcmV0ID0gZHJtX21tX2lu c2VydF9ub2RlX2dlbmVyaWMoJnByaXYtPmxpbmVhciwgbm9kZSwKPiA+ICsJCQkJCQkgc2l6ZSwg YWxpZ24sIDAsIDApOwo+ID4gIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5saW5lYXJfbG9jayk7Cj4g PiAgCQlpZiAocmV0KSB7Cj4gPiAgCQkJa2ZyZWUobm9kZSk7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2RybV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCj4gPiBpbmRl eCA1OGE3ZTNiYmUxMzAuLjk2MGM5Y2Q3ZGMyMyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1fbW0uYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCj4gPiBAQCAt OTIsMTQgKzkyLDYgQEAKPiA+ICAgKiBzb21lIGJhc2ljIGFsbG9jYXRvciBkdW1wZXJzIGZvciBk ZWJ1Z2dpbmcuCj4gPiAgICovCj4gPiAgCj4gPiAtc3RhdGljIHN0cnVjdCBkcm1fbW1fbm9kZSAq ZHJtX21tX3NlYXJjaF9mcmVlX2luX3JhbmdlX2dlbmVyaWMoY29uc3Qgc3RydWN0IGRybV9tbSAq bW0sCj4gPiAtCQkJCQkJdTY0IHNpemUsCj4gPiAtCQkJCQkJdTY0IGFsaWdubWVudCwKPiA+IC0J CQkJCQl1bnNpZ25lZCBsb25nIGNvbG9yLAo+ID4gLQkJCQkJCXU2NCBzdGFydCwKPiA+IC0JCQkJ CQl1NjQgZW5kLAo+ID4gLQkJCQkJCWVudW0gZHJtX21tX3NlYXJjaF9mbGFncyBmbGFncyk7Cj4g PiAtCj4gPiAgI2lmZGVmIENPTkZJR19EUk1fREVCVUdfTU0KPiA+ICAjaW5jbHVkZSA8bGludXgv c3RhY2tkZXBvdC5oPgo+ID4gIAo+ID4gQEAgLTIyMSw2OSArMjEzLDQ3IEBAIHN0YXRpYyB2b2lk IGRybV9tbV9pbnRlcnZhbF90cmVlX2FkZF9ub2RlKHN0cnVjdCBkcm1fbW1fbm9kZSAqaG9sZV9u b2RlLAo+ID4gIAkJCSAgICAmZHJtX21tX2ludGVydmFsX3RyZWVfYXVnbWVudCk7Cj4gPiAgfQo+ ID4gIAo+ID4gLXN0YXRpYyB2b2lkIGRybV9tbV9pbnNlcnRfaGVscGVyKHN0cnVjdCBkcm1fbW1f bm9kZSAqaG9sZV9ub2RlLAo+ID4gLQkJCQkgc3RydWN0IGRybV9tbV9ub2RlICpub2RlLAo+ID4g LQkJCQkgdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsCj4gPiAtCQkJCSB1bnNpZ25lZCBsb25nIGNv bG9yLAo+ID4gLQkJCQkgdTY0IHJhbmdlX3N0YXJ0LCB1NjQgcmFuZ2VfZW5kLAo+ID4gLQkJCQkg ZW51bSBkcm1fbW1fYWxsb2NhdG9yX2ZsYWdzIGZsYWdzKQo+ID4gKyNkZWZpbmUgUkJfSU5TRVJU KHJvb3QsIG1lbWJlciwgZXhwcikgZG8geyBcCj4gPiArCXN0cnVjdCByYl9ub2RlICoqbGluayA9 ICZyb290LnJiX25vZGUsICpyYiA9IE5VTEw7IFwKPiA+ICsJdTY0IHggPSBleHByKG5vZGUpOyBc Cj4gPiArCXdoaWxlICgqbGluaykgeyBcCj4gPiArCQlyYiA9ICpsaW5rOyBcCj4gPiArCQlpZiAo eCA8IGV4cHIocmJfZW50cnkocmIsIHN0cnVjdCBkcm1fbW1fbm9kZSwgbWVtYmVyKSkpIFwKPiA+ ICsJCQlsaW5rID0gJnJiLT5yYl9sZWZ0OyBcCj4gPiArCQllbHNlIFwKPiA+ICsJCQlsaW5rID0g JnJiLT5yYl9yaWdodDsgXAo+ID4gKwl9IFwKPiA+ICsJcmJfbGlua19ub2RlKCZub2RlLT5tZW1i ZXIsIHJiLCBsaW5rKTsgXAo+ID4gKwlyYl9pbnNlcnRfY29sb3IoJm5vZGUtPm1lbWJlciwgJnJv b3QpOyBcCj4gPiArfSB3aGlsZSAoMCkKPiA+ICsKPiA+ICsjZGVmaW5lIEhPTEVfU0laRShOT0RF KSAoKE5PREUpLT5ob2xlX3NpemUpCj4gPiArI2RlZmluZSBIT0xFX0FERFIoTk9ERSkgKF9fZHJt X21tX2hvbGVfbm9kZV9zdGFydChOT0RFKSkKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBhZGRfaG9s ZShzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUpCj4gPiAgewo+ID4gLQlzdHJ1Y3QgZHJtX21tICpt bSA9IGhvbGVfbm9kZS0+bW07Cj4gPiAtCXU2NCBob2xlX3N0YXJ0ID0gZHJtX21tX2hvbGVfbm9k ZV9zdGFydChob2xlX25vZGUpOwo+ID4gLQl1NjQgaG9sZV9lbmQgPSBkcm1fbW1faG9sZV9ub2Rl X2VuZChob2xlX25vZGUpOwo+ID4gLQl1NjQgYWRqX3N0YXJ0ID0gaG9sZV9zdGFydDsKPiA+IC0J dTY0IGFkal9lbmQgPSBob2xlX2VuZDsKPiA+IC0KPiA+IC0JRFJNX01NX0JVR19PTighZHJtX21t X2hvbGVfZm9sbG93cyhob2xlX25vZGUpIHx8IG5vZGUtPmFsbG9jYXRlZCk7Cj4gPiAtCj4gPiAt CWlmIChtbS0+Y29sb3JfYWRqdXN0KQo+ID4gLQkJbW0tPmNvbG9yX2FkanVzdChob2xlX25vZGUs IGNvbG9yLCAmYWRqX3N0YXJ0LCAmYWRqX2VuZCk7Cj4gPiAtCj4gPiAtCWFkal9zdGFydCA9IG1h eChhZGpfc3RhcnQsIHJhbmdlX3N0YXJ0KTsKPiA+IC0JYWRqX2VuZCA9IG1pbihhZGpfZW5kLCBy YW5nZV9lbmQpOwo+ID4gLQo+ID4gLQlpZiAoZmxhZ3MgJiBEUk1fTU1fQ1JFQVRFX1RPUCkKPiA+ IC0JCWFkal9zdGFydCA9IGFkal9lbmQgLSBzaXplOwo+ID4gLQo+ID4gLQlpZiAoYWxpZ25tZW50 KSB7Cj4gPiAtCQl1NjQgcmVtOwo+ID4gLQo+ID4gLQkJZGl2NjRfdTY0X3JlbShhZGpfc3RhcnQs IGFsaWdubWVudCwgJnJlbSk7Cj4gPiAtCQlpZiAocmVtKSB7Cj4gPiAtCQkJaWYgKGZsYWdzICYg RFJNX01NX0NSRUFURV9UT1ApCj4gPiAtCQkJCWFkal9zdGFydCAtPSByZW07Cj4gPiAtCQkJZWxz ZQo+ID4gLQkJCQlhZGpfc3RhcnQgKz0gYWxpZ25tZW50IC0gcmVtOwo+ID4gLQkJfQo+ID4gLQl9 Cj4gPiAtCj4gPiAtCWlmIChhZGpfc3RhcnQgPT0gaG9sZV9zdGFydCkgewo+ID4gLQkJaG9sZV9u b2RlLT5ob2xlX2ZvbGxvd3MgPSAwOwo+ID4gLQkJbGlzdF9kZWwoJmhvbGVfbm9kZS0+aG9sZV9z dGFjayk7Cj4gPiAtCX0KPiA+ICsJc3RydWN0IGRybV9tbSAqbW0gPSBub2RlLT5tbTsKPiA+ICAK PiA+IC0Jbm9kZS0+c3RhcnQgPSBhZGpfc3RhcnQ7Cj4gPiAtCW5vZGUtPnNpemUgPSBzaXplOwo+ ID4gLQlub2RlLT5tbSA9IG1tOwo+ID4gLQlub2RlLT5jb2xvciA9IGNvbG9yOwo+ID4gLQlub2Rl LT5hbGxvY2F0ZWQgPSAxOwo+ID4gKwlub2RlLT5ob2xlX3NpemUgPQo+ID4gKwkJX19kcm1fbW1f aG9sZV9ub2RlX2VuZChub2RlKSAtIF9fZHJtX21tX2hvbGVfbm9kZV9zdGFydChub2RlKTsKPiA+ ICsJRFJNX01NX0JVR19PTighZHJtX21tX2hvbGVfZm9sbG93cyhub2RlKSk7Cj4gPiAgCj4gPiAt CWxpc3RfYWRkKCZub2RlLT5ub2RlX2xpc3QsICZob2xlX25vZGUtPm5vZGVfbGlzdCk7Cj4gPiAr CVJCX0lOU0VSVChtbS0+aG9sZXNfc2l6ZSwgcmJfaG9sZV9zaXplLCBIT0xFX1NJWkUpOwo+ID4g KwlSQl9JTlNFUlQobW0tPmhvbGVzX2FkZHIsIHJiX2hvbGVfYWRkciwgSE9MRV9BRERSKTsKPiA+ ICAKPiA+IC0JZHJtX21tX2ludGVydmFsX3RyZWVfYWRkX25vZGUoaG9sZV9ub2RlLCBub2RlKTsK PiA+ICsJbGlzdF9hZGQoJm5vZGUtPmhvbGVfc3RhY2ssICZtbS0+aG9sZV9zdGFjayk7Cj4gPiAr fQo+ID4gIAo+ID4gLQlEUk1fTU1fQlVHX09OKG5vZGUtPnN0YXJ0IDwgcmFuZ2Vfc3RhcnQpOwo+ ID4gLQlEUk1fTU1fQlVHX09OKG5vZGUtPnN0YXJ0IDwgYWRqX3N0YXJ0KTsKPiA+IC0JRFJNX01N X0JVR19PTihub2RlLT5zdGFydCArIG5vZGUtPnNpemUgPiBhZGpfZW5kKTsKPiA+IC0JRFJNX01N X0JVR19PTihub2RlLT5zdGFydCArIG5vZGUtPnNpemUgPiByYW5nZV9lbmQpOwo+ID4gK3N0YXRp YyB2b2lkIHJtX2hvbGUoc3RydWN0IGRybV9tbV9ub2RlICpub2RlKQo+ID4gK3sKPiA+ICsJRFJN X01NX0JVR19PTighZHJtX21tX2hvbGVfZm9sbG93cyhub2RlKSk7Cj4gPiAgCj4gPiAtCW5vZGUt PmhvbGVfZm9sbG93cyA9IDA7Cj4gPiAtCWlmIChfX2RybV9tbV9ob2xlX25vZGVfc3RhcnQobm9k ZSkgPCBob2xlX2VuZCkgewo+ID4gLQkJbGlzdF9hZGQoJm5vZGUtPmhvbGVfc3RhY2ssICZtbS0+ aG9sZV9zdGFjayk7Cj4gPiAtCQlub2RlLT5ob2xlX2ZvbGxvd3MgPSAxOwo+ID4gLQl9Cj4gPiAr CWxpc3RfZGVsKCZub2RlLT5ob2xlX3N0YWNrKTsKPiA+ICsJcmJfZXJhc2UoJm5vZGUtPnJiX2hv bGVfc2l6ZSwgJm5vZGUtPm1tLT5ob2xlc19zaXplKTsKPiA+ICsJcmJfZXJhc2UoJm5vZGUtPnJi X2hvbGVfYWRkciwgJm5vZGUtPm1tLT5ob2xlc19hZGRyKTsKPiA+ICsJbm9kZS0+aG9sZV9zaXpl ID0gMDsKPiA+ICAKPiA+IC0Jc2F2ZV9zdGFjayhub2RlKTsKPiA+ICsJRFJNX01NX0JVR19PTihk cm1fbW1faG9sZV9mb2xsb3dzKG5vZGUpKTsKPiA+ICB9Cj4gPiAgCj4gPiAgLyoqCj4gPiBAQCAt MzEzLDcgKzI4Myw3IEBAIGludCBkcm1fbW1fcmVzZXJ2ZV9ub2RlKHN0cnVjdCBkcm1fbW0gKm1t LCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUpCj4gPiAgCj4gPiAgCS8qIEZpbmQgdGhlIHJlbGV2 YW50IGhvbGUgdG8gYWRkIG91ciBub2RlIHRvICovCj4gPiAgCWhvbGUgPSBkcm1fbW1faW50ZXJ2 YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbS0+aW50ZXJ2YWxfdHJlZSwKPiA+IC0JCQkJCSAgICAgICBu b2RlLT5zdGFydCwgfih1NjQpMCk7Cj4gPiArCQkJCQkgICAgICAgbm9kZS0+c3RhcnQsIFU2NF9N QVgpOwo+ID4gIAlpZiAoaG9sZSkgewo+ID4gIAkJaWYgKGhvbGUtPnN0YXJ0IDwgZW5kKQo+ID4g IAkJCXJldHVybiAtRU5PU1BDOwo+ID4gQEAgLTMyMSwxMiArMjkxLDEyIEBAIGludCBkcm1fbW1f cmVzZXJ2ZV9ub2RlKHN0cnVjdCBkcm1fbW0gKm1tLCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUp Cj4gPiAgCQlob2xlID0gbGlzdF9lbnRyeShkcm1fbW1fbm9kZXMobW0pLCB0eXBlb2YoKmhvbGUp LCBub2RlX2xpc3QpOwo+ID4gIAl9Cj4gPiAgCj4gPiAtCWhvbGUgPSBsaXN0X2xhc3RfZW50cnko JmhvbGUtPm5vZGVfbGlzdCwgdHlwZW9mKCpob2xlKSwgbm9kZV9saXN0KTsKPiA+ICsJaG9sZSA9 IGxpc3RfcHJldl9lbnRyeShob2xlLCBub2RlX2xpc3QpOwo+ID4gIAlpZiAoIWRybV9tbV9ob2xl X2ZvbGxvd3MoaG9sZSkpCj4gPiAgCQlyZXR1cm4gLUVOT1NQQzsKPiA+ICAKPiA+ICAJYWRqX3N0 YXJ0ID0gaG9sZV9zdGFydCA9IF9fZHJtX21tX2hvbGVfbm9kZV9zdGFydChob2xlKTsKPiA+IC0J YWRqX2VuZCA9IGhvbGVfZW5kID0gX19kcm1fbW1faG9sZV9ub2RlX2VuZChob2xlKTsKPiA+ICsJ YWRqX2VuZCA9IGhvbGVfZW5kID0gaG9sZV9zdGFydCArIGhvbGUtPmhvbGVfc2l6ZTsKPiA+ICAK PiA+ICAJaWYgKG1tLT5jb2xvcl9hZGp1c3QpCj4gPiAgCQltbS0+Y29sb3JfYWRqdXN0KGhvbGUs IG5vZGUtPmNvbG9yLCAmYWRqX3N0YXJ0LCAmYWRqX2VuZCk7Cj4gPiBAQCAtMzM1LDMxICszMDUs MTI4IEBAIGludCBkcm1fbW1fcmVzZXJ2ZV9ub2RlKHN0cnVjdCBkcm1fbW0gKm1tLCBzdHJ1Y3Qg ZHJtX21tX25vZGUgKm5vZGUpCj4gPiAgCQlyZXR1cm4gLUVOT1NQQzsKPiA+ICAKPiA+ICAJbm9k ZS0+bW0gPSBtbTsKPiA+IC0Jbm9kZS0+YWxsb2NhdGVkID0gMTsKPiA+ICAKPiA+ICAJbGlzdF9h ZGQoJm5vZGUtPm5vZGVfbGlzdCwgJmhvbGUtPm5vZGVfbGlzdCk7Cj4gPiAtCj4gPiAgCWRybV9t bV9pbnRlcnZhbF90cmVlX2FkZF9ub2RlKGhvbGUsIG5vZGUpOwo+ID4gKwlub2RlLT5hbGxvY2F0 ZWQgPSB0cnVlOwo+ID4gKwlub2RlLT5ob2xlX3NpemUgPSAwOwo+ID4gKwo+ID4gKwlybV9ob2xl KGhvbGUpOwo+ID4gKwlpZiAobm9kZS0+c3RhcnQgPiBob2xlX3N0YXJ0KQo+ID4gKwkJYWRkX2hv bGUoaG9sZSk7Cj4gPiArCWlmIChlbmQgPCBob2xlX2VuZCkKPiA+ICsJCWFkZF9ob2xlKG5vZGUp Owo+ID4gKwo+ID4gKwlzYXZlX3N0YWNrKG5vZGUpOwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4g PiArRVhQT1JUX1NZTUJPTChkcm1fbW1fcmVzZXJ2ZV9ub2RlKTsKPiA+ICsKPiA+ICtzdGF0aWMg aW5saW5lIHN0cnVjdCBkcm1fbW1fbm9kZSAqcmJfaG9sZV9zaXplX3RvX25vZGUoc3RydWN0IHJi X25vZGUgKnJiKQo+ID4gK3sKPiA+ICsJcmV0dXJuIHJiX2VudHJ5X3NhZmUocmIsIHN0cnVjdCBk cm1fbW1fbm9kZSwgcmJfaG9sZV9zaXplKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGlu ZSBzdHJ1Y3QgZHJtX21tX25vZGUgKnJiX2hvbGVfYWRkcl90b19ub2RlKHN0cnVjdCByYl9ub2Rl ICpyYikKPiA+ICt7Cj4gPiArCXJldHVybiByYl9lbnRyeV9zYWZlKHJiLCBzdHJ1Y3QgZHJtX21t X25vZGUsIHJiX2hvbGVfYWRkcik7Cj4gPiArfQo+ID4gIAo+ID4gLQlpZiAobm9kZS0+c3RhcnQg PT0gaG9sZV9zdGFydCkgewo+ID4gLQkJaG9sZS0+aG9sZV9mb2xsb3dzID0gMDsKPiA+IC0JCWxp c3RfZGVsKCZob2xlLT5ob2xlX3N0YWNrKTsKPiA+ICtzdGF0aWMgaW5saW5lIHU2NCByYl9ob2xl X3NpemUoc3RydWN0IHJiX25vZGUgKnJiKQo+ID4gK3sKPiA+ICsJcmV0dXJuIHJiX2VudHJ5KHJi LCBzdHJ1Y3QgZHJtX21tX25vZGUsIHJiX2hvbGVfc2l6ZSktPmhvbGVfc2l6ZTsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHN0cnVjdCBkcm1fbW1fbm9kZSAqYmVzdF9ob2xlKHN0cnVjdCBkcm1f bW0gKm1tLCB1NjQgc2l6ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCByYl9ub2RlICpiZXN0ID0gTlVM TDsKPiA+ICsJc3RydWN0IHJiX25vZGUgKipsaW5rID0gJm1tLT5ob2xlc19zaXplLnJiX25vZGU7 Cj4gPiArCj4gPiArCXdoaWxlICgqbGluaykgewo+ID4gKwkJc3RydWN0IHJiX25vZGUgKnJiID0g Kmxpbms7Cj4gPiArCQlpZiAoc2l6ZSA8PSByYl9ob2xlX3NpemUocmIpKSB7Cj4gPiArCQkJbGlu ayA9ICZyYi0+cmJfbGVmdDsKPiA+ICsJCQliZXN0ID0gcmI7Cj4gPiArCQl9IGVsc2Ugewo+ID4g KwkJCWxpbmsgPSAmcmItPnJiX3JpZ2h0Owo+ID4gKwkJfQo+ID4gIAl9Cj4gPiAgCj4gPiAtCW5v ZGUtPmhvbGVfZm9sbG93cyA9IDA7Cj4gPiAtCWlmIChlbmQgIT0gaG9sZV9lbmQpIHsKPiA+IC0J CWxpc3RfYWRkKCZub2RlLT5ob2xlX3N0YWNrLCAmbW0tPmhvbGVfc3RhY2spOwo+ID4gLQkJbm9k ZS0+aG9sZV9mb2xsb3dzID0gMTsKPiA+ICsJcmV0dXJuIHJiX2hvbGVfc2l6ZV90b19ub2RlKGJl c3QpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRybV9tbV9ub2RlICpmaW5kX2hv bGUoc3RydWN0IGRybV9tbSAqbW0sIHU2NCBhZGRyKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9t bV9ub2RlICpub2RlID0gTlVMTDsKPiA+ICsJc3RydWN0IHJiX25vZGUgKipsaW5rID0gJm1tLT5o b2xlc19hZGRyLnJiX25vZGU7Cj4gPiArCj4gPiArCXdoaWxlICgqbGluaykgewo+ID4gKwkJdTY0 IGhvbGVfc3RhcnQ7Cj4gPiArCj4gPiArCQlub2RlID0gcmJfaG9sZV9hZGRyX3RvX25vZGUoKmxp bmspOwo+ID4gKwkJaG9sZV9zdGFydCA9IF9fZHJtX21tX2hvbGVfbm9kZV9zdGFydChub2RlKTsK PiA+ICsKPiA+ICsJCWlmIChhZGRyIDwgaG9sZV9zdGFydCkKPiA+ICsJCQlsaW5rID0gJm5vZGUt PnJiX2hvbGVfYWRkci5yYl9sZWZ0Owo+ID4gKwkJZWxzZSBpZiAoYWRkciA+IGhvbGVfc3RhcnQg KyBub2RlLT5ob2xlX3NpemUpCj4gPiArCQkJbGluayA9ICZub2RlLT5yYl9ob2xlX2FkZHIucmJf cmlnaHQ7Cj4gPiArCQllbHNlCj4gPiArCQkJYnJlYWs7Cj4gPiAgCX0KPiA+ICAKPiA+IC0Jc2F2 ZV9zdGFjayhub2RlKTsKPiA+ICsJcmV0dXJuIG5vZGU7Cj4gPiArfQo+ID4gIAo+ID4gLQlyZXR1 cm4gMDsKPiA+ICtzdGF0aWMgc3RydWN0IGRybV9tbV9ub2RlICoKPiA+ICtmaXJzdF9ob2xlKHN0 cnVjdCBkcm1fbW0gKm1tLAo+ID4gKwkgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBzaXplLAo+ ID4gKwkgICBlbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2RlKQo+ID4gK3sKPiA+ICsJaWYgKFJC X0VNUFRZX1JPT1QoJm1tLT5ob2xlc19zaXplKSkKPiA+ICsJCXJldHVybiBOVUxMOwo+ID4gKwo+ ID4gKwlzd2l0Y2ggKG1vZGUpIHsKPiA+ICsJZGVmYXVsdDoKPiA+ICsJY2FzZSBEUk1fTU1fSU5T RVJUX0JFU1Q6Cj4gPiArCQlyZXR1cm4gYmVzdF9ob2xlKG1tLCBzaXplKTsKPiA+ICsKPiA+ICsJ Y2FzZSBEUk1fTU1fSU5TRVJUX0xPVzoKPiA+ICsJCXJldHVybiBmaW5kX2hvbGUobW0sIHN0YXJ0 KTsKPiA+ICsKPiA+ICsJY2FzZSBEUk1fTU1fSU5TRVJUX0hJR0g6Cj4gPiArCQlyZXR1cm4gZmlu ZF9ob2xlKG1tLCBlbmQpOwo+ID4gKwo+ID4gKwljYXNlIERSTV9NTV9JTlNFUlRfRVZJQ1Q6Cj4g PiArCQlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZtbS0+aG9sZV9zdGFjaywKPiA+ ICsJCQkJCQlzdHJ1Y3QgZHJtX21tX25vZGUsCj4gPiArCQkJCQkJaG9sZV9zdGFjayk7Cj4gPiAr CX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBkcm1fbW1fbm9kZSAqCj4gPiArbmV4 dF9ob2xlKHN0cnVjdCBkcm1fbW0gKm1tLAo+ID4gKwkgIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9k ZSwKPiA+ICsJICBlbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2RlKQo+ID4gK3sKPiA+ICsJc3dp dGNoIChtb2RlKSB7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCWNhc2UgRFJNX01NX0lOU0VSVF9CRVNU Ogo+ID4gKwkJcmV0dXJuIHJiX2hvbGVfc2l6ZV90b19ub2RlKHJiX25leHQoJm5vZGUtPnJiX2hv bGVfc2l6ZSkpOwo+ID4gKwo+ID4gKwljYXNlIERSTV9NTV9JTlNFUlRfTE9XOgo+ID4gKwkJcmV0 dXJuIHJiX2hvbGVfYWRkcl90b19ub2RlKHJiX25leHQoJm5vZGUtPnJiX2hvbGVfYWRkcikpOwo+ ID4gKwo+ID4gKwljYXNlIERSTV9NTV9JTlNFUlRfSElHSDoKPiA+ICsJCXJldHVybiByYl9ob2xl X2FkZHJfdG9fbm9kZShyYl9wcmV2KCZub2RlLT5yYl9ob2xlX2FkZHIpKTsKPiA+ICsKPiA+ICsJ Y2FzZSBEUk1fTU1fSU5TRVJUX0VWSUNUOgo+ID4gKwkJbm9kZSA9IGxpc3RfbmV4dF9lbnRyeShu b2RlLCBob2xlX3N0YWNrKTsKPiA+ICsJCXJldHVybiAmbm9kZS0+aG9sZV9zdGFjayA9PSAmbW0t PmhvbGVfc3RhY2sgPyBOVUxMIDogbm9kZTsKPiA+ICsJfQo+ID4gIH0KPiA+IC1FWFBPUlRfU1lN Qk9MKGRybV9tbV9yZXNlcnZlX25vZGUpOwo+ID4gIAo+ID4gIC8qKgo+ID4gLSAqIGRybV9tbV9p bnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljIC0gcmFuZ2VkIHNlYXJjaCBmb3Igc3BhY2UgYW5k IGluc2VydCBAbm9kZQo+ID4gKyAqIGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZSAtIHJhbmdl ZCBzZWFyY2ggZm9yIHNwYWNlIGFuZCBpbnNlcnQgQG5vZGUKPiA+ICAgKiBAbW06IGRybV9tbSB0 byBhbGxvY2F0ZSBmcm9tCj4gPiAgICogQG5vZGU6IHByZWFsbG9jYXRlIG5vZGUgdG8gaW5zZXJ0 Cj4gPiAgICogQHNpemU6IHNpemUgb2YgdGhlIGFsbG9jYXRpb24KPiA+IEBAIC0zNjcsMzggKzQz NCwxMDQgQEAgRVhQT1JUX1NZTUJPTChkcm1fbW1fcmVzZXJ2ZV9ub2RlKTsKPiA+ICAgKiBAY29s b3I6IG9wYXF1ZSB0YWcgdmFsdWUgdG8gdXNlIGZvciB0aGlzIG5vZGUKPiA+ICAgKiBAc3RhcnQ6 IHN0YXJ0IG9mIHRoZSBhbGxvd2VkIHJhbmdlIGZvciB0aGlzIG5vZGUKPiA+ICAgKiBAZW5kOiBl bmQgb2YgdGhlIGFsbG93ZWQgcmFuZ2UgZm9yIHRoaXMgbm9kZQo+ID4gLSAqIEBzZmxhZ3M6IGZs YWdzIHRvIGZpbmUtdHVuZSB0aGUgYWxsb2NhdGlvbiBzZWFyY2gKPiA+IC0gKiBAYWZsYWdzOiBm bGFncyB0byBmaW5lLXR1bmUgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3IKPiA+ICsgKiBAbW9kZTog ZmluZS10dW5lIHRoZSBhbGxvY2F0aW9uIHNlYXJjaCBhbmQgcGxhY2VtZW50Cj4gPiAgICoKPiA+ ICAgKiBUaGUgcHJlYWxsb2NhdGVkIG5vZGUgbXVzdCBiZSBjbGVhcmVkIHRvIDAuCj4gPiAgICoK PiA+ICAgKiBSZXR1cm5zOgo+ID4gICAqIDAgb24gc3VjY2VzcywgLUVOT1NQQyBpZiB0aGVyZSdz IG5vIHN1aXRhYmxlIGhvbGUuCj4gPiAgICovCj4gPiAtaW50IGRybV9tbV9pbnNlcnRfbm9kZV9p bl9yYW5nZV9nZW5lcmljKHN0cnVjdCBkcm1fbW0gKm1tLCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5v ZGUsCj4gPiAtCQkJCQl1NjQgc2l6ZSwgdTY0IGFsaWdubWVudCwKPiA+IC0JCQkJCXVuc2lnbmVk IGxvbmcgY29sb3IsCj4gPiAtCQkJCQl1NjQgc3RhcnQsIHU2NCBlbmQsCj4gPiAtCQkJCQllbnVt IGRybV9tbV9zZWFyY2hfZmxhZ3Mgc2ZsYWdzLAo+ID4gLQkJCQkJZW51bSBkcm1fbW1fYWxsb2Nh dG9yX2ZsYWdzIGFmbGFncykKPiA+ICtpbnQgZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKHN0 cnVjdCBkcm1fbW0gKiBjb25zdCBtbSwKPiA+ICsJCQkJc3RydWN0IGRybV9tbV9ub2RlICogY29u c3Qgbm9kZSwKPiA+ICsJCQkJdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsCj4gPiArCQkJCXVuc2ln bmVkIGxvbmcgY29sb3IsCj4gPiArCQkJCXU2NCByYW5nZV9zdGFydCwgdTY0IHJhbmdlX2VuZCwK PiA+ICsJCQkJZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZSkKPiA+ICB7Cj4gPiAtCXN0cnVj dCBkcm1fbW1fbm9kZSAqaG9sZV9ub2RlOwo+ID4gKwlzdHJ1Y3QgZHJtX21tX25vZGUgKmhvbGU7 Cj4gPiArCXU2NCByZW1haW5kZXJfbWFzazsKPiA+ICAKPiA+IC0JaWYgKFdBUk5fT04oc2l6ZSA9 PSAwKSkKPiA+IC0JCXJldHVybiAtRUlOVkFMOwo+ID4gKwlEUk1fTU1fQlVHX09OKHJhbmdlX3N0 YXJ0ID49IHJhbmdlX2VuZCk7Cj4gPiAgCj4gPiAtCWhvbGVfbm9kZSA9IGRybV9tbV9zZWFyY2hf ZnJlZV9pbl9yYW5nZV9nZW5lcmljKG1tLAo+ID4gLQkJCQkJCQlzaXplLCBhbGlnbm1lbnQsIGNv bG9yLAo+ID4gLQkJCQkJCQlzdGFydCwgZW5kLCBzZmxhZ3MpOwo+ID4gLQlpZiAoIWhvbGVfbm9k ZSkKPiA+ICsJaWYgKHVubGlrZWx5KHNpemUgPT0gMCB8fCByYW5nZV9lbmQgLSByYW5nZV9zdGFy dCA8IHNpemUpKQo+ID4gIAkJcmV0dXJuIC1FTk9TUEM7Cj4gPiAgCj4gPiAtCWRybV9tbV9pbnNl cnRfaGVscGVyKGhvbGVfbm9kZSwgbm9kZSwKPiA+IC0JCQkgICAgIHNpemUsIGFsaWdubWVudCwg Y29sb3IsCj4gPiAtCQkJICAgICBzdGFydCwgZW5kLCBhZmxhZ3MpOwo+ID4gLQlyZXR1cm4gMDsK PiA+ICsJaWYgKGFsaWdubWVudCA8PSAxKQo+ID4gKwkJYWxpZ25tZW50ID0gMDsKPiA+ICsKPiA+ ICsJcmVtYWluZGVyX21hc2sgPSBpc19wb3dlcl9vZl8yKGFsaWdubWVudCkgPyBhbGlnbm1lbnQg LSAxIDogMDsKPiA+ICsJZm9yIChob2xlID0gZmlyc3RfaG9sZShtbSwgcmFuZ2Vfc3RhcnQsIHJh bmdlX2VuZCwgc2l6ZSwgbW9kZSk7IGhvbGU7Cj4gPiArCSAgICAgaG9sZSA9IG5leHRfaG9sZSht bSwgaG9sZSwgbW9kZSkpIHsKPiA+ICsJCXU2NCBob2xlX3N0YXJ0ID0gX19kcm1fbW1faG9sZV9u b2RlX3N0YXJ0KGhvbGUpOwo+ID4gKwkJdTY0IGhvbGVfZW5kID0gaG9sZV9zdGFydCArIGhvbGUt PmhvbGVfc2l6ZTsKPiA+ICsJCXU2NCBhZGpfc3RhcnQsIGFkal9lbmQ7Cj4gPiArCQl1NjQgY29s X3N0YXJ0LCBjb2xfZW5kOwo+ID4gKwo+ID4gKwkJaWYgKG1vZGUgPT0gRFJNX01NX0lOU0VSVF9M T1cgJiYgaG9sZV9zdGFydCA+PSByYW5nZV9lbmQpCj4gPiArCQkJYnJlYWs7Cj4gPiArCj4gPiAr CQlpZiAobW9kZSA9PSBEUk1fTU1fSU5TRVJUX0hJR0ggJiYgaG9sZV9lbmQgPD0gcmFuZ2Vfc3Rh cnQpCj4gPiArCQkJYnJlYWs7Cj4gPiArCj4gPiArCQljb2xfc3RhcnQgPSBob2xlX3N0YXJ0Owo+ ID4gKwkJY29sX2VuZCA9IGhvbGVfZW5kOwo+ID4gKwkJaWYgKG1tLT5jb2xvcl9hZGp1c3QpCj4g PiArCQkJbW0tPmNvbG9yX2FkanVzdChob2xlLCBjb2xvciwgJmNvbF9zdGFydCwgJmNvbF9lbmQp Owo+ID4gKwo+ID4gKwkJYWRqX3N0YXJ0ID0gbWF4KGNvbF9zdGFydCwgcmFuZ2Vfc3RhcnQpOwo+ ID4gKwkJYWRqX2VuZCA9IG1pbihjb2xfZW5kLCByYW5nZV9lbmQpOwo+ID4gKwo+ID4gKwkJaWYg KGFkal9lbmQgPD0gYWRqX3N0YXJ0IHx8IGFkal9lbmQgLSBhZGpfc3RhcnQgPCBzaXplKQo+ID4g KwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJaWYgKG1vZGUgPT0gRFJNX01NX0lOU0VSVF9ISUdI KQo+ID4gKwkJCWFkal9zdGFydCA9IGFkal9lbmQgLSBzaXplOwo+ID4gKwo+ID4gKwkJaWYgKGFs aWdubWVudCkgewo+ID4gKwkJCXU2NCByZW07Cj4gPiArCj4gPiArCQkJaWYgKGxpa2VseShyZW1h aW5kZXJfbWFzaykpCj4gPiArCQkJCXJlbSA9IGFkal9zdGFydCAmIHJlbWFpbmRlcl9tYXNrOwo+ ID4gKwkJCWVsc2UKPiA+ICsJCQkJZGl2NjRfdTY0X3JlbShhZGpfc3RhcnQsIGFsaWdubWVudCwg JnJlbSk7Cj4gPiArCQkJaWYgKHJlbSkgewo+ID4gKwkJCQlhZGpfc3RhcnQgLT0gcmVtOwo+ID4g KwkJCQlpZiAobW9kZSAhPSBEUk1fTU1fSU5TRVJUX0hJR0gpCj4gPiArCQkJCQlhZGpfc3RhcnQg Kz0gYWxpZ25tZW50Owo+ID4gKwo+ID4gKwkJCQlpZiAoYWRqX3N0YXJ0IDwgbWF4KGNvbF9zdGFy dCwgcmFuZ2Vfc3RhcnQpIHx8Cj4gPiArCQkJCSAgICBtaW4oY29sX2VuZCwgcmFuZ2VfZW5kKSAt IGFkal9zdGFydCA8IHNpemUpCj4gPiArCQkJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCQkJaWYg KGFkal9lbmQgPD0gYWRqX3N0YXJ0IHx8Cj4gPiArCQkJCSAgICBhZGpfZW5kIC0gYWRqX3N0YXJ0 IDwgc2l6ZSkKPiA+ICsJCQkJCWNvbnRpbnVlOwo+ID4gKwkJCX0KPiA+ICsJCX0KPiA+ICsKPiA+ ICsJCW5vZGUtPm1tID0gbW07Cj4gPiArCQlub2RlLT5zaXplID0gc2l6ZTsKPiA+ICsJCW5vZGUt PnN0YXJ0ID0gYWRqX3N0YXJ0Owo+ID4gKwkJbm9kZS0+Y29sb3IgPSBjb2xvcjsKPiA+ICsJCW5v ZGUtPmhvbGVfc2l6ZSA9IDA7Cj4gPiArCj4gPiArCQlsaXN0X2FkZCgmbm9kZS0+bm9kZV9saXN0 LCAmaG9sZS0+bm9kZV9saXN0KTsKPiA+ICsJCWRybV9tbV9pbnRlcnZhbF90cmVlX2FkZF9ub2Rl KGhvbGUsIG5vZGUpOwo+ID4gKwkJbm9kZS0+YWxsb2NhdGVkID0gdHJ1ZTsKPiA+ICsKPiA+ICsJ CXJtX2hvbGUoaG9sZSk7Cj4gPiArCQlpZiAoYWRqX3N0YXJ0ID4gaG9sZV9zdGFydCkKPiA+ICsJ CQlhZGRfaG9sZShob2xlKTsKPiA+ICsJCWlmIChhZGpfc3RhcnQgKyBzaXplIDwgaG9sZV9lbmQp Cj4gPiArCQkJYWRkX2hvbGUobm9kZSk7Cj4gPiArCj4gPiArCQlzYXZlX3N0YWNrKG5vZGUpOwo+ ID4gKwkJcmV0dXJuIDA7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIC1FTk9TUEM7Cj4gPiAg fQo+ID4gLUVYUE9SVF9TWU1CT0woZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMp Owo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKTsKPiA+ICAK PiA+ICAvKioKPiA+ICAgKiBkcm1fbW1fcmVtb3ZlX25vZGUgLSBSZW1vdmUgYSBtZW1vcnkgbm9k ZSBmcm9tIHRoZSBhbGxvY2F0b3IuCj4gPiBAQCAtNDE2LDkyICs1NDksMjAgQEAgdm9pZCBkcm1f bW1fcmVtb3ZlX25vZGUoc3RydWN0IGRybV9tbV9ub2RlICpub2RlKQo+ID4gIAlEUk1fTU1fQlVH X09OKCFub2RlLT5hbGxvY2F0ZWQpOwo+ID4gIAlEUk1fTU1fQlVHX09OKG5vZGUtPnNjYW5uZWRf YmxvY2spOwo+ID4gIAo+ID4gLQlwcmV2X25vZGUgPQo+ID4gLQkgICAgbGlzdF9lbnRyeShub2Rl LT5ub2RlX2xpc3QucHJldiwgc3RydWN0IGRybV9tbV9ub2RlLCBub2RlX2xpc3QpOwo+ID4gLQo+ ID4gLQlpZiAoZHJtX21tX2hvbGVfZm9sbG93cyhub2RlKSkgewo+ID4gLQkJRFJNX01NX0JVR19P TihfX2RybV9tbV9ob2xlX25vZGVfc3RhcnQobm9kZSkgPT0KPiA+IC0JCQkgICAgICBfX2RybV9t bV9ob2xlX25vZGVfZW5kKG5vZGUpKTsKPiA+IC0JCWxpc3RfZGVsKCZub2RlLT5ob2xlX3N0YWNr KTsKPiA+IC0JfSBlbHNlIHsKPiA+IC0JCURSTV9NTV9CVUdfT04oX19kcm1fbW1faG9sZV9ub2Rl X3N0YXJ0KG5vZGUpICE9Cj4gPiAtCQkJICAgICAgX19kcm1fbW1faG9sZV9ub2RlX2VuZChub2Rl KSk7Cj4gPiAtCX0KPiA+ICsJcHJldl9ub2RlID0gbGlzdF9wcmV2X2VudHJ5KG5vZGUsIG5vZGVf bGlzdCk7Cj4gPiAgCj4gPiAtCWlmICghZHJtX21tX2hvbGVfZm9sbG93cyhwcmV2X25vZGUpKSB7 Cj4gPiAtCQlwcmV2X25vZGUtPmhvbGVfZm9sbG93cyA9IDE7Cj4gPiAtCQlsaXN0X2FkZCgmcHJl dl9ub2RlLT5ob2xlX3N0YWNrLCAmbW0tPmhvbGVfc3RhY2spOwo+ID4gLQl9IGVsc2UKPiA+IC0J CWxpc3RfbW92ZSgmcHJldl9ub2RlLT5ob2xlX3N0YWNrLCAmbW0tPmhvbGVfc3RhY2spOwo+ID4g KwlpZiAoZHJtX21tX2hvbGVfZm9sbG93cyhub2RlKSkKPiA+ICsJCXJtX2hvbGUobm9kZSk7Cj4g PiAgCj4gPiAgCWRybV9tbV9pbnRlcnZhbF90cmVlX3JlbW92ZShub2RlLCAmbW0tPmludGVydmFs X3RyZWUpOwo+ID4gIAlsaXN0X2RlbCgmbm9kZS0+bm9kZV9saXN0KTsKPiA+IC0Jbm9kZS0+YWxs b2NhdGVkID0gMDsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChkcm1fbW1fcmVtb3ZlX25vZGUp Owo+ID4gLQo+ID4gLXN0YXRpYyBpbnQgY2hlY2tfZnJlZV9ob2xlKHU2NCBzdGFydCwgdTY0IGVu ZCwgdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQpCj4gPiAtewo+ID4gLQlpZiAoZW5kIC0gc3RhcnQg PCBzaXplKQo+ID4gLQkJcmV0dXJuIDA7Cj4gPiAtCj4gPiAtCWlmIChhbGlnbm1lbnQpIHsKPiA+ IC0JCXU2NCByZW07Cj4gPiAtCj4gPiAtCQlkaXY2NF91NjRfcmVtKHN0YXJ0LCBhbGlnbm1lbnQs ICZyZW0pOwo+ID4gLQkJaWYgKHJlbSkKPiA+IC0JCQlzdGFydCArPSBhbGlnbm1lbnQgLSByZW07 Cj4gPiAtCX0KPiA+IC0KPiA+IC0JcmV0dXJuIGVuZCA+PSBzdGFydCArIHNpemU7Cj4gPiAtfQo+ ID4gLQo+ID4gLXN0YXRpYyBzdHJ1Y3QgZHJtX21tX25vZGUgKmRybV9tbV9zZWFyY2hfZnJlZV9p bl9yYW5nZV9nZW5lcmljKGNvbnN0IHN0cnVjdCBkcm1fbW0gKm1tLAo+ID4gLQkJCQkJCQl1NjQg c2l6ZSwKPiA+IC0JCQkJCQkJdTY0IGFsaWdubWVudCwKPiA+IC0JCQkJCQkJdW5zaWduZWQgbG9u ZyBjb2xvciwKPiA+IC0JCQkJCQkJdTY0IHN0YXJ0LAo+ID4gLQkJCQkJCQl1NjQgZW5kLAo+ID4g LQkJCQkJCQllbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3MgZmxhZ3MpCj4gPiAtewo+ID4gLQlzdHJ1 Y3QgZHJtX21tX25vZGUgKmVudHJ5Owo+ID4gLQlzdHJ1Y3QgZHJtX21tX25vZGUgKmJlc3Q7Cj4g PiAtCXU2NCBhZGpfc3RhcnQ7Cj4gPiAtCXU2NCBhZGpfZW5kOwo+ID4gLQl1NjQgYmVzdF9zaXpl Owo+ID4gLQo+ID4gLQlEUk1fTU1fQlVHX09OKG1tLT5zY2FuX2FjdGl2ZSk7Cj4gPiAtCj4gPiAt CWJlc3QgPSBOVUxMOwo+ID4gLQliZXN0X3NpemUgPSB+MFVMOwo+ID4gLQo+ID4gLQlfX2RybV9t bV9mb3JfZWFjaF9ob2xlKGVudHJ5LCBtbSwgYWRqX3N0YXJ0LCBhZGpfZW5kLAo+ID4gLQkJCSAg ICAgICBmbGFncyAmIERSTV9NTV9TRUFSQ0hfQkVMT1cpIHsKPiA+IC0JCXU2NCBob2xlX3NpemUg PSBhZGpfZW5kIC0gYWRqX3N0YXJ0Owo+ID4gLQo+ID4gLQkJaWYgKG1tLT5jb2xvcl9hZGp1c3Qp IHsKPiA+IC0JCQltbS0+Y29sb3JfYWRqdXN0KGVudHJ5LCBjb2xvciwgJmFkal9zdGFydCwgJmFk al9lbmQpOwo+ID4gLQkJCWlmIChhZGpfZW5kIDw9IGFkal9zdGFydCkKPiA+IC0JCQkJY29udGlu dWU7Cj4gPiAtCQl9Cj4gPiAtCj4gPiAtCQlhZGpfc3RhcnQgPSBtYXgoYWRqX3N0YXJ0LCBzdGFy dCk7Cj4gPiAtCQlhZGpfZW5kID0gbWluKGFkal9lbmQsIGVuZCk7Cj4gPiAtCj4gPiAtCQlpZiAo IWNoZWNrX2ZyZWVfaG9sZShhZGpfc3RhcnQsIGFkal9lbmQsIHNpemUsIGFsaWdubWVudCkpCj4g PiAtCQkJY29udGludWU7Cj4gPiAtCj4gPiAtCQlpZiAoIShmbGFncyAmIERSTV9NTV9TRUFSQ0hf QkVTVCkpCj4gPiAtCQkJcmV0dXJuIGVudHJ5Owo+ID4gLQo+ID4gLQkJaWYgKGhvbGVfc2l6ZSA8 IGJlc3Rfc2l6ZSkgewo+ID4gLQkJCWJlc3QgPSBlbnRyeTsKPiA+IC0JCQliZXN0X3NpemUgPSBo b2xlX3NpemU7Cj4gPiAtCQl9Cj4gPiAtCX0KPiA+ICsJbm9kZS0+YWxsb2NhdGVkID0gZmFsc2U7 Cj4gPiAgCj4gPiAtCXJldHVybiBiZXN0Owo+ID4gKwlpZiAoZHJtX21tX2hvbGVfZm9sbG93cyhw cmV2X25vZGUpKQo+ID4gKwkJcm1faG9sZShwcmV2X25vZGUpOwo+ID4gKwlhZGRfaG9sZShwcmV2 X25vZGUpOwo+ID4gIH0KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9tbV9yZW1vdmVfbm9kZSk7Cj4g PiAgCj4gPiAgLyoqCj4gPiAgICogZHJtX21tX3JlcGxhY2Vfbm9kZSAtIG1vdmUgYW4gYWxsb2Nh dGlvbiBmcm9tIEBvbGQgdG8gQG5ldwo+ID4gQEAgLTUxNiwxOCArNTc3LDIzIEBAIHZvaWQgZHJt X21tX3JlcGxhY2Vfbm9kZShzdHJ1Y3QgZHJtX21tX25vZGUgKm9sZCwgc3RydWN0IGRybV9tbV9u b2RlICpuZXcpCj4gPiAgewo+ID4gIAlEUk1fTU1fQlVHX09OKCFvbGQtPmFsbG9jYXRlZCk7Cj4g PiAgCj4gPiArCSpuZXcgPSAqb2xkOwo+ID4gKwo+ID4gIAlsaXN0X3JlcGxhY2UoJm9sZC0+bm9k ZV9saXN0LCAmbmV3LT5ub2RlX2xpc3QpOwo+ID4gLQlsaXN0X3JlcGxhY2UoJm9sZC0+aG9sZV9z dGFjaywgJm5ldy0+aG9sZV9zdGFjayk7Cj4gPiAgCXJiX3JlcGxhY2Vfbm9kZSgmb2xkLT5yYiwg Jm5ldy0+cmIsICZvbGQtPm1tLT5pbnRlcnZhbF90cmVlKTsKPiA+IC0JbmV3LT5ob2xlX2ZvbGxv d3MgPSBvbGQtPmhvbGVfZm9sbG93czsKPiA+IC0JbmV3LT5tbSA9IG9sZC0+bW07Cj4gPiAtCW5l dy0+c3RhcnQgPSBvbGQtPnN0YXJ0Owo+ID4gLQluZXctPnNpemUgPSBvbGQtPnNpemU7Cj4gPiAt CW5ldy0+Y29sb3IgPSBvbGQtPmNvbG9yOwo+ID4gLQluZXctPl9fc3VidHJlZV9sYXN0ID0gb2xk LT5fX3N1YnRyZWVfbGFzdDsKPiA+IC0KPiA+IC0Jb2xkLT5hbGxvY2F0ZWQgPSAwOwo+ID4gLQlu ZXctPmFsbG9jYXRlZCA9IDE7Cj4gPiArCj4gPiArCWlmIChkcm1fbW1faG9sZV9mb2xsb3dzKG9s ZCkpIHsKPiA+ICsJCWxpc3RfcmVwbGFjZSgmb2xkLT5ob2xlX3N0YWNrLCAmbmV3LT5ob2xlX3N0 YWNrKTsKPiA+ICsJCXJiX3JlcGxhY2Vfbm9kZSgmb2xkLT5yYl9ob2xlX3NpemUsCj4gPiArCQkJ CSZuZXctPnJiX2hvbGVfc2l6ZSwKPiA+ICsJCQkJJm9sZC0+bW0tPmhvbGVzX3NpemUpOwo+ID4g KwkJcmJfcmVwbGFjZV9ub2RlKCZvbGQtPnJiX2hvbGVfYWRkciwKPiA+ICsJCQkJJm5ldy0+cmJf aG9sZV9hZGRyLAo+ID4gKwkJCQkmb2xkLT5tbS0+aG9sZXNfYWRkcik7Cj4gPiArCX0KPiA+ICsK PiA+ICsJb2xkLT5hbGxvY2F0ZWQgPSBmYWxzZTsKPiA+ICsJbmV3LT5hbGxvY2F0ZWQgPSB0cnVl Owo+ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9tbV9yZXBsYWNlX25vZGUpOwo+ID4gIAo+ ID4gQEAgLTU3MCw3ICs2MzYsNyBAQCBFWFBPUlRfU1lNQk9MKGRybV9tbV9yZXBsYWNlX25vZGUp Owo+ID4gICAqIEBjb2xvcjogb3BhcXVlIHRhZyB2YWx1ZSB0byB1c2UgZm9yIHRoZSBhbGxvY2F0 aW9uCj4gPiAgICogQHN0YXJ0OiBzdGFydCBvZiB0aGUgYWxsb3dlZCByYW5nZSBmb3IgdGhlIGFs bG9jYXRpb24KPiA+ICAgKiBAZW5kOiBlbmQgb2YgdGhlIGFsbG93ZWQgcmFuZ2UgZm9yIHRoZSBh bGxvY2F0aW9uCj4gPiAtICogQGZsYWdzOiBmbGFncyB0byBzcGVjaWZ5IGhvdyB0aGUgYWxsb2Nh dGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBhZnRlcndhcmRzCj4gPiArICogQG1vZGU6IGZpbmUtdHVu ZSB0aGUgYWxsb2NhdGlvbiBzZWFyY2ggYW5kIHBsYWNlbWVudAo+ID4gICAqCj4gPiAgICogVGhp cyBzaW1wbHkgc2V0cyB1cCB0aGUgc2Nhbm5pbmcgcm91dGluZXMgd2l0aCB0aGUgcGFyYW1ldGVy cyBmb3IgdGhlIGRlc2lyZWQKPiA+ICAgKiBob2xlLgo+ID4gQEAgLTU4Niw3ICs2NTIsNyBAQCB2 b2lkIGRybV9tbV9zY2FuX2luaXRfd2l0aF9yYW5nZShzdHJ1Y3QgZHJtX21tX3NjYW4gKnNjYW4s Cj4gPiAgCQkJCSB1bnNpZ25lZCBsb25nIGNvbG9yLAo+ID4gIAkJCQkgdTY0IHN0YXJ0LAo+ID4g IAkJCQkgdTY0IGVuZCwKPiA+IC0JCQkJIHVuc2lnbmVkIGludCBmbGFncykKPiA+ICsJCQkJIGVu dW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGUpCj4gPiAgewo+ID4gIAlEUk1fTU1fQlVHX09OKHN0 YXJ0ID49IGVuZCk7Cj4gPiAgCURSTV9NTV9CVUdfT04oIXNpemUgfHwgc2l6ZSA+IGVuZCAtIHN0 YXJ0KTsKPiA+IEBAIC02MDEsNyArNjY3LDcgQEAgdm9pZCBkcm1fbW1fc2Nhbl9pbml0X3dpdGhf cmFuZ2Uoc3RydWN0IGRybV9tbV9zY2FuICpzY2FuLAo+ID4gIAlzY2FuLT5hbGlnbm1lbnQgPSBh bGlnbm1lbnQ7Cj4gPiAgCXNjYW4tPnJlbWFpbmRlcl9tYXNrID0gaXNfcG93ZXJfb2ZfMihhbGln bm1lbnQpID8gYWxpZ25tZW50IC0gMSA6IDA7Cj4gPiAgCXNjYW4tPnNpemUgPSBzaXplOwo+ID4g LQlzY2FuLT5mbGFncyA9IGZsYWdzOwo+ID4gKwlzY2FuLT5tb2RlID0gbW9kZTsKPiA+ICAKPiA+ ICAJRFJNX01NX0JVR19PTihlbmQgPD0gc3RhcnQpOwo+ID4gIAlzY2FuLT5yYW5nZV9zdGFydCA9 IHN0YXJ0Owo+ID4gQEAgLTY1OSw3ICs3MjUsNyBAQCBib29sIGRybV9tbV9zY2FuX2FkZF9ibG9j ayhzdHJ1Y3QgZHJtX21tX3NjYW4gKnNjYW4sCj4gPiAgCWlmIChhZGpfZW5kIDw9IGFkal9zdGFy dCB8fCBhZGpfZW5kIC0gYWRqX3N0YXJ0IDwgc2Nhbi0+c2l6ZSkKPiA+ICAJCXJldHVybiBmYWxz ZTsKPiA+ICAKPiA+IC0JaWYgKHNjYW4tPmZsYWdzID09IERSTV9NTV9DUkVBVEVfVE9QKQo+ID4g KwlpZiAoc2Nhbi0+bW9kZSA9PSBEUk1fTU1fSU5TRVJUX0hJR0gpCj4gPiAgCQlhZGpfc3RhcnQg PSBhZGpfZW5kIC0gc2Nhbi0+c2l6ZTsKPiA+ICAKPiA+ICAJaWYgKHNjYW4tPmFsaWdubWVudCkg ewo+ID4gQEAgLTY3MSw3ICs3MzcsNyBAQCBib29sIGRybV9tbV9zY2FuX2FkZF9ibG9jayhzdHJ1 Y3QgZHJtX21tX3NjYW4gKnNjYW4sCj4gPiAgCQkJZGl2NjRfdTY0X3JlbShhZGpfc3RhcnQsIHNj YW4tPmFsaWdubWVudCwgJnJlbSk7Cj4gPiAgCQlpZiAocmVtKSB7Cj4gPiAgCQkJYWRqX3N0YXJ0 IC09IHJlbTsKPiA+IC0JCQlpZiAoc2Nhbi0+ZmxhZ3MgIT0gRFJNX01NX0NSRUFURV9UT1ApCj4g PiArCQkJaWYgKHNjYW4tPm1vZGUgIT0gRFJNX01NX0lOU0VSVF9ISUdIKQo+ID4gIAkJCQlhZGpf c3RhcnQgKz0gc2Nhbi0+YWxpZ25tZW50Owo+ID4gIAkJCWlmIChhZGpfc3RhcnQgPCBtYXgoY29s X3N0YXJ0LCBzY2FuLT5yYW5nZV9zdGFydCkgfHwKPiA+ICAJCQkgICAgbWluKGNvbF9lbmQsIHNj YW4tPnJhbmdlX2VuZCkgLSBhZGpfc3RhcnQgPCBzY2FuLT5zaXplKQo+ID4gQEAgLTc2NSw3ICs4 MzEsNyBAQCBzdHJ1Y3QgZHJtX21tX25vZGUgKmRybV9tbV9zY2FuX2NvbG9yX2V2aWN0KHN0cnVj dCBkcm1fbW1fc2NhbiAqc2NhbikKPiA+ICAKPiA+ICAJaG9sZSA9IGxpc3RfZmlyc3RfZW50cnko Jm1tLT5ob2xlX3N0YWNrLCB0eXBlb2YoKmhvbGUpLCBob2xlX3N0YWNrKTsKPiA+ICAJaG9sZV9z dGFydCA9IF9fZHJtX21tX2hvbGVfbm9kZV9zdGFydChob2xlKTsKPiA+IC0JaG9sZV9lbmQgPSBf X2RybV9tbV9ob2xlX25vZGVfZW5kKGhvbGUpOwo+ID4gKwlob2xlX2VuZCA9IGhvbGVfc3RhcnQg KyBob2xlLT5ob2xlX3NpemU7Cj4gPiAgCj4gPiAgCURSTV9NTV9CVUdfT04oaG9sZV9zdGFydCA+ IHNjYW4tPmhpdF9zdGFydCk7Cj4gPiAgCURSTV9NTV9CVUdfT04oaG9sZV9lbmQgPCBzY2FuLT5o aXRfZW5kKTsKPiA+IEBAIC03OTIsMjEgKzg1OCwyMiBAQCB2b2lkIGRybV9tbV9pbml0KHN0cnVj dCBkcm1fbW0gKm1tLCB1NjQgc3RhcnQsIHU2NCBzaXplKQo+ID4gIHsKPiA+ICAJRFJNX01NX0JV R19PTihzdGFydCArIHNpemUgPD0gc3RhcnQpOwo+ID4gIAo+ID4gKwltbS0+Y29sb3JfYWRqdXN0 ID0gTlVMTDsKPiA+ICsKPiA+ICAJSU5JVF9MSVNUX0hFQUQoJm1tLT5ob2xlX3N0YWNrKTsKPiA+ IC0JbW0tPnNjYW5fYWN0aXZlID0gMDsKPiA+ICsJbW0tPmludGVydmFsX3RyZWUgPSBSQl9ST09U Owo+ID4gKwltbS0+aG9sZXNfc2l6ZSA9IFJCX1JPT1Q7Cj4gPiArCW1tLT5ob2xlc19hZGRyID0g UkJfUk9PVDsKPiA+ICAKPiA+ICAJLyogQ2xldmVyIHRyaWNrIHRvIGF2b2lkIGEgc3BlY2lhbCBj YXNlIGluIHRoZSBmcmVlIGhvbGUgdHJhY2tpbmcuICovCj4gPiAgCUlOSVRfTElTVF9IRUFEKCZt bS0+aGVhZF9ub2RlLm5vZGVfbGlzdCk7Cj4gPiAtCW1tLT5oZWFkX25vZGUuYWxsb2NhdGVkID0g MDsKPiA+IC0JbW0tPmhlYWRfbm9kZS5ob2xlX2ZvbGxvd3MgPSAxOwo+ID4gKwltbS0+aGVhZF9u b2RlLmFsbG9jYXRlZCA9IGZhbHNlOwo+ID4gIAltbS0+aGVhZF9ub2RlLm1tID0gbW07Cj4gPiAg CW1tLT5oZWFkX25vZGUuc3RhcnQgPSBzdGFydCArIHNpemU7Cj4gPiAtCW1tLT5oZWFkX25vZGUu c2l6ZSA9IHN0YXJ0IC0gbW0tPmhlYWRfbm9kZS5zdGFydDsKPiA+IC0JbGlzdF9hZGRfdGFpbCgm bW0tPmhlYWRfbm9kZS5ob2xlX3N0YWNrLCAmbW0tPmhvbGVfc3RhY2spOwo+ID4gLQo+ID4gLQlt bS0+aW50ZXJ2YWxfdHJlZSA9IFJCX1JPT1Q7Cj4gPiArCW1tLT5oZWFkX25vZGUuc2l6ZSA9IC1z aXplOwo+ID4gKwlhZGRfaG9sZSgmbW0tPmhlYWRfbm9kZSk7Cj4gPiAgCj4gPiAtCW1tLT5jb2xv cl9hZGp1c3QgPSBOVUxMOwo+ID4gKwltbS0+c2Nhbl9hY3RpdmUgPSAwOwo+ID4gIH0KPiA+ICBF WFBPUlRfU1lNQk9MKGRybV9tbV9pbml0KTsKPiA+ICAKPiA+IEBAIC04MjgsMTggKzg5NSwxNiBA QCBFWFBPUlRfU1lNQk9MKGRybV9tbV90YWtlZG93bik7Cj4gPiAgc3RhdGljIHU2NCBkcm1fbW1f ZGVidWdfaG9sZShjb25zdCBzdHJ1Y3QgZHJtX21tX25vZGUgKmVudHJ5LAo+ID4gIAkJCSAgICAg Y29uc3QgY2hhciAqcHJlZml4KQo+ID4gIHsKPiA+IC0JdTY0IGhvbGVfc3RhcnQsIGhvbGVfZW5k LCBob2xlX3NpemU7Cj4gPiAtCj4gPiAtCWlmIChlbnRyeS0+aG9sZV9mb2xsb3dzKSB7Cj4gPiAt CQlob2xlX3N0YXJ0ID0gZHJtX21tX2hvbGVfbm9kZV9zdGFydChlbnRyeSk7Cj4gPiAtCQlob2xl X2VuZCA9IGRybV9tbV9ob2xlX25vZGVfZW5kKGVudHJ5KTsKPiA+IC0JCWhvbGVfc2l6ZSA9IGhv bGVfZW5kIC0gaG9sZV9zdGFydDsKPiA+IC0JCXByX2RlYnVnKCIlcyAlI2xseC0lI2xseDogJWxs dTogZnJlZVxuIiwgcHJlZml4LCBob2xlX3N0YXJ0LAo+ID4gLQkJCSBob2xlX2VuZCwgaG9sZV9z aXplKTsKPiA+IC0JCXJldHVybiBob2xlX3NpemU7Cj4gPiArCXU2NCBzdGFydCwgc2l6ZTsKPiA+ ICsKPiA+ICsJc2l6ZSA9IGVudHJ5LT5ob2xlX3NpemU7Cj4gPiArCWlmIChzaXplKSB7Cj4gPiAr CQlzdGFydCA9IGRybV9tbV9ob2xlX25vZGVfc3RhcnQoZW50cnkpOwo+ID4gKwkJcHJfZGVidWco IiVzICUjbGx4LSUjbGx4OiAlbGx1OiBmcmVlXG4iLAo+ID4gKwkJCSBwcmVmaXgsIHN0YXJ0LCBz dGFydCArIHNpemUsIHNpemUpOwo+ID4gIAl9Cj4gPiAgCj4gPiAtCXJldHVybiAwOwo+ID4gKwly ZXR1cm4gc2l6ZTsKPiA+ICB9Cj4gPiAgCj4gPiAgLyoqCj4gPiBAQCAtODcwLDE4ICs5MzUsMTYg QEAgRVhQT1JUX1NZTUJPTChkcm1fbW1fZGVidWdfdGFibGUpOwo+ID4gICNpZiBkZWZpbmVkKENP TkZJR19ERUJVR19GUykKPiA+ICBzdGF0aWMgdTY0IGRybV9tbV9kdW1wX2hvbGUoc3RydWN0IHNl cV9maWxlICptLCBjb25zdCBzdHJ1Y3QgZHJtX21tX25vZGUgKmVudHJ5KQo+ID4gIHsKPiA+IC0J dTY0IGhvbGVfc3RhcnQsIGhvbGVfZW5kLCBob2xlX3NpemU7Cj4gPiAtCj4gPiAtCWlmIChlbnRy eS0+aG9sZV9mb2xsb3dzKSB7Cj4gPiAtCQlob2xlX3N0YXJ0ID0gZHJtX21tX2hvbGVfbm9kZV9z dGFydChlbnRyeSk7Cj4gPiAtCQlob2xlX2VuZCA9IGRybV9tbV9ob2xlX25vZGVfZW5kKGVudHJ5 KTsKPiA+IC0JCWhvbGVfc2l6ZSA9IGhvbGVfZW5kIC0gaG9sZV9zdGFydDsKPiA+IC0JCXNlcV9w cmludGYobSwgIiUjMDE4bGx4LSUjMDE4bGx4OiAlbGx1OiBmcmVlXG4iLCBob2xlX3N0YXJ0LAo+ ID4gLQkJCSAgIGhvbGVfZW5kLCBob2xlX3NpemUpOwo+ID4gLQkJcmV0dXJuIGhvbGVfc2l6ZTsK PiA+ICsJdTY0IHN0YXJ0LCBzaXplOwo+ID4gKwo+ID4gKwlzaXplID0gZW50cnktPmhvbGVfc2l6 ZTsKPiA+ICsJaWYgKHNpemUpIHsKPiA+ICsJCXN0YXJ0ID0gZHJtX21tX2hvbGVfbm9kZV9zdGFy dChlbnRyeSk7Cj4gPiArCQlzZXFfcHJpbnRmKG0sICIlIzAxOGxseC0lIzAxOGxseDogJWxsdTog ZnJlZVxuIiwKPiA+ICsJCQkgICBzdGFydCwgc3RhcnQgKyBzaXplLCBzaXplKTsKPiA+ICAJfQo+ ID4gIAo+ID4gLQlyZXR1cm4gMDsKPiA+ICsJcmV0dXJuIHNpemU7Cj4gPiAgfQo+ID4gIAo+ID4g IC8qKgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm1hX21hbmFnZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fdm1hX21hbmFnZXIuYwo+ID4gaW5kZXggMjBjYzMzZDFiZmMx Li5kOTEwMGI1NjUxOTggMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtYV9t YW5hZ2VyLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm1hX21hbmFnZXIuYwo+ID4g QEAgLTIxMiw4ICsyMTIsNyBAQCBpbnQgZHJtX3ZtYV9vZmZzZXRfYWRkKHN0cnVjdCBkcm1fdm1h X29mZnNldF9tYW5hZ2VyICptZ3IsCj4gPiAgCQlnb3RvIG91dF91bmxvY2s7Cj4gPiAgCX0KPiA+ ICAKPiA+IC0JcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZtZ3ItPnZtX2FkZHJfc3BhY2VfbW0s ICZub2RlLT52bV9ub2RlLAo+ID4gLQkJCQkgcGFnZXMsIDAsIERSTV9NTV9TRUFSQ0hfREVGQVVM VCk7Cj4gPiArCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmbWdyLT52bV9hZGRyX3NwYWNlX21t LCAmbm9kZS0+dm1fbm9kZSwgcGFnZXMpOwo+ID4gIAlpZiAocmV0KQo+ID4gIAkJZ290byBvdXRf dW5sb2NrOwo+ID4gIAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0 bmF2aXZfbW11LmMgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X21tdS5jCj4gPiBp bmRleCAyZGFlMzE2OWNlNDguLjY5YWI5OGMxNDNkYyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9ldG5hdml2L2V0bmF2aXZfbW11LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9l dG5hdml2L2V0bmF2aXZfbW11LmMKPiA+IEBAIC0xMDcsNiArMTA3LDcgQEAgc3RhdGljIGludCBl dG5hdml2X2lvbW11X2ZpbmRfaW92YShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAo+ID4gIAkJ CQkgICBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsIHNpemVfdCBzaXplKQo+ID4gIHsKPiA+ICAJ c3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICpmcmVlID0gTlVMTDsKPiA+ICsJZW51bSBkcm1f bW1faW5zZXJ0X21vZGUgbW9kZSA9IERSTV9NTV9JTlNFUlRfTE9XOwo+ID4gIAlpbnQgcmV0Owo+ ID4gIAo+ID4gIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtbXUtPmxvY2spOwo+ID4gQEAgLTExOCw4 ICsxMTksOSBAQCBzdGF0aWMgaW50IGV0bmF2aXZfaW9tbXVfZmluZF9pb3ZhKHN0cnVjdCBldG5h dml2X2lvbW11ICptbXUsCj4gPiAgCQlib29sIGZvdW5kOwo+ID4gIAo+ID4gIAkJcmV0ID0gZHJt X21tX2luc2VydF9ub2RlX2luX3JhbmdlKCZtbXUtPm1tLCBub2RlLAo+ID4gLQkJCXNpemUsIDAs IG1tdS0+bGFzdF9pb3ZhLCB+MFVMLAo+ID4gLQkJCURSTV9NTV9TRUFSQ0hfREVGQVVMVCk7Cj4g PiArCQkJCQkJICBzaXplLCAwLCAwLAo+ID4gKwkJCQkJCSAgbW11LT5sYXN0X2lvdmEsIFU2NF9N QVgsCj4gPiArCQkJCQkJICBtb2RlKTsKPiA+ICAKPiA+ICAJCWlmIChyZXQgIT0gLUVOT1NQQykK PiA+ICAJCQlicmVhazsKPiA+IEBAIC0xODcsNiArMTg5LDggQEAgc3RhdGljIGludCBldG5hdml2 X2lvbW11X2ZpbmRfaW92YShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAo+ID4gIAkJCWxpc3Rf ZGVsX2luaXQoJm0tPnNjYW5fbm9kZSk7Cj4gPiAgCQl9Cj4gPiAgCj4gPiArCQltb2RlID0gRFJN X01NX0lOU0VSVF9FVklDVDsKPiA+ICsKPiA+ICAJCS8qCj4gPiAgCQkgKiBXZSByZW1vdmVkIGVu b3VnaCBtYXBwaW5ncyBzbyB0aGF0IHRoZSBuZXcgYWxsb2NhdGlvbiB3aWxsCj4gPiAgCQkgKiBz dWNjZWVkLiAgRW5zdXJlIHRoYXQgdGhlIE1NVSB3aWxsIGJlIGZsdXNoZWQgYmVmb3JlIHRoZQo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gPiBpbmRleCA1Mjc1ZjYyNDhjZTMuLmNjNGUwMjI0 OTY4ZiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiA+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiA+IEBAIC02OSwxMiArNjks MTAgQEAgaW5zZXJ0X21hcHBhYmxlX25vZGUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCwKPiA+ICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsIHUzMiBzaXplKQo+ ID4gIHsKPiA+ICAJbWVtc2V0KG5vZGUsIDAsIHNpemVvZigqbm9kZSkpOwo+ID4gLQlyZXR1cm4g ZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMoJmdndHQtPmJhc2UubW0sIG5vZGUs Cj4gPiAtCQkJCQkJICAgc2l6ZSwgMCwKPiA+IC0JCQkJCQkgICBJOTE1X0NPTE9SX1VORVZJQ1RB QkxFLAo+ID4gLQkJCQkJCSAgIDAsIGdndHQtPm1hcHBhYmxlX2VuZCwKPiA+IC0JCQkJCQkgICBE Uk1fTU1fU0VBUkNIX0RFRkFVTFQsCj4gPiAtCQkJCQkJICAgRFJNX01NX0NSRUFURV9ERUZBVUxU KTsKPiA+ICsJcmV0dXJuIGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZSgmZ2d0dC0+YmFzZS5t bSwgbm9kZSwKPiA+ICsJCQkJCSAgIHNpemUsIDAsIEk5MTVfQ09MT1JfVU5FVklDVEFCTEUsCj4g PiArCQkJCQkgICAwLCBnZ3R0LT5tYXBwYWJsZV9lbmQsCj4gPiArCQkJCQkgICBEUk1fTU1fSU5T RVJUX0xPVyk7Cj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyB2b2lkCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2V2aWN0LmMKPiA+IGluZGV4IDUwMTI5ZWMxY2FhYi4uZjkyZjYzZTg3NDlh IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3QuYwo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3QuYwo+ID4gQEAgLTEw OSw2ICsxMDksNyBAQCBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0sCj4gPiAgCX0sICoqcGhhc2U7Cj4gPiAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1h LCAqbmV4dDsKPiA+ICAJc3RydWN0IGRybV9tbV9ub2RlICpub2RlOwo+ID4gKwllbnVtIGRybV9t bV9pbnNlcnRfbW9kZSBtb2RlOwo+ID4gIAlpbnQgcmV0Owo+ID4gIAo+ID4gIAlsb2NrZGVwX2Fz c2VydF9oZWxkKCZ2bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gPiBAQCAtMTI3LDEwICsx MjgsMTQgQEAgaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtLAo+ID4gIAkgKiBPbiBlYWNoIGxpc3QsIHRoZSBvbGRlc3Qgb2JqZWN0cyBsaWUgYXQg dGhlIEhFQUQgd2l0aCB0aGUgZnJlc2hlc3QKPiA+ICAJICogb2JqZWN0IG9uIHRoZSBUQUlMLgo+ ID4gIAkgKi8KPiA+ICsJbW9kZSA9IERSTV9NTV9JTlNFUlRfQkVTVDsKPiA+ICsJaWYgKGZsYWdz ICYgUElOX0hJR0gpCj4gPiArCQltb2RlID0gRFJNX01NX0lOU0VSVF9ISUdIOwo+ID4gKwlpZiAo ZmxhZ3MgJiBQSU5fTUFQUEFCTEUpCj4gPiArCQltb2RlID0gRFJNX01NX0lOU0VSVF9MT1c7Cj4g PiAgCWRybV9tbV9zY2FuX2luaXRfd2l0aF9yYW5nZSgmc2NhbiwgJnZtLT5tbSwKPiA+ICAJCQkJ ICAgIG1pbl9zaXplLCBhbGlnbm1lbnQsIGNhY2hlX2xldmVsLAo+ID4gLQkJCQkgICAgc3RhcnQs IGVuZCwKPiA+IC0JCQkJICAgIGZsYWdzICYgUElOX0hJR0ggPyBEUk1fTU1fQ1JFQVRFX1RPUCA6 IDApOwo+ID4gKwkJCQkgICAgc3RhcnQsIGVuZCwgbW9kZSk7Cj4gPiAgCj4gPiAgCS8qIFJldGly ZSBiZWZvcmUgd2Ugc2VhcmNoIHRoZSBhY3RpdmUgbGlzdC4gQWx0aG91Z2ggd2UgaGF2ZQo+ID4g IAkgKiByZWFzb25hYmxlIGFjY3VyYWN5IGluIG91ciByZXRpcmVtZW50IGxpc3RzLCB3ZSBtYXkg aGF2ZQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNi dWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ID4g aW5kZXggYzY0NDM4ZjgxNzFjLi4zZTQzNWNhZjcyMjEgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ID4gQEAgLTQzNiwxMiArNDM2LDExIEBA IHN0YXRpYyB2b2lkICpyZWxvY19pb21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAo+ID4gIAkJCQkJICAgICAgIFBJTl9NQVBQQUJMRSB8IFBJTl9OT05CTE9DSyk7Cj4gPiAgCQlp ZiAoSVNfRVJSKHZtYSkpIHsKPiA+ICAJCQltZW1zZXQoJmNhY2hlLT5ub2RlLCAwLCBzaXplb2Yo Y2FjaGUtPm5vZGUpKTsKPiA+IC0JCQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2Vf Z2VuZXJpYwo+ID4gKwkJCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZQo+ID4gIAkJ CQkoJmdndHQtPmJhc2UubW0sICZjYWNoZS0+bm9kZSwKPiA+ICAJCQkJIDQwOTYsIDAsIEk5MTVf Q09MT1JfVU5FVklDVEFCTEUsCj4gPiAgCQkJCSAwLCBnZ3R0LT5tYXBwYWJsZV9lbmQsCj4gPiAt CQkJCSBEUk1fTU1fU0VBUkNIX0RFRkFVTFQsCj4gPiAtCQkJCSBEUk1fTU1fQ1JFQVRFX0RFRkFV TFQpOwo+ID4gKwkJCQkgRFJNX01NX0lOU0VSVF9MT1cpOwo+ID4gIAkJCWlmIChyZXQpIC8qIG5v IGluYWN0aXZlIGFwZXJ0dXJlIHNwYWNlLCB1c2UgY3B1IHJlbG9jICovCj4gPiAgCQkJCXJldHVy biBOVUxMOwo+ID4gIAkJfSBlbHNlIHsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5j Cj4gPiBpbmRleCBjOGYxNjc1ODUyYTcuLjkzOWI4NjJiZmNmYSAxMDA2NDQKPiA+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ID4gQEAgLTI3MjIsMTIgKzI3MjIsMTAgQEAgaW50IGk5 MTVfZ2VtX2luaXRfZ2d0dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiAg CQlyZXR1cm4gcmV0Owo+ID4gIAo+ID4gIAkvKiBSZXNlcnZlIGEgbWFwcGFibGUgc2xvdCBmb3Ig b3VyIGxvY2tsZXNzIGVycm9yIGNhcHR1cmUgKi8KPiA+IC0JcmV0ID0gZHJtX21tX2luc2VydF9u b2RlX2luX3JhbmdlX2dlbmVyaWMoJmdndHQtPmJhc2UubW0sCj4gPiAtCQkJCQkJICAmZ2d0dC0+ ZXJyb3JfY2FwdHVyZSwKPiA+IC0JCQkJCQkgIDQwOTYsIDAsCj4gPiAtCQkJCQkJICBJOTE1X0NP TE9SX1VORVZJQ1RBQkxFLAo+ID4gLQkJCQkJCSAgMCwgZ2d0dC0+bWFwcGFibGVfZW5kLAo+ID4g LQkJCQkJCSAgMCwgMCk7Cj4gPiArCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZSgm Z2d0dC0+YmFzZS5tbSwgJmdndHQtPmVycm9yX2NhcHR1cmUsCj4gPiArCQkJCQkgIDQwOTYsIDAs IEk5MTVfQ09MT1JfVU5FVklDVEFCTEUsCj4gPiArCQkJCQkgIDAsIGdndHQtPm1hcHBhYmxlX2Vu ZCwKPiA+ICsJCQkJCSAgRFJNX01NX0lOU0VSVF9MT1cpOwo+ID4gIAlpZiAocmV0KQo+ID4gIAkJ cmV0dXJuIHJldDsKPiA+ICAKPiA+IEBAIC0zNTQyLDE4ICszNTQwLDE2IEBAIGludCBpOTE1X2dl bV9ndHRfaW5zZXJ0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ID4gIAkJCXU2NCBz aXplLCB1NjQgYWxpZ25tZW50LCB1bnNpZ25lZCBsb25nIGNvbG9yLAo+ID4gIAkJCXU2NCBzdGFy dCwgdTY0IGVuZCwgdW5zaWduZWQgaW50IGZsYWdzKQo+ID4gIHsKPiA+IC0JdTMyIHNlYXJjaF9m bGFnLCBhbGxvY19mbGFnOwo+ID4gKwllbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2RlOwo+ID4g IAlpbnQgZXJyOwo+ID4gIAo+ID4gIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bS0+aTkxNS0+ZHJt LnN0cnVjdF9tdXRleCk7Cj4gPiAgCj4gPiAtCWlmIChmbGFncyAmIFBJTl9ISUdIKSB7Cj4gPiAt CQlzZWFyY2hfZmxhZyA9IERSTV9NTV9TRUFSQ0hfQkVMT1c7Cj4gPiAtCQlhbGxvY19mbGFnID0g RFJNX01NX0NSRUFURV9UT1A7Cj4gPiAtCX0gZWxzZSB7Cj4gPiAtCQlzZWFyY2hfZmxhZyA9IERS TV9NTV9TRUFSQ0hfREVGQVVMVDsKPiA+IC0JCWFsbG9jX2ZsYWcgPSBEUk1fTU1fQ1JFQVRFX0RF RkFVTFQ7Cj4gPiAtCX0KPiA+ICsJbW9kZSA9IERSTV9NTV9JTlNFUlRfQkVTVDsKPiA+ICsJaWYg KGZsYWdzICYgUElOX0hJR0gpCj4gPiArCQltb2RlID0gRFJNX01NX0lOU0VSVF9ISUdIOwo+ID4g KwlpZiAoZmxhZ3MgJiBQSU5fTUFQUEFCTEUpCj4gPiArCQltb2RlID0gRFJNX01NX0lOU0VSVF9M T1c7Cj4gPiAgCj4gPiAgCS8qIFdlIG9ubHkgYWxsb2NhdGUgaW4gUEFHRV9TSVpFL0dUVF9QQUdF X1NJWkUgKDQwOTYpIGNodW5rcywKPiA+ICAJICogc28gd2Uga25vdyB0aGF0IHdlIGFsd2F5cyBo YXZlIGEgbWluaW11bSBhbGlnbm1lbnQgb2YgNDA5Ni4KPiA+IEBAIC0zNTY1LDEwICszNTYxLDkg QEAgaW50IGk5MTVfZ2VtX2d0dF9pbnNlcnQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0s Cj4gPiAgCWlmIChhbGlnbm1lbnQgPD0gNDA5NikKPiA+ICAJCWFsaWdubWVudCA9IDA7Cj4gPiAg Cj4gPiAtCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKCZ2bS0+bW0s IG5vZGUsCj4gPiAtCQkJCQkJICBzaXplLCBhbGlnbm1lbnQsIGNvbG9yLAo+ID4gLQkJCQkJCSAg c3RhcnQsIGVuZCwKPiA+IC0JCQkJCQkgIHNlYXJjaF9mbGFnLCBhbGxvY19mbGFnKTsKPiA+ICsJ ZXJyID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKCZ2bS0+bW0sIG5vZGUsCj4gPiArCQkJ CQkgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4gPiArCQkJCQkgIHN0YXJ0LCBlbmQsIG1vZGUp Owo+ID4gIAlpZiAoZXJyICE9IC1FTk9TUEMpCj4gPiAgCQlyZXR1cm4gZXJyOwo+ID4gIAo+ID4g QEAgLTM1NzcsOSArMzU3Miw3IEBAIGludCBpOTE1X2dlbV9ndHRfaW5zZXJ0KHN0cnVjdCBpOTE1 X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ID4gIAlpZiAoZXJyKQo+ID4gIAkJcmV0dXJuIGVycjsKPiA+ ICAKPiA+IC0Jc2VhcmNoX2ZsYWcgPSBEUk1fTU1fU0VBUkNIX0RFRkFVTFQ7Cj4gPiAtCXJldHVy biBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYygmdm0tPm1tLCBub2RlLAo+ID4g LQkJCQkJCSAgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4gPiAtCQkJCQkJICAgc3RhcnQsIGVu ZCwKPiA+IC0JCQkJCQkgICBzZWFyY2hfZmxhZywgYWxsb2NfZmxhZyk7Cj4gPiArCXJldHVybiBk cm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UoJnZtLT5tbSwgbm9kZSwKPiA+ICsJCQkJCSAgIHNp emUsIGFsaWdubWVudCwgY29sb3IsCj4gPiArCQkJCQkgICBzdGFydCwgZW5kLCBEUk1fTU1fSU5T RVJUX0VWSUNUKTsKPiA+ICB9Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fc3RvbGVuLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4u Ywo+ID4gaW5kZXggZjFhODBiZmE5OTE5Li5mNmQ1MDdmYWY4M2IgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwo+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKPiA+IEBAIC01NSw5ICs1NSw5IEBAIGludCBp OTE1X2dlbV9zdG9sZW5faW5zZXJ0X25vZGVfaW5fcmFuZ2Uoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+ID4gIAkJcmV0dXJuIC1FTk9ERVY7Cj4gPiAgCj4gPiAgCW11dGV4X2xv Y2soJmRldl9wcml2LT5tbS5zdG9sZW5fbG9jayk7Cj4gPiAtCXJldCA9IGRybV9tbV9pbnNlcnRf bm9kZV9pbl9yYW5nZSgmZGV2X3ByaXYtPm1tLnN0b2xlbiwgbm9kZSwgc2l6ZSwKPiA+IC0JCQkJ CSAgYWxpZ25tZW50LCBzdGFydCwgZW5kLAo+ID4gLQkJCQkJICBEUk1fTU1fU0VBUkNIX0RFRkFV TFQpOwo+ID4gKwlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UoJmRldl9wcml2LT5t bS5zdG9sZW4sIG5vZGUsCj4gPiArCQkJCQkgIHNpemUsIGFsaWdubWVudCwgMCwKPiA+ICsJCQkJ CSAgc3RhcnQsIGVuZCwgRFJNX01NX0lOU0VSVF9CRVNUKTsKPiA+ICAJbXV0ZXhfdW5sb2NrKCZk ZXZfcHJpdi0+bW0uc3RvbGVuX2xvY2spOwo+ID4gIAo+ID4gIAlyZXR1cm4gcmV0Owo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9tc21fZ2VtLmMKPiA+IGluZGV4IGNkMDZjZmQ5NDY4Ny4uNDEyNjY5MDYyY2I3IDEwMDY0 NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMKPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCj4gPiBAQCAtNTQsOCArNTQsNyBAQCBzdGF0aWMgc3Ry dWN0IHBhZ2UgKipnZXRfcGFnZXNfdnJhbShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKPiA+ ICAJaWYgKCFwKQo+ID4gIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPiAgCj4gPiAtCXJl dCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmcHJpdi0+dnJhbS5tbSwgbXNtX29iai0+dnJhbV9ub2Rl LAo+ID4gLQkJCW5wYWdlcywgMCwgRFJNX01NX1NFQVJDSF9ERUZBVUxUKTsKPiA+ICsJcmV0ID0g ZHJtX21tX2luc2VydF9ub2RlKCZwcml2LT52cmFtLm1tLCBtc21fb2JqLT52cmFtX25vZGUsIG5w YWdlcyk7Cj4gPiAgCWlmIChyZXQpIHsKPiA+ICAJCWRybV9mcmVlX2xhcmdlKHApOwo+ID4gIAkJ cmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9nZW1fdm1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fdm1hLmMKPiA+IGlu ZGV4IGEzMTFkMjZjY2IyMS4uYjY1NGVjYTc2MzZhIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9tc21fZ2VtX3ZtYS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21z bV9nZW1fdm1hLmMKPiA+IEBAIC00NSw4ICs0NSw3IEBAIG1zbV9nZW1fbWFwX3ZtYShzdHJ1Y3Qg bXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2UsCj4gPiAgCWlmIChXQVJOX09OKGRybV9tbV9u b2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSkpCj4gPiAgCQlyZXR1cm4gMDsKPiA+ICAKPiA+IC0J cmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZhc3BhY2UtPm1tLCAmdm1hLT5ub2RlLCBucGFnZXMs Cj4gPiAtCQkJMCwgRFJNX01NX1NFQVJDSF9ERUZBVUxUKTsKPiA+ICsJcmV0ID0gZHJtX21tX2lu c2VydF9ub2RlKCZhc3BhY2UtPm1tLCAmdm1hLT5ub2RlLCBucGFnZXMpOwo+ID4gIAlpZiAocmV0 KQo+ID4gIAkJcmV0dXJuIHJldDsKPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vc2VsZnRlc3RzL3Rlc3QtZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rl c3QtZHJtX21tLmMKPiA+IGluZGV4IDJjZTkyZjRkY2ZjNy4uYTA3YzA0YTZjNGI5IDEwMDY0NAo+ ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy90ZXN0LWRybV9tbS5jCj4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX21tLmMKPiA+IEBAIC0yMiwyMyAr MjIsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtYXhfaXRlcmF0aW9ucyA9IDgxOTI7Cj4gPiAg c3RhdGljIHVuc2lnbmVkIGludCBtYXhfcHJpbWUgPSAxMjg7Cj4gPiAgCj4gPiAgZW51bSB7Cj4g PiAtCURFRkFVTFQsCj4gPiAtCVRPUERPV04sCj4gPiAgCUJFU1QsCj4gPiArCUJPVFRPTVVQLAo+ ID4gKwlUT1BET1dOLAo+ID4gKwlFVklDVCwKPiA+ICB9Owo+ID4gIAo+ID4gIHN0YXRpYyBjb25z dCBzdHJ1Y3QgaW5zZXJ0X21vZGUgewo+ID4gIAljb25zdCBjaGFyICpuYW1lOwo+ID4gLQl1bnNp Z25lZCBpbnQgc2VhcmNoX2ZsYWdzOwo+ID4gLQl1bnNpZ25lZCBpbnQgY3JlYXRlX2ZsYWdzOwo+ ID4gKwllbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2RlOwo+ID4gIH0gaW5zZXJ0X21vZGVzW10g PSB7Cj4gPiAtCVtERUZBVUxUXSA9IHsgImRlZmF1bHQiLCBEUk1fTU1fU0VBUkNIX0RFRkFVTFQs IERSTV9NTV9DUkVBVEVfREVGQVVMVCB9LAo+ID4gLQlbVE9QRE9XTl0gPSB7ICJ0b3AtZG93biIs IERSTV9NTV9TRUFSQ0hfQkVMT1csIERSTV9NTV9DUkVBVEVfVE9QIH0sCj4gPiAtCVtCRVNUXSA9 IHsgImJlc3QiLCBEUk1fTU1fU0VBUkNIX0JFU1QsIERSTV9NTV9DUkVBVEVfREVGQVVMVCB9LAo+ ID4gKwlbQkVTVF0gPSB7ICJiZXN0IiwgRFJNX01NX0lOU0VSVF9CRVNUIH0sCj4gPiArCVtCT1RU T01VUF0gPSB7ICJib3R0b20tdXAiLCBEUk1fTU1fSU5TRVJUX0xPVyB9LAo+ID4gKwlbVE9QRE9X Tl0gPSB7ICJ0b3AtZG93biIsIERSTV9NTV9JTlNFUlRfSElHSCB9LAo+ID4gKwlbRVZJQ1RdID0g eyAiZXZpY3QiLCBEUk1fTU1fSU5TRVJUX0VWSUNUIH0sCj4gPiAgCXt9Cj4gPiAgfSwgZXZpY3Rf bW9kZXNbXSA9IHsKPiA+IC0JeyAiZGVmYXVsdCIsIERSTV9NTV9TRUFSQ0hfREVGQVVMVCwgRFJN X01NX0NSRUFURV9ERUZBVUxUIH0sCj4gPiAtCXsgInRvcC1kb3duIiwgRFJNX01NX1NFQVJDSF9C RUxPVywgRFJNX01NX0NSRUFURV9UT1AgfSwKPiA+ICsJeyAiYm90dG9tLXVwIiwgRFJNX01NX0lO U0VSVF9MT1cgfSwKPiA+ICsJeyAidG9wLWRvd24iLCBEUk1fTU1fSU5TRVJUX0hJR0ggfSwKPiA+ ICAJe30KPiA+ICB9Owo+ID4gIAo+ID4gQEAgLTUyMiw4ICs1MjMsNyBAQCBzdGF0aWMgYm9vbCBl eHBlY3RfaW5zZXJ0KHN0cnVjdCBkcm1fbW0gKm1tLCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUs Cj4gPiAgCj4gPiAgCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZV9nZW5lcmljKG1tLCBub2RlLAo+ ID4gIAkJCQkJIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4gPiAtCQkJCQkgbW9kZS0+c2VhcmNo X2ZsYWdzLAo+ID4gLQkJCQkJIG1vZGUtPmNyZWF0ZV9mbGFncyk7Cj4gPiArCQkJCQkgbW9kZS0+ bW9kZSk7Cj4gPiAgCWlmIChlcnIpIHsKPiA+ICAJCXByX2VycigiaW5zZXJ0IChzaXplPSVsbHUs IGFsaWdubWVudD0lbGx1LCBjb2xvcj0lbHUsIG1vZGU9JXMpIGZhaWxlZCB3aXRoIGVycj0lZFxu IiwKPiA+ICAJCSAgICAgICBzaXplLCBhbGlnbm1lbnQsIGNvbG9yLCBtb2RlLT5uYW1lLCBlcnIp Owo+ID4gQEAgLTU0Myw3ICs1NDMsNyBAQCBzdGF0aWMgYm9vbCBleHBlY3RfaW5zZXJ0X2ZhaWwo c3RydWN0IGRybV9tbSAqbW0sIHU2NCBzaXplKQo+ID4gIAlzdHJ1Y3QgZHJtX21tX25vZGUgdG1w ID0ge307Cj4gPiAgCWludCBlcnI7Cj4gPiAgCj4gPiAtCWVyciA9IGRybV9tbV9pbnNlcnRfbm9k ZShtbSwgJnRtcCwgc2l6ZSwgMCwgRFJNX01NX1NFQVJDSF9ERUZBVUxUKTsKPiA+ICsJZXJyID0g ZHJtX21tX2luc2VydF9ub2RlKG1tLCAmdG1wLCBzaXplKTsKPiA+ICAJaWYgKGxpa2VseShlcnIg PT0gLUVOT1NQQykpCj4gPiAgCQlyZXR1cm4gdHJ1ZTsKPiA+ICAKPiA+IEBAIC03NDksMTEgKzc0 OSwxMCBAQCBzdGF0aWMgYm9vbCBleHBlY3RfaW5zZXJ0X2luX3JhbmdlKHN0cnVjdCBkcm1fbW0g Km1tLCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsCj4gPiAgewo+ID4gIAlpbnQgZXJyOwo+ID4g IAo+ID4gLQllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYyhtbSwgbm9k ZSwKPiA+IC0JCQkJCQkgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4gPiAtCQkJCQkJICByYW5n ZV9zdGFydCwgcmFuZ2VfZW5kLAo+ID4gLQkJCQkJCSAgbW9kZS0+c2VhcmNoX2ZsYWdzLAo+ID4g LQkJCQkJCSAgbW9kZS0+Y3JlYXRlX2ZsYWdzKTsKPiA+ICsJZXJyID0gZHJtX21tX2luc2VydF9u b2RlX2luX3JhbmdlKG1tLCBub2RlLAo+ID4gKwkJCQkJICBzaXplLCBhbGlnbm1lbnQsIGNvbG9y LAo+ID4gKwkJCQkJICByYW5nZV9zdGFydCwgcmFuZ2VfZW5kLAo+ID4gKwkJCQkJICBtb2RlLT5t b2RlKTsKPiA+ICAJaWYgKGVycikgewo+ID4gIAkJcHJfZXJyKCJpbnNlcnQgKHNpemU9JWxsdSwg YWxpZ25tZW50PSVsbHUsIGNvbG9yPSVsdSwgbW9kZT0lcykgbnRvIHJhbmdlIFslbGx4LCAlbGx4 XSBmYWlsZWQgd2l0aCBlcnI9JWRcbiIsCj4gPiAgCQkgICAgICAgc2l6ZSwgYWxpZ25tZW50LCBj b2xvciwgbW9kZS0+bmFtZSwKPiA+IEBAIC03NzcsMTEgKzc3NiwxMCBAQCBzdGF0aWMgYm9vbCBl eHBlY3RfaW5zZXJ0X2luX3JhbmdlX2ZhaWwoc3RydWN0IGRybV9tbSAqbW0sCj4gPiAgCXN0cnVj dCBkcm1fbW1fbm9kZSB0bXAgPSB7fTsKPiA+ICAJaW50IGVycjsKPiA+ICAKPiA+IC0JZXJyID0g ZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMobW0sICZ0bXAsCj4gPiAtCQkJCQkJ ICBzaXplLCAwLCAwLAo+ID4gLQkJCQkJCSAgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwKPiA+IC0J CQkJCQkgIERSTV9NTV9TRUFSQ0hfREVGQVVMVCwKPiA+IC0JCQkJCQkgIERSTV9NTV9DUkVBVEVf REVGQVVMVCk7Cj4gPiArCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZShtbSwgJnRt cCwKPiA+ICsJCQkJCSAgc2l6ZSwgMCwgMCwKPiA+ICsJCQkJCSAgcmFuZ2Vfc3RhcnQsIHJhbmdl X2VuZCwKPiA+ICsJCQkJCSAgMCk7Cj4gPiAgCWlmIChsaWtlbHkoZXJyID09IC1FTk9TUEMpKQo+ ID4gIAkJcmV0dXJuIHRydWU7Cj4gPiAgCj4gPiBAQCAtMTMxNCw3ICsxMzEyLDcgQEAgc3RhdGlj IGludCBldmljdF9zb21ldGhpbmcoc3RydWN0IGRybV9tbSAqbW0sCj4gPiAgCWRybV9tbV9zY2Fu X2luaXRfd2l0aF9yYW5nZSgmc2NhbiwgbW0sCj4gPiAgCQkJCSAgICBzaXplLCBhbGlnbm1lbnQs IDAsCj4gPiAgCQkJCSAgICByYW5nZV9zdGFydCwgcmFuZ2VfZW5kLAo+ID4gLQkJCQkgICAgbW9k ZS0+Y3JlYXRlX2ZsYWdzKTsKPiA+ICsJCQkJICAgIG1vZGUtPm1vZGUpOwo+ID4gIAlpZiAoIWV2 aWN0X25vZGVzKCZzY2FuLAo+ID4gIAkJCSBub2Rlcywgb3JkZXIsIGNvdW50LCBmYWxzZSwKPiA+ ICAJCQkgJmV2aWN0X2xpc3QpKQo+ID4gQEAgLTEzMjIsOCArMTMyMCw3IEBAIHN0YXRpYyBpbnQg ZXZpY3Rfc29tZXRoaW5nKHN0cnVjdCBkcm1fbW0gKm1tLAo+ID4gIAo+ID4gIAltZW1zZXQoJnRt cCwgMCwgc2l6ZW9mKHRtcCkpOwo+ID4gIAllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJp YyhtbSwgJnRtcCwgc2l6ZSwgYWxpZ25tZW50LCAwLAo+ID4gLQkJCQkJIG1vZGUtPnNlYXJjaF9m bGFncywKPiA+IC0JCQkJCSBtb2RlLT5jcmVhdGVfZmxhZ3MpOwo+ID4gKwkJCQkJIERSTV9NTV9J TlNFUlRfRVZJQ1QpOwo+ID4gIAlpZiAoZXJyKSB7Cj4gPiAgCQlwcl9lcnIoIkZhaWxlZCB0byBp bnNlcnQgaW50byBldmljdGlvbiBob2xlOiBzaXplPSVkLCBhbGlnbj0lZFxuIiwKPiA+ICAJCSAg ICAgICBzaXplLCBhbGlnbm1lbnQpOwo+ID4gQEAgLTEzOTgsOCArMTM5NSw3IEBAIHN0YXRpYyBp bnQgaWd0X2V2aWN0KHZvaWQgKmlnbm9yZWQpCj4gPiAgCXJldCA9IC1FSU5WQUw7Cj4gPiAgCWRy bV9tbV9pbml0KCZtbSwgMCwgc2l6ZSk7Cj4gPiAgCWZvciAobiA9IDA7IG4gPCBzaXplOyBuKysp IHsKPiA+IC0JCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZSgmbW0sICZub2Rlc1tuXS5ub2RlLCAx LCAwLAo+ID4gLQkJCQkJIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7Cj4gPiArCQllcnIgPSBkcm1f bW1faW5zZXJ0X25vZGUoJm1tLCAmbm9kZXNbbl0ubm9kZSwgMSk7Cj4gPiAgCQlpZiAoZXJyKSB7 Cj4gPiAgCQkJcHJfZXJyKCJpbnNlcnQgZmFpbGVkLCBzdGVwICVkXG4iLCBuKTsKPiA+ICAJCQly ZXQgPSBlcnI7Cj4gPiBAQCAtMTUwNyw4ICsxNTAzLDcgQEAgc3RhdGljIGludCBpZ3RfZXZpY3Rf cmFuZ2Uodm9pZCAqaWdub3JlZCkKPiA+ICAJcmV0ID0gLUVJTlZBTDsKPiA+ICAJZHJtX21tX2lu aXQoJm1tLCAwLCBzaXplKTsKPiA+ICAJZm9yIChuID0gMDsgbiA8IHNpemU7IG4rKykgewo+ID4g LQkJZXJyID0gZHJtX21tX2luc2VydF9ub2RlKCZtbSwgJm5vZGVzW25dLm5vZGUsIDEsIDAsCj4g PiAtCQkJCQkgRFJNX01NX1NFQVJDSF9ERUZBVUxUKTsKPiA+ICsJCWVyciA9IGRybV9tbV9pbnNl cnRfbm9kZSgmbW0sICZub2Rlc1tuXS5ub2RlLCAxKTsKPiA+ICAJCWlmIChlcnIpIHsKPiA+ICAJ CQlwcl9lcnIoImluc2VydCBmYWlsZWQsIHN0ZXAgJWRcbiIsIG4pOwo+ID4gIAkJCXJldCA9IGVy cjsKPiA+IEBAIC0xODk0LDcgKzE4ODksNyBAQCBzdGF0aWMgaW50IGV2aWN0X2NvbG9yKHN0cnVj dCBkcm1fbW0gKm1tLAo+ID4gIAlkcm1fbW1fc2Nhbl9pbml0X3dpdGhfcmFuZ2UoJnNjYW4sIG1t LAo+ID4gIAkJCQkgICAgc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwKPiA+ICAJCQkJICAgIHJhbmdl X3N0YXJ0LCByYW5nZV9lbmQsCj4gPiAtCQkJCSAgICBtb2RlLT5jcmVhdGVfZmxhZ3MpOwo+ID4g KwkJCQkgICAgbW9kZS0+bW9kZSk7Cj4gPiAgCWlmICghZXZpY3Rfbm9kZXMoJnNjYW4sCj4gPiAg CQkJIG5vZGVzLCBvcmRlciwgY291bnQsIHRydWUsCj4gPiAgCQkJICZldmljdF9saXN0KSkKPiA+ IEBAIC0xOTAyLDggKzE4OTcsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2NvbG9yKHN0cnVjdCBkcm1f bW0gKm1tLAo+ID4gIAo+ID4gIAltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOwo+ID4gIAll cnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYyhtbSwgJnRtcCwgc2l6ZSwgYWxpZ25tZW50 LCBjb2xvciwKPiA+IC0JCQkJCSBtb2RlLT5zZWFyY2hfZmxhZ3MsCj4gPiAtCQkJCQkgbW9kZS0+ Y3JlYXRlX2ZsYWdzKTsKPiA+ICsJCQkJCSBEUk1fTU1fSU5TRVJUX0VWSUNUKTsKPiA+ICAJaWYg KGVycikgewo+ID4gIAkJcHJfZXJyKCJGYWlsZWQgdG8gaW5zZXJ0IGludG8gZXZpY3Rpb24gaG9s ZTogc2l6ZT0lZCwgYWxpZ249JWQsIGNvbG9yPSVsdSwgZXJyPSVkXG4iLAo+ID4gIAkJICAgICAg IHNpemUsIGFsaWdubWVudCwgY29sb3IsIGVycik7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3Npcy9zaXNfbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMKPiA+IGlu ZGV4IDAzZGVmZGE3Nzc2Ni4uMTYyMmRiMjRjZDM5IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL3Npcy9zaXNfbW0uYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0u Ywo+ID4gQEAgLTEwOSw4ICsxMDksNyBAQCBzdGF0aWMgaW50IHNpc19kcm1fYWxsb2Moc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlLAo+ID4gIAlpZiAocG9vbCA9 PSBBR1BfVFlQRSkgewo+ID4gIAkJcmV0dmFsID0gZHJtX21tX2luc2VydF9ub2RlKCZkZXZfcHJp di0+YWdwX21tLAo+ID4gIAkJCQkJICAgICZpdGVtLT5tbV9ub2RlLAo+ID4gLQkJCQkJICAgIG1l bS0+c2l6ZSwgMCwKPiA+IC0JCQkJCSAgICBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOwo+ID4gKwkJ CQkJICAgIG1lbS0+c2l6ZSk7Cj4gPiAgCQlvZmZzZXQgPSBpdGVtLT5tbV9ub2RlLnN0YXJ0Owo+ ID4gIAl9IGVsc2Ugewo+ID4gICNpZiBkZWZpbmVkKENPTkZJR19GQl9TSVMpIHx8IGRlZmluZWQo Q09ORklHX0ZCX1NJU19NT0RVTEUpCj4gPiBAQCAtMTIyLDggKzEyMSw3IEBAIHN0YXRpYyBpbnQg c2lzX2RybV9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGUsCj4gPiAgI2Vsc2UKPiA+ICAJCXJldHZhbCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmZGV2X3By aXYtPnZyYW1fbW0sCj4gPiAgCQkJCQkgICAgJml0ZW0tPm1tX25vZGUsCj4gPiAtCQkJCQkgICAg bWVtLT5zaXplLCAwLAo+ID4gLQkJCQkJICAgIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7Cj4gPiAr CQkJCQkgICAgbWVtLT5zaXplKTsKPiA+ICAJCW9mZnNldCA9IGl0ZW0tPm1tX25vZGUuc3RhcnQ7 Cj4gPiAgI2VuZGlmCj4gPiAgCX0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVn cmEvZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMKPiA+IGluZGV4IGMwOGU1Mjc5 ZWVhYy4uYTYwNTFkNmM2ZGU2IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3Jh L2dlbS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMKPiA+IEBAIC0xMjgs OCArMTI4LDggQEAgc3RhdGljIGludCB0ZWdyYV9ib19pb21tdV9tYXAoc3RydWN0IHRlZ3JhX2Ry bSAqdGVncmEsIHN0cnVjdCB0ZWdyYV9ibyAqYm8pCj4gPiAgCWlmICghYm8tPm1tKQo+ID4gIAkJ cmV0dXJuIC1FTk9NRU07Cj4gPiAgCj4gPiAtCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZV9nZW5l cmljKCZ0ZWdyYS0+bW0sIGJvLT5tbSwgYm8tPmdlbS5zaXplLAo+ID4gLQkJCQkJIFBBR0VfU0la RSwgMCwgMCwgMCk7Cj4gPiArCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZV9nZW5lcmljKCZ0ZWdy YS0+bW0sCj4gPiArCQkJCQkgYm8tPm1tLCBiby0+Z2VtLnNpemUsIFBBR0VfU0laRSwgMCwgMCk7 Cj4gPiAgCWlmIChlcnIgPCAwKSB7Cj4gPiAgCQlkZXZfZXJyKHRlZ3JhLT5kcm0tPmRldiwgIm91 dCBvZiBJL08gdmlydHVhbCBtZW1vcnk6ICV6ZFxuIiwKPiA+ICAJCQllcnIpOwo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX21hbmFnZXIuYyBiL2RyaXZlcnMvZ3B1 L2RybS90dG0vdHRtX2JvX21hbmFnZXIuYwo+ID4gaW5kZXggYWVhNmEwMTUwMGUxLi40OTNmZTZi MzMzNTMgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib19tYW5hZ2Vy LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX21hbmFnZXIuYwo+ID4gQEAg LTU0LDkgKzU0LDggQEAgc3RhdGljIGludCB0dG1fYm9fbWFuX2dldF9ub2RlKHN0cnVjdCB0dG1f bWVtX3R5cGVfbWFuYWdlciAqbWFuLAo+ID4gIHsKPiA+ICAJc3RydWN0IHR0bV9yYW5nZV9tYW5h Z2VyICpybWFuID0gKHN0cnVjdCB0dG1fcmFuZ2VfbWFuYWdlciAqKSBtYW4tPnByaXY7Cj4gPiAg CXN0cnVjdCBkcm1fbW0gKm1tID0gJnJtYW4tPm1tOwo+ID4gLQlzdHJ1Y3QgZHJtX21tX25vZGUg Km5vZGUgPSBOVUxMOwo+ID4gLQllbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3Mgc2ZsYWdzID0gRFJN X01NX1NFQVJDSF9CRVNUOwo+ID4gLQllbnVtIGRybV9tbV9hbGxvY2F0b3JfZmxhZ3MgYWZsYWdz ID0gRFJNX01NX0NSRUFURV9ERUZBVUxUOwo+ID4gKwlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGU7 Cj4gPiArCWVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGU7Cj4gPiAgCXVuc2lnbmVkIGxvbmcg bHBmbjsKPiA+ICAJaW50IHJldDsKPiA+ICAKPiA+IEBAIC02OCwxNiArNjcsMTUgQEAgc3RhdGlj IGludCB0dG1fYm9fbWFuX2dldF9ub2RlKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFu LAo+ID4gIAlpZiAoIW5vZGUpCj4gPiAgCQlyZXR1cm4gLUVOT01FTTsKPiA+ICAKPiA+IC0JaWYg KHBsYWNlLT5mbGFncyAmIFRUTV9QTF9GTEFHX1RPUERPV04pIHsKPiA+IC0JCXNmbGFncyA9IERS TV9NTV9TRUFSQ0hfQkVMT1c7Cj4gPiAtCQlhZmxhZ3MgPSBEUk1fTU1fQ1JFQVRFX1RPUDsKPiA+ IC0JfQo+ID4gKwltb2RlID0gRFJNX01NX0lOU0VSVF9CRVNUOwo+ID4gKwlpZiAocGxhY2UtPmZs YWdzICYgVFRNX1BMX0ZMQUdfVE9QRE9XTikKPiA+ICsJCW1vZGUgPSBEUk1fTU1fSU5TRVJUX0hJ R0g7Cj4gPiAgCj4gPiAgCXNwaW5fbG9jaygmcm1hbi0+bG9jayk7Cj4gPiAtCXJldCA9IGRybV9t bV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKG1tLCBub2RlLCBtZW0tPm51bV9wYWdlcywK PiA+ICsJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKG1tLCBub2RlLAo+ID4gKwkJ CQkJICBtZW0tPm51bV9wYWdlcywKPiA+ICAJCQkJCSAgbWVtLT5wYWdlX2FsaWdubWVudCwgMCwK PiA+IC0JCQkJCSAgcGxhY2UtPmZwZm4sIGxwZm4sCj4gPiAtCQkJCQkgIHNmbGFncywgYWZsYWdz KTsKPiA+ICsJCQkJCSAgcGxhY2UtPmZwZm4sIGxwZm4sIG1vZGUpOwo+ID4gIAlzcGluX3VubG9j aygmcm1hbi0+bG9jayk7Cj4gPiAgCj4gPiAgCWlmICh1bmxpa2VseShyZXQpKSB7Cj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfY3J0Yy5jCj4gPiBpbmRleCBhMGZkM2U2NmJjNGIuLmJhYWNkZjYyYzgzZSAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYwo+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jCj4gPiBAQCAtNTg5LDcgKzU4OSw3IEBAIHN0YXRp YyBpbnQgdmM0X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAK PiA+ICAJc3Bpbl9sb2NrX2lycXNhdmUoJnZjNC0+aHZzLT5tbV9sb2NrLCBmbGFncyk7Cj4gPiAg CXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmdmM0LT5odnMtPmRsaXN0X21tLCAmdmM0X3N0YXRl LT5tbSwKPiA+IC0JCQkJIGRsaXN0X2NvdW50LCAxLCAwKTsKPiA+ICsJCQkJIGRsaXN0X2NvdW50 KTsKPiA+ICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmM0LT5odnMtPm1tX2xvY2ssIGZsYWdz KTsKPiA+ICAJaWYgKHJldCkKPiA+ICAJCXJldHVybiByZXQ7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9odnMu Ywo+ID4gaW5kZXggNmZiYWIxYzgyY2IxLi40YWJhMGZhNTYyODkgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9odnMuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfaHZzLmMKPiA+IEBAIC0xNDEsOCArMTQxLDcgQEAgc3RhdGljIGludCB2YzRfaHZzX3Vw bG9hZF9saW5lYXJfa2VybmVsKHN0cnVjdCB2YzRfaHZzICpodnMsCj4gPiAgCWludCByZXQsIGk7 Cj4gPiAgCXUzMiBfX2lvbWVtICpkc3Rfa2VybmVsOwo+ID4gIAo+ID4gLQlyZXQgPSBkcm1fbW1f aW5zZXJ0X25vZGUoJmh2cy0+ZGxpc3RfbW0sIHNwYWNlLCBWQzRfS0VSTkVMX0RXT1JEUywgMSwK PiA+IC0JCQkJIDApOwo+ID4gKwlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGUoJmh2cy0+ZGxpc3Rf bW0sIHNwYWNlLCBWQzRfS0VSTkVMX0RXT1JEUyk7Cj4gPiAgCWlmIChyZXQpIHsKPiA+ICAJCURS TV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHNwYWNlIGZvciBmaWx0ZXIga2VybmVsOiAlZFxu IiwKPiA+ICAJCQkgIHJldCk7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKPiA+IGluZGV4IDEx MGQxNTE4ZjVkNS4uYzFmMDY4OTcxMzZiIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfcGxhbmUuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUu Ywo+ID4gQEAgLTUxNCw5ICs1MTQsOSBAQCBzdGF0aWMgaW50IHZjNF9wbGFuZV9tb2RlX3NldChz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICAJaWYgKGxibV9zaXplKSB7Cj4gPiAgCQlpZiAo IXZjNF9zdGF0ZS0+bGJtLmFsbG9jYXRlZCkgewo+ID4gIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZ2 YzQtPmh2cy0+bW1fbG9jaywgaXJxZmxhZ3MpOwo+ID4gLQkJCXJldCA9IGRybV9tbV9pbnNlcnRf bm9kZSgmdmM0LT5odnMtPmxibV9tbSwKPiA+IC0JCQkJCQkgJnZjNF9zdGF0ZS0+bGJtLAo+ID4g LQkJCQkJCSBsYm1fc2l6ZSwgMzIsIDApOwo+ID4gKwkJCXJldCA9IGRybV9tbV9pbnNlcnRfbm9k ZV9nZW5lcmljKCZ2YzQtPmh2cy0+bGJtX21tLAo+ID4gKwkJCQkJCQkgJnZjNF9zdGF0ZS0+bGJt LAo+ID4gKwkJCQkJCQkgbGJtX3NpemUsIDMyLCAwLCAwKTsKPiA+ICAJCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZ2YzQtPmh2cy0+bW1fbG9jaywgaXJxZmxhZ3MpOwo+ID4gIAkJfSBlbHNlIHsK PiA+ICAJCQlXQVJOX09OX09OQ0UobGJtX3NpemUgIT0gdmM0X3N0YXRlLT5sYm0uc2l6ZSk7Cj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYyBiL2RyaXZlcnMvZ3B1 L2RybS92aWEvdmlhX21tLmMKPiA+IGluZGV4IGEwNGVmMWM5OTJkOS4uNDIxN2Q2NmE1Y2M2IDEw MDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYwo+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYwo+ID4gQEAgLTE0MCwxMSArMTQwLDExIEBAIGludCB2 aWFfbWVtX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gPiAgCWlm IChtZW0tPnR5cGUgPT0gVklBX01FTV9BR1ApCj4gPiAgCQlyZXR2YWwgPSBkcm1fbW1faW5zZXJ0 X25vZGUoJmRldl9wcml2LT5hZ3BfbW0sCj4gPiAgCQkJCQkgICAgJml0ZW0tPm1tX25vZGUsCj4g PiAtCQkJCQkgICAgdG1wU2l6ZSwgMCwgRFJNX01NX1NFQVJDSF9ERUZBVUxUKTsKPiA+ICsJCQkJ CSAgICB0bXBTaXplKTsKPiA+ICAJZWxzZQo+ID4gIAkJcmV0dmFsID0gZHJtX21tX2luc2VydF9u b2RlKCZkZXZfcHJpdi0+dnJhbV9tbSwKPiA+ICAJCQkJCSAgICAmaXRlbS0+bW1fbm9kZSwKPiA+ IC0JCQkJCSAgICB0bXBTaXplLCAwLCBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOwo+ID4gKwkJCQkJ ICAgIHRtcFNpemUpOwo+ID4gIAlpZiAocmV0dmFsKQo+ID4gIAkJZ290byBmYWlsX2FsbG9jOwo+ ID4gIAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NtZGJ1 Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMKPiA+IGluZGV4IGFh MDRmYjAxNTlhNy4uNzdjYjdjNjI3ZTA5IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfY21kYnVmLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2NtZGJ1Zi5jCj4gPiBAQCAtNjczLDE2ICs2NzMsMTAgQEAgc3RhdGljIGJvb2wgdm13 X2NtZGJ1Zl90cnlfYWxsb2Moc3RydWN0IHZtd19jbWRidWZfbWFuICptYW4sCj4gPiAgIAo+ID4g IAltZW1zZXQoaW5mby0+bm9kZSwgMCwgc2l6ZW9mKCppbmZvLT5ub2RlKSk7Cj4gPiAgCXNwaW5f bG9ja19iaCgmbWFuLT5sb2NrKTsKPiA+IC0JcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2dlbmVy aWMoJm1hbi0+bW0sIGluZm8tPm5vZGUsIGluZm8tPnBhZ2Vfc2l6ZSwKPiA+IC0JCQkJCSAwLCAw LAo+ID4gLQkJCQkJIERSTV9NTV9TRUFSQ0hfREVGQVVMVCwKPiA+IC0JCQkJCSBEUk1fTU1fQ1JF QVRFX0RFRkFVTFQpOwo+ID4gKwlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGUoJm1hbi0+bW0sIGlu Zm8tPm5vZGUsIGluZm8tPnBhZ2Vfc2l6ZSk7Cj4gPiAgCWlmIChyZXQpIHsKPiA+ICAJCXZtd19j bWRidWZfbWFuX3Byb2Nlc3MobWFuKTsKPiA+IC0JCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZV9n ZW5lcmljKCZtYW4tPm1tLCBpbmZvLT5ub2RlLAo+ID4gLQkJCQkJCSBpbmZvLT5wYWdlX3NpemUs IDAsIDAsCj4gPiAtCQkJCQkJIERSTV9NTV9TRUFSQ0hfREVGQVVMVCwKPiA+IC0JCQkJCQkgRFJN X01NX0NSRUFURV9ERUZBVUxUKTsKPiA+ICsJCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmbWFu LT5tbSwgaW5mby0+bm9kZSwgaW5mby0+cGFnZV9zaXplKTsKPiA+ICAJfQo+ID4gIAo+ID4gIAlz cGluX3VubG9ja19iaCgmbWFuLT5sb2NrKTsKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9k cm1fbW0uaCBiL2luY2x1ZGUvZHJtL2RybV9tbS5oCj4gPiBpbmRleCA5MmVjNTc1OWNhYWUuLjY1 NThjZDA4ZDdjOSAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9tbS5oCj4gPiArKysg Yi9pbmNsdWRlL2RybS9kcm1fbW0uaAo+ID4gQEAgLTU1LDMyICs1NSwyNyBAQAo+ID4gICNkZWZp bmUgRFJNX01NX0JVR19PTihleHByKSBCVUlMRF9CVUdfT05fSU5WQUxJRChleHByKQo+ID4gICNl bmRpZgo+ID4gIAo+ID4gLWVudW0gZHJtX21tX3NlYXJjaF9mbGFncyB7Cj4gPiAtCURSTV9NTV9T RUFSQ0hfREVGQVVMVCA9CQkwLAo+ID4gLQlEUk1fTU1fU0VBUkNIX0JFU1QgPQkJMSA8PCAwLAo+ ID4gLQlEUk1fTU1fU0VBUkNIX0JFTE9XID0JCTEgPDwgMSwKPiA+ICtlbnVtIGRybV9tbV9pbnNl cnRfbW9kZSB7Cj4gPiArCURSTV9NTV9JTlNFUlRfQkVTVCA9IDAsCj4gPiArCURSTV9NTV9JTlNF UlRfTE9XLAo+ID4gKwlEUk1fTU1fSU5TRVJUX0hJR0gsCj4gPiArCURSTV9NTV9JTlNFUlRfRVZJ Q1QsCj4gPiAgfTsKPiA+ICAKPiA+IC1lbnVtIGRybV9tbV9hbGxvY2F0b3JfZmxhZ3Mgewo+ID4g LQlEUk1fTU1fQ1JFQVRFX0RFRkFVTFQgPQkJMCwKPiA+IC0JRFJNX01NX0NSRUFURV9UT1AgPQkJ MSA8PCAwLAo+ID4gLX07Cj4gPiAtCj4gPiAtI2RlZmluZSBEUk1fTU1fQk9UVE9NVVAgRFJNX01N X1NFQVJDSF9ERUZBVUxULCBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQKPiA+IC0jZGVmaW5lIERSTV9N TV9UT1BET1dOIERSTV9NTV9TRUFSQ0hfQkVMT1csIERSTV9NTV9DUkVBVEVfVE9QCj4gPiAtCj4g PiAgc3RydWN0IGRybV9tbV9ub2RlIHsKPiA+ICsJc3RydWN0IGRybV9tbSAqbW07Cj4gPiAgCXN0 cnVjdCBsaXN0X2hlYWQgbm9kZV9saXN0Owo+ID4gIAlzdHJ1Y3QgbGlzdF9oZWFkIGhvbGVfc3Rh Y2s7Cj4gPiAgCXN0cnVjdCByYl9ub2RlIHJiOwo+ID4gLQl1bnNpZ25lZCBob2xlX2ZvbGxvd3Mg OiAxOwo+ID4gLQl1bnNpZ25lZCBhbGxvY2F0ZWQgOiAxOwo+ID4gLQlib29sIHNjYW5uZWRfYmxv Y2sgOiAxOwo+ID4gLQl1bnNpZ25lZCBsb25nIGNvbG9yOwo+ID4gKwlzdHJ1Y3QgcmJfbm9kZSBy Yl9ob2xlX3NpemU7Cj4gPiArCXN0cnVjdCByYl9ub2RlIHJiX2hvbGVfYWRkcjsKPiA+ICAJdTY0 IHN0YXJ0Owo+ID4gIAl1NjQgc2l6ZTsKPiA+ICAJdTY0IF9fc3VidHJlZV9sYXN0Owo+ID4gLQlz dHJ1Y3QgZHJtX21tICptbTsKPiA+ICsJdTY0IGhvbGVfc2l6ZTsKPiA+ICsJdW5zaWduZWQgbG9u ZyBjb2xvcjsKPiA+ICsJYm9vbCBhbGxvY2F0ZWQgOiAxOwo+ID4gKwlib29sIHNjYW5uZWRfYmxv Y2sgOiAxOwo+ID4gICNpZmRlZiBDT05GSUdfRFJNX0RFQlVHX01NCj4gPiAgCWRlcG90X3N0YWNr X2hhbmRsZV90IHN0YWNrOwo+ID4gICNlbmRpZgo+ID4gQEAgLTk0LDYgKzg5LDggQEAgc3RydWN0 IGRybV9tbSB7Cj4gPiAgCXN0cnVjdCBkcm1fbW1fbm9kZSBoZWFkX25vZGU7Cj4gPiAgCS8qIEtl ZXAgYW4gaW50ZXJ2YWxfdHJlZSBmb3IgZmFzdCBsb29rdXAgb2YgZHJtX21tX25vZGVzIGJ5IGFk ZHJlc3MuICovCj4gPiAgCXN0cnVjdCByYl9yb290IGludGVydmFsX3RyZWU7Cj4gPiArCXN0cnVj dCByYl9yb290IGhvbGVzX3NpemU7Cj4gPiArCXN0cnVjdCByYl9yb290IGhvbGVzX2FkZHI7Cj4g PiAgCj4gPiAgCXZvaWQgKCpjb2xvcl9hZGp1c3QpKGNvbnN0IHN0cnVjdCBkcm1fbW1fbm9kZSAq bm9kZSwKPiA+ICAJCQkgICAgIHVuc2lnbmVkIGxvbmcgY29sb3IsCj4gPiBAQCAtMTE2LDcgKzEx Myw3IEBAIHN0cnVjdCBkcm1fbW1fc2NhbiB7Cj4gPiAgCXU2NCBoaXRfZW5kOwo+ID4gIAo+ID4g IAl1bnNpZ25lZCBsb25nIGNvbG9yOwo+ID4gLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Cj4gPiArCWVu dW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGU7Cj4gPiAgfTsKPiA+ICAKPiA+ICAvKioKPiA+IEBA IC0xNjgsNyArMTY1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGRybV9tbV9pbml0aWFsaXplZChj b25zdCBzdHJ1Y3QgZHJtX21tICptbSkKPiA+ICAgKi8KPiA+ICBzdGF0aWMgaW5saW5lIGJvb2wg ZHJtX21tX2hvbGVfZm9sbG93cyhjb25zdCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUpCj4gPiAg ewo+ID4gLQlyZXR1cm4gbm9kZS0+aG9sZV9mb2xsb3dzOwo+ID4gKwlyZXR1cm4gbm9kZS0+aG9s ZV9zaXplOwo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgaW5saW5lIHU2NCBfX2RybV9tbV9ob2xl X25vZGVfc3RhcnQoY29uc3Qgc3RydWN0IGRybV9tbV9ub2RlICpob2xlX25vZGUpCj4gPiBAQCAt MjUxLDE0ICsyNDgsNiBAQCBzdGF0aWMgaW5saW5lIHU2NCBkcm1fbW1faG9sZV9ub2RlX2VuZChj b25zdCBzdHJ1Y3QgZHJtX21tX25vZGUgKmhvbGVfbm9kZSkKPiA+ICAjZGVmaW5lIGRybV9tbV9m b3JfZWFjaF9ub2RlX3NhZmUoZW50cnksIG5leHQsIG1tKSBcCj4gPiAgCWxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgZHJtX21tX25vZGVzKG1tKSwgbm9kZV9saXN0KQo+ID4g IAo+ID4gLSNkZWZpbmUgX19kcm1fbW1fZm9yX2VhY2hfaG9sZShlbnRyeSwgbW0sIGhvbGVfc3Rh cnQsIGhvbGVfZW5kLCBiYWNrd2FyZHMpIFwKPiA+IC0JZm9yIChlbnRyeSA9IGxpc3RfZW50cnko KGJhY2t3YXJkcykgPyAobW0pLT5ob2xlX3N0YWNrLnByZXYgOiAobW0pLT5ob2xlX3N0YWNrLm5l eHQsIHN0cnVjdCBkcm1fbW1fbm9kZSwgaG9sZV9zdGFjayk7IFwKPiA+IC0JICAgICAmZW50cnkt PmhvbGVfc3RhY2sgIT0gJihtbSktPmhvbGVfc3RhY2sgPyBcCj4gPiAtCSAgICAgaG9sZV9zdGFy dCA9IGRybV9tbV9ob2xlX25vZGVfc3RhcnQoZW50cnkpLCBcCj4gPiAtCSAgICAgaG9sZV9lbmQg PSBkcm1fbW1faG9sZV9ub2RlX2VuZChlbnRyeSksIFwKPiA+IC0JICAgICAxIDogMDsgXAo+ID4g LQkgICAgIGVudHJ5ID0gbGlzdF9lbnRyeSgoYmFja3dhcmRzKSA/IGVudHJ5LT5ob2xlX3N0YWNr LnByZXYgOiBlbnRyeS0+aG9sZV9zdGFjay5uZXh0LCBzdHJ1Y3QgZHJtX21tX25vZGUsIGhvbGVf c3RhY2spKQo+ID4gLQo+ID4gIC8qKgo+ID4gICAqIGRybV9tbV9mb3JfZWFjaF9ob2xlIC0gaXRl cmF0b3IgdG8gd2FsayBvdmVyIGFsbCBob2xlcwo+ID4gICAqIEBlbnRyeTogZHJtX21tX25vZGUg dXNlZCBpbnRlcm5hbGx5IHRvIHRyYWNrIHByb2dyZXNzCj4gPiBAQCAtMjc0LDU3ICsyNjMsMjcg QEAgc3RhdGljIGlubGluZSB1NjQgZHJtX21tX2hvbGVfbm9kZV9lbmQoY29uc3Qgc3RydWN0IGRy bV9tbV9ub2RlICpob2xlX25vZGUpCj4gPiAgICogSW1wbGVtZW50YXRpb24gTm90ZToKPiA+ICAg KiBXZSBuZWVkIHRvIGlubGluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5IGluIG9yZGVyIHRvIGJlIGFi bGUgdG8gc2V0IGhvbGVfc3RhcnQKPiA+ICAgKiBhbmQgaG9sZV9lbmQgb24gZWFjaCBpdGVyYXRp b24gd2hpbGUga2VlcGluZyB0aGUgbWFjcm8gc2FuZS4KPiA+IC0gKgo+ID4gLSAqIFRoZSBfX2Ry bV9tbV9mb3JfZWFjaF9ob2xlIHZlcnNpb24gaXMgc2ltaWxhciwgYnV0IHdpdGggYWRkZWQgc3Vw cG9ydCBmb3IKPiA+IC0gKiBnb2luZyBiYWNrd2FyZHMuCj4gPiAgICovCj4gPiAtI2RlZmluZSBk cm1fbW1fZm9yX2VhY2hfaG9sZShlbnRyeSwgbW0sIGhvbGVfc3RhcnQsIGhvbGVfZW5kKSBcCj4g PiAtCV9fZHJtX21tX2Zvcl9lYWNoX2hvbGUoZW50cnksIG1tLCBob2xlX3N0YXJ0LCBob2xlX2Vu ZCwgMCkKPiA+ICsjZGVmaW5lIGRybV9tbV9mb3JfZWFjaF9ob2xlKHBvcywgbW0sIGhvbGVfc3Rh cnQsIGhvbGVfZW5kKSBcCj4gPiArCWZvciAocG9zID0gbGlzdF9maXJzdF9lbnRyeSgmKG1tKS0+ aG9sZV9zdGFjaywgXAo+ID4gKwkJCQkgICAgdHlwZW9mKCpwb3MpLCBob2xlX3N0YWNrKTsgXAo+ ID4gKwkgICAgICZwb3MtPmhvbGVfc3RhY2sgIT0gJihtbSktPmhvbGVfc3RhY2sgPyBcCj4gPiAr CSAgICAgaG9sZV9zdGFydCA9IGRybV9tbV9ob2xlX25vZGVfc3RhcnQocG9zKSwgXAo+ID4gKwkg ICAgIGhvbGVfZW5kID0gaG9sZV9zdGFydCArIHBvcy0+aG9sZV9zaXplIDogMDsgXAo+ID4gKwkg ICAgIHBvcyA9IGxpc3RfbmV4dF9lbnRyeShwb3MsIGhvbGVfc3RhY2spKQo+ID4gIAo+ID4gIC8q Cj4gPiAgICogQmFzaWMgcmFuZ2UgbWFuYWdlciBzdXBwb3J0IChkcm1fbW0uYykKPiA+ICAgKi8K PiA+ICBpbnQgZHJtX21tX3Jlc2VydmVfbm9kZShzdHJ1Y3QgZHJtX21tICptbSwgc3RydWN0IGRy bV9tbV9ub2RlICpub2RlKTsKPiA+IC1pbnQgZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dl bmVyaWMoc3RydWN0IGRybV9tbSAqbW0sCj4gPiAtCQkJCQlzdHJ1Y3QgZHJtX21tX25vZGUgKm5v ZGUsCj4gPiAtCQkJCQl1NjQgc2l6ZSwKPiA+IC0JCQkJCXU2NCBhbGlnbm1lbnQsCj4gPiAtCQkJ CQl1bnNpZ25lZCBsb25nIGNvbG9yLAo+ID4gLQkJCQkJdTY0IHN0YXJ0LAo+ID4gLQkJCQkJdTY0 IGVuZCwKPiA+IC0JCQkJCWVudW0gZHJtX21tX3NlYXJjaF9mbGFncyBzZmxhZ3MsCj4gPiAtCQkJ CQllbnVtIGRybV9tbV9hbGxvY2F0b3JfZmxhZ3MgYWZsYWdzKTsKPiA+IC0KPiA+IC0vKioKPiA+ IC0gKiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UgLSByYW5nZWQgc2VhcmNoIGZvciBzcGFj ZSBhbmQgaW5zZXJ0IEBub2RlCj4gPiAtICogQG1tOiBkcm1fbW0gdG8gYWxsb2NhdGUgZnJvbQo+ ID4gLSAqIEBub2RlOiBwcmVhbGxvY2F0ZSBub2RlIHRvIGluc2VydAo+ID4gLSAqIEBzaXplOiBz aXplIG9mIHRoZSBhbGxvY2F0aW9uCj4gPiAtICogQGFsaWdubWVudDogYWxpZ25tZW50IG9mIHRo ZSBhbGxvY2F0aW9uCj4gPiAtICogQHN0YXJ0OiBzdGFydCBvZiB0aGUgYWxsb3dlZCByYW5nZSBm b3IgdGhpcyBub2RlCj4gPiAtICogQGVuZDogZW5kIG9mIHRoZSBhbGxvd2VkIHJhbmdlIGZvciB0 aGlzIG5vZGUKPiA+IC0gKiBAZmxhZ3M6IGZsYWdzIHRvIGZpbmUtdHVuZSB0aGUgYWxsb2NhdGlv bgo+ID4gLSAqCj4gPiAtICogVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBkcm1fbW1f aW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYygpIHdpdGgKPiA+IC0gKiBAY29sb3Igc2V0IHRv IDAuCj4gPiAtICoKPiA+IC0gKiBUaGUgcHJlYWxsb2NhdGVkIG5vZGUgbXVzdCBiZSBjbGVhcmVk IHRvIDAuCj4gPiAtICoKPiA+IC0gKiBSZXR1cm5zOgo+ID4gLSAqIDAgb24gc3VjY2VzcywgLUVO T1NQQyBpZiB0aGVyZSdzIG5vIHN1aXRhYmxlIGhvbGUuCj4gPiAtICovCj4gPiAtc3RhdGljIGlu bGluZSBpbnQgZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKHN0cnVjdCBkcm1fbW0gKm1tLAo+ ID4gLQkJCQkJICAgICAgc3RydWN0IGRybV9tbV9ub2RlICpub2RlLAo+ID4gLQkJCQkJICAgICAg dTY0IHNpemUsCj4gPiAtCQkJCQkgICAgICB1NjQgYWxpZ25tZW50LAo+ID4gLQkJCQkJICAgICAg dTY0IHN0YXJ0LAo+ID4gLQkJCQkJICAgICAgdTY0IGVuZCwKPiA+IC0JCQkJCSAgICAgIGVudW0g ZHJtX21tX3NlYXJjaF9mbGFncyBmbGFncykKPiA+IC17Cj4gPiAtCXJldHVybiBkcm1fbW1faW5z ZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYyhtbSwgbm9kZSwgc2l6ZSwgYWxpZ25tZW50LAo+ID4g LQkJCQkJCSAgIDAsIHN0YXJ0LCBlbmQsIGZsYWdzLAo+ID4gLQkJCQkJCSAgIERSTV9NTV9DUkVB VEVfREVGQVVMVCk7Cj4gPiAtfQo+ID4gK2ludCBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2Uo c3RydWN0IGRybV9tbSAqbW0sCj4gPiArCQkJCXN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKPiA+ ICsJCQkJdTY0IHNpemUsCj4gPiArCQkJCXU2NCBhbGlnbm1lbnQsCj4gPiArCQkJCXVuc2lnbmVk IGxvbmcgY29sb3IsCj4gPiArCQkJCXU2NCBzdGFydCwKPiA+ICsJCQkJdTY0IGVuZCwKPiA+ICsJ CQkJZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZSk7Cj4gPiAgCj4gPiAgLyoqCj4gPiAgICog ZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMgLSBzZWFyY2ggZm9yIHNwYWNlIGFuZCBpbnNlcnQg QG5vZGUKPiA+IEBAIC0zMzMsOCArMjkyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgZHJtX21tX2lu c2VydF9ub2RlX2luX3JhbmdlKHN0cnVjdCBkcm1fbW0gKm1tLAo+ID4gICAqIEBzaXplOiBzaXpl IG9mIHRoZSBhbGxvY2F0aW9uCj4gPiAgICogQGFsaWdubWVudDogYWxpZ25tZW50IG9mIHRoZSBh bGxvY2F0aW9uCj4gPiAgICogQGNvbG9yOiBvcGFxdWUgdGFnIHZhbHVlIHRvIHVzZSBmb3IgdGhp cyBub2RlCj4gPiAtICogQHNmbGFnczogZmxhZ3MgdG8gZmluZS10dW5lIHRoZSBhbGxvY2F0aW9u IHNlYXJjaAo+ID4gLSAqIEBhZmxhZ3M6IGZsYWdzIHRvIGZpbmUtdHVuZSB0aGUgYWxsb2NhdGlv biBiZWhhdmlvcgo+ID4gKyAqIEBtb2RlOiBmaW5lLXR1bmUgdGhlIGFsbG9jYXRpb24gc2VhcmNo IGFuZCBwbGFjZW1lbnQKPiA+ICAgKgo+ID4gICAqIFRoZSBwcmVhbGxvY2F0ZWQgbm9kZSBtdXN0 IGJlIGNsZWFyZWQgdG8gMC4KPiA+ICAgKgo+ID4gQEAgLTM0NSwxMyArMzAzLDExIEBAIHN0YXRp YyBpbmxpbmUgaW50Cj4gPiAgZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMoc3RydWN0IGRybV9t bSAqbW0sIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKPiA+ICAJCQkgICB1NjQgc2l6ZSwgdTY0 IGFsaWdubWVudCwKPiA+ICAJCQkgICB1bnNpZ25lZCBsb25nIGNvbG9yLAo+ID4gLQkJCSAgIGVu dW0gZHJtX21tX3NlYXJjaF9mbGFncyBzZmxhZ3MsCj4gPiAtCQkJICAgZW51bSBkcm1fbW1fYWxs b2NhdG9yX2ZsYWdzIGFmbGFncykKPiA+ICsJCQkgICBlbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBt b2RlKQo+ID4gIHsKPiA+IC0JcmV0dXJuIGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5l cmljKG1tLCBub2RlLAo+ID4gLQkJCQkJCSAgIHNpemUsIGFsaWdubWVudCwgMCwKPiA+IC0JCQkJ CQkgICAwLCBVNjRfTUFYLAo+ID4gLQkJCQkJCSAgIHNmbGFncywgYWZsYWdzKTsKPiA+ICsJcmV0 dXJuIGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZShtbSwgbm9kZSwKPiA+ICsJCQkJCSAgIHNp emUsIGFsaWdubWVudCwgY29sb3IsCj4gPiArCQkJCQkgICAwLCBVNjRfTUFYLCBtb2RlKTsKPiA+ ICB9Cj4gPiAgCj4gPiAgLyoqCj4gPiBAQCAtMzU5LDggKzMxNSw2IEBAIGRybV9tbV9pbnNlcnRf bm9kZV9nZW5lcmljKHN0cnVjdCBkcm1fbW0gKm1tLCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUs Cj4gPiAgICogQG1tOiBkcm1fbW0gdG8gYWxsb2NhdGUgZnJvbQo+ID4gICAqIEBub2RlOiBwcmVh bGxvY2F0ZSBub2RlIHRvIGluc2VydAo+ID4gICAqIEBzaXplOiBzaXplIG9mIHRoZSBhbGxvY2F0 aW9uCj4gPiAtICogQGFsaWdubWVudDogYWxpZ25tZW50IG9mIHRoZSBhbGxvY2F0aW9uCj4gPiAt ICogQGZsYWdzOiBmbGFncyB0byBmaW5lLXR1bmUgdGhlIGFsbG9jYXRpb24KPiA+ICAgKgo+ID4g ICAqIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgZHJtX21tX2luc2VydF9ub2RlX2dl bmVyaWMoKSB3aXRoIEBjb2xvciBzZXQKPiA+ICAgKiB0byAwLgo+ID4gQEAgLTM3MiwxMyArMzI2 LDkgQEAgZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMoc3RydWN0IGRybV9tbSAqbW0sIHN0cnVj dCBkcm1fbW1fbm9kZSAqbm9kZSwKPiA+ICAgKi8KPiA+ICBzdGF0aWMgaW5saW5lIGludCBkcm1f bW1faW5zZXJ0X25vZGUoc3RydWN0IGRybV9tbSAqbW0sCj4gPiAgCQkJCSAgICAgc3RydWN0IGRy bV9tbV9ub2RlICpub2RlLAo+ID4gLQkJCQkgICAgIHU2NCBzaXplLAo+ID4gLQkJCQkgICAgIHU2 NCBhbGlnbm1lbnQsCj4gPiAtCQkJCSAgICAgZW51bSBkcm1fbW1fc2VhcmNoX2ZsYWdzIGZsYWdz KQo+ID4gKwkJCQkgICAgIHU2NCBzaXplKQo+ID4gIHsKPiA+IC0JcmV0dXJuIGRybV9tbV9pbnNl cnRfbm9kZV9nZW5lcmljKG1tLCBub2RlLAo+ID4gLQkJCQkJICBzaXplLCBhbGlnbm1lbnQsIDAs Cj4gPiAtCQkJCQkgIGZsYWdzLCBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQpOwo+ID4gKwlyZXR1cm4g ZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMobW0sIG5vZGUsIHNpemUsIDAsIDAsIDApOwo+ID4g IH0KPiA+ICAKPiA+ICB2b2lkIGRybV9tbV9yZW1vdmVfbm9kZShzdHJ1Y3QgZHJtX21tX25vZGUg Km5vZGUpOwo+ID4gQEAgLTQyNSw3ICszNzUsNyBAQCB2b2lkIGRybV9tbV9zY2FuX2luaXRfd2l0 aF9yYW5nZShzdHJ1Y3QgZHJtX21tX3NjYW4gKnNjYW4sCj4gPiAgCQkJCSBzdHJ1Y3QgZHJtX21t ICptbSwKPiA+ICAJCQkJIHU2NCBzaXplLCB1NjQgYWxpZ25tZW50LCB1bnNpZ25lZCBsb25nIGNv bG9yLAo+ID4gIAkJCQkgdTY0IHN0YXJ0LCB1NjQgZW5kLAo+ID4gLQkJCQkgdW5zaWduZWQgaW50 IGZsYWdzKTsKPiA+ICsJCQkJIGVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGUpOwo+ID4gIAo+ ID4gIC8qKgo+ID4gICAqIGRybV9tbV9zY2FuX2luaXQgLSBpbml0aWFsaXplIGxydSBzY2Fubmlu Zwo+ID4gQEAgLTQzNCw3ICszODQsNyBAQCB2b2lkIGRybV9tbV9zY2FuX2luaXRfd2l0aF9yYW5n ZShzdHJ1Y3QgZHJtX21tX3NjYW4gKnNjYW4sCj4gPiAgICogQHNpemU6IHNpemUgb2YgdGhlIGFs bG9jYXRpb24KPiA+ICAgKiBAYWxpZ25tZW50OiBhbGlnbm1lbnQgb2YgdGhlIGFsbG9jYXRpb24K PiA+ICAgKiBAY29sb3I6IG9wYXF1ZSB0YWcgdmFsdWUgdG8gdXNlIGZvciB0aGUgYWxsb2NhdGlv bgo+ID4gLSAqIEBmbGFnczogZmxhZ3MgdG8gc3BlY2lmeSBob3cgdGhlIGFsbG9jYXRpb24gd2ls bCBiZSBwZXJmb3JtZWQgYWZ0ZXJ3YXJkcwo+ID4gKyAqIEBtb2RlOiBmaW5lLXR1bmUgdGhlIGFs bG9jYXRpb24gc2VhcmNoIGFuZCBwbGFjZW1lbnQKPiA+ICAgKgo+ID4gICAqIFRoaXMgc2ltcGx5 IHNldHMgdXAgdGhlIHNjYW5uaW5nIHJvdXRpbmVzIHdpdGggdGhlIHBhcmFtZXRlcnMgZm9yIHRo ZSBkZXNpcmVkCj4gPiAgICogaG9sZS4KPiA+IEBAIC00NDgsMTIgKzM5OCwxMSBAQCBzdGF0aWMg aW5saW5lIHZvaWQgZHJtX21tX3NjYW5faW5pdChzdHJ1Y3QgZHJtX21tX3NjYW4gKnNjYW4sCj4g PiAgCQkJCSAgICB1NjQgc2l6ZSwKPiA+ICAJCQkJICAgIHU2NCBhbGlnbm1lbnQsCj4gPiAgCQkJ CSAgICB1bnNpZ25lZCBsb25nIGNvbG9yLAo+ID4gLQkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdz KQo+ID4gKwkJCQkgICAgZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZSkKPiA+ICB7Cj4gPiAg CWRybV9tbV9zY2FuX2luaXRfd2l0aF9yYW5nZShzY2FuLCBtbSwKPiA+ICAJCQkJICAgIHNpemUs IGFsaWdubWVudCwgY29sb3IsCj4gPiAtCQkJCSAgICAwLCBVNjRfTUFYLAo+ID4gLQkJCQkgICAg ZmxhZ3MpOwo+ID4gKwkJCQkgICAgMCwgVTY0X01BWCwgbW9kZSk7Cj4gPiAgfQo+ID4gIAo+ID4g IGJvb2wgZHJtX21tX3NjYW5fYWRkX2Jsb2NrKHN0cnVjdCBkcm1fbW1fc2NhbiAqc2NhbiwKPiA+ IC0tIAo+ID4gMi4xMS4wCj4gPiAKPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gPiBJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo+IAo+IC0tIAo+IERhbmllbCBWZXR0ZXIKPiBTb2Z0 d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiBodHRwOi8vYmxvZy5mZndsbC5jaAoK LS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0 dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=