From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0FA916E14A for ; Thu, 29 Nov 2018 21:29:28 +0000 (UTC) Received: by mail-lj1-x242.google.com with SMTP id t9-v6so3084018ljh.6 for ; Thu, 29 Nov 2018 13:29:27 -0800 (PST) References: <1540558693-28252-1-git-send-email-juhapekka.heikkila@gmail.com> <1542628796-25990-1-git-send-email-juhapekka.heikkila@gmail.com> <948c6ddb-675d-c104-5b4c-cc3e304f6f6f@intel.com> From: =?UTF-8?Q?Juha-Pekka_Heikkil=c3=a4?= Message-ID: <96af7e64-deca-b7ae-c1c3-e23733354489@gmail.com> Date: Thu, 29 Nov 2018 23:29:21 +0200 MIME-Version: 1.0 In-Reply-To: <948c6ddb-675d-c104-5b4c-cc3e304f6f6f@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Nautiyal, Ankit K" , igt-dev@lists.freedesktop.org List-ID: CgpOYXV0aXlhbCwgQW5raXQgSyBraXJqb2l0dGkgMjIuMTEuMjAxOCBrbG8gOS4wNDoKPiBIaSBK dWhhLVBla2thLAo+IAo+IFRoYW5rcyBmb3IgY29uc2lkZXJpbmcgdGhlIGVhcmxpZXIgc3VnZ2Vz dGlvbnMuIFRoZSBzb2x1dGlvbiBsb29rcyAKPiBwcmV0dHkgZ29vZCwgbmljZWx5IGF2b2lkcyBo YXJkLWNvZGluZyBvZiBmaXhlZCB3aWR0aCBhbmQgaGVpZ2h0IGFuZCAKPiBtYWtpbmcgaXQgZGVw ZW5kZW50IG9uIHRoZSByZXNvbHV0aW9uLgo+IAo+IEkgYWdyZWUgd2l0aCB0aGUgdGVzdCBhcyBh IHdob2xlLiBIb3dldmVyIEkgdGhpbmsgaXQgcmVxdWlyZXMgYSBzbGlnaHQgCj4gY2hhbmdlIGlu IGNhc2Ugb2YgOTAvMjcwIHJvdGF0aW9uIGZvciBkZXRlcm1pbmluZyB0aGUgeCx5IGZvciByaWdo dCBhbmQgCj4gYm90dG9tIHJlY3RhbmdsZXMuCj4gCj4gVGhlIHN1Z2dlc3RlZCBjaGFuZ2UgY2Fu IGF2b2lkIGNyb3BwZWQgcmVjdGFuZ2xlcywgZm9yIGZldyByZXNvbHV0aW9ucy4KPiAKPiBBbHNv IG1pbnV0ZSBzdHlsaW5nIGlzc3VlcyBpbiBhIGNvdXBsZSBvZiBwbGFjZXMuCj4gCj4gUGxlYXNl IGZpbmQgbXkgc3VnZ2VzdGlvbnMgaW5saW5lOgo+IAo+IAo+IE9uIDExLzE5LzIwMTggNToyOSBQ TSwgSnVoYS1QZWtrYSBIZWlra2lsYSB3cm90ZToKPj4gQWRkIHRocmVlIG5ldyB0ZXN0cyB3aGlj aCB0cnkgcHJpbWFyeSBhbmQgc3ByaXRlIHBsYW5lcwo+PiBuZXh0IHRvIGVhY2ggb3RoZXIgd2l0 aCBkaWZmZXJlbnQgcGxhbmUgZm9ybWF0cywgcm90YXRpb25zCj4+IGFuZCB0aWxpbmcgbW9kZXMu Cj4+Cj4+IG11bHRpcGxhbmUtcm90YXRpb24gc3VidGVzdCBydW4gdGVzdCB0aHJvdWdoIHdpdGgg Ym90aCBwbGFuZXMKPj4gZnVsbHkgdmlzaWJsZS4KPj4KPj4gbXVsdGlwbGFuZS1yb3RhdGlvbi1j cm9wcGluZy10b3Agd2lsbCBjcm9wIHByaW1hcnkgcGxhbmUgdG8KPj4gbGVmdC90b3AgY29ybmVy IGFuZCBzcHJpdGUgcGxhbmUgdG8gcmlnaHQvdG9wIGNvcm5lciB3aGlsZSBydW5uaW5nCj4+IHJv dGF0aW9uIHRlc3RzLgo+Pgo+PiBtdWx0aXBsYW5lLXJvdGF0aW9uLWNyb3BwaW5nLWJvdHRvbSB3 aWxsIGNyb3AgcHJpbWFyeSBwbGFuZSB0bwo+PiBsZWZ0L2JvdHRvbSBjb3JuZXIgYW5kIHNwcml0 ZSBwbGFuZSB0byByaWdodC9ib3R0b20gY29ybmVyIHdoaWxlCj4+IHJ1bm5pbmcgcm90YXRpb24g dGVzdHMuCj4+Cj4+IHYyIChOYXV0aXlhbCwgQW5raXQgSyk6IFVzZSByZWN0YW5ndWxhciBmaWd1 cmVzIGluc3RlYWQgb2YKPj4gc3F1YXJlIGZpZ3VyZXMgYW5kIGZpeCBhc3NvY2lhdGVkIGNvZGUg dG8gcGVyZm9ybSBjb3JyZWN0bHkuCj4+IEFkanVzdCBwbGFuZSBwb3NpdGlvbnMgYWNjb3JkaW5n IHRvIHNjcmVlbiBzaXplIHRvIGF2b2lkCj4+IHB1dHRpbmcgcGxhbmVzIG91dHNpZGUgc2NyZWVu Lgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBKdWhhLVBla2thIEhlaWtraWxhIDxqdWhhcGVra2EuaGVp a2tpbGFAZ21haWwuY29tPgo+PiAtLS0KPj4gwqAgdGVzdHMva21zX3JvdGF0aW9uX2NyYy5jIHwg MjQ2IAo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ PiDCoCAxIGZpbGUgY2hhbmdlZCwgMjQ2IGluc2VydGlvbnMoKykKPj4KPj4gZGlmZiAtLWdpdCBh L3Rlc3RzL2ttc19yb3RhdGlvbl9jcmMuYyBiL3Rlc3RzL2ttc19yb3RhdGlvbl9jcmMuYwo+PiBp bmRleCAzNjZjMjU0Li4zMjgxNGZlIDEwMDY0NAo+PiAtLS0gYS90ZXN0cy9rbXNfcm90YXRpb25f Y3JjLmMKPj4gKysrIGIvdGVzdHMva21zX3JvdGF0aW9uX2NyYy5jCj4+IEBAIC0yNiw2ICsyNiwy NSBAQAo+PiDCoCAjaW5jbHVkZSA8bWF0aC5oPgo+PiDCoCAjZGVmaW5lIE1BWF9GRU5DRVMgMzIK Pj4gKyNkZWZpbmUgTUFYTVVMVElQTEFORVNBTU9VTlQgMgo+PiArCj4+ICtzdHJ1Y3QgcF9zdHJ1 Y3Qgewo+PiArwqDCoMKgIGlndF9wbGFuZV90ICpwbGFuZTsKPj4gK8KgwqDCoCBzdHJ1Y3QgaWd0 X2ZiIGZiOwo+PiArfTsKPj4gKwo+PiArZW51bSBwX3BvaW50b3JpZ28gewo+PiArwqDCoMKgIHBf dG9wID0gMSA8PCAwLAo+PiArwqDCoMKgIHBfYm90dG9tID0gMSA8PCAxLAo+PiArwqDCoMKgIHBf bGVmdCA9IDEgPDwgMiwKPj4gK8KgwqDCoCBwX3JpZ2h0ID0gMSA8PCAzCj4+ICt9Owo+PiArCj4+ ICtzdHJ1Y3QgcF9wb2ludHsKPj4gK8KgwqDCoCBlbnVtIHBfcG9pbnRvcmlnbyBvcmlnbzsKPj4g K8KgwqDCoCBmbG9hdF90IHg7Cj4+ICvCoMKgwqAgZmxvYXRfdCB5Owo+PiArfTsKPj4gwqAgdHlw ZWRlZiBzdHJ1Y3Qgewo+PiDCoMKgwqDCoMKgIGludCBnZnhfZmQ7Cj4+IEBAIC00Myw2ICs2Miw5 IEBAIHR5cGVkZWYgc3RydWN0IHsKPj4gwqDCoMKgwqDCoCB1aW50MzJfdCBvdmVycmlkZV9mbXQ7 Cj4+IMKgwqDCoMKgwqAgdWludDY0X3Qgb3ZlcnJpZGVfdGlsaW5nOwo+PiDCoMKgwqDCoMKgIGlu dCBkZXZpZDsKPj4gKwo+PiArwqDCoMKgIHN0cnVjdCBwX3N0cnVjdCAqbXVsdGlwbGFuZW9sZHZp ZXc7Cj4+ICvCoMKgwqAgc3RydWN0IHBfcG9pbnQgcGxhbmVwb3NbTUFYTVVMVElQTEFORVNBTU9V TlRdOwo+PiDCoCB9IGRhdGFfdDsKPj4gwqAgdHlwZWRlZiBzdHJ1Y3Qgewo+PiBAQCAtMzk1LDYg KzQxNywxOTQgQEAgc3RhdGljIHZvaWQgdGVzdF9wbGFuZV9yb3RhdGlvbihkYXRhX3QgKmRhdGEs IAo+PiBpbnQgcGxhbmVfdHlwZSwgYm9vbCB0ZXN0X2JhZF9mb3JtCj4+IMKgwqDCoMKgwqAgfQo+ PiDCoCB9Cj4+ICt0eXBlZGVmIHN0cnVjdCB7Cj4+ICvCoMKgwqAgaW50MzJfdCB4MSwgeTE7Cj4+ ICvCoMKgwqAgdWludDY0X3Qgd2lkdGgsIGhlaWdodCwgdGlsaW5nLCBwbGFuZXR5cGUsIGZvcm1h dDsKPj4gK8KgwqDCoCBpZ3Rfcm90YXRpb25fdCByb3RhdGlvbl9zdywgcm90YXRpb25faHc7Cj4+ ICt9IHBsYW5laW5mb3M7Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGdldF9tdWx0aXBsYW5lX2NyYyhk YXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlndF9jcmNfdCAqY3JjX291dHB1dCwgcGxhbmVpbmZvcyogcGxh bmVpbmZvLAo+IAo+IFNwYWNlIGJlZm9yZSAnKicKPiAKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpbnQgbnVtcGxhbmVzKQo+PiArewo+PiArwqDCoMKgIHVpbnQzMl90 IHcsIGg7Cj4+ICvCoMKgwqAgaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5 Owo+PiArwqDCoMKgIHN0cnVjdCBwX3N0cnVjdCAqcGxhbmVzLCAqb2xkcGxhbmVzOwo+PiArwqDC oMKgIGludCBjLCByZXQ7Cj4+ICsKPj4gK8KgwqDCoCBvbGRwbGFuZXMgPSBkYXRhLT5tdWx0aXBs YW5lb2xkdmlldzsKPj4gK8KgwqDCoCBwbGFuZXMgPSBtYWxsb2Moc2l6ZW9mKCpwbGFuZXMpKm51 bXBsYW5lcyk7Cj4gCj4gc3BhY2UgYXJvdW5kIG11bHRpcGxpY2F0aW9uICcqJwo+PiArCj4+ICvC oMKgwqAgZm9yIChjID0gMDsgYyA8IG51bXBsYW5lczsgYysrKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBwbGFuZXNbY10ucGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91dHB1dCwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHBsYW5laW5mb1tjXS5wbGFuZXR5cGUpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCB3 ID0gcGxhbmVpbmZvW2NdLndpZHRoOwo+PiArwqDCoMKgwqDCoMKgwqAgaCA9IHBsYW5laW5mb1tj XS5oZWlnaHQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChwbGFuZWluZm9bY10ucm90YXRp b25fc3cgJiAoSUdUX1JPVEFUSU9OXzkwIHwgCj4+IElHVF9ST1RBVElPTl8yNzApKQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rfc3dhcCh3LCBoKTsKPj4gKwo+IAo+IFRoZXJlIGNhbiBi ZSBhIG1pbm9yIHByb2JsZW0gb2YgY3JvcHBpbmcgZm9yIHJlY3RhbmdsZXMgcmlnaHQgc2lkZSBv ZiAKPiBzY3JlZW4sIGluIGNhc2Ugb2Ygc29tZSBzcXVhcmlzaCByZXNvbHV0aW9ucy4KPiBXZSBr bm93IGZvciBvdXIgbXVsdGktcGxhbmUgcm90YXRpb24gdGVzdCBmb3IgVG9wIFJpZ2h0IHJlY3Rh bmdsZToKPiB3aWR0aCA9IDAuMiBoZGlzcGxheQo+IGhlaWdodCA9IDAuNCB2ZGlzcGxheQo+IHgx ID0gaGRpc3BsYXkgLSAwLjJoZGlzcGxheSAtIDAuMWhkaXNwbGF5IChtYXJnaW4pPSAwLjdoZGlz cGxheQo+IHkxID0gdmRpc3BsYXkgLSAwLjR2ZGlzcGxheSAtIDAuMXZkaXNwbGF5IChtYXJnaW4p ID0gMC41dmRpc3BsYXkKPiAKPiAKPiBBZnRlciByb3RhdGlvbiA5MC8yNzAgd2lkdGggYW5kIGhl aWdodCBnZXRzIHN3YXBwZWQuCj4gCj4gU2luY2UgeDEgPSAwLjcgaGRpc3BsYXksIHNvIG1heGlt dW0gd2lkdGggb2YgdG9wLXJpZ2h0IHJlY3RhbmdsZSB3aXRob3V0IAo+IGNyb3BwaW5nID0gMC4z aGRpc3BsYXkuCj4gU28gaWYgdGhlIGFjdHVhbCByZWN0YW5nbGUgd2lkdGggYWZ0ZXIgcm90YXRp b24gb2YgOTAvMjcwIGlzIG1vcmUgdGhhbiAKPiB0aGUgbWF4aW11bSBhdmFpbGFibGUgd2lkdGgs IHdlJ2xsIGdldCBjcm9wcGVkIHJlY3RhbmdsZS4KPiAKPiBOb3cgZHVlIHRvIHN3YXAsIHRoZSB3 aWR0aCBvZiB0aGUgcmVjdGFuZ2xlIGFmdGVyIHJvdGF0aW9uID0gMC40dmRpc3BsYXkuCj4gV2Ug d2lsbCBhbHdheXMgZ2V0IGNyb3BwZWQgcmVjdGFuZ2xlIGlmOgo+ICDCoDAuNCB2ZGlzcGxheSA+ IDAuM2hkaXNwbGF5Lgo+IAo+IE9yIGluIG90aGVyIHdvcmRzIHdlJ2xsIGdldCBjcm9wcGVkIHJl Y3RhbmdsZSBpZiBoZGlzcGxheS92ZGlzcGxheSA8IDQvMy4KPiBOb3cgSSBhbSBub3Qgc3VyZSB3 aGV0aGVyIHdlIHNob3VsZCBldmVuIHRoaW5rIGFib3V0IHRob3NlIHJlc29sdXRpb25zIAo+IHdo aWNoIGhhdmUgaGRpc3BsYXk6dmRpc3BsYXkgPCA0OjMKPiBCdXQgdG8gbmFtZSBhIGZldyAxMjgw eDEwMjQswqAgNzIweDU3NiByZXNvbHV0aW9uIHdpbGwgZ2V0IGNyb3BwZWQgCj4gcmVjdGFuZ2xl LgoKSSB3YXMgd29uZGVyaW5nIGlmIHlvdSBoYXZlIG1vbml0b3Igd2hpY2ggYWN0dWFsbHkgaGF2 ZSBzdWNoIHJlc29sdXRpb25zIAphcyB0aG9zZSB5b3UgbWVudGlvbmVkPyBJIHdhcyBsb29raW5n IGJ1dCBkaWRuJ3QgZmluZCBhbnkgc3VjaC4gSWYgeW91IAphcmUgdGhpbmtpbmcgYWJvdXQgcm90 YXRpbmcgbW9uaXRvciBpdCB3aWxsIG5vdCBjaGFuZ2UgdGhlIHNjYW5uaW5nIApkaXJlY3Rpb24g YW5kIHRoZSByZXNvbHV0aW9uIGZsaXAgaXMgZG9uZSB2aWEgcm90YXRpb24gLS0gdGhhdCBmZWF0 dXJlIAp3aGljaCBpcyB1bmRlciB0ZXN0IGhlcmUuIEkgZG9uJ3Qga25vdyBpZiBpdCdzIHdpdGgg bW9kZXJuIGRheSBtb25pdG9ycyAKc3RpbGwgYnV0IGVhcmxpZXIgc2Nhbm5pbmcgb3JkZXIgb2Yg ZGlzcGxheSB3YXMgZGljdGF0ZWQgYnkgdGhlIGxvd2VzdCAKb2YgeC1yZXMgdnMgeS1yZXMgYmVj YXVzZSBpdCBjYXVzZWQgbGVzcyBjb21wb25lbnRzLgoKSSBhbnl3YXkgbW92ZWQgdGhvc2UgcGxh bmVzIGEgYml0IGJ1dCBzbyBmYXIgSSdtIHN0aWNraW5nIHRvIDQvMyBiZWluZyAKJ3dvcnN0IGNh c2UnLCBJJ2xsIHByb2JhYmx5IHRvbW9ycm93IHNlbmQgbmV3IHZlcnNpb24gb2YgdGhlIHBhdGNo LgoKPiAKPiBUaGUgcHJvYmxlbSBjYW4gYmUgc29sdmVkLCBpZiB3ZSBjaGFuZ2UgdGhlIHgxIGFu ZCB5MSBpbiBjYXNlIG9mIAo+IHJvdGF0aW9uIDkwLzI3MCBiZWZvcmUgc3dhcHBpbmcuCj4gCj4g aWYgKHBsYW5laW5mb1tjXS5yb3RhdGlvbl9zdyAmIChJR1RfUk9UQVRJT05fOTAgfCBJR1RfUk9U QVRJT05fMjcwKSkgewo+IAo+ICDCoMKgwqAgeDEgPSB4MSArIHcgLSBoOwo+ICDCoMKgwqAgeTEg PSB5MSArIGggLSB3Owo+IAo+ICDCoMKgwqAgaWd0X3N3YXAodywgaCk7Cj4gfQo+IHNvIHgxIHdp bGwgYmVjb21lIDAuNyBoZGlzcGxheSArIDAuMmhkaXNwbGF5IC0gMC40IHZkaXNwbGF5ID0gMC45 IAo+IGhkaXNwbGF5ICsgMC40IHZkaXNwbGF5IFsgYSBib3JkZXIvbWFyZ2luIG9mIDAuMSBoZGlz cGxheSBmcm9tIHJpZ2h0IHNpZGVdCj4gYW5kIHkxIHdpbGwgYmVjb21lIDAuNSB2ZGlzcGxheSAr MC40IHZkaXNwbGF5IC0gMC4yaGRpc3BsYXkgPSAwLjkgCj4gdmRpc3BsYXkgKyAwLjIgaGRpc3Bs YXkgW2EgYm9yZGVyL21hcmdpbiBvZiAwLjEgdmRpc3BsYXkgZnJvbSBib3R0b20gXQo+IAo+PiAr wqDCoMKgwqDCoMKgwqAgaWd0X2NyZWF0ZV9mYihkYXRhLT5nZnhfZmQsIHcsIGgsIHBsYW5laW5m b1tjXS5mb3JtYXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBsYW5l aW5mb1tjXS50aWxpbmcsICZwbGFuZXNbY10uZmIpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBw YWludF9zcXVhcmVzKGRhdGEsIHBsYW5laW5mb1tjXS5yb3RhdGlvbl9zdywgJnBsYW5lc1tjXS5m YiwgCj4+IDEuMGYpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3BsYW5lX3NldF9mYihwbGFuZXNb Y10ucGxhbmUsICZwbGFuZXNbY10uZmIpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocGxh bmVpbmZvW2NdLnJvdGF0aW9uX2h3ICYgKElHVF9ST1RBVElPTl85MCB8IAo+PiBJR1RfUk9UQVRJ T05fMjcwKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3BsYW5lX3NldF9zaXplKHBs YW5lc1tjXS5wbGFuZSwgaCwgdyk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9wbGFuZV9z ZXRfcG9zaXRpb24ocGxhbmVzW2NdLnBsYW5lLCBwbGFuZWluZm9bY10ueDEsIAo+PiBwbGFuZWlu Zm9bY10ueTEpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFu ZXNbY10ucGxhbmUsIAo+PiBwbGFuZWluZm9bY10ucm90YXRpb25faHcpOwo+PiArwqDCoMKgIH0K Pj4gKwo+PiArwqDCoMKgIHJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENP TU1JVF9BVE9NSUMpOwo+PiArwqDCoMKgIGlndF9hc3NlcnRfZXEocmV0LCAwKTsKPj4gKwo+PiAr wqDCoMKgIGlndF9waXBlX2NyY19nZXRfY3VycmVudChkYXRhLT5nZnhfZmQsIGRhdGEtPnBpcGVf Y3JjLCBjcmNfb3V0cHV0KTsKPj4gKwo+PiArwqDCoMKgIGZvciAoYyA9IDA7IGMgPCBudW1wbGFu ZXMgJiYgb2xkcGxhbmVzOyBjKyspCj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfcmVtb3ZlX2ZiKGRh dGEtPmdmeF9mZCwgJm9sZHBsYW5lc1tjXS5mYik7Cj4+ICsKPj4gK8KgwqDCoCBmcmVlKG9sZHBs YW5lcyk7Cj4+ICvCoMKgwqAgZGF0YS0+bXVsdGlwbGFuZW9sZHZpZXcgPSAodm9pZCopcGxhbmVz Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBwb2ludGxvY2F0aW9uKGRhdGFfdCAqZGF0YSwg cGxhbmVpbmZvcyogcCwgCj4+IGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPiAKPiBwbGFuZWluZm9z ICpwCj4gCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgYykKPj4gK3sKPj4gK8Kg wqDCoCBwW2NdLngxID0gKGludDMyX3QpKGRhdGEtPnBsYW5lcG9zW2NdLngqbW9kZS0+aGRpc3Bs YXkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICsoKGRhdGEtPnBsYW5lcG9zW2NdLm9yaWdv ICYgcF9yaWdodCkgPyBtb2RlLT5oZGlzcGxheSA6IDApOwo+PiArwqDCoMKgIHBbY10ueTEgPSAo aW50MzJfdCkoZGF0YS0+cGxhbmVwb3NbY10ueSptb2RlLT52ZGlzcGxheSkKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKygoZGF0YS0+cGxhbmVwb3NbY10ub3JpZ28gJiBwX2JvdHRvbSkgPyBt b2RlLT52ZGlzcGxheSA6IAo+PiAwKTsKPj4gK30KPj4gKwo+IAo+IFNwYWNlIGFyb3VuZCAnKicK PiAKPj4gKy8qCj4+ICsgKiBIZXJlIGlzIHBpcGUgcGFyYW1ldGVyIHdoaWNoIGlzIG5vdyB1c2Vk IG9ubHkgZm9yIGZpcnN0IHBpcGUuCj4+ICsgKiBJdCBpcyBsZWZ0IGhlcmUgaWYgdGhpcyB0ZXN0 IGV2ZXIgd2FzIHdhbnRlZCB0byBiZSBydW4gb24KPj4gKyAqIGRpZmZlcmVudCBwaXBlcy4KPj4g KyAqLwo+PiArc3RhdGljIHZvaWQgdGVzdF9tdWx0aV9wbGFuZV9yb3RhdGlvbihkYXRhX3QgKmRh dGEsIGVudW0gcGlwZSBwaXBlKQo+PiArewo+PiArwqDCoMKgIGlndF9kaXNwbGF5X3QgKmRpc3Bs YXkgPSAmZGF0YS0+ZGlzcGxheTsKPj4gK8KgwqDCoCBpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPj4g K8KgwqDCoCBpZ3RfY3JjX3QgcmV0Y3JjX3N3LCByZXRjcmNfaHc7Cj4+ICvCoMKgwqAgcGxhbmVp bmZvcyBwWzJdOwo+PiArwqDCoMKgIGludCBjOwo+PiArwqDCoMKgIHN0cnVjdCBwX3N0cnVjdCAq b2xkcGxhbmVzOwo+PiArwqDCoMKgIGRybU1vZGVNb2RlSW5mbyAqbW9kZTsKPj4gKwo+PiArwqDC oMKgIGNvbnN0IHN0YXRpYyBzdHJ1Y3Qgewo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3JvdGF0aW9u X3Qgcm90YXRpb247Cj4+ICvCoMKgwqDCoMKgwqDCoCBmbG9hdF90IHdpZHRoOwo+PiArwqDCoMKg wqDCoMKgwqAgZmxvYXRfdCBoZWlnaHQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCB1aW50NjRfdCB0aWxp bmc7Cj4+ICvCoMKgwqAgfSBwbGFuZWNvbmZpZ3NbXSA9IHsKPj4gK8KgwqDCoCB7SUdUX1JPVEFU SU9OXzAsIC4yZiwgLjRmLCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FIH0sCj4+ICvCoMKgwqAg e0lHVF9ST1RBVElPTl8wLCAuMmYsIC40ZiwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQg fSwKPj4gK8KgwqDCoCB7SUdUX1JPVEFUSU9OXzAsIC4yZiwgLjRmLCBMT0NBTF9JOTE1X0ZPUk1B VF9NT0RfWV9USUxFRCB9LAo+PiArwqDCoMKgIHtJR1RfUk9UQVRJT05fMCwgLjJmLCAuNGYsIExP Q0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCB9LAo+PiArwqDCoMKgIHtJR1RfUk9UQVRJT05f OTAsIC4yZiwgLjRmLCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB9LAo+PiArwqDCoMKg IHtJR1RfUk9UQVRJT05fOTAsIC4yZiwgLjRmLCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWWZfVElM RUQgfSwKPj4gK8KgwqDCoCB7SUdUX1JPVEFUSU9OXzE4MCwgLjJmLCAuNGYsIExPQ0FMX0RSTV9G T1JNQVRfTU9EX05PTkUgfSwKPj4gK8KgwqDCoCB7SUdUX1JPVEFUSU9OXzE4MCwgLjJmLCAuNGYs IExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVEIH0sCj4+ICvCoMKgwqAge0lHVF9ST1RBVElP Tl8xODAsIC4yZiwgLjRmLCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB9LAo+PiArwqDC oMKgIHtJR1RfUk9UQVRJT05fMTgwLCAuMmYsIC40ZiwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lm X1RJTEVEIH0sCj4+ICvCoMKgwqAge0lHVF9ST1RBVElPTl8yNzAsIC4yZiwgLjRmLCBMT0NBTF9J OTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB9LAo+PiArwqDCoMKgIHtJR1RfUk9UQVRJT05fMjcwLCAu MmYsIC40ZiwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEIH0sCj4+ICvCoMKgwqAgfTsK Pj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqAgKiBUaGVzZSBhcmUgdGhvc2UgbW9kZXMgd2hp Y2ggYXJlIHRlc3RlZC4gRm9yIHRlc3RpbmcgZmVlbCAKPj4gaW50ZXJlc3RpbmcKPj4gK8KgwqDC oCAqIGNhc2Ugd2l0aCB0aWxpbmcgYXJlIDIgYnl0ZSB3aWRlIGFuZCA0IGJ5dGUgd2lkZS4KPj4g K8KgwqDCoCAqCj4+ICvCoMKgwqAgKiBUT0RPOgo+PiArwqDCoMKgICogQnVpbHQgc3VwcG9ydCBm b3IgTlYxMiBoZXJlLgo+PiArwqDCoMKgICovCj4+ICvCoMKgwqAgY29uc3Qgc3RhdGljIHVpbnQz Ml90wqAgZm9ybWF0bGlzdFtdID0ge0RSTV9GT1JNQVRfUkdCNTY1LAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRk9STUFUX1hSR0I4 ODg4fTsKPj4gKwo+PiArwqDCoMKgIGZvcl9lYWNoX3ZhbGlkX291dHB1dF9vbl9waXBlKGRpc3Bs YXksIHBpcGUsIG91dHB1dCkgewo+PiArwqDCoMKgwqDCoMKgwqAgaW50IGksIGosIGssIGw7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7Cj4+ICvC oMKgwqDCoMKgwqDCoCBtb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+PiArwqDC oMKgwqDCoMKgwqAgaWd0X2Rpc3BsYXlfcmVxdWlyZV9vdXRwdXQoZGlzcGxheSk7Cj4+ICvCoMKg wqDCoMKgwqDCoCBpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBkYXRhLT5waXBlX2NyYyA9IGlndF9waXBlX2NyY19uZXco ZGF0YS0+Z2Z4X2ZkLCBwaXBlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOwo+PiArwqDCoMKg wqDCoMKgwqAgaWd0X3BpcGVfY3JjX3N0YXJ0KGRhdGEtPnBpcGVfY3JjKTsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGxhbmVjb25maWdzKTsgaSsr KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBbMF0ucGxhbmV0eXBlID0gRFJNX1BMQU5F X1RZUEVfUFJJTUFSWTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcFswXS53aWR0aCA9IAo+ PiAodWludDY0X3QpKHBsYW5lY29uZmlnc1tpXS53aWR0aCptb2RlLT5oZGlzcGxheSk7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBbMF0uaGVpZ2h0ID0gCj4+ICh1aW50NjRfdCkocGxhbmVj b25maWdzW2ldLmhlaWdodCptb2RlLT52ZGlzcGxheSk7Cj4gCj4gU3BhY2UgYXJvdW5kICcqJwo+ IAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwWzBdLnRpbGluZyA9IHBsYW5lY29uZmlnc1tp XS50aWxpbmc7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBvaW50bG9jYXRpb24oZGF0YSwg KHBsYW5laW5mb3MqKSZwLCBtb2RlLCAwKTsKPiAKPiBTcGFjZSBiZWZvcmUgJyonCj4gCj4+ICsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoZm9y bWF0bGlzdCk7IGsrKykgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBbMF0u Zm9ybWF0ID0gZm9ybWF0bGlzdFtrXTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHBsYW5lY29uZmlncyk7IGorKykgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcFsxXS5wbGFuZXR5cGUg PSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcFsxXS53aWR0aCA9IAo+PiAodWludDY0X3QpKHBsYW5lY29uZmlnc1tqXS53 aWR0aCptb2RlLT5oZGlzcGxheSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwWzFdLmhlaWdodCA9IAo+PiAodWludDY0X3QpKHBsYW5lY29uZmlnc1tqXS5oZWln aHQqbW9kZS0+dmRpc3BsYXkpOwo+IAo+IHNwYWNlIGFyb3VuZCAnKicKPiAKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBbMV0udGlsaW5nID0gcGxhbmVjb25maWdz W2pdLnRpbGluZzsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBv aW50bG9jYXRpb24oZGF0YSwgKHBsYW5laW5mb3MqKSZwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtb2RlLCAxKTsKPj4gKwo+ IAo+IFNwYWNlIGJlZm9yZSAnKicKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGZvciAobCA9IDA7IGwgPCBBUlJBWV9TSVpFKGZvcm1hdGxpc3QpOyBsKyspIHsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcFsxXS5mb3Jt YXQgPSBmb3JtYXRsaXN0W2xdOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKiBSR0I1NjUgOTAvMjcwIGRlZ3JlZXMgcm90YXRpb24gaXMgc3Vw cG9ydGVkCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiBmcm9tIGdlbjExIG9ud2FyZHMuCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKHBbMF0uZm9ybWF0ID09IERSTV9GT1JNQVRfUkdCNTY1ICYm Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAocGxhbmVjb25maWdzW2ldLnJvdGF0aW9uICYgCj4+IChJR1RfUk9UQVRJT05fOTAgfCBJ R1RfUk9UQVRJT05fMjcwKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIGludGVsX2dlbihkYXRhLT5kZXZpZCkgPCAxMSkKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b250aW51ZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAocFsxXS5mb3JtYXQgPT0gRFJNX0ZPUk1BVF9SR0I1NjUgJiYKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChwbGFu ZWNvbmZpZ3Nbal0ucm90YXRpb24gJiAKPj4gKElHVF9ST1RBVElPTl85MCB8IElHVF9ST1RBVElP Tl8yNzApKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJiYgaW50ZWxfZ2VuKGRhdGEtPmRldmlkKSA8IDExKQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBb MF0ucm90YXRpb25fc3cgPSBwbGFuZWNvbmZpZ3NbaV0ucm90YXRpb247Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBbMF0ucm90YXRpb25faHcgPSBJ R1RfUk9UQVRJT05fMDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcFsxXS5yb3RhdGlvbl9zdyA9IHBsYW5lY29uZmlnc1tqXS5yb3RhdGlvbjsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcFsxXS5yb3Rh dGlvbl9odyA9IElHVF9ST1RBVElPTl8wOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBnZXRfbXVsdGlwbGFuZV9jcmMoZGF0YSwgb3V0cHV0LCAmcmV0 Y3JjX3N3LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHBsYW5laW5mb3MqKSZwLCAKPj4gTUFYTVVMVElQTEFO RVNBTU9VTlQpOwo+IAo+IFNwYWNlIGJlZm9yZSAnKicKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rfc3dhcChwWzBdLnJvdGF0aW9uX3N3 LCBwWzBdLnJvdGF0aW9uX2h3KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWd0X3N3YXAocFsxXS5yb3RhdGlvbl9zdywgcFsxXS5yb3RhdGlvbl9o dyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdl dF9tdWx0aXBsYW5lX2NyYyhkYXRhLCBvdXRwdXQsICZyZXRjcmNfaHcsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAocGxhbmVpbmZvcyopJnAsIAo+PiBNQVhNVUxUSVBMQU5FU0FNT1VOVCk7Cj4+ICsKPiAKPiBT cGFjZSBiZWZvcmUgJyonCj4gCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZXRjcmNfc3csICZyZXRjcmNfaHcp Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3BpcGVfY3JjX3N0b3Ao ZGF0YS0+cGlwZV9jcmMpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3BpcGVfY3JjX2ZyZWUoZGF0 YS0+cGlwZV9jcmMpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X291dHB1dF9zZXRfcGlwZShvdXRw dXQsIFBJUEVfQU5ZKTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKg ICogT2xkIGZicyBhcmUgZGVsZXRlZCBvbmx5IGFmdGVyIG5ldyBvbmVzIGFyZSBzZXQgb24gcGxh bmVzLgo+PiArwqDCoMKgICogVGhpcyBpcyBkb25lIHRvIHNwZWVkIHVwIHRoZSB0ZXN0Cj4+ICvC oMKgwqAgKi8KPj4gK8KgwqDCoCBvbGRwbGFuZXMgPSBkYXRhLT5tdWx0aXBsYW5lb2xkdmlldzsK Pj4gK8KgwqDCoCBmb3IgKGMgPSAwOyBjIDwgTUFYTVVMVElQTEFORVNBTU9VTlQgJiYgb2xkcGxh bmVzOyBjKyspCj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwg Jm9sZHBsYW5lc1tjXS5mYik7Cj4+ICsKPj4gK8KgwqDCoCBmcmVlKG9sZHBsYW5lcyk7Cj4+ICvC oMKgwqAgZGF0YS0+bXVsdGlwbGFuZW9sZHZpZXcgPSBOVUxMOwo+PiArwqDCoMKgIGRhdGEtPnBp cGVfY3JjID0gTlVMTDsKPj4gK30KPj4gKwo+PiDCoCBzdGF0aWMgdm9pZCB0ZXN0X3BsYW5lX3Jv dGF0aW9uX2V4aGF1c3RfZmVuY2VzKGRhdGFfdCAqZGF0YSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBwaXBlIHBpcGUsCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlndF9vdXRwdXRfdCAqb3V0cHV0LAo+PiBAQCAtNTk1LDYgKzgwNSw0MiBAQCBpZ3RfbWFpbgo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCBpZ3Rfc3Vi dGVzdF9mKCJtdWx0aXBsYW5lLXJvdGF0aW9uIikgewo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3Jl cXVpcmUoZ2VuID49IDkpOwo+PiArwqDCoMKgwqDCoMKgwqAgY2xlYW51cF9jcnRjKCZkYXRhKTsK Pj4gK8KgwqDCoMKgwqDCoMKgIGRhdGEucGxhbmVwb3NbMF0ub3JpZ28gPSBwX3RvcCB8IHBfbGVm dDsKPj4gK8KgwqDCoMKgwqDCoMKgIGRhdGEucGxhbmVwb3NbMF0ueCA9IC4xZjsKPj4gK8KgwqDC oMKgwqDCoMKgIGRhdGEucGxhbmVwb3NbMF0ueSA9IC4xZjsKPj4gK8KgwqDCoMKgwqDCoMKgIGRh dGEucGxhbmVwb3NbMV0ub3JpZ28gPSBwX3RvcCB8IHBfcmlnaHQ7Cj4+ICvCoMKgwqDCoMKgwqDC oCBkYXRhLnBsYW5lcG9zWzFdLnggPSAtLjNmOwo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YS5wbGFu ZXBvc1sxXS55ID0gLjFmOwo+PiArwqDCoMKgwqDCoMKgwqAgdGVzdF9tdWx0aV9wbGFuZV9yb3Rh dGlvbigmZGF0YSwgMCk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgaWd0X3N1YnRlc3Rf ZigibXVsdGlwbGFuZS1yb3RhdGlvbi1jcm9wcGluZy10b3AiKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBpZ3RfcmVxdWlyZShnZW4gPj0gOSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBjbGVhbnVwX2NydGMo JmRhdGEpOwo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YS5wbGFuZXBvc1swXS5vcmlnbyA9IHBfdG9w IHwgcF9sZWZ0Owo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YS5wbGFuZXBvc1swXS54ID0gLS4wNWY7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBkYXRhLnBsYW5lcG9zWzBdLnkgPSAtLjE1ZjsKPj4gK8KgwqDC oMKgwqDCoMKgIGRhdGEucGxhbmVwb3NbMV0ub3JpZ28gPSBwX3RvcCB8IHBfcmlnaHQ7Cj4+ICvC oMKgwqDCoMKgwqDCoCBkYXRhLnBsYW5lcG9zWzFdLnggPSAtLjE1ZjsKPj4gK8KgwqDCoMKgwqDC oMKgIGRhdGEucGxhbmVwb3NbMV0ueSA9IC0uMTVmOwo+PiArwqDCoMKgwqDCoMKgwqAgdGVzdF9t dWx0aV9wbGFuZV9yb3RhdGlvbigmZGF0YSwgMCk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKg wqAgaWd0X3N1YnRlc3RfZigibXVsdGlwbGFuZS1yb3RhdGlvbi1jcm9wcGluZy1ib3R0b20iKSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfcmVxdWlyZShnZW4gPj0gOSk7Cj4+ICvCoMKgwqDCoMKg wqDCoCBjbGVhbnVwX2NydGMoJmRhdGEpOwo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YS5wbGFuZXBv c1swXS5vcmlnbyA9IHBfYm90dG9tIHwgcF9sZWZ0Owo+PiArwqDCoMKgwqDCoMKgwqAgZGF0YS5w bGFuZXBvc1swXS54ID0gLS4wNWY7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkYXRhLnBsYW5lcG9zWzBd LnkgPSAtLjIwZjsKPj4gK8KgwqDCoMKgwqDCoMKgIGRhdGEucGxhbmVwb3NbMV0ub3JpZ28gPSBw X2JvdHRvbSB8IHBfcmlnaHQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkYXRhLnBsYW5lcG9zWzFdLngg PSAtLjE1ZjsKPj4gK8KgwqDCoMKgwqDCoMKgIGRhdGEucGxhbmVwb3NbMV0ueSA9IC0uMjBmOwo+ PiArwqDCoMKgwqDCoMKgwqAgdGVzdF9tdWx0aV9wbGFuZV9yb3RhdGlvbigmZGF0YSwgMCk7Cj4+ ICvCoMKgwqAgfQo+PiArCj4+IMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKgwqDCoMKgICogZXhoYXVz dC1mZW5jZXMgc2hvdWxkIGJlIGxhc3QgdGVzdCwgaWYgaXQgZmFpbHMgd2UgbWF5IE9PTSBpbgo+ PiDCoMKgwqDCoMKgwqAgKiB0aGUgZm9sbG93aW5nIHN1YnRlc3RzIG90aGVyd2lzZS4KPiAKPiBT b3JyeSBmb3IgbGVuZ3RoeSBkZXRhaWxzIGZvciBhIG1pbm9yIGNvcm5lciBjYXNlLCBjb3VsZG50 IG1ha2UgaXQgbW9yZSAKPiBjb25jaXNlLCBhbmQgY2xlYXIgYXQgdGhlIHNhbWUgdGltZS4KPiAK PiBSZWdhcmRzLAo+IEFua2l0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRl dgo=