From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 46D466E1D3 for ; Mon, 19 Mar 2018 12:12:23 +0000 (UTC) Message-ID: <1521461539.16539.2.camel@intel.com> From: Mika Kahola Date: Mon, 19 Mar 2018 14:12:19 +0200 In-Reply-To: <1521207585-22815-1-git-send-email-juhapekka.heikkila@gmail.com> References: <1521207585-22815-1-git-send-email-juhapekka.heikkila@gmail.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t] tests/kms_available_modes_crc: Test all modes on all planes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: mika.kahola@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: Juha-Pekka Heikkila , igt-dev@lists.freedesktop.org List-ID: T24gRnJpLCAyMDE4LTAzLTE2IGF0IDE1OjM5ICswMjAwLCBKdWhhLVBla2thIEhlaWtraWxhIHdy b3RlOgo+IEFzayBmcm9tIGtlcm5lbCBhYm91dCBzdXBwb3J0ZWQgbW9kZXMgZm9yIGVhY2ggcGxh bmUgYW5kIHRyeSBzZXR0aW5nCj4gdGhlbSBvbiBkaXNwbGF5IGFuZCB2ZXJpZnkgZnVuY3Rpb25h bGl0eSB3aXRoIGNyYy4KPiAKPiBEUk1fRk9STUFUX0FSR0I4ODg4IGFuZCBEUk1fRk9STUFUX0FC R1I4ODg4IHNraXAgY3JjIHRlc3Rpbmcgb24KPiBwcmltYXJ5IGFuZCBvdmVybGF5IHBsYW5lcyBi ZWNhdXNlIHRoZXkgcHJvZHVjZSBpbmNvcnJlY3QgY3JjcyBmcm9tCj4gaGFyZHdhcmUuIERSTV9G T1JNQVRfQVJHQjg4ODggaXMgdGVzdGVkIG9uIGN1cnNvciBwbGFuZS4KPiAKPiBTaWduZWQtb2Zm LWJ5OiBKdWhhLVBla2thIEhlaWtraWxhIDxqdWhhcGVra2EuaGVpa2tpbGFAZ21haWwuY29tPgo+ IC0tLQo+IMKgdGVzdHMvTWFrZWZpbGUuc291cmNlc8KgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDC oDEgKwo+IMKgdGVzdHMva21zX2F2YWlsYWJsZV9tb2Rlc19jcmMuYyB8IDU3NAo+ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiDCoHRlc3RzL21lc29uLmJ1aWxkwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDEgKwo+IMKgMyBmaWxlcyBjaGFuZ2Vk LCA1NzYgaW5zZXJ0aW9ucygrKQo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19hdmFp bGFibGVfbW9kZXNfY3JjLmMKPiAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNl cyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCBmMWQxY2JhLi4wNjIyMDQ4IDEwMDY0 NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzCj4gQEAgLTE3Myw2ICsxNzMsNyBAQCBURVNUU19wcm9ncyA9IFwKPiDCoAlrbXNfYXRv bWljIFwKPiDCoAlrbXNfYXRvbWljX2ludGVycnVwdGlibGUgXAo+IMKgCWttc19hdG9taWNfdHJh bnNpdGlvbiBcCj4gKwlrbXNfYXZhaWxhYmxlX21vZGVzX2NyYyBcCj4gwqAJa21zX2J1c3kgXAo+ IMKgCWttc19jY3MgXAo+IMKgCWttc19jaHZfY3Vyc29yX2ZhaWwgXAo+IGRpZmYgLS1naXQgYS90 ZXN0cy9rbXNfYXZhaWxhYmxlX21vZGVzX2NyYy5jCj4gYi90ZXN0cy9rbXNfYXZhaWxhYmxlX21v ZGVzX2NyYy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi45ZTMxMzQ2 Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rlc3RzL2ttc19hdmFpbGFibGVfbW9kZXNfY3JjLmMK PiBAQCAtMCwwICsxLDU3NCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBD b3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgo+IG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiAiU29m dHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQKPiBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+IHN1YmxpY2Vuc2Us Cj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tCj4gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCj4gY29uZGl0aW9uczoKPiArICoKPiArICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZwo+IHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbAo+IHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4K PiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsCj4gRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4gTUVSQ0hBTlRBQklMSVRZLAo+ ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LsKgwqBJTiBOTwo+IEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTCj4gT1IgT1RIRVIKPiArICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsCj4gQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4gT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhF IFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJkcm1fbW9kZS5oIgo+ICsj aW5jbHVkZSAiZHJtX2ZvdXJjYy5oIgo+ICsjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlIDxz eXMvaW9jdGwuaD4KPiArCj4gK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJDUkMgdGVzdCBhbGwgZGlm ZmVyZW50IHBsYW5lIG1vZGVzIHdoaWNoCj4ga2VybmVsIGFkdmVydGlzZXMuIik7Cj4gKwo+ICsj ZGVmaW5lIHRlc3RjcmNhbW91bnQgMwpXb3VsZCBncmFiYmluZyBqdXN0IG9uZSBDUkMgYmUgZW5v dWdoIGZvciB0aGlzIHRlc3Q/IEFueSByZWFzb24gd2h5IHdlCndvdWxkIG5lZWQgMyBDUkMncz8K wqAKPiArCj4gK3R5cGVkZWYgc3RydWN0IHsKPiArCWludCBnZnhfZmQ7Cj4gKwlpZ3RfZGlzcGxh eV90IGRpc3BsYXk7Cj4gKwllbnVtIGlndF9jb21taXRfc3R5bGUgY29tbWl0Owo+ICsKPiArCXN0 cnVjdCBpZ3RfZmIgZmI7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIHByaW1hcnlfZmI7Cj4gKwo+ICsJY2hh ciBmb3JtYXRfbmFtZVs1XTsKPiArCWJvb2wgc2VwYXJhdGVwcmltYXJ5cGxhbmU7Cj4gKwo+ICsJ dWludDMyX3QgZ2VtX2hhbmRsZTsKPiArCXVpbnQzMl90IGdlbV9oYW5kbGVfeXV2Owo+ICsJdW5z aWduZWQgaW50IHNpemU7Cj4gKwl1bnNpZ25lZCBjaGFyKiBidWY7Cj4gKwo+ICsJLyoKPiArCcKg KiBjb21wYXJpc29uIGNyY3MKPiArCcKgKi8KPiArCWlndF9jcmNfdCAqY3Vyc29yX2NyYzsKPiAr CWlndF9jcmNfdCAqZnVsbHNjcmVlbl9jcmM7Cj4gK30gZGF0YV90Owo+ICsKPiArCj4gK3N0YXRp YyBpbnQgZG9fd3JpdGUoaW50IGZkLCBpbnQgaGFuZGxlLCB2b2lkICpidWYsIGludCBvZmZzZXQs IGludAo+IHNpemUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlIHdyaXRlOwo+ ICsJbWVtc2V0KCZ3cml0ZSwgMHgwMCwgc2l6ZW9mKHdyaXRlKSk7Cj4gKwl3cml0ZS5oYW5kbGUg PSBoYW5kbGU7Cj4gKwl3cml0ZS5kYXRhX3B0ciA9ICh1aW50cHRyX3QpYnVmOwo+ICsJd3JpdGUu c2l6ZSA9IHNpemU7Cj4gKwl3cml0ZS5vZmZzZXQgPSBvZmZzZXQ7Cj4gKwlyZXR1cm4gaW9jdGwo ZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9QV1JJVEUsICZ3cml0ZSk7Cj4gK30KPiArCj4gKwo+ICtz dGF0aWMgdm9pZCBnZW5lcmF0ZV9jb21wYXJpc29uX2NyY19saXN0KGRhdGFfdCAqZGF0YSwgaWd0 X291dHB1dF90Cj4gKm91dHB1dCwKPiArCQkJCQllbnVtIHBpcGUgcGlwZSkKPiArewo+ICsJZHJt TW9kZU1vZGVJbmZvICptb2RlOwo+ICsJdWludDY0X3QgdywgaCwgYzsKPiArCWludCBmYmlkOwo+ ICsJY2Fpcm9fdCAqY3I7Cj4gKwlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Cj4gKwlpZ3RfcGxh bmVfdCAqcHJpbWFyeTsKPiArCj4gKwo+ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBp cGUpOwo+ICsKPiArCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7Cj4gKwlmYmlk ID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5nZnhfZmQsCj4gKwkJCQnCoMKgwqBtb2RlLT5o ZGlzcGxheSwKPiArCQkJCcKgwqDCoG1vZGUtPnZkaXNwbGF5LAo+ICsJCQkJwqDCoMKgaW50ZWxf Z2VuKGludGVsX2dldF9kcm1fZGV2aWQoZGF0Cj4gYS0+Z2Z4X2ZkKSkgPCA5ID8gRFJNX0ZPUk1B VF9YUkdCODg4OCA6IERSTV9GT1JNQVRfQVJHQjg4ODgsCj4gKwkJCQnCoMKgwqBMT0NBTF9EUk1f Rk9STUFUX01PRF9OT05FLAo+ICsJCQkJwqDCoMKgMCwgMCwgMCwKPiArCQkJCcKgwqDCoCZkYXRh LT5wcmltYXJ5X2ZiKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGZiaWQpOwo+ICsKPiArCWRybUdldENh cChkYXRhLT5nZnhfZmQsIERSTV9DQVBfQ1VSU09SX1dJRFRILCAmdyk7Cj4gKwlkcm1HZXRDYXAo ZGF0YS0+Z2Z4X2ZkLCBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQsICZoKTsKPiArCj4gKwljciA9IGln dF9nZXRfY2Fpcm9fY3R4KGRhdGEtPmdmeF9mZCwgJmRhdGEtPnByaW1hcnlfZmIpOwo+ICsJaWd0 X3BhaW50X2NvbG9yKGNyLCAwLCAwLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4g KwkJCcKgwqDCoMKgMC4wLCAwLjAsIDAuMCk7Cj4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAs IHcsIGgsIDEuMCwgMS4wLCAxLjApOwo+ICsJaWd0X2Fzc2VydChjYWlyb19zdGF0dXMoY3IpID09 IDApOwo+ICsKPiArCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91dHB1dCwK PiBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiArCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwg JmRhdGEtPnByaW1hcnlfZmIpOwo+ICsJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxh eSwgZGF0YS0+Y29tbWl0KTsKPiArCj4gKwlwaXBlX2NyYyA9IGlndF9waXBlX2NyY19uZXcoZGF0 YS0+Z2Z4X2ZkLCBwaXBlLAo+IElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9BVVRPKTsKPiArCWlndF9w aXBlX2NyY19zdGFydChwaXBlX2NyYyk7Cj4gKwljID0gaWd0X3BpcGVfY3JjX2dldF9jcmNzKHBp cGVfY3JjLCB0ZXN0Y3JjYW1vdW50LCAmZGF0YS0KPiA+Y3Vyc29yX2NyYyk7CklmIG9uZSBDUkMg d291bGQgYmUgZW5vdWdoLCB3ZSBjb3VsZCB1dGlsaXplIE1hYXJ0ZW4ncyBsaWJyYXJ5IHJvdXRp bmUKJ2lndF9waXBlX2NyY19nZXRfc2luZ2xlKCknLgo+ICsJaWd0X2Fzc2VydChjPT10ZXN0Y3Jj YW1vdW50KTsKPiArCWlndF9waXBlX2NyY19zdG9wKHBpcGVfY3JjKTsKSSB0aGluayB3ZSBjb3Vs ZCBrZWVwIGNyYyBnb2luZyBhbmQgaWYgd2UgYXJlIGNvbmNlcm5lZCB0aGF0IHdlIG1heQpoYXZl IGluY29ycmVjdCBvbmUgaW4gdGhlIHBpcGUsIHdlIGNvdWxkIGRyYWluIHRoZW0gd2l0aAonaWd0 X2lndF9waXBlX2NyY19kcmFpbigpJwoKPiArCWlndF9waXBlX2NyY19mcmVlKHBpcGVfY3JjKTsK PiArCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgTlVMTCk7Cj4gKwlpZ3RfZGlzcGxheV9jb21t aXQyKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5jb21taXQpOwo+ICsKPiArCWludGVsX2dlbihpbnRl bF9nZXRfZHJtX2RldmlkKGRhdGEtPmdmeF9mZCkpIDwgOSA/Cj4gKwkJwqDCoGlndF9wYWludF9j b2xvcihjciwgMCwgMCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtCj4gPnZkaXNwbGF5LCAxLjAsIDEu MCwgMS4wKSA6Cj4gKwkJwqDCoGlndF9wYWludF9jb2xvcl9hbHBoYShjciwgMCwgMCwgbW9kZS0+ aGRpc3BsYXksCj4gbW9kZS0+dmRpc3BsYXksIDEuMCwgMS4wLCAxLjAsIDEuMCk7Cj4gKwo+ICsJ aWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZGF0YS0+cHJpbWFyeV9mYik7Cj4gKwlpZ3RfZGlz cGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5jb21taXQpOwo+ICsKPiArCXBpcGVf Y3JjID0gaWd0X3BpcGVfY3JjX25ldyhkYXRhLT5nZnhfZmQsIHBpcGUsCj4gSU5URUxfUElQRV9D UkNfU09VUkNFX0FVVE8pOwo+ICsJaWd0X3BpcGVfY3JjX3N0YXJ0KHBpcGVfY3JjKTsKPiArCWMg PSBpZ3RfcGlwZV9jcmNfZ2V0X2NyY3MocGlwZV9jcmMsIHRlc3RjcmNhbW91bnQsICZkYXRhLQo+ ID5mdWxsc2NyZWVuX2NyYyk7Cj4gKwlpZ3RfYXNzZXJ0KGM9PXRlc3RjcmNhbW91bnQpOwo+ICsJ aWd0X3BpcGVfY3JjX3N0b3AocGlwZV9jcmMpOwo+ICsJaWd0X3BpcGVfY3JjX2ZyZWUocGlwZV9j cmMpOwo+ICsKPiArCWNhaXJvX2Rlc3Ryb3koY3IpOwo+ICsJaWd0X3JlbW92ZV9mYihkYXRhLT5n ZnhfZmQsICZkYXRhLT5wcmltYXJ5X2ZiKTsKPiArfQo+ICsKPiArLyoKPiArICogZmlsbF9pbl9m YiB0ZWxsIGluIHJldHVybiB2YWx1ZSBpZiBzZWxlY3RlZCBtb2RlIHNob3VsZCBiZQo+ICsgKiBw cm9jZWVkIHRvIGNyYyBjaGVjawo+ICsgKi8KPiArc3RhdGljIGJvb2wgZmlsbF9pbl9mYihkYXRh X3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVtIHBpcGUKPiBwaXBlLAo+ICsJCQnC oGlndF9wbGFuZV90ICpwbGFuZSwgdWludDMyX3QgZm9ybWF0KQo+ICt7Cj4gKwlzaWduZWQgaSwg Yywgd3JpdGVzaXplOwo+ICsJdW5zaWduZWQgc2hvcnQqIHB0ZW1wXzE2X2J1ZjsKPiArCXVuc2ln bmVkIGludCogcHRlbXBfMzJfYnVmOwo+ICsKPiArCWNvbnN0IHN0cnVjdCB7Cj4gKwkJdWludDMy X3QJZm91cmNjOwo+ICsJCWNoYXIJCXplcm9wYWRkaW5nOwo+ICsJCWVudW0JCXsgQllURVNfUFBf MT0xLAo+ICsJCQkJwqDCoEJZVEVTX1BQXzI9MiwKPiArCQkJCcKgwqBCWVRFU19QUF80PTQsCj4g KwkJCQnCoMKgTlYxMiwKPiArI2lmIGRlZmluZWQoRFJNX0ZPUk1BVF9QMDEwKSB8fCBkZWZpbmVk KERSTV9GT1JNQVRfUDAxMikgfHwKPiBkZWZpbmVkKERSTV9GT1JNQVRfUDAxNikKPiArCQkJCcKg wqBQMDEwLAo+ICsjZW5kaWYKPiArCQkJCcKgwqBTS0lQIH0gYnBwOwo+ICsJCXVpbnQzMl90CXZh bHVlOwo+ICsJfSBmaWxsZXJzW10gPSB7Cj4gKwkJeyBEUk1fRk9STUFUX0M4LCAwLCBCWVRFU19Q UF8xLCAweGZmfSwKPiArCQl7IERSTV9GT1JNQVRfUkdCNTY1LCAwLCBCWVRFU19QUF8yLCAweGZm ZmZ9LAo+ICsJCXsgRFJNX0ZPUk1BVF9YUkdCODg4OCwgMCwgQllURVNfUFBfNCwgMHhmZmZmZmZm Zn0sCj4gKwkJeyBEUk1fRk9STUFUX1hCR1I4ODg4LCAwLCBCWVRFU19QUF80LCAweGZmZmZmZmZm fSwKPiArCj4gKwkJLyoKPiArCQnCoCogZm9sbG93aW5nIHR3byBhcmUgc2tpcHBlZCBiZWNhdXNl IGJsZW5kaW5nIHNlZW1zCj4gdG8gd29yawo+ICsJCcKgKiBpbmNvcnJlY3RseSB3aXRoIGV4Y2Vw dGlvbiBvZiBBUjI0IG9uIGN1cnNvcgo+IHBsYW5lLgo+ICsJCcKgKiBUZXN0IHN0aWxsIGNyZWF0 ZXMgdGhlIHBsYW5lcywganVzdCBmaWxsaW5nIHBsYW5lCj4gKwkJwqAqIGFuZCBnZXR0aW5nIGNy YyBpcyBza2lwcGVkLgo+ICsJCcKgKi8KPiArCQl7IERSTV9GT1JNQVRfQVJHQjg4ODgsIDAsIFNL SVAsIDB4ZmZmZmZmZmZ9LAo+ICsJCXsgRFJNX0ZPUk1BVF9BQkdSODg4OCwgMCwgU0tJUCwgMHgw MGZmZmZmZn0sCj4gKwo+ICsJCXsgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwgMCwgQllURVNfUFBf NCwKPiAweGZmZmZmZmZmfSwKPiArCQl7IERSTV9GT1JNQVRfWEJHUjIxMDEwMTAsIDAsIEJZVEVT X1BQXzQsCj4gMHhmZmZmZmZmZn0sCj4gKwo+ICsJCXsgRFJNX0ZPUk1BVF9ZVVlWLCAwLCBCWVRF U19QUF80LCAweDgwZWI4MGVifSwKPiArCQl7IERSTV9GT1JNQVRfWVZZVSwgMCwgQllURVNfUFBf NCwgMHg4MGViODBlYn0sCj4gKwkJeyBEUk1fRk9STUFUX1ZZVVksIDAsIEJZVEVTX1BQXzQsIDB4 ZWI4MGViODB9LAo+ICsJCXsgRFJNX0ZPUk1BVF9VWVZZLCAwLCBCWVRFU19QUF80LCAweGViODBl YjgwfSwKPiArCj4gKwkJLyoKPiArCQnCoCogKHNlbWktKXBsYW5hciBmb3JtYXRzCj4gKwkJwqAq Lwo+ICsJCXsgRFJNX0ZPUk1BVF9OVjEyLCAwLCBOVjEyLCAweDgwZWJ9LAo+ICsjaWZkZWYgRFJN X0ZPUk1BVF9QMDEwCj4gKwkJeyBEUk1fRk9STUFUX1AwMTAsIDAsIFAwMTAsIDB4ODAwMGViMDB9 LAo+ICsjZW5kaWYKPiArI2lmZGVmIERSTV9GT1JNQVRfUDAxMgo+ICsJCXsgRFJNX0ZPUk1BVF9Q MDEyLCAwLCBQMDEwLCAweDgwMDBlYjAwfSwKPiArI2VuZGlmCj4gKyNpZmRlZiBEUk1fRk9STUFU X1AwMTYKPiArCQl7IERSTV9GT1JNQVRfUDAxNiwgMCwgUDAxMCwgMHg4MDAwZWIwMH0sCj4gKyNl bmRpZgo+ICsJCXsgMCwgMCwgMCwgMCB9Cj4gKwl9Owo+ICsKPiArCWZvciggaSA9IDA7IGZpbGxl cnNbaV0uZm91cmNjICE9IDA7IGkrKyApIHsKPiArCQlpZiggZmlsbGVyc1tpXS5mb3VyY2MgPT0g Zm9ybWF0ICkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJc3dpdGNoIChmaWxsZXJzW2ldLmJw cCkgewo+ICsJY2FzZSBCWVRFU19QUF80Ogo+ICsJCXB0ZW1wXzMyX2J1ZiA9ICh1bnNpZ25lZCBp bnQqKWRhdGEtPmJ1ZjsKPiArCQlmb3IgKGMgPSAwOyBjIDwgZGF0YS0+c2l6ZS80OyBjKyspCj4g KwkJCXB0ZW1wXzMyX2J1ZltjXSA9IGZpbGxlcnNbaV0udmFsdWU7Cj4gKwkJd3JpdGVzaXplID0g ZGF0YS0+c2l6ZTsKPiArCQlicmVhazsKPiArCWNhc2UgQllURVNfUFBfMjoKPiArCQlwdGVtcF8x Nl9idWYgPSAodW5zaWduZWQgc2hvcnQqKWRhdGEtPmJ1ZjsKPiArCQlmb3IgKGMgPSAwOyBjIDwg ZGF0YS0+c2l6ZS8yOyBjKyspCj4gKwkJCXB0ZW1wXzE2X2J1ZltjXSA9ICh1bnNpZ25lZAo+IHNo b3J0KWZpbGxlcnNbaV0udmFsdWU7Cj4gKwkJd3JpdGVzaXplID0gZGF0YS0+c2l6ZTsKPiArCQli cmVhazsKPiArCWNhc2UgQllURVNfUFBfMToKPiArCQltZW1zZXQoKHZvaWQqKWRhdGEtPmJ1Ziwg ZmlsbGVyc1tpXS52YWx1ZSwgZGF0YS0KPiA+c2l6ZSk7Cj4gKwkJd3JpdGVzaXplID0gZGF0YS0+ c2l6ZTsKPiArCQlicmVhazsKPiArCWNhc2UgTlYxMjoKPiArCQltZW1zZXQoKHZvaWQqKWRhdGEt PmJ1ZiwgZmlsbGVyc1tpXS52YWx1ZSYweGZmLAo+ICsJCcKgwqDCoMKgwqDCoMKgZGF0YS0+c2l6 ZSk7Cj4gKwo+ICsJCW1lbXNldCgodm9pZCopKGRhdGEtPmJ1ZitkYXRhLT5zaXplKSwKPiArCQnC oMKgwqDCoMKgwqDCoChmaWxsZXJzW2ldLnZhbHVlPj44KSYweGZmLCBkYXRhLT5zaXplLzIpOwo+ ICsKPiArCQl3cml0ZXNpemUgPSBkYXRhLT5zaXplK2RhdGEtPnNpemUvMjsKPiArCQlicmVhazsK PiArI2lmIGRlZmluZWQoRFJNX0ZPUk1BVF9QMDEwKSB8fCBkZWZpbmVkKERSTV9GT1JNQVRfUDAx MikgfHwKPiBkZWZpbmVkKERSTV9GT1JNQVRfUDAxNikKPiArCWNhc2UgUDAxMDoKPiArCQlwdGVt cF8xNl9idWYgPSAodW5zaWduZWQgc2hvcnQqKWRhdGEtPmJ1ZjsKPiArCQlmb3IgKGMgPSAwOyBj IDwgZGF0YS0+c2l6ZS8yOyBjKyspCj4gKwkJCXB0ZW1wXzE2X2J1ZltjXSA9ICh1bnNpZ25lZAo+ IHNob3J0KWZpbGxlcnNbaV0udmFsdWUmMHhmZmZmOwo+ICsKPiArCQlwdGVtcF8xNl9idWYgPSAo dW5zaWduZWQgc2hvcnQqKShkYXRhLT5idWYrZGF0YS0KPiA+c2l6ZSk7Cj4gKwkJZm9yIChjID0g MDsgYyA8IGRhdGEtPnNpemUvMjsgYysrKQo+ICsJCQlwdGVtcF8xNl9idWZbY10gPSAodW5zaWdu ZWQKPiBzaG9ydCkoZmlsbGVyc1tpXS52YWx1ZT4+MTYpJjB4ZmZmZjsKPiArCj4gKwkJd3JpdGVz aXplID0gZGF0YS0+c2l6ZStkYXRhLT5zaXplLzI7Cj4gKwkJYnJlYWs7Cj4gKyNlbmRpZgo+ICsJ Y2FzZSBTS0lQOgo+ICsJCWlmIChmaWxsZXJzW2ldLmZvdXJjYyA9PSBEUk1fRk9STUFUX0FSR0I4 ODg4ICYmCj4gKwkJwqDCoMKgwqBwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1Ip IHsKPiArCQkvKgo+ICsJCcKgKiBzcGVjaWFsIGZvciBjdXJzb3IgcGxhbmUgd2hlcmUgYmxlbmRp bmcgd29ya3MKPiBjb3JyZWN0bHkuCj4gKwkJwqAqLwo+ICsJCQlwdGVtcF8zMl9idWYgPSAodW5z aWduZWQgaW50KilkYXRhLT5idWY7Cj4gKwkJCWZvciAoYyA9IDA7IGMgPCBkYXRhLT5zaXplLzQ7 IGMrKykKPiArCQkJCXB0ZW1wXzMyX2J1ZltjXSA9IGZpbGxlcnNbaV0udmFsdWU7Cj4gKwkJCXdy aXRlc2l6ZSA9IGRhdGEtPnNpemU7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQlpZ3RfaW5mbygi Rm9ybWF0ICVzIENSQyBjb21wYXJpc29uIHNraXBwZWQgYnkKPiBkZXNpZ24uXG4iLAo+ICsJCQnC oChjaGFyKikmZmlsbGVyc1tpXS5mb3VyY2MpOwo+ICsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwlk ZWZhdWx0Ogo+ICsJCWlndF9pbmZvKCJVbnN1cHBvcnRlZCBtb2RlIGZvciB0ZXN0ICVzXG4iLAo+ ICsJCQnCoChjaGFyKikmZmlsbGVyc1tpXS5mb3VyY2MpOwo+ICsJCXJldHVybiBmYWxzZTsKPiAr CX0KPiArCj4gKwlkb193cml0ZShkYXRhLT5nZnhfZmQsIGRhdGEtPmdlbV9oYW5kbGUsICh2b2lk KilkYXRhLT5idWYsCj4gMCwKPiArCQnCoHdyaXRlc2l6ZSk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7 Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMgYm9vbCBzZXR1cF9mYihkYXRhX3QgKmRhdGEsIGlndF9v dXRwdXRfdCAqb3V0cHV0LCBlbnVtIHBpcGUKPiBwaXBlLAo+ICsJCcKgwqDCoMKgwqBpZ3RfcGxh bmVfdCAqcGxhbmUsIHVpbnQzMl90IGZvcm1hdCkKPiArewo+ICsJZHJtTW9kZU1vZGVJbmZvICpt b2RlOwo+ICsJdWludDY0X3QgdywgaDsKPiArCXNpZ25lZCByZXQsIGdlbXNpemUgPSAwOwo+ICsJ dW5zaWduZWQgdGlsZV93aWR0aCwgdGlsZV9oZWlnaHQsIHN0cmlkZTsKPiArCXVpbnQzMl90IG9m ZnNldHNbNF0gPSB7fTsKPiArCXVpbnQzMl90KiBvZmZzZXRwb2ludGVyID0gTlVMTDsKPiArCj4g Kwltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+ICsJaWYgKHBsYW5lLT50eXBl ICE9IERSTV9QTEFORV9UWVBFX0NVUlNPUikgewo+ICsJCXcgPSBtb2RlLT5oZGlzcGxheSA7Cj4g KwkJaCA9IG1vZGUtPnZkaXNwbGF5Owo+ICsJfSBlbHNlIHsKPiArCQlkcm1HZXRDYXAoZGF0YS0+ Z2Z4X2ZkLCBEUk1fQ0FQX0NVUlNPUl9XSURUSCwgJncpOwo+ICsJCWRybUdldENhcChkYXRhLT5n ZnhfZmQsIERSTV9DQVBfQ1VSU09SX0hFSUdIVCwgJmgpOwo+ICsJfQo+ICsKPiArCXN3aXRjaChm b3JtYXQpIHsKPiArI2lmZGVmIERSTV9GT1JNQVRfUDAxMAo+ICsJY2FzZSBEUk1fRk9STUFUX1Aw MTA6Cj4gKyNlbmRpZgo+ICsjaWZkZWYgRFJNX0ZPUk1BVF9QMDEyCj4gKwljYXNlIERSTV9GT1JN QVRfUDAxMjoKPiArI2VuZGlmCj4gKyNpZmRlZiBEUk1fRk9STUFUX1AwMTYKPiArCWNhc2UgRFJN X0ZPUk1BVF9QMDE2Ogo+ICsjZW5kaWYKPiArI2lmIGRlZmluZWQoRFJNX0ZPUk1BVF9QMDEwKSB8 fCBkZWZpbmVkKERSTV9GT1JNQVRfUDAxMikgfHwKPiBkZWZpbmVkKERSTV9GT1JNQVRfUDAxNikK PiArCQl0aWxlX3dpZHRoID0gNTEyOwo+ICsJCXRpbGVfaGVpZ2h0ID0gODsKPiArCj4gKwkJc3Ry aWRlID0gQUxJR04odyoyLCB0aWxlX3dpZHRoKTsKPiArCQlkYXRhLT5zaXplID0gb2Zmc2V0c1sx XSA9IHN0cmlkZSpBTElHTihoLAo+IHRpbGVfaGVpZ2h0KTsKPiArCj4gKwkJZ2Vtc2l6ZSA9IGRh dGEtPnNpemUqMjsKPiArCQlvZmZzZXRwb2ludGVyID0gKHVpbnQzMl90Kikmb2Zmc2V0czsKPiAr CQlicmVhazsKPiArI2VuZGlmCj4gKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKPiArCQl0aWxlX3dp ZHRoID0gNTEyOwo+ICsJCXRpbGVfaGVpZ2h0ID0gODsKVGhlIG1pbmltdW0gaGVpZ2h0IGlzIDE2 IGZvciBOVjEyLiBUaGlzIGhhcyBiZWVuIGRpc2N1c3NlZCBpbiB0aGlzCnBhdGNoCgpodHRwczov L3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvcGF0Y2gvMjA4MTcxLwoKCj4gKwo+ICsJCXN0cmlk ZSA9IEFMSUdOKHcsIHRpbGVfd2lkdGgpOwo+ICsJCWRhdGEtPnNpemUgPSBvZmZzZXRzWzFdID0g c3RyaWRlKkFMSUdOKGgsCj4gdGlsZV9oZWlnaHQpOwo+ICsKPiArCQlnZW1zaXplID0gZGF0YS0+ c2l6ZSoyOwo+ICsJCW9mZnNldHBvaW50ZXIgPSAodWludDMyX3QqKSZvZmZzZXRzOwo+ICsJCWJy ZWFrOwo+ICsJZGVmYXVsdDoKPiArCQl0aWxlX3dpZHRoID0gNTEyOwo+ICsJCXRpbGVfaGVpZ2h0 ID0gODsKPiArCj4gKwkJLyoKPiArCQnCoCogdyo0IHNvIHRoZXJlJ3MgZW5vdWdoIHNwYWNlCj4g KwkJwqAqLwo+ICsJCXN0cmlkZSA9IEFMSUdOKHcqNCwgdGlsZV93aWR0aCk7Cj4gKwkJZGF0YS0+ c2l6ZSA9IHN0cmlkZSpBTElHTihoLCB0aWxlX2hlaWdodCk7Cj4gKwkJb2Zmc2V0cG9pbnRlciA9 IE5VTEw7Cj4gKwo+ICsJCWdlbXNpemUgPSBkYXRhLT5zaXplOwo+ICsJCWJyZWFrOwo+ICsJfQo+ ICsKPiArCWRhdGEtPmdlbV9oYW5kbGUgPSBnZW1fY3JlYXRlKGRhdGEtPmdmeF9mZCwgZ2Vtc2l6 ZSk7Cj4gKwlyZXQgPSBfX2dlbV9zZXRfdGlsaW5nKGRhdGEtPmdmeF9mZCwgZGF0YS0+Z2VtX2hh bmRsZSwKPiArCQkJwqDCoMKgwqDCoMKgwqBJOTE1X1RJTElOR19OT05FLCBzdHJpZGUpOwo+ICsK PiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwlyZXQgPSBfX2ttc19hZGRmYihkYXRh LT5nZnhfZmQsIGRhdGEtPmdlbV9oYW5kbGUsIHcsIGgsCj4gKwkJCcKgwqBzdHJpZGUsIGZvcm1h dCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKPiArCQkJwqDCoG9mZnNldHBvaW50ZXIsCj4g TE9DQUxfRFJNX01PREVfRkJfTU9ESUZJRVJTLAo+ICsJCQnCoMKgJmRhdGEtPmZiLmZiX2lkKTsK PiArCj4gKwlpZihyZXQgPCAwKSB7Cj4gKwkJaWd0X2luZm8oIkNyZWF0aW5nIGZiIGZvciBmb3Jt YXQgJXMgZmFpbGVkLCByZXR1cm4KPiBjb2RlICVkXG4iLAo+ICsJCQnCoChjaGFyKikmZGF0YS0+ Zm9ybWF0X25hbWUsIHJldCk7Cj4gKwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlk YXRhLT5mYi53aWR0aCA9IHc7Cj4gKwlkYXRhLT5mYi5oZWlnaHQgPSBoOwo+ICsJZGF0YS0+ZmIu Z2VtX2hhbmRsZSA9IGRhdGEtPmdlbV9oYW5kbGU7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsK PiArCj4gK3N0YXRpYyB2b2lkIHJlbW92ZV9mYihkYXRhX3QqIGRhdGEsIGlndF9vdXRwdXRfdCog b3V0cHV0LAo+IGlndF9wbGFuZV90KiBwbGFuZSkKPiArewo+ICsJaWYgKGRhdGEtPnNlcGFyYXRl cHJpbWFyeXBsYW5lKSB7Cj4gKwkJaWd0X3BsYW5lX3QqIHByaW1hcnkgPQo+IGlndF9vdXRwdXRf Z2V0X3BsYW5lX3R5cGUob3V0cHV0LAo+ICsJCQkJCQkJCcKgRFJNCj4gX1BMQU5FX1RZUEVfUFJJ TUFSWSk7Cj4gKwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKPiArCQlpZ3RfcmVt b3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEtPnByaW1hcnlfZmIpOwo+ICsJCWlndF9kaXNwbGF5 X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIGRhdGEtPmNvbW1pdCk7Cj4gKwkJZGF0YS0+c2VwYXJh dGVwcmltYXJ5cGxhbmUgPSBmYWxzZTsKPiArCX0KPiArCj4gKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEt PmdmeF9mZCwgJmRhdGEtPmZiKTsKPiArCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3Bs YXksIGRhdGEtPmNvbW1pdCk7Cj4gKwlmcmVlKGRhdGEtPmJ1Zik7Cj4gKwlkYXRhLT5idWYgPSBO VUxMOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIGJvb2wgcHJlcGFyZV9jcnRjKGRhdGFfdCAqZGF0 YSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0KPiBwaXBlIHBpcGUsCj4gKwkJCcKgaWd0X3Bs YW5lX3QgKnBsYW5lLCB1aW50MzJfdCBmb3JtYXQpCj4gK3sKPiArCWRybU1vZGVNb2RlSW5mbyAq bW9kZTsKPiArCWlndF9wbGFuZV90ICpwcmltYXJ5Owo+ICsKPiArCWlmIChwbGFuZS0+dHlwZSAh PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKSB7Cj4gKwkJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21v ZGUob3V0cHV0KTsKPiArCQlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmdmeF9mZCwKPiArCQkJ CcKgwqDCoMKgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAo+ICsJCQkJwqDCoMKgwqBE Uk1fRk9STUFUX1hSR0I4ODg4LAo+ICsJCQkJwqDCoMKgwqBMT0NBTF9EUk1fRk9STUFUX01PRF9O T05FLAo+ICsJCQkJwqDCoMKgwqAwLCAwLCAwLAo+ICsJCQkJwqDCoMKgwqAmZGF0YS0+cHJpbWFy eV9mYik7Cj4gKwo+ICsJCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91dHB1 dCwKPiArCQkJCQkJwqDCoMKgwqBEUk1fUExBTkVfVFlQRV9QCj4gUklNQVJZKTsKPiArCj4gKwkJ aWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZGF0YS0+cHJpbWFyeV9mYik7Cj4gKwkJaWd0X2Rp c3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0+Y29tbWl0KTsKPiArCQlkYXRhLT5z ZXBhcmF0ZXByaW1hcnlwbGFuZSA9IHRydWU7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFzZXR1cF9mYihk YXRhLCBvdXRwdXQsIHBpcGUsIHBsYW5lLCBmb3JtYXQpKQo+ICsJCXJldHVybiBmYWxzZTsKPiAr Cj4gKwlpZiAoZGF0YS0+YnVmICE9IE5VTEwpIHsKPiArCQlmcmVlKCh2b2lkKilkYXRhLT5idWYp Owo+ICsJCWRhdGEtPmJ1ZiA9IE5VTEw7Cj4gKwl9Cj4gKwo+ICsJZGF0YS0+YnVmID0gKHVuc2ln bmVkIGNoYXIqKWNhbGxvYyhkYXRhLT5zaXplKjIsIDEpOwo+ICsJcmV0dXJuIHRydWU7Cj4gK30K PiArCj4gKwo+ICtzdGF0aWMgaW50Cj4gK3Rlc3Rfb25lX21vZGUoZGF0YV90KiBkYXRhLCBpZ3Rf b3V0cHV0X3QgKm91dHB1dCwgaWd0X3BsYW5lX3QqCj4gcGxhbmUsCj4gKwnCoMKgwqDCoMKgwqBl bnVtIHBpcGUgcGlwZSwgaW50IG1vZGUpCj4gK3sKPiArCj4gKwlpZ3RfY3JjX3QgKmNyY3MgPSBO VUxMOwo+ICsJaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOwo+ICsJc2lnbmVkIGNvdW50LCByVmFs ID0gMDsKPiArCWJvb2wgZG9fY3JjOwo+ICsJY2hhciogY3JjY29tcGFyZVsyXTsKPiArCj4gKwlp ZiAocHJlcGFyZV9jcnRjKGRhdGEsIG91dHB1dCwgcGlwZSwgcGxhbmUsIG1vZGUpKXsKPiArCj4g KwkJLyoKPiArCQnCoCogd2UgaGF2ZSBmYiBmcm9tIHByZXBhcmVfY3J0YyguLikgc28gbm93IGZp bGwgaXQKPiBpbgo+ICsJCcKgKiBjb3JyZWN0bHkgaW4gZmlsbF9pbl9mYiguLikKPiArCQnCoCov Cj4gKwkJZG9fY3JjID0gZmlsbF9pbl9mYihkYXRhLCBvdXRwdXQsIHBpcGUsIHBsYW5lLAo+IG1v ZGUpOwo+ICsKPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmIpOwo+ICsJCWln dF9mYl9zZXRfc2l6ZSgmZGF0YS0+ZmIsIHBsYW5lLCBkYXRhLT5mYi53aWR0aCwKPiBkYXRhLT5m Yi5oZWlnaHQpOwo+ICsJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgZGF0YS0+ZmIud2lkdGgs IGRhdGEtCj4gPmZiLmhlaWdodCk7Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlvbigmZGF0YS0+ZmIs IHBsYW5lLCAwLCAwKTsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBk YXRhLT5jb21taXQpOwo+ICsKPiArCQlpZiAoZG9fY3JjKSB7Cj4gKwkJCXBpcGVfY3JjID0gaWd0 X3BpcGVfY3JjX25ldyhkYXRhLT5nZnhfZmQsCj4gcGlwZSwKPiArCQkJCQkJwqDCoMKgwqBJTlRF TF9QSVBFX0NSQ19TCj4gT1VSQ0VfQVVUTyk7Cj4gKwo+ICsJCQlpZ3RfcGlwZV9jcmNfc3RhcnQo cGlwZV9jcmMpOwo+ICsKPiArCQkJY291bnQgPSBpZ3RfcGlwZV9jcmNfZ2V0X2NyY3MocGlwZV9j cmMsCj4gdGVzdGNyY2Ftb3VudCwgJmNyY3MpOwo+ICsJCQlpZ3RfYXNzZXJ0KCBjb3VudD09dGVz dGNyY2Ftb3VudCApOwo+ICsKPiArCQkJaWd0X3BpcGVfY3JjX3N0b3AocGlwZV9jcmMpOwo+ICsJ CQlpZ3RfcGlwZV9jcmNfZnJlZShwaXBlX2NyYyk7Cj4gKwo+ICsJCQlpZiAocGxhbmUtPnR5cGUg IT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKSB7Cj4gKwkJCQlpZgo+ICghaWd0X2NoZWNrX2NyY19l cXVhbCgmY3Jjc1t0ZXN0Y3JjYW1vdW50LTFdLAo+ICsJCQkJCSZkYXRhLQo+ID5mdWxsc2NyZWVu X2NyY1t0ZXN0Y3JjYW1vdW50LTFdKSkgewo+ICsJCQkJCWNyY2NvbXBhcmVbMF0gPQo+IGlndF9j cmNfdG9fc3RyaW5nKCZjcmNzW3Rlc3RjcmNhbW91bnQtMV0pOwo+ICsJCQkJCWNyY2NvbXBhcmVb MV0gPQo+IGlndF9jcmNfdG9fc3RyaW5nKCZkYXRhLT5mdWxsc2NyZWVuX2NyY1t0ZXN0Y3JjYW1v dW50LTFdKTsKPiArCQkJCQlpZ3Rfd2FybigiY3JjIG1pc21hdGNoLgo+IHRhcmdldCAlLjhzLCBy ZXN1bHQgJS44cy5cbiIsIGNyY2NvbXBhcmVbMF0sIGNyY2NvbXBhcmVbMV0pOwo+ICsJCQkJCWZy ZWUoY3JjY29tcGFyZVswXSk7Cj4gKwkJCQkJZnJlZShjcmNjb21wYXJlWzFdKTsKPiArCQkJCQly VmFsKys7Cj4gKwkJCQl9Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlpZgo+ICghaWd0X2NoZWNrX2Ny Y19lcXVhbCgmY3Jjc1t0ZXN0Y3JjYW1vdW50LTFdLAo+ICsJCQkJCSZkYXRhLQo+ID5jdXJzb3Jf Y3JjW3Rlc3RjcmNhbW91bnQtMV0pKSB7Cj4gKwkJCQkJY3JjY29tcGFyZVswXSA9Cj4gaWd0X2Ny Y190b19zdHJpbmcoJmNyY3NbdGVzdGNyY2Ftb3VudC0xXSk7Cj4gKwkJCQkJY3JjY29tcGFyZVsx XSA9Cj4gaWd0X2NyY190b19zdHJpbmcoJmRhdGEtPmN1cnNvcl9jcmNbdGVzdGNyY2Ftb3VudC0x XSk7Cj4gKwkJCQkJaWd0X3dhcm4oImNyYyBtaXNtYXRjaC4KPiB0YXJnZXQgJS44cywgcmVzdWx0 ICUuOHMuXG4iLCBjcmNjb21wYXJlWzBdLCBjcmNjb21wYXJlWzFdKTsKPiArCQkJCQlmcmVlKGNy Y2NvbXBhcmVbMF0pOwo+ICsJCQkJCWZyZWUoY3JjY29tcGFyZVsxXSk7Cj4gKwkJCQkJclZhbCsr Owo+ICsJCQkJfQo+ICsJCQl9Cj4gKwkJCWZyZWUoY3Jjcyk7Cj4gKwkJfQo+ICsJCXJlbW92ZV9m YihkYXRhLCBvdXRwdXQsIHBsYW5lKTsKPiArCQlyZXR1cm4gclZhbDsKPiArCX0KPiArCXJldHVy biAxOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9hdmFpbGFibGVfbW9kZXMo ZGF0YV90KiBkYXRhKQo+ICt7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiArCWlndF9wbGFu ZV90ICpwbGFuZTsKPiArCWludCogdTMycHRyX2Zvcm1hdHM7Cj4gKwlpbnQgbW9kZWluZGV4Owo+ ICsJZW51bSBwaXBlIHBpcGU7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfZ2V0X3BsYW5lIG9uZV9wbGFu ZSA9IHt9Owo+ICsJaW50IGludmFsaWRzID0gMDsKPiArCj4gKwljaGFyIHBsYW5ldHlwZVszXVs4 XSA9IHsiT1ZFUkxBWVwwIiwgIlBSSU1BUllcMCIsICJDVVJTT1JcMCIKPiB9Owo+ICsKPiArCWZv cl9lYWNoX3BpcGVfd2l0aF92YWxpZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIHBpcGUsCj4gb3V0 cHV0KSB7Cj4gKwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ICsKPiArCQkv Kgo+ICsJCcKgKiByZWdlbmVyYXRlIGNvbXBhcmlzb24gY3JjcyBmb3IgZWFjaCBwaXBlIGp1c3Qg aW4KPiBjYXNlLgo+ICsJCcKgKi8KPiArCQlnZW5lcmF0ZV9jb21wYXJpc29uX2NyY19saXN0KGRh dGEsIG91dHB1dCwgcGlwZSk7Cj4gKwo+ICsJCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoJmRhdGEt PmRpc3BsYXksIHBpcGUsIHBsYW5lKQo+IHsKPiArCQkJbWVtc2V0KCh2b2lkKikmb25lX3BsYW5l LCAwLAo+ICsJCQnCoMKgwqDCoMKgwqDCoHNpemVvZihzdHJ1Y3QgZHJtX21vZGVfZ2V0X3BsYW5l KSk7Cj4gKwkJCW9uZV9wbGFuZS5wbGFuZV9pZCA9IHBsYW5lLT5kcm1fcGxhbmUtCj4gPnBsYW5l X2lkOwo+ICsJCQkvKgo+ICsJCQnCoCogZmlyc3QgY2FsbCB0byBrbm93IGhvdyBtdWNoIHNwYWNl IG5lZWRlZCwKPiArCQkJwqAqIHNlY29uZCBjYWxsIHRvIGdldCBsaXN0IG9mIHN1cHBvcnRlZAo+ IG1vZGVzLgo+ICsJCQnCoCovCj4gKwkJCWlndF9pb2N0bChkYXRhLT5nZnhfZmQsCj4gRFJNX0lP Q1RMX01PREVfR0VUUExBTkUsCj4gKwkJCQnCoMKgJm9uZV9wbGFuZSk7Cj4gKwkJCWlndF9hc3Nl cnQob25lX3BsYW5lLmNvdW50X2Zvcm1hdF90eXBlcyA+Cj4gMCk7Cj4gKwo+ICsJCQl1MzJwdHJf Zm9ybWF0cyA9Cj4gKGludCopY2FsbG9jKG9uZV9wbGFuZS5jb3VudF9mb3JtYXRfdHlwZXMsCj4g KwkJCQkJCcKgwqDCoMKgwqDCoHNpemVvZihpbnQpKTsKPiArCj4gKwkJCW9uZV9wbGFuZS5mb3Jt YXRfdHlwZV9wdHIgPQo+IChfX3U2NCl1MzJwdHJfZm9ybWF0czsKPiArCQkJaWd0X2lvY3RsKGRh dGEtPmdmeF9mZCwKPiBEUk1fSU9DVExfTU9ERV9HRVRQTEFORSwKPiArCQkJCcKgwqAmb25lX3Bs YW5lKTsKPiArCj4gKwkJCWZvciAobW9kZWluZGV4ID0gMDsKPiArCQkJwqDCoMKgwqDCoG1vZGVp bmRleCA8Cj4gb25lX3BsYW5lLmNvdW50X2Zvcm1hdF90eXBlczsKPiArCQkJwqDCoMKgwqDCoG1v ZGVpbmRleCsrKSB7Cj4gKwkJCQlkYXRhLT5mb3JtYXRfbmFtZVswXSA9Cj4gdTMycHRyX2Zvcm1h dHNbbW9kZWluZGV4XSYweGZmOwo+ICsJCQkJZGF0YS0+Zm9ybWF0X25hbWVbMV0gPQo+ICh1MzJw dHJfZm9ybWF0c1ttb2RlaW5kZXhdPj44KSYweGZmOwo+ICsJCQkJZGF0YS0+Zm9ybWF0X25hbWVb Ml0gPQo+ICh1MzJwdHJfZm9ybWF0c1ttb2RlaW5kZXhdPj4xNikmMHhmZjsKPiArCQkJCWRhdGEt PmZvcm1hdF9uYW1lWzNdID0KPiAodTMycHRyX2Zvcm1hdHNbbW9kZWluZGV4XT4+MjQpJjB4ZmY7 Cj4gKwo+ICsJCQkJaWd0X2luZm8oIlRlc3RpbmcgY29ubmVjdG9yICVzIHVzaW5nCj4gcGlwZSAl cyIgXAo+ICsJCQkJCcKgIiBwbGFuZSBpbmRleCAlZCB0eXBlICVzCj4gbW9kZSAlc1xuIiwKPiAr CQkJCQnCoGlndF9vdXRwdXRfbmFtZShvdXRwdXQpLAo+ICsJCQkJCcKga21zdGVzdF9waXBlX25h bWUocGlwZSksCj4gKwkJCQkJwqBwbGFuZS0+aW5kZXgsCj4gKwkJCQkJwqBwbGFuZXR5cGVbcGxh bmUtPnR5cGVdLAo+ICsJCQkJCcKgKGNoYXIqKSZkYXRhLT5mb3JtYXRfbmFtZSk7Cj4gKwo+ICsJ CQkJaW52YWxpZHMgKz0gdGVzdF9vbmVfbW9kZShkYXRhLAo+IG91dHB1dCwKPiArCQkJCQkJCcKg wqBwbGFuZSwKPiBwaXBlLAo+ICsJCQkJCQkJwqDCoHUzMnB0cl9mb3IKPiBtYXRzW21vZGVpbmRl eF0pOwo+ICsJCQl9Cj4gKwkJCWZyZWUoKHZvaWQqKW9uZV9wbGFuZS5mb3JtYXRfdHlwZV9wdHIp Owo+ICsJCX0KPiArCQlmcmVlKGRhdGEtPmN1cnNvcl9jcmMpOwo+ICsJCWZyZWUoZGF0YS0+ZnVs bHNjcmVlbl9jcmMpOwo+ICsJfQo+ICsJaWd0X2Fzc2VydChpbnZhbGlkcyA9PSAwKTsKPiArfQo+ ICsKPiArCj4gK2lndF9tYWluCj4gK3sKPiArCWRhdGFfdCBkYXRhID0ge307Cj4gKwo+ICsJaWd0 X3NraXBfb25fc2ltdWxhdGlvbigpOwo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlkYXRhLmdm eF9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0lOVEVMKTsKPiArCQlrbXN0ZXN0 X3NldF92dF9ncmFwaGljc19tb2RlKCk7Cj4gKwo+ICsJCWlndF9kaXNwbGF5X2luaXQoJmRhdGEu ZGlzcGxheSwgZGF0YS5nZnhfZmQpOwo+ICsKPiArCQlpZ3RfcmVxdWlyZV9waXBlX2NyYyhkYXRh LmdmeF9mZCk7Cj4gKwl9Cj4gKwo+ICsJZGF0YS5jb21taXQgPSBkYXRhLmRpc3BsYXkuaXNfYXRv bWljID8gQ09NTUlUX0FUT01JQyA6Cj4gQ09NTUlUX0xFR0FDWTsKPiArCj4gKwlpZ3Rfc3VidGVz dCgiYXZhaWxhYmxlX21vZGVfdGVzdF9jcmMiKSB7Cj4gKwkJdGVzdF9hdmFpbGFibGVfbW9kZXMo JmRhdGEpOwo+ICsJfQo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlrbXN0ZXN0X3Jlc3RvcmVf dnRfbW9kZSgpOwo+ICsJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7Cj4gKwl9Cj4g K30KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAo+ IGluZGV4IDIyZTRhYzkuLjZhNWJkOTYgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQK PiArKysgYi90ZXN0cy9tZXNvbi5idWlsZAo+IEBAIC0xNTAsNiArMTUwLDcgQEAgdGVzdF9wcm9n cyA9IFsKPiDCoAkna21zX2F0b21pYycsCj4gwqAJJ2ttc19hdG9taWNfaW50ZXJydXB0aWJsZScs Cj4gwqAJJ2ttc19hdG9taWNfdHJhbnNpdGlvbicsCj4gKwkna21zX2F2YWlsYWJsZV9tb2Rlc19j cmMnLAo+IMKgCSdrbXNfYnVzeScsCj4gwqAJJ2ttc19jY3MnLAo+IMKgCSdrbXNfY2h2X2N1cnNv cl9mYWlsJywKLS0gCk1pa2EgS2Fob2xhIC0gSW50ZWwgT1RDCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2lndC1kZXYK