From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3A8F1892A5 for ; Fri, 30 Aug 2019 11:39:57 +0000 (UTC) From: "Ser, Simon" Date: Fri, 30 Aug 2019 11:39:53 +0000 Message-ID: References: <20190823182351.25822-1-madhumitha.tolakanahalli.pradeep@intel.com> <20190823182351.25822-3-madhumitha.tolakanahalli.pradeep@intel.com> <44a51c697ed71dbf239322e20e9de0b18bc0b42c.camel@intel.com> <20190827212949.GF701@intel.com> In-Reply-To: <20190827212949.GF701@intel.com> Content-Language: en-US Content-ID: <11332259CD50E24987D7C7412CE6EEE1@intel.com> MIME-Version: 1.0 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: "Navare, Manasi D" Cc: "igt-dev@lists.freedesktop.org" , "madhumitha.tp@gmail.com" , "Latvala, Petri" List-ID: T24gVHVlLCAyMDE5LTA4LTI3IGF0IDE0OjI5IC0wNzAwLCBNYW5hc2kgTmF2YXJlIHdyb3RlOg0K PiBPbiBUdWUsIEF1ZyAyNywgMjAxOSBhdCAwMzo0OTozOEFNIC0wNzAwLCBTZXIsIFNpbW9uIHdy b3RlOg0KPiA+IFRoYW5rcyBmb3IgdGhlIG5ldyB2ZXJzaW9uISBIZXJlIGFyZSBzb21lIG1vcmUg Y29tbWVudHMuIFNvbWUgb2YgdGhlbQ0KPiA+IGFyZSBuaXRzLCBzb21lIG9mIHRoZW0gYXJlIG1v cmUgc2VyaW91cyBxdWVzdGlvbnMuIEZlZWwgZnJlZSB0byBsZXQgbWUNCj4gPiBrbm93IGlmIEkn bSBtaXN0YWtlbiBvciBpZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZCBvbmUgb2YgdGhlbS4NCj4gDQo+ IFRoYW5rcyBmb3IgdGhlIHJldmlldyBjb21tZW50cyBTaW1vbi4gSSB3aWxsIGJlIHdvcmtpbmcg b24gYWRkcmVzc2luZyB0aGUgZm9sbG93aW5nDQo+IHJldmlldyBjb21tZW50cyBhbmQgd2lsbCB0 YWtlIG92ZXIgdGhpcyBwYXRjaCBzaW5jZSBNYWRodW1pdGhhJ3MgaW50ZXJuc2hpcCBoYXMgZW5k ZWQuDQo+IEkgcmVhbGx5IGFwcHJlY2lhdGUgYWxsIHlvdXIgaGVscCBhbmQgZmVlZGJhY2sgb24g dGhpcy4NCj4gDQo+IFBsZWFzZSBmaW5kIG15IGFuc3dlcnMgYmVsb3c6DQo+IA0KPiA+IE9uIEZy aSwgMjAxOS0wOC0yMyBhdCAxMToyMyAtMDcwMCwgTWFkaHVtaXRoYSBUb2xha2FuYWhhbGxpIFBy YWRlZXAgd3JvdGU6DQo+ID4gPiBUaGlzIHRlc3QgdmFsaWRhdGVzIHRoZSB0aWxlZCBEUCBkaXNw bGF5cyB0byBkaXNwbGF5IGEgdGVzdCBwYXR0ZXJuDQo+ID4gPiBzZWFtbGVzc2x5IGFjcm9zcyB0 aGUgdHdvIHRpbGVzLiBJdCB2YWxpZGF0ZXMgdGhlIHRyYW5zY29kZXIgcG9ydA0KPiA+ID4gc3lu YyBmZWF0dXJlIG9uIGk5MTUgdG8gZ2V0IGEgdGVhcmZyZWUgdGlsZWQgZGlzcGxheSBvdXRwdXQu DQo+ID4gPiANCj4gPiA+IFJlbGF0ZWQga2VybmVsIHdvcmsgcGF0Y2hlcy0NCj4gPiA+IGh0dHBz Oi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9zZXJpZXMvNTk4MzcvI3JldjQuDQo+ID4gPiAN Cj4gPiA+IFRoaXMgdGVzdCBjYW4gZXZlbnR1YWxseSBiZSBleHRlbmRlZCB0byBjb3ZlciB0aWxl ZCBkaXNwbGF5IHN1cHBvcnQNCj4gPiA+IG9uIG90aGVyIGNvbm5lY3RvciB0eXBlcy4NCj4gPiA+ IA0KPiA+ID4gdjI6IEFkZGVkIGEgY2hlY2sgZm9yIGNoZWNraW5nIHBhZ2VmbGlwIGV2ZW50IHRp bWVzdGFtcHMgKFNpbW9uLCBNYW5hc2kpDQo+ID4gPiAgICAgTWlub3Igc3R5bGUgY2hhbmdlcyAo U2ltb24pDQo+ID4gPiAgICBDb2RlIGNsZWFuLXVwIGFuZCByZW9yZGVyaW5nDQo+ID4gPiANCj4g PiA+IA0KPiA+ID4gQ2M6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+ DQo+ID4gPiBDYzogUGV0cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+DQo+ID4g PiBDYzogU2ltb24gU2VyIDxzaW1vbi5zZXJAaW50ZWwuY29tPg0KPiA+ID4gDQo+ID4gPiBDYzog PG1hZGh1bWl0aGEudHBAZ21haWwuY29tPg0KPiA+ID4gDQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBN YWRodW1pdGhhIFRvbGFrYW5haGFsbGkgUHJhZGVlcCA8bWFkaHVtaXRoYS50b2xha2FuYWhhbGxp LnByYWRlZXBAaW50ZWwuY29tPg0KPiA+ID4gLS0tDQo+ID4gPiAgdGVzdHMvTWFrZWZpbGUuc291 cmNlcyAgICAgICB8ICAgMSArDQo+ID4gPiAgdGVzdHMva21zX2RwX3RpbGVkX2Rpc3BsYXkuYyB8 IDM0NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ID4gIHRlc3RzL21l c29uLmJ1aWxkICAgICAgICAgICAgfCAgIDEgKw0KPiA+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMzQ4 IGluc2VydGlvbnMoKykNCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2RwX3Rp bGVkX2Rpc3BsYXkuYw0KPiA+ID4gDQo+ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUu c291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMNCj4gPiA+IGluZGV4IGMwMmU0ZDk0Li43 NTYxYWI5YiAxMDA2NDQNCj4gPiA+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMNCj4gPiA+ ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMNCj4gPiA+IEBAIC00MSw2ICs0MSw3IEBAIFRF U1RTX3Byb2dzID0gXA0KPiA+ID4gIAlrbXNfY3Vyc29yX2VkZ2Vfd2FsayBcDQo+ID4gPiAgCWtt c19jdXJzb3JfbGVnYWN5IFwNCj4gPiA+ICAJa21zX2RwX2RzYyBcDQo+ID4gPiArCWttc19kcF90 aWxlZF9kaXNwbGF5IFwNCj4gPiA+ICAJa21zX2RyYXdfY3JjIFwNCj4gPiA+ICAJa21zX2ZiY29u X2ZidCBcDQo+ID4gPiAgCWttc19mZW5jZV9waW5fbGVhayBcDQo+ID4gPiBkaWZmIC0tZ2l0IGEv dGVzdHMva21zX2RwX3RpbGVkX2Rpc3BsYXkuYyBiL3Rlc3RzL2ttc19kcF90aWxlZF9kaXNwbGF5 LmMNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleCAwMDAwMDAwMC4uMTYy ZmJkZDkNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL3Rlc3RzL2ttc19kcF90aWxl ZF9kaXNwbGF5LmMNCj4gPiA+IEBAIC0wLDAgKzEsMzQ2IEBADQo+ID4gPiArLyoNCj4gPiA+ICsg KiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiA+ID4gKyAqDQo+ID4gPiAr ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGENCj4gPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiA+ID4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24NCj4gPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gPiA+ICsgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUNCj4gPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KPiA+ID4gKyAqDQo+ID4gPiArICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dA0KPiA+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUNCj4gPiA+ICsgKiBT b2Z0d2FyZS4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQo+ID4gPiAr ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksDQo+ID4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+ID4gPiArICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVINCj4gPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORw0KPiA+ID4gKyAqIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MNCj4gPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuDQo+ID4gPiArICoN Cj4gPiA+ICsgKiBBdXRob3JzOg0KPiA+ID4gKyAqICBNYWRodW1pdGhhIFRvbGFrYW5haGFsbGkg UHJhZGVlcA0KPiA+ID4gKyAqICAgICAgPG1hZGh1bWl0aGEudG9sYWthbmFoYWxsaS5wcmFkZWVw QGludGVsLmNvbT4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIERpc3BsYXkgUG9ydCBUaWxlZCBEaXNw bGF5IFRlc3QNCj4gPiA+ICsgKiBUaGlzIHRlc3QgcGFyc2VzIHRoZSB0aWxlIGluZm9ybWF0aW9u IG9mIHRoZSBjb25uZWN0b3JzIHRoYXQgaGF2ZSBUSUxFDQo+ID4gPiArICogcHJvcGVydHkgc2V0 LCBzZXRzIHVwIHRoZSBmcmFtZWJ1ZmZlciB3aXRoIGNvcnJlY3Qgb2Zmc2V0cyBjb3JyZXNwb25k aW5nIHRvDQo+ID4gPiArICogdGhlIHRpbGUgb2Zmc2V0cyBhbmQgZG9lcyBhbiBhdG9taWMgbW9k ZXNldCB3aXRoIHR3byBDUlRDcyBmb3IgdHdvDQo+ID4gPiArICogY29ubmVjdG9ycy4gUGFnZSBm bGlwIGV2ZW50IHRpbWVzdGFtcCBmcm9tIGVhY2ggQ1JUQyBpcyBjb2xsZWN0ZWQgYW5kDQo+ID4g PiArICogY29tcGFyZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhleSBvY2N1cnJlZCBpbiBhIHN5bmNo cm9ub3VzIG1hbm5lci4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFRoaXMgdGVzdCBjdXJyZW50bHkg c3VwcG9ydHMgb25seSBob3Jpem9udGFsbHkgdGlsZWQgZGlzcGxheXMsIGluIGxpbmUgd2l0aA0K PiA+ID4gKyAqIHRoZSBkaXNwbGF5cyBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCBhdCB0aGUgbW9t ZW50Lg0KPiA+ID4gKyAqLw0KPiA+ID4gKw0KPiA+ID4gKyNpbmNsdWRlICJpZ3QuaCINCj4gPiA+ ICsjaW5jbHVkZSAicG9sbC5oIg0KPiA+ID4gKyNpbmNsdWRlICJkcm1fbW9kZS5oIg0KPiA+ID4g KyNpbmNsdWRlICJkcm1fZm91cmNjLmgiDQo+ID4gPiArDQo+ID4gPiArSUdUX1RFU1RfREVTQ1JJ UFRJT04oIlRlc3QgZm9yIERpc3BsYXkgUG9ydCBUaWxlZCBEaXNwbGF5cyIpOw0KPiA+ID4gKw0K PiA+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiA+ICsJaW50IGRybV9mZDsNCj4gPiA+ICsJaW50 IG51bV9oX3RpbGVzOw0KPiA+ID4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5Ow0KPiA+ID4gKwll bnVtIGlndF9jb21taXRfc3R5bGUgY29tbWl0Ow0KPiA+ID4gK30gZGF0YV90Ow0KPiA+ID4gKw0K PiA+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiA+ICsJaWd0X291dHB1dF90ICpvdXRwdXQ7DQo+ ID4gPiArCWlndF90aWxlX2luZm9fdCB0aWxlOw0KPiA+ID4gKwlpZ3RfZmJfdCBmYl90ZXN0X3Bh dHRlcm47DQo+ID4gPiArCWVudW0gcGlwZSBwaXBlOw0KPiA+ID4gKwllbnVtIGlndF9jb21taXRf c3R5bGUgY29tbWl0Ow0KPiA+ID4gKwlkcm1Nb2RlQ29ubmVjdG9yUHRyIGNvbm5lY3RvcjsNCj4g PiA+ICt9IGRhdGFfY29ubmVjdG9yX3Q7DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBkcm1f cHJvcGVydHlfaXNfdGlsZShkcm1Nb2RlUHJvcGVydHlQdHIgcHJvcCkNCj4gPiA+ICt7DQo+ID4g PiArCXJldHVybiAoc3RyY21wKHByb3AtPm5hbWUgLCAiVElMRSIpID8gMCA6IDEpICYmDQo+ID4g PiArCQkJIGRybV9wcm9wZXJ0eV90eXBlX2lzKHByb3AsIERSTV9NT0RFX1BST1BfQkxPQik7DQo+ ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIGdldF9jb25uZWN0b3JfdGlsZV9w cm9wcyhkYXRhX3QgKmRhdGEsIGRybU1vZGVDb25uZWN0b3JQdHIgY29ubiwNCj4gPiA+ICsJCWln dF90aWxlX2luZm9fdCAqdGlsZSkNCj4gPiA+ICt7DQo+ID4gPiArCWludCBpID0gMDsNCj4gPiA+ ICsJZHJtTW9kZVByb3BlcnR5UHRyIHByb3A7DQo+ID4gPiArCWRybU1vZGVQcm9wZXJ0eUJsb2JQ dHIgYmxvYjsNCj4gPiA+ICsNCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IGNvbm4tPmNvdW50X3By b3BzOyBpKyspIHsNCj4gPiA+ICsJCXByb3AgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZGF0YS0+ZHJt X2ZkLCBjb25uLT5wcm9wc1tpXSk7DQo+ID4gPiArDQo+ID4gPiArCQlpZ3RfYXNzZXJ0KHByb3Ap Ow0KPiA+ID4gKw0KPiA+ID4gKwkJaWYgKCFkcm1fcHJvcGVydHlfaXNfdGlsZShwcm9wKSkNCj4g PiA+ICsJCQljb250aW51ZTsNCj4gPiANCj4gPiBUaGlzIGJyYW5jaCBsZWFrcyBwcm9wLg0KPiAN Cj4gRnJlZWluZyBwcm9wIGhlcmUgYmVmb3JlIGNvbnRpbnVpbmcgc2hkIGZpeCB0aGlzLCB3aWxs IGZpeCB0aGlzIGluIHRoZSBuZXh0IHJldg0KPiANCj4gPiA+ICsJCWJsb2IgPSBkcm1Nb2RlR2V0 UHJvcGVydHlCbG9iKGRhdGEtPmRybV9mZCwNCj4gPiA+ICsJCQkJY29ubi0+cHJvcF92YWx1ZXNb aV0pOw0KPiA+ID4gKw0KPiA+ID4gKwkJaWYgKCFibG9iKQ0KPiA+ID4gKwkJCXJldHVybjsNCj4g PiANCj4gPiBUaGlzIGJyYW5jaCBsZWFrcyBwcm9wLg0KPiANCj4gQWdyZWUsIHdpbGwgYWRkIGRy bU1vZGVGcmVlUHJvcGVydHlCbG9iKGJsb2IpOyBiZWZvcmUgcmV0dXJuDQo+IA0KPiA+ID4gKwkJ aWd0X3BhcnNlX2Nvbm5lY3Rvcl90aWxlX2Jsb2IoYmxvYiwgdGlsZSk7DQo+ID4gPiArCQlicmVh azsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3Ap Ow0KPiA+ID4gKwlkcm1Nb2RlRnJlZVByb3BlcnR5QmxvYihibG9iKTsNCj4gPiA+ICt9DQo+ID4g PiArDQo+ID4gPiArc3RhdGljIHZvaWQgZ2V0X251bWJlcl9vZl9oX3RpbGVzKGRhdGFfdCAqZGF0 YSkNCj4gPiA+ICt7DQo+ID4gPiArCWludCBpOw0KPiA+ID4gKwlkcm1Nb2RlUmVzUHRyIHJlczsN Cj4gPiA+ICsJZHJtTW9kZUNvbm5lY3RvclB0ciBjb25uZWN0b3I7DQo+ID4gPiArCWlndF90aWxl X2luZm9fdCB0aWxlID0gey5udW1faF90aWxlID0gMH07DQo+ID4gPiArDQo+ID4gPiArCWlndF9h c3NlcnQocmVzID0gZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpKTsNCj4gPiA+ICsN Cj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IHJlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7DQo+ ID4gPiArCQljb25uZWN0b3IgPSBkcm1Nb2RlR2V0Q29ubmVjdG9yQ3VycmVudChkYXRhLT5kcm1f ZmQsDQo+ID4gPiArCQkJCXJlcy0+Y29ubmVjdG9yc1tpXSk7DQo+ID4gPiArDQo+ID4gPiArCQlp Z3RfYXNzZXJ0KGNvbm5lY3Rvcik7DQo+ID4gPiArDQo+ID4gPiArCQlpZiAoIShjb25uZWN0b3It PmNvbm5lY3Rpb24gPT0gRFJNX01PREVfQ09OTkVDVEVEICYmDQo+ID4gPiArCQkJY29ubmVjdG9y LT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpKQ0KPiA+ ID4gKwkJCWNvbnRpbnVlOw0KPiA+IA0KPiA+IFRoaXMgY2FuIGJlIHNpbXBsaWZpZWQgdG8NCj4g PiANCj4gPiAgICAgY29ubmVjdGlvbiAhPSBEUk1fTU9ERV9DT05ORUNURUQgfHwNCj4gPiAgICAg Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0DQo+IA0KPiBZ ZXMgd2lsbCBzaW1wbGlmeSBpbiB0aGUgbmV4dCByZXYNCj4gDQo+ID4gQWRkaXRpb25hbGx5LCB0 aGlzIGJyYW5jaCBsZWFrcyB0aGUgY29ubmVjdG9yLg0KPiANCj4gSG1tLCBzbyBjYWxsIGRybU1v ZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7IGJlZm9yZSBjb250aW51aW5nIHNoZCBiZSBmb2xs b3dlZCBpbiBnZW5lcmFsIHRocm91Z2hvdXQNCj4gdGhlIGNvZGUgcmlnaHQ/DQoNClllYWgsIHRo YXQgd291bGQgZml4IGl0Lg0KDQo+ID4gPiArCQlnZXRfY29ubmVjdG9yX3RpbGVfcHJvcHMoZGF0 YSwgY29ubmVjdG9yLCAmdGlsZSk7DQo+ID4gPiArCQlkYXRhLT5udW1faF90aWxlcyA9IHRpbGUu bnVtX2hfdGlsZTsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiAr CWRybU1vZGVGcmVlUmVzb3VyY2VzKHJlcyk7DQo+ID4gPiArCWRybU1vZGVGcmVlQ29ubmVjdG9y KGNvbm5lY3Rvcik7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIGdldF9j b25uZWN0b3IoZGF0YV90ICpkYXRhLCBkYXRhX2Nvbm5lY3Rvcl90ICpjb25uKQ0KPiA+IA0KPiA+ IE5pdDogc2luY2UgdGhpcyBmaWxscyBhbGwgY29ubmVjdG9ycywgbWF5YmUgaXQgc2hvdWxkIGJl IG5hbWVkDQo+ID4gZ2V0X2Nvbm5lY3RvcnMgKHdpdGggYW4gcykuIEFsc28gaXQncyBub3QgY2xl YXIgdGhhdCBjb25uIHJlZmVycyB0byBhbg0KPiA+IGFycmF5IG9mIGNvbm5lY3RvcnMsIG1heWJl IGl0IHNob3VsZCBiZSByZW5hbWVkIHRvIGNvbm5zLg0KPiANCj4gWWVzIEkgYWdyZWUgdGhhdCB3 aWxsIG1ha2UgaXQgbW9yZSByZWFkYWJsZSwgSSB3aWxsIGZpeCBpdCBpbiBuZXh0IHJldg0KPiAN Cj4gPiAoQXBwbGllcyB0byB0aGUgd2hvbGUgcGF0Y2gpDQo+ID4gDQo+ID4gPiArew0KPiA+ID4g KwlpbnQgY291bnQgPSAwOw0KPiA+ID4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsNCj4gPiA+ICsN Cj4gPiA+ICsJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChkYXRhLT5kaXNwbGF5LCBvdXRwdXQp IHsNCj4gPiA+ICsJCWNvbm5bY291bnRdLmNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3Io ZGF0YS0+ZGlzcGxheS0+ZHJtX2ZkLA0KPiA+ID4gKwkJCQkJCW91dHB1dC0+aWQpOw0KPiA+ID4g Kw0KPiA+ID4gKwkJaWd0X2Fzc2VydChjb25uW2NvdW50XS5jb25uZWN0b3IpOw0KPiA+ID4gKw0K PiA+ID4gKwkJaWYgKCEoY29ubltjb3VudF0uY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PQ0K PiA+ID4gKwkJCURSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkpDQo+ID4gPiArCQkJY29u dGludWU7DQo+ID4gDQo+ID4gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0bw0KPiA+IA0KPiA+ICAg ICBpZiAoY29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KQ0K PiA+IA0KPiA+IEFkZGl0aW9uYWxseSwgdGhpcyBicmFuY2ggbGVha3MgdGhlIGNvbm5lY3Rvci4N Cj4gPiANCj4gPiA+ICsJCWdldF9jb25uZWN0b3JfdGlsZV9wcm9wcyhkYXRhLCBjb25uW2NvdW50 XS5jb25uZWN0b3IsDQo+ID4gPiArCQkJJmNvbm5bY291bnRdLnRpbGUpOw0KPiA+ID4gKw0KPiA+ ID4gKwkJLyogQ2hlY2sgaWYgdGhlIGNvbm5lY3RvcnMgYmVsb25nIHRvIHRoZSBzYW1lIHRpbGUg Z3JvdXAgKi8NCj4gPiA+ICsJCWlmIChjb3VudCA+IDApDQo+ID4gPiArCQkJaWd0X2Fzc2VydChj b25uW2NvdW50XS50aWxlLnRpbGVfZ3JvdXBfaWQgPT0NCj4gPiA+ICsJCQkJY29ubltjb3VudC0x XS50aWxlLnRpbGVfZ3JvdXBfaWQpOw0KPiA+ID4gKw0KPiA+ID4gKwkJY291bnQrKzsNCj4gPiA+ ICsJfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZA0KPiA+ID4gK3Jlc2V0 X2ZyYW1lYnVmZmVyKGludCBkcm1fZmQsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBpZ3RfZmJfdCAq ZmIpDQo+ID4gPiArew0KPiA+ID4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsNCj4gPiA+ICsNCj4g PiA+ICsJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0LCBEUk1fUExB TkVfVFlQRV9QUklNQVJZKTsNCj4gPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxM KTsNCj4gPiA+ICsJaWd0X3JlbW92ZV9mYihkcm1fZmQsIGZiKTsNCj4gPiA+ICt9DQo+ID4gPiAr DQo+ID4gPiArc3RhdGljIHZvaWQgcmVzZXRfb3V0cHV0KGlndF9vdXRwdXRfdCAqb3V0cHV0KQ0K PiA+ID4gK3sNCj4gPiA+ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfTk9ORSk7 DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIHRlc3RfY2xlYW51cChkYXRh X3QgKmRhdGEsIGRhdGFfY29ubmVjdG9yX3QgKmNvbm4pDQo+ID4gPiArew0KPiA+ID4gKwlpbnQg Y291bnQ7DQo+ID4gPiArDQo+ID4gPiArCWZvciAoY291bnQgPSAwOyBjb3VudCA8IGRhdGEtPm51 bV9oX3RpbGVzOyBjb3VudCsrKSB7DQo+ID4gPiArCQlpZiAoY29ubltjb3VudF0ub3V0cHV0KSB7 DQo+ID4gPiArCQkJcmVzZXRfZnJhbWVidWZmZXIoZGF0YS0+ZHJtX2ZkLCBjb25uW2NvdW50XS5v dXRwdXQsDQo+ID4gPiArCQkJCSZjb25uW2NvdW50XS5mYl90ZXN0X3BhdHRlcm4pOw0KPiA+ID4g KwkJCXJlc2V0X291dHB1dChjb25uW2NvdW50XS5vdXRwdXQpOw0KPiA+ID4gKwkJfQ0KPiA+ID4g Kwl9DQo+ID4gPiArCWlndF9kaXNwbGF5X2NvbW1pdDIoZGF0YS0+ZGlzcGxheSwgZGF0YS0+Y29t bWl0KTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIHZvaWQgc2V0dXBfbW9kZShk YXRhX3QgKmRhdGEsIGRhdGFfY29ubmVjdG9yX3QgKmNvbm5fZGF0YSkNCj4gPiANCj4gPiBUaGlz IGZ1bmN0aW9uIGRvZXNuJ3QgYWN0dWFsbHkgc2V0dXAgdGhlIG91dHB1dCBtb2RlLCBpdCBvbmx5 IHNldHMgdXANCj4gPiB0aGUgcGlwZS4gSXMgdGhpcyBhbiBvdmVybG9vaz8NCj4gDQo+IHllcyB3 ZSBqdXN0IHNldCB0aGUgcGlwZS9DUlRDIGhlcmUgYW5kIHRoZSBhdG9taWMgY29tbWl0IGNhbGwg ZG9lcyBhIGNvbXBsZXRlDQo+IG1vZGVzZXQgd2l0aCBjaGVjayBhbmQgY29tbWl0IHdpdGhvdXQg YW55IG91dHB1dCBzaW5jZSB3ZSBkaWRudCBzZXR1cCBmYiB5ZXQuDQo+IEJ1dCBJIGFncmVlIHRo YXQgY2FsbGluZyBpdCBqdXN0IHNldHVwX3BpcGUgcm9iYWJseSBtYWtlcyBpdCBtb3JlIGludHVp dGl2ZQ0KDQpPaCwgSSBmb3Jnb3QgdGhhdCBpZ3Rfb3V0cHV0X3NldF9waXBlIGFsc28gc2V0cyB0 aGUgbW9kZS4NCg0KPiA+ID4gK3sNCj4gPiA+ICsJaW50IGNvdW50ID0gMDsNCj4gPiA+ICsJZW51 bSBwaXBlIHBpcGU7DQo+ID4gPiArCWlndF9vdXRwdXRfdCAqb3V0cHV0Ow0KPiA+ID4gKw0KPiA+ ID4gKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBkYXRhLT5udW1faF90aWxlczsgY291bnQrKykg ew0KPiA+ID4gKwkJb3V0cHV0ID0gaWd0X291dHB1dF9mcm9tX2Nvbm5lY3RvcihkYXRhLT5kaXNw bGF5LA0KPiA+ID4gKwkJCQljb25uX2RhdGFbY291bnRdLmNvbm5lY3Rvcik7DQo+ID4gPiArDQo+ ID4gPiArCQkvKg0KPiA+ID4gKwkJICogVGhlIG91dHB1dCBpcyBzZXQgdG8gUElQRV9OT05FIGFu ZCB0aGVuIGFzc2lnbmVkIGEgcGlwZS4NCj4gPiA+ICsJCSAqIFRoaXMgaXMgZG9uZSB0byBlbnN1 cmUgYSBjb21wbGV0ZSBtb2Rlc2V0IG9jY3VyZXMgZXZlcnkNCj4gPiA+ICsJCSAqIHRpbWUgdGhl IHRlc3QgaXMgcnVuLg0KPiA+ID4gKwkJICovDQo+ID4gPiArCQlyZXNldF9vdXRwdXQob3V0cHV0 KTsNCj4gPiANCj4gPiBJcyB0aGlzIG5lY2Vzc2FyeT8NCj4gDQo+IFllcyB0aGlzIGlzIG5lY2Vz c2FyeSB0byBmb3JjZSBhIGNvbXBsZXRlIG1vZGVzZXQgZm9yIGVhY2ggdGVzdCBzaW5jZSBpZiB0 aGUgcGlwZQ0KPiBhc3NpZ25tZW50cyBvciB0aGUgbW9kZSBoYXMgbm90IGNoYW5nZWQgaXQgd2ls bCBub3Qgc2V0IG5lZWRzX21vZGVzZXQgZmxhZyBpbiBzaWRlIGtlcm5lbA0KPiBhbmQgd2lsbCBu b3QgZG8gYSBmdWxsIGF0b21pYyBjaGVjayBhbmQgY29tbWl0Lg0KDQpIbW0sIHdoeSBkbyB3ZSBu ZWVkIHRvIGRvIGEgbmV3IG1vZGVzZXQ/IElmIHRoZSBtb2RlIGlzIGFscmVhZHkgc2V0IHRvDQp3 aGF0IHdlIHdhbnQsIG5vIG5lZWQgZm9yIHRoaXM/DQoNCihTb3JyeSwgSSdtIHVuZmFtaWxpYXIg d2l0aCB0aGUga2VybmVsIHNpZGUgb2YgdGhpbmdzISkNCg0KPiA+ID4gKwkJZm9yX2VhY2hfcGlw ZShkYXRhLT5kaXNwbGF5LCBwaXBlKSB7DQo+ID4gPiArCQkJaWYgKGNvdW50ID4gMCAmJiBwaXBl ID09IGNvbm5fZGF0YVtjb3VudC0xXS5waXBlKQ0KPiA+ID4gKwkJCQljb250aW51ZTsNCj4gPiA+ ICsNCj4gPiA+ICsJCQlpZiAoaWd0X3BpcGVfY29ubmVjdG9yX3ZhbGlkKHBpcGUsIG91dHB1dCkp IHsNCj4gPiA+ICsNCj4gPiA+ICsJCQkJY29ubl9kYXRhW2NvdW50XS5waXBlID0gcGlwZTsNCj4g PiA+ICsJCQkJY29ubl9kYXRhW2NvdW50XS5vdXRwdXQgPSBvdXRwdXQ7DQo+ID4gPiArDQo+ID4g PiArCQkJCWlndF9vdXRwdXRfc2V0X3BpcGUoY29ubl9kYXRhW2NvdW50XS5vdXRwdXQsDQo+ID4g PiArCQkJCQljb25uX2RhdGFbY291bnRdLnBpcGUpOw0KPiA+ID4gKwkJCQlicmVhazsNCj4gPiA+ ICsJCQl9DQo+ID4gPiArCQl9DQo+ID4gPiArCX0NCj4gPiA+ICsJaWd0X2Rpc3BsYXlfY29tbWl0 X2F0b21pYyhkYXRhLT5kaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwNCj4g PiA+ICsJCU5VTEwpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCBzZXR1 cF9mcmFtZWJ1ZmZlcihkYXRhX3QgKmRhdGEsIGRhdGFfY29ubmVjdG9yX3QgKmNvbm4pDQo+ID4g PiArew0KPiA+ID4gKwlpbnQgY291bnQ7DQo+ID4gPiArCWlndF9wbGFuZV90ICpwcmltYXJ5Ow0K PiA+ID4gKw0KPiA+ID4gKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBkYXRhLT5udW1faF90aWxl czsgY291bnQrKykgew0KPiA+ID4gKw0KPiA+ID4gKwkJaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRh dGEtPmRybV9mZCwNCj4gPiA+ICsJCQkoY29ubltjb3VudF0udGlsZS50aWxlX2hfc2l6ZSAqDQo+ ID4gPiArCQkJZGF0YS0+bnVtX2hfdGlsZXMpLA0KPiA+IA0KPiA+IERvIHdlIG5lZWQgdG8gbXVs dGlwbHkgYnkgdGhlIG51bWJlciBvZiBob3Jpem9udGFsIHRpbGVzIGhlcmU/IEl0IHNlZW1zDQo+ ID4gd2Ugb25seSB1c2UgdGhlIGZpcnN0IHRpbGVfaF9zaXplIHBpeGVscyBvZiB0aGUgYnVmZmVy LiBBbSBJIG1pc3NpbmcNCj4gPiBzb21ldGhpbmc/DQo+ID4gDQo+IA0KPiBZZXMgd2Ugb25seSB1 c2UgdGhlIHRpbGVfaF9zaXplIG9mIHRoZSBidWZmZXIgYXQgdGhlIHByb3BlciBvZmZzZXQgb2Yg dGlsZV9oX2xvYw0KPiBTbyB0aGlzIGJlbG93IGxvZ2ljIHNoZCBiZSBtb2RpZmllZCB0byBvbmx5 IGNyZWF0ZSBmYiBvZiB0aGUgc2l6ZSB0aWxlX2hfc2l6ZSBpZiBpdHMgaW4gdGhlIGZvciBsb29w DQo+IG9yIGp1c3QgY3JlYXRlIG9uZSBmYiBvdXRzaWRlIHRoZSBsb29wIG9mIHRoZSBzaXplIHRp bGVfaF9zaXplICogbnVtX3RpbGVzIGFuZCB0aGVuIGp1c3QgdXNlIHRoYXQgd2l0aCBkZmZlcmVu dA0KPiBvZmZzZXRzIGZvciB0d28gQ1JUQ3MNCj4gDQo+IFdoZW4gSSBkaXNjdXNzZWQgdGhpcyBv biBkcmktZGV2ZWwsIHBlb3BsZSBzYWlkIHRoYXQgcmVhbCB1c2Vyc3BhY2UgY2FuIGRlY2lkZSB0 byBkbyBlaXRoZXIgb25lIHNpbmdsZSBmYiBmb3IgYWxsIHRpbGVzDQo+IG9yIHNlcGFyYXRlIG9u ZXMgd2hlcmUgZWFjaCBpcyBvZiB0aGUgc2l6ZSBlcXVhbCB0byB0aWxlIHNpemUuDQo+IA0KPiBM ZXQgbWUga25vdyBpZiB0aGVyZSBpcyBhIHByZWZlcmVuY2UNCg0KQXMgYSB1c2Vyc3BhY2UgZGV2 LCBJJ2Qgc2F5IGEgc2luZ2xlIEZCIHdvdWxkIGJlIGEgbGl0dGxlIGJpdCBtb3JlDQpyZWFsaXN0 aWMsIGJ1dCB5ZWFoIEkgZ3Vlc3MgdXNlcnNwYWNlIGNvdWxkIHVzZSB0d28gRkJzIGFzIHdlbGwu IE5vIGJpZw0KZGVhbCwgSSdtIGZpbmUgd2l0aCBib3RoLg0KDQo+ID4gQnV0IG1heWJlIGEgdGVz dCB0aGF0IHdvdWxkIGJldHRlciByZWZsZWN0IHJlYWxpdHkgd291bGQgY3JlYXRlIGENCj4gPiBz aW5nbGUgZnJhbWVidWZmZXIgZm9yIGFsbCB0aWxlZCBkaXNwbGF5cywgdG8gZGlzcGxheSBhIHNp bmdsZSBpbWFnZQ0KPiA+IGFjcm9zcyBhbGwgb2YgdGhlbT8NCj4gPiANCj4gPiA+ICsJCQljb25u W2NvdW50XS50aWxlLnRpbGVfdl9zaXplLA0KPiA+ID4gKwkJCURSTV9GT1JNQVRfWEJHUjg4ODgs DQo+ID4gPiArCQkJTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwNCj4gPiA+ICsJCQkmY29ubltj b3VudF0uZmJfdGVzdF9wYXR0ZXJuKTsNCj4gPiA+ICsNCj4gPiA+ICsJCXByaW1hcnkgPSBpZ3Rf b3V0cHV0X2dldF9wbGFuZV90eXBlKGNvbm5bY291bnRdLm91dHB1dCwNCj4gPiA+ICsJCQkJRFJN X1BMQU5FX1RZUEVfUFJJTUFSWSk7DQo+ID4gPiArDQo+ID4gPiArCQlpZ3RfcGxhbmVfc2V0X2Zi KHByaW1hcnksICZjb25uW2NvdW50XS5mYl90ZXN0X3BhdHRlcm4pOw0KPiA+ID4gKw0KPiA+ID4g KwkJaWd0X2ZiX3NldF9zaXplKCZjb25uW2NvdW50XS5mYl90ZXN0X3BhdHRlcm4sIHByaW1hcnks DQo+ID4gPiArCQkJCWNvbm5bY291bnRdLnRpbGUudGlsZV9oX3NpemUsDQo+ID4gPiArCQkJCWNv bm5bY291bnRdLnRpbGUudGlsZV92X3NpemUpOw0KPiA+ID4gKw0KPiA+ID4gKwkJaWd0X2ZiX3Nl dF9wb3NpdGlvbigmY29ubltjb3VudF0uZmJfdGVzdF9wYXR0ZXJuLCBwcmltYXJ5LA0KPiA+ID4g KwkJCQkoY29ubltjb3VudF0udGlsZS50aWxlX2hfc2l6ZSAqDQo+ID4gPiArCQkJCWNvbm5bY291 bnRdLnRpbGUudGlsZV9oX2xvYyksDQo+ID4gPiArCQkJCShjb25uW2NvdW50XS50aWxlLnRpbGVf dl9zaXplICoNCj4gPiA+ICsJCQkJY29ubltjb3VudF0udGlsZS50aWxlX3ZfbG9jKSk7DQo+ID4g PiArDQo+ID4gPiArCQlpZ3RfcGxhbmVfc2V0X3NpemUocHJpbWFyeSwNCj4gPiA+ICsJCQkJY29u bltjb3VudF0udGlsZS50aWxlX2hfc2l6ZSwNCj4gPiA+ICsJCQkJY29ubltjb3VudF0udGlsZS50 aWxlX3Zfc2l6ZSk7DQo+ID4gPiArCX0NCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGlj IHZvaWQgcGFnZV9mbGlwX2hhbmRsZXIoaW50IGZkLCB1bnNpZ25lZCBpbnQgc2VxLA0KPiA+ID4g KwkJdW5zaWduZWQgaW50IHR2X3NlYywgdW5zaWduZWQgaW50IHR2X3VzZWMsDQo+ID4gPiArCQl1 bnNpZ25lZCBpbnQgY3J0Y19pZCwgdm9pZCAqZGF0YSkNCj4gPiA+ICt7DQo+ID4gPiArCWJvb2wg ZXhwciA9IGZhbHNlOw0KPiA+ID4gKwlzdGF0aWMgdW5zaWduZWQgaW50IF90dl9zZWMsIF90dl91 c2VjOw0KPiA+ID4gKw0KPiA+ID4gKwlpZ3RfZGVidWcoIlBhZ2UgRmxpcCBFdmVudCByZWNlaXZl ZCBmcm9tIENSVEM6JWQgYXQgJXU6JXVcbiIsIGNydGNfaWQsDQo+ID4gPiArCQl0dl9zZWMsIHR2 X3VzZWMpOw0KPiA+IA0KPiA+IFdlIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB3ZSByZWNlaXZlIGV4 YWN0bHkgb25lIHBhZ2UtZmxpcCBwZXIgQ1JUQy4NCj4gPiBDdXJyZW50bHkgd2UgZG9uJ3QgdXNl IGNydGNfaWQgKGFwYXJ0IGZyb20gbG9nZ2luZyBwdXJwb3NlcykuDQo+IA0KPiBJIHNlZSBzbyBz b21laG93IGhhdmUgYSBzdGF0aWMgY291bnQgb2YgZXZlbnRzIGFuZCBtYWtlIHN1cmUgcGVyIGNy dGMgaWQgaXRzIHRoZSBzYW1lIGNvdW50IG9yDQo+IHNvbWUgc2ltaWxhciBsb2dpYw0KDQpZZWFo LiBXZSBjb3VsZCBmb3IgaW5zdGFuY2UgYWRkIGEgImJvb2wgZ290X3BhZ2VfZmxpcCIgZmllbGQg aW4gb3VyDQpkYXRhX2Nvbm5lY3Rvcl90IHN0cnVjdCBhbmQgc2V0IGl0IHRvIHRydWUgaGVyZSAo bWFraW5nIHN1cmUgaXQncyBub3QNCnNldCB0byB0cnVlIGFscmVhZHkpLg0KDQpBIHBvaW50ZXIg Y2FuIGJlIHBhc3NlZCB0byBwYWdlX2ZsaXBfaGFuZGxlciB2aWEgdGhlIGRhdGEgYXJndW1lbnQu DQoNCj4gPiA+ICsJLyogU2tpcCB0aGUgZm9sbG93aW5nIGNoZWNrcyBmb3IgdGhlIGZpcnN0IHBh Z2UgZmxpcCBldmVudCAqLw0KPiA+ID4gKwlpZiAoX3R2X3NlYyA9PSAwIHx8IF90dl91c2VjID09 IDApIHsNCj4gPiA+ICsJCV90dl9zZWMgPSB0dl9zZWM7DQo+ID4gPiArCQlfdHZfdXNlYyA9IHR2 X3VzZWM7DQo+ID4gPiArCQlyZXR1cm47DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJLyoN Cj4gPiA+ICsJICogRm9yIHNlYW1sZXNzIHRlYXItZnJlZSBkaXNwbGF5LCB0aGUgcGFnZSBmbGlw IGV2ZW50IHRpbWVzdGFtcHMNCj4gPiA+ICsJICogZnJvbSBhbGwgdGhlIHRpbGVzIHNob3VsZCBu b3QgZGlmZmVyIGJ5IG1vcmUgdGhhbiAxMHVzLg0KPiA+ID4gKwkgKi8NCj4gPiA+ICsJZXhwciA9 IHR2X3NlYyA9PSBfdHZfc2VjICYmIChhYnModHZfdXNlYyAtIF90dl91c2VjKSA8IDEwKTsNCj4g PiANCj4gPiBOaXQ6IHRoaXMgY291bGQgYmUgcmVuYW1lZCB0byBlLmcuIGlzX29uX3RpbWUsIGV4 cHIgaXMgYSBwcmV0dHkgdmFndWUNCj4gPiBuYW1lLg0KPiANCj4geWVzIGFncmVlIHdpbGwgcmVu YW1lIHRvIG1ha2UgaXQgbW9yZSByZWFkYWJsZQ0KPiANCj4gPiA+ICsJaWd0X2ZhaWxfb25fZigh ZXhwciwgIkRlbGF5ZWQgcGFnZSBmbGlwIGV2ZW50IGZyb20gQ1JUQzolZCBhdCAldToldVxuIiwN Cj4gPiA+ICsJCWNydGNfaWQsIHR2X3NlYywgdHZfdXNlYyk7DQo+ID4gPiArDQo+ID4gPiArCWlm ICh0dl9zZWMgPCBfdHZfc2VjKQ0KPiA+ID4gKwkJX3R2X3NlYyA9IHR2X3NlYzsNCj4gPiA+ICsJ aWYgKHR2X3VzZWMgPCBfdHZfdXNlYykNCj4gPiA+ICsJCV90dl91c2VjID0gdHZfdXNlYzsNCj4g PiANCj4gPiBUaGlzIHVwZGF0ZXMgdGhlIHRpbWVzdGFtcCBvbiBlYWNoIHBhZ2UtZmxpcC4gVGhp cyBtZWFucyB0aGF0IHRoZSBmaXJzdA0KPiA+IGFuZCBsYXN0IHBhZ2UtZmxpcHMgY291bGQgYmUg ZGVsYXllZCBieSBtb3JlIHRoYW4gMTDCtXMgaWYgdGhlcmUgYXJlDQo+ID4gaW50ZXJtZWRpYXRl IHBhZ2UtZmxpcHMuIEZvciBpbnN0YW5jZSwgaWYgdGhlIGZpcnN0IHBhZ2UtZmxpcCBoYXBwZW5z DQo+ID4gYXQgdD0wwrVzIGFuZCB0aGUgc2Vjb25kIG9uZSBoYXBwZW5zIGF0IHQ9OcK1cywgdGhl IGxhc3Qgb25lIGNvdWxkIGhhcHBlbg0KPiA+IGF0IHQ9MTjCtXMgd2l0aG91dCBtYWtpbmcgdGhp cyB0ZXN0IGZhaWxzLiBJcyB0aGlzIHNvbWV0aGluZyB3ZSB3YW50IHRvDQo+ID4gYWxsb3c/DQo+ IA0KPiBOb3BlIGFsbCBvZiB0aGVtIHNob3VsZCBoYXBwZW4gd2l0aGluIHRoZSBzYW1lIHZibGFu ayBzbyB0aGUgZGlmZiBiZXR3ZWVuIGFsbA0KPiBzaG91bGQgYmUgPDEwdXMsIHdpbGwgaGF2ZSB0 byBtb2RpZnkgdGhlIGxvZ2ljIHRvIGRvIHRoYXQuDQo+IA0KPiBzbyBiYXNpY2FsbHkgaW5zdGVh ZCBvZiBtYWtpbmcgPDEwdXMgY29uZGl0aW9uIGZvciB0aGUgY29uc2VjdXRpdmUgb25lcywgaXQg c2hvdWxkIGJlIGJldHdlZW4gdGhlIGZpcnN0IG9uZQ0KPiBhbmQgYWxsIG90aGVyIGV2ZW50cywg Y29ycmVjdD8NCg0KQ29ycmVjdCEgU28gd2UgY2FuIGp1c3QgZHJvcCB0aGVzZSA0IGxpbmVzLCB0 aGF0IHNob3VsZCBkbyBpdC4NCg0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9p ZCB3YWl0X2Zvcl9wYWdlZmxpcChpbnQgZHJtX2ZkKQ0KPiA+ID4gK3sNCj4gPiA+ICsJc3RydWN0 IHBvbGxmZCBwZmQ7DQo+ID4gPiArCWRybUV2ZW50Q29udGV4dCBkcm1fZXZlbnQ7DQo+ID4gDQo+ ID4gTml0OiB0byBtYWtlIHN1cmUgZ2FyYmFnZSBpc24ndCByZWFkIGZyb20gdGhpcyBzdHJ1Y3Qg KHRoZXJlIGFyZSBvdGhlcg0KPiA+IGZ1bmN0aW9uIHBvaW50ZXJzKSwgaXQncyBwcm9iYWJseSBz YWZlciB0byB6ZXJvLWZpbGwgaXQgKD0gezB9KS4NCj4gDQo+IEdvdCBpdA0KPiANCj4gPiA+ICsJ ZHJtX2V2ZW50LnZlcnNpb24gPSAzOw0KPiA+ID4gKwlkcm1fZXZlbnQucGFnZV9mbGlwX2hhbmRs ZXIyID0gcGFnZV9mbGlwX2hhbmRsZXI7DQo+ID4gPiArDQo+ID4gPiArCXBmZC5mZCA9IGRybV9m ZDsNCj4gPiA+ICsJcGZkLmV2ZW50cyA9IFBPTExJTjsNCj4gPiA+ICsJcGZkLnJldmVudHMgPSAw Ow0KPiA+ID4gKw0KPiA+ID4gKwlwb2xsKCZwZmQsIDEsIDEwMDApOw0KPiA+IA0KPiA+IE1heWJl IHdlIHNob3VsZCBjaGVjayBwb2xsKDIpJ3MgcmV0dXJuIHZhbHVlPw0KPiANCj4gcG9sbCgyKT8g T3IganVzdCBjaGVjayByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHBvbGwoKSBqdXN0IGZv ciBlcnJvciBoYW5kbGluZz8NCg0KWWVzLCBqdXN0IGluIGNhc2UuDQoNCihBcyBhIHNpZGUgbm90 ZSwgcG9sbCgyKSBzaW1wbHkgbWVhbnMgInRoZSBwb2xsIHN5c3RlbSBjYWxsIiBhbmQgcmVmZXJz DQp0byBwb2xsJ3Mgc3lzY2FsbCBtYW5wYWdlIHNlY3Rpb24uKQ0KDQo+ID4gPiArCWlmIChwZmQu cmV2ZW50cyAmIFBPTExJTikNCj4gPiA+ICsJCWRybUhhbmRsZUV2ZW50KGRybV9mZCwgJmRybV9l dmVudCk7DQo+ID4gDQo+ID4gSWYgd2UgZG9uJ3QgZ2V0IFBPTExJTiAoZS5nLiBpZiB3ZSB0aW1l b3V0KSwgd2FpdF9mb3JfcGFnZWZsaXAgd2lsbA0KPiA+IHNpbGVudGx5IGRvIG5vdGhpbmcsIGFu ZCB0aGUgdGVzdCB3aWxsIHBhc3MuIEluc3RlYWQsIHdlIHByb2JhYmx5IHdhbnQNCj4gPiB0byBm YWlsIGluIHRoaXMgY2FzZS4NCj4gDQo+IFllcyB0aGF0cyBjb3JyZWN0LCBqdXN0IGFkZCBlbHNl IGNhc2Ugd2l0aCBpZ3RfYXNzZXJ0Pw0KDQpZZXMhDQoNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4g PiAraWd0X21haW4NCj4gPiA+ICt7DQo+ID4gPiArCWlndF9kaXNwbGF5X3QgZGlzcGxheTsNCj4g PiA+ICsJZGF0YV9jb25uZWN0b3JfdCAqY29ubl9kYXRhID0gTlVMTDsNCj4gPiA+ICsJZGF0YV90 IGRhdGEgPSB7LmRybV9mZCA9IDAsIC5udW1faF90aWxlcyA9IDAsDQo+ID4gPiArCQkgICAgICAg LmRpc3BsYXkgPSBOVUxMLCAuY29tbWl0ID0gQ09NTUlUX0xFR0FDWX07DQo+ID4gDQo+ID4gTml0 OiBvbmUgY2FuIGp1c3QgZG8gYXNzaWduIHRvIHswfSB0byB6ZXJvLWZpbGwgdGhlIHN0cnVjdC4N Cj4gDQo+IEdvdCBpdA0KPiANCj4gPiA+ICsJaWd0X2ZpeHR1cmUgew0KPiA+ID4gKwkJZGF0YS5k cm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9BTlkpOw0KPiA+ID4gKw0KPiA+ ID4gKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOw0KPiA+ID4gKwkJaWd0X2Rpc3Bs YXlfcmVxdWlyZSgmZGlzcGxheSwgZGF0YS5kcm1fZmQpOw0KPiA+ID4gKwkJaWd0X2Rpc3BsYXlf cmVzZXQoJmRpc3BsYXkpOw0KPiA+ID4gKw0KPiA+ID4gKwkJZGF0YS5kaXNwbGF5ID0gJmRpc3Bs YXk7DQo+ID4gPiArDQo+ID4gPiArCQlnZXRfbnVtYmVyX29mX2hfdGlsZXMoJmRhdGEpOw0KPiA+ ID4gKwkJaWd0X2RlYnVnKCJOdW1iZXIgb2YgSG9yaXpvbnRhbCBUaWxlczogJWRcbiIsIGRhdGEu bnVtX2hfdGlsZXMpOw0KPiA+ID4gKw0KPiA+ID4gKwkJZGF0YS5jb21taXQgPSBkYXRhLmRpc3Bs YXktPmlzX2F0b21pYyA/IENPTU1JVF9BVE9NSUMgOiBDT01NSVRfTEVHQUNZOw0KPiA+IA0KPiA+ IFNob3VsZCB3ZSB0cnkgdG8gcnVuIHRoaXMgdGVzdCBhdCBhbGwgb24gZHJpdmVycyB0aGF0IGRv bid0IHN1cHBvcnQNCj4gPiBhdG9taWM/DQo+ID4gDQo+ID4gSWYgdGhlIGRyaXZlciBkb2Vzbid0 IHN1cHBvcnQgYXRvbWljLCB1c2VyLXNwYWNlIHdpbGwgc3VibWl0IHR3byBwYWdlLQ0KPiA+IGZs aXAgcmVxdWVzdHMuIEhvd2V2ZXIgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBoYXJkd2FyZSBleGVj dXRlcyBhIHBhZ2UtDQo+ID4gZmxpcCBiZXR3ZWVuIGJvdGggcmVxdWVzdHM6IHVzZXItc3BhY2Ug Y2FsbHMgdGhlIGZpcnN0IGRybU1vZGVQYWdlRmxpcCwNCj4gPiB0aGUgdmJsYW5rIGZvciB0aGlz IHBhcnRpY3VsYXIgQ1JUQyB0cmlnZ2VycywgdGhlbiB1c2VyLXNwYWNlIGNhbGxzIHRoZQ0KPiA+ IHNlY29uZCBkcm1Nb2RlUGFnZUZsaXAuIFBhZ2UtZmxpcHMgd2lsbCBiZSBvdXQtb2Ytc3luYyBi eSBvbmUgZnJhbWUuDQo+IA0KPiBIbW0sIHllYSBzaG91bGQgcHJvYmJhbHkgaGF2ZSBpZ3RfcmVx dWlyZSBvbiBhdG9taWMNCj4gDQo+ID4gPiArCQlpZiAoZGF0YS5udW1faF90aWxlcyA+IDApDQo+ ID4gPiArCQkJY29ubl9kYXRhID0gbWFsbG9jKGRhdGEubnVtX2hfdGlsZXMgKiBzaXplb2YoZGF0 YV9jb25uZWN0b3JfdCkpOw0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCWlndF9zdWJ0ZXN0 KCJiYXNpYy10ZXN0LXBhdHRlcm4iKSB7DQo+ID4gPiArCQlpZ3Rfc2tpcF9vbihkYXRhLm51bV9o X3RpbGVzID09IDApOw0KPiA+ID4gKwkJaWd0X2Fzc2VydChjb25uX2RhdGEpOw0KPiA+ID4gKw0K PiA+ID4gKwkJZ2V0X2Nvbm5lY3RvcigmZGF0YSwgY29ubl9kYXRhKTsNCj4gPiA+ICsJCXNldHVw X21vZGUoJmRhdGEsIGNvbm5fZGF0YSk7DQo+ID4gPiArCQlzZXR1cF9mcmFtZWJ1ZmZlcigmZGF0 YSwgY29ubl9kYXRhKTsNCj4gPiA+ICsJCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGF0YS5k aXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfTk9OQkxPQ0sgfA0KPiA+ID4gKwkJCURSTV9NT0RFX1BB R0VfRkxJUF9FVkVOVCwgTlVMTCk7DQo+ID4gPiArCQl3YWl0X2Zvcl9wYWdlZmxpcChkYXRhLmRy bV9mZCk7DQo+ID4gDQo+ID4gSGVyZSB3ZSBvbmx5IHdhaXQgZm9yIGEgc2luZ2xlIHBhZ2UtZmxp cC4gVGhpcyB3aWxsIG9ubHkgc3Rhc2ggdGhlDQo+ID4gdGltZXN0YW1wIG9mIHRoZSBmcnN0IHBh Z2UtZmxpcCB3aXRob3V0IGNoZWNraW5nIHRoZSB0aW1lLXN0YW1wIG9mDQo+ID4gc3Vic2VxdWVu dCBwYWdlLWZsaXBzLiBXZSBzaG91bGQgd2FpdCBmb3IgYXMgbWFueSBwYWdlLWZsaXBzIGFzIGVu YWJsZWQNCj4gPiB0aWxlZCBjb25uZWN0b3JzLg0KPiANCj4gVGhhdCB3YXMgb3VyIGluaXRpYWwg dW5kZXJzdGFuZGluZyBhcyB3ZWxsLCBidXQgd2l0aCBqdXN0IG9uZSB3YWl0X2Zvcl9wYWdlZmxp cCBjYWxsIHdlDQo+IHdlcmUgZ2V0aW5nIHR3byBwYWdlIGZsaXAgZXZlbnRzIGZvciB0d28gdGls ZXMNCj4gRG8gd2UgbmVlZCB0byBjYWxsIHdhaXQgZm9yIHBhZ2UgZmxpcCBleHBsaWNpdGx5IHRo ZSBudW1iZXIgb2YgdGltZXMgPSBudW1iZXIgb2YgdGlsZXM/DQoNCk9oLCBJIHNlZS4gU28gaXQg c2VlbXMgdHdvIGV2ZW50cyBhcmUgcXVldWVkLiBUaGVuIHdlIHNob3VsZCBwcm9iYWJseQ0KbG9v cCB1bnRpbCB3ZSBoYXZlIGEgcGFnZS1mbGlwIGZvciBhbGwgQ1JUQ3MsIHNpbmNlIHRoZXJlJ3Mg bm8NCmd1YXJhbnRlZSBhbGwgZXZlbnRzIHdpbGwgYmUgc2VudCBhdCBvbmNlLg0KDQo+IFJlZ2Fy ZHMNCj4gTWFuYXNpDQo+IA0KPiA+ID4gKwkJdGVzdF9jbGVhbnVwKCZkYXRhLCBjb25uX2RhdGEp Ow0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCWlndF9maXh0dXJlIHsNCj4gPiA+ICsJCWZy ZWUoY29ubl9kYXRhKTsNCj4gPiA+ICsJCWNsb3NlKGRhdGEuZHJtX2ZkKTsNCj4gPiA+ICsJCWtt c3Rlc3RfcmVzdG9yZV92dF9tb2RlKCk7DQo+ID4gPiArCQlpZ3RfZGlzcGxheV9maW5pKGRhdGEu ZGlzcGxheSk7DQo+ID4gPiArCX0NCj4gPiA+ICt9DQo+ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMv bWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZA0KPiA+ID4gaW5kZXggYTdiMmIzMjIuLjUw MjkyZGY4IDEwMDY0NA0KPiA+ID4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQNCj4gPiA+ICsrKyBi L3Rlc3RzL21lc29uLmJ1aWxkDQo+ID4gPiBAQCAtMjYsNiArMjYsNyBAQCB0ZXN0X3Byb2dzID0g Ww0KPiA+ID4gIAkna21zX2N1cnNvcl9lZGdlX3dhbGsnLA0KPiA+ID4gIAkna21zX2N1cnNvcl9s ZWdhY3knLA0KPiA+ID4gIAkna21zX2RwX2RzYycsDQo+ID4gPiArCSdrbXNfZHBfdGlsZWRfZGlz cGxheScsDQo+ID4gPiAgCSdrbXNfZHJhd19jcmMnLA0KPiA+ID4gIAkna21zX2ZiY29uX2ZidCcs DQo+ID4gPiAgCSdrbXNfZmVuY2VfcGluX2xlYWsnLA0KX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pZ3QtZGV2