From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v10 07/11] vpci/bars: add handlers to map the BARs Date: Mon, 19 Mar 2018 10:22:36 +0000 Message-ID: <1fc2234601b74ccbaa59af1ebf015326@AMSPEX02CL03.citrite.net> References: <20180316133008.66443-1-roger.pau@citrix.com> <20180316133008.66443-8-roger.pau@citrix.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]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1exrwF-0003sj-18 for xen-devel@lists.xenproject.org; Mon, 19 Mar 2018 10:22:47 +0000 In-Reply-To: <20180316133008.66443-8-roger.pau@citrix.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: "xen-devel@lists.xenproject.org" Cc: Stefano Stabellini , Wei Liu , Andrew Cooper , "Tim (Xen.org)" , George Dunlap , Julien Grall , Jan Beulich , Ian Jackson , Boris Ostrovsky , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSb2dlciBQYXUgTW9ubmUgW21h aWx0bzpyb2dlci5wYXVAY2l0cml4LmNvbV0NCj4gU2VudDogMTYgTWFyY2ggMjAxOCAxMzozMA0K PiBUbzogeGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IENjOiBCb3JpcyBPc3Ryb3Zz a3kgPGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29tPjsgS29ucmFkIFJ6ZXN6dXRlayBXaWxrDQo+ IDxrb25yYWQud2lsa0BvcmFjbGUuY29tPjsgUm9nZXIgUGF1IE1vbm5lIDxyb2dlci5wYXVAY2l0 cml4LmNvbT47IElhbg0KPiBKYWNrc29uIDxJYW4uSmFja3NvbkBjaXRyaXguY29tPjsgV2VpIExp dSA8d2VpLmxpdTJAY2l0cml4LmNvbT47IEFuZHJldw0KPiBDb29wZXIgPEFuZHJldy5Db29wZXIz QGNpdHJpeC5jb20+OyBHZW9yZ2UgRHVubGFwDQo+IDxHZW9yZ2UuRHVubGFwQGNpdHJpeC5jb20+ OyBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+OyBKdWxpZW4gR3JhbGwNCj4gPGp1bGll bi5ncmFsbEBhcm0uY29tPjsgU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwu b3JnPjsgVGltDQo+IChYZW4ub3JnKSA8dGltQHhlbi5vcmc+OyBQYXVsIER1cnJhbnQgPFBhdWwu RHVycmFudEBjaXRyaXguY29tPg0KPiBTdWJqZWN0OiBbUEFUQ0ggdjEwIDA3LzExXSB2cGNpL2Jh cnM6IGFkZCBoYW5kbGVycyB0byBtYXAgdGhlIEJBUnMNCj4gDQo+IEludHJvZHVjZSBhIHNldCBv ZiBoYW5kbGVycyB0aGF0IHRyYXAgYWNjZXNzZXMgdG8gdGhlIFBDSSBCQVJzIGFuZCB0aGUNCj4g Y29tbWFuZCByZWdpc3RlciwgaW4gb3JkZXIgdG8gc25vb3AgQkFSIHNpemluZyBhbmQgQkFSIHJl bG9jYXRpb24uDQo+IA0KPiBUaGUgY29tbWFuZCBoYW5kbGVyIGlzIHVzZWQgdG8gZGV0ZWN0IGNo YW5nZXMgdG8gYml0IDIgKHJlc3BvbnNlIHRvDQo+IG1lbW9yeSBzcGFjZSBhY2Nlc3NlcyksIGFu ZCBtYXBzL3VubWFwcyB0aGUgQkFScyBvZiB0aGUgZGV2aWNlIGludG8NCj4gdGhlIGd1ZXN0IHAy bS4gQSByYW5nZXNldCBpcyB1c2VkIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbWVtb3J5 DQo+IHRvIG1hcC91bm1hcC4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8ga2VlcCB0cmFjayBvZiB0 aGUgcG9zc2libGUNCj4gb3ZlcmxhcHMgd2l0aCBvdGhlciBCQVJzLCBhbmQgd2lsbCBhbHNvIHNp bXBsaWZ5IE1TSS1YIHN1cHBvcnQsIHdoZXJlDQo+IGNlcnRhaW4gcmVnaW9ucyBvZiBhIEJBUiBt aWdodCBiZSB1c2VkIGZvciB0aGUgTVNJLVggdGFibGUgb3IgUEJBLg0KPiANCj4gVGhlIEJBUiBy ZWdpc3RlciBoYW5kbGVycyBhcmUgdXNlZCB0byBkZXRlY3QgYXR0ZW1wdHMgYnkgdGhlIGd1ZXN0 IHRvDQo+IHNpemUgb3IgcmVsb2NhdGUgdGhlIEJBUnMuDQo+IA0KPiBOb3RlIHRoYXQgdGhlIGxv bmcgcnVubmluZyBCQVIgbWFwcGluZyBhbmQgdW5tYXBwaW5nIG9wZXJhdGlvbnMgYXJlDQo+IGRl ZmVycmVkIHRvIGJlIHBlcmZvcm1lZCBieSBodm1faW9fcGVuZGluZywgc28gdGhhdCB0aGV5IGNh biBiZSBzYWZlbHkNCj4gcHJlZW1wdGVkLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogUm9nZXIgUGF1 IE1vbm7DqSA8cm9nZXIucGF1QGNpdHJpeC5jb20+DQoNCmlvcmVxIGNvZGUgbW9kLi4uDQoNClJl dmlld2VkLWJ5OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPg0KDQo+IC0t LQ0KPiBDYzogSWFuIEphY2tzb24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+DQo+IENjOiBX ZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPg0KPiBDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3 LmNvb3BlcjNAY2l0cml4LmNvbT4NCj4gQ2M6IEdlb3JnZSBEdW5sYXAgPEdlb3JnZS5EdW5sYXBA ZXUuY2l0cml4LmNvbT4NCj4gQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4NCj4g Q2M6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+DQo+IENjOiBLb25yYWQgUnpl c3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+DQo+IENjOiBTdGVmYW5vIFN0YWJl bGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+DQo+IENjOiBUaW0gRGVlZ2FuIDx0aW1AeGVu Lm9yZz4NCj4gQ2M6IFBhdWwgRHVycmFudCA8cGF1bC5kdXJyYW50QGNpdHJpeC5jb20+DQo+IC0t LQ0KPiBDaGFuZ2VzIHNpbmNlIHY5Og0KPiAgLSBFeHBhbmQgY29tbWVudHMgdG8gY2xhcmlmeSB0 aGUgY29kZS4NCj4gIC0gUmVuYW1lIHJvbSB0byByb21fb25seSBpbiB0aGUgdnBjaV9jcHUgc3Ry dWN0Lg0KPiAgLSBDaGFuZ2UgZGVmaW5pdGlvbiBzdHlsZSBvZiBkdW1teSB2cGNpX2NwdS4NCj4g IC0gUmVwbGFjZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgUEZOX1VQLg0KPiAgLSBVc2Ugc3lzdGVtX3N0 YXRlIGluIG9yZGVyIHRvIGNoZWNrIGlmIHRoZSBtYXBwaW5nIGZ1bmN0aW9ucyBhcmUNCj4gICAg YmVpbmcgY2FsbGVkIGZyb20gRG9tMCBidWlsZGVyIGNvbnRleHQuDQo+ICAtIFNwbGl0IHRoZSBt YXliZV9kZWZlcl9tYXAgaW50byB0d28gZnVuY3Rpb25zIGFuZCBwbGFjZSB0aGUgRG9tMA0KPiAg ICBidWlsZGVyIG9uZSBpbiB0aGUgaW5pdCBzZWN0aW9uLg0KPiANCj4gQ2hhbmdlcyBzaW5jZSB2 ODoNCj4gIC0gRG8gbm90IHByZXRlbmQgdG8gc3VwcG9ydCBBUk0gaW4gdGhlIG1hcF9yYW5nZSBm dW5jdGlvbi4gRXhwbGFpbg0KPiAgICB0aGUgcmVxdWlyZWQgY2hhbmdlcyBpbiB0aGUgY29tbWVu dC4NCj4gIC0gSW50cm9kdWNlIFBDSV9IRUFERVJfe05PUk1BTC9CUklER0V9X05SX0JBUlMgZGVm aW5lcy4NCj4gIC0gUmVuYW1lICdyb20nIGJvb2xlYW4gdmFyaWFibGUgdG8gJ3JvbV9vbmx5Jywg d2hpY2ggaXMgbW9yZQ0KPiAgICBkZXNjcmlwdGl2ZSBvZiBpdCdzIG1lYW5pbmcuDQo+ICAtIElu dHJvZHVjZSB2cGNpX3JlbW92ZV9kZXZpY2Ugd2hpY2ggcmVtb3ZlcyBhbGwgaGFuZGxlcnMgZm9y IGENCj4gICAgZGV2aWNlLg0KPiAgLSBTaW1wbGlmeSBlcnJvciBoYW5kbGluZyB3aGVuIG1vZGlm eWluZyBCQVJzIG1hcHBpbmcuIEFueSBlcnJvciB3aWxsDQo+ICAgIGNhdXNlIHRoZSBkZXZpY2Ug dG8gYmUgdW5wbHVnZ2VkIChieSBjYWxsaW5nIHZwY2lfcmVtb3ZlX2RldmljZSkuDQo+ICAtIFJl dHVybiBhbiBlcnJvciBjb2RlIGluIG1vZGlmeV9iYXJzLiBBZGQgY29tbWVudHMgZGVzY3JpYmlu ZyB3aHkNCj4gICAgdGhlIGVycm9yIGlzIHNvbWV0aW1lcyBpZ25vcmVkLg0KPiANCj4gQ2hhbmdl cyBzaW5jZSB2NzoNCj4gIC0gT3JkZXIgaW5jbHVkZXMuDQo+ICAtIEFkZCBuZXdsaW5lIGJldHdl ZW4gc3dpdGNoIGNhc2VzLg0KPiAgLSBGaXggdHlwbyBpbiBjb21tZW50IChob3BwaW5nKS4NCj4g IC0gV3JhcCB0ZXJuYXJ5IGNvbmRpdGlvbmFsIGluIHBhcmVudGhlc2VzLg0KPiAgLSBSZW1vdmUg Q09ORklHX0hBU19QQ0kgZ3VlYXJkIGZyb20gc2NoZWQuaCB2cGNpX3ZjcHUgdXNhZ2UuDQo+ICAt IEFkZCBjb21tZW50IHJlZ2FyZGluZyB2cGNpX3ZjcHUgdXNhZ2UuDQo+ICAtIE1vdmUgcm9tX2Vu YWJsZWQgZnJvbSBCQVIgc3RydWN0IHRvIGhlYWRlci4NCj4gIC0gRG8gbm90IHByb3RlY3QgdnBj aV92Y3B1IHdpdGggX19YRU5fXyBndWFyZHMuDQo+IA0KPiBDaGFuZ2VzIHNpbmNlIHY2Og0KPiAg LSBzL3ZwY2lfY2hlY2tfcGVuZGluZy92cGNpX3Byb2Nlc3NfcGVuZGluZy8uDQo+ICAtIEltcHJv dmUgZXJyb3IgaGFuZGxpbmcgaW4gdnBjaV9wcm9jZXNzX3BlbmRpbmcuDQo+ICAtIEFkZCBhIGNv bW1lbnQgdGhhdCBleHBsYWlucyBob3cgdnBjaV9jaGVja19iYXJfb3ZlcmxhcCB3b3Jrcy4NCj4g IC0gQWRkIGVycm9yIG1lc3NhZ2VzIHRvIHZwY2lfbW9kaWZ5X2JhcnMgYW5kIHZwY2lfbW9kaWZ5 X3JvbS4NCj4gIC0gSW50cm9kdWNlIHZwY2lfaHdfcmVhZDE2LzMyLCBpbiBvcmRlciB0byBwYXNz dGhyb3VnaCByZWFkcyB0bw0KPiAgICB0aGUgdW5kZXJseWluZyBody4NCj4gIC0gUHJpbnQgQkFS IG51bWJlciBvbiBlcnJvciBpbiB2cGNpX2Jhcl93cml0ZS4NCj4gIC0gUGxhY2UgdGhlIENPTkZJ R19IQVNfUENJIGd1YXJkcyBpbnNpZGUgdGhlIHZwY2kuaCBoZWFkZXIgYW5kDQo+ICAgIHByb3Zp ZGUgYW4gZW1wdHkgdnBjaV92Y3B1IHN0cnVjdHVyZSBmb3IgdGhlICFDT05GSUdfSEFTX1BDSSBj YXNlLg0KPiAgLSBEZWZpbmUgQ09ORklHX0hBU19QQ0kgaW4gdGhlIHRlc3QgaGFybmVzcyBlbXVs LmggaGVhZGVyIGJlZm9yZQ0KPiAgICBpbmNsdWRpbmcgdnBjaS5oDQo+ICAtIEFkZCBBUk0gVE9E T3MgYW5kIGFuIEFSTS1zcGVjaWZpYyBib2RnZSB0byB2cGNpX21hcF9yYW5nZSBkdWUgdG8NCj4g ICAgdGhlIGxhY2sgb2YgcHJlZW1wdGlvbiBpbiB7dW59bWFwX21taW9fcmVnaW9ucy4NCj4gIC0g TWFrZSB2cGNpX21heWJlX2RlZmVyX21hcCB2b2lkLg0KPiAgLSBTZXQgcm9tX2VuYWJsZWQgaW4g dnBjaV9pbml0X2JhcnMuDQo+ICAtIERlZmVyIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgbWVtb3J5 IGRlY29kaW5nIChvciB0aGUgUk9NIGVuYWJsZQ0KPiAgICBiaXQpIHVudGlsIHRoZSBtZW1vcnkg aGFzIGJlZW4gbWFwcGVkL3VubWFwcGVkLg0KPiAgLSBSZW1vdmUgdnBjaV8gcHJlZml4IGZyb20g c3RhdGljIGZ1bmN0aW9ucy4NCj4gIC0gVXNlIHRoZSBzYW1lIGNvZGUgaW4gb3JkZXIgdG8gbWFw IHRoZSBnZW5lcmFsIEJBUnMgYW5kIHRoZSBST00NCj4gICAgQkFScy4NCj4gIC0gUmVtb3ZlIHRo ZSBzZWcvYnVzIGxvY2FsIHZhcmlhYmxlcyBhbmQgdXNlIHBkZXYtPntzZWcsYnVzfSBpbnN0ZWFk Lg0KPiAgLSBDb252ZXJ0IHRoZSBib29scyBpbiB0aGUgQkFSIHJlbGF0ZWQgc3RydWN0cyBpbnRv IGJvb2wgYml0ZmllbGRzLg0KPiAgLSBBZGQgdGhlIG11c3RfY2hlY2sgYXR0cmlidXRlIHRvIHZw Y2lfcHJvY2Vzc19wZW5kaW5nLg0KPiAgLSBPcGVuIGNvZGUgY2hlY2tfYmFyX292ZXJsYXAgaW5z aWRlIG1vZGlmeV9iYXJzLCB3aGljaCB3YXMgaXQncyBvbmx5DQo+ICAgIHVzZXIuDQo+IA0KPiBD aGFuZ2VzIHNpbmNlIHY1Og0KPiAgLSBTd2l0Y2ggdG8gdGhlIG5ldyBoYW5kbGVyIHR5cGUuDQo+ ICAtIFVzZSBwY2lfc2JkZl90IHRvIHNpemUgdGhlIEJBUnMuDQo+ICAtIFVzZSBhIHNpbmdsZSBy ZXR1cm4gZm9yIHZwY2lfbW9kaWZ5X2Jhci4NCj4gIC0gRG8gbm90IHJldHVybiBhbiBlcnJvciBj b2RlIGZyb20gdnBjaV9tb2RpZnlfYmFycywganVzdCBsb2cgdGhlDQo+ICAgIGZhaWx1cmUuDQo+ ICAtIFJlbW92ZSB0aGUgJ3NpemluZycgcGFyYW1ldGVyLiBJbnN0ZWFkIGp1c3QgbGV0IHRoZSBn dWVzdCB3cml0ZQ0KPiAgICBkaXJlY3RseSB0byB0aGUgQkFSLCBhbmQgcmVhZCB0aGUgdmFsdWUg YmFjay4gVGhpcyBzaW1wbGlmaWVzIHRoZQ0KPiAgICBCQVIgcmVnaXN0ZXIgaGFuZGxlcnMsIHNw ZWNpYWxseSB0aGUgcmVhZCBvbmUuDQo+ICAtIElnbm9yZSBST00gQkFSIHdyaXRlcyB3aXRoIG1l bW9yeSBkZWNvZGluZyBlbmFibGVkIGFuZCBST00gZW5hYmxlZC4NCj4gIC0gRG8gbm90IHByb3Bh Z2F0ZSBmYWlsdXJlcyB0byBzZXR1cCB0aGUgUk9NIEJBUiBpbiB2cGNpX2luaXRfYmFycy4NCj4g IC0gQWRkIHByZWVtcHRpb24gc3VwcG9ydCB0byB0aGUgQkFSIG1hcHBpbmcvdW5tYXBwaW5nIG9w ZXJhdGlvbnMuDQo+IA0KPiBDaGFuZ2VzIHNpbmNlIHY0Og0KPiAgLSBFeHBhbmQgY29tbWl0IG1l c3NhZ2UgdG8gbWVudGlvbiB0aGUgcmVhc29uIGJlaGluZCB0aGUgdXNhZ2Ugb2YNCj4gICAgcmFu Z2VzZXRzLg0KPiAgLSBGaXggY29tbWVudCByZWxhdGVkIHRvIHRoZSBpbmNsdXNpdmVuZXNzIG9m IHJhbmdlc2V0cy4NCj4gIC0gRml4IG9mZi1ieS1vbmUgZXJyb3IgaW4gdGhlIGNhbGN1bGF0aW9u IG9mIHRoZSBlbmQgb2YgbWVtb3J5DQo+ICAgIHJlZ2lvbnMuDQo+ICAtIFN0b3JlIHRoZSBzdGF0 ZSBvZiB0aGUgQkFSIChtYXBwZWQvdW5tYXBwZWQpIGluIHRoZSB2cGNpX2Jhcg0KPiAgICBlbmFi bGVkIGZpZWxkLCBwcmV2aW91c2x5IHdhcyBvbmx5IHVzZWQgYnkgUk9Ncy4NCj4gIC0gRml4IGRv dWJsZSBuZWdhdGlvbiBvZiByZXR1cm4gY29kZS4NCj4gIC0gTW9kaWZ5IHZwY2lfY21kX3dyaXRl IHNvIGl0IGhhcyBhIHNpbmdsZSBjYWxsIHRvIHBjaV9jb25mX3dyaXRlMTYuDQo+ICAtIFByaW50 IGEgd2FybmluZyB3aGVuIHRyeWluZyB0byB3cml0ZSB0byB0aGUgQkFSIHdpdGggbWVtb3J5DQo+ ICAgIGRlY29kaW5nIGVuYWJsZWQgKGFuZCBpZ25vcmUgdGhlIHdyaXRlKS4NCj4gIC0gUmVtb3Zl IGhlYWRlcl90eXBlIGxvY2FsIHZhcmlhYmxlLCBpdCdzIHVzZWQgb25seSBvbmNlLg0KPiAgLSBN b3ZlIHRoZSByZWFkIG9mIHRoZSBjb21tYW5kIHJlZ2lzdGVyLg0KPiAgLSBSZXN0b3JlIHByZXZp b3VzIGNvbW1hbmQgcmVnaXN0ZXIgdmFsdWUgaW4gdGhlIGV4aXQgcGF0aHMuDQo+ICAtIE9ubHkg c2V0IGFkZHJlc3MgdG8gSU5WQUxJRF9QQUREUiBpZiB0aGUgaW5pdGlhbCBCQVIgdmFsdWUgbWF0 Y2hlcw0KPiAgICAgfjAgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLLg0KPiAgLSBEb24ndCBk aXNhYmxlIHRoZSBlbmFibGVkIGJpdCBpbiB0aGUgZXhwYW5zaW9uIFJPTSByZWdpc3RlciwgbWVt b3J5DQo+ICAgIGRlY29kaW5nIGlzIGFscmVhZHkgZGlzYWJsZWQgYW5kIHRha2VzIHByZWNlZGVu Y2UuDQo+ICAtIERvbid0IHVzZSBJTlZBTElEX1BBRERSLCBqdXN0IHNldCB0aGUgaW5pdGlhbCBC QVIgYWRkcmVzcyB0byB0aGUNCj4gICAgdmFsdWUgZm91bmQgaW4gdGhlIGhhcmR3YXJlLg0KPiAg LSBJbnRyb2R1Y2Ugcm9tX2VuYWJsZWQgdG8gc3RvcmUgdGhlIHN0YXR1cyBvZiB0aGUNCj4gICAg UENJX1JPTV9BRERSRVNTX0VOQUJMRSBiaXQuDQo+ICAtIFJlb3JkZXIgZmllbGRzIG9mIHRoZSBz dHJ1Y3R1cmUgdG8gcHJldmVudCBob2xlcy4NCj4gDQo+IENoYW5nZXMgc2luY2UgdjM6DQo+ICAt IFByb3BhZ2F0ZSBwcmV2aW91cyBjaGFuZ2VzOiBkcm9wIHhlbl8gcHJlZml4IGFuZCB1c2UgdTgv dTE2L3UzMg0KPiAgICBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBoYWxmX3dvcmQvd29yZC9kb3Vi bGVfd29yZC4NCj4gIC0gQ29uc3RpZnkgc29tZSBvZiB0aGUgcGFyYW1lcnRlcnMuDQo+ICAtIHMv VlBDSV9CQVJfTUVNL1ZQQ0lfQkFSX01FTTMyLy4NCj4gIC0gU2ltcGxpZnkgdGhlIG51bWJlciBv ZiBmaWVsZHMgc3RvcmVkIGZvciBlYWNoIEJBUiwgYSBzaW5nbGUgYWRkcmVzcw0KPiAgICBmaWVs ZCBpcyBzdG9yZWQgYW5kIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBCQVIgYm90aCBvbiBY ZW4gYW5kDQo+ICAgIGluIHRoZSBndWVzdC4NCj4gIC0gQWxsb3cgdGhlIGd1ZXN0IHRvIG1vdmUg dGhlIEJBUnMgYXJvdW5kIGluIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFwLg0KPiAgLSBBZGQgc3Vw cG9ydCBmb3IgZXhwYW5zaW9uIFJPTSBCQVJzLg0KPiAgLSBEbyBub3QgY2FjaGUgdGhlIHZhbHVl IG9mIHRoZSBjb21tYW5kIHJlZ2lzdGVyLg0KPiAgLSBSZW1vdmUgYSBsYWJlbCB1c2VkIGluIHZw Y2lfY21kX3dyaXRlLg0KPiAgLSBGaXggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBzaXppbmcgbWFz ayBpbiB2cGNpX2Jhcl93cml0ZS4NCj4gIC0gQ2hlY2sgdGhlIG1lbW9yeSBkZWNvZGUgYml0IGlu IG9yZGVyIHRvIGRlY2lkZSBpZiBhIEJBUiBpcw0KPiAgICBwb3NpdGlvbmVkIG9yIG5vdC4NCj4g IC0gRGlzYWJsZSBtZW1vcnkgZGVjb2RpbmcgYmVmb3JlIHNpemluZyB0aGUgQkFScyBpbiBYZW4u DQo+ICAtIFdoZW4gbWFwcGluZy91bm1hcHBpbmcgQkFScyBjaGVjayBpZiB0aGVyZSdzIG92ZXJs YXAgYmV0d2VlbiBCQVJzLA0KPiAgICBpbiBvcmRlciB0byBhdm9pZCB1bm1hcHBpbmcgbWVtb3J5 IHJlcXVpcmVkIGJ5IGFub3RoZXIgQkFSLg0KPiAgLSBJbnRyb2R1Y2UgYSBtYWNybyB0byBjaGVj ayB3aGV0aGVyIGEgQkFSIGlzIG1hcHBhYmxlIG9yIG5vdC4NCj4gIC0gQWRkIGEgY29tbWVudCBy ZWdhcmRpbmcgdGhlIGxhY2sgb2Ygc3VwcG9ydCBmb3IgU1ItSU9WLg0KPiAgLSBSZW1vdmUgdGhl IHVzYWdlIG9mIHRoZSBHRU5NQVNLIG1hY3JvLg0KPiANCj4gQ2hhbmdlcyBzaW5jZSB2MjoNCj4g IC0gRGV0ZWN0IHVuc2V0IEJBUnMgYW5kIGFsbG93IHRoZSBoYXJkd2FyZSBkb21haW4gdG8gcG9z aXRpb24gdGhlbS4NCj4gLS0tDQo+ICB0b29scy90ZXN0cy92cGNpL2VtdWwuaCAgIHwgICAxICsN Cj4gIHhlbi9hcmNoL3g4Ni9odm0vaW9yZXEuYyAgfCAgIDQgKw0KPiAgeGVuL2RyaXZlcnMvdnBj aS9NYWtlZmlsZSB8ICAgMiArLQ0KPiAgeGVuL2RyaXZlcnMvdnBjaS9oZWFkZXIuYyB8IDU1Mg0K PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICB4ZW4v ZHJpdmVycy92cGNpL3ZwY2kuYyAgIHwgIDQ1ICsrLS0NCj4gIHhlbi9pbmNsdWRlL3hlbi9zY2hl ZC5oICAgfCAgIDQgKw0KPiAgeGVuL2luY2x1ZGUveGVuL3ZwY2kuaCAgICB8ICA2MSArKysrKw0K PiAgNyBmaWxlcyBjaGFuZ2VkLCA2NTUgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pDQo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2RyaXZlcnMvdnBjaS9oZWFkZXIuYw0KPiANCj4gZGlm ZiAtLWdpdCBhL3Rvb2xzL3Rlc3RzL3ZwY2kvZW11bC5oIGIvdG9vbHMvdGVzdHMvdnBjaS9lbXVs LmgNCj4gaW5kZXggZmQwMzE3OTk1YS4uNWQ0NzU0NGJmNyAxMDA2NDQNCj4gLS0tIGEvdG9vbHMv dGVzdHMvdnBjaS9lbXVsLmgNCj4gKysrIGIvdG9vbHMvdGVzdHMvdnBjaS9lbXVsLmgNCj4gQEAg LTgwLDYgKzgwLDcgQEAgdHlwZWRlZiB1bmlvbiB7DQo+ICAgICAgfTsNCj4gIH0gcGNpX3NiZGZf dDsNCj4gDQo+ICsjZGVmaW5lIENPTkZJR19IQVNfVlBDSQ0KPiAgI2luY2x1ZGUgInZwY2kuaCIN Cj4gDQo+ICAjZGVmaW5lIF9faHdkb21faW5pdA0KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2 L2h2bS9pb3JlcS5jIGIveGVuL2FyY2gveDg2L2h2bS9pb3JlcS5jDQo+IGluZGV4IDdlNjY5NjVi Y2QuLjkwYzllM2NkNTkgMTAwNjQ0DQo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaW9yZXEuYw0K PiArKysgYi94ZW4vYXJjaC94ODYvaHZtL2lvcmVxLmMNCj4gQEAgLTI2LDYgKzI2LDcgQEANCj4g ICNpbmNsdWRlIDx4ZW4vZG9tYWluLmg+DQo+ICAjaW5jbHVkZSA8eGVuL2V2ZW50Lmg+DQo+ICAj aW5jbHVkZSA8eGVuL3BhZ2luZy5oPg0KPiArI2luY2x1ZGUgPHhlbi92cGNpLmg+DQo+IA0KPiAg I2luY2x1ZGUgPGFzbS9odm0vaHZtLmg+DQo+ICAjaW5jbHVkZSA8YXNtL2h2bS9pb3JlcS5oPg0K PiBAQCAtNDgsNiArNDksOSBAQCBib29sIGh2bV9pb19wZW5kaW5nKHN0cnVjdCB2Y3B1ICp2KQ0K PiAgICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47DQo+ICAgICAgc3RydWN0IGh2bV9p b3JlcV9zZXJ2ZXIgKnM7DQo+IA0KPiArICAgIGlmICggaGFzX3ZwY2koZCkgJiYgdnBjaV9wcm9j ZXNzX3BlbmRpbmcodikgKQ0KPiArICAgICAgICByZXR1cm4gdHJ1ZTsNCj4gKw0KPiAgICAgIGxp c3RfZm9yX2VhY2hfZW50cnkgKCBzLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZC0+ YXJjaC5odm1fZG9tYWluLmlvcmVxX3NlcnZlci5saXN0LA0KPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaXN0X2VudHJ5ICkNCj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3ZwY2kvTWFr ZWZpbGUgYi94ZW4vZHJpdmVycy92cGNpL01ha2VmaWxlDQo+IGluZGV4IDg0MGE5MDY0NzAuLjI0 MTQ2NzIxMmYgMTAwNjQ0DQo+IC0tLSBhL3hlbi9kcml2ZXJzL3ZwY2kvTWFrZWZpbGUNCj4gKysr IGIveGVuL2RyaXZlcnMvdnBjaS9NYWtlZmlsZQ0KPiBAQCAtMSArMSBAQA0KPiAtb2JqLXkgKz0g dnBjaS5vDQo+ICtvYmoteSArPSB2cGNpLm8gaGVhZGVyLm8NCj4gZGlmZiAtLWdpdCBhL3hlbi9k cml2ZXJzL3ZwY2kvaGVhZGVyLmMgYi94ZW4vZHJpdmVycy92cGNpL2hlYWRlci5jDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmI1MDJiYWM4MWUNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi94ZW4vZHJpdmVycy92cGNpL2hlYWRlci5jDQo+IEBAIC0wLDAgKzEs NTUyIEBADQo+ICsvKg0KPiArICogR2VuZXJpYyBmdW5jdGlvbmFsaXR5IGZvciBoYW5kbGluZyBh Y2Nlc3NlcyB0byB0aGUgUENJIGhlYWRlciBmcm9tIHRoZQ0KPiArICogY29uZmlndXJhdGlvbiBz cGFjZS4NCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2l0cml4IFN5c3RlbXMgUiZE DQo+ICsgKg0KPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcg0KPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlLCB2ZXJz aW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KPiAr ICoNCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLA0KPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCj4gR05VDQo+ICsgKiBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ICsgKg0KPiArICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQo+ ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZQ0KPiA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPHhl bi9wMm0tY29tbW9uLmg+DQo+ICsjaW5jbHVkZSA8eGVuL3NjaGVkLmg+DQo+ICsjaW5jbHVkZSA8 eGVuL3NvZnRpcnEuaD4NCj4gKyNpbmNsdWRlIDx4ZW4vdnBjaS5oPg0KPiArDQo+ICsjaW5jbHVk ZSA8YXNtL2V2ZW50Lmg+DQo+ICsNCj4gKyNkZWZpbmUgTUFQUEFCTEVfQkFSKHgpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gKyAgICAoKHgpLT50 eXBlID09IFZQQ0lfQkFSX01FTTMyIHx8ICh4KS0+dHlwZSA9PSBWUENJX0JBUl9NRU02NF9MTw0K PiB8fCAgIFwNCj4gKyAgICAgKHgpLT50eXBlID09IFZQQ0lfQkFSX1JPTSkNCj4gKw0KPiArc3Ry dWN0IG1hcF9kYXRhIHsNCj4gKyAgICBzdHJ1Y3QgZG9tYWluICpkOw0KPiArICAgIGJvb2wgbWFw Ow0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBtYXBfcmFuZ2UodW5zaWduZWQgbG9uZyBzLCB1 bnNpZ25lZCBsb25nIGUsIHZvaWQgKmRhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nICpjKQ0KPiArew0KPiArICAgIGNvbnN0IHN0cnVjdCBtYXBfZGF0YSAqbWFwID0g ZGF0YTsNCj4gKyAgICBpbnQgcmM7DQo+ICsNCj4gKyAgICBmb3IgKCA7IDsgKQ0KPiArICAgIHsN Cj4gKyAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplID0gZSAtIHMgKyAxOw0KPiArDQo+ICsgICAg ICAgIC8qDQo+ICsgICAgICAgICAqIEFSTSBUT0RPczoNCj4gKyAgICAgICAgICogLSBPbiBBUk0g d2hldGhlciB0aGUgbWVtb3J5IGlzIHByZWZldGNoYWJsZSBvciBub3Qgc2hvdWxkIGJlDQo+IHBh c3NlZA0KPiArICAgICAgICAgKiAgIHRvIG1hcF9tbWlvX3JlZ2lvbnMgaW4gb3JkZXIgdG8gZGVj aWRlIHdoaWNoIG1lbW9yeSBhdHRyaWJ1dGVzDQo+ICsgICAgICAgICAqICAgc2hvdWxkIGJlIHVz ZWQuDQo+ICsgICAgICAgICAqDQo+ICsgICAgICAgICAqIC0ge3VufW1hcF9tbWlvX3JlZ2lvbnMg ZG9lc24ndCBzdXBwb3J0IHByZWVtcHRpb24uDQo+ICsgICAgICAgICAqLw0KPiArDQo+ICsgICAg ICAgIHJjID0gKG1hcC0+bWFwID8gbWFwX21taW9fcmVnaW9ucyA6IHVubWFwX21taW9fcmVnaW9u cykNCj4gKyAgICAgICAgICAgICAobWFwLT5kLCBfZ2ZuKHMpLCBzaXplLCBfbWZuKHMpKTsNCj4g KyAgICAgICAgaWYgKCByYyA9PSAwICkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgICAgKmMg Kz0gc2l6ZTsNCj4gKyAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICB9DQo+ICsgICAgICAg IGlmICggcmMgPCAwICkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgICAgcHJpbnRrKFhFTkxP R19HX1dBUk5JTkcNCj4gKyAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGlkZW50aXR5ICVz bWFwIFslIiBQUklfZ2ZuICIsICUiIFBSSV9nZm4gIl0gZm9yIGQlZDoNCj4gJWRcbiIsDQo+ICsg ICAgICAgICAgICAgICAgICAgbWFwID8gIiIgOiAidW4iLCBzLCBlLCBtYXAtPmQtPmRvbWFpbl9p ZCwgcmMpOw0KPiArICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAg QVNTRVJUKHJjIDwgc2l6ZSk7DQo+ICsgICAgICAgICpjICs9IHJjOw0KPiArICAgICAgICBzICs9 IHJjOw0KPiArICAgICAgICBpZiAoIGdlbmVyYWxfcHJlZW1wdF9jaGVjaygpICkNCj4gKyAgICAg ICAgICAgICAgICByZXR1cm4gLUVSRVNUQVJUOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVy biByYzsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIFRoZSByb21fb25seSBwYXJhbWV0ZXIgaXMg dXNlZCB0byBzaWduYWwgdGhlIG1hcC91bm1hcCBoZWxwZXJzIHRoYXQNCj4gdGhlIFJPTQ0KPiAr ICogQkFSJ3MgZW5hYmxlIGJpdCBoYXMgY2hhbmdlZCB3aXRoIHRoZSBtZW1vcnkgZGVjb2Rpbmcg Yml0IGFscmVhZHkNCj4gZW5hYmxlZC4NCj4gKyAqIElmIHJvbV9vbmx5IGlzIG5vdCBzZXQgdGhl biBpdCdzIHRoZSBtZW1vcnkgZGVjb2RpbmcgYml0IHRoYXQgY2hhbmdlZC4NCj4gKyAqLw0KPiAr c3RhdGljIHZvaWQgbW9kaWZ5X2RlY29kaW5nKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBi b29sIG1hcCwgYm9vbA0KPiByb21fb25seSkNCj4gK3sNCj4gKyAgICBzdHJ1Y3QgdnBjaV9oZWFk ZXIgKmhlYWRlciA9ICZwZGV2LT52cGNpLT5oZWFkZXI7DQo+ICsgICAgdWludDhfdCBzbG90ID0g UENJX1NMT1QocGRldi0+ZGV2Zm4pLCBmdW5jID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOw0KPiAr ICAgIHVpbnQxNl90IGNtZDsNCj4gKyAgICB1bnNpZ25lZCBpbnQgaTsNCj4gKw0KPiArICAgIGZv ciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZWFkZXItPmJhcnMpOyBpKysgKQ0KPiArICAgIHsN Cj4gKyAgICAgICAgaWYgKCAhTUFQUEFCTEVfQkFSKCZoZWFkZXItPmJhcnNbaV0pICkNCj4gKyAg ICAgICAgICAgIGNvbnRpbnVlOw0KPiArDQo+ICsgICAgICAgIGlmICggcm9tX29ubHkgJiYgaGVh ZGVyLT5iYXJzW2ldLnR5cGUgPT0gVlBDSV9CQVJfUk9NICkNCj4gKyAgICAgICAgew0KPiArICAg ICAgICAgICAgdW5zaWduZWQgaW50IHJvbV9wb3MgPSAoaSA9PSBQQ0lfSEVBREVSX05PUk1BTF9O Ul9CQVJTKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBDSV9ST01f QUREUkVTUyA6IFBDSV9ST01fQUREUkVTUzE7DQo+ICsgICAgICAgICAgICB1aW50MzJfdCB2YWwg PSBwY2lfY29uZl9yZWFkMzIocGRldi0+c2VnLCBwZGV2LT5idXMsIHNsb3QsIGZ1bmMsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9tX3Bvcyk7DQo+ICsN Cj4gKyAgICAgICAgICAgIGhlYWRlci0+YmFyc1tpXS5lbmFibGVkID0gaGVhZGVyLT5yb21fZW5h YmxlZCA9IG1hcDsNCj4gKw0KPiArICAgICAgICAgICAgdmFsICY9IH5QQ0lfUk9NX0FERFJFU1Nf RU5BQkxFOw0KPiArICAgICAgICAgICAgdmFsIHw9IG1hcCA/IFBDSV9ST01fQUREUkVTU19FTkFC TEUgOiAwOw0KPiArICAgICAgICAgICAgcGNpX2NvbmZfd3JpdGUzMihwZGV2LT5zZWcsIHBkZXYt PmJ1cywgc2xvdCwgZnVuYywgcm9tX3BvcywgdmFsKTsNCj4gKyAgICAgICAgICAgIHJldHVybjsN Cj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGlmICggIXJvbV9vbmx5ICYmDQo+ICsgICAg ICAgICAgICAgKGhlYWRlci0+YmFyc1tpXS50eXBlICE9IFZQQ0lfQkFSX1JPTSB8fCBoZWFkZXIt PnJvbV9lbmFibGVkKQ0KPiApDQo+ICsgICAgICAgICAgICBoZWFkZXItPmJhcnNbaV0uZW5hYmxl ZCA9IG1hcDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBBU1NFUlQoIXJvbV9vbmx5KTsNCj4gKyAg ICBjbWQgPSBwY2lfY29uZl9yZWFkMTYocGRldi0+c2VnLCBwZGV2LT5idXMsIHNsb3QsIGZ1bmMs DQo+IFBDSV9DT01NQU5EKTsNCj4gKyAgICBjbWQgJj0gflBDSV9DT01NQU5EX01FTU9SWTsNCj4g KyAgICBjbWQgfD0gbWFwID8gUENJX0NPTU1BTkRfTUVNT1JZIDogMDsNCj4gKyAgICBwY2lfY29u Zl93cml0ZTE2KHBkZXYtPnNlZywgcGRldi0+YnVzLCBzbG90LCBmdW5jLCBQQ0lfQ09NTUFORCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgIGNtZCk7DQo+ICt9DQo+ICsNCj4gK2Jvb2wgdnBjaV9w cm9jZXNzX3BlbmRpbmcoc3RydWN0IHZjcHUgKnYpDQo+ICt7DQo+ICsgICAgaWYgKCB2LT52cGNp Lm1lbSApDQo+ICsgICAgew0KPiArICAgICAgICBzdHJ1Y3QgbWFwX2RhdGEgZGF0YSA9IHsNCj4g KyAgICAgICAgICAgIC5kID0gdi0+ZG9tYWluLA0KPiArICAgICAgICAgICAgLm1hcCA9IHYtPnZw Y2kubWFwLA0KPiArICAgICAgICB9Ow0KPiArICAgICAgICBpbnQgcmMgPSByYW5nZXNldF9jb25z dW1lX3Jhbmdlcyh2LT52cGNpLm1lbSwgbWFwX3JhbmdlLCAmZGF0YSk7DQo+ICsNCj4gKyAgICAg ICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQ0KPiArICAgICAgICAgICAgcmV0dXJuIHRydWU7DQo+ ICsNCj4gKyAgICAgICAgc3Bpbl9sb2NrKCZ2LT52cGNpLnBkZXYtPnZwY2ktPmxvY2spOw0KPiAr ICAgICAgICAvKiBEaXNhYmxlIG1lbW9yeSBkZWNvZGluZyB1bmNvbmRpdGlvbmFsbHkgb24gZmFp bHVyZS4gKi8NCj4gKyAgICAgICAgbW9kaWZ5X2RlY29kaW5nKHYtPnZwY2kucGRldiwgcmMgPyBm YWxzZSA6IHYtPnZwY2kubWFwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgcmMgPyBmYWxz ZSA6IHYtPnZwY2kucm9tX29ubHkpOw0KPiArICAgICAgICBzcGluX3VubG9jaygmdi0+dnBjaS5w ZGV2LT52cGNpLT5sb2NrKTsNCj4gKw0KPiArICAgICAgICByYW5nZXNldF9kZXN0cm95KHYtPnZw Y2kubWVtKTsNCj4gKyAgICAgICAgdi0+dnBjaS5tZW0gPSBOVUxMOw0KPiArICAgICAgICBpZiAo IHJjICkNCj4gKyAgICAgICAgICAgIC8qDQo+ICsgICAgICAgICAgICAgKiBGSVhNRTogaW4gY2Fz ZSBvZiBmYWlsdXJlIHJlbW92ZSB0aGUgZGV2aWNlIGZyb20gdGhlIGRvbWFpbi4NCj4gKyAgICAg ICAgICAgICAqIE5vdGUgdGhhdCB0aGVyZSBtaWdodCBzdGlsbCBiZSBsZWZ0b3ZlciBtYXBwaW5n cy4gV2hpbGUgdGhpcyBpcw0KPiArICAgICAgICAgICAgICogc2FmZSBmb3IgRG9tMCwgZm9yIERv bVVzIHRoZSBkb21haW4gd2lsbCBsaWtlbHkgbmVlZCB0byBiZQ0KPiArICAgICAgICAgICAgICog a2lsbGVkIGluIG9yZGVyIHRvIGF2b2lkIGxlYWtpbmcgc3RhbGUgcDJtIG1hcHBpbmdzIG9uDQo+ ICsgICAgICAgICAgICAgKiBmYWlsdXJlLg0KPiArICAgICAgICAgICAgICovDQo+ICsgICAgICAg ICAgICB2cGNpX3JlbW92ZV9kZXZpY2Uodi0+dnBjaS5wZGV2KTsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICByZXR1cm4gZmFsc2U7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgX19pbml0IGFwcGx5 X21hcChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZ2VzZXQgKm1lbSkNCj4gK3sNCj4gKyAgICBz dHJ1Y3QgbWFwX2RhdGEgZGF0YSA9IHsgLmQgPSBkLCAubWFwID0gdHJ1ZSB9Ow0KPiArICAgIGlu dCByYzsNCj4gKw0KPiArICAgIHdoaWxlICggKHJjID0gcmFuZ2VzZXRfY29uc3VtZV9yYW5nZXMo bWVtLCBtYXBfcmFuZ2UsICZkYXRhKSkgPT0gLQ0KPiBFUkVTVEFSVCApDQo+ICsgICAgICAgIHBy b2Nlc3NfcGVuZGluZ19zb2Z0aXJxcygpOw0KPiArICAgIHJhbmdlc2V0X2Rlc3Ryb3kobWVtKTsN Cj4gKyAgICBpZiAoIHJjICkNCj4gKyAgICAgICAgcmV0dXJuIHJjOw0KPiArICAgIG1vZGlmeV9k ZWNvZGluZyhwZGV2LCB0cnVlLCBmYWxzZSk7DQo+ICsNCj4gKyAgICByZXR1cm4gcmM7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGRlZmVyX21hcChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3Qg cGNpX2RldiAqcGRldiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZ2VzZXQg Km1lbSwgYm9vbCBtYXAsIGJvb2wgcm9tX29ubHkpDQo+ICt7DQo+ICsgICAgc3RydWN0IHZjcHUg KmN1cnIgPSBjdXJyZW50Ow0KPiArDQo+ICsgICAgLyoNCj4gKyAgICAgKiBGSVhNRTogd2hlbiBk ZWZlcnJpbmcgdGhlIHt1bn1tYXAgdGhlIHN0YXRlIG9mIHRoZSBkZXZpY2Ugc2hvdWxkIG5vdA0K PiArICAgICAqIGJlIHRydXN0ZWQuIEZvciBleGFtcGxlIHRoZSBlbmFibGUgYml0IGlzIHRvZ2ds ZWQgYWZ0ZXIgdGhlIGRldmljZQ0KPiArICAgICAqIGlzIG1hcHBlZC4gVGhpcyBjYW4gbGVhZCB0 byBwYXJhbGxlbCBtYXBwaW5nIG9wZXJhdGlvbnMgYmVpbmcNCj4gKyAgICAgKiBzdGFydGVkIGZv ciB0aGUgc2FtZSBkZXZpY2UgaWYgdGhlIGRvbWFpbiBpcyBub3Qgd2VsbC1iZWhhdmVkLg0KPiAr ICAgICAqLw0KPiArICAgIGN1cnItPnZwY2kucGRldiA9IHBkZXY7DQo+ICsgICAgY3Vyci0+dnBj aS5tZW0gPSBtZW07DQo+ICsgICAgY3Vyci0+dnBjaS5tYXAgPSBtYXA7DQo+ICsgICAgY3Vyci0+ dnBjaS5yb21fb25seSA9IHJvbV9vbmx5Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1vZGlm eV9iYXJzKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIG1hcCwgYm9vbA0KPiByb21f b25seSkNCj4gK3sNCj4gKyAgICBzdHJ1Y3QgdnBjaV9oZWFkZXIgKmhlYWRlciA9ICZwZGV2LT52 cGNpLT5oZWFkZXI7DQo+ICsgICAgc3RydWN0IHJhbmdlc2V0ICptZW0gPSByYW5nZXNldF9uZXco TlVMTCwgTlVMTCwgMCk7DQo+ICsgICAgc3RydWN0IHBjaV9kZXYgKnRtcCwgKmRldiA9IE5VTEw7 DQo+ICsgICAgdW5zaWduZWQgaW50IGk7DQo+ICsgICAgaW50IHJjOw0KPiArDQo+ICsgICAgaWYg KCAhbWVtICkNCj4gKyAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKyAgICAvKg0KPiAr ICAgICAqIENyZWF0ZSBhIHJhbmdlc2V0IHRoYXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCBkZXZp Y2UgQkFScyBtZW1vcnkNCj4gcmVnaW9uDQo+ICsgICAgICogYW5kIGNvbXBhcmUgaXQgYWdhaW5z dCBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmUgQkFSIG1lbW9yeSByZWdpb25zLiBJZg0KPiArICAg ICAqIGFuIG92ZXJsYXAgaXMgZm91bmQsIHN1YnRyYWN0IGl0IGZyb20gdGhlIHJlZ2lvbiB0byBi ZQ0KPiBtYXBwZWQvdW5tYXBwZWQuDQo+ICsgICAgICoNCj4gKyAgICAgKiBGaXJzdCBmaWxsIHRo ZSByYW5nZXNldCB3aXRoIGFsbCB0aGUgQkFScyBvZiB0aGlzIGRldmljZSBvciB3aXRoIHRoZSBS T00NCj4gKyAgICAgKiBCQVIgb25seSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGd1ZXN0IGlz IHRvZ2dsaW5nIHRoZSBtZW1vcnkNCj4gZGVjb2RlDQo+ICsgICAgICogYml0IG9mIHRoZSBjb21t YW5kIHJlZ2lzdGVyLCBvciB0aGUgZW5hYmxlIGJpdCBvZiB0aGUgUk9NIEJBUiByZWdpc3Rlci4N Cj4gKyAgICAgKi8NCj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGVhZGVyLT5i YXJzKTsgaSsrICkNCj4gKyAgICB7DQo+ICsgICAgICAgIGNvbnN0IHN0cnVjdCB2cGNpX2JhciAq YmFyID0gJmhlYWRlci0+YmFyc1tpXTsNCj4gKw0KPiArICAgICAgICBpZiAoICFNQVBQQUJMRV9C QVIoYmFyKSB8fA0KPiArICAgICAgICAgICAgIChyb21fb25seSA/IGJhci0+dHlwZSAhPSBWUENJ X0JBUl9ST00NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgOiAoYmFyLT50eXBlID09IFZQQ0lf QkFSX1JPTSAmJiAhaGVhZGVyLT5yb21fZW5hYmxlZCkpICkNCj4gKyAgICAgICAgICAgIGNvbnRp bnVlOw0KPiArDQo+ICsgICAgICAgIHJjID0gcmFuZ2VzZXRfYWRkX3JhbmdlKG1lbSwgUEZOX0RP V04oYmFyLT5hZGRyKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZOX0RP V04oYmFyLT5hZGRyICsgYmFyLT5zaXplIC0gMSkpOw0KPiArICAgICAgICBpZiAoIHJjICkNCj4g KyAgICAgICAgew0KPiArICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19HX1dBUk5JTkcNCj4gKyAg ICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGFkZCBbJSIgUFJJX2dmbiAiLCAlIiBQUklfZ2Zu ICJdOiAlZFxuIiwNCj4gKyAgICAgICAgICAgICAgICAgICBQRk5fRE9XTihiYXItPmFkZHIpLCBQ Rk5fRE9XTihiYXItPmFkZHIgKyBiYXItPnNpemUgLSAxKSwNCj4gKyAgICAgICAgICAgICAgICAg ICByYyk7DQo+ICsgICAgICAgICAgICByYW5nZXNldF9kZXN0cm95KG1lbSk7DQo+ICsgICAgICAg ICAgICByZXR1cm4gcmM7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvKg0K PiArICAgICAqIENoZWNrIGZvciBvdmVybGFwcyB3aXRoIG90aGVyIEJBUnMuIE5vdGUgdGhhdCBv bmx5IEJBUnMgdGhhdCBhcmUNCj4gKyAgICAgKiBjdXJyZW50bHkgbWFwcGVkIChlbmFibGVkKSBh cmUgY2hlY2tlZCBmb3Igb3ZlcmxhcHMuDQo+ICsgICAgICovDQo+ICsgICAgbGlzdF9mb3JfZWFj aF9lbnRyeSh0bXAsICZwZGV2LT5kb21haW4tPmFyY2gucGRldl9saXN0LCBkb21haW5fbGlzdCkN Cj4gKyAgICB7DQo+ICsgICAgICAgIGlmICggdG1wID09IHBkZXYgKQ0KPiArICAgICAgICB7DQo+ ICsgICAgICAgICAgICAvKg0KPiArICAgICAgICAgICAgICogTmVlZCB0byBzdG9yZSB0aGUgZGV2 aWNlIHNvIGl0J3Mgbm90IGNvbnN0aWZpZWQgYW5kDQo+ICsgICAgICAgICAgICAgKiBtYXliZV9k ZWZlcl9tYXAgY2FuIG1vZGlmeSBpdCBpbiBjYXNlIG9mIGVycm9yLg0KPiArICAgICAgICAgICAg ICovDQo+ICsgICAgICAgICAgICBkZXYgPSB0bXA7DQo+ICsgICAgICAgICAgICBpZiAoICFyb21f b25seSApDQo+ICsgICAgICAgICAgICAgICAgLyoNCj4gKyAgICAgICAgICAgICAgICAgKiBJZiBt ZW1vcnkgZGVjb2RpbmcgaXMgdG9nZ2xlZCBhdm9pZCBjaGVja2luZyBhZ2FpbnN0IHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAqIHNhbWUgZGV2aWNlLCBvciBlbHNlIGFsbCByZWdpb25zIHdpbGwg YmUgcmVtb3ZlZCBmcm9tIHRoZQ0KPiArICAgICAgICAgICAgICAgICAqIG1lbW9yeSBtYXAgaW4g dGhlIHVubWFwIGNhc2UuDQo+ICsgICAgICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICAg ICAgY29udGludWU7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBmb3IgKCBpID0gMDsg aSA8IEFSUkFZX1NJWkUodG1wLT52cGNpLT5oZWFkZXIuYmFycyk7IGkrKyApDQo+ICsgICAgICAg IHsNCj4gKyAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2cGNpX2JhciAqYmFyID0gJnRtcC0+dnBj aS0+aGVhZGVyLmJhcnNbaV07DQo+ICsgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0ID0g UEZOX0RPV04oYmFyLT5hZGRyKTsNCj4gKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kID0g UEZOX0RPV04oYmFyLT5hZGRyICsgYmFyLT5zaXplIC0gMSk7DQo+ICsNCj4gKyAgICAgICAgICAg IGlmICggIWJhci0+ZW5hYmxlZCB8fCAhcmFuZ2VzZXRfb3ZlcmxhcHNfcmFuZ2UobWVtLCBzdGFy dCwgZW5kKSB8fA0KPiArICAgICAgICAgICAgICAgICAvKg0KPiArICAgICAgICAgICAgICAgICAg KiBJZiBvbmx5IHRoZSBST00gZW5hYmxlIGJpdCBpcyB0b2dnbGVkIGNoZWNrIGFnYWluc3Qgb3Ro ZXINCj4gKyAgICAgICAgICAgICAgICAgICogQkFScyBpbiB0aGUgc2FtZSBkZXZpY2UgZm9yIG92 ZXJsYXBzLCBidXQgbm90IGFnYWluc3QgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAqIHNhbWUg Uk9NIEJBUi4NCj4gKyAgICAgICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICAgICAgIChy b21fb25seSAmJiB0bXAgPT0gcGRldiAmJiBiYXItPnR5cGUgPT0gVlBDSV9CQVJfUk9NKSApDQo+ ICsgICAgICAgICAgICAgICAgY29udGludWU7DQo+ICsNCj4gKyAgICAgICAgICAgIHJjID0gcmFu Z2VzZXRfcmVtb3ZlX3JhbmdlKG1lbSwgc3RhcnQsIGVuZCk7DQo+ICsgICAgICAgICAgICBpZiAo IHJjICkNCj4gKyAgICAgICAgICAgIHsNCj4gKyAgICAgICAgICAgICAgICBwcmludGsoWEVOTE9H X0dfV0FSTklORw0KPiArICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJlbW92ZSBb JSIgUFJJX2dmbiAiLCAlIiBQUklfZ2ZuICJdOiAlZFxuIiwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgc3RhcnQsIGVuZCwgcmMpOw0KPiArICAgICAgICAgICAgICAgIHJhbmdlc2V0X2Rlc3Ry b3kobWVtKTsNCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gcmM7DQo+ICsgICAgICAgICAgICB9 DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBBU1NFUlQoZGV2KTsNCj4gKw0K PiArICAgIGlmICggc3lzdGVtX3N0YXRlIDwgU1lTX1NUQVRFX2FjdGl2ZSApDQo+ICsgICAgew0K PiArICAgICAgICAvKg0KPiArICAgICAgICAgKiBNYXBwaW5ncyBtaWdodCBiZSBjcmVhdGVkIHdo ZW4gYnVpbGRpbmcgRG9tMCBpZiB0aGUgbWVtb3J5DQo+IGRlY29kaW5nDQo+ICsgICAgICAgICAq IGJpdCBvZiBQQ0kgZGV2aWNlcyBpcyBlbmFibGVkLiBJbiB0aGF0IGNhc2UgaXQncyBub3QgcG9z c2libGUgdG8NCj4gKyAgICAgICAgICogZGVmZXIgdGhlIG9wZXJhdGlvbiwgc28gY2FsbCBhcHBs eV9tYXAgaW4gb3JkZXIgdG8gY3JlYXRlIHRoZQ0KPiArICAgICAgICAgKiBtYXBwaW5ncyByaWdo dCBhd2F5LiBOb3RlIHRoYXQgYXQgYnVpbGQgdGltZSB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seQ0K PiArICAgICAgICAgKiBiZSBjYWxsZWQgaWZmIHRoZSBtZW1vcnkgZGVjb2RpbmcgYml0IGlzIGVu YWJsZWQsIHRodXMgdGhlIG9wZXJhdGlvbg0KPiArICAgICAgICAgKiB3aWxsIGFsd2F5cyBiZSB0 byBlc3RhYmxpc2ggbWFwcGluZ3MgYW5kIHByb2Nlc3MgYWxsIHRoZSBCQVJzLg0KPiArICAgICAg ICAgKi8NCj4gKyAgICAgICAgQVNTRVJUKG1hcCAmJiAhcm9tX29ubHkpOw0KPiArICAgICAgICBy ZXR1cm4gYXBwbHlfbWFwKHBkZXYtPmRvbWFpbiwgZGV2LCBtZW0pOw0KPiArICAgIH0NCj4gKw0K PiArICAgIGRlZmVyX21hcChwZGV2LT5kb21haW4sIGRldiwgbWVtLCBtYXAsIHJvbV9vbmx5KTsN Cj4gKw0KPiArICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBjbWRfd3Jp dGUoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCByZWcsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgY21kLCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAg IHVpbnQ4X3Qgc2xvdCA9IFBDSV9TTE9UKHBkZXYtPmRldmZuKSwgZnVuYyA9IFBDSV9GVU5DKHBk ZXYtPmRldmZuKTsNCj4gKyAgICB1aW50MTZfdCBjdXJyZW50X2NtZCA9IHBjaV9jb25mX3JlYWQx NihwZGV2LT5zZWcsIHBkZXYtPmJ1cywgc2xvdCwNCj4gZnVuYywNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcpOw0KPiArDQo+ICsgICAgLyoNCj4gKyAg ICAgKiBMZXQgRG9tMCBwbGF5IHdpdGggYWxsIHRoZSBiaXRzIGRpcmVjdGx5IGV4Y2VwdCBmb3Ig dGhlIG1lbW9yeQ0KPiArICAgICAqIGRlY29kaW5nIG9uZS4NCj4gKyAgICAgKi8NCj4gKyAgICBp ZiAoIChjbWQgXiBjdXJyZW50X2NtZCkgJiBQQ0lfQ09NTUFORF9NRU1PUlkgKQ0KPiArICAgICAg ICAvKg0KPiArICAgICAgICAgKiBJZ25vcmUgdGhlIGVycm9yLiBObyBtZW1vcnkgaGFzIGJlZW4g YWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZQ0KPiBwMm0NCj4gKyAgICAgICAgICogKGJlY2F1c2Ug dGhlIGFjdHVhbCBwMm0gY2hhbmdlcyBhcmUgZGVmZXJyZWQgaW4gbWF5YmVfZGVmZXJfbWFwKQ0K PiArICAgICAgICAgKiBhbmQgdGhlIG1lbW9yeSBkZWNvZGluZyBiaXQgaGFzIG5vdCBiZWVuIGNo YW5nZWQsIHNvIGxlYXZlDQo+ICsgICAgICAgICAqIGV2ZXJ5dGhpbmcgYXMtaXMsIGhvcGluZyB0 aGUgZ3Vlc3Qgd2lsbCByZWFsaXplIGFuZCB0cnkgYWdhaW4uDQo+ICsgICAgICAgICAqLw0KPiAr ICAgICAgICBtb2RpZnlfYmFycyhwZGV2LCBjbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlksIGZhbHNl KTsNCj4gKyAgICBlbHNlDQo+ICsgICAgICAgIHBjaV9jb25mX3dyaXRlMTYocGRldi0+c2VnLCBw ZGV2LT5idXMsIHNsb3QsIGZ1bmMsIHJlZywgY21kKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgYmFyX3dyaXRlKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgcmVn LA0KPiArICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbCwgdm9pZCAqZGF0YSkNCj4g K3sNCj4gKyAgICBzdHJ1Y3QgdnBjaV9iYXIgKmJhciA9IGRhdGE7DQo+ICsgICAgdWludDhfdCBz bG90ID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pLCBmdW5jID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4p Ow0KPiArICAgIGJvb2wgaGkgPSBmYWxzZTsNCj4gKw0KPiArICAgIGlmICggcGNpX2NvbmZfcmVh ZDE2KHBkZXYtPnNlZywgcGRldi0+YnVzLCBzbG90LCBmdW5jLCBQQ0lfQ09NTUFORCkNCj4gJg0K PiArICAgICAgICAgUENJX0NPTU1BTkRfTUVNT1JZICkNCj4gKyAgICB7DQo+ICsgICAgICAgIGdw cmludGsoWEVOTE9HX1dBUk5JTkcsDQo+ICsgICAgICAgICAgICAgICAgIiUwNHg6JTAyeDolMDJ4 LiV1OiBpZ25vcmVkIEJBUiAlbHUgd3JpdGUgd2l0aCBtZW1vcnkNCj4gZGVjb2RpbmcgZW5hYmxl ZFxuIiwNCj4gKyAgICAgICAgICAgICAgICBwZGV2LT5zZWcsIHBkZXYtPmJ1cywgc2xvdCwgZnVu YywNCj4gKyAgICAgICAgICAgICAgICBiYXIgLSBwZGV2LT52cGNpLT5oZWFkZXIuYmFycyk7DQo+ ICsgICAgICAgIHJldHVybjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoIGJhci0+dHlwZSA9 PSBWUENJX0JBUl9NRU02NF9ISSApDQo+ICsgICAgew0KPiArICAgICAgICBBU1NFUlQocmVnID4g UENJX0JBU0VfQUREUkVTU18wKTsNCj4gKyAgICAgICAgYmFyLS07DQo+ICsgICAgICAgIGhpID0g dHJ1ZTsNCj4gKyAgICB9DQo+ICsgICAgZWxzZQ0KPiArICAgICAgICB2YWwgJj0gUENJX0JBU0Vf QUREUkVTU19NRU1fTUFTSzsNCj4gKw0KPiArICAgIC8qDQo+ICsgICAgICogVXBkYXRlIHRoZSBj YWNoZWQgYWRkcmVzcywgc28gdGhhdCB3aGVuIG1lbW9yeSBkZWNvZGluZyBpcyBlbmFibGVkDQo+ ICsgICAgICogWGVuIGNhbiBtYXAgdGhlIEJBUiBpbnRvIHRoZSBndWVzdCBwMm0uDQo+ICsgICAg ICovDQo+ICsgICAgYmFyLT5hZGRyICY9IH4oMHhmZmZmZmZmZnVsbCA8PCAoaGkgPyAzMiA6IDAp KTsNCj4gKyAgICBiYXItPmFkZHIgfD0gKHVpbnQ2NF90KXZhbCA8PCAoaGkgPyAzMiA6IDApOw0K PiArDQo+ICsgICAgLyogTWFrZSBzdXJlIFhlbiB3cml0ZXMgYmFjayB0aGUgc2FtZSB2YWx1ZSBm b3IgdGhlIEJBUiBSTyBiaXRzLiAqLw0KPiArICAgIGlmICggIWhpICkNCj4gKyAgICB7DQo+ICsg ICAgICAgIHZhbCB8PSBiYXItPnR5cGUgPT0gVlBDSV9CQVJfTUVNMzIgPw0KPiBQQ0lfQkFTRV9B RERSRVNTX01FTV9UWVBFXzMyDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0Ow0KPiArICAgICAgICB2YWwg fD0gYmFyLT5wcmVmZXRjaGFibGUgPyBQQ0lfQkFTRV9BRERSRVNTX01FTV9QUkVGRVRDSCA6IDA7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcGNpX2NvbmZfd3JpdGUzMihwZGV2LT5zZWcsIHBkZXYt PmJ1cywgUENJX1NMT1QocGRldi0+ZGV2Zm4pLA0KPiArICAgICAgICAgICAgICAgICAgICAgUENJ X0ZVTkMocGRldi0+ZGV2Zm4pLCByZWcsIHZhbCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IHJvbV93cml0ZShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywN Cj4gKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWwsIHZvaWQgKmRhdGEpDQo+ICt7 DQo+ICsgICAgc3RydWN0IHZwY2lfaGVhZGVyICpoZWFkZXIgPSAmcGRldi0+dnBjaS0+aGVhZGVy Ow0KPiArICAgIHN0cnVjdCB2cGNpX2JhciAqcm9tID0gZGF0YTsNCj4gKyAgICB1aW50OF90IHNs b3QgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIGZ1bmMgPSBQQ0lfRlVOQyhwZGV2LT5kZXZmbik7 DQo+ICsgICAgdWludDE2X3QgY21kID0gcGNpX2NvbmZfcmVhZDE2KHBkZXYtPnNlZywgcGRldi0+ YnVzLCBzbG90LCBmdW5jLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ Q0lfQ09NTUFORCk7DQo+ICsgICAgYm9vbCBuZXdfZW5hYmxlZCA9IHZhbCAmIFBDSV9ST01fQURE UkVTU19FTkFCTEU7DQo+ICsNCj4gKyAgICBpZiAoIChjbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlkp ICYmIGhlYWRlci0+cm9tX2VuYWJsZWQgJiYNCj4gbmV3X2VuYWJsZWQgKQ0KPiArICAgIHsNCj4g KyAgICAgICAgZ3ByaW50ayhYRU5MT0dfV0FSTklORywNCj4gKyAgICAgICAgICAgICAgICAiJTA0 eDolMDJ4OiUwMnguJXU6IGlnbm9yZWQgUk9NIEJBUiB3cml0ZSB3aXRoIG1lbW9yeQ0KPiBkZWNv ZGluZyBlbmFibGVkXG4iLA0KPiArICAgICAgICAgICAgICAgIHBkZXYtPnNlZywgcGRldi0+YnVz LCBzbG90LCBmdW5jKTsNCj4gKyAgICAgICAgcmV0dXJuOw0KPiArICAgIH0NCj4gKw0KPiArICAg IGlmICggIWhlYWRlci0+cm9tX2VuYWJsZWQgKQ0KPiArICAgICAgICByb20tPmFkZHIgPSB2YWwg JiBQQ0lfUk9NX0FERFJFU1NfTUFTSzsNCj4gKw0KPiArICAgIC8qIENoZWNrIGlmIFJPTSBCQVIg c2hvdWxkIGJlIG1hcHBlZC91bm1hcHBlZC4gKi8NCj4gKyAgICBpZiAoIChjbWQgJiBQQ0lfQ09N TUFORF9NRU1PUlkpICYmIGhlYWRlci0+cm9tX2VuYWJsZWQgIT0NCj4gbmV3X2VuYWJsZWQgKQ0K PiArICAgIHsNCj4gKyAgICAgICAgaWYgKCBtb2RpZnlfYmFycyhwZGV2LCBuZXdfZW5hYmxlZCwg dHJ1ZSkgKQ0KPiArICAgICAgICAgICAgLyoNCj4gKyAgICAgICAgICAgICAqIFJldHVybiBvbiBl cnJvciBpbiBvcmRlciB0byBhdm9pZCB1cGRhdGluZyB0aGUgJ2FkZHInIGZpZWxkLiBObw0KPiAr ICAgICAgICAgICAgICogbWVtb3J5IGhhcyBiZWVuIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUg cDJtIChiZWNhdXNlIHRoZQ0KPiArICAgICAgICAgICAgICogYWN0dWFsIHAybSBjaGFuZ2VzIGFy ZSBkZWZlcnJlZCBpbiBtYXliZV9kZWZlcl9tYXApIGFuZCB0aGUNCj4gUk9NDQo+ICsgICAgICAg ICAgICAgKiBlbmFibGUgYml0IGhhcyBub3QgYmVlbiBjaGFuZ2VkLCBzbyBsZWF2ZSBldmVyeXRo aW5nIGFzLWlzLA0KPiArICAgICAgICAgICAgICogaG9waW5nIHRoZSBndWVzdCB3aWxsIHJlYWxp emUgYW5kIHRyeSBhZ2Fpbi4NCj4gKyAgICAgICAgICAgICAqLw0KPiArICAgICAgICAgICAgcmV0 dXJuOw0KPiArICAgIH0NCj4gKyAgICBlbHNlDQo+ICsgICAgew0KPiArICAgICAgICBoZWFkZXIt PnJvbV9lbmFibGVkID0gbmV3X2VuYWJsZWQ7DQo+ICsgICAgICAgIHBjaV9jb25mX3dyaXRlMzIo cGRldi0+c2VnLCBwZGV2LT5idXMsIHNsb3QsIGZ1bmMsIHJlZywgdmFsKTsNCj4gKyAgICB9DQo+ ICsNCj4gKyAgICBpZiAoICFuZXdfZW5hYmxlZCApDQo+ICsgICAgICAgIHJvbS0+YWRkciA9IHZh bCAmIFBDSV9ST01fQUREUkVTU19NQVNLOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGluaXRf YmFycyhzdHJ1Y3QgcGNpX2RldiAqcGRldikNCj4gK3sNCj4gKyAgICB1aW50OF90IHNsb3QgPSBQ Q0lfU0xPVChwZGV2LT5kZXZmbiksIGZ1bmMgPSBQQ0lfRlVOQyhwZGV2LT5kZXZmbik7DQo+ICsg ICAgdWludDE2X3QgY21kOw0KPiArICAgIHVpbnQ2NF90IGFkZHIsIHNpemU7DQo+ICsgICAgdW5z aWduZWQgaW50IGksIG51bV9iYXJzLCByb21fcmVnOw0KPiArICAgIHN0cnVjdCB2cGNpX2hlYWRl ciAqaGVhZGVyID0gJnBkZXYtPnZwY2ktPmhlYWRlcjsNCj4gKyAgICBzdHJ1Y3QgdnBjaV9iYXIg KmJhcnMgPSBoZWFkZXItPmJhcnM7DQo+ICsgICAgcGNpX3NiZGZfdCBzYmRmID0gew0KPiArICAg ICAgICAuc2VnID0gcGRldi0+c2VnLA0KPiArICAgICAgICAuYnVzID0gcGRldi0+YnVzLA0KPiAr ICAgICAgICAuZGV2ID0gc2xvdCwNCj4gKyAgICAgICAgLmZ1bmMgPSBmdW5jLA0KPiArICAgIH07 DQo+ICsgICAgaW50IHJjOw0KPiArDQo+ICsgICAgc3dpdGNoICggcGNpX2NvbmZfcmVhZDgocGRl di0+c2VnLCBwZGV2LT5idXMsIHNsb3QsIGZ1bmMsDQo+IFBDSV9IRUFERVJfVFlQRSkNCj4gKyAg ICAgICAgICAgICAmIDB4N2YgKQ0KPiArICAgIHsNCj4gKyAgICBjYXNlIFBDSV9IRUFERVJfVFlQ RV9OT1JNQUw6DQo+ICsgICAgICAgIG51bV9iYXJzID0gUENJX0hFQURFUl9OT1JNQUxfTlJfQkFS UzsNCj4gKyAgICAgICAgcm9tX3JlZyA9IFBDSV9ST01fQUREUkVTUzsNCj4gKyAgICAgICAgYnJl YWs7DQo+ICsNCj4gKyAgICBjYXNlIFBDSV9IRUFERVJfVFlQRV9CUklER0U6DQo+ICsgICAgICAg IG51bV9iYXJzID0gUENJX0hFQURFUl9CUklER0VfTlJfQkFSUzsNCj4gKyAgICAgICAgcm9tX3Jl ZyA9IFBDSV9ST01fQUREUkVTUzE7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAgZGVm YXVsdDoNCj4gKyAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIC8qIFNldHVwIGEgaGFuZGxlciBmb3IgdGhlIGNvbW1hbmQgcmVnaXN0ZXIuICovDQo+ICsg ICAgcmMgPSB2cGNpX2FkZF9yZWdpc3RlcihwZGV2LT52cGNpLCB2cGNpX2h3X3JlYWQxNiwgY21k X3dyaXRlLA0KPiBQQ0lfQ09NTUFORCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIs IGhlYWRlcik7DQo+ICsgICAgaWYgKCByYyApDQo+ICsgICAgICAgIHJldHVybiByYzsNCj4gKw0K PiArICAgIC8qIERpc2FibGUgbWVtb3J5IGRlY29kaW5nIGJlZm9yZSBzaXppbmcuICovDQo+ICsg ICAgY21kID0gcGNpX2NvbmZfcmVhZDE2KHBkZXYtPnNlZywgcGRldi0+YnVzLCBzbG90LCBmdW5j LA0KPiBQQ0lfQ09NTUFORCk7DQo+ICsgICAgaWYgKCBjbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlkg KQ0KPiArICAgICAgICBwY2lfY29uZl93cml0ZTE2KHBkZXYtPnNlZywgcGRldi0+YnVzLCBzbG90 LCBmdW5jLCBQQ0lfQ09NTUFORCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgJiB+ UENJX0NPTU1BTkRfTUVNT1JZKTsNCj4gKw0KPiArICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2Jh cnM7IGkrKyApDQo+ICsgICAgew0KPiArICAgICAgICB1aW50OF90IHJlZyA9IFBDSV9CQVNFX0FE RFJFU1NfMCArIGkgKiA0Ow0KPiArICAgICAgICB1aW50MzJfdCB2YWw7DQo+ICsNCj4gKyAgICAg ICAgaWYgKCBpICYmIGJhcnNbaSAtIDFdLnR5cGUgPT0gVlBDSV9CQVJfTUVNNjRfTE8gKQ0KPiAr ICAgICAgICB7DQo+ICsgICAgICAgICAgICBiYXJzW2ldLnR5cGUgPSBWUENJX0JBUl9NRU02NF9I STsNCj4gKyAgICAgICAgICAgIHJjID0gdnBjaV9hZGRfcmVnaXN0ZXIocGRldi0+dnBjaSwgdnBj aV9od19yZWFkMzIsIGJhcl93cml0ZSwgcmVnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA0LCAmYmFyc1tpXSk7DQo+ICsgICAgICAgICAgICBpZiAoIHJjICkNCj4gKyAg ICAgICAgICAgIHsNCj4gKyAgICAgICAgICAgICAgICBwY2lfY29uZl93cml0ZTE2KHBkZXYtPnNl ZywgcGRldi0+YnVzLCBzbG90LCBmdW5jLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUENJX0NPTU1BTkQsIGNtZCk7DQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHJjOw0K PiArICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICBjb250aW51ZTsNCj4gKyAgICAg ICAgfQ0KPiArDQo+ICsgICAgICAgIHZhbCA9IHBjaV9jb25mX3JlYWQzMihwZGV2LT5zZWcsIHBk ZXYtPmJ1cywgc2xvdCwgZnVuYywgcmVnKTsNCj4gKyAgICAgICAgaWYgKCAodmFsICYgUENJX0JB U0VfQUREUkVTU19TUEFDRSkgPT0NCj4gUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTyApDQo+ICsg ICAgICAgIHsNCj4gKyAgICAgICAgICAgIGJhcnNbaV0udHlwZSA9IFZQQ0lfQkFSX0lPOw0KPiAr ICAgICAgICAgICAgY29udGludWU7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgaWYgKCAodmFs ICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLKSA9PQ0KPiArICAgICAgICAgICAgIFBD SV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQgKQ0KPiArICAgICAgICAgICAgYmFyc1tpXS50eXBl ID0gVlBDSV9CQVJfTUVNNjRfTE87DQo+ICsgICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgIGJh cnNbaV0udHlwZSA9IFZQQ0lfQkFSX01FTTMyOw0KPiArDQo+ICsgICAgICAgIHJjID0gcGNpX3Np emVfbWVtX2JhcihzYmRmLCByZWcsICZhZGRyLCAmc2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChpID09IG51bV9iYXJzIC0gMSkgPyBQQ0lfQkFSX0xBU1QgOiAwKTsNCj4g KyAgICAgICAgaWYgKCByYyA8IDAgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICBwY2lf Y29uZl93cml0ZTE2KHBkZXYtPnNlZywgcGRldi0+YnVzLCBzbG90LCBmdW5jLCBQQ0lfQ09NTUFO RCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kKTsNCj4gKyAgICAgICAgICAg IHJldHVybiByYzsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGlmICggc2l6ZSA9PSAw ICkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgICAgYmFyc1tpXS50eXBlID0gVlBDSV9CQVJf RU1QVFk7DQo+ICsgICAgICAgICAgICBjb250aW51ZTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsg ICAgICAgIGJhcnNbaV0uYWRkciA9IGFkZHI7DQo+ICsgICAgICAgIGJhcnNbaV0uc2l6ZSA9IHNp emU7DQo+ICsgICAgICAgIGJhcnNbaV0ucHJlZmV0Y2hhYmxlID0gdmFsICYgUENJX0JBU0VfQURE UkVTU19NRU1fUFJFRkVUQ0g7DQo+ICsNCj4gKyAgICAgICAgcmMgPSB2cGNpX2FkZF9yZWdpc3Rl cihwZGV2LT52cGNpLCB2cGNpX2h3X3JlYWQzMiwgYmFyX3dyaXRlLCByZWcsIDQsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJhcnNbaV0pOw0KPiArICAgICAgICBpZiAoIHJj ICkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgICAgcGNpX2NvbmZfd3JpdGUxNihwZGV2LT5z ZWcsIHBkZXYtPmJ1cywgc2xvdCwgZnVuYywgUENJX0NPTU1BTkQsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNtZCk7DQo+ICsgICAgICAgICAgICByZXR1cm4gcmM7DQo+ICsgICAg ICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvKiBDaGVjayBleHBhbnNpb24gUk9NLiAqLw0K PiArICAgIHJjID0gcGNpX3NpemVfbWVtX2JhcihzYmRmLCByb21fcmVnLCAmYWRkciwgJnNpemUs IFBDSV9CQVJfUk9NKTsNCj4gKyAgICBpZiAoIHJjID4gMCAmJiBzaXplICkNCj4gKyAgICB7DQo+ ICsgICAgICAgIHN0cnVjdCB2cGNpX2JhciAqcm9tID0gJmhlYWRlci0+YmFyc1tudW1fYmFyc107 DQo+ICsNCj4gKyAgICAgICAgcm9tLT50eXBlID0gVlBDSV9CQVJfUk9NOw0KPiArICAgICAgICBy b20tPnNpemUgPSBzaXplOw0KPiArICAgICAgICByb20tPmFkZHIgPSBhZGRyOw0KPiArICAgICAg ICBoZWFkZXItPnJvbV9lbmFibGVkID0gcGNpX2NvbmZfcmVhZDMyKHBkZXYtPnNlZywgcGRldi0+ YnVzLCBzbG90LA0KPiBmdW5jLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJvbV9yZWcpICYgUENJX1JPTV9BRERSRVNTX0VOQUJMRTsNCj4gKw0KPiAr ICAgICAgICByYyA9IHZwY2lfYWRkX3JlZ2lzdGVyKHBkZXYtPnZwY2ksIHZwY2lfaHdfcmVhZDMy LCByb21fd3JpdGUsDQo+IHJvbV9yZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgNCwgcm9tKTsNCj4gKyAgICAgICAgaWYgKCByYyApDQo+ICsgICAgICAgICAgICByb20tPnR5 cGUgPSBWUENJX0JBUl9FTVBUWTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gKGNtZCAm IFBDSV9DT01NQU5EX01FTU9SWSkgPyBtb2RpZnlfYmFycyhwZGV2LCB0cnVlLA0KPiBmYWxzZSkg OiAwOw0KPiArfQ0KPiArUkVHSVNURVJfVlBDSV9JTklUKGluaXRfYmFycyk7DQo+ICsNCj4gKy8q DQo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6DQo+ICsgKiBtb2RlOiBDDQo+ICsgKiBjLWZpbGUtc3R5 bGU6ICJCU0QiDQo+ICsgKiBjLWJhc2ljLW9mZnNldDogNA0KPiArICogdGFiLXdpZHRoOiA0DQo+ ICsgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwNCj4gKyAqIEVuZDoNCj4gKyAqLw0KPiBkaWZmIC0t Z2l0IGEveGVuL2RyaXZlcnMvdnBjaS92cGNpLmMgYi94ZW4vZHJpdmVycy92cGNpL3ZwY2kuYw0K PiBpbmRleCA0NzQwZDAyZWRmLi5lNWI0OWI5ZDgyIDEwMDY0NA0KPiAtLS0gYS94ZW4vZHJpdmVy cy92cGNpL3ZwY2kuYw0KPiArKysgYi94ZW4vZHJpdmVycy92cGNpL3ZwY2kuYw0KPiBAQCAtMzQs NiArMzQsMjMgQEAgc3RydWN0IHZwY2lfcmVnaXN0ZXIgew0KPiAgICAgIHN0cnVjdCBsaXN0X2hl YWQgbm9kZTsNCj4gIH07DQo+IA0KPiArdm9pZCB2cGNpX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBj aV9kZXYgKnBkZXYpDQo+ICt7DQo+ICsgICAgc3Bpbl9sb2NrKCZwZGV2LT52cGNpLT5sb2NrKTsN Cj4gKyAgICB3aGlsZSAoICFsaXN0X2VtcHR5KCZwZGV2LT52cGNpLT5oYW5kbGVycykgKQ0KPiAr ICAgIHsNCj4gKyAgICAgICAgc3RydWN0IHZwY2lfcmVnaXN0ZXIgKnIgPSBsaXN0X2ZpcnN0X2Vu dHJ5KCZwZGV2LT52cGNpLT5oYW5kbGVycywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cGNpX3JlZ2lzdGVyLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSk7DQo+ICsN Cj4gKyAgICAgICAgbGlzdF9kZWwoJnItPm5vZGUpOw0KPiArICAgICAgICB4ZnJlZShyKTsNCj4g KyAgICB9DQo+ICsgICAgc3Bpbl91bmxvY2soJnBkZXYtPnZwY2ktPmxvY2spOw0KPiArICAgIHhm cmVlKHBkZXYtPnZwY2kpOw0KPiArICAgIHBkZXYtPnZwY2kgPSBOVUxMOw0KPiArfQ0KPiArDQo+ ICBpbnQgX19od2RvbV9pbml0IHZwY2lfYWRkX2hhbmRsZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2 KQ0KPiAgew0KPiAgICAgIHVuc2lnbmVkIGludCBpOw0KPiBAQCAtNTcsMTkgKzc0LDcgQEAgaW50 IF9faHdkb21faW5pdCB2cGNpX2FkZF9oYW5kbGVycyhzdHJ1Y3QgcGNpX2Rldg0KPiAqcGRldikN Cj4gICAgICB9DQo+IA0KPiAgICAgIGlmICggcmMgKQ0KPiAtICAgIHsNCj4gLSAgICAgICAgd2hp bGUgKCAhbGlzdF9lbXB0eSgmcGRldi0+dnBjaS0+aGFuZGxlcnMpICkNCj4gLSAgICAgICAgew0K PiAtICAgICAgICAgICAgc3RydWN0IHZwY2lfcmVnaXN0ZXIgKnIgPSBsaXN0X2ZpcnN0X2VudHJ5 KCZwZGV2LT52cGNpLT5oYW5kbGVycywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnBjaV9yZWdpc3RlciwNCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlKTsN Cj4gLQ0KPiAtICAgICAgICAgICAgbGlzdF9kZWwoJnItPm5vZGUpOw0KPiAtICAgICAgICAgICAg eGZyZWUocik7DQo+IC0gICAgICAgIH0NCj4gLSAgICAgICAgeGZyZWUocGRldi0+dnBjaSk7DQo+ IC0gICAgICAgIHBkZXYtPnZwY2kgPSBOVUxMOw0KPiAtICAgIH0NCj4gKyAgICAgICAgdnBjaV9y ZW1vdmVfZGV2aWNlKHBkZXYpOw0KPiANCj4gICAgICByZXR1cm4gcmM7DQo+ICB9DQo+IEBAIC0x MDIsNiArMTA3LDIwIEBAIHN0YXRpYyB2b2lkIHZwY2lfaWdub3JlZF93cml0ZShjb25zdCBzdHJ1 Y3QgcGNpX2Rldg0KPiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4gIHsNCj4gIH0NCj4gDQo+ ICt1aW50MzJfdCB2cGNpX2h3X3JlYWQxNihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5z aWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpDQo+ ICt7DQo+ICsgICAgcmV0dXJuIHBjaV9jb25mX3JlYWQxNihwZGV2LT5zZWcsIHBkZXYtPmJ1cywg UENJX1NMT1QocGRldi0+ZGV2Zm4pLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJ X0ZVTkMocGRldi0+ZGV2Zm4pLCByZWcpOw0KPiArfQ0KPiArDQo+ICt1aW50MzJfdCB2cGNpX2h3 X3JlYWQzMihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpDQo+ICt7DQo+ICsgICAgcmV0dXJu IHBjaV9jb25mX3JlYWQzMihwZGV2LT5zZWcsIHBkZXYtPmJ1cywgUENJX1NMT1QocGRldi0+ZGV2 Zm4pLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0ZVTkMocGRldi0+ZGV2Zm4p LCByZWcpOw0KPiArfQ0KPiArDQo+ICBpbnQgdnBjaV9hZGRfcmVnaXN0ZXIoc3RydWN0IHZwY2kg KnZwY2ksIHZwY2lfcmVhZF90ICpyZWFkX2hhbmRsZXIsDQo+ICAgICAgICAgICAgICAgICAgICAg ICAgdnBjaV93cml0ZV90ICp3cml0ZV9oYW5kbGVyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LA0KPiAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplLCB2b2lkICpkYXRhKQ0KPiBk aWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVuL3NjaGVkLmggYi94ZW4vaW5jbHVkZS94ZW4vc2No ZWQuaA0KPiBpbmRleCAzOWY5Mzg2NDRhLi5hNDUyNTQ2NDUzIDEwMDY0NA0KPiAtLS0gYS94ZW4v aW5jbHVkZS94ZW4vc2NoZWQuaA0KPiArKysgYi94ZW4vaW5jbHVkZS94ZW4vc2NoZWQuaA0KPiBA QCAtMjAsNiArMjAsNyBAQA0KPiAgI2luY2x1ZGUgPHhlbi9zbXAuaD4NCj4gICNpbmNsdWRlIDx4 ZW4vcGVyZmMuaD4NCj4gICNpbmNsdWRlIDxhc20vYXRvbWljLmg+DQo+ICsjaW5jbHVkZSA8eGVu L3ZwY2kuaD4NCj4gICNpbmNsdWRlIDx4ZW4vd2FpdC5oPg0KPiAgI2luY2x1ZGUgPHB1YmxpYy94 ZW4uaD4NCj4gICNpbmNsdWRlIDxwdWJsaWMvZG9tY3RsLmg+DQo+IEBAIC0yNjQsNiArMjY1LDkg QEAgc3RydWN0IHZjcHUNCj4gDQo+ICAgICAgc3RydWN0IGV2dGNobl9maWZvX3ZjcHUgKmV2dGNo bl9maWZvOw0KPiANCj4gKyAgICAvKiB2UENJIHBlci12Q1BVIGFyZWEsIHVzZWQgdG8gc3RvcmUg ZGF0YSBmb3IgbG9uZyBydW5uaW5nIG9wZXJhdGlvbnMuICovDQo+ICsgICAgc3RydWN0IHZwY2lf dmNwdSB2cGNpOw0KPiArDQo+ICAgICAgc3RydWN0IGFyY2hfdmNwdSBhcmNoOw0KPiAgfTsNCj4g DQo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vdnBjaS5oIGIveGVuL2luY2x1ZGUveGVu L3ZwY2kuaA0KPiBpbmRleCA5ZjI4NjRmYjBjLi42YmY4YjIyYjRmIDEwMDY0NA0KPiAtLS0gYS94 ZW4vaW5jbHVkZS94ZW4vdnBjaS5oDQo+ICsrKyBiL3hlbi9pbmNsdWRlL3hlbi92cGNpLmgNCj4g QEAgLTEsNiArMSw4IEBADQo+ICAjaWZuZGVmIF9YRU5fVlBDSV9IXw0KPiAgI2RlZmluZSBfWEVO X1ZQQ0lfSF8NCj4gDQo+ICsjaWZkZWYgQ09ORklHX0hBU19WUENJDQo+ICsNCj4gICNpbmNsdWRl IDx4ZW4vcGNpLmg+DQo+ICAjaW5jbHVkZSA8eGVuL3R5cGVzLmg+DQo+ICAjaW5jbHVkZSA8eGVu L2xpc3QuaD4NCj4gQEAgLTIwLDYgKzIyLDkgQEAgdHlwZWRlZiBpbnQgdnBjaV9yZWdpc3Rlcl9p bml0X3Qoc3RydWN0IHBjaV9kZXYgKmRldik7DQo+ICAvKiBBZGQgdlBDSSBoYW5kbGVycyB0byBk ZXZpY2UuICovDQo+ICBpbnQgX19tdXN0X2NoZWNrIHZwY2lfYWRkX2hhbmRsZXJzKHN0cnVjdCBw Y2lfZGV2ICpkZXYpOw0KPiANCj4gKy8qIFJlbW92ZSBhbGwgaGFuZGxlcnMgYW5kIGZyZWUgdnBj aSByZWxhdGVkIHN0cnVjdHVyZXMuICovDQo+ICt2b2lkIHZwY2lfcmVtb3ZlX2RldmljZShzdHJ1 Y3QgcGNpX2RldiAqcGRldik7DQo+ICsNCj4gIC8qIEFkZC9yZW1vdmUgYSByZWdpc3RlciBoYW5k bGVyLiAqLw0KPiAgaW50IF9fbXVzdF9jaGVjayB2cGNpX2FkZF9yZWdpc3RlcihzdHJ1Y3QgdnBj aSAqdnBjaSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnBjaV9yZWFk X3QgKnJlYWRfaGFuZGxlciwNCj4gQEAgLTM0LDEyICszOSw2OCBAQCB1aW50MzJfdCB2cGNpX3Jl YWQocGNpX3NiZGZfdCBzYmRmLCB1bnNpZ25lZCBpbnQgcmVnLA0KPiB1bnNpZ25lZCBpbnQgc2l6 ZSk7DQo+ICB2b2lkIHZwY2lfd3JpdGUocGNpX3NiZGZfdCBzYmRmLCB1bnNpZ25lZCBpbnQgcmVn LCB1bnNpZ25lZCBpbnQgc2l6ZSwNCj4gICAgICAgICAgICAgICAgICB1aW50MzJfdCBkYXRhKTsN Cj4gDQo+ICsvKiBQYXNzdGhyb3VnaCBoYW5kbGVycy4gKi8NCj4gK3VpbnQzMl90IHZwY2lfaHdf cmVhZDE2KGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSk7DQo+ICt1aW50MzJfdCB2cGNpX2h3 X3JlYWQzMihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOw0KPiArDQo+ICsvKg0KPiArICog Q2hlY2sgZm9yIHBlbmRpbmcgdlBDSSBvcGVyYXRpb25zIG9uIHRoaXMgdmNwdS4gUmV0dXJucyB0 cnVlIGlmIHRoZSB2Y3B1DQo+ICsgKiBzaG91bGQgbm90IHJ1bi4NCj4gKyAqLw0KPiArYm9vbCBf X211c3RfY2hlY2sgdnBjaV9wcm9jZXNzX3BlbmRpbmcoc3RydWN0IHZjcHUgKnYpOw0KPiArDQo+ ICBzdHJ1Y3QgdnBjaSB7DQo+ICAgICAgLyogTGlzdCBvZiB2UENJIGhhbmRsZXJzIGZvciBhIGRl dmljZS4gKi8NCj4gICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGhhbmRsZXJzOw0KPiAgICAgIHNwaW5s b2NrX3QgbG9jazsNCj4gKw0KPiArI2lmZGVmIF9fWEVOX18NCj4gKyAgICAvKiBIaWRlIHRoZSBy ZXN0IG9mIHRoZSB2cGNpIHN0cnVjdCBmcm9tIHRoZSB1c2VyLXNwYWNlIHRlc3QgaGFybmVzcy4g Ki8NCj4gKyAgICBzdHJ1Y3QgdnBjaV9oZWFkZXIgew0KPiArICAgICAgICAvKiBJbmZvcm1hdGlv biBhYm91dCB0aGUgUENJIEJBUnMgb2YgdGhpcyBkZXZpY2UuICovDQo+ICsgICAgICAgIHN0cnVj dCB2cGNpX2JhciB7DQo+ICsgICAgICAgICAgICB1aW50NjRfdCBhZGRyOw0KPiArICAgICAgICAg ICAgdWludDY0X3Qgc2l6ZTsNCj4gKyAgICAgICAgICAgIGVudW0gew0KPiArICAgICAgICAgICAg ICAgIFZQQ0lfQkFSX0VNUFRZLA0KPiArICAgICAgICAgICAgICAgIFZQQ0lfQkFSX0lPLA0KPiAr ICAgICAgICAgICAgICAgIFZQQ0lfQkFSX01FTTMyLA0KPiArICAgICAgICAgICAgICAgIFZQQ0lf QkFSX01FTTY0X0xPLA0KPiArICAgICAgICAgICAgICAgIFZQQ0lfQkFSX01FTTY0X0hJLA0KPiAr ICAgICAgICAgICAgICAgIFZQQ0lfQkFSX1JPTSwNCj4gKyAgICAgICAgICAgIH0gdHlwZTsNCj4g KyAgICAgICAgICAgIGJvb2wgcHJlZmV0Y2hhYmxlIDogMTsNCj4gKyAgICAgICAgICAgIC8qIFN0 b3JlIHdoZXRoZXIgdGhlIEJBUiBpcyBtYXBwZWQgaW50byBndWVzdCBwMm0uICovDQo+ICsgICAg ICAgICAgICBib29sIGVuYWJsZWQgICAgICA6IDE7DQo+ICsjZGVmaW5lIFBDSV9IRUFERVJfTk9S TUFMX05SX0JBUlMgICAgICAgIDYNCj4gKyNkZWZpbmUgUENJX0hFQURFUl9CUklER0VfTlJfQkFS UyAgICAgICAgMg0KPiArICAgICAgICB9IGJhcnNbUENJX0hFQURFUl9OT1JNQUxfTlJfQkFSUyAr IDFdOw0KPiArICAgICAgICAvKiBBdCBtb3N0IDYgQkFSUyArIDEgZXhwYW5zaW9uIFJPTSBCQVIu ICovDQo+ICsNCj4gKyAgICAgICAgLyoNCj4gKyAgICAgICAgICogU3RvcmUgd2hldGhlciB0aGUg Uk9NIGVuYWJsZSBiaXQgaXMgc2V0IChkb2Vzbid0IGltcGx5IFJPTSBCQVINCj4gKyAgICAgICAg ICogaXMgbWFwcGVkIGludG8gZ3Vlc3QgcDJtKSBpZiB0aGVyZSdzIGEgUk9NIEJBUiBvbiB0aGUg ZGV2aWNlLg0KPiArICAgICAgICAgKi8NCj4gKyAgICAgICAgYm9vbCByb21fZW5hYmxlZCAgICAg IDogMTsNCj4gKyAgICAgICAgLyogRklYTUU6IGN1cnJlbnRseSB0aGVyZSdzIG5vIHN1cHBvcnQg Zm9yIFNSLUlPVi4gKi8NCj4gKyAgICB9IGhlYWRlcjsNCj4gKyNlbmRpZg0KPiArfTsNCj4gKw0K PiArc3RydWN0IHZwY2lfdmNwdSB7DQo+ICsgICAgLyogUGVyLXZjcHUgc3RydWN0dXJlIHRvIHN0 b3JlIHN0YXRlIHdoaWxlIHt1bn1tYXBwaW5nIG9mIFBDSSBCQVJzLiAqLw0KPiArICAgIHN0cnVj dCByYW5nZXNldCAqbWVtOw0KPiArICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2Ow0KPiArICAgIGJv b2wgbWFwICAgICAgOiAxOw0KPiArICAgIGJvb2wgcm9tX29ubHkgOiAxOw0KPiAgfTsNCj4gDQo+ ICsjZWxzZSAvKiAhQ09ORklHX0hBU19WUENJICovDQo+ICtzdHJ1Y3QgdnBjaV92Y3B1IHt9Ow0K PiArI2VuZGlmDQo+ICsNCj4gICNlbmRpZg0KPiANCj4gIC8qDQo+IC0tDQo+IDIuMTYuMg0KDQpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs