From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Bradford Subject: Re: [PATCH] tests/kms_color:Color IGT Date: Fri, 11 Dec 2015 15:35:36 +0000 Message-ID: <1449848136.10248.36.camel@intel.com> References: <1449829902-21924-1-git-send-email-dhanya.p.r@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id CAE6E89F47 for ; Fri, 11 Dec 2015 07:35:39 -0800 (PST) In-Reply-To: <1449829902-21924-1-git-send-email-dhanya.p.r@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dhanya Pillai , intel-gfx@lists.freedesktop.org Cc: jesse.barnes@intel.com List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCAyMDE1LTEyLTExIGF0IDE2OjAxICswNTMwLCBEaGFueWEgUGlsbGFpIHdyb3RlOgo+ IEZyb206IERoYW55YSA8ZGhhbnlhLnAuckBpbnRlbC5jb20+Cj4gCj4gVGhpcyBwYXRjaCB3aWxs IHZlcmlmeSBjb2xvciBjb3JyZWN0aW9uIGNhcGFiaWxpdHkgb2YgYSBkaXNwbGF5Cj4gZHJpdmVy Lgo+IEdhbW1hL0NTQy9EZS1nYW1tYSBmb3IgU0tML0JYVCBzdXBwb3J0ZWQuCj4gCj4gU2lnbmVk LW9mZi1ieTogRGhhbnlhIDxkaGFueWEucC5yQGludGVsLmNvbT4KPiAtLS0KPiDCoHRlc3RzLy5n aXRpZ25vcmXCoMKgwqDCoMKgwqDCoHzCoMKgwqAxICsKPiDCoHRlc3RzL01ha2VmaWxlLnNvdXJj ZXMgfMKgwqDCoDEgKwo+IMKgdGVzdHMva21zX2NvbG9yLmPCoMKgwqDCoMKgwqB8IDY4NAo+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiDCoDMgZmls ZXMgY2hhbmdlZCwgNjg2IGluc2VydGlvbnMoKykKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0 cy9rbXNfY29sb3IuYwo+IAo+IGRpZmYgLS1naXQgYS90ZXN0cy8uZ2l0aWdub3JlIGIvdGVzdHMv LmdpdGlnbm9yZQo+IGluZGV4IDgwYWY5YTcuLjU4Yzc5ZTIgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMv LmdpdGlnbm9yZQo+ICsrKyBiL3Rlc3RzLy5naXRpZ25vcmUKPiBAQCAtMTI3LDYgKzEyNyw3IEBA IGdlbjdfZm9yY2V3YWtlX210Cj4gwqBrbXNfM2QKPiDCoGttc19hZGRmYl9iYXNpYwo+IMKga21z X2F0b21pYwo+ICtrbXNfY29sb3IKPiDCoGttc19jcnRjX2JhY2tncm91bmRfY29sb3IKPiDCoGtt c19jdXJzb3JfY3JjCj4gwqBrbXNfZHJhd19jcmMKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZp bGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCA4ZmIyZGU4Li45MDZj MTRmIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi90ZXN0cy9N YWtlZmlsZS5zb3VyY2VzCj4gQEAgLTY0LDYgKzY0LDcgQEAgVEVTVFNfcHJvZ3NfTSA9IFwKPiDC oAlnZW1fd3JpdGVfcmVhZF9yaW5nX3N3aXRjaCBcCj4gwqAJa21zX2FkZGZiX2Jhc2ljIFwKPiDC oAlrbXNfYXRvbWljIFwKPiArCWttc19jb2xvciBcCj4gwqAJa21zX2N1cnNvcl9jcmMgXAo+IMKg CWttc19kcmF3X2NyYyBcCj4gwqAJa21zX2ZiY19jcmMgXAo+IGRpZmYgLS1naXQgYS90ZXN0cy9r bXNfY29sb3IuYyBiL3Rlc3RzL2ttc19jb2xvci5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwLi5iNWQxOTliCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rlc3RzL2ttc19j b2xvci5jCj4gQEAgLTAsMCArMSw2ODQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTUg SW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArwqDCoCogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPiBvYnRhaW5pbmcgYQo+ICsgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlCj4gIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0Cj4gbGltaXRhdGlvbgo+ICsgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwKPiBz dWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbQo+IHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+IGNvbmRpdGlvbnM6Cj4gKyAq Cj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcKPiB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKPiBwb3J0aW9ucyBvZiB0aGUKPiArICog U29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+IEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+IE1FUkNIQU5U QUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC7CoMKgSU4gTk8KPiBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwo+IE9SIE9U SEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLAo+IEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+IE9USEVSIERFQUxJTkdTCj4g KyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bWF0aC5o Pgo+ICsjaW5jbHVkZSAiZHJtdGVzdC5oIgo+ICsjaW5jbHVkZSAiZHJtLmgiCj4gKyNpbmNsdWRl ICJpZ3RfZGVidWdmcy5oIgo+ICsjaW5jbHVkZSAiaWd0X2ttcy5oIgo+ICsjaW5jbHVkZSAiaWd0 X2NvcmUuaCIKPiArI2luY2x1ZGUgImludGVsX2lvLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9jaGlw c2V0LmgiCj4gKyNpbmNsdWRlICJpZ3RfYXV4LmgiCj4gKyNpbmNsdWRlPHVuaXN0ZC5oPgo+ICsj aW5jbHVkZTxzdGRsaWIuaD4KClRoZXJlIGFyZSBxdWl0ZSBhIGZldyBjb2Rpbmcgc3R5bGUgaXNz dWVzIGZvdW5kIGJ5IGNoZWNrcGF0Y2g6wqBodHRwczovLwpwYXRjaHdvcmsuZnJlZWRlc2t0b3Au b3JnL3Nlcmllcy85ODkvwqBwZXJoYXBzIHlvdSBjb3VsZCBydW4KY2hlY2twYXRjaC5wbCBsb2Nh bGx5IGJlZm9yZSBzZW5kaW5nIHRoZSBuZXh0IHZlcnNpb24/CgpuaXQ6IHNwYWNpbmcgJiBwZXJo YXBzIHN5c3RlbSBoZWFkZXJzIHNob3VsZCBiZSBhaGVhZCBvZiBpZ3QgaGVhZGVycwooY2hlY2sg b3RoZXIgZmlsZSBjb2Rpbmcgc3R5bGUpCgo+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiArCj4gK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJU ZXN0IENvbG9yIEZlYXR1cmVzIGF0IFBpcGUgbGV2ZWwiKTsKPiArLyoKPiArVGhpcyB0b29sIHRl c3RzIHRoZSBmb2xsb3dpbmcgY29sb3IgZmVhdHVyZXM6Cj4gKwkxLmNzYy1yZWQKPiArCTIuY3Nj LWdyZWVuCj4gKwkzLmNzYy1ibHVlCj4gKwk0LmdhbW1hLWxlZ2FjeQo+ICsJNS5nYW1tYS04Yml0 Cj4gKwk2LmdhbW1hLTEwYml0Cj4gKwk3LmdhbW1hLTEyYml0Cj4gKwk4LmdhbW1hLXNwbGl0Cj4g Kwo+ICtWZXJpZmljYXRpb24gaXMgZG9uZSBieSBDUkMgY2hlY2tzLgo+ICsKPiArKi8KPiArCj4g KyNkZWZpbmUgQ1NDX01BWF9WQUxTwqDCoMKgwqA5Cj4gKyNkZWZpbmUgR0VOOV9TUExJVEdBTU1B X01BWF9WQUxTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA1MTIKPiArI2RlZmluZSBH RU45XzhCSVRfR0FNTUFfTUFYX1ZBTFPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDI1 Ngo+ICsjZGVmaW5lIEdFTjlfMTBCSVRfR0FNTUFfTUFYX1ZBTFPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAxMDI0Cj4gKyNkZWZpbmUgR0VOOV8xMkJJVF9HQU1NQV9NQVhfVkFMU8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDUxMwo+ICsjZGVmaW5lIEdFTjlfTUFYX0dBTU1BwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoKDEgPDwgMjQp IC0gMSkKPiArI2RlZmluZSBHRU45X01JTl9HQU1NQQkJCQkwCgpHRU45PyB0aGlzIGZ1bmN0aW9u YWxpdHkgaXMgY3VycmVudGx5IGVuYWJsZWQgZm9yIEJEVyBvbndhcmRzIChidXQgSQp0aGluayBp biB0aGVvcnkgY291bGQgYmUgZW5hYmxlZCBmb3IgSFNXKQoKPiArI2RlZmluZSBSRURfQ1NDIDAK PiArI2RlZmluZSBHUkVFTl9DU0MgMQo+ICsjZGVmaW5lIEJMVUVfQ1NDIDIKPiArI2RlZmluZSBS RURfRkIgMAo+ICsjZGVmaW5lIEdSRUVOX0ZCIDEKPiArI2RlZmluZSBCTFVFX0ZCIDIKPiArCj4g K3N0cnVjdCBfZHJtX3IzMmczMmIzMiB7Cj4gKwlfX3UzMiByMzI7Cj4gKwlfX3UzMiBnMzI7Cj4g KwlfX3UzMiBiMzI7Cj4gKwlfX3UzMiByZXNlcnZlZDsKPiArfTsKPiArCj4gK3N0cnVjdCBfZHJt X3BhbGV0dGUgewo+ICsJc3RydWN0IF9kcm1fcjMyZzMyYjMyIGx1dFswXTsKPiArfTsKPiArCj4g K3N0cnVjdCBfZHJtX2N0bSB7Cj4gKwlfX3M2NCBjdG1fY29lZmZbOV07Cj4gK307Cj4gKwoKU3Vy cm91bmQgdGhlc2Ugc3RydWN0dXJlIGRlZmluaXRpb25zIHdpdGggI2lmbmRlZnMgc28gdGhhdCB0 aGlzCmNvbnRpbnVlcyB0byB3b3JrIHdoZW4gbGlicmRybSBnZXRzIHVwZGF0ZWQuCgo+ICtmbG9h dCBjdG1fcmVkWzldID0gezEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDB9Owo+ICtmbG9hdCBjdG1f Z3JlZW5bOV0gPSB7MCwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMH07Cj4gK2Zsb2F0IGN0bV9ibHVl WzldID0gezAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDF9Owo+ICtmbG9hdCBjdG1fdW5pdHlbOV0g PSB7MSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMX07CgpUaGVzZSBhcmUgb25seSB1c2VkIGluIHRo aXMgZmlsZSwgYW5kIG5ldmVyIGNoYW5nZWQ6IC0+IHN0YXRpYyBjb25zdC4KCnMvdW5pdHkvaWRl bnRpdHkvIChJIHRoaW5rIHVuaXR5IGlzIHRoZSB3cm9uZyB0ZXJtaW5vbG9neSBoZXJlLikKCkkn ZCBsaWtlIHRvIHNlZSB2ZXJzaW9ucyBvZiB0aGUgQ1RNIHRlc3RzIHRoYXQ6CgphLikgVGVzdCB3 aXRoIG5lZ2F0aXZlIGNvZWZmaWNpZW50cwpiLikgV2l0aCBmcmFjdGlvbmFsIGNvZWZmZWNpZW50 cyAob24gQkRXIHRoZSB0aGUgY29lZmZpY2llbnRzIGFyZQpzdG9yZWQgaW4gYSBmdW5reSBwc2V1 ZG8gZnAgZm9ybWF0LiBUZXN0aW5nIHNvbWUgb2YgdGhvc2UgYXJlIGVzc2VudGlhbAoodGVzdGlu ZyBhbGwgZXZlbiBiZXR0ZXIuKQpjLikgU3dhcHBpbmcgcmVkIHdpdGggZ3JlZW4gd291bGQgYmUg YSBnb29kIHRlc3QgdG9vLgoKPiArc3RydWN0IGZyYW1lYnVmZmVyX2NvbG9yIHsKPiArCWludCBy ZWQ7Cj4gKwlpbnQgZ3JlZW47Cj4gKwlpbnQgYmx1ZTsKPiArfTsKPiArc3RydWN0IGZyYW1lYnVm ZmVyX2NvbG9yIGZiX2NvbG9yID0gezAsMCwwfTsKCk1heWJlIG5hbWUgdGhpcyBmYl9jb2xvcl9i bGFjayA/Cgo+ICsKPiAraWd0X2NyY190IGNyY19yZWZlcmVuY2UsIGNyY19yZWZlcmVuY2VfYmxh Y2ssIGNyY19yZWZlcmVuY2Vfd2hpdGU7Cj4gK2lndF9jcmNfdCBjcmNfYmxhY2ssIGNyY193aGl0 ZSwgY3JjX2N1cnJlbnQ7CgpzdGF0aWMgXgoKPiArc3RydWN0IGRhdGFfdCB7Cj4gKwlpbnQgZmJf aW5pdGlhbDsKPiArCWludCBkcm1fZmQ7Cj4gKwlpbnQgZ2VuOwo+ICsJaW50IHcsIGg7Cj4gKwlp Z3RfZGlzcGxheV90IGRpc3BsYXk7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIGZiX3ByZXA7Cj4gKwlzdHJ1 Y3QgaWd0X2ZiIGZiLCBmYjE7Cj4gK8KgwqDCoMKgwqDCoMKgwqBpZ3RfcGlwZV9jcmNfdCAqcGlw ZV9jcmM7Cj4gKwllbnVtIHBpcGUgcGlwZTsKPiArCj4gK307Cj4gKwo+ICsKPiArc3RhdGljIGlu dCBjcmVhdGVfYmxvYihpbnQgZmQsIHVpbnQ2NF90ICpkYXRhLCBpbnQgbGVuZ3RoKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2IgYmxvYjsKPiArCWludCByZXQgPSAtMTsKPiAr Cj4gKwlibG9iLmRhdGEgPSAodWludDY0X3QpZGF0YTsKPiArCWJsb2IubGVuZ3RoID0gbGVuZ3Ro Owo+ICsJYmxvYi5ibG9iX2lkID0gLTE7Cj4gKwlyZXQgPSBpb2N0bChmZCwgRFJNX0lPQ1RMX01P REVfQ1JFQVRFUFJPUEJMT0IsICZibG9iKTsKPiArCWlmICghcmV0KQo+ICsJCXJldHVybiBibG9i LmJsb2JfaWQ7Cj4gKwlpZ3RfZmFpbChJR1RfRVhJVF9GQUlMVVJFKTsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHByZXBhcmVfY3J0YyhzdHJ1Y3QgZGF0YV90ICpkYXRh LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPiArCQkJwqBlbnVtIHBpcGUgcGlwZTEsIGlndF9wbGFu ZV90ICpwbGFuZSwKPiBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCj4gKwkJCcKgZW51bSBpZ3RfY29t bWl0X3N0eWxlIHMpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlz cGxheTsKPiArCj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZTEpOwo+ICsJCj4g KwlpZ3RfcGlwZV9jcmNfZnJlZShkYXRhLT5waXBlX2NyYyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqBk YXRhLT5waXBlX2NyYyA9IGlndF9waXBlX2NyY19uZXcocGlwZTEsCj4gSU5URUxfUElQRV9DUkNf U09VUkNFX0FVVE8pOwo+ICsJCj4gKwkvKiBiZWZvcmUgYWxsb2NhdGluZywgZnJlZSBpZiBhbnkg b2xkZXIgZmIgKi8KPiArCWlmIChkYXRhLT5mYl9pbml0aWFsKSB7Cj4gKwkJaWd0X3JlbW92ZV9m YihkYXRhLT5kcm1fZmQsICZkYXRhLT5mYl9wcmVwKTsKPiArCQlkYXRhLT5mYl9pbml0aWFsID0g MDsKPiArCX0KPiArCj4gKwkvKiBhbGxvY2F0ZSBmYiBmb3IgcGxhbmUgMSAqLwo+ICsJZGF0YS0+ ZmJfaW5pdGlhbCA9IGlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLAo+ICsJCQkJCcKg wqDCoMKgwqDCoMKgbW9kZS0+aGRpc3BsYXksIG1vZGUtCj4gPnZkaXNwbGF5LAo+ICsJCQkJCcKg wqDCoMKgwqDCoMKgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiArCQkJCQnCoMKgwqDCoMKgwqDCoExP Q0FMX0k5MTVfRk9STUFUX01PRAo+IF9YX1RJTEVELCAvKiB0aWxlZCAqLwo+ICsJCQkJCcKgwqDC oMKgwqDCoMKgZmJfY29sb3IucmVkLAo+IGZiX2NvbG9yLmdyZWVuLCBmYl9jb2xvci5ibHVlLAo+ ICsJCQkJCcKgwqDCoMKgwqDCoMKgJmRhdGEtPmZiX3ByZXApOwo+ICsJaWd0X2Fzc2VydChkYXRh LT5mYl9pbml0aWFsKTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmJf cHJlcCk7Cj4gKwo+ICsJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBzKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgY2xlYW51cF9mYihzdHJ1Y3QgZGF0YV90ICpkYXRhKQo+ICt7Cj4gKwo+ ICsJaWYgKGRhdGEtPmZiX2luaXRpYWwpIHsKPiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9m ZCwgJmRhdGEtPmZiX3ByZXApOwo+ICsJCWRhdGEtPmZiX2luaXRpYWwgPSAwOwo+ICsJfQo+ICsJ aWYgKGRhdGEtPmZiLmZiX2lkKQo+ICsJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0 YS0+ZmIpOwo+ICsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2xlYW51cF9jcnRjKHN0cnVjdCBk YXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LAo+ICsJCQnCoGlndF9wbGFuZV90ICpw bGFuZSkKPiArewo+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+ ICsKPiArCWlmICghcGxhbmUtPmlzX3ByaW1hcnkpIHsKPiArCQlpZ3RfcGxhbmVfdCAqcHJpbWFy eTsKPiArCj4gKwkJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwKPiBJR1Rf UExBTkVfUFJJTUFSWSk7Cj4gKwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKPiAr CX0KPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKPiArCWlndF9vdXRwdXRf c2V0X3BpcGUob3V0cHV0LCBQSVBFX0FOWSk7Cj4gKz4gCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlz cGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7Cj4gKwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdldF9j b2xvcl9wcm9wZXJ0eShpbnQgZHJtX2ZkLCBpbnQgaWQsIGludCBvYmplY3QsY29uc3QKPiBjaGFy ICpwcm9wX25hbWUsCj4gKwkJCcKgwqDCoMKgwqDCoGludCBibG9iX2lkKQo+ICt7Cj4gKwlpbnQg aSA9IDAsIHJldCA9IDA7Cj4gKwlkcm1Nb2RlT2JqZWN0UHJvcGVydGllc1B0ciBwcm9wcyA9IE5V TEw7Cj4gKwlpZ3RfZmFpbF9vbl9mKGlkIDwgMCB8fCAoKG9iamVjdCAhPSBEUk1fTU9ERV9PQkpF Q1RfQ1JUQykgJiYKPiArCQnCoMKgwqDCoMKgwqAob2JqZWN0ICE9IERSTV9NT0RFX09CSkVDVF9Q TEFORSkpLAo+ICsJCcKgwqDCoMKgwqDCoCJJbnZhbGlkIGlucHV0IHRvIGdldCBjb2xvciBwcm9w ZXJ0eSAlZCIsIGlkKTsKPiArCj4gKwlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVz KGRybV9mZCwgaWQsIG9iamVjdCk7Cj4gKwlpZ3RfZmFpbF9vbl9mKCFwcm9wcywKPiArCQnCoMKg wqDCoMKgIlxuTm8gcHJvcGVydHkgZm9yIG9iamVjdCBpZD0lZFxuIiwgaWQpOwo+ICsJZm9yIChp ID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Cj4gKwkJZHJtTW9kZVByb3BlcnR5 UHRyIHByb3AgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZHJtX2ZkLAo+ICsJCQkJCQkJwqDCoMKgwqDC oHByb3BzLQo+ID5wcm9wc1tpXSk7Cj4gKwkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCBwcm9wX25h bWUpID09IDApIHsKPiArCQkJYmxvYl9pZCA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKPiArCQkJ YnJlYWs7Cj4gKwkJfQo+ICsJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4gKwl9Cj4gKwo+ ICsJcmV0ID0gYmxvYl9pZDsKPiArCWRybU1vZGVGcmVlT2JqZWN0UHJvcGVydGllcyhwcm9wcyk7 Cj4gKwlpZ3RfZmFpbF9vbl9mKGkgPT0gcHJvcHMtPmNvdW50X3Byb3BzLAo+ICsJCcKgwqDCoMKg wqDCoCIlcyBObyBzdWNoIHByb3BlcnR5XG4iLCBwcm9wX25hbWUpOwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArCj4gK3N0YXRpYyBpbnQgc2V0X2NvbG9yX3Byb3BlcnR5KGludCBkcm1fZmQs IGludCBpZCwgaW50IG9iamVjdCwgY29uc3QKPiBjaGFyICpwcm9wX25hbWUsIGludCBibG9iX2lk KQo+ICt7Cj4gKwlpbnQgaSA9IDAsIHJlczsKPiArCj4gKwlkcm1Nb2RlT2JqZWN0UHJvcGVydGll c1B0ciBwcm9wcyA9IE5VTEw7Cj4gKwlpZ3RfZmFpbF9vbl9mKGlkIDwgMCB8fCAoKG9iamVjdCAh PSBEUk1fTU9ERV9PQkpFQ1RfQ1JUQykgJiYKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAob2JqZWN0ICE9IERSTV9NT0RFX09CSkVDVF9QTEFORSkpLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJJbnZhbGlkIGlucHV0 IHRvIGdldCBjb2xvciBwcm9wZXJ0eSAlZCIsIGlkKTsKPiArCj4gKwo+ICsJcHJvcHMgPSBkcm1N b2RlT2JqZWN0R2V0UHJvcGVydGllcyhkcm1fZmQsIGlkLCBvYmplY3QpOwo+ICvCoMKgwqDCoMKg wqDCoMKgaWd0X2ZhaWxfb25fZighcHJvcHMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCJcbk5vIHByb3BlcnR5IGZvciBvYmplY3QgaWQ9JWRcbiIsIGlkKTsK PiArCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291bnRfcHJvcHM7IGkrKykgewo+ICsJCWRybU1v ZGVQcm9wZXJ0eVB0ciBwcm9wID0gZHJtTW9kZUdldFByb3BlcnR5KGRybV9mZCwKPiArCQkJCQkJ CcKgwqDCoMKgwqBwcm9wcy0KPiA+cHJvcHNbaV0pOwo+ICsJCWlmIChzdHJjbXAocHJvcC0+bmFt ZSwgcHJvcF9uYW1lKSA9PSAwKSB7Cj4gKwkJCXJlcyA9IGRybU1vZGVPYmplY3RTZXRQcm9wZXJ0 eShkcm1fZmQsIGlkLAo+IG9iamVjdCwKPiArCQkJCQkJwqDCoMKgwqDCoMKgwqAodWludDMyX3Qp cHJvCj4gcC0+cHJvcF9pZCwgYmxvYl9pZCk7Cj4gKwo+ICsJCQlpZiAocmVzKSB7Cj4gKwkJCQlk cm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOwo+ICsJCQkJZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0 aWVzKHByb3BzKTsKPiArCQkJfSBlbHNlIHsKPiArCQkJCWRybU1vZGVGcmVlUHJvcGVydHkocHJv cCk7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJZHJtTW9kZUZyZWVQcm9w ZXJ0eShwcm9wKTsKPiArCX0KPiArCWRybU1vZGVGcmVlT2JqZWN0UHJvcGVydGllcyhwcm9wcyk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqBpZ3RfZmFpbF9vbl9mKGkgPT0gcHJvcHMtPmNvdW50X3Byb3Bz LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCIlcyBObyBz dWNoIHByb3BlcnR5XG4iLCBwcm9wX25hbWUpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQ2NF90wqDCoGNvbnZlcnRGbG9hdFRvQmluYXJ5KGRvdWJsZSBpbnB1dCkKPiArewo+ ICsKPiArCWludCBpbnRlZ2VyX3BhcnQsIGNvdW50ID0gMDsKPiArCXVpbnQzMl90IHRlbXBfaXAs IGZyYWNfdmFsID0gMHgwMDAwMDAwMDsKPiArCXVpbnQ2NF90IGludGVnZXJfdmFsID0gMHgwMDAw MDAwMDsKPiArCWludDY0X3TCoMKgdmFsdWUgPSAweDAwMDAwMDAwMDAwMDAwMDA7Cj4gKwlmbG9h dCBmcmFjdGlvbmFsX3BhcnQsIGlwOwo+ICsJaW50ZWdlcl9wYXJ0ID0gKGludClpbnB1dDsKPiAr CWZyYWN0aW9uYWxfcGFydCA9IGlucHV0IC0gaW50ZWdlcl9wYXJ0Owo+ICsJd2hpbGUgKGZyYWN0 aW9uYWxfcGFydCAhPSAwLjAwMDAwMCkgewo+ICsJCWlwID0gZnJhY3Rpb25hbF9wYXJ0ICogMTY7 Cj4gKwkJdGVtcF9pcCA9IChpbnQpKGZyYWN0aW9uYWxfcGFydCAqIDE2KTsKPiArCQlmcmFjX3Zh bCA9IGZyYWNfdmFsIHwgKHRlbXBfaXAgPDwgKDI4IC0gY291bnQgKiA0KSk7Cj4gKwkJY291bnQr KzsKPiArCQlmcmFjdGlvbmFsX3BhcnQgPSBpcCAtIHRlbXBfaXA7Cj4gKwl9Cj4gKwlpbnRlZ2Vy X3ZhbCA9IGludGVnZXJfcGFydDsKPiArCXZhbHVlID0gdmFsdWUgfCAoaW50ZWdlcl92YWwgPDwg MzIpOwo+ICsJdmFsdWUgPSB2YWx1ZSB8IGZyYWNfdmFsOwo+ICsJcmV0dXJuIHZhbHVlOwo+ICsK CkdpdmVuIHRoZSB0cnVuY2F0aW9uIGJ5IHRoZSBIVywgSSB0aGluayB5b3UgY2FuIHJlcGxhY2Ug dGhpcyB3aXRoIGlucHV0CiogKDF1bGwgPDwgMzIpLiAoSSB0aGluay4uLikKCj4gKwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCB3cml0ZV9nYW1tYV9sdXQoIHVpbnQzMl90IG51bV9zYW1wbGVzLCBz dHJ1Y3QKPiBfZHJtX3IzMmczMmIzMiAqZ2FtbWFfcHRyLCBpbnQgdW5pdF9nYW1tYSApCj4gK3sK PiArCXVuc2lnbmVkIHNob3J0IFJlZCwgR3JlZW4sIEJsdWU7Cj4gKwl1aW50MzJfdCByMzIsIGIz MiwgZzMyOwo+ICsJdWludDY0X3QgaSzCoMKgdmFsOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBu dW1fc2FtcGxlczsgaSsrKSB7Cj4gKwkJaWYodW5pdF9nYW1tYSA9PSAwKSB7Cj4gKwkJQmx1ZSA9 IEdFTjlfTUFYX0dBTU1BOwo+ICsJCUdyZWVuID0gR0VOOV9NQVhfR0FNTUE7Cj4gKwkJUmVkID0g R0VOOV9NQVhfR0FNTUE7Cj4gKwkJfSBlbHNlIHsKPiArCQlCbHVlID0gR0VOOV9NSU5fR0FNTUE7 Cj4gKwkJR3JlZW4gPSBHRU45X01JTl9HQU1NQTsKPiArCQlSZWQgPSBHRU45X01JTl9HQU1NQTsK PiArCQl9Cj4gKwkJcjMyID0gUmVkOwo+ICsJCWczMiA9IEdyZWVuOwo+ICsJCWIzMiA9IEJsdWU7 Cj4gKwkJcjMyIDw8PTg7Cj4gKwkJZzMyIDw8PTg7Cj4gKwkJYjMyIDw8PTg7Cj4gKwkJZ2FtbWFf cHRyW2ldLnIzMiA9IHIzMjsKPiArCQlnYW1tYV9wdHJbaV0uZzMyID0gZzMyOwo+ICsJCWdhbW1h X3B0cltpXS5iMzIgPSBiMzI7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB1aW50NjRfdCBnZXRf YmxvYihpbnQgZmQsIGludCBibG9iX2lkLCBpbnQgbGVuZ3RoKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X21vZGVfZ2V0X2Jsb2IgYmxvYjsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWJsb2IuYmxvYl9p ZCA9IGJsb2JfaWQ7Cj4gKwlibG9iLmxlbmd0aCA9IGxlbmd0aDsKPiArCWJsb2IuZGF0YSA9wqDC oCh1aW50NjRfdCltYWxsb2MoYmxvYi5sZW5ndGgpOwo+ICsJcmV0ID0gaW9jdGwoZmQsIERSTV9J T0NUTF9NT0RFX0dFVFBST1BCTE9CLCAmYmxvYik7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlpZ3Rf aW5mbygiR0VUIEJMT0IgRmFpbGVkXG4iKTsKPiArCj4gKwlyZXR1cm4gYmxvYi5kYXRhOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBlbmFibGVfcGxhbmUoc3RydWN0IGRhdGFfdCAqZGF0YSwgaWd0 X2Rpc3BsYXlfdAo+ICpkaXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCAsIGludCBwaXBlMSkK PiArewo+ICsJZW51bSBpZ3RfY29tbWl0X3N0eWxlIGNvbW1pdDsKPiArCWVudW0gcGlwZSBwaXBl MjsKPiArwqDCoMKgwqDCoMKgwqDCoGludCB3aWR0aCwgaGVpZ2h0Owo+ICvCoMKgwqDCoMKgwqDC oMKgdWludDMyX3QgcGl4ZWxmb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4Owo+ICsKPiArCWNv bW1pdCA9IENPTU1JVF9VTklWRVJTQUw7Cj4gKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KGRp c3BsYXksIG91dHB1dCkgewo+ICsJCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKPiArCQlpZ3RfcGxh bmVfdCAqcGxhbmU7Cj4gKwkJcGlwZTIgPSBvdXRwdXQtPmNvbmZpZy5waXBlOwo+ICsKPiArCQlp ZiAocGlwZTIgIT0gcGlwZTEpCj4gKwkJCWJyZWFrOwo+ICsJCWlndF9vdXRwdXRfc2V0X3BpcGUo b3V0cHV0LCBwaXBlMik7Cj4gKwkJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsK PiArCQkvKkRyYXcgdGhlIGluaXRpYWwgcHJpbWFyeSBwbGFuZSovCj4gKwkJcGxhbmUgPSBpZ3Rf b3V0cHV0X2dldF9wbGFuZShvdXRwdXQsCj4gSUdUX1BMQU5FX1BSSU1BUlkpOwo+ICsKPiArCQlw cmVwYXJlX2NydGMoZGF0YSwgb3V0cHV0LCBwaXBlMiwgcGxhbmUsIG1vZGUsCj4gY29tbWl0KTsK PiArCQkvKlJhbmRvbSBTaXplwqDCoEJ1ZmZlciBDcmVhdGlvbiAqLwo+ICsJCXdpZHRoID0gNjAw Owo+ICsJCWhlaWdodCA9IDYwMDsKPiArCj4gKwkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFu ZShvdXRwdXQsIElHVF9QTEFORV8yKTsKPiArCQlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRy bV9mZCwKPiArCQkJCQnCoMKgwqDCoHdpZHRoLCBoZWlnaHQsCj4gKwkJCQkJwqDCoMKgwqBwaXhl bGZvcm1hdCwKPiArCQkJCQnCoMKgwqDCoExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTgo+IEUsCj4g KwkJCQkJwqDCoMKgwqBmYl9jb2xvci5yZWQsZmJfY29sb3IuZ3IKPiBlZW4sZmJfY29sb3IuYmx1 ZSwKPiArCQkJCQnCoMKgwqDCoCZkYXRhLT5mYik7Cj4gKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlv bihwbGFuZSwgMTAwLCAxMDApOwo+ICsKPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0 YS0+ZmIpOwo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgY29tbWl0KTsKPiArCX0K PiArCj4gK30KPiArLyoKPiArVGhpcyBmdW5jdGlvbiB2ZXJpZnkgY3NjIGZlYXR1cmUgdXNpbmcg Ym90aCBDUkMgY2hlY2suCj4gK1N0ZXBzIGZvbGxvd2VkIGFyZToKPiArCTEuRW5hYmxlIHBsYW5l IGZvciBjYXB0dXJpbmcgcmVmZXJlbmNlIENSQwo+ICsJMi5DYXB0dXJlIFJlZmVyZW5jZSBDUkMK PiArCTMuQXBwbHkgQ1NDIG9uIFBpcGUKPiArCTQuRW5hYmxlIFBsYW5lIC5DU0Mgd2lsbCBiZSBh cHBsaWVkIG9uIHRoaXMgcGxhbmVzLgo+ICsJNS5DYXB0dXJlIENSQyBhbmQgY29tcGFyZSB3aXRo IHJlZmVyZW5jZSBDUkMKPiArCTYuIFJlZ2lzdGVyIFZhbGlkYXRpb24gZm9yIENSQwo+ICsqLwo+ ICtzdGF0aWMgdm9pZCB0ZXN0X3BpcGVfY3NjKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGlndF9kaXNw bGF5X3QKPiAqZGlzcGxheSwgaWd0X291dHB1dF90ICpvdXRwdXQsCj4gKwkJCcKgwqBpZ3RfcGxh bmVfdCAqcGxhbmUsIGJvb2wgZW5hYmxlLCBpbnQKPiB2YWx1ZSwgaW50IHBpcGUxKQo+ICt7Cj4g Kwo+ICsJc3RydWN0IF9kcm1fY3RtICpjdG1fZGF0YSA9IE5VTEw7Cj4gKwlib29sIHJldCA9IGZh bHNlOwo+ICsJaW50IHJlcywgaSwgYmxvYl9pZDsKPiArCWZsb2F0ICpjdG07Cj4gKwl1aW50NjRf dCBibG9iX2FkZHJlc3M7Cj4gKwljdG1fZGF0YSA9IChzdHJ1Y3QgX2RybV9jdG0gKikKPiArCQlt YWxsb2Moc2l6ZW9mKHN0cnVjdCBfZHJtX2N0bSkpOwo+ICsJaWYgKCFlbmFibGUpIHsKPiArCQlj dG0gPSBjdG1fdW5pdHk7Cj4gKwl9IGVsc2Ugewo+ICsJCWlmICh2YWx1ZSA9PSBSRURfQ1NDKSB7 Cj4gKwkJCWN0bSA9IGN0bV9yZWQ7Cj4gKwkJfSBlbHNlIGlmICh2YWx1ZSA9PSBHUkVFTl9DU0Mp IHsKPiArCQkJY3RtID0gY3RtX2dyZWVuOwo+ICsJCX0gZWxzZSBpZiAodmFsdWUgPT0gQkxVRV9D U0MpIHsKPiArCQkJY3RtID0gY3RtX2JsdWU7Cj4gKwkJfSBlbHNlewo+ICsJCQljdG0gPSBjdG1f dW5pdHk7Cj4gKwkJfSB9Cj4gKwlpZih2YWx1ZSA9PSBSRURfRkIpIHsKPiArCQlmYl9jb2xvci5y ZWQgPSAxOwo+ICsJCWZiX2NvbG9yLmdyZWVuID0wOwo+ICsJCWZiX2NvbG9yLmJsdWUgPSAwOwo+ ICsJfSBlbHNlwqDCoGlmKHZhbHVlID09IEdSRUVOX0ZCKSB7Cj4gKwkJZmJfY29sb3IucmVkID0g MDsKPiArCQlmYl9jb2xvci5ncmVlbiA9IDE7Cj4gKwkJZmJfY29sb3IuYmx1ZSA9IDA7Cj4gKwl9 IGVsc2UgaWYodmFsdWUgPT0gQkxVRV9GQikgewo+ICsJCWZiX2NvbG9yLnJlZCA9IDA7Cj4gKwkJ ZmJfY29sb3IuZ3JlZW4gPSAwOwo+ICsJCWZiX2NvbG9yLmJsdWUgPSAxOwo+ICsJfSBlbHNlIHsK PiArCQlmYl9jb2xvci5yZWQgPSAxOwo+ICsJCWZiX2NvbG9yLmdyZWVuID0gMTsKPiArCQlmYl9j b2xvci5ibHVlID0gMTsKPiArCX0KPiArCS8qRW5hYmxlIHBsYW5lcyBhbmQgY2FwdHVyZSByZWZl cmVuY2UgY3JjKi8KPiArCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUx KTsKPiArCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyY19yZWZl cmVuY2UpOwo+ICsKPiArCWZiX2NvbG9yLnJlZCA9IDE7Cj4gKwlmYl9jb2xvci5ncmVlbiA9IDE7 Cj4gKwlmYl9jb2xvci5ibHVlID0gMTsKPiArCj4gKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxh eSwgb3V0cHV0LCBwaXBlMSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IENTQ19NQVhfVkFMUzsg aSsrKSB7Cj4gKwkJY3RtX2RhdGEtPmN0bV9jb2VmZltpXSA9IGNvbnZlcnRGbG9hdFRvQmluYXJ5 KCooY3RtCj4gKyBpKSk7Cj4gKwl9Cj4gKwo+ICsJYmxvYl9pZCA9IGNyZWF0ZV9ibG9iKGRpc3Bs YXktPmRybV9mZCwKPiArCQkJKGludCAqKShjdG1fZGF0YSksIHNpemVvZihzdHJ1Y3QgX2RybV9j dG0pKTsKPiArCWlndF9mYWlsX29uX2YgKGJsb2JfaWQgPCAwLCAiQ1RNOkJMT0IgSU9DVEwgRmFp bFxuIik7Cj4gKwlyZXMgPSBzZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBvdXRw dXQtCj4gPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAo+ICsJCQlEUk1fTU9ERV9PQkpFQ1RfQ1JUQywg IkNUTSIsIGJsb2JfaWQpOwo+ICsJaWd0X2ZhaWxfb25fZiAocmVzIDwgMCwgIkNUTTpTZXQgUHJv cGVydHkgRmFpbGVkXG4iKTsKPiArCXJlcyA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5k cm1fZmQsIG91dHB1dC0KPiA+Y29uZmlnLmNydGMtPmNydGNfaWQsIERSTV9NT0RFX09CSkVDVF9D UlRDLCAiQ1RNIiwgYmxvYl9pZCk7Cj4gKwlpZ3RfZmFpbF9vbl9mIChyZXMgPCAwLCAiQ1RNOkdl dCBQcm9wZXJ0eSBGYWlsZWRcbiIpOwo+ICsJCj4gKwlibG9iX2FkZHJlc3MgPSBnZXRfYmxvYihk aXNwbGF5LT5kcm1fZmQsIHJlcywgc2l6ZW9mKHN0cnVjdAo+IF9kcm1fY3RtKSk7Cj4gKwljdG1f ZGF0YSA9IChzdHJ1Y3QgX2RybV9jdG0gKikgKGludHB0cl90KSBibG9iX2FkZHJlc3M7Cj4gKwo+ ICsJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOwo+ICsJaWd0X3Bp cGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjX2N1cnJlbnQpOwo+ICsJaWd0 X2Fzc2VydF9jcmNfZXF1YWwoJmNyY19yZWZlcmVuY2UsICZjcmNfY3VycmVudCk7Cj4gKwkvKlJl c3RvcmluZyB0aGUgVW5pdCBDU0MqLwo+ICsJY3RtID0gY3RtX3VuaXR5Owo+ICsJZm9yIChpID0g MDsgaSA8IENTQ19NQVhfVkFMUzsgaSsrKSB7Cj4gKwkJY3RtX2RhdGEtPmN0bV9jb2VmZltpXSA9 IGNvbnZlcnRGbG9hdFRvQmluYXJ5KCooY3RtCj4gKyBpKSk7Cj4gKwl9Cj4gKwo+ICsJYmxvYl9p ZCA9IGNyZWF0ZV9ibG9iKGRpc3BsYXktPmRybV9mZCwKPiArCQkJKGludCAqKShjdG1fZGF0YSks IHNpemVvZihzdHJ1Y3QgX2RybV9jdG0pKTsKPiArwqDCoMKgwqDCoMKgwqDCoGlndF9mYWlsX29u X2YgKGJsb2JfaWQgPCAwLCAiQ1RNOkJMT0IgSU9DVEwgRmFpbFxuIik7Cj4gKwo+ICsJcmVzID0g c2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LQo+ID5jb25maWcuY3J0 Yy0+Y3J0Y19pZCwKPiArCQkJRFJNX01PREVfT0JKRUNUX0NSVEMsICJDVE0iLCBibG9iX2lkKTsK PiArwqDCoMKgwqDCoMKgwqDCoGlndF9mYWlsX29uX2YgKHJlcyA8IDAsICJDVE06U2V0IFByb3Bl cnR5IEZhaWxlZFxuIik7Cj4gKwo+ICsJZnJlZShjdG1fZGF0YSk7Cj4gKwo+ICt9Cj4gKwo+ICsK PiArc3RhdGljIHZvaWQgYXBwbHlfZ2FtbWEoc3RydWN0IGRhdGFfdCAqZGF0YSwgaWd0X2Rpc3Bs YXlfdCAqZGlzcGxheSwKPiBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaW50IHBpcGUxLCB1aW50MzJf dCBudW1fc2FtcGxlcywgaW50Cj4gdW5pdF9nYW1tYSkgCj4gK3sKPiArCXN0cnVjdCBfZHJtX3Bh bGV0dGUgKmdhbW1hX2RhdGEgPcKgwqBOVUxMOwo+ICsJaW50wqDCoHJldCwgcmVzLCBibG9iX2lk LCBibG9iX2xlbmd0aDsKPiArCWJvb2wgc3RhdHVzID0gZmFsc2U7Cj4gKwo+ICsKPiArCWlmIChu dW1fc2FtcGxlcyA9PSAwKQo+ICsJCWJsb2JfbGVuZ3RoID0gMTsKPiArCWVsc2UKPiArCQlibG9i X2xlbmd0aCA9IChzaXplb2Yoc3RydWN0IF9kcm1fcGFsZXR0ZSkgKwo+IChudW1fc2FtcGxlcyAq IHNpemVvZihzdHJ1Y3QgX2RybV9yMzJnMzJiMzIpKSk7Cj4gKwo+ICsJZ2FtbWFfZGF0YSA9IG1h bGxvYyhibG9iX2xlbmd0aCk7Cj4gKwl3cml0ZV9nYW1tYV9sdXQobnVtX3NhbXBsZXMsIGdhbW1h X2RhdGEtPmx1dCwgdW5pdF9nYW1tYSk7Cj4gKwlibG9iX2lkID0gY3JlYXRlX2Jsb2IoZGlzcGxh eS0+ZHJtX2ZkLCAodWludDY0X3QKPiAqKShnYW1tYV9kYXRhKSwgYmxvYl9sZW5ndGgpOwo+ICsJ aWYgKGJsb2JfaWQgPCAwKQo+ICsJCWZyZWUoZ2FtbWFfZGF0YSk7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgaWd0X2ZhaWxfb25fZiAoYmxvYl9pZCA8IDAsICJHQU1NQTpCTE9CIElPQ1RMIEZhaWxc biIpOwo+ICsJLypEaXNhYmxpbmcgZGVnYW1tYSovCj4gKwlpZih1bml0X2dhbW1hID09IDIgKSB7 Cj4gKwkJcmVzID0gc2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LQo+ ID5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgRFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRFX0JFRk9SRV9D VE0iLAo+IGJsb2JfaWQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9 IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0KPiA+Y29uZmlnLmNy dGMtPmNydGNfaWQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoERSTV9NT0RFX09CSkVDVF9DUlRDLCAiUEFMRVRURV9CRUZPUkVfQ1RNIiwKPiBibG9i X2lkKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZ3RfZmFpbF9vbl9mIChy ZXMgPCAwLCAiUEFMRVRURV9CRUZPUkVfQ1RNOlNldAo+IFByb3BlcnR5IEZhaWxlZFxuIik7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X2ZhaWxfb25fZiAocmV0IDwgMCwg IlBBTEVUVEVfQkVGT1JFX0NUTTpTZXQKPiBQcm9wZXJ0eSBGYWlsZWRcbiIpOwo+ICsKPiArCX0K PiArCj4gKwlpZiAobnVtX3NhbXBsZXMgPT0gR0VOOV9TUExJVEdBTU1BX01BWF9WQUxTKSB7Cj4g KwkJcmVzID0gc2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LQo+ID5j b25maWcuY3J0Yy0+Y3J0Y19pZCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgRFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRFX0JFRk9SRV9DVE0i LAo+IGJsb2JfaWQpOwo+ICsJCXJldCA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1f ZmQsIG91dHB1dC0KPiA+Y29uZmlnLmNydGMtPmNydGNfaWQsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9NT0RFX09CSkVDVF9DUlRDLCAiUEFM RVRURV9CRUZPUkVfQ1RNIiwKPiBibG9iX2lkKTsKPiArCQlpZiAocmVzIDwgMCkKPiArCQkJZnJl ZShnYW1tYV9kYXRhKTsKPiArCcKgwqDCoMKgwqDCoMKgwqBpZ3RfZmFpbF9vbl9mIChyZXMgPCAw LCAiUEFMRVRURV9CRUZPUkVfQ1RNOlNldAo+IFByb3BlcnR5IEZhaWxlZFxuIik7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X2ZhaWxfb25fZiAocmV0IDwgMCwgIlBBTEVU VEVfQkVGT1JFX0NUTTpTZXQKPiBQcm9wZXJ0eSBGYWlsZWRcbiIpOwo+ICsKPiArCX0KPiArCj4g KwlyZXMgPSBzZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtCj4gPmNv bmZpZy5jcnRjLT5jcnRjX2lkLAo+ICsJCQlEUk1fTU9ERV9PQkpFQ1RfQ1JUQywgIlBBTEVUVEVf QUZURVJfQ1RNIiwKPiBibG9iX2lkKTsKPiArCWlmIChyZXMgPCAwKSB7Cj4gKwkJZnJlZShnYW1t YV9kYXRhKTsKPiArCX0KPiArwqDCoMKgwqDCoMKgwqDCoGlndF9mYWlsX29uX2YgKHJlcyA8IDAs ICJQQUxFVFRFX0FGVEVSX0NUTTpTZXQgUHJvcGVydHkKPiBGYWlsZWRcbiIpOwo+ICsKPiArCXJl dCA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0KPiA+Y29uZmln LmNydGMtPmNydGNfaWQsCj4gKwkJCURSTV9NT0RFX09CSkVDVF9DUlRDLCAiUEFMRVRURV9BRlRF Ul9DVE0iLAo+IGJsb2JfaWQpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlmcmVlKGdhbW1hX2Rh dGEpOwo+ICsJfQo+ICvCoMKgwqDCoMKgwqDCoMKgaWd0X2ZhaWxfb25fZiAocmV0IDwgMCwgIlBB TEVUVEVfQkVGT1JFX0NUTTpTZXQgUHJvcGVydHkKPiBGYWlsZWRcbiIpOwo+ICsKPiArCWZyZWUo Z2FtbWFfZGF0YSk7Cj4gKwo+ICsKPiArfQo+ICsvKgo+ICtUaGlzIGZ1bmN0aW9uIHZlcmlmeSBj c2MgZmVhdHVyZSB1c2luZyBib3RoIENSQyBjaGVjay4KPiArU3RlcHMgZm9sbG93ZWQgYXJlOgo+ ICvCoMKgwqDCoMKgwqDCoMKgMS5FbmFibGUgQmxhY2sgcGxhbmUgYW5kIGNhcHR1cmUgQ1JDX1JF RkVSRU5DRV9CTEFDSy4KPiArCTIuRW5hYmxlIFdoaXRlIHBsYW5lIGFuZCBjYXB0dXJlIENSU19S RUZFUkVOQ0VfV0hJVEUKPiArwqDCoMKgwqDCoMKgwqDCoDMuRW5hYmxlIFJlZCBwbGFuZS4KPiAr wqDCoMKgwqDCoMKgwqDCoDQuQXBwbHkgTE9XIEdhbW1hLgo+ICvCoMKgwqDCoMKgwqDCoMKgNS5D YXB0dXJlIENSQ19CbGFjay4KPiArwqDCoMKgwqDCoMKgwqDCoDYuQXBwbHkgSGlnaCBHYW1tYSBh bmQgY2FwdHVyZSBDUkNfV2hpdGUuCj4gK8KgwqDCoMKgwqDCoMKgwqA3LkNSQ19CbGFjayBzaG91 bGQgYmUgZXF1aXZhbGVudCB0byBDUkNfUkVGRVJFTkNFX0JMQUNLCj4gK8KgwqDCoMKgwqDCoMKg wqA4LkNSQ19XaGl0ZSBzaG91bGQgYmUgZXF1aXZhbGVudCB0byBDUkNfUkVGRVJFTkNFX1dIaXRl Lgo+ICsKPiArCj4gKyovCj4gK3N0YXRpYyB2b2lkIHRlc3RfcGlwZV9nYW1tYShzdHJ1Y3QgZGF0 YV90ICpkYXRhLCBpZ3RfZGlzcGxheV90Cj4gKmRpc3BsYXksIGlndF9vdXRwdXRfdCAqb3V0cHV0 LAo+ICsJCcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90IG51bV9zYW1wbGVzLCBpbnQg dmFsdWVzLCBpbnQKPiBwaXBlMSkKPiArewo+ICsJaW50IHVuaXRfZ2FtbWEsIGRpc2FibGVfZ2Ft bWE7Cj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmU7Cj4gKwo+ICsJLypFbmFibGUgYmxhY2sgcGxhbmVz IGFuZCBjYXB0dXJlIHJlZmVyZW5jZSBjcmMqLwo+ICsKPiArCWZiX2NvbG9yLnJlZCA9IDA7Cj4g KwlmYl9jb2xvci5ncmVlbiA9MDsKPiArCWZiX2NvbG9yLmJsdWUgPSAwOwo+ICsJZW5hYmxlX3Bs YW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOwo+ICsJaWd0X3BpcGVfY3JjX2NvbGxl Y3RfY3JjKGRhdGEtPnBpcGVfY3JjLAo+ICZjcmNfcmVmZXJlbmNlX2JsYWNrKTsKPiArCS8qRW5h YmxlIHdoaXRlIHBsYW5lIGFuZCBjYXB0dXJlIHJlZmVybmNlIGNyYyovCj4gKwlmYl9jb2xvci5y ZWQgPSAxOwo+ICsJZmJfY29sb3IuZ3JlZW4gPTE7Cj4gKwlmYl9jb2xvci5ibHVlID0gMTsKPiAr CWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsKPiArCWlndF9waXBl X2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywKPiAmY3JjX3JlZmVyZW5jZV93aGl0ZSk7 Cj4gKwo+ICsJLypFbmFibGUgcmVkIHBsYW5lcyBhbmQgYXBwbHkgdW5pdCBnYW1tYSovCj4gKwlm Yl9jb2xvci5yZWQgPSAxOwo+ICsJZmJfY29sb3IuZ3JlZW4gPTA7Cj4gKwlmYl9jb2xvci5ibHVl ID0gMDsKPiArCXVuaXRfZ2FtbWEgPSAwOyAvKjAgLT4gd2hpdGUgMS0+YmxhY2sqLwoKVGFrZSB0 aGUgQ1JDIGhlcmUgdG9vLCBhcyByZWZlcmVuY2VfcmVkIGFuZCBjaGVjayB0aGF0IGNyY193aGl0 ZSAhPQpyZWZlcmVuY2VfcmVkLiAoaS5lLiBjaGVjayBpdHMgY2hhbmdlZCkKCj4gKwlhcHBseV9n YW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxLCBudW1fc2FtcGxlcywKPiB1bml0X2dh bW1hKTsKPiArCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsKPiAr CWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyY193aGl0ZSk7Cj4g Kwo+ICsJLyogQXBwbHkgMHgwIGdhbW1hICovCj4gKwl1bml0X2dhbW1hID3CoMKgMTsKPiArCj4g KwlhcHBseV9nYW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxLCBudW1fc2FtcGxlcywK PiB1bml0X2dhbW1hKTsKPiArCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBp cGUxKTsKPiArCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyY19i bGFjayk7Cj4gKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmY3JjX3JlZmVyZW5jZV9ibGFjaywgJmNy Y19ibGFjayk7Cj4gKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmY3JjX3JlZmVyZW5jZV93aGl0ZSwg JmNyY193aGl0ZSk7Cj4gKwo+ICsJLypEaXNhYmxpbmcgZ2FtbWEqLwo+ICsJaWYoIG51bV9zYW1w bGVzID09IEdFTjlfU1BMSVRHQU1NQV9NQVhfVkFMUykgewo+ICsJCWRpc2FibGVfZ2FtbWEgPSAy Owo+ICsJCWFwcGx5X2dhbW1hKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEsIDAsCj4gZGlz YWJsZV9nYW1tYSk7Cj4gKwl9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGFwcGx5X2dhbW1hKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEsIDAsCj4gdW5pdF9n YW1tYSk7Cj4gKwl9Cj4gKwkKPiArCj4gKwo+ICsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGVz dF9sZWdhY3lfZ2FtbWEgKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGlndF9kaXNwbGF5X3QKPiAqZGlz cGxheSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGludCBwaXBlMSkKPiArewo+ICsJaW50IGZkLHJl dCxpOwo+ICsKPiArCXVpbnQzMl90IGNydGM7Cj4gKwl1aW50MTZfdCAqdmFsID0gbWFsbG9jKHNp emVvZih1aW50MTZfdCkgKiAyNTYpOwo+ICvCoMKgwqDCoMKgwqDCoMKgaWd0X3BsYW5lX3QgKnBs YW5lOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoGZiX2NvbG9yLnJlZCA9IDE7Cj4gK8KgwqDCoMKg wqDCoMKgwqBmYl9jb2xvci5ncmVlbiA9MTsKPiArwqDCoMKgwqDCoMKgwqDCoGZiX2NvbG9yLmJs dWUgPSAxOwo+ICvCoMKgwqDCoMKgwqDCoMKgZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91 dHB1dCwgcGlwZTEpOwoKbml0OiBjb2Rpbmcgc3R5bGUgKHNwYWNpbmcpCgoKPiArCWZsb2F0IGdh bW1hMSA9IDEuMDsKCk5lZWQgdG8gZG8gbW9yZSB0aGF0IHRlc3Qgd2l0aCBhIGxpbmVhciBnYW1t YSwgYXMgdGhhdCBpcyBkZWZhdWx0CmluaXRpYWxpc2VkIGluIHRoZSBrZXJuZWwuCgo+ICsJZm9y KGkgPSAwOyBpIDwgMjU2IDsgaSsrKSB7Cj4gKwkJdmFsW2ldID0gMHhmZmZmICogcG93KChpLzI1 NSksIGdhbW1hMSk7Cj4gKwo+ICsJfQo+ICsJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCAoZGlz cGxheSwgb3V0cHV0KSB7Cj4gKwkJcmV0ID0gZHJtTW9kZUNydGNTZXRHYW1tYSAoZGlzcGxheS0+ ZHJtX2ZkLCBvdXRwdXQtCj4gPmNvbmZpZy5jcnRjLT5jcnRjX2lkLCAyNTYsIHZhbCwgdmFsLCB2 YWwpOwo+ICsJwqDCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnRfbHRlKDAsIHJldCk7CgpBbHNvLCBu ZWVkIHRvIGRvIG1vcmUgdGhhdCBjaGVjayByZXR1cm4gdmFsdWUuIEkgcmVjb21tZW5kIHRha2lu ZyB0aGUKQ1JDIHdpdGggMHhmZiByZWQgRkIuIFRoZW4gbWFwcGluZyAweGZmIHJlZCAobGFzdCBl bnRyeSkgdG8gMHhmMCBhbmQKdGhlbiBjb21wYXJpbmcuIEFuZCB0aGUgc2FtZSB3aXRoIG90aGVy IGNoYW5uZWxzIGFuZCBtb3JlIGNvbG91cnMuCgoKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZv aWQgdGVzdF9waXBlX2NvbG9yKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGNvbnN0wqDCoGNoYXIKPiAq cHJvcF9uYW1lLCBpbnQgZW5hYmxlLCBpbnQgdmFsdWUpCgpSZXBsYWNlIHByb3BfbmFtZSB3aXRo IGFuIGVudW0uIFRoZW4geW91IGNhbiByZXBsYWNlIGFsbCB0aGUgc3RyY21wKClzCndpdGggYSBz d2l0Y2ghCgo+ICt7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7 Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiArCWlndF9wbGFuZV90ICpwbGFuZTsKPiArCWVu dW0gcGlwZSBwaXBlMTsKPiArCj4gKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KGRpc3BsYXks IG91dHB1dCkgewo+ICsJCXBpcGUxID0gb3V0cHV0LT5jb25maWcucGlwZTsKPiArCQlpZ3Rfb3V0 cHV0X3NldF9waXBlKG91dHB1dCxwaXBlMSk7Cj4gKwkJaWYgKChzdHJjbXAocHJvcF9uYW1lLCAi Z2FtbWFfcHJvcGVydHlfOGJpdCIpID09IDApCj4gJiYKPiArCQkJCWVuYWJsZSA9PSB0cnVlKXsK PiArCQkJdGVzdF9waXBlX2dhbW1hKGRhdGEsIGRpc3BsYXksIG91dHB1dCwKPiArCQkJCQlHRU45 XzhCSVRfR0FNTUFfTUFYX1ZBTFMsCj4gdmFsdWUsIHBpcGUxKTsKPiArCQl9IGVsc2UgaWYgKChz dHJjbXAocHJvcF9uYW1lLCAibGVnYWN5X2dhbW1hIikgPT0KPiAwKSl7Cj4gKwkJCXRlc3RfbGVn YWN5X2dhbW1hKGRhdGEsIGRpc3BsYXksIG91dHB1dCwKPiBwaXBlMSk7Cj4gKwkJfSBlbHNlwqDC oGlmICgoc3RyY21wKHByb3BfbmFtZSwKPiAiZ2FtbWFfcHJvcGVydHlfMTBiaXQiKSA9PSAwKSAm Jgo+ICsJCQkJZW5hYmxlID09IHRydWUpIHsKPiArCQkJdGVzdF9waXBlX2dhbW1hKGRhdGEsIGRp c3BsYXksIG91dHB1dCwKPiBHRU45XzEwQklUX0dBTU1BX01BWF9WQUxTLCB2YWx1ZSwgcGlwZTEp Owo+ICsJCX0gZWxzZcKgwqBpZiAoKHN0cmNtcChwcm9wX25hbWUsICJjc2NfcHJvcGVydHkiKSA9 PQo+IDApKSB7Cj4gKwkJCXRlc3RfcGlwZV9jc2MoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwbGFu ZSwKPiBlbmFibGUsIHZhbHVlLCBwaXBlMSk7Cj4gKwkJfSBlbHNlwqDCoGlmICgoc3RyY21wKHBy b3BfbmFtZSwKPiAiZ2FtbWFfcHJvcGVydHlfc3BsaXQiKSA9PSAwKSAmJgo+ICsJCQkJZW5hYmxl ID09IHRydWUpIHsKPiArCQkJdGVzdF9waXBlX2dhbW1hKGRhdGEsIGRpc3BsYXksIG91dHB1dCwK PiArCQkJCQlHRU45X1NQTElUR0FNTUFfTUFYX1ZBTFMsCj4gdmFsdWUsIHBpcGUxKTsKPiArCQl9 IGVsc2XCoMKgaWYgKChzdHJjbXAocHJvcF9uYW1lLAo+ICJnYW1tYV9wcm9wZXJ0eV8xMmJpdCIp ID09IDApICYmIGVuYWJsZSA9PSB0cnVlKSB7Cj4gKwkJCXRlc3RfcGlwZV9nYW1tYShkYXRhLCBk aXNwbGF5LCBvdXRwdXQsCj4gKwkJCQkJR0VOOV8xMkJJVF9HQU1NQV9NQVhfVkFMUywKPiB2YWx1 ZSwgcGlwZTEpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWlndF9pbmZvKCJJbnZhbGlkIFRlc3RcbiIp Owo+ICsJCX0KPiArCQljbGVhbnVwX2ZiKGRhdGEpOwo+ICsJCXBsYW5lID0gaWd0X291dHB1dF9n ZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfMik7Cj4gKwkJY2xlYW51cF9jcnRjKGRhdGEsIG91 dHB1dCwgcGxhbmUpOwo+ICsJfQo+ICt9Cj4gKwo+ICtpZ3RfbWFpbgo+ICt7Cj4gKwlzdHJ1Y3Qg ZGF0YV90IGRhdGEgPSB7fTsKPiArCWludCB2YWx1ZXMgPSAxOwo+ICsJaWd0X3NraXBfb25fc2lt dWxhdGlvbigpOwo+ICsJaWd0X2ZpeHR1cmV7Cj4gKwkJLy/CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRhdGEuZHJtX2ZkID0KPiBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9J TlRFTCk7CgpMZWZ0IG92ZXIgZGVidWdnaW5nIGNvbW1lbnQ/Cgo+ICsJCWRhdGEuZHJtX2ZkID0g ZHJtX29wZW5fYW55X21hc3RlcigpOwo+ICsJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUo KTsKPiArCQlpZ3RfZGlzcGxheV9pbml0KCZkYXRhLmRpc3BsYXksIGRhdGEuZHJtX2ZkKTsKPiAr CQlkYXRhLmdlbiA9Cj4gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoZGF0YS5kcm1fZmQp KTsKPiArCQlpZ3RfcmVxdWlyZShkYXRhLmdlbiA+PSA5KTsKCjk/IFRoaXMgZmVhdHVyZSBpcyBl bmFibGVkIGZyb20gQkRXIG9ud2FyZHMgYXRtLCBidXQgaXMgcG9zc2libGUgb24KSFNXLiBDYW4g d2UgaW5zdGVhZCBjaGVjayBmb3IgdGhlIENUTSBwcm9wZXJ0eT8KCj4gKwl9Cj4gKwlpZ3Rfc3Vi dGVzdF9mKCJjc2MtcmVkIikKPiArCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJjc2NfcHJvcGVy dHkiLCB0cnVlLAo+IFJFRF9DU0MpOwo+ICsJaWd0X3N1YnRlc3RfZigiY3NjLWdyZWVuIikKPiAr CQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJjc2NfcHJvcGVydHkiLCB0cnVlLAo+IEdSRUVOX0NT Qyk7Cj4gKwlpZ3Rfc3VidGVzdF9mKCJjc2MtYmx1ZSIpCj4gKwkJdGVzdF9waXBlX2NvbG9yKCZk YXRhLCAiY3NjX3Byb3BlcnR5IiwgdHJ1ZSwKPiBCTFVFX0NTQyk7Cj4gKwlpZ3Rfc3VidGVzdF9m KCJnYW1tYS1sZWdhY3kiKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRlc3Rf cGlwZV9jb2xvcigmZGF0YSwgImxlZ2FjeV9nYW1tYSIsIHRydWUsCj4gdmFsdWVzKTsKPiArCj4g KwlpZ3Rfc3VidGVzdF9mKCJnYW1tYS04Yml0IikKPiArCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEs ICJnYW1tYV9wcm9wZXJ0eV84Yml0IiwgdHJ1ZSwKPiB2YWx1ZXMpOwo+ICsJaWd0X3N1YnRlc3Rf ZigiZ2FtbWEtMTBiaXQiKQo+ICsJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImdhbW1hX3Byb3Bl cnR5XzEwYml0IiwgdHJ1ZSwKPiB2YWx1ZXMpOwo+ICsJaWd0X3N1YnRlc3RfZigiZ2FtbWEtMTJi aXQiKQo+ICsJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImdhbW1hX3Byb3BlcnR5XzEyYml0IiwK PiB0cnVlLMKgwqB2YWx1ZXMpOwo+ICsJaWd0X3N1YnRlc3RfZigiZ2FtbWEtc3BsaXQiKQo+ICsJ CXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImdhbW1hX3Byb3BlcnR5X3NwbGl0IiwKPiB0cnVlLMKg wqB2YWx1ZXMpOwo+ICsKPiArCWlndF9maXh0dXJlewo+ICsJCWlndF9kaXNwbGF5X2ZpbmkoJmRh dGEuZGlzcGxheSk7Cj4gKwl9Cj4gK30KPiArCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK