From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v2 20/30] xen/x86: add the basic infrastructure to import QEMU passthrough code Date: Mon, 3 Oct 2016 09:54:54 +0000 Message-ID: <52d5b45403534a9ca27a55f1859d61ab@AMSPEX02CL03.citrite.net> References: <1474991845-27962-1-git-send-email-roger.pau@citrix.com> <1474991845-27962-21-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bqzxa-0000yX-Cl for xen-devel@lists.xenproject.org; Mon, 03 Oct 2016 09:54:58 +0000 In-Reply-To: <1474991845-27962-21-git-send-email-roger.pau@citrix.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , "boris.ostrovsky@oracle.com" , Roger Pau Monne , Jan Beulich List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSb2dlciBQYXUgTW9ubmUgW21h aWx0bzpyb2dlci5wYXVAY2l0cml4LmNvbV0NCj4gU2VudDogMjcgU2VwdGVtYmVyIDIwMTYgMTY6 NTcNCj4gVG86IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiBDYzoga29ucmFkLndp bGtAb3JhY2xlLmNvbTsgYm9yaXMub3N0cm92c2t5QG9yYWNsZS5jb207IFJvZ2VyIFBhdSBNb25u ZQ0KPiA8cm9nZXIucGF1QGNpdHJpeC5jb20+OyBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5j b20+OyBBbmRyZXcgQ29vcGVyDQo+IDxBbmRyZXcuQ29vcGVyM0BjaXRyaXguY29tPjsgUGF1bCBE dXJyYW50IDxQYXVsLkR1cnJhbnRAY2l0cml4LmNvbT4NCj4gU3ViamVjdDogW1BBVENIIHYyIDIw LzMwXSB4ZW4veDg2OiBhZGQgdGhlIGJhc2ljIGluZnJhc3RydWN0dXJlIHRvIGltcG9ydA0KPiBR RU1VIHBhc3N0aHJvdWdoIGNvZGUNCj4gDQo+IE1vc3Qgb2YgdGhpcyBjb2RlIGhhcyBiZWVuIHBp Y2tlZCB1cCBmcm9tIFFFTVUgYW5kIG1vZGlmaWVkIHNvIGl0IGNhbiBiZQ0KPiBwbHVnZ2VkIGlu dG8gdGhlIGludGVybmFsIFhlbiBJTyBoYW5kbGVycy4gVGhlIHN0cnVjdHVyZSBvZiB0aGUgaGFu ZGxlcnMgaGFzDQo+IGJlZW4ga2VlcCBxdWl0ZSBzaW1pbGFyIHRvIFFFTVUsIHNvIGV4aXN0aW5n IGhhbmRsZXJzIGNhbiBiZSBpbXBvcnRlZA0KPiB3aXRob3V0IGEgbG90IG9mIGVmZm9ydC4NCj4g DQoNCklmIHlvdSBsaWZ0ZWQgY29kZSBmcm9tIFFFTVUgdGhlbiBvbmUgYXNzdW1lcyB0aGVyZSBp cyBubyBwcm9ibGVtIHdpdGggbGljZW5zZSwgYnV0IGRvIHlvdSBuZWVkIHRvIGFtZW5kIGNvcHly aWdodHMgZm9yIGFueSBvZiB0aGUgZmlsZXMgd2hlcmUgeW91IHB1dCB0aGUgY29kZT8NCg0KPiBT aWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5wYXVAY2l0cml4LmNvbT4NCj4g LS0tDQo+IENjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+DQo+IENjOiBBbmRyZXcg Q29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPg0KPiBDYzogUGF1bCBEdXJyYW50IDxw YXVsLmR1cnJhbnRAY2l0cml4LmNvbT4NCj4gLS0tDQo+ICBkb2NzL21pc2MveGVuLWNvbW1hbmQt bGluZS5tYXJrZG93biB8ICAgOCArDQo+ICB4ZW4vYXJjaC94ODYvaHZtL2h2bS5jICAgICAgICAg ICAgICB8ICAgMiArDQo+ICB4ZW4vYXJjaC94ODYvaHZtL2lvLmMgICAgICAgICAgICAgICB8IDYy MQ0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIHhlbi9pbmNsdWRl L2FzbS14ODYvaHZtL2RvbWFpbi5oICAgIHwgICA0ICsNCj4gIHhlbi9pbmNsdWRlL2FzbS14ODYv aHZtL2lvLmggICAgICAgIHwgMTc2ICsrKysrKysrKysNCj4gIHhlbi9pbmNsdWRlL3hlbi9wY2ku aCAgICAgICAgICAgICAgIHwgICA1ICsNCj4gIDYgZmlsZXMgY2hhbmdlZCwgODE2IGluc2VydGlv bnMoKykNCj4gDQo+IGRpZmYgLS1naXQgYS9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5tYXJr ZG93biBiL2RvY3MvbWlzYy94ZW4tDQo+IGNvbW1hbmQtbGluZS5tYXJrZG93bg0KPiBpbmRleCA1 OWQ3MjEwLi43ODEzMGM4IDEwMDY0NA0KPiAtLS0gYS9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGlu ZS5tYXJrZG93bg0KPiArKysgYi9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5tYXJrZG93bg0K PiBAQCAtNjcwLDYgKzY3MCwxNCBAQCBGbGFnIHRoYXQgbWFrZXMgYSA2NGJpdCBkb20wIGJvb3Qg aW4gUFZIIG1vZGUuIE5vDQo+IDMyYml0IHN1cHBvcnQgYXQgcHJlc2VudC4NCj4gDQo+ICBGbGFn IHRoYXQgbWFrZXMgYSBkb20wIGJvb3QgaW4gUFZIdjIgbW9kZS4NCj4gDQo+ICsjIyMgZG9tMHBl cm1pc3NpdmUNCj4gKz4gYD0gPGJvb2xlYW4+YA0KPiArDQo+ICs+IERlZmF1bHQ6IGB0cnVlYA0K PiArDQo+ICtTZWxlY3QgbW9kZSBvZiBQQ0kgcGFzcy10aHJvdWdoIHdoZW4gdXNpbmcgYSBQVkh2 MiBEb20wLCBlaXRoZXINCj4gcGVybWlzc2l2ZSBvcg0KPiArbm90Lg0KPiArDQo+ICAjIyMgZHR1 YXJ0IChBUk0pDQo+ICA+IGA9IHBhdGggWzpvcHRpb25zXWANCj4gDQo+IGRpZmYgLS1naXQgYS94 ZW4vYXJjaC94ODYvaHZtL2h2bS5jIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYw0KPiBpbmRleCBh MjkxZjgyLi5iYzRmN2JjIDEwMDY0NA0KPiAtLS0gYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jDQo+ ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMNCj4gQEAgLTYzMiw2ICs2MzIsOCBAQCBpbnQg aHZtX2RvbWFpbl9pbml0aWFsaXNlKHN0cnVjdCBkb21haW4gKmQpDQo+ICAgICAgICAgICAgICBn b3RvIGZhaWwxOw0KPiAgICAgICAgICB9DQo+ICAgICAgICAgIG1lbXNldChkLT5hcmNoLmh2bV9k b21haW4uaW9fYml0bWFwLCB+MCwgSFZNX0lPQklUTUFQX1NJWkUpOw0KPiArICAgICAgICBJTklU X0xJU1RfSEVBRCgmZC0+YXJjaC5odm1fZG9tYWluLnB0X2RldmljZXMpOw0KPiArICAgICAgICBy d2xvY2tfaW5pdCgmZC0+YXJjaC5odm1fZG9tYWluLnB0X2xvY2spOw0KPiAgICAgIH0NCj4gICAg ICBlbHNlDQo+ICAgICAgICAgIGQtPmFyY2guaHZtX2RvbWFpbi5pb19iaXRtYXAgPSBodm1faW9f Yml0bWFwOw0KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9pby5jIGIveGVuL2FyY2gv eDg2L2h2bS9pby5jDQo+IGluZGV4IDMxZDU0ZGMuLjdkZTFkZTMgMTAwNjQ0DQo+IC0tLSBhL3hl bi9hcmNoL3g4Ni9odm0vaW8uYw0KPiArKysgYi94ZW4vYXJjaC94ODYvaHZtL2lvLmMNCj4gQEAg LTQ2LDYgKzQ2LDEwIEBADQo+ICAjaW5jbHVkZSA8eGVuL2lvY2FwLmg+DQo+ICAjaW5jbHVkZSA8 cHVibGljL2h2bS9pb3JlcS5oPg0KPiANCj4gKy8qIFNldCBwZXJtaXNzaXZlIG1vZGUgZm9yIEhW TSBEb20wIFBDSSBwYXNzLXRocm91Z2ggYnkgZGVmYXVsdCAqLw0KPiArc3RhdGljIGJvb2xfdCBv cHRfZG9tMHBlcm1pc3NpdmUgPSAxOw0KPiArYm9vbGVhbl9wYXJhbSgiZG9tMHBlcm1pc3NpdmUi LCBvcHRfZG9tMHBlcm1pc3NpdmUpOw0KPiArDQo+ICB2b2lkIHNlbmRfdGltZW9mZnNldF9yZXEo dW5zaWduZWQgbG9uZyB0aW1lb2ZmKQ0KPiAgew0KPiAgICAgIGlvcmVxX3QgcCA9IHsNCj4gQEAg LTI1OCwxMiArMjYyLDQwMyBAQCBzdGF0aWMgYm9vbF90IGh3X2RwY2lfcG9ydGlvX2FjY2VwdChj b25zdCBzdHJ1Y3QNCj4gaHZtX2lvX2hhbmRsZXIgKmhhbmRsZXIsDQo+ICAgICAgcmV0dXJuIDA7 DQo+ICB9DQo+IA0KPiArc3RhdGljIHN0cnVjdCBodm1fcHRfZGV2aWNlICpod19kcGNpX2dldF9k ZXZpY2Uoc3RydWN0IGRvbWFpbiAqZCkNCj4gK3sNCj4gKyAgICB1aW50OF90IGJ1cywgc2xvdCwg ZnVuYzsNCj4gKyAgICB1aW50MzJfdCBhZGRyOw0KPiArICAgIHN0cnVjdCBodm1fcHRfZGV2aWNl ICpkZXY7DQo+ICsNCj4gKyAgICAvKiBEZWNvZGUgYnVzLCBzbG90IGFuZCBmdW5jLiAqLw0KPiAr ICAgIGFkZHIgPSBDRjhfQkRGKGQtPmFyY2gucGNpX2NmOCk7DQo+ICsgICAgYnVzID0gUENJX0JV UyhhZGRyKTsNCj4gKyAgICBzbG90ID0gUENJX1NMT1QoYWRkcik7DQo+ICsgICAgZnVuYyA9IFBD SV9GVU5DKGFkZHIpOw0KPiArDQo+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSggZGV2LCAmZC0+ YXJjaC5odm1fZG9tYWluLnB0X2RldmljZXMsIGVudHJpZXMgKQ0KPiArICAgIHsNCj4gKyAgICAg ICAgaWYgKCBkZXYtPnBkZXYtPnNlZyAhPSAwIHx8IGRldi0+cGRldi0+YnVzICE9IGJ1cyB8fA0K PiArICAgICAgICAgICAgIGRldi0+cGRldi0+ZGV2Zm4gIT0gUENJX0RFVkZOKHNsb3QsZnVuYykg KQ0KPiArICAgICAgICAgICAgY29udGludWU7DQo+ICsNCj4gKyAgICAgICAgcmV0dXJuIGRldjsN Cj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyogRGlz cGF0Y2hlcnMgKi8NCj4gKw0KPiArLyogRmluZCBlbXVsYXRlIHJlZ2lzdGVyIGdyb3VwIGVudHJ5 ICovDQo+ICtzdHJ1Y3QgaHZtX3B0X3JlZ19ncm91cCAqaHZtX3B0X2ZpbmRfcmVnX2dycChzdHJ1 Y3QgaHZtX3B0X2RldmljZQ0KPiAqZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHJlc3MpDQo+ICt7DQo+ICsgICAgc3RydWN0IGh2 bV9wdF9yZWdfZ3JvdXAgKmVudHJ5ID0gTlVMTDsNCj4gKw0KPiArICAgIC8qIEZpbmQgcmVnaXN0 ZXIgZ3JvdXAgZW50cnkgKi8NCj4gKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KCBlbnRyeSwgJmQt PnJlZ2lzdGVyX2dyb3VwcywgZW50cmllcyApDQo+ICsgICAgew0KPiArICAgICAgICAvKiBjaGVj ayBhZGRyZXNzICovDQo+ICsgICAgICAgIGlmICggKGVudHJ5LT5iYXNlX29mZnNldCA8PSBhZGRy ZXNzKQ0KPiArICAgICAgICAgICAgICYmICgoZW50cnktPmJhc2Vfb2Zmc2V0ICsgZW50cnktPnNp emUpID4gYWRkcmVzcykgKQ0KPiArICAgICAgICAgICAgcmV0dXJuIGVudHJ5Ow0KPiArICAgIH0N Cj4gKw0KPiArICAgIC8qIEdyb3VwIGVudHJ5IG5vdCBmb3VuZCAqLw0KPiArICAgIHJldHVybiBO VUxMOw0KPiArfQ0KPiArDQo+ICsvKiBGaW5kIGVtdWxhdGUgcmVnaXN0ZXIgZW50cnkgKi8NCj4g K3N0cnVjdCBodm1fcHRfcmVnICpodm1fcHRfZmluZF9yZWcoc3RydWN0IGh2bV9wdF9yZWdfZ3Jv dXAgKnJlZ19ncnAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz Ml90IGFkZHJlc3MpDQo+ICt7DQo+ICsgICAgc3RydWN0IGh2bV9wdF9yZWcgKnJlZ19lbnRyeSA9 IE5VTEw7DQo+ICsgICAgc3RydWN0IGh2bV9wdF9yZWdfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7 DQo+ICsgICAgdWludDMyX3QgcmVhbF9vZmZzZXQgPSAwOw0KPiArDQo+ICsgICAgLyogRmluZCBy ZWdpc3RlciBlbnRyeSAqLw0KPiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoIHJlZ19lbnRyeSwg JnJlZ19ncnAtPnJlZ2lzdGVycywgZW50cmllcyApDQo+ICsgICAgew0KPiArICAgICAgICBoYW5k bGVyID0gcmVnX2VudHJ5LT5oYW5kbGVyOw0KPiArICAgICAgICByZWFsX29mZnNldCA9IHJlZ19n cnAtPmJhc2Vfb2Zmc2V0ICsgaGFuZGxlci0+b2Zmc2V0Ow0KPiArICAgICAgICAvKiBDaGVjayBh ZGRyZXNzICovDQo+ICsgICAgICAgIGlmICggKHJlYWxfb2Zmc2V0IDw9IGFkZHJlc3MpDQo+ICsg ICAgICAgICAgICAgJiYgKChyZWFsX29mZnNldCArIGhhbmRsZXItPnNpemUpID4gYWRkcmVzcykg KQ0KPiArICAgICAgICAgICAgcmV0dXJuIHJlZ19lbnRyeTsNCj4gKyAgICB9DQo+ICsNCj4gKyAg ICByZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBodm1fcHRfcGNpX2NvbmZp Z19hY2Nlc3NfY2hlY2soc3RydWN0IGh2bV9wdF9kZXZpY2UgKmQsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyLCBpbnQgbGVuKQ0KPiAr ew0KPiArICAgIC8qIENoZWNrIG9mZnNldCByYW5nZSAqLw0KPiArICAgIGlmICggYWRkciA+PSAw eEZGICkNCj4gKyAgICB7DQo+ICsgICAgICAgIHByaW50a19wZGV2KGQtPnBkZXYsIFhFTkxPR19E RUJVRywNCj4gKyAgICAgICAgICAgICJmYWlsZWQgdG8gYWNjZXNzIHJlZ2lzdGVyIHdpdGggb2Zm c2V0IGV4Y2VlZGluZyAweEZGLiAiDQo+ICsgICAgICAgICAgICAiKGFkZHI6IDB4JTAyeCwgbGVu OiAlZClcbiIsIGFkZHIsIGxlbik7DQo+ICsgICAgICAgIHJldHVybiAtRURPTTsNCj4gKyAgICB9 DQo+ICsNCj4gKyAgICAvKiBDaGVjayByZWFkIHNpemUgKi8NCj4gKyAgICBpZiAoIChsZW4gIT0g MSkgJiYgKGxlbiAhPSAyKSAmJiAobGVuICE9IDQpICkNCj4gKyAgICB7DQo+ICsgICAgICAgIHBy aW50a19wZGV2KGQtPnBkZXYsIFhFTkxPR19ERUJVRywNCj4gKyAgICAgICAgICAgICJmYWlsZWQg dG8gYWNjZXNzIHJlZ2lzdGVyIHdpdGggaW52YWxpZCBhY2Nlc3MgbGVuZ3RoLiAiDQo+ICsgICAg ICAgICAgICAiKGFkZHI6IDB4JTAyeCwgbGVuOiAlZClcbiIsIGFkZHIsIGxlbik7DQo+ICsgICAg ICAgIHJldHVybiAtRUlOVkFMOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8qIENoZWNrIG9mZnNl dCBhbGlnbm1lbnQgKi8NCj4gKyAgICBpZiAoIGFkZHIgJiAobGVuIC0gMSkgKQ0KPiArICAgIHsN Cj4gKyAgICAgICAgcHJpbnRrX3BkZXYoZC0+cGRldiwgWEVOTE9HX0RFQlVHLA0KPiArICAgICAg ICAgICAgImZhaWxlZCB0byBhY2Nlc3MgcmVnaXN0ZXIgd2l0aCBpbnZhbGlkIGFjY2VzcyBzaXpl ICINCj4gKyAgICAgICAgICAgICJhbGlnbm1lbnQuIChhZGRyOiAweCUwMngsIGxlbjogJWQpXG4i LCBhZGRyLCBsZW4pOw0KPiArICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBodm1fcHRfcGNpX3Jl YWRfY29uZmlnKHN0cnVjdCBodm1fcHRfZGV2aWNlICpkLCB1aW50MzJfdCBhZGRyLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpkYXRhLCBpbnQgbGVuKQ0K PiArew0KPiArICAgIHVpbnQzMl90IHZhbCA9IDA7DQo+ICsgICAgc3RydWN0IGh2bV9wdF9yZWdf Z3JvdXAgKnJlZ19ncnBfZW50cnkgPSBOVUxMOw0KPiArICAgIHN0cnVjdCBodm1fcHRfcmVnICpy ZWdfZW50cnkgPSBOVUxMOw0KPiArICAgIGludCByYyA9IDA7DQo+ICsgICAgaW50IGVtdWxfbGVu ID0gMDsNCj4gKyAgICB1aW50MzJfdCBmaW5kX2FkZHIgPSBhZGRyOw0KPiArICAgIHVuc2lnbmVk IGludCBzZWcgPSBkLT5wZGV2LT5zZWc7DQo+ICsgICAgdW5zaWduZWQgaW50IGJ1cyA9IGQtPnBk ZXYtPmJ1czsNCj4gKyAgICB1bnNpZ25lZCBpbnQgc2xvdCA9IFBDSV9TTE9UKGQtPnBkZXYtPmRl dmZuKTsNCj4gKyAgICB1bnNpZ25lZCBpbnQgZnVuYyA9IFBDSV9GVU5DKGQtPnBkZXYtPmRldmZu KTsNCj4gKw0KPiArICAgIC8qIFNhbml0eSBjaGVja3MuICovDQo+ICsgICAgaWYgKCBodm1fcHRf cGNpX2NvbmZpZ19hY2Nlc3NfY2hlY2soZCwgYWRkciwgbGVuKSApDQo+ICsgICAgICAgIHJldHVy biBYODZFTVVMX1VOSEFORExFQUJMRTsNCj4gKw0KPiArICAgIC8qIEZpbmQgcmVnaXN0ZXIgZ3Jv dXAgZW50cnkuICovDQo+ICsgICAgcmVnX2dycF9lbnRyeSA9IGh2bV9wdF9maW5kX3JlZ19ncnAo ZCwgYWRkcik7DQo+ICsgICAgaWYgKCByZWdfZ3JwX2VudHJ5ID09IE5VTEwgKQ0KPiArICAgICAg ICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7DQo+ICsNCj4gKyAgICAvKiBSZWFkIEkvTyBk ZXZpY2UgcmVnaXN0ZXIgdmFsdWUuICovDQo+ICsgICAgc3dpdGNoKCBsZW4gKQ0KPiArICAgIHsN Cj4gKyAgICBjYXNlIDE6DQo+ICsgICAgICAgIHZhbCA9IHBjaV9jb25mX3JlYWQ4KHNlZywgYnVz LCBzbG90LCBmdW5jLCBhZGRyKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSAyOg0K PiArICAgICAgICB2YWwgPSBwY2lfY29uZl9yZWFkMTYoc2VnLCBidXMsIHNsb3QsIGZ1bmMsIGFk ZHIpOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIDQ6DQo+ICsgICAgICAgIHZhbCA9 IHBjaV9jb25mX3JlYWQzMihzZWcsIGJ1cywgc2xvdCwgZnVuYywgYWRkcik7DQo+ICsgICAgICAg IGJyZWFrOw0KPiArICAgIGRlZmF1bHQ6DQo+ICsgICAgICAgIEJVRygpOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIC8qIEFkanVzdCB0aGUgcmVhZCB2YWx1ZSB0byBhcHByb3ByaWF0ZSBDRkMtQ0ZG IHdpbmRvdy4gKi8NCj4gKyAgICB2YWwgPDw9IChhZGRyICYgMykgPDwgMzsNCj4gKyAgICBlbXVs X2xlbiA9IGxlbjsNCj4gKw0KPiArICAgIC8qIExvb3AgYXJvdW5kIHRoZSBndWVzdCByZXF1ZXN0 ZWQgc2l6ZS4gKi8NCj4gKyAgICB3aGlsZSAoIGVtdWxfbGVuID4gMCApDQo+ICsgICAgew0KPiAr ICAgICAgICAvKiBGaW5kIHJlZ2lzdGVyIGVudHJ5IHRvIGJlIGVtdWxhdGVkLiAqLw0KPiArICAg ICAgICByZWdfZW50cnkgPSBodm1fcHRfZmluZF9yZWcocmVnX2dycF9lbnRyeSwgZmluZF9hZGRy KTsNCj4gKyAgICAgICAgaWYgKCByZWdfZW50cnkgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAg ICAgICBzdHJ1Y3QgaHZtX3B0X3JlZ19oYW5kbGVyICpoYW5kbGVyID0gcmVnX2VudHJ5LT5oYW5k bGVyOw0KPiArICAgICAgICAgICAgdWludDMyX3QgcmVhbF9vZmZzZXQgPSByZWdfZ3JwX2VudHJ5 LT5iYXNlX29mZnNldCArIGhhbmRsZXItDQo+ID5vZmZzZXQ7DQo+ICsgICAgICAgICAgICB1aW50 MzJfdCB2YWxpZF9tYXNrID0gMHhGRkZGRkZGRiA+PiAoKDQgLSBlbXVsX2xlbikgPDwgMyk7DQoN CkZpZ3VyaW5nIG91dCB3aGV0aGVyIHRoaXMgbWFrZXMgc2Vuc2UgbWFrZXMgbXkgYnJhaW4gaHVy dC4gQW55IGNoYW5jZSBvZiBzb21lIG1hY3JvIG9yIGF0IGxlYXN0IGNvbW1lbnRzIGFib3V0IHRo aXM/DQoNCj4gKyAgICAgICAgICAgIHVpbnQ4X3QgKnB0cl92YWwgPSBOVUxMOw0KPiArDQo+ICsg ICAgICAgICAgICB2YWxpZF9tYXNrIDw8PSAoZmluZF9hZGRyIC0gcmVhbF9vZmZzZXQpIDw8IDM7 DQo+ICsgICAgICAgICAgICBwdHJfdmFsID0gKHVpbnQ4X3QgKikmdmFsICsgKHJlYWxfb2Zmc2V0 ICYgMyk7DQo+ICsNCj4gKyAgICAgICAgICAgIC8qIERvIGVtdWxhdGlvbiBiYXNlZCBvbiByZWdp c3RlciBzaXplLiAqLw0KPiArICAgICAgICAgICAgc3dpdGNoICggaGFuZGxlci0+c2l6ZSApDQo+ ICsgICAgICAgICAgICB7DQo+ICsgICAgICAgICAgICBjYXNlIDE6DQo+ICsgICAgICAgICAgICAg ICAgaWYgKCBoYW5kbGVyLT51LmIucmVhZCApDQo+ICsgICAgICAgICAgICAgICAgICAgIHJjID0g aGFuZGxlci0+dS5iLnJlYWQoZCwgcmVnX2VudHJ5LCBwdHJfdmFsLCB2YWxpZF9tYXNrKTsNCj4g KyAgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgIGNhc2UgMjoNCj4gKyAgICAg ICAgICAgICAgICBpZiAoIGhhbmRsZXItPnUudy5yZWFkICkNCj4gKyAgICAgICAgICAgICAgICAg ICAgcmMgPSBoYW5kbGVyLT51LncucmVhZChkLCByZWdfZW50cnksICh1aW50MTZfdCAqKXB0cl92 YWwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRf bWFzayk7DQo+ICsgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgICAgICBjYXNlIDQ6 DQo+ICsgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyLT51LmR3LnJlYWQgKQ0KPiArICAgICAg ICAgICAgICAgICAgICByYyA9IGhhbmRsZXItPnUuZHcucmVhZChkLCByZWdfZW50cnksICh1aW50 MzJfdCAqKXB0cl92YWwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZhbGlkX21hc2spOw0KPiArICAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAg ICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICBpZiAoIHJjIDwgMCApDQo+ICsgICAgICAgICAg ICB7DQo+ICsgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgcmVhZCBlbXVsYXRpb24sIHNodXR0aW5nIGRv d24gZG9tYWluXG4iKTsNCj4gKyAgICAgICAgICAgICAgICBkb21haW5fY3Jhc2goY3VycmVudC0+ ZG9tYWluKTsNCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7 DQo+ICsgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgIC8qIENhbGN1bGF0ZSBuZXh0 IGFkZHJlc3MgdG8gZmluZC4gKi8NCj4gKyAgICAgICAgICAgIGVtdWxfbGVuIC09IGhhbmRsZXIt PnNpemU7DQo+ICsgICAgICAgICAgICBpZiAoIGVtdWxfbGVuID4gMCApDQo+ICsgICAgICAgICAg ICAgICAgZmluZF9hZGRyID0gcmVhbF9vZmZzZXQgKyBoYW5kbGVyLT5zaXplOw0KPiArICAgICAg ICB9DQo+ICsgICAgICAgIGVsc2UNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgICAgLyogTm90 aGluZyB0byBkbyB3aXRoIHBhc3N0aHJvdWdoIHR5cGUgcmVnaXN0ZXIgKi8NCj4gKyAgICAgICAg ICAgIGVtdWxfbGVuLS07DQo+ICsgICAgICAgICAgICBmaW5kX2FkZHIrKzsNCj4gKyAgICAgICAg fQ0KPiArICAgIH0NCj4gKw0KPiArICAgIC8qIE5lZWQgdG8gc2hpZnQgYmFjayBiZWZvcmUgcmV0 dXJuaW5nIHRoZW0gdG8gcGNpIGJ1cyBlbXVsYXRvciAqLw0KPiArICAgIHZhbCA+Pj0gKChhZGRy ICYgMykgPDwgMyk7DQo+ICsgICAgKmRhdGEgPSB2YWw7DQo+ICsNCj4gKyAgICByZXR1cm4gWDg2 RU1VTF9PS0FZOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGh2bV9wdF9wY2lfd3JpdGVfY29u ZmlnKHN0cnVjdCBodm1fcHRfZGV2aWNlICpkLCB1aW50MzJfdA0KPiBhZGRyLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsLCBpbnQgbGVuKQ0KPiAr ew0KPiArICAgIGludCBpbmRleCA9IDA7DQo+ICsgICAgc3RydWN0IGh2bV9wdF9yZWdfZ3JvdXAg KnJlZ19ncnBfZW50cnkgPSBOVUxMOw0KPiArICAgIGludCByYyA9IDA7DQo+ICsgICAgdWludDMy X3QgcmVhZF92YWwgPSAwLCB3Yl9tYXNrOw0KPiArICAgIGludCBlbXVsX2xlbiA9IDA7DQo+ICsg ICAgc3RydWN0IGh2bV9wdF9yZWcgKnJlZ19lbnRyeSA9IE5VTEw7DQo+ICsgICAgdWludDMyX3Qg ZmluZF9hZGRyID0gYWRkcjsNCj4gKyAgICBzdHJ1Y3QgaHZtX3B0X3JlZ19oYW5kbGVyICpoYW5k bGVyID0gTlVMTDsNCj4gKyAgICBib29sIHdwX2ZsYWcgPSBmYWxzZTsNCj4gKyAgICB1bnNpZ25l ZCBpbnQgc2VnID0gZC0+cGRldi0+c2VnOw0KPiArICAgIHVuc2lnbmVkIGludCBidXMgPSBkLT5w ZGV2LT5idXM7DQo+ICsgICAgdW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChkLT5wZGV2LT5k ZXZmbik7DQo+ICsgICAgdW5zaWduZWQgaW50IGZ1bmMgPSBQQ0lfRlVOQyhkLT5wZGV2LT5kZXZm bik7DQo+ICsNCj4gKyAgICAvKiBTYW5pdHkgY2hlY2tzLiAqLw0KPiArICAgIGlmICggaHZtX3B0 X3BjaV9jb25maWdfYWNjZXNzX2NoZWNrKGQsIGFkZHIsIGxlbikgKQ0KPiArICAgICAgICByZXR1 cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7DQo+ICsNCj4gKyAgICAvKiBGaW5kIHJlZ2lzdGVyIGdy b3VwIGVudHJ5LiAqLw0KPiArICAgIHJlZ19ncnBfZW50cnkgPSBodm1fcHRfZmluZF9yZWdfZ3Jw KGQsIGFkZHIpOw0KPiArICAgIGlmICggcmVnX2dycF9lbnRyeSA9PSBOVUxMICkNCj4gKyAgICAg ICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOw0KPiArDQo+ICsgICAgLyogUmVhZCBJL08g ZGV2aWNlIHJlZ2lzdGVyIHZhbHVlLiAqLw0KPiArICAgIHN3aXRjaCggbGVuICkNCj4gKyAgICB7 DQo+ICsgICAgY2FzZSAxOg0KPiArICAgICAgICByZWFkX3ZhbCA9IHBjaV9jb25mX3JlYWQ4KHNl ZywgYnVzLCBzbG90LCBmdW5jLCBhZGRyKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2Fz ZSAyOg0KPiArICAgICAgICByZWFkX3ZhbCA9IHBjaV9jb25mX3JlYWQxNihzZWcsIGJ1cywgc2xv dCwgZnVuYywgYWRkcik7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgNDoNCj4gKyAg ICAgICAgcmVhZF92YWwgPSBwY2lfY29uZl9yZWFkMzIoc2VnLCBidXMsIHNsb3QsIGZ1bmMsIGFk ZHIpOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICBkZWZhdWx0Og0KPiArICAgICAgICBCVUco KTsNCj4gKyAgICB9DQo+ICsgICAgd2JfbWFzayA9IDB4RkZGRkZGRkYgPj4gKCg0IC0gbGVuKSA8 PCAzKTsNCj4gKw0KPiArICAgIC8qIEFkanVzdCB0aGUgcmVhZCBhbmQgd3JpdGUgdmFsdWUgdG8g YXBwcm9wcmlhdGUgQ0ZDLUNGRiB3aW5kb3cgKi8NCj4gKyAgICByZWFkX3ZhbCA8PD0gKGFkZHIg JiAzKSA8PCAzOw0KPiArICAgIHZhbCA8PD0gKGFkZHIgJiAzKSA8PCAzOw0KPiArICAgIGVtdWxf bGVuID0gbGVuOw0KPiArDQo+ICsgICAgLyogTG9vcCBhcm91bmQgdGhlIGd1ZXN0IHJlcXVlc3Rl ZCBzaXplICovDQo+ICsgICAgd2hpbGUgKCBlbXVsX2xlbiA+IDAgKQ0KPiArICAgIHsNCj4gKyAg ICAgICAgLyogRmluZCByZWdpc3RlciBlbnRyeSB0byBiZSBlbXVsYXRlZCAqLw0KPiArICAgICAg ICByZWdfZW50cnkgPSBodm1fcHRfZmluZF9yZWcocmVnX2dycF9lbnRyeSwgZmluZF9hZGRyKTsN Cj4gKyAgICAgICAgaWYgKCByZWdfZW50cnkgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAg ICBoYW5kbGVyID0gcmVnX2VudHJ5LT5oYW5kbGVyOw0KPiArICAgICAgICAgICAgdWludDMyX3Qg cmVhbF9vZmZzZXQgPSByZWdfZ3JwX2VudHJ5LT5iYXNlX29mZnNldCArIGhhbmRsZXItDQo+ID5v ZmZzZXQ7DQo+ICsgICAgICAgICAgICB1aW50MzJfdCB2YWxpZF9tYXNrID0gMHhGRkZGRkZGRiA+ PiAoKDQgLSBlbXVsX2xlbikgPDwgMyk7DQo+ICsgICAgICAgICAgICB1aW50OF90ICpwdHJfdmFs ID0gTlVMTDsNCj4gKyAgICAgICAgICAgIHVpbnQzMl90IHdwX21hc2sgPSBoYW5kbGVyLT5lbXVf bWFzayB8IGhhbmRsZXItPnJvX21hc2s7DQo+ICsNCj4gKyAgICAgICAgICAgIHZhbGlkX21hc2sg PDw9IChmaW5kX2FkZHIgLSByZWFsX29mZnNldCkgPDwgMzsNCj4gKyAgICAgICAgICAgIHB0cl92 YWwgPSAodWludDhfdCAqKSZ2YWwgKyAocmVhbF9vZmZzZXQgJiAzKTsNCj4gKyAgICAgICAgICAg IGlmICggIWQtPnBlcm1pc3NpdmUgKQ0KPiArICAgICAgICAgICAgICAgIHdwX21hc2sgfD0gaGFu ZGxlci0+cmVzX21hc2s7DQo+ICsgICAgICAgICAgICBpZiAoIHdwX21hc2sgPT0gKDB4RkZGRkZG RkYgPj4gKCg0IC0gaGFuZGxlci0+c2l6ZSkgPDwgMykpICkNCj4gKyAgICAgICAgICAgICAgICB3 Yl9tYXNrICY9IH4oKHdwX21hc2sgPj4gKChmaW5kX2FkZHIgLSByZWFsX29mZnNldCkgPDwgMykp DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICgobGVuIC0gZW11bF9sZW4pIDw8 IDMpKTsNCj4gKw0KPiArICAgICAgICAgICAgLyogRG8gZW11bGF0aW9uIGJhc2VkIG9uIHJlZ2lz dGVyIHNpemUgKi8NCj4gKyAgICAgICAgICAgIHN3aXRjaCAoIGhhbmRsZXItPnNpemUgKQ0KPiAr ICAgICAgICAgICAgew0KPiArICAgICAgICAgICAgY2FzZSAxOg0KPiArICAgICAgICAgICAgICAg IGlmICggaGFuZGxlci0+dS5iLndyaXRlICkNCj4gKyAgICAgICAgICAgICAgICAgICAgcmMgPSBo YW5kbGVyLT51LmIud3JpdGUoZCwgcmVnX2VudHJ5LCBwdHJfdmFsLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3ZhbCA+PiAoKHJlYWxfb2Zmc2V0 ICYgMykgPDwgMyksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZhbGlkX21hc2spOw0KPiArICAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICAg ICAgY2FzZSAyOg0KPiArICAgICAgICAgICAgICAgIGlmICggaGFuZGxlci0+dS53LndyaXRlICkN Cj4gKyAgICAgICAgICAgICAgICAgICAgcmMgPSBoYW5kbGVyLT51Lncud3JpdGUoZCwgcmVnX2Vu dHJ5LCAodWludDE2X3QgKilwdHJfdmFsLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocmVhZF92YWwgPj4gKChyZWFsX29mZnNldCAmIDMpIDw8IDMpKSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRfbWFz ayk7DQo+ICsgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgICAgICBjYXNlIDQ6DQo+ ICsgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyLT51LmR3LndyaXRlICkNCj4gKyAgICAgICAg ICAgICAgICAgICAgcmMgPSBoYW5kbGVyLT51LmR3LndyaXRlKGQsIHJlZ19lbnRyeSwgKHVpbnQz Ml90ICopcHRyX3ZhbCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChyZWFkX3ZhbCA+PiAoKHJlYWxfb2Zmc2V0ICYgMykgPDwgMykpLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRfbWFzayk7DQo+ICsg ICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAg ICAgIGlmICggcmMgPCAwICkNCj4gKyAgICAgICAgICAgIHsNCj4gKyAgICAgICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiSW52 YWxpZCB3cml0ZSBlbXVsYXRpb24sIHNodXR0aW5nIGRvd24gZG9tYWluXG4iKTsNCj4gKyAgICAg ICAgICAgICAgICBkb21haW5fY3Jhc2goY3VycmVudC0+ZG9tYWluKTsNCj4gKyAgICAgICAgICAg ICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7DQo+ICsgICAgICAgICAgICB9DQo+ICsN Cj4gKyAgICAgICAgICAgIC8qIENhbGN1bGF0ZSBuZXh0IGFkZHJlc3MgdG8gZmluZCAqLw0KPiAr ICAgICAgICAgICAgZW11bF9sZW4gLT0gaGFuZGxlci0+c2l6ZTsNCj4gKyAgICAgICAgICAgIGlm ICggZW11bF9sZW4gPiAwICkNCj4gKyAgICAgICAgICAgICAgICBmaW5kX2FkZHIgPSByZWFsX29m ZnNldCArIGhhbmRsZXItPnNpemU7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgZWxzZQ0KPiAr ICAgICAgICB7DQo+ICsgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIHdpdGggcGFzc3Rocm91 Z2ggdHlwZSByZWdpc3RlciAqLw0KPiArICAgICAgICAgICAgaWYgKCAhZC0+cGVybWlzc2l2ZSAp DQo+ICsgICAgICAgICAgICB7DQo+ICsgICAgICAgICAgICAgICAgd2JfbWFzayAmPSB+KDB4ZmYg PDwgKChsZW4gLSBlbXVsX2xlbikgPDwgMykpOw0KPiArICAgICAgICAgICAgICAgIC8qDQo+ICsg ICAgICAgICAgICAgICAgICogVW51c2VkIEJBUnMgd2lsbCBtYWtlIGl0IGhlcmUsIGJ1dCB3ZSBk b24ndCB3YW50IHRvIGlzc3VlDQo+ICsgICAgICAgICAgICAgICAgICogd2FybmluZ3MgZm9yIHdy aXRlcyB0byB0aGVtIChib2d1cyB3cml0ZXMgZ2V0IGRlYWx0IHdpdGgNCj4gKyAgICAgICAgICAg ICAgICAgKiBhYm92ZSkuDQo+ICsgICAgICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICAg ICAgaWYgKCBpbmRleCA8IDAgKQ0KPiArICAgICAgICAgICAgICAgICAgICB3cF9mbGFnID0gdHJ1 ZTsNCj4gKyAgICAgICAgICAgIH0NCj4gKyAgICAgICAgICAgIGVtdWxfbGVuLS07DQo+ICsgICAg ICAgICAgICBmaW5kX2FkZHIrKzsNCj4gKyAgICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAg IC8qIE5lZWQgdG8gc2hpZnQgYmFjayBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHhlbl9ob3N0X3Bj aV9zZXRfYmxvY2sgKi8NCj4gKyAgICB2YWwgPj49IChhZGRyICYgMykgPDwgMzsNCj4gKw0KPiAr ICAgIGlmICggd3BfZmxhZyAmJiAhZC0+cGVybWlzc2l2ZV93YXJuZWQgKQ0KPiArICAgIHsNCj4g KyAgICAgICAgZC0+cGVybWlzc2l2ZV93YXJuZWQgPSB0cnVlOw0KPiArICAgICAgICBnZHByaW50 ayhYRU5MT0dfV0FSTklORywNCj4gKyAgICAgICAgICAiV3JpdGUtYmFjayB0byB1bmtub3duIGZp ZWxkIDB4JTAyeCAocGFydGlhbGx5KSBpbmhpYml0ZWQgKDB4JTAqeClcbiIsDQo+ICsgICAgICAg ICAgYWRkciwgbGVuICogMiwgd2JfbWFzayk7DQo+ICsgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLA0KPiArICAgICAgICAgICJJZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgd29yaywgdHJ5IGVu YWJsaW5nIHBlcm1pc3NpdmUgbW9kZVxuIik7DQo+ICsgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLA0KPiArICAgICAgICAgICIodW5zYWZlKSBhbmQgaWYgaXQgaGVscHMgcmVwb3J0IHRo ZSBwcm9ibGVtIHRvIHhlbi1kZXZlbFxuIik7DQo+ICsgICAgfQ0KPiArICAgIGZvciAoIGluZGV4 ID0gMDsgd2JfbWFzazsgaW5kZXggKz0gbGVuICkNCj4gKyAgICB7DQo+ICsgICAgICAgIC8qIFVu a25vd24gcmVncyBhcmUgcGFzc2VkIHRocm91Z2ggKi8NCj4gKyAgICAgICAgd2hpbGUgKCAhKHdi X21hc2sgJiAweGZmKSApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAgIGluZGV4Kys7DQo+ ICsgICAgICAgICAgICB3Yl9tYXNrID4+PSA4Ow0KPiArICAgICAgICB9DQo+ICsgICAgICAgIGxl biA9IDA7DQo+ICsgICAgICAgIGRvIHsNCj4gKyAgICAgICAgICAgIGxlbisrOw0KPiArICAgICAg ICAgICAgd2JfbWFzayA+Pj0gODsNCj4gKyAgICAgICAgfSB3aGlsZSAoIHdiX21hc2sgJiAweGZm ICk7DQo+ICsNCj4gKyAgICAgICAgc3dpdGNoKCBsZW4gKQ0KPiArICAgICAgICB7DQo+ICsgICAg ICAgIGNhc2UgMToNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgICAgdWludDhfdCB2YWx1ZTsN Cj4gKyAgICAgICAgICAgIG1lbWNweSgmdmFsdWUsICh1aW50OF90ICopJnZhbCArIGluZGV4LCAx KTsNCj4gKyAgICAgICAgICAgIHBjaV9jb25mX3dyaXRlOChzZWcsIGJ1cywgc2xvdCwgZnVuYywg YWRkciArIGluZGV4LCB2YWx1ZSk7DQo+ICsgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAg fQ0KPiArICAgICAgICBjYXNlIDI6DQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAgIHVpbnQx Nl90IHZhbHVlOw0KPiArICAgICAgICAgICAgbWVtY3B5KCZ2YWx1ZSwgKHVpbnQ4X3QgKikmdmFs ICsgaW5kZXgsIDIpOw0KPiArICAgICAgICAgICAgcGNpX2NvbmZfd3JpdGUxNihzZWcsIGJ1cywg c2xvdCwgZnVuYywgYWRkciArIGluZGV4LCB2YWx1ZSk7DQo+ICsgICAgICAgICAgICBicmVhazsN Cj4gKyAgICAgICAgfQ0KPiArICAgICAgICBjYXNlIDQ6DQo+ICsgICAgICAgIHsNCj4gKyAgICAg ICAgICAgIHVpbnQzMl90IHZhbHVlOw0KPiArICAgICAgICAgICAgbWVtY3B5KCZ2YWx1ZSwgKHVp bnQ4X3QgKikmdmFsICsgaW5kZXgsIDQpOw0KPiArICAgICAgICAgICAgcGNpX2NvbmZfd3JpdGUz MihzZWcsIGJ1cywgc2xvdCwgZnVuYywgYWRkciArIGluZGV4LCB2YWx1ZSk7DQo+ICsgICAgICAg ICAgICBicmVhazsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBkZWZhdWx0Og0KPiArICAgICAg ICAgICAgQlVHKCk7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIFg4NkVN VUxfT0tBWTsNCj4gK30NCj4gKw0KPiAgc3RhdGljIGludCBod19kcGNpX3BvcnRpb19yZWFkKGNv bnN0IHN0cnVjdCBodm1faW9faGFuZGxlciAqaGFuZGxlciwNCj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50NjRfdCBhZGRyLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IHNpemUsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg KmRhdGEpDQo+ICB7DQo+ICAgICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyZW50LT5kb21h aW47DQo+ICsgICAgc3RydWN0IGh2bV9wdF9kZXZpY2UgKmRldjsNCj4gKyAgICB1aW50MzJfdCBk YXRhMzI7DQo+ICsgICAgdWludDhfdCByZWc7DQo+ICsgICAgaW50IHJjOw0KPiANCj4gICAgICBp ZiAoIGFkZHIgPT0gMHhjZjggKQ0KPiAgICAgIHsNCj4gQEAgLTI3Niw2ICs2NzEsMjIgQEAgc3Rh dGljIGludCBod19kcGNpX3BvcnRpb19yZWFkKGNvbnN0IHN0cnVjdA0KPiBodm1faW9faGFuZGxl ciAqaGFuZGxlciwNCj4gICAgICBzaXplID0gbWluKHNpemUsIDQgLSAoKHVpbnQzMl90KWFkZHIg JiAzKSk7DQo+ICAgICAgaWYgKCBzaXplID09IDMgKQ0KPiAgICAgICAgICBzaXplID0gMjsNCj4g Kw0KPiArICAgIHJlYWRfbG9jaygmY3VycmQtPmFyY2guaHZtX2RvbWFpbi5wdF9sb2NrKTsNCj4g KyAgICBkZXYgPSBod19kcGNpX2dldF9kZXZpY2UoY3VycmQpOw0KPiArICAgIGlmICggZGV2ICE9 IE5VTEwgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgcmVnID0gKGN1cnJkLT5hcmNoLnBjaV9jZjgg JiAweGZjKSB8IChhZGRyICYgMHgzKTsNCj4gKyAgICAgICAgcmMgPSBodm1fcHRfcGNpX3JlYWRf Y29uZmlnKGRldiwgcmVnLCAmZGF0YTMyLCBzaXplKTsNCj4gKyAgICAgICAgaWYgKCByYyA9PSBY ODZFTVVMX09LQVkgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICByZWFkX3VubG9jaygm Y3VycmQtPmFyY2guaHZtX2RvbWFpbi5wdF9sb2NrKTsNCj4gKyAgICAgICAgICAgICpkYXRhID0g ZGF0YTMyOw0KPiArICAgICAgICAgICAgcmV0dXJuIHJjOw0KPiArICAgICAgICB9DQo+ICsgICAg fQ0KPiArICAgIHJlYWRfdW5sb2NrKCZjdXJyZC0+YXJjaC5odm1fZG9tYWluLnB0X2xvY2spOw0K PiArDQo+ICAgICAgaWYgKCBwY2lfY2ZnX29rKGN1cnJkLCBhZGRyICYgMywgc2l6ZSwgTlVMTCkg KQ0KPiAgICAgICAgICAqZGF0YSA9IHBjaV9jb25mX3JlYWQoY3VycmQtPmFyY2gucGNpX2NmOCwg YWRkciAmIDMsIHNpemUpOw0KPiANCj4gQEAgLTI4OCw3ICs2OTksMTAgQEAgc3RhdGljIGludCBo d19kcGNpX3BvcnRpb193cml0ZShjb25zdCBzdHJ1Y3QNCj4gaHZtX2lvX2hhbmRsZXIgKmhhbmRs ZXIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGEpDQo+ ICB7DQo+ICAgICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyZW50LT5kb21haW47DQo+ICsg ICAgc3RydWN0IGh2bV9wdF9kZXZpY2UgKmRldjsNCj4gICAgICB1aW50MzJfdCBkYXRhMzI7DQo+ ICsgICAgdWludDhfdCByZWc7DQo+ICsgICAgaW50IHJjOw0KPiANCj4gICAgICBpZiAoIGFkZHIg PT0gMHhjZjggKQ0KPiAgICAgIHsNCj4gQEAgLTMwMiwxMiArNzE2LDIxOSBAQCBzdGF0aWMgaW50 IGh3X2RwY2lfcG9ydGlvX3dyaXRlKGNvbnN0IHN0cnVjdA0KPiBodm1faW9faGFuZGxlciAqaGFu ZGxlciwNCj4gICAgICBpZiAoIHNpemUgPT0gMyApDQo+ICAgICAgICAgIHNpemUgPSAyOw0KPiAg ICAgIGRhdGEzMiA9IGRhdGE7DQo+ICsNCj4gKyAgICByZWFkX2xvY2soJmN1cnJkLT5hcmNoLmh2 bV9kb21haW4ucHRfbG9jayk7DQo+ICsgICAgZGV2ID0gaHdfZHBjaV9nZXRfZGV2aWNlKGN1cnJk KTsNCj4gKyAgICBpZiAoIGRldiAhPSBOVUxMICkNCj4gKyAgICB7DQo+ICsgICAgICAgIHJlZyA9 IChjdXJyZC0+YXJjaC5wY2lfY2Y4ICYgMHhmYykgfCAoYWRkciAmIDB4Myk7DQo+ICsgICAgICAg IHJjID0gaHZtX3B0X3BjaV93cml0ZV9jb25maWcoZGV2LCByZWcsIGRhdGEzMiwgc2l6ZSk7DQo+ ICsgICAgICAgIGlmICggcmMgPT0gWDg2RU1VTF9PS0FZICkNCj4gKyAgICAgICAgew0KPiArICAg ICAgICAgICAgcmVhZF91bmxvY2soJmN1cnJkLT5hcmNoLmh2bV9kb21haW4ucHRfbG9jayk7DQo+ ICsgICAgICAgICAgICByZXR1cm4gcmM7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsgICAg cmVhZF91bmxvY2soJmN1cnJkLT5hcmNoLmh2bV9kb21haW4ucHRfbG9jayk7DQo+ICsNCg0KSSBt dXN0IGJlIG1pc3Npbmcgc29tZXRoaW5nIGhlcmUuIFdoeSBhcmUgeW91IGFkZGluZyBwYXNzdGhy b3VnaCBjb2RlIHRvIHRoZSBoYXJkd2FyZSBkb21haW4ncyBoYW5kbGVycz8gU3VyZWx5IGl0IHNl ZXMgYWxsIGRldmljZXMgYW55d2F5Pw0KDQo+ICAgICAgaWYgKCBwY2lfY2ZnX29rKGN1cnJkLCBh ZGRyICYgMywgc2l6ZSwgJmRhdGEzMikgKQ0KPiAgICAgICAgICBwY2lfY29uZl93cml0ZShjdXJy ZC0+YXJjaC5wY2lfY2Y4LCBhZGRyICYgMywgc2l6ZSwgZGF0YSk7DQo+IA0KPiAgICAgIHJldHVy biBYODZFTVVMX09LQVk7DQo+ICB9DQo+IA0KPiArc3RhdGljIHZvaWQgaHZtX3B0X2ZyZWVfZGV2 aWNlKHN0cnVjdCBodm1fcHRfZGV2aWNlICpkZXYpDQo+ICt7DQo+ICsgICAgc3RydWN0IGh2bV9w dF9yZWdfZ3JvdXAgKmdyb3VwLCAqZzsNCj4gKw0KPiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZSggZ3JvdXAsIGcsICZkZXYtPnJlZ2lzdGVyX2dyb3VwcywgZW50cmllcyApDQo+ICsgICAg ew0KPiArICAgICAgICBzdHJ1Y3QgaHZtX3B0X3JlZyAqcmVnLCAqcjsNCj4gKw0KPiArICAgICAg ICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoIHJlZywgciwgJmdyb3VwLT5yZWdpc3RlcnMsIGVu dHJpZXMgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICBsaXN0X2RlbCgmcmVnLT5lbnRy aWVzKTsNCj4gKyAgICAgICAgICAgIHhmcmVlKHJlZyk7DQo+ICsgICAgICAgIH0NCj4gKw0KPiAr ICAgICAgICBsaXN0X2RlbCgmZ3JvdXAtPmVudHJpZXMpOw0KPiArICAgICAgICB4ZnJlZShncm91 cCk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgeGZyZWUoZGV2KTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBodm1fcHRfYWRkX3JlZ2lzdGVyKHN0cnVjdCBodm1fcHRfZGV2aWNlICpkZXYsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGh2bV9wdF9yZWdfZ3JvdXAg Kmdyb3VwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBodm1fcHRf cmVnX2hhbmRsZXIgKmhhbmRsZXIpDQo+ICt7DQo+ICsgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYg PSBkZXYtPnBkZXY7DQo+ICsgICAgc3RydWN0IGh2bV9wdF9yZWcgKnJlZzsNCj4gKw0KPiArICAg IHJlZyA9IHhtYWxsb2Moc3RydWN0IGh2bV9wdF9yZWcpOw0KPiArICAgIGlmICggcmVnID09IE5V TEwgKQ0KPiArICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArICAgIG1lbXNldChyZWcs IDAsIHNpemVvZigqcmVnKSk7DQoNCnh6YWxsb2MoKT8NCg0KPiArICAgIHJlZy0+aGFuZGxlciA9 IGhhbmRsZXI7DQo+ICsgICAgaWYgKCBoYW5kbGVyLT5pbml0ICE9IE5VTEwgKQ0KPiArICAgIHsN Cj4gKyAgICAgICAgdWludDMyX3QgaG9zdF9tYXNrLCBzaXplX21hc2ssIGRhdGEgPSAwOw0KPiAr ICAgICAgICB1aW50OF90IHNlZywgYnVzLCBzbG90LCBmdW5jOw0KPiArICAgICAgICB1bnNpZ25l ZCBpbnQgb2Zmc2V0Ow0KPiArICAgICAgICB1aW50MzJfdCB2YWw7DQo+ICsgICAgICAgIGludCBy YzsNCj4gKw0KPiArICAgICAgICAvKiBJbml0aWFsaXplIGVtdWxhdGUgcmVnaXN0ZXIgKi8NCj4g KyAgICAgICAgcmMgPSBoYW5kbGVyLT5pbml0KGRldiwgcmVnLT5oYW5kbGVyLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ3JvdXAtPmJhc2Vfb2Zmc2V0ICsgcmVnLT5oYW5kbGVyLT5v ZmZzZXQsICZkYXRhKTsNCj4gKyAgICAgICAgaWYgKCByYyA8IDAgKQ0KPiArICAgICAgICAgICAg cmV0dXJuIHJjOw0KPiArDQo+ICsgICAgICAgIGlmICggZGF0YSA9PSBIVk1fUFRfSU5WQUxJRF9S RUcgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICB4ZnJlZShyZWcpOw0KPiArICAgICAg ICAgICAgcmV0dXJuIDA7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAvKiBTeW5jIHVw IHRoZSBkYXRhIHRvIHZhbCAqLw0KPiArICAgICAgICBvZmZzZXQgPSBncm91cC0+YmFzZV9vZmZz ZXQgKyByZWctPmhhbmRsZXItPm9mZnNldDsNCj4gKyAgICAgICAgc2l6ZV9tYXNrID0gMHhGRkZG RkZGRiA+PiAoKDQgLSByZWctPmhhbmRsZXItPnNpemUpIDw8IDMpOw0KPiArDQo+ICsgICAgICAg IHNlZyA9IHBkZXYtPnNlZzsNCj4gKyAgICAgICAgYnVzID0gcGRldi0+YnVzOw0KPiArICAgICAg ICBzbG90ID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pOw0KPiArICAgICAgICBmdW5jID0gUENJX0ZV TkMocGRldi0+ZGV2Zm4pOw0KPiArDQo+ICsgICAgICAgIHN3aXRjaCAoIHJlZy0+aGFuZGxlci0+ c2l6ZSApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgY2FzZSAxOg0KPiArICAgICAgICAgICAg dmFsID0gcGNpX2NvbmZfcmVhZDgoc2VnLCBidXMsIHNsb3QsIGZ1bmMsIG9mZnNldCk7DQo+ICsg ICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgY2FzZSAyOg0KPiArICAgICAgICAgICAgdmFs ID0gcGNpX2NvbmZfcmVhZDE2KHNlZywgYnVzLCBzbG90LCBmdW5jLCBvZmZzZXQpOw0KPiArICAg ICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgIGNhc2UgNDoNCj4gKyAgICAgICAgICAgIHZhbCA9 IHBjaV9jb25mX3JlYWQzMihzZWcsIGJ1cywgc2xvdCwgZnVuYywgb2Zmc2V0KTsNCj4gKyAgICAg ICAgICAgIGJyZWFrOw0KPiArICAgICAgICBkZWZhdWx0Og0KPiArICAgICAgICAgICAgQlVHKCk7 DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAvKg0KPiArICAgICAgICAgKiBTZXQgYml0 cyBpbiBlbXVfbWFzayBhcmUgdGhlIG9uZXMgd2UgZW11bGF0ZS4gVGhlIHJlZyBzaGFsbA0KPiAr ICAgICAgICAgKiBjb250YWluIHRoZSBlbXVsYXRlZCB2aWV3IG9mIHRoZSBndWVzdCAtIHRoZXJl Zm9yZSB3ZSBmbGlwDQo+ICsgICAgICAgICAqIHRoZSBtYXNrIHRvIG1hc2sgb3V0IHRoZSBob3N0 IHZhbHVlcyAod2hpY2ggcmVnIGluaXRpYWxseQ0KPiArICAgICAgICAgKiBoYXMpLg0KPiArICAg ICAgICAgKi8NCj4gKyAgICAgICAgaG9zdF9tYXNrID0gc2l6ZV9tYXNrICYgfnJlZy0+aGFuZGxl ci0+ZW11X21hc2s7DQo+ICsNCj4gKyAgICAgICAgaWYgKCAoZGF0YSAmIGhvc3RfbWFzaykgIT0g KHZhbCAmIGhvc3RfbWFzaykgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICB1aW50MzJf dCBuZXdfdmFsOw0KPiArDQo+ICsgICAgICAgICAgICAvKiBNYXNrIG91dCBob3N0IChpbmNsdWRp bmcgcGFzdCBzaXplKS4gKi8NCj4gKyAgICAgICAgICAgIG5ld192YWwgPSB2YWwgJiBob3N0X21h c2s7DQo+ICsgICAgICAgICAgICAvKiBNZXJnZSBlbXVsYXRlZCBvbmVzIChleGNsdWRpbmcgdGhl IG5vbi1lbXVsYXRlZCBvbmVzKS4gKi8NCj4gKyAgICAgICAgICAgIG5ld192YWwgfD0gZGF0YSAm IGhvc3RfbWFzazsNCj4gKyAgICAgICAgICAgIC8qDQo+ICsgICAgICAgICAgICAgKiBMZWF2ZSBp bnRhY3QgaG9zdCBhbmQgZW11bGF0ZWQgdmFsdWVzIHBhc3QgdGhlIHNpemUgLQ0KPiArICAgICAg ICAgICAgICogZXZlbiB0aG91Z2ggd2UgZG8gbm90IGNhcmUgYXMgd2Ugd3JpdGUgcGVyIHJlZy0+ c2l6ZQ0KPiArICAgICAgICAgICAgICogZ3JhbnVsYXJpdHksIGJ1dCBmb3IgdGhlIGxvZ2dpbmcg YmVsb3cgbGV0cyBoYXZlIHRoZQ0KPiArICAgICAgICAgICAgICogcHJvcGVyIHZhbHVlLg0KPiAr ICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICBuZXdfdmFsIHw9ICgodmFsIHwgZGF0YSkp ICYgfnNpemVfbWFzazsNCj4gKyAgICAgICAgICAgIHByaW50a19wZGV2KHBkZXYsIFhFTkxPR19F UlIsDQo+ICsib2Zmc2V0IDB4JTA0eCBtaXNtYXRjaCEgRW11bGF0ZWQ9MHglMDR4LCBob3N0PTB4 JTA0eCwgc3luY2luZyB0bw0KPiAweCUwNHguXG4iLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgb2Zmc2V0LCBkYXRhLCB2YWwsIG5ld192YWwpOw0KPiArICAgICAgICAgICAgdmFsID0gbmV3 X3ZhbDsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBlbHNlDQo+ICsgICAgICAgICAgICB2YWwg PSBkYXRhOw0KPiArDQo+ICsgICAgICAgIGlmICggdmFsICYgfnNpemVfbWFzayApDQo+ICsgICAg ICAgIHsNCj4gKyAgICAgICAgICAgIHByaW50a19wZGV2KHBkZXYsIFhFTkxPR19FUlIsDQo+ICsg ICAgICAgICAgICAgICAgICAgICJPZmZzZXQgMHglMDR4OjB4JTA0eCBleHBhbmRzIHBhc3QgcmVn aXN0ZXIgc2l6ZSglZCkhXG4iLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCB2 YWwsIHJlZy0+aGFuZGxlci0+c2l6ZSk7DQo+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsN Cj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIHJlZy0+dmFsLmR3b3JkID0gdmFsOw0KPiAr ICAgIH0NCj4gKyAgICBsaXN0X2FkZF90YWlsKCZyZWctPmVudHJpZXMsICZncm91cC0+cmVnaXN0 ZXJzKTsNCj4gKw0KPiArICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0 IGh2bV9wdF9oYW5kbGVyX2luaXQgKmh3ZG9tX3B0X2hhbmRsZXJzW10gPSB7DQo+ICt9Ow0KPiAr DQo+ICtpbnQgaHdkb21fYWRkX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldikNCj4gK3sNCj4g KyAgICBzdHJ1Y3QgZG9tYWluICpkID0gcGRldi0+ZG9tYWluOw0KPiArICAgIHN0cnVjdCBodm1f cHRfZGV2aWNlICpkZXY7DQo+ICsgICAgaW50IGosIGksIHJjOw0KPiArDQo+ICsgICAgQVNTRVJU KCBpc19oYXJkd2FyZV9kb21haW4oZCkgKTsNCj4gKyAgICBBU1NFUlQoIHBjaWRldnNfbG9ja2Vk KCkgKTsNCj4gKw0KPiArICAgIGRldiA9IHhtYWxsb2Moc3RydWN0IGh2bV9wdF9kZXZpY2UpOw0K PiArICAgIGlmICggZGV2ID09IE5VTEwgKQ0KPiArICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4g Kw0KPiArICAgIG1lbXNldChkZXYsIDAgLCBzaXplb2YoKmRldikpOw0KDQp4emFsbG9jKCk/DQoN Cj4gKw0KPiArICAgIGRldi0+cGRldiA9IHBkZXY7DQo+ICsgICAgSU5JVF9MSVNUX0hFQUQoJmRl di0+cmVnaXN0ZXJfZ3JvdXBzKTsNCj4gKw0KPiArICAgIGRldi0+cGVybWlzc2l2ZSA9IG9wdF9k b20wcGVybWlzc2l2ZTsNCj4gKw0KPiArICAgIGZvciAoIGogPSAwOyBqIDwgQVJSQVlfU0laRSho d2RvbV9wdF9oYW5kbGVycyk7IGorKyApDQo+ICsgICAgew0KPiArICAgICAgICBzdHJ1Y3QgaHZt X3B0X2hhbmRsZXJfaW5pdCAqaGFuZGxlcl9pbml0ID0gaHdkb21fcHRfaGFuZGxlcnNbal07DQo+ ICsgICAgICAgIHN0cnVjdCBodm1fcHRfcmVnX2dyb3VwICpncm91cDsNCj4gKw0KPiArICAgICAg ICBncm91cCA9IHhtYWxsb2Moc3RydWN0IGh2bV9wdF9yZWdfZ3JvdXApOw0KPiArICAgICAgICBp ZiAoIGdyb3VwID09IE5VTEwgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICB4ZnJlZShk ZXYpOw0KPiArICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ICsgICAgICAgIH0NCj4gKyAg ICAgICAgSU5JVF9MSVNUX0hFQUQoJmdyb3VwLT5yZWdpc3RlcnMpOw0KPiArDQo+ICsgICAgICAg IHJjID0gaGFuZGxlcl9pbml0LT5pbml0KGRldiwgZ3JvdXApOw0KPiArICAgICAgICBpZiAoIHJj ID09IDAgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICBmb3IgKCBpID0gMDsgaGFuZGxl cl9pbml0LT5oYW5kbGVyc1tpXS5zaXplICE9IDA7IGkrKyApDQo+ICsgICAgICAgICAgICB7DQo+ ICsgICAgICAgICAgICAgICAgaW50IHJjOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgcmMgPSBo dm1fcHRfYWRkX3JlZ2lzdGVyKGRldiwgZ3JvdXAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZoYW5kbGVyX2luaXQtPmhhbmRsZXJzW2ldKTsNCj4gKyAgICAg ICAgICAgICAgICBpZiAoIHJjICkNCj4gKyAgICAgICAgICAgICAgICB7DQo+ICsgICAgICAgICAg ICAgICAgICAgIHByaW50a19wZGV2KHBkZXYsIFhFTkxPR19FUlIsICJlcnJvciBhZGRpbmcgcmVn aXN0ZXI6ICVkXG4iLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyk7DQo+ ICsgICAgICAgICAgICAgICAgICAgIGh2bV9wdF9mcmVlX2RldmljZShkZXYpOw0KPiArICAgICAg ICAgICAgICAgICAgICByZXR1cm4gcmM7DQo+ICsgICAgICAgICAgICAgICAgfQ0KPiArICAgICAg ICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICBsaXN0X2FkZF90YWlsKCZncm91cC0+ZW50cmll cywgJmRldi0+cmVnaXN0ZXJfZ3JvdXBzKTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBlbHNl DQo+ICsgICAgICAgICAgICB4ZnJlZShncm91cCk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgd3Jp dGVfbG9jaygmZC0+YXJjaC5odm1fZG9tYWluLnB0X2xvY2spOw0KPiArICAgIGxpc3RfYWRkX3Rh aWwoJmRldi0+ZW50cmllcywgJmQtPmFyY2guaHZtX2RvbWFpbi5wdF9kZXZpY2VzKTsNCj4gKyAg ICB3cml0ZV91bmxvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5wdF9sb2NrKTsNCj4gKyAgICBwcmlu dGtfcGRldihwZGV2LCBYRU5MT0dfREVCVUcsICJhZGRlZCBmb3IgcGFzcy10aHJvdWdoXG4iKTsN Cj4gKw0KPiArICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0 IGh2bV9pb19vcHMgZHBjaV9wb3J0aW9fb3BzID0gew0KPiAgICAgIC5hY2NlcHQgPSBkcGNpX3Bv cnRpb19hY2NlcHQsDQo+ICAgICAgLnJlYWQgPSBkcGNpX3BvcnRpb19yZWFkLA0KPiBkaWZmIC0t Z2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vZG9tYWluLmggYi94ZW4vaW5jbHVkZS9hc20t DQo+IHg4Ni9odm0vZG9tYWluLmgNCj4gaW5kZXggZjM0ZDc4NC4uMWIxYTUyZiAxMDA2NDQNCj4g LS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vZG9tYWluLmgNCj4gKysrIGIveGVuL2luY2x1 ZGUvYXNtLXg4Ni9odm0vZG9tYWluLmgNCj4gQEAgLTE1Miw2ICsxNTIsMTAgQEAgc3RydWN0IGh2 bV9kb21haW4gew0KPiAgICAgICAgICBzdHJ1Y3Qgdm14X2RvbWFpbiB2bXg7DQo+ICAgICAgICAg IHN0cnVjdCBzdm1fZG9tYWluIHN2bTsNCj4gICAgICB9Ow0KPiArDQo+ICsgICAgLyogTGlzdCBv ZiBwYXNzZWQtdGhyb3VnaCBkZXZpY2VzIChodyBkb21haW4gb25seSkuICovDQo+ICsgICAgc3Ry dWN0IGxpc3RfaGVhZCBwdF9kZXZpY2VzOw0KPiArICAgIHJ3bG9ja190IHB0X2xvY2s7DQo+ICB9 Ow0KPiANCj4gICNkZWZpbmUgaGFwX2VuYWJsZWQoZCkgICgoZCktPmFyY2guaHZtX2RvbWFpbi5o YXBfZW5hYmxlZCkNCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmgg Yi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9pby5oDQo+IGluZGV4IGU5YjNmODMuLjgwZjgzMGQg MTAwNjQ0DQo+IC0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmgNCj4gKysrIGIveGVu L2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaA0KPiBAQCAtMTUzLDYgKzE1MywxODIgQEAgZXh0ZXJu IHZvaWQgaHZtX2RwY2lfbXNpX2VvaShzdHJ1Y3QgZG9tYWluICpkLA0KPiBpbnQgdmVjdG9yKTsN Cj4gDQo+ICB2b2lkIHJlZ2lzdGVyX2RwY2lfcG9ydGlvX2hhbmRsZXIoc3RydWN0IGRvbWFpbiAq ZCk7DQo+IA0KPiArLyogU3RydWN0dXJlcyBmb3IgcGNpLXBhc3N0aHJvdWdoIHN0YXRlIGFuZCBo YW5kbGVycy4gKi8NCj4gK3N0cnVjdCBodm1fcHRfZGV2aWNlOw0KPiArc3RydWN0IGh2bV9wdF9y ZWdfaGFuZGxlcjsNCj4gK3N0cnVjdCBodm1fcHRfcmVnOw0KPiArc3RydWN0IGh2bV9wdF9yZWdf Z3JvdXA7DQo+ICsNCj4gKy8qIFJldHVybiBjb2RlIHdoZW4gcmVnaXN0ZXIgc2hvdWxkIGJlIGln bm9yZWQuICovDQo+ICsjZGVmaW5lIEhWTV9QVF9JTlZBTElEX1JFRyAweEZGRkZGRkZGDQo+ICsN Cj4gKy8qIGZ1bmN0aW9uIHR5cGUgZm9yIGNvbmZpZyByZWcgKi8NCj4gK3R5cGVkZWYgaW50ICgq aHZtX3B0X2NvbmZfcmVnX2luaXQpDQo+ICsgICAgKHN0cnVjdCBodm1fcHRfZGV2aWNlICosIHN0 cnVjdCBodm1fcHRfcmVnX2hhbmRsZXIgKiwgdWludDMyX3QNCj4gcmVhbF9vZmZzZXQsDQo+ICsg ICAgIHVpbnQzMl90ICpkYXRhKTsNCj4gKw0KPiArdHlwZWRlZiBpbnQgKCpodm1fcHRfY29uZl9k d29yZF93cml0ZSkNCj4gKyAgICAoc3RydWN0IGh2bV9wdF9kZXZpY2UgKiwgc3RydWN0IGh2bV9w dF9yZWcgKmNmZ19lbnRyeSwNCj4gKyAgICAgdWludDMyX3QgKnZhbCwgdWludDMyX3QgZGV2X3Zh bHVlLCB1aW50MzJfdCB2YWxpZF9tYXNrKTsNCj4gK3R5cGVkZWYgaW50ICgqaHZtX3B0X2NvbmZf d29yZF93cml0ZSkNCj4gKyAgICAoc3RydWN0IGh2bV9wdF9kZXZpY2UgKiwgc3RydWN0IGh2bV9w dF9yZWcgKmNmZ19lbnRyeSwNCj4gKyAgICAgdWludDE2X3QgKnZhbCwgdWludDE2X3QgZGV2X3Zh bHVlLCB1aW50MTZfdCB2YWxpZF9tYXNrKTsNCj4gK3R5cGVkZWYgaW50ICgqaHZtX3B0X2NvbmZf Ynl0ZV93cml0ZSkNCj4gKyAgICAoc3RydWN0IGh2bV9wdF9kZXZpY2UgKiwgc3RydWN0IGh2bV9w dF9yZWcgKmNmZ19lbnRyeSwNCj4gKyAgICAgdWludDhfdCAqdmFsLCB1aW50OF90IGRldl92YWx1 ZSwgdWludDhfdCB2YWxpZF9tYXNrKTsNCj4gK3R5cGVkZWYgaW50ICgqaHZtX3B0X2NvbmZfZHdv cmRfcmVhZCkNCj4gKyAgICAoc3RydWN0IGh2bV9wdF9kZXZpY2UgKiwgc3RydWN0IGh2bV9wdF9y ZWcgKmNmZ19lbnRyeSwNCj4gKyAgICAgdWludDMyX3QgKnZhbCwgdWludDMyX3QgdmFsaWRfbWFz ayk7DQo+ICt0eXBlZGVmIGludCAoKmh2bV9wdF9jb25mX3dvcmRfcmVhZCkNCj4gKyAgICAoc3Ry dWN0IGh2bV9wdF9kZXZpY2UgKiwgc3RydWN0IGh2bV9wdF9yZWcgKmNmZ19lbnRyeSwNCj4gKyAg ICAgdWludDE2X3QgKnZhbCwgdWludDE2X3QgdmFsaWRfbWFzayk7DQo+ICt0eXBlZGVmIGludCAo Kmh2bV9wdF9jb25mX2J5dGVfcmVhZCkNCj4gKyAgICAoc3RydWN0IGh2bV9wdF9kZXZpY2UgKiwg c3RydWN0IGh2bV9wdF9yZWcgKmNmZ19lbnRyeSwNCj4gKyAgICAgdWludDhfdCAqdmFsLCB1aW50 OF90IHZhbGlkX21hc2spOw0KPiArDQo+ICt0eXBlZGVmIGludCAoKmh2bV9wdF9ncm91cF9pbml0 KQ0KPiArICAgIChzdHJ1Y3QgaHZtX3B0X2RldmljZSAqLCBzdHJ1Y3QgaHZtX3B0X3JlZ19ncm91 cCAqKTsNCj4gKw0KPiArLyoNCj4gKyAqIEVtdWxhdGVkIHJlZ2lzdGVyIGluZm9ybWF0aW9uLg0K PiArICoNCj4gKyAqIFRoaXMgc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGUgY29uc3Vt ZXJzIHRoYXQgdHJhcCBvbiBhY2Nlc3Nlcw0KPiArICogdG8gY2VydGFpbiBQQ0kgcmVnaXN0ZXJz Lg0KPiArICovDQo+ICtzdHJ1Y3QgaHZtX3B0X3JlZ19oYW5kbGVyIHsNCj4gKyAgICB1aW50MzJf dCBvZmZzZXQ7DQo+ICsgICAgdWludDMyX3Qgc2l6ZTsNCj4gKyAgICB1aW50MzJfdCBpbml0X3Zh bDsNCj4gKyAgICAvKiByZWcgcmVzZXJ2ZWQgZmllbGQgbWFzayAoT046cmVzZXJ2ZWQsIE9GRjpk ZWZpbmVkKSAqLw0KPiArICAgIHVpbnQzMl90IHJlc19tYXNrOw0KPiArICAgIC8qIHJlZyByZWFk IG9ubHkgZmllbGQgbWFzayAoT046Uk8vUk9TLCBPRkY6b3RoZXIpICovDQo+ICsgICAgdWludDMy X3Qgcm9fbWFzazsNCj4gKyAgICAvKiByZWcgcmVhZC93cml0ZS0xLWNsZWFyIGZpZWxkIG1hc2sg KE9OOlJXMUMvUlcxQ1MsIE9GRjpvdGhlcikgKi8NCj4gKyAgICB1aW50MzJfdCBydzFjX21hc2s7 DQo+ICsgICAgLyogcmVnIGVtdWxhdGUgZmllbGQgbWFzayAoT046ZW11LCBPRkY6cGFzc3Rocm91 Z2gpICovDQo+ICsgICAgdWludDMyX3QgZW11X21hc2s7DQo+ICsgICAgaHZtX3B0X2NvbmZfcmVn X2luaXQgaW5pdDsNCj4gKyAgICAvKiByZWFkL3dyaXRlIGZ1bmN0aW9uIHBvaW50ZXINCj4gKyAg ICAgKiBmb3IgZG91YmxlX3dvcmQvd29yZC9ieXRlIHNpemUgKi8NCj4gKyAgICB1bmlvbiB7DQo+ ICsgICAgICAgIHN0cnVjdCB7DQo+ICsgICAgICAgICAgICBodm1fcHRfY29uZl9kd29yZF93cml0 ZSB3cml0ZTsNCj4gKyAgICAgICAgICAgIGh2bV9wdF9jb25mX2R3b3JkX3JlYWQgcmVhZDsNCj4g KyAgICAgICAgfSBkdzsNCj4gKyAgICAgICAgc3RydWN0IHsNCj4gKyAgICAgICAgICAgIGh2bV9w dF9jb25mX3dvcmRfd3JpdGUgd3JpdGU7DQo+ICsgICAgICAgICAgICBodm1fcHRfY29uZl93b3Jk X3JlYWQgcmVhZDsNCj4gKyAgICAgICAgfSB3Ow0KPiArICAgICAgICBzdHJ1Y3Qgew0KPiArICAg ICAgICAgICAgaHZtX3B0X2NvbmZfYnl0ZV93cml0ZSB3cml0ZTsNCj4gKyAgICAgICAgICAgIGh2 bV9wdF9jb25mX2J5dGVfcmVhZCByZWFkOw0KPiArICAgICAgICB9IGI7DQo+ICsgICAgfSB1Ow0K PiArfTsNCj4gKw0KPiArc3RydWN0IGh2bV9wdF9oYW5kbGVyX2luaXQgew0KPiArICAgIHN0cnVj dCBodm1fcHRfcmVnX2hhbmRsZXIgKmhhbmRsZXJzOw0KPiArICAgIGh2bV9wdF9ncm91cF9pbml0 IGluaXQ7DQo+ICt9Ow0KPiArDQo+ICsvKg0KPiArICogRW11bGF0ZWQgcmVnaXN0ZXIgdmFsdWUu DQo+ICsgKg0KPiArICogVGhpcyBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgZWFjaCBzcGVjaWZp YyBlbXVsYXRlZCByZWdpc3Rlci4NCj4gKyAqLw0KPiArc3RydWN0IGh2bV9wdF9yZWcgew0KPiAr ICAgIHN0cnVjdCBsaXN0X2hlYWQgZW50cmllczsNCj4gKyAgICBzdHJ1Y3QgaHZtX3B0X3JlZ19o YW5kbGVyICpoYW5kbGVyOw0KPiArICAgIHVuaW9uIHsNCj4gKyAgICAgICAgdWludDhfdCAgIGJ5 dGU7DQo+ICsgICAgICAgIHVpbnQxNl90ICB3b3JkOw0KPiArICAgICAgICB1aW50MzJfdCAgZHdv cmQ7DQo+ICsgICAgfSB2YWw7DQo+ICt9Ow0KPiArDQo+ICsvKg0KPiArICogRW11bGF0ZWQgcmVn aXN0ZXIgZ3JvdXAuDQo+ICsgKg0KPiArICogSW4gb3JkZXIgdG8gc3BlZWQgdXAgKGFuZCBsb2dp Y2FsbHkgZ3JvdXApIGVtdWxhdGVkIHJlZ2lzdGVycyBzZWFyY2gsDQo+ICsgKiBncm91cHMgYXJl IHVzZWQgdGhhdCByZXByZXNlbnQgc3BlY2lmaWMgZW11bGF0ZWQgZmVhdHVyZXMsIGxpa2UgTVNJ Lg0KPiArICovDQo+ICtzdHJ1Y3QgaHZtX3B0X3JlZ19ncm91cCB7DQo+ICsgICAgc3RydWN0IGxp c3RfaGVhZCBlbnRyaWVzOw0KPiArICAgIHVpbnQzMl90IGJhc2Vfb2Zmc2V0Ow0KPiArICAgIHVp bnQ4X3Qgc2l6ZTsNCj4gKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lzdGVyczsNCj4gK307DQo+ ICsNCj4gKy8qDQo+ICsgKiBHdWVzdCBNU0kgaW5mb3JtYXRpb24uDQo+ICsgKg0KPiArICogTVNJ IHZhbHVlcyBzZXQgYnkgdGhlIGd1ZXN0Lg0KPiArICovDQo+ICtzdHJ1Y3QgaHZtX3B0X21zaSB7 DQo+ICsgICAgdWludDE2X3QgZmxhZ3M7DQo+ICsgICAgdWludDMyX3QgYWRkcl9sbzsgIC8qIGd1 ZXN0IG1lc3NhZ2UgYWRkcmVzcyAqLw0KPiArICAgIHVpbnQzMl90IGFkZHJfaGk7ICAvKiBndWVz dCBtZXNzYWdlIHVwcGVyIGFkZHJlc3MgKi8NCj4gKyAgICB1aW50MTZfdCBkYXRhOyAgICAgLyog Z3Vlc3QgbWVzc2FnZSBkYXRhICovDQo+ICsgICAgdWludDMyX3QgY3RybF9vZmZzZXQ7IC8qIHNh dmVkIGNvbnRyb2wgb2Zmc2V0ICovDQo+ICsgICAgaW50IHBpcnE7ICAgICAgICAgIC8qIGd1ZXN0 IHBpcnEgY29ycmVzcG9uZGluZyAqLw0KPiArICAgIGJvb2xfdCBpbml0aWFsaXplZDsgIC8qIHdo ZW4gZ3Vlc3QgTVNJIGlzIGluaXRpYWxpemVkICovDQo+ICsgICAgYm9vbF90IG1hcHBlZDsgICAg ICAgLyogd2hlbiBwaXJxIGlzIG1hcHBlZCAqLw0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIEd1 ZXN0IHBhc3NlZC10aHJvdWdoIFBDSSBkZXZpY2UuDQo+ICsgKi8NCj4gK3N0cnVjdCBodm1fcHRf ZGV2aWNlIHsNCj4gKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGVudHJpZXM7DQo+ICsNCj4gKyAgICBz dHJ1Y3QgcGNpX2RldiAqcGRldjsNCj4gKw0KPiArICAgIGJvb2xfdCBwZXJtaXNzaXZlOw0KPiAr ICAgIGJvb2xfdCBwZXJtaXNzaXZlX3dhcm5lZDsNCj4gKw0KPiArICAgIC8qIE1TSSBzdGF0dXMu ICovDQo+ICsgICAgc3RydWN0IGh2bV9wdF9tc2kgbXNpOw0KPiArDQo+ICsgICAgc3RydWN0IGxp c3RfaGVhZCByZWdpc3Rlcl9ncm91cHM7DQo+ICt9Ow0KPiArDQo+ICsvKg0KPiArICogVGhlIGhp ZXJhcmNoeSBvZiB0aGUgYWJvdmUgc3RydWN0dXJlcyBpcyB0aGUgZm9sbG93aW5nOg0KPiArICoN Cj4gKyAqICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSsNCj4gKyAq IHwgICAgICAgICAgICAgICB8IGVudHJpZXMgfCAgICAgICAgICAgICAgIHwgLi4uDQo+ICsgKiB8 IGh2bV9wdF9kZXZpY2UgKy0tLS0tLS0tLSsgaHZtX3B0X2RldmljZSArLS0tLSsNCj4gKyAqIHwg ICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgIHwNCj4gKyAqICstKy0tLS0t LS0tLS0tLS0rICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSsNCj4gKyAqICAgfA0KPiArICogICB8 IHJlZ2lzdGVyX2dyb3Vwcw0KPiArICogICB8DQo+ICsgKiArLXYtLS0tLS0tLS0tLS0tLS0tKyAg ICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiArICogfCAgICAgICAgICAgICAgICAgIHwg ZW50cmllcyAgfCAgICAgICAgICAgICAgICAgIHwgLi4uDQo+ICsgKiB8IGh2bV9wdF9yZWdfZ3Jv dXAgKy0tLS0tLS0tLS0rIGh2bV9wdF9yZWdfZ3JvdXAgKy0tLS0rDQo+ICsgKiB8ICAgICAgICAg ICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfA0KPiArICogKy0rLS0tLS0t LS0tLS0tLS0tLSsgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSsNCj4gKyAqICAgfA0KPiAr ICogICB8IHJlZ2lzdGVycw0KPiArICogICB8DQo+ICsgKiArLXYtLS0tLS0tLS0tKyAgICAgICAg ICAgICstLS0tLS0tLS0tLS0rDQo+ICsgKiB8ICAgICAgICAgICAgfCBlbnRyaWVzICAgIHwgICAg ICAgICAgICB8IC4uLg0KPiArICogfCBodm1fcHRfcmVnICstLS0tLS0tLS0tLS0rIGh2bV9wdF9y ZWcgKy0tLS0rDQo+ICsgKiB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8 DQo+ICsgKiArLSstLS0tLS0tLS0tKyAgICAgICAgICAgICstKy0tLS0tLS0tLS0rDQo+ICsgKiAg IHwgICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiArICogICB8IGhhbmRsZXIgICAgICAgICAg ICAgICAgIHwgaGFuZGxlcg0KPiArICogICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4g KyAqICstdi0tLS0tLS0tLS0tLS0tLS0tLSsgICAgKy12LS0tLS0tLS0tLS0tLS0tLS0tKw0KPiAr ICogfCAgICAgICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgICAgICAgICAgICB8DQo+ICsg KiB8IGh2bV9wdF9yZWdfaGFuZGxlciB8ICAgIHwgaHZtX3B0X3JlZ19oYW5kbGVyIHwNCj4gKyAq IHwgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgICAgICAgICAgICAgfA0KPiArICog Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ICsgKi8N Cj4gKw0KPiArLyogSGVscGVyIHRvIGFkZCBwYXNzZWQtdGhyb3VnaCBkZXZpY2VzIHRvIHRoZSBo YXJkd2FyZSBkb21haW4uICovDQo+ICtpbnQgaHdkb21fYWRkX2RldmljZShzdHJ1Y3QgcGNpX2Rl diAqcGRldik7DQo+ICsNCj4gICNlbmRpZiAvKiBfX0FTTV9YODZfSFZNX0lPX0hfXyAqLw0KPiAN Cj4gDQo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vcGNpLmggYi94ZW4vaW5jbHVkZS94 ZW4vcGNpLmgNCj4gaW5kZXggZjE5MTc3My4uYjIxYTg5MSAxMDA2NDQNCj4gLS0tIGEveGVuL2lu Y2x1ZGUveGVuL3BjaS5oDQo+ICsrKyBiL3hlbi9pbmNsdWRlL3hlbi9wY2kuaA0KPiBAQCAtOTAs NiArOTAsMTEgQEAgc3RydWN0IHBjaV9kZXYgew0KPiAgICAgIHU2NCB2Zl9ybGVuWzZdOw0KPiAg fTsNCj4gDQo+ICsvKiBIZWxwZXIgZm9yIHByaW50aW5nIHBjaV9kZXYgcmVsYXRlZCBtZXNzYWdl cy4gKi8NCj4gKyNkZWZpbmUgcHJpbnRrX3BkZXYocGRldiwgbHZsLCBmbXQsIC4uLikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiArICAgIHByaW50ayhsdmwgIlBDSSAlMDR4 OiUwMng6JTAyeC4ldTogIiBmbXQsIHBkZXYtPnNlZywgcGRldi0+YnVzLCAgICAgIFwNCj4gKyAg ICAgICAgICAgUENJX1NMT1QocGRldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhwZGV2LT5kZXZmbiksICMj X19WQV9BUkdTX18pDQo+ICsNCj4gICNkZWZpbmUgZm9yX2VhY2hfcGRldihkb21haW4sIHBkZXYp IFwNCj4gICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZXYsICYoZG9tYWluLT5hcmNoLnBkZXZf bGlzdCksIGRvbWFpbl9saXN0KQ0KPiANCj4gLS0NCj4gMi43LjQgKEFwcGxlIEdpdC02NikNCg0K X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg==