From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50847) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwocI-0007Wa-Lb for qemu-devel@nongnu.org; Tue, 26 Sep 2017 08:05:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwoc5-0006Jv-83 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 08:05:34 -0400 Received: from mga14.intel.com ([192.55.52.115]:38662) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dwoc4-0006Bk-KF for qemu-devel@nongnu.org; Tue, 26 Sep 2017 08:05:21 -0400 From: "Valluri, Amarnath" Date: Tue, 26 Sep 2017 12:05:11 +0000 Message-ID: <1506427596.5843.104.camel@intel.com> References: <1506083624-20621-1-git-send-email-amarnath.valluri@intel.com> <1506083624-20621-9-git-send-email-amarnath.valluri@intel.com> In-Reply-To: Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: <91142FD404AD31479F8792964514F885@intel.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH v7 8/8] tpm: Added support for TPM emulator List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "marcandre.lureau@gmail.com" Cc: "stefanb@linux.vnet.ibm.com" , "dgilbert@redhat.com" , "qemu-devel@nongnu.org" , "armbru@redhat.com" , "eblake@redhat.com" SGkgTWFyYywNCg0KVGhhbmtzIGZvciB5b3VyIHRpbWUgcmV2aWV3aW5nIHRoaXMgcGF0Y2hzZXQu IFBsZWFzZSBmaW5kIG15IGlubGluZQ0KY29tbWVudHMuDQoNCk9uIFN1biwgMjAxNy0wOS0yNCBh dCAyMDo1MiArMDIwMCwgTWFyYy1BbmRyw6kgTHVyZWF1IHdyb3RlOg0KPiBIaQ0KPiANCj4gVGhh bmtzIGZvciB0aGUgbmljZSB1cGRhdGUsIHJlbW92aW5nIHRoZSBleGVjKCkgY29kZSwgdXNpbmcg Y2hhcmRldg0KPiBhbmQgYSBwcml2YXRlIHNvY2tldHBhaXIuIFNvbWUgY29tbWVudHMgYmVsb3c6 DQo+IA0KPiBPbiBGcmksIFNlcCAyMiwgMjAxNyBhdCAyOjMzIFBNLCBBbWFybmF0aCBWYWxsdXJp DQo+IDxhbWFybmF0aC52YWxsdXJpQGludGVsLmNvbT4gd3JvdGU6DQo+ID4gDQo+ID4gVGhpcyBj aGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBUUE0gYmFja2VuZCBkcml2ZXIgdGhhdCBjYW4NCj4gPiBj b21tdW5pY2F0ZSB3aXRoDQo+ID4gc3d0cG0oc29mdHdhcmUgVFBNIGVtdWxhdG9yKSB1c2luZyB1 bml4IGRvbWFpbiBzb2NrZXQgaW50ZXJmYWNlLg0KPiA+IFFFTVUgdGFsa3MgdG8NCj4gPiBUUE0g ZW11bGF0b3IgdXNpbmcgc29ja2V0IGJhc2VkIGNoYXJkZXYgYmFja2VuZCBkZXZpY2UuDQo+ID4g DQo+ID4gU3d0cG0gdXNlcyB0d28gVW5peCBzb2NrZXRzIGZvciBjb21tdW5pY2F0aW9ucywgb25l IGZvciBwbGFpbiBUUE0NCj4gPiBjb21tYW5kcyBhbmQNCj4gPiByZXNwb25zZXMsIGFuZCBvbmUg Zm9yIG91dC1vZi1iYW5kIGNvbnRyb2wgbWVzc2FnZXMuIFFFTVUgcGFzc2VzDQo+ID4gZGF0YSBz b2NrZXQNCj4gPiBiZWVuIHVzZWQgb3ZlciB0aGUgY29udHJvbCBjaGFubmVsLg0KPiA+IA0KPiA+ IFRoZSBzd3RwbSBhbmQgYXNzb2NpYXRlZCB0b29scyBjYW4gYmUgZm91bmQgaGVyZToNCj4gPiDC oMKgwqDCoGh0dHBzOi8vZ2l0aHViLmNvbS9zdGVmYW5iZXJnZXIvc3d0cG0NCj4gPiANCj4gPiBU aGUgc3d0cG0ncyBjb250cm9sIGNoYW5uZWwgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBjYW4gYmUg Zm91bmQNCj4gPiBoZXJlOg0KPiA+IMKgwqDCoMKgaHR0cHM6Ly9naXRodWIuY29tL3N0ZWZhbmJl cmdlci9zd3RwbS93aWtpL0NvbnRyb2wtQ2hhbm5lbC1TcGVjDQo+ID4gaWZpY2F0aW9uDQo+ID4g DQo+ID4gVXNhZ2U6DQo+ID4gwqDCoMKgwqAjIHNldHVwIFRQTSBzdGF0ZSBkaXJlY3RvcnkNCj4g PiDCoMKgwqDCoG1rZGlyIC90bXAvbXl0cG0NCj4gPiDCoMKgwqDCoGNob3duIC1SIHRzczpyb290 IC90bXAvbXl0cG0NCj4gPiDCoMKgwqDCoC91c3IvYmluL3N3dHBtX3NldHVwIC0tdHBtLXN0YXRl IC90bXAvbXl0cG0gLS1jcmVhdGVlaw0KPiA+IA0KPiA+IMKgwqDCoMKgIyBBc2sgcWVtdSB0byB1 c2UgVFBNIGVtdWxhdG9yIHdpdGggZ2l2ZW4gdHBtIHN0YXRlIGRpcmVjdG9yeQ0KPiA+IMKgwqDC oMKgcWVtdS1zeXN0ZW0teDg2XzY0IFwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgWy4uLl0gXA0KPiA+ IMKgwqDCoMKgwqDCoMKgwqAtY2hhcmRldiBzb2NrZXQsaWQ9Y2hydHBtLHBhdGg9L3RtcC9zd3Rw bS1zb2NrIFwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgLXRwbWRldiBlbXVsYXRvcixpZD10cG0wLGNo YXJkZXY9Y2hydHBtIFwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgLWRldmljZSB0cG0tdGlzLHRwbWRl dj10cG0wIFwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgWy4uLl0NCj4gPiANCj4gPiBTaWduZWQtb2Zm LWJ5OiBBbWFybmF0aCBWYWxsdXJpIDxhbWFybmF0aC52YWxsdXJpQGludGVsLmNvbT4NCj4gPiAt LS0NCj4gPiDCoGNvbmZpZ3VyZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxNSArLQ0K PiA+IMKgaG1wLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDUgKw0K PiA+IMKgaHcvdHBtL01ha2VmaWxlLm9ianPCoMKgfMKgwqDCoDEgKw0KPiA+IMKgaHcvdHBtL3Rw bV9lbXVsYXRvci5jIHwgNjQ5DQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysNCj4gPiDCoGh3L3RwbS90cG1faW9jdGwuaMKgwqDCoMKgfCAyNDYg KysrKysrKysrKysrKysrKysrKw0KPiA+IMKgcWFwaS90cG0uanNvbsKgwqDCoMKgwqDCoMKgwqDC oHzCoMKgMjEgKy0NCj4gPiDCoHFlbXUtb3B0aW9ucy5oeMKgwqDCoMKgwqDCoMKgfMKgwqAyMiAr LQ0KPiA+IMKgNyBmaWxlcyBjaGFuZ2VkLCA5NTAgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMo LSkNCj4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBody90cG0vdHBtX2VtdWxhdG9yLmMNCj4gPiDC oGNyZWF0ZSBtb2RlIDEwMDY0NCBody90cG0vdHBtX2lvY3RsLmgNCj4gPiANCj4gPiBkaWZmIC0t Z2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlDQo+ID4gaW5kZXggY2IwZjdlZC4uY2UyZGYyZCAx MDA3NTUNCj4gPiAtLS0gYS9jb25maWd1cmUNCj4gPiArKysgYi9jb25maWd1cmUNCj4gPiBAQCAt MzQ2MSwxMCArMzQ2MSwxNSBAQCBmaQ0KPiA+IMKgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjDQo+ID4gwqAjIFRQTSBwYXNzdGhyb3VnaCBpcyBvbmx5IG9uIHg4NiBM aW51eA0KPiA+IA0KPiA+IC1pZiB0ZXN0ICIkdGFyZ2V0b3MiID0gTGludXggJiYgdGVzdCAiJGNw dSIgPSBpMzg2IC1vICIkY3B1IiA9DQo+ID4geDg2XzY0OyB0aGVuDQo+ID4gLcKgwqB0cG1fcGFz c3Rocm91Z2g9JHRwbQ0KPiA+ICtpZiB0ZXN0ICIkdGFyZ2V0b3MiID0gTGludXg7IHRoZW4NCj4g PiArwqDCoHRwbV9lbXVsYXRvcj0kdHBtDQo+ID4gK8KgwqBpZiB0ZXN0ICIkY3B1IiA9IGkzODYg LW8gIiRjcHUiID0geDg2XzY0OyB0aGVuDQo+ID4gK8KgwqDCoMKgdHBtX3Bhc3N0aHJvdWdoPSR0 cG0NCj4gPiArwqDCoGVsc2UNCj4gPiArwqDCoMKgwqB0cG1fcGFzc3Rocm91Z2g9bm8NCj4gPiAr wqDCoGZpDQo+ID4gwqBlbHNlDQo+ID4gLcKgwqB0cG1fcGFzc3Rocm91Z2g9bm8NCj4gPiArwqDC oHRwbV9lbXVsYXRvcj1ubw0KPiA+IMKgZmkNCj4gPiANCj4gPiDCoCMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiA+IEBAIC01MzU5LDYgKzUzNjQsNyBAQCBlY2hv ICJnY292IGVuYWJsZWTCoMKgwqDCoMKgwqAkZ2NvdiINCj4gPiDCoGVjaG8gIlRQTSBzdXBwb3J0 wqDCoMKgwqDCoMKgwqAkdHBtIg0KPiA+IMKgZWNobyAibGlic3NoMiBzdXBwb3J0wqDCoMKgJGxp YnNzaDIiDQo+ID4gwqBlY2hvICJUUE0gcGFzc3Rocm91Z2jCoMKgwqAkdHBtX3Bhc3N0aHJvdWdo Ig0KPiA+ICtlY2hvICJUUE0gZW11bGF0b3LCoMKgwqDCoMKgwqAkdHBtX2VtdWxhdG9yIg0KPiA+ IMKgZWNobyAiUU9NIGRlYnVnZ2luZ8KgwqDCoMKgwqAkcW9tX2Nhc3RfZGVidWciDQo+ID4gwqBl Y2hvICJMaXZlIGJsb2NrIG1pZ3JhdGlvbiAkbGl2ZV9ibG9ja19taWdyYXRpb24iDQo+ID4gwqBl Y2hvICJsem8gc3VwcG9ydMKgwqDCoMKgwqDCoMKgJGx6byINCj4gPiBAQCAtNTk0Myw2ICs1OTQ5 LDkgQEAgaWYgdGVzdCAiJHRwbSIgPSAieWVzIjsgdGhlbg0KPiA+IMKgwqDCoGlmIHRlc3QgIiR0 cG1fcGFzc3Rocm91Z2giID0gInllcyI7IHRoZW4NCj4gPiDCoMKgwqDCoMKgZWNobyAiQ09ORklH X1RQTV9QQVNTVEhST1VHSD15IiA+PiAkY29uZmlnX2hvc3RfbWFrDQo+ID4gwqDCoMKgZmkNCj4g PiArwqDCoGlmIHRlc3QgIiR0cG1fZW11bGF0b3IiID0gInllcyI7IHRoZW4NCj4gPiArwqDCoMKg wqBlY2hvICJDT05GSUdfVFBNX0VNVUxBVE9SPXkiID4+ICRjb25maWdfaG9zdF9tYWsNCj4gSXQg c2hvdWxkbid0IHJlcXVpcmUgTGludXgsIGJ1dCBwb3NpeCAoYW5kIEkgYXNzdW1lIGEgcG9ydCB0 byBvdGhlcg0KPiBzeXN0ZW1zIGlzbid0IGltcG9zc2libGUpLiBzYW1lIGZvciBidWlsZC1zeXMg LyBoZWxwIC8gY29tbWVudHMuDQpJIGFncmVlLCBDYW4geW91IHN1Z2dlc3QsIHdoYXQgaXMgdGhl IFFlbXUgd2F5IG9mIGxpbWl0aW5nIHRoaXMgdG8NCidwb3NpeCcuDQo+IA0KPiA+IA0KPiA+ICvC oMKgZmkNCj4gPiDCoGZpDQo+ID4gDQo+ID4gwqBlY2hvICJUUkFDRV9CQUNLRU5EUz0kdHJhY2Vf YmFja2VuZHMiID4+ICRjb25maWdfaG9zdF9tYWsNCj4gPiBkaWZmIC0tZ2l0IGEvaG1wLmMgYi9o bXAuYw0KPiA+IGluZGV4IGNmNjJiMmUuLjdlNjllY2EgMTAwNjQ0DQo+ID4gLS0tIGEvaG1wLmMN Cj4gPiArKysgYi9obXAuYw0KPiA+IEBAIC05OTUsNiArOTk1LDcgQEAgdm9pZCBobXBfaW5mb190 cG0oTW9uaXRvciAqbW9uLCBjb25zdCBRRGljdA0KPiA+ICpxZGljdCkNCj4gPiDCoMKgwqDCoMKg RXJyb3IgKmVyciA9IE5VTEw7DQo+ID4gwqDCoMKgwqDCoHVuc2lnbmVkIGludCBjID0gMDsNCj4g PiDCoMKgwqDCoMKgVFBNUGFzc3Rocm91Z2hPcHRpb25zICp0cG87DQo+ID4gK8KgwqDCoMKgVFBN RW11bGF0b3JPcHRpb25zICp0ZW87DQo+ID4gDQo+ID4gwqDCoMKgwqDCoGluZm9fbGlzdCA9IHFt cF9xdWVyeV90cG0oJmVycik7DQo+ID4gwqDCoMKgwqDCoGlmIChlcnIpIHsNCj4gPiBAQCAtMTAy NCw2ICsxMDI1LDEwIEBAIHZvaWQgaG1wX2luZm9fdHBtKE1vbml0b3IgKm1vbiwgY29uc3QgUURp Y3QNCj4gPiAqcWRpY3QpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB0cG8tPmhhc19jYW5jZWxfcGF0aCA/ICIsY2FuY2VsLXBhdGg9 Ig0KPiA+IDogIiIsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB0cG8tPmhhc19jYW5jZWxfcGF0aCA/IHRwby0+Y2FuY2VsX3BhdGgg DQo+ID4gOiAiIik7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoGNhc2UgVFBNX1RZUEVfRU1VTEFUT1I6DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHRlbyA9IHRpLT5vcHRpb25zLT51LmVtdWxhdG9yLmRhdGE7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1vbml0b3JfcHJpbnRmKG1vbiwgIixjaGFyZGV2PSVzIiwg dGVvLT5jaGFyZGV2KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBUUE1fVFlQRV9fTUFYOg0KPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+IGRpZmYgLS1n aXQgYS9ody90cG0vTWFrZWZpbGUub2JqcyBiL2h3L3RwbS9NYWtlZmlsZS5vYmpzDQo+ID4gaW5k ZXggNjRjZWNjMy4uNDFmMGI3YSAxMDA2NDQNCj4gPiAtLS0gYS9ody90cG0vTWFrZWZpbGUub2Jq cw0KPiA+ICsrKyBiL2h3L3RwbS9NYWtlZmlsZS5vYmpzDQo+ID4gQEAgLTEsMiArMSwzIEBADQo+ ID4gwqBjb21tb24tb2JqLSQoQ09ORklHX1RQTV9USVMpICs9IHRwbV90aXMubw0KPiA+IMKgY29t bW9uLW9iai0kKENPTkZJR19UUE1fUEFTU1RIUk9VR0gpICs9IHRwbV9wYXNzdGhyb3VnaC5vDQo+ ID4gdHBtX3V0aWwubw0KPiA+ICtjb21tb24tb2JqLSQoQ09ORklHX1RQTV9FTVVMQVRPUikgKz0g dHBtX2VtdWxhdG9yLm8gdHBtX3V0aWwubw0KPiA+IGRpZmYgLS1naXQgYS9ody90cG0vdHBtX2Vt dWxhdG9yLmMgYi9ody90cG0vdHBtX2VtdWxhdG9yLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiA+IGluZGV4IDAwMDAwMDAuLmMwMmJiZTINCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysr IGIvaHcvdHBtL3RwbV9lbXVsYXRvci5jDQo+ID4gQEAgLTAsMCArMSw2NDkgQEANCj4gPiArLyoN Cj4gPiArICrCoMKgZW11bGF0b3IgVFBNIGRyaXZlcg0KPiA+ICsgKg0KPiA+ICsgKsKgwqBDb3B5 cmlnaHQgKGMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24NCj4gPiArICrCoMKgQXV0aG9yOiBBbWFy bmF0aCBWYWxsdXJpIDxhbWFybmF0aC52YWxsdXJpQGludGVsLmNvbT4NCj4gPiArICoNCj4gPiAr ICrCoMKgQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAxMyBJQk0gQ29ycG9yYXRpb24NCj4gPiArICrC oMKgQXV0aG9yczoNCj4gPiArICrCoMKgwqDCoFN0ZWZhbiBCZXJnZXIgPHN0ZWZhbmJAdXMuaWJt LmNvbT4NCj4gPiArICoNCj4gPiArICrCoMKgQ29weXJpZ2h0IChDKSAyMDExIElBSUssIEdyYXog VW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5DQo+ID4gKyAqwqDCoMKgwqBBdXRob3I6IEFuZHJlYXMg TmllZGVybA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ID4gKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4gPiArICogTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQo+ ID4gKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXINCj4gPiB2ZXJzaW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGxpYnJhcnkgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gPiArICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YNCj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLsKgwqBTZWUgdGhlDQo+ID4gR05VDQo+ID4gKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ID4gKyAqDQo+ID4gKyAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbA0KPiA+IFB1Ymxp Yw0KPiA+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3INCj4gPiBnL2xpY2Vuc2VzLz4NCj4gPiArICoNCj4gPiArICovDQo+ ID4gKw0KPiA+ICsjaW5jbHVkZSAicWVtdS9vc2RlcC5oIg0KPiA+ICsjaW5jbHVkZSAicWVtdS9l cnJvci1yZXBvcnQuaCINCj4gPiArI2luY2x1ZGUgInFlbXUvc29ja2V0cy5oIg0KPiA+ICsjaW5j bHVkZSAiaW8vY2hhbm5lbC1zb2NrZXQuaCINCj4gPiArI2luY2x1ZGUgInN5c2VtdS90cG1fYmFj a2VuZC5oIg0KPiA+ICsjaW5jbHVkZSAidHBtX2ludC5oIg0KPiA+ICsjaW5jbHVkZSAiaHcvaHcu aCINCj4gPiArI2luY2x1ZGUgImh3L2kzODYvcGMuaCINCj4gPiArI2luY2x1ZGUgInRwbV91dGls LmgiDQo+ID4gKyNpbmNsdWRlICJ0cG1faW9jdGwuaCINCj4gPiArI2luY2x1ZGUgIm1pZ3JhdGlv bi9ibG9ja2VyLmgiDQo+ID4gKyNpbmNsdWRlICJxYXBpL2Vycm9yLmgiDQo+ID4gKyNpbmNsdWRl ICJjaGFyZGV2L2NoYXItZmUuaCINCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxmY250bC5oPg0KPiA+ ICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQo+ID4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KPiA+ ICsjaW5jbHVkZSA8c3RkaW8uaD4NCj4gPiArDQo+ID4gKyNkZWZpbmUgREVCVUdfVFBNIDANCj4g PiArDQo+ID4gKyNkZWZpbmUgRFBSSU5UKGZtdCwgLi4uKSBkbyB7IFwNCj4gPiArwqDCoMKgwqBp ZiAoREVCVUdfVFBNKSB7IFwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGZwcmludGYoc3RkZXJyLCBm bXQsICMjIF9fVkFfQVJHU19fKTsgXA0KPiA+ICvCoMKgwqDCoH0gXA0KPiA+ICt9IHdoaWxlICgw KTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgRFBSSU5URihmbXQsIC4uLikgRFBSSU5UKCJ0cG0tZW11 bGF0b3I6ICJmbXQiXG4iLA0KPiA+IF9fVkFfQVJHU19fKQ0KPiBJIHdvdWxkIGRlZmluZSBhIHNp bmdsZSBEUFJJTlRGKCkgKCYgZHJvcCBEUFJJTlQgdXNhZ2UgYmVsb3cpDQpPaywgd2lsbCBkbw0K PiANCj4gDQo+ID4gDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFRZUEVfVFBNX0VNVUxBVE9SICJ0cG0t ZW11bGF0b3IiDQo+ID4gKyNkZWZpbmUgVFBNX0VNVUxBVE9SKG9iaikgXA0KPiA+ICvCoMKgwqDC oE9CSkVDVF9DSEVDSyhUUE1FbXVsYXRvciwgKG9iaiksIFRZUEVfVFBNX0VNVUxBVE9SKQ0KPiA+ ICsNCj4gPiArI2RlZmluZSBUUE1fRU1VTEFUT1JfSU1QTEVNRU5UU19BTExfQ0FQUyhTLCBjYXAp ICgoKFMpLT5jYXBzICYNCj4gPiAoY2FwKSkgPT0gKGNhcCkpDQo+ID4gKw0KPiA+ICtzdGF0aWMg Y29uc3QgVFBNRHJpdmVyT3BzIHRwbV9lbXVsYXRvcl9kcml2ZXI7DQo+ID4gKw0KPiA+ICsvKiBk YXRhIHN0cnVjdHVyZXMgKi8NCj4gPiArdHlwZWRlZiBzdHJ1Y3QgVFBNRW11bGF0b3Igew0KPiA+ ICvCoMKgwqDCoFRQTUJhY2tlbmQgcGFyZW50Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqBUUE1FbXVs YXRvck9wdGlvbnMgKm9wdGlvbnM7DQo+IENvbnRyYXJ5IHRvIG15IGNvbW1lbnQgb24gcHJldmlv dXMgcGF0Y2gsIEkgcmVhbGl6ZSBpdCBpcyBjb252ZW5pZW50DQo+IHRvIGhhdmUgYSBxYXBpIHBv aW50ZXIgaGVyZSwgc28geW91IGNhbiB1c2UgdGhlIGZyZWUgdmlzaXRvciBsYXRlci4NCj4gDQo+ ID4gDQo+ID4gK8KgwqDCoMKgQ2hhckJhY2tlbmQgY3RybF9kZXY7DQo+IGN0cmxfY2hyIHBlcmhh cHM/IG9yIGp1c3QgY2hyIG9yIGJlICh0aGUgbW9zdCBjb21tb24gbmFtZSBpbiBvdGhlcg0KPiBk ZXZpY2VzKS4NCj4gDQo+ID4gDQo+ID4gK8KgwqDCoMKgUUlPQ2hhbm5lbCAqZGF0YV9pb2M7DQo+ ID4gK8KgwqDCoMKgYm9vbCBvcF9leGVjdXRpbmc7DQo+ID4gK8KgwqDCoMKgYm9vbCBvcF9jYW5j ZWxlZDsNCj4gSSB0aGluayB0aG9zZSAyIGZpZWxkcyBjYW4gYmUgZHJvcHBlZCwgc2VlIGJlbG93 Lg0KPiANCj4gPiANCj4gPiArwqDCoMKgwqBib29sIGhhZF9zdGFydHVwX2Vycm9yOw0KPiBJIHRo aW5rIHNvbWUgbGl0dGxlIHJlZmFjdG9yaW5nIGNvdWxkIHJlbW92ZSB0aGUgd2hvbGUNCj4gaGFk X3N0YXJ0dXBfZXJyb3IoKSBiYWNrZW5kICYgY2FsbGJhY2sgYmVmb3JlIG9yIGFmdGVyIHRoZSBz ZXJpZXMuDQo+IHRwbV9iYWNrZW5kX3N0YXJ0dXBfdHBtKCkgYWxyZWFkeSByZXR1cm5zIGFuIGVy cm9yIGNvZGUuwqDCoGRldmljZSBvcg0KPiBjb21tb24gYmFja2VuZCBjb2RlIGNvdWxkIGhhbmRs ZSAmIHJlbWVtYmVyIHRoYXQuDQpZZXMsIGkgYWdyZWUsIHdlIGNhbiBhdm9pZCBoYWRfc3RhcnR1 cF9lcnJvcigpIGZyb20gRHJpdmVyT3BzLCBpIHdpbGwNCmRvIHRoaXMuDQo+IA0KPiA+IA0KPiA+ ICvCoMKgwqDCoFRQTVZlcnNpb24gdHBtX3ZlcnNpb247DQo+IFRoaXMgaXMgcHJvYmFibHkgd29y dGggdG8gY29uc2lkZXIgaW4gY29tbW9uIGNvZGUgaW5zdGVhZCwgYnV0IGxldCdzDQo+IG5vdCB3 b3JyeSBhYm91dCBpdC4NCj4gDQo+ID4gDQo+ID4gK8KgwqDCoMKgcHRtX2NhcCBjYXBzOyAvKiBj YXBhYmlsaXRpZXMgb2YgdGhlIFRQTSAqLw0KPiA+ICvCoMKgwqDCoHVpbnQ4X3QgY3VyX2xvY3R5 X251bWJlcjsgLyogbGFzdCBzZXQgbG9jYWxpdHkgKi8NCj4gPiArwqDCoMKgwqBRZW11TXV0ZXgg c3RhdGVfbG9jazsNCj4gPiArwqDCoMKgwqBFcnJvciAqbWlncmF0aW9uX2Jsb2NrZXI7DQo+ID4g K30gVFBNRW11bGF0b3I7DQo+ID4gKw0KPiA+ICsNCj4gPiArc3RhdGljIGludCB0cG1fZW11bGF0 b3JfY3RybGNtZChDaGFyQmFja2VuZCAqZGV2LCB1bnNpZ25lZCBsb25nDQo+ID4gY21kLCB2b2lk ICptc2csDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzaXplX3QgbXNnX2xlbl9pbiwgc2l6ZV90DQo+ID4gbXNnX2xl bl9vdXQpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqB1aW50MzJfdCBjbWRfbm8gPSBjcHVfdG9fYmUz MihjbWQpOw0KPiA+ICvCoMKgwqDCoHNzaXplX3QgbiA9IHNpemVvZih1aW50MzJfdCkgKyBtc2df bGVuX2luOw0KPiA+ICvCoMKgwqDCoHVpbnQ4X3QgKmJ1ZiA9IE5VTEw7DQo+ID4gKw0KPiA+ICvC oMKgwqDCoGJ1ZiA9ICh1aW50OF90ICopbWFsbG9jKG4pOw0KPiBjb3VsZCBiZSBnX2FsbG9jYSgp IGluc3RlYWQuIEFsdGVybmF0aXZlbHksIHdoeSBub3QgY2FsbCAyIHdyaXRlKCkNCj4gaW5zdGVh ZD8NCj4gDQo+IG5vbmUgb2YgdGhlIGNhc3RzIGluIHRoaXMgZnVuY3Rpb24gYXJlIG5lY2Vzc2Fy eSwgcGxlYXNlIHJlbW92ZSB0aGVtLg0KT2ssIHdpbGwgY2hhbmdlIHRvIGFjbGxvY2EoKQ0KPiAN Cj4gPiANCj4gPiArwqDCoMKgwqBtZW1jcHkoYnVmLCAmY21kX25vLCBzaXplb2YoY21kX25vKSk7 DQo+ID4gK8KgwqDCoMKgbWVtY3B5KGJ1ZiArIHNpemVvZihjbWRfbm8pLCBtc2csIG1zZ19sZW5f aW4pOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBuICs9IHFlbXVfY2hyX2ZlX3dyaXRlX2FsbChkZXYs IChjb25zdCB1aW50OF90ICopYnVmLCBuKTsNCj4gd2VpcmQNCj4gDQo+ID4gDQo+ID4gK8KgwqDC oMKgZnJlZShidWYpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBpZiAobiA+IDApIHsNCj4gd2l0aCB0 aGUgbiArPSBhYm92ZSwgeW91J2xsIGdldCBpbnRlcmVzdGluZyBiZWhhdmlvdXIgOikNCllhLCBp dCB3YXMgdHlwbyA6KQ0KPiANCj4gWW91IHByb2JhYmx5IHdhbnQgdG8gY2hlY2sgaWYgYW55IHdy aXRlIGFib3ZlIGZhaWxlZCwgYW5kIHJldHVybg0KPiBlYXJseQ0KPiBmb3IgdGhlIGVycm9yIGNh c2UuDQo+IA0KPiBQbGVhc2UgaW1wcm92ZSB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gdGhpcyBmdW5j dGlvbg0KPiANCj4gPiANCj4gPiArwqDCoMKgwqDCoMKgwqDCoGlmIChtc2dfbGVuX291dCA+IDAp IHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbiA9IHFlbXVfY2hyX2ZlX3JlYWRfYWxs KGRldiwgKHVpbnQ4X3QgKiltc2csDQo+ID4gbXNnX2xlbl9vdXQpOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAvKiBzaW11bGF0ZSBpb2N0bCByZXR1cm4gdmFsdWUgKi8NCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG4gPiAwKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbiA9IDA7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4g PiArwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG4gPSAwOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ICvCoMKgwqDCoH0NCj4gPiArwqDC oMKgwqByZXR1cm4gbjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB0cG1fZW11bGF0 b3JfdW5peF90eF9idWZzKFRQTUVtdWxhdG9yICp0cG1fcHQsDQo+IHRwbV9wdCB3YXMgdHBtX3Bh c3N0aHJvdWdoIEkgc3VwcG9zZS4NCj4gDQo+IFBsZWFzZSByZW5hbWUgdHBtX3B0IHRwbV9lbXUg KG9yIEkgd291bGQgc3VnZ2VzdCAic2VsZiIsIGJ1dCB0aGlzDQo+IGlzbid0IGNvbW1vbiBuYW1l IGluIHFlbXUgY29kZSAtIGl0J3MgYWN0dWFsbHkgY29tbW9uIGluIGEgY2xvc2UNCj4gYy1vYmpl Y3Qgd29ybGQuLCBhbmQgaXQgaXMgcXVpdGUgY29udmVuaWVudC4uLikNCk15IGludGVycHJldGF0 aW9uIGFib3V0IF9wdCB3YXMgJ3BvaW50ZXInIDstKSBpIHdpbGwgY29uc2lkZXIgeW91cg0Kc3Vn Z2V0aW9uLg0KPiANCj4gPiANCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCB1aW50OF90ICpp biwgdWludDMyX3QNCj4gPiBpbl9sZW4sDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDhfdCAq b3V0LCB1aW50MzJfdA0KPiA+IG91dF9sZW4sDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9vbCAq c2VsZnRlc3RfZG9uZSkNCj4gPiArew0KPiA+ICvCoMKgwqDCoHNzaXplX3QgcmV0Ow0KPiA+ICvC oMKgwqDCoGJvb2wgaXNfc2VsZnRlc3QgPSBmYWxzZTsNCj4gPiArwqDCoMKgwqBjb25zdCBzdHJ1 Y3QgdHBtX3Jlc3BfaGRyICpoZHIgPSBOVUxMOw0KPiA+ICvCoMKgwqDCoEVycm9yICplcnIgPSBO VUxMOw0KPiA+ICsNCj4gPiArwqDCoMKgwqB0cG1fcHQtPm9wX2NhbmNlbGVkID0gZmFsc2U7DQo+ ID4gK8KgwqDCoMKgdHBtX3B0LT5vcF9leGVjdXRpbmcgPSB0cnVlOw0KPiA+ICvCoMKgwqDCoGlm IChzZWxmdGVzdF9kb25lKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqAqc2VsZnRlc3RfZG9uZSA9 IGZhbHNlOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgaXNfc2VsZnRlc3QgPSB0cG1fdXRpbF9pc19z ZWxmdGVzdChpbiwgaW5fbGVuKTsNCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDC oHJldCA9IHFpb19jaGFubmVsX3dyaXRlKHRwbV9wdC0+ZGF0YV9pb2MsIChjaGFyICopaW4sIGlu X2xlbiwNCj4gPiAmZXJyKTsNCj4gaG1tLCB0b28gYmFkIHFpb19jaGFubmVsX3dyaXRlKCkgZG9l c24ndCB0YWtlIGEgdm9pZCAqDQo+IA0KPiB3aHkgbm90IHdyaXRlX2FsbCgpPw0KQWdyZWVkDQo+ IA0KPiA+IA0KPiA+ICvCoMKgwqDCoGlmIChyZXQgIT0gaW5fbGVuIHx8IGVycikgew0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgaWYgKCF0cG1fcHQtPm9wX2NhbmNlbGVkIHx8IGVycm5vICE9IEVDQU5D RUxFRCkgew0KPiBJIGRvbid0IHRoaW5rIEVDQU5DRUxFRCBtYWtlIHNlbnNlIGZvciBlbXVsYXRv ciBjb2RlLg0KPiANCj4gPiANCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyb3JfcmVw b3J0KCJ0cG0tZW11bGF0b3I6IGVycm9yIHdoaWxlIHRyYW5zbWl0dGluZw0KPiA+IGRhdGEgIg0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJ0 byBUUE06ICVzIiwgZXJyID8gZXJyb3JfZ2V0X3ByZXR0eShlcnIpDQo+ID4gOiAiIik7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVycm9yX2ZyZWUoZXJyKTsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoH0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyX2V4aXQ7DQo+ID4gK8KgwqDC oMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqB0cG1fcHQtPm9wX2V4ZWN1dGluZyA9IGZhbHNlOw0K PiA+ICsNCj4gPiArwqDCoMKgwqByZXQgPSBxaW9fY2hhbm5lbF9yZWFkKHRwbV9wdC0+ZGF0YV9p b2MsIChjaGFyICopb3V0LCBvdXRfbGVuLA0KPiA+ICZlcnIpOw0KPiA+ICvCoMKgwqDCoGlmIChy ZXQgPCAwIHx8IGVycikgew0KPiByZWFkX2FsbCgpID8NClRoZSBpc3N1ZSB3aXRoIHJlYWRfYWxs KCkgaXMgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSBubyBvZiBieXRlcyBpdA0KcmVhZCwgc28gaSB3 b3VsZCBsaWtlIHRvIHN0aWN0IHRvIF9yZWFkKCkNCj4gDQo+ID4gDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqBpZiAoIXRwbV9wdC0+b3BfY2FuY2VsZWQgfHwgZXJybm8gIT0gRUNBTkNFTEVEKSB7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgidHBtLWVtdWxhdG9yOiBl cnJvciB3aGlsZSByZWFkaW5nIGRhdGENCj4gPiBmcm9tICINCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiVFBNOiAlcyIsIGVyciA/IGVycm9y X2dldF9wcmV0dHkoZXJyKSA6DQo+ID4gIiIpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBlcnJvcl9mcmVlKGVycik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKg fSBlbHNlIGlmIChyZXQgPj0gc2l6ZW9mKCpoZHIpKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBo ZHIgPSAoc3RydWN0IHRwbV9yZXNwX2hkciAqKW91dDsNCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0K PiA+ICvCoMKgwqDCoGlmICghaGRyIHx8IGJlMzJfdG9fY3B1KGhkci0+bGVuKSAhPSByZXQpIHsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgidHBtLWVtdWxhdG9yOiByZWNlaXZl ZCBpbnZhbGlkIHJlc3BvbnNlICINCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgInBhY2tldCBmcm9tIFRQTSB3aXRoIGxlbmd0aCA6JWxkIiwgcmV0KTsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoHJldCA9IC0xOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZ290byBl cnJfZXhpdDsNCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmIChpc19zZWxm dGVzdCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgKnNlbGZ0ZXN0X2RvbmUgPSAoYmUzMl90b19j cHUoaGRyLT5lcnJjb2RlKSA9PSAwKTsNCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKg wqDCoHJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX2V4aXQ6DQo+ID4gK8KgwqDCoMKgaWYgKHJl dCA8IDApIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHRwbV91dGlsX3dyaXRlX2ZhdGFsX2Vycm9y X3Jlc3BvbnNlKG91dCwgb3V0X2xlbik7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDC oMKgwqB0cG1fcHQtPm9wX2V4ZWN1dGluZyA9IGZhbHNlOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBy ZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHRwbV9lbXVsYXRvcl9z ZXRfbG9jYWxpdHkoVFBNRW11bGF0b3IgKnRwbV9wdCwgdWludDhfdA0KPiA+IGxvY3R5X251bWJl cikNCj4gPiArew0KPiA+ICvCoMKgwqDCoHB0bV9sb2MgbG9jOw0KPiA+ICsNCj4gPiArwqDCoMKg wqBEUFJJTlRGKCIlcyA6IGxvY2FsaXR5OiAweCV4IiwgX19mdW5jX18sIGxvY3R5X251bWJlcik7 DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmICh0cG1fcHQtPmN1cl9sb2N0eV9udW1iZXIgIT0gbG9j dHlfbnVtYmVyKSB7DQo+IHJldHVybiBlYXJseSBpbnN0ZWFkIGlmID09LCB0byBhdm9pZCBjb2Rl IGluZGVudCBldGMNCk9rDQo+IA0KPiA+IA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgRFBSSU5URigi c2V0dGluZyBsb2NhbGl0eSA6IDB4JXgiLCBsb2N0eV9udW1iZXIpOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgbG9jLnUucmVxLmxvYyA9IGxvY3R5X251bWJlcjsNCj4gVGhpcyBudW1iZXIgaXNuJ3Qg c2V0IGluIGJlIGxpa2UgdGhlIHJlc3Qgb2YgdGhlIHByb3RvY29sPw0KSSBkb3VidCBpZiBpIGdl dCB1ciBwb2ludCA6KCwgY2FuIHlvdSBwbGVhc2UgZWxhYm9yYXRlLg0KPiANCj4gPiANCj4gPiAr wqDCoMKgwqDCoMKgwqDCoGlmICh0cG1fZW11bGF0b3JfY3RybGNtZCgmdHBtX3B0LT5jdHJsX2Rl diwNCj4gPiBDTURfU0VUX0xPQ0FMSVRZLCAmbG9jLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZW9mKGxvYyksIHNpemVv Zihsb2MpKSA8IDApIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyb3JfcmVwb3J0 KCJ0cG0tZW11bGF0b3I6IGNvdWxkIG5vdCBzZXQgbG9jYWxpdHkgOg0KPiA+ICVzIiwNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJlcnJv cihlcnJubykpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBsb2MudS5yZXNwLnRwbV9y ZXN1bHQgPQ0KPiA+IGJlMzJfdG9fY3B1KGxvYy51LnJlc3AudHBtX3Jlc3VsdCk7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqBpZiAobG9jLnUucmVzcC50cG1fcmVzdWx0ICE9IDApIHsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyb3JfcmVwb3J0KCJ0cG0tZW11bGF0b3I6IFRQTSByZXN1 bHQgZm9yIHNldA0KPiA+IGxvY2FsaXR5IDogMHgleCIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbG9jLnUucmVzcC50cG1fcmVzdWx0KTsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgfQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgdHBtX3B0LT5jdXJfbG9jdHlfbnVtYmVyID0g bG9jdHlfbnVtYmVyOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqByZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdHBtX2VtdWxhdG9yX2hhbmRsZV9yZXF1ZXN0 KFRQTUJhY2tlbmQgKnRiLA0KPiA+IFRQTUJhY2tlbmRDbWQgY21kKQ0KPiA+ICt7DQo+ID4gK8Kg wqDCoMKgVFBNRW11bGF0b3IgKnRwbV9wdCA9IFRQTV9FTVVMQVRPUih0Yik7DQo+ID4gK8KgwqDC oMKgVFBNTG9jYWxpdHkgKmxvY3R5ID0gTlVMTDsNCj4gPiArwqDCoMKgwqBib29sIHNlbGZ0ZXN0 X2RvbmUgPSBmYWxzZTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgRFBSSU5URigicHJvY2Vzc2luZyBj b21tYW5kIHR5cGUgJWQiLCBjbWQpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBzd2l0Y2ggKGNtZCkg ew0KPiA+ICvCoMKgwqDCoGNhc2UgVFBNX0JBQ0tFTkRfQ01EX1BST0NFU1NfQ01EOg0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgcWVtdV9tdXRleF9sb2NrKCZ0cG1fcHQtPnN0YXRlX2xvY2spOw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgbG9jdHkgPSB0Yi0+dHBtX3N0YXRlLT5sb2N0eV9kYXRhOw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgaWYgKHRwbV9lbXVsYXRvcl9zZXRfbG9jYWxpdHkodHBtX3B0LA0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGItPnRwbV9zdGF0ZS0+bG9jdHlfbnVtYmVyKSANCj4g PiA8IDApIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHBtX3V0aWxfd3JpdGVfZmF0 YWxfZXJyb3JfcmVzcG9uc2UobG9jdHktDQo+ID4gPnJfYnVmZmVyLmJ1ZmZlciwNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsb2N0eS0+cl9idWZmZXIuc2l6ZSk7DQo+IHJldHVy biAvIGdvdG8gaGVyZSBpbnN0ZWFkIG9mIGVsc2UuDQpXZSBzaG91bGQgbm90IHJldHJ1biBmcm9t IGhlcmUsIHdlIGhhdmUgdG8gcHJvcGFndGUgdGhlIGVycm9yIHJlc3BvbnNlDQp0byBkZXZpY2Us IGFuZCB1bmxvY2sgdGhlIHN0YXRlLg0KPiANCj4gPiANCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0g ZWxzZSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRwbV9lbXVsYXRvcl91bml4X3R4 X2J1ZnModHBtX3B0LCBsb2N0eS0NCj4gPiA+d19idWZmZXIuYnVmZmVyLA0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxvY3R5LT53X29mZnNldCwNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsb2N0eS0NCj4gPiA+cl9idWZmZXIuYnVmZmVy LA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxvY3R5LQ0KPiA+ID5y X2J1ZmZlci5zaXplLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZz ZWxmdGVzdF9kb25lKTsNCj4gbm8gZXJyb3IgaGFuZGxpbmc/DQpUaGUgZXJyb3IgY2FzZSBpcyBz dXBwb3NlZCB0byBoYW5kbGUgYnkgZGV2aWNlLCB3aGVyZSB3ZSBhcmUgZmlsbGluZw0KaW50byBv dXQgYnVmZmVyLCB1c2luZyB0cG1fdXRpbF93cml0ZV9mYXRhbF9lcnJvcl9yZXNwb25zZSgpLg0K PiANCj4gPiANCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqB0Yi0+cmVjdl9kYXRhX2NhbGxiYWNrKHRiLT50cG1fc3RhdGUsIHRiLT50cG1fc3RhdGUt DQo+ID4gPmxvY3R5X251bWJlciwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZWxmdGVzdF9kb25lKTsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoHFlbXVfbXV0ZXhfdW5sb2NrKCZ0cG1fcHQtPnN0YXRlX2xvY2spOw0KPiA+ ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ICvCoMKgwqDCoGNhc2UgVFBNX0JB Q0tFTkRfQ01EX0lOSVQ6DQo+ID4gK8KgwqDCoMKgY2FzZSBUUE1fQkFDS0VORF9DTURfRU5EOg0K PiA+ICvCoMKgwqDCoGNhc2UgVFBNX0JBQ0tFTkRfQ01EX1RQTV9SRVNFVDoNCj4gPiArwqDCoMKg wqDCoMKgwqDCoC8qIG5vdGhpbmcgdG8gZG8gKi8NCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFr Ow0KPiA+ICvCoMKgwqDCoH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogR3JhY2Vm dWxseSBzaHV0IGRvd24gdGhlIGV4dGVybmFsIHVuaXhpbyBUUE0NCj4gPiArICovDQo+ID4gK3N0 YXRpYyB2b2lkIHRwbV9lbXVsYXRvcl9zaHV0ZG93bihUUE1FbXVsYXRvciAqdHBtX3B0KQ0KPiA+ ICt7DQo+ID4gK8KgwqDCoMKgcHRtX3JlcyByZXM7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmICh0 cG1fZW11bGF0b3JfY3RybGNtZCgmdHBtX3B0LT5jdHJsX2RldiwgQ01EX1NIVVRET1dOLA0KPiA+ ICZyZXMsIDAsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgc2l6ZW9mKHJlcykpIDwgMCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZXJyb3Jf cmVwb3J0KCJ0cG0tZW11bGF0b3I6IENvdWxkIG5vdCBjbGVhbmx5IHNodXRkb3duIHRoZQ0KPiA+ IFRQTTogJXMiLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzdHJlcnJvcihlcnJubykpOw0KPiA+ICvCoMKgwqDCoH0gZWxzZSBpZiAocmVzICE9IDApIHsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgidHBtLWVtdWxhdG9yOiBUUE0gcmVz dWx0IGZvciBzdXRkb3duOiAweCV4IiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgYmUzMl90b19jcHUocmVzKSk7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHRwbV9lbXVsYXRvcl9wcm9iZV9jYXBzKFRQTUVtdWxh dG9yICp0cG1fcHQpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBEUFJJTlRGKCIlcyIsIF9fZnVuY19f KTsNCj4gPiArwqDCoMKgwqBpZiAodHBtX2VtdWxhdG9yX2N0cmxjbWQoJnRwbV9wdC0+Y3RybF9k ZXYsDQo+ID4gQ01EX0dFVF9DQVBBQklMSVRZLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZ0cG1fcHQtPmNhcHMsIDAsIHNpemVvZih0cG1f cHQtPmNhcHMpKSA8DQo+ID4gMCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZXJyb3JfcmVwb3J0 KCJ0cG0tZW11bGF0b3I6IHByb2JpbmcgZmFpbGVkIDogJXMiLA0KPiA+IHN0cmVycm9yKGVycm5v KSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ ICsNCj4gPiArwqDCoMKgwqB0cG1fcHQtPmNhcHMgPSBiZTY0X3RvX2NwdSh0cG1fcHQtPmNhcHMp Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqBEUFJJTlRGKCJjYXBiaWxpdGllcyA6IDB4JWx4IiwgdHBt X3B0LT5jYXBzKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgdHBtX2VtdWxhdG9yX2NoZWNrX2NhcHMoVFBNRW11bGF0b3IgKnRw bV9wdCkNCj4gPiArew0KPiA+ICvCoMKgwqDCoHB0bV9jYXAgY2FwcyA9IDA7DQo+ID4gK8KgwqDC oMKgY29uc3QgY2hhciAqdHBtID0gTlVMTDsNCj4gPiArDQo+ID4gK8KgwqDCoMKgLyogY2hlY2sg Zm9yIG1pbi4gcmVxdWlyZWQgY2FwYWJpbGl0aWVzICovDQo+ID4gK8KgwqDCoMKgc3dpdGNoICh0 cG1fcHQtPnRwbV92ZXJzaW9uKSB7DQo+ID4gK8KgwqDCoMKgY2FzZSBUUE1fVkVSU0lPTl8xXzI6 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBjYXBzID0gUFRNX0NBUF9JTklUIHwgUFRNX0NBUF9TSFVU RE9XTiB8DQo+ID4gUFRNX0NBUF9HRVRfVFBNRVNUQUJMSVNIRUQgfA0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBQVE1fQ0FQX1NFVF9MT0NBTElUWTsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoHRwbSA9ICIxLjIiOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gK8Kg wqDCoMKgY2FzZSBUUE1fVkVSU0lPTl8yXzA6DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBjYXBzID0g UFRNX0NBUF9JTklUIHwgUFRNX0NBUF9TSFVURE9XTiB8DQo+ID4gUFRNX0NBUF9HRVRfVFBNRVNU QUJMSVNIRUQgfA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBQVE1fQ0FQX1NF VF9MT0NBTElUWSB8DQo+ID4gUFRNX0NBUF9SRVNFVF9UUE1FU1RBQkxJU0hFRDsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoHRwbSA9ICIyIjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ ICvCoMKgwqDCoGNhc2UgVFBNX1ZFUlNJT05fVU5TUEVDOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg ZXJyb3JfcmVwb3J0KCJ0cG0tZW11bGF0b3I6IFRQTSB2ZXJzaW9uIGhhcyBub3QgYmVlbg0KPiA+ IHNldCIpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOw0KPiA+ICvCoMKgwqDCoH0N Cj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKCFUUE1fRU1VTEFUT1JfSU1QTEVNRU5UU19BTExfQ0FQ Uyh0cG1fcHQsIGNhcHMpKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBlcnJvcl9yZXBvcnQoInRw bS1lbXVsYXRvcjogVFBNIGRvZXMgbm90IGltcGxlbWVudCBtaW5pbXVtDQo+ID4gc2V0IG9mICIN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgInJlcXVpcmVk IGNhcGFiaWxpdGllcyBmb3IgVFBNICVzICgweCV4KSIsDQo+ID4gdHBtLCAoaW50KWNhcHMpOw0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ ID4gK8KgwqDCoMKgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdHBt X2VtdWxhdG9yX3N0YXJ0dXBfdHBtKFRQTUJhY2tlbmQgKnRiKQ0KPiA+ICt7DQo+ID4gK8KgwqDC oMKgVFBNRW11bGF0b3IgKnRwbV9wdCA9IFRQTV9FTVVMQVRPUih0Yik7DQo+ID4gK8KgwqDCoMKg cHRtX2luaXQgaW5pdDsNCj4gPiArwqDCoMKgwqBwdG1fcmVzIHJlczsNCj4gPiArDQo+ID4gK8Kg wqDCoMKgRFBSSU5URigiJXMiLCBfX2Z1bmNfXyk7DQo+ID4gK8KgwqDCoMKgaWYgKHRwbV9lbXVs YXRvcl9jdHJsY21kKCZ0cG1fcHQtPmN0cmxfZGV2LCBDTURfSU5JVCwgJmluaXQsDQo+ID4gc2l6 ZW9mKGluaXQpLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHNpemVvZihpbml0KSkgPCAwKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBlcnJv cl9yZXBvcnQoInRwbS1lbXVsYXRvcjogY291bGQgbm90IHNlbmQgSU5JVDogJXMiLA0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJlcnJvcihlcnJubykp Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZ290byBlcnJfZXhpdDsNCj4gPiArwqDCoMKgwqB9DQo+ ID4gKw0KPiA+ICvCoMKgwqDCoHJlcyA9IGJlMzJfdG9fY3B1KGluaXQudS5yZXNwLnRwbV9yZXN1 bHQpOw0KPiA+ICvCoMKgwqDCoGlmIChyZXMpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGVycm9y X3JlcG9ydCgidHBtLWVtdWxhdG9yOiBUUE0gcmVzdWx0IGZvciBDTURfSU5JVDoNCj4gPiAweCV4 IiwgcmVzKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyX2V4aXQ7DQo+ID4gK8KgwqDC oMKgfQ0KPiA+ICvCoMKgwqDCoHJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX2V4aXQ6DQo+ID4g K8KgwqDCoMKgdHBtX3B0LT5oYWRfc3RhcnR1cF9lcnJvciA9IHRydWU7DQo+ID4gK8KgwqDCoMKg cmV0dXJuIC0xOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCB0cG1fZW11bGF0b3Jf Z2V0X3RwbV9lc3RhYmxpc2hlZF9mbGFnKFRQTUJhY2tlbmQgKnRiKQ0KPiA+ICt7DQo+ID4gK8Kg wqDCoMKgVFBNRW11bGF0b3IgKnRwbV9wdCA9IFRQTV9FTVVMQVRPUih0Yik7DQo+ID4gK8KgwqDC oMKgcHRtX2VzdCBlc3Q7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoERQUklOVEYoIiVzIiwgX19mdW5j X18pOw0KPiA+ICvCoMKgwqDCoGlmICh0cG1fZW11bGF0b3JfY3RybGNtZCgmdHBtX3B0LT5jdHJs X2RldiwNCj4gPiBDTURfR0VUX1RQTUVTVEFCTElTSEVELCAmZXN0LCAwLA0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNpemVvZihlc3QpKSA8 IDApIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgidHBtLWVtdWxhdG9yOiBD b3VsZCBub3QgZ2V0IHRoZSBUUE0NCj4gPiBlc3RhYmxpc2hlZCBmbGFnOiAlcyIsDQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cmVycm9yKGVycm5vKSk7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ ICvCoMKgwqDCoERQUklOVEYoImVzdGFibGlzaGVkIGZsYWc6ICUweCIsIGVzdC51LnJlc3AuYml0 KTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgcmV0dXJuIChlc3QudS5yZXNwLmJpdCAhPSAwKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB0cG1fZW11bGF0b3JfcmVzZXRfdHBtX2VzdGFi bGlzaGVkX2ZsYWcoVFBNQmFja2VuZCAqdGIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgbG9jdHkpDQo+ID4gK3sNCj4gPiArwqDCoMKg wqBUUE1FbXVsYXRvciAqdHBtX3B0ID0gVFBNX0VNVUxBVE9SKHRiKTsNCj4gPiArwqDCoMKgwqBw dG1fcmVzZXRfZXN0IHJlc2V0X2VzdDsNCj4gPiArwqDCoMKgwqBwdG1fcmVzIHJlczsNCj4gPiAr DQo+ID4gK8KgwqDCoMKgLyogb25seSBhIFRQTSAyLjAgd2lsbCBzdXBwb3J0IHRoaXMgKi8NCj4g PiArwqDCoMKgwqBpZiAodHBtX3B0LT50cG1fdmVyc2lvbiA9PSBUUE1fVkVSU0lPTl8yXzApIHsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoHJlc2V0X2VzdC51LnJlcS5sb2MgPSB0cG1fcHQtPmN1cl9s b2N0eV9udW1iZXI7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKHRwbV9lbXVsYXRv cl9jdHJsY21kKCZ0cG1fcHQtPmN0cmxfZGV2LA0KPiA+IENNRF9SRVNFVF9UUE1FU1RBQkxJU0hF RCwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgJnJlc2V0X2VzdCwgc2l6ZW9mKHJlc2V0X2VzdCksDQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNpemVvZihyZXNldF9lc3QpKSA8IDApIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZXJyb3JfcmVwb3J0KCJ0cG0tZW11bGF0b3I6IENvdWxkIG5vdCByZXNldCB0aGUNCj4g PiBlc3RhYmxpc2htZW50IGJpdDogIg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIiVzIiwgc3RyZXJyb3IoZXJybm8pKTsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgfQ0K PiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHJlcyA9IGJlMzJfdG9fY3B1KHJlc2V0X2VzdC51 LnJlc3AudHBtX3Jlc3VsdCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBpZiAocmVzKSB7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgidHBtLWVtdWxhdG9yOiBUUE0g cmVzdWx0IGZvciByZXN0DQo+ID4gZXN0YWJsaXhoZWQgZmxhZzogIg0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCIweCV4IiwgcmVzKTsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOw0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgfQ0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIHRwbV9lbXVsYXRvcl9oYWRfc3RhcnR1cF9lcnJv cihUUE1CYWNrZW5kICp0YikNCj4gPiArew0KPiA+ICvCoMKgwqDCoFRQTUVtdWxhdG9yICp0cG1f cHQgPSBUUE1fRU1VTEFUT1IodGIpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqByZXR1cm4gdHBtX3B0 LT5oYWRfc3RhcnR1cF9lcnJvcjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdHBt X2VtdWxhdG9yX2NhbmNlbF9jbWQoVFBNQmFja2VuZCAqdGIpDQo+ID4gK3sNCj4gPiArwqDCoMKg wqBUUE1FbXVsYXRvciAqdHBtX3B0ID0gVFBNX0VNVUxBVE9SKHRiKTsNCj4gPiArwqDCoMKgwqBw dG1fcmVzIHJlczsNCj4gPiArDQo+ID4gK8KgwqDCoMKgLyoNCj4gPiArwqDCoMKgwqDCoCogQXMg b2YgTGludXggMy43IHRoZSB0cG1fdGlzIGRyaXZlciBkb2VzIG5vdCBwcm9wZXJseSBjYW5jZWwN Cj4gPiArwqDCoMKgwqDCoCogY29tbWFuZHMgb24gYWxsIFRQTSBtYW51ZmFjdHVyZXJzJyBUUE1z Lg0KPiA+ICvCoMKgwqDCoMKgKiBPbmx5IGNhbmNlbCBpZiB3ZSdyZSBidXN5IHNvIHdlIGRvbid0 IGNhbmNlbCBzb21lb25lIGVsc2Uncw0KPiA+ICvCoMKgwqDCoMKgKiBjb21tYW5kLCBlLmcuLCBh IGNvbW1hbmQgZXhlY3V0ZWQgb24gdGhlIGhvc3QuDQo+ID4gK8KgwqDCoMKgwqAqLw0KPiA+ICvC oMKgwqDCoGlmICh0cG1fcHQtPm9wX2V4ZWN1dGluZykgew0KPiBUaGUgZmllbGQgaXMgc2V0IGlu IHRoZSB3b3JrZXIgdGhyZWFkLiBUaGlzIGlzIHJhY3kuIEZvcnR1bmF0ZWx5IHRoaXMNCj4gaXMg bm90IHJlbGV2YW50IGZvciBlbXVsYXRvciwgSSB0aGluayB5b3UgY2FuIHNpbXBseSBkcm9wIHRo YXQgY2hlY2sNCj4gYW5kIHRoZSB2YXJpYWJsZS4gU3RlZmFuIHNob3VsZCBjb25maXJtIHRob3Vn aC4NCj4gDQo+ID4gDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBpZiAoVFBNX0VNVUxBVE9SX0lNUExF TUVOVFNfQUxMX0NBUFModHBtX3B0LA0KPiA+IFBUTV9DQVBfQ0FOQ0VMX1RQTV9DTUQpKSB7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh0cG1fZW11bGF0b3JfY3RybGNtZCgmdHBt X3B0LT5jdHJsX2RldiwNCj4gPiBDTURfQ0FOQ0VMX1RQTV9DTUQsDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgJnJlcywgMCwgc2l6ZW9mKHJlcykpIDwgMCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgidHBtLWVtdWxhdG9yOiBDb3VsZCBub3QgY2Fu Y2VsDQo+ID4gY29tbWFuZDogJXMiLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RyZXJyb3IoZXJybm8pKTsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChyZXMgIT0gMCkgew0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgidHBtLWVtdWxhdG9yOiBGYWls ZWQgdG8gY2FuY2VsIFRQTToNCj4gPiAweCV4IiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJlMzJfdG9fY3B1KHJlcykpOw0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2Ugew0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHRwbV9wdC0+b3BfY2FuY2VsZWQgPSB0cnVlOw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDC oMKgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB0cG1fZW11bGF0b3JfcmVzZXQo VFBNQmFja2VuZCAqdGIpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBEUFJJTlRGKCIlcyIsIF9fZnVu Y19fKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgdHBtX2VtdWxhdG9yX2NhbmNlbF9jbWQodGIpOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgVFBNVmVyc2lvbiB0cG1fZW11bGF0b3JfZ2V0X3Rw bV92ZXJzaW9uKFRQTUJhY2tlbmQgKnRiKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgVFBNRW11bGF0 b3IgKnRwbV9wdCA9IFRQTV9FTVVMQVRPUih0Yik7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoHJldHVy biB0cG1fcHQtPnRwbV92ZXJzaW9uOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB0 cG1fZW11bGF0b3JfYmxvY2tfbWlncmF0aW9uKFRQTUVtdWxhdG9yICp0cG1fcHQpDQo+ID4gK3sN Cj4gPiArwqDCoMKgwqBFcnJvciAqZXJyID0gTlVMTDsNCj4gPiArDQo+ID4gK8KgwqDCoMKgZXJy b3Jfc2V0ZygmdHBtX3B0LT5taWdyYXRpb25fYmxvY2tlciwNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIk1pZ3JhdGlvbiBkaXNhYmxlZDogVFBNIGVtdWxhdG9yIG5vdCB5ZXQN Cj4gPiBtaWdyYXRhYmxlIik7DQo+ID4gK8KgwqDCoMKgbWlncmF0ZV9hZGRfYmxvY2tlcih0cG1f cHQtPm1pZ3JhdGlvbl9ibG9ja2VyLCAmZXJyKTsNCj4gPiArwqDCoMKgwqBpZiAoZXJyKSB7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqBlcnJvcl9mcmVlKGVycik7DQo+IHByb2JhYmx5IGJldHRlciB0 byByZXBvcnRfZXJyIGl0IGluc3RlYWQNCk9rDQo+IA0KPiA+IA0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgZXJyb3JfZnJlZSh0cG1fcHQtPm1pZ3JhdGlvbl9ibG9ja2VyKTsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoHRwbV9wdC0+bWlncmF0aW9uX2Jsb2NrZXIgPSBOVUxMOw0KPiBhbmQgcmV0dXJuIGFu IGVycm9yIGNvZGUuDQpXaWxsIGRvDQo+IA0KPiA+IA0KPiA+ICvCoMKgwqDCoH0NCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCB0cG1fZW11bGF0b3JfcHJlcGFyZV9kYXRhX2ZkKFRQTUVt dWxhdG9yICp0cG1fcHQpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBwdG1fcmVzIHJlczsNCj4gPiAr wqDCoMKgwqBFcnJvciAqZXJyID0gTlVMTDsNCj4gPiArwqDCoMKgwqBpbnQgZmRzWzJdID0geyAt MSwgLTEgfTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09D S19TRVFQQUNLRVQsIDAsIGZkcykgPCAwKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBlcnJvcl9y ZXBvcnQoInRwbS1lbXVsYXRvcjogRmFpbGVkIHRvIGNyZWF0ZSBzb2NrZXRwYWlyIik7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiAr wqDCoMKgwqBxZW11X2Nocl9mZV9zZXRfbXNnZmRzKCZ0cG1fcHQtPmN0cmxfZGV2LCBmZHMgKyAx LCAxKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKHRwbV9lbXVsYXRvcl9jdHJsY21kKCZ0cG1f cHQtPmN0cmxfZGV2LCBDTURfU0VUX0RBVEFGRCwNCj4gPiAmcmVzLCAwLA0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZW9mKHJlcykpIHx8IHJlcyAhPSAw KSB7DQo+IFlheSEgZm9yIG1ha2luZyBsaWZlIGVhc2llciBhbmQgaGlkaW5nIGEgcHJvdG9jb2wg ZGV0YWlsLg0KPiANCj4gPiANCj4gPiArwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgidHBt LWVtdWxhdG9yOiBGYWlsZWQgdG8gc2VuZCBDTURfU0VUX0RBVEFGRDoNCj4gPiAlcyIsDQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cmVycm9yKGVycm5v KSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBnb3RvIGVycl9leGl0Ow0KPiA+ICvCoMKgwqDCoH0N Cj4gPiArDQo+ID4gK8KgwqDCoMKgdHBtX3B0LT5kYXRhX2lvYyA9DQo+ID4gUUlPX0NIQU5ORUwo cWlvX2NoYW5uZWxfc29ja2V0X25ld19mZChmZHNbMF0sICZlcnIpKTsNCj4gPiArwqDCoMKgwqBp ZiAoZXJyKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBlcnJvcl9yZXBvcnQoInRwbS1lbXVsYXRv cjogRmFpbGVkIHRvIGNyZWF0ZSBpbyBjaGFubmVsIDoNCj4gPiAlcyIsDQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnJvcl9nZXRfcHJldHR5KGVy cikpOw0KPiBlcnJvcl9wcmVwZW5kKCk/DQpPaw0KPiANCj4gPiANCj4gPiArwqDCoMKgwqDCoMKg wqDCoGVycm9yX2ZyZWUoZXJyKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyX2V4aXQ7 DQo+ID4gK8KgwqDCoMKgfQ0KPiBjbG9zZSBmZHNbMV0gPw0KSSBndWVzcyB3ZSBhcmUgbm90IHN1 cHBvc2VkIHRvIGNsb3NlIHRoZSBvdGhlciBlbmQgb2YgdGhlDQpzb2NrZXRwYWlyL3BpcGUsIGFz IGl0IGlzIG5vdCBmb3JrZWQgcHJvY2Vzcy4NCj4gDQo+ID4gDQo+ID4gKw0KPiA+ICvCoMKgwqDC oHJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX2V4aXQ6DQo+ID4gK8KgwqDCoMKgY2xvc2Vzb2Nr ZXQoZmRzWzBdKTsNCj4gPiArwqDCoMKgwqBjbG9zZXNvY2tldChmZHNbMV0pOw0KPiA+ICvCoMKg wqDCoHJldHVybiAtMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB0cG1fZW11bGF0 b3JfaGFuZGxlX2RldmljZV9vcHRzKFRQTUVtdWxhdG9yICp0cG1fcHQsDQo+ID4gUWVtdU9wdHMg Km9wdHMpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBjb25zdCBjaGFyICp2YWx1ZTsNCj4gPiArDQo+ ID4gK8KgwqDCoMKgdmFsdWUgPSBxZW11X29wdF9nZXQob3B0cywgImNoYXJkZXYiKTsNCj4gPiAr wqDCoMKgwqBpZiAodmFsdWUpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoEVycm9yICplcnIgPSBO VUxMOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgQ2hhcmRldiAqZGV2ID0gcWVtdV9jaHJfZmluZCh2 YWx1ZSk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgdHBtX3B0LT5vcHRpb25zLT5jaGFy ZGV2ID0gZ19zdHJkdXAodmFsdWUpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGlmICgh ZGV2IHx8ICFxZW11X2Nocl9mZV9pbml0KCZ0cG1fcHQtPmN0cmxfZGV2LCBkZXYsDQo+ID4gJmVy cikpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyb3JfcmVwb3J0KCJ0cG0tZW11 bGF0b3I6IE5vIHZhbGlkIGNoYXJkZXYgZm91bmQgYXQNCj4gPiAnJXMnOiAlcyIsDQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsdWUsIGVy ciA/IGVycm9yX2dldF9wcmV0dHkoZXJyKSA6ICIiKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZXJyb3JfZnJlZShlcnIpOw0KPiBlcnJvcl9wcmVwZW5kDQpPaw0KPiANCj4gPiANCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnI7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqB9DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqBpZiAodHBtX2VtdWxhdG9y X3ByZXBhcmVfZGF0YV9mZCh0cG1fcHQpIDwgMCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZ290 byBlcnI7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqAvKiBGSVhNRTogdHBt X3V0aWxfdGVzdF90cG1kZXYoKSBhY2NlcHRzIG9ubHkgb24gc29ja2V0IGZkLCBhcw0KPiA+IGl0 IGFsc28gdXNlZA0KPiA+ICvCoMKgwqDCoMKgKiBieSBwYXNzdGhyb3VnaCBkcml2ZXIsIHdoaWNo IG5vdCB5ZXQgdXNpbmcgR0lPQ2hhbm5lbC4NCj4gPiArwqDCoMKgwqDCoCovDQo+ID4gK8KgwqDC oMKgaWYgKHRwbV91dGlsX3Rlc3RfdHBtZGV2KFFJT19DSEFOTkVMX1NPQ0tFVCh0cG1fcHQtPmRh dGFfaW9jKS0NCj4gPiA+ZmQsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAmdHBtX3B0LT50cG1fdmVyc2lvbikpIHsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgiJyVzJyBpcyBub3QgZW11bGF0aW5nIFRQTSBk ZXZpY2UuIEVycm9yOg0KPiA+ICVzIiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB0cG1fcHQtPm9wdGlvbnMtPmNoYXJkZXYsIHN0cmVycm9yKGVycm5v KSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBnb3RvIGVycjsNCj4gPiArwqDCoMKgwqB9DQo+ID4g Kw0KPiA+ICvCoMKgwqDCoERQUklOVEYoIlRQTSBWZXJzaW9uICVzIiwgdHBtX3B0LT50cG1fdmVy c2lvbiA9PQ0KPiA+IFRQTV9WRVJTSU9OXzFfMiA/ICIxLjIiIDoNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAodHBtX3B0LT50cG1fdmVyc2lvbiA9PSBUUE1fVkVSU0lPTl8yXzAgP8Kg wqAiMi4wIiA6DQo+ID4gIlVuc3BlY2lmaWVkIikpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBpZiAo dHBtX2VtdWxhdG9yX3Byb2JlX2NhcHModHBtX3B0KSB8fA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg dHBtX2VtdWxhdG9yX2NoZWNrX2NhcHModHBtX3B0KSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg Z290byBlcnI7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqB0cG1fZW11bGF0 b3JfYmxvY2tfbWlncmF0aW9uKHRwbV9wdCk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoHJldHVybiAw Ow0KPiA+ICsNCj4gPiArZXJyOg0KPiA+ICvCoMKgwqDCoERQUklOVCgiU3RhcnR1cCBlcnJvclxu Iik7DQo+ID4gK8KgwqDCoMKgcmV0dXJuIC0xOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg VFBNQmFja2VuZCAqdHBtX2VtdWxhdG9yX2NyZWF0ZShRZW11T3B0cyAqb3B0cywgY29uc3QgY2hh cg0KPiA+ICppZCkNCj4gPiArew0KPiA+ICvCoMKgwqDCoFRQTUJhY2tlbmQgKnRiID0gVFBNX0JB Q0tFTkQob2JqZWN0X25ldyhUWVBFX1RQTV9FTVVMQVRPUikpOw0KPiA+ICsNCj4gPiArwqDCoMKg wqB0Yi0+aWQgPSBnX3N0cmR1cChpZCk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmICh0cG1fZW11 bGF0b3JfaGFuZGxlX2RldmljZV9vcHRzKFRQTV9FTVVMQVRPUih0YiksIG9wdHMpKSB7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqBnb3RvIGVycl9leGl0Ow0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ ID4gK8KgwqDCoMKgcmV0dXJuIHRiOw0KPiA+ICsNCj4gPiArZXJyX2V4aXQ6DQo+ID4gK8KgwqDC oMKgb2JqZWN0X3VucmVmKE9CSkVDVCh0YikpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqByZXR1cm4g TlVMTDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIFRwbVR5cGVPcHRpb25zICp0cG1fZW11 bGF0b3JfZ2V0X3RwbV9vcHRpb25zKFRQTUJhY2tlbmQNCj4gPiAqdGIpDQo+ID4gK3sNCj4gPiAr wqDCoMKgwqBUUE1FbXVsYXRvciAqdHBtX3B0ID0gVFBNX0VNVUxBVE9SKHRiKTsNCj4gPiArwqDC oMKgwqBUcG1UeXBlT3B0aW9ucyAqb3B0aW9ucyA9IE5VTEw7DQo+ID4gK8KgwqDCoMKgVFBNRW11 bGF0b3JPcHRpb25zICplb3B0aW9ucyA9IE5VTEw7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGVvcHRp b25zID0gZ19uZXcwKFRQTUVtdWxhdG9yT3B0aW9ucywgMSk7DQo+ID4gK8KgwqDCoMKgaWYgKCFl b3B0aW9ucykgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7DQo+ID4gK8KgwqDC oMKgfQ0KPiA+ICvCoMKgwqDCoERQUklOVEYoIiVzIiwgX19mdW5jX18pOw0KPiA+ICsNCj4gPiAr wqDCoMKgwqBlb3B0aW9ucy0+Y2hhcmRldiA9IGdfc3RyZHVwKHRwbV9wdC0+b3B0aW9ucy0+Y2hh cmRldik7DQo+ID4gK8KgwqDCoMKgb3B0aW9ucyA9IGdfbmV3MChUcG1UeXBlT3B0aW9ucywgMSk7 DQo+ID4gK8KgwqDCoMKgaWYgKCFvcHRpb25zKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBxYXBp X2ZyZWVfVFBNRW11bGF0b3JPcHRpb25zKGVvcHRpb25zKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oHJldHVybiBOVUxMOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgb3B0aW9u cy0+dHlwZSA9IFRQTV9UWVBFX0VNVUxBVE9SOw0KPiA+ICvCoMKgwqDCoG9wdGlvbnMtPnUuZW11 bGF0b3IuZGF0YSA9IGVvcHRpb25zOw0KPiBJIHRoaW5rIHRoaXMgaXMgYSBqb2IgZm9yIFFBUElf Q0xPTkUuDQo+IA0KPiA+IA0KPiA+ICsNCj4gPiArwqDCoMKgwqByZXR1cm4gb3B0aW9uczsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IFFlbXVPcHREZXNjIHRwbV9lbXVsYXRvcl9j bWRsaW5lX29wdHNbXSA9IHsNCj4gPiArwqDCoMKgwqBUUE1fU1RBTkRBUkRfQ01ETElORV9PUFRT LA0KPiA+ICvCoMKgwqDCoHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoC5uYW1lID0gImNoYXJkZXYi LA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgLnR5cGUgPSBRRU1VX09QVF9TVFJJTkcsDQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqAuaGVscCA9ICJDaGFyYWN0ZXIgZGV2aWNlIHRvIHVzZSBmb3Igb3V0LW9m LWJhbmQgY29udHJvbA0KPiA+IG1lc3NhZ2VzIiwNCj4gPiArwqDCoMKgwqB9LA0KPiA+ICvCoMKg wqDCoHsgLyogZW5kIG9mIGxpc3QgKi8gfSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBj b25zdCBUUE1Ecml2ZXJPcHMgdHBtX2VtdWxhdG9yX2RyaXZlciA9IHsNCj4gPiArwqDCoMKgwqAu dHlwZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gVFBNX1RZUEVf RU1VTEFUT1IsDQo+ID4gK8KgwqDCoMKgLm9wdHPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqA9IHRwbV9lbXVsYXRvcl9jbWRsaW5lX29wdHMsDQo+ID4gK8KgwqDCoMKg LmRlc2PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9ICJUUE0gZW11 bGF0b3IgYmFja2VuZCBkcml2ZXIiLA0KPiA+ICsNCj4gPiArwqDCoMKgwqAuY3JlYXRlwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHRwbV9lbXVsYXRvcl9jcmVhdGUsDQo+ ID4gK8KgwqDCoMKgLnN0YXJ0dXBfdHBtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gdHBt X2VtdWxhdG9yX3N0YXJ0dXBfdHBtLA0KPiA+ICvCoMKgwqDCoC5yZXNldMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHRwbV9lbXVsYXRvcl9yZXNldCwNCj4gPiArwqDC oMKgwqAuaGFkX3N0YXJ0dXBfZXJyb3LCoMKgwqDCoMKgwqDCoMKgPSB0cG1fZW11bGF0b3JfaGFk X3N0YXJ0dXBfZXJyb3IsDQo+ID4gK8KgwqDCoMKgLmNhbmNlbF9jbWTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqA9IHRwbV9lbXVsYXRvcl9jYW5jZWxfY21kLA0KPiA+ICvCoMKgwqDCoC5n ZXRfdHBtX2VzdGFibGlzaGVkX2ZsYWcgPQ0KPiA+IHRwbV9lbXVsYXRvcl9nZXRfdHBtX2VzdGFi bGlzaGVkX2ZsYWcsDQo+ID4gK8KgwqDCoMKgLnJlc2V0X3RwbV9lc3RhYmxpc2hlZF9mbGFnID0N Cj4gPiB0cG1fZW11bGF0b3JfcmVzZXRfdHBtX2VzdGFibGlzaGVkX2ZsYWcsDQo+ID4gK8KgwqDC oMKgLmdldF90cG1fdmVyc2lvbsKgwqDCoMKgwqDCoMKgwqDCoMKgPSB0cG1fZW11bGF0b3JfZ2V0 X3RwbV92ZXJzaW9uLA0KPiA+ICvCoMKgwqDCoC5nZXRfdHBtX29wdGlvbnPCoMKgwqDCoMKgwqDC oMKgwqDCoD0gdHBtX2VtdWxhdG9yX2dldF90cG1fb3B0aW9ucywNCj4gPiArfTsNCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIHRwbV9lbXVsYXRvcl9pbnN0X2luaXQoT2JqZWN0ICpvYmopDQo+ID4g K3sNCj4gPiArwqDCoMKgwqBUUE1FbXVsYXRvciAqdHBtX3B0ID0gVFBNX0VNVUxBVE9SKG9iaik7 DQo+ID4gKw0KPiA+ICvCoMKgwqDCoERQUklOVEYoIiVzIiwgX19mdW5jX18pOw0KPiA+ICvCoMKg wqDCoHRwbV9wdC0+b3B0aW9ucyA9IGdfbmV3MChUUE1FbXVsYXRvck9wdGlvbnMsIDEpOw0KPiA+ ICvCoMKgwqDCoHRwbV9wdC0+b3BfZXhlY3V0aW5nID0gdHBtX3B0LT5vcF9jYW5jZWxlZCA9IGZh bHNlOw0KPiA+ICvCoMKgwqDCoHRwbV9wdC0+aGFkX3N0YXJ0dXBfZXJyb3IgPSBmYWxzZTsNCj4g PiArwqDCoMKgwqB0cG1fcHQtPmN1cl9sb2N0eV9udW1iZXIgPSB+MDsNCj4gPiArwqDCoMKgwqBx ZW11X211dGV4X2luaXQoJnRwbV9wdC0+c3RhdGVfbG9jayk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIHRwbV9lbXVsYXRvcl9pbnN0X2ZpbmFsaXplKE9iamVjdCAqb2JqKQ0KPiA+ ICt7DQo+ID4gK8KgwqDCoMKgVFBNRW11bGF0b3IgKnRwbV9wdCA9IFRQTV9FTVVMQVRPUihvYmop Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqB0cG1fZW11bGF0b3JfY2FuY2VsX2NtZChUUE1fQkFDS0VO RChvYmopKTsNCj4gPiArwqDCoMKgwqB0cG1fZW11bGF0b3Jfc2h1dGRvd24odHBtX3B0KTsNCj4g PiArDQo+ID4gK8KgwqDCoMKgaWYgKHRwbV9wdC0+ZGF0YV9pb2MpIHsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoHFpb19jaGFubmVsX2Nsb3NlKHRwbV9wdC0+ZGF0YV9pb2MsIE5VTEwpOw0KPiA+ICvC oMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgcWVtdV9jaHJfZmVfZGVpbml0KCZ0cG1fcHQt PmN0cmxfZGV2LCBmYWxzZSk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmICh0cG1fcHQtPm9wdGlv bnMpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHFhcGlfZnJlZV9UUE1FbXVsYXRvck9wdGlvbnMo dHBtX3B0LT5vcHRpb25zKTsNCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlm ICh0cG1fcHQtPm1pZ3JhdGlvbl9ibG9ja2VyKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBtaWdy YXRlX2RlbF9ibG9ja2VyKHRwbV9wdC0+bWlncmF0aW9uX2Jsb2NrZXIpOw0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgZXJyb3JfZnJlZSh0cG1fcHQtPm1pZ3JhdGlvbl9ibG9ja2VyKTsNCj4gPiArwqDC oMKgwqB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHRwbV9lbXVsYXRvcl9jbGFz c19pbml0KE9iamVjdENsYXNzICprbGFzcywgdm9pZA0KPiA+ICpkYXRhKQ0KPiA+ICt7DQo+ID4g K8KgwqDCoMKgVFBNQmFja2VuZENsYXNzICp0YmMgPSBUUE1fQkFDS0VORF9DTEFTUyhrbGFzcyk7 DQo+ID4gK8KgwqDCoMKgdGJjLT5vcHMgPSAmdHBtX2VtdWxhdG9yX2RyaXZlcjsNCj4gPiArwqDC oMKgwqB0YmMtPmhhbmRsZV9yZXF1ZXN0ID0gdHBtX2VtdWxhdG9yX2hhbmRsZV9yZXF1ZXN0Ow0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgVHlwZUluZm8gdHBtX2VtdWxhdG9yX2lu Zm8gPSB7DQo+ID4gK8KgwqDCoMKgLm5hbWUgPSBUWVBFX1RQTV9FTVVMQVRPUiwNCj4gPiArwqDC oMKgwqAucGFyZW50ID0gVFlQRV9UUE1fQkFDS0VORCwNCj4gPiArwqDCoMKgwqAuaW5zdGFuY2Vf c2l6ZSA9IHNpemVvZihUUE1FbXVsYXRvciksDQo+ID4gK8KgwqDCoMKgLmNsYXNzX2luaXQgPSB0 cG1fZW11bGF0b3JfY2xhc3NfaW5pdCwNCj4gPiArwqDCoMKgwqAuaW5zdGFuY2VfaW5pdCA9IHRw bV9lbXVsYXRvcl9pbnN0X2luaXQsDQo+ID4gK8KgwqDCoMKgLmluc3RhbmNlX2ZpbmFsaXplID0g dHBtX2VtdWxhdG9yX2luc3RfZmluYWxpemUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCB0cG1fZW11bGF0b3JfcmVnaXN0ZXIodm9pZCkNCj4gPiArew0KPiA+ICvCoMKgwqDCoHR5 cGVfcmVnaXN0ZXJfc3RhdGljKCZ0cG1fZW11bGF0b3JfaW5mbyk7DQo+ID4gK8KgwqDCoMKgdHBt X3JlZ2lzdGVyX2RyaXZlcigmdHBtX2VtdWxhdG9yX2RyaXZlcik7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3R5cGVfaW5pdCh0cG1fZW11bGF0b3JfcmVnaXN0ZXIpDQo+ID4gZGlmZiAtLWdpdCBhL2h3 L3RwbS90cG1faW9jdGwuaCBiL2h3L3RwbS90cG1faW9jdGwuaA0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uMzM1NjRiMQ0KPiA+IC0tLSAvZGV2L251bGwNCj4g PiArKysgYi9ody90cG0vdHBtX2lvY3RsLmgNCj4gVGhpcyBmaWxlIGlzIGNvcGllZCBmcm9tIHN3 dHBtIHByb2plY3QuIENvdWxkIHN3dHBtIGhhdmUgaXQgaW5zdGFsbGVkDQo+IG9uIHN5c3RlbSBp bnN0ZWFkPw0KPiANCj4gPiANCj4gPiBAQCAtMCwwICsxLDI0NiBAQA0KPiA+ICsvKg0KPiA+ICsg KiB0cG1faW9jdGwuaA0KPiA+ICsgKg0KPiA+ICsgKiAoYykgQ29weXJpZ2h0IElCTSBDb3Jwb3Jh dGlvbiAyMDE0LCAyMDE1Lg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAzLWNsYXVzZSBCU0QNCj4gPiBsaWNlbnNlDQo+ID4gKyAq Lw0KPiA+ICsjaWZuZGVmIF9UUE1fSU9DVExfSF8NCj4gPiArI2RlZmluZSBfVFBNX0lPQ1RMX0hf DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gKyNpbmNsdWRlIDxzeXMvdWlv Lmg+DQo+ID4gKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCj4gPiArI2luY2x1ZGUgPHN5cy9pb2N0 bC5oPg0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogRXZlcnkgcmVzcG9uc2UgZnJvbSBhIGNvbW1h bmQgaW52b2x2aW5nIGEgVFBNIGNvbW1hbmQgZXhlY3V0aW9uDQo+ID4gbXVzdCBob2xkDQo+ID4g KyAqIHRoZSBwdG1fcmVzIGFzIHRoZSBmaXJzdCBlbGVtZW50Lg0KPiA+ICsgKiBwdG1fcmVzIGNv cnJlc3BvbmRzIHRvIHRoZSBlcnJvciBjb2RlIG9mIGEgY29tbWFuZCBleGVjdXRlZCBieQ0KPiA+ IHRoZSBUUE0uDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArdHlwZWRlZiB1aW50MzJfdCBwdG1fcmVz Ow0KPiA+ICsNCj4gPiArLyogUFRNX0dFVF9UUE1FU1RBQkxJU0hFRDogZ2V0IHRoZSBlc3RhYmxp c2htZW50IGJpdCAqLw0KPiA+ICtzdHJ1Y3QgcHRtX2VzdCB7DQo+ID4gK8KgwqDCoMKgdW5pb24g ew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcHRtX3JlcyB0cG1fcmVzdWx0Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1 bnNpZ25lZCBjaGFyIGJpdDsgLyogVFBNIGVzdGFibGlzaGVkIGJpdCAqLw0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgfSByZXNwOyAvKiByZXNwb25zZSAqLw0KPiA+ICvCoMKgwqDCoH0gdTsNCj4gPiAr fTsNCj4gPiArDQo+ID4gKy8qIFBUTV9SRVNFVF9UUE1FU1RBQkxJU0hFRDogcmVzZXQgZXN0YWJs aXNobWVudCBiaXQgKi8NCj4gPiArc3RydWN0IHB0bV9yZXNldF9lc3Qgew0KPiA+ICvCoMKgwqDC oHVuaW9uIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHVpbnQ4X3QgbG9jOyAvKiBsb2NhbGl0eSB0byB1c2UgKi8NCj4gPiArwqDC oMKgwqDCoMKgwqDCoH0gcmVxOyAvKiByZXF1ZXN0ICovDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBz dHJ1Y3Qgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdG1fcmVzIHRwbV9yZXN1bHQ7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB9IHJlc3A7IC8qIHJlc3BvbnNlICovDQo+ID4gK8KgwqDC oMKgfSB1Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyogUFRNX0lOSVQgKi8NCj4gPiArc3RydWN0 IHB0bV9pbml0IHsNCj4gPiArwqDCoMKgwqB1bmlvbiB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBz dHJ1Y3Qgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50MzJfdCBpbml0X2ZsYWdz OyAvKiBzZWUgZGVmaW5pdGlvbnMgYmVsb3cgKi8NCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0gcmVx OyAvKiByZXF1ZXN0ICovDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgew0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBwdG1fcmVzIHRwbV9yZXN1bHQ7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqB9IHJlc3A7IC8qIHJlc3BvbnNlICovDQo+ID4gK8KgwqDCoMKgfSB1Ow0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArLyogYWJvdmUgaW5pdF9mbGFncyAqLw0KPiA+ICsjZGVmaW5lIFBUTV9JTklU X0ZMQUdfREVMRVRFX1ZPTEFUSUxFICgxIDw8IDApDQo+ID4gK8KgwqDCoMKgLyogZGVsZXRlIHZv bGF0aWxlIHN0YXRlIGZpbGUgYWZ0ZXIgcmVhZGluZyBpdCAqLw0KPiA+ICsNCj4gPiArLyogUFRN X1NFVF9MT0NBTElUWSAqLw0KPiA+ICtzdHJ1Y3QgcHRtX2xvYyB7DQo+ID4gK8KgwqDCoMKgdW5p b24gew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdWludDhfdCBsb2M7IC8qIGxvY2FsaXR5IHRvIHNldCAqLw0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgfSByZXE7IC8qIHJlcXVlc3QgKi8NCj4gPiArwqDCoMKgwqDCoMKgwqDCoHN0cnVj dCB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB0bV9yZXMgdHBtX3Jlc3VsdDsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoH0gcmVzcDsgLyogcmVzcG9uc2UgKi8NCj4gPiArwqDCoMKgwqB9 IHU7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiBQVE1fSEFTSF9EQVRBOiBoYXNoIGdpdmVuIGRh dGEgKi8NCj4gPiArc3RydWN0IHB0bV9oZGF0YSB7DQo+ID4gK8KgwqDCoMKgdW5pb24gew0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dWludDMyX3QgbGVuZ3RoOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50OF90IGRh dGFbNDA5Nl07DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB9IHJlcTsgLyogcmVxdWVzdCAqLw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cHRtX3JlcyB0cG1fcmVzdWx0Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgfSByZXNwOyAvKiByZXNw b25zZSAqLw0KPiA+ICvCoMKgwqDCoH0gdTsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qDQo+ID4g KyAqIHNpemUgb2YgdGhlIFRQTSBzdGF0ZSBibG9iIHRvIHRyYW5zZmVyOyB4ODZfNjQgY2FuIGhh bmRsZSA4aywNCj4gPiArICogcHBjNjRsZSBvbmx5IH43azsga2VlcCB0aGUgcmVzcG9uc2UgYmVs b3cgYSA0ayBwYWdlIHNpemUNCj4gPiArICovDQo+ID4gKyNkZWZpbmUgUFRNX1NUQVRFX0JMT0Jf U0laRSAoMyAqIDEwMjQpDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBUaGUgZm9sbG93aW5nIGlz IHRoZSBkYXRhIHN0cnVjdHVyZSB0byBnZXQgc3RhdGUgYmxvYnMgZnJvbSB0aGUNCj4gPiBUUE0u DQo+ID4gKyAqIElmIHRoZSBzaXplIG9mIHRoZSBzdGF0ZSBibG9iIGV4Y2VlZHMgdGhlIFBUTV9T VEFURV9CTE9CX1NJWkUsDQo+ID4gbXVsdGlwbGUgcmVhZHMNCj4gPiArICogd2l0aCB0aGlzIGlv Y3RsIGFuZCB3aXRoIGFkanVzdGVkIG9mZnNldCBhcmUgbmVjZXNzYXJ5LiBBbGwNCj4gPiBieXRl cw0KPiA+ICsgKiBtdXN0IGJlIHRyYW5zZmVycmVkIGFuZCB0aGUgdHJhbnNmZXIgaXMgZG9uZSBv bmNlIHRoZSBsYXN0IGJ5dGUNCj4gPiBoYXMgYmVlbg0KPiA+ICsgKiByZXR1cm5lZC4NCj4gPiAr ICogSXQgaXMgcG9zc2libGUgdG8gdXNlIHRoZSByZWFkKCkgaW50ZXJmYWNlIGZvciByZWFkaW5n IHRoZQ0KPiA+IGRhdGE7IGhvd2V2ZXIsIHRoZQ0KPiA+ICsgKiBmaXJzdCBieXRlcyBvZiB0aGUg c3RhdGUgYmxvYiB3aWxsIGJlIHBhcnQgb2YgdGhlIHJlc3BvbnNlIHRvDQo+ID4gdGhlIGlvY3Rs KCk7IGENCj4gPiArICogc3Vic2VxdWVudCByZWFkKCkgaXMgb25seSBuZWNlc3NhcnkgaWYgdGhl IHRvdGFsIGxlbmd0aA0KPiA+ICh0b3RsZW5ndGgpIGV4Y2VlZHMNCj4gPiArICogdGhlIG51bWJl ciBvZiByZWNlaXZlZCBieXRlcy4gc2VlaygpIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ID4gKyAqLw0K PiA+ICtzdHJ1Y3QgcHRtX2dldHN0YXRlIHsNCj4gPiArwqDCoMKgwqB1bmlvbiB7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50 MzJfdCBzdGF0ZV9mbGFnczsgLyogbWF5IGJlOg0KPiA+IFBUTV9TVEFURV9GTEFHX0RFQ1JZUFRF RCAqLw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50MzJfdCB0eXBlO8KgwqDCoMKg wqDCoMKgwqAvKiB3aGljaCBibG9iIHRvIHB1bGwgKi8NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdWludDMyX3Qgb2Zmc2V0O8KgwqDCoMKgwqDCoC8qIG9mZnNldCBmcm9tIHdoZXJlIHRv IHJlYWQgKi8NCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0gcmVxOyAvKiByZXF1ZXN0ICovDQo+ID4g K8KgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBw dG1fcmVzIHRwbV9yZXN1bHQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90 IHN0YXRlX2ZsYWdzOyAvKiBtYXkgYmU6DQo+ID4gUFRNX1NUQVRFX0ZMQUdfRU5DUllQVEVEICov DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90IHRvdGxlbmd0aDvCoMKgwqAv KiB0b3RhbCBsZW5ndGggdGhhdCB3aWxsIGJlDQo+ID4gdHJhbnNmZXJyZWQgKi8NCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDMyX3QgbGVuZ3RoO8KgwqDCoMKgwqDCoC8qIG51bWJl ciBvZiBieXRlcyBpbiBmb2xsb3dpbmcNCj4gPiBidWZmZXIgKi8NCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdWludDhfdMKgwqBkYXRhW1BUTV9TVEFURV9CTE9CX1NJWkVdOw0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgfSByZXNwOyAvKiByZXNwb25zZSAqLw0KPiA+ICvCoMKgwqDCoH0gdTsN Cj4gPiArfTsNCj4gPiArDQo+ID4gKy8qIFRQTSBzdGF0ZSBibG9iIHR5cGVzICovDQo+ID4gKyNk ZWZpbmUgUFRNX0JMT0JfVFlQRV9QRVJNQU5FTlTCoMKgMQ0KPiA+ICsjZGVmaW5lIFBUTV9CTE9C X1RZUEVfVk9MQVRJTEXCoMKgwqAyDQo+ID4gKyNkZWZpbmUgUFRNX0JMT0JfVFlQRV9TQVZFU1RB VEXCoMKgMw0KPiA+ICsNCj4gPiArLyogc3RhdGVfZmxhZ3MgYWJvdmUgOiAqLw0KPiA+ICsjZGVm aW5lIFBUTV9TVEFURV9GTEFHX0RFQ1JZUFRFRMKgwqDCoMKgwqAxIC8qIG9uIGlucHV0OsKgwqBn ZXQgZGVjcnlwdGVkDQo+ID4gc3RhdGUgKi8NCj4gPiArI2RlZmluZSBQVE1fU1RBVEVfRkxBR19F TkNSWVBURUTCoMKgwqDCoMKgMiAvKiBvbiBvdXRwdXQ6IHN0YXRlIGlzDQo+ID4gZW5jcnlwdGVk ICovDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBkYXRhIHN0 cnVjdHVyZSB0byBzZXQgc3RhdGUgYmxvYnMgaW4gdGhlDQo+ID4gVFBNLg0KPiA+ICsgKiBJZiB0 aGUgc2l6ZSBvZiB0aGUgc3RhdGUgYmxvYiBleGNlZWRzIHRoZSBQVE1fU1RBVEVfQkxPQl9TSVpF LA0KPiA+IG11bHRpcGxlDQo+ID4gKyAqICd3cml0ZXMnIHVzaW5nIHRoaXMgaW9jdGwgYXJlIG5l Y2Vzc2FyeS4gVGhlIGxhc3QgcGFja2V0IGlzDQo+ID4gaW5kaWNhdGVkDQo+ID4gKyAqIGJ5IHRo ZSBsZW5ndGggYmVpbmcgc21hbGxlciB0aGFuIHRoZSBQVE1fU1RBVEVfQkxPQl9TSVpFLg0KPiA+ ICsgKiBUaGUgdmVyeSBmaXJzdCBwYWNrZXQgbWF5IGhhdmUgYSBsZW5ndGggaW5kaWNhdG9yIG9m ICcwJw0KPiA+IGVuYWJsaW5nDQo+ID4gKyAqIGEgd3JpdGUoKSB3aXRoIGFsbCB0aGUgYnl0ZXMg ZnJvbSBhIGJ1ZmZlci4gSWYgdGhlIHdyaXRlKCkNCj4gPiBpbnRlcmZhY2UNCj4gPiArICogaXMg dXNlZCwgYSBmaW5hbCBpb2N0bCB3aXRoIGEgbm9uLWZ1bGwgYnVmZmVyIG11c3QgYmUgbWFkZSB0 bw0KPiA+IGluZGljYXRlDQo+ID4gKyAqIHRoYXQgYWxsIGRhdGEgd2VyZSB0cmFuc2ZlcnJlZCAo YSB3cml0ZSB3aXRoIDAgYnl0ZXMgd291bGQgbm90DQo+ID4gd29yaykuDQo+ID4gKyAqLw0KPiA+ ICtzdHJ1Y3QgcHRtX3NldHN0YXRlIHsNCj4gPiArwqDCoMKgwqB1bmlvbiB7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqBzdHJ1Y3Qgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50MzJf dCBzdGF0ZV9mbGFnczsgLyogbWF5IGJlDQo+ID4gUFRNX1NUQVRFX0ZMQUdfRU5DUllQVEVEICov DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90IHR5cGU7wqDCoMKgwqDCoMKg wqDCoC8qIHdoaWNoIGJsb2IgdG8gc2V0ICovDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHVpbnQzMl90IGxlbmd0aDvCoMKgwqDCoMKgwqAvKiBsZW5ndGggb2YgdGhlIGRhdGE7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgdXNlIDAgb24gdGhlIGZpcnN0IHBhY2tldCB0bw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHRyYW5zZmVyIHVzaW5nIHdyaXRlKCkgKi8NCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdWludDhfdCBkYXRhW1BUTV9TVEFURV9CTE9CX1NJWkVdOw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgfSByZXE7IC8qIHJlcXVlc3QgKi8NCj4gPiArwqDCoMKgwqDCoMKgwqDCoHN0 cnVjdCB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB0bV9yZXMgdHBtX3Jlc3VsdDsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoH0gcmVzcDsgLyogcmVzcG9uc2UgKi8NCj4gPiArwqDCoMKg wqB9IHU7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBQVE1fR0VUX0NPTkZJRzog RGF0YSBzdHJ1Y3R1cmUgdG8gZ2V0IHJ1bnRpbWUgY29uZmlndXJhdGlvbg0KPiA+IGluZm9ybWF0 aW9uDQo+ID4gKyAqIHN1Y2ggYXMgd2hpY2gga2V5cyBhcmUgYXBwbGllZC4NCj4gPiArICovDQo+ ID4gK3N0cnVjdCBwdG1fZ2V0Y29uZmlnIHsNCj4gPiArwqDCoMKgwqB1bmlvbiB7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdG1f cmVzIHRwbV9yZXN1bHQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90IGZs YWdzOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgfSByZXNwOyAvKiByZXNwb25zZSAqLw0KPiA+ICvC oMKgwqDCoH0gdTsNCj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgUFRNX0NPTkZJR19GTEFH X0ZJTEVfS0VZwqDCoMKgwqDCoMKgwqDCoDB4MQ0KPiA+ICsjZGVmaW5lIFBUTV9DT05GSUdfRkxB R19NSUdSQVRJT05fS0VZwqDCoMKgMHgyDQo+ID4gKw0KPiA+ICsNCj4gPiArdHlwZWRlZiB1aW50 NjRfdCBwdG1fY2FwOw0KPiA+ICt0eXBlZGVmIHN0cnVjdCBwdG1fZXN0IHB0bV9lc3Q7DQo+ID4g K3R5cGVkZWYgc3RydWN0IHB0bV9yZXNldF9lc3QgcHRtX3Jlc2V0X2VzdDsNCj4gPiArdHlwZWRl ZiBzdHJ1Y3QgcHRtX2xvYyBwdG1fbG9jOw0KPiA+ICt0eXBlZGVmIHN0cnVjdCBwdG1faGRhdGEg cHRtX2hkYXRhOw0KPiA+ICt0eXBlZGVmIHN0cnVjdCBwdG1faW5pdCBwdG1faW5pdDsNCj4gPiAr dHlwZWRlZiBzdHJ1Y3QgcHRtX2dldHN0YXRlIHB0bV9nZXRzdGF0ZTsNCj4gPiArdHlwZWRlZiBz dHJ1Y3QgcHRtX3NldHN0YXRlIHB0bV9zZXRzdGF0ZTsNCj4gPiArdHlwZWRlZiBzdHJ1Y3QgcHRt X2dldGNvbmZpZyBwdG1fZ2V0Y29uZmlnOw0KPiA+ICsNCj4gPiArLyogY2FwYWJpbGl0eSBmbGFn cyByZXR1cm5lZCBieSBQVE1fR0VUX0NBUEFCSUxJVFkgKi8NCj4gPiArI2RlZmluZSBQVE1fQ0FQ X0lOSVTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMSkNCj4gPiArI2RlZmluZSBQVE1f Q0FQX1NIVVRET1dOwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgxIDw8IDEpDQo+ID4gKyNkZWZpbmUg UFRNX0NBUF9HRVRfVFBNRVNUQUJMSVNIRUQgKDEgPDwgMikNCj4gPiArI2RlZmluZSBQVE1fQ0FQ X1NFVF9MT0NBTElUWcKgwqDCoMKgwqDCoMKgKDEgPDwgMykNCj4gPiArI2RlZmluZSBQVE1fQ0FQ X0hBU0hJTkfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMSA8PCA0KQ0KPiA+ICsjZGVmaW5lIFBU TV9DQVBfQ0FOQ0VMX1RQTV9DTUTCoMKgwqDCoMKgKDEgPDwgNSkNCj4gPiArI2RlZmluZSBQVE1f Q0FQX1NUT1JFX1ZPTEFUSUxFwqDCoMKgwqDCoCgxIDw8IDYpDQo+ID4gKyNkZWZpbmUgUFRNX0NB UF9SRVNFVF9UUE1FU1RBQkxJU0hFRCAoMSA8PCA3KQ0KPiA+ICsjZGVmaW5lIFBUTV9DQVBfR0VU X1NUQVRFQkxPQsKgwqDCoMKgwqDCoCgxIDw8IDgpDQo+ID4gKyNkZWZpbmUgUFRNX0NBUF9TRVRf U1RBVEVCTE9CwqDCoMKgwqDCoMKgKDEgPDwgOSkNCj4gPiArI2RlZmluZSBQVE1fQ0FQX1NUT1DC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMSA8PCAxMCkNCj4gPiArI2RlZmluZSBQVE1f Q0FQX0dFVF9DT05GSUfCoMKgwqDCoMKgwqDCoMKgwqAoMSA8PCAxMSkNCj4gPiArI2RlZmluZSBQ VE1fQ0FQX1NFVF9EQVRBRkTCoMKgwqDCoMKgwqDCoMKgwqAoMSA8PCAxMikNCj4gPiArDQo+ID4g K2VudW0gew0KPiA+ICvCoMKgwqDCoFBUTV9HRVRfQ0FQQUJJTElUWcKgwqDCoMKgwqA9IF9JT1Io J1AnLCAwLCBwdG1fY2FwKSwNCj4gPiArwqDCoMKgwqBQVE1fSU5JVMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoD0gX0lPV1IoJ1AnLCAxLCBwdG1faW5pdCksDQo+ID4gK8KgwqDCoMKgUFRN X1NIVVRET1dOwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gX0lPUignUCcsIDIsIHB0bV9yZXMpLA0K PiA+ICvCoMKgwqDCoFBUTV9HRVRfVFBNRVNUQUJMSVNIRUQgPSBfSU9SKCdQJywgMywgcHRtX2Vz dCksDQo+ID4gK8KgwqDCoMKgUFRNX1NFVF9MT0NBTElUWcKgwqDCoMKgwqDCoMKgPSBfSU9XUign UCcsIDQsIHB0bV9sb2MpLA0KPiA+ICvCoMKgwqDCoFBUTV9IQVNIX1NUQVJUwqDCoMKgwqDCoMKg wqDCoMKgPSBfSU9SKCdQJywgNSwgcHRtX3JlcyksDQo+ID4gK8KgwqDCoMKgUFRNX0hBU0hfREFU QcKgwqDCoMKgwqDCoMKgwqDCoMKgPSBfSU9XUignUCcsIDYsIHB0bV9oZGF0YSksDQo+ID4gK8Kg wqDCoMKgUFRNX0hBU0hfRU5EwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gX0lPUignUCcsIDcsIHB0 bV9yZXMpLA0KPiA+ICvCoMKgwqDCoFBUTV9DQU5DRUxfVFBNX0NNRMKgwqDCoMKgwqA9IF9JT1Io J1AnLCA4LCBwdG1fcmVzKSwNCj4gPiArwqDCoMKgwqBQVE1fU1RPUkVfVk9MQVRJTEXCoMKgwqDC oMKgPSBfSU9SKCdQJywgOSwgcHRtX3JlcyksDQo+ID4gK8KgwqDCoMKgUFRNX1JFU0VUX1RQTUVT VEFCTElTSEVEID0gX0lPV1IoJ1AnLCAxMCwgcHRtX3Jlc2V0X2VzdCksDQo+ID4gK8KgwqDCoMKg UFRNX0dFVF9TVEFURUJMT0LCoMKgwqDCoMKgwqA9IF9JT1dSKCdQJywgMTEsIHB0bV9nZXRzdGF0 ZSksDQo+ID4gK8KgwqDCoMKgUFRNX1NFVF9TVEFURUJMT0LCoMKgwqDCoMKgwqA9IF9JT1dSKCdQ JywgMTIsIHB0bV9zZXRzdGF0ZSksDQo+ID4gK8KgwqDCoMKgUFRNX1NUT1DCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqA9IF9JT1IoJ1AnLCAxMywgcHRtX3JlcyksDQo+ID4gK8KgwqDCoMKg UFRNX0dFVF9DT05GSUfCoMKgwqDCoMKgwqDCoMKgwqA9IF9JT1IoJ1AnLCAxNCwgcHRtX2dldGNv bmZpZyksDQo+ID4gK8KgwqDCoMKgUFRNX1NFVF9EQVRBRkTCoMKgwqDCoMKgwqDCoMKgwqA9IF9J T1IoJ1AnLCAxNSwgcHRtX3JlcyksDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBD b21tYW5kcyB1c2VkIGJ5IHRoZSBub24tQ1VTRSBUUE1zDQo+ID4gKyAqDQo+ID4gKyAqIEFsbCBt ZXNzYWdlcyBjb250YWluZXIgYmlnLWVuZGlhbiBkYXRhLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGUg cmV0dXJuIG1lc3NhZ2VzIG9ubHkgY29udGFpbiB0aGUgJ3Jlc3AnIHBhcnQgb2YgdGhlIHVuaW9u cw0KPiA+ICsgKiBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFib3ZlLiBCZXNpZGVzIHRoYXQgdGhl IGxpbWl0cyBpbiB0aGUNCj4gPiArICogYnVmZmVycyBhYm92ZSAocHRtX2hkYXRhOnUucmVxLmRh dGEgYW5kDQo+ID4gcHRtX2dldF9zdGF0ZTp1LnJlc3AuZGF0YQ0KPiA+ICsgKiBhbmQgcHRtX3Nl dF9zdGF0ZTp1LnJlcS5kYXRhKSBhcmUgMHhmZmZmZmZmZi4NCj4gPiArICovDQo+ID4gK2VudW0g ew0KPiA+ICvCoMKgwqDCoENNRF9HRVRfQ0FQQUJJTElUWSA9IDEsDQo+ID4gK8KgwqDCoMKgQ01E X0lOSVQsDQo+ID4gK8KgwqDCoMKgQ01EX1NIVVRET1dOLA0KPiA+ICvCoMKgwqDCoENNRF9HRVRf VFBNRVNUQUJMSVNIRUQsDQo+ID4gK8KgwqDCoMKgQ01EX1NFVF9MT0NBTElUWSwNCj4gPiArwqDC oMKgwqBDTURfSEFTSF9TVEFSVCwNCj4gPiArwqDCoMKgwqBDTURfSEFTSF9EQVRBLA0KPiA+ICvC oMKgwqDCoENNRF9IQVNIX0VORCwNCj4gPiArwqDCoMKgwqBDTURfQ0FOQ0VMX1RQTV9DTUQsDQo+ ID4gK8KgwqDCoMKgQ01EX1NUT1JFX1ZPTEFUSUxFLA0KPiA+ICvCoMKgwqDCoENNRF9SRVNFVF9U UE1FU1RBQkxJU0hFRCwNCj4gPiArwqDCoMKgwqBDTURfR0VUX1NUQVRFQkxPQiwNCj4gPiArwqDC oMKgwqBDTURfU0VUX1NUQVRFQkxPQiwNCj4gPiArwqDCoMKgwqBDTURfU1RPUCwNCj4gPiArwqDC oMKgwqBDTURfR0VUX0NPTkZJRywNCj4gPiArwqDCoMKgwqBDTURfU0VUX0RBVEFGRA0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArI2VuZGlmIC8qIF9UUE1fSU9DVExfSCAqLw0KPiA+IGRpZmYgLS1naXQg YS9xYXBpL3RwbS5qc29uIGIvcWFwaS90cG0uanNvbg0KPiA+IGluZGV4IGU4YjJkOGQuLjcwOTNm MjYgMTAwNjQ0DQo+ID4gLS0tIGEvcWFwaS90cG0uanNvbg0KPiA+ICsrKyBiL3FhcGkvdHBtLmpz b24NCj4gPiBAQCAtMzksMTAgKzM5LDEyIEBADQo+ID4gwqAjIEFuIGVudW1lcmF0aW9uIG9mIFRQ TSB0eXBlcw0KPiA+IMKgIw0KPiA+IMKgIyBAcGFzc3Rocm91Z2g6IFRQTSBwYXNzdGhyb3VnaCB0 eXBlDQo+ID4gKyMgQGVtdWxhdG9yOiBTb2Z0d2FyZSBFbXVsYXRvciBUUE0gdHlwZQ0KPiA+ICsj wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgU2luY2U6IDIuMTENCj4gPiDCoCMNCj4gPiDCoCMgU2lu Y2U6IDEuNQ0KPiA+IMKgIyMNCj4gPiAteyAnZW51bSc6ICdUcG1UeXBlJywgJ2RhdGEnOiBbICdw YXNzdGhyb3VnaCcgXSB9DQo+ID4gK3sgJ2VudW0nOiAnVHBtVHlwZScsICdkYXRhJzogWyAncGFz c3Rocm91Z2gnLCAnZW11bGF0b3InIF0gfQ0KPiA+IA0KPiA+IMKgIyMNCj4gPiDCoCMgQHF1ZXJ5 LXRwbS10eXBlczoNCj4gPiBAQCAtNTYsNyArNTgsNyBAQA0KPiA+IMKgIyBFeGFtcGxlOg0KPiA+ IMKgIw0KPiA+IMKgIyAtPiB7ICJleGVjdXRlIjogInF1ZXJ5LXRwbS10eXBlcyIgfQ0KPiA+IC0j IDwtIHsgInJldHVybiI6IFsgInBhc3N0aHJvdWdoIiBdIH0NCj4gPiArIyA8LSB7ICJyZXR1cm4i OiBbICJwYXNzdGhyb3VnaCIsICJlbXVsYXRvciIgXSB9DQo+ID4gwqAjDQo+ID4gwqAjIw0KPiA+ IMKgeyAnY29tbWFuZCc6ICdxdWVyeS10cG0tdHlwZXMnLCAncmV0dXJucyc6IFsnVHBtVHlwZSdd IH0NCj4gPiBAQCAtNzcsMTYgKzc5LDI5IEBADQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAnKmNhbmNlbC1wYXRoJyA6DQo+ID4gJ3N0cid9IH0NCj4gPiANCj4gPiDCoCMj DQo+ID4gKyMgQFRQTUVtdWxhdG9yT3B0aW9uczoNCj4gPiArIw0KPiA+ICsjIEluZm9ybWF0aW9u IGFib3V0IHRoZSBUUE0gZW11bGF0b3IgdHlwZQ0KPiA+ICsjDQo+ID4gKyMgQGNoYXJkZXY6IE5h bWUgb2YgYSB1bml4IHNvY2tldCBjaGFyZGV2DQo+ID4gKyMNCj4gPiArIyBTaW5jZTogMi4xMQ0K PiA+ICsjIw0KPiA+ICt7ICdzdHJ1Y3QnOiAnVFBNRW11bGF0b3JPcHRpb25zJywgJ2RhdGEnOiB7 ICdjaGFyZGV2JyA6ICdzdHInIH0gfQ0KPiA+ICsNCj4gPiArIyMNCj4gPiDCoCMgQFRwbVR5cGVP cHRpb25zOg0KPiA+IMKgIw0KPiA+IMKgIyBBIHVuaW9uIHJlZmVyZW5jaW5nIGRpZmZlcmVudCBU UE0gYmFja2VuZCB0eXBlcycgY29uZmlndXJhdGlvbg0KPiA+IG9wdGlvbnMNCj4gPiDCoCMNCj4g PiDCoCMgQHR5cGU6ICdwYXNzdGhyb3VnaCcgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3Ig dGhlIFRQTQ0KPiA+IHBhc3N0aHJvdWdoIHR5cGUNCj4gPiArI8KgwqDCoMKgwqDCoMKgwqAnZW11 bGF0b3InIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFRQTSBlbXVsYXRvcg0KPiA+IGJh Y2tlbmQgdHlwZQ0KPiA+IMKgIw0KPiA+IMKgIyBTaW5jZTogMS41DQo+ID4gwqAjIw0KPiA+IMKg eyAndW5pb24nOiAnVHBtVHlwZU9wdGlvbnMnLA0KPiA+IC3CoMKgwqAnZGF0YSc6IHsgJ3Bhc3N0 aHJvdWdoJyA6ICdUUE1QYXNzdGhyb3VnaE9wdGlvbnMnIH0gfQ0KPiA+ICvCoMKgwqAnZGF0YSc6 IHsgJ3Bhc3N0aHJvdWdoJyA6ICdUUE1QYXNzdGhyb3VnaE9wdGlvbnMnLA0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCdlbXVsYXRvcic6ICdUUE1FbXVsYXRvck9wdGlvbnMnIH0gfQ0K PiA+IA0KPiA+IMKgIyMNCj4gPiDCoCMgQFRQTUluZm86DQo+ID4gZGlmZiAtLWdpdCBhL3FlbXUt b3B0aW9ucy5oeCBiL3FlbXUtb3B0aW9ucy5oeA0KPiA+IGluZGV4IDc3ODU5YTIuLjFlOTNlNTMg MTAwNjQ0DQo+ID4gLS0tIGEvcWVtdS1vcHRpb25zLmh4DQo+ID4gKysrIGIvcWVtdS1vcHRpb25z Lmh4DQo+ID4gQEAgLTMxMjEsNyArMzEyMSw5IEBAIERFRigidHBtZGV2IiwgSEFTX0FSRywgUUVN VV9PUFRJT05fdHBtZGV2LCBcDQo+ID4gwqDCoMKgwqDCoCItdHBtZGV2IHBhc3N0aHJvdWdoLGlk PWlkWyxwYXRoPXBhdGhdWyxjYW5jZWwtcGF0aD1wYXRoXVxuIg0KPiA+IMKgwqDCoMKgwqAiwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1c2UgcGF0aCB0byBwcm92aWRlIHBhdGggdG8g YSBjaGFyYWN0ZXINCj4gPiBkZXZpY2U7IGRlZmF1bHQgaXMgL2Rldi90cG0wXG4iDQo+ID4gwqDC oMKgwqDCoCLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVzZSBjYW5jZWwtcGF0aCB0 byBwcm92aWRlIHBhdGggdG8gVFBNJ3MNCj4gPiBjYW5jZWwgc3lzZnMgZW50cnk7IGlmXG4iDQo+ ID4gLcKgwqDCoMKgIsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbm90IHByb3ZpZGVk IGl0IHdpbGwgYmUgc2VhcmNoZWQgZm9yIGluDQo+ID4gL3N5cy9jbGFzcy9taXNjL3RwbT8vZGV2 aWNlXG4iLA0KPiA+ICvCoMKgwqDCoCLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5v dCBwcm92aWRlZCBpdCB3aWxsIGJlIHNlYXJjaGVkIGZvciBpbg0KPiA+IC9zeXMvY2xhc3MvbWlz Yy90cG0/L2RldmljZVxuIg0KPiA+ICvCoMKgwqDCoCItdHBtZGV2IGVtdWxhdG9yLGlkPWlkLGNo YXJkZXY9ZGV2XG4iDQo+ID4gK8KgwqDCoMKgIsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY29uZmlndXJlIHRoZSBUUE0gZGV2aWNlIHVzaW5nIGNoYXJkZXYNCj4gPiBiYWNrZW5kXG4i LA0KPiA+IMKgwqDCoMKgwqBRRU1VX0FSQ0hfQUxMKQ0KPiA+IMKgU1RFWEkNCj4gPiANCj4gPiBA QCAtMzEzMCw4ICszMTMyLDggQEAgVGhlIGdlbmVyYWwgZm9ybSBvZiBhIFRQTSBkZXZpY2Ugb3B0 aW9uIGlzOg0KPiA+IA0KPiA+IMKgQGl0ZW0gLXRwbWRldiBAdmFye2JhY2tlbmR9ICxpZD1AdmFy e2lkfSBbLEB2YXJ7b3B0aW9uc31dDQo+ID4gwqBAZmluZGV4IC10cG1kZXYNCj4gPiAtQmFja2Vu ZCB0eXBlIG11c3QgYmU6DQo+ID4gLUBvcHRpb257cGFzc3Rocm91Z2h9Lg0KPiA+ICtCYWNrZW5k IHR5cGUgbXVzdCBiZSBlaXRoZXIgb25lIG9mIHRoZSBmb2xsb3dpbmc6DQo+ID4gK0BvcHRpb257 cGFzc3Rocm91Z2h9LCBAb3B0aW9ue2VtdWxhdG9yfS4NCj4gPiANCj4gPiDCoFRoZSBzcGVjaWZp YyBiYWNrZW5kIHR5cGUgd2lsbCBkZXRlcm1pbmUgdGhlIGFwcGxpY2FibGUgb3B0aW9ucy4NCj4g PiDCoFRoZSBAY29kZXstdHBtZGV2fSBvcHRpb24gY3JlYXRlcyB0aGUgVFBNIGJhY2tlbmQgYW5k IHJlcXVpcmVzIGENCj4gPiBAQCAtMzE4MSw2ICszMTgzLDIwIEBAIFRvIGNyZWF0ZSBhIHBhc3N0 aHJvdWdoIFRQTSB1c2UgdGhlDQo+ID4gZm9sbG93aW5nIHR3byBvcHRpb25zOg0KPiA+IMKgTm90 ZSB0aGF0IHRoZSBAY29kZXstdHBtZGV2fSBpZCBpcyBAY29kZXt0cG0wfSBhbmQgaXMgcmVmZXJl bmNlZA0KPiA+IGJ5DQo+ID4gwqBAY29kZXt0cG1kZXY9dHBtMH0gaW4gdGhlIGRldmljZSBvcHRp b24uDQo+ID4gDQo+ID4gK0BpdGVtIC10cG1kZXYgZW11bGF0b3IsIGlkPUB2YXJ7aWR9LCBjaGFy ZGV2PUB2YXJ7ZGV2fQ0KPiA+ICsNCj4gPiArKExpbnV4LWhvc3Qgb25seSkgRW5hYmxlIGFjY2Vz cyB0byBhIFRQTSBlbXVsYXRvciB1c2luZyBVbml4DQo+ID4gZG9tYWluIHNvY2tldCBiYXNlZA0K PiA+ICtjaGFyZGV2IGJhY2tlbmQuDQo+ID4gKw0KPiA+ICtAb3B0aW9ue2NoYXJkZXZ9IHNwZWNp ZmllcyB0aGUgdW5pcXVlIElEIG9mIGEgY2hhcmFjdGVyIGRldmljZQ0KPiA+IGJhY2tlbmQgdGhh dCBwcm92aWRlcyBjb25uZWN0aW9uIHRvIHRoZSBzb2Z0d2FyZSBUUE0gc2VydmVyLg0KPiA+ICsN Cj4gPiArVG8gY3JlYXRlIGEgVFBNIGVtdWxhdG9yIGJhY2tlbmQgZGV2aWNlIHdpdGggY2hhcmRl diBzb2NrZXQNCj4gPiBiYWNrZW5kOg0KPiA+ICtAZXhhbXBsZQ0KPiA+ICsNCj4gPiArLWNoYXJk ZXYgc29ja2V0LGlkPWNocnRwbSxwYXRoPS90bXAvc3d0cG0tY3RybCAtdHBtZGV2DQo+ID4gZW11 bGF0b3IsaWQ9dHBtMCxjaGFyZGV2PWNocnRwbSAtZGV2aWNlIHRwbS10aXMsdHBtZGV2PXRwbTAN Cj4gPiArDQo+ID4gK0BlbmQgZXhhbXBsZQ0KPiA+ICsNCj4gPiDCoEBlbmQgdGFibGUNCj4gPiAN Cj4gPiDCoEVURVhJDQo+ID4gLS0NCj4gPiAyLjcuNA0KPiA+IA0KPiANCj4gDQotIEFtYXJuYXRo