From mboxrd@z Thu Jan 1 00:00:00 1970 From: Elena Ufimtseva Subject: Re: [PATCH v6 03/14] xen: Use a typesafe to define INVALID_MFN Date: Fri, 8 Jul 2016 15:01:36 -0700 Message-ID: <20160708220136.GA12597@localhost.localdomain> References: <1467810073-27971-1-git-send-email-julien.grall@arm.com> <1467810073-27971-4-git-send-email-julien.grall@arm.com> <577D01D1.2080000@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <577D01D1.2080000@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Julien Grall Cc: Kevin Tian , sstabellini@kernel.org, Jun Nakajima , George Dunlap , Liu Jinsong , Christoph Egger , Tim Deegan , xen-devel@lists.xen.org, Paul Durrant , Jan Beulich , Andrew Cooper List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBKdWwgMDYsIDIwMTYgYXQgMDI6MDQ6MTdQTSArMDEwMCwgSnVsaWVuIEdyYWxsIHdy b3RlOgo+IChDQyBFbGVuYSkuCj4gCj4gT24gMDYvMDcvMTYgMTQ6MDEsIEp1bGllbiBHcmFsbCB3 cm90ZToKPiA+QWxzbyB0YWtlIHRoZSBvcHBvcnR1bml0eSB0byBjb252ZXJ0IGFyY2gveDg2L2Rl YnVnLmMgdG8gdGhlIHR5cGVzYWZlCj4gPm1mbiBhbmQgdXNlIHByb3BlciBwcmludGYgZm9ybWF0 IGZvciBNRk4vR0ZOIHdoZW4gdGhlIGNvZGUgYXJvdW5kIGlzCj4gPm1vZGlmaWVkLgo+ID4KPiA+ U2lnbmVkLW9mZi1ieTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KPiA+UmV2 aWV3ZWQtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Cj4gPkFj a2VkLWJ5OiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+Cj4gPgo+ ID4tLS0KPiA+Q2M6IENocmlzdG9waCBFZ2dlciA8Y2hlZ2dlckBhbWF6b24uZGU+Cj4gPkNjOiBM aXUgSmluc29uZyA8amluc29uZy5saXVAYWxpYmFiYS1pbmMuY29tPgo+ID5DYzogSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPgo+ID5DYzogTXVrZXNoIFJhdGhvciA8bXVrZXNoLnJhdGhv ckBvcmFjbGUuY29tPgo+IAo+IEkgZm9yZ290IHRvIHVwZGF0ZSB0aGUgQ0MgbGlzdCBzaW5jZSBH RFNYIG1haW50YWluZXJzaGlwIHdhcyB0YWtlIG92ZXIgYnkKPiBFbGVuYS4gU29ycnkgZm9yIHRo YXQuCgpObyBwcm9ibGVtIQo+IAo+ID5DYzogUGF1bCBEdXJyYW50IDxwYXVsLmR1cnJhbnRAY2l0 cml4LmNvbT4KPiA+Q2M6IEp1biBOYWthamltYSA8anVuLm5ha2FqaW1hQGludGVsLmNvbT4KPiA+ Q2M6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgo+ID5DYzogR2VvcmdlIER1bmxh cCA8Z2VvcmdlLmR1bmxhcEBldS5jaXRyaXguY29tPgo+ID5DYzogVGltIERlZWdhbiA8dGltQHhl bi5vcmc+Cj4gPgo+ID4gICAgIENoYW5nZXMgaW4gdjY6Cj4gPiAgICAgICAgIC0gQWRkIFN0ZWZh bm8ncyBhY2tlZC1ieSBmb3IgQVJNIGJpdHMKPiA+ICAgICAgICAgLSBVc2UgUFJJX21mbiBhbmQg UFJJX2dmbgo+ID4gICAgICAgICAtIFJlbW92ZSBzZXQgb2YgYnJhY2tldHMgd2hlbiBpdCBpcyBu b3QgbmVjZXNzYXJ5Cj4gPiAgICAgICAgIC0gVXNlIG1mbl9hZGQgd2hlbiBwb3NzaWJsZQo+ID4g ICAgICAgICAtIEFkZCBBbmRyZXcncyByZXZpZXdlZC1ieQo+ID4KPiA+ICAgICBDaGFuZ2VzIGlu IHY1Ogo+ID4gICAgICAgICAtIFBhdGNoIGFkZGVkCj4gPi0tLQo+ID4gIHhlbi9hcmNoL2FybS9w Mm0uYyAgICAgICAgICAgICAgfCAgNCArLS0KPiA+ICB4ZW4vYXJjaC94ODYvY3B1L21jaGVjay9t Y2UuYyAgIHwgIDIgKy0KPiA+ICB4ZW4vYXJjaC94ODYvZGVidWcuYyAgICAgICAgICAgIHwgNTgg KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICB4ZW4vYXJjaC94 ODYvaHZtL2h2bS5jICAgICAgICAgIHwgIDYgKystLS0KPiA+ICB4ZW4vYXJjaC94ODYvaHZtL3Zp cmlkaWFuLmMgICAgIHwgMTIgKysrKy0tLS0tCj4gPiAgeGVuL2FyY2gveDg2L2h2bS92bXgvdm14 LmMgICAgICB8ICAyICstCj4gPiAgeGVuL2FyY2gveDg2L21tL2d1ZXN0X3dhbGsuYyAgICB8ICA0 ICstLQo+ID4gIHhlbi9hcmNoL3g4Ni9tbS9oYXAvaGFwLmMgICAgICAgfCAgNCArLS0KPiA+ICB4 ZW4vYXJjaC94ODYvbW0vcDJtLWVwdC5jICAgICAgIHwgIDYgKystLS0KPiA+ICB4ZW4vYXJjaC94 ODYvbW0vcDJtLXBvZC5jICAgICAgIHwgMTggKysrKysrLS0tLS0tLQo+ID4gIHhlbi9hcmNoL3g4 Ni9tbS9wMm0tcHQuYyAgICAgICAgfCAxOCArKysrKystLS0tLS0tCj4gPiAgeGVuL2FyY2gveDg2 L21tL3AybS5jICAgICAgICAgICB8IDU0ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t LS0tLS0tCj4gPiAgeGVuL2FyY2gveDg2L21tL3BhZ2luZy5jICAgICAgICB8IDEyICsrKystLS0t LQo+ID4gIHhlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvY29tbW9uLmMgfCA0MyArKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0KPiA+ICB4ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRpLmMgIHwg MzYgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQo+ID4gIHhlbi9jb21tb24vZG9tYWluLmMgICAg ICAgICAgICAgfCAgNiArKy0tLQo+ID4gIHhlbi9jb21tb24vZ3JhbnRfdGFibGUuYyAgICAgICAg fCAgNiArKy0tLQo+ID4gIHhlbi9pbmNsdWRlL3hlbi9tbS5oICAgICAgICAgICAgfCAgMiArLQo+ ID4gIDE4IGZpbGVzIGNoYW5nZWQsIDE0NyBpbnNlcnRpb25zKCspLCAxNDYgZGVsZXRpb25zKC0p Cj4gPgo+ID5kaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3AybS5jIGIveGVuL2FyY2gvYXJtL3Ay bS5jCj4gPmluZGV4IDM0NTYzYmIuLmQ2OTA2MDIgMTAwNjQ0Cj4gPi0tLSBhL3hlbi9hcmNoL2Fy bS9wMm0uYwo+ID4rKysgYi94ZW4vYXJjaC9hcm0vcDJtLmMKPiA+QEAgLTE0NjEsNyArMTQ2MSw3 IEBAIGludCByZWxpbnF1aXNoX3AybV9tYXBwaW5nKHN0cnVjdCBkb21haW4gKmQpCj4gPiAgICAg IHJldHVybiBhcHBseV9wMm1fY2hhbmdlcyhkLCBSRUxJTlFVSVNILAo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBmbl90b19wYWRkcihwMm0tPmxvd2VzdF9tYXBwZWRfZ2ZuKSwK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZm5fdG9fcGFkZHIocDJtLT5tYXhf bWFwcGVkX2dmbiksCj4gPi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZm5fdG9fcGFk ZHIoSU5WQUxJRF9NRk4pLAo+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGZuX3Rv X3BhZGRyKG1mbl94KElOVkFMSURfTUZOKSksCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTUFUVFJfTUVNLCAwLCBwMm1faW52YWxpZCwKPiA+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkLT5hcmNoLnAybS5kZWZhdWx0X2FjY2Vzcyk7Cj4gPiAgfQo+ID5AQCAtMTQ3 Niw3ICsxNDc2LDcgQEAgaW50IHAybV9jYWNoZV9mbHVzaChzdHJ1Y3QgZG9tYWluICpkLCB4ZW5f cGZuX3Qgc3RhcnRfbWZuLCB4ZW5fcGZuX3QgZW5kX21mbikKPiA+ICAgICAgcmV0dXJuIGFwcGx5 X3AybV9jaGFuZ2VzKGQsIENBQ0hFRkxVU0gsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZm5fdG9fcGFkZHIoc3RhcnRfbWZuKSwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBmbl90b19wYWRkcihlbmRfbWZuKSwKPiA+LSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGZuX3RvX3BhZGRyKElOVkFMSURfTUZOKSwKPiA+KyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGZuX3RvX3BhZGRyKG1mbl94KElOVkFMSURfTUZOKSksCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNQVRUUl9NRU0sIDAsIHAybV9pbnZhbGlkLAo+ID4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZC0+YXJjaC5wMm0uZGVmYXVsdF9hY2Nlc3MpOwo+ID4g IH0KPiA+ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9jcHUvbWNoZWNrL21jZS5jIGIveGVuL2Fy Y2gveDg2L2NwdS9tY2hlY2svbWNlLmMKPiA+aW5kZXggZWRjYmU0OC4uMjY5NWIwYyAxMDA2NDQK PiA+LS0tIGEveGVuL2FyY2gveDg2L2NwdS9tY2hlY2svbWNlLmMKPiA+KysrIGIveGVuL2FyY2gv eDg2L2NwdS9tY2hlY2svbWNlLmMKPiA+QEAgLTE0NTUsNyArMTQ1NSw3IEBAIGxvbmcgZG9fbWNh KFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX21jX3QpIHVfeGVuX21jKQo+ID4gICAgICAgICAg ICAgICAgICBnZm4gPSBQRk5fRE9XTihnYWRkcik7Cj4gPiAgICAgICAgICAgICAgICAgIG1mbiA9 IG1mbl94KGdldF9nZm4oZCwgZ2ZuLCAmdCkpOwo+ID4KPiA+LSAgICAgICAgICAgICAgICBpZiAo IG1mbiA9PSBJTlZBTElEX01GTiApCj4gPisgICAgICAgICAgICAgICAgaWYgKCBtZm4gPT0gbWZu X3goSU5WQUxJRF9NRk4pICkKPiA+ICAgICAgICAgICAgICAgICAgewo+ID4gICAgICAgICAgICAg ICAgICAgICAgcHV0X2dmbihkLCBnZm4pOwo+ID4gICAgICAgICAgICAgICAgICAgICAgcHV0X2Rv bWFpbihkKTsKPiA+ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9kZWJ1Zy5jIGIveGVuL2FyY2gv eDg2L2RlYnVnLmMKPiA+aW5kZXggNThjYWUyMi4uOTIxM2VhNyAxMDA2NDQKPiA+LS0tIGEveGVu L2FyY2gveDg2L2RlYnVnLmMKPiA+KysrIGIveGVuL2FyY2gveDg2L2RlYnVnLmMKPiA+QEAgLTQz LDExICs0MywxMSBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZGJndmFfdDsKPiA+ICB0eXBlZGVm IHVuc2lnbmVkIGNoYXIgZGJnYnl0ZV90Owo+ID4KPiA+ICAvKiBSZXR1cm5zOiBtZm4gZm9yIHRo ZSBnaXZlbiAoaHZtIGd1ZXN0KSB2YWRkciAqLwo+ID4tc3RhdGljIHVuc2lnbmVkIGxvbmcKPiA+ K3N0YXRpYyBtZm5fdAo+ID4gIGRiZ19odm1fdmEybWZuKGRiZ3ZhX3QgdmFkZHIsIHN0cnVjdCBk b21haW4gKmRwLCBpbnQgdG9hZGRyLAo+ID4gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n ICpnZm4pCj4gPiAgewo+ID4tICAgIHVuc2lnbmVkIGxvbmcgbWZuOwo+ID4rICAgIG1mbl90IG1m bjsKPiA+ICAgICAgdWludDMyX3QgcGZlYyA9IFBGRUNfcGFnZV9wcmVzZW50Owo+ID4gICAgICBw Mm1fdHlwZV90IGdmbnR5cGU7Cj4gPgo+ID5AQCAtNjAsMTYgKzYwLDE3IEBAIGRiZ19odm1fdmEy bWZuKGRiZ3ZhX3QgdmFkZHIsIHN0cnVjdCBkb21haW4gKmRwLCBpbnQgdG9hZGRyLAo+ID4gICAg ICAgICAgcmV0dXJuIElOVkFMSURfTUZOOwo+ID4gICAgICB9Cj4gPgo+ID4tICAgIG1mbiA9IG1m bl94KGdldF9nZm4oZHAsICpnZm4sICZnZm50eXBlKSk7Cj4gPisgICAgbWZuID0gZ2V0X2dmbihk cCwgKmdmbiwgJmdmbnR5cGUpOwo+ID4gICAgICBpZiAoIHAybV9pc19yZWFkb25seShnZm50eXBl KSAmJiB0b2FkZHIgKQo+ID4gICAgICB7Cj4gPiAgICAgICAgICBEQkdQMigia2RiOnAybV9pc19y ZWFkb25seTogZ2ZudHlwZToleFxuIiwgZ2ZudHlwZSk7Cj4gPiAgICAgICAgICBtZm4gPSBJTlZB TElEX01GTjsKPiA+ICAgICAgfQo+ID4gICAgICBlbHNlCj4gPi0gICAgICAgIERCR1AyKCJYOiB2 YWRkcjolbHggZG9taWQ6JWQgbWZuOiVseFxuIiwgdmFkZHIsIGRwLT5kb21haW5faWQsIG1mbik7 Cj4gPisgICAgICAgIERCR1AyKCJYOiB2YWRkcjolbHggZG9taWQ6JWQgbWZuOiUjIlBSSV9tZm4i XG4iLAo+ID4rICAgICAgICAgICAgICB2YWRkciwgZHAtPmRvbWFpbl9pZCwgbWZuX3gobWZuKSk7 Cj4gPgo+ID4tICAgIGlmICggbWZuID09IElOVkFMSURfTUZOICkKPiA+KyAgICBpZiAoIG1mbl9l cShtZm4sIElOVkFMSURfTUZOKSApCj4gPiAgICAgIHsKPiA+ICAgICAgICAgIHB1dF9nZm4oZHAs ICpnZm4pOwo+ID4gICAgICAgICAgKmdmbiA9IElOVkFMSURfR0ZOOwo+ID5AQCAtOTEsNyArOTIs NyBAQCBkYmdfaHZtX3ZhMm1mbihkYmd2YV90IHZhZGRyLCBzdHJ1Y3QgZG9tYWluICpkcCwgaW50 IHRvYWRkciwKPiA+ICAgKiAgICAgICBtb2RlLgo+ID4gICAqIFJldHVybnM6IG1mbiBmb3IgdGhl IGdpdmVuIChwdiBndWVzdCkgdmFkZHIKPiA+ICAgKi8KPiA+LXN0YXRpYyB1bnNpZ25lZCBsb25n Cj4gPitzdGF0aWMgbWZuX3QKPiA+ICBkYmdfcHZfdmEybWZuKGRiZ3ZhX3QgdmFkZHIsIHN0cnVj dCBkb21haW4gKmRwLCB1aW50NjRfdCBwZ2QzdmFsKQo+ID4gIHsKPiA+ICAgICAgbDRfcGdlbnRy eV90IGw0ZSwgKmw0dDsKPiA+QEAgLTk5LDMxICsxMDAsMzEgQEAgZGJnX3B2X3ZhMm1mbihkYmd2 YV90IHZhZGRyLCBzdHJ1Y3QgZG9tYWluICpkcCwgdWludDY0X3QgcGdkM3ZhbCkKPiA+ICAgICAg bDJfcGdlbnRyeV90IGwyZSwgKmwydDsKPiA+ICAgICAgbDFfcGdlbnRyeV90IGwxZSwgKmwxdDsK PiA+ICAgICAgdW5zaWduZWQgbG9uZyBjcjMgPSAocGdkM3ZhbCA/IHBnZDN2YWwgOiBkcC0+dmNw dVswXS0+YXJjaC5jcjMpOwo+ID4tICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gY3IzID4+IFBBR0Vf U0hJRlQ7Cj4gPisgICAgbWZuX3QgbWZuID0gX21mbihjcjMgPj4gUEFHRV9TSElGVCk7Cj4gPgo+ ID4gICAgICBEQkdQMigidmFkZHI6JWx4IGRvbWlkOiVkIGNyMzolbHggcGdkMzolbHhcbiIsIHZh ZGRyLCBkcC0+ZG9tYWluX2lkLAo+ID4gICAgICAgICAgICBjcjMsIHBnZDN2YWwpOwo+ID4KPiA+ ICAgICAgaWYgKCBwZ2QzdmFsID09IDAgKQo+ID4gICAgICB7Cj4gPi0gICAgICAgIGw0dCA9IG1h cF9kb21haW5fcGFnZShfbWZuKG1mbikpOwo+ID4rICAgICAgICBsNHQgPSBtYXBfZG9tYWluX3Bh Z2UobWZuKTsKPiA+ICAgICAgICAgIGw0ZSA9IGw0dFtsNF90YWJsZV9vZmZzZXQodmFkZHIpXTsK PiA+ICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKGw0dCk7Cj4gPi0gICAgICAgIG1mbiA9IGw0 ZV9nZXRfcGZuKGw0ZSk7Cj4gPi0gICAgICAgIERCR1AyKCJsNHQ6JXAgbDR0bzolbHggbDRlOiVs eCBtZm46JWx4XG4iLCBsNHQsCj4gPi0gICAgICAgICAgICAgIGw0X3RhYmxlX29mZnNldCh2YWRk ciksIGw0ZSwgbWZuKTsKPiA+KyAgICAgICAgbWZuID0gX21mbihsNGVfZ2V0X3BmbihsNGUpKTsK PiA+KyAgICAgICAgREJHUDIoImw0dDolcCBsNHRvOiVseCBsNGU6JWx4IG1mbjolIyJQUklfbWZu IlxuIiwgbDR0LAo+ID4rICAgICAgICAgICAgICBsNF90YWJsZV9vZmZzZXQodmFkZHIpLCBsNGUs IG1mbl94KG1mbikpOwo+ID4gICAgICAgICAgaWYgKCAhKGw0ZV9nZXRfZmxhZ3MobDRlKSAmIF9Q QUdFX1BSRVNFTlQpICkKPiA+ICAgICAgICAgIHsKPiA+ICAgICAgICAgICAgICBEQkdQMSgibDQg UEFHRSBub3QgcHJlc2VudC4gdmFkZHI6JWx4IGNyMzolbHhcbiIsIHZhZGRyLCBjcjMpOwo+ID4g ICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX01GTjsKPiA+ICAgICAgICAgIH0KPiA+Cj4gPi0g ICAgICAgIGwzdCA9IG1hcF9kb21haW5fcGFnZShfbWZuKG1mbikpOwo+ID4rICAgICAgICBsM3Qg PSBtYXBfZG9tYWluX3BhZ2UobWZuKTsKPiA+ICAgICAgICAgIGwzZSA9IGwzdFtsM190YWJsZV9v ZmZzZXQodmFkZHIpXTsKPiA+ICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKGwzdCk7Cj4gPi0g ICAgICAgIG1mbiA9IGwzZV9nZXRfcGZuKGwzZSk7Cj4gPi0gICAgICAgIERCR1AyKCJsM3Q6JXAg bDN0bzolbHggbDNlOiVseCBtZm46JWx4XG4iLCBsM3QsCj4gPi0gICAgICAgICAgICAgIGwzX3Rh YmxlX29mZnNldCh2YWRkciksIGwzZSwgbWZuKTsKPiA+KyAgICAgICAgbWZuID0gX21mbihsM2Vf Z2V0X3BmbihsM2UpKTsKPiA+KyAgICAgICAgREJHUDIoImwzdDolcCBsM3RvOiVseCBsM2U6JWx4 IG1mbjolIyJQUklfbWZuIlxuIiwgbDN0LAo+ID4rICAgICAgICAgICAgICBsM190YWJsZV9vZmZz ZXQodmFkZHIpLCBsM2UsIG1mbl94KG1mbikpOwo+ID4gICAgICAgICAgaWYgKCAhKGwzZV9nZXRf ZmxhZ3MobDNlKSAmIF9QQUdFX1BSRVNFTlQpIHx8Cj4gPiAgICAgICAgICAgICAgIChsM2VfZ2V0 X2ZsYWdzKGwzZSkgJiBfUEFHRV9QU0UpICkKPiA+ICAgICAgICAgIHsKPiA+QEAgLTEzMiwyNiAr MTMzLDI2IEBAIGRiZ19wdl92YTJtZm4oZGJndmFfdCB2YWRkciwgc3RydWN0IGRvbWFpbiAqZHAs IHVpbnQ2NF90IHBnZDN2YWwpCj4gPiAgICAgICAgICB9Cj4gPiAgICAgIH0KPiA+Cj4gPi0gICAg bDJ0ID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7Cj4gPisgICAgbDJ0ID0gbWFwX2RvbWFp bl9wYWdlKG1mbik7Cj4gPiAgICAgIGwyZSA9IGwydFtsMl90YWJsZV9vZmZzZXQodmFkZHIpXTsK PiA+ICAgICAgdW5tYXBfZG9tYWluX3BhZ2UobDJ0KTsKPiA+LSAgICBtZm4gPSBsMmVfZ2V0X3Bm bihsMmUpOwo+ID4tICAgIERCR1AyKCJsMnQ6JXAgbDJ0bzolbHggbDJlOiVseCBtZm46JWx4XG4i LCBsMnQsIGwyX3RhYmxlX29mZnNldCh2YWRkciksCj4gPi0gICAgICAgICAgbDJlLCBtZm4pOwo+ ID4rICAgIG1mbiA9IF9tZm4obDJlX2dldF9wZm4obDJlKSk7Cj4gPisgICAgREJHUDIoImwydDol cCBsMnRvOiVseCBsMmU6JWx4IG1mbjolIyJQUklfbWZuIlxuIiwKPiA+KyAgICAgICAgICBsMnQs IGwyX3RhYmxlX29mZnNldCh2YWRkciksIGwyZSwgbWZuX3gobWZuKSk7Cj4gPiAgICAgIGlmICgg IShsMmVfZ2V0X2ZsYWdzKGwyZSkgJiBfUEFHRV9QUkVTRU5UKSB8fAo+ID4gICAgICAgICAgIChs MmVfZ2V0X2ZsYWdzKGwyZSkgJiBfUEFHRV9QU0UpICkKPiA+ICAgICAgewo+ID4gICAgICAgICAg REJHUDEoImwyIFBBR0Ugbm90IHByZXNlbnQuIHZhZGRyOiVseCBjcjM6JWx4XG4iLCB2YWRkciwg Y3IzKTsKPiA+ICAgICAgICAgIHJldHVybiBJTlZBTElEX01GTjsKPiA+ICAgICAgfQo+ID4tICAg IGwxdCA9IG1hcF9kb21haW5fcGFnZShfbWZuKG1mbikpOwo+ID4rICAgIGwxdCA9IG1hcF9kb21h aW5fcGFnZShtZm4pOwo+ID4gICAgICBsMWUgPSBsMXRbbDFfdGFibGVfb2Zmc2V0KHZhZGRyKV07 Cj4gPiAgICAgIHVubWFwX2RvbWFpbl9wYWdlKGwxdCk7Cj4gPi0gICAgbWZuID0gbDFlX2dldF9w Zm4obDFlKTsKPiA+LSAgICBEQkdQMigibDF0OiVwIGwxdG86JWx4IGwxZTolbHggbWZuOiVseFxu IiwgbDF0LCBsMV90YWJsZV9vZmZzZXQodmFkZHIpLAo+ID4tICAgICAgICAgIGwxZSwgbWZuKTsK PiA+KyAgICBtZm4gPSBfbWZuKGwxZV9nZXRfcGZuKGwxZSkpOwo+ID4rICAgIERCR1AyKCJsMXQ6 JXAgbDF0bzolbHggbDFlOiVseCBtZm46JSMiUFJJX21mbiJcbiIsIGwxdCwgbDFfdGFibGVfb2Zm c2V0KHZhZGRyKSwKPiA+KyAgICAgICAgICBsMWUsIG1mbl94KG1mbikpOwo+ID4KPiA+LSAgICBy ZXR1cm4gbWZuX3ZhbGlkKG1mbikgPyBtZm4gOiBJTlZBTElEX01GTjsKPiA+KyAgICByZXR1cm4g bWZuX3ZhbGlkKG1mbl94KG1mbikpID8gbWZuIDogSU5WQUxJRF9NRk47Cj4gPiAgfQo+ID4KPiA+ ICAvKiBSZXR1cm5zOiBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIGNvcGllZCAqLwo+ ID5AQCAtMTYzLDIzICsxNjQsMjQgQEAgdW5zaWduZWQgaW50IGRiZ19yd19ndWVzdF9tZW0oc3Ry dWN0IGRvbWFpbiAqZHAsIHZvaWQgKiBfX3VzZXIgZ2FkZHIsCj4gPiAgICAgIHsKPiA+ICAgICAg ICAgIGNoYXIgKnZhOwo+ID4gICAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVk IGxvbmcpZ2FkZHI7Cj4gPi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuLCBnZm4gPSBJTlZBTElE X0dGTiwgcGFnZWNudDsKPiA+KyAgICAgICAgbWZuX3QgbWZuOwo+ID4rICAgICAgICB1bnNpZ25l ZCBsb25nIGdmbiA9IElOVkFMSURfR0ZOLCBwYWdlY250Owo+ID4KPiA+ICAgICAgICAgIHBhZ2Vj bnQgPSBtaW5fdChsb25nLCBQQUdFX1NJWkUgLSAoYWRkciAmIH5QQUdFX01BU0spLCBsZW4pOwo+ ID4KPiA+ICAgICAgICAgIG1mbiA9IChoYXNfaHZtX2NvbnRhaW5lcl9kb21haW4oZHApCj4gPiAg ICAgICAgICAgICAgICAgPyBkYmdfaHZtX3ZhMm1mbihhZGRyLCBkcCwgdG9hZGRyLCAmZ2ZuKQo+ ID4gICAgICAgICAgICAgICAgIDogZGJnX3B2X3ZhMm1mbihhZGRyLCBkcCwgcGdkMykpOwo+ID4t ICAgICAgICBpZiAoIG1mbiA9PSBJTlZBTElEX01GTiApCj4gPisgICAgICAgIGlmICggbWZuX2Vx KG1mbiwgSU5WQUxJRF9NRk4pICkKPiA+ICAgICAgICAgICAgICBicmVhazsKPiA+Cj4gPi0gICAg ICAgIHZhID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7Cj4gPisgICAgICAgIHZhID0gbWFw X2RvbWFpbl9wYWdlKG1mbik7Cj4gPiAgICAgICAgICB2YSA9IHZhICsgKGFkZHIgJiAoUEFHRV9T SVpFLTEpKTsKPiA+Cj4gPiAgICAgICAgICBpZiAoIHRvYWRkciApCj4gPiAgICAgICAgICB7Cj4g PiAgICAgICAgICAgICAgY29weV9mcm9tX3VzZXIodmEsIGJ1ZiwgcGFnZWNudCk7ICAgIC8qIHZh ID0gYnVmICovCj4gPi0gICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShkcCwgbWZuKTsKPiA+ KyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KGRwLCBtZm5feChtZm4pKTsKPiA+ICAgICAg ICAgIH0KPiA+ICAgICAgICAgIGVsc2UKPiA+ICAgICAgICAgIHsKPiA+ZGlmZiAtLWdpdCBhL3hl bi9hcmNoL3g4Ni9odm0vaHZtLmMgYi94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCj4gPmluZGV4IGM4 OWFiNmUuLmYzZmFmMmUgMTAwNjQ0Cj4gPi0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKPiA+ KysrIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYwo+ID5AQCAtMTc5Niw3ICsxNzk2LDcgQEAgaW50 IGh2bV9oYXBfbmVzdGVkX3BhZ2VfZmF1bHQocGFkZHJfdCBncGEsIHVuc2lnbmVkIGxvbmcgZ2xh LAo+ID4gICAgICAgICAgcDJtID0gaG9zdHAybTsKPiA+Cj4gPiAgICAgIC8qIENoZWNrIGFjY2Vz cyBwZXJtaXNzaW9ucyBmaXJzdCwgdGhlbiBoYW5kbGUgZmF1bHRzICovCj4gPi0gICAgaWYgKCBt Zm5feChtZm4pICE9IElOVkFMSURfTUZOICkKPiA+KyAgICBpZiAoICFtZm5fZXEobWZuLCBJTlZB TElEX01GTikgKQo+ID4gICAgICB7Cj4gPiAgICAgICAgICBib29sX3QgdmlvbGF0aW9uOwo+ID4K PiA+QEAgLTUyOTksOCArNTI5OSw4IEBAIHN0YXRpYyBpbnQgZG9fYWx0cDJtX29wKAo+ID4gICAg ICAgICAgICAgIHJjID0gLUVJTlZBTDsKPiA+Cj4gPiAgICAgICAgICBpZiAoIChnZm5feCh2Y3B1 X2FsdHAybShjdXJyKS52ZWluZm9fZ2ZuKSAhPSBJTlZBTElEX0dGTikgfHwKPiA+LSAgICAgICAg ICAgICAobWZuX3goZ2V0X2dmbl9xdWVyeV91bmxvY2tlZChjdXJyLT5kb21haW4sCj4gPi0gICAg ICAgICAgICAgICAgICAgIGEudS5lbmFibGVfbm90aWZ5LmdmbiwgJnAybXQpKSA9PSBJTlZBTElE X01GTikgKQo+ID4rICAgICAgICAgICAgIG1mbl9lcShnZXRfZ2ZuX3F1ZXJ5X3VubG9ja2VkKGN1 cnItPmRvbWFpbiwKPiA+KyAgICAgICAgICAgICAgICAgICAgYS51LmVuYWJsZV9ub3RpZnkuZ2Zu LCAmcDJtdCksIElOVkFMSURfTUZOKSApCj4gPiAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 Cj4gPgo+ID4gICAgICAgICAgdmNwdV9hbHRwMm0oY3VycikudmVpbmZvX2dmbiA9IF9nZm4oYS51 LmVuYWJsZV9ub3RpZnkuZ2ZuKTsKPiA+ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vdmly aWRpYW4uYyBiL3hlbi9hcmNoL3g4Ni9odm0vdmlyaWRpYW4uYwo+ID5pbmRleCA4MjUzZmQwLi4x NzM0YjdlIDEwMDY0NAo+ID4tLS0gYS94ZW4vYXJjaC94ODYvaHZtL3ZpcmlkaWFuLmMKPiA+Kysr IGIveGVuL2FyY2gveDg2L2h2bS92aXJpZGlhbi5jCj4gPkBAIC0xOTUsOCArMTk1LDggQEAgc3Rh dGljIHZvaWQgZW5hYmxlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBkb21haW4gKmQpCj4gPiAgICAg IHsKPiA+ICAgICAgICAgIGlmICggcGFnZSApCj4gPiAgICAgICAgICAgICAgcHV0X3BhZ2UocGFn ZSk7Cj4gPi0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEdNRk4gJWx4IChN Rk4gJWx4KVxuIiwgZ21mbiwKPiA+LSAgICAgICAgICAgICAgICAgcGFnZSA/IHBhZ2VfdG9fbWZu KHBhZ2UpIDogSU5WQUxJRF9NRk4pOwo+ID4rICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklO RywgIkJhZCBHTUZOICUjIlBSSV9nZm4iIChNRk4gJSMiUFJJX21mbiIpXG4iLAo+ID4rICAgICAg ICAgICAgICAgICBnbWZuLCBwYWdlID8gcGFnZV90b19tZm4ocGFnZSkgOiBtZm5feChJTlZBTElE X01GTikpOwo+ID4gICAgICAgICAgcmV0dXJuOwo+ID4gICAgICB9Cj4gPgo+ID5AQCAtMjY4LDgg KzI2OCw4IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVfYXBpY19hc3Npc3Qoc3RydWN0IHZjcHUg KnYpCj4gPiAgICAgIHJldHVybjsKPiA+Cj4gPiAgIGZhaWw6Cj4gPi0gICAgZ2RwcmludGsoWEVO TE9HX1dBUk5JTkcsICJCYWQgR01GTiAlbHggKE1GTiAlbHgpXG4iLCBnbWZuLAo+ID4tICAgICAg ICAgICAgIHBhZ2UgPyBwYWdlX3RvX21mbihwYWdlKSA6IElOVkFMSURfTUZOKTsKPiA+KyAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBHTUZOICUjIlBSSV9nZm4iIChNRk4gJSMiUFJJ X21mbiIpXG4iLCBnbWZuLAo+ID4rICAgICAgICAgICAgIHBhZ2UgPyBwYWdlX3RvX21mbihwYWdl KSA6IG1mbl94KElOVkFMSURfTUZOKSk7Cj4gPiAgfQo+ID4KPiA+ICBzdGF0aWMgdm9pZCB0ZWFy ZG93bl9hcGljX2Fzc2lzdChzdHJ1Y3QgdmNwdSAqdikKPiA+QEAgLTM0OCw4ICszNDgsOCBAQCBz dGF0aWMgdm9pZCB1cGRhdGVfcmVmZXJlbmNlX3RzYyhzdHJ1Y3QgZG9tYWluICpkLCBib29sX3Qg aW5pdGlhbGl6ZSkKPiA+ICAgICAgewo+ID4gICAgICAgICAgaWYgKCBwYWdlICkKPiA+ICAgICAg ICAgICAgICBwdXRfcGFnZShwYWdlKTsKPiA+LSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsICJCYWQgR01GTiAlbHggKE1GTiAlbHgpXG4iLCBnbWZuLAo+ID4tICAgICAgICAgICAgICAg ICBwYWdlID8gcGFnZV90b19tZm4ocGFnZSkgOiBJTlZBTElEX01GTik7Cj4gPisgICAgICAgIGdk cHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEdNRk4gJSMiUFJJX2dmbiIgKE1GTiAlIyJQUklf bWZuIilcbiIsCj4gPisgICAgICAgICAgICAgICAgIGdtZm4sIHBhZ2UgPyBwYWdlX3RvX21mbihw YWdlKSA6IG1mbl94KElOVkFMSURfTUZOKSk7Cj4gPiAgICAgICAgICByZXR1cm47Cj4gPiAgICAg IH0KPiA+Cj4gPmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL3ZteC92bXguYyBiL3hlbi9h cmNoL3g4Ni9odm0vdm14L3ZteC5jCj4gPmluZGV4IGRmMTk1NzkuLmEwNjE0MjAgMTAwNjQ0Cj4g Pi0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vdm14L3ZteC5jCj4gPisrKyBiL3hlbi9hcmNoL3g4Ni9o dm0vdm14L3ZteC5jCj4gPkBAIC0yMDI1LDcgKzIwMjUsNyBAQCBzdGF0aWMgdm9pZCB2bXhfdmNw dV91cGRhdGVfdm1mdW5jX3ZlKHN0cnVjdCB2Y3B1ICp2KQo+ID4KPiA+ICAgICAgICAgICAgICBt Zm4gPSBnZXRfZ2ZuX3F1ZXJ5X3VubG9ja2VkKGQsIGdmbl94KHZjcHVfYWx0cDJtKHYpLnZlaW5m b19nZm4pLCAmdCk7Cj4gPgo+ID4tICAgICAgICAgICAgaWYgKCBtZm5feChtZm4pICE9IElOVkFM SURfTUZOICkKPiA+KyAgICAgICAgICAgIGlmICggIW1mbl9lcShtZm4sIElOVkFMSURfTUZOKSAp Cj4gPiAgICAgICAgICAgICAgICAgIF9fdm13cml0ZShWSVJUX0VYQ0VQVElPTl9JTkZPLCBtZm5f eChtZm4pIDw8IFBBR0VfU0hJRlQpOwo+ID4gICAgICAgICAgICAgIGVsc2UKPiA+ICAgICAgICAg ICAgICAgICAgdi0+YXJjaC5odm1fdm14LnNlY29uZGFyeV9leGVjX2NvbnRyb2wgJj0KPiA+ZGlm ZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9tbS9ndWVzdF93YWxrLmMgYi94ZW4vYXJjaC94ODYvbW0v Z3Vlc3Rfd2Fsay5jCj4gPmluZGV4IGU4NTA1MDIuLjg2OGU5MDkgMTAwNjQ0Cj4gPi0tLSBhL3hl bi9hcmNoL3g4Ni9tbS9ndWVzdF93YWxrLmMKPiA+KysrIGIveGVuL2FyY2gveDg2L21tL2d1ZXN0 X3dhbGsuYwo+ID5AQCAtMjgxLDcgKzI4MSw3IEBAIGd1ZXN0X3dhbGtfdGFibGVzKHN0cnVjdCB2 Y3B1ICp2LCBzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLAo+ID4gICAgICAgICAgc3RhcnQgPSBfZ2Zu KChnZm5feChzdGFydCkgJiB+R1VFU1RfTDNfR0ZOX01BU0spICsKPiA+ICAgICAgICAgICAgICAg ICAgICAgICAoKHZhID4+IFBBR0VfU0hJRlQpICYgR1VFU1RfTDNfR0ZOX01BU0spKTsKPiA+ICAg ICAgICAgIGd3LT5sMWUgPSBndWVzdF9sMWVfZnJvbV9nZm4oc3RhcnQsIGZsYWdzKTsKPiA+LSAg ICAgICAgZ3ctPmwybWZuID0gZ3ctPmwxbWZuID0gX21mbihJTlZBTElEX01GTik7Cj4gPisgICAg ICAgIGd3LT5sMm1mbiA9IGd3LT5sMW1mbiA9IElOVkFMSURfTUZOOwo+ID4gICAgICAgICAgZ290 byBzZXRfYWQ7Cj4gPiAgICAgIH0KPiA+Cj4gPkBAIC0zNTYsNyArMzU2LDcgQEAgZ3Vlc3Rfd2Fs a190YWJsZXMoc3RydWN0IHZjcHUgKnYsIHN0cnVjdCBwMm1fZG9tYWluICpwMm0sCj4gPiAgICAg ICAgICBzdGFydCA9IF9nZm4oKGdmbl94KHN0YXJ0KSAmIH5HVUVTVF9MMl9HRk5fTUFTSykgKwo+ ID4gICAgICAgICAgICAgICAgICAgICAgIGd1ZXN0X2wxX3RhYmxlX29mZnNldCh2YSkpOwo+ID4g ICAgICAgICAgZ3ctPmwxZSA9IGd1ZXN0X2wxZV9mcm9tX2dmbihzdGFydCwgZmxhZ3MpOwo+ID4t ICAgICAgICBndy0+bDFtZm4gPSBfbWZuKElOVkFMSURfTUZOKTsKPiA+KyAgICAgICAgZ3ctPmwx bWZuID0gSU5WQUxJRF9NRk47Cj4gPiAgICAgIH0KPiA+ICAgICAgZWxzZQo+ID4gICAgICB7Cj4g PmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0vaGFwL2hhcC5jIGIveGVuL2FyY2gveDg2L21t L2hhcC9oYXAuYwo+ID5pbmRleCA5YzJjZDQ5Li4zMjE4ZmEyIDEwMDY0NAo+ID4tLS0gYS94ZW4v YXJjaC94ODYvbW0vaGFwL2hhcC5jCj4gPisrKyBiL3hlbi9hcmNoL3g4Ni9tbS9oYXAvaGFwLmMK PiA+QEAgLTQzMCw3ICs0MzAsNyBAQCBzdGF0aWMgbWZuX3QgaGFwX21ha2VfbW9uaXRvcl90YWJs ZShzdHJ1Y3QgdmNwdSAqdikKPiA+ICAgb29tOgo+ID4gICAgICBIQVBfRVJST1IoIm91dCBvZiBt ZW1vcnkgYnVpbGRpbmcgbW9uaXRvciBwYWdldGFibGVcbiIpOwo+ID4gICAgICBkb21haW5fY3Jh c2goZCk7Cj4gPi0gICAgcmV0dXJuIF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgIHJldHVybiBJ TlZBTElEX01GTjsKPiA+ICB9Cj4gPgo+ID4gIHN0YXRpYyB2b2lkIGhhcF9kZXN0cm95X21vbml0 b3JfdGFibGUoc3RydWN0IHZjcHUqIHYsIG1mbl90IG1tZm4pCj4gPkBAIC01MDksNyArNTA5LDcg QEAgaW50IGhhcF9lbmFibGUoc3RydWN0IGRvbWFpbiAqZCwgdTMyIG1vZGUpCj4gPiAgICAgICAg ICB9Cj4gPgo+ID4gICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBNQVhfRVBUUDsgaSsrICkKPiA+ LSAgICAgICAgICAgIGQtPmFyY2guYWx0cDJtX2VwdHBbaV0gPSBJTlZBTElEX01GTjsKPiA+KyAg ICAgICAgICAgIGQtPmFyY2guYWx0cDJtX2VwdHBbaV0gPSBtZm5feChJTlZBTElEX01GTik7Cj4g Pgo+ID4gICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBNQVhfQUxUUDJNOyBpKysgKQo+ID4gICAg ICAgICAgewo+ID5kaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tL3AybS1lcHQuYyBiL3hlbi9h cmNoL3g4Ni9tbS9wMm0tZXB0LmMKPiA+aW5kZXggNzE2NmM3MS4uNmQwMzczNiAxMDA2NDQKPiA+ LS0tIGEveGVuL2FyY2gveDg2L21tL3AybS1lcHQuYwo+ID4rKysgYi94ZW4vYXJjaC94ODYvbW0v cDJtLWVwdC5jCj4gPkBAIC01MCw3ICs1MCw3IEBAIHN0YXRpYyBpbnQgYXRvbWljX3dyaXRlX2Vw dF9lbnRyeShlcHRfZW50cnlfdCAqZW50cnlwdHIsIGVwdF9lbnRyeV90IG5ldywKPiA+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsKQo+ID4gIHsKPiA+ICAgICAg aW50IHJjOwo+ID4tICAgIHVuc2lnbmVkIGxvbmcgb2xkbWZuID0gSU5WQUxJRF9NRk47Cj4gPisg ICAgdW5zaWduZWQgbG9uZyBvbGRtZm4gPSBtZm5feChJTlZBTElEX01GTik7Cj4gPiAgICAgIGJv b2xfdCBjaGVja19mb3JlaWduID0gKG5ldy5tZm4gIT0gZW50cnlwdHItPm1mbiB8fAo+ID4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcuc2FfcDJtdCAhPSBlbnRyeXB0ci0+c2FfcDJt dCk7Cj4gPgo+ID5AQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgaW50IGF0b21pY193cml0ZV9lcHRf ZW50cnkoZXB0X2VudHJ5X3QgKmVudHJ5cHRyLCBlcHRfZW50cnlfdCBuZXcsCj4gPgo+ID4gICAg ICB3cml0ZV9hdG9taWMoJmVudHJ5cHRyLT5lcHRlLCBuZXcuZXB0ZSk7Cj4gPgo+ID4tICAgIGlm ICggdW5saWtlbHkob2xkbWZuICE9IElOVkFMSURfTUZOKSApCj4gPisgICAgaWYgKCB1bmxpa2Vs eShvbGRtZm4gIT0gbWZuX3goSU5WQUxJRF9NRk4pKSApCj4gPiAgICAgICAgICBwdXRfcGFnZSht Zm5fdG9fcGFnZShvbGRtZm4pKTsKPiA+Cj4gPiAgICAgIHJjID0gMDsKPiA+QEAgLTg4Nyw3ICs4 ODcsNyBAQCBzdGF0aWMgbWZuX3QgZXB0X2dldF9lbnRyeShzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJt LAo+ID4gICAgICBpbnQgaTsKPiA+ICAgICAgaW50IHJldCA9IDA7Cj4gPiAgICAgIGJvb2xfdCBy ZWNhbGMgPSAwOwo+ID4tICAgIG1mbl90IG1mbiA9IF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4rICAg IG1mbl90IG1mbiA9IElOVkFMSURfTUZOOwo+ID4gICAgICBzdHJ1Y3QgZXB0X2RhdGEgKmVwdCA9 ICZwMm0tPmVwdDsKPiA+Cj4gPiAgICAgICp0ID0gcDJtX21taW9fZG07Cj4gPmRpZmYgLS1naXQg YS94ZW4vYXJjaC94ODYvbW0vcDJtLXBvZC5jIGIveGVuL2FyY2gveDg2L21tL3AybS1wb2QuYwo+ ID5pbmRleCBiN2FiMTY5Li5mMzg0NTg5IDEwMDY0NAo+ID4tLS0gYS94ZW4vYXJjaC94ODYvbW0v cDJtLXBvZC5jCj4gPisrKyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0tcG9kLmMKPiA+QEAgLTU1OSw3 ICs1NTksNyBAQCBwMm1fcG9kX2RlY3JlYXNlX3Jlc2VydmF0aW9uKHN0cnVjdCBkb21haW4gKmQs Cj4gPiAgICAgIHsKPiA+ICAgICAgICAgIC8qIEFsbCBQb0Q6IE1hcmsgdGhlIHdob2xlIHJlZ2lv biBpbnZhbGlkIGFuZCB0ZWxsIGNhbGxlcgo+ID4gICAgICAgICAgICogd2UncmUgZG9uZS4gKi8K PiA+LSAgICAgICAgcDJtX3NldF9lbnRyeShwMm0sIGdwZm4sIF9tZm4oSU5WQUxJRF9NRk4pLCBv cmRlciwgcDJtX2ludmFsaWQsCj4gPisgICAgICAgIHAybV9zZXRfZW50cnkocDJtLCBncGZuLCBJ TlZBTElEX01GTiwgb3JkZXIsIHAybV9pbnZhbGlkLAo+ID4gICAgICAgICAgICAgICAgICAgICAg ICBwMm0tPmRlZmF1bHRfYWNjZXNzKTsKPiA+ICAgICAgICAgIHAybS0+cG9kLmVudHJ5X2NvdW50 LT0oMTw8b3JkZXIpOwo+ID4gICAgICAgICAgQlVHX09OKHAybS0+cG9kLmVudHJ5X2NvdW50IDwg MCk7Cj4gPkBAIC02MDIsNyArNjAyLDcgQEAgcDJtX3BvZF9kZWNyZWFzZV9yZXNlcnZhdGlvbihz dHJ1Y3QgZG9tYWluICpkLAo+ID4gICAgICAgICAgbiA9IDFVTCA8PCBjdXJfb3JkZXI7Cj4gPiAg ICAgICAgICBpZiAoIHQgPT0gcDJtX3BvcHVsYXRlX29uX2RlbWFuZCApCj4gPiAgICAgICAgICB7 Cj4gPi0gICAgICAgICAgICBwMm1fc2V0X2VudHJ5KHAybSwgZ3BmbiArIGksIF9tZm4oSU5WQUxJ RF9NRk4pLCBjdXJfb3JkZXIsCj4gPisgICAgICAgICAgICBwMm1fc2V0X2VudHJ5KHAybSwgZ3Bm biArIGksIElOVkFMSURfTUZOLCBjdXJfb3JkZXIsCj4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwMm1faW52YWxpZCwgcDJtLT5kZWZhdWx0X2FjY2Vzcyk7Cj4gPiAgICAgICAgICAgICAg cDJtLT5wb2QuZW50cnlfY291bnQgLT0gbjsKPiA+ICAgICAgICAgICAgICBCVUdfT04ocDJtLT5w b2QuZW50cnlfY291bnQgPCAwKTsKPiA+QEAgLTYyNCw3ICs2MjQsNyBAQCBwMm1fcG9kX2RlY3Jl YXNlX3Jlc2VydmF0aW9uKHN0cnVjdCBkb21haW4gKmQsCj4gPgo+ID4gICAgICAgICAgICAgIHBh Z2UgPSBtZm5fdG9fcGFnZShtZm4pOwo+ID4KPiA+LSAgICAgICAgICAgIHAybV9zZXRfZW50cnko cDJtLCBncGZuICsgaSwgX21mbihJTlZBTElEX01GTiksIGN1cl9vcmRlciwKPiA+KyAgICAgICAg ICAgIHAybV9zZXRfZW50cnkocDJtLCBncGZuICsgaSwgSU5WQUxJRF9NRk4sIGN1cl9vcmRlciwK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAybV9pbnZhbGlkLCBwMm0tPmRlZmF1bHRf YWNjZXNzKTsKPiA+ICAgICAgICAgICAgICBwMm1fdGxiX2ZsdXNoX3N5bmMocDJtKTsKPiA+ICAg ICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IG47ICsraiApCj4gPkBAIC02NzEsNyArNjcxLDcg QEAgdm9pZCBwMm1fcG9kX2R1bXBfZGF0YShzdHJ1Y3QgZG9tYWluICpkKQo+ID4gIHN0YXRpYyBp bnQKPiA+ICBwMm1fcG9kX3plcm9fY2hlY2tfc3VwZXJwYWdlKHN0cnVjdCBwMm1fZG9tYWluICpw Mm0sIHVuc2lnbmVkIGxvbmcgZ2ZuKQo+ID4gIHsKPiA+LSAgICBtZm5fdCBtZm4sIG1mbjAgPSBf bWZuKElOVkFMSURfTUZOKTsKPiA+KyAgICBtZm5fdCBtZm4sIG1mbjAgPSBJTlZBTElEX01GTjsK PiA+ICAgICAgcDJtX3R5cGVfdCB0eXBlLCB0eXBlMCA9IDA7Cj4gPiAgICAgIHVuc2lnbmVkIGxv bmcgKiBtYXAgPSBOVUxMOwo+ID4gICAgICBpbnQgcmV0PTAsIHJlc2V0ID0gMDsKPiA+QEAgLTc1 NCw3ICs3NTQsNyBAQCBwMm1fcG9kX3plcm9fY2hlY2tfc3VwZXJwYWdlKHN0cnVjdCBwMm1fZG9t YWluICpwMm0sIHVuc2lnbmVkIGxvbmcgZ2ZuKQo+ID4gICAgICB9Cj4gPgo+ID4gICAgICAvKiBU cnkgdG8gcmVtb3ZlIHRoZSBwYWdlLCByZXN0b3Jpbmcgb2xkIG1hcHBpbmcgaWYgaXQgZmFpbHMu ICovCj4gPi0gICAgcDJtX3NldF9lbnRyeShwMm0sIGdmbiwgX21mbihJTlZBTElEX01GTiksIFBB R0VfT1JERVJfMk0sCj4gPisgICAgcDJtX3NldF9lbnRyeShwMm0sIGdmbiwgSU5WQUxJRF9NRk4s IFBBR0VfT1JERVJfMk0sCj4gPiAgICAgICAgICAgICAgICAgICAgcDJtX3BvcHVsYXRlX29uX2Rl bWFuZCwgcDJtLT5kZWZhdWx0X2FjY2Vzcyk7Cj4gPiAgICAgIHAybV90bGJfZmx1c2hfc3luYyhw Mm0pOwo+ID4KPiA+QEAgLTg3MSw3ICs4NzEsNyBAQCBwMm1fcG9kX3plcm9fY2hlY2soc3RydWN0 IHAybV9kb21haW4gKnAybSwgdW5zaWduZWQgbG9uZyAqZ2ZucywgaW50IGNvdW50KQo+ID4gICAg ICAgICAgfQo+ID4KPiA+ICAgICAgICAgIC8qIFRyeSB0byByZW1vdmUgdGhlIHBhZ2UsIHJlc3Rv cmluZyBvbGQgbWFwcGluZyBpZiBpdCBmYWlscy4gKi8KPiA+LSAgICAgICAgcDJtX3NldF9lbnRy eShwMm0sIGdmbnNbaV0sIF9tZm4oSU5WQUxJRF9NRk4pLCBQQUdFX09SREVSXzRLLAo+ID4rICAg ICAgICBwMm1fc2V0X2VudHJ5KHAybSwgZ2Zuc1tpXSwgSU5WQUxJRF9NRk4sIFBBR0VfT1JERVJf NEssCj4gPiAgICAgICAgICAgICAgICAgICAgICAgIHAybV9wb3B1bGF0ZV9vbl9kZW1hbmQsIHAy bS0+ZGVmYXVsdF9hY2Nlc3MpOwo+ID4KPiA+ICAgICAgICAgIC8qIFNlZSBpZiB0aGUgcGFnZSB3 YXMgc3VjY2Vzc2Z1bGx5IHVubWFwcGVkLiAgKEFsbG93IG9uZSByZWZjb3VudAo+ID5AQCAtMTA3 Myw3ICsxMDczLDcgQEAgcDJtX3BvZF9kZW1hbmRfcG9wdWxhdGUoc3RydWN0IHAybV9kb21haW4g KnAybSwgdW5zaWduZWQgbG9uZyBnZm4sCj4gPiAgICAgICAgICAgKiBOT1RFOiBJbiBhIGZpbmUt Z3JhaW5lZCBwMm0gbG9ja2luZyBzY2VuYXJpbyB0aGlzIG9wZXJhdGlvbgo+ID4gICAgICAgICAg ICogbWF5IG5lZWQgdG8gcHJvbW90ZSBpdHMgbG9ja2luZyBmcm9tIGdmbi0+MWcgc3VwZXJwYWdl Cj4gPiAgICAgICAgICAgKi8KPiA+LSAgICAgICAgcDJtX3NldF9lbnRyeShwMm0sIGdmbl9hbGln bmVkLCBfbWZuKElOVkFMSURfTUZOKSwgUEFHRV9PUkRFUl8yTSwKPiA+KyAgICAgICAgcDJtX3Nl dF9lbnRyeShwMm0sIGdmbl9hbGlnbmVkLCBJTlZBTElEX01GTiwgUEFHRV9PUkRFUl8yTSwKPiA+ ICAgICAgICAgICAgICAgICAgICAgICAgcDJtX3BvcHVsYXRlX29uX2RlbWFuZCwgcDJtLT5kZWZh dWx0X2FjY2Vzcyk7Cj4gPiAgICAgICAgICByZXR1cm4gMDsKPiA+ICAgICAgfQo+ID5AQCAtMTE1 Nyw3ICsxMTU3LDcgQEAgcmVtYXBfYW5kX3JldHJ5Ogo+ID4gICAgICAgKiBuZWVkIHByb21vdGlu ZyB0aGUgZ2ZuIGxvY2sgZnJvbSBnZm4tPjJNIHN1cGVycGFnZSAqLwo+ID4gICAgICBnZm5fYWxp Z25lZCA9IChnZm4+Pm9yZGVyKTw8b3JkZXI7Cj4gPiAgICAgIGZvcihpPTA7IGk8KDE8PG9yZGVy KTsgaSsrKQo+ID4tICAgICAgICBwMm1fc2V0X2VudHJ5KHAybSwgZ2ZuX2FsaWduZWQgKyBpLCBf bWZuKElOVkFMSURfTUZOKSwgUEFHRV9PUkRFUl80SywKPiA+KyAgICAgICAgcDJtX3NldF9lbnRy eShwMm0sIGdmbl9hbGlnbmVkICsgaSwgSU5WQUxJRF9NRk4sIFBBR0VfT1JERVJfNEssCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgIHAybV9wb3B1bGF0ZV9vbl9kZW1hbmQsIHAybS0+ZGVmYXVs dF9hY2Nlc3MpOwo+ID4gICAgICBpZiAoIHRiX2luaXRfZG9uZSApCj4gPiAgICAgIHsKPiA+QEAg LTEyMTUsNyArMTIxNSw3IEBAIGd1ZXN0X3BoeXNtYXBfbWFya19wb3B1bGF0ZV9vbl9kZW1hbmQo c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4sCj4gPiAgICAgIH0KPiA+Cj4gPiAg ICAgIC8qIE5vdywgYWN0dWFsbHkgZG8gdGhlIHR3by13YXkgbWFwcGluZyAqLwo+ID4tICAgIHJj ID0gcDJtX3NldF9lbnRyeShwMm0sIGdmbiwgX21mbihJTlZBTElEX01GTiksIG9yZGVyLAo+ID4r ICAgIHJjID0gcDJtX3NldF9lbnRyeShwMm0sIGdmbiwgSU5WQUxJRF9NRk4sIG9yZGVyLAo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgcDJtX3BvcHVsYXRlX29uX2RlbWFuZCwgcDJtLT5kZWZh dWx0X2FjY2Vzcyk7Cj4gPiAgICAgIGlmICggcmMgPT0gMCApCj4gPiAgICAgIHsKPiA+ZGlmZiAt LWdpdCBhL3hlbi9hcmNoL3g4Ni9tbS9wMm0tcHQuYyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0tcHQu Ywo+ID5pbmRleCA0OTgwOTM0Li4yYjZlODllIDEwMDY0NAo+ID4tLS0gYS94ZW4vYXJjaC94ODYv bW0vcDJtLXB0LmMKPiA+KysrIGIveGVuL2FyY2gveDg2L21tL3AybS1wdC5jCj4gPkBAIC01MTEs NyArNTExLDcgQEAgcDJtX3B0X3NldF9lbnRyeShzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLCB1bnNp Z25lZCBsb25nIGdmbiwgbWZuX3QgbWZuLAo+ID4gICAgICAgKiB0aGUgaW50ZXJtZWRpYXRlIG9u ZSBtaWdodCBiZSkuCj4gPiAgICAgICAqLwo+ID4gICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIGlv bW11X29sZF9mbGFncyA9IDA7Cj4gPi0gICAgdW5zaWduZWQgbG9uZyBvbGRfbWZuID0gSU5WQUxJ RF9NRk47Cj4gPisgICAgdW5zaWduZWQgbG9uZyBvbGRfbWZuID0gbWZuX3goSU5WQUxJRF9NRk4p Owo+ID4KPiA+ICAgICAgQVNTRVJUKHN2ZSAhPSAwKTsKPiA+Cj4gPkBAIC03NjQsNyArNzY0LDcg QEAgcDJtX3B0X2dldF9lbnRyeShzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLCB1bnNpZ25lZCBsb25n IGdmbiwKPiA+ICAgICAgICAgICAgICAgICAgICAgICBwMm0tPm1heF9tYXBwZWRfcGZuICkKPiA+ ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gICAgICAgICAgfQo+ID4tICAgICAgICBy ZXR1cm4gX21mbihJTlZBTElEX01GTik7Cj4gPisgICAgICAgIHJldHVybiBJTlZBTElEX01GTjsK PiA+ICAgICAgfQo+ID4KPiA+ICAgICAgbWZuID0gcGFnZXRhYmxlX2dldF9tZm4ocDJtX2dldF9w YWdldGFibGUocDJtKSk7Cj4gPkBAIC03NzcsNyArNzc3LDcgQEAgcDJtX3B0X2dldF9lbnRyeShz dHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLCB1bnNpZ25lZCBsb25nIGdmbiwKPiA+ICAgICAgICAgIGlm ICggKGw0ZV9nZXRfZmxhZ3MoKmw0ZSkgJiBfUEFHRV9QUkVTRU5UKSA9PSAwICkKPiA+ICAgICAg ICAgIHsKPiA+ICAgICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShsNGUpOwo+ID4tICAgICAg ICAgICAgcmV0dXJuIF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgICAgICAgICAgcmV0dXJuIElO VkFMSURfTUZOOwo+ID4gICAgICAgICAgfQo+ID4gICAgICAgICAgbWZuID0gX21mbihsNGVfZ2V0 X3BmbigqbDRlKSk7Cj4gPiAgICAgICAgICByZWNhbGMgPSBuZWVkc19yZWNhbGMobDQsICpsNGUp Owo+ID5AQCAtODA1LDcgKzgwNSw3IEBAIHBvZF9yZXRyeV9sMzoKPiA+ICAgICAgICAgICAgICAg ICAgICAgICp0ID0gcDJtX3BvcHVsYXRlX29uX2RlbWFuZDsKPiA+ICAgICAgICAgICAgICB9Cj4g PiAgICAgICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UobDNlKTsKPiA+LSAgICAgICAgICAgIHJl dHVybiBfbWZuKElOVkFMSURfTUZOKTsKPiA+KyAgICAgICAgICAgIHJldHVybiBJTlZBTElEX01G TjsKPiA+ICAgICAgICAgIH0KPiA+ICAgICAgICAgIGlmICggZmxhZ3MgJiBfUEFHRV9QU0UgKQo+ ID4gICAgICAgICAgewo+ID5AQCAtODE3LDcgKzgxNyw3IEBAIHBvZF9yZXRyeV9sMzoKPiA+ICAg ICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShsM2UpOwo+ID4KPiA+ICAgICAgICAgICAgICBB U1NFUlQobWZuX3ZhbGlkKG1mbikgfHwgIXAybV9pc19yYW0oKnQpKTsKPiA+LSAgICAgICAgICAg IHJldHVybiAocDJtX2lzX3ZhbGlkKCp0KSkgPyBtZm4gOiBfbWZuKElOVkFMSURfTUZOKTsKPiA+ KyAgICAgICAgICAgIHJldHVybiAocDJtX2lzX3ZhbGlkKCp0KSkgPyBtZm4gOiBJTlZBTElEX01G TjsKPiA+ICAgICAgICAgIH0KPiA+Cj4gPiAgICAgICAgICBtZm4gPSBfbWZuKGwzZV9nZXRfcGZu KCpsM2UpKTsKPiA+QEAgLTg0Niw3ICs4NDYsNyBAQCBwb2RfcmV0cnlfbDI6Cj4gPiAgICAgICAg ICB9Cj4gPgo+ID4gICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UobDJlKTsKPiA+LSAgICAgICAg cmV0dXJuIF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgICAgICByZXR1cm4gSU5WQUxJRF9NRk47 Cj4gPiAgICAgIH0KPiA+ICAgICAgaWYgKCBmbGFncyAmIF9QQUdFX1BTRSApCj4gPiAgICAgIHsK PiA+QEAgLTg1Niw3ICs4NTYsNyBAQCBwb2RfcmV0cnlfbDI6Cj4gPiAgICAgICAgICB1bm1hcF9k b21haW5fcGFnZShsMmUpOwo+ID4KPiA+ICAgICAgICAgIEFTU0VSVChtZm5fdmFsaWQobWZuKSB8 fCAhcDJtX2lzX3JhbSgqdCkpOwo+ID4tICAgICAgICByZXR1cm4gKHAybV9pc192YWxpZCgqdCkp ID8gbWZuIDogX21mbihJTlZBTElEX01GTik7Cj4gPisgICAgICAgIHJldHVybiAocDJtX2lzX3Zh bGlkKCp0KSkgPyBtZm4gOiBJTlZBTElEX01GTjsKPiA+ICAgICAgfQo+ID4KPiA+ICAgICAgbWZu ID0gX21mbihsMmVfZ2V0X3BmbigqbDJlKSk7Cj4gPkBAIC04ODUsMTQgKzg4NSwxNCBAQCBwb2Rf cmV0cnlfbDE6Cj4gPiAgICAgICAgICB9Cj4gPgo+ID4gICAgICAgICAgdW5tYXBfZG9tYWluX3Bh Z2UobDFlKTsKPiA+LSAgICAgICAgcmV0dXJuIF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgICAg ICByZXR1cm4gSU5WQUxJRF9NRk47Cj4gPiAgICAgIH0KPiA+ICAgICAgbWZuID0gX21mbihsMWVf Z2V0X3BmbigqbDFlKSk7Cj4gPiAgICAgICp0ID0gcmVjYWxjX3R5cGUocmVjYWxjIHx8IF9uZWVk c19yZWNhbGMoZmxhZ3MpLCBsMXQsIHAybSwgZ2ZuKTsKPiA+ICAgICAgdW5tYXBfZG9tYWluX3Bh Z2UobDFlKTsKPiA+Cj4gPiAgICAgIEFTU0VSVChtZm5fdmFsaWQobWZuKSB8fCAhcDJtX2lzX3Jh bSgqdCkgfHwgcDJtX2lzX3BhZ2luZygqdCkpOwo+ID4tICAgIHJldHVybiAocDJtX2lzX3ZhbGlk KCp0KSB8fCBwMm1faXNfZ3JhbnQoKnQpKSA/IG1mbiA6IF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4r ICAgIHJldHVybiAocDJtX2lzX3ZhbGlkKCp0KSB8fCBwMm1faXNfZ3JhbnQoKnQpKSA/IG1mbiA6 IElOVkFMSURfTUZOOwo+ID4gIH0KPiA+Cj4gPiAgc3RhdGljIHZvaWQgcDJtX3B0X2NoYW5nZV9l bnRyeV90eXBlX2dsb2JhbChzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLAo+ID5kaWZmIC0tZ2l0IGEv eGVuL2FyY2gveDg2L21tL3AybS5jIGIveGVuL2FyY2gveDg2L21tL3AybS5jCj4gPmluZGV4IDYy NThhNWIuLmI5M2M4YTIgMTAwNjQ0Cj4gPi0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9wMm0uYwo+ID4r KysgYi94ZW4vYXJjaC94ODYvbW0vcDJtLmMKPiA+QEAgLTM4OCw3ICszODgsNyBAQCBtZm5fdCBf X2dldF9nZm5fdHlwZV9hY2Nlc3Moc3RydWN0IHAybV9kb21haW4gKnAybSwgdW5zaWduZWQgbG9u ZyBnZm4sCj4gPiAgICAgIGlmICh1bmxpa2VseSgocDJtX2lzX2Jyb2tlbigqdCkpKSkKPiA+ICAg ICAgewo+ID4gICAgICAgICAgLyogUmV0dXJuIGludmFsaWRfbWZuIHRvIGF2b2lkIGNhbGxlcidz IGFjY2VzcyAqLwo+ID4tICAgICAgICBtZm4gPSBfbWZuKElOVkFMSURfTUZOKTsKPiA+KyAgICAg ICAgbWZuID0gSU5WQUxJRF9NRk47Cj4gPiAgICAgICAgICBpZiAoIHEgJiBQMk1fQUxMT0MgKQo+ ID4gICAgICAgICAgICAgIGRvbWFpbl9jcmFzaChwMm0tPmRvbWFpbik7Cj4gPiAgICAgIH0KPiA+ QEAgLTQ5Myw4ICs0OTMsOCBAQCBpbnQgcDJtX3NldF9lbnRyeShzdHJ1Y3QgcDJtX2RvbWFpbiAq cDJtLCB1bnNpZ25lZCBsb25nIGdmbiwgbWZuX3QgbWZuLAo+ID4gICAgICAgICAgICAgIHJjID0g c2V0X3JjOwo+ID4KPiA+ICAgICAgICAgIGdmbiArPSAxdWwgPDwgb3JkZXI7Cj4gPi0gICAgICAg IGlmICggbWZuX3gobWZuKSAhPSBJTlZBTElEX01GTiApCj4gPi0gICAgICAgICAgICBtZm4gPSBf bWZuKG1mbl94KG1mbikgKyAoMXVsIDw8IG9yZGVyKSk7Cj4gPisgICAgICAgIGlmICggIW1mbl9l cShtZm4sIElOVkFMSURfTUZOKSApCj4gPisgICAgICAgICAgICBtZm4gPSBtZm5fYWRkKG1mbiwg MXVsIDw8IG9yZGVyKTsKPiA+ICAgICAgICAgIHRvZG8gLT0gMXVsIDw8IG9yZGVyOwo+ID4gICAg ICB9Cj4gPgo+ID5AQCAtNTgwLDcgKzU4MCw3IEBAIGludCBwMm1fYWxsb2NfdGFibGUoc3RydWN0 IHAybV9kb21haW4gKnAybSkKPiA+Cj4gPiAgICAgIC8qIEluaXRpYWxpc2UgcGh5c21hcCB0YWJs ZXMgZm9yIHNsb3QgemVyby4gT3RoZXIgY29kZSBhc3N1bWVzIHRoaXMuICovCj4gPiAgICAgIHAy bS0+ZGVmZXJfbmVzdGVkX2ZsdXNoID0gMTsKPiA+LSAgICByYyA9IHAybV9zZXRfZW50cnkocDJt LCAwLCBfbWZuKElOVkFMSURfTUZOKSwgUEFHRV9PUkRFUl80SywKPiA+KyAgICByYyA9IHAybV9z ZXRfZW50cnkocDJtLCAwLCBJTlZBTElEX01GTiwgUEFHRV9PUkRFUl80SywKPiA+ICAgICAgICAg ICAgICAgICAgICAgICAgIHAybV9pbnZhbGlkLCBwMm0tPmRlZmF1bHRfYWNjZXNzKTsKPiA+ICAg ICAgcDJtLT5kZWZlcl9uZXN0ZWRfZmx1c2ggPSAwOwo+ID4gICAgICBwMm1fdW5sb2NrKHAybSk7 Cj4gPkBAIC02NzAsNyArNjcwLDcgQEAgcDJtX3JlbW92ZV9wYWdlKHN0cnVjdCBwMm1fZG9tYWlu ICpwMm0sIHVuc2lnbmVkIGxvbmcgZ2ZuLCB1bnNpZ25lZCBsb25nIG1mbiwKPiA+ICAgICAgICAg ICAgICBBU1NFUlQoICFwMm1faXNfdmFsaWQodCkgfHwgbWZuICsgaSA9PSBtZm5feChtZm5fcmV0 dXJuKSApOwo+ID4gICAgICAgICAgfQo+ID4gICAgICB9Cj4gPi0gICAgcmV0dXJuIHAybV9zZXRf ZW50cnkocDJtLCBnZm4sIF9tZm4oSU5WQUxJRF9NRk4pLCBwYWdlX29yZGVyLCBwMm1faW52YWxp ZCwKPiA+KyAgICByZXR1cm4gcDJtX3NldF9lbnRyeShwMm0sIGdmbiwgSU5WQUxJRF9NRk4sIHBh Z2Vfb3JkZXIsIHAybV9pbnZhbGlkLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICBwMm0t PmRlZmF1bHRfYWNjZXNzKTsKPiA+ICB9Cj4gPgo+ID5AQCAtODQwLDcgKzg0MCw3IEBAIGd1ZXN0 X3BoeXNtYXBfYWRkX2VudHJ5KHN0cnVjdCBkb21haW4gKmQsIGdmbl90IGdmbiwgbWZuX3QgbWZu LAo+ID4gICAgICB7Cj4gPiAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkFkZGlu ZyBiYWQgbWZuIHRvIHAybSBtYXAgKCUjbHggLT4gJSNseClcbiIsCj4gPiAgICAgICAgICAgICAg ICAgICBnZm5feChnZm4pLCBtZm5feChtZm4pKTsKPiA+LSAgICAgICAgcmMgPSBwMm1fc2V0X2Vu dHJ5KHAybSwgZ2ZuX3goZ2ZuKSwgX21mbihJTlZBTElEX01GTiksIHBhZ2Vfb3JkZXIsCj4gPisg ICAgICAgIHJjID0gcDJtX3NldF9lbnRyeShwMm0sIGdmbl94KGdmbiksIElOVkFMSURfTUZOLCBw YWdlX29yZGVyLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAybV9pbnZhbGlkLCBw Mm0tPmRlZmF1bHRfYWNjZXNzKTsKPiA+ICAgICAgICAgIGlmICggcmMgPT0gMCApCj4gPiAgICAg ICAgICB7Cj4gPkBAIC0xMTA3LDcgKzExMDcsNyBAQCBpbnQgY2xlYXJfbW1pb19wMm1fZW50cnko c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4sIG1mbl90IG1mbiwKPiA+ICAgICAg fQo+ID4KPiA+ICAgICAgLyogRG8gbm90IHVzZSBtZm5fdmFsaWQoKSBoZXJlIGFzIGl0IHdpbGwg dXN1YWxseSBmYWlsIGZvciBNTUlPIHBhZ2VzLiAqLwo+ID4tICAgIGlmICggKElOVkFMSURfTUZO ID09IG1mbl94KGFjdHVhbF9tZm4pKSB8fCAodCAhPSBwMm1fbW1pb19kaXJlY3QpICkKPiA+KyAg ICBpZiAoIG1mbl9lcShhY3R1YWxfbWZuLCBJTlZBTElEX01GTikgfHwgKHQgIT0gcDJtX21taW9f ZGlyZWN0KSApCj4gPiAgICAgIHsKPiA+ICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsCj4g PiAgICAgICAgICAgICAgICAgICAiZ2ZuX3RvX21mbiBmYWlsZWQhIGdmbj0lMDhseCB0eXBlOiVk XG4iLCBnZm4sIHQpOwo+ID5AQCAtMTExNyw3ICsxMTE3LDcgQEAgaW50IGNsZWFyX21taW9fcDJt X2VudHJ5KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuLCBtZm5fdCBtZm4sCj4g PiAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKPiA+ICAgICAgICAgICAgICAgICAg ICJubyBtYXBwaW5nIGJldHdlZW4gbWZuICUwOGx4IGFuZCBnZm4gJTA4bHhcbiIsCj4gPiAgICAg ICAgICAgICAgICAgICBtZm5feChtZm4pLCBnZm4pOwo+ID4tICAgIHJjID0gcDJtX3NldF9lbnRy eShwMm0sIGdmbiwgX21mbihJTlZBTElEX01GTiksIG9yZGVyLCBwMm1faW52YWxpZCwKPiA+KyAg ICByYyA9IHAybV9zZXRfZW50cnkocDJtLCBnZm4sIElOVkFMSURfTUZOLCBvcmRlciwgcDJtX2lu dmFsaWQsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICBwMm0tPmRlZmF1bHRfYWNjZXNzKTsK PiA+Cj4gPiAgIG91dDoKPiA+QEAgLTExNDYsNyArMTE0Niw3IEBAIGludCBjbGVhcl9pZGVudGl0 eV9wMm1fZW50cnkoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4pCj4gPiAgICAg IG1mbiA9IHAybS0+Z2V0X2VudHJ5KHAybSwgZ2ZuLCAmcDJtdCwgJmEsIDAsIE5VTEwsIE5VTEwp Owo+ID4gICAgICBpZiAoIHAybXQgPT0gcDJtX21taW9fZGlyZWN0ICYmIG1mbl94KG1mbikgPT0g Z2ZuICkKPiA+ICAgICAgewo+ID4tICAgICAgICByZXQgPSBwMm1fc2V0X2VudHJ5KHAybSwgZ2Zu LCBfbWZuKElOVkFMSURfTUZOKSwgUEFHRV9PUkRFUl80SywKPiA+KyAgICAgICAgcmV0ID0gcDJt X3NldF9lbnRyeShwMm0sIGdmbiwgSU5WQUxJRF9NRk4sIFBBR0VfT1JERVJfNEssCj4gPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHAybV9pbnZhbGlkLCBwMm0tPmRlZmF1bHRfYWNjZXNz KTsKPiA+ICAgICAgICAgIGdmbl91bmxvY2socDJtLCBnZm4sIDApOwo+ID4gICAgICB9Cj4gPkBA IC0xMzE2LDcgKzEzMTYsNyBAQCBpbnQgcDJtX21lbV9wYWdpbmdfZXZpY3Qoc3RydWN0IGRvbWFp biAqZCwgdW5zaWduZWQgbG9uZyBnZm4pCj4gPiAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKPiA+ Cj4gPiAgICAgIC8qIFJlbW92ZSBtYXBwaW5nIGZyb20gcDJtIHRhYmxlICovCj4gPi0gICAgcmV0 ID0gcDJtX3NldF9lbnRyeShwMm0sIGdmbiwgX21mbihJTlZBTElEX01GTiksIFBBR0VfT1JERVJf NEssCj4gPisgICAgcmV0ID0gcDJtX3NldF9lbnRyeShwMm0sIGdmbiwgSU5WQUxJRF9NRk4sIFBB R0VfT1JERVJfNEssCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgcDJtX3JhbV9wYWdlZCwg YSk7Cj4gPgo+ID4gICAgICAvKiBDbGVhciBjb250ZW50IGJlZm9yZSByZXR1cm5pbmcgdGhlIHBh Z2UgdG8gWGVuICovCj4gPkBAIC0xODQ0LDcgKzE4NDQsNyBAQCBsb25nIHAybV9zZXRfbWVtX2Fj Y2VzcyhzdHJ1Y3QgZG9tYWluICpkLCBnZm5fdCBnZm4sIHVpbnQzMl90IG5yLAo+ID4gICAgICBp ZiAoIGFsdHAybV9pZHggKQo+ID4gICAgICB7Cj4gPiAgICAgICAgICBpZiAoIGFsdHAybV9pZHgg Pj0gTUFYX0FMVFAyTSB8fAo+ID4tICAgICAgICAgICAgIGQtPmFyY2guYWx0cDJtX2VwdHBbYWx0 cDJtX2lkeF0gPT0gSU5WQUxJRF9NRk4gKQo+ID4rICAgICAgICAgICAgIGQtPmFyY2guYWx0cDJt X2VwdHBbYWx0cDJtX2lkeF0gPT0gbWZuX3goSU5WQUxJRF9NRk4pICkKPiA+ICAgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKPiA+Cj4gPiAgICAgICAgICBhcDJtID0gZC0+YXJjaC5hbHRwMm1f cDJtW2FsdHAybV9pZHhdOwo+ID5AQCAtMTk0Miw3ICsxOTQyLDcgQEAgaW50IHAybV9nZXRfbWVt X2FjY2VzcyhzdHJ1Y3QgZG9tYWluICpkLCBnZm5fdCBnZm4sIHhlbm1lbV9hY2Nlc3NfdCAqYWNj ZXNzKQo+ID4gICAgICBtZm4gPSBwMm0tPmdldF9lbnRyeShwMm0sIGdmbl94KGdmbiksICZ0LCAm YSwgMCwgTlVMTCwgTlVMTCk7Cj4gPiAgICAgIGdmbl91bmxvY2socDJtLCBnZm4sIDApOwo+ID4K PiA+LSAgICBpZiAoIG1mbl94KG1mbikgPT0gSU5WQUxJRF9NRk4gKQo+ID4rICAgIGlmICggbWZu X2VxKG1mbiwgSU5WQUxJRF9NRk4pICkKPiA+ICAgICAgICAgIHJldHVybiAtRVNSQ0g7Cj4gPgo+ ID4gICAgICBpZiAoICh1bnNpZ25lZCkgYSA+PSBBUlJBWV9TSVpFKG1lbWFjY2VzcykgKQo+ID5A QCAtMjI4OCw3ICsyMjg4LDcgQEAgdW5zaWduZWQgaW50IHAybV9maW5kX2FsdHAybV9ieV9lcHRw KHN0cnVjdCBkb21haW4gKmQsIHVpbnQ2NF90IGVwdHApCj4gPgo+ID4gICAgICBmb3IgKCBpID0g MDsgaSA8IE1BWF9BTFRQMk07IGkrKyApCj4gPiAgICAgIHsKPiA+LSAgICAgICAgaWYgKCBkLT5h cmNoLmFsdHAybV9lcHRwW2ldID09IElOVkFMSURfTUZOICkKPiA+KyAgICAgICAgaWYgKCBkLT5h cmNoLmFsdHAybV9lcHRwW2ldID09IG1mbl94KElOVkFMSURfTUZOKSApCj4gPiAgICAgICAgICAg ICAgY29udGludWU7Cj4gPgo+ID4gICAgICAgICAgcDJtID0gZC0+YXJjaC5hbHRwMm1fcDJtW2ld Owo+ID5AQCAtMjMxNSw3ICsyMzE1LDcgQEAgYm9vbF90IHAybV9zd2l0Y2hfdmNwdV9hbHRwMm1f YnlfaWQoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGludCBpZHgpCj4gPgo+ID4gICAgICBhbHRw Mm1fbGlzdF9sb2NrKGQpOwo+ID4KPiA+LSAgICBpZiAoIGQtPmFyY2guYWx0cDJtX2VwdHBbaWR4 XSAhPSBJTlZBTElEX01GTiApCj4gPisgICAgaWYgKCBkLT5hcmNoLmFsdHAybV9lcHRwW2lkeF0g IT0gbWZuX3goSU5WQUxJRF9NRk4pICkKPiA+ICAgICAgewo+ID4gICAgICAgICAgaWYgKCBpZHgg IT0gdmNwdV9hbHRwMm0odikucDJtaWR4ICkKPiA+ICAgICAgICAgIHsKPiA+QEAgLTIzNTksMTQg KzIzNTksMTQgQEAgYm9vbF90IHAybV9hbHRwMm1fbGF6eV9jb3B5KHN0cnVjdCB2Y3B1ICp2LCBw YWRkcl90IGdwYSwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAmcGFnZV9v cmRlcik7Cj4gPiAgICAgIF9fcHV0X2dmbigqYXAybSwgZ2ZuX3goZ2ZuKSk7Cj4gPgo+ID4tICAg IGlmICggbWZuX3gobWZuKSAhPSBJTlZBTElEX01GTiApCj4gPisgICAgaWYgKCAhbWZuX2VxKG1m biwgSU5WQUxJRF9NRk4pICkKPiA+ICAgICAgICAgIHJldHVybiAwOwo+ID4KPiA+ICAgICAgbWZu ID0gZ2V0X2dmbl90eXBlX2FjY2VzcyhocDJtLCBnZm5feChnZm4pLCAmcDJtdCwgJnAybWEsCj4g PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUDJNX0FMTE9DIHwgUDJNX1VOU0hBUkUs ICZwYWdlX29yZGVyKTsKPiA+ICAgICAgX19wdXRfZ2ZuKGhwMm0sIGdmbl94KGdmbikpOwo+ID4K PiA+LSAgICBpZiAoIG1mbl94KG1mbikgPT0gSU5WQUxJRF9NRk4gKQo+ID4rICAgIGlmICggbWZu X2VxKG1mbiwgSU5WQUxJRF9NRk4pICkKPiA+ICAgICAgICAgIHJldHVybiAwOwo+ID4KPiA+ICAg ICAgcDJtX2xvY2soKmFwMm0pOwo+ID5AQCAtMjQwNCw3ICsyNDA0LDcgQEAgdm9pZCBwMm1fZmx1 c2hfYWx0cDJtKHN0cnVjdCBkb21haW4gKmQpCj4gPiAgICAgICAgICAvKiBVbmluaXQgYW5kIHJl aW5pdCBlcHQgdG8gZm9yY2UgVExCIHNob290ZG93biAqLwo+ID4gICAgICAgICAgZXB0X3AybV91 bmluaXQoZC0+YXJjaC5hbHRwMm1fcDJtW2ldKTsKPiA+ICAgICAgICAgIGVwdF9wMm1faW5pdChk LT5hcmNoLmFsdHAybV9wMm1baV0pOwo+ID4tICAgICAgICBkLT5hcmNoLmFsdHAybV9lcHRwW2ld ID0gSU5WQUxJRF9NRk47Cj4gPisgICAgICAgIGQtPmFyY2guYWx0cDJtX2VwdHBbaV0gPSBtZm5f eChJTlZBTElEX01GTik7Cj4gPiAgICAgIH0KPiA+Cj4gPiAgICAgIGFsdHAybV9saXN0X3VubG9j ayhkKTsKPiA+QEAgLTI0MzEsNyArMjQzMSw3IEBAIGludCBwMm1faW5pdF9hbHRwMm1fYnlfaWQo c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IGlkeCkKPiA+Cj4gPiAgICAgIGFsdHAybV9s aXN0X2xvY2soZCk7Cj4gPgo+ID4tICAgIGlmICggZC0+YXJjaC5hbHRwMm1fZXB0cFtpZHhdID09 IElOVkFMSURfTUZOICkKPiA+KyAgICBpZiAoIGQtPmFyY2guYWx0cDJtX2VwdHBbaWR4XSA9PSBt Zm5feChJTlZBTElEX01GTikgKQo+ID4gICAgICB7Cj4gPiAgICAgICAgICBwMm1faW5pdF9hbHRw Mm1faGVscGVyKGQsIGlkeCk7Cj4gPiAgICAgICAgICByYyA9IDA7Cj4gPkBAIC0yNDUwLDcgKzI0 NTAsNyBAQCBpbnQgcDJtX2luaXRfbmV4dF9hbHRwMm0oc3RydWN0IGRvbWFpbiAqZCwgdWludDE2 X3QgKmlkeCkKPiA+Cj4gPiAgICAgIGZvciAoIGkgPSAwOyBpIDwgTUFYX0FMVFAyTTsgaSsrICkK PiA+ICAgICAgewo+ID4tICAgICAgICBpZiAoIGQtPmFyY2guYWx0cDJtX2VwdHBbaV0gIT0gSU5W QUxJRF9NRk4gKQo+ID4rICAgICAgICBpZiAoIGQtPmFyY2guYWx0cDJtX2VwdHBbaV0gIT0gbWZu X3goSU5WQUxJRF9NRk4pICkKPiA+ICAgICAgICAgICAgICBjb250aW51ZTsKPiA+Cj4gPiAgICAg ICAgICBwMm1faW5pdF9hbHRwMm1faGVscGVyKGQsIGkpOwo+ID5AQCAtMjQ3Niw3ICsyNDc2LDcg QEAgaW50IHAybV9kZXN0cm95X2FsdHAybV9ieV9pZChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25l ZCBpbnQgaWR4KQo+ID4KPiA+ICAgICAgYWx0cDJtX2xpc3RfbG9jayhkKTsKPiA+Cj4gPi0gICAg aWYgKCBkLT5hcmNoLmFsdHAybV9lcHRwW2lkeF0gIT0gSU5WQUxJRF9NRk4gKQo+ID4rICAgIGlm ICggZC0+YXJjaC5hbHRwMm1fZXB0cFtpZHhdICE9IG1mbl94KElOVkFMSURfTUZOKSApCj4gPiAg ICAgIHsKPiA+ICAgICAgICAgIHAybSA9IGQtPmFyY2guYWx0cDJtX3AybVtpZHhdOwo+ID4KPiA+ QEAgLTI0ODYsNyArMjQ4Niw3IEBAIGludCBwMm1fZGVzdHJveV9hbHRwMm1fYnlfaWQoc3RydWN0 IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IGlkeCkKPiA+ICAgICAgICAgICAgICAvKiBVbmluaXQg YW5kIHJlaW5pdCBlcHQgdG8gZm9yY2UgVExCIHNob290ZG93biAqLwo+ID4gICAgICAgICAgICAg IGVwdF9wMm1fdW5pbml0KGQtPmFyY2guYWx0cDJtX3AybVtpZHhdKTsKPiA+ICAgICAgICAgICAg ICBlcHRfcDJtX2luaXQoZC0+YXJjaC5hbHRwMm1fcDJtW2lkeF0pOwo+ID4tICAgICAgICAgICAg ZC0+YXJjaC5hbHRwMm1fZXB0cFtpZHhdID0gSU5WQUxJRF9NRk47Cj4gPisgICAgICAgICAgICBk LT5hcmNoLmFsdHAybV9lcHRwW2lkeF0gPSBtZm5feChJTlZBTElEX01GTik7Cj4gPiAgICAgICAg ICAgICAgcmMgPSAwOwo+ID4gICAgICAgICAgfQo+ID4gICAgICB9Cj4gPkBAIC0yNTEwLDcgKzI1 MTAsNyBAQCBpbnQgcDJtX3N3aXRjaF9kb21haW5fYWx0cDJtX2J5X2lkKHN0cnVjdCBkb21haW4g KmQsIHVuc2lnbmVkIGludCBpZHgpCj4gPgo+ID4gICAgICBhbHRwMm1fbGlzdF9sb2NrKGQpOwo+ ID4KPiA+LSAgICBpZiAoIGQtPmFyY2guYWx0cDJtX2VwdHBbaWR4XSAhPSBJTlZBTElEX01GTiAp Cj4gPisgICAgaWYgKCBkLT5hcmNoLmFsdHAybV9lcHRwW2lkeF0gIT0gbWZuX3goSU5WQUxJRF9N Rk4pICkKPiA+ICAgICAgewo+ID4gICAgICAgICAgZm9yX2VhY2hfdmNwdSggZCwgdiApCj4gPiAg ICAgICAgICAgICAgaWYgKCBpZHggIT0gdmNwdV9hbHRwMm0odikucDJtaWR4ICkKPiA+QEAgLTI1 NDEsNyArMjU0MSw3IEBAIGludCBwMm1fY2hhbmdlX2FsdHAybV9nZm4oc3RydWN0IGRvbWFpbiAq ZCwgdW5zaWduZWQgaW50IGlkeCwKPiA+ICAgICAgdW5zaWduZWQgaW50IHBhZ2Vfb3JkZXI7Cj4g PiAgICAgIGludCByYyA9IC1FSU5WQUw7Cj4gPgo+ID4tICAgIGlmICggaWR4ID49IE1BWF9BTFRQ Mk0gfHwgZC0+YXJjaC5hbHRwMm1fZXB0cFtpZHhdID09IElOVkFMSURfTUZOICkKPiA+KyAgICBp ZiAoIGlkeCA+PSBNQVhfQUxUUDJNIHx8IGQtPmFyY2guYWx0cDJtX2VwdHBbaWR4XSA9PSBtZm5f eChJTlZBTElEX01GTikgKQo+ID4gICAgICAgICAgcmV0dXJuIHJjOwo+ID4KPiA+ICAgICAgaHAy bSA9IHAybV9nZXRfaG9zdHAybShkKTsKPiA+QEAgLTI2MzYsMTQgKzI2MzYsMTQgQEAgdm9pZCBw Mm1fYWx0cDJtX3Byb3BhZ2F0ZV9jaGFuZ2Uoc3RydWN0IGRvbWFpbiAqZCwgZ2ZuX3QgZ2ZuLAo+ ID4KPiA+ICAgICAgZm9yICggaSA9IDA7IGkgPCBNQVhfQUxUUDJNOyBpKysgKQo+ID4gICAgICB7 Cj4gPi0gICAgICAgIGlmICggZC0+YXJjaC5hbHRwMm1fZXB0cFtpXSA9PSBJTlZBTElEX01GTiAp Cj4gPisgICAgICAgIGlmICggZC0+YXJjaC5hbHRwMm1fZXB0cFtpXSA9PSBtZm5feChJTlZBTElE X01GTikgKQo+ID4gICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4KPiA+ICAgICAgICAgIHAybSA9 IGQtPmFyY2guYWx0cDJtX3AybVtpXTsKPiA+ICAgICAgICAgIG0gPSBnZXRfZ2ZuX3R5cGVfYWNj ZXNzKHAybSwgZ2ZuX3goZ2ZuKSwgJnQsICZhLCAwLCBOVUxMKTsKPiA+Cj4gPiAgICAgICAgICAv KiBDaGVjayBmb3IgYSBkcm9wcGVkIHBhZ2UgdGhhdCBtYXkgaW1wYWN0IHRoaXMgYWx0cDJtICov Cj4gPi0gICAgICAgIGlmICggbWZuX3gobWZuKSA9PSBJTlZBTElEX01GTiAmJgo+ID4rICAgICAg ICBpZiAoIG1mbl9lcShtZm4sIElOVkFMSURfTUZOKSAmJgo+ID4gICAgICAgICAgICAgICBnZm5f eChnZm4pID49IHAybS0+bWluX3JlbWFwcGVkX2dmbiAmJgo+ID4gICAgICAgICAgICAgICBnZm5f eChnZm4pIDw9IHAybS0+bWF4X3JlbWFwcGVkX2dmbiApCj4gPiAgICAgICAgICB7Cj4gPkBAIC0y NjYwLDcgKzI2NjAsNyBAQCB2b2lkIHAybV9hbHRwMm1fcHJvcGFnYXRlX2NoYW5nZShzdHJ1Y3Qg ZG9tYWluICpkLCBnZm5fdCBnZm4sCj4gPiAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBp IDwgTUFYX0FMVFAyTTsgaSsrICkKPiA+ICAgICAgICAgICAgICAgICAgewo+ID4gICAgICAgICAg ICAgICAgICAgICAgaWYgKCBpID09IGxhc3RfcmVzZXRfaWR4IHx8Cj4gPi0gICAgICAgICAgICAg ICAgICAgICAgICAgZC0+YXJjaC5hbHRwMm1fZXB0cFtpXSA9PSBJTlZBTElEX01GTiApCj4gPisg ICAgICAgICAgICAgICAgICAgICAgICAgZC0+YXJjaC5hbHRwMm1fZXB0cFtpXSA9PSBtZm5feChJ TlZBTElEX01GTikgKQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4K PiA+ICAgICAgICAgICAgICAgICAgICAgIHAybSA9IGQtPmFyY2guYWx0cDJtX3AybVtpXTsKPiA+ QEAgLTI2NzIsNyArMjY3Miw3IEBAIHZvaWQgcDJtX2FsdHAybV9wcm9wYWdhdGVfY2hhbmdlKHN0 cnVjdCBkb21haW4gKmQsIGdmbl90IGdmbiwKPiA+ICAgICAgICAgICAgICAgICAgZ290byBvdXQ7 Cj4gPiAgICAgICAgICAgICAgfQo+ID4gICAgICAgICAgfQo+ID4tICAgICAgICBlbHNlIGlmICgg bWZuX3gobSkgIT0gSU5WQUxJRF9NRk4gKQo+ID4rICAgICAgICBlbHNlIGlmICggIW1mbl9lcSht LCBJTlZBTElEX01GTikgKQo+ID4gICAgICAgICAgICAgIHAybV9zZXRfZW50cnkocDJtLCBnZm5f eChnZm4pLCBtZm4sIHBhZ2Vfb3JkZXIsIHAybXQsIHAybWEpOwo+ID4KPiA+ICAgICAgICAgIF9f cHV0X2dmbihwMm0sIGdmbl94KGdmbikpOwo+ID5kaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21t L3BhZ2luZy5jIGIveGVuL2FyY2gveDg2L21tL3BhZ2luZy5jCj4gPmluZGV4IDgyMTliYjYuLjEw N2ZjOGMgMTAwNjQ0Cj4gPi0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9wYWdpbmcuYwo+ID4rKysgYi94 ZW4vYXJjaC94ODYvbW0vcGFnaW5nLmMKPiA+QEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIG1mbl90 IHBhZ2luZ19uZXdfbG9nX2RpcnR5X3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCkKPiA+ICAgICAgaWYg KCB1bmxpa2VseShwYWdlID09IE5VTEwpICkKPiA+ICAgICAgewo+ID4gICAgICAgICAgZC0+YXJj aC5wYWdpbmcubG9nX2RpcnR5LmZhaWxlZF9hbGxvY3MrKzsKPiA+LSAgICAgICAgcmV0dXJuIF9t Zm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgICAgICByZXR1cm4gSU5WQUxJRF9NRk47Cj4gPiAgICAg IH0KPiA+Cj4gPiAgICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5hbGxvY3MrKzsKPiA+QEAg LTk1LDcgKzk1LDcgQEAgc3RhdGljIG1mbl90IHBhZ2luZ19uZXdfbG9nX2RpcnR5X25vZGUoc3Ry dWN0IGRvbWFpbiAqZCkKPiA+ICAgICAgICAgIGludCBpOwo+ID4gICAgICAgICAgbWZuX3QgKm5v ZGUgPSBtYXBfZG9tYWluX3BhZ2UobWZuKTsKPiA+ICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwg TE9HRElSVFlfTk9ERV9FTlRSSUVTOyBpKysgKQo+ID4tICAgICAgICAgICAgbm9kZVtpXSA9IF9t Zm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgICAgICAgICAgbm9kZVtpXSA9IElOVkFMSURfTUZOOwo+ ID4gICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2Uobm9kZSk7Cj4gPiAgICAgIH0KPiA+ICAgICAg cmV0dXJuIG1mbjsKPiA+QEAgLTE2Nyw3ICsxNjcsNyBAQCBzdGF0aWMgaW50IHBhZ2luZ19mcmVl X2xvZ19kaXJ0eV9iaXRtYXAoc3RydWN0IGRvbWFpbiAqZCwgaW50IHJjKQo+ID4KPiA+ICAgICAg ICAgICAgICB1bm1hcF9kb21haW5fcGFnZShsMik7Cj4gPiAgICAgICAgICAgICAgcGFnaW5nX2Zy ZWVfbG9nX2RpcnR5X3BhZ2UoZCwgbDNbaTNdKTsKPiA+LSAgICAgICAgICAgIGwzW2kzXSA9IF9t Zm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgICAgICAgICAgbDNbaTNdID0gSU5WQUxJRF9NRk47Cj4g Pgo+ID4gICAgICAgICAgICAgIGlmICggaTMgPCBMT0dESVJUWV9OT0RFX0VOVFJJRVMgLSAxICYm IGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQo+ID4gICAgICAgICAgICAgIHsKPiA+QEAgLTE4 Miw3ICsxODIsNyBAQCBzdGF0aWMgaW50IHBhZ2luZ19mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoc3Ry dWN0IGRvbWFpbiAqZCwgaW50IHJjKQo+ID4gICAgICAgICAgaWYgKCByYyApCj4gPiAgICAgICAg ICAgICAgYnJlYWs7Cj4gPiAgICAgICAgICBwYWdpbmdfZnJlZV9sb2dfZGlydHlfcGFnZShkLCBs NFtpNF0pOwo+ID4tICAgICAgICBsNFtpNF0gPSBfbWZuKElOVkFMSURfTUZOKTsKPiA+KyAgICAg ICAgbDRbaTRdID0gSU5WQUxJRF9NRk47Cj4gPgo+ID4gICAgICAgICAgaWYgKCBpNCA8IExPR0RJ UlRZX05PREVfRU5UUklFUyAtIDEgJiYgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCj4gPiAg ICAgICAgICB7Cj4gPkBAIC0xOTgsNyArMTk4LDcgQEAgc3RhdGljIGludCBwYWdpbmdfZnJlZV9s b2dfZGlydHlfYml0bWFwKHN0cnVjdCBkb21haW4gKmQsIGludCByYykKPiA+ICAgICAgaWYgKCAh cmMgKQo+ID4gICAgICB7Cj4gPiAgICAgICAgICBwYWdpbmdfZnJlZV9sb2dfZGlydHlfcGFnZShk LCBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkudG9wKTsKPiA+LSAgICAgICAgZC0+YXJjaC5wYWdp bmcubG9nX2RpcnR5LnRvcCA9IF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgICAgICBkLT5hcmNo LnBhZ2luZy5sb2dfZGlydHkudG9wID0gSU5WQUxJRF9NRk47Cj4gPgo+ID4gICAgICAgICAgQVNT RVJUKGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5hbGxvY3MgPT0gMCk7Cj4gPiAgICAgICAgICBk LT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuZmFpbGVkX2FsbG9jcyA9IDA7Cj4gPkBAIC02NjAsNyAr NjYwLDcgQEAgaW50IHBhZ2luZ19kb21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25l ZCBpbnQgZG9tY3JfZmxhZ3MpCj4gPiAgICAgIC8qIFRoaXMgbXVzdCBiZSBpbml0aWFsaXplZCBz ZXBhcmF0ZWx5IGZyb20gdGhlIHJlc3Qgb2YgdGhlCj4gPiAgICAgICAqIGxvZy1kaXJ0eSBpbml0 IGNvZGUgYXMgdGhhdCBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGFuZCB3ZQo+ID4gICAg ICAgKiBkb24ndCB3YW50IHRvIGxlYWsgYW55IGFjdGl2ZSBsb2ctZGlydHkgYml0bWFwcyAqLwo+ ID4tICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS50b3AgPSBfbWZuKElOVkFMSURfTUZOKTsK PiA+KyAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkudG9wID0gSU5WQUxJRF9NRk47Cj4gPgo+ ID4gICAgICAvKgo+ID4gICAgICAgKiBTaGFkb3cgcGFnZXRhYmxlcyBhcmUgdGhlIGRlZmF1bHQs IGJ1dCB3ZSB3aWxsIHVzZQo+ID5kaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tL3NoYWRvdy9j b21tb24uYyBiL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvY29tbW9uLmMKPiA+aW5kZXggMjI2ZTMy ZC4uMWMwYjZjZCAxMDA2NDQKPiA+LS0tIGEveGVuL2FyY2gveDg2L21tL3NoYWRvdy9jb21tb24u Ywo+ID4rKysgYi94ZW4vYXJjaC94ODYvbW0vc2hhZG93L2NvbW1vbi5jCj4gPkBAIC04OCwxMCAr ODgsMTAgQEAgdm9pZCBzaGFkb3dfdmNwdV9pbml0KHN0cnVjdCB2Y3B1ICp2KQo+ID4KPiA+ICAg ICAgZm9yICggaSA9IDA7IGkgPCBTSEFET1dfT09TX1BBR0VTOyBpKysgKQo+ID4gICAgICB7Cj4g Pi0gICAgICAgIHYtPmFyY2gucGFnaW5nLnNoYWRvdy5vb3NbaV0gPSBfbWZuKElOVkFMSURfTUZO KTsKPiA+LSAgICAgICAgdi0+YXJjaC5wYWdpbmcuc2hhZG93Lm9vc19zbmFwc2hvdFtpXSA9IF9t Zm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgICAgICB2LT5hcmNoLnBhZ2luZy5zaGFkb3cub29zW2ld ID0gSU5WQUxJRF9NRk47Cj4gPisgICAgICAgIHYtPmFyY2gucGFnaW5nLnNoYWRvdy5vb3Nfc25h cHNob3RbaV0gPSBJTlZBTElEX01GTjsKPiA+ICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgU0hB RE9XX09PU19GSVhVUFM7IGorKyApCj4gPi0gICAgICAgICAgICB2LT5hcmNoLnBhZ2luZy5zaGFk b3cub29zX2ZpeHVwW2ldLnNtZm5bal0gPSBfbWZuKElOVkFMSURfTUZOKTsKPiA+KyAgICAgICAg ICAgIHYtPmFyY2gucGFnaW5nLnNoYWRvdy5vb3NfZml4dXBbaV0uc21mbltqXSA9IElOVkFMSURf TUZOOwo+ID4gICAgICB9Cj4gPiAgI2VuZGlmCj4gPgo+ID5AQCAtNTkzLDEyICs1OTMsMTIgQEAg c3RhdGljIGlubGluZSBpbnQgb29zX2ZpeHVwX2ZsdXNoX2dtZm4oc3RydWN0IHZjcHUgKnYsIG1m bl90IGdtZm4sCj4gPiAgICAgIGludCBpOwo+ID4gICAgICBmb3IgKCBpID0gMDsgaSA8IFNIQURP V19PT1NfRklYVVBTOyBpKysgKQo+ID4gICAgICB7Cj4gPi0gICAgICAgIGlmICggbWZuX3goZml4 dXAtPnNtZm5baV0pICE9IElOVkFMSURfTUZOICkKPiA+KyAgICAgICAgaWYgKCAhbWZuX2VxKGZp eHVwLT5zbWZuW2ldLCBJTlZBTElEX01GTikgKQo+ID4gICAgICAgICAgewo+ID4gICAgICAgICAg ICAgIHNoX3JlbW92ZV93cml0ZV9hY2Nlc3NfZnJvbV9zbDFwKGQsIGdtZm4sCj4gPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dXAtPnNtZm5baV0sCj4g PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dXAtPm9m ZltpXSk7Cj4gPi0gICAgICAgICAgICBmaXh1cC0+c21mbltpXSA9IF9tZm4oSU5WQUxJRF9NRk4p Owo+ID4rICAgICAgICAgICAgZml4dXAtPnNtZm5baV0gPSBJTlZBTElEX01GTjsKPiA+ICAgICAg ICAgIH0KPiA+ICAgICAgfQo+ID4KPiA+QEAgLTYzNiw3ICs2MzYsNyBAQCB2b2lkIG9vc19maXh1 cF9hZGQoc3RydWN0IGRvbWFpbiAqZCwgbWZuX3QgZ21mbiwKPiA+Cj4gPiAgICAgICAgICAgICAg bmV4dCA9IG9vc19maXh1cFtpZHhdLm5leHQ7Cj4gPgo+ID4tICAgICAgICAgICAgaWYgKCBtZm5f eChvb3NfZml4dXBbaWR4XS5zbWZuW25leHRdKSAhPSBJTlZBTElEX01GTiApCj4gPisgICAgICAg ICAgICBpZiAoICFtZm5fZXEob29zX2ZpeHVwW2lkeF0uc21mbltuZXh0XSwgSU5WQUxJRF9NRk4p ICkKPiA+ICAgICAgICAgICAgICB7Cj4gPiAgICAgICAgICAgICAgICAgIFRSQUNFX1NIQURPV19Q QVRIX0ZMQUcoVFJDRV9TRkxBR19PT1NfRklYVVBfRVZJQ1QpOwo+ID4KPiA+QEAgLTc1Nyw3ICs3 NTcsNyBAQCBzdGF0aWMgdm9pZCBvb3NfaGFzaF9hZGQoc3RydWN0IHZjcHUgKnYsIG1mbl90IGdt Zm4pCj4gPiAgICAgIHN0cnVjdCBvb3NfZml4dXAgZml4dXAgPSB7IC5uZXh0ID0gMCB9Owo+ID4K PiA+ICAgICAgZm9yIChpID0gMDsgaSA8IFNIQURPV19PT1NfRklYVVBTOyBpKysgKQo+ID4tICAg ICAgICBmaXh1cC5zbWZuW2ldID0gX21mbihJTlZBTElEX01GTik7Cj4gPisgICAgICAgIGZpeHVw LnNtZm5baV0gPSBJTlZBTElEX01GTjsKPiA+Cj4gPiAgICAgIGlkeCA9IG1mbl94KGdtZm4pICUg U0hBRE9XX09PU19QQUdFUzsKPiA+ICAgICAgb2lkeCA9IGlkeDsKPiA+QEAgLTgwNyw3ICs4MDcs NyBAQCBzdGF0aWMgdm9pZCBvb3NfaGFzaF9yZW1vdmUoc3RydWN0IGRvbWFpbiAqZCwgbWZuX3Qg Z21mbikKPiA+ICAgICAgICAgICAgICBpZHggPSAoaWR4ICsgMSkgJSBTSEFET1dfT09TX1BBR0VT Owo+ID4gICAgICAgICAgaWYgKCBtZm5feChvb3NbaWR4XSkgPT0gbWZuX3goZ21mbikgKQo+ID4g ICAgICAgICAgewo+ID4tICAgICAgICAgICAgb29zW2lkeF0gPSBfbWZuKElOVkFMSURfTUZOKTsK PiA+KyAgICAgICAgICAgIG9vc1tpZHhdID0gSU5WQUxJRF9NRk47Cj4gPiAgICAgICAgICAgICAg cmV0dXJuOwo+ID4gICAgICAgICAgfQo+ID4gICAgICB9Cj4gPkBAIC04MzgsNyArODM4LDYgQEAg bWZuX3Qgb29zX3NuYXBzaG90X2xvb2t1cChzdHJ1Y3QgZG9tYWluICpkLCBtZm5fdCBnbWZuKQo+ ID4KPiA+ICAgICAgU0hBRE9XX0VSUk9SKCJnbWZuICVseCB3YXMgT09TIGJ1dCBub3QgaW4gaGFz aCB0YWJsZVxuIiwgbWZuX3goZ21mbikpOwo+ID4gICAgICBCVUcoKTsKPiA+LSAgICByZXR1cm4g X21mbihJTlZBTElEX01GTik7CgpDYW4gY29tcGlsZXIgYmUgdW5oYXBweSBhYm91dCB0aGlzPwoK PiA+ICB9Cj4gPgo+ID4gIC8qIFB1bGwgYSBzaW5nbGUgZ3Vlc3QgcGFnZSBiYWNrIGludG8gc3lu YyAqLwo+ID5AQCAtODYyLDcgKzg2MSw3IEBAIHZvaWQgc2hfcmVzeW5jKHN0cnVjdCBkb21haW4g KmQsIG1mbl90IGdtZm4pCj4gPiAgICAgICAgICBpZiAoIG1mbl94KG9vc1tpZHhdKSA9PSBtZm5f eChnbWZuKSApCj4gPiAgICAgICAgICB7Cj4gPiAgICAgICAgICAgICAgX3NoX3Jlc3luYyh2LCBn bWZuLCAmb29zX2ZpeHVwW2lkeF0sIG9vc19zbmFwc2hvdFtpZHhdKTsKPiA+LSAgICAgICAgICAg IG9vc1tpZHhdID0gX21mbihJTlZBTElEX01GTik7Cj4gPisgICAgICAgICAgICBvb3NbaWR4XSA9 IElOVkFMSURfTUZOOwo+ID4gICAgICAgICAgICAgIHJldHVybjsKPiA+ICAgICAgICAgIH0KPiA+ ICAgICAgfQo+ID5AQCAtOTE0LDcgKzkxMyw3IEBAIHZvaWQgc2hfcmVzeW5jX2FsbChzdHJ1Y3Qg dmNwdSAqdiwgaW50IHNraXAsIGludCB0aGlzLCBpbnQgb3RoZXJzKQo+ID4gICAgICAgICAgewo+ ID4gICAgICAgICAgICAgIC8qIFdyaXRlLXByb3RlY3QgYW5kIHN5bmMgY29udGVudHMgKi8KPiA+ ICAgICAgICAgICAgICBfc2hfcmVzeW5jKHYsIG9vc1tpZHhdLCAmb29zX2ZpeHVwW2lkeF0sIG9v c19zbmFwc2hvdFtpZHhdKTsKPiA+LSAgICAgICAgICAgIG9vc1tpZHhdID0gX21mbihJTlZBTElE X01GTik7Cj4gPisgICAgICAgICAgICBvb3NbaWR4XSA9IElOVkFMSURfTUZOOwo+ID4gICAgICAg ICAgfQo+ID4KPiA+ICAgcmVzeW5jX290aGVyczoKPiA+QEAgLTk0OCw3ICs5NDcsNyBAQCB2b2lk IHNoX3Jlc3luY19hbGwoc3RydWN0IHZjcHUgKnYsIGludCBza2lwLCBpbnQgdGhpcywgaW50IG90 aGVycykKPiA+ICAgICAgICAgICAgICB7Cj4gPiAgICAgICAgICAgICAgICAgIC8qIFdyaXRlLXBy b3RlY3QgYW5kIHN5bmMgY29udGVudHMgKi8KPiA+ICAgICAgICAgICAgICAgICAgX3NoX3Jlc3lu YyhvdGhlciwgb29zW2lkeF0sICZvb3NfZml4dXBbaWR4XSwgb29zX3NuYXBzaG90W2lkeF0pOwo+ ID4tICAgICAgICAgICAgICAgIG9vc1tpZHhdID0gX21mbihJTlZBTElEX01GTik7Cj4gPisgICAg ICAgICAgICAgICAgb29zW2lkeF0gPSBJTlZBTElEX01GTjsKPiA+ICAgICAgICAgICAgICB9Cj4g PiAgICAgICAgICB9Cj4gPiAgICAgIH0KPiA+QEAgLTE3ODQsNyArMTc4Myw3IEBAIHZvaWQgKnNo X2VtdWxhdGVfbWFwX2Rlc3Qoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCj4g PiAgICAgIGlmICggbGlrZWx5KCgodmFkZHIgKyBieXRlcyAtIDEpICYgUEFHRV9NQVNLKSA9PSAo dmFkZHIgJiBQQUdFX01BU0spKSApCj4gPiAgICAgIHsKPiA+ICAgICAgICAgIC8qIFdob2xlIHdy aXRlIGZpdHMgb24gYSBzaW5nbGUgcGFnZS4gKi8KPiA+LSAgICAgICAgc2hfY3R4dC0+bWZuWzFd ID0gX21mbihJTlZBTElEX01GTik7Cj4gPisgICAgICAgIHNoX2N0eHQtPm1mblsxXSA9IElOVkFM SURfTUZOOwo+ID4gICAgICAgICAgbWFwID0gbWFwX2RvbWFpbl9wYWdlKHNoX2N0eHQtPm1mblsw XSkgKyAodmFkZHIgJiB+UEFHRV9NQVNLKTsKPiA+ICAgICAgfQo+ID4gICAgICBlbHNlIGlmICgg IWlzX2h2bV9kb21haW4oZCkgKQo+ID5AQCAtMjA4Niw3ICsyMDg1LDcgQEAgbWZuX3Qgc2hhZG93 X2hhc2hfbG9va3VwKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgbiwgdW5zaWduZWQg aW50IHQpCj4gPiAgICAgIH0KPiA+Cj4gPiAgICAgIHBlcmZjX2luY3Ioc2hhZG93X2hhc2hfbG9v a3VwX21pc3MpOwo+ID4tICAgIHJldHVybiBfbWZuKElOVkFMSURfTUZOKTsKPiA+KyAgICByZXR1 cm4gSU5WQUxJRF9NRk47Cj4gPiAgfQo+ID4KPiA+ICB2b2lkIHNoYWRvd19oYXNoX2luc2VydChz dHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIG4sIHVuc2lnbmVkIGludCB0LAo+ID5AQCAt MjkxMCw3ICsyOTA5LDcgQEAgdm9pZCBzaF9yZXNldF9sM191cF9wb2ludGVycyhzdHJ1Y3QgdmNw dSAqdikKPiA+ICAgICAgfTsKPiA+ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjYWxs YmFja19tYXNrID0gU0hGX0wzXzY0Owo+ID4KPiA+LSAgICBoYXNoX3ZjcHVfZm9yZWFjaCh2LCBj YWxsYmFja19tYXNrLCBjYWxsYmFja3MsIF9tZm4oSU5WQUxJRF9NRk4pKTsKPiA+KyAgICBoYXNo X3ZjcHVfZm9yZWFjaCh2LCBjYWxsYmFja19tYXNrLCBjYWxsYmFja3MsIElOVkFMSURfTUZOKTsK PiA+ICB9Cj4gPgo+ID4KPiA+QEAgLTI5NDAsNyArMjkzOSw3IEBAIHN0YXRpYyB2b2lkIHNoX3Vw ZGF0ZV9wYWdpbmdfbW9kZXMoc3RydWN0IHZjcHUgKnYpCj4gPiAgI2VuZGlmIC8qIChTSEFET1df T1BUSU1JWkFUSU9OUyAmIFNIT1BUX1ZJUlRVQUxfVExCKSAqLwo+ID4KPiA+ICAjaWYgKFNIQURP V19PUFRJTUlaQVRJT05TICYgU0hPUFRfT1VUX09GX1NZTkMpCj4gPi0gICAgaWYgKCBtZm5feCh2 LT5hcmNoLnBhZ2luZy5zaGFkb3cub29zX3NuYXBzaG90WzBdKSA9PSBJTlZBTElEX01GTiApCj4g PisgICAgaWYgKCBtZm5fZXEodi0+YXJjaC5wYWdpbmcuc2hhZG93Lm9vc19zbmFwc2hvdFswXSwg SU5WQUxJRF9NRk4pICkKPiA+ICAgICAgewo+ID4gICAgICAgICAgaW50IGk7Cj4gPiAgICAgICAg ICBmb3IoaSA9IDA7IGkgPCBTSEFET1dfT09TX1BBR0VTOyBpKyspCj4gPkBAIC0zMjg0LDcgKzMy ODMsNyBAQCB2b2lkIHNoYWRvd190ZWFyZG93bihzdHJ1Y3QgZG9tYWluICpkLCBpbnQgKnByZWVt cHRlZCkKPiA+ICAgICAgICAgICAgICAgICAgaWYgKCBtZm5fdmFsaWQob29zX3NuYXBzaG90W2ld KSApCj4gPiAgICAgICAgICAgICAgICAgIHsKPiA+ICAgICAgICAgICAgICAgICAgICAgIHNoYWRv d19mcmVlKGQsIG9vc19zbmFwc2hvdFtpXSk7Cj4gPi0gICAgICAgICAgICAgICAgICAgIG9vc19z bmFwc2hvdFtpXSA9IF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgICAgICAgICAgICAgICAgICBv b3Nfc25hcHNob3RbaV0gPSBJTlZBTElEX01GTjsKPiA+ICAgICAgICAgICAgICAgICAgfQo+ID4g ICAgICAgICAgfQo+ID4gICNlbmRpZiAvKiBPT1MgKi8KPiA+QEAgLTM0NDksNyArMzQ0OCw3IEBA IHN0YXRpYyBpbnQgc2hhZG93X29uZV9iaXRfZGlzYWJsZShzdHJ1Y3QgZG9tYWluICpkLCB1MzIg bW9kZSkKPiA+ICAgICAgICAgICAgICAgICAgICAgIGlmICggbWZuX3ZhbGlkKG9vc19zbmFwc2hv dFtpXSkgKQo+ID4gICAgICAgICAgICAgICAgICAgICAgewo+ID4gICAgICAgICAgICAgICAgICAg ICAgICAgIHNoYWRvd19mcmVlKGQsIG9vc19zbmFwc2hvdFtpXSk7Cj4gPi0gICAgICAgICAgICAg ICAgICAgICAgICBvb3Nfc25hcHNob3RbaV0gPSBfbWZuKElOVkFMSURfTUZOKTsKPiA+KyAgICAg ICAgICAgICAgICAgICAgICAgIG9vc19zbmFwc2hvdFtpXSA9IElOVkFMSURfTUZOOwo+ID4gICAg ICAgICAgICAgICAgICAgICAgfQo+ID4gICAgICAgICAgICAgIH0KPiA+ICAjZW5kaWYgLyogT09T ICovCj4gPkBAIC0zNzQ0LDcgKzM3NDMsNyBAQCBpbnQgc2hhZG93X3RyYWNrX2RpcnR5X3ZyYW0o c3RydWN0IGRvbWFpbiAqZCwKPiA+ICAgICAgICAgIG1lbWNweShkaXJ0eV9iaXRtYXAsIGRpcnR5 X3ZyYW0tPmRpcnR5X2JpdG1hcCwgZGlydHlfc2l6ZSk7Cj4gPiAgICAgIGVsc2UKPiA+ICAgICAg ewo+ID4tICAgICAgICB1bnNpZ25lZCBsb25nIG1hcF9tZm4gPSBJTlZBTElEX01GTjsKPiA+KyAg ICAgICAgdW5zaWduZWQgbG9uZyBtYXBfbWZuID0gbWZuX3goSU5WQUxJRF9NRk4pOwo+ID4gICAg ICAgICAgdm9pZCAqbWFwX3NsMXAgPSBOVUxMOwo+ID4KPiA+ICAgICAgICAgIC8qIEl0ZXJhdGUg b3ZlciBWUkFNIHRvIHRyYWNrIGRpcnR5IGJpdHMuICovCj4gPkBAIC0zNzU0LDcgKzM3NTMsNyBA QCBpbnQgc2hhZG93X3RyYWNrX2RpcnR5X3ZyYW0oc3RydWN0IGRvbWFpbiAqZCwKPiA+ICAgICAg ICAgICAgICBpbnQgZGlydHkgPSAwOwo+ID4gICAgICAgICAgICAgIHBhZGRyX3Qgc2wxbWEgPSBk aXJ0eV92cmFtLT5zbDFtYVtpXTsKPiA+Cj4gPi0gICAgICAgICAgICBpZiAobWZuX3gobWZuKSA9 PSBJTlZBTElEX01GTikKPiA+KyAgICAgICAgICAgIGlmICggIW1mbl9lcShtZm4sIElOVkFMSURf TUZOKSApCj4gPiAgICAgICAgICAgICAgewo+ID4gICAgICAgICAgICAgICAgICBkaXJ0eSA9IDE7 Cj4gPiAgICAgICAgICAgICAgfQo+ID5AQCAtMzgzMCw3ICszODI5LDcgQEAgaW50IHNoYWRvd190 cmFja19kaXJ0eV92cmFtKHN0cnVjdCBkb21haW4gKmQsCj4gPiAgICAgICAgICAgICAgZm9yICgg aSA9IGJlZ2luX3BmbjsgaSA8IGVuZF9wZm47IGkrKyApCj4gPiAgICAgICAgICAgICAgewo+ID4g ICAgICAgICAgICAgICAgICBtZm5fdCBtZm4gPSBnZXRfZ2ZuX3F1ZXJ5X3VubG9ja2VkKGQsIGks ICZ0KTsKPiA+LSAgICAgICAgICAgICAgICBpZiAoIG1mbl94KG1mbikgIT0gSU5WQUxJRF9NRk4g KQo+ID4rICAgICAgICAgICAgICAgIGlmICggIW1mbl9lcShtZm4sIElOVkFMSURfTUZOKSApCj4g PiAgICAgICAgICAgICAgICAgICAgICBmbHVzaF90bGIgfD0gc2hfcmVtb3ZlX3dyaXRlX2FjY2Vz cyhkLCBtZm4sIDEsIDApOwo+ID4gICAgICAgICAgICAgIH0KPiA+ICAgICAgICAgICAgICBkaXJ0 eV92cmFtLT5sYXN0X2RpcnR5ID0gLTE7Cj4gPkBAIC0zOTY4LDcgKzM5NjcsNyBAQCB2b2lkIHNo YWRvd19hdWRpdF90YWJsZXMoc3RydWN0IHZjcHUgKnYpCj4gPiAgICAgICAgICB9Cj4gPiAgICAg IH0KPiA+Cj4gPi0gICAgaGFzaF92Y3B1X2ZvcmVhY2godiwgbWFzaywgY2FsbGJhY2tzLCBfbWZu KElOVkFMSURfTUZOKSk7Cj4gPisgICAgaGFzaF92Y3B1X2ZvcmVhY2godiwgbWFzaywgY2FsbGJh Y2tzLCBJTlZBTElEX01GTl9UKTsKCldoYXQgaXMgSU5WQUxJRF9NRk5fVD8KCj4gPiAgfQo+ID4K PiA+ICAjZW5kaWYgLyogU2hhZG93IGF1ZGl0ICovCj4gPmRpZmYgLS1naXQgYS94ZW4vYXJjaC94 ODYvbW0vc2hhZG93L211bHRpLmMgYi94ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRpLmMKPiA+ aW5kZXggZGZlNTlhMi4uZjg5MmUyZiAxMDA2NDQKPiA+LS0tIGEveGVuL2FyY2gveDg2L21tL3No YWRvdy9tdWx0aS5jCj4gPisrKyBiL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvbXVsdGkuYwo+ID5A QCAtMTc3LDcgKzE3Nyw3IEBAIHNoX3dhbGtfZ3Vlc3RfdGFibGVzKHN0cnVjdCB2Y3B1ICp2LCB1 bnNpZ25lZCBsb25nIHZhLCB3YWxrX3QgKmd3LAo+ID4gIHsKPiA+ICAgICAgcmV0dXJuIGd1ZXN0 X3dhbGtfdGFibGVzKHYsIHAybV9nZXRfaG9zdHAybSh2LT5kb21haW4pLCB2YSwgZ3csIHBmZWMs Cj4gPiAgI2lmIEdVRVNUX1BBR0lOR19MRVZFTFMgPT0gMyAvKiBQQUUgKi8KPiA+LSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX21mbihJTlZBTElEX01GTiksCj4gPisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIElOVkFMSURfTUZOLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdi0+YXJjaC5wYWdpbmcuc2hhZG93LmdsM2UKPiA+ICAjZWxzZSAvKiAzMiBvciA2NCAq Lwo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZXRhYmxlX2dldF9tZm4odi0+ YXJjaC5ndWVzdF90YWJsZSksCj4gPkBAIC0zMzYsMzIgKzMzNiwzMiBAQCBzdGF0aWMgdm9pZCBz aF9hdWRpdF9ndyhzdHJ1Y3QgdmNwdSAqdiwgd2Fsa190ICpndykKPiA+ICAgICAgaWYgKCBtZm5f dmFsaWQoZ3ctPmw0bWZuKQo+ID4gICAgICAgICAgICYmIG1mbl92YWxpZCgoc21mbiA9IGdldF9z aGFkb3dfc3RhdHVzKGQsIGd3LT5sNG1mbiwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTSF90eXBlX2w0X3NoYWRvdykpKSApCj4gPi0gICAgICAg ICh2b2lkKSBzaF9hdWRpdF9sNF90YWJsZSh2LCBzbWZuLCBfbWZuKElOVkFMSURfTUZOKSk7Cj4g PisgICAgICAgICh2b2lkKSBzaF9hdWRpdF9sNF90YWJsZSh2LCBzbWZuLCBJTlZBTElEX01GTik7 Cj4gPiAgICAgIGlmICggbWZuX3ZhbGlkKGd3LT5sM21mbikKPiA+ICAgICAgICAgICAmJiBtZm5f dmFsaWQoKHNtZm4gPSBnZXRfc2hhZG93X3N0YXR1cyhkLCBndy0+bDNtZm4sCj4gPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0hfdHlwZV9sM19zaGFk b3cpKSkgKQo+ID4tICAgICAgICAodm9pZCkgc2hfYXVkaXRfbDNfdGFibGUodiwgc21mbiwgX21m bihJTlZBTElEX01GTikpOwo+ID4rICAgICAgICAodm9pZCkgc2hfYXVkaXRfbDNfdGFibGUodiwg c21mbiwgSU5WQUxJRF9NRk4pOwo+ID4gICNlbmRpZiAvKiBQQUUgb3IgNjQuLi4gKi8KPiA+ICAg ICAgaWYgKCBtZm5fdmFsaWQoZ3ctPmwybWZuKSApCj4gPiAgICAgIHsKPiA+ICAgICAgICAgIGlm ICggbWZuX3ZhbGlkKChzbWZuID0gZ2V0X3NoYWRvd19zdGF0dXMoZCwgZ3ctPmwybWZuLAo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSF90eXBl X2wyX3NoYWRvdykpKSApCj4gPi0gICAgICAgICAgICAodm9pZCkgc2hfYXVkaXRfbDJfdGFibGUo diwgc21mbiwgX21mbihJTlZBTElEX01GTikpOwo+ID4rICAgICAgICAgICAgKHZvaWQpIHNoX2F1 ZGl0X2wyX3RhYmxlKHYsIHNtZm4sIElOVkFMSURfTUZOKTsKPiA+ICAjaWYgR1VFU1RfUEFHSU5H X0xFVkVMUyA9PSAzCj4gPiAgICAgICAgICBpZiAoIG1mbl92YWxpZCgoc21mbiA9IGdldF9zaGFk b3dfc3RhdHVzKGQsIGd3LT5sMm1mbiwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU0hfdHlwZV9sMmhfc2hhZG93KSkpICkKPiA+LSAgICAgICAg ICAgICh2b2lkKSBzaF9hdWRpdF9sMl90YWJsZSh2LCBzbWZuLCBfbWZuKElOVkFMSURfTUZOKSk7 Cj4gPisgICAgICAgICAgICAodm9pZCkgc2hfYXVkaXRfbDJfdGFibGUodiwgc21mbiwgSU5WQUxJ RF9NRk4pOwo+ID4gICNlbmRpZgo+ID4gICAgICB9Cj4gPiAgICAgIGlmICggbWZuX3ZhbGlkKGd3 LT5sMW1mbikKPiA+ICAgICAgICAgICAmJiBtZm5fdmFsaWQoKHNtZm4gPSBnZXRfc2hhZG93X3N0 YXR1cyhkLCBndy0+bDFtZm4sCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU0hfdHlwZV9sMV9zaGFkb3cpKSkgKQo+ID4tICAgICAgICAodm9pZCkg c2hfYXVkaXRfbDFfdGFibGUodiwgc21mbiwgX21mbihJTlZBTElEX01GTikpOwo+ID4rICAgICAg ICAodm9pZCkgc2hfYXVkaXRfbDFfdGFibGUodiwgc21mbiwgSU5WQUxJRF9NRk4pOwo+ID4gICAg ICBlbHNlIGlmICggKGd1ZXN0X2wyZV9nZXRfZmxhZ3MoZ3ctPmwyZSkgJiBfUEFHRV9QUkVTRU5U KQo+ID4gICAgICAgICAgICAgICAgJiYgKGd1ZXN0X2wyZV9nZXRfZmxhZ3MoZ3ctPmwyZSkgJiBf UEFHRV9QU0UpCj4gPiAgICAgICAgICAgICAgICAmJiBtZm5fdmFsaWQoCj4gPiAgICAgICAgICAg ICAgICAoc21mbiA9IGdldF9mbDFfc2hhZG93X3N0YXR1cyhkLCBndWVzdF9sMmVfZ2V0X2dmbihn dy0+bDJlKSkpKSApCj4gPi0gICAgICAgICh2b2lkKSBzaF9hdWRpdF9mbDFfdGFibGUodiwgc21m biwgX21mbihJTlZBTElEX01GTikpOwo+ID4rICAgICAgICAodm9pZCkgc2hfYXVkaXRfZmwxX3Rh YmxlKHYsIHNtZm4sIElOVkFMSURfTUZOKTsKPiA+ICB9Cj4gPgo+ID4gICNlbHNlCj4gPkBAIC0x NzUyLDcgKzE3NTIsNyBAQCBzdGF0aWMgc2hhZG93X2wyZV90ICogc2hhZG93X2dldF9hbmRfY3Jl YXRlX2wyZShzdHJ1Y3QgdmNwdSAqdiwKPiA+ICB7Cj4gPiAgI2lmIEdVRVNUX1BBR0lOR19MRVZF TFMgPj0gNCAvKiA2NGJpdC4uLiAqLwo+ID4gICAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9t YWluOwo+ID4tICAgIG1mbl90IHNsM21mbiA9IF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgIG1m bl90IHNsM21mbiA9IElOVkFMSURfTUZOOwo+ID4gICAgICBzaGFkb3dfbDNlX3QgKnNsM2U7Cj4g PiAgICAgIGlmICggIW1mbl92YWxpZChndy0+bDJtZm4pICkgcmV0dXJuIE5VTEw7IC8qIE5vIGd1 ZXN0IHBhZ2UuICovCj4gPiAgICAgIC8qIEdldCB0aGUgbDNlICovCj4gPkBAIC0yMTU4LDcgKzIx NTgsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2dsNGUoc3RydWN0IHZjcHUgKnYsIHZvaWQgKm5l d19nZSwgbWZuX3Qgc2w0bWZuLCB2b2lkICpzZSkKPiA+ICAgICAgc2hhZG93X2w0ZV90IG5ld19z bDRlOwo+ID4gICAgICBndWVzdF9sNGVfdCBuZXdfZ2w0ZSA9ICooZ3Vlc3RfbDRlX3QgKiluZXdf Z2U7Cj4gPiAgICAgIHNoYWRvd19sNGVfdCAqc2w0cCA9IHNlOwo+ID4tICAgIG1mbl90IHNsM21m biA9IF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgIG1mbl90IHNsM21mbiA9IElOVkFMSURfTUZO Owo+ID4gICAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOwo+ID4gICAgICBwMm1fdHlw ZV90IHAybXQ7Cj4gPiAgICAgIGludCByZXN1bHQgPSAwOwo+ID5AQCAtMjIxNyw3ICsyMjE3LDcg QEAgc3RhdGljIGludCB2YWxpZGF0ZV9nbDNlKHN0cnVjdCB2Y3B1ICp2LCB2b2lkICpuZXdfZ2Us IG1mbl90IHNsM21mbiwgdm9pZCAqc2UpCj4gPiAgICAgIHNoYWRvd19sM2VfdCBuZXdfc2wzZTsK PiA+ICAgICAgZ3Vlc3RfbDNlX3QgbmV3X2dsM2UgPSAqKGd1ZXN0X2wzZV90ICopbmV3X2dlOwo+ ID4gICAgICBzaGFkb3dfbDNlX3QgKnNsM3AgPSBzZTsKPiA+LSAgICBtZm5fdCBzbDJtZm4gPSBf bWZuKElOVkFMSURfTUZOKTsKPiA+KyAgICBtZm5fdCBzbDJtZm4gPSBJTlZBTElEX01GTjsKPiA+ ICAgICAgcDJtX3R5cGVfdCBwMm10Owo+ID4gICAgICBpbnQgcmVzdWx0ID0gMDsKPiA+Cj4gPkBA IC0yMjUwLDcgKzIyNTAsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2dsMmUoc3RydWN0IHZjcHUg KnYsIHZvaWQgKm5ld19nZSwgbWZuX3Qgc2wybWZuLCB2b2lkICpzZSkKPiA+ICAgICAgc2hhZG93 X2wyZV90IG5ld19zbDJlOwo+ID4gICAgICBndWVzdF9sMmVfdCBuZXdfZ2wyZSA9ICooZ3Vlc3Rf bDJlX3QgKiluZXdfZ2U7Cj4gPiAgICAgIHNoYWRvd19sMmVfdCAqc2wycCA9IHNlOwo+ID4tICAg IG1mbl90IHNsMW1mbiA9IF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgIG1mbl90IHNsMW1mbiA9 IElOVkFMSURfTUZOOwo+ID4gICAgICBwMm1fdHlwZV90IHAybXQ7Cj4gPiAgICAgIGludCByZXN1 bHQgPSAwOwo+ID4KPiA+QEAgLTI2MDgsNyArMjYwOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBj aGVja19mb3JfZWFybHlfdW5zaGFkb3coc3RydWN0IHZjcHUgKnYsIG1mbl90IGdtZm4pCj4gPiAg c3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2Vhcmx5X3Vuc2hhZG93KHN0cnVjdCB2Y3B1ICp2KQo+ ID4gIHsKPiA+ICAjaWYgU0hBRE9XX09QVElNSVpBVElPTlMgJiBTSE9QVF9FQVJMWV9VTlNIQURP Vwo+ID4tICAgIHYtPmFyY2gucGFnaW5nLnNoYWRvdy5sYXN0X2VtdWxhdGVkX21mbl9mb3JfdW5z aGFkb3cgPSBJTlZBTElEX01GTjsKPiA+KyAgICB2LT5hcmNoLnBhZ2luZy5zaGFkb3cubGFzdF9l bXVsYXRlZF9tZm5fZm9yX3Vuc2hhZG93ID0gbWZuX3goSU5WQUxJRF9NRk4pOwo+ID4gICNlbmRp Zgo+ID4gIH0KPiA+Cj4gPkBAIC00MTA1LDEwICs0MTA1LDEwIEBAIHNoX3VwZGF0ZV9jcjMoc3Ry dWN0IHZjcHUgKnYsIGludCBkb19sb2NraW5nKQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA/IFNIX3R5cGVfbDJoX3NoYWRvdwo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNIX3R5cGVfbDJfc2hhZG93KTsKPiA+ ICAgICAgICAgICAgICAgICAgZWxzZQo+ID4tICAgICAgICAgICAgICAgICAgICBzaF9zZXRfdG9w bGV2ZWxfc2hhZG93KHYsIGksIF9tZm4oSU5WQUxJRF9NRk4pLCAwKTsKPiA+KyAgICAgICAgICAg ICAgICAgICAgc2hfc2V0X3RvcGxldmVsX3NoYWRvdyh2LCBpLCBJTlZBTElEX01GTiwgMCk7Cj4g PiAgICAgICAgICAgICAgfQo+ID4gICAgICAgICAgICAgIGVsc2UKPiA+LSAgICAgICAgICAgICAg ICBzaF9zZXRfdG9wbGV2ZWxfc2hhZG93KHYsIGksIF9tZm4oSU5WQUxJRF9NRk4pLCAwKTsKPiA+ KyAgICAgICAgICAgICAgICBzaF9zZXRfdG9wbGV2ZWxfc2hhZG93KHYsIGksIElOVkFMSURfTUZO LCAwKTsKPiA+ICAgICAgICAgIH0KPiA+ICAgICAgfQo+ID4gICNlbGlmIEdVRVNUX1BBR0lOR19M RVZFTFMgPT0gNAo+ID5AQCAtNDUzMSw3ICs0NTMxLDcgQEAgc3RhdGljIHZvaWQgc2hfcGFnZXRh YmxlX2R5aW5nKHN0cnVjdCB2Y3B1ICp2LCBwYWRkcl90IGdwYSkKPiA+Cj4gPiAgICAgICAgICBp ZiAoIGZhc3RfcGF0aCApIHsKPiA+ICAgICAgICAgICAgICBpZiAoIHBhZ2V0YWJsZV9pc19udWxs KHYtPmFyY2guc2hhZG93X3RhYmxlW2ldKSApCj4gPi0gICAgICAgICAgICAgICAgc21mbiA9IF9t Zm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgICAgICAgICAgICAgIHNtZm4gPSBJTlZBTElEX01GTjsK PiA+ICAgICAgICAgICAgICBlbHNlCj4gPiAgICAgICAgICAgICAgICAgIHNtZm4gPSBfbWZuKHBh Z2V0YWJsZV9nZXRfcGZuKHYtPmFyY2guc2hhZG93X3RhYmxlW2ldKSk7Cj4gPiAgICAgICAgICB9 Cj4gPkBAIC00NTQwLDggKzQ1NDAsOCBAQCBzdGF0aWMgdm9pZCBzaF9wYWdldGFibGVfZHlpbmco c3RydWN0IHZjcHUgKnYsIHBhZGRyX3QgZ3BhKQo+ID4gICAgICAgICAgICAgIC8qIHJldHJpZXZp bmcgdGhlIGwycyAqLwo+ID4gICAgICAgICAgICAgIGdtZm4gPSBnZXRfZ2ZuX3F1ZXJ5X3VubG9j a2VkKGQsIGdmbl94KGd1ZXN0X2wzZV9nZXRfZ2ZuKGdsM2VbaV0pKSwKPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcDJtdCk7Cj4gPi0gICAgICAgICAgICBz bWZuID0gdW5saWtlbHkobWZuX3goZ21mbikgPT0gSU5WQUxJRF9NRk4pCj4gPi0gICAgICAgICAg ICAgICAgICAgPyBfbWZuKElOVkFMSURfTUZOKQo+ID4rICAgICAgICAgICAgc21mbiA9IHVubGlr ZWx5KG1mbl9lcShnbWZuLCBJTlZBTElEX01GTikpCj4gPisgICAgICAgICAgICAgICAgICAgPyBJ TlZBTElEX01GTgo+ID4gICAgICAgICAgICAgICAgICAgICA6IHNoYWRvd19oYXNoX2xvb2t1cChk LCBtZm5feChnbWZuKSwgU0hfdHlwZV9sMl9wYWVfc2hhZG93KTsKPiA+ICAgICAgICAgIH0KPiA+ Cj4gPkBAIC00ODQ2LDcgKzQ4NDYsNyBAQCBpbnQgc2hfYXVkaXRfZmwxX3RhYmxlKHN0cnVjdCB2 Y3B1ICp2LCBtZm5fdCBzbDFtZm4sIG1mbl90IHgpCj4gPiAgewo+ID4gICAgICBndWVzdF9sMWVf dCAqZ2wxZSwgZTsKPiA+ICAgICAgc2hhZG93X2wxZV90ICpzbDFlOwo+ID4tICAgIG1mbl90IGds MW1mbiA9IF9tZm4oSU5WQUxJRF9NRk4pOwo+ID4rICAgIG1mbl90IGdsMW1mbiA9IElOVkFMSURf TUZOOwo+ID4gICAgICBpbnQgZjsKPiA+ICAgICAgaW50IGRvbmUgPSAwOwo+ID4KPiA+ZGlmZiAt LWdpdCBhL3hlbi9jb21tb24vZG9tYWluLmMgYi94ZW4vY29tbW9uL2RvbWFpbi5jCj4gPmluZGV4 IDQ1MjczZDQuLjQyYzA3ZWUgMTAwNjQ0Cj4gPi0tLSBhL3hlbi9jb21tb24vZG9tYWluLmMKPiA+ KysrIGIveGVuL2NvbW1vbi9kb21haW4uYwo+ID5AQCAtMTE3LDcgKzExNyw3IEBAIHN0YXRpYyB2 b2lkIHZjcHVfaW5mb19yZXNldChzdHJ1Y3QgdmNwdSAqdikKPiA+ICAgICAgdi0+dmNwdV9pbmZv ID0gKCh2LT52Y3B1X2lkIDwgWEVOX0xFR0FDWV9NQVhfVkNQVVMpCj4gPiAgICAgICAgICAgICAg ICAgICAgICA/ICh2Y3B1X2luZm9fdCAqKSZzaGFyZWRfaW5mbyhkLCB2Y3B1X2luZm9bdi0+dmNw dV9pZF0pCj4gPiAgICAgICAgICAgICAgICAgICAgICA6ICZkdW1teV92Y3B1X2luZm8pOwo+ID4t ICAgIHYtPnZjcHVfaW5mb19tZm4gPSBJTlZBTElEX01GTjsKPiA+KyAgICB2LT52Y3B1X2luZm9f bWZuID0gbWZuX3goSU5WQUxJRF9NRk4pOwo+ID4gIH0KPiA+Cj4gPiAgc3RydWN0IHZjcHUgKmFs bG9jX3ZjcHUoCj4gPkBAIC0xMTQxLDcgKzExNDEsNyBAQCBpbnQgbWFwX3ZjcHVfaW5mbyhzdHJ1 Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9uZyBnZm4sIHVuc2lnbmVkIG9mZnNldCkKPiA+ICAgICAg aWYgKCBvZmZzZXQgPiAoUEFHRV9TSVpFIC0gc2l6ZW9mKHZjcHVfaW5mb190KSkgKQo+ID4gICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPgo+ID4tICAgIGlmICggdi0+dmNwdV9pbmZvX21mbiAh PSBJTlZBTElEX01GTiApCj4gPisgICAgaWYgKCB2LT52Y3B1X2luZm9fbWZuICE9IG1mbl94KElO VkFMSURfTUZOKSApCj4gPiAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+Cj4gPiAgICAgIC8q IFJ1biB0aGlzIGNvbW1hbmQgb24geW91cnNlbGYgb3Igb24gb3RoZXIgb2ZmbGluZSBWQ1BVUy4g Ki8KPiA+QEAgLTEyMDUsNyArMTIwNSw3IEBAIHZvaWQgdW5tYXBfdmNwdV9pbmZvKHN0cnVjdCB2 Y3B1ICp2KQo+ID4gIHsKPiA+ICAgICAgdW5zaWduZWQgbG9uZyBtZm47Cj4gPgo+ID4tICAgIGlm ICggdi0+dmNwdV9pbmZvX21mbiA9PSBJTlZBTElEX01GTiApCj4gPisgICAgaWYgKCB2LT52Y3B1 X2luZm9fbWZuID09IG1mbl94KElOVkFMSURfTUZOKSApCj4gPiAgICAgICAgICByZXR1cm47Cj4g Pgo+ID4gICAgICBtZm4gPSB2LT52Y3B1X2luZm9fbWZuOwo+ID5kaWZmIC0tZ2l0IGEveGVuL2Nv bW1vbi9ncmFudF90YWJsZS5jIGIveGVuL2NvbW1vbi9ncmFudF90YWJsZS5jCj4gPmluZGV4IDNm MTU1NDMuLmVjYWNlMDcgMTAwNjQ0Cj4gPi0tLSBhL3hlbi9jb21tb24vZ3JhbnRfdGFibGUuYwo+ ID4rKysgYi94ZW4vY29tbW9uL2dyYW50X3RhYmxlLmMKPiA+QEAgLTI0NCw3ICsyNDQsNyBAQCBz dGF0aWMgaW50IF9fZ2V0X3BhZ2VkX2ZyYW1lKHVuc2lnbmVkIGxvbmcgZ2ZuLCB1bnNpZ25lZCBs b25nICpmcmFtZSwgc3RydWN0IHBhZwo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChyZWFkb25seSkgPyBQMk1fQUxMT0MgOiBQMk1fVU5TSEFSRSk7Cj4gPiAgICAgIGlmICggISgq cGFnZSkgKQo+ID4gICAgICB7Cj4gPi0gICAgICAgICpmcmFtZSA9IElOVkFMSURfTUZOOwo+ID4r ICAgICAgICAqZnJhbWUgPSBtZm5feChJTlZBTElEX01GTik7Cj4gPiAgICAgICAgICBpZiAoIHAy bV9pc19zaGFyZWQocDJtdCkgKQo+ID4gICAgICAgICAgICAgIHJldHVybiBHTlRTVF9lYWdhaW47 Cj4gPiAgICAgICAgICBpZiAoIHAybV9pc19wYWdpbmcocDJtdCkgKQo+ID5AQCAtMjYwLDcgKzI2 MCw3IEBAIHN0YXRpYyBpbnQgX19nZXRfcGFnZWRfZnJhbWUodW5zaWduZWQgbG9uZyBnZm4sIHVu c2lnbmVkIGxvbmcgKmZyYW1lLCBzdHJ1Y3QgcGFnCj4gPiAgICAgICpwYWdlID0gbWZuX3ZhbGlk KCpmcmFtZSkgPyBtZm5fdG9fcGFnZSgqZnJhbWUpIDogTlVMTDsKPiA+ICAgICAgaWYgKCAoISgq cGFnZSkpIHx8ICghZ2V0X3BhZ2UoKnBhZ2UsIHJkKSkgKQo+ID4gICAgICB7Cj4gPi0gICAgICAg ICpmcmFtZSA9IElOVkFMSURfTUZOOwo+ID4rICAgICAgICAqZnJhbWUgPSBtZm5feChJTlZBTElE X01GTik7Cj4gPiAgICAgICAgICAqcGFnZSA9IE5VTEw7Cj4gPiAgICAgICAgICByYyA9IEdOVFNU X2JhZF9wYWdlOwo+ID4gICAgICB9Cj4gPkBAIC0xNzg1LDcgKzE3ODUsNyBAQCBnbnR0YWJfdHJh bnNmZXIoCj4gPiAgICAgICAgICAgICAgcDJtX3R5cGVfdCBfX3AybXQ7Cj4gPiAgICAgICAgICAg ICAgbWZuID0gbWZuX3goZ2V0X2dmbl91bnNoYXJlKGQsIGdvcC5tZm4sICZfX3AybXQpKTsKPiA+ ICAgICAgICAgICAgICBpZiAoIHAybV9pc19zaGFyZWQoX19wMm10KSB8fCAhcDJtX2lzX3ZhbGlk KF9fcDJtdCkgKQo+ID4tICAgICAgICAgICAgICAgIG1mbiA9IElOVkFMSURfTUZOOwo+ID4rICAg ICAgICAgICAgICAgIG1mbiA9IG1mbl94KElOVkFMSURfTUZOKTsKPiA+ICAgICAgICAgIH0KPiA+ ICAjZWxzZQo+ID4gICAgICAgICAgbWZuID0gbWZuX3goZ2ZuX3RvX21mbihkLCBfZ2ZuKGdvcC5t Zm4pKSk7Cj4gPmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vbW0uaCBiL3hlbi9pbmNsdWRl L3hlbi9tbS5oCj4gPmluZGV4IGFmYmIxYTEuLjdmMjA3ZWMgMTAwNjQ0Cj4gPi0tLSBhL3hlbi9p bmNsdWRlL3hlbi9tbS5oCj4gPisrKyBiL3hlbi9pbmNsdWRlL3hlbi9tbS5oCj4gPkBAIC01NSw3 ICs1NSw3IEBACj4gPgo+ID4gIFRZUEVfU0FGRSh1bnNpZ25lZCBsb25nLCBtZm4pOwo+ID4gICNk ZWZpbmUgUFJJX21mbiAgICAgICAgICAiMDVseCIKPiA+LSNkZWZpbmUgSU5WQUxJRF9NRk4gICAg ICAofjBVTCkKPiA+KyNkZWZpbmUgSU5WQUxJRF9NRk4gICAgICBfbWZuKH4wVUwpCj4gPgo+ID4g ICNpZm5kZWYgbWZuX3QKPiA+ICAjZGVmaW5lIG1mbl90IC8qIEdyZXAgZm9kZGVyOiBtZm5fdCwg X21mbigpIGFuZCBtZm5feCgpIGFyZSBkZWZpbmVkIGFib3ZlICovCj4gPgo+IAo+IC0tIAo+IEp1 bGllbiBHcmFsbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==