From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [RFC PATCH 4/6] vm_event: Use slotted channels for sync requests. Date: Thu, 20 Dec 2018 12:05:55 +0000 Message-ID: References: <01b5a66439239a23384c7939d961edbca81e41ae.1545245243.git.ppircalabu@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gZx5y-0003q8-8z for xen-devel@lists.xenproject.org; Thu, 20 Dec 2018 12:06:30 +0000 In-Reply-To: <01b5a66439239a23384c7939d961edbca81e41ae.1545245243.git.ppircalabu@bitdefender.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: 'Petre Pircalabu' , "xen-devel@lists.xenproject.org" Cc: Stefano Stabellini , Wei Liu , Razvan Cojocaru , Konrad Rzeszutek Wilk , Andrew Cooper , "Tim (Xen.org)" , George Dunlap , Julien Grall , Tamas K Lengyel , Jan Beulich , Ian Jackson , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBYZW4tZGV2ZWwgW21haWx0bzp4 ZW4tZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmDQo+IE9mIFBl dHJlIFBpcmNhbGFidQ0KPiBTZW50OiAxOSBEZWNlbWJlciAyMDE4IDE4OjUyDQo+IFRvOiB4ZW4t ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gQ2M6IFBldHJlIFBpcmNhbGFidSA8cHBpcmNh bGFidUBiaXRkZWZlbmRlci5jb20+OyBTdGVmYW5vIFN0YWJlbGxpbmkNCj4gPHNzdGFiZWxsaW5p QGtlcm5lbC5vcmc+OyBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPjsgUmF6dmFuIENvam9j YXJ1DQo+IDxyY29qb2NhcnVAYml0ZGVmZW5kZXIuY29tPjsgS29ucmFkIFJ6ZXN6dXRlayBXaWxr DQo+IDxrb25yYWQud2lsa0BvcmFjbGUuY29tPjsgR2VvcmdlIER1bmxhcCA8R2VvcmdlLkR1bmxh cEBjaXRyaXguY29tPjsgQW5kcmV3DQo+IENvb3BlciA8QW5kcmV3LkNvb3BlcjNAY2l0cml4LmNv bT47IElhbiBKYWNrc29uIDxJYW4uSmFja3NvbkBjaXRyaXguY29tPjsNCj4gVGltIChYZW4ub3Jn KSA8dGltQHhlbi5vcmc+OyBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPjsgVGFt YXMgSw0KPiBMZW5neWVsIDx0YW1hc0B0a2xlbmd5ZWwuY29tPjsgSmFuIEJldWxpY2ggPGpiZXVs aWNoQHN1c2UuY29tPjsgUm9nZXIgUGF1DQo+IE1vbm5lIDxyb2dlci5wYXVAY2l0cml4LmNvbT4N Cj4gU3ViamVjdDogW1hlbi1kZXZlbF0gW1JGQyBQQVRDSCA0LzZdIHZtX2V2ZW50OiBVc2Ugc2xv dHRlZCBjaGFubmVscyBmb3INCj4gc3luYyByZXF1ZXN0cy4NCj4gDQo+IEluIGhpZ2ggdGhyb3Vn aHB1dCBpbnRyb3NwZWN0aW9uIHNjZW5hcmlvcyB3aGVyZSBsb3RzIG9mIG1vbml0b3INCj4gdm1f ZXZlbnRzIGFyZSBnZW5lcmF0ZWQsIHRoZSByaW5nIGJ1ZmZlciBjYW4gZmlsbCB1cCBiZWZvcmUg dGhlIG1vbml0b3INCj4gYXBwbGljYXRpb24gZ2V0cyBhIGNoYW5jZSB0byBoYW5kbGUgYWxsIHRo ZSByZXF1ZXN0cyB0aHVzIGJsb2NraW5nDQo+IG90aGVyIHZjcHVzIHdoaWNoIHdpbGwgaGF2ZSB0 byB3YWl0IGZvciBhIHNsb3QgdG8gYmVjb21lIGF2YWlsYWJsZS4NCj4gDQo+IFRoaXMgcGF0Y2gg YWRkcyBzdXBwb3J0IGZvciBhIGRpZmZlcmVudCBtZWNoYW5pc20gdG8gaGFuZGxlIHN5bmNocm9u b3VzDQo+IHZtX2V2ZW50IHJlcXVlc3RzIC8gcmVzcG9uc2VzLiBBcyBlYWNoIHN5bmNocm9ub3Vz IHJlcXVlc3QgcGF1c2VzIHRoZQ0KPiB2Y3B1IHVudGlsIHRoZSBjb3JyZXNwb25zaW5nIHJlc3Bv bnNlIGlzIGhhbmRsZWQsIGl0IGNhbiBiZSBzdG9yZWQgaW4NCj4gYSBzbG90dGVkIG1lbW9yeSBi dWZmZXIgKG9uZSBwZXIgdmNwdSkgc2hhcmVkIGJldHdlZW4gdGhlIGh5cGVydmlzb3IgYW5kDQo+ IHRoZSBjb250cm9sbGluZyBkb21haW4uIFRoZSBhc3luY2hyb25vdXMgdm1fZXZlbnQgcmVxdWVz dHMgd2lsbCBiZSBzZW50DQo+IHRvIHRoZSBjb250cm9sbGluZyBkb21haW4gdXNpbmcgYSByaW5n IGJ1ZmZlciwgYnV0IHdpdGhvdXQgYmxvY2tpbmcgdGhlDQo+IHZjcHUgYXMgbm8gcmVzcG9uc2Ug aXMgcmVxdWlyZWQuDQo+IA0KPiBUaGUgbWVtb3J5IGZvciB0aGUgYXN5bmNocm9ub3VzIHJpbmcg YW5kIHRoZSBzeW5jaHJvbm91cyBjaGFubmVscyB3aWxsDQo+IGJlIGFsbG9jYXRlZCBmcm9tIGRv bWhlYXAgYW5kIG1hcHBlZCB0byB0aGUgY29udHJvbGxpbmcgZG9tYWluIHVzaW5nIHRoZQ0KPiBm b3JlaWdubWVtb3J5X21hcF9yZXNvdXJjZSBpbnRlcmZhY2UuIFVubGlrZSB0aGUgY3VycmVudCBp bXBsZW1lbnRhdGlvbiwNCj4gdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgbm90IHBhcnQgb2YgdGhl IHRhcmdldCBEb21VLCBzbyB0aGV5IHdpbGwgbm90IGJlDQo+IHJlY2xhaW1lZCB3aGVuIHRoZSB2 bV9ldmVudCBkb21haW4gaXMgZGlzYWJsZWQuDQoNCldoeSByZS1pbnZlbnQgdGhlIHdoZWVsIGhl cmU/IFRoZSBpb3JlcSBpbmZyYXN0cnVjdHVyZSBhbHJlYWR5IGRvZXMgcHJldHR5IG11Y2ggZXZl cnl0aGluZyB5b3UgbmVlZCBBRkFJQ1QuDQoNCiAgUGF1bA0KDQo+IA0KPiBTaWduZWQtb2ZmLWJ5 OiBQZXRyZSBQaXJjYWxhYnUgPHBwaXJjYWxhYnVAYml0ZGVmZW5kZXIuY29tPg0KPiAtLS0NCj4g IHRvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oIHwgIDExICsNCj4gIHRvb2xzL2xpYnhjL3hj X21vbml0b3IuYyAgICAgIHwgIDM2ICsrKw0KPiAgdG9vbHMvbGlieGMveGNfcHJpdmF0ZS5oICAg ICAgfCAgMTQgKysNCj4gIHRvb2xzL2xpYnhjL3hjX3ZtX2V2ZW50LmMgICAgIHwgIDc0ICsrKysr LQ0KPiAgeGVuL2FyY2gveDg2L21tLmMgICAgICAgICAgICAgfCAgIDcgKw0KPiAgeGVuL2NvbW1v bi92bV9ldmVudC5jICAgICAgICAgfCA1MTUNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tDQo+ICB4ZW4vaW5jbHVkZS9wdWJsaWMvZG9tY3RsLmggICB8ICAyNSAr LQ0KPiAgeGVuL2luY2x1ZGUvcHVibGljL21lbW9yeS5oICAgfCAgIDIgKw0KPiAgeGVuL2luY2x1 ZGUvcHVibGljL3ZtX2V2ZW50LmggfCAgMTUgKysNCj4gIHhlbi9pbmNsdWRlL3hlbi92bV9ldmVu dC5oICAgIHwgICA0ICsNCj4gIDEwIGZpbGVzIGNoYW5nZWQsIDY2MCBpbnNlcnRpb25zKCspLCA0 MyBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS90b29scy9saWJ4Yy9pbmNsdWRlL3hl bmN0cmwuaCBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oDQo+IGluZGV4IGRlMGI5OTAu LmZhZDhiYzQgMTAwNjQ0DQo+IC0tLSBhL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oDQo+ ICsrKyBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oDQo+IEBAIC0yMDEyLDYgKzIwMTIs MTcgQEAgaW50IHhjX2dldF9tZW1fYWNjZXNzKHhjX2ludGVyZmFjZSAqeGNoLCB1aW50MzJfdA0K PiBkb21haW5faWQsDQo+ICAgKiBDYWxsZXIgaGFzIHRvIHVubWFwIHRoaXMgcGFnZSB3aGVuIGRv bmUuDQo+ICAgKi8NCj4gIHZvaWQgKnhjX21vbml0b3JfZW5hYmxlKHhjX2ludGVyZmFjZSAqeGNo LCB1aW50MzJfdCBkb21haW5faWQsIHVpbnQzMl90DQo+ICpwb3J0KTsNCj4gKw0KPiArc3RydWN0 IHhlbmZvcmVpZ25tZW1vcnlfcmVzb3VyY2VfaGFuZGxlICp4Y19tb25pdG9yX2VuYWJsZV9leCgN Cj4gKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwNCj4gKyAgICB1aW50MzJfdCBkb21haW5faWQsDQo+ ICsgICAgdm9pZCAqKl9yaW5nX2J1ZmZlciwNCj4gKyAgICB1aW50MzJfdCByaW5nX2ZyYW1lcywN Cj4gKyAgICB1aW50MzJfdCAqcmluZ19wb3J0LA0KPiArICAgIHZvaWQgKipfc3luY19idWZmZXIs DQo+ICsgICAgdWludDMyX3QgKnN5bmNfcG9ydHMsDQo+ICsgICAgdWludDMyX3QgbnJfc3luY19j aGFubmVscyk7DQo+ICsNCj4gIGludCB4Y19tb25pdG9yX2Rpc2FibGUoeGNfaW50ZXJmYWNlICp4 Y2gsIHVpbnQzMl90IGRvbWFpbl9pZCk7DQo+ICBpbnQgeGNfbW9uaXRvcl9yZXN1bWUoeGNfaW50 ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbWFpbl9pZCk7DQo+ICAvKg0KPiBkaWZmIC0tZ2l0IGEv dG9vbHMvbGlieGMveGNfbW9uaXRvci5jIGIvdG9vbHMvbGlieGMveGNfbW9uaXRvci5jDQo+IGlu ZGV4IDcxOGZlOGIuLjRjZWI1MjggMTAwNjQ0DQo+IC0tLSBhL3Rvb2xzL2xpYnhjL3hjX21vbml0 b3IuYw0KPiArKysgYi90b29scy9saWJ4Yy94Y19tb25pdG9yLmMNCj4gQEAgLTQ5LDYgKzQ5LDQy IEBAIHZvaWQgKnhjX21vbml0b3JfZW5hYmxlKHhjX2ludGVyZmFjZSAqeGNoLCB1aW50MzJfdA0K PiBkb21haW5faWQsIHVpbnQzMl90ICpwb3J0KQ0KPiAgICAgIHJldHVybiBidWZmZXI7DQo+ICB9 DQo+IA0KPiArc3RydWN0IHhlbmZvcmVpZ25tZW1vcnlfcmVzb3VyY2VfaGFuZGxlICp4Y19tb25p dG9yX2VuYWJsZV9leCgNCj4gKyAgICB4Y19pbnRlcmZhY2UgKnhjaCwNCj4gKyAgICB1aW50MzJf dCBkb21haW5faWQsDQo+ICsgICAgdm9pZCAqKl9yaW5nX2J1ZmZlciwNCj4gKyAgICB1aW50MzJf dCByaW5nX2ZyYW1lcywNCj4gKyAgICB1aW50MzJfdCAqcmluZ19wb3J0LA0KPiArICAgIHZvaWQg Kipfc3luY19idWZmZXIsDQo+ICsgICAgdWludDMyX3QgKnN5bmNfcG9ydHMsDQo+ICsgICAgdWlu dDMyX3QgbnJfc3luY19jaGFubmVscykNCj4gK3sNCj4gKyAgICB4ZW5mb3JlaWdubWVtb3J5X3Jl c291cmNlX2hhbmRsZSAqZnJlczsNCj4gKyAgICBpbnQgc2F2ZWRfZXJybm87DQo+ICsNCj4gKyAg ICAvKiBQYXVzZSB0aGUgZG9tYWluIGZvciByaW5nIHBhZ2Ugc2V0dXAgKi8NCj4gKyAgICBpZiAo IHhjX2RvbWFpbl9wYXVzZSh4Y2gsIGRvbWFpbl9pZCkgKQ0KPiArICAgIHsNCj4gKyAgICAgICAg UEVSUk9SKCJVbmFibGUgdG8gcGF1c2UgZG9tYWluXG4iKTsNCj4gKyAgICAgICAgcmV0dXJuIE5V TEw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgZnJlcyA9IHhjX3ZtX2V2ZW50X2VuYWJsZV9leCh4 Y2gsIGRvbWFpbl9pZCwNCj4gWEVOX1ZNX0VWRU5UX1RZUEVfTU9OSVRPUiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX3JpbmdfYnVmZmVyLCByaW5nX2ZyYW1lcywgcmluZ19w b3J0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3luY19idWZmZXIsIHN5 bmNfcG9ydHMsDQo+IG5yX3N5bmNfY2hhbm5lbHMpOw0KPiArDQo+ICsgICAgc2F2ZWRfZXJybm8g PSBlcnJubzsNCj4gKyAgICBpZiAoIHhjX2RvbWFpbl91bnBhdXNlKHhjaCwgZG9tYWluX2lkKSAp DQo+ICsgICAgew0KPiArICAgICAgICBpZiAoIGZyZXMgKQ0KPiArICAgICAgICAgICAgc2F2ZWRf ZXJybm8gPSBlcnJubzsNCj4gKyAgICAgICAgUEVSUk9SKCJVbmFibGUgdG8gdW5wYXVzZSBkb21h aW4iKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBlcnJubyA9IHNhdmVkX2Vycm5vOw0KPiArICAg IHJldHVybiBmcmVzOw0KPiArfQ0KPiArDQo+ICBpbnQgeGNfbW9uaXRvcl9kaXNhYmxlKHhjX2lu dGVyZmFjZSAqeGNoLCB1aW50MzJfdCBkb21haW5faWQpDQo+ICB7DQo+ICAgICAgcmV0dXJuIHhj X3ZtX2V2ZW50X2NvbnRyb2woeGNoLCBkb21haW5faWQsDQo+IGRpZmYgLS1naXQgYS90b29scy9s aWJ4Yy94Y19wcml2YXRlLmggYi90b29scy9saWJ4Yy94Y19wcml2YXRlLmgNCj4gaW5kZXggNDgy NDUxYy4uMWY3MDIyMyAxMDA2NDQNCj4gLS0tIGEvdG9vbHMvbGlieGMveGNfcHJpdmF0ZS5oDQo+ ICsrKyBiL3Rvb2xzL2xpYnhjL3hjX3ByaXZhdGUuaA0KPiBAQCAtNDIwLDYgKzQyMCwyMCBAQCBp bnQgeGNfdm1fZXZlbnRfY29udHJvbCh4Y19pbnRlcmZhY2UgKnhjaCwgdWludDMyX3QNCj4gZG9t YWluX2lkLCB1bnNpZ25lZCBpbnQgb3AsDQo+ICB2b2lkICp4Y192bV9ldmVudF9lbmFibGUoeGNf aW50ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbWFpbl9pZCwgaW50IHR5cGUsDQo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnBvcnQpOw0KPiANCj4gKy8qDQo+ICsgKiBFbmFi bGVzIHZtX2V2ZW50IGZvciB1c2luZyB0aGUgeGVuZm9yZWlnbm1lbW9yeV9tYXBfcmVzb3VyY2UN Cj4gaW50ZXJmYWNlLg0KPiArICogVGhlIHZtX2V2ZW50IHR5cGUgY2FuIGJlIFhFTl9WTV9FVkVO VF9UWVBFXyhQQUdJTkcvTU9OSVRPUi9TSEFSSU5HKS4NCj4gKyAqDQo+ICsgKiBUaGUgZnVuY3Rp b24gcmV0dXJuczoNCj4gKyAqICAtIEEgcmluZyBmb3IgYXN5bmNocm9ub3VzIHZtX2V2ZW50cy4N Cj4gKyAqICAtIEEgc2xvdHRlZCBidWZmZXIgZm9yIHN5bmNocm9ub3VzIHZtX2V2ZW50cyAob25l IHNsb3QgcGVyIHZjcHUpDQo+ICsgKiAgLSB4ZW5mb3JlaWdubWVtb3J5X3Jlc291cmNlX2hhbmRs ZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciByZXNvdXJjZQ0KPiBjbGVhbnVwDQo+ICsgKi8NCj4gK3hl bmZvcmVpZ25tZW1vcnlfcmVzb3VyY2VfaGFuZGxlICp4Y192bV9ldmVudF9lbmFibGVfZXgoeGNf aW50ZXJmYWNlDQo+ICp4Y2gsDQo+ICsgICAgdWludDMyX3QgZG9tYWluX2lkLCBpbnQgdHlwZSwN Cj4gKyAgICB2b2lkICoqX3JpbmdfYnVmZmVyLCB1aW50MzJfdCByaW5nX2ZyYW1lcywgdWludDMy X3QgKnJpbmdfcG9ydCwNCj4gKyAgICB2b2lkICoqX3N5bmNfYnVmZmVyLCB1aW50MzJfdCAqc3lu Y19wb3J0cywgdWludDMyX3QNCj4gbnJfc3luY19jaGFubmVscyk7DQo+ICsNCj4gIGludCBkb19k bV9vcCh4Y19pbnRlcmZhY2UgKnhjaCwgdWludDMyX3QgZG9taWQsIHVuc2lnbmVkIGludCBucl9i dWZzLA0KPiAuLi4pOw0KPiANCj4gICNlbmRpZiAvKiBfX1hDX1BSSVZBVEVfSF9fICovDQo+IGRp ZmYgLS1naXQgYS90b29scy9saWJ4Yy94Y192bV9ldmVudC5jIGIvdG9vbHMvbGlieGMveGNfdm1f ZXZlbnQuYw0KPiBpbmRleCA0ZmMyNTQ4Li4wYTk3NmI0IDEwMDY0NA0KPiAtLS0gYS90b29scy9s aWJ4Yy94Y192bV9ldmVudC5jDQo+ICsrKyBiL3Rvb2xzL2xpYnhjL3hjX3ZtX2V2ZW50LmMNCj4g QEAgLTIyLDYgKzIyLDEyIEBADQo+IA0KPiAgI2luY2x1ZGUgInhjX3ByaXZhdGUuaCINCj4gDQo+ ICsjaW5jbHVkZSA8eGVuL3ZtX2V2ZW50Lmg+DQo+ICsNCj4gKyNpZm5kZWYgUEZOX1VQDQo+ICsj ZGVmaW5lIFBGTl9VUCh4KSAgICAgKCgoeCkgKyBQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVCkN Cj4gKyNlbmRpZiAvKiBQRk5fVVAgKi8NCj4gKw0KPiAgaW50IHhjX3ZtX2V2ZW50X2NvbnRyb2wo eGNfaW50ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbWFpbl9pZCwgdW5zaWduZWQNCj4gaW50IG9w LA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR5cGUpDQo+ICB7DQo+ IEBAIC0xMjAsNyArMTI2LDcgQEAgdm9pZCAqeGNfdm1fZXZlbnRfZW5hYmxlKHhjX2ludGVyZmFj ZSAqeGNoLCB1aW50MzJfdA0KPiBkb21haW5faWQsIGludCB0eXBlLA0KPiAgICAgICAgICBnb3Rv IG91dDsNCj4gICAgICB9DQo+IA0KPiAtICAgICpwb3J0ID0gZG9tY3RsLnUudm1fZXZlbnRfb3Au cG9ydDsNCj4gKyAgICAqcG9ydCA9IGRvbWN0bC51LnZtX2V2ZW50X29wLnUuZW5hYmxlLnBvcnQ7 DQo+IA0KPiAgICAgIC8qIFJlbW92ZSB0aGUgcmluZ19wZm4gZnJvbSB0aGUgZ3Vlc3QncyBwaHlz bWFwICovDQo+ICAgICAgcmMgPSB4Y19kb21haW5fZGVjcmVhc2VfcmVzZXJ2YXRpb25fZXhhY3Qo eGNoLCBkb21haW5faWQsIDEsIDAsDQo+ICZyaW5nX3Bmbik7DQo+IEBAIC0xMzgsNiArMTQ0LDcy IEBAIHZvaWQgKnhjX3ZtX2V2ZW50X2VuYWJsZSh4Y19pbnRlcmZhY2UgKnhjaCwgdWludDMyX3QN Cj4gZG9tYWluX2lkLCBpbnQgdHlwZSwNCj4gICAgICByZXR1cm4gcmluZ19wYWdlOw0KPiAgfQ0K PiANCj4gK3hlbmZvcmVpZ25tZW1vcnlfcmVzb3VyY2VfaGFuZGxlICp4Y192bV9ldmVudF9lbmFi bGVfZXgoeGNfaW50ZXJmYWNlDQo+ICp4Y2gsDQo+ICsgICAgdWludDMyX3QgZG9tYWluX2lkLCBp bnQgdHlwZSwNCj4gKyAgICB2b2lkICoqX3JpbmdfYnVmZmVyLCB1aW50MzJfdCByaW5nX2ZyYW1l cywgdWludDMyX3QgKnJpbmdfcG9ydCwNCj4gKyAgICB2b2lkICoqX3N5bmNfYnVmZmVyLCB1aW50 MzJfdCAqc3luY19wb3J0cywgdWludDMyX3QgbnJfc3luY19jaGFubmVscykNCj4gK3sNCj4gKyAg ICBERUNMQVJFX0RPTUNUTDsNCj4gKyAgICBERUNMQVJFX0hZUEVSQ0FMTF9CT1VOQ0Uoc3luY19w b3J0cywgbnJfc3luY19jaGFubmVscyAqDQo+IHNpemVvZih1aW50MzJfdCksDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFhDX0hZUEVSQ0FMTF9CVUZGRVJfQk9VTkNFX09VVCk7DQo+ ICsgICAgeGVuZm9yZWlnbm1lbW9yeV9yZXNvdXJjZV9oYW5kbGUgKmZyZXM7DQo+ICsgICAgdW5z aWduZWQgbG9uZyBucl9mcmFtZXM7DQo+ICsgICAgdm9pZCAqYnVmZmVyOw0KPiArDQo+ICsgICAg aWYgKCAhX3JpbmdfYnVmZmVyIHx8ICFyaW5nX3BvcnQgfHwgIV9zeW5jX2J1ZmZlciB8fCAhc3lu Y19wb3J0cyApDQo+ICsgICAgew0KPiArICAgICAgICBlcnJubyA9IEVJTlZBTDsNCj4gKyAgICAg ICAgcmV0dXJuIE5VTEw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgbnJfZnJhbWVzID0gcmluZ19m cmFtZXMgKyBQRk5fVVAobnJfc3luY19jaGFubmVscyAqIHNpemVvZihzdHJ1Y3QNCj4gdm1fZXZl bnRfc2xvdCkpOw0KPiArDQo+ICsgICAgZnJlcyA9IHhlbmZvcmVpZ25tZW1vcnlfbWFwX3Jlc291 cmNlKHhjaC0+Zm1lbSwgZG9tYWluX2lkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBYRU5NRU1fcmVzb3VyY2Vfdm1fZXZlbnQsIHR5cGUsDQo+IDAsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yX2ZyYW1lcywgJmJ1ZmZl ciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFE IHwgUFJPVF9XUklURSwgMCk7DQo+ICsgICAgaWYgKCAhZnJlcyApDQo+ICsgICAgew0KPiArICAg ICAgICBQRVJST1IoIkNvdWxkIG5vdCBtYXAgdGhlIHZtX2V2ZW50IHBhZ2VzXG4iKTsNCj4gKyAg ICAgICAgcmV0dXJuIE5VTEw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgZG9tY3RsLmNtZCA9IFhF Tl9ET01DVExfdm1fZXZlbnRfb3A7DQo+ICsgICAgZG9tY3RsLmRvbWFpbiA9IGRvbWFpbl9pZDsN Cj4gKyAgICBkb21jdGwudS52bV9ldmVudF9vcC5vcCA9IFhFTl9WTV9FVkVOVF9HRVRfUE9SVFM7 DQo+ICsgICAgZG9tY3RsLnUudm1fZXZlbnRfb3AudHlwZSA9IHR5cGU7DQo+ICsNCj4gKyAgICBp ZiAoIHhjX2h5cGVyY2FsbF9ib3VuY2VfcHJlKHhjaCwgc3luY19wb3J0cykgKQ0KPiArICAgIHsN Cj4gKyAgICAgICAgUEVSUk9SKCJDb3VsZCBub3QgYm91bmNlIG1lbW9yeSBmb3IgWEVOX0RPTUNU TF92bV9ldmVudF9vcCIpOw0KPiArICAgICAgICBlcnJubyA9IEVOT01FTTsNCj4gKyAgICAgICAg cmV0dXJuIE5VTEw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUo ZG9tY3RsLnUudm1fZXZlbnRfb3AudS5nZXRfcG9ydHMuc3luYywNCj4gc3luY19wb3J0cyk7DQo+ ICsNCj4gKyAgICBpZiAoIGRvX2RvbWN0bCh4Y2gsICZkb21jdGwpICkNCj4gKyAgICB7DQo+ICsg ICAgICAgIFBFUlJPUigiRmFpbGVkIHRvIGdldCB2bV9ldmVudCBwb3J0c1xuIik7DQo+ICsgICAg ICAgIGdvdG8gb3V0Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIHhjX2h5cGVyY2FsbF9ib3VuY2Vf cG9zdCh4Y2gsIHN5bmNfcG9ydHMpOw0KPiArICAgICpyaW5nX3BvcnQgPSBkb21jdGwudS52bV9l dmVudF9vcC51LmdldF9wb3J0cy5hc3luYzsNCj4gKw0KPiArICAgICpfc3luY19idWZmZXIgPSBi dWZmZXIgKyByaW5nX2ZyYW1lcyAqIFBBR0VfU0laRTsNCj4gKyAgICAqX3JpbmdfYnVmZmVyID0g YnVmZmVyOw0KPiArDQo+ICsgICAgcmV0dXJuIGZyZXM7DQo+ICsNCj4gK291dDoNCj4gKyAgICB4 Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNoLCBzeW5jX3BvcnRzKTsNCj4gKyAgICBpZiAoIGZy ZXMgKQ0KPiArICAgICAgICB4ZW5mb3JlaWdubWVtb3J5X3VubWFwX3Jlc291cmNlKHhjaC0+Zm1l bSwgZnJlcyk7DQo+ICsgICAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKw0KPiAgLyoNCj4g ICAqIExvY2FsIHZhcmlhYmxlczoNCj4gICAqIG1vZGU6IEMNCj4gZGlmZiAtLWdpdCBhL3hlbi9h cmNoL3g4Ni9tbS5jIGIveGVuL2FyY2gveDg2L21tLmMNCj4gaW5kZXggMTQzMWYzNC4uMjU2YzYz YiAxMDA2NDQNCj4gLS0tIGEveGVuL2FyY2gveDg2L21tLmMNCj4gKysrIGIveGVuL2FyY2gveDg2 L21tLmMNCj4gQEAgLTEwMyw2ICsxMDMsNyBAQA0KPiAgI2luY2x1ZGUgPHhlbi9lZmkuaD4NCj4g ICNpbmNsdWRlIDx4ZW4vZ3JhbnRfdGFibGUuaD4NCj4gICNpbmNsdWRlIDx4ZW4vaHlwZXJjYWxs Lmg+DQo+ICsjaW5jbHVkZSA8eGVuL3ZtX2V2ZW50Lmg+DQo+ICAjaW5jbHVkZSA8YXNtL3BhZ2lu Zy5oPg0KPiAgI2luY2x1ZGUgPGFzbS9zaGFkb3cuaD4NCj4gICNpbmNsdWRlIDxhc20vcGFnZS5o Pg0KPiBAQCAtNDQ2OSw2ICs0NDcwLDEyIEBAIGludCBhcmNoX2FjcXVpcmVfcmVzb3VyY2Uoc3Ry dWN0IGRvbWFpbiAqZCwNCj4gdW5zaWduZWQgaW50IHR5cGUsDQo+ICAgICAgfQ0KPiAgI2VuZGlm DQo+IA0KPiArICAgIGNhc2UgWEVOTUVNX3Jlc291cmNlX3ZtX2V2ZW50Og0KPiArICAgIHsNCj4g KyAgICAgICAgcmMgPSB2bV9ldmVudF9nZXRfZnJhbWVzKGQsIGlkLCBmcmFtZSwgbnJfZnJhbWVz LCBtZm5fbGlzdCk7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiAgICAgIGRl ZmF1bHQ6DQo+ICAgICAgICAgIHJjID0gLUVPUE5PVFNVUFA7DQo+ICAgICAgICAgIGJyZWFrOw0K PiBkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi92bV9ldmVudC5jIGIveGVuL2NvbW1vbi92bV9ldmVu dC5jDQo+IGluZGV4IDc3ZGE0MWIuLmEyNzEyYTAgMTAwNjQ0DQo+IC0tLSBhL3hlbi9jb21tb24v dm1fZXZlbnQuYw0KPiArKysgYi94ZW4vY29tbW9uL3ZtX2V2ZW50LmMNCj4gQEAgLTI4LDYgKzI4 LDggQEANCj4gICNpbmNsdWRlIDxhc20vcDJtLmg+DQo+ICAjaW5jbHVkZSA8YXNtL21vbml0b3Iu aD4NCj4gICNpbmNsdWRlIDxhc20vdm1fZXZlbnQuaD4NCj4gKyNpbmNsdWRlIDx4ZW4vZ3Vlc3Rf YWNjZXNzLmg+DQo+ICsjaW5jbHVkZSA8eGVuL3ZtYXAuaD4NCj4gICNpbmNsdWRlIDx4c20veHNt Lmg+DQo+IA0KPiAgLyogZm9yIHB1YmxpYy9pby9yaW5nLmggbWFjcm9zICovDQo+IEBAIC00MCw2 ICs0Miw3IEBADQo+ICAjZGVmaW5lIHZtX2V2ZW50X3VubG9jayhfdmVkKSAgICAgc3Bpbl91bmxv Y2soJihfdmVkKS0+bG9jaykNCj4gDQo+ICAjZGVmaW5lIHRvX3ZtX2V2ZW50X2RvbWFpbl9yaW5n KF92ZWQpIGNvbnRhaW5lcl9vZihfdmVkLCBzdHJ1Y3QNCj4gdm1fZXZlbnRfZG9tYWluX3Jpbmcs IHZlZCkNCj4gKyNkZWZpbmUgdG9fdm1fZXZlbnRfZG9tYWluX2NoYW5uZWwoX3ZlZCkgY29udGFp bmVyX29mKF92ZWQsIHN0cnVjdA0KPiB2bV9ldmVudF9kb21haW5fY2hhbm5lbCwgdmVkKQ0KPiAN Cj4gIHN0cnVjdCB2bV9ldmVudF9kb21haW4NCj4gIHsNCj4gQEAgLTQ4LDcgKzUxLDggQEAgc3Ry dWN0IHZtX2V2ZW50X2RvbWFpbg0KPiAgICAgIGludCAoKmNsYWltX3Nsb3QpKHN0cnVjdCB2bV9l dmVudF9kb21haW4gKnZlZCwgYm9vbCBhbGxvd19zbGVlcCk7DQo+ICAgICAgdm9pZCAoKnJlbGVh c2Vfc2xvdCkoc3RydWN0IHZtX2V2ZW50X2RvbWFpbiAqdmVkKTsNCj4gICAgICB2b2lkICgqcHV0 X3JlcXVlc3QpKHN0cnVjdCB2bV9ldmVudF9kb21haW4gKnZlZCwgdm1fZXZlbnRfcmVxdWVzdF90 DQo+ICpyZXEpOw0KPiAtICAgIGludCAoKmdldF9yZXNwb25zZSkoc3RydWN0IHZtX2V2ZW50X2Rv bWFpbiAqdmVkLCB2bV9ldmVudF9yZXNwb25zZV90DQo+ICpyc3ApOw0KPiArICAgIGludCAoKmdl dF9yZXNwb25zZSkoc3RydWN0IHZtX2V2ZW50X2RvbWFpbiAqdmVkLCBzdHJ1Y3QgdmNwdSAqdiwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwb3J0LCB2bV9ldmVudF9y ZXNwb25zZV90ICpyc3ApOw0KPiAgICAgIGludCAoKmRpc2FibGUpKHN0cnVjdCB2bV9ldmVudF9k b21haW4gKipfdmVkKTsNCj4gDQo+ICAgICAgLyogVGhlIGRvbWFpbiBhc3NvY2lhdGVkIHdpdGgg dGhlIFZNIGV2ZW50ICovDQo+IEBAIC01OCwxMSArNjIsNiBAQCBzdHJ1Y3Qgdm1fZXZlbnRfZG9t YWluDQo+ICAgICAgc3BpbmxvY2tfdCBsb2NrOw0KPiAgfTsNCj4gDQo+IC1ib29sIHZtX2V2ZW50 X2NoZWNrKHN0cnVjdCB2bV9ldmVudF9kb21haW4gKnZlZCkNCj4gLXsNCj4gLSAgICByZXR1cm4g KHZlZCAmJiB2ZWQtPmNoZWNrKHZlZCkpOw0KPiAtfQ0KPiAtDQo+ICAvKiBWTSBldmVudCBkb21h aW4gcmluZyBpbXBsZW1lbnRhdGlvbiAqLw0KPiAgc3RydWN0IHZtX2V2ZW50X2RvbWFpbl9yaW5n DQo+ICB7DQo+IEBAIC03OCwyMiArNzcsNTcgQEAgc3RydWN0IHZtX2V2ZW50X2RvbWFpbl9yaW5n DQo+ICAgICAgdm1fZXZlbnRfZnJvbnRfcmluZ190IGZyb250X3Jpbmc7DQo+ICAgICAgLyogZXZl bnQgY2hhbm5lbCBwb3J0ICh2Y3B1MCBvbmx5KSAqLw0KPiAgICAgIGludCB4ZW5fcG9ydDsNCj4g LSAgICAvKiB2bV9ldmVudCBiaXQgZm9yIHZjcHUtPnBhdXNlX2ZsYWdzICovDQo+IC0gICAgaW50 IHBhdXNlX2ZsYWc7DQo+ICAgICAgLyogbGlzdCBvZiB2Y3B1cyB3YWl0aW5nIGZvciByb29tIGlu IHRoZSByaW5nICovDQo+ICAgICAgc3RydWN0IHdhaXRxdWV1ZV9oZWFkIHdxOw0KPiAgICAgIC8q IHRoZSBudW1iZXIgb2YgdkNQVXMgYmxvY2tlZCAqLw0KPiAgICAgIHVuc2lnbmVkIGludCBibG9j a2VkOw0KPiArICAgIC8qIHZtX2V2ZW50IGJpdCBmb3IgdmNwdS0+cGF1c2VfZmxhZ3MgKi8NCj4g KyAgICBpbnQgcGF1c2VfZmxhZzsNCj4gICAgICAvKiBUaGUgbGFzdCB2Y3B1IHdva2VuIHVwICov DQo+ICAgICAgdW5zaWduZWQgaW50IGxhc3RfdmNwdV93YWtlX3VwOw0KPiAgfTsNCj4gDQo+ICtz dHJ1Y3Qgdm1fZXZlbnRfYnVmZmVyDQo+ICt7DQo+ICsgICAgdm9pZCAqdmE7DQo+ICsgICAgdW5z aWduZWQgaW50IG5yX2ZyYW1lczsNCj4gKyAgICBtZm5fdCBtZm5bMF07DQo+ICt9Ow0KPiArDQo+ ICtzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWluX2NoYW5uZWwNCj4gK3sNCj4gKyAgICAvKiBWTSBldmVu dCBkb21haW4gKi8NCj4gKyAgICBzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWluIHZlZDsNCj4gKyAgICAv KiByaW5nIGZvciBhc3luY2hyb25vdXMgdm0gZXZlbnRzICovDQo+ICsgICAgc3RydWN0IHZtX2V2 ZW50X2J1ZmZlciAqcmluZzsNCj4gKyAgICAvKiBmcm9udC1lbmQgcmluZyAqLw0KPiArICAgIHZt X2V2ZW50X2Zyb250X3JpbmdfdCBmcm9udF9yaW5nOw0KPiArICAgIC8qIHBlciB2Y3B1IGNoYW5u ZWxzIGZvciBzeW5jaHJvbm91cyB2bSBldmVudHMgKi8NCj4gKyAgICBzdHJ1Y3Qgdm1fZXZlbnRf YnVmZmVyICpjaGFubmVsczsNCj4gKyAgICAvKg0KPiArICAgICAqIGV2ZW50IGNoYW5uZWxzIHBv cnRzDQo+ICsgICAgICogLSBvbmUgcGVyIHZjcHUgZm9yIHRoZSBzeW5jaHJvbm91cyBjaGFubmVs cy4NCj4gKyAgICAgKiAtIG9uZSBmb3IgdGhlIGFzeW5jaHJvbm91cyByaW5nLg0KPiArICAgICAq Lw0KPiArICAgIHVpbnQzMl90IHhlbl9wb3J0c1swXTsNCj4gK307DQo+ICsNCj4gK2Jvb2wgdm1f ZXZlbnRfY2hlY2soc3RydWN0IHZtX2V2ZW50X2RvbWFpbiAqdmVkKQ0KPiArew0KPiArICAgIHJl dHVybiAodmVkICYmIHZlZC0+Y2hlY2sodmVkKSk7DQo+ICt9DQo+ICsNCj4gIHN0YXRpYyBib29s IHZtX2V2ZW50X3JpbmdfY2hlY2soc3RydWN0IHZtX2V2ZW50X2RvbWFpbiAqdmVkKQ0KPiAgew0K PiAgICAgIHN0cnVjdCB2bV9ldmVudF9kb21haW5fcmluZyAqaW1wbCA9IHRvX3ZtX2V2ZW50X2Rv bWFpbl9yaW5nKHZlZCk7DQo+ICAgICAgcmV0dXJuIGltcGwtPnJpbmdfcGFnZSAhPSBOVUxMOw0K PiAgfQ0KPiANCj4gK3N0YXRpYyBib29sIGlzX3ZtX2V2ZW50X2RvbWFpbl9yaW5nKHN0cnVjdCB2 bV9ldmVudF9kb21haW4gKnZlZCkNCj4gK3sNCj4gKyAgICByZXR1cm4gdmVkLT5jaGVjayA9PSB2 bV9ldmVudF9yaW5nX2NoZWNrOw0KPiArfQ0KPiArDQo+ICBzdGF0aWMgdW5zaWduZWQgaW50IHZt X2V2ZW50X3JpbmdfYXZhaWxhYmxlKHN0cnVjdCB2bV9ldmVudF9kb21haW5fcmluZw0KPiAqdmVk KQ0KPiAgew0KPiAgICAgIGludCBhdmFpbF9yZXEgPSBSSU5HX0ZSRUVfUkVRVUVTVFMoJnZlZC0+ ZnJvbnRfcmluZyk7DQo+IEBAIC0zMTcsMTIgKzM1MSwxNSBAQCBzdGF0aWMgdm9pZCB2bV9ldmVu dF9yaW5nX3B1dF9yZXF1ZXN0KHN0cnVjdA0KPiB2bV9ldmVudF9kb21haW4gKnZlZCwNCj4gICAg ICBub3RpZnlfdmlhX3hlbl9ldmVudF9jaGFubmVsKGQsIGltcGwtPnhlbl9wb3J0KTsNCj4gIH0N Cj4gDQo+IC1zdGF0aWMgaW50IHZtX2V2ZW50X3JpbmdfZ2V0X3Jlc3BvbnNlKHN0cnVjdCB2bV9l dmVudF9kb21haW4gKnZlZCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm1fZXZlbnRfcmVzcG9uc2VfdCAqcnNwKQ0KPiArc3RhdGljIGludCB2bV9ldmVudF9yaW5n X2dldF9yZXNwb25zZSgNCj4gKyAgICBzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWluICp2ZWQsDQo+ICsg ICAgc3RydWN0IHZjcHUgKnYsDQo+ICsgICAgdW5zaWduZWQgaW50IHBvcnQsDQo+ICsgICAgdm1f ZXZlbnRfcmVzcG9uc2VfdCAqcnNwKQ0KPiAgew0KPiAgICAgIHZtX2V2ZW50X2Zyb250X3Jpbmdf dCAqZnJvbnRfcmluZzsNCj4gICAgICBSSU5HX0lEWCByc3BfY29uczsNCj4gLSAgICBzdHJ1Y3Qg dm1fZXZlbnRfZG9tYWluX3JpbmcgKmltcGwgPSAoc3RydWN0IHZtX2V2ZW50X2RvbWFpbl9yaW5n DQo+ICopdmVkOw0KPiArICAgIHN0cnVjdCB2bV9ldmVudF9kb21haW5fcmluZyAqaW1wbCA9IHRv X3ZtX2V2ZW50X2RvbWFpbl9yaW5nKHZlZCk7DQo+IA0KPiAgICAgIHZtX2V2ZW50X2xvY2sodmVk KTsNCj4gDQo+IEBAIC0zMzIsNyArMzY5LDcgQEAgc3RhdGljIGludCB2bV9ldmVudF9yaW5nX2dl dF9yZXNwb25zZShzdHJ1Y3QNCj4gdm1fZXZlbnRfZG9tYWluICp2ZWQsDQo+ICAgICAgaWYgKCAh UklOR19IQVNfVU5DT05TVU1FRF9SRVNQT05TRVMoZnJvbnRfcmluZykgKQ0KPiAgICAgIHsNCj4g ICAgICAgICAgdm1fZXZlbnRfdW5sb2NrKHZlZCk7DQo+IC0gICAgICAgIHJldHVybiAwOw0KPiAr ICAgICAgICByZXR1cm4gLTE7DQo+ICAgICAgfQ0KPiANCj4gICAgICAvKiBDb3B5IHJlc3BvbnNl ICovDQo+IEBAIC0zNTMsNiArMzkwLDM1IEBAIHN0YXRpYyBpbnQgdm1fZXZlbnRfcmluZ19nZXRf cmVzcG9uc2Uoc3RydWN0DQo+IHZtX2V2ZW50X2RvbWFpbiAqdmVkLA0KPiAgfQ0KPiANCj4gIC8q DQo+ICsgKiBUaGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgb25seSBmcm9tIHRoZSBzeW5jIGNoYW5u ZWxzDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgdm1fZXZlbnRfY2hhbm5lbF9nZXRfcmVzcG9uc2Uo DQo+ICsgICAgc3RydWN0IHZtX2V2ZW50X2RvbWFpbiAqdmVkLA0KPiArICAgIHN0cnVjdCB2Y3B1 ICp2LA0KPiArICAgIHVuc2lnbmVkIGludCBwb3J0LA0KPiArICAgIHZtX2V2ZW50X3Jlc3BvbnNl X3QgKnJzcCkNCj4gK3sNCj4gKyAgICBzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWluX2NoYW5uZWwgKmlt cGwgPQ0KPiB0b192bV9ldmVudF9kb21haW5fY2hhbm5lbCh2ZWQpOw0KPiArICAgIHN0cnVjdCB2 bV9ldmVudF9zbG90ICpzbG90ID0gaW1wbC0+Y2hhbm5lbHMtPnZhICsgdi0+dmNwdV9pZCAqDQo+ IHNpemVvZihzdHJ1Y3Qgdm1fZXZlbnRfc2xvdCk7DQo+ICsNCj4gKyAgICB2bV9ldmVudF9sb2Nr KHZlZCk7DQo+ICsNCj4gKyAgICBpZiAoIHNsb3QtPnN0YXRlICE9IFZNX0VWRU5UX1NMT1RfU1RB VEVfRklOSVNIICkNCj4gKyAgICB7DQo+ICsgICAgICAgIGdkcHJpbnRrKFhFTkxPR19HX1dBUk5J TkcsICJUaGUgVk0gZXZlbnQgc2xvdCBzdGF0ZSBmb3IgZCVkdiVkIGlzDQo+IGludmFsaWQuXG4i LA0KPiArICAgICAgICAgICAgICAgICB2ZWQtPmQtPmRvbWFpbl9pZCwgdi0+dmNwdV9pZCk7DQo+ ICsgICAgICAgIHZtX2V2ZW50X3VubG9jayh2ZWQpOw0KPiArICAgICAgICByZXR1cm4gLTE7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgbWVtY3B5KHJzcCwgJnNsb3QtPnUucnNwLCBzaXplb2YoKnJz cCkpOw0KPiArICAgIHNsb3QtPnN0YXRlID0gVk1fRVZFTlRfU0xPVF9TVEFURV9JRExFOw0KPiAr DQo+ICsgICAgdm1fZXZlbnRfdW5sb2NrKHZlZCk7DQo+ICsgICAgcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gKy8qDQo+ICAgKiBQdWxsIGFsbCByZXNwb25zZXMgZnJvbSB0aGUgZ2l2ZW4gcmluZyBh bmQgdW5wYXVzZSB0aGUgY29ycmVzcG9uZGluZw0KPiB2Q1BVDQo+ICAgKiBpZiByZXF1aXJlZC4g QmFzZWQgb24gdGhlIHJlc3BvbnNlIHR5cGUsIGhlcmUgd2UgY2FuIGFsc28gY2FsbCBjdXN0b20N Cj4gICAqIGhhbmRsZXJzLg0KPiBAQCAtMzYwLDEwICs0MjYsMTEgQEAgc3RhdGljIGludCB2bV9l dmVudF9yaW5nX2dldF9yZXNwb25zZShzdHJ1Y3QNCj4gdm1fZXZlbnRfZG9tYWluICp2ZWQsDQo+ ICAgKiBOb3RlOiByZXNwb25zZXMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IHJlZ2FyZGxlc3Mg b2Ygd2hpY2ggcmluZyB0aGV5DQo+ICAgKiBhcnJpdmUgb24uDQo+ICAgKi8NCj4gLXN0YXRpYyBp bnQgdm1fZXZlbnRfcmVzdW1lKHN0cnVjdCB2bV9ldmVudF9kb21haW4gKnZlZCkNCj4gK3N0YXRp YyBpbnQgdm1fZXZlbnRfcmVzdW1lKHN0cnVjdCB2bV9ldmVudF9kb21haW4gKnZlZCwgc3RydWN0 IHZjcHUgKnYsDQo+IHVuc2lnbmVkIGludCBwb3J0KQ0KPiAgew0KPiAgICAgIHZtX2V2ZW50X3Jl c3BvbnNlX3QgcnNwOw0KPiAgICAgIHN0cnVjdCBkb21haW4gKmQ7DQo+ICsgICAgaW50IHJjOw0K PiANCj4gICAgICBpZiAoISB2bV9ldmVudF9jaGVjayh2ZWQpKQ0KPiAgICAgICAgICByZXR1cm4g LUVOT0RFVjsNCj4gQEAgLTM4MCwyMiArNDQ3LDI1IEBAIHN0YXRpYyBpbnQgdm1fZXZlbnRfcmVz dW1lKHN0cnVjdCB2bV9ldmVudF9kb21haW4NCj4gKnZlZCkNCj4gICAgICAgKi8NCj4gICAgICBB U1NFUlQoZCAhPSBjdXJyZW50LT5kb21haW4pOw0KPiANCj4gLSAgICAvKiBQdWxsIGFsbCByZXNw b25zZXMgb2ZmIHRoZSByaW5nLiAqLw0KPiAtICAgIHdoaWxlICggdmVkLT5nZXRfcmVzcG9uc2Uo dmVkLCAmcnNwKSApDQo+ICsgICAgLyogTG9vcCB1bnRpbCBhbGwgYXZhaWxhYmxlIHJlc3BvbnNl cyBhcmUgcmVhZC4gKi8NCj4gKyAgICBkbw0KPiAgICAgIHsNCj4gLSAgICAgICAgc3RydWN0IHZj cHUgKnY7DQo+ICsgICAgICAgIHN0cnVjdCB2Y3B1ICpyc3BfdjsNCj4gKyAgICAgICAgcmMgPSB2 ZWQtPmdldF9yZXNwb25zZSh2ZWQsIHYsIHBvcnQsICZyc3ApOw0KPiArICAgICAgICBpZiAoIHJj IDwgMCApDQo+ICsgICAgICAgICAgICBicmVhazsNCj4gDQo+ICAgICAgICAgIGlmICggcnNwLnZl cnNpb24gIT0gVk1fRVZFTlRfSU5URVJGQUNFX1ZFUlNJT04gKQ0KPiAgICAgICAgICB7DQo+ICAg ICAgICAgICAgICBwcmludGsoWEVOTE9HX0dfV0FSTklORyAidm1fZXZlbnQgaW50ZXJmYWNlIHZl cnNpb24NCj4gbWlzbWF0Y2hcbiIpOw0KPiAtICAgICAgICAgICAgY29udGludWU7DQo+ICsgICAg ICAgICAgICBnb3RvIGVuZF9sb29wOw0KPiAgICAgICAgICB9DQo+IA0KPiAgICAgICAgICAvKiBW YWxpZGF0ZSB0aGUgdmNwdV9pZCBpbiB0aGUgcmVzcG9uc2UuICovDQo+ICAgICAgICAgIGlmICgg KHJzcC52Y3B1X2lkID49IGQtPm1heF92Y3B1cykgfHwgIWQtPnZjcHVbcnNwLnZjcHVfaWRdICkN Cj4gLSAgICAgICAgICAgIGNvbnRpbnVlOw0KPiArICAgICAgICAgICAgZ290byBlbmRfbG9vcDsN Cj4gDQo+IC0gICAgICAgIHYgPSBkLT52Y3B1W3JzcC52Y3B1X2lkXTsNCj4gKyAgICAgICAgcnNw X3YgPSBkLT52Y3B1W3JzcC52Y3B1X2lkXTsNCj4gDQo+ICAgICAgICAgIC8qDQo+ICAgICAgICAg ICAqIEluIHNvbWUgY2FzZXMgdGhlIHJlc3BvbnNlIHR5cGUgbmVlZHMgZXh0cmEgaGFuZGxpbmcs IHNvIGhlcmUNCj4gQEAgLTQwMyw3ICs0NzMsNyBAQCBzdGF0aWMgaW50IHZtX2V2ZW50X3Jlc3Vt ZShzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWluDQo+ICp2ZWQpDQo+ICAgICAgICAgICAqLw0KPiANCj4g ICAgICAgICAgLyogQ2hlY2sgZmxhZ3Mgd2hpY2ggYXBwbHkgb25seSB3aGVuIHRoZSB2Q1BVIGlz IHBhdXNlZCAqLw0KPiAtICAgICAgICBpZiAoIGF0b21pY19yZWFkKCZ2LT52bV9ldmVudF9wYXVz ZV9jb3VudCkgKQ0KPiArICAgICAgICBpZiAoIGF0b21pY19yZWFkKCZyc3Bfdi0+dm1fZXZlbnRf cGF1c2VfY291bnQpICkNCj4gICAgICAgICAgew0KPiAgI2lmZGVmIENPTkZJR19IQVNfTUVNX1BB R0lORw0KPiAgICAgICAgICAgICAgaWYgKCByc3AucmVhc29uID09IFZNX0VWRU5UX1JFQVNPTl9N RU1fUEFHSU5HICkNCj4gQEAgLTQxNSwzNCArNDg1LDM2IEBAIHN0YXRpYyBpbnQgdm1fZXZlbnRf cmVzdW1lKHN0cnVjdCB2bV9ldmVudF9kb21haW4NCj4gKnZlZCkNCj4gICAgICAgICAgICAgICAq IGhhcyB0byBzZXQgYXJjaC1zcGVjaWZpYyBmbGFncyB3aGVuIHN1cHBvcnRlZCwgYW5kIHRvDQo+ IGF2b2lkDQo+ICAgICAgICAgICAgICAgKiBiaXRtYXNrIG92ZXJoZWFkIHdoZW4gaXQgaXNuJ3Qg c3VwcG9ydGVkLg0KPiAgICAgICAgICAgICAgICovDQo+IC0gICAgICAgICAgICB2bV9ldmVudF9l bXVsYXRlX2NoZWNrKHYsICZyc3ApOw0KPiArICAgICAgICAgICAgdm1fZXZlbnRfZW11bGF0ZV9j aGVjayhyc3BfdiwgJnJzcCk7DQo+IA0KPiAgICAgICAgICAgICAgLyoNCj4gICAgICAgICAgICAg ICAqIENoZWNrIGluIGFyY2gtc3BlY2lmaWMgaGFuZGxlciB0byBhdm9pZCBiaXRtYXNrIG92ZXJo ZWFkDQo+IHdoZW4NCj4gICAgICAgICAgICAgICAqIG5vdCBzdXBwb3J0ZWQuDQo+ICAgICAgICAg ICAgICAgKi8NCj4gLSAgICAgICAgICAgIHZtX2V2ZW50X3JlZ2lzdGVyX3dyaXRlX3Jlc3VtZSh2 LCAmcnNwKTsNCj4gKyAgICAgICAgICAgIHZtX2V2ZW50X3JlZ2lzdGVyX3dyaXRlX3Jlc3VtZShy c3BfdiwgJnJzcCk7DQo+IA0KPiAgICAgICAgICAgICAgLyoNCj4gICAgICAgICAgICAgICAqIENo ZWNrIGluIGFyY2gtc3BlY2lmaWMgaGFuZGxlciB0byBhdm9pZCBiaXRtYXNrIG92ZXJoZWFkDQo+ IHdoZW4NCj4gICAgICAgICAgICAgICAqIG5vdCBzdXBwb3J0ZWQuDQo+ICAgICAgICAgICAgICAg Ki8NCj4gLSAgICAgICAgICAgIHZtX2V2ZW50X3RvZ2dsZV9zaW5nbGVzdGVwKGQsIHYsICZyc3Ap Ow0KPiArICAgICAgICAgICAgdm1fZXZlbnRfdG9nZ2xlX3NpbmdsZXN0ZXAoZCwgcnNwX3YsICZy c3ApOw0KPiANCj4gICAgICAgICAgICAgIC8qIENoZWNrIGZvciBhbHRwMm0gc3dpdGNoICovDQo+ ICAgICAgICAgICAgICBpZiAoIHJzcC5mbGFncyAmIFZNX0VWRU5UX0ZMQUdfQUxURVJOQVRFX1Ay TSApDQo+IC0gICAgICAgICAgICAgICAgcDJtX2FsdHAybV9jaGVjayh2LCByc3AuYWx0cDJtX2lk eCk7DQo+ICsgICAgICAgICAgICAgICAgcDJtX2FsdHAybV9jaGVjayhyc3BfdiwgcnNwLmFsdHAy bV9pZHgpOw0KPiANCj4gICAgICAgICAgICAgIGlmICggcnNwLmZsYWdzICYgVk1fRVZFTlRfRkxB R19TRVRfUkVHSVNURVJTICkNCj4gLSAgICAgICAgICAgICAgICB2bV9ldmVudF9zZXRfcmVnaXN0 ZXJzKHYsICZyc3ApOw0KPiArICAgICAgICAgICAgICAgIHZtX2V2ZW50X3NldF9yZWdpc3RlcnMo cnNwX3YsICZyc3ApOw0KPiANCj4gICAgICAgICAgICAgIGlmICggcnNwLmZsYWdzICYgVk1fRVZF TlRfRkxBR19HRVRfTkVYVF9JTlRFUlJVUFQgKQ0KPiAtICAgICAgICAgICAgICAgIHZtX2V2ZW50 X21vbml0b3JfbmV4dF9pbnRlcnJ1cHQodik7DQo+ICsgICAgICAgICAgICAgICAgdm1fZXZlbnRf bW9uaXRvcl9uZXh0X2ludGVycnVwdChyc3Bfdik7DQo+IA0KPiAgICAgICAgICAgICAgaWYgKCBy c3AuZmxhZ3MgJiBWTV9FVkVOVF9GTEFHX1ZDUFVfUEFVU0VEICkNCj4gLSAgICAgICAgICAgICAg ICB2bV9ldmVudF92Y3B1X3VucGF1c2Uodik7DQo+ICsgICAgICAgICAgICAgICAgdm1fZXZlbnRf dmNwdV91bnBhdXNlKHJzcF92KTsNCj4gICAgICAgICAgfQ0KPiArZW5kX2xvb3A6IDsNCj4gICAg ICB9DQo+ICsgICAgd2hpbGUgKCByYyA+IDAgKTsNCj4gDQo+ICAgICAgcmV0dXJuIDA7DQo+ICB9 DQo+IEBAIC01MjcsMjggKzU5OSwyOCBAQCBpbnQgX192bV9ldmVudF9jbGFpbV9zbG90KHN0cnVj dCB2bV9ldmVudF9kb21haW4NCj4gKnZlZCwgYm9vbCBhbGxvd19zbGVlcCkNCj4gICAgICBpZiAo ICF2bV9ldmVudF9jaGVjayh2ZWQpICkNCj4gICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOw0K PiANCj4gLSAgICByZXR1cm4gdmVkLT5jbGFpbV9zbG90KHZlZCwgYWxsb3dfc2xlZXApOw0KPiAr ICAgIHJldHVybiAodmVkLT5jbGFpbV9zbG90KSA/IHZlZC0+Y2xhaW1fc2xvdCh2ZWQsIGFsbG93 X3NsZWVwKSA6IDA7DQo+ICB9DQo+IA0KPiAgI2lmZGVmIENPTkZJR19IQVNfTUVNX1BBR0lORw0K PiAgLyogUmVnaXN0ZXJlZCB3aXRoIFhlbi1ib3VuZCBldmVudCBjaGFubmVsIGZvciBpbmNvbWlu ZyBub3RpZmljYXRpb25zLiAqLw0KPiAgc3RhdGljIHZvaWQgbWVtX3BhZ2luZ19ub3RpZmljYXRp b24oc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGludCBwb3J0KQ0KPiAgew0KPiAtICAgIHZtX2V2 ZW50X3Jlc3VtZSh2LT5kb21haW4tPnZtX2V2ZW50X3BhZ2luZyk7DQo+ICsgICAgdm1fZXZlbnRf cmVzdW1lKHYtPmRvbWFpbi0+dm1fZXZlbnRfcGFnaW5nLCB2LCBwb3J0KTsNCj4gIH0NCj4gICNl bmRpZg0KPiANCj4gIC8qIFJlZ2lzdGVyZWQgd2l0aCBYZW4tYm91bmQgZXZlbnQgY2hhbm5lbCBm b3IgaW5jb21pbmcgbm90aWZpY2F0aW9ucy4gKi8NCj4gIHN0YXRpYyB2b2lkIG1vbml0b3Jfbm90 aWZpY2F0aW9uKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBpbnQgcG9ydCkNCj4gIHsNCj4gLSAg ICB2bV9ldmVudF9yZXN1bWUodi0+ZG9tYWluLT52bV9ldmVudF9tb25pdG9yKTsNCj4gKyAgICB2 bV9ldmVudF9yZXN1bWUodi0+ZG9tYWluLT52bV9ldmVudF9tb25pdG9yLCB2LCBwb3J0KTsNCj4g IH0NCj4gDQo+ICAjaWZkZWYgQ09ORklHX0hBU19NRU1fU0hBUklORw0KPiAgLyogUmVnaXN0ZXJl ZCB3aXRoIFhlbi1ib3VuZCBldmVudCBjaGFubmVsIGZvciBpbmNvbWluZyBub3RpZmljYXRpb25z LiAqLw0KPiAgc3RhdGljIHZvaWQgbWVtX3NoYXJpbmdfbm90aWZpY2F0aW9uKHN0cnVjdCB2Y3B1 ICp2LCB1bnNpZ25lZCBpbnQgcG9ydCkNCj4gIHsNCj4gLSAgICB2bV9ldmVudF9yZXN1bWUodi0+ ZG9tYWluLT52bV9ldmVudF9zaGFyZSk7DQo+ICsgICAgdm1fZXZlbnRfcmVzdW1lKHYtPmRvbWFp bi0+dm1fZXZlbnRfc2hhcmUsIHYsIHBvcnQpOw0KPiAgfQ0KPiAgI2VuZGlmDQo+IA0KPiBAQCAt NTY1LDE5ICs2MzcsMjQgQEAgdm9pZCB2bV9ldmVudF9jbGVhbnVwKHN0cnVjdCBkb21haW4gKmQp DQo+ICAgICAgICAgICAqIEZpbmFsbHksIGJlY2F1c2UgdGhpcyBjb2RlIHBhdGggaW52b2x2ZXMg cHJldmlvdXNseQ0KPiAgICAgICAgICAgKiBwYXVzaW5nIHRoZSBkb21haW4gKGRvbWFpbl9raWxs KSwgdW5wYXVzaW5nIHRoZQ0KPiAgICAgICAgICAgKiB2Y3B1cyBjYXVzZXMgbm8gaGFybS4gKi8N Cj4gLSAgICAgICAgZGVzdHJveV93YWl0cXVldWVfaGVhZCgmdG9fdm1fZXZlbnRfZG9tYWluX3Jp bmcoZC0NCj4gPnZtX2V2ZW50X3BhZ2luZyktPndxKTsNCj4gKyAgICAgICAgaWYgKCBpc192bV9l dmVudF9kb21haW5fcmluZyhkLT52bV9ldmVudF9wYWdpbmcpICkNCj4gKyAgICAgICAgICAgIGRl c3Ryb3lfd2FpdHF1ZXVlX2hlYWQoJnRvX3ZtX2V2ZW50X2RvbWFpbl9yaW5nKGQtDQo+ID52bV9l dmVudF9wYWdpbmcpLT53cSk7DQo+ICAgICAgICAgICh2b2lkKXZtX2V2ZW50X2Rpc2FibGUoJmQt PnZtX2V2ZW50X3BhZ2luZyk7DQo+ICAgICAgfQ0KPiAgI2VuZGlmDQo+ICsNCj4gICAgICBpZiAo IHZtX2V2ZW50X2NoZWNrKGQtPnZtX2V2ZW50X21vbml0b3IpICkNCj4gICAgICB7DQo+IC0gICAg ICAgIGRlc3Ryb3lfd2FpdHF1ZXVlX2hlYWQoJnRvX3ZtX2V2ZW50X2RvbWFpbl9yaW5nKGQtDQo+ ID52bV9ldmVudF9tb25pdG9yKS0+d3EpOw0KPiArICAgICAgICBpZiAoIGlzX3ZtX2V2ZW50X2Rv bWFpbl9yaW5nKGQtPnZtX2V2ZW50X21vbml0b3IpICkNCj4gKyAgICAgICAgICAgIGRlc3Ryb3lf d2FpdHF1ZXVlX2hlYWQoJnRvX3ZtX2V2ZW50X2RvbWFpbl9yaW5nKGQtDQo+ID52bV9ldmVudF9t b25pdG9yKS0+d3EpOw0KPiAgICAgICAgICAodm9pZCl2bV9ldmVudF9kaXNhYmxlKCZkLT52bV9l dmVudF9tb25pdG9yKTsNCj4gICAgICB9DQo+ICsNCj4gICNpZmRlZiBDT05GSUdfSEFTX01FTV9T SEFSSU5HDQo+ICAgICAgaWYgKCB2bV9ldmVudF9jaGVjayhkLT52bV9ldmVudF9zaGFyZSkgKQ0K PiAgICAgIHsNCj4gLSAgICAgICAgZGVzdHJveV93YWl0cXVldWVfaGVhZCgmdG9fdm1fZXZlbnRf ZG9tYWluX3JpbmcoZC0NCj4gPnZtX2V2ZW50X3NoYXJlKS0+d3EpOw0KPiArICAgICAgICBpZiAo IGlzX3ZtX2V2ZW50X2RvbWFpbl9yaW5nKGQtPnZtX2V2ZW50X3NoYXJlKSApDQo+ICsgICAgICAg ICAgICBkZXN0cm95X3dhaXRxdWV1ZV9oZWFkKCZ0b192bV9ldmVudF9kb21haW5fcmluZyhkLQ0K PiA+dm1fZXZlbnRfc2hhcmUpLT53cSk7DQo+ICAgICAgICAgICh2b2lkKXZtX2V2ZW50X2Rpc2Fi bGUoJmQtPnZtX2V2ZW50X3NoYXJlKTsNCj4gICAgICB9DQo+ICAjZW5kaWYNCj4gQEAgLTY0MSw3 ICs3MTgsNyBAQCBzdGF0aWMgaW50IHZtX2V2ZW50X3JpbmdfZW5hYmxlKA0KPiAgICAgIGlmICgg cmMgPCAwICkNCj4gICAgICAgICAgZ290byBlcnI7DQo+IA0KPiAtICAgIGltcGwtPnhlbl9wb3J0 ID0gdmVjLT5wb3J0ID0gcmM7DQo+ICsgICAgaW1wbC0+eGVuX3BvcnQgPSB2ZWMtPnUuZW5hYmxl LnBvcnQgPSByYzsNCj4gDQo+ICAgICAgLyogUHJlcGFyZSByaW5nIGJ1ZmZlciAqLw0KPiAgICAg IEZST05UX1JJTkdfSU5JVCgmaW1wbC0+ZnJvbnRfcmluZywNCj4gQEAgLTY2OCw2ICs3NDUsMjk0 IEBAIHN0YXRpYyBpbnQgdm1fZXZlbnRfcmluZ19lbmFibGUoDQo+ICAgICAgcmV0dXJuIHJjOw0K PiAgfQ0KPiANCj4gKy8qDQo+ICsgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBhbGxvY2F0aW5nIC8g ZnJlZWluZyB2bV9ldmVudCBidWZmZXJzDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgdm1fZXZlbnRf YWxsb2NfYnVmZmVyKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludA0KPiBucl9mcmFtZXMs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgdm1fZXZlbnRfYnVm ZmVyICoqX3ZlYikNCj4gK3sNCj4gKyAgICBzdHJ1Y3Qgdm1fZXZlbnRfYnVmZmVyICp2ZWI7DQo+ ICsgICAgaW50IGkgPSAwLCByYzsNCj4gKw0KPiArICAgIHZlYiA9IF94emFsbG9jKHNpemVvZihz dHJ1Y3Qgdm1fZXZlbnRfYnVmZmVyKSArIG5yX2ZyYW1lcyAqDQo+IHNpemVvZihtZm5fdCksDQo+ ICsgICAgICAgICAgICAgICAgICAgX19hbGlnbm9mX18oc3RydWN0IHZtX2V2ZW50X2J1ZmZlcikp Ow0KPiArICAgIGlmICggdW5saWtlbHkoIXZlYikgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgcmMg PSAtRU5PTUVNOw0KPiArICAgICAgICBnb3RvIGVycjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICB2 ZWItPm5yX2ZyYW1lcyA9IG5yX2ZyYW1lczsNCj4gKw0KPiArICAgIGZvciAoIGkgPSAwOyBpIDwg bnJfZnJhbWVzOyBpKysgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAq cGFnZSA9IGFsbG9jX2RvbWhlYXBfcGFnZShkLCAwKTsNCj4gKw0KPiArICAgICAgICBpZiAoICFw YWdlICkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgICAgcmMgPSAtRU5PTUVNOw0KPiArICAg ICAgICAgICAgZ290byBlcnI7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBpZiAoICFn ZXRfcGFnZV9hbmRfdHlwZShwYWdlLCBkLCBQR1Rfd3JpdGFibGVfcGFnZSkgKQ0KPiArICAgICAg ICB7DQo+ICsgICAgICAgICAgICBkb21haW5fY3Jhc2goZCk7DQo+ICsgICAgICAgICAgICByYyA9 IC1FTk9EQVRBOw0KPiArICAgICAgICAgICAgZ290byBlcnI7DQo+ICsgICAgICAgIH0NCj4gKw0K PiArICAgICAgICB2ZWItPm1mbltpXSA9IHBhZ2VfdG9fbWZuKHBhZ2UpOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIHZlYi0+dmEgPSB2bWFwKHZlYi0+bWZuLCBucl9mcmFtZXMpOw0KPiArICAgIGlm ICggIXZlYi0+dmEgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgcmMgPSAtRU5PTUVNOw0KPiArICAg ICAgICBnb3RvIGVycjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBmb3IoIGkgPSAwOyBpIDwgbnJf ZnJhbWVzOyBpKysgKQ0KPiArICAgICAgICBjbGVhcl9wYWdlKHZlYi0+dmEgKyBpICogUEFHRV9T SVpFKTsNCj4gKw0KPiArICAgICpfdmViID0gdmViOw0KPiArICAgIHJldHVybiAwOw0KPiArDQo+ ICtlcnI6DQo+ICsgICAgd2hpbGUgKCAtLWkgPj0gMCApDQo+ICsgICAgew0KPiArICAgICAgICBz dHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2UodmViLT5tZm5baV0pOw0KPiArDQo+ ICsgICAgICAgIGlmICggdGVzdF9hbmRfY2xlYXJfYml0KF9QR0NfYWxsb2NhdGVkLCAmcGFnZS0+ Y291bnRfaW5mbykgKQ0KPiArICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7DQo+ICsgICAgICAg IHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHhmcmVlKHZl Yik7DQo+ICsgICAgcmV0dXJuIHJjOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB2bV9ldmVu dF9mcmVlX2J1ZmZlcihzdHJ1Y3Qgdm1fZXZlbnRfYnVmZmVyICoqX3ZlYikNCj4gK3sNCj4gKyAg ICBzdHJ1Y3Qgdm1fZXZlbnRfYnVmZmVyICp2ZWIgPSAqX3ZlYjsNCj4gKw0KPiArICAgIGlmICgg IXZlYiApDQo+ICsgICAgICAgIHJldHVybjsNCj4gKw0KPiArICAgIGlmICggdmViLT52YSApDQo+ ICsgICAgew0KPiArICAgICAgICBpbnQgaTsNCj4gKw0KPiArICAgICAgICB2dW5tYXAodmViLT52 YSk7DQo+ICsgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgdmViLT5ucl9mcmFtZXM7IGkrKyApDQo+ ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBtZm5f dG9fcGFnZSh2ZWItPm1mbltpXSk7DQo+ICsNCj4gKyAgICAgICAgICAgIGlmICggdGVzdF9hbmRf Y2xlYXJfYml0KF9QR0NfYWxsb2NhdGVkLCAmcGFnZS0+Y291bnRfaW5mbykgKQ0KPiArICAgICAg ICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOw0KPiArICAgICAgICAgICAgcHV0X3BhZ2VfYW5kX3R5 cGUocGFnZSk7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsgICAgWEZSRUUoKl92ZWIpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCB2bV9ldmVudF9jaGFubmVsX2NoZWNrKHN0cnVjdCB2 bV9ldmVudF9kb21haW4gKnZlZCkNCj4gK3sNCj4gKyAgICBzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWlu X2NoYW5uZWwgKmltcGwgPQ0KPiB0b192bV9ldmVudF9kb21haW5fY2hhbm5lbCh2ZWQpOw0KPiAr ICAgIHJldHVybiBpbXBsLT5yaW5nLT52YSAhPSBOVUxMICYmIGltcGwtPmNoYW5uZWxzLT52YSAh PSBOVUxMOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB2bV9ldmVudF9jaGFubmVsX3B1dF9y ZXF1ZXN0KHN0cnVjdCB2bV9ldmVudF9kb21haW4gKnZlZCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm1fZXZlbnRfcmVxdWVzdF90ICpyZXEpDQo+ICt7DQo+ ICsgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50Ow0KPiArICAgIHN0cnVjdCB2bV9ldmVu dF9kb21haW5fY2hhbm5lbCAqaW1wbCA9DQo+IHRvX3ZtX2V2ZW50X2RvbWFpbl9jaGFubmVsKHZl ZCk7DQo+ICsgICAgc3RydWN0IGRvbWFpbiAqZDsNCj4gKyAgICBzdHJ1Y3Qgdm1fZXZlbnRfc2xv dCAqc2xvdDsNCj4gKyAgICBib29sIHN5bmM7DQo+ICsNCj4gKyAgICBpZiAoICF2bV9ldmVudF9j aGVjayh2ZWQpICkNCj4gKyAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAgZCA9IHZlZC0+ZDsN Cj4gKyAgICBzbG90ID0gaW1wbC0+Y2hhbm5lbHMtPnZhICsgcmVxLT52Y3B1X2lkICogc2l6ZW9m KHN0cnVjdA0KPiB2bV9ldmVudF9zbG90KTsNCj4gKw0KPiArICAgIGlmICggY3Vyci0+ZG9tYWlu ICE9IGQgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgcmVxLT5mbGFncyB8PSBWTV9FVkVOVF9GTEFH X0ZPUkVJR047DQo+ICsjaWZuZGVmIE5ERUJVRw0KPiArICAgICAgICBpZiAoICEocmVxLT5mbGFn cyAmIFZNX0VWRU5UX0ZMQUdfVkNQVV9QQVVTRUQpICkNCj4gKyAgICAgICAgICAgIGdkcHJpbnRr KFhFTkxPR19HX1dBUk5JTkcsICJkJWR2JWQgd2FzIG5vdCBwYXVzZWQuXG4iLA0KPiArICAgICAg ICAgICAgICAgICAgICAgZC0+ZG9tYWluX2lkLCByZXEtPnZjcHVfaWQpOw0KPiArI2VuZGlmDQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgcmVxLT52ZXJzaW9uID0gVk1fRVZFTlRfSU5URVJGQUNFX1ZF UlNJT047DQo+ICsNCj4gKyAgICBzeW5jID0gcmVxLT5mbGFncyAmIFZNX0VWRU5UX0ZMQUdfVkNQ VV9QQVVTRUQ7DQo+ICsNCj4gKyAgICB2bV9ldmVudF9sb2NrKHZlZCk7DQo+ICsNCj4gKyAgICBp ZiAoIHN5bmMgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgaWYgKCBzbG90LT5zdGF0ZSAhPSBWTV9F VkVOVF9TTE9UX1NUQVRFX0lETEUgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICBnZHBy aW50ayhYRU5MT0dfR19XQVJOSU5HLCAiVGhlIFZNIGV2ZW50IHNsb3QgZm9yIGQlZHYlZCBpcw0K PiBub3QgSURMRS5cbiIsDQo+ICsgICAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsIHJl cS0+dmNwdV9pZCk7DQo+ICsgICAgICAgICAgICB2bV9ldmVudF91bmxvY2sodmVkKTsNCj4gKyAg ICAgICAgICAgIHJldHVybjsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBtZW1jcHkoICZzbG90 LT51LnJlcSwgcmVxLCBzaXplb2YoKnJlcSkgKTsNCj4gKyAgICAgICAgc2xvdC0+c3RhdGUgPSBW TV9FVkVOVF9TTE9UX1NUQVRFX1NVQk1JVDsNCj4gKyAgICB9DQo+ICsgICAgZWxzZQ0KPiArICAg IHsNCj4gKyAgICAgICAgdm1fZXZlbnRfZnJvbnRfcmluZ190ICpmcm9udF9yaW5nOw0KPiArICAg ICAgICBSSU5HX0lEWCByZXFfcHJvZDsNCj4gKw0KPiArICAgICAgICAvKiBEdWUgdG8gdGhlIHJl c2VydmF0aW9ucywgdGhpcyBzdGVwIG11c3Qgc3VjY2VlZC4gKi8NCj4gKyAgICAgICAgZnJvbnRf cmluZyA9ICZpbXBsLT5mcm9udF9yaW5nOw0KPiArDQo+ICsgICAgICAgIC8qIENvcHkgcmVxdWVz dCAqLw0KPiArICAgICAgICByZXFfcHJvZCA9IGZyb250X3JpbmctPnJlcV9wcm9kX3B2dDsNCj4g KyAgICAgICAgbWVtY3B5KFJJTkdfR0VUX1JFUVVFU1QoZnJvbnRfcmluZywgcmVxX3Byb2QpLCBy ZXEsDQo+IHNpemVvZigqcmVxKSk7DQo+ICsgICAgICAgIHJlcV9wcm9kKys7DQo+ICsNCj4gKyAg ICAgICAgLyogVXBkYXRlIHJpbmcgKi8NCj4gKyAgICAgICAgZnJvbnRfcmluZy0+cmVxX3Byb2Rf cHZ0ID0gcmVxX3Byb2Q7DQo+ICsgICAgICAgIFJJTkdfUFVTSF9SRVFVRVNUUyhmcm9udF9yaW5n KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICB2bV9ldmVudF91bmxvY2sodmVkKTsNCj4gKw0KPiAr ICAgIG5vdGlmeV92aWFfeGVuX2V2ZW50X2NoYW5uZWwoZCwgaW1wbC0+eGVuX3BvcnRzWyhzeW5j KSA/IHJlcS0+dmNwdV9pZA0KPiA6IGQtPm1heF92Y3B1c10pOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50IHZtX2V2ZW50X2NoYW5uZWxfZGlzYWJsZShzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWluICoq X3ZlZCkNCj4gK3sNCj4gKyAgICBzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWluX2NoYW5uZWwgKnZlZCA9 DQo+IHRvX3ZtX2V2ZW50X2RvbWFpbl9jaGFubmVsKCpfdmVkKTsNCj4gKyAgICBzdHJ1Y3QgZG9t YWluICpkID0gdmVkLT52ZWQuZDsNCj4gKyAgICBzdHJ1Y3QgdmNwdSAqdjsNCj4gKyAgICBpbnQg aTsNCj4gKw0KPiArICAgIHZtX2V2ZW50X2xvY2soJnZlZC0+dmVkKTsNCj4gKw0KPiArICAgIGZv cl9lYWNoX3ZjcHUgKCBkLCB2ICkNCj4gKyAgICB7DQo+ICsgICAgICAgIGlmICggYXRvbWljX3Jl YWQoJnYtPnZtX2V2ZW50X3BhdXNlX2NvdW50KSApDQo+ICsgICAgICAgICAgICB2bV9ldmVudF92 Y3B1X3VucGF1c2Uodik7DQo+ICsgICAgICAgIC8qDQo+ICsgICAgICAgIGlmICggdGVzdF9hbmRf Y2xlYXJfYml0KHZlZC0+dmVkLnBhdXNlX2ZsYWcsICZ2LT5wYXVzZV9mbGFncykgKQ0KPiArICAg ICAgICB7DQo+ICsgICAgICAgICAgICB2Y3B1X3VucGF1c2Uodik7DQo+ICsgICAgICAgIH0NCj4g KyAgICAgICAgKi8NCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvKiBGcmVlIGRvbVUncyBldmVudCBj aGFubmVscyBhbmQgbGVhdmUgdGhlIG90aGVyIG9uZSB1bmJvdW5kICovDQo+ICsgICAgZm9yICgg aSA9IDA7IGkgPCBkLT5tYXhfdmNwdXM7IGkrKyApDQo+ICsgICAgICAgIGV2dGNobl9jbG9zZShk LCB2ZWQtPnhlbl9wb3J0c1tpXSwgMCk7DQo+ICsgICAgZXZ0Y2huX2Nsb3NlKGQsIHZlZC0+eGVu X3BvcnRzW2QtPm1heF92Y3B1c10sIDApOw0KPiArDQo+ICsgICAgdm1fZXZlbnRfZnJlZV9idWZm ZXIoJnZlZC0+cmluZyk7DQo+ICsgICAgdm1fZXZlbnRfZnJlZV9idWZmZXIoJnZlZC0+Y2hhbm5l bHMpOw0KPiArDQo+ICsgICAgdm1fZXZlbnRfY2xlYW51cF9kb21haW4oZCk7DQo+ICsNCj4gKyAg ICB2bV9ldmVudF91bmxvY2soJnZlZC0+dmVkKTsNCj4gKw0KPiArICAgIFhGUkVFKCpfdmVkKTsN Cj4gKw0KPiArICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHZtX2V2ZW50 X2NoYW5uZWxfZW5hYmxlKA0KPiArICAgIHN0cnVjdCBkb21haW4gKmQsDQo+ICsgICAgc3RydWN0 IHZtX2V2ZW50X2RvbWFpbiAqKl92ZWQsDQo+ICsgICAgdW5zaWduZWQgaW50IG5yX2ZyYW1lcywN Cj4gKyAgICB4ZW5fZXZlbnRfY2hhbm5lbF9ub3RpZmljYXRpb25fdCBub3RpZmljYXRpb25fZm4p DQo+ICt7DQo+ICsgICAgaW50IGkgPSAwLCByYzsNCj4gKyAgICBzdHJ1Y3Qgdm1fZXZlbnRfZG9t YWluX2NoYW5uZWwgKmltcGw7DQo+ICsgICAgdW5zaWduZWQgaW50IG5yX3JpbmdfZnJhbWVzLCBu cl9jaGFubmVsX2ZyYW1lczsNCj4gKw0KPiArICAgIGlmICggKl92ZWQgKQ0KPiArICAgICAgICBy ZXR1cm4gLUVCVVNZOw0KPiArDQo+ICsgICAgaWYgKCBucl9mcmFtZXMgPD0gUEZOX1VQKGQtPm1h eF92Y3B1cyAqIHNpemVvZihzdHJ1Y3Qgdm1fZXZlbnRfc2xvdCkpDQo+ICkNCj4gKyAgICAgICAg cmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKyAgICBpbXBsID0gX3h6YWxsb2Moc2l6ZW9mKHN0cnVj dCB2bV9ldmVudF9kb21haW5fY2hhbm5lbCkgKw0KPiArICAgICAgICAgICAgICAgICAgICAgICAg KCBkLT5tYXhfdmNwdXMgKyAxICkgKiBzaXplb2YodWludDMyX3QpLA0KPiArICAgICAgICAgICAg ICAgICAgICBfX2FsaWdub2ZfXyhzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWluX2NoYW5uZWwpKTsNCj4g KyAgICBpZiAoICFpbXBsICkNCj4gKyAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKyAg ICBpbXBsLT52ZWQuZCA9IGQ7DQo+ICsgICAgaW1wbC0+dmVkLmNoZWNrID0gdm1fZXZlbnRfY2hh bm5lbF9jaGVjazsNCj4gKyAgICBpbXBsLT52ZWQuY2xhaW1fc2xvdCA9IE5VTEw7DQo+ICsgICAg aW1wbC0+dmVkLnJlbGVhc2Vfc2xvdCA9IE5VTEw7DQo+ICsgICAgaW1wbC0+dmVkLnB1dF9yZXF1 ZXN0ID0gdm1fZXZlbnRfY2hhbm5lbF9wdXRfcmVxdWVzdDsNCj4gKyAgICBpbXBsLT52ZWQuZ2V0 X3Jlc3BvbnNlID0gdm1fZXZlbnRfY2hhbm5lbF9nZXRfcmVzcG9uc2U7DQo+ICsgICAgaW1wbC0+ dmVkLmRpc2FibGUgPSB2bV9ldmVudF9jaGFubmVsX2Rpc2FibGU7DQo+ICsNCj4gKyAgICBucl9j aGFubmVsX2ZyYW1lcyA9IFBGTl9VUChkLT5tYXhfdmNwdXMgKg0KPiBzaXplb2Yodm1fZXZlbnRf cmVxdWVzdF90KSk7DQo+ICsgICAgbnJfcmluZ19mcmFtZXMgPSBucl9mcmFtZXMgLSBucl9jaGFu bmVsX2ZyYW1lczsNCj4gKw0KPiArICAgIHZtX2V2ZW50X2xvY2tfaW5pdCgmaW1wbC0+dmVkKTsN Cj4gKyAgICB2bV9ldmVudF9sb2NrKCZpbXBsLT52ZWQpOw0KPiArDQo+ICsgICAgcmMgPSB2bV9l dmVudF9pbml0X2RvbWFpbihkKTsNCj4gKyAgICBpZiAoIHJjIDwgMCApDQo+ICsgICAgICAgIGdv dG8gZXJyOw0KPiArDQo+ICsgICAgcmMgPSB2bV9ldmVudF9hbGxvY19idWZmZXIoZCwgbnJfcmlu Z19mcmFtZXMsICZpbXBsLT5yaW5nKTsNCj4gKyAgICBpZiAoIHJjICkNCj4gKyAgICAgICAgZ290 byBlcnI7DQo+ICsNCj4gKyAgICAvKiBBbGxvY2F0ZSBldmVudCBjaGFubmVsIGZvciB0aGUgYXN5 bmMgcmluZyovDQo+ICsgICAgcmMgPSBhbGxvY191bmJvdW5kX3hlbl9ldmVudF9jaGFubmVsKGQs IDAsIGN1cnJlbnQtPmRvbWFpbi0NCj4gPmRvbWFpbl9pZCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uX2ZuKTsNCj4gKyAgICBpZiAoIHJj IDwgMCApDQo+ICsgICAgICAgIGdvdG8gZXJyOw0KPiArDQo+ICsgICAgaW1wbC0+eGVuX3BvcnRz W2QtPm1heF92Y3B1c10gPSByYzsNCj4gKw0KPiArICAgIC8qIFByZXBhcmUgcmluZyBidWZmZXIg Ki8NCj4gKyAgICBGUk9OVF9SSU5HX0lOSVQoJmltcGwtPmZyb250X3JpbmcsDQo+ICsgICAgICAg ICAgICAgICAgICAgICh2bV9ldmVudF9zcmluZ190ICopaW1wbC0+cmluZy0+dmEsDQo+ICsgICAg ICAgICAgICAgICAgICAgIGltcGwtPnJpbmctPm5yX2ZyYW1lcyAqIFBBR0VfU0laRSk7DQo+ICsN Cj4gKyAgICByYyA9IHZtX2V2ZW50X2FsbG9jX2J1ZmZlcihkLCBucl9jaGFubmVsX2ZyYW1lcywg JmltcGwtPmNoYW5uZWxzKTsNCj4gKyAgICBpZiAoIHJjICE9IDApDQo+ICsgICAgICAgIGdvdG8g ZXJyOw0KPiArDQo+ICsgICAgZm9yICggaSA9IDA7IGkgPCBkLT5tYXhfdmNwdXM7IGkrKykNCj4g KyAgICB7DQo+ICsgICAgICAgIHJjID0gYWxsb2NfdW5ib3VuZF94ZW5fZXZlbnRfY2hhbm5lbChk LCBpLCBjdXJyZW50LT5kb21haW4tDQo+ID5kb21haW5faWQsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25fZm4pOw0KPiArICAgICAg ICBpZiAoIHJjIDwgMCApDQo+ICsgICAgICAgICAgICBnb3RvIGVycjsNCj4gKw0KPiArICAgICAg ICBpbXBsLT54ZW5fcG9ydHNbaV0gPSByYzsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAqX3ZlZCA9 ICZpbXBsLT52ZWQ7DQo+ICsNCj4gKyAgICB2bV9ldmVudF91bmxvY2soJmltcGwtPnZlZCk7DQo+ ICsgICAgcmV0dXJuIDA7DQo+ICsNCj4gK2VycjoNCj4gKyAgICB3aGlsZSAoaS0tKQ0KPiArICAg ICAgICBldnRjaG5fY2xvc2UoZCwgaW1wbC0+eGVuX3BvcnRzW2ldLCAwKTsNCj4gKyAgICBldnRj aG5fY2xvc2UoZCwgaW1wbC0+eGVuX3BvcnRzW2QtPm1heF92Y3B1c10sIDApOw0KPiArICAgIHZt X2V2ZW50X2ZyZWVfYnVmZmVyKCZpbXBsLT5yaW5nKTsNCj4gKyAgICB2bV9ldmVudF9mcmVlX2J1 ZmZlcigmaW1wbC0+Y2hhbm5lbHMpOw0KPiArICAgIHZtX2V2ZW50X2NsZWFudXBfZG9tYWluKGQp Ow0KPiArICAgIHZtX2V2ZW50X3VubG9jaygmaW1wbC0+dmVkKTsNCj4gKyAgICB4ZnJlZShpbXBs KTsNCj4gKyAgICByZXR1cm4gcmM7DQo+ICt9DQo+ICsNCj4gIGludCB2bV9ldmVudF9kb21jdGwo c3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHhlbl9kb21jdGxfdm1fZXZlbnRfb3AgKnZlYywNCj4g ICAgICAgICAgICAgICAgICAgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh2b2lkKSB1X2RvbWN0 bCkNCj4gIHsNCj4gQEAgLTc0OCw3ICsxMTEzLDkgQEAgaW50IHZtX2V2ZW50X2RvbWN0bChzdHJ1 Y3QgZG9tYWluICpkLCBzdHJ1Y3QNCj4geGVuX2RvbWN0bF92bV9ldmVudF9vcCAqdmVjLA0KPiAg ICAgICAgICAgICAgYnJlYWs7DQo+IA0KPiAgICAgICAgICBjYXNlIFhFTl9WTV9FVkVOVF9SRVNV TUU6DQo+IC0gICAgICAgICAgICByYyA9IHZtX2V2ZW50X3Jlc3VtZShkLT52bV9ldmVudF9wYWdp bmcpOw0KPiArICAgICAgICAgICAgaWYgKCB2bV9ldmVudF9jaGVjayhkLT52bV9ldmVudF9wYWdp bmcpICYmDQo+ICsgICAgICAgICAgICAgICAgIGlzX3ZtX2V2ZW50X2RvbWFpbl9yaW5nKGQtPnZt X2V2ZW50X3BhZ2luZykgKQ0KPiArICAgICAgICAgICAgICAgIHJjID0gdm1fZXZlbnRfcmVzdW1l KGQtPnZtX2V2ZW50X3BhZ2luZywgTlVMTCwgMCk7DQo+ICAgICAgICAgICAgICBicmVhazsNCj4g DQo+ICAgICAgICAgIGRlZmF1bHQ6DQo+IEBAIC03ODYsNyArMTE1MywzMCBAQCBpbnQgdm1fZXZl bnRfZG9tY3RsKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdA0KPiB4ZW5fZG9tY3RsX3ZtX2V2ZW50 X29wICp2ZWMsDQo+ICAgICAgICAgICAgICBicmVhazsNCj4gDQo+ICAgICAgICAgIGNhc2UgWEVO X1ZNX0VWRU5UX1JFU1VNRToNCj4gLSAgICAgICAgICAgIHJjID0gdm1fZXZlbnRfcmVzdW1lKGQt PnZtX2V2ZW50X21vbml0b3IpOw0KPiArICAgICAgICAgICAgaWYgKCB2bV9ldmVudF9jaGVjayhk LT52bV9ldmVudF9tb25pdG9yKSAmJg0KPiArICAgICAgICAgICAgICAgICBpc192bV9ldmVudF9k b21haW5fcmluZyhkLT52bV9ldmVudF9tb25pdG9yKSApDQo+ICsgICAgICAgICAgICAgICAgcmMg PSB2bV9ldmVudF9yZXN1bWUoZC0+dm1fZXZlbnRfbW9uaXRvciwgTlVMTCwgMCk7DQo+ICsgICAg ICAgICAgICBicmVhazsNCj4gKw0KPiArICAgICAgICBjYXNlIFhFTl9WTV9FVkVOVF9HRVRfUE9S VFM6DQo+ICsgICAgICAgICAgICBpZiAoICF2bV9ldmVudF9jaGVjayhkLT52bV9ldmVudF9tb25p dG9yKSApDQo+ICsgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsNCj4gKyAgICAgICAgICAgIGlm ICggIWlzX3ZtX2V2ZW50X2RvbWFpbl9yaW5nKGQtPnZtX2V2ZW50X21vbml0b3IpICkNCj4gKyAg ICAgICAgICAgIHsNCj4gKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWluX2No YW5uZWwgKmltcGwgPQ0KPiB0b192bV9ldmVudF9kb21haW5fY2hhbm5lbChkLT52bV9ldmVudF9t b25pdG9yKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgIGlmICggY29weV90b19ndWVzdCh2ZWMt PnUuZ2V0X3BvcnRzLnN5bmMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGltcGwtPnhlbl9wb3J0cywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZC0+bWF4X3ZjcHVzKSAhPSAwICkNCj4gKyAgICAgICAgICAgICAgICB7DQo+ICsgICAgICAgICAg ICAgICAgICAgIHJjID0gLUVGQVVMVDsNCj4gKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ ICsgICAgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAgICAgdmVjLT51LmdldF9w b3J0cy5hc3luYyA9IGltcGwtPnhlbl9wb3J0c1tkLT5tYXhfdmNwdXNdOw0KPiArICAgICAgICAg ICAgICAgIHJjID0gMDsNCj4gKyAgICAgICAgICAgIH0NCj4gICAgICAgICAgICAgIGJyZWFrOw0K PiANCj4gICAgICAgICAgZGVmYXVsdDoNCj4gQEAgLTgzMCw3ICsxMjIwLDEwIEBAIGludCB2bV9l dmVudF9kb21jdGwoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0DQo+IHhlbl9kb21jdGxfdm1fZXZl bnRfb3AgKnZlYywNCj4gICAgICAgICAgICAgIGJyZWFrOw0KPiANCj4gICAgICAgICAgY2FzZSBY RU5fVk1fRVZFTlRfUkVTVU1FOg0KPiAtICAgICAgICAgICAgcmMgPSB2bV9ldmVudF9yZXN1bWUo ZC0+dm1fZXZlbnRfc2hhcmUpOw0KPiArICAgICAgICAgICAgaWYgKCB2bV9ldmVudF9jaGVjayhk LT52bV9ldmVudF9tb25pdG9yKSAmJg0KPiArICAgICAgICAgICAgICAgICBpc192bV9ldmVudF9k b21haW5fcmluZyhkLT52bV9ldmVudF9tb25pdG9yKSApDQo+ICsgICAgICAgICAgICAgICAgcmMg PSB2bV9ldmVudF9yZXN1bWUoZC0+dm1fZXZlbnRfc2hhcmUsIE5VTEwsIDApOw0KPiArICAgICAg ICAgICAgYnJlYWs7DQo+IA0KPiAgICAgICAgICBkZWZhdWx0Og0KPiAgICAgICAgICAgICAgcmMg PSAtRU5PU1lTOw0KPiBAQCAtODQ3LDYgKzEyNDAsNTIgQEAgaW50IHZtX2V2ZW50X2RvbWN0bChz dHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QNCj4geGVuX2RvbWN0bF92bV9ldmVudF9vcCAqdmVjLA0K PiAgICAgIHJldHVybiByYzsNCj4gIH0NCj4gDQo+ICtpbnQgdm1fZXZlbnRfZ2V0X2ZyYW1lcyhz dHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgaWQsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIGZyYW1lLCB1bnNpZ25lZCBpbnQgbnJfZnJhbWVzLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90IG1mbl9saXN0W10pDQo+ICt7DQo+ICsgICAg aW50IHJjID0gMCwgaSwgajsNCj4gKyAgICBzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWluICoqX3ZlZDsN Cj4gKyAgICBzdHJ1Y3Qgdm1fZXZlbnRfZG9tYWluX2NoYW5uZWwgKmltcGw7DQo+ICsgICAgeGVu X2V2ZW50X2NoYW5uZWxfbm90aWZpY2F0aW9uX3QgZm47DQo+ICsNCj4gKyAgICBzd2l0Y2ggKCBp ZCApDQo+ICsgICAgew0KPiArICAgIGNhc2UgWEVOX1ZNX0VWRU5UX1RZUEVfTU9OSVRPUjoNCj4g KyAgICAgICAgLyogZG9tYWluX3BhdXNlKCkgbm90IHJlcXVpcmVkIGhlcmUsIHNlZSBYU0EtOTkg Ki8NCj4gKyAgICAgICAgcmMgPSBhcmNoX21vbml0b3JfaW5pdF9kb21haW4oZCk7DQo+ICsgICAg ICAgIGlmICggcmMgKQ0KPiArICAgICAgICAgICAgcmV0dXJuIHJjOw0KPiArICAgICAgICBfdmVk ID0gJmQtPnZtX2V2ZW50X21vbml0b3I7DQo+ICsgICAgICAgIGZuID0gbW9uaXRvcl9ub3RpZmlj YXRpb247DQo+ICsgICAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAgZGVmYXVsdDoNCj4gKyAgICAg ICAgcmV0dXJuIC1FTk9TWVM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmMgPSB2bV9ldmVudF9j aGFubmVsX2VuYWJsZShkLCBfdmVkLCBucl9mcmFtZXMsIGZuKTsNCj4gKyAgICBpZiAoIHJjICkN Cj4gKyAgICB7DQo+ICsgICAgICAgIHN3aXRjaCAoIGlkICkNCj4gKyAgICAgICAgew0KPiArICAg ICAgICAgICAgY2FzZSBYRU5fVk1fRVZFTlRfVFlQRV9NT05JVE9SOg0KPiArICAgICAgICAgICAg ICAgIGFyY2hfbW9uaXRvcl9jbGVhbnVwX2RvbWFpbihkKTsNCj4gKyAgICAgICAgICAgICAgICBi cmVhazsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICByZXR1cm4gcmM7DQo+ICsgICAgfQ0KPiAr DQo+ICsgICAgaW1wbCA9IHRvX3ZtX2V2ZW50X2RvbWFpbl9jaGFubmVsKCpfdmVkKTsNCj4gKyAg ICBqID0gMDsNCj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IGltcGwtPnJpbmctPm5yX2ZyYW1lczsg aSsrICkNCj4gKyAgICAgICAgbWZuX2xpc3RbaisrXSA9IG1mbl94KGltcGwtPnJpbmctPm1mbltp XSk7DQo+ICsgICAgZm9yICggaSA9IDA7IGkgPCBpbXBsLT5jaGFubmVscy0+bnJfZnJhbWVzOyBp KysgKQ0KPiArICAgICAgICBtZm5fbGlzdFtqKytdID0gbWZuX3goaW1wbC0+Y2hhbm5lbHMtPm1m bltpXSk7DQo+ICsNCj4gKyAgICByZXR1cm4gcmM7DQo+ICt9DQo+ICsNCj4gIHZvaWQgdm1fZXZl bnRfdmNwdV9wYXVzZShzdHJ1Y3QgdmNwdSAqdikNCj4gIHsNCj4gICAgICBBU1NFUlQodiA9PSBj dXJyZW50KTsNCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3B1YmxpYy9kb21jdGwuaCBiL3hl bi9pbmNsdWRlL3B1YmxpYy9kb21jdGwuaA0KPiBpbmRleCAyNmIxYTU1Li43ODI2MmExIDEwMDY0 NA0KPiAtLS0gYS94ZW4vaW5jbHVkZS9wdWJsaWMvZG9tY3RsLmgNCj4gKysrIGIveGVuL2luY2x1 ZGUvcHVibGljL2RvbWN0bC5oDQo+IEBAIC0zOCw3ICszOCw3IEBADQo+ICAjaW5jbHVkZSAiaHZt L3NhdmUuaCINCj4gICNpbmNsdWRlICJtZW1vcnkuaCINCj4gDQo+IC0jZGVmaW5lIFhFTl9ET01D VExfSU5URVJGQUNFX1ZFUlNJT04gMHgwMDAwMDAxMQ0KPiArI2RlZmluZSBYRU5fRE9NQ1RMX0lO VEVSRkFDRV9WRVJTSU9OIDB4MDAwMDAwMTINCj4gDQo+ICAvKg0KPiAgICogTkIuIHhlbl9kb21j dGwuZG9tYWluIGlzIGFuIElOL09VVCBwYXJhbWV0ZXIgZm9yIHRoaXMgb3BlcmF0aW9uLg0KPiBA QCAtODM2LDYgKzgzNiw3IEBAIHN0cnVjdCB4ZW5fZG9tY3RsX2dkYnN4X2RvbXN0YXR1cyB7DQo+ ICAjZGVmaW5lIFhFTl9WTV9FVkVOVF9FTkFCTEUgICAgICAgICAgICAgICAwDQo+ICAjZGVmaW5l IFhFTl9WTV9FVkVOVF9ESVNBQkxFICAgICAgICAgICAgICAxDQo+ICAjZGVmaW5lIFhFTl9WTV9F VkVOVF9SRVNVTUUgICAgICAgICAgICAgICAyDQo+ICsjZGVmaW5lIFhFTl9WTV9FVkVOVF9HRVRf UE9SVFMgICAgICAgICAgICAzDQo+IA0KPiAgLyoNCj4gICAqIFVzZSBmb3IgdGVhcmRvd24vc2V0 dXAgb2YgaGVscGVyPC0+aHlwZXJ2aXNvciBpbnRlcmZhY2UgZm9yIHBhZ2luZywNCj4gQEAgLTg0 MywxMCArODQ0LDI2IEBAIHN0cnVjdCB4ZW5fZG9tY3RsX2dkYnN4X2RvbXN0YXR1cyB7DQo+ICAg Ki8NCj4gIC8qIFhFTl9ET01DVExfdm1fZXZlbnRfb3AgKi8NCj4gIHN0cnVjdCB4ZW5fZG9tY3Rs X3ZtX2V2ZW50X29wIHsNCj4gLSAgICB1aW50MzJfdCAgICAgICAgb3A7ICAgICAgICAgICAvKiBY RU5fVk1fRVZFTlRfKiAqLw0KPiAtICAgIHVpbnQzMl90ICAgICAgICB0eXBlOyAgICAgICAgIC8q IFhFTl9WTV9FVkVOVF9UWVBFXyogKi8NCj4gKyAgICAvKiBJTjogWGVuIHZtX2V2ZW50IG9wY29k ZSAoWEVOX1ZNX0VWRU5UXyopICovDQo+ICsgICAgdWludDMyX3QgICAgICAgICAgICBvcDsNCj4g KyAgICAvKiBJTjogWGVuIHZtIGV2ZW50IHJpbmcgdHlwZSAoWEVOX1ZNX0VWRU5UX1RZUEVfKikg Ki8NCj4gKyAgICB1aW50MzJfdCAgICAgICAgICAgIHR5cGU7DQo+IA0KPiAtICAgIHVpbnQzMl90 ICAgICAgICBwb3J0OyAgICAgICAgIC8qIE9VVDogZXZlbnQgY2hhbm5lbCBmb3IgcmluZyAqLw0K PiArICAgIHVuaW9uIHsNCj4gKyAgICAgICAgc3RydWN0IHsNCj4gKyAgICAgICAgICAgIC8qIE9V VDogcmVtb3RlIHBvcnQgZm9yIGV2ZW50IGNoYW5uZWwgcmluZyAqLw0KPiArICAgICAgICAgICAg dWludDMyX3QgICAgcG9ydDsNCj4gKyAgICAgICAgfSBlbmFibGU7DQo+ICsgICAgICAgIHN0cnVj dCB7DQo+ICsgICAgICAgICAgICAvKiBPVVQ6IHJlbW90ZSBwb3J0IGZvciB0aGUgYXN5bmMgZXZl bnQgY2hhbm5lbCByaW5nICovDQo+ICsgICAgICAgICAgICB1aW50MzJfdCAgICBhc3luYzsNCj4g KyAgICAgICAgICAgIC8qDQo+ICsgICAgICAgICAgICAgKiBPVVQ6IHJlbW90ZSBwb3J0cyBmb3Ig dGhlIHN5bmMgZXZlbnQgdm1fZXZlbnQgY2hhbm5lbHMNCj4gKyAgICAgICAgICAgICAqIFRoZSBu dW1iZXIgZm9yIHBvcnRzIHdpbGwgYmUgZXF1YWwgd2l0aCB0aGUgdmNwdSBjb3VudC4NCj4gKyAg ICAgICAgICAgICAqLw0KPiArICAgICAgICAgICAgWEVOX0dVRVNUX0hBTkRMRV82NCh1aW50MzIp IHN5bmM7DQo+ICsgICAgICAgIH0gZ2V0X3BvcnRzOw0KPiArICAgIH0gdTsNCj4gIH07DQo+IA0K PiAgLyoNCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3B1YmxpYy9tZW1vcnkuaCBiL3hlbi9p bmNsdWRlL3B1YmxpYy9tZW1vcnkuaA0KPiBpbmRleCA4NjM4MDIzLi5jZmQyODBkIDEwMDY0NA0K PiAtLS0gYS94ZW4vaW5jbHVkZS9wdWJsaWMvbWVtb3J5LmgNCj4gKysrIGIveGVuL2luY2x1ZGUv cHVibGljL21lbW9yeS5oDQo+IEBAIC02MTIsNiArNjEyLDcgQEAgc3RydWN0IHhlbl9tZW1fYWNx dWlyZV9yZXNvdXJjZSB7DQo+IA0KPiAgI2RlZmluZSBYRU5NRU1fcmVzb3VyY2VfaW9yZXFfc2Vy dmVyIDANCj4gICNkZWZpbmUgWEVOTUVNX3Jlc291cmNlX2dyYW50X3RhYmxlIDENCj4gKyNkZWZp bmUgWEVOTUVNX3Jlc291cmNlX3ZtX2V2ZW50IDINCj4gDQo+ICAgICAgLyoNCj4gICAgICAgKiBJ TiAtIGEgdHlwZS1zcGVjaWZpYyByZXNvdXJjZSBpZGVudGlmaWVyLCB3aGljaCBtdXN0IGJlIHpl cm8NCj4gQEAgLTYxOSw2ICs2MjAsNyBAQCBzdHJ1Y3QgeGVuX21lbV9hY3F1aXJlX3Jlc291cmNl IHsNCj4gICAgICAgKg0KPiAgICAgICAqIHR5cGUgPT0gWEVOTUVNX3Jlc291cmNlX2lvcmVxX3Nl cnZlciAtPiBpZCA9PSBpb3JlcSBzZXJ2ZXIgaWQNCj4gICAgICAgKiB0eXBlID09IFhFTk1FTV9y ZXNvdXJjZV9ncmFudF90YWJsZSAtPiBpZCBkZWZpbmVkIGJlbG93DQo+ICsgICAgICogdHlwZSA9 PSBYRU5NRU1fcmVzb3VyY2Vfdm1fZXZlbnQgLT4gaWQgPT0gdm1fZXZlbnQgdHlwZQ0KPiAgICAg ICAqLw0KPiAgICAgIHVpbnQzMl90IGlkOw0KPiANCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRl L3B1YmxpYy92bV9ldmVudC5oIGIveGVuL2luY2x1ZGUvcHVibGljL3ZtX2V2ZW50LmgNCj4gaW5k ZXggYjJiYWZjMC4uNDk5ZmJiYyAxMDA2NDQNCj4gLS0tIGEveGVuL2luY2x1ZGUvcHVibGljL3Zt X2V2ZW50LmgNCj4gKysrIGIveGVuL2luY2x1ZGUvcHVibGljL3ZtX2V2ZW50LmgNCj4gQEAgLTM4 OCw2ICszODgsMjEgQEAgdHlwZWRlZiBzdHJ1Y3Qgdm1fZXZlbnRfc3Qgew0KPiANCj4gIERFRklO RV9SSU5HX1RZUEVTKHZtX2V2ZW50LCB2bV9ldmVudF9yZXF1ZXN0X3QsIHZtX2V2ZW50X3Jlc3Bv bnNlX3QpOw0KPiANCj4gK3N0cnVjdCB2bV9ldmVudF9zbG90DQo+ICt7DQo+ICsgICAgdWludDMy X3Qgc3RhdGU7DQo+ICsgICAgdW5pb24gew0KPiArICAgICAgICB2bV9ldmVudF9yZXF1ZXN0X3Qg cmVxOw0KPiArICAgICAgICB2bV9ldmVudF9yZXNwb25zZV90IHJzcDsNCj4gKyAgICB9IHU7DQo+ ICt9Ow0KPiArDQo+ICtlbnVtIHZtX2V2ZW50X3Nsb3Rfc3RhdGUgew0KPiArICAgIFZNX0VWRU5U X1NMT1RfU1RBVEVfSURMRSwgICAvKiBubyBjb250ZW50cyAqLw0KPiArICAgIFZNX0VWRU5UX1NM T1RfU1RBVEVfU1VCTUlULCAvKiByZXF1ZXN0IHJlYWR5ICovDQo+ICsgICAgVk1fRVZFTlRfU0xP VF9TVEFURV9GSU5JU0gsIC8qIHJlc3BvbnNlIHJlYWR5ICovDQo+ICt9Ow0KPiArDQo+ICAjZW5k aWYgLyogZGVmaW5lZChfX1hFTl9fKSB8fCBkZWZpbmVkKF9fWEVOX1RPT0xTX18pICovDQo+ICAj ZW5kaWYgLyogX1hFTl9QVUJMSUNfVk1fRVZFTlRfSCAqLw0KPiANCj4gZGlmZiAtLWdpdCBhL3hl bi9pbmNsdWRlL3hlbi92bV9ldmVudC5oIGIveGVuL2luY2x1ZGUveGVuL3ZtX2V2ZW50LmgNCj4g aW5kZXggYTVjODJkNi4uZDRiZDE4NCAxMDA2NDQNCj4gLS0tIGEveGVuL2luY2x1ZGUveGVuL3Zt X2V2ZW50LmgNCj4gKysrIGIveGVuL2luY2x1ZGUveGVuL3ZtX2V2ZW50LmgNCj4gQEAgLTY0LDYg KzY0LDEwIEBAIHZvaWQgdm1fZXZlbnRfcHV0X3JlcXVlc3Qoc3RydWN0IHZtX2V2ZW50X2RvbWFp biAqdmVkLA0KPiAgaW50IHZtX2V2ZW50X2RvbWN0bChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3Qg eGVuX2RvbWN0bF92bV9ldmVudF9vcCAqdmVjLA0KPiAgICAgICAgICAgICAgICAgICAgICBYRU5f R1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIHVfZG9tY3RsKTsNCj4gDQo+ICtpbnQgdm1fZXZlbnRf Z2V0X2ZyYW1lcyhzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgaWQsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZyYW1lLCB1bnNpZ25lZCBpbnQgbnJfZnJh bWVzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90IG1mbl9saXN0W10pOw0K PiArDQo+ICB2b2lkIHZtX2V2ZW50X3ZjcHVfcGF1c2Uoc3RydWN0IHZjcHUgKnYpOw0KPiAgdm9p ZCB2bV9ldmVudF92Y3B1X3VucGF1c2Uoc3RydWN0IHZjcHUgKnYpOw0KPiANCj4gLS0NCj4gMi43 LjQNCj4gDQo+IA0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXw0KPiBYZW4tZGV2ZWwgbWFpbGluZyBsaXN0DQo+IFhlbi1kZXZlbEBsaXN0cy54ZW5wcm9q ZWN0Lm9yZw0KPiBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v eGVuLWRldmVsDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs