From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 868F489B0B for ; Mon, 5 Nov 2018 20:55:56 +0000 (UTC) Date: Mon, 5 Nov 2018 12:58:19 -0800 From: Manasi Navare Message-ID: <20181105205818.GB26420@intel.com> References: <20181005233437.31286-1-manasi.d.navare@intel.com> <9605297.PTn4Fjk6Em@dk-thinkpad-x260> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <9605297.PTn4Fjk6Em@dk-thinkpad-x260> Subject: Re: [igt-dev] [PATCH i-g-t] test/kms_dp_dsc: Basic KMS test to validate VESA DSC on DP/eDP List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Dhinakaran Pandiyan Cc: igt-dev@lists.freedesktop.org, Anusha Srivatsa List-ID: VGhhbmtzIGZvciB0aGUgcmV2aWV3LCBmb2xsb3dpbmcgYXJlIG15IGNvbW1lbnRzIGJhc2VkIG9u IG91ciBkaXNjdXNzaW9uIG9uIEZyaWRheToKCk9uIEZyaSwgTm92IDAyLCAyMDE4IGF0IDAzOjM5 OjU3UE0gLTA3MDAsIERoaW5ha2FyYW4gUGFuZGl5YW4gd3JvdGU6Cj4gT24gRnJpZGF5LCBPY3Rv YmVyIDUsIDIwMTggNDozNDozNyBQTSBQRFQgTWFuYXNpIE5hdmFyZSB3cm90ZToKPiA+IFRoaXMg cGF0Y2ggYWRkcyBhIGJhc2ljIGttcyB0ZXN0IHRvIHZhbGlkYXRlIHRoZSBkaXNwbGF5IHN0cmVh bQo+ID4gY29tcHJlc3Npb24gZnVuY3Rpb25hbGl0eSBpZiBzdXBwb3J0ZWQgb24gRFAvZURQIGNv bm5lY3Rvci4KPiA+IEN1cnJlbnRseSB0aGlzIGhhcyBvbmx5IG9uZSBzdWJ0ZXN0IHRvIGZvcmNl IHRoZSBEU0Mgb24gYWxsCj4gPiB0aGUgY29ubmVjdG9ycyB0aGF0IHN1cHBvcnQgaXQgd2l0aCBk ZWZhdWx0IHBhcmFtZXRlcnMuCj4gPiBUaGlzIHdpbGwgYmUgZXhwYW5kZWQgdG8gYWRkIG1vcmUg c3VidGVzdHMgdG8gdHdlYWsgRFNDIHBhcmFtZXRlcnMuCj4gPiAKPiA+IENjOiBBbnVzaGEgU3Jp dmF0c2EgPGFudXNoYS5zcml2YXRzYUBpbnRlbC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBNYW5h c2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgdGVzdHMv TWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4gPiAgdGVzdHMva21zX2RwX2RzYy5jICAgICB8IDM3 MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIDIgZmlsZXMg Y2hhbmdlZCwgMzczIGluc2VydGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMv a21zX2RwX2RzYy5jCj4gPiAKPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz IGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gaW5kZXggYzg0OTMzZjEuLmM4MDdhYWQzIDEw MDY0NAo+ID4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gKysrIGIvdGVzdHMvTWFr ZWZpbGUuc291cmNlcwo+ID4gQEAgLTIwNyw2ICsyMDcsNyBAQCBURVNUU19wcm9ncyA9IFwKPiA+ ICAJa21zX3R2X2xvYWRfZGV0ZWN0IFwKPiA+ICAJa21zX3VuaXZlcnNhbF9wbGFuZSBcCj4gPiAg CWttc192YmxhbmsgXAo+ID4gKwlrbXNfZHBfZHNjIFwKPiA+ICAJbWV0YV90ZXN0IFwKPiA+ICAJ cGVyZiBcCj4gPiAgCXBlcmZfcG11IFwKPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfZHBfZHNj LmMgYi90ZXN0cy9rbXNfZHBfZHNjLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRl eCAwMDAwMDAwMC4uZDBmZDJhZTMKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL3Rlc3RzL2tt c19kcF9kc2MuYwo+ID4gQEAgLTAsMCArMSwzNzIgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdo dCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCj4gPiArICoKPiA+ICsgKiBEaXNwbGF5cG9ydCBE aXNwbGF5IFN0cmVhbSBDb21wcmVzc2lvbiB0ZXN0Cj4gPiArICoKPiA+ICsgKiBBdXRob3JzOgo+ ID4gKyAqIE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiArICoK PiA+ICsgKiBFbGVtZW50cyBvZiB0aGUgbW9kZXNldCBjb2RlIGFkYXB0ZWQgZnJvbSBEYXZpZCBI ZXJybWFubidzCj4gPiArICogRFJNIG1vZGVzZXQgZXhhbXBsZQoKSSB3aWxsIGFkZCBtb3JlIGNv bW1lbnRzIGhlcmUgbWFpbmx5IHNwZWNpZnlpbmcgdGhhdCBzaW5jZSB3ZSBkbyBub3QgaGF2ZSBh bnkgd3kgdG8gdmFsaWRhdGUKdGhlIHF1YWxpdHkgb2YgY29tcHJlc3Npb24sIHdlIGFyZSBtYWlu bHkgdmFsaWRhdGluZyB0aGUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZm9yIERTQyBoZXJlLgoKPiA+ ICsgKgo+ID4gKyAqLwo+ID4gKyNpbmNsdWRlICJpZ3QuaCIKPiA+ICsjaW5jbHVkZSA8ZXJybm8u aD4KPiA+ICsjaW5jbHVkZSA8Z2V0b3B0Lmg+Cj4gPiArI2luY2x1ZGUgPG1hdGguaD4KPiA+ICsj aW5jbHVkZSA8c3RkaW50Lmg+Cj4gPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiA+ICsjaW5jbHVk ZSA8c3RyaW5ncy5oPgo+ID4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiA+ICsjaW5jbHVkZSA8c3Rk bGliLmg+Cj4gPiArI2luY2x1ZGUgPHNpZ25hbC5oPgo+ID4gKyNpbmNsdWRlIDx0aW1lLmg+Cj4g PiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gPiArI2luY2x1ZGUgPHRlcm1pb3MuaD4KPiA+ICsKPiA+ ICtpbnQgZHJtX2ZkOwo+ID4gK2RybU1vZGVSZXMgKnJlc291cmNlczsKPiA+ICt1aW50NjRfdCB0 aWxpbmcgPSBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FOwo+ID4gKwo+ID4gK3N0cnVjdCBjb25u ZWN0b3Igewo+ID4gKwl1aW50MzJfdCBpZDsKPiA+ICsJaW50IG1vZGVfdmFsaWQ7Cj4gPiArCWRy bU1vZGVNb2RlSW5mbyBtb2RlOwo+ID4gKwlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7Cj4g PiArCWRybU1vZGVFbmNvZGVyICplbmNvZGVyOwo+ID4gKwlpbnQgY3J0YywgcGlwZTsKPiA+ICt9 Owo+ID4gKwo+ID4gK3N0cnVjdCBkc2NfY29uZmlnIHsKPiA+ICsJY2hhciB0ZXN0X25hbWVbMTI4 XTsKPiA+ICsJaW50IG1vZGVfd2lkdGg7Cj4gPiArCWludCBtb2RlX2hlaWdodDsKPiA+ICsJaW50 IGJwcDsKPiA+ICsJaW50IGRlcHRoOwo+ID4gKwlib29sIGRzY19zdXBwb3J0ZWQ7Cj4gPiArCWJv b2wgZHNjX2VuYWJsZTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBGSUxFICpmb3BlbmF0KGlu dCBkaXIsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpCj4gPiArewo+ID4gKwlp bnQgZmQgPSBvcGVuYXQoZGlyLCBuYW1lLCBPX1JEV1IpOwo+ID4gKwlyZXR1cm4gZmRvcGVuKGZk LCBtb2RlKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgZ2V0X2RwX2RzY19zdXBwb3J0 KGNoYXIgKnRlc3RfY29ubmVjdG9yX25hbWUpCj4gPiArewo+ID4gKwlpbnQgZGlyID0gaWd0X2Rl YnVnZnNfZGlyKGRybV9mZCk7Cj4gPiArCUZJTEUgKmRzY19zdXBwb3J0X2ZwID0gTlVMTDsKPiA+ ICsJY2hhciAqbGluZSA9IE5VTEw7Cj4gPiArCXNpemVfdCBsaW5lX3NpemUgPSAwOwo+ID4gKwlj aGFyIGJ1ZlsxMjhdID0gezB9LCBzdXBwb3J0ZWRfc3RyWzVdLCBlbmFibGVkX3N0cls1XTsKPiA+ ICsJYm9vbCBzdXBwb3J0ZWQgPSBmYWxzZTsKPiA+ICsKPiA+ICsJc3RyY3B5KGJ1ZiwgdGVzdF9j b25uZWN0b3JfbmFtZSk7Cj4gPiArCXN0cmNhdChidWYsICIvaTkxNV9kc2Nfc3VwcG9ydCIpOwo+ ID4gKwlkc2Nfc3VwcG9ydF9mcCA9IGZvcGVuYXQoZGlyLCBidWYsICJyIik7Cj4gPiArCWlndF9y ZXF1aXJlKGRzY19zdXBwb3J0X2ZwKTsKPiA+ICsKPiA+ICsJd2hpbGUgKGdldGxpbmUoJmxpbmUs ICZsaW5lX3NpemUsIGRzY19zdXBwb3J0X2ZwKSA+IDApIHsKPiBUaGlzIGxvb3AgbG9va3Mgd2Fz dGVmdWwuCj4gCj4gPiArCQljaGFyICpzdXBwb3J0LCAqZW5hYmxlZDsKPiA+ICsKPiA+ICsJCWVu YWJsZWQgPSBzdHJzdHIobGluZSwgIkVuYWJsZWQ6ICIpOwo+ID4gKwkJaWd0X2Fzc2VydF9lcShz c2NhbmYoZW5hYmxlZCwgIkVuYWJsZWQ6ICVzIiwgZW5hYmxlZF9zdHIpLCAxKTsKPiA+ICsJCWlm IChzdHJjbXAoZW5hYmxlZF9zdHIsICJ5ZXMiKSA9PSAwKSB7Cj4gPiArCQkJaWd0X2luZm8oIkRT QyBpcyBlbmFibGVkIG9uICVzXG4iLCB0ZXN0X2Nvbm5lY3Rvcl9uYW1lKTsKPiA+ICsJCQlzdXBw b3J0ZWQgPSB0cnVlOwo+IFdoYXQgaXMgdGhlIHVzZSBvZiB0aGlzIGNoZWNrPyBJZiBhbGwgdGhh dCB3ZSBuZWVkIHRvIGtub3cgaXMgd2hldGhlciBEU0MgaXMgc3VwcG9ydGVkLCBqdXN0IGNoZWNr IGZvciAiU3VwcG9ydGVkOiB5ZXMiCgpXZWxsIHRoZSBpZGVhIHdhcyB0byBqdXN0IGlnbm9yZSBT dXBwb3J0ZWQgdmFsdWUgaWYgRW5hYmxlZCBpcyB0cnVlIGJlY2F1c2UgdGhhdCBtZWFucyBpdCB3 YXMgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQuCkJ1dCBvdXIgZGlzY3Vzc2lvbiBtYWtlcyBt ZSB0aGluayB0aGF0IGlmIHdlIGFyZSBqdXN0IHZhbGlkYXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24s IEkgY2FuIGp1c3QgcmVhZCBTdXBwb3J0ZWQgaGVyZSBhbmQgZm9yY2UKRFNDIGFuZCB0aGVuIGFm dGVyIG1vZGVzZXQsIHJlYWQgYmFjayB0aGUgdmFsdWUgb2YgRW5hYmxlZCB0byBjaGVjayB0aGF0 IGl0IHdhcyBlbmFibGVkLiBCdXQgZXZlbiBpbiB0aGUgY2FzZSB3aGVyZSBpdCBjYW5ub3QKYmUg ZW5hYmxlZCwgdGhhdHMganVzdCBiZWNhdXNlIG91ciBwbGF0Zm9ybSBwcm9iYWJseSBkb2VzbnQg c3VwcG9ydCB0aGUgY29uZmlndXJhdGlvbi4gU28gaXRzIG5vdCBhIHRlc3QgZmFpbCByZWFsbHku CgpNYXkgYmUgdGhlIHJlYWwgcGFzcyBmYWlsIHRlc3Qgd291bGQgYmUgaWYgaXRzIGVuYWJsZWQg PT0geWVzLCB0aGVuIGRpc2FibGUgRFNDIGFuZCBlbmFibGUgYWdhaW4gYW5kIGNoZWNrIGlmIGl0 IGlzIGVuYWJsZWQKYW5kIHRlc3QgdGhpcyBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zLgpXaGF0IGRv IHlvdSB0aGluaz8KCj4gCj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9IGVsc2Ugewo+ID4gKwkJCWdl dGxpbmUoJmxpbmUsICZsaW5lX3NpemUsIGRzY19zdXBwb3J0X2ZwKTsKPiA+ICsJCQlzdXBwb3J0 ID0gc3Ryc3RyKGxpbmUsICJTdXBwb3J0ZWQ6ICIpOwo+ID4gKwkJaWd0X2Fzc2VydF9lcShzc2Nh bmYoc3VwcG9ydCwgIlN1cHBvcnRlZDogJXMiLCBzdXBwb3J0ZWRfc3RyKSwgMSk7Cj4gPiArCQlp ZiAoc3RyY21wKHN1cHBvcnRlZF9zdHIsICJ5ZXMiKSA9PSAwKQo+ID4gKwkJCXN1cHBvcnRlZCA9 IHRydWU7Cj4gPiArCQllbHNlIGlmIChzdHJjbXAoc3VwcG9ydGVkX3N0ciwgIm5vIikgPT0gMCkK PiA+ICsJCQlzdXBwb3J0ZWQgPSBmYWxzZTsKPiBTa2lwIHRoZSB0ZXN0IGhlcmUuCj4gPiArCQll bHNlCj4gPiArCQkJaWd0X2ZhaWxfb25fZih0cnVlLCAiVW5rbm93biBEU0Mgc3VwcG9ydGVkIHN0 YXR1cyAnJXMnXG4iLAo+ID4gKwkJCQkgICAgICBzdXBwb3J0ZWRfc3RyKTsKPiA+ICsJCWJyZWFr Owo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWZyZWUobGluZSk7Cj4gCj4gWW91IGNvdWxk IHNpbXBsaWZ5IHRoZSBsb2dpYyBpbiB0aGlzIGZ1bmN0aW9uIHdpdGggaWd0X2RlYnVnZnNfcmVh ZCgpIGFuZCBzdHJzdHIoKQo+IFRoZXJlIGFyZSBleGFtcGxlcyBpbiBrbXNfcHNyLmMsIGttc19m YnRfZmJjb24gZXRjLgoKWWVzIHdpbGwgZG8gdGhhdCwgdGhhbmtzIGZvciBwb2ludGluZyBvdXQu Cgo+IAo+ID4gKwlmY2xvc2UoZHNjX3N1cHBvcnRfZnApOwo+IE9wZW4gdGhlIGZpbGUgb25jZSwg Y2FjaGUgdGhlIGZkIGFuZCBjbG9zZSBpdCB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoZSB0ZXN0 Lgo+CgpPawogCj4gPiArCj4gPiArCXJldHVybiBzdXBwb3J0ZWQ7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIHNldF9kcF9kc2NfZW5hYmxlKGJvb2wgZW5hYmxlLCBjaGFyICp0ZXN0X2Nv bm5lY3Rvcl9uYW1lKQo+ID4gK3sKPiA+ICsJaW50IGRpciA9IGlndF9kZWJ1Z2ZzX2Rpcihkcm1f ZmQpOwo+ID4gKwlGSUxFICpkc2NfZW5hYmxlX2ZwID0gTlVMTDsKPiA+ICsJY2hhciBidWZbMTI4 XSA9IHswfTsKPiA+ICsKPiA+ICsJc3RyY3B5KGJ1ZiwgdGVzdF9jb25uZWN0b3JfbmFtZSk7Cj4g PiArCXN0cmNhdChidWYsICIvaTkxNV9kc2Nfc3VwcG9ydCIpOwo+ID4gKwlkc2NfZW5hYmxlX2Zw ID0gZm9wZW5hdChkaXIsIGJ1ZiwgIncrIik7Cj4gPiArCWlndF9yZXF1aXJlKGRzY19lbmFibGVf ZnApOwo+ID4gKwlyZXdpbmQoZHNjX2VuYWJsZV9mcCk7Cj4gU2hvdWxkIGJlICBhIGxvdCBzaW1w bGVyIHVzaW5nIHN5c2ZzX3dyaXRlKCkuIEFnYWluLCBsaWIvaWd0X3Bzci5jIGhhcyBleGFtcGxl cy4KPiAKPiA+ICsJaWd0X2luZm8oIlNldHRpbmcgRFNDX0VOQUJMRSB0byAlcyBmb3IgJXNcbiIs IChlbmFibGUpID8gInRydWUiIDogImZhbHNlIiwgdGVzdF9jb25uZWN0b3JfbmFtZSk7Cj4gPiAr CWZwcmludGYoZHNjX2VuYWJsZV9mcCwgIiVkIiwgZW5hYmxlKTsKPiA+ICsJZmZsdXNoKGRzY19l bmFibGVfZnApOwo+ID4gKwlmY2xvc2UoZHNjX2VuYWJsZV9mcCk7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIGR1bXBfY29ubmVjdG9yc19mZChpbnQgZHJtZmQpCj4gPiArewo+ID4gKwlp bnQgaSwgajsKPiA+ICsKPiA+ICsJZHJtTW9kZVJlcyAqbW9kZV9yZXNvdXJjZXMgPSBkcm1Nb2Rl R2V0UmVzb3VyY2VzKGRybWZkKTsKPiA+ICsKPiA+ICsgICAgICAgIGlmICghbW9kZV9yZXNvdXJj ZXMpIHsKPiA+ICsJCWlndF93YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIs IHN0cmVycm9yKGVycm5vKSk7Cj4gPiArCQlyZXR1cm47Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWd0 X2luZm8oIkNvbm5lY3RvcnM6XG4iKTsKPiA+ICsJaWd0X2luZm8oImlkXHRlbmNvZGVyXHRzdGF0 dXNcdFx0dHlwZVx0c2l6ZSAobW0pXHRtb2Rlc1xuIik7Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBt b2RlX3Jlc291cmNlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7Cj4gPiArCQlkcm1Nb2RlQ29u bmVjdG9yICpjb25uZWN0b3I7Cj4gPiArCj4gPiArCQljb25uZWN0b3IgPSBkcm1Nb2RlR2V0Q29u bmVjdG9yQ3VycmVudChkcm1mZCwKPiA+ICsJCQkJCQkgICAgICAgbW9kZV9yZXNvdXJjZXMtPmNv bm5lY3RvcnNbaV0pOwo+ID4gKwkJaWYgKCFjb25uZWN0b3IpIHsKPiA+ICsJCQlpZ3Rfd2Fybigi Y291bGQgbm90IGdldCBjb25uZWN0b3IgJWk6ICVzXG4iLAo+ID4gKwkJCQkgbW9kZV9yZXNvdXJj ZXMtPmNvbm5lY3RvcnNbaV0sIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArCQkJY29udGludWU7Cj4g PiArCQl9Cj4gPiArCj4gPiArCQlpZ3RfaW5mbygiJWRcdCVkXHQlc1x0JXNcdCVkeCVkXHRcdCVk XG4iLAo+ID4gKwkJCSBjb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCwgY29ubmVjdG9yLT5lbmNvZGVy X2lkLAo+ID4gKwkJCSBrbXN0ZXN0X2Nvbm5lY3Rvcl9zdGF0dXNfc3RyKGNvbm5lY3Rvci0+Y29u bmVjdGlvbiksCj4gPiArCQkJIGttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGNvbm5lY3Rvci0+ Y29ubmVjdG9yX3R5cGUpLAo+ID4gKwkJCSBjb25uZWN0b3ItPm1tV2lkdGgsIGNvbm5lY3Rvci0+ bW1IZWlnaHQsCj4gPiArCQkJIGNvbm5lY3Rvci0+Y291bnRfbW9kZXMpOwo+ID4gKwo+ID4gKwkJ aWYgKCFjb25uZWN0b3ItPmNvdW50X21vZGVzKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4g KwkJaWd0X2luZm8oIiAgbW9kZXM6XG4iKTsKPiA+ICsJCWlndF9pbmZvKCIgIG5hbWUgcmVmcmVz aCAoSHopIGhkaXNwIGhzcyBoc2UgaHRvdCB2ZGlzcCAiInZzcyB2c2UgdnRvdCBmbGFncyB0eXBl IGNsb2NrXG4iKTsKPiA+ICsJCWZvciAoaiA9IDA7IGogPCBjb25uZWN0b3ItPmNvdW50X21vZGVz OyBqKyspewo+ID4gKwkJCWlndF9pbmZvKCJbJWRdIiwgaik7Cj4gPiArCQkJa21zdGVzdF9kdW1w X21vZGUoJmNvbm5lY3Rvci0+bW9kZXNbal0pOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJZHJtTW9k ZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKPiA+ICsJfQo+ID4gKwlpZ3RfaW5mbygiXG4iKTsK PiA+ICsKPiA+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMobW9kZV9yZXNvdXJjZXMpOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkdW1wX2NydGNzX2ZkKGludCBkcm1mZCkKPiA+ICt7Cj4g PiArCWludCBpOwo+ID4gKwlkcm1Nb2RlUmVzICptb2RlX3Jlc291cmNlcyA9IGRybU1vZGVHZXRS ZXNvdXJjZXMoZHJtZmQpOwo+ID4gKwo+ID4gKwlpZ3RfaW5mbygiQ1JUQ3M6XG4iKTsKPiA+ICsJ aWd0X2luZm8oImlkXHRmYlx0cG9zXHRzaXplXG4iKTsKPiA+ICsJZm9yIChpID0gMDsgaSA8IG1v ZGVfcmVzb3VyY2VzLT5jb3VudF9jcnRjczsgaSsrKSB7Cj4gPiArCQlkcm1Nb2RlQ3J0YyAqY3J0 YzsKPiA+ICsKPiA+ICsJCWNydGMgPSBkcm1Nb2RlR2V0Q3J0Yyhkcm1mZCwgbW9kZV9yZXNvdXJj ZXMtPmNydGNzW2ldKTsKPiA+ICsJCWlmICghY3J0Yykgewo+ID4gKwkJCWlndF93YXJuKCJjb3Vs ZCBub3QgZ2V0IGNydGMgJWk6ICVzXG4iLAo+ID4gKwkJCQkgbW9kZV9yZXNvdXJjZXMtPmNydGNz W2ldLCBzdHJlcnJvcihlcnJubykpOwo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJfQo+ID4gKwkJ aWd0X2luZm8oIiVkXHQlZFx0KCVkLCVkKVx0KCVkeCVkKVxuIiwKPiA+ICsJCQkgY3J0Yy0+Y3J0 Y19pZCwgY3J0Yy0+YnVmZmVyX2lkLCBjcnRjLT54LAo+ID4gKwkJCSBjcnRjLT55LCBjcnRjLT53 aWR0aCwgY3J0Yy0+aGVpZ2h0KTsKPiA+ICsJCWttc3Rlc3RfZHVtcF9tb2RlKCZjcnRjLT5tb2Rl KTsKPiA+ICsKPiA+ICsJCWRybU1vZGVGcmVlQ3J0YyhjcnRjKTsKPiA+ICsJfQo+ID4gKwlpZ3Rf aW5mbygiXG4iKTsKPiA+ICsKPiA+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMobW9kZV9yZXNvdXJj ZXMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkdW1wX2luZm8odm9pZCkKPiA+ICt7 Cj4gPiArCWR1bXBfY29ubmVjdG9yc19mZChkcm1fZmQpOwo+ID4gKwlkdW1wX2NydGNzX2ZkKGRy bV9mZCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQKPiA+ICtzZXRfbW9kZShzdHJ1Y3Qg Y29ubmVjdG9yICpjLCBzdHJ1Y3QgZHNjX2NvbmZpZyAqdGVzdF9jb25maWcsIGJvb2wgc2V0X21v ZGUpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBpbnQgZmJfaWQgPSAwOwo+ID4gKwlzdHJ1Y3QgaWd0 X2ZiIGZiX2luZm87Cj4gPiArCWludCByZXQgPSAwOwo+ID4gKwo+ID4gKwlpZiAoIXNldF9tb2Rl KSB7Cj4gPiArCQlyZXQgPSBkcm1Nb2RlU2V0Q3J0Yyhkcm1fZmQsIGMtPmNydGMsIDAsIDAsIDAs Cj4gPiArCQkJCSAgICAgTlVMTCwgMCwgTlVMTCk7Cj4gPiArCQlpZiAocmV0KQo+ID4gKwkJCWln dF93YXJuKCJGYWlsZWQgdG8gdW5zZXQgbW9kZSIpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJ fQo+ID4gKwo+ID4gKwlmYl9pZCA9IGlndF9jcmVhdGVfcGF0dGVybl9mYihkcm1fZmQsIHRlc3Rf Y29uZmlnLT5tb2RlX3dpZHRoLAo+ID4gKwkJCQkgICAgICB0ZXN0X2NvbmZpZy0+bW9kZV9oZWln aHQsCj4gPiArCQkJCSAgICAgIGlndF9icHBfZGVwdGhfdG9fZHJtX2Zvcm1hdCh0ZXN0X2NvbmZp Zy0+YnBwLAo+ID4gKwkJCQkJCQkJICB0ZXN0X2NvbmZpZy0+ZGVwdGgpLAo+ID4gKwkJCQkgICAg ICB0aWxpbmcsICZmYl9pbmZvKTsKPiA+ICsKPiA+ICsJaWd0X2luZm8oIkNSVEMoJXUpOlslZF0i LCBjLT5jcnRjLCAwKTsKPiA+ICsJa21zdGVzdF9kdW1wX21vZGUoJmMtPm1vZGUpOwo+ID4gKwlk cm1Nb2RlU2V0Q3J0Yyhkcm1fZmQsIGMtPmNydGMsIC0xLCAwLCAwLCBOVUxMLCAwLCBOVUxMKTsK PiA+ICsJcmV0ID0gZHJtTW9kZVNldENydGMoZHJtX2ZkLCBjLT5jcnRjLCBmYl9pZCwgMCwgMCwK PiA+ICsJCQkgICAgICZjLT5pZCwgMSwgJmMtPm1vZGUpOwo+ID4gKwlzbGVlcCg1KTsKPiBXaHk/ IElmIHRoaXMgZm9yIG1hbnVhbCB0ZXN0aW5nLCBwbGVhc2UgdXNlIG1hbnVhbCgpLiBUaGVyZSBh cmUgcGxlbnR5IG9mIGV4YW1wbGVzLgoKTWFudWFsIHRlc3RpbmcgZm9yIHZpc3VhbGx5IHRlc3Rp bmcgcmVzdWx0cyBvZiBjb21wcmVzc2lvbiBzaW5jZSB3ZSBkb250IGhhdmUgYW55IENSQyB3YXlz IHRvIGNoZWNrIHRoaXMuCkJ1dCBJIHdpbGwgcHJvYmFibHkgcmVtb3ZlIHRoaXMgc2luY2UgaXQg d2FzIGZvciBteSBkZWJ1ZyBwdXJwb3NlcyBhbmQgY29kZSB2YWxpZGF0aW9uLgoKPiAKPiA+ICsJ aWYgKHJldCA8IDApIHsKPiA+ICsJCWlndF93YXJuKCJGYWlsZWQgdG8gc2V0IG1vZGUgKCVkeCVk QCVkSHopOiAlc1xuIiwKPiA+ICsJCQkgdGVzdF9jb25maWctPm1vZGVfd2lkdGgsIHRlc3RfY29u ZmlnLT5tb2RlX2hlaWdodCwKPiA+ICsJCQkgYy0+bW9kZS52cmVmcmVzaCwgc3RyZXJyb3IoZXJy bm8pKTsKPiBUaGlzIGNhbid0IGJlIGEgd2FybmluZywgdGhlIHRlc3Qgc2hvdWxkIGZhaWwgaWYg dGhlIG1vZGUgY2FuJ3QgYmUgc2V0Lgo+IAo+ID4gKwkJaWd0X3JlbW92ZV9mYihkcm1fZmQsICZm Yl9pbmZvKTsKPiAKPiBSZWFkIGJhY2sgZGVidWdmcyB0byBjaGVjayB3aGV0aGVyIERTQyB3YXMg ZW5hYmxlZD8gSSdtIGNhbid0IHRlbGwgd2hhdCBpcyBiZWluZyB0ZXN0ZWQgaGVyZS4KClN1cmUg Y2FuIGFkZCB0aGlzIGZvciB0aGUgdGVzdCBzdHJhdGVneSBvZiBkaXNhYmxpbmcgYW5kIHRoZW4g ZW5hYmxpbmcsIGp1c3QgdG8gdmFsaWRhdGUgdGhlIGRyaXZlci4KCj4gPiArCj4gPiArCX0KPiA+ ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArCj4gPiArLyoKPiA+ICsgKiBS ZS1wcm9iZSBjb25uZWN0b3JzIGFuZCBkbyBhIG1vZGVzZXQgd2l0aCBhbmQgd2lob3V0IERTQwo+ ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiAwOiBPbiBTdWNjZXNzCj4gPiArICogLTE6 IE9uIGZhaWx1cmUKPiBpbnQgaXMgcG9pbnRsZXNzLCBqdXN0IHVzZSBhIGJvb2wgcmV0dXJuIGlm IHRoZSBmdW5jdGlvbiBkb2Vzbid0IG1ha2UgdXNlIG9mIGVycm9yIGNvZGVzLgo+IAo+ID4gKyAq Lwo+ID4gK3N0YXRpYyBpbnQgdXBkYXRlX2Rpc3BsYXkoc3RydWN0IGRzY19jb25maWcgKnRlc3Rf Y29uZmlnKQo+ID4gK3sKPiA+ICsJc3RydWN0IGNvbm5lY3RvciAqY29ubmVjdG9yczsKPiA+ICsJ c3RydWN0IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyBjb25maWc7Cj4gPiArCWludCBjbnQsIGNv bm5fY250ID0gMCwgcmV0ID0gMCwgZWRwX2NudCA9IDAsIGRwX2NudCA9IDA7Cj4gPiArCXVuc2ln bmVkIGxvbmcgY3J0Y19pZHhfbWFzayA9IC0xVUw7Cj4gPiArCWNoYXIgY29ubl9idWZbMTI4XSA9 IHswfTsKPiA+ICsKPiA+ICsJcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1fZmQp Owo+ID4gKwlpZiAoIXJlc291cmNlcykgewo+ID4gKwkJaWd0X3dhcm4oImRybU1vZGVHZXRSZXNv dXJjZXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKPiA+ICsJCXJldHVybiAtMTsK PiA+ICsJfQo+IAo+IFdoeSBoYW5kIHJvbGwgSU9DVExzIHdoZW4gdGhlIElHVCBsaWJyYXJ5IHBy b3ZpZGVzIGEgbG90IG9mIHRoZXNlIGZ1bmN0aW9uYWxpdHk/CgpJIHdpbGwgdGFrZSBhIGxvb2sg YXQgdGhlIGxpYnJhcnkgZnVuY3Rpb25zLCBidXQgc2luY2UgdGhlIERTQyBlbmFibGluZyBsb2dp YyBpcyBpbnNlcnRlZCBwZXIgY29ubmVjdG9yCml0IHdhcyBoYXJkIHRvIHVzZSBpZ3QgbGliIGZ1 bmN0aW9ucy4KCj4gPiArCj4gPiArCWNvbm5lY3RvcnMgPSBjYWxsb2MocmVzb3VyY2VzLT5jb3Vu dF9jb25uZWN0b3JzLAo+ID4gKwkJCSAgICBzaXplb2Yoc3RydWN0IGNvbm5lY3RvcikpOwo+ID4g KwlpZiAoIWNvbm5lY3RvcnMpCj4gPiArCQlyZXR1cm4gLTE7Cj4gPiArCj4gPiArCS8qIEZpbmQg YW55IGNvbm5lY3RlZCBkaXNwbGF5cyAqLwo+ID4gKwlmb3IgKGNudCA9IDA7IGNudCA8IHJlc291 cmNlcy0+Y291bnRfY29ubmVjdG9yczsgY250KyspIHsKPiA+ICsJCXN0cnVjdCBjb25uZWN0b3Ig KmMgPSAmY29ubmVjdG9yc1tjbnRdOwo+ID4gKwkJYy0+aWQgPSByZXNvdXJjZXMtPmNvbm5lY3Rv cnNbY250XTsKPiA+ICsJCWlmKCFrbXN0ZXN0X2dldF9jb25uZWN0b3JfY29uZmlnKGRybV9mZCwg Yy0+aWQsIGNydGNfaWR4X21hc2ssCj4gPiArCQkJCQkJJmNvbmZpZykpIHsKPiA+ICsJCQljLT5t b2RlX3ZhbGlkID0gMDsKPiA+ICsJCQljb250aW51ZTsKPiA+ICsJCX0KPiA+ICsJCWMtPmNvbm5l Y3RvciA9IGNvbmZpZy5jb25uZWN0b3I7Cj4gPiArCQljLT5lbmNvZGVyID0gY29uZmlnLmVuY29k ZXI7Cj4gPiArCQljLT5tb2RlID0gY29uZmlnLmRlZmF1bHRfbW9kZTsKPiA+ICsJCWMtPmNydGMg PSBjb25maWcuY3J0Yy0+Y3J0Y19pZDsKPiA+ICsJCWMtPnBpcGUgPSBjb25maWcucGlwZTsKPiA+ ICsJCWMtPm1vZGVfdmFsaWQgPSAxOwo+ID4gKwo+ID4gKwkJaWYgKGMtPmNvbm5lY3Rvci0+Y29u bmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0IHx8Cj4gPiArCQkg ICAgYy0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQ KSB7Cj4gPiArCj4gPiArCQkJaWYgKGMtPmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJN X01PREVfQ09OTkVDVE9SX2VEUCkKPiA+ICsJCQkJY29ubl9jbnQgPSArKyBlZHBfY250Owo+ID4g KwkJCWVsc2UKPiA+ICsJCQkJY29ubl9jbnQgPSArKyBkcF9jbnQ7Cj4gPiArCQkJaWYgKGMtPmNv bm5lY3Rvci0+Y29ubmVjdGlvbiA9PSBEUk1fTU9ERV9DT05ORUNURUQpIHsKPiA+ICsJCQkJc3By aW50Zihjb25uX2J1ZiwgIiVzLSVkIiwKPiA+ICsJCQkJCWttc3Rlc3RfY29ubmVjdG9yX3R5cGVf c3RyKGMtPmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpLAo+ID4gKwkJCQkJY29ubl9jbnQpOwo+ ID4gKwkJCQl0ZXN0X2NvbmZpZy0+ZHNjX3N1cHBvcnRlZCA9Cj4gPiArCQkJCQlnZXRfZHBfZHNj X3N1cHBvcnQoY29ubl9idWYpOwo+ID4gKwkJCQlpZiAoIXN0cmNtcCh0ZXN0X2NvbmZpZy0+dGVz dF9uYW1lLAo+ID4gKwkJCQkJICAgICJmb3JjZV9kc2NfZW5hYmxlX2Jhc2ljIikpIHsKPiBIbW0s IHRoZXJlIGlzIGp1c3Qgb25lIHN1YnRlc3QsIHdoYXQgZWxzZSBjb3VsZCB0aGlzIGJlPwo+IAo+ IAo+ID4gKwkJCQkJaWYgKHRlc3RfY29uZmlnLT5kc2Nfc3VwcG9ydGVkKSB7Cj4gPiArCQkJCQkJ aWd0X2luZm8gKCJEU0MgaXMgc3VwcG9ydGVkIG9uICVzXG4iLAo+ID4gKwkJCQkJCQkgIGNvbm5f YnVmKTsKPiA+ICsJCQkJCQl0ZXN0X2NvbmZpZy0+bW9kZV93aWR0aCA9IGMtPm1vZGUuaGRpc3Bs YXk7Cj4gPiArCQkJCQkJdGVzdF9jb25maWctPm1vZGVfaGVpZ2h0ID0gYy0+bW9kZS52ZGlzcGxh eTsKPiA+ICsJCQkJCQl0ZXN0X2NvbmZpZy0+YnBwID0gMzI7Cj4gPiArCQkJCQkJdGVzdF9jb25m aWctPmRlcHRoID0gMjQ7Cj4gPiArCQkJCQkJc2V0X2RwX2RzY19lbmFibGUodGVzdF9jb25maWct PmRzY19lbmFibGUsCj4gPiArCQkJCQkJCSAgY29ubl9idWYpOwo+ID4gKwkJCQkJCXJldCA9IHNl dF9tb2RlKGMsIHRlc3RfY29uZmlnLAo+ID4gKwkJCQkJCQkgICAgICAgdHJ1ZSk7Cj4gcmV0IGdl dHMgb3ZlcndyaXR0ZW4gaW4gdGhlIG5leHQgbG9vcCwgaWYgc2V0X21vZGUgZmFpbHMsIHRoZW4g dGhlIHRlc3Qgc2hvdWxkIHRvby4KPiAKPiA+ICsJCQkJCX0gZWxzZSB7Cj4gc2tpcCBpZiB0aGUg cGFuZWwgZG9lcyBub3Qgc3VwcG9ydCBEU0MgIGFuZCBkbyBpdCBpbnNpZGUgdGhlIHN1cHBvcnQg Y2hlY2sgaGVscGVyLgo+IAo+ID4gKwkJCQkJCWlndF9pbmZvICgiRFNDIGlzIG5vdCBzdXBwb3J0 ZWQgb24gJXNcbiIsCj4gPiArCQkJCQkJCSAgY29ubl9idWYpOwo+ID4gKwkJCQkJfQo+ID4gKwkJ CQl9Cj4gPiArCQkJCWNydGNfaWR4X21hc2sgJj0gfigxIDw8IGMtPnBpcGUpOwo+ID4gKwkJCX0K PiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlmcmVlKGNvbm5lY3RvcnMpOwo+ID4gKwlkcm1N b2RlRnJlZVJlc291cmNlcyhyZXNvdXJjZXMpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgaW50IG9wdF9oYW5kbGVyKGludCBvcHQsIGludCBvcHRfaW5kZXgsIHZv aWQgKm9wdF9kdW1wKQo+ID4gK3sKPiA+ICsJYm9vbCAqZHVtcCA9IG9wdF9kdW1wOwo+ID4gKwo+ ID4gKwlzd2l0Y2ggKG9wdCkgewo+ID4gKwljYXNlICdpJzoKPiA+ICsJCSpkdW1wID0gdHJ1ZTsK PiBEb24ndCBzZWUgbXVjaCBwb2ludCBhZGRpbmcgYW4gb3B0aW9uLCAgaWYgeW91IHJlYWxseSB3 YW50IHRvIGR1bXAgdGhlICBmdWxsIG1vZGUsIGp1c3QgdXNlIGlndF9kZWJ1ZygpCj4gYW5kIHJ1 biB0aGUgdGVzdCB3aXRoIC0tZGVidWcuCgpIbW0gb2sgd2lsbCB0ZXN0IHdoYXQgLS1kZWJ1ZyBk dW1wcyBhbmQgaWYgdGhhdHMgZW5vdWdoLgoKPiAKPiA+ICsJCWJyZWFrOwo+ID4gKwlkZWZhdWx0 Ogo+ID4gKwkJaWd0X2Fzc2VydCgwKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ ICt9Cj4gPiArCj4gPiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiBSZW1vdmUg ZHVtcCBhbmQgc3dpdGNoIHRvICBpZ3RfbWFpbgo+ID4gK3sKPiA+ICsJY29uc3QgY2hhciAqaGVs cF9zdHIgPQo+ID4gKwkJIiAgLS1pbmZvXHRcdER1bXAgSW5mb3JtYXRpb24gYWJvdXQgY29ubmVj dG9ycy4gKHN0aWxsIG5lZWRzIERSTSBhY2Nlc3MpXG4iOwo+ID4gKwlzdGF0aWMgc3RydWN0IG9w dGlvbiBsb25nX29wdGlvbnNbXSA9IHsKPiA+ICsJCXsiaW5mbyIsIDAsIDAsICdpJ30sCj4gPiAr CQl7MCwgMCwgMCwgMH0KPiA+ICsJfTsKPiA+ICsJaW50IHJldCA9IDA7Cj4gPiArCXN0cnVjdCBk c2NfY29uZmlnIHRlc3RfY29uZmlnOwo+ID4gKwlib29sIG9wdF9kdW1wID0gZmFsc2U7Cj4gPiAr CWlndF9zdWJ0ZXN0X2luaXRfcGFyc2Vfb3B0cygmYXJnYywgYXJndiwgIiIsIGxvbmdfb3B0aW9u cywgaGVscF9zdHIsCj4gPiArCQkJCSAgICBvcHRfaGFuZGxlciwgJm9wdF9kdW1wKTsKPiBUaGlz IHdvbid0IGJlIG5lZWRlZCBlaXRoZXIuCj4gCj4gPiArCj4gPiArCWlndF9za2lwX29uX3NpbXVs YXRpb24oKTsKPiA+ICsKPiA+ICsJaWd0X2ZpeHR1cmUgewo+ID4gKwkJa21zdGVzdF9zZXRfdnRf Z3JhcGhpY3NfbW9kZSgpOwo+ID4gKwkJZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9B TlkpOwo+IAo+IE1pc3NpbmcgaWd0X2Rpc3BsYXlfcmVxdWlyZSgpCj4gCj4gPiArCQlpZiAob3B0 X2R1bXApCj4gPiArCQkJZHVtcF9pbmZvKCk7Cj4gCj4gPiArCX0KPiA+ICsKPiA+ICsJaWd0X3N1 YnRlc3QoImZvcmNlX2RzY19lbmFibGVfYmFzaWMiKSB7Cj4gPiArCQlzdHJjcHkodGVzdF9jb25m aWcudGVzdF9uYW1lLCJmb3JjZV9kc2NfZW5hYmxlX2Jhc2ljIik7Cj4gV2h5PyAKClRoaXMgaXMg dG8gcGFzcyB0aGUgdGVzdCBuYW1lLCBtb3JlIHRlc3RzIHdpbGwgYmUgYWRkZWQgd2l0aCBkaWZm IG5hbWVzLgoKTWFuYXNpCgoKPiA+ICsJCXJldCA9IHVwZGF0ZV9kaXNwbGF5KCZ0ZXN0X2NvbmZp Zyk7Cj4gPiArCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gPiArCX0KPiA+ICsKPiBUaGUgdGVz dCBkb2Vzbid0IG1ha2UgdXNlIG9mIGRpc3BsYXlfaW5pdCgpIGFuZCBkaXNwbGF5X2ZpbmkoKSBs aWtlICBvdGhlciBrbXMgdGVzdHMgZG8sIHdoYXQgaXMgdGhlIHJlYXNvbj8KPiA+ICsJY2xvc2Uo ZHJtX2ZkKTsKPiA+ICsKPiA+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ID4gKwo+ID4gKwlp Z3RfaW5mbygiRFNDIHRlc3RpbmcgZG9uZVxuIik7Cj4gPiArCWlndF9leGl0KCk7Cj4gPiArCj4g PiArfQo+ID4gCj4gCj4gCj4gCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0 LWRldgo=