From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id E113F6E238 for ; Mon, 5 Nov 2018 23:22:09 +0000 (UTC) Message-ID: From: Dhinakaran Pandiyan Date: Mon, 05 Nov 2018 15:22:03 -0800 In-Reply-To: <20181105205818.GB26420@intel.com> References: <20181005233437.31286-1-manasi.d.navare@intel.com> <9605297.PTn4Fjk6Em@dk-thinkpad-x260> <20181105205818.GB26420@intel.com> Mime-Version: 1.0 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: , Reply-To: dhinakaran.pandiyan@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Manasi Navare Cc: igt-dev@lists.freedesktop.org, Anusha Srivatsa List-ID: T24gTW9uLCAyMDE4LTExLTA1IGF0IDEyOjU4IC0wODAwLCBNYW5hc2kgTmF2YXJlIHdyb3RlOgo+ IFRoYW5rcyBmb3IgdGhlIHJldmlldywgZm9sbG93aW5nIGFyZSBteSBjb21tZW50cyBiYXNlZCBv biBvdXIKPiBkaXNjdXNzaW9uIG9uIEZyaWRheToKPiAKPiBPbiBGcmksIE5vdiAwMiwgMjAxOCBh dCAwMzozOTo1N1BNIC0wNzAwLCBEaGluYWthcmFuIFBhbmRpeWFuIHdyb3RlOgo+ID4gT24gRnJp ZGF5LCBPY3RvYmVyIDUsIDIwMTggNDozNDozNyBQTSBQRFQgTWFuYXNpIE5hdmFyZSB3cm90ZToK PiA+ID4gVGhpcyBwYXRjaCBhZGRzIGEgYmFzaWMga21zIHRlc3QgdG8gdmFsaWRhdGUgdGhlIGRp c3BsYXkgc3RyZWFtCj4gPiA+IGNvbXByZXNzaW9uIGZ1bmN0aW9uYWxpdHkgaWYgc3VwcG9ydGVk IG9uIERQL2VEUCBjb25uZWN0b3IuCj4gPiA+IEN1cnJlbnRseSB0aGlzIGhhcyBvbmx5IG9uZSBz dWJ0ZXN0IHRvIGZvcmNlIHRoZSBEU0Mgb24gYWxsCj4gPiA+IHRoZSBjb25uZWN0b3JzIHRoYXQg c3VwcG9ydCBpdCB3aXRoIGRlZmF1bHQgcGFyYW1ldGVycy4KPiA+ID4gVGhpcyB3aWxsIGJlIGV4 cGFuZGVkIHRvIGFkZCBtb3JlIHN1YnRlc3RzIHRvIHR3ZWFrIERTQwo+ID4gPiBwYXJhbWV0ZXJz Lgo+ID4gPiAKPiA+ID4gQ2M6IEFudXNoYSBTcml2YXRzYSA8YW51c2hhLnNyaXZhdHNhQGludGVs LmNvbT4KPiA+ID4gU2lnbmVkLW9mZi1ieTogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJl QGludGVsLmNvbT4KPiA+ID4gLS0tCj4gPiA+ICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAx ICsKPiA+ID4gIHRlc3RzL2ttc19kcF9kc2MuYyAgICAgfCAzNzIKPiA+ID4gKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ID4gIDIgZmlsZXMgY2hhbmdlZCwgMzcz IGluc2VydGlvbnMoKykKPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfZHBfZHNj LmMKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVz dHMvTWFrZWZpbGUuc291cmNlcwo+ID4gPiBpbmRleCBjODQ5MzNmMS4uYzgwN2FhZDMgMTAwNjQ0 Cj4gPiA+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+ID4gKysrIGIvdGVzdHMvTWFr ZWZpbGUuc291cmNlcwo+ID4gPiBAQCAtMjA3LDYgKzIwNyw3IEBAIFRFU1RTX3Byb2dzID0gXAo+ ID4gPiAgCWttc190dl9sb2FkX2RldGVjdCBcCj4gPiA+ICAJa21zX3VuaXZlcnNhbF9wbGFuZSBc Cj4gPiA+ICAJa21zX3ZibGFuayBcCj4gPiA+ICsJa21zX2RwX2RzYyBcCj4gPiA+ICAJbWV0YV90 ZXN0IFwKPiA+ID4gIAlwZXJmIFwKPiA+ID4gIAlwZXJmX3BtdSBcCj4gPiA+IGRpZmYgLS1naXQg YS90ZXN0cy9rbXNfZHBfZHNjLmMgYi90ZXN0cy9rbXNfZHBfZHNjLmMKPiA+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAuLmQwZmQyYWUzCj4gPiA+IC0tLSAvZGV2 L251bGwKPiA+ID4gKysrIGIvdGVzdHMva21zX2RwX2RzYy5jCj4gPiA+IEBAIC0wLDAgKzEsMzcy IEBACj4gPiA+ICsvKgo+ID4gPiArICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRp b24KWW91IG1pZ2h0IHdhbnQgdG8gZml4IHRoZSBkYXRlIGhlcmUuCgo+ID4gPiArICoKPiA+ID4g KyAqIERpc3BsYXlwb3J0IERpc3BsYXkgU3RyZWFtIENvbXByZXNzaW9uIHRlc3QKPiA+ID4gKyAq Cj4gPiA+ICsgKiBBdXRob3JzOgo+ID4gPiArICogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2 YXJlQGludGVsLmNvbT4KPiA+ID4gKyAqCj4gPiA+ICsgKiBFbGVtZW50cyBvZiB0aGUgbW9kZXNl dCBjb2RlIGFkYXB0ZWQgZnJvbSBEYXZpZCBIZXJybWFubidzCj4gPiA+ICsgKiBEUk0gbW9kZXNl dCBleGFtcGxlCk1pc3NpbmcgbGljZW5zZS4KCj4gCj4gSSB3aWxsIGFkZCBtb3JlIGNvbW1lbnRz IGhlcmUgbWFpbmx5IHNwZWNpZnlpbmcgdGhhdCBzaW5jZSB3ZSBkbyBub3QKPiBoYXZlIGFueSB3 eSB0byB2YWxpZGF0ZQo+IHRoZSBxdWFsaXR5IG9mIGNvbXByZXNzaW9uLCB3ZSBhcmUgbWFpbmx5 IHZhbGlkYXRpbmcgdGhlIGRyaXZlcgo+IGNvbmZpZ3VyYXRpb24gZm9yIERTQyBoZXJlLgo+IAo+ ID4gPiArICoKPiA+ID4gKyAqLwo+ID4gPiArI2luY2x1ZGUgImlndC5oIgo+ID4gPiArI2luY2x1 ZGUgPGVycm5vLmg+Cj4gPiA+ICsjaW5jbHVkZSA8Z2V0b3B0Lmg+Cj4gPiA+ICsjaW5jbHVkZSA8 bWF0aC5oPgo+ID4gPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ID4gPiArI2luY2x1ZGUgPHN0ZGJv b2wuaD4KPiA+ID4gKyNpbmNsdWRlIDxzdHJpbmdzLmg+Cj4gPiA+ICsjaW5jbHVkZSA8dW5pc3Rk Lmg+Cj4gPiA+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gPiA+ICsjaW5jbHVkZSA8c2lnbmFsLmg+ Cj4gPiA+ICsjaW5jbHVkZSA8dGltZS5oPgo+ID4gPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gPiA+ ICsjaW5jbHVkZSA8dGVybWlvcy5oPgo+ID4gPiArCj4gPiA+ICtpbnQgZHJtX2ZkOwo+ID4gPiAr ZHJtTW9kZVJlcyAqcmVzb3VyY2VzOwo+ID4gPiArdWludDY0X3QgdGlsaW5nID0gTE9DQUxfRFJN X0ZPUk1BVF9NT0RfTk9ORTsKPiA+ID4gKwo+ID4gPiArc3RydWN0IGNvbm5lY3RvciB7Cj4gPiA+ ICsJdWludDMyX3QgaWQ7Cj4gPiA+ICsJaW50IG1vZGVfdmFsaWQ7Cj4gPiA+ICsJZHJtTW9kZU1v ZGVJbmZvIG1vZGU7Cj4gPiA+ICsJZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOwo+ID4gPiAr CWRybU1vZGVFbmNvZGVyICplbmNvZGVyOwo+ID4gPiArCWludCBjcnRjLCBwaXBlOwo+ID4gPiAr fTsKPiA+ID4gKwo+ID4gPiArc3RydWN0IGRzY19jb25maWcgewo+ID4gPiArCWNoYXIgdGVzdF9u YW1lWzEyOF07Cj4gPiA+ICsJaW50IG1vZGVfd2lkdGg7Cj4gPiA+ICsJaW50IG1vZGVfaGVpZ2h0 Owo+ID4gPiArCWludCBicHA7Cj4gPiA+ICsJaW50IGRlcHRoOwo+ID4gPiArCWJvb2wgZHNjX3N1 cHBvcnRlZDsKPiA+ID4gKwlib29sIGRzY19lbmFibGU7Cj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ ICtzdGF0aWMgRklMRSAqZm9wZW5hdChpbnQgZGlyLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBj aGFyCj4gPiA+ICptb2RlKQo+ID4gPiArewo+ID4gPiArCWludCBmZCA9IG9wZW5hdChkaXIsIG5h bWUsIE9fUkRXUik7Cj4gPiA+ICsJcmV0dXJuIGZkb3BlbihmZCwgbW9kZSk7Cj4gPiA+ICt9Cj4g PiA+ICsKPiA+ID4gK3N0YXRpYyBib29sIGdldF9kcF9kc2Nfc3VwcG9ydChjaGFyICp0ZXN0X2Nv bm5lY3Rvcl9uYW1lKQo+ID4gPiArewo+ID4gPiArCWludCBkaXIgPSBpZ3RfZGVidWdmc19kaXIo ZHJtX2ZkKTsKPiA+ID4gKwlGSUxFICpkc2Nfc3VwcG9ydF9mcCA9IE5VTEw7Cj4gPiA+ICsJY2hh ciAqbGluZSA9IE5VTEw7Cj4gPiA+ICsJc2l6ZV90IGxpbmVfc2l6ZSA9IDA7Cj4gPiA+ICsJY2hh ciBidWZbMTI4XSA9IHswfSwgc3VwcG9ydGVkX3N0cls1XSwgZW5hYmxlZF9zdHJbNV07Cj4gPiA+ ICsJYm9vbCBzdXBwb3J0ZWQgPSBmYWxzZTsKPiA+ID4gKwo+ID4gPiArCXN0cmNweShidWYsIHRl c3RfY29ubmVjdG9yX25hbWUpOwo+ID4gPiArCXN0cmNhdChidWYsICIvaTkxNV9kc2Nfc3VwcG9y dCIpOwo+ID4gPiArCWRzY19zdXBwb3J0X2ZwID0gZm9wZW5hdChkaXIsIGJ1ZiwgInIiKTsKPiA+ ID4gKwlpZ3RfcmVxdWlyZShkc2Nfc3VwcG9ydF9mcCk7Cj4gPiA+ICsKPiA+ID4gKwl3aGlsZSAo Z2V0bGluZSgmbGluZSwgJmxpbmVfc2l6ZSwgZHNjX3N1cHBvcnRfZnApID4gMCkgewo+ID4gCj4g PiBUaGlzIGxvb3AgbG9va3Mgd2FzdGVmdWwuCj4gPiAKPiA+ID4gKwkJY2hhciAqc3VwcG9ydCwg KmVuYWJsZWQ7Cj4gPiA+ICsKPiA+ID4gKwkJZW5hYmxlZCA9IHN0cnN0cihsaW5lLCAiRW5hYmxl ZDogIik7Cj4gPiA+ICsJCWlndF9hc3NlcnRfZXEoc3NjYW5mKGVuYWJsZWQsICJFbmFibGVkOiAl cyIsCj4gPiA+IGVuYWJsZWRfc3RyKSwgMSk7Cj4gPiA+ICsJCWlmIChzdHJjbXAoZW5hYmxlZF9z dHIsICJ5ZXMiKSA9PSAwKSB7Cj4gPiA+ICsJCQlpZ3RfaW5mbygiRFNDIGlzIGVuYWJsZWQgb24g JXNcbiIsCj4gPiA+IHRlc3RfY29ubmVjdG9yX25hbWUpOwo+ID4gPiArCQkJc3VwcG9ydGVkID0g dHJ1ZTsKPiA+IAo+ID4gV2hhdCBpcyB0aGUgdXNlIG9mIHRoaXMgY2hlY2s/IElmIGFsbCB0aGF0 IHdlIG5lZWQgdG8ga25vdyBpcwo+ID4gd2hldGhlciBEU0MgaXMgc3VwcG9ydGVkLCBqdXN0IGNo ZWNrIGZvciAiU3VwcG9ydGVkOiB5ZXMiCj4gCj4gV2VsbCB0aGUgaWRlYSB3YXMgdG8ganVzdCBp Z25vcmUgU3VwcG9ydGVkIHZhbHVlIGlmIEVuYWJsZWQgaXMgdHJ1ZQo+IGJlY2F1c2UgdGhhdCBt ZWFucyBpdCB3YXMgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQuCj4gQnV0IG91ciBkaXNjdXNz aW9uIG1ha2VzIG1lIHRoaW5rIHRoYXQgaWYgd2UgYXJlIGp1c3QgdmFsaWRhdGluZyB0aGUKPiBj b25maWd1cmF0aW9uLCBJIGNhbiBqdXN0IHJlYWQgU3VwcG9ydGVkIGhlcmUgYW5kIGZvcmNlCj4g RFNDIGFuZCB0aGVuIGFmdGVyIG1vZGVzZXQsIHJlYWQgYmFjayB0aGUgdmFsdWUgb2YgRW5hYmxl ZCB0byBjaGVjawo+IHRoYXQgaXQgd2FzIGVuYWJsZWQuIEJ1dCBldmVuIGluIHRoZSBjYXNlIHdo ZXJlIGl0IGNhbm5vdAo+IGJlIGVuYWJsZWQsIHRoYXRzIGp1c3QgYmVjYXVzZSBvdXIgcGxhdGZv cm0gcHJvYmFibHkgZG9lc250IHN1cHBvcnQKPiB0aGUgY29uZmlndXJhdGlvbi4gU28gaXRzIG5v dCBhIHRlc3QgZmFpbCByZWFsbHkuCj4gCj4gTWF5IGJlIHRoZSByZWFsIHBhc3MgZmFpbCB0ZXN0 IHdvdWxkIGJlIGlmIGl0cyBlbmFibGVkID09IHllcywgdGhlbgo+IGRpc2FibGUgRFNDIGFuZCBl bmFibGUgYWdhaW4gYW5kIGNoZWNrIGlmIGl0IGlzIGVuYWJsZWQKPiBhbmQgdGVzdCB0aGlzIGZv ciBhbGwgY29uZmlndXJhdGlvbnMuCj4gV2hhdCBkbyB5b3UgdGhpbms/ClRoYXQgZG9lc24ndCB0 ZWxsIHVzIG11Y2guCgpJZiB3ZSB3YW50IHRvIGp1c3QgdmFsaWRhdGUgZW5jb2Rlci0+Y29tcHV0 ZV9jb25maWcoKSwgSSdkIHJlY29tbWVuZAplbnVtZXJhdGluZyBhIHN1YnRlc3QgZm9yIGVhY2gg dmFsaWQgYnBwIChiYXNlZCBvbiBic3BlYykgYW5kIGZhaWxpbmcKdGhlIHRlc3QgaWYgdGhlIGRy aXZlciBkb2VzIG5vdCBlbmFibGUgRFNDIHdoZW4gaXQgaXMgZXhwZWN0ZWQgdG8uClJlbGF0ZWQg Y29tbWVudCBiZWxvdy4KCkJ1dCwgd2Ugc2hvdWxkIHJlYWxseSBnZXQgYSBwYW5lbCBpbiBDSSB0 aGF0IG5lZWRzIERTQyBmb3IgdGhlCnByZWZlcnJlZCBtb2RlIGFuZCBkZW1vbnN0cmF0ZSB0aGF0 IHRoZSBtb2RlIHdvcmtzIGJlY2F1c2UgRFNDIHdhcwplbmFibGVkLgoKPiAKPiA+IAo+ID4gPiAr CQkJYnJlYWs7Cj4gPiA+ICsJCX0gZWxzZSB7Cj4gPiA+ICsJCQlnZXRsaW5lKCZsaW5lLCAmbGlu ZV9zaXplLCBkc2Nfc3VwcG9ydF9mcCk7Cj4gPiA+ICsJCQlzdXBwb3J0ID0gc3Ryc3RyKGxpbmUs ICJTdXBwb3J0ZWQ6ICIpOwo+ID4gPiArCQlpZ3RfYXNzZXJ0X2VxKHNzY2FuZihzdXBwb3J0LCAi U3VwcG9ydGVkOiAlcyIsCj4gPiA+IHN1cHBvcnRlZF9zdHIpLCAxKTsKPiA+ID4gKwkJaWYgKHN0 cmNtcChzdXBwb3J0ZWRfc3RyLCAieWVzIikgPT0gMCkKPiA+ID4gKwkJCXN1cHBvcnRlZCA9IHRy dWU7Cj4gPiA+ICsJCWVsc2UgaWYgKHN0cmNtcChzdXBwb3J0ZWRfc3RyLCAibm8iKSA9PSAwKQo+ ID4gPiArCQkJc3VwcG9ydGVkID0gZmFsc2U7Cj4gPiAKPiA+IFNraXAgdGhlIHRlc3QgaGVyZS4K PiA+ID4gKwkJZWxzZQo+ID4gPiArCQkJaWd0X2ZhaWxfb25fZih0cnVlLCAiVW5rbm93biBEU0Mg c3VwcG9ydGVkCj4gPiA+IHN0YXR1cyAnJXMnXG4iLAo+ID4gPiArCQkJCSAgICAgIHN1cHBvcnRl ZF9zdHIpOwo+ID4gPiArCQlicmVhazsKPiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ID4gKwo+ID4g PiArCWZyZWUobGluZSk7Cj4gPiAKPiA+IFlvdSBjb3VsZCBzaW1wbGlmeSB0aGUgbG9naWMgaW4g dGhpcyBmdW5jdGlvbiB3aXRoCj4gPiBpZ3RfZGVidWdmc19yZWFkKCkgYW5kIHN0cnN0cigpCj4g PiBUaGVyZSBhcmUgZXhhbXBsZXMgaW4ga21zX3Bzci5jLCBrbXNfZmJ0X2ZiY29uIGV0Yy4KPiAK PiBZZXMgd2lsbCBkbyB0aGF0LCB0aGFua3MgZm9yIHBvaW50aW5nIG91dC4KPiAKPiA+IAo+ID4g PiArCWZjbG9zZShkc2Nfc3VwcG9ydF9mcCk7Cj4gPiAKPiA+IE9wZW4gdGhlIGZpbGUgb25jZSwg Y2FjaGUgdGhlIGZkIGFuZCBjbG9zZSBpdCB3aGVuIHlvdSBhcmUgZG9uZQo+ID4gd2l0aCB0aGUg dGVzdC4KPiA+IAo+IAo+IE9rCj4gIAo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIHN1cHBvcnRlZDsK PiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgc2V0X2RwX2RzY19lbmFibGUoYm9v bCBlbmFibGUsIGNoYXIKPiA+ID4gKnRlc3RfY29ubmVjdG9yX25hbWUpCj4gPiA+ICt7Cj4gPiA+ ICsJaW50IGRpciA9IGlndF9kZWJ1Z2ZzX2Rpcihkcm1fZmQpOwo+ID4gPiArCUZJTEUgKmRzY19l bmFibGVfZnAgPSBOVUxMOwo+ID4gPiArCWNoYXIgYnVmWzEyOF0gPSB7MH07Cj4gPiA+ICsKPiA+ ID4gKwlzdHJjcHkoYnVmLCB0ZXN0X2Nvbm5lY3Rvcl9uYW1lKTsKPiA+ID4gKwlzdHJjYXQoYnVm LCAiL2k5MTVfZHNjX3N1cHBvcnQiKTsKPiA+ID4gKwlkc2NfZW5hYmxlX2ZwID0gZm9wZW5hdChk aXIsIGJ1ZiwgIncrIik7Cj4gPiA+ICsJaWd0X3JlcXVpcmUoZHNjX2VuYWJsZV9mcCk7Cj4gPiA+ ICsJcmV3aW5kKGRzY19lbmFibGVfZnApOwo+ID4gCj4gPiBTaG91bGQgYmUgIGEgbG90IHNpbXBs ZXIgdXNpbmcgc3lzZnNfd3JpdGUoKS4gQWdhaW4sIGxpYi9pZ3RfcHNyLmMKPiA+IGhhcyBleGFt cGxlcy4KPiA+IAo+ID4gPiArCWlndF9pbmZvKCJTZXR0aW5nIERTQ19FTkFCTEUgdG8gJXMgZm9y ICVzXG4iLCAoZW5hYmxlKSA/ICJ0cnVlIgo+ID4gPiA6ICJmYWxzZSIsIHRlc3RfY29ubmVjdG9y X25hbWUpOwo+ID4gPiArCWZwcmludGYoZHNjX2VuYWJsZV9mcCwgIiVkIiwgZW5hYmxlKTsKPiA+ ID4gKwlmZmx1c2goZHNjX2VuYWJsZV9mcCk7Cj4gPiA+ICsJZmNsb3NlKGRzY19lbmFibGVfZnAp Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBkdW1wX2Nvbm5lY3RvcnNfZmQo aW50IGRybWZkKQo+ID4gPiArewo+ID4gPiArCWludCBpLCBqOwo+ID4gPiArCj4gPiA+ICsJZHJt TW9kZVJlcyAqbW9kZV9yZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRybWZkKTsKPiA+ ID4gKwo+ID4gPiArICAgICAgICBpZiAoIW1vZGVfcmVzb3VyY2VzKSB7Cj4gPiA+ICsJCWlndF93 YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIsCj4gPiA+IHN0cmVycm9yKGVy cm5vKSk7Cj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfaW5m bygiQ29ubmVjdG9yczpcbiIpOwo+ID4gPiArCWlndF9pbmZvKCJpZFx0ZW5jb2Rlclx0c3RhdHVz XHRcdHR5cGVcdHNpemUgKG1tKVx0bW9kZXNcbiIpOwo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBt b2RlX3Jlc291cmNlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7Cj4gPiA+ICsJCWRybU1vZGVD b25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ID4gKwo+ID4gPiArCQljb25uZWN0b3IgPSBkcm1Nb2Rl R2V0Q29ubmVjdG9yQ3VycmVudChkcm1mZCwKPiA+ID4gKwkJCQkJCSAgICAgICBtb2RlX3Jlc291 cmNlcy0KPiA+ID4gPmNvbm5lY3RvcnNbaV0pOwo+ID4gPiArCQlpZiAoIWNvbm5lY3Rvcikgewo+ ID4gPiArCQkJaWd0X3dhcm4oImNvdWxkIG5vdCBnZXQgY29ubmVjdG9yICVpOiAlc1xuIiwKPiA+ ID4gKwkJCQkgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0sCj4gPiA+IHN0cmVycm9yKGVy cm5vKSk7Cj4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gKwkJfQo+ID4gPiArCj4gPiA+ICsJCWln dF9pbmZvKCIlZFx0JWRcdCVzXHQlc1x0JWR4JWRcdFx0JWRcbiIsCj4gPiA+ICsJCQkgY29ubmVj dG9yLT5jb25uZWN0b3JfaWQsIGNvbm5lY3Rvci0KPiA+ID4gPmVuY29kZXJfaWQsCj4gPiA+ICsJ CQkga21zdGVzdF9jb25uZWN0b3Jfc3RhdHVzX3N0cihjb25uZWN0b3ItCj4gPiA+ID5jb25uZWN0 aW9uKSwKPiA+ID4gKwkJCSBrbXN0ZXN0X2Nvbm5lY3Rvcl90eXBlX3N0cihjb25uZWN0b3ItCj4g PiA+ID5jb25uZWN0b3JfdHlwZSksCj4gPiA+ICsJCQkgY29ubmVjdG9yLT5tbVdpZHRoLCBjb25u ZWN0b3ItPm1tSGVpZ2h0LAo+ID4gPiArCQkJIGNvbm5lY3Rvci0+Y291bnRfbW9kZXMpOwo+ID4g PiArCj4gPiA+ICsJCWlmICghY29ubmVjdG9yLT5jb3VudF9tb2RlcykKPiA+ID4gKwkJCWNvbnRp bnVlOwo+ID4gPiArCj4gPiA+ICsJCWlndF9pbmZvKCIgIG1vZGVzOlxuIik7Cj4gPiA+ICsJCWln dF9pbmZvKCIgIG5hbWUgcmVmcmVzaCAoSHopIGhkaXNwIGhzcyBoc2UgaHRvdCB2ZGlzcAo+ID4g PiAiInZzcyB2c2UgdnRvdCBmbGFncyB0eXBlIGNsb2NrXG4iKTsKPiA+ID4gKwkJZm9yIChqID0g MDsgaiA8IGNvbm5lY3Rvci0+Y291bnRfbW9kZXM7IGorKyl7Cj4gPiA+ICsJCQlpZ3RfaW5mbygi WyVkXSIsIGopOwo+ID4gPiArCQkJa21zdGVzdF9kdW1wX21vZGUoJmNvbm5lY3Rvci0+bW9kZXNb al0pOwo+ID4gPiArCQl9Cj4gPiA+ICsKPiA+ID4gKwkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29u bmVjdG9yKTsKPiA+ID4gKwl9Cj4gPiA+ICsJaWd0X2luZm8oIlxuIik7Cj4gPiA+ICsKPiA+ID4g Kwlkcm1Nb2RlRnJlZVJlc291cmNlcyhtb2RlX3Jlc291cmNlcyk7Cj4gPiA+ICt9Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyB2b2lkIGR1bXBfY3J0Y3NfZmQoaW50IGRybWZkKQo+ID4gPiArewo+ID4g PiArCWludCBpOwo+ID4gPiArCWRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdl dFJlc291cmNlcyhkcm1mZCk7Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfaW5mbygiQ1JUQ3M6XG4iKTsK PiA+ID4gKwlpZ3RfaW5mbygiaWRcdGZiXHRwb3NcdHNpemVcbiIpOwo+ID4gPiArCWZvciAoaSA9 IDA7IGkgPCBtb2RlX3Jlc291cmNlcy0+Y291bnRfY3J0Y3M7IGkrKykgewo+ID4gPiArCQlkcm1N b2RlQ3J0YyAqY3J0YzsKPiA+ID4gKwo+ID4gPiArCQljcnRjID0gZHJtTW9kZUdldENydGMoZHJt ZmQsIG1vZGVfcmVzb3VyY2VzLT5jcnRjc1tpXSk7Cj4gPiA+ICsJCWlmICghY3J0Yykgewo+ID4g PiArCQkJaWd0X3dhcm4oImNvdWxkIG5vdCBnZXQgY3J0YyAlaTogJXNcbiIsCj4gPiA+ICsJCQkJ IG1vZGVfcmVzb3VyY2VzLT5jcnRjc1tpXSwKPiA+ID4gc3RyZXJyb3IoZXJybm8pKTsKPiA+ID4g KwkJCWNvbnRpbnVlOwo+ID4gPiArCQl9Cj4gPiA+ICsJCWlndF9pbmZvKCIlZFx0JWRcdCglZCwl ZClcdCglZHglZClcbiIsCj4gPiA+ICsJCQkgY3J0Yy0+Y3J0Y19pZCwgY3J0Yy0+YnVmZmVyX2lk LCBjcnRjLT54LAo+ID4gPiArCQkJIGNydGMtPnksIGNydGMtPndpZHRoLCBjcnRjLT5oZWlnaHQp Owo+ID4gPiArCQlrbXN0ZXN0X2R1bXBfbW9kZSgmY3J0Yy0+bW9kZSk7Cj4gPiA+ICsKPiA+ID4g KwkJZHJtTW9kZUZyZWVDcnRjKGNydGMpOwo+ID4gPiArCX0KPiA+ID4gKwlpZ3RfaW5mbygiXG4i KTsKPiA+ID4gKwo+ID4gPiArCWRybU1vZGVGcmVlUmVzb3VyY2VzKG1vZGVfcmVzb3VyY2VzKTsK PiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgZHVtcF9pbmZvKHZvaWQpCj4gPiA+ ICt7Cj4gPiA+ICsJZHVtcF9jb25uZWN0b3JzX2ZkKGRybV9mZCk7Cj4gPiA+ICsJZHVtcF9jcnRj c19mZChkcm1fZmQpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50Cj4gPiA+ICtz ZXRfbW9kZShzdHJ1Y3QgY29ubmVjdG9yICpjLCBzdHJ1Y3QgZHNjX2NvbmZpZyAqdGVzdF9jb25m aWcsCj4gPiA+IGJvb2wgc2V0X21vZGUpCj4gPiA+ICt7Cj4gPiA+ICsJdW5zaWduZWQgaW50IGZi X2lkID0gMDsKPiA+ID4gKwlzdHJ1Y3QgaWd0X2ZiIGZiX2luZm87Cj4gPiA+ICsJaW50IHJldCA9 IDA7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoIXNldF9tb2RlKSB7Cj4gPiA+ICsJCXJldCA9IGRybU1v ZGVTZXRDcnRjKGRybV9mZCwgYy0+Y3J0YywgMCwgMCwgMCwKPiA+ID4gKwkJCQkgICAgIE5VTEws IDAsIE5VTEwpOwo+ID4gPiArCQlpZiAocmV0KQo+ID4gPiArCQkJaWd0X3dhcm4oIkZhaWxlZCB0 byB1bnNldCBtb2RlIik7Cj4gPiA+ICsJCXJldHVybiByZXQ7Cj4gPiA+ICsJfQo+ID4gPiArCj4g PiA+ICsJZmJfaWQgPSBpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZHJtX2ZkLCB0ZXN0X2NvbmZpZy0+ bW9kZV93aWR0aCwKPiA+ID4gKwkJCQkgICAgICB0ZXN0X2NvbmZpZy0+bW9kZV9oZWlnaHQsCj4g PiA+ICsJCQkJICAgICAgaWd0X2JwcF9kZXB0aF90b19kcm1fZm9ybWF0KHRlc3RfCj4gPiA+IGNv bmZpZy0+YnBwLAo+ID4gPiArCQkJCQkJCQkgIHRlc3RfCj4gPiA+IGNvbmZpZy0+ZGVwdGgpLAo+ ID4gPiArCQkJCSAgICAgIHRpbGluZywgJmZiX2luZm8pOwo+ID4gPiArCj4gPiA+ICsJaWd0X2lu Zm8oIkNSVEMoJXUpOlslZF0iLCBjLT5jcnRjLCAwKTsKPiA+ID4gKwlrbXN0ZXN0X2R1bXBfbW9k ZSgmYy0+bW9kZSk7Cj4gPiA+ICsJZHJtTW9kZVNldENydGMoZHJtX2ZkLCBjLT5jcnRjLCAtMSwg MCwgMCwgTlVMTCwgMCwgTlVMTCk7Cj4gPiA+ICsJcmV0ID0gZHJtTW9kZVNldENydGMoZHJtX2Zk LCBjLT5jcnRjLCBmYl9pZCwgMCwgMCwKPiA+ID4gKwkJCSAgICAgJmMtPmlkLCAxLCAmYy0+bW9k ZSk7Cj4gPiA+ICsJc2xlZXAoNSk7Cj4gPiAKPiA+IFdoeT8gSWYgdGhpcyBmb3IgbWFudWFsIHRl c3RpbmcsIHBsZWFzZSB1c2UgbWFudWFsKCkuIFRoZXJlIGFyZQo+ID4gcGxlbnR5IG9mIGV4YW1w bGVzLgo+IAo+IE1hbnVhbCB0ZXN0aW5nIGZvciB2aXN1YWxseSB0ZXN0aW5nIHJlc3VsdHMgb2Yg Y29tcHJlc3Npb24gc2luY2Ugd2UKPiBkb250IGhhdmUgYW55IENSQyB3YXlzIHRvIGNoZWNrIHRo aXMuCj4gQnV0IEkgd2lsbCBwcm9iYWJseSByZW1vdmUgdGhpcyBzaW5jZSBpdCB3YXMgZm9yIG15 IGRlYnVnIHB1cnBvc2VzCj4gYW5kIGNvZGUgdmFsaWRhdGlvbi4KPiAKPiA+IAo+ID4gPiArCWlm IChyZXQgPCAwKSB7Cj4gPiA+ICsJCWlndF93YXJuKCJGYWlsZWQgdG8gc2V0IG1vZGUgKCVkeCVk QCVkSHopOiAlc1xuIiwKPiA+ID4gKwkJCSB0ZXN0X2NvbmZpZy0+bW9kZV93aWR0aCwgdGVzdF9j b25maWctCj4gPiA+ID5tb2RlX2hlaWdodCwKPiA+ID4gKwkJCSBjLT5tb2RlLnZyZWZyZXNoLCBz dHJlcnJvcihlcnJubykpOwo+ID4gCj4gPiBUaGlzIGNhbid0IGJlIGEgd2FybmluZywgdGhlIHRl c3Qgc2hvdWxkIGZhaWwgaWYgdGhlIG1vZGUgY2FuJ3QgYmUKPiA+IHNldC4KPiA+IAo+ID4gPiAr CQlpZ3RfcmVtb3ZlX2ZiKGRybV9mZCwgJmZiX2luZm8pOwo+ID4gCj4gPiBSZWFkIGJhY2sgZGVi dWdmcyB0byBjaGVjayB3aGV0aGVyIERTQyB3YXMgZW5hYmxlZD8gSSdtIGNhbid0IHRlbGwKPiA+ IHdoYXQgaXMgYmVpbmcgdGVzdGVkIGhlcmUuCj4gCj4gU3VyZSBjYW4gYWRkIHRoaXMgZm9yIHRo ZSB0ZXN0IHN0cmF0ZWd5IG9mIGRpc2FibGluZyBhbmQgdGhlbgo+IGVuYWJsaW5nLCBqdXN0IHRv IHZhbGlkYXRlIHRoZSBkcml2ZXIuCj4gCj4gPiA+ICsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4g KwlyZXR1cm4gcmV0Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsKPiA+ID4gKy8qCj4gPiA+ICsg KiBSZS1wcm9iZSBjb25uZWN0b3JzIGFuZCBkbyBhIG1vZGVzZXQgd2l0aCBhbmQgd2lob3V0IERT Qwo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ICsgKiAwOiBPbiBTdWNjZXNzCj4g PiA+ICsgKiAtMTogT24gZmFpbHVyZQo+ID4gCj4gPiBpbnQgaXMgcG9pbnRsZXNzLCBqdXN0IHVz ZSBhIGJvb2wgcmV0dXJuIGlmIHRoZSBmdW5jdGlvbiBkb2Vzbid0Cj4gPiBtYWtlIHVzZSBvZiBl cnJvciBjb2Rlcy4KPiA+IAo+ID4gPiArICovCj4gPiA+ICtzdGF0aWMgaW50IHVwZGF0ZV9kaXNw bGF5KHN0cnVjdCBkc2NfY29uZmlnICp0ZXN0X2NvbmZpZykKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1 Y3QgY29ubmVjdG9yICpjb25uZWN0b3JzOwo+ID4gPiArCXN0cnVjdCBrbXN0ZXN0X2Nvbm5lY3Rv cl9jb25maWcgY29uZmlnOwo+ID4gPiArCWludCBjbnQsIGNvbm5fY250ID0gMCwgcmV0ID0gMCwg ZWRwX2NudCA9IDAsIGRwX2NudCA9IDA7Cj4gPiA+ICsJdW5zaWduZWQgbG9uZyBjcnRjX2lkeF9t YXNrID0gLTFVTDsKPiA+ID4gKwljaGFyIGNvbm5fYnVmWzEyOF0gPSB7MH07Cj4gPiA+ICsKPiA+ ID4gKwlyZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRybV9mZCk7Cj4gPiA+ICsJaWYg KCFyZXNvdXJjZXMpIHsKPiA+ID4gKwkJaWd0X3dhcm4oImRybU1vZGVHZXRSZXNvdXJjZXMgZmFp bGVkOiAlc1xuIiwKPiA+ID4gc3RyZXJyb3IoZXJybm8pKTsKPiA+ID4gKwkJcmV0dXJuIC0xOwo+ ID4gPiArCX0KPiA+IAo+ID4gV2h5IGhhbmQgcm9sbCBJT0NUTHMgd2hlbiB0aGUgSUdUIGxpYnJh cnkgcHJvdmlkZXMgYSBsb3Qgb2YgdGhlc2UKPiA+IGZ1bmN0aW9uYWxpdHk/Cj4gCj4gSSB3aWxs IHRha2UgYSBsb29rIGF0IHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucywgYnV0IHNpbmNlIHRoZSBEU0MK PiBlbmFibGluZyBsb2dpYyBpcyBpbnNlcnRlZCBwZXIgY29ubmVjdG9yCj4gaXQgd2FzIGhhcmQg dG8gdXNlIGlndCBsaWIgZnVuY3Rpb25zLgo+IAo+ID4gPiArCj4gPiA+ICsJY29ubmVjdG9ycyA9 IGNhbGxvYyhyZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnMsCj4gPiA+ICsJCQkgICAgc2l6ZW9m KHN0cnVjdCBjb25uZWN0b3IpKTsKPiA+ID4gKwlpZiAoIWNvbm5lY3RvcnMpCj4gPiA+ICsJCXJl dHVybiAtMTsKPiA+ID4gKwo+ID4gPiArCS8qIEZpbmQgYW55IGNvbm5lY3RlZCBkaXNwbGF5cyAq Lwo+ID4gPiArCWZvciAoY250ID0gMDsgY250IDwgcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3Jz OyBjbnQrKykgewpTZXBhcmF0ZSBzdWItdGVzdCBmb3IgZWFjaCBjb25uZWN0b3IsIHdlIHdhbnQg dG8ga25vdyB3aGljaCBvbmUgZmFpbHMuCgo+ID4gPiArCQlzdHJ1Y3QgY29ubmVjdG9yICpjID0g JmNvbm5lY3RvcnNbY250XTsKPiA+ID4gKwkJYy0+aWQgPSByZXNvdXJjZXMtPmNvbm5lY3RvcnNb Y250XTsKPiA+ID4gKwkJaWYoIWttc3Rlc3RfZ2V0X2Nvbm5lY3Rvcl9jb25maWcoZHJtX2ZkLCBj LT5pZCwKPiA+ID4gY3J0Y19pZHhfbWFzaywKPiA+ID4gKwkJCQkJCSZjb25maWcpKSB7Cj4gPiA+ ICsJCQljLT5tb2RlX3ZhbGlkID0gMDsKPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiArCQl9Cj4g PiA+ICsJCWMtPmNvbm5lY3RvciA9IGNvbmZpZy5jb25uZWN0b3I7Cj4gPiA+ICsJCWMtPmVuY29k ZXIgPSBjb25maWcuZW5jb2RlcjsKPiA+ID4gKwkJYy0+bW9kZSA9IGNvbmZpZy5kZWZhdWx0X21v ZGU7Cj4gPiA+ICsJCWMtPmNydGMgPSBjb25maWcuY3J0Yy0+Y3J0Y19pZDsKPiA+ID4gKwkJYy0+ cGlwZSA9IGNvbmZpZy5waXBlOwo+ID4gPiArCQljLT5tb2RlX3ZhbGlkID0gMTsKPiA+ID4gKwo+ ID4gPiArCQlpZiAoYy0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PQo+ID4gPiBEUk1fTU9E RV9DT05ORUNUT1JfRGlzcGxheVBvcnQgfHwKPiA+ID4gKwkJICAgIGMtPmNvbm5lY3Rvci0+Y29u bmVjdG9yX3R5cGUgPT0KPiA+ID4gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkgewo+ID4gPiArCj4g PiA+ICsJCQlpZiAoYy0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PQo+ID4gPiBEUk1fTU9E RV9DT05ORUNUT1JfZURQKQo+ID4gPiArCQkJCWNvbm5fY250ID0gKysgZWRwX2NudDsKPiA+ID4g KwkJCWVsc2UKPiA+ID4gKwkJCQljb25uX2NudCA9ICsrIGRwX2NudDsKPiA+ID4gKwkJCWlmIChj LT5jb25uZWN0b3ItPmNvbm5lY3Rpb24gPT0KPiA+ID4gRFJNX01PREVfQ09OTkVDVEVEKSB7Cj4g PiA+ICsJCQkJc3ByaW50Zihjb25uX2J1ZiwgIiVzLSVkIiwKPiA+ID4gKwkJCQkJa21zdGVzdF9j b25uZWN0b3JfdHlwZV9zdHIoYy0KPiA+ID4gPmNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpLAo+ ID4gPiArCQkJCQljb25uX2NudCk7Cj4gPiA+ICsJCQkJdGVzdF9jb25maWctPmRzY19zdXBwb3J0 ZWQgPQo+ID4gPiArCQkJCQlnZXRfZHBfZHNjX3N1cHBvcnQoY29ubl9idWYpOwo+ID4gPiArCQkJ CWlmICghc3RyY21wKHRlc3RfY29uZmlnLT50ZXN0X25hbWUsCj4gPiA+ICsJCQkJCSAgICAiZm9y Y2VfZHNjX2VuYWJsZV9iYXNpYyIpKQo+ID4gPiB7Cj4gPiAKPiA+IEhtbSwgdGhlcmUgaXMganVz dCBvbmUgc3VidGVzdCwgd2hhdCBlbHNlIGNvdWxkIHRoaXMgYmU/Cj4gPiAKPiA+IAo+ID4gPiAr CQkJCQlpZiAodGVzdF9jb25maWctPmRzY19zdXBwb3J0ZWQpIAo+ID4gPiB7Cj4gPiA+ICsJCQkJ CQlpZ3RfaW5mbyAoIkRTQyBpcwo+ID4gPiBzdXBwb3J0ZWQgb24gJXNcbiIsCj4gPiA+ICsJCQkJ CQkJICBjb25uX2J1Zik7Cj4gPiA+ICsJCQkJCQl0ZXN0X2NvbmZpZy0+bW9kZV93aWR0aCAKPiA+ ID4gPSBjLT5tb2RlLmhkaXNwbGF5Owo+ID4gPiArCQkJCQkJdGVzdF9jb25maWctCj4gPiA+ID5t b2RlX2hlaWdodCA9IGMtPm1vZGUudmRpc3BsYXk7Cj4gPiA+ICsJCQkJCQl0ZXN0X2NvbmZpZy0+ YnBwID0gMzI7Cj4gPiA+ICsJCQkJCQl0ZXN0X2NvbmZpZy0+ZGVwdGggPQo+ID4gPiAyNDsKCkFy ZSB0aGVyZSBvdGhlciBzdWNoIHRlc3QgY29uZmlndXJhdGlvbnMgZm9yIHdoaWNoIHRoZSBrZXJu ZWwgaXMKZXhwZWN0ZWQgdG8gZW5hYmxlIERTQz8gSWYgeWVzLCBnZW5lcmF0ZSBhIHN1YnRlc3Qg Zm9yIGVhY2ggdmFsaWQKY29tYmluYXRpb24uCgo+ID4gPiArCQkJCQkJc2V0X2RwX2RzY19lbmFi bGUodGVzdF8KPiA+ID4gY29uZmlnLT5kc2NfZW5hYmxlLAo+ID4gPiArCQkJCQkJCSAgY29ubl9i dWYpOwo+ID4gPiArCQkJCQkJcmV0ID0gc2V0X21vZGUoYywKPiA+ID4gdGVzdF9jb25maWcsCj4g PiA+ICsJCQkJCQkJICAgICAgIHRydWUpOwo+ID4gCj4gPiByZXQgZ2V0cyBvdmVyd3JpdHRlbiBp biB0aGUgbmV4dCBsb29wLCBpZiBzZXRfbW9kZSBmYWlscywgdGhlbiB0aGUKPiA+IHRlc3Qgc2hv dWxkIHRvby4KPiA+IAo+ID4gPiArCQkJCQl9IGVsc2Ugewo+ID4gCj4gPiBza2lwIGlmIHRoZSBw YW5lbCBkb2VzIG5vdCBzdXBwb3J0IERTQyAgYW5kIGRvIGl0IGluc2lkZSB0aGUKPiA+IHN1cHBv cnQgY2hlY2sgaGVscGVyLgo+ID4gCj4gPiA+ICsJCQkJCQlpZ3RfaW5mbyAoIkRTQyBpcyBub3QK PiA+ID4gc3VwcG9ydGVkIG9uICVzXG4iLAo+ID4gPiArCQkJCQkJCSAgY29ubl9idWYpOwo+ID4g PiArCQkJCQl9Cj4gPiA+ICsJCQkJfQo+ID4gPiArCQkJCWNydGNfaWR4X21hc2sgJj0gfigxIDw8 IGMtPnBpcGUpOwo+ID4gPiArCQkJfQo+ID4gPiArCQl9Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ ICsJZnJlZShjb25uZWN0b3JzKTsKPiA+ID4gKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhyZXNvdXJj ZXMpOwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBp bnQgb3B0X2hhbmRsZXIoaW50IG9wdCwgaW50IG9wdF9pbmRleCwgdm9pZCAqb3B0X2R1bXApCj4g PiA+ICt7Cj4gPiA+ICsJYm9vbCAqZHVtcCA9IG9wdF9kdW1wOwo+ID4gPiArCj4gPiA+ICsJc3dp dGNoIChvcHQpIHsKPiA+ID4gKwljYXNlICdpJzoKPiA+ID4gKwkJKmR1bXAgPSB0cnVlOwo+ID4g Cj4gPiBEb24ndCBzZWUgbXVjaCBwb2ludCBhZGRpbmcgYW4gb3B0aW9uLCAgaWYgeW91IHJlYWxs eSB3YW50IHRvIGR1bXAKPiA+IHRoZSAgZnVsbCBtb2RlLCBqdXN0IHVzZSBpZ3RfZGVidWcoKQo+ ID4gYW5kIHJ1biB0aGUgdGVzdCB3aXRoIC0tZGVidWcuCj4gCj4gSG1tIG9rIHdpbGwgdGVzdCB3 aGF0IC0tZGVidWcgZHVtcHMgYW5kIGlmIHRoYXRzIGVub3VnaC4KPiAKPiA+IAo+ID4gPiArCQli cmVhazsKPiA+ID4gKwlkZWZhdWx0Ogo+ID4gPiArCQlpZ3RfYXNzZXJ0KDApOwo+ID4gPiArCX0K PiA+ID4gKwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ID4gCj4gPiBSZW1vdmUgZHVtcCBhbmQgc3dpdGNo IHRvICBpZ3RfbWFpbgo+ID4gPiArewo+ID4gPiArCWNvbnN0IGNoYXIgKmhlbHBfc3RyID0KPiA+ ID4gKwkJIiAgLS1pbmZvXHRcdER1bXAgSW5mb3JtYXRpb24gYWJvdXQgY29ubmVjdG9ycy4gKHN0 aWxsCj4gPiA+IG5lZWRzIERSTSBhY2Nlc3MpXG4iOwo+ID4gPiArCXN0YXRpYyBzdHJ1Y3Qgb3B0 aW9uIGxvbmdfb3B0aW9uc1tdID0gewo+ID4gPiArCQl7ImluZm8iLCAwLCAwLCAnaSd9LAo+ID4g PiArCQl7MCwgMCwgMCwgMH0KPiA+ID4gKwl9Owo+ID4gPiArCWludCByZXQgPSAwOwo+ID4gPiAr CXN0cnVjdCBkc2NfY29uZmlnIHRlc3RfY29uZmlnOwo+ID4gPiArCWJvb2wgb3B0X2R1bXAgPSBm YWxzZTsKPiA+ID4gKwlpZ3Rfc3VidGVzdF9pbml0X3BhcnNlX29wdHMoJmFyZ2MsIGFyZ3YsICIi LCBsb25nX29wdGlvbnMsCj4gPiA+IGhlbHBfc3RyLAo+ID4gPiArCQkJCSAgICBvcHRfaGFuZGxl ciwgJm9wdF9kdW1wKTsKPiA+IAo+ID4gVGhpcyB3b24ndCBiZSBuZWVkZWQgZWl0aGVyLgo+ID4g Cj4gPiA+ICsKPiA+ID4gKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gPiA+ICsKPiA+ID4g KwlpZ3RfZml4dHVyZSB7Cj4gPiA+ICsJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsK PiA+ID4gKwkJZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9BTlkpOwo+ID4gCj4gPiBN aXNzaW5nIGlndF9kaXNwbGF5X3JlcXVpcmUoKQo+ID4gCj4gPiA+ICsJCWlmIChvcHRfZHVtcCkK PiA+ID4gKwkJCWR1bXBfaW5mbygpOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWlndF9zdWJ0 ZXN0KCJmb3JjZV9kc2NfZW5hYmxlX2Jhc2ljIikgewo+ID4gPiArCQlzdHJjcHkodGVzdF9jb25m aWcudGVzdF9uYW1lLCJmb3JjZV9kc2NfZW5hYmxlX2Jhc2ljIik7Cj4gPiAKPiA+IFdoeT8gCj4g Cj4gVGhpcyBpcyB0byBwYXNzIHRoZSB0ZXN0IG5hbWUsIG1vcmUgdGVzdHMgd2lsbCBiZSBhZGRl ZCB3aXRoIGRpZmYKPiBuYW1lcy4KPiAKTGV0J3Mgbm90IGFkZCB0aGluZ3MgdGhhdCBhcmUgbm90 IG5lZWRlZCBub3cuIEFsc28sIHBsZWFzZSB1c2UgZW51bXMKYW5kL29yIGJvb2xlYW4gZmxhZ3Mg dG8gc2V0dXAgdGhlIHRlc3QgY29uZmlndXJhdGlvbi4gVGhhdCBpcyB3aGF0IElHVHMKdHlwaWNh bGx5IGRvLCBwYXNzaW5nIGEgc3RyaW5nIGFuZCBjb21wYXJpbmcgaXNuJ3QgZWZmaWNpZW50LgoK Cj4gTWFuYXNpCj4gCj4gCj4gPiA+ICsJCXJldCA9IHVwZGF0ZV9kaXNwbGF5KCZ0ZXN0X2NvbmZp Zyk7Cj4gPiA+ICsJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ IAo+ID4gVGhlIHRlc3QgZG9lc24ndCBtYWtlIHVzZSBvZiBkaXNwbGF5X2luaXQoKSBhbmQgZGlz cGxheV9maW5pKCkKPiA+IGxpa2UgIG90aGVyIGttcyB0ZXN0cyBkbywgd2hhdCBpcyB0aGUgcmVh c29uPwo+ID4gPiArCWNsb3NlKGRybV9mZCk7Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfYXNzZXJ0X2Vx KHJldCwgMCk7Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfaW5mbygiRFNDIHRlc3RpbmcgZG9uZVxuIik7 Cj4gPiA+ICsJaWd0X2V4aXQoKTsKPiA+ID4gKwo+ID4gPiArfQo+ID4gPiAKPiA+IAo+ID4gCj4g PiAKPiA+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K aWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==