From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 824626E283 for ; Tue, 6 Nov 2018 00:26:55 +0000 (UTC) Date: Mon, 5 Nov 2018 16:29:18 -0800 From: Manasi Navare Message-ID: <20181106002918.GC26420@intel.com> References: <20181005233437.31286-1-manasi.d.navare@intel.com> <9605297.PTn4Fjk6Em@dk-thinkpad-x260> <20181105205818.GB26420@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: 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: T24gTW9uLCBOb3YgMDUsIDIwMTggYXQgMDM6MjI6MDNQTSAtMDgwMCwgRGhpbmFrYXJhbiBQYW5k aXlhbiB3cm90ZToKPiBPbiBNb24sIDIwMTgtMTEtMDUgYXQgMTI6NTggLTA4MDAsIE1hbmFzaSBO YXZhcmUgd3JvdGU6Cj4gPiBUaGFua3MgZm9yIHRoZSByZXZpZXcsIGZvbGxvd2luZyBhcmUgbXkg Y29tbWVudHMgYmFzZWQgb24gb3VyCj4gPiBkaXNjdXNzaW9uIG9uIEZyaWRheToKPiA+IAo+ID4g T24gRnJpLCBOb3YgMDIsIDIwMTggYXQgMDM6Mzk6NTdQTSAtMDcwMCwgRGhpbmFrYXJhbiBQYW5k aXlhbiB3cm90ZToKPiA+ID4gT24gRnJpZGF5LCBPY3RvYmVyIDUsIDIwMTggNDozNDozNyBQTSBQ RFQgTWFuYXNpIE5hdmFyZSB3cm90ZToKPiA+ID4gPiBUaGlzIHBhdGNoIGFkZHMgYSBiYXNpYyBr bXMgdGVzdCB0byB2YWxpZGF0ZSB0aGUgZGlzcGxheSBzdHJlYW0KPiA+ID4gPiBjb21wcmVzc2lv biBmdW5jdGlvbmFsaXR5IGlmIHN1cHBvcnRlZCBvbiBEUC9lRFAgY29ubmVjdG9yLgo+ID4gPiA+ IEN1cnJlbnRseSB0aGlzIGhhcyBvbmx5IG9uZSBzdWJ0ZXN0IHRvIGZvcmNlIHRoZSBEU0Mgb24g YWxsCj4gPiA+ID4gdGhlIGNvbm5lY3RvcnMgdGhhdCBzdXBwb3J0IGl0IHdpdGggZGVmYXVsdCBw YXJhbWV0ZXJzLgo+ID4gPiA+IFRoaXMgd2lsbCBiZSBleHBhbmRlZCB0byBhZGQgbW9yZSBzdWJ0 ZXN0cyB0byB0d2VhayBEU0MKPiA+ID4gPiBwYXJhbWV0ZXJzLgo+ID4gPiA+IAo+ID4gPiA+IENj OiBBbnVzaGEgU3JpdmF0c2EgPGFudXNoYS5zcml2YXRzYUBpbnRlbC5jb20+Cj4gPiA+ID4gU2ln bmVkLW9mZi1ieTogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGludGVsLmNvbT4KPiA+ ID4gPiAtLS0KPiA+ID4gPiAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4gPiA+ID4g IHRlc3RzL2ttc19kcF9kc2MuYyAgICAgfCAzNzIKPiA+ID4gPiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ID4gPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDM3MyBpbnNl cnRpb25zKCspCj4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfZHBfZHNjLmMK PiA+ID4gPiAKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rl c3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+ID4gPiBpbmRleCBjODQ5MzNmMS4uYzgwN2FhZDMgMTAw NjQ0Cj4gPiA+ID4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gPiA+ICsrKyBiL3Rl c3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+ID4gPiBAQCAtMjA3LDYgKzIwNyw3IEBAIFRFU1RTX3By b2dzID0gXAo+ID4gPiA+ICAJa21zX3R2X2xvYWRfZGV0ZWN0IFwKPiA+ID4gPiAgCWttc191bml2 ZXJzYWxfcGxhbmUgXAo+ID4gPiA+ICAJa21zX3ZibGFuayBcCj4gPiA+ID4gKwlrbXNfZHBfZHNj IFwKPiA+ID4gPiAgCW1ldGFfdGVzdCBcCj4gPiA+ID4gIAlwZXJmIFwKPiA+ID4gPiAgCXBlcmZf cG11IFwKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2RwX2RzYy5jIGIvdGVzdHMva21z X2RwX2RzYy5jCj4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gPiBpbmRleCAwMDAw MDAwMC4uZDBmZDJhZTMKPiA+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ID4gKysrIGIvdGVzdHMv a21zX2RwX2RzYy5jCj4gPiA+ID4gQEAgLTAsMCArMSwzNzIgQEAKPiA+ID4gPiArLyoKPiA+ID4g PiArICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KPiBZb3UgbWlnaHQgd2Fu dCB0byBmaXggdGhlIGRhdGUgaGVyZS4KPiAKPiA+ID4gPiArICoKPiA+ID4gPiArICogRGlzcGxh eXBvcnQgRGlzcGxheSBTdHJlYW0gQ29tcHJlc3Npb24gdGVzdAo+ID4gPiA+ICsgKgo+ID4gPiA+ ICsgKiBBdXRob3JzOgo+ID4gPiA+ICsgKiBNYW5hc2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVA aW50ZWwuY29tPgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBFbGVtZW50cyBvZiB0aGUgbW9kZXNl dCBjb2RlIGFkYXB0ZWQgZnJvbSBEYXZpZCBIZXJybWFubidzCj4gPiA+ID4gKyAqIERSTSBtb2Rl c2V0IGV4YW1wbGUKPiBNaXNzaW5nIGxpY2Vuc2UuCj4gCj4gPiAKPiA+IEkgd2lsbCBhZGQgbW9y ZSBjb21tZW50cyBoZXJlIG1haW5seSBzcGVjaWZ5aW5nIHRoYXQgc2luY2Ugd2UgZG8gbm90Cj4g PiBoYXZlIGFueSB3eSB0byB2YWxpZGF0ZQo+ID4gdGhlIHF1YWxpdHkgb2YgY29tcHJlc3Npb24s IHdlIGFyZSBtYWlubHkgdmFsaWRhdGluZyB0aGUgZHJpdmVyCj4gPiBjb25maWd1cmF0aW9uIGZv ciBEU0MgaGVyZS4KPiA+IAo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKi8KPiA+ID4gPiArI2luY2x1 ZGUgImlndC5oIgo+ID4gPiA+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiA+ID4gPiArI2luY2x1ZGUg PGdldG9wdC5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8bWF0aC5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8 c3RkaW50Lmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gPiA+ID4gKyNpbmNsdWRl IDxzdHJpbmdzLmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiA+ID4gPiArI2luY2x1 ZGUgPHN0ZGxpYi5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8c2lnbmFsLmg+Cj4gPiA+ID4gKyNpbmNs dWRlIDx0aW1lLmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxmY250bC5oPgo+ID4gPiA+ICsjaW5jbHVk ZSA8dGVybWlvcy5oPgo+ID4gPiA+ICsKPiA+ID4gPiAraW50IGRybV9mZDsKPiA+ID4gPiArZHJt TW9kZVJlcyAqcmVzb3VyY2VzOwo+ID4gPiA+ICt1aW50NjRfdCB0aWxpbmcgPSBMT0NBTF9EUk1f Rk9STUFUX01PRF9OT05FOwo+ID4gPiA+ICsKPiA+ID4gPiArc3RydWN0IGNvbm5lY3RvciB7Cj4g PiA+ID4gKwl1aW50MzJfdCBpZDsKPiA+ID4gPiArCWludCBtb2RlX3ZhbGlkOwo+ID4gPiA+ICsJ ZHJtTW9kZU1vZGVJbmZvIG1vZGU7Cj4gPiA+ID4gKwlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0 b3I7Cj4gPiA+ID4gKwlkcm1Nb2RlRW5jb2RlciAqZW5jb2RlcjsKPiA+ID4gPiArCWludCBjcnRj LCBwaXBlOwo+ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiArc3RydWN0IGRzY19jb25maWcg ewo+ID4gPiA+ICsJY2hhciB0ZXN0X25hbWVbMTI4XTsKPiA+ID4gPiArCWludCBtb2RlX3dpZHRo Owo+ID4gPiA+ICsJaW50IG1vZGVfaGVpZ2h0Owo+ID4gPiA+ICsJaW50IGJwcDsKPiA+ID4gPiAr CWludCBkZXB0aDsKPiA+ID4gPiArCWJvb2wgZHNjX3N1cHBvcnRlZDsKPiA+ID4gPiArCWJvb2wg ZHNjX2VuYWJsZTsKPiA+ID4gPiArfTsKPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBGSUxFICpm b3BlbmF0KGludCBkaXIsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIKPiA+ID4gPiAqbW9k ZSkKPiA+ID4gPiArewo+ID4gPiA+ICsJaW50IGZkID0gb3BlbmF0KGRpciwgbmFtZSwgT19SRFdS KTsKPiA+ID4gPiArCXJldHVybiBmZG9wZW4oZmQsIG1vZGUpOwo+ID4gPiA+ICt9Cj4gPiA+ID4g Kwo+ID4gPiA+ICtzdGF0aWMgYm9vbCBnZXRfZHBfZHNjX3N1cHBvcnQoY2hhciAqdGVzdF9jb25u ZWN0b3JfbmFtZSkKPiA+ID4gPiArewo+ID4gPiA+ICsJaW50IGRpciA9IGlndF9kZWJ1Z2ZzX2Rp cihkcm1fZmQpOwo+ID4gPiA+ICsJRklMRSAqZHNjX3N1cHBvcnRfZnAgPSBOVUxMOwo+ID4gPiA+ ICsJY2hhciAqbGluZSA9IE5VTEw7Cj4gPiA+ID4gKwlzaXplX3QgbGluZV9zaXplID0gMDsKPiA+ ID4gPiArCWNoYXIgYnVmWzEyOF0gPSB7MH0sIHN1cHBvcnRlZF9zdHJbNV0sIGVuYWJsZWRfc3Ry WzVdOwo+ID4gPiA+ICsJYm9vbCBzdXBwb3J0ZWQgPSBmYWxzZTsKPiA+ID4gPiArCj4gPiA+ID4g KwlzdHJjcHkoYnVmLCB0ZXN0X2Nvbm5lY3Rvcl9uYW1lKTsKPiA+ID4gPiArCXN0cmNhdChidWYs ICIvaTkxNV9kc2Nfc3VwcG9ydCIpOwo+ID4gPiA+ICsJZHNjX3N1cHBvcnRfZnAgPSBmb3BlbmF0 KGRpciwgYnVmLCAiciIpOwo+ID4gPiA+ICsJaWd0X3JlcXVpcmUoZHNjX3N1cHBvcnRfZnApOwo+ ID4gPiA+ICsKPiA+ID4gPiArCXdoaWxlIChnZXRsaW5lKCZsaW5lLCAmbGluZV9zaXplLCBkc2Nf c3VwcG9ydF9mcCkgPiAwKSB7Cj4gPiA+IAo+ID4gPiBUaGlzIGxvb3AgbG9va3Mgd2FzdGVmdWwu Cj4gPiA+IAo+ID4gPiA+ICsJCWNoYXIgKnN1cHBvcnQsICplbmFibGVkOwo+ID4gPiA+ICsKPiA+ ID4gPiArCQllbmFibGVkID0gc3Ryc3RyKGxpbmUsICJFbmFibGVkOiAiKTsKPiA+ID4gPiArCQlp Z3RfYXNzZXJ0X2VxKHNzY2FuZihlbmFibGVkLCAiRW5hYmxlZDogJXMiLAo+ID4gPiA+IGVuYWJs ZWRfc3RyKSwgMSk7Cj4gPiA+ID4gKwkJaWYgKHN0cmNtcChlbmFibGVkX3N0ciwgInllcyIpID09 IDApIHsKPiA+ID4gPiArCQkJaWd0X2luZm8oIkRTQyBpcyBlbmFibGVkIG9uICVzXG4iLAo+ID4g PiA+IHRlc3RfY29ubmVjdG9yX25hbWUpOwo+ID4gPiA+ICsJCQlzdXBwb3J0ZWQgPSB0cnVlOwo+ ID4gPiAKPiA+ID4gV2hhdCBpcyB0aGUgdXNlIG9mIHRoaXMgY2hlY2s/IElmIGFsbCB0aGF0IHdl IG5lZWQgdG8ga25vdyBpcwo+ID4gPiB3aGV0aGVyIERTQyBpcyBzdXBwb3J0ZWQsIGp1c3QgY2hl Y2sgZm9yICJTdXBwb3J0ZWQ6IHllcyIKPiA+IAo+ID4gV2VsbCB0aGUgaWRlYSB3YXMgdG8ganVz dCBpZ25vcmUgU3VwcG9ydGVkIHZhbHVlIGlmIEVuYWJsZWQgaXMgdHJ1ZQo+ID4gYmVjYXVzZSB0 aGF0IG1lYW5zIGl0IHdhcyBhbHJlYWR5IGVuYWJsZWQgYnkgZGVmYXVsdC4KPiA+IEJ1dCBvdXIg ZGlzY3Vzc2lvbiBtYWtlcyBtZSB0aGluayB0aGF0IGlmIHdlIGFyZSBqdXN0IHZhbGlkYXRpbmcg dGhlCj4gPiBjb25maWd1cmF0aW9uLCBJIGNhbiBqdXN0IHJlYWQgU3VwcG9ydGVkIGhlcmUgYW5k IGZvcmNlCj4gPiBEU0MgYW5kIHRoZW4gYWZ0ZXIgbW9kZXNldCwgcmVhZCBiYWNrIHRoZSB2YWx1 ZSBvZiBFbmFibGVkIHRvIGNoZWNrCj4gPiB0aGF0IGl0IHdhcyBlbmFibGVkLiBCdXQgZXZlbiBp biB0aGUgY2FzZSB3aGVyZSBpdCBjYW5ub3QKPiA+IGJlIGVuYWJsZWQsIHRoYXRzIGp1c3QgYmVj YXVzZSBvdXIgcGxhdGZvcm0gcHJvYmFibHkgZG9lc250IHN1cHBvcnQKPiA+IHRoZSBjb25maWd1 cmF0aW9uLiBTbyBpdHMgbm90IGEgdGVzdCBmYWlsIHJlYWxseS4KPiA+IAo+ID4gTWF5IGJlIHRo ZSByZWFsIHBhc3MgZmFpbCB0ZXN0IHdvdWxkIGJlIGlmIGl0cyBlbmFibGVkID09IHllcywgdGhl bgo+ID4gZGlzYWJsZSBEU0MgYW5kIGVuYWJsZSBhZ2FpbiBhbmQgY2hlY2sgaWYgaXQgaXMgZW5h YmxlZAo+ID4gYW5kIHRlc3QgdGhpcyBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zLgo+ID4gV2hhdCBk byB5b3UgdGhpbms/Cj4gVGhhdCBkb2Vzbid0IHRlbGwgdXMgbXVjaC4KPiAKPiBJZiB3ZSB3YW50 IHRvIGp1c3QgdmFsaWRhdGUgZW5jb2Rlci0+Y29tcHV0ZV9jb25maWcoKSwgSSdkIHJlY29tbWVu ZAo+IGVudW1lcmF0aW5nIGEgc3VidGVzdCBmb3IgZWFjaCB2YWxpZCBicHAgKGJhc2VkIG9uIGJz cGVjKSBhbmQgZmFpbGluZwo+IHRoZSB0ZXN0IGlmIHRoZSBkcml2ZXIgZG9lcyBub3QgZW5hYmxl IERTQyB3aGVuIGl0IGlzIGV4cGVjdGVkIHRvLgo+IFJlbGF0ZWQgY29tbWVudCBiZWxvdy4KClll cyB0aGF0cyB3aHkgdGhpcyBiYXNpYyBzdWJ0ZXN0IGlzIHZhbGlkYXRpbmcgdGhlIGJwYyA9IDgg b3IgZGVwdGggPSAyNC4KQW51c2hhIGlzIHdvcmtpbmcgb24gYWRkaW5nIGEgZGVidWdmcyBub2Rl IHRoYXQgZXhwb3NlcyBzdXBwb3J0ZWQgY29sb3IgZGVwdGhzLgpUaGVuIHdlIGFkZCBhIHRlc3Qg Zm9yIGVhY2ggc3VwcG9ydGVkIGNvbG9yIGRlcHRoLgoKPiAKPiBCdXQsIHdlIHNob3VsZCByZWFs bHkgZ2V0IGEgcGFuZWwgaW4gQ0kgdGhhdCBuZWVkcyBEU0MgZm9yIHRoZQo+IHByZWZlcnJlZCBt b2RlIGFuZCBkZW1vbnN0cmF0ZSB0aGF0IHRoZSBtb2RlIHdvcmtzIGJlY2F1c2UgRFNDIHdhcwo+ IGVuYWJsZWQuCgpZZXMgdGhlIHBhbmVsIEkgYW0gdXNpbmcgZm9yIHRlc3RpbmcgYW5kIHdoaWNo IEkgYmVsaWV2ZSBpcyB0aGUgc2FtZSB0aGF0IHdhcwpzaGlwcGVkIHRvIENJIG5lZWRzIERTQyB0 byB3b3JrIHNpbmNlIGl0cyBwZXJmZXJyZWQgbW9kZSBpcyAxOTIwIHggMTA4MCBAOTBIeiBhbmQg CkkganVzdCBjaGVja2VkIHRoYXQgaXQgbmVlZHMgRFNDIGJ5IGRlZmF1bHQgdG8gb3V0cHV0IGEg ZGlzcGxheSwgd2l0aG91dCBEU0MgaXQgd2lsbCByZWplY3QgdGhlIG1vZGUgYW5kCmdpdmUgYSBt b2Rlc2V0IGZhaWx1cmUuClNvIG5vdyBpbiB0aGlzIGNhc2UsIHRoZSBwYXNzIGZhaWwgd291bGQg YmUgZGlzYWJsZSAtPiBlbmFibGUtPiByZWFkIEVuYWJsZWQgYml0IGFuZCBpZiB5ZXMgdGhlbiB0 ZXN0IHBhc3NlZCBlbHNlIGZhaWwuCgpNYW5hc2kKCj4gCj4gPiAKPiA+ID4gCj4gPiA+ID4gKwkJ CWJyZWFrOwo+ID4gPiA+ICsJCX0gZWxzZSB7Cj4gPiA+ID4gKwkJCWdldGxpbmUoJmxpbmUsICZs aW5lX3NpemUsIGRzY19zdXBwb3J0X2ZwKTsKPiA+ID4gPiArCQkJc3VwcG9ydCA9IHN0cnN0cihs aW5lLCAiU3VwcG9ydGVkOiAiKTsKPiA+ID4gPiArCQlpZ3RfYXNzZXJ0X2VxKHNzY2FuZihzdXBw b3J0LCAiU3VwcG9ydGVkOiAlcyIsCj4gPiA+ID4gc3VwcG9ydGVkX3N0ciksIDEpOwo+ID4gPiA+ ICsJCWlmIChzdHJjbXAoc3VwcG9ydGVkX3N0ciwgInllcyIpID09IDApCj4gPiA+ID4gKwkJCXN1 cHBvcnRlZCA9IHRydWU7Cj4gPiA+ID4gKwkJZWxzZSBpZiAoc3RyY21wKHN1cHBvcnRlZF9zdHIs ICJubyIpID09IDApCj4gPiA+ID4gKwkJCXN1cHBvcnRlZCA9IGZhbHNlOwo+ID4gPiAKPiA+ID4g U2tpcCB0aGUgdGVzdCBoZXJlLgo+ID4gPiA+ICsJCWVsc2UKPiA+ID4gPiArCQkJaWd0X2ZhaWxf b25fZih0cnVlLCAiVW5rbm93biBEU0Mgc3VwcG9ydGVkCj4gPiA+ID4gc3RhdHVzICclcydcbiIs Cj4gPiA+ID4gKwkJCQkgICAgICBzdXBwb3J0ZWRfc3RyKTsKPiA+ID4gPiArCQlicmVhazsKPiA+ ID4gPiArCQl9Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJZnJlZShsaW5lKTsKPiA+ ID4gCj4gPiA+IFlvdSBjb3VsZCBzaW1wbGlmeSB0aGUgbG9naWMgaW4gdGhpcyBmdW5jdGlvbiB3 aXRoCj4gPiA+IGlndF9kZWJ1Z2ZzX3JlYWQoKSBhbmQgc3Ryc3RyKCkKPiA+ID4gVGhlcmUgYXJl IGV4YW1wbGVzIGluIGttc19wc3IuYywga21zX2ZidF9mYmNvbiBldGMuCj4gPiAKPiA+IFllcyB3 aWxsIGRvIHRoYXQsIHRoYW5rcyBmb3IgcG9pbnRpbmcgb3V0Lgo+ID4gCj4gPiA+IAo+ID4gPiA+ ICsJZmNsb3NlKGRzY19zdXBwb3J0X2ZwKTsKPiA+ID4gCj4gPiA+IE9wZW4gdGhlIGZpbGUgb25j ZSwgY2FjaGUgdGhlIGZkIGFuZCBjbG9zZSBpdCB3aGVuIHlvdSBhcmUgZG9uZQo+ID4gPiB3aXRo IHRoZSB0ZXN0Lgo+ID4gPiAKPiA+IAo+ID4gT2sKPiA+ICAKPiA+ID4gPiArCj4gPiA+ID4gKwly ZXR1cm4gc3VwcG9ydGVkOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgdm9p ZCBzZXRfZHBfZHNjX2VuYWJsZShib29sIGVuYWJsZSwgY2hhcgo+ID4gPiA+ICp0ZXN0X2Nvbm5l Y3Rvcl9uYW1lKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlpbnQgZGlyID0gaWd0X2RlYnVnZnNfZGly KGRybV9mZCk7Cj4gPiA+ID4gKwlGSUxFICpkc2NfZW5hYmxlX2ZwID0gTlVMTDsKPiA+ID4gPiAr CWNoYXIgYnVmWzEyOF0gPSB7MH07Cj4gPiA+ID4gKwo+ID4gPiA+ICsJc3RyY3B5KGJ1ZiwgdGVz dF9jb25uZWN0b3JfbmFtZSk7Cj4gPiA+ID4gKwlzdHJjYXQoYnVmLCAiL2k5MTVfZHNjX3N1cHBv cnQiKTsKPiA+ID4gPiArCWRzY19lbmFibGVfZnAgPSBmb3BlbmF0KGRpciwgYnVmLCAidysiKTsK PiA+ID4gPiArCWlndF9yZXF1aXJlKGRzY19lbmFibGVfZnApOwo+ID4gPiA+ICsJcmV3aW5kKGRz Y19lbmFibGVfZnApOwo+ID4gPiAKPiA+ID4gU2hvdWxkIGJlICBhIGxvdCBzaW1wbGVyIHVzaW5n IHN5c2ZzX3dyaXRlKCkuIEFnYWluLCBsaWIvaWd0X3Bzci5jCj4gPiA+IGhhcyBleGFtcGxlcy4K PiA+ID4gCj4gPiA+ID4gKwlpZ3RfaW5mbygiU2V0dGluZyBEU0NfRU5BQkxFIHRvICVzIGZvciAl c1xuIiwgKGVuYWJsZSkgPyAidHJ1ZSIKPiA+ID4gPiA6ICJmYWxzZSIsIHRlc3RfY29ubmVjdG9y X25hbWUpOwo+ID4gPiA+ICsJZnByaW50Zihkc2NfZW5hYmxlX2ZwLCAiJWQiLCBlbmFibGUpOwo+ ID4gPiA+ICsJZmZsdXNoKGRzY19lbmFibGVfZnApOwo+ID4gPiA+ICsJZmNsb3NlKGRzY19lbmFi bGVfZnApOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgdm9pZCBkdW1wX2Nv bm5lY3RvcnNfZmQoaW50IGRybWZkKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlpbnQgaSwgajsKPiA+ ID4gPiArCj4gPiA+ID4gKwlkcm1Nb2RlUmVzICptb2RlX3Jlc291cmNlcyA9IGRybU1vZGVHZXRS ZXNvdXJjZXMoZHJtZmQpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgICBpZiAoIW1vZGVfcmVz b3VyY2VzKSB7Cj4gPiA+ID4gKwkJaWd0X3dhcm4oImRybU1vZGVHZXRSZXNvdXJjZXMgZmFpbGVk OiAlc1xuIiwKPiA+ID4gPiBzdHJlcnJvcihlcnJubykpOwo+ID4gPiA+ICsJCXJldHVybjsKPiA+ ID4gPiArCX0KPiA+ID4gPiArCj4gPiA+ID4gKwlpZ3RfaW5mbygiQ29ubmVjdG9yczpcbiIpOwo+ ID4gPiA+ICsJaWd0X2luZm8oImlkXHRlbmNvZGVyXHRzdGF0dXNcdFx0dHlwZVx0c2l6ZSAobW0p XHRtb2Rlc1xuIik7Cj4gPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbW9kZV9yZXNvdXJjZXMtPmNv dW50X2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gPiA+ICsJCWRybU1vZGVDb25uZWN0b3IgKmNvbm5l Y3RvcjsKPiA+ID4gPiArCj4gPiA+ID4gKwkJY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3Rv ckN1cnJlbnQoZHJtZmQsCj4gPiA+ID4gKwkJCQkJCSAgICAgICBtb2RlX3Jlc291cmNlcy0KPiA+ ID4gPiA+Y29ubmVjdG9yc1tpXSk7Cj4gPiA+ID4gKwkJaWYgKCFjb25uZWN0b3IpIHsKPiA+ID4g PiArCQkJaWd0X3dhcm4oImNvdWxkIG5vdCBnZXQgY29ubmVjdG9yICVpOiAlc1xuIiwKPiA+ID4g PiArCQkJCSBtb2RlX3Jlc291cmNlcy0+Y29ubmVjdG9yc1tpXSwKPiA+ID4gPiBzdHJlcnJvcihl cnJubykpOwo+ID4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gPiArCQl9Cj4gPiA+ID4gKwo+ID4g PiA+ICsJCWlndF9pbmZvKCIlZFx0JWRcdCVzXHQlc1x0JWR4JWRcdFx0JWRcbiIsCj4gPiA+ID4g KwkJCSBjb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCwgY29ubmVjdG9yLQo+ID4gPiA+ID5lbmNvZGVy X2lkLAo+ID4gPiA+ICsJCQkga21zdGVzdF9jb25uZWN0b3Jfc3RhdHVzX3N0cihjb25uZWN0b3It Cj4gPiA+ID4gPmNvbm5lY3Rpb24pLAo+ID4gPiA+ICsJCQkga21zdGVzdF9jb25uZWN0b3JfdHlw ZV9zdHIoY29ubmVjdG9yLQo+ID4gPiA+ID5jb25uZWN0b3JfdHlwZSksCj4gPiA+ID4gKwkJCSBj b25uZWN0b3ItPm1tV2lkdGgsIGNvbm5lY3Rvci0+bW1IZWlnaHQsCj4gPiA+ID4gKwkJCSBjb25u ZWN0b3ItPmNvdW50X21vZGVzKTsKPiA+ID4gPiArCj4gPiA+ID4gKwkJaWYgKCFjb25uZWN0b3It PmNvdW50X21vZGVzKQo+ID4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gPiArCj4gPiA+ID4gKwkJ aWd0X2luZm8oIiAgbW9kZXM6XG4iKTsKPiA+ID4gPiArCQlpZ3RfaW5mbygiICBuYW1lIHJlZnJl c2ggKEh6KSBoZGlzcCBoc3MgaHNlIGh0b3QgdmRpc3AKPiA+ID4gPiAiInZzcyB2c2UgdnRvdCBm bGFncyB0eXBlIGNsb2NrXG4iKTsKPiA+ID4gPiArCQlmb3IgKGogPSAwOyBqIDwgY29ubmVjdG9y LT5jb3VudF9tb2RlczsgaisrKXsKPiA+ID4gPiArCQkJaWd0X2luZm8oIlslZF0iLCBqKTsKPiA+ ID4gPiArCQkJa21zdGVzdF9kdW1wX21vZGUoJmNvbm5lY3Rvci0+bW9kZXNbal0pOwo+ID4gPiA+ ICsJCX0KPiA+ID4gPiArCj4gPiA+ID4gKwkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9y KTsKPiA+ID4gPiArCX0KPiA+ID4gPiArCWlndF9pbmZvKCJcbiIpOwo+ID4gPiA+ICsKPiA+ID4g PiArCWRybU1vZGVGcmVlUmVzb3VyY2VzKG1vZGVfcmVzb3VyY2VzKTsKPiA+ID4gPiArfQo+ID4g PiA+ICsKPiA+ID4gPiArc3RhdGljIHZvaWQgZHVtcF9jcnRjc19mZChpbnQgZHJtZmQpCj4gPiA+ ID4gK3sKPiA+ID4gPiArCWludCBpOwo+ID4gPiA+ICsJZHJtTW9kZVJlcyAqbW9kZV9yZXNvdXJj ZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRybWZkKTsKPiA+ID4gPiArCj4gPiA+ID4gKwlpZ3Rf aW5mbygiQ1JUQ3M6XG4iKTsKPiA+ID4gPiArCWlndF9pbmZvKCJpZFx0ZmJcdHBvc1x0c2l6ZVxu Iik7Cj4gPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbW9kZV9yZXNvdXJjZXMtPmNvdW50X2NydGNz OyBpKyspIHsKPiA+ID4gPiArCQlkcm1Nb2RlQ3J0YyAqY3J0YzsKPiA+ID4gPiArCj4gPiA+ID4g KwkJY3J0YyA9IGRybU1vZGVHZXRDcnRjKGRybWZkLCBtb2RlX3Jlc291cmNlcy0+Y3J0Y3NbaV0p Owo+ID4gPiA+ICsJCWlmICghY3J0Yykgewo+ID4gPiA+ICsJCQlpZ3Rfd2FybigiY291bGQgbm90 IGdldCBjcnRjICVpOiAlc1xuIiwKPiA+ID4gPiArCQkJCSBtb2RlX3Jlc291cmNlcy0+Y3J0Y3Nb aV0sCj4gPiA+ID4gc3RyZXJyb3IoZXJybm8pKTsKPiA+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ ID4gKwkJfQo+ID4gPiA+ICsJCWlndF9pbmZvKCIlZFx0JWRcdCglZCwlZClcdCglZHglZClcbiIs Cj4gPiA+ID4gKwkJCSBjcnRjLT5jcnRjX2lkLCBjcnRjLT5idWZmZXJfaWQsIGNydGMtPngsCj4g PiA+ID4gKwkJCSBjcnRjLT55LCBjcnRjLT53aWR0aCwgY3J0Yy0+aGVpZ2h0KTsKPiA+ID4gPiAr CQlrbXN0ZXN0X2R1bXBfbW9kZSgmY3J0Yy0+bW9kZSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCWRy bU1vZGVGcmVlQ3J0YyhjcnRjKTsKPiA+ID4gPiArCX0KPiA+ID4gPiArCWlndF9pbmZvKCJcbiIp Owo+ID4gPiA+ICsKPiA+ID4gPiArCWRybU1vZGVGcmVlUmVzb3VyY2VzKG1vZGVfcmVzb3VyY2Vz KTsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIHZvaWQgZHVtcF9pbmZvKHZv aWQpCj4gPiA+ID4gK3sKPiA+ID4gPiArCWR1bXBfY29ubmVjdG9yc19mZChkcm1fZmQpOwo+ID4g PiA+ICsJZHVtcF9jcnRjc19mZChkcm1fZmQpOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ ICtzdGF0aWMgaW50Cj4gPiA+ID4gK3NldF9tb2RlKHN0cnVjdCBjb25uZWN0b3IgKmMsIHN0cnVj dCBkc2NfY29uZmlnICp0ZXN0X2NvbmZpZywKPiA+ID4gPiBib29sIHNldF9tb2RlKQo+ID4gPiA+ ICt7Cj4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgZmJfaWQgPSAwOwo+ID4gPiA+ICsJc3RydWN0IGln dF9mYiBmYl9pbmZvOwo+ID4gPiA+ICsJaW50IHJldCA9IDA7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJ aWYgKCFzZXRfbW9kZSkgewo+ID4gPiA+ICsJCXJldCA9IGRybU1vZGVTZXRDcnRjKGRybV9mZCwg Yy0+Y3J0YywgMCwgMCwgMCwKPiA+ID4gPiArCQkJCSAgICAgTlVMTCwgMCwgTlVMTCk7Cj4gPiA+ ID4gKwkJaWYgKHJldCkKPiA+ID4gPiArCQkJaWd0X3dhcm4oIkZhaWxlZCB0byB1bnNldCBtb2Rl Iik7Cj4gPiA+ID4gKwkJcmV0dXJuIHJldDsKPiA+ID4gPiArCX0KPiA+ID4gPiArCj4gPiA+ID4g KwlmYl9pZCA9IGlndF9jcmVhdGVfcGF0dGVybl9mYihkcm1fZmQsIHRlc3RfY29uZmlnLT5tb2Rl X3dpZHRoLAo+ID4gPiA+ICsJCQkJICAgICAgdGVzdF9jb25maWctPm1vZGVfaGVpZ2h0LAo+ID4g PiA+ICsJCQkJICAgICAgaWd0X2JwcF9kZXB0aF90b19kcm1fZm9ybWF0KHRlc3RfCj4gPiA+ID4g Y29uZmlnLT5icHAsCj4gPiA+ID4gKwkJCQkJCQkJICB0ZXN0Xwo+ID4gPiA+IGNvbmZpZy0+ZGVw dGgpLAo+ID4gPiA+ICsJCQkJICAgICAgdGlsaW5nLCAmZmJfaW5mbyk7Cj4gPiA+ID4gKwo+ID4g PiA+ICsJaWd0X2luZm8oIkNSVEMoJXUpOlslZF0iLCBjLT5jcnRjLCAwKTsKPiA+ID4gPiArCWtt c3Rlc3RfZHVtcF9tb2RlKCZjLT5tb2RlKTsKPiA+ID4gPiArCWRybU1vZGVTZXRDcnRjKGRybV9m ZCwgYy0+Y3J0YywgLTEsIDAsIDAsIE5VTEwsIDAsIE5VTEwpOwo+ID4gPiA+ICsJcmV0ID0gZHJt TW9kZVNldENydGMoZHJtX2ZkLCBjLT5jcnRjLCBmYl9pZCwgMCwgMCwKPiA+ID4gPiArCQkJICAg ICAmYy0+aWQsIDEsICZjLT5tb2RlKTsKPiA+ID4gPiArCXNsZWVwKDUpOwo+ID4gPiAKPiA+ID4g V2h5PyBJZiB0aGlzIGZvciBtYW51YWwgdGVzdGluZywgcGxlYXNlIHVzZSBtYW51YWwoKS4gVGhl cmUgYXJlCj4gPiA+IHBsZW50eSBvZiBleGFtcGxlcy4KPiA+IAo+ID4gTWFudWFsIHRlc3Rpbmcg Zm9yIHZpc3VhbGx5IHRlc3RpbmcgcmVzdWx0cyBvZiBjb21wcmVzc2lvbiBzaW5jZSB3ZQo+ID4g ZG9udCBoYXZlIGFueSBDUkMgd2F5cyB0byBjaGVjayB0aGlzLgo+ID4gQnV0IEkgd2lsbCBwcm9i YWJseSByZW1vdmUgdGhpcyBzaW5jZSBpdCB3YXMgZm9yIG15IGRlYnVnIHB1cnBvc2VzCj4gPiBh bmQgY29kZSB2YWxpZGF0aW9uLgo+ID4gCj4gPiA+IAo+ID4gPiA+ICsJaWYgKHJldCA8IDApIHsK PiA+ID4gPiArCQlpZ3Rfd2FybigiRmFpbGVkIHRvIHNldCBtb2RlICglZHglZEAlZEh6KTogJXNc biIsCj4gPiA+ID4gKwkJCSB0ZXN0X2NvbmZpZy0+bW9kZV93aWR0aCwgdGVzdF9jb25maWctCj4g PiA+ID4gPm1vZGVfaGVpZ2h0LAo+ID4gPiA+ICsJCQkgYy0+bW9kZS52cmVmcmVzaCwgc3RyZXJy b3IoZXJybm8pKTsKPiA+ID4gCj4gPiA+IFRoaXMgY2FuJ3QgYmUgYSB3YXJuaW5nLCB0aGUgdGVz dCBzaG91bGQgZmFpbCBpZiB0aGUgbW9kZSBjYW4ndCBiZQo+ID4gPiBzZXQuCj4gPiA+IAo+ID4g PiA+ICsJCWlndF9yZW1vdmVfZmIoZHJtX2ZkLCAmZmJfaW5mbyk7Cj4gPiA+IAo+ID4gPiBSZWFk IGJhY2sgZGVidWdmcyB0byBjaGVjayB3aGV0aGVyIERTQyB3YXMgZW5hYmxlZD8gSSdtIGNhbid0 IHRlbGwKPiA+ID4gd2hhdCBpcyBiZWluZyB0ZXN0ZWQgaGVyZS4KPiA+IAo+ID4gU3VyZSBjYW4g YWRkIHRoaXMgZm9yIHRoZSB0ZXN0IHN0cmF0ZWd5IG9mIGRpc2FibGluZyBhbmQgdGhlbgo+ID4g ZW5hYmxpbmcsIGp1c3QgdG8gdmFsaWRhdGUgdGhlIGRyaXZlci4KPiA+IAo+ID4gPiA+ICsKPiA+ ID4gPiArCX0KPiA+ID4gPiArCj4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiA+ICt9Cj4gPiA+ ID4gKwo+ID4gPiA+ICsKPiA+ID4gPiArLyoKPiA+ID4gPiArICogUmUtcHJvYmUgY29ubmVjdG9y cyBhbmQgZG8gYSBtb2Rlc2V0IHdpdGggYW5kIHdpaG91dCBEU0MKPiA+ID4gPiArICoKPiA+ID4g PiArICogUmV0dXJuczoKPiA+ID4gPiArICogMDogT24gU3VjY2Vzcwo+ID4gPiA+ICsgKiAtMTog T24gZmFpbHVyZQo+ID4gPiAKPiA+ID4gaW50IGlzIHBvaW50bGVzcywganVzdCB1c2UgYSBib29s IHJldHVybiBpZiB0aGUgZnVuY3Rpb24gZG9lc24ndAo+ID4gPiBtYWtlIHVzZSBvZiBlcnJvciBj b2Rlcy4KPiA+ID4gCj4gPiA+ID4gKyAqLwo+ID4gPiA+ICtzdGF0aWMgaW50IHVwZGF0ZV9kaXNw bGF5KHN0cnVjdCBkc2NfY29uZmlnICp0ZXN0X2NvbmZpZykKPiA+ID4gPiArewo+ID4gPiA+ICsJ c3RydWN0IGNvbm5lY3RvciAqY29ubmVjdG9yczsKPiA+ID4gPiArCXN0cnVjdCBrbXN0ZXN0X2Nv bm5lY3Rvcl9jb25maWcgY29uZmlnOwo+ID4gPiA+ICsJaW50IGNudCwgY29ubl9jbnQgPSAwLCBy ZXQgPSAwLCBlZHBfY250ID0gMCwgZHBfY250ID0gMDsKPiA+ID4gPiArCXVuc2lnbmVkIGxvbmcg Y3J0Y19pZHhfbWFzayA9IC0xVUw7Cj4gPiA+ID4gKwljaGFyIGNvbm5fYnVmWzEyOF0gPSB7MH07 Cj4gPiA+ID4gKwo+ID4gPiA+ICsJcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1f ZmQpOwo+ID4gPiA+ICsJaWYgKCFyZXNvdXJjZXMpIHsKPiA+ID4gPiArCQlpZ3Rfd2FybigiZHJt TW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLAo+ID4gPiA+IHN0cmVycm9yKGVycm5vKSk7 Cj4gPiA+ID4gKwkJcmV0dXJuIC0xOwo+ID4gPiA+ICsJfQo+ID4gPiAKPiA+ID4gV2h5IGhhbmQg cm9sbCBJT0NUTHMgd2hlbiB0aGUgSUdUIGxpYnJhcnkgcHJvdmlkZXMgYSBsb3Qgb2YgdGhlc2UK PiA+ID4gZnVuY3Rpb25hbGl0eT8KPiA+IAo+ID4gSSB3aWxsIHRha2UgYSBsb29rIGF0IHRoZSBs aWJyYXJ5IGZ1bmN0aW9ucywgYnV0IHNpbmNlIHRoZSBEU0MKPiA+IGVuYWJsaW5nIGxvZ2ljIGlz IGluc2VydGVkIHBlciBjb25uZWN0b3IKPiA+IGl0IHdhcyBoYXJkIHRvIHVzZSBpZ3QgbGliIGZ1 bmN0aW9ucy4KPiA+IAo+ID4gPiA+ICsKPiA+ID4gPiArCWNvbm5lY3RvcnMgPSBjYWxsb2MocmVz b3VyY2VzLT5jb3VudF9jb25uZWN0b3JzLAo+ID4gPiA+ICsJCQkgICAgc2l6ZW9mKHN0cnVjdCBj b25uZWN0b3IpKTsKPiA+ID4gPiArCWlmICghY29ubmVjdG9ycykKPiA+ID4gPiArCQlyZXR1cm4g LTE7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJLyogRmluZCBhbnkgY29ubmVjdGVkIGRpc3BsYXlzICov Cj4gPiA+ID4gKwlmb3IgKGNudCA9IDA7IGNudCA8IHJlc291cmNlcy0+Y291bnRfY29ubmVjdG9y czsgY250KyspIHsKPiBTZXBhcmF0ZSBzdWItdGVzdCBmb3IgZWFjaCBjb25uZWN0b3IsIHdlIHdh bnQgdG8ga25vdyB3aGljaCBvbmUgZmFpbHMuCj4gCj4gPiA+ID4gKwkJc3RydWN0IGNvbm5lY3Rv ciAqYyA9ICZjb25uZWN0b3JzW2NudF07Cj4gPiA+ID4gKwkJYy0+aWQgPSByZXNvdXJjZXMtPmNv bm5lY3RvcnNbY250XTsKPiA+ID4gPiArCQlpZigha21zdGVzdF9nZXRfY29ubmVjdG9yX2NvbmZp Zyhkcm1fZmQsIGMtPmlkLAo+ID4gPiA+IGNydGNfaWR4X21hc2ssCj4gPiA+ID4gKwkJCQkJCSZj b25maWcpKSB7Cj4gPiA+ID4gKwkJCWMtPm1vZGVfdmFsaWQgPSAwOwo+ID4gPiA+ICsJCQljb250 aW51ZTsKPiA+ID4gPiArCQl9Cj4gPiA+ID4gKwkJYy0+Y29ubmVjdG9yID0gY29uZmlnLmNvbm5l Y3RvcjsKPiA+ID4gPiArCQljLT5lbmNvZGVyID0gY29uZmlnLmVuY29kZXI7Cj4gPiA+ID4gKwkJ Yy0+bW9kZSA9IGNvbmZpZy5kZWZhdWx0X21vZGU7Cj4gPiA+ID4gKwkJYy0+Y3J0YyA9IGNvbmZp Zy5jcnRjLT5jcnRjX2lkOwo+ID4gPiA+ICsJCWMtPnBpcGUgPSBjb25maWcucGlwZTsKPiA+ID4g PiArCQljLT5tb2RlX3ZhbGlkID0gMTsKPiA+ID4gPiArCj4gPiA+ID4gKwkJaWYgKGMtPmNvbm5l Y3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0KPiA+ID4gPiBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxh eVBvcnQgfHwKPiA+ID4gPiArCQkgICAgYy0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PQo+ ID4gPiA+IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApIHsKPiA+ID4gPiArCj4gPiA+ID4gKwkJCWlm IChjLT5jb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09Cj4gPiA+ID4gRFJNX01PREVfQ09OTkVD VE9SX2VEUCkKPiA+ID4gPiArCQkJCWNvbm5fY250ID0gKysgZWRwX2NudDsKPiA+ID4gPiArCQkJ ZWxzZQo+ID4gPiA+ICsJCQkJY29ubl9jbnQgPSArKyBkcF9jbnQ7Cj4gPiA+ID4gKwkJCWlmIChj LT5jb25uZWN0b3ItPmNvbm5lY3Rpb24gPT0KPiA+ID4gPiBEUk1fTU9ERV9DT05ORUNURUQpIHsK PiA+ID4gPiArCQkJCXNwcmludGYoY29ubl9idWYsICIlcy0lZCIsCj4gPiA+ID4gKwkJCQkJa21z dGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoYy0KPiA+ID4gPiA+Y29ubmVjdG9yLT5jb25uZWN0b3Jf dHlwZSksCj4gPiA+ID4gKwkJCQkJY29ubl9jbnQpOwo+ID4gPiA+ICsJCQkJdGVzdF9jb25maWct PmRzY19zdXBwb3J0ZWQgPQo+ID4gPiA+ICsJCQkJCWdldF9kcF9kc2Nfc3VwcG9ydChjb25uX2J1 Zik7Cj4gPiA+ID4gKwkJCQlpZiAoIXN0cmNtcCh0ZXN0X2NvbmZpZy0+dGVzdF9uYW1lLAo+ID4g PiA+ICsJCQkJCSAgICAiZm9yY2VfZHNjX2VuYWJsZV9iYXNpYyIpKQo+ID4gPiA+IHsKPiA+ID4g Cj4gPiA+IEhtbSwgdGhlcmUgaXMganVzdCBvbmUgc3VidGVzdCwgd2hhdCBlbHNlIGNvdWxkIHRo aXMgYmU/Cj4gPiA+IAo+ID4gPiAKPiA+ID4gPiArCQkJCQlpZiAodGVzdF9jb25maWctPmRzY19z dXBwb3J0ZWQpIAo+ID4gPiA+IHsKPiA+ID4gPiArCQkJCQkJaWd0X2luZm8gKCJEU0MgaXMKPiA+ ID4gPiBzdXBwb3J0ZWQgb24gJXNcbiIsCj4gPiA+ID4gKwkJCQkJCQkgIGNvbm5fYnVmKTsKPiA+ ID4gPiArCQkJCQkJdGVzdF9jb25maWctPm1vZGVfd2lkdGggCj4gPiA+ID4gPSBjLT5tb2RlLmhk aXNwbGF5Owo+ID4gPiA+ICsJCQkJCQl0ZXN0X2NvbmZpZy0KPiA+ID4gPiA+bW9kZV9oZWlnaHQg PSBjLT5tb2RlLnZkaXNwbGF5Owo+ID4gPiA+ICsJCQkJCQl0ZXN0X2NvbmZpZy0+YnBwID0gMzI7 Cj4gPiA+ID4gKwkJCQkJCXRlc3RfY29uZmlnLT5kZXB0aCA9Cj4gPiA+ID4gMjQ7Cj4gCj4gQXJl IHRoZXJlIG90aGVyIHN1Y2ggdGVzdCBjb25maWd1cmF0aW9ucyBmb3Igd2hpY2ggdGhlIGtlcm5l bCBpcwo+IGV4cGVjdGVkIHRvIGVuYWJsZSBEU0M/IElmIHllcywgZ2VuZXJhdGUgYSBzdWJ0ZXN0 IGZvciBlYWNoIHZhbGlkCj4gY29tYmluYXRpb24uCj4gCj4gPiA+ID4gKwkJCQkJCXNldF9kcF9k c2NfZW5hYmxlKHRlc3RfCj4gPiA+ID4gY29uZmlnLT5kc2NfZW5hYmxlLAo+ID4gPiA+ICsJCQkJ CQkJICBjb25uX2J1Zik7Cj4gPiA+ID4gKwkJCQkJCXJldCA9IHNldF9tb2RlKGMsCj4gPiA+ID4g dGVzdF9jb25maWcsCj4gPiA+ID4gKwkJCQkJCQkgICAgICAgdHJ1ZSk7Cj4gPiA+IAo+ID4gPiBy ZXQgZ2V0cyBvdmVyd3JpdHRlbiBpbiB0aGUgbmV4dCBsb29wLCBpZiBzZXRfbW9kZSBmYWlscywg dGhlbiB0aGUKPiA+ID4gdGVzdCBzaG91bGQgdG9vLgo+ID4gPiAKPiA+ID4gPiArCQkJCQl9IGVs c2Ugewo+ID4gPiAKPiA+ID4gc2tpcCBpZiB0aGUgcGFuZWwgZG9lcyBub3Qgc3VwcG9ydCBEU0Mg IGFuZCBkbyBpdCBpbnNpZGUgdGhlCj4gPiA+IHN1cHBvcnQgY2hlY2sgaGVscGVyLgo+ID4gPiAK PiA+ID4gPiArCQkJCQkJaWd0X2luZm8gKCJEU0MgaXMgbm90Cj4gPiA+ID4gc3VwcG9ydGVkIG9u ICVzXG4iLAo+ID4gPiA+ICsJCQkJCQkJICBjb25uX2J1Zik7Cj4gPiA+ID4gKwkJCQkJfQo+ID4g PiA+ICsJCQkJfQo+ID4gPiA+ICsJCQkJY3J0Y19pZHhfbWFzayAmPSB+KDEgPDwgYy0+cGlwZSk7 Cj4gPiA+ID4gKwkJCX0KPiA+ID4gPiArCQl9Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ ICsJZnJlZShjb25uZWN0b3JzKTsKPiA+ID4gPiArCWRybU1vZGVGcmVlUmVzb3VyY2VzKHJlc291 cmNlcyk7Cj4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ ICtzdGF0aWMgaW50IG9wdF9oYW5kbGVyKGludCBvcHQsIGludCBvcHRfaW5kZXgsIHZvaWQgKm9w dF9kdW1wKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlib29sICpkdW1wID0gb3B0X2R1bXA7Cj4gPiA+ ID4gKwo+ID4gPiA+ICsJc3dpdGNoIChvcHQpIHsKPiA+ID4gPiArCWNhc2UgJ2knOgo+ID4gPiA+ ICsJCSpkdW1wID0gdHJ1ZTsKPiA+ID4gCj4gPiA+IERvbid0IHNlZSBtdWNoIHBvaW50IGFkZGlu ZyBhbiBvcHRpb24sICBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZHVtcAo+ID4gPiB0aGUgIGZ1bGwg bW9kZSwganVzdCB1c2UgaWd0X2RlYnVnKCkKPiA+ID4gYW5kIHJ1biB0aGUgdGVzdCB3aXRoIC0t ZGVidWcuCj4gPiAKPiA+IEhtbSBvayB3aWxsIHRlc3Qgd2hhdCAtLWRlYnVnIGR1bXBzIGFuZCBp ZiB0aGF0cyBlbm91Z2guCj4gPiAKPiA+ID4gCj4gPiA+ID4gKwkJYnJlYWs7Cj4gPiA+ID4gKwlk ZWZhdWx0Ogo+ID4gPiA+ICsJCWlndF9hc3NlcnQoMCk7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ ID4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gPiA+IAo+ID4gPiBSZW1vdmUgZHVtcCBhbmQgc3dp dGNoIHRvICBpZ3RfbWFpbgo+ID4gPiA+ICt7Cj4gPiA+ID4gKwljb25zdCBjaGFyICpoZWxwX3N0 ciA9Cj4gPiA+ID4gKwkJIiAgLS1pbmZvXHRcdER1bXAgSW5mb3JtYXRpb24gYWJvdXQgY29ubmVj dG9ycy4gKHN0aWxsCj4gPiA+ID4gbmVlZHMgRFJNIGFjY2VzcylcbiI7Cj4gPiA+ID4gKwlzdGF0 aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKPiA+ID4gPiArCQl7ImluZm8iLCAw LCAwLCAnaSd9LAo+ID4gPiA+ICsJCXswLCAwLCAwLCAwfQo+ID4gPiA+ICsJfTsKPiA+ID4gPiAr CWludCByZXQgPSAwOwo+ID4gPiA+ICsJc3RydWN0IGRzY19jb25maWcgdGVzdF9jb25maWc7Cj4g PiA+ID4gKwlib29sIG9wdF9kdW1wID0gZmFsc2U7Cj4gPiA+ID4gKwlpZ3Rfc3VidGVzdF9pbml0 X3BhcnNlX29wdHMoJmFyZ2MsIGFyZ3YsICIiLCBsb25nX29wdGlvbnMsCj4gPiA+ID4gaGVscF9z dHIsCj4gPiA+ID4gKwkJCQkgICAgb3B0X2hhbmRsZXIsICZvcHRfZHVtcCk7Cj4gPiA+IAo+ID4g PiBUaGlzIHdvbid0IGJlIG5lZWRlZCBlaXRoZXIuCj4gPiA+IAo+ID4gPiA+ICsKPiA+ID4gPiAr CWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKPiA+ID4gPiArCj4gPiA+ID4gKwlpZ3RfZml4dHVy ZSB7Cj4gPiA+ID4gKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwo+ID4gPiA+ICsJ CWRybV9mZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfQU5ZKTsKPiA+ID4gCj4gPiA+IE1pc3Np bmcgaWd0X2Rpc3BsYXlfcmVxdWlyZSgpCj4gPiA+IAo+ID4gPiA+ICsJCWlmIChvcHRfZHVtcCkK PiA+ID4gPiArCQkJZHVtcF9pbmZvKCk7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJ aWd0X3N1YnRlc3QoImZvcmNlX2RzY19lbmFibGVfYmFzaWMiKSB7Cj4gPiA+ID4gKwkJc3RyY3B5 KHRlc3RfY29uZmlnLnRlc3RfbmFtZSwiZm9yY2VfZHNjX2VuYWJsZV9iYXNpYyIpOwo+ID4gPiAK PiA+ID4gV2h5PyAKPiA+IAo+ID4gVGhpcyBpcyB0byBwYXNzIHRoZSB0ZXN0IG5hbWUsIG1vcmUg dGVzdHMgd2lsbCBiZSBhZGRlZCB3aXRoIGRpZmYKPiA+IG5hbWVzLgo+ID4gCj4gTGV0J3Mgbm90 IGFkZCB0aGluZ3MgdGhhdCBhcmUgbm90IG5lZWRlZCBub3cuIEFsc28sIHBsZWFzZSB1c2UgZW51 bXMKPiBhbmQvb3IgYm9vbGVhbiBmbGFncyB0byBzZXR1cCB0aGUgdGVzdCBjb25maWd1cmF0aW9u LiBUaGF0IGlzIHdoYXQgSUdUcwo+IHR5cGljYWxseSBkbywgcGFzc2luZyBhIHN0cmluZyBhbmQg Y29tcGFyaW5nIGlzbid0IGVmZmljaWVudC4KPiAKPiAKPiA+IE1hbmFzaQo+ID4gCj4gPiAKPiA+ ID4gPiArCQlyZXQgPSB1cGRhdGVfZGlzcGxheSgmdGVzdF9jb25maWcpOwo+ID4gPiA+ICsJCWln dF9hc3NlcnRfZXEocmV0LCAwKTsKPiA+ID4gPiArCX0KPiA+ID4gPiArCj4gPiA+IAo+ID4gPiBU aGUgdGVzdCBkb2Vzbid0IG1ha2UgdXNlIG9mIGRpc3BsYXlfaW5pdCgpIGFuZCBkaXNwbGF5X2Zp bmkoKQo+ID4gPiBsaWtlICBvdGhlciBrbXMgdGVzdHMgZG8sIHdoYXQgaXMgdGhlIHJlYXNvbj8K PiA+ID4gPiArCWNsb3NlKGRybV9mZCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJaWd0X2Fzc2VydF9l cShyZXQsIDApOwo+ID4gPiA+ICsKPiA+ID4gPiArCWlndF9pbmZvKCJEU0MgdGVzdGluZyBkb25l XG4iKTsKPiA+ID4gPiArCWlndF9leGl0KCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICt9Cj4gPiA+ID4g Cj4gPiA+IAo+ID4gPiAKPiA+ID4gCj4gPiA+IAo+IApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2lndC1kZXYK