From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9D41889AAE for ; Tue, 16 Apr 2019 08:46:55 +0000 (UTC) From: "Ser, Simon" Date: Tue, 16 Apr 2019 08:46:53 +0000 Message-ID: References: <20190415123815.27258-1-simon.ser@intel.com> <20190415142043.29723-1-simon.ser@intel.com> <20190416081150.j2jrotpwg4xn4k6b@ahiler-desk1.fi.intel.com> In-Reply-To: <20190416081150.j2jrotpwg4xn4k6b@ahiler-desk1.fi.intel.com> Content-Language: en-US Content-ID: <2D3724E7EECE1742843673C827D68054@intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t v2] lib/igt_edid: new library for generating EDIDs 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: "Hiler, Arkadiusz" Cc: "igt-dev@lists.freedesktop.org" List-ID: VGhhbmtzIGZvciB5b3VyIHJldmlldyENCg0KT24gVHVlLCAyMDE5LTA0LTE2IGF0IDExOjExICsw MzAwLCBBcmthZGl1c3ogSGlsZXIgd3JvdGU6DQo+IE9uIE1vbiwgQXByIDE1LCAyMDE5IGF0IDA1 OjIwOjQzUE0gKzAzMDAsIFNpbW9uIFNlciB3cm90ZToNCj4gPiBGb3IgdGhlIHB1cnBvc2VzIG9m IHRlc3RpbmcgZGlmZmVyZW50IEVESUQgZmVhdHVyZXMsIHdlIG5lZWQgdG8gZ2VuZXJhdGUgbW9y ZQ0KPiA+IGFuZCBtb3JlIGNvbXBsZXggRURJRCBibG9icyAoZS5nLiB3aXRoIGF1ZGlvIHN1cHBv cnQpLiBIb3dldmVyIGN1cnJlbnRseSBJR1QNCj4gPiB1c2VzIGEgbWFjcm8tYmFzZWQgc3lzdGVt IHRvIGdlbmVyYXRlIEVESURzLiBUaGlzIGRvZXNuJ3Qgc2NhbGUgd2VsbCBhbmQgaXMNCj4gPiBw cmV0dHkgaW5mbGV4aWJsZS4NCj4gPiANCj4gPiBUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIGEgbmV3 IGxpdHRsZSBsaWJyYXJ5IHRvIGdlbmVyYXRlIEVESURzLiBGb3Igbm93IGl0IGNhbid0DQo+ID4g ZG8gbW9yZSB0aGFuIHRoZSBvbGQgbWFjcm8uIEZ1dHVyZSBjb21taXRzIHdpbGwgZXh0ZW5kIHRo ZSBBUEkuDQo+ID4gDQo+ID4gVGhlIHN0cnVjdHVyZXMgYXJlIG1vc3RseSBiYXNlZCBvbiB0aGUg TGludXgga2VybmVsIGNvZGUgKGRybV9lZGlkLmgpLiBTZXR0ZXJzDQo+ID4gaGF2ZSBiZWVuIGFk ZGVkIGZvciBjb252ZW5pZW5jZS4NCj4gPiANCj4gPiBTaWduZWQtb2ZmLWJ5OiBTaW1vbiBTZXIg PHNpbW9uLnNlckBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gDQo+ID4gQ2hhbmdlcyBpbiB2Mjog Zml4IGluY2x1ZGUgZ3VhcmQgbmFtZQ0KPiA+IA0KPiA+IEFkZGluZyBWaWxsZSBiZWNhdXNlIGhl IHdyb3RlIHRoZSBjdXJyZW50IEVESUQgY29kZSwgYW5kIEFyZWsgYmVjYXVzZSBoZSdzDQo+ID4g aW50ZXJlc3RlZCBpbiB0aGlzIHBhdGNoLg0KPiA+IA0KPiA+ICBsaWIvaWd0X2VkaWQuYyAgICAg ICAgICB8IDI2OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4g IGxpYi9pZ3RfZWRpZC5oICAgICAgICAgIHwgMTk2ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrDQo+ID4gIGxpYi9pZ3RfZWRpZF90ZW1wbGF0ZS5oIHwgIDc0IC0tLS0tLS0tLS0tDQo+ID4g IGxpYi9pZ3Rfa21zLmMgICAgICAgICAgIHwgMTEzICsrKysrKysrKy0tLS0tLS0tDQo+ID4gIGxp Yi9tZXNvbi5idWlsZCAgICAgICAgIHwgICAzICstDQo+ID4gIDUgZmlsZXMgY2hhbmdlZCwgNTIx IGluc2VydGlvbnMoKyksIDEzMyBkZWxldGlvbnMoLSkNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYi9pZ3RfZWRpZC5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2VkaWQuaA0K PiA+ICBkZWxldGUgbW9kZSAxMDA2NDQgbGliL2lndF9lZGlkX3RlbXBsYXRlLmgNCj4gPiANCj4g PiBkaWZmIC0tZ2l0IGEvbGliL2lndF9lZGlkLmMgYi9saWIvaWd0X2VkaWQuYw0KPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAuLjE1NWViZWJlDQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL2xpYi9pZ3RfZWRpZC5jDQo+ID4gQEAgLTAsMCArMSwyNjggQEAN Cj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24NCj4g PiArICoNCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGENCj4gPiArICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwN Cj4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gPiAr ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlDQo+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+ID4gKyAqDQo+ID4gKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQNCj4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQ0KPiA+ICsgKiBTb2Z0d2Fy ZS4NCj4gPiArICoNCj4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCj4gPiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksDQo+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTA0KPiA+ICsgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF Ug0KPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORw0KPiA+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTDQo+ ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4NCj4gPiArICoNCj4gPiArICogQXV0aG9yczogU2ltb24g U2VyIDxzaW1vbi5zZXJAaW50ZWwuY29tPg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRl ICJjb25maWcuaCINCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxhc3NlcnQuaD4NCj4gPiArI2luY2x1 ZGUgPHN0cmluZy5oPg0KPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gKyNpbmNsdWRlIDx0 aW1lLmg+DQo+ID4gKyNpbmNsdWRlIDx4Zjg2ZHJtTW9kZS5oPg0KPiA+ICsNCj4gPiArI2luY2x1 ZGUgImlndF9jb3JlLmgiDQo+ID4gKyNpbmNsdWRlICJpZ3RfZWRpZC5oIg0KPiA+ICsNCj4gPiAr c3RhdGljIGNvbnN0IGNoYXIgZWRpZF9oZWFkZXJbXSA9IHsNCj4gPiArCTB4MDAsIDB4ZmYsIDB4 ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDANCj4gPiArfTsNCj4gPiArDQo+ID4gKy8q IHZmcmVxIGlzIGluIEh6ICovDQo+ID4gK3N0YXRpYyB2b2lkIHN0ZF90aW1pbmdfc2V0KHN0cnVj dCBzdGRfdGltaW5nICpzdCwgaW50IGhzaXplLCBpbnQgdmZyZXEsDQo+ID4gKwkJCSAgIGVudW0g c3RkX3RpbWluZ19hc3BlY3QgYXNwZWN0KQ0KPiA+ICt7DQo+ID4gKwlhc3NlcnQoaHNpemUgPj0g MjU2ICYmIGhzaXplIDw9IDIyODgpOw0KPiA+ICsJc3QtPmhzaXplID0gaHNpemUgLyA4IC0gMzE7 DQo+ID4gKwlzdC0+dmZyZXFfYXNwZWN0ID0gYXNwZWN0IDw8IDYgfCAodmZyZXEgLSA2MCk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHN0ZF90aW1pbmdfdW5zZXQoc3RydWN0IHN0 ZF90aW1pbmcgKnN0KQ0KPiA+ICt7DQo+ID4gKwltZW1zZXQoc3QsIDB4MDEsIHNpemVvZihzdHJ1 Y3Qgc3RkX3RpbWluZykpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogZGV0YWls ZWRfdGltaW5nX3NldF9tb2RlOiBmaWxsIGEgZGV0YWlsZWQgdGltaW5nIGJhc2VkIG9uIGEgbW9k ZQ0KPiA+ICsgKi8NCj4gPiArdm9pZCBkZXRhaWxlZF90aW1pbmdfc2V0X21vZGUoc3RydWN0IGRl dGFpbGVkX3RpbWluZyAqZHQsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwNCj4gPiArCQkJICAgICAg aW50IHdpZHRoX21tLCBpbnQgaGVpZ2h0X21tKQ0KPiA+ICt7DQo+ID4gKwlpbnQgaGFjdGl2ZSwg aGJsYW5rLCB2YWN0aXZlLCB2YmxhbmssIGhzeW5jX29mZnNldCwgaHN5bmNfcHVsc2Vfd2lkdGgs DQo+ID4gKwkgICAgdnN5bmNfb2Zmc2V0LCB2c3luY19wdWxzZV93aWR0aDsNCj4gPiArCXN0cnVj dCBkZXRhaWxlZF9waXhlbF90aW1pbmcgKnB0ID0gJmR0LT5kYXRhLnBpeGVsX2RhdGE7DQo+ID4g Kw0KPiA+ICsJaGFjdGl2ZSA9IG1vZGUtPmhkaXNwbGF5Ow0KPiA+ICsJaHN5bmNfb2Zmc2V0ID0g bW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsNCj4gPiArCWhzeW5jX3B1bHNlX3dp ZHRoID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7DQo+ID4gKwloYmxhbmsg PSBtb2RlLT5odG90YWwgLSBtb2RlLT5oZGlzcGxheTsNCj4gPiArDQo+ID4gKwl2YWN0aXZlID0g bW9kZS0+dmRpc3BsYXk7DQo+ID4gKwl2c3luY19vZmZzZXQgPSBtb2RlLT52c3luY19zdGFydCAt IG1vZGUtPnZkaXNwbGF5Ow0KPiA+ICsJdnN5bmNfcHVsc2Vfd2lkdGggPSBtb2RlLT52c3luY19l bmQgLSBtb2RlLT52c3luY19zdGFydDsNCj4gPiArCXZibGFuayA9IG1vZGUtPnZ0b3RhbCAtIG1v ZGUtPnZkaXNwbGF5Ow0KPiA+ICsNCj4gPiArCWR0LT5waXhlbF9jbG9ja1swXSA9IChtb2RlLT5j bG9jayAvIDEwKSAmIDB4MDBGRjsNCj4gPiArCWR0LT5waXhlbF9jbG9ja1sxXSA9ICgobW9kZS0+ Y2xvY2sgLyAxMCkgJiAweEZGMDApID4+IDg7DQo+ID4gKw0KPiA+ICsJYXNzZXJ0KGhhY3RpdmUg PD0gMHhGRkYpOw0KPiA+ICsJYXNzZXJ0KGhibGFuayA8PSAweEZGRik7DQo+ID4gKwlwdC0+aGFj dGl2ZV9sbyA9IGhhY3RpdmUgJiAweDBGRjsNCj4gPiArCXB0LT5oYmxhbmtfbG8gPSBoYmxhbmsg JiAweDBGRjsNCj4gPiArCXB0LT5oYWN0aXZlX2hibGFua19oaSA9IChoYWN0aXZlICYgMHhGMDAp ID4+IDQgfCAoaGJsYW5rICYgMHhGMDApID4+IDg7DQo+ID4gKw0KPiA+ICsJYXNzZXJ0KHZhY3Rp dmUgPD0gMHhGRkYpOw0KPiA+ICsJYXNzZXJ0KHZibGFuayA8PSAweEZGRik7DQo+ID4gKwlwdC0+ dmFjdGl2ZV9sbyA9IHZhY3RpdmUgJiAweDBGRjsNCj4gPiArCXB0LT52YmxhbmtfbG8gPSB2Ymxh bmsgJiAweDBGRjsNCj4gPiArCXB0LT52YWN0aXZlX3ZibGFua19oaSA9ICh2YWN0aXZlICYgMHhG MDApID4+IDQgfCAodmJsYW5rICYgMHhGMDApID4+IDg7DQo+ID4gKw0KPiA+ICsJYXNzZXJ0KGhz eW5jX29mZnNldCA8PSAweDNGRik7DQo+ID4gKwlhc3NlcnQoaHN5bmNfcHVsc2Vfd2lkdGggPD0g MHgzRkYpOw0KPiA+ICsJYXNzZXJ0KHZzeW5jX29mZnNldCA8PSAweDNGKTsNCj4gPiArCWFzc2Vy dCh2c3luY19wdWxzZV93aWR0aCA8PSAweDNGKTsNCj4gPiArCXB0LT5oc3luY19vZmZzZXRfbG8g PSBoc3luY19vZmZzZXQgJiAweDBGRjsNCj4gPiArCXB0LT5oc3luY19wdWxzZV93aWR0aF9sbyA9 IGhzeW5jX3B1bHNlX3dpZHRoICYgMHgwRkY7DQo+ID4gKwlwdC0+dnN5bmNfb2Zmc2V0X3B1bHNl X3dpZHRoX2xvID0gKHZzeW5jX29mZnNldCAmIDB4RikgPDwgNA0KPiA+ICsJCQkJCSAgfCAodnN5 bmNfcHVsc2Vfd2lkdGggJiAweEYpOw0KPiA+ICsJcHQtPmhzeW5jX3ZzeW5jX29mZnNldF9wdWxz ZV93aWR0aF9oaSA9IA0KPiANCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeIHRhaWxpbmcgd2hpdGVzcGFjZQ0KPiANCj4gPiArCQkoKGhzeW5jX29mZnNl dCAmIDB4MzAwKSA+PiAyKSB8ICgoaHN5bmNfcHVsc2Vfd2lkdGggJiAweDMwMCkgPj4gNCkNCj4g PiArCQl8ICgodnN5bmNfb2Zmc2V0ICYgMHgzMCkgPj4gMikgfCAoKHZzeW5jX3B1bHNlX3dpZHRo ICYgMHgzMCkgPj4gNCk7DQo+ID4gKw0KPiA+ICsJYXNzZXJ0KHdpZHRoX21tIDw9IDB4RkZGKTsN Cj4gPiArCWFzc2VydChoZWlnaHRfbW0gPD0gMHhGRkYpOw0KPiA+ICsJcHQtPndpZHRoX21tX2xv ID0gd2lkdGhfbW0gJiAweDBGRjsNCj4gPiArCXB0LT5oZWlnaHRfbW1fbG8gPSBoZWlnaHRfbW0g JiAweDBGRjsNCj4gPiArCXB0LT53aWR0aF9oZWlnaHRfbW1faGkgPSAod2lkdGhfbW0gJiAweEYw MCkgPj4gNA0KPiA+ICsJCQkJIHwgKGhlaWdodF9tbSAmIDB4RjAwKSA+PiA4Ow0KPiA+ICsJDQo+ IA0KPiAgICBeXl5eXiB0YWINCj4gDQo+IGF1dG9jbWQgQnVmV3JpdGVQcmUgKiAlcy9cc1wrJC8v ZQ0KPiANCj4gbWF5IGhlbHAgeW91DQoNCkFoLCB0aGFua3MgZm9yIHRoZSB0aXAhDQoNCkFsc28g cHVsbGVkIG15IHZpbSBkb3RmaWxlcyBzbyB0aGF0IHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUg dmlzaWJsZS4NCg0KPiA+ICsJcHQtPm1pc2MgPSAwOw0KPiA+ICsJaWYgKG1vZGUtPmZsYWdzICYg RFJNX01PREVfRkxBR19QSFNZTkMpDQo+ID4gKwkJcHQtPm1pc2MgfD0gRURJRF9QVF9IU1lOQ19Q T1NJVElWRTsNCj4gPiArCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQ0K PiA+ICsJCXB0LT5taXNjIHw9IEVESURfUFRfVlNZTkNfUE9TSVRJVkU7DQo+ID4gK30NCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgKiBkZXRhaWxlZF90aW1pbmdfc2V0X21vbml0b3JfcmFuZ2VfbW9k ZTogc2V0IGEgZGV0YWlsZWQgdGltaW5nIHRvIGJlIGENCj4gPiArICogbW9uaXRvciByYW5nZSBi YXNlZCBvbiBhIG1vZGUNCj4gPiArICovDQo+ID4gK3ZvaWQgZGV0YWlsZWRfdGltaW5nX3NldF9t b25pdG9yX3JhbmdlX21vZGUoc3RydWN0IGRldGFpbGVkX3RpbWluZyAqZHQsDQo+ID4gKwkJCQkJ ICAgIGRybU1vZGVNb2RlSW5mbyAqbW9kZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGRldGFpbGVk X25vbl9waXhlbCAqbnAgPSAmZHQtPmRhdGEub3RoZXJfZGF0YTsNCj4gPiArCXN0cnVjdCBkZXRh aWxlZF9kYXRhX21vbml0b3JfcmFuZ2UgKm1yID0gJm5wLT5kYXRhLnJhbmdlOw0KPiA+ICsNCj4g PiArCWR0LT5waXhlbF9jbG9ja1swXSA9IGR0LT5waXhlbF9jbG9ja1sxXSA9IDA7DQo+ID4gKw0K PiA+ICsJbnAtPnR5cGUgPSBFRElEX0RFVEFJTF9NT05JVE9SX1JBTkdFOw0KPiA+ICsNCj4gPiAr CW1yLT5taW5fdmZyZXEgPSBtb2RlLT52cmVmcmVzaCAtIDE7DQo+ID4gKwltci0+bWF4X3ZmcmVx ID0gbW9kZS0+dnJlZnJlc2ggKyAxOw0KPiA+ICsJbXItPm1pbl9oZnJlcV9raHogPSAobW9kZS0+ Y2xvY2sgLyBtb2RlLT5odG90YWwpIC0gMTsNCj4gPiArCW1yLT5tYXhfaGZyZXFfa2h6ID0gKG1v ZGUtPmNsb2NrIC8gbW9kZS0+aHRvdGFsKSArIDE7DQo+ID4gKwltci0+cGl4ZWxfY2xvY2tfbWh6 ID0gKG1vZGUtPmNsb2NrIC8gMTAwMDApICsgMTsNCj4gPiArCW1yLT5mbGFncyA9IDA7DQo+ID4g Kw0KPiA+ICsJc3RhdGljIGNvbnN0IGNoYXIgcGFkZGluZ1tdID0gew0KPiA+ICsJCTB4MGEsIDB4 MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjANCj4gPiArCX07DQo+ID4gKwltZW1jcHko bXItPmZvcm11bGEucGFkLCBwYWRkaW5nLCBzaXplb2YocGFkZGluZykpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogZGV0YWlsZWRfdGltaW5nX3NldF9zdHJpbmc6IHNldCBhIGRl dGFpbGVkIHRpbWluZyB0byBiZSBhIHN0cmluZw0KPiA+ICsgKi8NCj4gPiArdm9pZCBkZXRhaWxl ZF90aW1pbmdfc2V0X3N0cmluZyhzdHJ1Y3QgZGV0YWlsZWRfdGltaW5nICpkdCwNCj4gPiArCQkJ CWVudW0gZGV0YWlsZWRfbm9uX3BpeGVsX3R5cGUgdHlwZSwNCj4gPiArCQkJCWNvbnN0IGNoYXIg KnN0cikNCj4gPiArew0KPiA+ICsJc3RydWN0IGRldGFpbGVkX25vbl9waXhlbCAqbnAgPSAmZHQt PmRhdGEub3RoZXJfZGF0YTsNCj4gPiArCXN0cnVjdCBkZXRhaWxlZF9kYXRhX3N0cmluZyAqZHMg PSAmbnAtPmRhdGEuc3RyaW5nOw0KPiA+ICsJc2l6ZV90IGxlbjsNCj4gPiArDQo+ID4gKwlzd2l0 Y2ggKHR5cGUpIHsNCj4gPiArCWNhc2UgRURJRF9ERVRBSUxfTU9OSVRPUl9OQU1FOg0KPiA+ICsJ Y2FzZSBFRElEX0RFVEFJTF9NT05JVE9SX1NUUklORzoNCj4gPiArCWNhc2UgRURJRF9ERVRBSUxf TU9OSVRPUl9TRVJJQUw6DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWFz c2VydCgwKTsgLyogbm90IGEgc3RyaW5nIHR5cGUgKi8NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlk dC0+cGl4ZWxfY2xvY2tbMF0gPSBkdC0+cGl4ZWxfY2xvY2tbMV0gPSAwOw0KPiA+ICsNCj4gPiAr CW5wLT50eXBlID0gdHlwZTsNCj4gPiArDQo+ID4gKwlzdHJuY3B5KGRzLT5zdHIsIHN0ciwgc2l6 ZW9mKGRzLT5zdHIpKTsNCj4gPiArCWxlbiA9IHN0cmxlbihzdHIpOw0KPiA+ICsJaWYgKGxlbiA8 IHNpemVvZihkcy0+c3RyKSkNCj4gPiArCQlkcy0+c3RyW2xlbl0gPSAnXG4nOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBlZGlkX3NldF9tZmcoc3RydWN0IGVkaWQgKmVkaWQsIGNo YXIgbWZnW3N0YXRpYyAzXSkNCj4gPiArew0KPiA+ICsJZWRpZC0+bWZnX2lkWzBdID0gKG1mZ1sw XSAtICdAJykgPDwgMiB8IChtZmdbMV0gLSAnQCcpID4+IDM7DQo+ID4gKwllZGlkLT5tZmdfaWRb MV0gPSAobWZnWzFdIC0gJ0AnKSA8PCA1IHwgKG1mZ1syXSAtICdAJyk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyB2b2lkIGVkaWRfc2V0X2dhbW1hKHN0cnVjdCBlZGlkICplZGlkLCBmbG9h dCBnYW1tYSkNCj4gPiArew0KPiA+ICsJZWRpZC0+Z2FtbWEgPSAoZ2FtbWEgKiAxMDApIC0gMTAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogZWRpZF9pbml0OiBpbml0aWFsaXpl IGFuIEVESUQNCj4gPiArICoNCj4gPiArICogVGhlIEVESUQgd2lsbCBiZSBwcmUtZmlsbGVkIHdp dGggZXN0YWJsaXNoZWQgYW5kIHN0YW5kYXJkIHRpbWluZ3M6DQo+ID4gKyAqDQo+ID4gKyAqICAt IDE5MjB4MTA4MCA2MEh6DQo+ID4gKyAqICAtIDEyODB4NzIwIDYwSHoNCj4gPiArICogIC0gMTAy NHg3NjggNjBIeg0KPiA+ICsgKiAgLSA4MDB4NjAwIDYwSHoNCj4gPiArICogIC0gNjQweDQ4MCA2 MEh6DQo+ID4gKyAqLw0KPiA+ICt2b2lkIGVkaWRfaW5pdChzdHJ1Y3QgZWRpZCAqZWRpZCkNCj4g PiArew0KPiA+ICsJc2l6ZV90IGk7DQo+ID4gKwl0aW1lX3QgdDsNCj4gPiArCXN0cnVjdCB0bSAq dG07DQo+ID4gKw0KPiA+ICsJbWVtc2V0KGVkaWQsIDAsIHNpemVvZihzdHJ1Y3QgZWRpZCkpOw0K PiA+ICsNCj4gPiArCW1lbWNweShlZGlkLT5oZWFkZXIsIGVkaWRfaGVhZGVyLCBzaXplb2YoZWRp ZF9oZWFkZXIpKTsNCj4gPiArCWVkaWRfc2V0X21mZyhlZGlkLCAiSUdUIik7DQo+ID4gKwllZGlk LT52ZXJzaW9uID0gMTsNCj4gPiArCWVkaWQtPnJldmlzaW9uID0gMzsNCj4gPiArCWVkaWQtPmlu cHV0ID0gMHg4MDsNCj4gPiArCWVkaWQtPndpZHRoX2NtID0gNTI7DQo+ID4gKwllZGlkLT5oZWln aHRfY20gPSAzMDsNCj4gPiArCWVkaWRfc2V0X2dhbW1hKGVkaWQsIDIuMjApOw0KPiA+ICsJZWRp ZC0+ZmVhdHVyZXMgPSAweDAyOw0KPiA+ICsNCj4gPiArCS8qIFllYXIgb2YgbWFudWZhY3R1cmUg Ki8NCj4gPiArCXQgPSB0aW1lKE5VTEwpOw0KPiA+ICsJdG0gPSBsb2NhbHRpbWUoJnQpOw0KPiA+ ICsJZWRpZC0+bWZnX3llYXIgPSB0bS0+dG1feWVhciAtIDkwOw0KPiA+ICsNCj4gPiArCS8qIEVz dGFibGlzaGVkIHRpbWluZ3M6IDY0MHg0ODAgNjBIeiwgODAweDYwMCA2MEh6LCAxMDI0eDc2OCA2 MEh6ICovDQo+ID4gKwllZGlkLT5lc3RhYmxpc2hlZF90aW1pbmdzLnQxID0gMHgyMTsNCj4gPiAr CWVkaWQtPmVzdGFibGlzaGVkX3RpbWluZ3MudDIgPSAweDA4Ow0KPiA+ICsNCj4gPiArCS8qIFN0 YW5kYXJkIHRpbWluZ3MgKi8NCj4gPiArCS8qIDE5MjB4MTA4MCA2MEh6ICovDQo+ID4gKwlzdGRf dGltaW5nX3NldCgmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1swXSwgMTkyMCwgNjAsIFNURF9USU1J TkdfMTZfOSk7DQo+ID4gKwkvKiAxMjgweDcyMCA2MEh6ICovDQo+ID4gKwlzdGRfdGltaW5nX3Nl dCgmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1sxXSwgMTI4MCwgNjAsIFNURF9USU1JTkdfMTZfOSk7 DQo+ID4gKwkvKiAxMDI0eDc2OCA2MEh6ICovDQo+ID4gKwlzdGRfdGltaW5nX3NldCgmZWRpZC0+ c3RhbmRhcmRfdGltaW5nc1syXSwgMTAyNCwgNjAsIFNURF9USU1JTkdfNF8zKTsNCj4gPiArCS8q IDgwMHg2MDAgNjBIeiAqLw0KPiA+ICsJc3RkX3RpbWluZ19zZXQoJmVkaWQtPnN0YW5kYXJkX3Rp bWluZ3NbM10sIDgwMCwgNjAsIFNURF9USU1JTkdfNF8zKTsNCj4gPiArCS8qIDY0MHg0ODAgNjBI eiAqLw0KPiA+ICsJc3RkX3RpbWluZ19zZXQoJmVkaWQtPnN0YW5kYXJkX3RpbWluZ3NbNF0sIDY0 MCwgNjAsIFNURF9USU1JTkdfNF8zKTsNCj4gPiArCWZvciAoaSA9IDU7IGkgPCBTVERfVElNSU5H U19MRU47IGkrKykNCj4gPiArCQlzdGRfdGltaW5nX3Vuc2V0KCZlZGlkLT5zdGFuZGFyZF90aW1p bmdzW2ldKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIGVkaWRfaW5pdF93aXRo X21vZGU6IGluaXRpYWxpemUgYW4gRURJRCBhbmQgc2V0cyBpdHMgcHJlZmVycmVkIG1vZGUNCj4g PiArICovDQo+ID4gK3ZvaWQgZWRpZF9pbml0X3dpdGhfbW9kZShzdHJ1Y3QgZWRpZCAqZWRpZCwg ZHJtTW9kZU1vZGVJbmZvICptb2RlKQ0KPiA+ICt7DQo+ID4gKwllZGlkX2luaXQoZWRpZCk7DQo+ ID4gKw0KPiA+ICsJLyogUHJlZmVycmVkIHRpbWluZyAqLw0KPiA+ICsJZGV0YWlsZWRfdGltaW5n X3NldF9tb2RlKCZlZGlkLT5kZXRhaWxlZF90aW1pbmdzWzBdLCBtb2RlLA0KPiA+ICsJCQkJIGVk aWQtPndpZHRoX2NtICogMTAsIGVkaWQtPmhlaWdodF9jbSAqIDEwKTsNCj4gPiArCWRldGFpbGVk X3RpbWluZ19zZXRfbW9uaXRvcl9yYW5nZV9tb2RlKCZlZGlkLT5kZXRhaWxlZF90aW1pbmdzWzFd LA0KPiA+ICsJCQkJCSAgICAgICBtb2RlKTsNCj4gPiArCWRldGFpbGVkX3RpbWluZ19zZXRfc3Ry aW5nKCZlZGlkLT5kZXRhaWxlZF90aW1pbmdzWzJdLA0KPiA+ICsJCQkJICAgRURJRF9ERVRBSUxf TU9OSVRPUl9OQU1FLCAiSUdUIik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBl ZGlkX2ZpbmFsaXplOiBmaW5hbGl6ZSBhbiBFRElEIGJ5IGNvbXB1dGluZyBpdHMgY2hlY2tzdW0N Cj4gPiArICovDQo+ID4gK3ZvaWQgZWRpZF9maW5hbGl6ZShzdHJ1Y3QgZWRpZCAqZWRpZCkNCj4g PiArew0KPiA+ICsJc2l6ZV90IGk7DQo+ID4gKwljb25zdCB1aW50OF90ICpidWYgPSAoY29uc3Qg dWludDhfdCAqKSBlZGlkOw0KPiA+ICsJdWludDhfdCBzdW0gPSAwOw0KPiA+ICsNCj4gPiArCS8q IGNhbGN1bGF0ZSBjaGVja3N1bSAqLw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1 Y3QgZWRpZCkgLSAxOyBpKyspIHsNCj4gPiArCQlzdW0gPSBzdW0gKyBidWZbaV07DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJZWRpZC0+Y2hlY2tzdW0gPSAyNTYgLSBzdW07DQo+ID4gK30NCj4gDQo+ IEkgZ2V0IHdoeSB1c2luZyBgZmluYWxpemVgIGhlcmUgbWF5IHNlZW1zIHRlbXB0aW5nLCBidXQg ZmluaSBhbmQNCj4gZmluYWxpemUgdGVuZCB0byBiZSB1c2VkIGZvciBkZXN0cnVjdG9ycyAob3Ig YW5hbG9ndWVzIGluIEdDZWQNCj4gbGFuZ3VhZ2VzKSwgc28gdGhpcyBtYXkgYmUgYSBiaXQgY29u ZnVzaW5nLiBJIHRoaW5rIHdlIHNob3VsZCBnbyB3aXRoDQo+IGVkaWRfdXBkYXRlX2NoZWNrc3Vt KCkgb3Igc2ltaWxhci4NCg0KQWdyZWVkLCBhIG1vcmUgZXhwbGljaXQgbmFtZSBpcyBwb2JhYmx5 IG5vdCBhIGJhZCBpZGVhLg0KDQo+IE90aGVyIHRoYW4gdGhhdCwgaXQncyBhIHNvbGlkIGltcHJv dmVtZW50IG92ZXIgd2hhdCB3ZSBoYWQsIHdoaWNoIHdpbGwNCj4gY29tZSBoYW5keSB0aGUgbW9y ZSB3ZSBmaWRkbGUgd2l0aCBFRElEcy4gVGhhbmtzIQ0KDQo6KQ0KDQpXaWxsIHNlbmQgYSB2MyB3 aXRoIHlvdXIgY29tbWVudHMgZml4ZWQuDQoNCj4gRG8geW91IGFscmVhZHkgaGF2ZSBzb21lIHRo b3VnaHRzIG9uIGhvdyB3ZSB3YW50IHRvIHNvbHZlIGhhbmRsaW5nIHRoZQ0KPiBleHRlbnNpb25z IGJsb2Nrcz8NCg0KSSd2ZSBhbHJlYWR5IHN0YXJ0ZWQgdG8gd29yayBvbiB0aGlzLiBJIHRoaW5r IGNhbGxlcnMgc2hvdWxkIGFsbG9jYXRlIGENCmxhcmdlIGVub3VnaCBidWZmZXIsIGUuZy46DQoN CiAgY2hhciBidWZbc2l6ZW9mKHN0cnVjdCBlZGlkKSArIDIqc2l6ZW9mKHN0cnVjdCBlZGlkX2V4 dCldOw0KDQooRXh0ZW5zaW9uIGJsb2NrcyBoYXZlIGEgZml4ZWQgc2l6ZSkNCg0KQW5kIHRoZW4g c2hvdWxkIG1hcCBhIHN0cnVjdCBlZGlkIHRvIGl0Og0KDQogIHN0cnVjdCBlZGlkICplZGlkID0g KHN0cnVjdCBlZGlkICopIGJ1ZjsNCg0KVGhlIGFubm95aW5nIHRoaW5nIGlzIHRoYXQgdGhlIG51 bWJlciBvZiBleHRlbnNpb25zIGF0IHRoZSBlbmQgb2YgdGhlDQpFRElEIGJsb2NrIGlzbid0IGZp eGVkLiBXZSBjb3VsZCBhZGQgYSBuZXcgZmllbGQgYXQgdGhlIGVuZCBvZiBzdHJ1Y3QNCmVkaWQ6 DQoNCiAgc3RydWN0IGVkaWQgew0KICAgIOKApg0KICAgIHN0cnVjdCBlZGlkX2V4dCBleHRlbnNp b25zW107DQogIH07DQoNClNvIHRoYXQgY2FsbGVycyBjYW4gZG8gdGhpczoNCg0KICBzdHJ1Y3Qg ZWRpZF9leHQgKmV4dDEgPSBlZGlkLT5leHRlbnNpb25zWzBdOw0KICBzdHJ1Y3QgZWRpZF9leHQg KmV4dDIgPSBlZGlkLT5leHRlbnNpb25zWzFdOw0KDQpBbm90aGVyIGFubm95aW5nIHRoaW5nIGlz IHRoYXQgZXh0ZW5zaW9ucyBjYW4gdGhlbXNlbHZlcyBjb250YWluDQptdWx0aXBsZSBzdWItYmxv Y2tzIG9mIGRpZmZlcmVudCBzaXplc+KApiBGb3Igbm93IEkndmUgb3B0ZWQgZm9yIGEgY2hhcg0K YnVmZmVyIHRoYXQgY2FuIGJlIGNhc3RlZCBpbnRvIHN1Yi1ibG9ja3MuIFRoaXMgaXNuJ3QgdGhl IGJlc3Qgc29sdXRpb24NCmV2ZXIsIGJ1dCBJIGhhdmVuJ3QgZm91bmQgYSBiZXR0ZXIgZGVzaWdu IHlldC4gTGV0J3MgZGlzY3VzcyBhYm91dCB0aGlzDQppbiB0aGUgbmV4dCBwYXRjaC4gOikNCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFp bGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==