From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Chen, Guchun" Subject: RE: [PATCH 2/4] drm/amd/powerplay: Add EEPROM I2C read/write support to Arcturus. Date: Wed, 23 Oct 2019 01:55:57 +0000 Message-ID: References: <1571431711-30149-1-git-send-email-andrey.grodzovsky@amd.com> <1571431711-30149-3-git-send-email-andrey.grodzovsky@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Grodzovsky, Andrey" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Deucher, Alexander" , "Zhou1, Tao" , "Quan, Evan" , "noreply-confluence-5C7GfCeVMHo@public.gmane.org" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogR3JvZHpvdnNreSwgQW5k cmV5IDxBbmRyZXkuR3JvZHpvdnNreUBhbWQuY29tPg0KPiBTZW50OiBXZWRuZXNkYXksIE9jdG9i ZXIgMjMsIDIwMTkgMzoxMCBBTQ0KPiBUbzogQ2hlbiwgR3VjaHVuIDxHdWNodW4uQ2hlbkBhbWQu Y29tPjsgYW1kLQ0KPiBnZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+IENjOiBaaG91MSwgVGFv IDxUYW8uWmhvdTFAYW1kLmNvbT47IERldWNoZXIsIEFsZXhhbmRlcg0KPiA8QWxleGFuZGVyLkRl dWNoZXJAYW1kLmNvbT47IG5vcmVwbHktY29uZmx1ZW5jZUBhbWQuY29tOyBRdWFuLA0KPiBFdmFu IDxFdmFuLlF1YW5AYW1kLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCAyLzRdIGRybS9hbWQv cG93ZXJwbGF5OiBBZGQgRUVQUk9NIEkyQyByZWFkL3dyaXRlDQo+IHN1cHBvcnQgdG8gQXJjdHVy dXMuDQo+IA0KPiANCj4gT24gMTAvMjIvMTkgMTA6NTggQU0sIEFuZHJleSBHcm9kem92c2t5IHdy b3RlOg0KPiA+DQo+ID4gT24gMTAvMjAvMTkgOTo0NCBQTSwgQ2hlbiwgR3VjaHVuIHdyb3RlOg0K PiA+PiBDb21tZW50IGlubGluZS4NCj4gPj4NCj4gPj4NCj4gPj4gUmVnYXJkcywNCj4gPj4gR3Vj aHVuDQo+ID4+DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+IEZyb206IEFu ZHJleSBHcm9kem92c2t5IDxhbmRyZXkuZ3JvZHpvdnNreUBhbWQuY29tPg0KPiA+PiBTZW50OiBT YXR1cmRheSwgT2N0b2JlciAxOSwgMjAxOSA0OjQ4IEFNDQo+ID4+IFRvOiBhbWQtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZw0KPiA+PiBDYzogQ2hlbiwgR3VjaHVuIDxHdWNodW4uQ2hlbkBhbWQu Y29tPjsgWmhvdTEsIFRhbw0KPiA+PiA8VGFvLlpob3UxQGFtZC5jb20+OyBEZXVjaGVyLCBBbGV4 YW5kZXINCj4gPEFsZXhhbmRlci5EZXVjaGVyQGFtZC5jb20+Ow0KPiA+PiBub3JlcGx5LWNvbmZs dWVuY2VAYW1kLmNvbTsgUXVhbiwgRXZhbiA8RXZhbi5RdWFuQGFtZC5jb20+Ow0KPiA+PiBHcm9k em92c2t5LCBBbmRyZXkgPEFuZHJleS5Hcm9kem92c2t5QGFtZC5jb20+DQo+ID4+IFN1YmplY3Q6 IFtQQVRDSCAyLzRdIGRybS9hbWQvcG93ZXJwbGF5OiBBZGQgRUVQUk9NIEkyQyByZWFkL3dyaXRl DQo+ID4+IHN1cHBvcnQgdG8gQXJjdHVydXMuDQo+ID4+DQo+ID4+IFRoZSBjb21tdW5pY2F0aW9u IGlzIGRvbmUgdGhyb3VnaCBTTVUgdGFibGUgYW5kIGhlbmNlIHRoZSBjb2RlIGlzIGluDQo+ID4+ IHBvd2VycGxheS4NCj4gPj4NCj4gPj4gU2lnbmVkLW9mZi1ieTogQW5kcmV5IEdyb2R6b3Zza3kg PGFuZHJleS5ncm9kem92c2t5QGFtZC5jb20+DQo+ID4+IC0tLQ0KPiA+PiDCoCBkcml2ZXJzL2dw dS9kcm0vYW1kL3Bvd2VycGxheS9hcmN0dXJ1c19wcHQuYyB8IDIyOQ0KPiA+PiArKysrKysrKysr KysrKysrKysrKysrKysrKysNCj4gPj4gwqAgMSBmaWxlIGNoYW5nZWQsIDIyOSBpbnNlcnRpb25z KCspDQo+ID4+DQo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxh eS9hcmN0dXJ1c19wcHQuYw0KPiA+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2Fy Y3R1cnVzX3BwdC5jDQo+ID4+IGluZGV4IDkwZDg3MWEuLjUzZDA4ZGU1IDEwMDY0NA0KPiA+PiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9hcmN0dXJ1c19wcHQuYw0KPiA+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9hcmN0dXJ1c19wcHQuYw0KPiA+PiBA QCAtMzYsNiArMzYsMTEgQEANCj4gPj4gwqAgI2luY2x1ZGUgInNtdV92MTFfMF9wcHRhYmxlLmgi DQo+ID4+IMKgICNpbmNsdWRlICJhcmN0dXJ1c19wcHNtYy5oIg0KPiA+PiDCoCAjaW5jbHVkZSAi bmJpby9uYmlvXzdfNF9zaF9tYXNrLmgiDQo+ID4+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+DQo+ ID4+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+DQo+ID4+ICsjaW5jbHVkZSAiYW1kZ3B1X3Jhcy5o Ig0KPiA+PiArDQo+ID4+ICsjZGVmaW5lIHRvX2FtZGdwdV9kZXZpY2UoeCkgKGNvbnRhaW5lcl9v Zih4LCBzdHJ1Y3QgYW1kZ3B1X3JhcywNCj4gPj4gK2VlcHJvbV9jb250cm9sLmVlcHJvbV9hY2Nl c3NvcikpLT5hZGV2DQo+ID4+IMKgIMKgICNkZWZpbmUgQ1RGX09GRlNFVF9FREdFwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA1DQo+ID4+IMKgICNkZWZpbmUgQ1RGX09GRlNFVF9IT1RTUE9UwqDCoMKg wqDCoMKgwqAgNSBAQCAtMTcxLDYgKzE3Niw3IEBAIHN0YXRpYw0KPiA+PiBzdHJ1Y3Qgc211XzEx XzBfY21uMmFpc2NfbWFwcGluZw0KPiBhcmN0dXJ1c190YWJsZV9tYXBbU01VX1RBQkxFX0NPVU5U XQ0KPiA+PiA9IHsNCj4gPj4gwqDCoMKgwqDCoCBUQUJfTUFQKFNNVV9NRVRSSUNTKSwNCj4gPj4g wqDCoMKgwqDCoCBUQUJfTUFQKERSSVZFUl9TTVVfQ09ORklHKSwNCj4gPj4gwqDCoMKgwqDCoCBU QUJfTUFQKE9WRVJEUklWRSksDQo+ID4+ICvCoMKgwqAgVEFCX01BUChJMkNfQ09NTUFORFMpLA0K PiA+PiDCoCB9Ow0KPiA+PiDCoCDCoCBzdGF0aWMgc3RydWN0IHNtdV8xMV8wX2NtbjJhaXNjX21h cHBpbmcNCj4gPj4gYXJjdHVydXNfcHdyX3NyY19tYXBbU01VX1BPV0VSX1NPVVJDRV9DT1VOVF0g PSB7IEBAIC0yOTMsNg0KPiArMjk5LDkgQEANCj4gPj4gc3RhdGljIGludCBhcmN0dXJ1c190YWJs ZXNfaW5pdChzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwgc3RydWN0DQo+ID4+IHNtdV90YWJsZSAq dGFibGUNCj4gPj4gwqDCoMKgwqDCoCBTTVVfVEFCTEVfSU5JVCh0YWJsZXMsIFNNVV9UQUJMRV9T TVVfTUVUUklDUywNCj4gPj4gc2l6ZW9mKFNtdU1ldHJpY3NfdCksDQo+ID4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBBR0VfU0laRSwgQU1ER1BVX0dFTV9ET01BSU5fVlJBTSk7 DQo+ID4+IMKgICvCoMKgwqAgU01VX1RBQkxFX0lOSVQodGFibGVzLCBTTVVfVEFCTEVfSTJDX0NP TU1BTkRTLA0KPiA+PiBzaXplb2YoU3dJMmNSZXF1ZXN0X3QpLA0KPiA+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBBR0VfU0laRSwgQU1ER1BVX0dFTV9ET01BSU5fVlJB TSk7DQo+ID4+ICsNCj4gPj4gwqDCoMKgwqDCoCBzbXVfdGFibGUtPm1ldHJpY3NfdGFibGUgPSBr emFsbG9jKHNpemVvZihTbXVNZXRyaWNzX3QpLA0KPiA+PiBHRlBfS0VSTkVMKTsNCj4gPj4gwqDC oMKgwqDCoCBpZiAoIXNtdV90YWJsZS0+bWV0cmljc190YWJsZSkNCj4gPj4gwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiAtRU5PTUVNOw0KPiA+PiBAQCAtMTkyNyw2ICsxOTM2LDIyNCBAQCBzdGF0 aWMgaW50DQo+IGFyY3R1cnVzX2RwbV9zZXRfdXZkX2VuYWJsZShzdHJ1Y3QNCj4gPj4gc211X2Nv bnRleHQgKnNtdSwgYm9vbCBlbmFibGUpDQo+ID4+IMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4g Pj4gwqAgfQ0KPiA+PiDCoCArDQo+ID4+ICtzdGF0aWMgdm9pZCBhcmN0dXJ1c19maWxsX2VlcHJv bV9pMmNfcmVxKFN3STJjUmVxdWVzdF90wqAgKnJlcSwgYm9vbA0KPiA+PiB3cml0ZSwNCj4gPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDhfdCBhZGRyZXNzLCB1aW50 MzJfdCBudW1ieXRlcywNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dWludDhfdCAqZGF0YSkNCj4gPj4gK3sNCj4gPj4gK8KgwqDCoCBpbnQgaTsNCj4gPj4gKw0KPiA+ PiArwqDCoMKgIEJVR19PTihudW1ieXRlcyA+IE1BWF9TV19JMkNfQ09NTUFORFMpOw0KPiA+PiAr DQo+ID4+ICvCoMKgwqAgcmVxLT5JMkNjb250cm9sbGVyUG9ydCA9IDA7DQo+ID4+ICvCoMKgwqAg cmVxLT5JMkNTcGVlZCA9IDI7DQo+ID4+ICvCoMKgwqAgcmVxLT5TbGF2ZUFkZHJlc3MgPSBhZGRy ZXNzOw0KPiA+PiArwqDCoMKgIHJlcS0+TnVtQ21kcyA9IG51bWJ5dGVzOw0KPiA+PiArDQo+ID4+ ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IG51bWJ5dGVzOyBpKyspIHsNCj4gPj4gK8KgwqDCoMKg wqDCoMKgIFN3STJjQ21kX3QgKmNtZCA9wqAgJnJlcS0+U3dJMmNDbWRzW2ldOw0KPiA+PiArDQo+ ID4+ICvCoMKgwqDCoMKgwqDCoCAvKiBGaXJzdCAyIGJ5dGVzIGFyZSBhbHdheXMgd3JpdGUgZm9y IGxvd2VyIDJiIEVFUFJPTQ0KPiA+PiBhZGRyZXNzICovDQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBp ZiAoaSA8IDIpDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNtZC0+Q21kID0gMTsNCj4g Pj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY21k LT5DbWQgPSB3cml0ZTsNCj4gPj4gKw0KPiA+PiArDQo+ID4+ICvCoMKgwqDCoMKgwqDCoCAvKiBB ZGQgUkVTVEFSVCBmb3IgcmVhZMKgIGFmdGVyIGFkZHJlc3MgZmlsbGVkICovDQo+ID4+ICvCoMKg wqDCoMKgwqDCoCBjbWQtPkNtZENvbmZpZyB8PSAoaSA9PSAyICYmICF3cml0ZSkgPw0KPiA+PiBD TURDT05GSUdfUkVTVEFSVF9NQVNLIDogMDsNCj4gPj4gKw0KPiA+PiArwqDCoMKgwqDCoMKgwqAg LyogQWRkIFNUT1AgaW4gdGhlIGVuZCAqLw0KPiA+PiArwqDCoMKgwqDCoMKgwqAgY21kLT5DbWRD b25maWcgfD0gKGkgPT0gKG51bWJ5dGVzIC0gMSkpID8NCj4gPj4gQ01EQ09ORklHX1NUT1BfTUFT SyA6IDA7DQo+ID4+ICsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIC8qIEZpbGwgd2l0aCBkYXRhIHJl Z2FyZGxlc3MgaWYgcmVhZCBvciB3cml0ZSB0byBzaW1wbGlmeQ0KPiA+PiBjb2RlICovDQo+ID4+ ICvCoMKgwqDCoMKgwqDCoCBjbWQtPlJlZ2lzdGVyQWRkciA9IGRhdGFbaV07DQo+ID4+ICvCoMKg wqAgfQ0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50IGFyY3R1cnVzX2kyY19lZXBy b21fcmVhZF9kYXRhKHN0cnVjdCBpMmNfYWRhcHRlcg0KPiA+PiArKmNvbnRyb2wsDQo+ID4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVpbnQ4 X3QgYWRkcmVzcywNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdWludDhfdCAqZGF0YSwNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDMyX3QgbnVtYnl0ZXMpIHsNCj4g Pj4gK8KgwqDCoCB1aW50MzJfdMKgIGksIHJldCA9IDA7DQo+ID4+ICvCoMKgwqAgU3dJMmNSZXF1 ZXN0X3QgcmVxOw0KPiA+PiArwqDCoMKgIHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gdG9f YW1kZ3B1X2RldmljZShjb250cm9sKTsNCj4gPj4gK8KgwqDCoCBzdHJ1Y3Qgc211X3RhYmxlX2Nv bnRleHQgKnNtdV90YWJsZSA9ICZhZGV2LT5zbXUuc211X3RhYmxlOw0KPiA+PiArwqDCoMKgIHN0 cnVjdCBzbXVfdGFibGUgKnRhYmxlID0NCj4gPj4gJnNtdV90YWJsZS0+dGFibGVzW1NNVV9UQUJM RV9JMkNfQ09NTUFORFNdOw0KPiA+PiArDQo+ID4+ICvCoMKgwqAgbWVtc2V0KCZyZXEsIDAsIHNp emVvZihyZXEpKTsNCj4gPj4gK8KgwqDCoCBhcmN0dXJ1c19maWxsX2VlcHJvbV9pMmNfcmVxKCZy ZXEsIGZhbHNlLCBhZGRyZXNzLCBudW1ieXRlcywNCj4gPj4gK2RhdGEpOw0KPiA+PiArDQo+ID4+ ICvCoMKgwqAgbXV0ZXhfbG9jaygmYWRldi0+c211Lm11dGV4KTsNCj4gPj4gK8KgwqDCoCAvKiBO b3cgcmVhZCBkYXRhIHN0YXJ0aW5nIHdpdGggdGhhdCBhZGRyZXNzICovDQo+ID4+ICvCoMKgwqAg cmV0ID0gc211X3VwZGF0ZV90YWJsZSgmYWRldi0+c211LCBTTVVfVEFCTEVfSTJDX0NPTU1BTkRT LA0KPiAwLA0KPiA+PiArJnJlcSwNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHRydWUpOw0KPiA+PiArwqDCoMKgIG11dGV4X3VubG9jaygmYWRldi0+c211Lm11 dGV4KTsNCj4gPj4gKw0KPiA+PiArwqDCoMKgIGlmICghcmV0KSB7DQo+ID4+ICvCoMKgwqDCoMKg wqDCoCBTd0kyY1JlcXVlc3RfdCAqcmVzID0gKFN3STJjUmVxdWVzdF90ICopdGFibGUtPmNwdV9h ZGRyOw0KPiA+PiArDQo+ID4+ICvCoMKgwqDCoMKgwqDCoCAvKiBBc3N1bWUgU01VwqAgZmlsbHMg cmVzLlN3STJjQ21kc1tpXS5EYXRhIHdpdGggcmVhZCBieXRlcw0KPiA+PiArKi8NCj4gPj4gK8Kg wqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBudW1ieXRlczsgaSsrKQ0KPiA+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkYXRhW2ldID0gcmVzLT5Td0kyY0NtZHNbaV0uRGF0YTsNCj4gPj4g Kw0KPiA+PiArwqDCoMKgwqDCoMKgwqAgcHJfZGVidWcoImFyY3R1cnVzX2kyY19lZXByb21fcmVh ZF9kYXRhLCBhZGRyZXNzID0gJXgsIGJ5dGVzDQo+ID4+ID0gJWQsIGRhdGEgOiIsDQo+ID4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1aW50MTZfdClhZGRyZXNzLCBudW1i eXRlcyk7DQo+ID4+ICsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIHByaW50X2hleF9kdW1wKEtFUk5f REVCVUcsICJkYXRhOiAiLCBEVU1QX1BSRUZJWF9OT05FLA0KPiA+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIDgsIDEsIGRhdGEsIG51bWJ5dGVzLCBmYWxzZSk7DQo+ID4+ ICvCoMKgwqAgfSBlbHNlDQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBwcl9lcnIoImFyY3R1cnVzX2ky Y19lZXByb21fcmVhZF9kYXRhIC0gZXJyb3Igb2NjdXJyZWQgOiV4IiwNCj4gPj4gcmV0KTsNCj4g Pj4gKw0KPiA+PiArwqDCoMKgIHJldHVybiByZXQ7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0 YXRpYyBpbnQgYXJjdHVydXNfaTJjX2VlcHJvbV93cml0ZV9kYXRhKHN0cnVjdCBpMmNfYWRhcHRl cg0KPiA+PiArKmNvbnRyb2wsDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHVpbnQ4X3QgYWRkcmVzcywNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDhfdCAqZGF0YSwNCj4gPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDMyX3QgbnVtYnl0 ZXMpIHsNCj4gPj4gK8KgwqDCoCB1aW50MzJfdCByZXQ7DQo+ID4+ICvCoMKgwqAgU3dJMmNSZXF1 ZXN0X3QgcmVxOw0KPiA+PiArwqDCoMKgIHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gdG9f YW1kZ3B1X2RldmljZShjb250cm9sKTsNCj4gPj4gKw0KPiA+PiArwqDCoMKgIG1lbXNldCgmcmVx LCAwLCBzaXplb2YocmVxKSk7DQo+ID4+ICvCoMKgwqAgYXJjdHVydXNfZmlsbF9lZXByb21faTJj X3JlcSgmcmVxLCB0cnVlLCBhZGRyZXNzLCBudW1ieXRlcywNCj4gPj4gK2RhdGEpOw0KPiA+PiAr DQo+ID4+ICvCoMKgwqAgbXV0ZXhfbG9jaygmYWRldi0+c211Lm11dGV4KTsNCj4gPj4gK8KgwqDC oCByZXQgPSBzbXVfdXBkYXRlX3RhYmxlKCZhZGV2LT5zbXUsIFNNVV9UQUJMRV9JMkNfQ09NTUFO RFMsDQo+IDAsDQo+ID4+ICZyZXEsIHRydWUpOw0KPiA+PiArwqDCoMKgIG11dGV4X3VubG9jaygm YWRldi0+c211Lm11dGV4KTsNCj4gPj4gKw0KPiA+PiArwqDCoMKgIGlmICghcmV0KSB7DQo+ID4+ ICvCoMKgwqDCoMKgwqDCoCBwcl9kZWJ1ZygiYXJjdHVydXNfaTJjX3dyaXRlKCksIGFkZHJlc3Mg PSAleCwgYnl0ZXMgPSAlZCAsDQo+ID4+IGRhdGE6ICIsDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1aW50MTZfdClhZGRyZXNzLCBudW1ieXRlcyk7DQo+ ID4+ICsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIHByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJk YXRhOiAiLCBEVU1QX1BSRUZJWF9OT05FLA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDgsIDEsIGRhdGEsIG51bWJ5dGVzLCBmYWxzZSk7DQo+ID4+ICvCoMKgwqDC oMKgwqDCoCAvKg0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoCAqIEFjY29yZGluZyB0byBFRVBST00g c3BlYyB0aGVyZSBpcyBhIE1BWCBvZiAxMCBtcyByZXF1aXJlZA0KPiA+PiBmb3INCj4gPj4gK8Kg wqDCoMKgwqDCoMKgwqAgKiBFRVBST00gdG8gZmx1c2ggaW50ZXJuYWwgUlggYnVmZmVyIGFmdGVy IFNUT1Agd2FzIGlzc3VlZA0KPiA+PiBhdCB0aGUNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBl bmQgb2Ygd3JpdGUgdHJhbnNhY3Rpb24uIER1cmluZyB0aGlzIHRpbWUgdGhlIEVFUFJPTQ0KPiA+ PiB3aWxsIG5vdCBiZQ0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHJlc3BvbnNpdmUgdG8gYW55 IG1vcmUgY29tbWFuZHMgLSBzbyB3YWl0IGEgYml0IG1vcmUuDQo+ID4+ICvCoMKgwqDCoMKgwqDC oMKgICovDQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBtc2xlZXAoMTApOw0KPiA+PiArDQo+ID4+ICvC oMKgwqAgfSBlbHNlDQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBwcl9lcnIoImFyY3R1cnVzX2kyY193 cml0ZS0gZXJyb3Igb2NjdXJyZWQgOiV4IiwgcmV0KTsNCj4gPj4gKw0KPiA+PiArwqDCoMKgIHJl dHVybiByZXQ7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQgYXJjdHVydXNfaTJj X2VlcHJvbV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXINCj4gPj4gKyppMmNfYWRhcCwNCj4g Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGkyY19tc2cgKm1z Z3MsIGludCBudW0pIHsNCj4gPj4gK8KgwqDCoCB1aW50MzJfdMKgIGksIGosIHJldCwgZGF0YV9z aXplLCBkYXRhX2NodW5rX3NpemUsDQo+ID4+IG5leHRfZWVwcm9tX2FkZHIgPSAwOw0KPiA+PiAr wqDCoMKgIHVpbnQ4X3QgKmRhdGFfcHRyLCBkYXRhX2NodW5rW01BWF9TV19JMkNfQ09NTUFORFNd ID0geyAwIH07DQo+ID4+ICsNCj4gPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKysp IHsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIC8qDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgICogU01V IGludGVyZmFjZSBhbGxvd3MgYXQgbW9zdCBNQVhfU1dfSTJDX0NPTU1BTkRTIGJ5dGVzIG9mDQo+ ID4+IGRhdGEgYXQNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBvbmNlIGFuZCBoZW5jZSB0aGUg ZGF0YSBuZWVkcyB0byBiZSBzcGxpY2VkIGludG8gY2h1bmtzDQo+ID4+IGFuZCBzZW50IGVhY2gN Cj4gPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBjaHVuayBzZXBhcmF0ZWx5DQo+ID4+ICvCoMKgwqDC oMKgwqDCoMKgICovDQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBkYXRhX3NpemUgPSBtc2dzW2ldLmxl biAtIDI7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBkYXRhX2NodW5rX3NpemUgPSBNQVhfU1dfSTJD X0NPTU1BTkRTIC0gMjsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIG5leHRfZWVwcm9tX2FkZHIgPSAo bXNnc1tpXS5idWZbMF0gPDwgOCAmIDB4ZmYwMCkgfA0KPiA+PiAobXNnc1tpXS5idWZbMV0gJiAw eGZmKTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIGRhdGFfcHRyID0gbXNnc1tpXS5idWYgKyAyOw0K PiA+PiArDQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGogPSAwOyBqIDwgZGF0YV9zaXplIC8g ZGF0YV9jaHVua19zaXplOyBqKyspIHsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyog SW5zZXJ0IHRoZSBFRVBST00gZGVzdCBhZGRlc3MsIGJpdHMgMC0xNSAqLw0KPiA+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkYXRhX2NodW5rWzBdID0gKChuZXh0X2VlcHJvbV9hZGRyID4+IDgp ICYgMHhmZik7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRhdGFfY2h1bmtbMV0gPSAo bmV4dF9lZXByb21fYWRkciAmIDB4ZmYpOw0KPiA+PiArDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpIHsNCj4gPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBhcmN0dXJ1c19pMmNfZWVwcm9tX3JlYWRfZGF0YShp MmNfYWRhcCwNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1aW50OF90KW1zZ3NbaV0uYWRkciwNCj4gPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGRhdGFfY2h1bmssIE1BWF9TV19JMkNfQ09NTUFORFMpOw0KPiA+PiArDQo+ID4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtY3B5KGRhdGFfcHRyLCBkYXRhX2NodW5rICsgMiwg ZGF0YV9jaHVua19zaXplKTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsN Cj4gPj4gKw0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1lbWNweShkYXRh X2NodW5rICsgMiwgZGF0YV9wdHIsIGRhdGFfY2h1bmtfc2l6ZSk7DQo+ID4+ICsNCj4gPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBhcmN0dXJ1c19pMmNfZWVwcm9tX3dy aXRlX2RhdGEoaTJjX2FkYXAsDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1aW50OF90KW1zZ3NbaV0uYWRkciwN Cj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZGF0YV9jaHVuaywgTUFYX1NXX0kyQ19DT01NQU5EUyk7DQo+ID4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4gPj4gKw0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAocmV0KSB7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbnVt ID0gLUVJTzsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7 DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4gPj4gKw0KPiA+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBuZXh0X2VlcHJvbV9hZGRyICs9IGRhdGFfY2h1bmtfc2l6ZTsNCj4gPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YV9wdHIgKz0gZGF0YV9jaHVua19zaXplOw0KPiA+ PiArwqDCoMKgwqDCoMKgwqAgfQ0KPiA+PiArDQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZGF0 YV9zaXplICUgZGF0YV9jaHVua19zaXplKSB7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGRhdGFfY2h1bmtbMF0gPSAoKG5leHRfZWVwcm9tX2FkZHIgPj4gOCkgJiAweGZmKTsNCj4gPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YV9jaHVua1sxXSA9IChuZXh0X2VlcHJvbV9hZGRy ICYgMHhmZik7DQo+ID4+ICsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG1zZ3Nb aV0uZmxhZ3MgJiBJMkNfTV9SRCkgew0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldCA9IGFyY3R1cnVzX2kyY19lZXByb21fcmVhZF9kYXRhKGkyY19hZGFwLA0KPiA+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKHVpbnQ4X3QpbXNnc1tpXS5hZGRyLA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YV9jaHVuaywgKGRh dGFfc2l6ZSAlDQo+ID4+IGRhdGFfY2h1bmtfc2l6ZSkgKyAyKTsNCj4gPj4gKw0KPiA+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1lbWNweShkYXRhX3B0ciwgZGF0YV9jaHVuayAr IDIsIGRhdGFfc2l6ZSAlDQo+ID4+IGRhdGFfY2h1bmtfc2l6ZSk7DQo+ID4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIH0gZWxzZSB7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbWVtY3B5KGRhdGFfY2h1bmsgKyAyLCBkYXRhX3B0ciwgZGF0YV9zaXplICUNCj4gPj4gZGF0 YV9jaHVua19zaXplKTsNCj4gPj4gKw0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldCA9IGFyY3R1cnVzX2kyY19lZXByb21fd3JpdGVfZGF0YShpMmNfYWRhcCwNCj4gPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKHVpbnQ4X3QpbXNnc1tpXS5hZGRyLA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhX2NodW5r LCAoZGF0YV9zaXplICUNCj4gPj4gZGF0YV9jaHVua19zaXplKSArIDIpOw0KPiA+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB9DQo+ID4+ICsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKHJldCkgew0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG51bSA9IC1F SU87DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOw0KPiA+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCB9DQo+ID4+ ICvCoMKgwqAgfQ0KPiA+PiArDQo+ID4+ICtmYWlsOg0KPiA+PiArwqDCoMKgIHJldHVybiBudW07 DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyB1MzIgYXJjdHVydXNfaTJjX2VlcHJvbV9p MmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApIHsNCj4gPj4gK8KgwqDCoCByZXR1cm4g STJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsgfQ0KPiA+PiArDQo+ID4+ICsNCj4g Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBhcmN0dXJ1c19pMmNfZWVwcm9t X2kyY19hbGdvID0gew0KPiA+PiArwqDCoMKgIC5tYXN0ZXJfeGZlciA9IGFyY3R1cnVzX2kyY19l ZXByb21faTJjX3hmZXIsDQo+ID4+ICvCoMKgwqAgLmZ1bmN0aW9uYWxpdHkgPSBhcmN0dXJ1c19p MmNfZWVwcm9tX2kyY19mdW5jLCB9Ow0KPiA+PiArDQo+ID4+ICtpbnQgYXJjdHVydXNfaTJjX2Vl cHJvbV9jb250cm9sX2luaXQoc3RydWN0IGkyY19hZGFwdGVyICpjb250cm9sKSB7DQo+ID4+ICvC oMKgwqAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSB0b19hbWRncHVfZGV2aWNlKGNvbnRy b2wpOw0KPiA+PiArwqDCoMKgIGludCByZXM7DQo+ID4+ICsNCj4gPj4gK8KgwqDCoCBjb250cm9s LT5vd25lciA9IFRISVNfTU9EVUxFOw0KPiA+PiArwqDCoMKgIGNvbnRyb2wtPmNsYXNzID0gSTJD X0NMQVNTX1NQRDsNCj4gPj4gK8KgwqDCoCBjb250cm9sLT5kZXYucGFyZW50ID0gJmFkZXYtPnBk ZXYtPmRldjsNCj4gPj4gK8KgwqDCoCBjb250cm9sLT5hbGdvID0gJmFyY3R1cnVzX2kyY19lZXBy b21faTJjX2FsZ287DQo+ID4+ICvCoMKgwqAgc25wcmludGYoY29udHJvbC0+bmFtZSwgc2l6ZW9m KGNvbnRyb2wtPm5hbWUpLCAiUkFTIEVFUFJPTSIpOw0KPiA+PiArDQo+ID4+ICvCoMKgwqAgcmVz ID0gaTJjX2FkZF9hZGFwdGVyKGNvbnRyb2wpOw0KPiA+PiArwqDCoMKgIGlmIChyZXMpDQo+ID4+ ICvCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBodyBpMmMsIGVy cjogJWRcbiIsIHJlcyk7DQo+ID4+ICsNCj4gPj4gK8KgwqDCoCByZXR1cm4gcmVzOw0KPiA+PiAr fQ0KPiA+PiBbR3VjaHVuXUNhbiB3ZSBtb3ZlIHRoaXMgcmVnaXN0ZXIgY29kZSB0byBvbmUgY29t bW9uIGZpbGU/IEFzIEkgc2F3DQo+ID4+IG9uIHZlZ2EyMCwgd2UgaGF2ZSB0aGUgc2FtZSBjb2Rl IHNtdV92MTFfMF9pMmNfZWVwcm9tX2NvbnRyb2xfaW5pdA0KPiB0bw0KPiA+PiByZWdpc3RlciBp MmMgZGV2aWNlLg0KPiA+PiBJZiB3ZSBjYW4gbW92ZSBzdWNoIGNvZGUgdG8gYSBjb21tb24gZmls ZSwgdGhlbiBpbiBlYWNoIGFzaWMncyBpMmMNCj4gPj4gY29kZSwgd2hhdCB3ZSBzaG91bGQgZG8g aXMgdG8gcGFzcyBuZWNlc3NhcnkgcHRycy9uYW1lL29wcyB0byB0aGF0DQo+ID4+IGNvbW1vbiBm aWxlLCBhbmQgZnJvbSB0aGVyZSwgd2Ugd2lsbCByZWdpc3RlciBpMmMgZGV2aWNlLg0KPiA+PiBU aGlzIGNhbiBoZWxwIGNsZWFuIHNvbWUgY29kZSwgd2hhdGV2ZXIsIG1heWJlIGNvbnZlbmllbnQg dG8gb3RoZXINCj4gPj4gYXNpY3MgaWYgd2Ugd2FudCB0byBkbyB0aGUgc2FtZSBpMmMgYWRkaW5n IGpvYi4NCj4gPj4NCj4gPj4gK3ZvaWQgYXJjdHVydXNfaTJjX2VlcHJvbV9jb250cm9sX2Zpbmko c3RydWN0IGkyY19hZGFwdGVyICpjb250cm9sKSB7DQo+ID4+ICvCoMKgwqAgaTJjX2RlbF9hZGFw dGVyKGNvbnRyb2wpOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+IFtHdWNodW5dVGhlIHNhbWUgYXMg YWJvdmUuDQo+ID4NCj4gPiBUaGlzIHdpbGwgYmUgdmVyeSBzbWFsbCBkdXBsaWNhdGlvbiByZWR1 Y3Rpb24gYnV0IEkgd2lsbCBsb29rIGludG8NCj4gPiBwdXR0aW5nIHRoaXMgaW5zaWRlIGFtZGdw dV9yYXNfZWVwcm9tLmMNCj4gPg0KPiA+IEFuZHJleQ0KPiANCj4gDQo+IEkgdG9vayBhIGxvb2sg YW5kIGkgaG9uZXN0bHkgZG9uJ3Qgc2VlIGEgcG9pbnQgbm93IGluIHRoaXMgYXMgaSBzYXZlIG9u bHkgYSBmZXcNCj4gbGluZXMgb2YgY29kZSBiZWNhdXNlIGFyY3R1cnVzX2kyY19lZXByb21faTJj X2FsZ28gb3INCj4gc211X3YxMV8wX2kyY19lZXByb21faTJjX3hmZXIgYXJlIEFTSUMgc3BlY2lm aWMgYW5kIHNvIGl0IGJvaWxzIGRvd24gdG8gYQ0KPiBmZXcgYXNzaWdubWVudHMgYW5kIGNhbGxz IHRvIGkyY19hZGRfYWRhcHRlciBhbmQgaTJjX2RlbF9hZGFwdGVyLiBPbiB0aGUNCj4gb3RoZXIg aGFuZCBpIG5lZWQgdG8gY2hhbmdlIHRoZSBTTVUgaW50ZXJmYWNlIGFuZCBzbXVfdjExXzBfaTJj X2VlcHJvbQ0KPiBoZWFkZXIgdG8gcmV0dXJuIG1lIHNvbWV0aGluZyBsaWtlIGEgcG9pbnRlciB0 byBpMmNfYWxnb3JpdGhtLmZ1bmN0aW9uYWxpdHkNCj4gd2hpY2ggZG9lc24ndCBzZWVtIGludHVp dGl2ZSB0byBtZS4NCj4gDQo+IEFuZHJleQ0KDQpUaGF0J3MgZmluZS4gU2VyaWVzIGlzOiBSZXZp ZXdlZC1ieTogR3VjaHVuIENoZW4gPGd1Y2h1bi5jaGVuQGFtZC5jb20+DQoNClJlZ2FyZHMsDQpH dWNodW4NCj4gDQo+IA0KPiA+DQo+ID4+DQo+ID4+IMKgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHB0 YWJsZV9mdW5jcyBhcmN0dXJ1c19wcHRfZnVuY3MgPSB7DQo+ID4+IMKgwqDCoMKgwqAgLyogdHJh bnNsYXRlIHNtdSBpbmRleCBpbnRvIGFyY3R1cnVzIHNwZWNpZmljIGluZGV4ICovDQo+ID4+IMKg wqDCoMKgwqAgLmdldF9zbXVfbXNnX2luZGV4ID0gYXJjdHVydXNfZ2V0X3NtdV9tc2dfaW5kZXgs IEBAIC0xOTY2LDYNCj4gPj4gKzIxOTMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBwdGFibGVf ZnVuY3MgYXJjdHVydXNfcHB0X2Z1bmNzID0gew0KPiA+PiDCoMKgwqDCoMKgIC5nZXRfcG93ZXJf bGltaXQgPSBhcmN0dXJ1c19nZXRfcG93ZXJfbGltaXQsDQo+ID4+IMKgwqDCoMKgwqAgLmlzX2Rw bV9ydW5uaW5nID0gYXJjdHVydXNfaXNfZHBtX3J1bm5pbmcsDQo+ID4+IMKgwqDCoMKgwqAgLmRw bV9zZXRfdXZkX2VuYWJsZSA9IGFyY3R1cnVzX2RwbV9zZXRfdXZkX2VuYWJsZSwNCj4gPj4gK8Kg wqDCoCAuaTJjX2VlcHJvbV9pbml0ID0gYXJjdHVydXNfaTJjX2VlcHJvbV9jb250cm9sX2luaXQs DQo+ID4+ICvCoMKgwqAgLmkyY19lZXByb21fZmluaSA9IGFyY3R1cnVzX2kyY19lZXByb21fY29u dHJvbF9maW5pLA0KPiA+PiDCoCB9Ow0KPiA+PiDCoCDCoCB2b2lkIGFyY3R1cnVzX3NldF9wcHRf ZnVuY3Moc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpDQpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2FtZC1nZng=