From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM05-BY2-obe.outbound.protection.outlook.com (mail-eopbgr710052.outbound.protection.outlook.com [40.107.71.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8A0816F1DC for ; Thu, 24 Jan 2019 16:59:11 +0000 (UTC) From: "Kazlauskas, Nicholas" Date: Thu, 24 Jan 2019 16:59:04 +0000 Message-ID: <08dc5d6d-032b-3167-75bc-23bccfb3268a@amd.com> References: <20190109194932.16679-1-nicholas.kazlauskas@amd.com> In-Reply-To: Content-Language: en-US Content-ID: MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t] tests: Add variable refresh rate tests 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: "Wentland, Harry" , "igt-dev@lists.freedesktop.org" Cc: Manasi Navare List-ID: T24gMS8yNC8xOSAxMTowNCBBTSwgV2VudGxhbmQsIEhhcnJ5IHdyb3RlOg0KPiBPbiAyMDE5LTAx LTA5IDI6NDkgcC5tLiwgTmljaG9sYXMgS2F6bGF1c2thcyB3cm90ZToNCj4+IFRoZXJlIGFyZSAz IHRlc3RzIGZvciBiYXNpYyB2YXJpYWJsZSByZWZyZXNoIHJhdGUgZnVuY3Rpb25hbGl0eS4NCj4+ DQo+PiBUaGUgdGVzdHMgbWVhc3VyZSBmbGlwcGluZyBhdCB0aGUgbWlkcG9pbnQgYmV0d2VlbiB0 aGUgY3VycmVudCBtb2RlJ3MNCj4+IHJlZnJlc2ggcmF0ZSBhbmQgdGhlIG1pbmltdW0gc3VwcG9y dGVkIHZhcmlhYmxlIHJlZnJlc2ggcmF0ZS4NCj4+DQo+PiBJdCB0ZXN0cyB0aGF0IFZSUiBpcyBl bmFibGVkIGFuZCB0aGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZmxpcA0KPj4gdGltZXN0YW1w cyBjb252ZXJnZXMgdG8gdGhlIHJlcXVlc3RlZCByYXRlLiBJdCBhbHNvIHRlc3RzIHRoaXMgdW5k ZXINCj4+IGJvdGggUzMgYW5kIERQTVMuDQo+Pg0KPj4gUG90ZW50aWFsIGlkZWFzIGZvciBmdXR1 cmUgdGVzdHM6DQo+PiAtIFRlc3QgYmVoYXZpb3IgaW5zaWRlIFZSUiByYW5nZSB3aXRoIGEgc3Rl cHBpbmcgdGVzdA0KPj4gLSBUZXN0IGJlaGF2aW9yIG91dHNpZGUgb2YgVlJSIHJhbmdlDQo+PiAt IE11bHRpLW1vbml0b3IgKGxpbWl0ZWQgYnkgbm8gYXN5bmMgcGFnZWZsaXBzIGluIERSTSBhdG9t aWMgQVBJKQ0KPj4NCj4+IENjOiBIYXJyeSBXZW50bGFuZCA8aGFycnkud2VudGxhbmRAYW1kLmNv bT4NCj4+IENjOiBMZW8gTGkgPHN1bnBlbmcubGlAYW1kLmNvbT4NCj4+IENjOiBNYW5hc2kgTmF2 YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPg0KPj4gU2lnbmVkLW9mZi1ieTogTmljaG9s YXMgS2F6bGF1c2thcyA8bmljaG9sYXMua2F6bGF1c2thc0BhbWQuY29tPg0KPj4gLS0tDQo+PiAg IGxpYi9pZ3Rfa21zLmMgICAgICAgICAgfCAgIDMgKw0KPj4gICBsaWIvaWd0X2ttcy5oICAgICAg ICAgIHwgICAyICsNCj4+ICAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArDQo+PiAgIHRl c3RzL2ttc192cnIuYyAgICAgICAgfCA0MTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysNCj4+ICAgdGVzdHMvbWVzb24uYnVpbGQgICAgICB8ICAgMSArDQo+PiAgIDUg ZmlsZXMgY2hhbmdlZCwgNDI0IGluc2VydGlvbnMoKykNCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IHRlc3RzL2ttc192cnIuYw0KPj4NCj4+IGRpZmYgLS1naXQgYS9saWIvaWd0X2ttcy5jIGIvbGli L2lndF9rbXMuYw0KPj4gaW5kZXggNjg0YTU5OWMuLjJlZGYxOWVjIDEwMDY0NA0KPj4gLS0tIGEv bGliL2lndF9rbXMuYw0KPj4gKysrIGIvbGliL2lndF9rbXMuYw0KPj4gQEAgLTE4OSw2ICsxODks NyBAQCBjb25zdCBjaGFyICogY29uc3QgaWd0X2NydGNfcHJvcF9uYW1lc1tJR1RfTlVNX0NSVENf UFJPUFNdID0gew0KPj4gICAJW0lHVF9DUlRDX01PREVfSURdID0gIk1PREVfSUQiLA0KPj4gICAJ W0lHVF9DUlRDX0FDVElWRV0gPSAiQUNUSVZFIiwNCj4+ICAgCVtJR1RfQ1JUQ19PVVRfRkVOQ0Vf UFRSXSA9ICJPVVRfRkVOQ0VfUFRSIiwNCj4+ICsJW0lHVF9DUlRDX1ZSUl9FTkFCTEVEXSA9ICJW UlJfRU5BQkxFRCIsDQo+PiAgIH07DQo+PiAgIA0KPj4gICBjb25zdCBjaGFyICogY29uc3QgaWd0 X2Nvbm5lY3Rvcl9wcm9wX25hbWVzW0lHVF9OVU1fQ09OTkVDVE9SX1BST1BTXSA9IHsNCj4+IEBA IC0xOTcsNiArMTk4LDcgQEAgY29uc3QgY2hhciAqIGNvbnN0IGlndF9jb25uZWN0b3JfcHJvcF9u YW1lc1tJR1RfTlVNX0NPTk5FQ1RPUl9QUk9QU10gPSB7DQo+PiAgIAlbSUdUX0NPTk5FQ1RPUl9E UE1TXSA9ICJEUE1TIiwNCj4+ICAgCVtJR1RfQ09OTkVDVE9SX0JST0FEQ0FTVF9SR0JdID0gIkJy b2FkY2FzdCBSR0IiLA0KPj4gICAJW0lHVF9DT05ORUNUT1JfQ09OVEVOVF9QUk9URUNUSU9OXSA9 ICJDb250ZW50IFByb3RlY3Rpb24iLA0KPj4gKwlbSUdUX0NPTk5FQ1RPUl9WUlJfQ0FQQUJMRV0g PSAidnJyX2NhcGFibGUiLA0KPj4gICB9Ow0KPj4gICANCj4+ICAgLyoNCj4+IEBAIC0xNzg2LDYg KzE3ODgsNyBAQCBzdGF0aWMgdm9pZCBpZ3RfcGlwZV9yZXNldChpZ3RfcGlwZV90ICpwaXBlKQ0K Pj4gICB7DQo+PiAgIAlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwgSUdUX0NSVENf TU9ERV9JRCwgMCk7DQo+PiAgIAlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwgSUdU X0NSVENfQUNUSVZFLCAwKTsNCj4+ICsJaWd0X3BpcGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGUs IElHVF9DUlRDX1ZSUl9FTkFCTEVELCAwKTsNCj4+ICAgCWlndF9waXBlX29ial9jbGVhcl9wcm9w X2NoYW5nZWQocGlwZSwgSUdUX0NSVENfT1VUX0ZFTkNFX1BUUik7DQo+PiAgIA0KPj4gICAJcGlw ZS0+b3V0X2ZlbmNlX2ZkID0gLTE7DQo+PiBkaWZmIC0tZ2l0IGEvbGliL2lndF9rbXMuaCBiL2xp Yi9pZ3Rfa21zLmgNCj4+IGluZGV4IDRhN2MzYzk3Li42NzlkNGU4NCAxMDA2NDQNCj4+IC0tLSBh L2xpYi9pZ3Rfa21zLmgNCj4+ICsrKyBiL2xpYi9pZ3Rfa21zLmgNCj4+IEBAIC0xMDQsNiArMTA0 LDcgQEAgZW51bSBpZ3RfYXRvbWljX2NydGNfcHJvcGVydGllcyB7DQo+PiAgICAgICAgICBJR1Rf Q1JUQ19NT0RFX0lELA0KPj4gICAgICAgICAgSUdUX0NSVENfQUNUSVZFLA0KPj4gICAgICAgICAg SUdUX0NSVENfT1VUX0ZFTkNFX1BUUiwNCj4+ICsgICAgICAgSUdUX0NSVENfVlJSX0VOQUJMRUQs DQo+PiAgICAgICAgICBJR1RfTlVNX0NSVENfUFJPUFMNCj4+ICAgfTsNCj4+ICAgDQo+PiBAQCAt MTIxLDYgKzEyMiw3IEBAIGVudW0gaWd0X2F0b21pY19jb25uZWN0b3JfcHJvcGVydGllcyB7DQo+ PiAgICAgICAgICBJR1RfQ09OTkVDVE9SX0RQTVMsDQo+PiAgICAgICAgICBJR1RfQ09OTkVDVE9S X0JST0FEQ0FTVF9SR0IsDQo+PiAgICAgICAgICBJR1RfQ09OTkVDVE9SX0NPTlRFTlRfUFJPVEVD VElPTiwNCj4+ICsgICAgICAgSUdUX0NPTk5FQ1RPUl9WUlJfQ0FQQUJMRSwNCj4+ICAgICAgICAg IElHVF9OVU1fQ09OTkVDVE9SX1BST1BTDQo+PiAgIH07DQo+PiAgIA0KPj4gZGlmZiAtLWdpdCBh L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzDQo+PiBpbmRl eCBiYWFjN2FlMC4uMjM5YmVkNTkgMTAwNjQ0DQo+PiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzDQo+PiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzDQo+PiBAQCAtODgsNiArODgsNyBA QCBURVNUU19wcm9ncyA9IFwNCj4+ICAgCWttc190dl9sb2FkX2RldGVjdCBcDQo+PiAgIAlrbXNf dW5pdmVyc2FsX3BsYW5lIFwNCj4+ICAgCWttc192YmxhbmsgXA0KPj4gKwlrbXNfdnJyIFwNCj4+ ICAgCWttc19zZXF1ZW5jZSBcDQo+PiAgIAltZXRhX3Rlc3QgXA0KPj4gICAJcGVyZiBcDQo+PiBk aWZmIC0tZ2l0IGEvdGVzdHMva21zX3Zyci5jIGIvdGVzdHMva21zX3Zyci5jDQo+PiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAuLmM2Yjg4ZTUzDQo+PiAtLS0gL2Rldi9u dWxsDQo+PiArKysgYi90ZXN0cy9rbXNfdnJyLmMNCj4+IEBAIC0wLDAgKzEsNDE3IEBADQo+PiAr LyoNCj4+ICsgKiBDb3B5cmlnaHQgMjAxOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuDQo+ PiArICoNCj4+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQ0KPj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+ PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KPj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLA0KPj4gKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQ0KPj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+PiArICoNCj4+ICsgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNs dWRlZCBpbg0KPj4gKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl IFNvZnR3YXJlLg0KPj4gKyAqDQo+PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCj4+ICsgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwNCj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwNCj4+ICsgKiBUSEUgQ09QWVJJR0hU IEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1INCj4+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwNCj4+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1INCj4+ICsgKiBPVEhF UiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUg ImlndC5oIg0KPj4gKyNpbmNsdWRlICJzd19zeW5jLmgiDQo+PiArI2luY2x1ZGUgPGZjbnRsLmg+ DQo+PiArI2luY2x1ZGUgPHNpZ25hbC5oPg0KPj4gKw0KPj4gKyNkZWZpbmUgTlNFQ1NfUEVSX1NF QyAoMTAwMDAwMDAwMHVsbCkNCj4+ICsNCj4+ICsvKg0KPj4gKyAqIEVhY2ggdGVzdCBtZWFzdXJl bWVudCBzdGVwIHJ1bnMgZm9yIH41IHNlY29uZHMuDQo+PiArICogVGhpcyBnaXZlcyBhIGRlY2Vu dCBzYW1wbGUgc2l6ZSArIGVub3VnaCB0aW1lIGZvciBhbnkgYWRhcHRhdGlvbiB0byBvY2N1ciBp ZiBuZWNlc3NhcnkuDQo+PiArICovDQo+PiArI2RlZmluZSBURVNUX0RVUkFUSU9OX05TICg1MDAw MDAwMDAwdWxsKQ0KPj4gKw0KPj4gK2VudW0gew0KPj4gKwlURVNUX05PTkUgPSAwLA0KPj4gKwlU RVNUX0RQTVMgPSAxIDw8IDAsDQo+PiArCVRFU1RfU1VTUEVORCA9IDEgPDwgMSwNCj4+ICt9Ow0K Pj4gKw0KPj4gK3R5cGVkZWYgc3RydWN0IHJhbmdlIHsNCj4+ICsJdW5zaWduZWQgaW50IG1pbjsN Cj4+ICsJdW5zaWduZWQgaW50IG1heDsNCj4+ICt9IHJhbmdlX3Q7DQo+PiArDQo+PiArdHlwZWRl ZiBzdHJ1Y3QgZGF0YSB7DQo+PiArCWlndF9kaXNwbGF5X3QgZGlzcGxheTsNCj4+ICsJaW50IGRy bV9mZDsNCj4+ICsJaWd0X2ZiX3QgZmIwOw0KPj4gKwlpZ3RfZmJfdCBmYjE7DQo+PiArfSBkYXRh X3Q7DQo+PiArDQo+PiArdHlwZWRlZiB2b2lkICgqdGVzdF90KShkYXRhX3QqLCBlbnVtIHBpcGUs IGlndF9vdXRwdXRfdCosIHVpbnQzMl90KTsNCj4+ICsNCj4+ICsvKiBDb252ZXJ0cyBhIHRpbWVz cGVjIHN0cnVjdHVyZSB0byBuYW5vc2Vjb25kcy4gKi8NCj4+ICtzdGF0aWMgdWludDY0X3QgdGlt ZXNwZWNfdG9fbnMoc3RydWN0IHRpbWVzcGVjICp0cykNCj4+ICt7DQo+PiArCXJldHVybiB0cy0+ dHZfc2VjICogTlNFQ1NfUEVSX1NFQyArIHRzLT50dl9uc2VjOw0KPj4gK30NCj4+ICsNCj4+ICsv Kg0KPj4gKyAqIEdldHMgYSB2YmxhbmsgZXZlbnQgZnJvbSBEUk0gYW5kIHJldHVybnMgaXRzIHRp bWVzdGFtcCBpbiBuYW5vc2Vjb25kcy4NCj4+ICsgKiBUaGlzIGJsb2NrcyB1bnRpbCB0aGUgZXZl bnQgaXMgcmVjZWl2ZWQuDQo+PiArICovDQo+PiArc3RhdGljIHVpbnQ2NF90IGdldF92Ymxhbmtf ZXZlbnRfbnMoZGF0YV90ICpkYXRhKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGRybV9ldmVudF92Ymxh bmsgZXY7DQo+PiArDQo+PiArCWlndF9zZXRfdGltZW91dCgxLCAiV2FpdGluZyBmb3IgdmJsYW5r IGV2ZW50XG4iKTsNCj4+ICsJaWd0X2Fzc2VydF9lcShyZWFkKGRhdGEtPmRybV9mZCwgJmV2LCBz aXplb2YoZXYpKSwgc2l6ZW9mKGV2KSk7DQo+PiArCWlndF9yZXNldF90aW1lb3V0KCk7DQo+PiAr DQo+PiArCXJldHVybiBldi50dl9zZWMgKiBOU0VDU19QRVJfU0VDICsgZXYudHZfdXNlYyAqIDEw MDB1bGw7DQo+PiArfQ0KPj4gKw0KPj4gKy8qDQo+PiArICogUmV0dXJucyB0aGUgY3VycmVudCBD TE9DS19NT05PVE9OSUMgdGltZSBpbiBuYW5vc2Vjb25kcy4NCj4+ICsgKiBUaGUgcmVndWxhciBJ R1QgaGVscGVycyBjYW4ndCBiZSB1c2VkIHNpbmNlIHRoZXkgZGVmYXVsdCB0bw0KPj4gKyAqIENM T0NLX01PTk9UT05JQ19SQVcgLSB3aGljaCBpc24ndCB3aGF0IHRoZSBrZXJuZWwgdXNlcyBmb3Ig aXRzIHRpbWVzdGFtcHMuDQo+PiArICovDQo+PiArc3RhdGljIHVpbnQ2NF90IGdldF90aW1lX25z KHZvaWQpDQo+PiArew0KPj4gKwlzdHJ1Y3QgdGltZXNwZWMgdHM7DQo+PiArCW1lbXNldCgmdHMs IDAsIHNpemVvZih0cykpOw0KPj4gKwllcnJubyA9IDA7DQo+PiArDQo+PiArCWlmICghY2xvY2tf Z2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cykpDQo+PiArCQlyZXR1cm4gdGltZXNwZWNfdG9f bnMoJnRzKTsNCj4+ICsNCj4+ICsJaWd0X3dhcm4oIkNvdWxkIG5vdCByZWFkIG1vbm90b25pYyB0 aW1lOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsNCj4+ICsJaWd0X2ZhaWwoLWVycm5vKTsNCj4+ ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gKy8qIFJldHVybnMgdGhlIHJhdGUg ZHVyYXRpb24gaW4gbmFub3NlY29uZHMgZm9yIHRoZSBnaXZlbiByZWZyZXNoIHJhdGUuICovDQo+ PiArc3RhdGljIHVpbnQ2NF90IHJhdGVfZnJvbV9yZWZyZXNoKHVpbnQ2NF90IHJlZnJlc2gpDQo+ PiArew0KPj4gKwlyZXR1cm4gTlNFQ1NfUEVSX1NFQyAvIHJlZnJlc2g7DQo+PiArfQ0KPj4gKw0K Pj4gKy8qIFJldHVybnMgdGhlIG1pbiBhbmQgbWF4IHZyciByYW5nZSBmcm9tIHRoZSBjb25uZWN0 b3IgZGVidWdmcy4gKi8NCj4+ICtzdGF0aWMgcmFuZ2VfdCBnZXRfdnJyX3JhbmdlKGRhdGFfdCAq ZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQpDQo+PiArew0KPj4gKwljaGFyIGJ1ZlsyNTZdOw0K Pj4gKwljaGFyICpzdGFydF9sb2M7DQo+PiArCWludCBmZCwgcmVzOw0KPj4gKwlyYW5nZV90IHJh bmdlOw0KPj4gKw0KPj4gKwlmZCA9IGlndF9kZWJ1Z2ZzX2Nvbm5lY3Rvcl9kaXIoZGF0YS0+ZHJt X2ZkLCBvdXRwdXQtPm5hbWUsIE9fUkRPTkxZKTsNCj4+ICsJaWd0X2Fzc2VydChmZCA+PSAwKTsN Cj4+ICsNCj4+ICsJcmVzID0gaWd0X2RlYnVnZnNfc2ltcGxlX3JlYWQoZmQsICJ2cnJfcmFuZ2Ui LCBidWYsIHNpemVvZihidWYpKTsNCj4+ICsJaWd0X3JlcXVpcmUocmVzID4gMCk7DQo+PiArDQo+ PiArCWNsb3NlKGZkKTsNCj4+ICsNCj4+ICsJaWd0X2Fzc2VydChzdGFydF9sb2MgPSBzdHJzdHIo YnVmLCAiTWluOiAiKSk7DQo+PiArCWlndF9hc3NlcnRfZXEoc3NjYW5mKHN0YXJ0X2xvYywgIk1p bjogJXUiLCAmcmFuZ2UubWluKSwgMSk7DQo+PiArDQo+PiArCWlndF9hc3NlcnQoc3RhcnRfbG9j ID0gc3Ryc3RyKGJ1ZiwgIk1heDogIikpOw0KPj4gKwlpZ3RfYXNzZXJ0X2VxKHNzY2FuZihzdGFy dF9sb2MsICJNYXg6ICV1IiwgJnJhbmdlLm1heCksIDEpOw0KPj4gKw0KPiANCj4gV291bGQgYmUg Z29vZCB0byBzZWUgdGhpcyBwYXRjaCBvbiBhbWQtZ2Z4IHNvIHJldmlld2VycyBjYW4gcmVmZXJl bmNlIGl0Lg0KDQpTdXJlLiBJIHdhcyB0aGlua2luZyB0aGF0IEknZCBnZXQgcmV2aWV3IG9uIHRo aXMgcGF0Y2ggZmlyc3QgYW5kIGRvIGFueSANCmNoYW5nZXMgbmVjZXNzYXJ5IHRvIHRoYXQgcGF0 Y2ggYWZ0ZXIsIGJ1dCBJIGNhbiBzZWUgdGhlIHZhbHVlIGluIGhhdmluZyANCnRoZW0gYm90aCB1 cCBhdCB0aGUgc2FtZSB0aW1lLg0KDQo+IA0KPj4gKwlyZXR1cm4gcmFuZ2U7DQo+PiArfQ0KPj4g Kw0KPj4gKy8qIFJldHVybnMgYSBzdWl0YWJsZSB2cnIgdGVzdCBmcmVxdWVuY3kuICovDQo+PiAr c3RhdGljIHVpbnQzMl90IGdldF90ZXN0X3JhdGVfbnMoZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0 X3QgKm91dHB1dCkNCj4+ICt7DQo+PiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZSA9IGlndF9vdXRw dXRfZ2V0X21vZGUob3V0cHV0KTsNCj4+ICsJcmFuZ2VfdCByYW5nZTsNCj4+ICsJdWludDMyX3Qg dnRlc3Q7DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIFRoZSBmcmVxdWVuY3kgd2l0aCB0aGUgZmFz dGVzdCBjb252ZXJnZW5jZSBzcGVlZCBzaG91bGQgYmUNCj4+ICsJICogdGhlIG1pZHBvaW50IGJl dHdlZW4gdGhlIGN1cnJlbnQgbW9kZSB2ZnJlcSBhbmQgdGhlIG1pbg0KPj4gKwkgKiBzdXBwb3J0 ZWQgdmZyZXEuDQo+PiArCSAqLw0KPj4gKwlyYW5nZSA9IGdldF92cnJfcmFuZ2UoZGF0YSwgb3V0 cHV0KTsNCj4+ICsJaWd0X3JlcXVpcmUobW9kZS0+dnJlZnJlc2ggPiByYW5nZS5taW4pOw0KPj4g Kw0KPj4gKwl2dGVzdCA9IChtb2RlLT52cmVmcmVzaCAtIHJhbmdlLm1pbikgLyAyICsgcmFuZ2Uu bWluOw0KPj4gKwlpZ3RfcmVxdWlyZSh2dGVzdCA8IG1vZGUtPnZyZWZyZXNoKTsNCj4+ICsNCj4+ ICsJcmV0dXJuIHJhdGVfZnJvbV9yZWZyZXNoKHZ0ZXN0KTsNCj4+ICt9DQo+PiArDQo+PiArLyog UmV0dXJucyB0cnVlIGlmIGFuIG91dHB1dCBzdXBwb3J0cyBWUlIuICovDQo+PiArc3RhdGljIGJv b2wgaGFzX3ZycihpZ3Rfb3V0cHV0X3QgKm91dHB1dCkNCj4+ICt7DQo+PiArCXJldHVybiBpZ3Rf b3V0cHV0X2hhc19wcm9wKG91dHB1dCwgSUdUX0NPTk5FQ1RPUl9WUlJfQ0FQQUJMRSkgJiYNCj4+ ICsJICAgICAgIGlndF9vdXRwdXRfZ2V0X3Byb3Aob3V0cHV0LCBJR1RfQ09OTkVDVE9SX1ZSUl9D QVBBQkxFKTsNCj4+ICt9DQo+PiArDQo+PiArLyogVG9nZ2xlcyB2YXJpYWJsZSByZWZyZXNoIHJh dGUgb24gdGhlIHBpcGUuICovDQo+PiArc3RhdGljIHZvaWQgc2V0X3Zycl9vbl9waXBlKGRhdGFf dCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGJvb2wgZW5hYmxlZCkNCj4+ICt7DQo+PiArCWlndF9w aXBlX3NldF9wcm9wX3ZhbHVlKCZkYXRhLT5kaXNwbGF5LCBwaXBlLCBJR1RfQ1JUQ19WUlJfRU5B QkxFRCwNCj4+ICsJCQkJZW5hYmxlZCk7DQo+PiArCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMo JmRhdGEtPmRpc3BsYXksIDAsIE5VTEwpOw0KPj4gK30NCj4+ICsNCj4+ICsvKiBQcmVwYXJlIHRo ZSBkaXNwbGF5IGZvciB0ZXN0aW5nIG9uIHRoZSBnaXZlbiBwaXBlLiAqLw0KPj4gK3N0YXRpYyB2 b2lkIHByZXBhcmVfdGVzdChkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVt IHBpcGUgcGlwZSkNCj4+ICt7DQo+PiArCWRybU1vZGVNb2RlSW5mbyBtb2RlID0gKmlndF9vdXRw dXRfZ2V0X21vZGUob3V0cHV0KTsNCj4+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7DQo+PiArCWNh aXJvX3QgKmNyOw0KPj4gKw0KPj4gKwkvKiBSZXNldCBvdXRwdXQgKi8NCj4+ICsJaWd0X2Rpc3Bs YXlfcmVzZXQoJmRhdGEtPmRpc3BsYXkpOw0KPj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1 dCwgcGlwZSk7DQo+PiArDQo+PiArCS8qIFByZXBhcmUgcmVzb3VyY2VzICovDQo+PiArCWlndF9y ZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmIxKTsNCj4+ICsJaWd0X3JlbW92ZV9mYihk YXRhLT5kcm1fZmQsICZkYXRhLT5mYjApOw0KPj4gKw0KPiANCj4gU2hvdWxkIHdlIGRvIHRoaXMg YXQgdGhlIGVuZCBvZiBlYWNoIHRlc3QgaW4gYSBjbGVhbnVwX3Rlc3Q/IE5vdCBzdXJlIHdoeSB3 ZSdyZSBkb2luZyB0aGlzIGhlcmUsIG90aGVyIHRoYW4gY2xlYW5pbmcgdXAgZnJvbSB0aGUgcHJl dmlvdXMgdGVzdC4NCj4gDQo+IEhhcnJ5DQoNCkkgZmVsdCB0aGF0IGl0IHdhcyBiZXR0ZXIgbG9n aWNhbGx5IGdyb3VwZWQgd2l0aCB0aGUgcmVzZXQuDQoNCkkgZ3Vlc3MgdGhpcyBpcyB0ZWNobmlj YWxseSBsZWFraW5nIEZCcyBvbiB0ZXN0IHN1Y2Nlc3MsIGhvd2V2ZXIuIEkgDQp0aGluayB0aGVy ZSdzIGFsc28gbGVha2luZyBmb3IgdGhlIGNhaXJvIGN0eCBiZWxvdy4uLg0KDQo+IA0KPj4gKwlp Z3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwgbW9kZS5oZGlzcGxheSwgbW9kZS52ZGlz cGxheSwNCj4+ICsJCQkgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1BVF9N T0RfTk9ORSwNCj4+ICsJCQkgICAgMC41MCwgMC41MCwgMC41MCwgJmRhdGEtPmZiMCk7DQo+PiAr DQo+PiArCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLmhkaXNwbGF5LCBt b2RlLnZkaXNwbGF5LA0KPj4gKwkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LCBMT0NBTF9EUk1f Rk9STUFUX01PRF9OT05FLA0KPj4gKwkJCSAgICAwLjUwLCAwLjUwLCAwLjUwLCAmZGF0YS0+ZmIx KTsNCj4+ICsNCj4+ICsJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsICZkYXRh LT5mYjApOw0KPj4gKw0KPj4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIG1vZGUuaGRpc3Bs YXkgLyAxMCwgbW9kZS52ZGlzcGxheSAvIDEwLA0KPj4gKwkJCTEuMDAsIDAuMDAsIDAuMDApOw0K Pj4gKw0KPj4gKwkvKiBUYWtlIGNhcmUgb2YgYW55IHJlcXVpcmVkIG1vZGVzZXR0aW5nIGJlZm9y ZSB0aGUgdGVzdCBiZWdpbnMuICovDQo+PiArCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFu ZV90eXBlKG91dHB1dCwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7DQo+PiArCWlndF9wbGFuZV9z ZXRfZmIocHJpbWFyeSwgJmRhdGEtPmZiMCk7DQo+PiArDQo+PiArCWlndF9kaXNwbGF5X2NvbW1p dF9hdG9taWMoJmRhdGEtPmRpc3BsYXksDQo+PiArCQkJCSAgRFJNX01PREVfQVRPTUlDX0FMTE9X X01PREVTRVQsIE5VTEwpOw0KDQouLi5oZXJlLg0KDQpUaGlzIHByb2JhYmx5IG5lZWRzIGEgaWd0 X3B1dF9jYWlyb19jdHggaGVyZS4NCg0KPj4gK30NCj4+ICsNCj4+ICsvKiBXYWl0cyBmb3IgdGhl IHZibGFuayBpbnRlcnZhbC4gUmV0dXJucyB0aGUgdmJsYW5rIHRpbWVzdGFtcCBpbiBucy4gKi8N Cj4+ICtzdGF0aWMgdWludDY0X3QNCj4+ICt3YWl0X2Zvcl92YmxhbmsoZGF0YV90ICpkYXRhLCBl bnVtIHBpcGUgcGlwZSkNCj4+ICt7DQo+PiArCWRybVZCbGFuayB2YmwgPSB7IDAgfTsNCj4+ICsN Cj4+ICsJdmJsLnJlcXVlc3QudHlwZSA9IGttc3Rlc3RfZ2V0X3ZibF9mbGFnKHBpcGUpOw0KPj4g Kwl2YmwucmVxdWVzdC50eXBlIHw9IERSTV9WQkxBTktfUkVMQVRJVkUgfCBEUk1fVkJMQU5LX0VW RU5UOw0KPj4gKwl2YmwucmVxdWVzdC5zZXF1ZW5jZSA9IDE7DQo+PiArCWRybVdhaXRWQmxhbmso ZGF0YS0+ZHJtX2ZkLCAmdmJsKTsNCj4+ICsNCj4+ICsJcmV0dXJuIGdldF92YmxhbmtfZXZlbnRf bnMoZGF0YSk7DQo+PiArfQ0KPj4gKw0KPj4gKy8qIFBlcmZvcm1zIGFuIGFzeW5jaHJvbm91cyBu b24tYmxvY2tpbmcgcGFnZS1mbGlwIG9uIGEgcGlwZS4gKi8NCj4+ICtzdGF0aWMgaW50DQo+PiAr ZG9fZmxpcChkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlX2lkLCBpZ3RfZmJfdCAqZmIpDQo+ PiArew0KPj4gKwlpZ3RfcGlwZV90ICpwaXBlID0gJmRhdGEtPmRpc3BsYXkucGlwZXNbcGlwZV9p ZF07DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCWlndF9zZXRfdGltZW91dCgxLCAiU2NoZWR1 bGluZyBwYWdlIGZsaXBcbiIpOw0KPj4gKw0KPj4gKwkvKg0KPj4gKwkgKiBPbmx5IHRoZSBsZWdh Y3kgZmxpcCBpb2N0bCBzdXBwb3J0cyBhc3luYyBmbGlwcy4NCj4+ICsJICogSXQncyBhbHNvIG5v bi1ibG9ja2luZywgYnV0IHJldHVybnMgLUVCVVNZIGlmIGZsaXBwaW5nIHRvbyBmYXN0Lg0KPj4g KwkgKiAyeCBtb25pdG9yIHRlc3RzIHdpbGwgbmVlZCBhc3luYyBmbGlwcyBpbiB0aGUgYXRvbWlj IEFQSS4NCj4+ICsJICovDQo+PiArCWRvIHsNCj4+ICsJCXJldCA9IGRybU1vZGVQYWdlRmxpcChk YXRhLT5kcm1fZmQsIHBpcGUtPmNydGNfaWQsDQo+PiArCQkJCSAgICAgIGZiLT5mYl9pZCwNCj4+ ICsJCQkJICAgICAgRFJNX01PREVfUEFHRV9GTElQX0VWRU5UIHwNCj4+ICsJCQkJICAgICAgRFJN X01PREVfUEFHRV9GTElQX0FTWU5DLA0KPj4gKwkJCQkgICAgICBkYXRhKTsNCj4+ICsJfSB3aGls ZSAocmV0ID09IC1FQlVTWSk7DQo+PiArDQo+PiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsNCj4+ ICsJaWd0X3Jlc2V0X3RpbWVvdXQoKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4g Kw0KPj4gKy8qDQo+PiArICogRmxpcHMgYXQgdGhlIGdpdmVuIHJhdGUgYW5kIG1lYXN1cmVzIGFn YWluc3QgdGhlIGV4cGVjdGVkIHZhbHVlLg0KPj4gKyAqIFJldHVybnMgdGhlIHBhc3MgcmF0ZSBh cyBhIHBlcmNlbnRhZ2UgZnJvbSAwIC0gMTAwLg0KPj4gKyAqDQo+PiArICogVGhlIFZSUiBBUEkg aXMgcXVpdGUgZmxleGlibGUgaW4gdGVybXMgb2YgZGVmaW5pdGlvbiAtIHRoZSBkcml2ZXINCj4+ ICsgKiBjYW4gYXJiaXRyYXJpbHkgcmVzdHJpY3QgdGhlIGJvdW5kcyBmdXJ0aGVyIHRoYW4gdGhl IGFic29sdXRlDQo+PiArICogbWluIGFuZCBtYXggcmFuZ2UuIEJ1dCBWUlIgaXMgcmVhbGx5IGFi b3V0IGV4dGVuZGluZyB0aGUgZmxpcA0KPj4gKyAqIHRvIHByZXZlbnQgc3R1dHRlcmluZyBvciB0 byBtYXRjaCBhIHNvdXJjZSBjb250ZW50IHJhdGUuDQo+PiArICoNCj4+ICsgKiBUaGUgb25seSB3 YXkgdG8gInByZXNlbnQiIGF0IGEgZml4ZWQgcmF0ZSBsaWtlIHVzZXJzcGFjZSBpbiBhIHZlbmRv cg0KPj4gKyAqIG5ldXRyYWwgbWFubmVyIGlzIHRvIGRvIGl0IHdpdGggYXN5bmMgZmxpcHMuIFRo aXMgYXZvaWRzIHRoZSBuZWVkDQo+PiArICogdG8gd2FpdCBmb3IgbmV4dCB2YmxhbmsgYW5kIGl0 IHNob3VsZCBldmVudHVhbGx5IGNvbnZlcmdlIGF0IHRoZQ0KPj4gKyAqIGRlc2lyZWQgcmF0ZS4N Cj4+ICsgKi8NCj4+ICtzdGF0aWMgdWludDMyX3QNCj4+ICtmbGlwX2FuZF9tZWFzdXJlKGRhdGFf dCAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0gcGlwZSBwaXBlLA0KPj4gKwkJIHVp bnQ2NF90IHJhdGVfbnMsIHVpbnQ2NF90IGR1cmF0aW9uX25zKQ0KPj4gK3sNCj4+ICsJdWludDY0 X3Qgc3RhcnRfbnMsIGxhc3RfdmJsYW5rX25zOw0KPj4gKwl1aW50MzJfdCB0b3RhbF9mbGlwID0g MCwgdG90YWxfcGFzcyA9IDA7DQo+PiArCWJvb2wgZnJvbnQgPSBmYWxzZTsNCj4+ICsNCj4+ICsJ LyogQWxpZ24gd2l0aCB0aGUgdmJsYW5rIHJlZ2lvbiB0byBzcGVlZCB1cCBjb252ZXJnZW5jZS4g Ki8NCj4+ICsJbGFzdF92YmxhbmtfbnMgPSB3YWl0X2Zvcl92YmxhbmsoZGF0YSwgcGlwZSk7DQo+ PiArCXN0YXJ0X25zID0gZ2V0X3RpbWVfbnMoKTsNCj4+ICsNCj4+ICsJZm9yICg7Oykgew0KPj4g KwkJdWludDY0X3Qgbm93X25zLCB2YmxhbmtfbnMsIHdhaXRfbnMsIHRhcmdldF9uczsNCj4+ICsJ CWludDY0X3QgZGlmZl9uczsNCj4+ICsNCj4+ICsJCWZyb250ID0gIWZyb250Ow0KPj4gKwkJZG9f ZmxpcChkYXRhLCBwaXBlLCBmcm9udCA/ICZkYXRhLT5mYjEgOiAmZGF0YS0+ZmIwKTsNCj4+ICsN Cj4+ICsJCXZibGFua19ucyA9IGdldF92YmxhbmtfZXZlbnRfbnMoZGF0YSk7DQo+PiArCQlkaWZm X25zID0gcmF0ZV9ucyAtICh2YmxhbmtfbnMgLSBsYXN0X3ZibGFua19ucyk7DQo+PiArCQlsYXN0 X3ZibGFua19ucyA9IHZibGFua19uczsNCj4+ICsNCj4+ICsJCXRvdGFsX2ZsaXAgKz0gMTsNCj4+ ICsNCj4+ICsJCS8qDQo+PiArCQkgKiBDaGVjayBpZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRo ZSB0d28gZmxpcCB0aW1lc3RhbXBzDQo+PiArCQkgKiB3YXMgd2l0aGluIHRoZSByZXF1aXJlZCB0 aHJlc2hvbGQgZnJvbSB0aGUgZXhwZWN0ZWQgcmF0ZS4NCj4+ICsJCSAqDQo+PiArCQkgKiBBIH41 MHVzIHRocmVzaG9sZCBpcyBhcmJpdHJhcnksIGJ1dCBpdCdzIHJvdWdobHkgdGhlDQo+PiArCQkg KiBkaWZmZXJlbmNlIGJldHdlZW4gMTQ0SHogYW5kIDE0M0h6IHdoaWNoIHNob3VsZCBnaXZlIHRo aXMNCj4+ICsJCSAqIGVub3VnaCBhY2N1cmFjeSBmb3IgbW9zdCB1c2UgY2FzZXMuDQo+PiArCQkg Ki8NCj4+ICsJCWlmIChsbGFicyhkaWZmX25zKSA8IDUwMDAwbGwpDQo+PiArCQkJdG90YWxfcGFz cyArPSAxOw0KPj4gKw0KPj4gKwkJbm93X25zID0gZ2V0X3RpbWVfbnMoKTsNCj4+ICsJCWlmIChu b3dfbnMgLSBzdGFydF9ucyA+IGR1cmF0aW9uX25zKQ0KPj4gKwkJCWJyZWFrOw0KPj4gKw0KPj4g KwkJLyoNCj4+ICsJCSAqIEJ1cm4gQ1BVIHVudGlsIG5leHQgdGltZXN0YW1wLCBzbGVlcGluZyBp c24ndCBhY2N1cmF0ZSBlbm91Z2guDQo+PiArCQkgKiBJdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRo ZSB0YXJnZXQgdGltZXN0YW1wIGlzIGJhc2VkIG9uIGFic29sdXRlDQo+PiArCQkgKiB0aW1lc3Rh bXAgcmF0aGVyIHRoYW4gYSBkZWx0YSB0byBhdm9pZCBhY2N1bXVsYXRpb24gZXJyb3JzLg0KPj4g KwkJICovDQo+PiArCQlkaWZmX25zID0gbm93X25zIC0gc3RhcnRfbnM7DQo+PiArCQl3YWl0X25z ID0gKChkaWZmX25zICsgcmF0ZV9ucyAtIDEpIC8gcmF0ZV9ucykgKiByYXRlX25zOw0KPj4gKwkJ dGFyZ2V0X25zID0gc3RhcnRfbnMgKyB3YWl0X25zIC0gMTA7DQo+PiArDQo+PiArCQl3aGlsZSAo Z2V0X3RpbWVfbnMoKSA8IHRhcmdldF9ucyk7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWd0X2luZm8o IkNvbXBsZXRlZCAldSBmbGlwcywgJXUgd2VyZSBpbiB0aHJlc2hvbGQgZm9yICVsdW5zLlxuIiwN Cj4+ICsJCSB0b3RhbF9mbGlwLCB0b3RhbF9wYXNzLCByYXRlX25zKTsNCj4+ICsNCj4+ICsJcmV0 dXJuIHRvdGFsX2ZsaXAgPyAoKHRvdGFsX3Bhc3MgKiAxMDApIC8gdG90YWxfZmxpcCkgOiAwOw0K Pj4gK30NCj4+ICsNCj4+ICsvKiBCYXNpYyBWUlIgZmxpcCBmdW5jdGlvbmFsaXR5IHRlc3QgLSBl bmFibGUsIG1lYXN1cmUsIGRpc2FibGUsIG1lYXN1cmUgKi8NCj4+ICtzdGF0aWMgdm9pZA0KPj4g K3Rlc3RfYmFzaWMoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpv dXRwdXQsIHVpbnQzMl90IGZsYWdzKQ0KPj4gK3sNCj4+ICsJdWludDY0X3QgcmF0ZTsNCj4+ICsJ dWludDMyX3QgcmVzdWx0Ow0KPj4gKw0KPj4gKwlyYXRlID0gZ2V0X3Rlc3RfcmF0ZV9ucyhkYXRh LCBvdXRwdXQpOw0KPj4gKw0KPj4gKwlwcmVwYXJlX3Rlc3QoZGF0YSwgb3V0cHV0LCBwaXBlKTsN Cj4+ICsNCj4+ICsJc2V0X3Zycl9vbl9waXBlKGRhdGEsIHBpcGUsIDEpOw0KPj4gKw0KPj4gKwkv Kg0KPj4gKwkgKiBEbyBhIHNob3J0IHJ1biB3aXRoIFZSUiwgYnV0IGRvbid0IGNoZWNrIHRoZSBy ZXN1bHQuDQo+PiArCSAqIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHdlIHdlcmUgYWN0dWFsbHkgaW4g dGhlIG1pZGRsZSBvZg0KPj4gKwkgKiBhY3RpdmUgZmxpcHBpbmcgYmVmb3JlIGRvaW5nIHRoZSBE UE1TL3N1c3BlbmQgc3RlcHMuDQo+PiArCSAqLw0KPj4gKwlmbGlwX2FuZF9tZWFzdXJlKGRhdGEs IG91dHB1dCwgcGlwZSwgcmF0ZSwgMjUwMDAwMDAwdWxsKTsNCj4+ICsNCj4+ICsJaWYgKGZsYWdz ICYgVEVTVF9EUE1TKSB7DQo+PiArCQlrbXN0ZXN0X3NldF9jb25uZWN0b3JfZHBtcyhvdXRwdXQt PmRpc3BsYXktPmRybV9mZCwNCj4+ICsJCQkJCSAgIG91dHB1dC0+Y29uZmlnLmNvbm5lY3RvciwN Cj4+ICsJCQkJCSAgIERSTV9NT0RFX0RQTVNfT0ZGKTsNCj4+ICsJCWttc3Rlc3Rfc2V0X2Nvbm5l Y3Rvcl9kcG1zKG91dHB1dC0+ZGlzcGxheS0+ZHJtX2ZkLA0KPj4gKwkJCQkJICAgb3V0cHV0LT5j b25maWcuY29ubmVjdG9yLA0KPj4gKwkJCQkJICAgRFJNX01PREVfRFBNU19PTik7DQo+PiArCX0N Cj4+ICsNCj4+ICsJaWYgKGZsYWdzICYgVEVTVF9TVVNQRU5EKQ0KPj4gKwkJaWd0X3N5c3RlbV9z dXNwZW5kX2F1dG9yZXN1bWUoU1VTUEVORF9TVEFURV9NRU0sDQo+PiArCQkJCQkgICAgICBTVVNQ RU5EX1RFU1RfTk9ORSk7DQo+PiArDQo+PiArCXJlc3VsdCA9IGZsaXBfYW5kX21lYXN1cmUoZGF0 YSwgb3V0cHV0LCBwaXBlLCByYXRlLCBURVNUX0RVUkFUSU9OX05TKTsNCj4+ICsNCj4+ICsJc2V0 X3Zycl9vbl9waXBlKGRhdGEsIHBpcGUsIDApOw0KPj4gKw0KPj4gKwkvKiBUaGlzIGNoZWNrIGlz IGRlbGF5ZWQgdW50aWwgYWZ0ZXIgVlJSIGlzIGRpc2FibGVkIHNvIGl0IGlzbid0DQo+PiArCSAq IGxlZnQgZW5hYmxlZCBpZiB0aGUgdGVzdCBmYWlscy4gKi8NCj4+ICsJaWd0X2Fzc2VydF9mKHJl c3VsdCA+IDc1LA0KPj4gKwkJICAgICAiVGFyZ2V0IFZSUiBvbiB0aHJlc2hvbGQgbm90IHJlYWNo ZWQsIHJlc3VsdCB3YXMgJXUlJVxuIiwNCj4+ICsJCSAgICAgcmVzdWx0KTsNCj4+ICsNCj4+ICsJ cmVzdWx0ID0gZmxpcF9hbmRfbWVhc3VyZShkYXRhLCBvdXRwdXQsIHBpcGUsIHJhdGUsIFRFU1Rf RFVSQVRJT05fTlMpOw0KPj4gKw0KPj4gKwlpZ3RfYXNzZXJ0X2YocmVzdWx0IDwgMTAsDQo+PiAr CQkgICAgICJUYXJnZXQgVlJSIG9mZiB0aHJlc2hvbGQgZXhjZWVkZWQsIHJlc3VsdCB3YXMgJXUl JVxuIiwNCj4+ICsJCSAgICAgcmVzdWx0KTsNCj4+ICt9DQo+PiArDQo+PiArLyogUnVucyB0ZXN0 cyBvbiBvdXRwdXRzIHRoYXQgYXJlIFZSUiBjYXBhYmxlLiAqLw0KPj4gK3N0YXRpYyB2b2lkDQo+ PiArcnVuX3Zycl90ZXN0KGRhdGFfdCAqZGF0YSwgdGVzdF90IHRlc3QsIHVpbnQzMl90IGZsYWdz KQ0KPj4gK3sNCj4+ICsJaWd0X291dHB1dF90ICpvdXRwdXQ7DQo+PiArCWJvb2wgZm91bmQgPSBm YWxzZTsNCj4+ICsNCj4+ICsJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxh eSwgb3V0cHV0KSB7DQo+PiArCQllbnVtIHBpcGUgcGlwZTsNCj4+ICsNCj4+ICsJCWlmICghaGFz X3ZycihvdXRwdXQpKQ0KPj4gKwkJCWNvbnRpbnVlOw0KPj4gKw0KPj4gKwkJZm9yX2VhY2hfcGlw ZSgmZGF0YS0+ZGlzcGxheSwgcGlwZSkNCj4+ICsJCQlpZiAoaWd0X3BpcGVfY29ubmVjdG9yX3Zh bGlkKHBpcGUsIG91dHB1dCkpIHsNCj4+ICsJCQkJdGVzdChkYXRhLCBwaXBlLCBvdXRwdXQsIGZs YWdzKTsNCj4+ICsJCQkJZm91bmQgPSB0cnVlOw0KPj4gKwkJCQlicmVhazsNCj4+ICsJCQl9DQo+ PiArCX0NCj4+ICsNCj4+ICsJaWYgKCFmb3VuZCkNCj4+ICsJCWlndF9za2lwKCJObyB2cnIgY2Fw YWJsZSBvdXRwdXRzIGZvdW5kLlxuIik7DQo+PiArfQ0KPj4gKw0KPj4gK2lndF9tYWluDQo+PiAr ew0KPj4gKwlkYXRhX3QgZGF0YSA9IHsgMCB9Ow0KPj4gKw0KPj4gKwlpZ3Rfc2tpcF9vbl9zaW11 bGF0aW9uKCk7DQo+PiArDQo+PiArCWlndF9maXh0dXJlIHsNCj4+ICsJCWRhdGEuZHJtX2ZkID0g ZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfQU5ZKTsNCj4+ICsNCj4+ICsJCWttc3Rlc3Rf c2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsNCj4+ICsNCj4+ICsJCWlndF9kaXNwbGF5X3JlcXVpcmUo JmRhdGEuZGlzcGxheSwgZGF0YS5kcm1fZmQpOw0KPj4gKwkJaWd0X3JlcXVpcmUoZGF0YS5kaXNw bGF5LmlzX2F0b21pYyk7DQo+PiArCQlpZ3RfZGlzcGxheV9yZXF1aXJlX291dHB1dCgmZGF0YS5k aXNwbGF5KTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZ3Rfc3VidGVzdCgiZmxpcC1iYXNpYyIpDQo+ PiArCQlydW5fdnJyX3Rlc3QoJmRhdGEsIHRlc3RfYmFzaWMsIDApOw0KPj4gKw0KPj4gKwlpZ3Rf c3VidGVzdCgiZmxpcC1kcG1zIikNCj4+ICsJCXJ1bl92cnJfdGVzdCgmZGF0YSwgdGVzdF9iYXNp YywgVEVTVF9EUE1TKTsNCj4+ICsNCj4+ICsJaWd0X3N1YnRlc3QoImZsaXAtc3VzcGVuZCIpDQo+ PiArCQlydW5fdnJyX3Rlc3QoJmRhdGEsIHRlc3RfYmFzaWMsIFRFU1RfU1VTUEVORCk7DQo+PiAr DQo+PiArCWlndF9maXh0dXJlIHsNCj4+ICsJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxh eSk7DQo+PiArCX0NCj4+ICt9DQo+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90 ZXN0cy9tZXNvbi5idWlsZA0KPj4gaW5kZXggYjhhNmU2MWIuLmU4ODdmMTMxIDEwMDY0NA0KPj4g LS0tIGEvdGVzdHMvbWVzb24uYnVpbGQNCj4+ICsrKyBiL3Rlc3RzL21lc29uLmJ1aWxkDQo+PiBA QCAtNTksNiArNTksNyBAQCB0ZXN0X3Byb2dzID0gWw0KPj4gICAJJ2ttc190dl9sb2FkX2RldGVj dCcsDQo+PiAgIAkna21zX3VuaXZlcnNhbF9wbGFuZScsDQo+PiAgIAkna21zX3ZibGFuaycsDQo+ PiArCSdrbXNfdnJyJywNCj4+ICAgCSdtZXRhX3Rlc3QnLA0KPj4gICAJJ3BlcmYnLA0KPj4gICAJ J3BtX2JhY2tsaWdodCcsDQo+Pg0KDQpOaWNob2xhcyBLYXpsYXVza2FzDQpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdApp Z3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK