From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v7 for-next 10/12] vpci/msi: add MSI handlers Date: Fri, 20 Oct 2017 09:58:27 +0000 Message-ID: <4c12a166a87f4eefacf7e668fae38278@AMSPEX02CL03.citrite.net> References: <20171018114034.36587-1-roger.pau@citrix.com> <20171018114034.36587-11-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e5U4Z-00066U-Rb for xen-devel@lists.xenproject.org; Fri, 20 Oct 2017 09:58:36 +0000 In-Reply-To: <20171018114034.36587-11-roger.pau@citrix.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , "boris.ostrovsky@oracle.com" , Roger Pau Monne , Jan Beulich , "konrad.wilk@oracle.com" List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSb2dlciBQYXUgTW9ubmUgW21h aWx0bzpyb2dlci5wYXVAY2l0cml4LmNvbV0NCj4gU2VudDogMTggT2N0b2JlciAyMDE3IDEyOjQx DQo+IFRvOiB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gQ2M6IGtvbnJhZC53aWxr QG9yYWNsZS5jb207IGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29tOyBSb2dlciBQYXUgTW9ubmUN Cj4gPHJvZ2VyLnBhdUBjaXRyaXguY29tPjsgSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29t PjsgQW5kcmV3IENvb3Blcg0KPiA8QW5kcmV3LkNvb3BlcjNAY2l0cml4LmNvbT47IFBhdWwgRHVy cmFudCA8UGF1bC5EdXJyYW50QGNpdHJpeC5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCB2NyBmb3It bmV4dCAxMC8xMl0gdnBjaS9tc2k6IGFkZCBNU0kgaGFuZGxlcnMNCj4gDQo+IEFkZCBoYW5kbGVy cyBmb3IgdGhlIE1TSSBjb250cm9sLCBhZGRyZXNzLCBkYXRhIGFuZCBtYXNrIGZpZWxkcyBpbg0K PiBvcmRlciB0byBkZXRlY3QgYWNjZXNzZXMgdG8gdGhlbSBhbmQgc2V0dXAgdGhlIGludGVycnVw dHMgYXMgcmVxdWVzdGVkDQo+IGJ5IHRoZSBndWVzdC4NCj4gDQo+IE5vdGUgdGhhdCB0aGUgcGVu ZGluZyByZWdpc3RlciBpcyBub3QgdHJhcHBlZCwgYW5kIHRoZSBndWVzdCBjYW4NCj4gZnJlZWx5 IHJlYWQvd3JpdGUgdG8gaXQuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOp IDxyb2dlci5wYXVAY2l0cml4LmNvbT4NCg0KUmV2aWV3ZWQtYnk6IFBhdWwgRHVycmFudCA8cGF1 bC5kdXJyYW50QGNpdHJpeC5jb20+DQoNCj4gLS0tDQo+IENjOiBKYW4gQmV1bGljaCA8amJldWxp Y2hAc3VzZS5jb20+DQo+IENjOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXgu Y29tPg0KPiBDYzogUGF1bCBEdXJyYW50IDxwYXVsLmR1cnJhbnRAY2l0cml4LmNvbT4NCj4gLS0t DQo+IENoYW5nZXMgc2luY2UgdjY6DQo+ICAtIFVzZSBkb21haW5fc3Bpbl9sb2NrX2lycV9kZXNj IGluc3RlYWQgb2Ygb3BlbiBjb2RpbmcgaXQuDQo+ICAtIFJlZHVjZSB0aGUgc2l6ZSBvZiBwcmlu dGVkIGRlYnVnIG1lc3NhZ2VzLg0KPiAgLSBDb25zdGlmeSBkb21haW4gaW4gdnBjaV9kdW1wX21z aS4NCj4gIC0gTG9jayBkb21saXN0X3JlYWRfbG9jayBiZWZvcmUgaXRlcmF0aW5nIG92ZXIgdGhl IGxpc3Qgb2YgZG9tYWlucy4NCj4gIC0gTWFrZSBtYXhfdmVjdG9ycyBhbmQgdmVjdG9ycyB1aW50 OF90Lg0KPiAgLSBEcm9wIHRoZSB2cGNpXyBwcmVmaXggZnJvbSB0aGUgc3RhdGljIGZ1bmN0aW9u cyBpbiBtc2kuYy4NCj4gIC0gVHVybiB0aGUgYm9vbGVhbnMgaW4gdnBjaV9tc2kgaW50byBiaXRm aWVsZHMuDQo+ICAtIEFwcGx5IHRoZSBtYXNrIGJpdHMgdG8gYWxsIHZlY3RvcnMgd2hlbiBlbmFi bGluZyBtc2kuDQo+ICAtIFJlbW92ZSB0aGUgcG9zIGZpZWxkLg0KPiAgLSBSZW1vdmUgdGhlIHVz YWdlIG9mIF9fbXNpX3NldF97ZW5hYmxlL2Rpc2FibGV9Lg0KPiAgLSBVcGRhdGUgdGhlIGJpbmRp bmdzIHdoZW4gdGhlIG1lc3NhZ2Ugb3IgZGF0YSBmaWVsZHMgYXJlIHVwZGF0ZWQuDQo+ICAtIE1h a2UgdnBjaV9tc2lfYXJjaF9kaXNhYmxlIHJldHVybiB2b2lkLCBpdCB3YXNuJ3QgcmV0dXJuaW5n IGFueQ0KPiAgICBlcnJvci4NCj4gIC0gUHJldmVudCB0aGUgZ3Vlc3QgZnJvbSB3cml0aW5nIHRv IHRoZSBwZW5kaW5nIGJpdHMgZmllbGQsIGl0J3MgcmVhZA0KPiAgICBvbmx5IGFzIGRlZmluZWQg aW4gdGhlIHNwZWMuDQo+ICAtIEFkZCB0aGUgbXVzdF9jaGVjayBhdHRyaWJ1dGUgdG8gdnBjaV9t c2lfYXJjaF9lbmFibGUuDQo+IA0KPiBDaGFuZ2VzIHNpbmNlIHY1Og0KPiAgLSBVcGRhdGUgdG8g bmV3IGxvY2sgdXNhZ2UuDQo+ICAtIENoYW5nZSBoYW5kbGVycyB0byBtYXRjaCB0aGUgbmV3IHR5 cGUuDQo+ICAtIHMvbXNpX2ZsYWdzL21zaV9nZmxhZ3MvLCByZW1vdmUgdGhlIGxvY2FsIHZhcmlh YmxlcyBhbmQgdXNlIHRoZSBuZXcNCj4gICAgRE9NQ1RMX1ZNU0lfKiBkZWZpbmVzLg0KPiAgLSBD aGFuZ2UgdGhlIE1TSSBhcmNoIGZ1bmN0aW9uIHRvIHRha2UgYSB2cGNpX21zaSBpbnN0ZWFkIG9m IGENCj4gICAgdnBjaV9hcmNoX21zaSBhcyBwYXJhbWV0ZXIuDQo+ICAtIEZpeCB0aGUgY2FsY3Vs YXRpb24gb2YgdGhlIGd1ZXN0IHZlY3RvciBmb3IgTVNJIGluamVjdGlvbiB0byB0YWtlDQo+ICAg IGludG8gYWNjb3VudCB0aGUgbnVtYmVyIG9mIGJpdHMgdGhhdCBjYW4gYmUgbW9kaWZpZWQuDQo+ ICAtIFVzZSBJTlZBTElEX1BJUlEgZXZlcnl3aGVyZS4NCj4gIC0gU2ltcGxpZnkgZXhpdCBwYXRo IG9mIHZwY2lfbXNpX2Rpc2FibGUuDQo+ICAtIFJlbW92ZSB0aGUgY29uZGl0aW9uYWwgd2hlbiBz ZXR0aW5nIGFkZHJlc3M2NCBhbmQgbWFza2luZyBmaWVsZHMuDQo+ICAtIEFkZCBhIHByb2Nlc3Nf cGVuZGluZ19zb2Z0aXJxcyB0byB0aGUgTVNJIGR1bXAgbG9vcC4NCj4gIC0gUGxhY2UgdGhlIHBy b3RvdHlwZXMgZm9yIHRoZSBNU0kgYXJjaC1zcGVjaWZpYyBmdW5jdGlvbnMgaW4NCj4gICAgeGVu L3ZwY2kuaC4NCj4gIC0gQWRkIHBhcmVudGhlc2VzIGFyb3VuZCB0aGUgSU5WQUxJRF9QSVJRIGRl ZmluaXRpb24uDQo+IA0KPiBDaGFuZ2VzIHNpbmNlIHY0Og0KPiAgLSBGaXggY29tbWl0IG1lc3Nh Z2UuDQo+ICAtIENoYW5nZSB0aGUgQVNTRVJUcyBpbiB2cGNpX21zaV9hcmNoX21hc2sgaW50byBp ZnMuDQo+ICAtIEludHJvZHVjZSBJTlZBTElEX1BJUlEuDQo+ICAtIERlc3Ryb3kgdGhlIHBhcnRp YWxseSBjcmVhdGVkIGJpbmRpbmdzIGluIGNhc2Ugb2YgZmFpbHVyZSBpbg0KPiAgICB2cGNpX21z aV9hcmNoX2VuYWJsZS4NCj4gIC0gSnVzdCB0YWtlIHRoZSBwY2lkZXZzIGxvY2sgb25jZSBpbiB2 cGNpX21zaV9hcmNoX2Rpc2FibGUuDQo+ICAtIFByaW50IGFuIGVycm9yIG1lc3NhZ2UgaW4gY2Fz ZSBvZiBmYWlsdXJlIG9mIHB0X2lycV9kZXN0cm95X2JpbmQuDQo+ICAtIE1ha2UgdnBjaV9tc2lf YXJjaF9pbml0IHJldHVybiB2b2lkLg0KPiAgLSBDb25zdGlmeSB0aGUgYXJjaCBwYXJhbWV0ZXIg b2YgdnBjaV9tc2lfYXJjaF9wcmludC4NCj4gIC0gVXNlIGZpeGVkIGluc3RlYWQgb2YgY3B1IGZv ciBtc2kgcmVkaXJlY3Rpb24uDQo+ICAtIFNlcGFyYXRlIHRoZSBoZWFkZXIgaW5jbHVkZXMgaW4g dnBjaS9tc2kuYyBiZXR3ZWVuIHhlbiBhbmQgYXNtLg0KPiAgLSBTdG9yZSB0aGUgbnVtYmVyIG9m IGNvbmZpZ3VyZWQgdmVjdG9ycyBldmVuIGlmIE1TSSBpcyBub3QgZW5hYmxlZA0KPiAgICBhbmQg YWx3YXlzIHJldHVybiBpdCBpbiB2cGNpX21zaV9jb250cm9sX3JlYWQuDQo+ICAtIEZpeC9hZGQg Y29tbWVudHMgaW4gdnBjaV9tc2lfY29udHJvbF93cml0ZSB0byBjbGFyaWZ5IGludGVuZGVkDQo+ ICAgIGJlaGF2aW9yLg0KPiAgLSBTaW1wbGlmeSB1c2FnZSBvZiBtYXNrcyBpbiB2cGNpX21zaV9h ZGRyZXNzX3t1cHBlcl99d3JpdGUuDQo+ICAtIEFkZCBjb21tZW50IHRvIHZwY2lfbXNpX21hc2tf e3JlYWQvd3JpdGV9Lg0KPiAgLSBEb24ndCB1c2UgTUFTS19FWFRSIGluIHZwY2lfbXNpX21hc2tf d3JpdGUuDQo+ICAtIHMvbXNpX29mZnNldC9wb3MvIGluIHZwY2lfaW5pdF9tc2kuDQo+ICAtIE1v dmUgY29udHJvbCB2YXJpYWJsZSBzZXR1cCBjbG9zZXIgdG8gaXQncyB1c2FnZS4NCj4gIC0gVXNl IGQlZCBpbiB2cGNpX2R1bXBfbXNpLg0KPiAgLSBGaXggcHJpbnRpbmcgb2YgYml0ZmllbGQgbWFz ayBpbiB2cGNpX2R1bXBfbXNpLg0KPiAgLSBGaXggZGVmaW5pdGlvbiBvZiBNU0lfQUREUl9SRURJ UkVDVElPTl9NQVNLLg0KPiAgLSBTaHVmZmxlIHRoZSBsYXlvdXQgb2YgdnBjaV9tc2kgdG8gbWlu aW1pemUgZ2Fwcy4NCj4gIC0gUmVtb3ZlIHRoZSBlcnJvciBsYWJlbCBpbiB2cGNpX2luaXRfbXNp Lg0KPiANCj4gQ2hhbmdlcyBzaW5jZSB2MzoNCj4gIC0gUHJvcGFnYXRlIGNoYW5nZXMgZnJvbSBw cmV2aW91cyB2ZXJzaW9uczogZHJvcCB4ZW5fIHByZWZpeCwgZHJvcA0KPiAgICByZXR1cm4gdmFs dWUgZnJvbSBoYW5kbGVycywgdXNlIHRoZSBuZXcgdnBjaV92YWwgZmllbGRzLg0KPiAgLSBVc2Ug TUFTS19FWFRSLg0KPiAgLSBSZW1vdmUgdGhlIHVzYWdlIG9mIEdFTk1BU0suDQo+ICAtIEFkZCBH RkxBR1NfU0hJRlRfREVTVF9JRCBhbmQgdXNlIGl0IGluIG1zaV9mbGFncy4NCj4gIC0gQWRkICJh cmNoIiB0byB0aGUgTVNJIGFyY2ggc3BlY2lmaWMgZnVuY3Rpb25zLg0KPiAgLSBNb3ZlIHRoZSBk dW1waW5nIG9mIHZQQ0kgTVNJIGluZm9ybWF0aW9uIHRvIGR1bXBfbXNpIChrZXkgJ00nKS4NCj4g IC0gUmVtb3ZlIHRoZSBndWVzdF92ZWN0b3JzIGZpZWxkLg0KPiAgLSBBbGxvdyB0aGUgZ3Vlc3Qg dG8gY2hhbmdlIHRoZSBudW1iZXIgb2YgYWN0aXZlIHZlY3RvcnMgd2l0aG91dA0KPiAgICBoYXZp bmcgdG8gZGlzYWJsZSBhbmQgZW5hYmxlIE1TSS4NCj4gIC0gQ2hlY2sgdGhlIG51bWJlciBvZiBh Y3RpdmUgdmVjdG9ycyB3aGVuIHBhcnNpbmcgdGhlIGRpc2FibGUNCj4gICAgbWFzay4NCj4gIC0g UmVtb3ZlIHRoZSBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHZwY2lfaW5pdF9tc2kuDQo+ICAtIE1vdmUg dGhlIGFyY2gtc3BlY2lmaWMgcGFydCBvZiB0aGUgZHVtcCBoYW5kbGVyIHRvIHg4Ni9odm0vdm1z aS5jLg0KPiAgLSBVc2UgdHJ5bG9jayBpbiB0aGUgZHVtcCBoYW5kbGVyIHRvIGdldCB0aGUgdnBj aSBsb2NrLg0KPiANCj4gQ2hhbmdlcyBzaW5jZSB2MjoNCj4gIC0gQWRkIGFuIGFyY2gtc3BlY2lm aWMgYWJzdHJhY3Rpb24gbGF5ZXIuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQN Cj4gICAgZm9yIHg4NiBjdXJyZW50bHkuDQo+ICAtIEFkZCBhIHdyYXBwZXIgdG8gZGV0ZWN0IE1T SSBlbmFibGluZyBmb3IgdlBDSS4NCj4gDQo+IE5COiBJJ3ZlIG9ubHkgYmVlbiBhYmxlIHRvIHRl c3QgdGhpcyB3aXRoIGRldmljZXMgdXNpbmcgYSBzaW5nbGUgTVNJIGludGVycnVwdA0KPiBhbmQg bm8gbWFzayByZWdpc3Rlci4gSSB3aWxsIHRyeSB0byBmaW5kIGhhcmR3YXJlIHRoYXQgc3VwcG9y dHMgdGhlIG1hc2sNCj4gcmVnaXN0ZXIgYW5kIG1vcmUgdGhhbiBvbmUgdmVjdG9yLCBidXQgSSBj YW5ub3QgbWFrZSBhbnkgcHJvbWlzZXMuDQo+IA0KPiBJZiB0aGVyZSBhcmUgZG91YnRzIGFib3V0 IHRoZSB1bnRlc3RlZCBwYXJ0cyB3ZSBjb3VsZCBhbHdheXMgZm9yY2UgWGVuIHRvDQo+IHJlcG9y dCBubyBwZXItdmVjdG9yIG1hc2tpbmcgc3VwcG9ydCBhbmQgb25seSAxIGF2YWlsYWJsZSB2ZWN0 b3IsIGJ1dCBJIHdvdWxkDQo+IHJhdGhlciBhdm9pZCBkb2luZyBpdC4NCj4gLS0tDQo+ICB4ZW4v YXJjaC94ODYvaHZtL3Ztc2kuYyAgICAgIHwgMTM5ICsrKysrKysrKysrKysrKysrKw0KPiAgeGVu L2FyY2gveDg2L21zaS5jICAgICAgICAgICB8ICAgMyArDQo+ICB4ZW4vZHJpdmVycy92cGNpL01h a2VmaWxlICAgIHwgICAyICstDQo+ICB4ZW4vZHJpdmVycy92cGNpL21zaS5jICAgICAgIHwgMzQz DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIHhlbi9p bmNsdWRlL2FzbS14ODYvaHZtL2lvLmggfCAgIDUgKw0KPiAgeGVuL2luY2x1ZGUvYXNtLXg4Ni9t c2kuaCAgICB8ICAgMyArDQo+ICB4ZW4vaW5jbHVkZS94ZW4vaXJxLmggICAgICAgIHwgICAxICsN Cj4gIHhlbi9pbmNsdWRlL3hlbi92cGNpLmggICAgICAgfCAgMzQgKysrKysNCj4gIDggZmlsZXMg Y2hhbmdlZCwgNTI5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCB4ZW4vZHJpdmVycy92cGNpL21zaS5jDQo+IA0KPiBkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gveDg2L2h2bS92bXNpLmMgYi94ZW4vYXJjaC94ODYvaHZtL3Ztc2kuYw0KPiBpbmRleCA3MTI2 ZGU3ODQxLi40YTZmODE3ZTVjIDEwMDY0NA0KPiAtLS0gYS94ZW4vYXJjaC94ODYvaHZtL3Ztc2ku Yw0KPiArKysgYi94ZW4vYXJjaC94ODYvaHZtL3Ztc2kuYw0KPiBAQCAtMzEsNiArMzEsNyBAQA0K PiAgI2luY2x1ZGUgPHhlbi9lcnJuby5oPg0KPiAgI2luY2x1ZGUgPHhlbi9zY2hlZC5oPg0KPiAg I2luY2x1ZGUgPHhlbi9pcnEuaD4NCj4gKyNpbmNsdWRlIDx4ZW4vdnBjaS5oPg0KPiAgI2luY2x1 ZGUgPHB1YmxpYy9odm0vaW9yZXEuaD4NCj4gICNpbmNsdWRlIDxhc20vaHZtL2lvLmg+DQo+ICAj aW5jbHVkZSA8YXNtL2h2bS92cGljLmg+DQo+IEBAIC02MjEsMyArNjIyLDE0MSBAQCB2b2lkIG1z aXhfd3JpdGVfY29tcGxldGlvbihzdHJ1Y3QgdmNwdSAqdikNCj4gICAgICBpZiAoIG1zaXh0Ymxf d3JpdGUodiwgY3RybF9hZGRyZXNzLCA0LCAwKSAhPSBYODZFTVVMX09LQVkgKQ0KPiAgICAgICAg ICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIk1TSS1YIHdyaXRlIGNvbXBsZXRpb24gZmFpbHVy ZVxuIik7DQo+ICB9DQo+ICsNCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXNpX2dmbGFncyh1aW50 MTZfdCBkYXRhLCB1aW50NjRfdCBhZGRyKQ0KPiArew0KPiArICAgIC8qDQo+ICsgICAgICogV2Ug bmVlZCB0byB1c2UgdGhlIERPTUNUTCBjb25zdGFudHMgaGVyZSBiZWNhdXNlIHRoZSBvdXRwdXQg b2YgdGhpcw0KPiArICAgICAqIGZ1bmN0aW9uIGlzIHVzZWQgYXMgaW5wdXQgdG8gcHRfaXJxX2Ny ZWF0ZV9iaW5kLCB3aGljaCBhbHNvIHRha2VzIHRoZQ0KPiArICAgICAqIGlucHV0IGZyb20gdGhl IERPTUNUTCBpdHNlbGYuDQo+ICsgICAgICovDQo+ICsgICAgcmV0dXJuIE1BU0tfSU5TUihNQVNL X0VYVFIoYWRkciwgTVNJX0FERFJfREVTVF9JRF9NQVNLKSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgIFhFTl9ET01DVExfVk1TSV9YODZfREVTVF9JRF9NQVNLKSB8DQo+ICsgICAgICAgICAgIE1B U0tfSU5TUihNQVNLX0VYVFIoYWRkciwgTVNJX0FERFJfUkVESVJFQ1RJT05fTUFTSyksDQo+ICsg ICAgICAgICAgICAgICAgICAgICBYRU5fRE9NQ1RMX1ZNU0lfWDg2X1JIX01BU0spIHwNCj4gKyAg ICAgICAgICAgTUFTS19JTlNSKE1BU0tfRVhUUihhZGRyLCBNU0lfQUREUl9ERVNUTU9ERV9NQVNL KSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIFhFTl9ET01DVExfVk1TSV9YODZfRE1fTUFTSykg fA0KPiArICAgICAgICAgICBNQVNLX0lOU1IoTUFTS19FWFRSKGRhdGEsIE1TSV9EQVRBX0RFTElW RVJZX01PREVfTUFTSyksDQo+ICsgICAgICAgICAgICAgICAgICAgICBYRU5fRE9NQ1RMX1ZNU0lf WDg2X0RFTElWX01BU0spIHwNCj4gKyAgICAgICAgICAgTUFTS19JTlNSKE1BU0tfRVhUUihkYXRh LCBNU0lfREFUQV9UUklHR0VSX01BU0spLA0KPiArICAgICAgICAgICAgICAgICAgICAgWEVOX0RP TUNUTF9WTVNJX1g4Nl9UUklHX01BU0spOw0KPiArfQ0KPiArDQo+ICt2b2lkIHZwY2lfbXNpX2Fy Y2hfbWFzayhzdHJ1Y3QgdnBjaV9tc2kgKm1zaSwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW50cnksIGJvb2wgbWFz aykNCj4gK3sNCj4gKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArICAgIHN0cnVjdCBpcnFf ZGVzYyAqZGVzYyA9IGRvbWFpbl9zcGluX2xvY2tfaXJxX2Rlc2MocGRldi0+ZG9tYWluLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNp LT5hcmNoLnBpcnEgKyBlbnRyeSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZmbGFncyk7DQo+ICsNCj4gKyAgICBpZiAoICFkZXNjICkN Cj4gKyAgICAgICAgcmV0dXJuOw0KPiArICAgIGd1ZXN0X21hc2tfbXNpX2lycShkZXNjLCBtYXNr KTsNCj4gKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7DQo+ ICt9DQo+ICsNCj4gK2ludCB2cGNpX21zaV9hcmNoX2VuYWJsZShzdHJ1Y3QgdnBjaV9tc2kgKm1z aSwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IHZlY3RvcnMpDQo+ICt7DQo+ICsgICAgc3RydWN0IG1zaV9pbmZvIG1z aV9pbmZvID0gew0KPiArICAgICAgICAuc2VnID0gcGRldi0+c2VnLA0KPiArICAgICAgICAuYnVz ID0gcGRldi0+YnVzLA0KPiArICAgICAgICAuZGV2Zm4gPSBwZGV2LT5kZXZmbiwNCj4gKyAgICAg ICAgLmVudHJ5X25yID0gdmVjdG9ycywNCj4gKyAgICB9Ow0KPiArICAgIHVuc2lnbmVkIGludCBp Ow0KPiArICAgIGludCByYzsNCj4gKw0KPiArICAgIEFTU0VSVChtc2ktPmFyY2gucGlycSA9PSBJ TlZBTElEX1BJUlEpOw0KPiArDQo+ICsgICAgLyogR2V0IGEgUElSUS4gKi8NCj4gKyAgICByYyA9 IGFsbG9jYXRlX2FuZF9tYXBfbXNpX3BpcnEocGRldi0+ZG9tYWluLCAtMSwgJm1zaS0+YXJjaC5w aXJxLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfUElSUV9UWVBF X01VTFRJX01TSSwgJm1zaV9pbmZvKTsNCj4gKyAgICBpZiAoIHJjICkNCj4gKyAgICB7DQo+ICsg ICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICIlMDR4OiUwMng6JTAyeC4ldTogZmFpbGVkIHRv IG1hcCBQSVJROg0KPiAlZFxuIiwNCj4gKyAgICAgICAgICAgICAgICAgcGRldi0+c2VnLCBwZGV2 LT5idXMsIFBDSV9TTE9UKHBkZXYtPmRldmZuKSwNCj4gKyAgICAgICAgICAgICAgICAgUENJX0ZV TkMocGRldi0+ZGV2Zm4pLCByYyk7DQo+ICsgICAgICAgIHJldHVybiByYzsNCj4gKyAgICB9DQo+ ICsNCj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IHZlY3RvcnM7IGkrKyApDQo+ICsgICAgew0KPiAr ICAgICAgICB1aW50OF90IHZlY3RvciA9IE1BU0tfRVhUUihtc2ktPmRhdGEsIE1TSV9EQVRBX1ZF Q1RPUl9NQVNLKTsNCj4gKyAgICAgICAgdWludDhfdCB2ZWN0b3JfbWFzayA9IDB4ZmYgPj4gKDgg LSBmbHMobXNpLT52ZWN0b3JzKSArIDEpOw0KPiArICAgICAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9i aW5kX3B0X2lycSBiaW5kID0gew0KPiArICAgICAgICAgICAgLm1hY2hpbmVfaXJxID0gbXNpLT5h cmNoLnBpcnEgKyBpLA0KPiArICAgICAgICAgICAgLmlycV90eXBlID0gUFRfSVJRX1RZUEVfTVNJ LA0KPiArICAgICAgICAgICAgLnUubXNpLmd2ZWMgPSAodmVjdG9yICYgfnZlY3Rvcl9tYXNrKSB8 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICgodmVjdG9yICsgaSkgJiB2ZWN0b3JfbWFz ayksDQo+ICsgICAgICAgICAgICAudS5tc2kuZ2ZsYWdzID0gbXNpX2dmbGFncyhtc2ktPmRhdGEs IG1zaS0+YWRkcmVzcyksDQo+ICsgICAgICAgIH07DQo+ICsNCj4gKyAgICAgICAgcGNpZGV2c19s b2NrKCk7DQo+ICsgICAgICAgIHJjID0gcHRfaXJxX2NyZWF0ZV9iaW5kKHBkZXYtPmRvbWFpbiwg JmJpbmQpOw0KPiArICAgICAgICBpZiAoIHJjICkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAg ICAgZ2RwcmludGsoWEVOTE9HX0VSUiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICIlMDR4OiUw Mng6JTAyeC4ldTogZmFpbGVkIHRvIGJpbmQgUElSUSAldTogJWRcbiIsDQo+ICsgICAgICAgICAg ICAgICAgICAgICBwZGV2LT5zZWcsIHBkZXYtPmJ1cywgUENJX1NMT1QocGRldi0+ZGV2Zm4pLA0K PiArICAgICAgICAgICAgICAgICAgICAgUENJX0ZVTkMocGRldi0+ZGV2Zm4pLCBtc2ktPmFyY2gu cGlycSArIGksIHJjKTsNCj4gKyAgICAgICAgICAgIHdoaWxlICggYmluZC5tYWNoaW5lX2lycS0t ICkNCj4gKyAgICAgICAgICAgICAgICBwdF9pcnFfZGVzdHJveV9iaW5kKHBkZXYtPmRvbWFpbiwg JmJpbmQpOw0KPiArICAgICAgICAgICAgc3Bpbl9sb2NrKCZwZGV2LT5kb21haW4tPmV2ZW50X2xv Y2spOw0KPiArICAgICAgICAgICAgdW5tYXBfZG9tYWluX3BpcnEocGRldi0+ZG9tYWluLCBtc2kt PmFyY2gucGlycSk7DQo+ICsgICAgICAgICAgICBzcGluX3VubG9jaygmcGRldi0+ZG9tYWluLT5l dmVudF9sb2NrKTsNCj4gKyAgICAgICAgICAgIHBjaWRldnNfdW5sb2NrKCk7DQo+ICsgICAgICAg ICAgICBtc2ktPmFyY2gucGlycSA9IElOVkFMSURfUElSUTsNCj4gKyAgICAgICAgICAgIHJldHVy biByYzsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBwY2lkZXZzX3VubG9jaygpOw0KPiArICAg IH0NCj4gKw0KPiArICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICt2b2lkIHZwY2lfbXNpX2Fy Y2hfZGlzYWJsZShzdHJ1Y3QgdnBjaV9tc2kgKm1zaSwgY29uc3Qgc3RydWN0IHBjaV9kZXYNCj4g KnBkZXYpDQo+ICt7DQo+ICsgICAgdW5zaWduZWQgaW50IGk7DQo+ICsNCj4gKyAgICBBU1NFUlQo bXNpLT5hcmNoLnBpcnEgIT0gSU5WQUxJRF9QSVJRKTsNCj4gKw0KPiArICAgIHBjaWRldnNfbG9j aygpOw0KPiArICAgIGZvciAoIGkgPSAwOyBpIDwgbXNpLT52ZWN0b3JzOyBpKysgKQ0KPiArICAg IHsNCj4gKyAgICAgICAgc3RydWN0IHhlbl9kb21jdGxfYmluZF9wdF9pcnEgYmluZCA9IHsNCj4g KyAgICAgICAgICAgIC5tYWNoaW5lX2lycSA9IG1zaS0+YXJjaC5waXJxICsgaSwNCj4gKyAgICAg ICAgICAgIC5pcnFfdHlwZSA9IFBUX0lSUV9UWVBFX01TSSwNCj4gKyAgICAgICAgfTsNCj4gKyAg ICAgICAgaW50IHJjOw0KPiArDQo+ICsgICAgICAgIHJjID0gcHRfaXJxX2Rlc3Ryb3lfYmluZChw ZGV2LT5kb21haW4sICZiaW5kKTsNCj4gKyAgICAgICAgQVNTRVJUKCFyYyk7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgc3Bpbl9sb2NrKCZwZGV2LT5kb21haW4tPmV2ZW50X2xvY2spOw0KPiArICAg IHVubWFwX2RvbWFpbl9waXJxKHBkZXYtPmRvbWFpbiwgbXNpLT5hcmNoLnBpcnEpOw0KPiArICAg IHNwaW5fdW5sb2NrKCZwZGV2LT5kb21haW4tPmV2ZW50X2xvY2spOw0KPiArICAgIHBjaWRldnNf dW5sb2NrKCk7DQo+ICsNCj4gKyAgICBtc2ktPmFyY2gucGlycSA9IElOVkFMSURfUElSUTsNCj4g K30NCj4gKw0KPiArdm9pZCB2cGNpX21zaV9hcmNoX2luaXQoc3RydWN0IHZwY2lfbXNpICptc2kp DQo+ICt7DQo+ICsgICAgbXNpLT5hcmNoLnBpcnEgPSBJTlZBTElEX1BJUlE7DQo+ICt9DQo+ICsN Cj4gK3ZvaWQgdnBjaV9tc2lfYXJjaF9wcmludChjb25zdCBzdHJ1Y3QgdnBjaV9tc2kgKm1zaSkN Cj4gK3sNCj4gKyAgICBwcmludGsoInZlYz0lIzAyeCU3cyU2cyUzc2Fzc2VydCU1cyU3cyBkZXN0 X2lkPSVsdSBwaXJxOiAlZFxuIiwNCj4gKyAgICAgICAgICAgTUFTS19FWFRSKG1zaS0+ZGF0YSwg TVNJX0RBVEFfVkVDVE9SX01BU0spLA0KPiArICAgICAgICAgICBtc2ktPmRhdGEgJiBNU0lfREFU QV9ERUxJVkVSWV9MT1dQUkkgPyAibG93ZXN0IiA6ICJmaXhlZCIsDQo+ICsgICAgICAgICAgIG1z aS0+ZGF0YSAmIE1TSV9EQVRBX1RSSUdHRVJfTEVWRUwgPyAibGV2ZWwiIDogImVkZ2UiLA0KPiAr ICAgICAgICAgICBtc2ktPmRhdGEgJiBNU0lfREFUQV9MRVZFTF9BU1NFUlQgPyAiIiA6ICJkZSIs DQo+ICsgICAgICAgICAgIG1zaS0+YWRkcmVzcyAmIE1TSV9BRERSX0RFU1RNT0RFX0xPR0lDID8g ImxvZyIgOiAicGh5cyIsDQo+ICsgICAgICAgICAgIG1zaS0+YWRkcmVzcyAmIE1TSV9BRERSX1JF RElSRUNUSU9OX0xPV1BSSSA/ICJsb3dlc3QiIDoNCj4gImZpeGVkIiwNCj4gKyAgICAgICAgICAg TUFTS19FWFRSKG1zaS0+YWRkcmVzcywgTVNJX0FERFJfREVTVF9JRF9NQVNLKSwNCj4gKyAgICAg ICAgICAgbXNpLT5hcmNoLnBpcnEpOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2 L21zaS5jIGIveGVuL2FyY2gveDg2L21zaS5jDQo+IGluZGV4IDQ2NTJiOThjMmQuLjFjMGI5MTEw YjQgMTAwNjQ0DQo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9tc2kuYw0KPiArKysgYi94ZW4vYXJjaC94 ODYvbXNpLmMNCj4gQEAgLTMwLDYgKzMwLDcgQEANCj4gICNpbmNsdWRlIDxwdWJsaWMvcGh5c2Rl di5oPg0KPiAgI2luY2x1ZGUgPHhlbi9pb21tdS5oPg0KPiAgI2luY2x1ZGUgPHhzbS94c20uaD4N Cj4gKyNpbmNsdWRlIDx4ZW4vdnBjaS5oPg0KPiANCj4gIHN0YXRpYyBzOCBfX3JlYWRfbW9zdGx5 IHVzZV9tc2kgPSAtMTsNCj4gIGJvb2xlYW5fcGFyYW0oIm1zaSIsIHVzZV9tc2kpOw0KPiBAQCAt MTUzNCw2ICsxNTM1LDggQEAgc3RhdGljIHZvaWQgZHVtcF9tc2kodW5zaWduZWQgY2hhciBrZXkp DQo+ICAgICAgICAgICAgICAgICBhdHRyLmd1ZXN0X21hc2tlZCA/ICdHJyA6ICcgJywNCj4gICAg ICAgICAgICAgICAgIG1hc2spOw0KPiAgICAgIH0NCj4gKw0KPiArICAgIHZwY2lfZHVtcF9tc2ko KTsNCj4gIH0NCj4gDQo+ICBzdGF0aWMgaW50IF9faW5pdCBtc2lfc2V0dXBfa2V5aGFuZGxlcih2 b2lkKQ0KPiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvdnBjaS9NYWtlZmlsZSBiL3hlbi9kcml2 ZXJzL3ZwY2kvTWFrZWZpbGUNCj4gaW5kZXggMjQxNDY3MjEyZi4uNjJjZWM5ZTgyYiAxMDA2NDQN Cj4gLS0tIGEveGVuL2RyaXZlcnMvdnBjaS9NYWtlZmlsZQ0KPiArKysgYi94ZW4vZHJpdmVycy92 cGNpL01ha2VmaWxlDQo+IEBAIC0xICsxIEBADQo+IC1vYmoteSArPSB2cGNpLm8gaGVhZGVyLm8N Cj4gK29iai15ICs9IHZwY2kubyBoZWFkZXIubyBtc2kubw0KPiBkaWZmIC0tZ2l0IGEveGVuL2Ry aXZlcnMvdnBjaS9tc2kuYyBiL3hlbi9kcml2ZXJzL3ZwY2kvbXNpLmMNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uODFkODU2YjVkMA0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL3hlbi9kcml2ZXJzL3ZwY2kvbXNpLmMNCj4gQEAgLTAsMCArMSwzNDMgQEANCj4g Ky8qDQo+ICsgKiBIYW5kbGVycyBmb3IgYWNjZXNzZXMgdG8gdGhlIE1TSSBjYXBhYmlsaXR5IHN0 cnVjdHVyZS4NCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2l0cml4IFN5c3RlbXMg UiZEDQo+ICsgKg0KPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBh bmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlLCB2 ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0K PiArICoNCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCj4gR05VDQo+ICsg KiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ICsgKg0KPiArICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj DQo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZQ0KPiA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUg PHhlbi9zY2hlZC5oPg0KPiArI2luY2x1ZGUgPHhlbi9zb2Z0aXJxLmg+DQo+ICsjaW5jbHVkZSA8 eGVuL3ZwY2kuaD4NCj4gKw0KPiArI2luY2x1ZGUgPGFzbS9tc2kuaD4NCj4gKw0KPiArc3RhdGlj IHVpbnQzMl90IGNvbnRyb2xfcmVhZChjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWdu ZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkN Cj4gK3sNCj4gKyAgICBjb25zdCBzdHJ1Y3QgdnBjaV9tc2kgKm1zaSA9IGRhdGE7DQo+ICsNCj4g KyAgICByZXR1cm4gTUFTS19JTlNSKGZscyhtc2ktPm1heF92ZWN0b3JzKSAtIDEsIFBDSV9NU0lf RkxBR1NfUU1BU0spDQo+IHwNCj4gKyAgICAgICAgICAgTUFTS19JTlNSKGZscyhtc2ktPnZlY3Rv cnMpIC0gMSwgUENJX01TSV9GTEFHU19RU0laRSkgfA0KPiArICAgICAgICAgICAobXNpLT5lbmFi bGVkID8gUENJX01TSV9GTEFHU19FTkFCTEUgOiAwKSB8DQo+ICsgICAgICAgICAgIChtc2ktPm1h c2tpbmcgPyBQQ0lfTVNJX0ZMQUdTX01BU0tCSVQgOiAwKSB8DQo+ICsgICAgICAgICAgIChtc2kt PmFkZHJlc3M2NCA/IFBDSV9NU0lfRkxBR1NfNjRCSVQgOiAwKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgY29udHJvbF93cml0ZShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWdu ZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsLCB2 b2lkICpkYXRhKQ0KPiArew0KPiArICAgIHN0cnVjdCB2cGNpX21zaSAqbXNpID0gZGF0YTsNCj4g KyAgICB1bnNpZ25lZCBpbnQgdmVjdG9ycyA9IG1pbl90KHVpbnQ4X3QsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxdSA8PCBNQVNLX0VYVFIodmFsLCBQQ0lfTVNJX0ZMQUdT X1FTSVpFKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zaS0+bWF4X3Zl Y3RvcnMpOw0KPiArICAgIGJvb2wgbmV3X2VuYWJsZWQgPSB2YWwgJiBQQ0lfTVNJX0ZMQUdTX0VO QUJMRTsNCj4gKw0KPiArICAgIC8qDQo+ICsgICAgICogTm8gY2hhbmdlIGlmIHRoZSBlbmFibGUg ZmllbGQgYW5kIHRoZSBudW1iZXIgb2YgdmVjdG9ycyBpcw0KPiArICAgICAqIHRoZSBzYW1lIG9y IHRoZSBkZXZpY2UgaXMgbm90IGVuYWJsZWQsIGluIHdoaWNoIGNhc2UgdGhlDQo+ICsgICAgICog dmVjdG9ycyBmaWVsZCBjYW4gYmUgdXBkYXRlZCBkaXJlY3RseS4NCj4gKyAgICAgKi8NCj4gKyAg ICBpZiAoIG5ld19lbmFibGVkID09IG1zaS0+ZW5hYmxlZCAmJg0KPiArICAgICAgICAgKHZlY3Rv cnMgPT0gbXNpLT52ZWN0b3JzIHx8ICFtc2ktPmVuYWJsZWQpICkNCj4gKyAgICB7DQo+ICsgICAg ICAgIG1zaS0+dmVjdG9ycyA9IHZlY3RvcnM7DQo+ICsgICAgICAgIHJldHVybjsNCj4gKyAgICB9 DQo+ICsNCj4gKyAgICBpZiAoIG5ld19lbmFibGVkICkNCj4gKyAgICB7DQo+ICsgICAgICAgIHVu c2lnbmVkIGludCBpOw0KPiArDQo+ICsgICAgICAgIC8qDQo+ICsgICAgICAgICAqIElmIHRoZSBk ZXZpY2UgaXMgYWxyZWFkeSBlbmFibGVkIGl0IG1lYW5zIHRoZSBudW1iZXIgb2YNCj4gKyAgICAg ICAgICogZW5hYmxlZCBtZXNzYWdlcyBoYXMgY2hhbmdlZC4gRGlzYWJsZSBhbmQgcmUtZW5hYmxl IHRoZQ0KPiArICAgICAgICAgKiBkZXZpY2UgaW4gb3JkZXIgdG8gYXBwbHkgdGhlIGNoYW5nZS4N Cj4gKyAgICAgICAgICovDQo+ICsgICAgICAgIGlmICggbXNpLT5lbmFibGVkICkNCj4gKyAgICAg ICAgew0KPiArICAgICAgICAgICAgdnBjaV9tc2lfYXJjaF9kaXNhYmxlKG1zaSwgcGRldik7DQo+ ICsgICAgICAgICAgICBtc2ktPmVuYWJsZWQgPSBmYWxzZTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ ICsgICAgICAgIGlmICggdnBjaV9tc2lfYXJjaF9lbmFibGUobXNpLCBwZGV2LCB2ZWN0b3JzKSAp DQo+ICsgICAgICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICAgICAgZm9yICggaSA9IDA7IG1z aS0+bWFza2luZyAmJiBpIDwgdmVjdG9yczsgaSsrICkNCj4gKyAgICAgICAgICAgIHZwY2lfbXNp X2FyY2hfbWFzayhtc2ksIHBkZXYsIGksIChtc2ktPm1hc2sgPj4gaSkgJiAxKTsNCj4gKyAgICB9 DQo+ICsgICAgZWxzZQ0KPiArICAgICAgICB2cGNpX21zaV9hcmNoX2Rpc2FibGUobXNpLCBwZGV2 KTsNCj4gKw0KPiArICAgIG1zaS0+dmVjdG9ycyA9IHZlY3RvcnM7DQo+ICsgICAgbXNpLT5lbmFi bGVkID0gbmV3X2VuYWJsZWQ7DQo+ICsNCj4gKyAgICBwY2lfY29uZl93cml0ZTE2KHBkZXYtPnNl ZywgcGRldi0+YnVzLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksDQo+ICsgICAgICAgICAgICAgICAg ICAgICBQQ0lfRlVOQyhwZGV2LT5kZXZmbiksIHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAg IGNvbnRyb2xfcmVhZChwZGV2LCByZWcsIGRhdGEpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgdXBkYXRlX21zaShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHZwY2lfbXNp ICptc2kpDQo+ICt7DQo+ICsgICAgaWYgKCAhbXNpLT5lbmFibGVkICkNCj4gKyAgICAgICAgcmV0 dXJuOw0KPiArDQo+ICsgICAgdnBjaV9tc2lfYXJjaF9kaXNhYmxlKG1zaSwgcGRldik7DQo+ICsg ICAgaWYgKCB2cGNpX21zaV9hcmNoX2VuYWJsZShtc2ksIHBkZXYsIG1zaS0+dmVjdG9ycykgKQ0K PiArICAgICAgICBtc2ktPmVuYWJsZWQgPSBmYWxzZTsNCj4gK30NCj4gKw0KPiArLyogSGFuZGxl cnMgZm9yIHRoZSBhZGRyZXNzIGZpZWxkICgzMmJpdCBvciBsb3cgcGFydCBvZiBhIDY0Yml0IGFk ZHJlc3MpLiAqLw0KPiArc3RhdGljIHVpbnQzMl90IGFkZHJlc3NfcmVhZChjb25zdCBzdHJ1Y3Qg cGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKyAgICBjb25zdCBzdHJ1Y3QgdnBjaV9tc2kg Km1zaSA9IGRhdGE7DQo+ICsNCj4gKyAgICByZXR1cm4gbXNpLT5hZGRyZXNzOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBhZGRyZXNzX3dyaXRlKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2 LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCB2YWwsIHZvaWQgKmRhdGEpDQo+ICt7DQo+ICsgICAgc3RydWN0IHZwY2lfbXNpICptc2kgPSBk YXRhOw0KPiArDQo+ICsgICAgLyogQ2xlYXIgbG93IHBhcnQuICovDQo+ICsgICAgbXNpLT5hZGRy ZXNzICY9IH4weGZmZmZmZmZmdWxsOw0KPiArICAgIG1zaS0+YWRkcmVzcyB8PSB2YWw7DQo+ICsN Cj4gKyAgICB1cGRhdGVfbXNpKHBkZXYsIG1zaSk7DQo+ICt9DQo+ICsNCj4gKy8qIEhhbmRsZXJz IGZvciB0aGUgaGlnaCBwYXJ0IG9mIGEgNjRiaXQgYWRkcmVzcyBmaWVsZC4gKi8NCj4gK3N0YXRp YyB1aW50MzJfdCBhZGRyZXNzX2hpX3JlYWQoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVu c2lnbmVkIGludA0KPiByZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKmRhdGEpDQo+ICt7DQo+ICsgICAgY29uc3Qgc3RydWN0IHZwY2lfbXNpICptc2kgPSBkYXRh Ow0KPiArDQo+ICsgICAgcmV0dXJuIG1zaS0+YWRkcmVzcyA+PiAzMjsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHZvaWQgYWRkcmVzc19oaV93cml0ZShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwg dW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3QgdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAgIHN0cnVjdCB2cGNpX21zaSAqbXNpID0g ZGF0YTsNCj4gKw0KPiArICAgIC8qIENsZWFyIGFuZCB1cGRhdGUgaGlnaCBwYXJ0LiAqLw0KPiAr ICAgIG1zaS0+YWRkcmVzcyAmPSAweGZmZmZmZmZmOw0KPiArICAgIG1zaS0+YWRkcmVzcyB8PSAo dWludDY0X3QpdmFsIDw8IDMyOw0KPiArDQo+ICsgICAgdXBkYXRlX21zaShwZGV2LCBtc2kpOw0K PiArfQ0KPiArDQo+ICsvKiBIYW5kbGVycyBmb3IgdGhlIGRhdGEgZmllbGQuICovDQo+ICtzdGF0 aWMgdWludDMyX3QgZGF0YV9yZWFkKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25l ZCBpbnQgcmVnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQ0KPiAr ew0KPiArICAgIGNvbnN0IHN0cnVjdCB2cGNpX21zaSAqbXNpID0gZGF0YTsNCj4gKw0KPiArICAg IHJldHVybiBtc2ktPmRhdGE7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGRhdGFfd3JpdGUo Y29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCByZWcsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbCwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKyAgICBz dHJ1Y3QgdnBjaV9tc2kgKm1zaSA9IGRhdGE7DQo+ICsNCj4gKyAgICBtc2ktPmRhdGEgPSB2YWw7 DQo+ICsNCj4gKyAgICB1cGRhdGVfbXNpKHBkZXYsIG1zaSk7DQo+ICt9DQo+ICsNCj4gKy8qIEhh bmRsZXJzIGZvciB0aGUgTVNJIG1hc2sgYml0cy4gKi8NCj4gK3N0YXRpYyB1aW50MzJfdCBtYXNr X3JlYWQoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCByZWcsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpDQo+ICt7DQo+ICsgICAgY29uc3Qg c3RydWN0IHZwY2lfbXNpICptc2kgPSBkYXRhOw0KPiArDQo+ICsgICAgcmV0dXJuIG1zaS0+bWFz azsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbWFza193cml0ZShjb25zdCBzdHJ1Y3QgcGNp X2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAgIHN0cnVjdCB2cGNpX21zaSAq bXNpID0gZGF0YTsNCj4gKyAgICB1aW50MzJfdCBkbWFzayA9IG1zaS0+bWFzayBeIHZhbDsNCj4g Kw0KPiArICAgIGlmICggIWRtYXNrICkNCj4gKyAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAg aWYgKCBtc2ktPmVuYWJsZWQgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgdW5zaWduZWQgaW50IGk7 DQo+ICsNCj4gKyAgICAgICAgZm9yICggaSA9IGZmcyhkbWFzaykgLSAxOyBkbWFzayAmJiBpIDwg bXNpLT52ZWN0b3JzOw0KPiArICAgICAgICAgICAgICBpID0gZmZzKGRtYXNrKSAtIDEgKQ0KPiAr ICAgICAgICB7DQo+ICsgICAgICAgICAgICB2cGNpX21zaV9hcmNoX21hc2sobXNpLCBwZGV2LCBp LCAodmFsID4+IGkpICYgMSk7DQo+ICsgICAgICAgICAgICBfX2NsZWFyX2JpdChpLCAmZG1hc2sp Ow0KPiArICAgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgbXNpLT5tYXNrID0gdmFsOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGluaXRfbXNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0K PiArew0KPiArICAgIHVpbnQ4X3Qgc2VnID0gcGRldi0+c2VnLCBidXMgPSBwZGV2LT5idXM7DQo+ ICsgICAgdWludDhfdCBzbG90ID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pLCBmdW5jID0gUENJX0ZV TkMocGRldi0+ZGV2Zm4pOw0KPiArICAgIHN0cnVjdCB2cGNpX21zaSAqbXNpOw0KPiArICAgIHVu c2lnbmVkIGludCBwb3MgPSBwY2lfZmluZF9jYXBfb2Zmc2V0KHNlZywgYnVzLCBzbG90LCBmdW5j LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9DQVBf SURfTVNJKTsNCj4gKyAgICB1aW50MTZfdCBjb250cm9sOw0KPiArICAgIGludCByZXQ7DQo+ICsN Cj4gKyAgICBpZiAoICFwb3MgKQ0KPiArICAgICAgICByZXR1cm4gMDsNCj4gKw0KPiArICAgIG1z aSA9IHh6YWxsb2Moc3RydWN0IHZwY2lfbXNpKTsNCj4gKyAgICBpZiAoICFtc2kgKQ0KPiArICAg ICAgICByZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArICAgIHJldCA9IHZwY2lfYWRkX3JlZ2lzdGVy KHBkZXYtPnZwY2ksIGNvbnRyb2xfcmVhZCwgY29udHJvbF93cml0ZSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtc2lfY29udHJvbF9yZWcocG9zKSwgMiwgbXNpKTsNCj4gKyAgICBp ZiAoIHJldCApDQo+ICsgICAgew0KPiArICAgICAgICB4ZnJlZShtc2kpOw0KPiArICAgICAgICBy ZXR1cm4gcmV0Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIC8qIEdldCB0aGUgbWF4aW11bSBudW1i ZXIgb2YgdmVjdG9ycyB0aGUgZGV2aWNlIHN1cHBvcnRzLiAqLw0KPiArICAgIGNvbnRyb2wgPSBw Y2lfY29uZl9yZWFkMTYoc2VnLCBidXMsIHNsb3QsIGZ1bmMsIG1zaV9jb250cm9sX3JlZyhwb3Mp KTsNCj4gKyAgICBtc2ktPm1heF92ZWN0b3JzID0gbXVsdGlfbXNpX2NhcGFibGUoY29udHJvbCk7 DQo+ICsgICAgQVNTRVJUKG1zaS0+bWF4X3ZlY3RvcnMgPD0gMzIpOw0KPiArDQo+ICsgICAgLyog VGhlIG11bHRpcGxlIG1lc3NhZ2UgZW5hYmxlIGlzIDAgYWZ0ZXIgcmVzZXQgKDEgbWVzc2FnZSBl bmFibGVkKS4gKi8NCj4gKyAgICBtc2ktPnZlY3RvcnMgPSAxOw0KPiArDQo+ICsgICAgLyogTm8g UElSUSBib3VuZCB5ZXQuICovDQo+ICsgICAgdnBjaV9tc2lfYXJjaF9pbml0KG1zaSk7DQo+ICsN Cj4gKyAgICBtc2ktPmFkZHJlc3M2NCA9IGlzXzY0Yml0X2FkZHJlc3MoY29udHJvbCk7DQo+ICsg ICAgbXNpLT5tYXNraW5nID0gaXNfbWFza19iaXRfc3VwcG9ydChjb250cm9sKTsNCj4gKw0KPiAr ICAgIHJldCA9IHZwY2lfYWRkX3JlZ2lzdGVyKHBkZXYtPnZwY2ksIGFkZHJlc3NfcmVhZCwgYWRk cmVzc193cml0ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2lfbG93ZXJfYWRk cmVzc19yZWcocG9zKSwgNCwgbXNpKTsNCj4gKyAgICBpZiAoIHJldCApDQo+ICsgICAgew0KPiAr ICAgICAgICB4ZnJlZShtc2kpOw0KPiArICAgICAgICByZXR1cm4gcmV0Ow0KPiArICAgIH0NCj4g Kw0KPiArICAgIHJldCA9IHZwY2lfYWRkX3JlZ2lzdGVyKHBkZXYtPnZwY2ksIGRhdGFfcmVhZCwg ZGF0YV93cml0ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2lfZGF0YV9yZWco cG9zLCBtc2ktPmFkZHJlc3M2NCksIDIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg bXNpKTsNCj4gKyAgICBpZiAoIHJldCApDQo+ICsgICAgew0KPiArICAgICAgICB4ZnJlZShtc2kp Ow0KPiArICAgICAgICByZXR1cm4gcmV0Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmICggbXNp LT5hZGRyZXNzNjQgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgcmV0ID0gdnBjaV9hZGRfcmVnaXN0 ZXIocGRldi0+dnBjaSwgYWRkcmVzc19oaV9yZWFkLA0KPiBhZGRyZXNzX2hpX3dyaXRlLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2lfdXBwZXJfYWRkcmVzc19yZWcocG9z KSwgNCwgbXNpKTsNCj4gKyAgICAgICAgaWYgKCByZXQgKQ0KPiArICAgICAgICB7DQo+ICsgICAg ICAgICAgICB4ZnJlZShtc2kpOw0KPiArICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gKyAgICAg ICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmICggbXNpLT5tYXNraW5nICkNCj4gKyAgICB7 DQo+ICsgICAgICAgIHJldCA9IHZwY2lfYWRkX3JlZ2lzdGVyKHBkZXYtPnZwY2ksIG1hc2tfcmVh ZCwgbWFza193cml0ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNpX21h c2tfYml0c19yZWcocG9zLCBtc2ktPmFkZHJlc3M2NCksIDQsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1zaSk7DQo+ICsgICAgICAgIGlmICggcmV0ICkNCj4gKyAgICAgICAg ew0KPiArICAgICAgICAgICAgeGZyZWUobXNpKTsNCj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7 DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICByZXQgPSB2cGNpX2FkZF9yZWdpc3Rlcihw ZGV2LT52cGNpLCB2cGNpX2h3X3JlYWQzMiwgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbXNpX3BlbmRpbmdfYml0c19yZWcocG9zLCBtc2ktPmFkZHJlc3M2NCksIDQs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zaSk7DQo+ICsgICAgICAgIGlm ICggcmV0ICkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgICAgeGZyZWUobXNpKTsNCj4gKyAg ICAgICAgICAgIHJldHVybiByZXQ7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAg ICBwZGV2LT52cGNpLT5tc2kgPSBtc2k7DQo+ICsNCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4g K1JFR0lTVEVSX1ZQQ0lfSU5JVChpbml0X21zaSk7DQo+ICsNCj4gK3ZvaWQgdnBjaV9kdW1wX21z aSh2b2lkKQ0KPiArew0KPiArICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKmQ7DQo+ICsNCj4gKyAg ICByY3VfcmVhZF9sb2NrKCZkb21saXN0X3JlYWRfbG9jayk7DQo+ICsgICAgZm9yX2VhY2hfZG9t YWluICggZCApDQo+ICsgICAgew0KPiArICAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRl djsNCj4gKw0KPiArICAgICAgICBpZiAoICFoYXNfdnBjaShkKSApDQo+ICsgICAgICAgICAgICBj b250aW51ZTsNCj4gKw0KPiArICAgICAgICBwcmludGsoInZQQ0kgTVNJIGQlZFxuIiwgZC0+ZG9t YWluX2lkKTsNCj4gKw0KPiArICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5ICggcGRldiwgJmQt PmFyY2gucGRldl9saXN0LCBkb21haW5fbGlzdCApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAg ICAgIHVpbnQ4X3Qgc2VnID0gcGRldi0+c2VnLCBidXMgPSBwZGV2LT5idXM7DQo+ICsgICAgICAg ICAgICB1aW50OF90IHNsb3QgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIGZ1bmMgPSBQQ0lfRlVO QyhwZGV2LQ0KPiA+ZGV2Zm4pOw0KPiArICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZwY2lfbXNp ICptc2kgPSBwZGV2LT52cGNpLT5tc2k7DQo+ICsNCj4gKyAgICAgICAgICAgIGlmICggIXNwaW5f dHJ5bG9jaygmcGRldi0+dnBjaS0+bG9jaykgKQ0KPiArICAgICAgICAgICAgew0KPiArICAgICAg ICAgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGdldCB2UENJIGxvY2ssIHNraXBwaW5nXG4iKTsN Cj4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gKyAgICAgICAgICAgIH0NCj4gKw0KPiAr ICAgICAgICAgICAgaWYgKCBtc2kgKQ0KPiArICAgICAgICAgICAgew0KPiArICAgICAgICAgICAg ICAgIHByaW50aygiJTA0eDolMDJ4OiUwMnguJXVcbiIsIHNlZywgYnVzLCBzbG90LCBmdW5jKTsN Cj4gKw0KPiArICAgICAgICAgICAgICAgIHByaW50aygiICBlbmFibGVkOiAlZCA2NC1iaXQ6ICVk IiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgbXNpLT5lbmFibGVkLCBtc2ktPmFkZHJlc3M2 NCk7DQo+ICsgICAgICAgICAgICAgICAgaWYgKCBtc2ktPm1hc2tpbmcgKQ0KPiArICAgICAgICAg ICAgICAgICAgICBwcmludGsoIiBtYXNrPSUwOHgiLCBtc2ktPm1hc2spOw0KPiArICAgICAgICAg ICAgICAgIHByaW50aygiIHZlY3RvcnMgbWF4OiAldSBlbmFibGVkOiAldVxuIiwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgbXNpLT5tYXhfdmVjdG9ycywgbXNpLT52ZWN0b3JzKTsNCj4gKw0K PiArICAgICAgICAgICAgICAgIHZwY2lfbXNpX2FyY2hfcHJpbnQobXNpKTsNCj4gKyAgICAgICAg ICAgIH0NCj4gKw0KPiArICAgICAgICAgICAgc3Bpbl91bmxvY2soJnBkZXYtPnZwY2ktPmxvY2sp Ow0KPiArICAgICAgICAgICAgcHJvY2Vzc19wZW5kaW5nX3NvZnRpcnFzKCk7DQo+ICsgICAgICAg IH0NCj4gKyAgICB9DQo+ICsgICAgcmN1X3JlYWRfdW5sb2NrKCZkb21saXN0X3JlYWRfbG9jayk7 DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6DQo+ICsgKiBtb2RlOiBD DQo+ICsgKiBjLWZpbGUtc3R5bGU6ICJCU0QiDQo+ICsgKiBjLWJhc2ljLW9mZnNldDogNA0KPiAr ICogdGFiLXdpZHRoOiA0DQo+ICsgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwNCj4gKyAqIEVuZDoN Cj4gKyAqLw0KPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaCBiL3hl bi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmgNCj4gaW5kZXggNTVhMGE2Nzc1NC4uMmI0ZGZkODhk ZiAxMDA2NDQNCj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaA0KPiArKysgYi94 ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9pby5oDQo+IEBAIC0xMjcsNiArMTI3LDExIEBAIHZvaWQg aHZtX2RwY2lfZW9pKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludA0KPiBndWVzdF9pcnEs DQo+ICB2b2lkIG1zaXhfd3JpdGVfY29tcGxldGlvbihzdHJ1Y3QgdmNwdSAqKTsNCj4gIHZvaWQg bXNpeHRibF9pbml0KHN0cnVjdCBkb21haW4gKmQpOw0KPiANCj4gKy8qIEFyY2gtc3BlY2lmaWMg TVNJIGRhdGEgZm9yIHZQQ0kuICovDQo+ICtzdHJ1Y3QgdnBjaV9hcmNoX21zaSB7DQo+ICsgICAg aW50IHBpcnE7DQo+ICt9Ow0KPiArDQo+ICBlbnVtIHN0ZHZnYV9jYWNoZV9zdGF0ZSB7DQo+ICAg ICAgU1REVkdBX0NBQ0hFX1VOSU5JVElBTElaRUQsDQo+ICAgICAgU1REVkdBX0NBQ0hFX0VOQUJM RUQsDQo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L21zaS5oIGIveGVuL2luY2x1 ZGUvYXNtLXg4Ni9tc2kuaA0KPiBpbmRleCAzN2QzN2I4MjBlLi5hZjIzYTAwNjJlIDEwMDY0NA0K PiAtLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L21zaS5oDQo+ICsrKyBiL3hlbi9pbmNsdWRlL2Fz bS14ODYvbXNpLmgNCj4gQEAgLTQ4LDYgKzQ4LDcgQEANCj4gICNkZWZpbmUgTVNJX0FERFJfUkVE SVJFQ1RJT05fU0hJRlQgIDMNCj4gICNkZWZpbmUgTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVICAg ICgwIDw8DQo+IE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUKQ0KPiAgI2RlZmluZSBNU0lfQURE Ul9SRURJUkVDVElPTl9MT1dQUkkgKDEgPDwNCj4gTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQp DQo+ICsjZGVmaW5lIE1TSV9BRERSX1JFRElSRUNUSU9OX01BU0sgICAoMSA8PA0KPiBNU0lfQURE Ul9SRURJUkVDVElPTl9TSElGVCkNCj4gDQo+ICAjZGVmaW5lIE1TSV9BRERSX0RFU1RfSURfU0hJ RlQJCTEyDQo+ICAjZGVmaW5lCSBNU0lfQUREUl9ERVNUX0lEX01BU0sJCTB4MDBmZjAwMA0KPiBA QCAtMTUyLDYgKzE1Myw4IEBAIGludCBtc2lfZnJlZV9pcnEoc3RydWN0IG1zaV9kZXNjICplbnRy eSk7DQo+ICAJKCAoaXM2NGJpdCA9PSAxKSA/IGJhc2UrUENJX01TSV9EQVRBXzY0IDogYmFzZStQ Q0lfTVNJX0RBVEFfMzINCj4gKQ0KPiAgI2RlZmluZSBtc2lfbWFza19iaXRzX3JlZyhiYXNlLCBp czY0Yml0KSBcDQo+ICAJKCAoaXM2NGJpdCA9PSAxKSA/IGJhc2UrUENJX01TSV9NQVNLX0JJVCA6 DQo+IGJhc2UrUENJX01TSV9NQVNLX0JJVC00KQ0KPiArI2RlZmluZSBtc2lfcGVuZGluZ19iaXRz X3JlZyhiYXNlLCBpczY0Yml0KSBcDQo+ICsJKCAoaXM2NGJpdCA9PSAxKSA/IGJhc2UrUENJX01T SV9NQVNLX0JJVCs0IDoNCj4gYmFzZStQQ0lfTVNJX01BU0tfQklUKQ0KPiAgI2RlZmluZSBtc2lf ZGlzYWJsZShjb250cm9sKQkJY29udHJvbCAmPSB+UENJX01TSV9GTEFHU19FTkFCTEUNCj4gICNk ZWZpbmUgbXVsdGlfbXNpX2NhcGFibGUoY29udHJvbCkgXA0KPiAgCSgxIDw8ICgoY29udHJvbCAm IFBDSV9NU0lfRkxBR1NfUU1BU0spID4+IDEpKQ0KPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUv eGVuL2lycS5oIGIveGVuL2luY2x1ZGUveGVuL2lycS5oDQo+IGluZGV4IDBhYTgxN2UyNjYuLjU4 NmI3ODM5M2EgMTAwNjQ0DQo+IC0tLSBhL3hlbi9pbmNsdWRlL3hlbi9pcnEuaA0KPiArKysgYi94 ZW4vaW5jbHVkZS94ZW4vaXJxLmgNCj4gQEAgLTEzMyw2ICsxMzMsNyBAQCBzdHJ1Y3QgcGlycSB7 DQo+ICAgICAgc3RydWN0IGFyY2hfcGlycSBhcmNoOw0KPiAgfTsNCj4gDQo+ICsjZGVmaW5lIElO VkFMSURfUElSUSAoLTEpDQo+ICAjZGVmaW5lIHBpcnFfaW5mbyhkLCBwKSAoKHN0cnVjdCBwaXJx ICopcmFkaXhfdHJlZV9sb29rdXAoJihkKS0+cGlycV90cmVlLA0KPiBwKSkNCj4gDQo+ICAvKiBV c2UgdGhpcyBpbnN0ZWFkIG9mIHBpcnFfaW5mbygpIGlmIHRoZSBzdHJ1Y3R1cmUgbWF5IG5lZWQg YWxsb2NhdGluZy4gKi8NCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi92cGNpLmggYi94 ZW4vaW5jbHVkZS94ZW4vdnBjaS5oDQo+IGluZGV4IDEwNjljYmI4YmYuLmU4MjVhNzA1YjYgMTAw NjQ0DQo+IC0tLSBhL3hlbi9pbmNsdWRlL3hlbi92cGNpLmgNCj4gKysrIGIveGVuL2luY2x1ZGUv eGVuL3ZwY2kuaA0KPiBAQCAtNzksNiArNzksMjggQEAgc3RydWN0IHZwY2kgew0KPiAgICAgICAg ICB9IGJhcnNbN107IC8qIEF0IG1vc3QgNiBCQVJTICsgMSBleHBhbnNpb24gUk9NIEJBUi4gKi8N Cj4gICAgICAgICAgLyogRklYTUU6IGN1cnJlbnRseSB0aGVyZSdzIG5vIHN1cHBvcnQgZm9yIFNS LUlPVi4gKi8NCj4gICAgICB9IGhlYWRlcjsNCj4gKw0KPiArICAgIC8qIE1TSSBkYXRhLiAqLw0K PiArICAgIHN0cnVjdCB2cGNpX21zaSB7DQo+ICsgICAgICAgIC8qIEFkZHJlc3MuICovDQo+ICsg ICAgICAgIHVpbnQ2NF90IGFkZHJlc3M7DQo+ICsgICAgICAgIC8qIE1hc2sgYml0ZmllbGQuICov DQo+ICsgICAgICAgIHVpbnQzMl90IG1hc2s7DQo+ICsgICAgICAgIC8qIERhdGEuICovDQo+ICsg ICAgICAgIHVpbnQxNl90IGRhdGE7DQo+ICsgICAgICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIHZl Y3RvcnMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuICovDQo+ICsgICAgICAgIHVpbnQ4X3QgbWF4 X3ZlY3RvcnMgOiA1Ow0KPiArICAgICAgICAvKiBOdW1iZXIgb2YgdmVjdG9ycyBjb25maWd1cmVk LiAqLw0KPiArICAgICAgICB1aW50OF90IHZlY3RvcnMgICAgIDogNTsNCj4gKyAgICAgICAgLyog RW5hYmxlZD8gKi8NCj4gKyAgICAgICAgYm9vbCBlbmFibGVkICAgICAgICA6IDE7DQo+ICsgICAg ICAgIC8qIFN1cHBvcnRzIHBlci12ZWN0b3IgbWFza2luZz8gKi8NCj4gKyAgICAgICAgYm9vbCBt YXNraW5nICAgICAgICA6IDE7DQo+ICsgICAgICAgIC8qIDY0LWJpdCBhZGRyZXNzIGNhcGFibGU/ ICovDQo+ICsgICAgICAgIGJvb2wgYWRkcmVzczY0ICAgICAgOiAxOw0KPiArICAgICAgICAvKiBB cmNoLXNwZWNpZmljIGRhdGEuICovDQo+ICsgICAgICAgIHN0cnVjdCB2cGNpX2FyY2hfbXNpIGFy Y2g7DQo+ICsgICAgfSAqbXNpOw0KPiAgI2VuZGlmDQo+ICB9Ow0KPiANCj4gQEAgLTg5LDYgKzEx MSwxOCBAQCBzdHJ1Y3QgdnBjaV92Y3B1IHsNCj4gICAgICBib29sIG1hcCA6IDE7DQo+ICAgICAg Ym9vbCByb20gOiAxOw0KPiAgfTsNCj4gKw0KPiArdm9pZCB2cGNpX2R1bXBfbXNpKHZvaWQpOw0K PiArDQo+ICsvKiBBcmNoLXNwZWNpZmljIHZQQ0kgTVNJIGhlbHBlcnMuICovDQo+ICt2b2lkIHZw Y2lfbXNpX2FyY2hfbWFzayhzdHJ1Y3QgdnBjaV9tc2kgKm1zaSwgY29uc3Qgc3RydWN0IHBjaV9k ZXYgKnBkZXYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW50cnks IGJvb2wgbWFzayk7DQo+ICtpbnQgX19tdXN0X2NoZWNrIHZwY2lfbXNpX2FyY2hfZW5hYmxlKHN0 cnVjdCB2cGNpX21zaSAqbXNpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZlY3RvcnMpOw0KPiArdm9pZCB2cGNpX21z aV9hcmNoX2Rpc2FibGUoc3RydWN0IHZwY2lfbXNpICptc2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2 DQo+ICpwZGV2KTsNCj4gK3ZvaWQgdnBjaV9tc2lfYXJjaF9pbml0KHN0cnVjdCB2cGNpX21zaSAq bXNpKTsNCj4gK3ZvaWQgdnBjaV9tc2lfYXJjaF9wcmludChjb25zdCBzdHJ1Y3QgdnBjaV9tc2kg Km1zaSk7DQo+ICAjZW5kaWYNCj4gDQo+ICAjZWxzZSAvKiAhQ09ORklHX0hBU19QQ0kgKi8NCj4g LS0NCj4gMi4xMy41IChBcHBsZSBHaXQtOTQpDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=