From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v2 1/9] xen/vpci: introduce basic handlers to trap accesses to the PCI config space Date: Fri, 21 Apr 2017 16:23:34 +0000 Message-ID: <2343fcdfc5d34f209e8935a7fec65d1b@AMSPEX02CL03.citrite.net> References: <20170420151743.90889-1-roger.pau@citrix.com> <20170420151743.90889-2-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d1bLS-0006wF-Os for xen-devel@lists.xenproject.org; Fri, 21 Apr 2017 16:23:43 +0000 In-Reply-To: <20170420151743.90889-2-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: Wei Liu , Andrew Cooper , Jan Beulich , Ian Jackson , "boris.ostrovsky@oracle.com" , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSb2dlciBQYXUgTW9ubmUgW21h aWx0bzpyb2dlci5wYXVAY2l0cml4LmNvbV0NCj4gU2VudDogMjAgQXByaWwgMjAxNyAxNjoxOA0K PiBUbzogeGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IENjOiBrb25yYWQud2lsa0Bv cmFjbGUuY29tOyBib3Jpcy5vc3Ryb3Zza3lAb3JhY2xlLmNvbTsgUm9nZXIgUGF1IE1vbm5lDQo+ IDxyb2dlci5wYXVAY2l0cml4LmNvbT47IElhbiBKYWNrc29uIDxJYW4uSmFja3NvbkBjaXRyaXgu Y29tPjsgV2VpIExpdQ0KPiA8d2VpLmxpdTJAY2l0cml4LmNvbT47IEphbiBCZXVsaWNoIDxqYmV1 bGljaEBzdXNlLmNvbT47IEFuZHJldyBDb29wZXINCj4gPEFuZHJldy5Db29wZXIzQGNpdHJpeC5j b20+OyBQYXVsIER1cnJhbnQgPFBhdWwuRHVycmFudEBjaXRyaXguY29tPg0KPiBTdWJqZWN0OiBb UEFUQ0ggdjIgMS85XSB4ZW4vdnBjaTogaW50cm9kdWNlIGJhc2ljIGhhbmRsZXJzIHRvIHRyYXAg YWNjZXNzZXMNCj4gdG8gdGhlIFBDSSBjb25maWcgc3BhY2UNCj4gDQo+IFRoaXMgZnVuY3Rpb25h bGl0eSBpcyBnb2luZyB0byByZXNpZGUgaW4gdnBjaS5jIChhbmQgdGhlIGNvcnJlc3BvbmRpbmcg dnBjaS5oDQo+IGhlYWRlciksIGFuZCBzaG91bGQgYmUgYXJjaC1hZ25vc3RpYy4gVGhlIGhhbmRs ZXJzIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaA0KPiBzZXR1cCB0aGUgYmFzaWMgZnVuY3Rpb25h bGl0eSByZXF1aXJlZCBpbiBvcmRlciB0byB0cmFwIGFjY2Vzc2VzIHRvIHRoZSBQQ0kNCj4gY29u ZmlnIHNwYWNlLCBhbmQgYWxsb3cgZGVjb2RpbmcgdGhlIGFkZHJlc3MgYW5kIGZpbmRpbmcgdGhl IGNvcnJlc3BvbmRpbmcNCj4gaGFuZGxlciB0aGF0IHNob3VsZCBoYW5kbGUgdGhlIGFjY2VzcyAo YWx0aG91Z2ggbm8gaGFuZGxlcnMgYXJlDQo+IGltcGxlbWVudGVkKS4NCj4gDQo+IE5vdGUgdGhh dCB0aGUgdHJhcHMgdG8gdGhlIFBDSSBJTyBwb3J0cyByZWdpc3RlcnMgKDB4Y2Y4LzB4Y2ZjKSBh cmUgc2V0dXANCj4gaW5zaWRlIG9mIGEgeDg2IEhWTSBmaWxlLCBzaW5jZSB0aGF0J3Mgbm90IHNo YXJlZCB3aXRoIG90aGVyIGFyY2hlcy4NCj4gDQo+IEEgbmV3IFhFTl9YODZfRU1VX1ZQQ0kgeDg2 IGRvbWFpbiBmbGFnIGlzIGFkZGVkIGluIG9yZGVyIHRvIHNpZ25hbCBYZW4NCj4gd2hldGhlcg0K PiBhIGRvbWFpbiBzaG91bGQgdXNlIHRoZSBuZXdseSBpbnRyb2R1Y2VkIHZQQ0kgaGFuZGxlcnMs IHRoaXMgaXMgb25seSBlbmFibGVkDQo+IGZvciBQVkggRG9tMCBhdCB0aGUgbW9tZW50Lg0KPiAN Cj4gQSB2ZXJ5IHNpbXBsZSB1c2VyLXNwYWNlIHRlc3QgaXMgYWxzbyBwcm92aWRlZCwgc28gdGhh dCB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eQ0KPiBvZiB0aGUgdlBDSSB0cmFwcyBjYW4gYmUgYXNz ZXJ0ZWQuIFRoaXMgaGFzIGJlZW4gcHJvdmVuIHF1aXRlIGhlbHBmdWwgZHVyaW5nDQo+IGRldmVs b3BtZW50LCBzaW5jZSB0aGUgbG9naWMgdG8gaGFuZGxlIHBhcnRpYWwgYWNjZXNzZXMgb3IgYWNj ZXNzZXMgdGhhdA0KPiBleHBhbmQNCj4gYWNyb3NzIG11bHRpcGxlIHJlZ2lzdGVycyBpcyBub3Qg dHJpdmlhbC4NCj4gDQo+IFRoZSBoYW5kbGVycyBmb3IgdGhlIHJlZ2lzdGVycyBhcmUgYWRkZWQg dG8gYSByZWQtYmxhY2sgdHJlZSwgdGhhdCBpbmRleGVzDQo+IHRoZW0NCj4gYmFzZWQgb24gdGhl aXIgb2Zmc2V0LiBTaW5jZSBYZW4gbmVlZHMgdG8gaGFuZGxlIHBhcnRpYWwgYWNjZXNzZXMgdG8g dGhlDQo+IHJlZ2lzdGVycyBhbmQgYWNjZXNzIHRoYXQgZXhwYW5kIGFjcm9zcyBtdWx0aXBsZSBy ZWdpc3RlcnMgdGhlIGxvZ2ljIGluDQo+IHhlbl92cGNpX3tyZWFkL3dyaXRlfSBpcyBraW5kIG9m IGNvbnZvbHV0ZWQsIEkndmUgdHJpZWQgdG8gcHJvcGVybHkgY29tbWVudA0KPiBpdA0KPiBpbiBv cmRlciB0byBtYWtlIGl0IGVhc2llciB0byB1bmRlcnN0YW5kLg0KPiANCj4gU2lnbmVkLW9mZi1i eTogUm9nZXIgUGF1IE1vbm7DqSA8cm9nZXIucGF1QGNpdHJpeC5jb20+DQo+IC0tLQ0KPiBDYzog SWFuIEphY2tzb24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+DQo+IENjOiBXZWkgTGl1IDx3 ZWkubGl1MkBjaXRyaXguY29tPg0KPiBDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29t Pg0KPiBDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4NCj4gQ2M6 IFBhdWwgRHVycmFudCA8cGF1bC5kdXJyYW50QGNpdHJpeC5jb20+DQo+IC0tLQ0KPiBDaGFuZ2Vz IHNpbmNlIHYxOg0KPiAgLSBBbGxvdyBhY2Nlc3MgdG8gY3Jvc3MgYSB3b3JkLWJvdW5kYXJ5Lg0K PiAgLSBBZGQgbG9ja2luZy4NCj4gIC0gQWRkIGNsZWFudXAgdG8geGVuX3ZwY2lfYWRkX2hhbmRs ZXJzIGluIGNhc2Ugb2YgZmFpbHVyZS4NCj4gLS0tDQo+ICAuZ2l0aWdub3JlICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDQgKw0KPiAgdG9vbHMvbGlieGwvbGlieGxfeDg2LmMgICAgICAgICAg IHwgICAyICstDQo+ICB0b29scy90ZXN0cy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKw0K PiAgdG9vbHMvdGVzdHMvdnBjaS9NYWtlZmlsZSAgICAgICAgIHwgIDQ1ICsrKysNCj4gIHRvb2xz L3Rlc3RzL3ZwY2kvZW11bC5oICAgICAgICAgICB8IDEwNyArKysrKysrKysNCj4gIHRvb2xzL3Rl c3RzL3ZwY2kvbWFpbi5jICAgICAgICAgICB8IDIwNiArKysrKysrKysrKysrKysrKw0KPiAgeGVu L2FyY2gvYXJtL3hlbi5sZHMuUyAgICAgICAgICAgIHwgICAzICsNCj4gIHhlbi9hcmNoL3g4Ni9k b21haW4uYyAgICAgICAgICAgICB8ICAxOCArLQ0KPiAgeGVuL2FyY2gveDg2L2h2bS9odm0uYyAg ICAgICAgICAgIHwgICAyICsNCj4gIHhlbi9hcmNoL3g4Ni9odm0vaW8uYyAgICAgICAgICAgICB8 IDEzNSArKysrKysrKysrKw0KPiAgeGVuL2FyY2gveDg2L3NldHVwLmMgICAgICAgICAgICAgIHwg ICAzICstDQo+ICB4ZW4vYXJjaC94ODYveGVuLmxkcy5TICAgICAgICAgICAgfCAgIDMgKw0KPiAg eGVuL2RyaXZlcnMvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAyICstDQo+ICB4ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC9wY2kuYyAgICAgfCAgIDMgKw0KPiAgeGVuL2RyaXZlcnMvdnBjaS9NYWtl ZmlsZSAgICAgICAgIHwgICAxICsNCj4gIHhlbi9kcml2ZXJzL3ZwY2kvdnBjaS5jICAgICAgICAg ICB8IDQ3NA0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgeGVu L2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaCAgICAgIHwgICAxICsNCj4gIHhlbi9pbmNsdWRlL2Fz bS14ODYvaHZtL2RvbWFpbi5oICB8ICAgMyArDQo+ICB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9p by5oICAgICAgfCAgIDMgKw0KPiAgeGVuL2luY2x1ZGUvcHVibGljL2FyY2gteDg2L3hlbi5oIHwg ICA1ICstDQo+ICB4ZW4vaW5jbHVkZS94ZW4vcGNpLmggICAgICAgICAgICAgfCAgIDQgKw0KPiAg eGVuL2luY2x1ZGUveGVuL3ZwY2kuaCAgICAgICAgICAgIHwgIDY2ICsrKysrKw0KPiAgMjIgZmls ZXMgY2hhbmdlZCwgMTA4MyBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQ0KPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3RzL3ZwY2kvTWFrZWZpbGUNCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCB0b29scy90ZXN0cy92cGNpL2VtdWwuaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xz L3Rlc3RzL3ZwY2kvbWFpbi5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2RyaXZlcnMvdnBj aS9NYWtlZmlsZQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9kcml2ZXJzL3ZwY2kvdnBjaS5j DQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUveGVuL3ZwY2kuaA0KPiANCj4gZGlm ZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlDQo+IGluZGV4IDc0NzQ3Y2I3ZTcuLmVi YWZiYTI1YjUgMTAwNjQ0DQo+IC0tLSBhLy5naXRpZ25vcmUNCj4gKysrIGIvLmdpdGlnbm9yZQ0K PiBAQCAtMjM2LDYgKzIzNiwxMCBAQCB0b29scy90ZXN0cy9yZWdyZXNzaW9uL2J1aWxkLyoNCj4g IHRvb2xzL3Rlc3RzL3JlZ3Jlc3Npb24vZG93bmxvYWRzLyoNCj4gIHRvb2xzL3Rlc3RzL21lbS1z aGFyaW5nL21lbXNocnRvb2wNCj4gIHRvb2xzL3Rlc3RzL21jZS10ZXN0L3Rvb2xzL3hlbi1tY2Vp bmoNCj4gK3Rvb2xzL3Rlc3RzL3ZwY2kvcmJ0cmVlLltoY10NCj4gK3Rvb2xzL3Rlc3RzL3ZwY2kv dnBjaS5baGNdDQo+ICt0b29scy90ZXN0cy92cGNpL3Rlc3RfdnBjaS5vdXQNCj4gK3Rvb2xzL3Rl c3RzL3ZwY2kvdGVzdF92cGNpDQo+ICB0b29scy94Y3V0aWxzL2xzZXZ0Y2huDQo+ICB0b29scy94 Y3V0aWxzL3JlYWRub3Rlcw0KPiAgdG9vbHMveGVuYmFja2VuZGQvX3BhdGhzLmgNCj4gZGlmZiAt LWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMN Cj4gaW5kZXggNDU1ZjZmMGJlZC4uZGQ3ZmM3OGE5OSAxMDA2NDQNCj4gLS0tIGEvdG9vbHMvbGli eGwvbGlieGxfeDg2LmMNCj4gKysrIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMNCj4gQEAgLTEx LDcgKzExLDcgQEAgaW50IGxpYnhsX19hcmNoX2RvbWFpbl9wcmVwYXJlX2NvbmZpZyhsaWJ4bF9f Z2MgKmdjLA0KPiAgICAgIGlmIChkX2NvbmZpZy0+Y19pbmZvLnR5cGUgPT0gTElCWExfRE9NQUlO X1RZUEVfSFZNKSB7DQo+ICAgICAgICAgIGlmIChkX2NvbmZpZy0+Yl9pbmZvLmRldmljZV9tb2Rl bF92ZXJzaW9uICE9DQo+ICAgICAgICAgICAgICBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9O T05FKSB7DQo+IC0gICAgICAgICAgICB4Y19jb25maWctPmVtdWxhdGlvbl9mbGFncyA9IFhFTl9Y ODZfRU1VX0FMTDsNCj4gKyAgICAgICAgICAgIHhjX2NvbmZpZy0+ZW11bGF0aW9uX2ZsYWdzID0g KFhFTl9YODZfRU1VX0FMTCAmDQo+IH5YRU5fWDg2X0VNVV9WUENJKTsNCj4gICAgICAgICAgfSBl bHNlIGlmIChsaWJ4bF9kZWZib29sX3ZhbChkX2NvbmZpZy0+Yl9pbmZvLnUuaHZtLmFwaWMpKSB7 DQo+ICAgICAgICAgICAgICAvKg0KPiAgICAgICAgICAgICAgICogSFZNIGd1ZXN0cyB3aXRob3V0 IGRldmljZSBtb2RlbCBtYXkgd2FudA0KPiBkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdHMvTWFrZWZp bGUgYi90b29scy90ZXN0cy9NYWtlZmlsZQ0KPiBpbmRleCA2Mzk3NzYxMzBiLi41Y2ZlNzgxZTYy IDEwMDY0NA0KPiAtLS0gYS90b29scy90ZXN0cy9NYWtlZmlsZQ0KPiArKysgYi90b29scy90ZXN0 cy9NYWtlZmlsZQ0KPiBAQCAtMTMsNiArMTMsNyBAQCBlbmRpZg0KPiAgU1VCRElSUy0kKENPTkZJ R19YODYpICs9IHg4Nl9lbXVsYXRvcg0KPiAgU1VCRElSUy15ICs9IHhlbi1hY2Nlc3MNCj4gIFNV QkRJUlMteSArPSB4ZW5zdG9yZQ0KPiArU1VCRElSUy0kKENPTkZJR19IQVNfUENJKSArPSB2cGNp DQo+IA0KPiAgLlBIT05ZOiBhbGwgY2xlYW4gaW5zdGFsbCBkaXN0Y2xlYW4NCj4gIGFsbCBjbGVh biBkaXN0Y2xlYW46ICU6IHN1YmRpcnMtJQ0KPiBkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdHMvdnBj aS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3RzL3ZwY2kvTWFrZWZpbGUNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uNzk2OWZjYmQ4Mg0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL3Rvb2xzL3Rlc3RzL3ZwY2kvTWFrZWZpbGUNCj4gQEAgLTAsMCArMSw0NSBAQA0KPiAr DQo+ICtYRU5fUk9PVD0kKENVUkRJUikvLi4vLi4vLi4NCj4gK2luY2x1ZGUgJChYRU5fUk9PVCkv dG9vbHMvUnVsZXMubWsNCj4gKw0KPiArVEFSR0VUIDo9IHRlc3RfdnBjaQ0KPiArDQo+ICsuUEhP Tlk6IGFsbA0KPiArYWxsOiAkKFRBUkdFVCkNCj4gKw0KPiArLlBIT05ZOiBydW4NCj4gK3J1bjog JChUQVJHRVQpDQo+ICsJLi8kKFRBUkdFVCkgPiAkKFRBUkdFVCkub3V0DQo+ICsNCj4gKyQoVEFS R0VUKTogdnBjaS5jIHZwY2kuaCByYnRyZWUuYyByYnRyZWUuaA0KPiArCSQoSE9TVENDKSAtZyAt byAkQCB2cGNpLmMgbWFpbi5jIHJidHJlZS5jDQo+ICsNCj4gKy5QSE9OWTogY2xlYW4NCj4gK2Ns ZWFuOg0KPiArCXJtIC1yZiAkKFRBUkdFVCkgJChUQVJHRVQpLm91dCAqLm8gKn4gdnBjaS5oIHZw Y2kuYyByYnRyZWUuYyByYnRyZWUuaA0KPiArDQo+ICsuUEhPTlk6IGRpc3RjbGVhbg0KPiArZGlz dGNsZWFuOiBjbGVhbg0KPiArDQo+ICsuUEhPTlk6IGluc3RhbGwNCj4gK2luc3RhbGw6DQo+ICsN Cj4gK3ZwY2kuaDogJChYRU5fUk9PVCkveGVuL2luY2x1ZGUveGVuL3ZwY2kuaA0KPiArCXNlZCAt ZSAnLyNpbmNsdWRlL2QnIDwkPCA+JEANCj4gKw0KPiArdnBjaS5jOiAkKFhFTl9ST09UKS94ZW4v ZHJpdmVycy92cGNpL3ZwY2kuYw0KPiArCSMgVHJpY2sgdGhlIGNvbXBpbGVyIHNvIGl0IGRvZXNu J3QgY29tcGxhaW4gYWJvdXQgbWlzc2luZyBzeW1ib2xzDQo+ICsJc2VkIC1lICcvI2luY2x1ZGUv ZCcgXA0KPiArCSAgICAtZSAnMXM7XjsjaW5jbHVkZSAiZW11bC5oIlwNCj4gKwkgICAgICAgICAg ICAgY29uc3QgdnBjaV9yZWdpc3Rlcl9pbml0X3QgX19zdGFydF92cGNpX2FycmF5WzFdXDtcDQo+ ICsJICAgICAgICAgICAgIGNvbnN0IHZwY2lfcmVnaXN0ZXJfaW5pdF90IF9fZW5kX3ZwY2lfYXJy YXlbMV1cO1wNCj4gKwkgICAgICAgICAgICAgOycgPCQ8ID4kQA0KPiArDQo+ICtyYnRyZWUuaDog JChYRU5fUk9PVCkveGVuL2luY2x1ZGUveGVuL3JidHJlZS5oDQo+ICsJc2VkIC1lICcvI2luY2x1 ZGUvZCcgPCQ8ID4kQA0KPiArDQo+ICtyYnRyZWUuYzogJChYRU5fUk9PVCkveGVuL2NvbW1vbi9y YnRyZWUuYw0KPiArCXNlZCAtZSAiLyNpbmNsdWRlL2QiIFwNCj4gKwkgICAgLWUgJzFzO147I2lu Y2x1ZGUgImVtdWwuaCJcDQo+ICsJICAgICAgICAgICAgIDsnIDwkPCA+JEANCj4gKw0KPiBkaWZm IC0tZ2l0IGEvdG9vbHMvdGVzdHMvdnBjaS9lbXVsLmggYi90b29scy90ZXN0cy92cGNpL2VtdWwu aA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi44NTg5N2VkNDNi DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvdG9vbHMvdGVzdHMvdnBjaS9lbXVsLmgNCj4gQEAg LTAsMCArMSwxMDcgQEANCj4gKy8qDQo+ICsgKiBVbml0IHRlc3RzIGZvciB0aGUgZ2VuZXJpYyB2 UENJIGhhbmRsZXIgY29kZS4NCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2l0cml4 IFN5c3RlbXMgUiZEDQo+ICsgKg0KPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiArICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQo+ICsgKiBM aWNlbnNlLCB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLg0KPiArICoNCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCj4g R05VDQo+ICsgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ICsg Kg0KPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljDQo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3Qs IHNlZQ0KPiA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQo+ICsgKi8NCj4gKw0KPiAr I2lmbmRlZiBfVEVTVF9WUENJXw0KPiArI2RlZmluZSBfVEVTVF9WUENJXw0KPiArDQo+ICsjaW5j bHVkZSA8c3RkbGliLmg+DQo+ICsjaW5jbHVkZSA8c3RkaW8uaD4NCj4gKyNpbmNsdWRlIDxzdGRk ZWYuaD4NCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gKyNpbmNsdWRlIDxzdGRib29sLmg+DQo+ ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gKyNpbmNsdWRlIDxhc3NlcnQuaD4NCj4gKw0KPiArI2Rl ZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpICh7ICAgICAgICAgICAgICAgICAg ICAgIFwNCj4gKyAgICAgICAgdHlwZW9mKCAoKHR5cGUgKikwKS0+bWVtYmVyICkgKl9fbXB0ciA9 IChwdHIpOyAgICAgICAgICBcDQo+ICsgICAgICAgICh0eXBlICopKCAoY2hhciAqKV9fbXB0ciAt IG9mZnNldG9mKHR5cGUsbWVtYmVyKSApO30pDQo+ICsNCj4gKyNpbmNsdWRlICJyYnRyZWUuaCIN Cj4gKw0KPiArc3RydWN0IHBjaV9kZXYgew0KPiArICAgIHN0cnVjdCBkb21haW4gKmRvbWFpbjsN Cj4gKyAgICBzdHJ1Y3QgdnBjaSAqdnBjaTsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBkb21haW4g ew0KPiArICAgIHN0cnVjdCBwY2lfZGV2IHBkZXY7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgdmNw dQ0KPiArew0KPiArICAgIHN0cnVjdCBkb21haW4gKmRvbWFpbjsNCj4gK307DQo+ICsNCj4gK2V4 dGVybiBzdHJ1Y3QgdmNwdSB2Ow0KPiArDQo+ICsjZGVmaW5lIHNwaW5fbG9jayh4KQ0KPiArI2Rl ZmluZSBzcGluX3VubG9jayh4KQ0KPiArI2RlZmluZSBzcGluX2lzX2xvY2tlZCh4KSB0cnVlDQo+ ICsNCj4gKyNkZWZpbmUgY3VycmVudCAoJnYpDQo+ICsNCj4gKyNkZWZpbmUgaGFzX3ZwY2koZCkg dHJ1ZQ0KPiArDQo+ICsjaW5jbHVkZSAidnBjaS5oIg0KPiArDQo+ICsjZGVmaW5lIHh6YWxsb2Mo dHlwZSkgKHR5cGUgKiljYWxsb2MoMSwgc2l6ZW9mKHR5cGUpKQ0KPiArI2RlZmluZSB4ZnJlZShw KSBmcmVlKHApDQo+ICsNCj4gKyNkZWZpbmUgRVhQT1JUX1NZTUJPTCh4KQ0KPiArDQo+ICsjZGVm aW5lIHBjaV9nZXRfcGRldl9ieV9kb21haW4oZCwgLi4uKSAmKGQpLT5wZGV2DQo+ICsNCj4gKyNk ZWZpbmUgYXRvbWljX3JlYWQoeCkgMQ0KPiArDQo+ICsvKiBEdW1teSBuYXRpdmUgaGVscGVycy4g V3JpdGVzIGFyZSBpZ25vcmVkLCByZWFkcyByZXR1cm4gMSdzLiAqLw0KPiArI2RlZmluZSBwY2lf Y29uZl9yZWFkOCguLi4pICgweGZmKQ0KPiArI2RlZmluZSBwY2lfY29uZl9yZWFkMTYoLi4uKSAo MHhmZmZmKQ0KPiArI2RlZmluZSBwY2lfY29uZl9yZWFkMzIoLi4uKSAoMHhmZmZmZmZmZikNCj4g KyNkZWZpbmUgcGNpX2NvbmZfd3JpdGU4KC4uLikNCj4gKyNkZWZpbmUgcGNpX2NvbmZfd3JpdGUx NiguLi4pDQo+ICsjZGVmaW5lIHBjaV9jb25mX3dyaXRlMzIoLi4uKQ0KPiArDQo+ICsjZGVmaW5l IEJVRygpIGFzc2VydCgwKQ0KPiArI2RlZmluZSBBU1NFUlRfVU5SRUFDSEFCTEUoKSBhc3NlcnQo MCkNCj4gKyNkZWZpbmUgQVNTRVJUKHgpIGFzc2VydCh4KQ0KPiArDQo+ICsjaWZkZWYgX0xQNjQN Cj4gKyNkZWZpbmUgQklUU19QRVJfTE9ORyA2NA0KPiArI2Vsc2UNCj4gKyNkZWZpbmUgQklUU19Q RVJfTE9ORyAzMg0KPiArI2VuZGlmDQo+ICsjZGVmaW5lIEdFTk1BU0soaCwgbCkgXA0KPiArICAg ICgoKH4wVUwpIDw8IChsKSkgJiAofjBVTCA+PiAoQklUU19QRVJfTE9ORyAtIDEgLSAoaCkpKSkN Cj4gKw0KPiArI2RlZmluZSBtaW4oeCx5KSAoeyBcDQo+ICsgICAgICAgIGNvbnN0IHR5cGVvZih4 KSBfeCA9ICh4KTsgICAgICAgXA0KPiArICAgICAgICBjb25zdCB0eXBlb2YoeSkgX3kgPSAoeSk7 ICAgICAgIFwNCj4gKyAgICAgICAgKHZvaWQpICgmX3ggPT0gJl95KTsgICAgICAgICAgICBcDQo+ ICsgICAgICAgIF94IDwgX3kgPyBfeCA6IF95OyB9KQ0KPiArDQo+ICsjZW5kaWYNCj4gKw0KPiAr LyoNCj4gKyAqIExvY2FsIHZhcmlhYmxlczoNCj4gKyAqIG1vZGU6IEMNCj4gKyAqIGMtZmlsZS1z dHlsZTogIkJTRCINCj4gKyAqIGMtYmFzaWMtb2Zmc2V0OiA0DQo+ICsgKiBpbmRlbnQtdGFicy1t b2RlOiBuaWwNCj4gKyAqIEVuZDoNCj4gKyAqLw0KPiArDQo+IGRpZmYgLS1naXQgYS90b29scy90 ZXN0cy92cGNpL21haW4uYyBiL3Rvb2xzL3Rlc3RzL3ZwY2kvbWFpbi5jDQo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjBmYzYzZGUwMzgNCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi90b29scy90ZXN0cy92cGNpL21haW4uYw0KPiBAQCAtMCwwICsxLDIwNiBAQA0K PiArLyoNCj4gKyAqIFVuaXQgdGVzdHMgZm9yIHRoZSBnZW5lcmljIHZQQ0kgaGFuZGxlciBjb2Rl Lg0KPiArICoNCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNyBDaXRyaXggU3lzdGVtcyBSJkQNCj4g KyAqDQo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yDQo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCj4gKyAqIExpY2Vuc2UsIHZlcnNpb24g MiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+ICsgKg0K PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsDQo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KPiBHTlUNCj4gKyAqIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCj4gKyAqDQo+ICsgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCj4gKyAq IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlDQo+IDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSAiZW11bC5o Ig0KPiArDQo+ICsvKiBTaW5nbGUgdmNwdSAoY3VycmVudCksIGFuZCBzaW5nbGUgZG9tYWluIHdp dGggYSBzaW5nbGUgUENJIGRldmljZS4gKi8NCj4gK3N0YXRpYyBzdHJ1Y3QgdnBjaSB2cGNpID0g ew0KPiArICAgIC5oYW5kbGVycyA9IFJCX1JPT1QsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgc3Ry dWN0IGRvbWFpbiBkID0gew0KPiArICAgIC5wZGV2LmRvbWFpbiA9ICZkLA0KPiArICAgIC5wZGV2 LnZwY2kgPSAmdnBjaSwNCj4gK307DQo+ICsNCj4gK3N0cnVjdCB2Y3B1IHYgPSB7IC5kb21haW4g PSAmZCB9Ow0KPiArDQo+ICsvKiBEdW1teSBob29rcywgd3JpdGUgc3RvcmVzIGRhdGEsIHJlYWQg ZmV0Y2hlcyBpdC4gKi8NCj4gK3N0YXRpYyBpbnQgdnBjaV9yZWFkOChzdHJ1Y3QgcGNpX2RldiAq cGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB2 cGNpX3ZhbCAqdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAgIHVpbnQ4X3QgKnByaXYgPSBk YXRhOw0KPiArDQo+ICsgICAgdmFsLT5oYWxmX3dvcmQgPSAqcHJpdjsNCj4gKyAgICByZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCB2cGNpX3dyaXRlOChzdHJ1Y3QgcGNpX2RldiAq cGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgdW5pb24g dnBjaV92YWwgdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAgIHVpbnQ4X3QgKnByaXYgPSBk YXRhOw0KPiArDQo+ICsgICAgKnByaXYgPSB2YWwuaGFsZl93b3JkOw0KPiArICAgIHJldHVybiAw Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHZwY2lfcmVhZDE2KHN0cnVjdCBwY2lfZGV2ICpw ZGV2LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB2 cGNpX3ZhbCAqdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAgIHVpbnQxNl90ICpwcml2ID0g ZGF0YTsNCj4gKw0KPiArICAgIHZhbC0+d29yZCA9ICpwcml2Ow0KPiArICAgIHJldHVybiAwOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHZwY2lfd3JpdGUxNihzdHJ1Y3QgcGNpX2RldiAqcGRl diwgdW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHZw Y2lfdmFsIHZhbCwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKyAgICB1aW50MTZfdCAqcHJpdiA9IGRh dGE7DQo+ICsNCj4gKyAgICAqcHJpdiA9IHZhbC53b3JkOw0KPiArICAgIHJldHVybiAwOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW50IHZwY2lfcmVhZDMyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1 bnNpZ25lZCBpbnQgcmVnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB2cGNpX3Zh bCAqdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAgIHVpbnQzMl90ICpwcml2ID0gZGF0YTsN Cj4gKw0KPiArICAgIHZhbC0+ZG91YmxlX3dvcmQgPSAqcHJpdjsNCj4gKyAgICByZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCB2cGNpX3dyaXRlMzIoc3RydWN0IHBjaV9kZXYgKnBk ZXYsIHVuc2lnbmVkIGludCByZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB2 cGNpX3ZhbCB2YWwsIHZvaWQgKmRhdGEpDQo+ICt7DQo+ICsgICAgdWludDMyX3QgKnByaXYgPSBk YXRhOw0KPiArDQo+ICsgICAgKnByaXYgPSB2YWwuZG91YmxlX3dvcmQ7DQo+ICsgICAgcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gKyNkZWZpbmUgVlBDSV9SRUFEKHJlZywgc2l6ZSwgZGF0YSkgXA0K PiArICAgIGFzc2VydCgheGVuX3ZwY2lfcmVhZCgwLCAwLCAwLCByZWcsIHNpemUsIGRhdGEpKQ0K PiArDQo+ICsjZGVmaW5lIFZQQ0lfUkVBRF9DSEVDSyhyZWcsIHNpemUsIGV4cGVjdGVkKSAoeyBc DQo+ICsgICAgdWludDMyX3QgdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ ICsgICAgVlBDSV9SRUFEKHJlZywgc2l6ZSwgJnZhbCk7ICAgICAgICAgICAgICAgICBcDQo+ICsg ICAgYXNzZXJ0KHZhbCA9PSBleHBlY3RlZCk7ICAgICAgICAgICAgICAgICAgICBcDQo+ICsgICAg fSkNCj4gKw0KPiArI2RlZmluZSBWUENJX1dSSVRFKHJlZywgc2l6ZSwgZGF0YSkgXA0KPiArICAg IGFzc2VydCgheGVuX3ZwY2lfd3JpdGUoMCwgMCwgMCwgcmVnLCBzaXplLCBkYXRhKSkNCj4gKw0K PiArI2RlZmluZSBWUENJX0NIRUNLX1JFRyhyZWcsIHNpemUsIGRhdGEpICh7ICAgICAgXA0KPiAr ICAgIFZQQ0lfV1JJVEUocmVnLCBzaXplLCBkYXRhKTsgICAgICAgICAgICAgICAgXA0KPiArICAg IFZQQ0lfUkVBRF9DSEVDSyhyZWcsIHNpemUsIGRhdGEpOyAgICAgICAgICAgXA0KPiArICAgIH0p DQo+ICsNCj4gKyNkZWZpbmUgVlBDSV9BRERfUkVHKGZyZWFkLCBmd3JpdGUsIG9mZiwgc2l6ZSwg c3RvcmUpICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gKyAgICBhc3NlcnQoIXhlbl92cGNp X2FkZF9yZWdpc3RlcigmZC5wZGV2LCBmcmVhZCwgZndyaXRlLCBvZmYsIHNpemUsICZzdG9yZSkp DQo+IFwNCj4gKw0KPiArI2RlZmluZSBWUENJX0FERF9JTlZBTElEX1JFRyhmcmVhZCwgZndyaXRl LCBvZmYsIHNpemUpICAgICAgICAgICAgICAgICAgICAgIFwNCj4gKyAgICBhc3NlcnQoeGVuX3Zw Y2lfYWRkX3JlZ2lzdGVyKCZkLnBkZXYsIGZyZWFkLCBmd3JpdGUsIG9mZiwgc2l6ZSwgTlVMTCkp ICBcDQo+ICsNCj4gK2ludA0KPiArbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQo+ICt7DQo+ ICsgICAgLyogSW5kZXggc3RvcmFnZSBieSBvZmZzZXQuICovDQo+ICsgICAgdWludDMyX3QgcjAg PSAweGRlYWRiZWVmOw0KPiArICAgIHVpbnQ4X3QgcjUgPSAweGVmOw0KPiArICAgIHVpbnQ4X3Qg cjYgPSAweGJlOw0KPiArICAgIHVpbnQ4X3QgcjcgPSAweGVmOw0KPiArICAgIHVpbnQxNl90IHIx MiA9IDB4ODY5NjsNCj4gKyAgICBpbnQgcmM7DQo+ICsNCj4gKyAgICBWUENJX0FERF9SRUcodnBj aV9yZWFkMzIsIHZwY2lfd3JpdGUzMiwgMCwgNCwgcjApOw0KPiArICAgIFZQQ0lfUkVBRF9DSEVD SygwLCA0LCAweGRlYWRiZWVmKTsNCj4gKyAgICBWUENJX0NIRUNLX1JFRygwLCA0LCAweGJjYmNi Y2JjKTsNCj4gKw0KPiArICAgIFZQQ0lfQUREX1JFRyh2cGNpX3JlYWQ4LCB2cGNpX3dyaXRlOCwg NSwgMSwgcjUpOw0KPiArICAgIFZQQ0lfUkVBRF9DSEVDSyg1LCAxLCAweGVmKTsNCj4gKyAgICBW UENJX0NIRUNLX1JFRyg1LCAxLCAweGJhKTsNCj4gKw0KPiArICAgIFZQQ0lfQUREX1JFRyh2cGNp X3JlYWQ4LCB2cGNpX3dyaXRlOCwgNiwgMSwgcjYpOw0KPiArICAgIFZQQ0lfUkVBRF9DSEVDSyg2 LCAxLCAweGJlKTsNCj4gKyAgICBWUENJX0NIRUNLX1JFRyg2LCAxLCAweGJhKTsNCj4gKw0KPiAr ICAgIFZQQ0lfQUREX1JFRyh2cGNpX3JlYWQ4LCB2cGNpX3dyaXRlOCwgNywgMSwgcjcpOw0KPiAr ICAgIFZQQ0lfUkVBRF9DSEVDSyg3LCAxLCAweGVmKTsNCj4gKyAgICBWUENJX0NIRUNLX1JFRyg3 LCAxLCAweGJkKTsNCj4gKw0KPiArICAgIFZQQ0lfQUREX1JFRyh2cGNpX3JlYWQxNiwgdnBjaV93 cml0ZTE2LCAxMiwgMiwgcjEyKTsNCj4gKyAgICBWUENJX1JFQURfQ0hFQ0soMTIsIDIsIDB4ODY5 Nik7DQo+ICsgICAgVlBDSV9SRUFEX0NIRUNLKDEyLCA0LCAweGZmZmY4Njk2KTsNCj4gKw0KPiAr ICAgIC8qDQo+ICsgICAgICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgbGF5 b3V0Og0KPiArICAgICAqDQo+ICsgICAgICogMzIgICAgMjQgICAgMTYgICAgIDggICAgIDANCj4g KyAgICAgKiAgKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKw0KPiArICAgICAqICB8ICAgICAgICAg IHIwICAgICAgICAgICB8IDANCj4gKyAgICAgKiAgKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKw0K PiArICAgICAqICB8IHI3ICB8ICByNiB8ICByNSB8Ly8vLy98IDMyDQo+ICsgICAgICogICstLS0t LSstLS0tLSstLS0tLSstLS0tLXwNCj4gKyAgICAgKiAgfC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v fCA2NA0KPiArICAgICAqICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rDQo+ICsgICAgICogIHwv Ly8vLy8vLy8vL3wgICAgcjEyICAgIHwgOTYNCj4gKyAgICAgKiAgKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKw0KPiArICAgICAqICAgICAgICAgICAgIC4uLg0KPiArICAgICAqICAvID0gZW1wdHku DQo+ICsgICAgICovDQo+ICsNCj4gKyAgICAvKiBUcnkgdG8gYWRkIGFuIG92ZXJsYXBwaW5nIHJl Z2lzdGVyIGhhbmRsZXIuICovDQo+ICsgICAgVlBDSV9BRERfSU5WQUxJRF9SRUcodnBjaV9yZWFk MzIsIHZwY2lfd3JpdGUzMiwgNCwgNCk7DQo+ICsNCj4gKyAgICAvKiBUcnkgdG8gYWRkIGEgbm9u LWFsaWduZWQgcmVnaXN0ZXIuICovDQo+ICsgICAgVlBDSV9BRERfSU5WQUxJRF9SRUcodnBjaV9y ZWFkMTYsIHZwY2lfd3JpdGUxNiwgMTUsIDIpOw0KPiArDQo+ICsgICAgLyogVHJ5IHRvIGFkZCBh IHJlZ2lzdGVyIHdpdGggd3Jvbmcgc2l6ZS4gKi8NCj4gKyAgICBWUENJX0FERF9JTlZBTElEX1JF Ryh2cGNpX3JlYWQxNiwgdnBjaV93cml0ZTE2LCA4LCAzKTsNCj4gKw0KPiArICAgIC8qIFRyeSB0 byBhZGQgYSByZWdpc3RlciB3aXRoIG1pc3NpbmcgaGFuZGxlcnMuICovDQo+ICsgICAgVlBDSV9B RERfSU5WQUxJRF9SRUcodnBjaV9yZWFkMTYsIE5VTEwsIDgsIDIpOw0KPiArICAgIFZQQ0lfQURE X0lOVkFMSURfUkVHKE5VTEwsIHZwY2lfd3JpdGUxNiwgOCwgMik7DQo+ICsNCj4gKyAgICAvKiBS ZWFkL3dyaXRlIG9mIHVuc2V0IHJlZ2lzdGVyLiAqLw0KPiArICAgIFZQQ0lfUkVBRF9DSEVDSyg4 LCA0LCAweGZmZmZmZmZmKTsNCj4gKyAgICBWUENJX1JFQURfQ0hFQ0soOCwgMiwgMHhmZmZmKTsN Cj4gKyAgICBWUENJX1JFQURfQ0hFQ0soOCwgMSwgMHhmZik7DQo+ICsgICAgVlBDSV9XUklURSgx MCwgMiwgMHhiZWVmKTsNCj4gKyAgICBWUENJX1JFQURfQ0hFQ0soMTAsIDIsIDB4ZmZmZik7DQo+ ICsNCj4gKyAgICAvKiBSZWFkIG9mIG11bHRpcGxlIHJlZ2lzdGVycyAqLw0KPiArICAgIFZQQ0lf Q0hFQ0tfUkVHKDcsIDEsIDB4YmQpOw0KPiArICAgIFZQQ0lfUkVBRF9DSEVDSyg0LCA0LCAweGJk YmFiYWZmKTsNCj4gKw0KPiArICAgIC8qIFBhcnRpYWwgcmVhZCBvZiBhIHJlZ2lzdGVyLiAqLw0K PiArICAgIFZQQ0lfQ0hFQ0tfUkVHKDAsIDQsIDB4MWExYjFjMWQpOw0KPiArICAgIFZQQ0lfUkVB RF9DSEVDSygyLCAxLCAweDFiKTsNCj4gKyAgICBWUENJX1JFQURfQ0hFQ0soNiwgMiwgMHhiZGJh KTsNCj4gKw0KPiArICAgIC8qIFdyaXRlIG9mIG11bHRpcGxlIHJlZ2lzdGVycy4gKi8NCj4gKyAg ICBWUENJX0NIRUNLX1JFRyg0LCA0LCAweGFhYmJjY2ZmKTsNCj4gKw0KPiArICAgIC8qIFBhcnRp YWwgd3JpdGUgb2YgYSByZWdpc3Rlci4gKi8NCj4gKyAgICBWUENJX0NIRUNLX1JFRygyLCAxLCAw eGZlKTsNCj4gKyAgICBWUENJX0NIRUNLX1JFRyg2LCAyLCAweGZlYmMpOw0KPiArDQo+ICsgICAg cmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6DQo+ICsg KiBtb2RlOiBDDQo+ICsgKiBjLWZpbGUtc3R5bGU6ICJCU0QiDQo+ICsgKiBjLWJhc2ljLW9mZnNl dDogNA0KPiArICogaW5kZW50LXRhYnMtbW9kZTogbmlsDQo+ICsgKiBFbmQ6DQo+ICsgKi8NCj4g Kw0KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3hlbi5sZHMuUyBiL3hlbi9hcmNoL2FybS94 ZW4ubGRzLlMNCj4gaW5kZXggNDRiZDNiZjBjZS4uNDFiZjlkZmFmMyAxMDA2NDQNCj4gLS0tIGEv eGVuL2FyY2gvYXJtL3hlbi5sZHMuUw0KPiArKysgYi94ZW4vYXJjaC9hcm0veGVuLmxkcy5TDQo+ IEBAIC03OSw2ICs3OSw5IEBAIFNFQ1RJT05TDQo+ICAgICAgICAgX19zdGFydF9zY2hlZHVsZXJz X2FycmF5ID0gLjsNCj4gICAgICAgICAqKC5kYXRhLnNjaGVkdWxlcnMpDQo+ICAgICAgICAgX19l bmRfc2NoZWR1bGVyc19hcnJheSA9IC47DQo+ICsgICAgICAgX19zdGFydF92cGNpX2FycmF5ID0g LjsNCj4gKyAgICAgICAqKC5kYXRhLnZwY2kpDQo+ICsgICAgICAgX19lbmRfdnBjaV9hcnJheSA9 IC47DQo+ICAgICAgICAgKiguZGF0YS5yZWwpDQo+ICAgICAgICAgKiguZGF0YS5yZWwuKikNCj4g ICAgICAgICBDT05TVFJVQ1RPUlMNCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9kb21haW4u YyBiL3hlbi9hcmNoL3g4Ni9kb21haW4uYw0KPiBpbmRleCA5MGUyYjFmODJhLi5mNzQwMjBmYWNj IDEwMDY0NA0KPiAtLS0gYS94ZW4vYXJjaC94ODYvZG9tYWluLmMNCj4gKysrIGIveGVuL2FyY2gv eDg2L2RvbWFpbi5jDQo+IEBAIC01MDAsMTEgKzUwMCwyMSBAQCBzdGF0aWMgYm9vbCBlbXVsYXRp b25fZmxhZ3Nfb2soY29uc3Qgc3RydWN0IGRvbWFpbg0KPiAqZCwgdWludDMyX3QgZW1mbGFncykN Cj4gICAgICBpZiAoIGlzX2h2bV9kb21haW4oZCkgKQ0KPiAgICAgIHsNCj4gICAgICAgICAgaWYg KCBpc19oYXJkd2FyZV9kb21haW4oZCkgJiYNCj4gLSAgICAgICAgICAgICBlbWZsYWdzICE9IChY RU5fWDg2X0VNVV9MQVBJQ3xYRU5fWDg2X0VNVV9JT0FQSUMpICkNCj4gLSAgICAgICAgICAgIHJl dHVybiBmYWxzZTsNCj4gLSAgICAgICAgaWYgKCAhaXNfaGFyZHdhcmVfZG9tYWluKGQpICYmIGVt ZmxhZ3MgJiYNCj4gLSAgICAgICAgICAgICBlbWZsYWdzICE9IFhFTl9YODZfRU1VX0FMTCAmJiBl bWZsYWdzICE9IFhFTl9YODZfRU1VX0xBUElDICkNCj4gKyAgICAgICAgICAgICBlbWZsYWdzICE9 IChYRU5fWDg2X0VNVV9MQVBJQ3xYRU5fWDg2X0VNVV9JT0FQSUN8DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgWEVOX1g4Nl9FTVVfVlBDSSkgKQ0KPiAgICAgICAgICAgICAgcmV0dXJuIGZh bHNlOw0KPiArICAgICAgICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4oZCkgKQ0KPiArICAgICAg ICB7DQo+ICsgICAgICAgICAgICBzd2l0Y2ggKCBlbWZsYWdzICkNCj4gKyAgICAgICAgICAgIHsN Cj4gKyAgICAgICAgICAgIGNhc2UgWEVOX1g4Nl9FTVVfQUxMICYgflhFTl9YODZfRU1VX1ZQQ0k6 DQo+ICsgICAgICAgICAgICBjYXNlIFhFTl9YODZfRU1VX0xBUElDOg0KPiArICAgICAgICAgICAg Y2FzZSAwOg0KPiArICAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICAgICAgZGVmYXVs dDoNCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+ICsgICAgICAgICAgICB9DQo+ ICsgICAgICAgIH0NCj4gICAgICB9DQo+ICAgICAgZWxzZSBpZiAoIGVtZmxhZ3MgIT0gMCAmJiBl bWZsYWdzICE9IFhFTl9YODZfRU1VX1BJVCApDQo+ICAgICAgew0KPiBkaWZmIC0tZ2l0IGEveGVu L2FyY2gveDg2L2h2bS9odm0uYyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMNCj4gaW5kZXggYTQ0 MTk1NTMyMi4uN2YzMzIyZWRlNiAxMDA2NDQNCj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9odm0u Yw0KPiArKysgYi94ZW4vYXJjaC94ODYvaHZtL2h2bS5jDQo+IEBAIC0zNyw2ICszNyw3IEBADQo+ ICAjaW5jbHVkZSA8eGVuL3ZtX2V2ZW50Lmg+DQo+ICAjaW5jbHVkZSA8eGVuL21vbml0b3IuaD4N Cj4gICNpbmNsdWRlIDx4ZW4vd2FybmluZy5oPg0KPiArI2luY2x1ZGUgPHhlbi92cGNpLmg+DQo+ ICAjaW5jbHVkZSA8YXNtL3NoYWRvdy5oPg0KPiAgI2luY2x1ZGUgPGFzbS9oYXAuaD4NCj4gICNp bmNsdWRlIDxhc20vY3VycmVudC5oPg0KPiBAQCAtNjU1LDYgKzY1Niw3IEBAIGludCBodm1fZG9t YWluX2luaXRpYWxpc2Uoc3RydWN0IGRvbWFpbiAqZCkNCj4gICAgICAgICAgZC0+YXJjaC5odm1f ZG9tYWluLmlvX2JpdG1hcCA9IGh2bV9pb19iaXRtYXA7DQo+IA0KPiAgICAgIHJlZ2lzdGVyX2cy bV9wb3J0aW9faGFuZGxlcihkKTsNCj4gKyAgICByZWdpc3Rlcl92cGNpX3BvcnRpb19oYW5kbGVy KGQpOw0KPiANCj4gICAgICBodm1faW9yZXFfaW5pdChkKTsNCj4gDQo+IGRpZmYgLS1naXQgYS94 ZW4vYXJjaC94ODYvaHZtL2lvLmMgYi94ZW4vYXJjaC94ODYvaHZtL2lvLmMNCj4gaW5kZXggMjE0 YWIzMDdjNC4uMTUwNDhkYTU1NiAxMDA2NDQNCj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9pby5j DQo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0vaW8uYw0KPiBAQCAtMjUsNiArMjUsNyBAQA0KPiAg I2luY2x1ZGUgPHhlbi90cmFjZS5oPg0KPiAgI2luY2x1ZGUgPHhlbi9ldmVudC5oPg0KPiAgI2lu Y2x1ZGUgPHhlbi9oeXBlcmNhbGwuaD4NCj4gKyNpbmNsdWRlIDx4ZW4vdnBjaS5oPg0KPiAgI2lu Y2x1ZGUgPGFzbS9jdXJyZW50Lmg+DQo+ICAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4NCj4g ICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+DQo+IEBAIC0yNTYsNiArMjU3LDE0MCBAQCB2b2lk IHJlZ2lzdGVyX2cybV9wb3J0aW9faGFuZGxlcihzdHJ1Y3QgZG9tYWluDQo+ICpkKQ0KPiAgICAg IGhhbmRsZXItPm9wcyA9ICZnMm1fcG9ydGlvX29wczsNCj4gIH0NCj4gDQo+ICsvKiBEbyBzb21l IHNhbml0eSBjaGVja3MuICovDQo+ICtzdGF0aWMgaW50IHZwY2lfYWNjZXNzX2NoZWNrKHVuc2ln bmVkIGludCByZWcsIHVuc2lnbmVkIGludCBsZW4pDQo+ICt7DQo+ICsgICAgLyogQ2hlY2sgYWNj ZXNzIHNpemUuICovDQo+ICsgICAgaWYgKCBsZW4gIT0gMSAmJiBsZW4gIT0gMiAmJiBsZW4gIT0g NCApDQo+ICsgICAgew0KPiArICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgImludmFs aWQgbGVuZ3RoIChyZWc6ICUjeCwgbGVuOiAldSlcbiIsDQo+ICsgICAgICAgICAgICAgICAgIHJl ZywgbGVuKTsNCj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgLyogQ2hlY2sgaWYgYWNjZXNzIGNyb3NzZXMgYSBkb3VibGUtd29yZCBib3VuZGFyeS4gKi8N Cj4gKyAgICBpZiAoIChyZWcgJiAzKSArIGxlbiA+IDQgKQ0KPiArICAgIHsNCj4gKyAgICAgICAg Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsDQo+ICsgICAgICAgICAgICAgICAgICJpbnZhbGlkIGFj Y2VzcyBhY3Jvc3MgZG91YmxlLXdvcmQgYm91bmRhcnkgKHJlZzogJSN4LCBsZW46DQo+ICV1KVxu IiwNCj4gKyAgICAgICAgICAgICAgICAgcmVnLCBsZW4pOw0KPiArICAgICAgICByZXR1cm4gLUVJ TlZBTDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyog SGVscGVyIHRvIGRlY29kZSBhIFBDSSBhZGRyZXNzLiAqLw0KPiArc3RhdGljIHZvaWQgdnBjaV9k ZWNvZGVfYWRkcih1bnNpZ25lZCBpbnQgY2Y4LCB1bnNpZ25lZCBpbnQgYWRkciwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpidXMsIHVuc2lnbmVkIGludCAq ZGV2Zm4sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcmVn KQ0KPiArew0KPiArICAgIHVuc2lnbmVkIGxvbmcgYmRmOw0KPiArDQo+ICsgICAgYmRmID0gQ0Y4 X0JERihjZjgpOw0KPiArICAgICpidXMgPSBQQ0lfQlVTKGJkZik7DQo+ICsgICAgKmRldmZuID0g UENJX0RFVkZOKFBDSV9TTE9UKGJkZiksIFBDSV9GVU5DKGJkZikpOw0KPiArICAgIC8qDQo+ICsg ICAgICogTkI6IHRoZSBsb3dlciAyIGJpdHMgb2YgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgYXJlIGZl dGNoZWQgZnJvbSB0aGUNCj4gKyAgICAgKiBvZmZzZXQgaW50byB0aGUgMHhjZmMgcmVnaXN0ZXIg d2hlbiByZWFkaW5nL3dyaXRpbmcgdG8gaXQuDQo+ICsgICAgICovDQo+ICsgICAgKnJlZyA9IChj ZjggJiAweGZjKSB8IChhZGRyICYgMyk7DQo+ICt9DQo+ICsNCj4gKy8qIHZQQ0kgY29uZmlnIHNw YWNlIElPIHBvcnRzIGhhbmRsZXJzICgweGNmOC8weGNmYykuICovDQo+ICtzdGF0aWMgYm9vbF90 IHZwY2lfcG9ydGlvX2FjY2VwdChjb25zdCBzdHJ1Y3QgaHZtX2lvX2hhbmRsZXIgKmhhbmRsZXIs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpb3JlcV90ICpwKQ0K PiArew0KPiArICAgIHJldHVybiAocC0+YWRkciA9PSAweGNmOCAmJiBwLT5zaXplID09IDQpIHx8 IChwLT5hZGRyICYgMHhmZmZjKSA9PSAweGNmYzsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCB2 cGNpX3BvcnRpb19yZWFkKGNvbnN0IHN0cnVjdCBodm1faW9faGFuZGxlciAqaGFuZGxlciwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBzaXpl LCB1aW50NjRfdCAqZGF0YSkNCj4gK3sNCj4gKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gY3VycmVu dC0+ZG9tYWluOw0KPiArICAgIHVuc2lnbmVkIGludCBidXMsIGRldmZuLCByZWc7DQo+ICsgICAg dWludDMyX3QgZGF0YTMyOw0KPiArICAgIGludCByYzsNCj4gKw0KPiArICAgIHZwY2lfbG9jayhk KTsNCj4gKyAgICBpZiAoIGFkZHIgPT0gMHhjZjggKQ0KPiArICAgIHsNCj4gKyAgICAgICAgQVNT RVJUKHNpemUgPT0gNCk7DQo+ICsgICAgICAgICpkYXRhID0gZC0+YXJjaC5odm1fZG9tYWluLnBj aV9jZjg7DQo+ICsgICAgICAgIHZwY2lfdW5sb2NrKGQpOw0KPiArICAgICAgICByZXR1cm4gWDg2 RU1VTF9PS0FZOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8qIERlY29kZSB0aGUgUENJIGFkZHJl c3MuICovDQo+ICsgICAgdnBjaV9kZWNvZGVfYWRkcihkLT5hcmNoLmh2bV9kb21haW4ucGNpX2Nm OCwgYWRkciwgJmJ1cywgJmRldmZuLA0KPiAmcmVnKTsNCj4gKw0KPiArICAgIGlmICggdnBjaV9h Y2Nlc3NfY2hlY2socmVnLCBzaXplKSB8fCByZWcgPj0gMHhmZiApDQo+ICsgICAgew0KPiArICAg ICAgICB2cGNpX3VubG9jayhkKTsNCj4gKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVB QkxFOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJjID0geGVuX3ZwY2lfcmVhZCgwLCBidXMsIGRl dmZuLCByZWcsIHNpemUsICZkYXRhMzIpOw0KPiArICAgIGlmICggIXJjICkNCj4gKyAgICAgICAg KmRhdGEgPSBkYXRhMzI7DQo+ICsgICAgdnBjaV91bmxvY2soZCk7DQo+ICsNCj4gKyAgICAgcmV0 dXJuIHJjID8gWDg2RU1VTF9VTkhBTkRMRUFCTEUgOiBYODZFTVVMX09LQVk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgdnBjaV9wb3J0aW9fd3JpdGUoY29uc3Qgc3RydWN0IGh2bV9pb19oYW5k bGVyICpoYW5kbGVyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBh ZGRyLCB1aW50MzJfdCBzaXplLCB1aW50NjRfdCBkYXRhKQ0KPiArew0KPiArICAgIHN0cnVjdCBk b21haW4gKmQgPSBjdXJyZW50LT5kb21haW47DQo+ICsgICAgdW5zaWduZWQgaW50IGJ1cywgZGV2 Zm4sIHJlZzsNCj4gKyAgICBpbnQgcmM7DQo+ICsNCj4gKyAgICB2cGNpX2xvY2soZCk7DQo+ICsg ICAgaWYgKCBhZGRyID09IDB4Y2Y4ICkNCj4gKyAgICB7DQo+ICsgICAgICAgIEFTU0VSVChzaXpl ID09IDQpOw0KPiArICAgICAgICBkLT5hcmNoLmh2bV9kb21haW4ucGNpX2NmOCA9IGRhdGE7DQo+ ICsgICAgICAgIHZwY2lfdW5sb2NrKGQpOw0KPiArICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZ Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIC8qIERlY29kZSB0aGUgUENJIGFkZHJlc3MuICovDQo+ ICsgICAgdnBjaV9kZWNvZGVfYWRkcihkLT5hcmNoLmh2bV9kb21haW4ucGNpX2NmOCwgYWRkciwg JmJ1cywgJmRldmZuLA0KPiAmcmVnKTsNCj4gKw0KPiArICAgIGlmICggdnBjaV9hY2Nlc3NfY2hl Y2socmVnLCBzaXplKSB8fCByZWcgPj0gMHhmZiApDQo+ICsgICAgew0KPiArICAgICAgICB2cGNp X3VubG9jayhkKTsNCj4gKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIHJjID0geGVuX3ZwY2lfd3JpdGUoMCwgYnVzLCBkZXZmbiwgcmVn LCBzaXplLCBkYXRhKTsNCj4gKyAgICB2cGNpX3VubG9jayhkKTsNCj4gKw0KPiArICAgIHJldHVy biByYyA/IFg4NkVNVUxfVU5IQU5ETEVBQkxFIDogWDg2RU1VTF9PS0FZOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGh2bV9pb19vcHMgdnBjaV9wb3J0aW9fb3BzID0gew0KPiAr ICAgIC5hY2NlcHQgPSB2cGNpX3BvcnRpb19hY2NlcHQsDQo+ICsgICAgLnJlYWQgPSB2cGNpX3Bv cnRpb19yZWFkLA0KPiArICAgIC53cml0ZSA9IHZwY2lfcG9ydGlvX3dyaXRlLA0KPiArfTsNCj4g Kw0KPiArdm9pZCByZWdpc3Rlcl92cGNpX3BvcnRpb19oYW5kbGVyKHN0cnVjdCBkb21haW4gKmQp DQo+ICt7DQo+ICsgICAgc3RydWN0IGh2bV9pb19oYW5kbGVyICpoYW5kbGVyOw0KPiArDQo+ICsg ICAgaWYgKCAhaGFzX3ZwY2koZCkgKQ0KPiArICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICBo YW5kbGVyID0gaHZtX25leHRfaW9faGFuZGxlcihkKTsNCj4gKyAgICBpZiAoICFoYW5kbGVyICkN Cj4gKyAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAgc3Bpbl9sb2NrX2luaXQoJmQtPmFyY2gu aHZtX2RvbWFpbi52cGNpX2xvY2spOw0KPiArICAgIGhhbmRsZXItPnR5cGUgPSBJT1JFUV9UWVBF X1BJTzsNCj4gKyAgICBoYW5kbGVyLT5vcHMgPSAmdnBjaV9wb3J0aW9fb3BzOw0KPiArfQ0KPiAr DQo+ICAvKg0KPiAgICogTG9jYWwgdmFyaWFibGVzOg0KPiAgICogbW9kZTogQw0KPiBkaWZmIC0t Z2l0IGEveGVuL2FyY2gveDg2L3NldHVwLmMgYi94ZW4vYXJjaC94ODYvc2V0dXAuYw0KPiBpbmRl eCBmN2I5Mjc4NThjLi40Y2Y5MTlmMjA2IDEwMDY0NA0KPiAtLS0gYS94ZW4vYXJjaC94ODYvc2V0 dXAuYw0KPiArKysgYi94ZW4vYXJjaC94ODYvc2V0dXAuYw0KPiBAQCAtMTU2Niw3ICsxNTY2LDgg QEAgdm9pZCBfX2luaXQgbm9yZXR1cm4gX19zdGFydF94ZW4odW5zaWduZWQgbG9uZw0KPiBtYmlf cCkNCj4gICAgICAgICAgZG9tY3JfZmxhZ3MgfD0gRE9NQ1JGX2h2bSB8DQo+ICAgICAgICAgICAg ICAgICAgICAgICAgICgoaHZtX2Z1bmNzLmhhcF9zdXBwb3J0ZWQgJiYgIW9wdF9kb20wX3NoYWRv dykgPw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgIERPTUNSRl9oYXAgOiAwKTsNCj4gLSAg ICAgICAgY29uZmlnLmVtdWxhdGlvbl9mbGFncyA9DQo+IFhFTl9YODZfRU1VX0xBUElDfFhFTl9Y ODZfRU1VX0lPQVBJQzsNCj4gKyAgICAgICAgY29uZmlnLmVtdWxhdGlvbl9mbGFncyA9DQo+IFhF Tl9YODZfRU1VX0xBUElDfFhFTl9YODZfRU1VX0lPQVBJQ3wNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFhFTl9YODZfRU1VX1ZQQ0k7DQo+ICAgICAgfQ0KPiANCj4gICAgICAv KiBDcmVhdGUgaW5pdGlhbCBkb21haW4gMC4gKi8NCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4 Ni94ZW4ubGRzLlMgYi94ZW4vYXJjaC94ODYveGVuLmxkcy5TDQo+IGluZGV4IDgyODlhMWJmMDku LmY1Y2M4ZTJiOGQgMTAwNjQ0DQo+IC0tLSBhL3hlbi9hcmNoL3g4Ni94ZW4ubGRzLlMNCj4gKysr IGIveGVuL2FyY2gveDg2L3hlbi5sZHMuUw0KPiBAQCAtMjI0LDYgKzIyNCw5IEBAIFNFQ1RJT05T DQo+ICAgICAgICAgX19zdGFydF9zY2hlZHVsZXJzX2FycmF5ID0gLjsNCj4gICAgICAgICAqKC5k YXRhLnNjaGVkdWxlcnMpDQo+ICAgICAgICAgX19lbmRfc2NoZWR1bGVyc19hcnJheSA9IC47DQo+ ICsgICAgICAgX19zdGFydF92cGNpX2FycmF5ID0gLjsNCj4gKyAgICAgICAqKC5kYXRhLnZwY2kp DQo+ICsgICAgICAgX19lbmRfdnBjaV9hcnJheSA9IC47DQo+ICAgICAgICAgKiguZGF0YS5yZWwu cm8pDQo+ICAgICAgICAgKiguZGF0YS5yZWwucm8uKikNCj4gICAgfSA6dGV4dA0KPiBkaWZmIC0t Z2l0IGEveGVuL2RyaXZlcnMvTWFrZWZpbGUgYi94ZW4vZHJpdmVycy9NYWtlZmlsZQ0KPiBpbmRl eCAxOTM5MTgwMmE4Li5kNTFjNzY2NDUzIDEwMDY0NA0KPiAtLS0gYS94ZW4vZHJpdmVycy9NYWtl ZmlsZQ0KPiArKysgYi94ZW4vZHJpdmVycy9NYWtlZmlsZQ0KPiBAQCAtMSw2ICsxLDYgQEANCj4g IHN1YmRpci15ICs9IGNoYXINCj4gIHN1YmRpci0kKENPTkZJR19IQVNfQ1BVRlJFUSkgKz0gY3B1 ZnJlcQ0KPiAtc3ViZGlyLSQoQ09ORklHX0hBU19QQ0kpICs9IHBjaQ0KPiArc3ViZGlyLSQoQ09O RklHX0hBU19QQ0kpICs9IHBjaSB2cGNpDQo+ICBzdWJkaXItJChDT05GSUdfSEFTX1BBU1NUSFJP VUdIKSArPSBwYXNzdGhyb3VnaA0KPiAgc3ViZGlyLSQoQ09ORklHX0FDUEkpICs9IGFjcGkNCj4g IHN1YmRpci0kKENPTkZJR19WSURFTykgKz0gdmlkZW8NCj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2 ZXJzL3Bhc3N0aHJvdWdoL3BjaS5jIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvcGNpLmMNCj4g aW5kZXggYzhlMmQyZDlhOS4uMjI4OGNmODgxNCAxMDA2NDQNCj4gLS0tIGEveGVuL2RyaXZlcnMv cGFzc3Rocm91Z2gvcGNpLmMNCj4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvcGNpLmMN Cj4gQEAgLTMwLDYgKzMwLDcgQEANCj4gICNpbmNsdWRlIDx4ZW4vcmFkaXgtdHJlZS5oPg0KPiAg I2luY2x1ZGUgPHhlbi9zb2Z0aXJxLmg+DQo+ICAjaW5jbHVkZSA8eGVuL3Rhc2tsZXQuaD4NCj4g KyNpbmNsdWRlIDx4ZW4vdnBjaS5oPg0KPiAgI2luY2x1ZGUgPHhzbS94c20uaD4NCj4gICNpbmNs dWRlIDxhc20vbXNpLmg+DQo+ICAjaW5jbHVkZSAiYXRzLmgiDQo+IEBAIC0xMDQxLDYgKzEwNDIs OCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9vbmVfaHdkb21fZGV2aWNlKGNvbnN0IHN0cnVjdA0KPiBz ZXR1cF9od2RvbSAqY3R4dCwNCj4gICAgICAgICAgZGV2Zm4gKz0gcGRldi0+cGhhbnRvbV9zdHJp ZGU7DQo+ICAgICAgfSB3aGlsZSAoIGRldmZuICE9IHBkZXYtPmRldmZuICYmDQo+ICAgICAgICAg ICAgICAgIFBDSV9TTE9UKGRldmZuKSA9PSBQQ0lfU0xPVChwZGV2LT5kZXZmbikgKTsNCj4gKw0K PiArICAgIHhlbl92cGNpX2FkZF9oYW5kbGVycyhwZGV2KTsNCj4gIH0NCj4gDQo+ICBzdGF0aWMg aW50IF9faHdkb21faW5pdCBfc2V0dXBfaHdkb21fcGNpX2RldmljZXMoc3RydWN0IHBjaV9zZWcg KnBzZWcsDQo+IHZvaWQgKmFyZykNCj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3ZwY2kvTWFr ZWZpbGUgYi94ZW4vZHJpdmVycy92cGNpL01ha2VmaWxlDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAwMDAuLjg0MGE5MDY0NzANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi94ZW4vZHJpdmVycy92cGNpL01ha2VmaWxlDQo+IEBAIC0wLDAgKzEgQEANCj4gK29iai15ICs9 IHZwY2kubw0KPiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvdnBjaS92cGNpLmMgYi94ZW4vZHJp dmVycy92cGNpL3ZwY2kuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw MDAwLi5mNGNkMDRmMTFkDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIveGVuL2RyaXZlcnMvdnBj aS92cGNpLmMNCj4gQEAgLTAsMCArMSw0NzQgQEANCj4gKy8qDQo+ICsgKiBHZW5lcmljIGZ1bmN0 aW9uYWxpdHkgZm9yIGhhbmRsaW5nIGFjY2Vzc2VzIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBz cGFjZQ0KPiArICogZnJvbSBndWVzdHMuDQo+ICsgKg0KPiArICogQ29weXJpZ2h0IChDKSAyMDE3 IENpdHJpeCBTeXN0ZW1zIFImRA0KPiArICoNCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCj4gKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0K PiArICogTGljZW5zZSwgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4NCj4gKyAqDQo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ICsgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlDQo+IEdOVQ0KPiArICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lg0KPiArICoNCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYw0KPiArICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg SWYgbm90LCBzZWUNCj4gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lg0KPiArICovDQo+ ICsNCj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4NCj4gKyNpbmNsdWRlIDx4ZW4vdnBjaS5oPg0K PiArDQo+ICtleHRlcm4gY29uc3QgdnBjaV9yZWdpc3Rlcl9pbml0X3QgX19zdGFydF92cGNpX2Fy cmF5W10sIF9fZW5kX3ZwY2lfYXJyYXlbXTsNCj4gKyNkZWZpbmUgTlVNX1ZQQ0lfSU5JVCAoX19l bmRfdnBjaV9hcnJheSAtIF9fc3RhcnRfdnBjaV9hcnJheSkNCj4gKyNkZWZpbmUgdnBjaV9pbml0 IF9fc3RhcnRfdnBjaV9hcnJheQ0KPiArDQo+ICsvKiBIZWxwZXJzIGZvciBsb2NraW5nL3VubG9j a2luZy4gKi8NCj4gKyNkZWZpbmUgdnBjaV9sb2NrKGQpIHNwaW5fbG9jaygmKGQpLT5hcmNoLmh2 bV9kb21haW4udnBjaV9sb2NrKQ0KPiArI2RlZmluZSB2cGNpX3VubG9jayhkKSBzcGluX3VubG9j aygmKGQpLT5hcmNoLmh2bV9kb21haW4udnBjaV9sb2NrKQ0KPiArI2RlZmluZSB2cGNpX2xvY2tl ZChkKSBzcGluX2lzX2xvY2tlZCgmKGQpLT5hcmNoLmh2bV9kb21haW4udnBjaV9sb2NrKQ0KPiAr DQo+ICsvKiBJbnRlcm5hbCBzdHJ1Y3QgdG8gc3RvcmUgdGhlIGVtdWxhdGVkIFBDSSByZWdpc3Rl cnMuICovDQo+ICtzdHJ1Y3QgdnBjaV9yZWdpc3RlciB7DQo+ICsgICAgdnBjaV9yZWFkX3QgcmVh ZDsNCj4gKyAgICB2cGNpX3dyaXRlX3Qgd3JpdGU7DQo+ICsgICAgdW5zaWduZWQgaW50IHNpemU7 DQo+ICsgICAgdW5zaWduZWQgaW50IG9mZnNldDsNCj4gKyAgICB2b2lkICpwcml2X2RhdGE7DQo+ ICsgICAgc3RydWN0IHJiX25vZGUgbm9kZTsNCj4gK307DQo+ICsNCj4gK2ludCB4ZW5fdnBjaV9h ZGRfaGFuZGxlcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQo+ICt7DQo+ICsgICAgaW50IGksIHJj ID0gMDsNCj4gKw0KPiArICAgIGlmICggIWhhc192cGNpKHBkZXYtPmRvbWFpbikgKQ0KPiArICAg ICAgICByZXR1cm4gMDsNCj4gKw0KPiArICAgIHBkZXYtPnZwY2kgPSB4emFsbG9jKHN0cnVjdCB2 cGNpKTsNCj4gKyAgICBpZiAoICFwZGV2LT52cGNpICkNCj4gKyAgICAgICAgcmV0dXJuIC1FTk9N RU07DQo+ICsNCj4gKyAgICBwZGV2LT52cGNpLT5oYW5kbGVycyA9IFJCX1JPT1Q7DQo+ICsNCj4g KyAgICBmb3IgKCBpID0gMDsgaSA8IE5VTV9WUENJX0lOSVQ7IGkrKyApDQo+ICsgICAgew0KPiAr ICAgICAgICByYyA9IHZwY2lfaW5pdFtpXShwZGV2KTsNCj4gKyAgICAgICAgaWYgKCByYyApDQo+ ICsgICAgICAgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoIHJjICkNCj4g KyAgICB7DQo+ICsgICAgICAgIHN0cnVjdCByYl9ub2RlICpub2RlID0gcmJfZmlyc3QoJnBkZXYt PnZwY2ktPmhhbmRsZXJzKTsNCj4gKyAgICAgICAgc3RydWN0IHZwY2lfcmVnaXN0ZXIgKnI7DQo+ ICsNCj4gKyAgICAgICAgLyogSXRlcmF0ZSBvdmVyIHRoZSB0cmVlIGFuZCBjbGVhbnVwLiAqLw0K PiArICAgICAgICB3aGlsZSAoIG5vZGUgIT0gTlVMTCApDQo+ICsgICAgICAgIHsNCj4gKyAgICAg ICAgICAgIHIgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IHZwY2lfcmVnaXN0ZXIsIG5vZGUp Ow0KPiArICAgICAgICAgICAgbm9kZSA9IHJiX25leHQobm9kZSk7DQo+ICsgICAgICAgICAgICBy Yl9lcmFzZSgmci0+bm9kZSwgJnBkZXYtPnZwY2ktPmhhbmRsZXJzKTsNCj4gKyAgICAgICAgICAg IHhmcmVlKHIpOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIHhmcmVlKHBkZXYtPnZwY2kpOw0K PiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiByYzsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJv b2wgdnBjaV9yZWdpc3Rlcl9vdmVybGFwKGNvbnN0IHN0cnVjdCB2cGNpX3JlZ2lzdGVyICpyLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQp DQo+ICt7DQo+ICsgICAgaWYgKCBvZmZzZXQgPj0gci0+b2Zmc2V0ICYmIG9mZnNldCA8IHItPm9m ZnNldCArIHItPnNpemUgKQ0KPiArICAgICAgICByZXR1cm4gdHJ1ZTsNCj4gKw0KPiArICAgIHJl dHVybiBmYWxzZTsNCj4gK30NCj4gKw0KPiArDQo+ICtzdGF0aWMgaW50IHZwY2lfcmVnaXN0ZXJf Y21wKGNvbnN0IHN0cnVjdCB2cGNpX3JlZ2lzdGVyICpyMSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZwY2lfcmVnaXN0ZXIgKnIyKQ0KPiArew0KPiArICAg IC8qIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIG92ZXJsYXAgYmV0d2VlbiByZWdpc3RlcnMuICovDQo+ ICsgICAgaWYgKCB2cGNpX3JlZ2lzdGVyX292ZXJsYXAocjEsIHIyLT5vZmZzZXQpIHx8DQo+ICsg ICAgICAgICB2cGNpX3JlZ2lzdGVyX292ZXJsYXAocjEsIHIyLT5vZmZzZXQgKyByMi0+c2l6ZSAt IDEpIHx8DQo+ICsgICAgICAgICB2cGNpX3JlZ2lzdGVyX292ZXJsYXAocjIsIHIxLT5vZmZzZXQp IHx8DQo+ICsgICAgICAgICB2cGNpX3JlZ2lzdGVyX292ZXJsYXAocjIsIHIxLT5vZmZzZXQgKyBy MS0+c2l6ZSAtIDEpICkNCj4gKyAgICAgICAgcmV0dXJuIDA7DQo+ICsNCj4gKyAgICBpZiAocjEt Pm9mZnNldCA8IHIyLT5vZmZzZXQpDQo+ICsgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICBlbHNl IGlmIChyMS0+b2Zmc2V0ID4gcjItPm9mZnNldCkNCj4gKyAgICAgICAgcmV0dXJuIDE7DQo+ICsN Cj4gKyAgICBBU1NFUlRfVU5SRUFDSEFCTEUoKTsNCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHN0cnVjdCB2cGNpX3JlZ2lzdGVyICp2cGNpX2ZpbmRfcmVnaXN0ZXIoY29u c3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVnLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50 IHNpemUpDQo+ICt7DQo+ICsgICAgc3RydWN0IHJiX25vZGUgKm5vZGU7DQo+ICsgICAgc3RydWN0 IHZwY2lfcmVnaXN0ZXIgciA9IHsNCj4gKyAgICAgICAgLm9mZnNldCA9IHJlZywNCj4gKyAgICAg ICAgLnNpemUgPSBzaXplLA0KPiArICAgIH07DQo+ICsNCj4gKyAgICBBU1NFUlQodnBjaV9sb2Nr ZWQocGRldi0+ZG9tYWluKSk7DQo+ICsNCj4gKyAgICBub2RlID0gcGRldi0+dnBjaS0+aGFuZGxl cnMucmJfbm9kZTsNCj4gKyAgICB3aGlsZSAoIG5vZGUgKQ0KPiArICAgIHsNCj4gKyAgICAgICAg c3RydWN0IHZwY2lfcmVnaXN0ZXIgKnQgPQ0KPiArICAgICAgICAgICAgY29udGFpbmVyX29mKG5v ZGUsIHN0cnVjdCB2cGNpX3JlZ2lzdGVyLCBub2RlKTsNCj4gKw0KPiArICAgICAgICBzd2l0Y2gg KCB2cGNpX3JlZ2lzdGVyX2NtcCgmciwgdCkgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgIGNh c2UgLTE6DQo+ICsgICAgICAgICAgICBub2RlID0gbm9kZS0+cmJfbGVmdDsNCj4gKyAgICAgICAg ICAgIGJyZWFrOw0KPiArICAgICAgICBjYXNlIDE6DQo+ICsgICAgICAgICAgICBub2RlID0gbm9k ZS0+cmJfcmlnaHQ7DQo+ICsgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgZGVmYXVsdDoN Cj4gKyAgICAgICAgICAgIHJldHVybiB0Ow0KPiArICAgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gK2ludCB4ZW5fdnBjaV9hZGRfcmVnaXN0 ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZwY2lfcmVhZF90DQo+IHJlYWRfaGFuZGxlciwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgdnBjaV93cml0ZV90IHdyaXRlX2hhbmRsZXIsIHVu c2lnbmVkIGludCBvZmZzZXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBzaXplLCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAgIHN0cnVjdCByYl9ub2RlICoqbmV3 LCAqcGFyZW50Ow0KPiArICAgIHN0cnVjdCB2cGNpX3JlZ2lzdGVyICpyOw0KPiArDQo+ICsgICAg LyogU29tZSBzYW5pdHkgY2hlY2tzLiAqLw0KPiArICAgIGlmICggKHNpemUgIT0gMSAmJiBzaXpl ICE9IDIgJiYgc2l6ZSAhPSA0KSB8fCBvZmZzZXQgPj0gMHhGRkYgfHwNCj4gKyAgICAgICAgIG9m ZnNldCAmIChzaXplIC0gMSkgfHwgcmVhZF9oYW5kbGVyID09IE5VTEwgfHwgd3JpdGVfaGFuZGxl ciA9PSBOVUxMICkNCj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKyAgICByID0g eHphbGxvYyhzdHJ1Y3QgdnBjaV9yZWdpc3Rlcik7DQo+ICsgICAgaWYgKCAhciApDQo+ICsgICAg ICAgIHJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsgICAgci0+cmVhZCA9IHJlYWRfaGFuZGxlcjsN Cj4gKyAgICByLT53cml0ZSA9IHdyaXRlX2hhbmRsZXI7DQo+ICsgICAgci0+c2l6ZSA9IHNpemU7 DQo+ICsgICAgci0+b2Zmc2V0ID0gb2Zmc2V0Ow0KPiArICAgIHItPnByaXZfZGF0YSA9IGRhdGE7 DQo+ICsNCj4gKyAgICB2cGNpX2xvY2socGRldi0+ZG9tYWluKTsNCj4gKyAgICBuZXcgPSAmcGRl di0+dnBjaS0+aGFuZGxlcnMucmJfbm9kZTsNCj4gKyAgICBwYXJlbnQgPSBOVUxMOw0KPiArDQo+ ICsgICAgd2hpbGUgKCpuZXcpIHsNCj4gKyAgICAgICAgc3RydWN0IHZwY2lfcmVnaXN0ZXIgKnRo aXMgPQ0KPiArICAgICAgICAgICAgY29udGFpbmVyX29mKCpuZXcsIHN0cnVjdCB2cGNpX3JlZ2lz dGVyLCBub2RlKTsNCj4gKw0KPiArICAgICAgICBwYXJlbnQgPSAqbmV3Ow0KPiArICAgICAgICBz d2l0Y2ggKCB2cGNpX3JlZ2lzdGVyX2NtcChyLCB0aGlzKSApDQo+ICsgICAgICAgIHsNCj4gKyAg ICAgICAgY2FzZSAtMToNCj4gKyAgICAgICAgICAgIG5ldyA9ICYoKCpuZXcpLT5yYl9sZWZ0KTsN Cj4gKyAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICBjYXNlIDE6DQo+ICsgICAgICAgICAg ICBuZXcgPSAmKCgqbmV3KS0+cmJfcmlnaHQpOw0KPiArICAgICAgICAgICAgYnJlYWs7DQo+ICsg ICAgICAgIGRlZmF1bHQ6DQo+ICsgICAgICAgICAgICB4ZnJlZShyKTsNCj4gKyAgICAgICAgICAg IHZwY2lfdW5sb2NrKHBkZXYtPmRvbWFpbik7DQo+ICsgICAgICAgICAgICByZXR1cm4gLUVFWElT VDsNCj4gKyAgICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIHJiX2xpbmtfbm9kZSgmci0+ bm9kZSwgcGFyZW50LCBuZXcpOw0KPiArICAgIHJiX2luc2VydF9jb2xvcigmci0+bm9kZSwgJnBk ZXYtPnZwY2ktPmhhbmRsZXJzKTsNCj4gKyAgICB2cGNpX3VubG9jayhwZGV2LT5kb21haW4pOw0K PiArDQo+ICsgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2ludCB4ZW5fdnBjaV9yZW1vdmVf cmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQpDQo+ICt7 DQo+ICsgICAgc3RydWN0IHZwY2lfcmVnaXN0ZXIgKnI7DQo+ICsNCj4gKyAgICB2cGNpX2xvY2so cGRldi0+ZG9tYWluKTsNCj4gKyAgICByID0gdnBjaV9maW5kX3JlZ2lzdGVyKHBkZXYsIG9mZnNl dCwgMSAvKiBzaXplIGRvZXNuJ3QgbWF0dGVyIGhlcmUuICovKTsNCj4gKyAgICBpZiAoICFyICkN Cj4gKyAgICB7DQo+ICsgICAgICAgIHZwY2lfdW5sb2NrKHBkZXYtPmRvbWFpbik7DQo+ICsgICAg ICAgIHJldHVybiAtRU5PRU5UOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJiX2VyYXNlKCZyLT5u b2RlLCAmcGRldi0+dnBjaS0+aGFuZGxlcnMpOw0KPiArICAgIHhmcmVlKHIpOw0KPiArICAgIHZw Y2lfdW5sb2NrKHBkZXYtPmRvbWFpbik7DQo+ICsNCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArLyogV3JhcHBlcnMgZm9yIHBlcmZvcm1pbmcgcmVhZHMvd3JpdGVzIHRvIHRoZSB1bmRl cmx5aW5nIGhhcmR3YXJlLiAqLw0KPiArc3RhdGljIHZvaWQgdnBjaV9yZWFkX2h3KHVuc2lnbmVk IGludCBzZWcsIHVuc2lnbmVkIGludCBidXMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGRldmZuLCB1bnNpZ25lZCBpbnQgcmVnLCB1aW50MzJfdCBzaXplLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpkYXRhKQ0KPiArew0KPiArICAgIHN3 aXRjaCAoIHNpemUgKQ0KPiArICAgIHsNCj4gKyAgICBjYXNlIDQ6DQo+ICsgICAgICAgICpkYXRh ID0gcGNpX2NvbmZfcmVhZDMyKHNlZywgYnVzLCBQQ0lfU0xPVChkZXZmbiksIFBDSV9GVU5DKGRl dmZuKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnKTsNCj4gKyAgICAg ICAgYnJlYWs7DQo+ICsgICAgY2FzZSAzOg0KPiArICAgICAgICAvKg0KPiArICAgICAgICAgKiBU aGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgYSA0Ynl0ZSByZWFkIGNhbiBoYXZlIDFieXRlIHRyYXBw ZWQgYW5kDQo+ICsgICAgICAgICAqIHRoZSByZXN0IHBhc3NlZC10aHJvdWdoLg0KPiArICAgICAg ICAgKi8NCj4gKyAgICAgICAgKmRhdGEgPSBwY2lfY29uZl9yZWFkMTYoc2VnLCBidXMsIFBDSV9T TE9UKGRldmZuKSwgUENJX0ZVTkMoZGV2Zm4pLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZWcgKyAxKSA8PCA4Ow0KPiArICAgICAgICAqZGF0YSB8PSBwY2lfY29uZl9yZWFk OChzZWcsIGJ1cywgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbiksDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVnKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAg Y2FzZSAyOg0KPiArICAgICAgICAqZGF0YSA9IHBjaV9jb25mX3JlYWQxNihzZWcsIGJ1cywgUENJ X1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlZyk7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgMToNCj4gKyAg ICAgICAgKmRhdGEgPSBwY2lfY29uZl9yZWFkOChzZWcsIGJ1cywgUENJX1NMT1QoZGV2Zm4pLCBQ Q0lfRlVOQyhkZXZmbiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnKTsN Cj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgZGVmYXVsdDoNCj4gKyAgICAgICAgQlVHKCk7DQo+ ICsgICAgfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB2cGNpX3dyaXRlX2h3KHVuc2lnbmVk IGludCBzZWcsIHVuc2lnbmVkIGludCBidXMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBkZXZmbiwgdW5zaWduZWQgaW50IHJlZywgdWludDMyX3Qgc2l6ZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGF0YSkNCj4gK3sNCj4gKyAgICBz d2l0Y2ggKCBzaXplICkNCj4gKyAgICB7DQo+ICsgICAgY2FzZSA0Og0KPiArICAgICAgICBwY2lf Y29uZl93cml0ZTMyKHNlZywgYnVzLCBQQ0lfU0xPVChkZXZmbiksIFBDSV9GVU5DKGRldmZuKSwg cmVnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOw0KPiArICAgICAgICBicmVh azsNCj4gKyAgICBjYXNlIDM6DQo+ICsgICAgICAgIC8qDQo+ICsgICAgICAgICAqIFRoaXMgaXMg cG9zc2libGUgYmVjYXVzZSBhIDRieXRlIHdyaXRlIGNhbiBoYXZlIDFieXRlIHRyYXBwZWQgYW5k DQo+ICsgICAgICAgICAqIHRoZSByZXN0IHBhc3NlZC10aHJvdWdoLg0KPiArICAgICAgICAgKi8N Cj4gKyAgICAgICAgcGNpX2NvbmZfd3JpdGU4KHNlZywgYnVzLCBQQ0lfU0xPVChkZXZmbiksIFBD SV9GVU5DKGRldmZuKSwgcmVnLA0KPiBkYXRhKTsNCj4gKyAgICAgICAgcGNpX2NvbmZfd3JpdGUx NihzZWcsIGJ1cywgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbiksIHJlZyArDQo+IDEs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA+PiA4KTsNCj4gKyAgICAgICAgYnJl YWs7DQo+ICsgICAgY2FzZSAyOg0KPiArICAgICAgICBwY2lfY29uZl93cml0ZTE2KHNlZywgYnVz LCBQQ0lfU0xPVChkZXZmbiksIFBDSV9GVU5DKGRldmZuKSwgcmVnLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgIGRhdGEpOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIDE6DQo+ ICsgICAgICAgIHBjaV9jb25mX3dyaXRlOChzZWcsIGJ1cywgUENJX1NMT1QoZGV2Zm4pLCBQQ0lf RlVOQyhkZXZmbiksIHJlZywNCj4gZGF0YSk7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGRl ZmF1bHQ6DQo+ICsgICAgICAgIEJVRygpOw0KPiArICAgIH0NCj4gK30NCj4gKw0KPiArLyogSGVs cGVyIG1hY3JvcyBmb3IgdGhlIHJlYWQvd3JpdGUgaGFuZGxlcnMuICovDQo+ICsjZGVmaW5lIEdF Tk1BU0tfQllURVMoZSwgcykgR0VOTUFTSygoZSkgKiA4LCAocykgKiA4KQ0KPiArI2RlZmluZSBT SElGVF9SSUdIVF9CWVRFUyhkLCBvKSBkID4+PSAobykgKiA4DQo+ICsjZGVmaW5lIEFERF9SRVNV TFQociwgZCwgcywgbykgciB8PSAoKGQpICYgR0VOTUFTS19CWVRFUyhzLCAwKSkgPDwgKChvKSAq DQo+IDgpDQo+ICsNCj4gK2ludCB4ZW5fdnBjaV9yZWFkKHVuc2lnbmVkIGludCBzZWcsIHVuc2ln bmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbiwNCj4gKyAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCByZWcsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90ICpkYXRhKQ0KPiArew0KPiAr ICAgIHN0cnVjdCBkb21haW4gKmQgPSBjdXJyZW50LT5kb21haW47DQo+ICsgICAgc3RydWN0IHBj aV9kZXYgKnBkZXY7DQo+ICsgICAgY29uc3Qgc3RydWN0IHZwY2lfcmVnaXN0ZXIgKnI7DQo+ICsg ICAgdW5pb24gdnBjaV92YWwgdmFsID0geyAuZG91YmxlX3dvcmQgPSAwIH07DQo+ICsgICAgdW5z aWduZWQgaW50IGRhdGFfcnNoaWZ0ID0gMCwgZGF0YV9sc2hpZnQgPSAwLCBkYXRhX3NpemU7DQo+ ICsgICAgdWludDMyX3QgdG1wX2RhdGE7DQo+ICsgICAgaW50IHJjOw0KPiArDQo+ICsgICAgQVNT RVJUKHZwY2lfbG9ja2VkKGQpKTsNCj4gKw0KPiArICAgICpkYXRhID0gMDsNCj4gKw0KPiArICAg IC8qIEZpbmQgdGhlIFBDSSBkZXYgbWF0Y2hpbmcgdGhlIGFkZHJlc3MuICovDQo+ICsgICAgcGRl diA9IHBjaV9nZXRfcGRldl9ieV9kb21haW4oZCwgc2VnLCBidXMsIGRldmZuKTsNCj4gKyAgICBp ZiAoICFwZGV2ICkNCj4gKyAgICAgICAgZ290byBwYXNzdGhyb3VnaDsNCg0KSSBob3BlIHRoaXMg Y2FuIGV2ZW50dWFsbHkgYmUgZ2VuZXJhbGlzZWQgc28gSSB3b25kZXIgd2hhdCB5b3VyIGludGVu dGlvbiBpcyByZWdhcmRpbmcgY28tZXhpc3RlbmNlIGJldHdlZW4gWGVuIGVtdWxhdGVkIFBDSSBj b25maWcgc3BhY2UsIHBhc3MtdGhyb3VnaCBhbmQgUENJIGRldmljZXMgZW11bGF0ZWQgZXh0ZXJu YWxseS4gV2UgYWxyZWFkeSBoYXZlIGEgZnJhbWV3b3JrIGZvciByZWdpc3RlcmluZyBQQ0kgZGV2 aWNlcyBieSBTQkRGIGJ1dCB0aGlzIGNvZGUgc2VlbXMgdG8gbWFrZSBubyB1c2Ugb2YgaXQsIHdo aWNoIEkgc3VzcGVjdCBpcyBsaWtlbHkgdG8gY2F1c2UgZnV0dXJlIGNvbmZsaWN0Lg0KDQogIFBh dWwNCg0KPiArDQo+ICsgICAgLyogRmluZCB0aGUgdlBDSSByZWdpc3RlciBoYW5kbGVyLiAqLw0K PiArICAgIHIgPSB2cGNpX2ZpbmRfcmVnaXN0ZXIocGRldiwgcmVnLCBzaXplKTsNCj4gKyAgICBp ZiAoICFyICkNCj4gKyAgICAgICAgZ290byBwYXNzdGhyb3VnaDsNCj4gKw0KPiArICAgIGlmICgg ci0+b2Zmc2V0ID4gcmVnICkNCj4gKyAgICB7DQo+ICsgICAgICAgIC8qDQo+ICsgICAgICAgICAq IFRoZXJlJ3MgYSBoZWFkaW5nIGdhcCBpbnRvIHRoZSBlbXVsYXRlZCByZWdpc3Rlci4NCj4gKyAg ICAgICAgICogTkI6IGl0J3MgcG9zc2libGUgZm9yIHRoaXMgcmVjdXJzaXZlIGNhbGwgdG8gaGF2 ZSBhIHNpemUgb2YgMy4NCj4gKyAgICAgICAgICovDQo+ICsgICAgICAgIHJjID0geGVuX3ZwY2lf cmVhZChzZWcsIGJ1cywgZGV2Zm4sIHJlZywgci0+b2Zmc2V0IC0gcmVnLCAmdG1wX2RhdGEpOw0K PiArICAgICAgICBpZiAoIHJjICkNCj4gKyAgICAgICAgICAgIHJldHVybiByYzsNCj4gKw0KPiAr ICAgICAgICAvKiBBZGQgdGhlIGhlYWQgcmVhZCB0byB0aGUgcGFydGlhbCByZXN1bHQuICovDQo+ ICsgICAgICAgIEFERF9SRVNVTFQoKmRhdGEsIHRtcF9kYXRhLCByLT5vZmZzZXQgLSByZWcsIDAp Ow0KPiArICAgICAgICBkYXRhX2xzaGlmdCA9IHItPm9mZnNldCAtIHJlZzsNCj4gKw0KPiArICAg ICAgICAvKiBBY2NvdW50IGZvciB0aGUgcmVhZC4gKi8NCj4gKyAgICAgICAgc2l6ZSAtPSBkYXRh X2xzaGlmdDsNCj4gKyAgICAgICAgcmVnICs9IGRhdGFfbHNoaWZ0Ow0KPiArICAgIH0NCj4gKyAg ICBlbHNlIGlmICggci0+b2Zmc2V0IDwgcmVnICkNCj4gKyAgICAgICAgLyogVGhlcmUncyBhbiBv ZmZzZXQgaW50byB0aGUgZW11bGF0ZWQgcmVnaXN0ZXIgKi8NCj4gKyAgICAgICAgZGF0YV9yc2hp ZnQgPSByZWcgLSByLT5vZmZzZXQ7DQo+ICsNCj4gKyAgICBBU1NFUlQoZGF0YV9sc2hpZnQgPT0g MCB8fCBkYXRhX3JzaGlmdCA9PSAwKTsNCj4gKyAgICBkYXRhX3NpemUgPSBtaW4oc2l6ZSwgci0+ c2l6ZSAtIGRhdGFfcnNoaWZ0KTsNCj4gKyAgICBBU1NFUlQoZGF0YV9zaXplICE9IDApOw0KPiAr DQo+ICsgICAgLyogUGVyZm9ybSB0aGUgcmVhZCBvZiB0aGUgcmVnaXN0ZXIuICovDQo+ICsgICAg cmMgPSByLT5yZWFkKHBkZXYsIHItPm9mZnNldCwgJnZhbCwgci0+cHJpdl9kYXRhKTsNCj4gKyAg ICBpZiAoIHJjICkNCj4gKyAgICAgICAgcmV0dXJuIHJjOw0KPiArDQo+ICsgICAgdmFsLmRvdWJs ZV93b3JkID4+PSBkYXRhX3JzaGlmdCAqIDg7DQo+ICsgICAgQUREX1JFU1VMVCgqZGF0YSwgdmFs LmRvdWJsZV93b3JkLCBkYXRhX3NpemUsIGRhdGFfbHNoaWZ0KTsNCj4gKw0KPiArICAgIC8qIEFj Y291bnQgZm9yIHRoZSByZWFkICovDQo+ICsgICAgc2l6ZSAtPSBkYXRhX3NpemU7DQo+ICsgICAg cmVnICs9IGRhdGFfc2l6ZTsNCj4gKw0KPiArICAgIC8qIFJlYWQgdGhlIHJlbWFpbmluZywgaWYg YW55LiAqLw0KPiArICAgIGlmICggc2l6ZSA+IDAgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgLyoN Cj4gKyAgICAgICAgICogUmVhZCB0YWlsaW5nIGRhdGEuDQo+ICsgICAgICAgICAqIE5COiBpdCdz IHBvc3NpYmxlIGZvciB0aGlzIHJlY3Vyc2l2ZSBjYWxsIHRvIGhhdmUgYSBzaXplIG9mIDMuDQo+ ICsgICAgICAgICAqLw0KPiArICAgICAgICByYyA9IHhlbl92cGNpX3JlYWQoc2VnLCBidXMsIGRl dmZuLCByZWcsIHNpemUsICZ0bXBfZGF0YSk7DQo+ICsgICAgICAgIGlmICggcmMgKQ0KPiArICAg ICAgICAgICAgcmV0dXJuIHJjOw0KPiArDQo+ICsgICAgICAgIC8qIEFkZCB0aGUgdGFpbCByZWFk IHRvIHRoZSBwYXJ0aWFsIHJlc3VsdC4gKi8NCj4gKyAgICAgICAgQUREX1JFU1VMVCgqZGF0YSwg dG1wX2RhdGEsIHNpemUsIGRhdGFfc2l6ZSArIGRhdGFfbHNoaWZ0KTsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICByZXR1cm4gMDsNCj4gKw0KPiArIHBhc3N0aHJvdWdoOg0KPiArICAgIHZwY2lfcmVh ZF9odyhzZWcsIGJ1cywgZGV2Zm4sIHJlZywgc2l6ZSwgZGF0YSk7DQo+ICsgICAgcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gKy8qIFBlcmZvcm0gYSBtYXliZSBwYXJ0aWFsIHdyaXRlIHRvIGEgcmVn aXN0ZXIuICovDQo+ICtzdGF0aWMgaW50IHZwY2lfd3JpdGVfaGVscGVyKHN0cnVjdCBwY2lfZGV2 ICpwZGV2LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdnBj aV9yZWdpc3RlciAqciwgdW5zaWduZWQgaW50IHNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVpbnQzMl90IGRhdGEpDQo+ICt7DQo+ICsg ICAgdW5pb24gdnBjaV92YWwgdmFsID0geyAuZG91YmxlX3dvcmQgPSBkYXRhIH07DQo+ICsgICAg aW50IHJjOw0KPiArDQo+ICsgICAgQVNTRVJUKHNpemUgPD0gci0+c2l6ZSk7DQo+ICsgICAgaWYg KCBzaXplICE9IHItPnNpemUgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgcmMgPSByLT5yZWFkKHBk ZXYsIHItPm9mZnNldCwgJnZhbCwgci0+cHJpdl9kYXRhKTsNCj4gKyAgICAgICAgaWYgKCByYyAp DQo+ICsgICAgICAgICAgICByZXR1cm4gcmM7DQo+ICsgICAgICAgIHZhbC5kb3VibGVfd29yZCAm PSB+R0VOTUFTS19CWVRFUyhzaXplICsgb2Zmc2V0LCBvZmZzZXQpOw0KPiArICAgICAgICBkYXRh ICY9IEdFTk1BU0tfQllURVMoc2l6ZSwgMCk7DQo+ICsgICAgICAgIHZhbC5kb3VibGVfd29yZCB8 PSBkYXRhIDw8IChvZmZzZXQgKiA4KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gci0+ d3JpdGUocGRldiwgci0+b2Zmc2V0LCB2YWwsIHItPnByaXZfZGF0YSk7DQo+ICt9DQo+ICsNCj4g K2ludCB4ZW5fdnBjaV93cml0ZSh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLCB1 bnNpZ25lZCBpbnQgZGV2Zm4sDQo+ICsgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJl ZywgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgZGF0YSkNCj4gK3sNCj4gKyAgICBzdHJ1Y3QgZG9t YWluICpkID0gY3VycmVudC0+ZG9tYWluOw0KPiArICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2Ow0K PiArICAgIGNvbnN0IHN0cnVjdCB2cGNpX3JlZ2lzdGVyICpyOw0KPiArICAgIHVuc2lnbmVkIGlu dCBkYXRhX3NpemUsIGRhdGFfb2Zmc2V0ID0gMDsNCj4gKyAgICBpbnQgcmM7DQo+ICsNCj4gKyAg ICBBU1NFUlQodnBjaV9sb2NrZWQoZCkpOw0KPiArDQo+ICsgICAgLyogRmluZCB0aGUgUENJIGRl diBtYXRjaGluZyB0aGUgYWRkcmVzcy4gKi8NCj4gKyAgICBwZGV2ID0gcGNpX2dldF9wZGV2X2J5 X2RvbWFpbihkLCBzZWcsIGJ1cywgZGV2Zm4pOw0KPiArICAgIGlmICggIXBkZXYgKQ0KPiArICAg ICAgICBnb3RvIHBhc3N0aHJvdWdoOw0KPiArDQo+ICsgICAgLyogRmluZCB0aGUgdlBDSSByZWdp c3RlciBoYW5kbGVyLiAqLw0KPiArICAgIHIgPSB2cGNpX2ZpbmRfcmVnaXN0ZXIocGRldiwgcmVn LCBzaXplKTsNCj4gKyAgICBpZiAoICFyICkNCj4gKyAgICAgICAgZ290byBwYXNzdGhyb3VnaDsN Cj4gKw0KPiArICAgIGVsc2UgaWYgKCByLT5vZmZzZXQgPiByZWcgKQ0KPiArICAgIHsNCj4gKyAg ICAgICAgLyoNCj4gKyAgICAgICAgICogVGhlcmUncyBhIGhlYWRpbmcgZ2FwIGludG8gdGhlIGVt dWxhdGVkIHJlZ2lzdGVyIGZvdW5kLg0KPiArICAgICAgICAgKiBOQjogaXQncyBwb3NzaWJsZSBm b3IgdGhpcyByZWN1cnNpdmUgY2FsbCB0byBoYXZlIGEgc2l6ZSBvZiAzLg0KPiArICAgICAgICAg Ki8NCj4gKyAgICAgICAgcmMgPSB4ZW5fdnBjaV93cml0ZShzZWcsIGJ1cywgZGV2Zm4sIHJlZywg ci0+b2Zmc2V0IC0gcmVnLCBkYXRhKTsNCj4gKyAgICAgICAgaWYgKCByYyApDQo+ICsgICAgICAg ICAgICByZXR1cm4gcmM7DQo+ICsNCj4gKyAgICAgICAgLyogQWR2YW5jZSB0aGUgZGF0YSBieSB0 aGUgd3JpdHRlbiBzaXplLiAqLw0KPiArICAgICAgICBTSElGVF9SSUdIVF9CWVRFUyhkYXRhLCBy LT5vZmZzZXQgLSByZWcpOw0KPiArICAgICAgICBzaXplIC09IHItPm9mZnNldCAtIHJlZzsNCj4g KyAgICAgICAgcmVnICs9IHItPm9mZnNldCAtIHJlZzsNCj4gKyAgICB9DQo+ICsgICAgZWxzZSBp ZiAoIHItPm9mZnNldCA8IHJlZyApDQo+ICsgICAgICAgIC8qIFRoZXJlJ3MgYW4gb2Zmc2V0IGlu dG8gdGhlIGVtdWxhdGVkIHJlZ2lzdGVyLiAqLw0KPiArICAgICAgICBkYXRhX29mZnNldCA9IHJl ZyAtIHItPm9mZnNldDsNCj4gKw0KPiArICAgIGRhdGFfc2l6ZSA9IG1pbihzaXplLCByLT5zaXpl IC0gZGF0YV9vZmZzZXQpOw0KPiArDQo+ICsgICAgLyogUGVyZm9ybSB0aGUgd3JpdGUgb2YgdGhl IHJlZ2lzdGVyLiAqLw0KPiArICAgIEFTU0VSVChkYXRhX3NpemUgIT0gMCk7DQo+ICsgICAgcmMg PSB2cGNpX3dyaXRlX2hlbHBlcihwZGV2LCByLCBkYXRhX3NpemUsIGRhdGFfb2Zmc2V0LCBkYXRh KTsNCj4gKyAgICBpZiAoIHJjICkNCj4gKyAgICAgICAgcmV0dXJuIHJjOw0KPiArDQo+ICsgICAg LyogQWNjb3VudCBmb3IgdGhlIHJlYWQgKi8NCj4gKyAgICBzaXplIC09IGRhdGFfc2l6ZTsNCj4g KyAgICByZWcgKz0gZGF0YV9zaXplOw0KPiArICAgIFNISUZUX1JJR0hUX0JZVEVTKGRhdGEsIGRh dGFfc2l6ZSk7DQo+ICsNCj4gKyAgICAvKiBXcml0ZSB0aGUgcmVtYWluaW5nLCBpZiBhbnkuICov DQo+ICsgICAgaWYgKCBzaXplID4gMCApDQo+ICsgICAgew0KPiArICAgICAgICAvKg0KPiArICAg ICAgICAgKiBXcml0ZSB0YWlsaW5nIGRhdGEuDQo+ICsgICAgICAgICAqIE5COiBpdCdzIHBvc3Np YmxlIGZvciB0aGlzIHJlY3Vyc2l2ZSBjYWxsIHRvIGhhdmUgYSBzaXplIG9mIDMuDQo+ICsgICAg ICAgICAqLw0KPiArICAgICAgICByYyA9IHhlbl92cGNpX3dyaXRlKHNlZywgYnVzLCBkZXZmbiwg cmVnLCBzaXplLCBkYXRhKTsNCj4gKyAgICAgICAgaWYgKCByYyApDQo+ICsgICAgICAgICAgICBy ZXR1cm4gcmM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIDA7DQo+ICsNCj4gKyBwYXNz dGhyb3VnaDoNCj4gKyAgICB2cGNpX3dyaXRlX2h3KHNlZywgYnVzLCBkZXZmbiwgcmVnLCBzaXpl LCBkYXRhKTsNCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIExvY2Fs IHZhcmlhYmxlczoNCj4gKyAqIG1vZGU6IEMNCj4gKyAqIGMtZmlsZS1zdHlsZTogIkJTRCINCj4g KyAqIGMtYmFzaWMtb2Zmc2V0OiA0DQo+ICsgKiB0YWItd2lkdGg6IDQNCj4gKyAqIGluZGVudC10 YWJzLW1vZGU6IG5pbA0KPiArICogRW5kOg0KPiArICovDQo+ICsNCj4gZGlmZiAtLWdpdCBhL3hl bi9pbmNsdWRlL2FzbS14ODYvZG9tYWluLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2RvbWFpbi5o DQo+IGluZGV4IDZhYjk4N2YyMzEuLmYwNzQxOTE3ZWQgMTAwNjQ0DQo+IC0tLSBhL3hlbi9pbmNs dWRlL2FzbS14ODYvZG9tYWluLmgNCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4u aA0KPiBAQCAtNDI2LDYgKzQyNiw3IEBAIHN0cnVjdCBhcmNoX2RvbWFpbg0KPiAgI2RlZmluZSBo YXNfdnBpdChkKSAgICAgICAgKCEhKChkKS0+YXJjaC5lbXVsYXRpb25fZmxhZ3MgJg0KPiBYRU5f WDg2X0VNVV9QSVQpKQ0KPiAgI2RlZmluZSBoYXNfcGlycShkKSAgICAgICAgKCEhKChkKS0+YXJj aC5lbXVsYXRpb25fZmxhZ3MgJiBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVO X1g4Nl9FTVVfVVNFX1BJUlEpKQ0KPiArI2RlZmluZSBoYXNfdnBjaShkKSAgICAgICAgKCEhKChk KS0+YXJjaC5lbXVsYXRpb25fZmxhZ3MgJg0KPiBYRU5fWDg2X0VNVV9WUENJKSkNCj4gDQo+ICAj ZGVmaW5lIGhhc19hcmNoX3BkZXZzKGQpICAgICghbGlzdF9lbXB0eSgmKGQpLT5hcmNoLnBkZXZf bGlzdCkpDQo+IA0KPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vZG9tYWlu LmggYi94ZW4vaW5jbHVkZS9hc20tDQo+IHg4Ni9odm0vZG9tYWluLmgNCj4gaW5kZXggZDI4OTlj OWJiMi4uY2JmNDE3MDc4OSAxMDA2NDQNCj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0v ZG9tYWluLmgNCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vZG9tYWluLmgNCj4gQEAg LTE4NCw2ICsxODQsOSBAQCBzdHJ1Y3QgaHZtX2RvbWFpbiB7DQo+ICAgICAgLyogTGlzdCBvZiBn dWVzdCB0byBtYWNoaW5lIElPIHBvcnRzIG1hcHBpbmcuICovDQo+ICAgICAgc3RydWN0IGxpc3Rf aGVhZCBnMm1faW9wb3J0X2xpc3Q7DQo+IA0KPiArICAgIC8qIExvY2sgZm9yIHRoZSBQQ0kgZW11 bGF0aW9uIGxheWVyICh2UENJKS4gKi8NCj4gKyAgICBzcGlubG9ja190IHZwY2lfbG9jazsNCj4g Kw0KPiAgICAgIC8qIExpc3Qgb2YgcGVybWFuZW50bHkgd3JpdGUtbWFwcGVkIHBhZ2VzLiAqLw0K PiAgICAgIHN0cnVjdCB7DQo+ICAgICAgICAgIHNwaW5sb2NrX3QgbG9jazsNCj4gZGlmZiAtLWdp dCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2 bS9pby5oDQo+IGluZGV4IDI0ODRlYjFjNzUuLjJkYmY5MmYxM2UgMTAwNjQ0DQo+IC0tLSBhL3hl bi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmgNCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9o dm0vaW8uaA0KPiBAQCAtMTU1LDYgKzE1NSw5IEBAIGV4dGVybiB2b2lkIGh2bV9kcGNpX21zaV9l b2koc3RydWN0IGRvbWFpbiAqZCwgaW50DQo+IHZlY3Rvcik7DQo+ICAgKi8NCj4gIHZvaWQgcmVn aXN0ZXJfZzJtX3BvcnRpb19oYW5kbGVyKHN0cnVjdCBkb21haW4gKmQpOw0KPiANCj4gKy8qIEhW TSBwb3J0IElPIGhhbmRsZXIgZm9yIFBDSSBhY2Nlc3Nlcy4gKi8NCj4gK3ZvaWQgcmVnaXN0ZXJf dnBjaV9wb3J0aW9faGFuZGxlcihzdHJ1Y3QgZG9tYWluICpkKTsNCj4gKw0KPiAgI2VuZGlmIC8q IF9fQVNNX1g4Nl9IVk1fSU9fSF9fICovDQo+IA0KPiANCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL3B1YmxpYy9hcmNoLXg4Ni94ZW4uaCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLQ0KPiB4 ODYveGVuLmgNCj4gaW5kZXggOGE5YmE3OTgyYi4uYzAwZjhjZGE5MyAxMDA2NDQNCj4gLS0tIGEv eGVuL2luY2x1ZGUvcHVibGljL2FyY2gteDg2L3hlbi5oDQo+ICsrKyBiL3hlbi9pbmNsdWRlL3B1 YmxpYy9hcmNoLXg4Ni94ZW4uaA0KPiBAQCAtMjk1LDEyICsyOTUsMTUgQEAgc3RydWN0IHhlbl9h cmNoX2RvbWFpbmNvbmZpZyB7DQo+ICAjZGVmaW5lIFhFTl9YODZfRU1VX1BJVCAgICAgICAgICAg ICAoMVU8PF9YRU5fWDg2X0VNVV9QSVQpDQo+ICAjZGVmaW5lIF9YRU5fWDg2X0VNVV9VU0VfUElS USAgICAgICA5DQo+ICAjZGVmaW5lIFhFTl9YODZfRU1VX1VTRV9QSVJRICAgICAgICAoMVU8PF9Y RU5fWDg2X0VNVV9VU0VfUElSUSkNCj4gKyNkZWZpbmUgX1hFTl9YODZfRU1VX1ZQQ0kgICAgICAg ICAgIDEwDQo+ICsjZGVmaW5lIFhFTl9YODZfRU1VX1ZQQ0kgICAgICAgICAgICAoMVU8PF9YRU5f WDg2X0VNVV9WUENJKQ0KPiANCj4gICNkZWZpbmUgWEVOX1g4Nl9FTVVfQUxMICAgICAgICAgICAg IChYRU5fWDg2X0VNVV9MQVBJQyB8DQo+IFhFTl9YODZfRU1VX0hQRVQgfCAgXA0KPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTl9YODZfRU1VX1BNIHwgWEVOX1g4Nl9F TVVfUlRDIHwgICAgICBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WEVOX1g4Nl9FTVVfSU9BUElDIHwgWEVOX1g4Nl9FTVVfUElDIHwgIFwNCj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBYRU5fWDg2X0VNVV9WR0EgfCBYRU5fWDg2X0VNVV9J T01NVSB8ICAgXA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTl9Y ODZfRU1VX1BJVCB8IFhFTl9YODZfRU1VX1VTRV9QSVJRKQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFhFTl9YODZfRU1VX1BJVCB8IFhFTl9YODZfRU1VX1VTRV9QSVJR IHxcDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOX1g4Nl9FTVVf VlBDSSkNCj4gICAgICB1aW50MzJfdCBlbXVsYXRpb25fZmxhZ3M7DQo+ICB9Ow0KPiANCj4gZGlm ZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9wY2kuaCBiL3hlbi9pbmNsdWRlL3hlbi9wY2kuaA0K PiBpbmRleCA1OWI2ZThhODFjLi5hODNjNGExMjc2IDEwMDY0NA0KPiAtLS0gYS94ZW4vaW5jbHVk ZS94ZW4vcGNpLmgNCj4gKysrIGIveGVuL2luY2x1ZGUveGVuL3BjaS5oDQo+IEBAIC0xMyw2ICsx Myw3IEBADQo+ICAjaW5jbHVkZSA8eGVuL2lycS5oPg0KPiAgI2luY2x1ZGUgPHhlbi9wY2lfcmVn cy5oPg0KPiAgI2luY2x1ZGUgPHhlbi9wZm4uaD4NCj4gKyNpbmNsdWRlIDx4ZW4vcmJ0cmVlLmg+ DQo+ICAjaW5jbHVkZSA8YXNtL2RldmljZS5oPg0KPiAgI2luY2x1ZGUgPGFzbS9udW1hLmg+DQo+ ICAjaW5jbHVkZSA8YXNtL3BjaS5oPg0KPiBAQCAtODgsNiArODksOSBAQCBzdHJ1Y3QgcGNpX2Rl diB7DQo+ICAjZGVmaW5lIFBUX0ZBVUxUX1RIUkVTSE9MRCAxMA0KPiAgICAgIH0gZmF1bHQ7DQo+ ICAgICAgdTY0IHZmX3JsZW5bNl07DQo+ICsNCj4gKyAgICAvKiBEYXRhIGZvciB2UENJLiAqLw0K PiArICAgIHN0cnVjdCB2cGNpICp2cGNpOw0KPiAgfTsNCj4gDQo+ICAjZGVmaW5lIGZvcl9lYWNo X3BkZXYoZG9tYWluLCBwZGV2KSBcDQo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vdnBj aS5oIGIveGVuL2luY2x1ZGUveGVuL3ZwY2kuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleCAwMDAwMDAwMDAwLi41NmU4ZDFjMzVlDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIveGVu L2luY2x1ZGUveGVuL3ZwY2kuaA0KPiBAQCAtMCwwICsxLDY2IEBADQo+ICsjaWZuZGVmIF9WUENJ Xw0KPiArI2RlZmluZSBfVlBDSV8NCj4gKw0KPiArI2luY2x1ZGUgPHhlbi9wY2kuaD4NCj4gKyNp bmNsdWRlIDx4ZW4vdHlwZXMuaD4NCj4gKw0KPiArLyogSGVscGVycyBmb3IgbG9ja2luZy91bmxv Y2tpbmcuICovDQo+ICsjZGVmaW5lIHZwY2lfbG9jayhkKSBzcGluX2xvY2soJihkKS0+YXJjaC5o dm1fZG9tYWluLnZwY2lfbG9jaykNCj4gKyNkZWZpbmUgdnBjaV91bmxvY2soZCkgc3Bpbl91bmxv Y2soJihkKS0+YXJjaC5odm1fZG9tYWluLnZwY2lfbG9jaykNCj4gKyNkZWZpbmUgdnBjaV9sb2Nr ZWQoZCkgc3Bpbl9pc19sb2NrZWQoJihkKS0+YXJjaC5odm1fZG9tYWluLnZwY2lfbG9jaykNCj4g Kw0KPiArLyogVmFsdWUgcmVhZCBvciB3cml0dGVuIGJ5IHRoZSBoYW5kbGVycy4gKi8NCj4gK3Vu aW9uIHZwY2lfdmFsIHsNCj4gKyAgICB1aW50OF90IGhhbGZfd29yZDsNCj4gKyAgICB1aW50MTZf dCB3b3JkOw0KPiArICAgIHVpbnQzMl90IGRvdWJsZV93b3JkOw0KPiArfTsNCj4gKw0KPiArLyoN Cj4gKyAqIFRoZSB2UENJIGhhbmRsZXJzIHdpbGwgbmV2ZXIgYmUgY2FsbGVkIGNvbmN1cnJlbnRs eSBmb3IgdGhlIHNhbWUgZG9tYWluLA0KPiBpaQ0KPiArICogaXMgZ3VhcmFudGVlZCB0aGF0IHRo ZSB2cGNpIGRvbWFpbiBsb2NrIHdpbGwgYWx3YXlzIGJlIGxvY2tlZCB3aGVuIGNhbGxpbmcNCj4g KyAqIGFueSBoYW5kbGVyLg0KPiArICovDQo+ICt0eXBlZGVmIGludCAoKnZwY2lfcmVhZF90KShz dHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuaW9uIHZwY2lfdmFsICp2YWwsIHZvaWQgKmRhdGEpOw0KPiArDQo+ICt0 eXBlZGVmIGludCAoKnZwY2lfd3JpdGVfdCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVk IGludCByZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gdnBjaV92YWwg dmFsLCB2b2lkICpkYXRhKTsNCj4gKw0KPiArdHlwZWRlZiBpbnQgKCp2cGNpX3JlZ2lzdGVyX2lu aXRfdCkoc3RydWN0IHBjaV9kZXYgKmRldik7DQo+ICsNCj4gKyNkZWZpbmUgUkVHSVNURVJfVlBD SV9JTklUKHgpIFwNCj4gKyAgc3RhdGljIGNvbnN0IHZwY2lfcmVnaXN0ZXJfaW5pdF90IHgjI19l bnRyeSBfX3VzZWRfc2VjdGlvbigiLmRhdGEudnBjaSIpID0NCj4geA0KPiArDQo+ICsvKiBBZGQg dlBDSSBoYW5kbGVycyB0byBkZXZpY2UuICovDQo+ICtpbnQgeGVuX3ZwY2lfYWRkX2hhbmRsZXJz KHN0cnVjdCBwY2lfZGV2ICpkZXYpOw0KPiArDQo+ICsvKiBBZGQvcmVtb3ZlIGEgcmVnaXN0ZXIg aGFuZGxlci4gKi8NCj4gK2ludCB4ZW5fdnBjaV9hZGRfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYg KnBkZXYsIHZwY2lfcmVhZF90DQo+IHJlYWRfaGFuZGxlciwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgdnBjaV93cml0ZV90IHdyaXRlX2hhbmRsZXIsIHVuc2lnbmVkIGludCBvZmZzZXQs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplLCB2b2lkICpk YXRhKTsNCj4gK2ludCB4ZW5fdnBjaV9yZW1vdmVfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBk ZXYsIHVuc2lnbmVkIGludCBvZmZzZXQpOw0KPiArDQo+ICsvKiBHZW5lcmljIHJlYWQvd3JpdGUg aGFuZGxlcnMgZm9yIHRoZSBQQ0kgY29uZmlnIHNwYWNlLiAqLw0KPiAraW50IHhlbl92cGNpX3Jl YWQodW5zaWduZWQgaW50IHNlZywgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmZu LA0KPiArICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZywgdWludDMyX3Qgc2l6ZSwg dWludDMyX3QgKmRhdGEpOw0KPiAraW50IHhlbl92cGNpX3dyaXRlKHVuc2lnbmVkIGludCBzZWcs IHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbiwNCj4gKyAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBkYXRhKTsNCj4g Kw0KPiArc3RydWN0IHZwY2kgew0KPiArICAgIC8qIFJvb3QgcG9pbnRlciBmb3IgdGhlIHRyZWUg b2YgdlBDSSBoYW5kbGVycy4gKi8NCj4gKyAgICBzdHJ1Y3QgcmJfcm9vdCBoYW5kbGVyczsNCj4g K307DQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+ICsvKg0KPiArICogTG9jYWwgdmFyaWFibGVzOg0K PiArICogbW9kZTogQw0KPiArICogYy1maWxlLXN0eWxlOiAiQlNEIg0KPiArICogYy1iYXNpYy1v ZmZzZXQ6IDQNCj4gKyAqIHRhYi13aWR0aDogNA0KPiArICogaW5kZW50LXRhYnMtbW9kZTogbmls DQo+ICsgKiBFbmQ6DQo+ICsgKi8NCj4gKw0KPiAtLQ0KPiAyLjExLjAgKEFwcGxlIEdpdC04MSkN Cg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==