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 EC0E089973 for ; Tue, 27 Aug 2019 21:28:11 +0000 (UTC) Date: Tue, 27 Aug 2019 14:29:49 -0700 From: Manasi Navare Message-ID: <20190827212949.GF701@intel.com> References: <20190823182351.25822-1-madhumitha.tolakanahalli.pradeep@intel.com> <20190823182351.25822-3-madhumitha.tolakanahalli.pradeep@intel.com> <44a51c697ed71dbf239322e20e9de0b18bc0b42c.camel@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <44a51c697ed71dbf239322e20e9de0b18bc0b42c.camel@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t v2 2/2] igt/tests/kms_dp_tiled_display: kms test for display port tiled displays 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: "Ser, Simon" Cc: "igt-dev@lists.freedesktop.org" , "madhumitha.tp@gmail.com" , "Latvala, Petri" List-ID: T24gVHVlLCBBdWcgMjcsIDIwMTkgYXQgMDM6NDk6MzhBTSAtMDcwMCwgU2VyLCBTaW1vbiB3cm90 ZToKPiBUaGFua3MgZm9yIHRoZSBuZXcgdmVyc2lvbiEgSGVyZSBhcmUgc29tZSBtb3JlIGNvbW1l bnRzLiBTb21lIG9mIHRoZW0KPiBhcmUgbml0cywgc29tZSBvZiB0aGVtIGFyZSBtb3JlIHNlcmlv dXMgcXVlc3Rpb25zLiBGZWVsIGZyZWUgdG8gbGV0IG1lCj4ga25vdyBpZiBJJ20gbWlzdGFrZW4g b3IgaWYgeW91IGRvbid0IHVuZGVyc3RhbmQgb25lIG9mIHRoZW0uCgpUaGFua3MgZm9yIHRoZSBy ZXZpZXcgY29tbWVudHMgU2ltb24uIEkgd2lsbCBiZSB3b3JraW5nIG9uIGFkZHJlc3NpbmcgdGhl IGZvbGxvd2luZwpyZXZpZXcgY29tbWVudHMgYW5kIHdpbGwgdGFrZSBvdmVyIHRoaXMgcGF0Y2gg c2luY2UgTWFkaHVtaXRoYSdzIGludGVybnNoaXAgaGFzIGVuZGVkLgpJIHJlYWxseSBhcHByZWNp YXRlIGFsbCB5b3VyIGhlbHAgYW5kIGZlZWRiYWNrIG9uIHRoaXMuCgpQbGVhc2UgZmluZCBteSBh bnN3ZXJzIGJlbG93OgoKPiAKPiBPbiBGcmksIDIwMTktMDgtMjMgYXQgMTE6MjMgLTA3MDAsIE1h ZGh1bWl0aGEgVG9sYWthbmFoYWxsaSBQcmFkZWVwIHdyb3RlOgo+ID4gVGhpcyB0ZXN0IHZhbGlk YXRlcyB0aGUgdGlsZWQgRFAgZGlzcGxheXMgdG8gZGlzcGxheSBhIHRlc3QgcGF0dGVybgo+ID4g c2VhbWxlc3NseSBhY3Jvc3MgdGhlIHR3byB0aWxlcy4gSXQgdmFsaWRhdGVzIHRoZSB0cmFuc2Nv ZGVyIHBvcnQKPiA+IHN5bmMgZmVhdHVyZSBvbiBpOTE1IHRvIGdldCBhIHRlYXJmcmVlIHRpbGVk IGRpc3BsYXkgb3V0cHV0Lgo+ID4gCj4gPiBSZWxhdGVkIGtlcm5lbCB3b3JrIHBhdGNoZXMtCj4g PiBodHRwczovL3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvc2VyaWVzLzU5ODM3LyNyZXY0Lgo+ ID4gCj4gPiBUaGlzIHRlc3QgY2FuIGV2ZW50dWFsbHkgYmUgZXh0ZW5kZWQgdG8gY292ZXIgdGls ZWQgZGlzcGxheSBzdXBwb3J0Cj4gPiBvbiBvdGhlciBjb25uZWN0b3IgdHlwZXMuCj4gPiAKPiA+ IHYyOiBBZGRlZCBhIGNoZWNrIGZvciBjaGVja2luZyBwYWdlZmxpcCBldmVudCB0aW1lc3RhbXBz IChTaW1vbiwgTWFuYXNpKQo+ID4gICAgIE1pbm9yIHN0eWxlIGNoYW5nZXMgKFNpbW9uKQo+ID4g ICAgQ29kZSBjbGVhbi11cCBhbmQgcmVvcmRlcmluZwo+ID4gCj4gPiAKPiA+IENjOiBNYW5hc2kg TmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPgo+ID4gQ2M6IFBldHJpIExhdHZhbGEg PHBldHJpLmxhdHZhbGFAaW50ZWwuY29tPgo+ID4gQ2M6IFNpbW9uIFNlciA8c2ltb24uc2VyQGlu dGVsLmNvbT4KPiA+IAo+ID4gQ2M6IDxtYWRodW1pdGhhLnRwQGdtYWlsLmNvbT4KPiA+IAo+ID4g U2lnbmVkLW9mZi1ieTogTWFkaHVtaXRoYSBUb2xha2FuYWhhbGxpIFByYWRlZXAgPG1hZGh1bWl0 aGEudG9sYWthbmFoYWxsaS5wcmFkZWVwQGludGVsLmNvbT4KPiA+IC0tLQo+ID4gIHRlc3RzL01h a2VmaWxlLnNvdXJjZXMgICAgICAgfCAgIDEgKwo+ID4gIHRlc3RzL2ttc19kcF90aWxlZF9kaXNw bGF5LmMgfCAzNDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICB0ZXN0 cy9tZXNvbi5idWlsZCAgICAgICAgICAgIHwgICAxICsKPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDM0 OCBpbnNlcnRpb25zKCspCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19kcF90aWxl ZF9kaXNwbGF5LmMKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiBpbmRleCBjMDJlNGQ5NC4uNzU2MWFiOWIgMTAw NjQ0Cj4gPiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiArKysgYi90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCj4gPiBAQCAtNDEsNiArNDEsNyBAQCBURVNUU19wcm9ncyA9IFwKPiA+ICAJ a21zX2N1cnNvcl9lZGdlX3dhbGsgXAo+ID4gIAlrbXNfY3Vyc29yX2xlZ2FjeSBcCj4gPiAgCWtt c19kcF9kc2MgXAo+ID4gKwlrbXNfZHBfdGlsZWRfZGlzcGxheSBcCj4gPiAgCWttc19kcmF3X2Ny YyBcCj4gPiAgCWttc19mYmNvbl9mYnQgXAo+ID4gIAlrbXNfZmVuY2VfcGluX2xlYWsgXAo+ID4g ZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19kcF90aWxlZF9kaXNwbGF5LmMgYi90ZXN0cy9rbXNfZHBf dGlsZWRfZGlzcGxheS5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAw MDAuLjE2MmZiZGQ5Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi90ZXN0cy9rbXNfZHBfdGls ZWRfZGlzcGxheS5jCj4gPiBAQCAtMCwwICsxLDM0NiBAQAo+ID4gKy8qCj4gPiArICogQ29weXJp Z2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCj4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4g PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gPiArICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiA+ICsgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCj4gPiArICogU29mdHdhcmUuCj4gPiArICoKPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP Ugo+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ID4gKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCj4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiA+ICsgKiBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTCj4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gKyAqCj4gPiArICogQXV0 aG9yczoKPiA+ICsgKiAgTWFkaHVtaXRoYSBUb2xha2FuYWhhbGxpIFByYWRlZXAKPiA+ICsgKiAg ICAgIDxtYWRodW1pdGhhLnRvbGFrYW5haGFsbGkucHJhZGVlcEBpbnRlbC5jb20+Cj4gPiArICoK PiA+ICsgKiBEaXNwbGF5IFBvcnQgVGlsZWQgRGlzcGxheSBUZXN0Cj4gPiArICogVGhpcyB0ZXN0 IHBhcnNlcyB0aGUgdGlsZSBpbmZvcm1hdGlvbiBvZiB0aGUgY29ubmVjdG9ycyB0aGF0IGhhdmUg VElMRQo+ID4gKyAqIHByb3BlcnR5IHNldCwgc2V0cyB1cCB0aGUgZnJhbWVidWZmZXIgd2l0aCBj b3JyZWN0IG9mZnNldHMgY29ycmVzcG9uZGluZyB0bwo+ID4gKyAqIHRoZSB0aWxlIG9mZnNldHMg YW5kIGRvZXMgYW4gYXRvbWljIG1vZGVzZXQgd2l0aCB0d28gQ1JUQ3MgZm9yIHR3bwo+ID4gKyAq IGNvbm5lY3RvcnMuIFBhZ2UgZmxpcCBldmVudCB0aW1lc3RhbXAgZnJvbSBlYWNoIENSVEMgaXMg Y29sbGVjdGVkIGFuZAo+ID4gKyAqIGNvbXBhcmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgb2Nj dXJyZWQgaW4gYSBzeW5jaHJvbm91cyBtYW5uZXIuCj4gPiArICoKPiA+ICsgKiBUaGlzIHRlc3Qg Y3VycmVudGx5IHN1cHBvcnRzIG9ubHkgaG9yaXpvbnRhbGx5IHRpbGVkIGRpc3BsYXlzLCBpbiBs aW5lIHdpdGgKPiA+ICsgKiB0aGUgZGlzcGxheXMgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwgYXQg dGhlIG1vbWVudC4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSAiaWd0LmgiCj4gPiArI2lu Y2x1ZGUgInBvbGwuaCIKPiA+ICsjaW5jbHVkZSAiZHJtX21vZGUuaCIKPiA+ICsjaW5jbHVkZSAi ZHJtX2ZvdXJjYy5oIgo+ID4gKwo+ID4gK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0IGZvciBE aXNwbGF5IFBvcnQgVGlsZWQgRGlzcGxheXMiKTsKPiA+ICsKPiA+ICt0eXBlZGVmIHN0cnVjdCB7 Cj4gPiArCWludCBkcm1fZmQ7Cj4gPiArCWludCBudW1faF90aWxlczsKPiA+ICsJaWd0X2Rpc3Bs YXlfdCAqZGlzcGxheTsKPiA+ICsJZW51bSBpZ3RfY29tbWl0X3N0eWxlIGNvbW1pdDsKPiA+ICt9 IGRhdGFfdDsKPiA+ICsKPiA+ICt0eXBlZGVmIHN0cnVjdCB7Cj4gPiArCWlndF9vdXRwdXRfdCAq b3V0cHV0Owo+ID4gKwlpZ3RfdGlsZV9pbmZvX3QgdGlsZTsKPiA+ICsJaWd0X2ZiX3QgZmJfdGVz dF9wYXR0ZXJuOwo+ID4gKwllbnVtIHBpcGUgcGlwZTsKPiA+ICsJZW51bSBpZ3RfY29tbWl0X3N0 eWxlIGNvbW1pdDsKPiA+ICsJZHJtTW9kZUNvbm5lY3RvclB0ciBjb25uZWN0b3I7Cj4gPiArfSBk YXRhX2Nvbm5lY3Rvcl90Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHJtX3Byb3BlcnR5X2lzX3Rp bGUoZHJtTW9kZVByb3BlcnR5UHRyIHByb3ApCj4gPiArewo+ID4gKwlyZXR1cm4gKHN0cmNtcChw cm9wLT5uYW1lICwgIlRJTEUiKSA/IDAgOiAxKSAmJgo+ID4gKwkJCSBkcm1fcHJvcGVydHlfdHlw ZV9pcyhwcm9wLCBEUk1fTU9ERV9QUk9QX0JMT0IpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg dm9pZCBnZXRfY29ubmVjdG9yX3RpbGVfcHJvcHMoZGF0YV90ICpkYXRhLCBkcm1Nb2RlQ29ubmVj dG9yUHRyIGNvbm4sCj4gPiArCQlpZ3RfdGlsZV9pbmZvX3QgKnRpbGUpCj4gPiArewo+ID4gKwlp bnQgaSA9IDA7Cj4gPiArCWRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wOwo+ID4gKwlkcm1Nb2RlUHJv cGVydHlCbG9iUHRyIGJsb2I7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBjb25uLT5jb3Vu dF9wcm9wczsgaSsrKSB7Cj4gPiArCQlwcm9wID0gZHJtTW9kZUdldFByb3BlcnR5KGRhdGEtPmRy bV9mZCwgY29ubi0+cHJvcHNbaV0pOwo+ID4gKwo+ID4gKwkJaWd0X2Fzc2VydChwcm9wKTsKPiA+ ICsKPiA+ICsJCWlmICghZHJtX3Byb3BlcnR5X2lzX3RpbGUocHJvcCkpCj4gPiArCQkJY29udGlu dWU7Cj4gCj4gVGhpcyBicmFuY2ggbGVha3MgcHJvcC4KCkZyZWVpbmcgcHJvcCBoZXJlIGJlZm9y ZSBjb250aW51aW5nIHNoZCBmaXggdGhpcywgd2lsbCBmaXggdGhpcyBpbiB0aGUgbmV4dCByZXYK Cj4gCj4gPiArCQlibG9iID0gZHJtTW9kZUdldFByb3BlcnR5QmxvYihkYXRhLT5kcm1fZmQsCj4g PiArCQkJCWNvbm4tPnByb3BfdmFsdWVzW2ldKTsKPiA+ICsKPiA+ICsJCWlmICghYmxvYikKPiA+ ICsJCQlyZXR1cm47Cj4gCj4gVGhpcyBicmFuY2ggbGVha3MgcHJvcC4KCkFncmVlLCB3aWxsIGFk ZCBkcm1Nb2RlRnJlZVByb3BlcnR5QmxvYihibG9iKTsgYmVmb3JlIHJldHVybgoKPiAKPiA+ICsJ CWlndF9wYXJzZV9jb25uZWN0b3JfdGlsZV9ibG9iKGJsb2IsIHRpbGUpOwo+ID4gKwkJYnJlYWs7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKPiA+ICsJZHJt TW9kZUZyZWVQcm9wZXJ0eUJsb2IoYmxvYik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IGdldF9udW1iZXJfb2ZfaF90aWxlcyhkYXRhX3QgKmRhdGEpCj4gPiArewo+ID4gKwlpbnQgaTsK PiA+ICsJZHJtTW9kZVJlc1B0ciByZXM7Cj4gPiArCWRybU1vZGVDb25uZWN0b3JQdHIgY29ubmVj dG9yOwo+ID4gKwlpZ3RfdGlsZV9pbmZvX3QgdGlsZSA9IHsubnVtX2hfdGlsZSA9IDB9Owo+ID4g Kwo+ID4gKwlpZ3RfYXNzZXJ0KHJlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZGF0YS0+ZHJtX2Zk KSk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCByZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkr Kykgewo+ID4gKwkJY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoZGF0YS0+ ZHJtX2ZkLAo+ID4gKwkJCQlyZXMtPmNvbm5lY3RvcnNbaV0pOwo+ID4gKwo+ID4gKwkJaWd0X2Fz c2VydChjb25uZWN0b3IpOwo+ID4gKwo+ID4gKwkJaWYgKCEoY29ubmVjdG9yLT5jb25uZWN0aW9u ID09IERSTV9NT0RFX0NPTk5FQ1RFRCAmJgo+ID4gKwkJCWNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5 cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSkKPiA+ICsJCQljb250aW51ZTsK PiAKPiBUaGlzIGNhbiBiZSBzaW1wbGlmaWVkIHRvCj4gCj4gICAgIGNvbm5lY3Rpb24gIT0gRFJN X01PREVfQ09OTkVDVEVEIHx8Cj4gICAgIGNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5F Q1RPUl9EaXNwbGF5UG9ydAoKWWVzIHdpbGwgc2ltcGxpZnkgaW4gdGhlIG5leHQgcmV2Cgo+IAo+ IEFkZGl0aW9uYWxseSwgdGhpcyBicmFuY2ggbGVha3MgdGhlIGNvbm5lY3Rvci4KCkhtbSwgc28g Y2FsbCBkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOyBiZWZvcmUgY29udGludWluZyBz aGQgYmUgZm9sbG93ZWQgaW4gZ2VuZXJhbCB0aHJvdWdob3V0CnRoZSBjb2RlIHJpZ2h0PwoKPiAK PiA+ICsJCWdldF9jb25uZWN0b3JfdGlsZV9wcm9wcyhkYXRhLCBjb25uZWN0b3IsICZ0aWxlKTsK PiA+ICsJCWRhdGEtPm51bV9oX3RpbGVzID0gdGlsZS5udW1faF90aWxlOwo+ID4gKwkJYnJlYWs7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzKTsKPiA+ICsJZHJt TW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZv aWQgZ2V0X2Nvbm5lY3RvcihkYXRhX3QgKmRhdGEsIGRhdGFfY29ubmVjdG9yX3QgKmNvbm4pCj4g Cj4gTml0OiBzaW5jZSB0aGlzIGZpbGxzIGFsbCBjb25uZWN0b3JzLCBtYXliZSBpdCBzaG91bGQg YmUgbmFtZWQKPiBnZXRfY29ubmVjdG9ycyAod2l0aCBhbiBzKS4gQWxzbyBpdCdzIG5vdCBjbGVh ciB0aGF0IGNvbm4gcmVmZXJzIHRvIGFuCj4gYXJyYXkgb2YgY29ubmVjdG9ycywgbWF5YmUgaXQg c2hvdWxkIGJlIHJlbmFtZWQgdG8gY29ubnMuCgpZZXMgSSBhZ3JlZSB0aGF0IHdpbGwgbWFrZSBp dCBtb3JlIHJlYWRhYmxlLCBJIHdpbGwgZml4IGl0IGluIG5leHQgcmV2Cgo+IAo+IChBcHBsaWVz IHRvIHRoZSB3aG9sZSBwYXRjaCkKPiAKPiA+ICt7Cj4gPiArCWludCBjb3VudCA9IDA7Cj4gPiAr CWlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ID4gKwo+ID4gKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0 cHV0KGRhdGEtPmRpc3BsYXksIG91dHB1dCkgewo+ID4gKwkJY29ubltjb3VudF0uY29ubmVjdG9y ID0gZHJtTW9kZUdldENvbm5lY3RvcihkYXRhLT5kaXNwbGF5LT5kcm1fZmQsCj4gPiArCQkJCQkJ b3V0cHV0LT5pZCk7Cj4gPiArCj4gPiArCQlpZ3RfYXNzZXJ0KGNvbm5bY291bnRdLmNvbm5lY3Rv cik7Cj4gPiArCj4gPiArCQlpZiAoIShjb25uW2NvdW50XS5jb25uZWN0b3ItPmNvbm5lY3Rvcl90 eXBlID09Cj4gPiArCQkJRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSkKPiA+ICsJCQlj b250aW51ZTsKPiAKPiBUaGlzIGNhbiBiZSBzaW1wbGlmaWVkIHRvCj4gCj4gICAgIGlmIChjb25u ZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpCj4gCj4gQWRkaXRp b25hbGx5LCB0aGlzIGJyYW5jaCBsZWFrcyB0aGUgY29ubmVjdG9yLgo+IAo+ID4gKwkJZ2V0X2Nv bm5lY3Rvcl90aWxlX3Byb3BzKGRhdGEsIGNvbm5bY291bnRdLmNvbm5lY3RvciwKPiA+ICsJCQkm Y29ubltjb3VudF0udGlsZSk7Cj4gPiArCj4gPiArCQkvKiBDaGVjayBpZiB0aGUgY29ubmVjdG9y cyBiZWxvbmcgdG8gdGhlIHNhbWUgdGlsZSBncm91cCAqLwo+ID4gKwkJaWYgKGNvdW50ID4gMCkK PiA+ICsJCQlpZ3RfYXNzZXJ0KGNvbm5bY291bnRdLnRpbGUudGlsZV9ncm91cF9pZCA9PQo+ID4g KwkJCQljb25uW2NvdW50LTFdLnRpbGUudGlsZV9ncm91cF9pZCk7Cj4gPiArCj4gPiArCQljb3Vu dCsrOwo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArcmVzZXRfZnJh bWVidWZmZXIoaW50IGRybV9mZCwgaWd0X291dHB1dF90ICpvdXRwdXQsIGlndF9mYl90ICpmYikK PiA+ICt7Cj4gPiArCWlndF9wbGFuZV90ICpwcmltYXJ5Owo+ID4gKwo+ID4gKwlwcmltYXJ5ID0g aWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkp Owo+ID4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOwo+ID4gKwlpZ3RfcmVtb3Zl X2ZiKGRybV9mZCwgZmIpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCByZXNldF9vdXRw dXQoaWd0X291dHB1dF90ICpvdXRwdXQpCj4gPiArewo+ID4gKwlpZ3Rfb3V0cHV0X3NldF9waXBl KG91dHB1dCwgUElQRV9OT05FKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgdGVzdF9j bGVhbnVwKGRhdGFfdCAqZGF0YSwgZGF0YV9jb25uZWN0b3JfdCAqY29ubikKPiA+ICt7Cj4gPiAr CWludCBjb3VudDsKPiA+ICsKPiA+ICsJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgZGF0YS0+bnVt X2hfdGlsZXM7IGNvdW50KyspIHsKPiA+ICsJCWlmIChjb25uW2NvdW50XS5vdXRwdXQpIHsKPiA+ ICsJCQlyZXNldF9mcmFtZWJ1ZmZlcihkYXRhLT5kcm1fZmQsIGNvbm5bY291bnRdLm91dHB1dCwK PiA+ICsJCQkJJmNvbm5bY291bnRdLmZiX3Rlc3RfcGF0dGVybik7Cj4gPiArCQkJcmVzZXRfb3V0 cHV0KGNvbm5bY291bnRdLm91dHB1dCk7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsJaWd0X2Rpc3Bs YXlfY29tbWl0MihkYXRhLT5kaXNwbGF5LCBkYXRhLT5jb21taXQpOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgdm9pZCBzZXR1cF9tb2RlKGRhdGFfdCAqZGF0YSwgZGF0YV9jb25uZWN0b3JfdCAq Y29ubl9kYXRhKQo+IAo+IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBhY3R1YWxseSBzZXR1cCB0aGUg b3V0cHV0IG1vZGUsIGl0IG9ubHkgc2V0cyB1cAo+IHRoZSBwaXBlLiBJcyB0aGlzIGFuIG92ZXJs b29rPwoKeWVzIHdlIGp1c3Qgc2V0IHRoZSBwaXBlL0NSVEMgaGVyZSBhbmQgdGhlIGF0b21pYyBj b21taXQgY2FsbCBkb2VzIGEgY29tcGxldGUKbW9kZXNldCB3aXRoIGNoZWNrIGFuZCBjb21taXQg d2l0aG91dCBhbnkgb3V0cHV0IHNpbmNlIHdlIGRpZG50IHNldHVwIGZiIHlldC4KQnV0IEkgYWdy ZWUgdGhhdCBjYWxsaW5nIGl0IGp1c3Qgc2V0dXBfcGlwZSByb2JhYmx5IG1ha2VzIGl0IG1vcmUg aW50dWl0aXZlCgo+IAo+ID4gK3sKPiA+ICsJaW50IGNvdW50ID0gMDsKPiA+ICsJZW51bSBwaXBl IHBpcGU7Cj4gPiArCWlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ID4gKwo+ID4gKwlmb3IgKGNvdW50 ID0gMDsgY291bnQgPCBkYXRhLT5udW1faF90aWxlczsgY291bnQrKykgewo+ID4gKwkJb3V0cHV0 ID0gaWd0X291dHB1dF9mcm9tX2Nvbm5lY3RvcihkYXRhLT5kaXNwbGF5LAo+ID4gKwkJCQljb25u X2RhdGFbY291bnRdLmNvbm5lY3Rvcik7Cj4gPiArCj4gPiArCQkvKgo+ID4gKwkJICogVGhlIG91 dHB1dCBpcyBzZXQgdG8gUElQRV9OT05FIGFuZCB0aGVuIGFzc2lnbmVkIGEgcGlwZS4KPiA+ICsJ CSAqIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUgYSBjb21wbGV0ZSBtb2Rlc2V0IG9jY3VyZXMgZXZl cnkKPiA+ICsJCSAqIHRpbWUgdGhlIHRlc3QgaXMgcnVuLgo+ID4gKwkJICovCj4gPiArCQlyZXNl dF9vdXRwdXQob3V0cHV0KTsKPiAKPiBJcyB0aGlzIG5lY2Vzc2FyeT8KClllcyB0aGlzIGlzIG5l Y2Vzc2FyeSB0byBmb3JjZSBhIGNvbXBsZXRlIG1vZGVzZXQgZm9yIGVhY2ggdGVzdCBzaW5jZSBp ZiB0aGUgcGlwZQphc3NpZ25tZW50cyBvciB0aGUgbW9kZSBoYXMgbm90IGNoYW5nZWQgaXQgd2ls bCBub3Qgc2V0IG5lZWRzX21vZGVzZXQgZmxhZyBpbiBzaWRlIGtlcm5lbAphbmQgd2lsbCBub3Qg ZG8gYSBmdWxsIGF0b21pYyBjaGVjayBhbmQgY29tbWl0LgoKPiAKPiA+ICsJCWZvcl9lYWNoX3Bp cGUoZGF0YS0+ZGlzcGxheSwgcGlwZSkgewo+ID4gKwkJCWlmIChjb3VudCA+IDAgJiYgcGlwZSA9 PSBjb25uX2RhdGFbY291bnQtMV0ucGlwZSkKPiA+ICsJCQkJY29udGludWU7Cj4gPiArCj4gPiAr CQkJaWYgKGlndF9waXBlX2Nvbm5lY3Rvcl92YWxpZChwaXBlLCBvdXRwdXQpKSB7Cj4gPiArCj4g PiArCQkJCWNvbm5fZGF0YVtjb3VudF0ucGlwZSA9IHBpcGU7Cj4gPiArCQkJCWNvbm5fZGF0YVtj b3VudF0ub3V0cHV0ID0gb3V0cHV0Owo+ID4gKwo+ID4gKwkJCQlpZ3Rfb3V0cHV0X3NldF9waXBl KGNvbm5fZGF0YVtjb3VudF0ub3V0cHV0LAo+ID4gKwkJCQkJY29ubl9kYXRhW2NvdW50XS5waXBl KTsKPiA+ICsJCQkJYnJlYWs7Cj4gPiArCQkJfQo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCWlndF9k aXNwbGF5X2NvbW1pdF9hdG9taWMoZGF0YS0+ZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FMTE9X X01PREVTRVQsCj4gPiArCQlOVUxMKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgc2V0 dXBfZnJhbWVidWZmZXIoZGF0YV90ICpkYXRhLCBkYXRhX2Nvbm5lY3Rvcl90ICpjb25uKQo+ID4g K3sKPiA+ICsJaW50IGNvdW50Owo+ID4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPiA+ICsKPiA+ ICsJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgZGF0YS0+bnVtX2hfdGlsZXM7IGNvdW50KyspIHsK PiA+ICsKPiA+ICsJCWlndF9jcmVhdGVfcGF0dGVybl9mYihkYXRhLT5kcm1fZmQsCj4gPiArCQkJ KGNvbm5bY291bnRdLnRpbGUudGlsZV9oX3NpemUgKgo+ID4gKwkJCWRhdGEtPm51bV9oX3RpbGVz KSwKPiAKPiBEbyB3ZSBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBudW1iZXIgb2YgaG9yaXpvbnRh bCB0aWxlcyBoZXJlPyBJdCBzZWVtcwo+IHdlIG9ubHkgdXNlIHRoZSBmaXJzdCB0aWxlX2hfc2l6 ZSBwaXhlbHMgb2YgdGhlIGJ1ZmZlci4gQW0gSSBtaXNzaW5nCj4gc29tZXRoaW5nPwo+IAoKWWVz IHdlIG9ubHkgdXNlIHRoZSB0aWxlX2hfc2l6ZSBvZiB0aGUgYnVmZmVyIGF0IHRoZSBwcm9wZXIg b2Zmc2V0IG9mIHRpbGVfaF9sb2MKU28gdGhpcyBiZWxvdyBsb2dpYyBzaGQgYmUgbW9kaWZpZWQg dG8gb25seSBjcmVhdGUgZmIgb2YgdGhlIHNpemUgdGlsZV9oX3NpemUgaWYgaXRzIGluIHRoZSBm b3IgbG9vcApvciBqdXN0IGNyZWF0ZSBvbmUgZmIgb3V0c2lkZSB0aGUgbG9vcCBvZiB0aGUgc2l6 ZSB0aWxlX2hfc2l6ZSAqIG51bV90aWxlcyBhbmQgdGhlbiBqdXN0IHVzZSB0aGF0IHdpdGggZGZm ZXJlbnQKb2Zmc2V0cyBmb3IgdHdvIENSVENzCgpXaGVuIEkgZGlzY3Vzc2VkIHRoaXMgb24gZHJp LWRldmVsLCBwZW9wbGUgc2FpZCB0aGF0IHJlYWwgdXNlcnNwYWNlIGNhbiBkZWNpZGUgdG8gZG8g ZWl0aGVyIG9uZSBzaW5nbGUgZmIgZm9yIGFsbCB0aWxlcwpvciBzZXBhcmF0ZSBvbmVzIHdoZXJl IGVhY2ggaXMgb2YgdGhlIHNpemUgZXF1YWwgdG8gdGlsZSBzaXplLgoKTGV0IG1lIGtub3cgaWYg dGhlcmUgaXMgYSBwcmVmZXJlbmNlCgo+IEJ1dCBtYXliZSBhIHRlc3QgdGhhdCB3b3VsZCBiZXR0 ZXIgcmVmbGVjdCByZWFsaXR5IHdvdWxkIGNyZWF0ZSBhCj4gc2luZ2xlIGZyYW1lYnVmZmVyIGZv ciBhbGwgdGlsZWQgZGlzcGxheXMsIHRvIGRpc3BsYXkgYSBzaW5nbGUgaW1hZ2UKPiBhY3Jvc3Mg YWxsIG9mIHRoZW0/Cj4gCj4gPiArCQkJY29ubltjb3VudF0udGlsZS50aWxlX3Zfc2l6ZSwKPiA+ ICsJCQlEUk1fRk9STUFUX1hCR1I4ODg4LAo+ID4gKwkJCUxPQ0FMX0RSTV9GT1JNQVRfTU9EX05P TkUsCj4gPiArCQkJJmNvbm5bY291bnRdLmZiX3Rlc3RfcGF0dGVybik7Cj4gPiArCj4gPiArCQlw cmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShjb25uW2NvdW50XS5vdXRwdXQsCj4g PiArCQkJCURSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ID4gKwo+ID4gKwkJaWd0X3BsYW5lX3Nl dF9mYihwcmltYXJ5LCAmY29ubltjb3VudF0uZmJfdGVzdF9wYXR0ZXJuKTsKPiA+ICsKPiA+ICsJ CWlndF9mYl9zZXRfc2l6ZSgmY29ubltjb3VudF0uZmJfdGVzdF9wYXR0ZXJuLCBwcmltYXJ5LAo+ ID4gKwkJCQljb25uW2NvdW50XS50aWxlLnRpbGVfaF9zaXplLAo+ID4gKwkJCQljb25uW2NvdW50 XS50aWxlLnRpbGVfdl9zaXplKTsKPiA+ICsKPiA+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oJmNv bm5bY291bnRdLmZiX3Rlc3RfcGF0dGVybiwgcHJpbWFyeSwKPiA+ICsJCQkJKGNvbm5bY291bnRd LnRpbGUudGlsZV9oX3NpemUgKgo+ID4gKwkJCQljb25uW2NvdW50XS50aWxlLnRpbGVfaF9sb2Mp LAo+ID4gKwkJCQkoY29ubltjb3VudF0udGlsZS50aWxlX3Zfc2l6ZSAqCj4gPiArCQkJCWNvbm5b Y291bnRdLnRpbGUudGlsZV92X2xvYykpOwo+ID4gKwo+ID4gKwkJaWd0X3BsYW5lX3NldF9zaXpl KHByaW1hcnksCj4gPiArCQkJCWNvbm5bY291bnRdLnRpbGUudGlsZV9oX3NpemUsCj4gPiArCQkJ CWNvbm5bY291bnRdLnRpbGUudGlsZV92X3NpemUpOwo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIHBhZ2VfZmxpcF9oYW5kbGVyKGludCBmZCwgdW5zaWduZWQgaW50IHNlcSwK PiA+ICsJCXVuc2lnbmVkIGludCB0dl9zZWMsIHVuc2lnbmVkIGludCB0dl91c2VjLAo+ID4gKwkJ dW5zaWduZWQgaW50IGNydGNfaWQsIHZvaWQgKmRhdGEpCj4gPiArewo+ID4gKwlib29sIGV4cHIg PSBmYWxzZTsKPiA+ICsJc3RhdGljIHVuc2lnbmVkIGludCBfdHZfc2VjLCBfdHZfdXNlYzsKPiA+ ICsKPiA+ICsJaWd0X2RlYnVnKCJQYWdlIEZsaXAgRXZlbnQgcmVjZWl2ZWQgZnJvbSBDUlRDOiVk IGF0ICV1OiV1XG4iLCBjcnRjX2lkLAo+ID4gKwkJdHZfc2VjLCB0dl91c2VjKTsKPiAKPiBXZSBz aG91bGQgYWxzbyBtYWtlIHN1cmUgd2UgcmVjZWl2ZSBleGFjdGx5IG9uZSBwYWdlLWZsaXAgcGVy IENSVEMuCj4gQ3VycmVudGx5IHdlIGRvbid0IHVzZSBjcnRjX2lkIChhcGFydCBmcm9tIGxvZ2dp bmcgcHVycG9zZXMpLgoKSSBzZWUgc28gc29tZWhvdyBoYXZlIGEgc3RhdGljIGNvdW50IG9mIGV2 ZW50cyBhbmQgbWFrZSBzdXJlIHBlciBjcnRjIGlkIGl0cyB0aGUgc2FtZSBjb3VudCBvcgpzb21l IHNpbWlsYXIgbG9naWMKCj4gCj4gPiArCS8qIFNraXAgdGhlIGZvbGxvd2luZyBjaGVja3MgZm9y IHRoZSBmaXJzdCBwYWdlIGZsaXAgZXZlbnQgKi8KPiA+ICsJaWYgKF90dl9zZWMgPT0gMCB8fCBf dHZfdXNlYyA9PSAwKSB7Cj4gPiArCQlfdHZfc2VjID0gdHZfc2VjOwo+ID4gKwkJX3R2X3VzZWMg PSB0dl91c2VjOwo+ID4gKwkJcmV0dXJuOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qCj4gPiArCSAq IEZvciBzZWFtbGVzcyB0ZWFyLWZyZWUgZGlzcGxheSwgdGhlIHBhZ2UgZmxpcCBldmVudCB0aW1l c3RhbXBzCj4gPiArCSAqIGZyb20gYWxsIHRoZSB0aWxlcyBzaG91bGQgbm90IGRpZmZlciBieSBt b3JlIHRoYW4gMTB1cy4KPiA+ICsJICovCj4gPiArCWV4cHIgPSB0dl9zZWMgPT0gX3R2X3NlYyAm JiAoYWJzKHR2X3VzZWMgLSBfdHZfdXNlYykgPCAxMCk7Cj4gCj4gTml0OiB0aGlzIGNvdWxkIGJl IHJlbmFtZWQgdG8gZS5nLiBpc19vbl90aW1lLCBleHByIGlzIGEgcHJldHR5IHZhZ3VlCj4gbmFt ZS4KCnllcyBhZ3JlZSB3aWxsIHJlbmFtZSB0byBtYWtlIGl0IG1vcmUgcmVhZGFibGUKCj4gCj4g PiArCWlndF9mYWlsX29uX2YoIWV4cHIsICJEZWxheWVkIHBhZ2UgZmxpcCBldmVudCBmcm9tIENS VEM6JWQgYXQgJXU6JXVcbiIsCj4gPiArCQljcnRjX2lkLCB0dl9zZWMsIHR2X3VzZWMpOwo+ID4g Kwo+ID4gKwlpZiAodHZfc2VjIDwgX3R2X3NlYykKPiA+ICsJCV90dl9zZWMgPSB0dl9zZWM7Cj4g PiArCWlmICh0dl91c2VjIDwgX3R2X3VzZWMpCj4gPiArCQlfdHZfdXNlYyA9IHR2X3VzZWM7Cj4g Cj4gVGhpcyB1cGRhdGVzIHRoZSB0aW1lc3RhbXAgb24gZWFjaCBwYWdlLWZsaXAuIFRoaXMgbWVh bnMgdGhhdCB0aGUgZmlyc3QKPiBhbmQgbGFzdCBwYWdlLWZsaXBzIGNvdWxkIGJlIGRlbGF5ZWQg YnkgbW9yZSB0aGFuIDEwwrVzIGlmIHRoZXJlIGFyZQo+IGludGVybWVkaWF0ZSBwYWdlLWZsaXBz LiBGb3IgaW5zdGFuY2UsIGlmIHRoZSBmaXJzdCBwYWdlLWZsaXAgaGFwcGVucwo+IGF0IHQ9MMK1 cyBhbmQgdGhlIHNlY29uZCBvbmUgaGFwcGVucyBhdCB0PTnCtXMsIHRoZSBsYXN0IG9uZSBjb3Vs ZCBoYXBwZW4KPiBhdCB0PTE4wrVzIHdpdGhvdXQgbWFraW5nIHRoaXMgdGVzdCBmYWlscy4gSXMg dGhpcyBzb21ldGhpbmcgd2Ugd2FudCB0bwo+IGFsbG93PwoKTm9wZSBhbGwgb2YgdGhlbSBzaG91 bGQgaGFwcGVuIHdpdGhpbiB0aGUgc2FtZSB2Ymxhbmsgc28gdGhlIGRpZmYgYmV0d2VlbiBhbGwK c2hvdWxkIGJlIDwxMHVzLCB3aWxsIGhhdmUgdG8gbW9kaWZ5IHRoZSBsb2dpYyB0byBkbyB0aGF0 LgoKc28gYmFzaWNhbGx5IGluc3RlYWQgb2YgbWFraW5nIDwxMHVzIGNvbmRpdGlvbiBmb3IgdGhl IGNvbnNlY3V0aXZlIG9uZXMsIGl0IHNob3VsZCBiZSBiZXR3ZWVuIHRoZSBmaXJzdCBvbmUKYW5k IGFsbCBvdGhlciBldmVudHMsIGNvcnJlY3Q/Cgo+IAo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg dm9pZCB3YWl0X2Zvcl9wYWdlZmxpcChpbnQgZHJtX2ZkKQo+ID4gK3sKPiA+ICsJc3RydWN0IHBv bGxmZCBwZmQ7Cj4gPiArCWRybUV2ZW50Q29udGV4dCBkcm1fZXZlbnQ7Cj4gCj4gTml0OiB0byBt YWtlIHN1cmUgZ2FyYmFnZSBpc24ndCByZWFkIGZyb20gdGhpcyBzdHJ1Y3QgKHRoZXJlIGFyZSBv dGhlcgo+IGZ1bmN0aW9uIHBvaW50ZXJzKSwgaXQncyBwcm9iYWJseSBzYWZlciB0byB6ZXJvLWZp bGwgaXQgKD0gezB9KS4KCkdvdCBpdAoKPiAKPiA+ICsJZHJtX2V2ZW50LnZlcnNpb24gPSAzOwo+ ID4gKwlkcm1fZXZlbnQucGFnZV9mbGlwX2hhbmRsZXIyID0gcGFnZV9mbGlwX2hhbmRsZXI7Cj4g PiArCj4gPiArCXBmZC5mZCA9IGRybV9mZDsKPiA+ICsJcGZkLmV2ZW50cyA9IFBPTExJTjsKPiA+ ICsJcGZkLnJldmVudHMgPSAwOwo+ID4gKwo+ID4gKwlwb2xsKCZwZmQsIDEsIDEwMDApOwo+IAo+ IE1heWJlIHdlIHNob3VsZCBjaGVjayBwb2xsKDIpJ3MgcmV0dXJuIHZhbHVlPwoKcG9sbCgyKT8g T3IganVzdCBjaGVjayByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHBvbGwoKSBqdXN0IGZv ciBlcnJvciBoYW5kbGluZz8KCj4gCj4gPiArCWlmIChwZmQucmV2ZW50cyAmIFBPTExJTikKPiA+ ICsJCWRybUhhbmRsZUV2ZW50KGRybV9mZCwgJmRybV9ldmVudCk7Cj4gCj4gSWYgd2UgZG9uJ3Qg Z2V0IFBPTExJTiAoZS5nLiBpZiB3ZSB0aW1lb3V0KSwgd2FpdF9mb3JfcGFnZWZsaXAgd2lsbAo+ IHNpbGVudGx5IGRvIG5vdGhpbmcsIGFuZCB0aGUgdGVzdCB3aWxsIHBhc3MuIEluc3RlYWQsIHdl IHByb2JhYmx5IHdhbnQKPiB0byBmYWlsIGluIHRoaXMgY2FzZS4KClllcyB0aGF0cyBjb3JyZWN0 LCBqdXN0IGFkZCBlbHNlIGNhc2Ugd2l0aCBpZ3RfYXNzZXJ0PwoKPiAKPiA+ICt9Cj4gPiArCj4g PiAraWd0X21haW4KPiA+ICt7Cj4gPiArCWlndF9kaXNwbGF5X3QgZGlzcGxheTsKPiA+ICsJZGF0 YV9jb25uZWN0b3JfdCAqY29ubl9kYXRhID0gTlVMTDsKPiA+ICsJZGF0YV90IGRhdGEgPSB7LmRy bV9mZCA9IDAsIC5udW1faF90aWxlcyA9IDAsCj4gPiArCQkgICAgICAgLmRpc3BsYXkgPSBOVUxM LCAuY29tbWl0ID0gQ09NTUlUX0xFR0FDWX07Cj4gCj4gTml0OiBvbmUgY2FuIGp1c3QgZG8gYXNz aWduIHRvIHswfSB0byB6ZXJvLWZpbGwgdGhlIHN0cnVjdC4KCkdvdCBpdAoKPiAKPiA+ICsJaWd0 X2ZpeHR1cmUgewo+ID4gKwkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERS SVZFUl9BTlkpOwo+ID4gKwo+ID4gKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwo+ ID4gKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZSgmZGlzcGxheSwgZGF0YS5kcm1fZmQpOwo+ID4gKwkJ aWd0X2Rpc3BsYXlfcmVzZXQoJmRpc3BsYXkpOwo+ID4gKwo+ID4gKwkJZGF0YS5kaXNwbGF5ID0g JmRpc3BsYXk7Cj4gPiArCj4gPiArCQlnZXRfbnVtYmVyX29mX2hfdGlsZXMoJmRhdGEpOwo+ID4g KwkJaWd0X2RlYnVnKCJOdW1iZXIgb2YgSG9yaXpvbnRhbCBUaWxlczogJWRcbiIsIGRhdGEubnVt X2hfdGlsZXMpOwo+ID4gKwo+ID4gKwkJZGF0YS5jb21taXQgPSBkYXRhLmRpc3BsYXktPmlzX2F0 b21pYyA/IENPTU1JVF9BVE9NSUMgOiBDT01NSVRfTEVHQUNZOwo+IAo+IFNob3VsZCB3ZSB0cnkg dG8gcnVuIHRoaXMgdGVzdCBhdCBhbGwgb24gZHJpdmVycyB0aGF0IGRvbid0IHN1cHBvcnQKPiBh dG9taWM/Cj4gCj4gSWYgdGhlIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgYXRvbWljLCB1c2VyLXNw YWNlIHdpbGwgc3VibWl0IHR3byBwYWdlLQo+IGZsaXAgcmVxdWVzdHMuIEhvd2V2ZXIgaXQncyBw b3NzaWJsZSB0aGF0IHRoZSBoYXJkd2FyZSBleGVjdXRlcyBhIHBhZ2UtCj4gZmxpcCBiZXR3ZWVu IGJvdGggcmVxdWVzdHM6IHVzZXItc3BhY2UgY2FsbHMgdGhlIGZpcnN0IGRybU1vZGVQYWdlRmxp cCwKPiB0aGUgdmJsYW5rIGZvciB0aGlzIHBhcnRpY3VsYXIgQ1JUQyB0cmlnZ2VycywgdGhlbiB1 c2VyLXNwYWNlIGNhbGxzIHRoZQo+IHNlY29uZCBkcm1Nb2RlUGFnZUZsaXAuIFBhZ2UtZmxpcHMg d2lsbCBiZSBvdXQtb2Ytc3luYyBieSBvbmUgZnJhbWUuCgpIbW0sIHllYSBzaG91bGQgcHJvYmJh bHkgaGF2ZSBpZ3RfcmVxdWlyZSBvbiBhdG9taWMKCj4gCj4gPiArCQlpZiAoZGF0YS5udW1faF90 aWxlcyA+IDApCj4gPiArCQkJY29ubl9kYXRhID0gbWFsbG9jKGRhdGEubnVtX2hfdGlsZXMgKiBz aXplb2YoZGF0YV9jb25uZWN0b3JfdCkpOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlndF9zdWJ0ZXN0 KCJiYXNpYy10ZXN0LXBhdHRlcm4iKSB7Cj4gPiArCQlpZ3Rfc2tpcF9vbihkYXRhLm51bV9oX3Rp bGVzID09IDApOwo+ID4gKwkJaWd0X2Fzc2VydChjb25uX2RhdGEpOwo+ID4gKwo+ID4gKwkJZ2V0 X2Nvbm5lY3RvcigmZGF0YSwgY29ubl9kYXRhKTsKPiA+ICsJCXNldHVwX21vZGUoJmRhdGEsIGNv bm5fZGF0YSk7Cj4gPiArCQlzZXR1cF9mcmFtZWJ1ZmZlcigmZGF0YSwgY29ubl9kYXRhKTsKPiA+ ICsJCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGF0YS5kaXNwbGF5LCBEUk1fTU9ERV9BVE9N SUNfTk9OQkxPQ0sgfAo+ID4gKwkJCURSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwgTlVMTCk7Cj4g PiArCQl3YWl0X2Zvcl9wYWdlZmxpcChkYXRhLmRybV9mZCk7Cj4gCj4gSGVyZSB3ZSBvbmx5IHdh aXQgZm9yIGEgc2luZ2xlIHBhZ2UtZmxpcC4gVGhpcyB3aWxsIG9ubHkgc3Rhc2ggdGhlCj4gdGlt ZXN0YW1wIG9mIHRoZSBmcnN0IHBhZ2UtZmxpcCB3aXRob3V0IGNoZWNraW5nIHRoZSB0aW1lLXN0 YW1wIG9mCj4gc3Vic2VxdWVudCBwYWdlLWZsaXBzLiBXZSBzaG91bGQgd2FpdCBmb3IgYXMgbWFu eSBwYWdlLWZsaXBzIGFzIGVuYWJsZWQKPiB0aWxlZCBjb25uZWN0b3JzLgoKVGhhdCB3YXMgb3Vy IGluaXRpYWwgdW5kZXJzdGFuZGluZyBhcyB3ZWxsLCBidXQgd2l0aCBqdXN0IG9uZSB3YWl0X2Zv cl9wYWdlZmxpcCBjYWxsIHdlCndlcmUgZ2V0aW5nIHR3byBwYWdlIGZsaXAgZXZlbnRzIGZvciB0 d28gdGlsZXMKRG8gd2UgbmVlZCB0byBjYWxsIHdhaXQgZm9yIHBhZ2UgZmxpcCBleHBsaWNpdGx5 IHRoZSBudW1iZXIgb2YgdGltZXMgPSBudW1iZXIgb2YgdGlsZXM/CgpSZWdhcmRzCk1hbmFzaQoK PiAKPiA+ICsJCXRlc3RfY2xlYW51cCgmZGF0YSwgY29ubl9kYXRhKTsKPiA+ICsJfQo+ID4gKwo+ ID4gKwlpZ3RfZml4dHVyZSB7Cj4gPiArCQlmcmVlKGNvbm5fZGF0YSk7Cj4gPiArCQljbG9zZShk YXRhLmRybV9mZCk7Cj4gPiArCQlrbXN0ZXN0X3Jlc3RvcmVfdnRfbW9kZSgpOwo+ID4gKwkJaWd0 X2Rpc3BsYXlfZmluaShkYXRhLmRpc3BsYXkpOwo+ID4gKwl9Cj4gPiArfQo+ID4gZGlmZiAtLWdp dCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKPiA+IGluZGV4IGE3YjJi MzIyLi41MDI5MmRmOCAxMDA2NDQKPiA+IC0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCj4gPiArKysg Yi90ZXN0cy9tZXNvbi5idWlsZAo+ID4gQEAgLTI2LDYgKzI2LDcgQEAgdGVzdF9wcm9ncyA9IFsK PiA+ICAJJ2ttc19jdXJzb3JfZWRnZV93YWxrJywKPiA+ICAJJ2ttc19jdXJzb3JfbGVnYWN5JywK PiA+ICAJJ2ttc19kcF9kc2MnLAo+ID4gKwkna21zX2RwX3RpbGVkX2Rpc3BsYXknLAo+ID4gIAkn a21zX2RyYXdfY3JjJywKPiA+ICAJJ2ttc19mYmNvbl9mYnQnLAo+ID4gIAkna21zX2ZlbmNlX3Bp bl9sZWFrJywKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K aWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2