From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60452) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c7Wtz-0001RN-CH for qemu-devel@nongnu.org; Thu, 17 Nov 2016 19:19:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c7Wtv-0003BO-Sh for qemu-devel@nongnu.org; Thu, 17 Nov 2016 19:19:35 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:53899) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1c7Wtv-00039l-Ex for qemu-devel@nongnu.org; Thu, 17 Nov 2016 19:19:31 -0500 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id uAI0JHBq049241 for ; Thu, 17 Nov 2016 19:19:29 -0500 Received: from e23smtp08.au.ibm.com (e23smtp08.au.ibm.com [202.81.31.141]) by mx0a-001b2d01.pphosted.com with ESMTP id 26sm426t9n-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Thu, 17 Nov 2016 19:19:28 -0500 Received: from localhost by e23smtp08.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 18 Nov 2016 10:19:23 +1000 From: "Alastair D'Silva" Date: Fri, 18 Nov 2016 11:19:18 +1100 In-Reply-To: References: <1479357400-17441-1-git-send-email-alastair@au1.ibm.com> <1479357400-17441-4-git-send-email-alastair@au1.ibm.com> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Message-Id: <1479428358.11116.46.camel@au1.ibm.com> Content-Transfer-Encoding: base64 Subject: Re: [Qemu-devel] [PATCH 3/4] hw/timer: Add Epson RX8900 RTC support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?ISO-8859-1?Q?C=E9dric?= Le Goater , qemu-arm@nongnu.org Cc: qemu-devel@nongnu.org, Peter Maydell , Andrew Jeffery , Joel Stanley T24gVGh1LCAyMDE2LTExLTE3IGF0IDA5OjI5ICswMTAwLCBDw6lkcmljIExlIEdvYXRlciB3 cm90ZToNCk9uIDExLzE3LzIwMTYgMDU6MzYgQU0sIEFsYXN0YWlyIEQnU2lsdmEgd3JvdGU6 DQo+ID4gDQo+ID4gRnJvbTogQWxhc3RhaXIgRCdTaWx2YSA8YWxhc3RhaXJAZC1zaWx2YS5v cmc+DQo+ID4gDQo+ID4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBFcHNvbiBS WDg5MDAgUlRDIGNoaXAuDQo+IA0KPiBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSBzaG9y dCBsaXN0IG9mIHRoZSBmZWF0dXJlcyB0aGlzwqANCj4gY2hpcCBoYXMgYW5kIGFsc28gdGhl IG1haW4gcG9pbnQgb2YgdGhlIGRlc2lnbi4gSSBzZWUgeW91wqANCj4gYXJlIHVzaW5nIGEg QkguDQo+IA0KDQpPaw0KDQo+IA0KPiA+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IEFsYXN0YWly IEQnU2lsdmEgPGFsYXN0YWlyQGQtc2lsdmEub3JnPg0KPiA+IC0tLQ0KPiA+IMKgZGVmYXVs dC1jb25maWdzL2FybS1zb2Z0bW11Lm1hayB8wqDCoMKgMSArDQo+ID4gwqBody90aW1lci9N YWtlZmlsZS5vYmpzwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMiArDQo+ID4gwqBody90 aW1lci9yeDg5MDAuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgODkxDQo+ID4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+IMKgaHcvdGlt ZXIvcng4OTAwX3JlZ3MuaMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAxMjUgKysrKysrDQo+ID4g wqB0ZXN0cy9NYWtlZmlsZS5pbmNsdWRlwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMiAr DQo+ID4gwqB0ZXN0cy9yeDg5MDAtdGVzdC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8 IDgwMA0KPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiANCj4g TmljZSB0ZXN0ICEgQnV0IFdoeSBhcmVuJ3QgeW91IHVzaW5nIHRoZSBhc3BlZWQgbWFjaGlu ZSBpbsKgDQo+IHF0ZXN0ID/CoA0KPiANCj4gVGhlIHJlYXNvbiBJIGFtIGFza2luZyBpcyBi ZWNhdXNlIHRoZSBJMkMgY29udHJvbGxlciBtb2RlbMKgDQo+IGlzIGEgbGl0dGxlIHRvbyBz aW1wbGlzdGljIGluIHRoZSB3YXkgaXQgaGFuZGxlcyB0aGUgaXJxwqANCj4gc3RhdHVzIGFu ZCB3ZSB3b3VsZCBuZWVkIGEgdGVzdCBmb3IgaXQuDQo+IA0KDQpUaGUgYXNwZWVkIG1hY2hp bmUgaXMgbWlzc2luZyBhIGJ1bmNoIG9mIEkyQyBpbmZyYXN0cnVjdHVyZQ0KKGlteF9pMmNf Y3JlYXRlICYgZnJpZW5kcykgcmVxdWlyZWQgdG8gYWNjZXNzIGl0IGZyb20gdGhlIHRlc3Qg aGFybmVzcywNCmFuZCBJIGRvbid0IGhhdmUgdGhlIGtub3dsZWRnZSByZXF1aXJlZCB0byBp bXBsZW1lbnQgaXQuIEkgYW0gd29ya2luZw0Kb24gdGhlIHByZW1pc2UgdGhhdCB0aGUgUlg4 OTAwIGlzIGFuIGluZGVwZW5kZW50IGRldmljZSwgYW5kIHNvIGNhbiBiZQ0KdGVzdGVkIGlu ZGVwZW5kZW50bHkgb2YgdGhlIGFzcGVlZCBtb2RlbC4NCg0KPiANCj4gQWxzbyBJIHdvdWxk IHB1dCB0aGUgdGVzdCBjYXNlIGluIGFub3RoZXIgcGF0Y2gsIGFmdGVyIHRoZcKgDQo+IG1v ZGVsIGFuZCBhZnRlciBwYXRjaCAyIGFsc28gd2hpY2ggaW50cm9kdWNlcyBuYW1lZMKgDQo+ IGludGVycnVwdHMgZm9yIHF0ZXN0Lg0KPiANCg0KT2sNCg0KPiANCj4gPiANCj4gPiDCoDYg ZmlsZXMgY2hhbmdlZCwgMTgyMSBpbnNlcnRpb25zKCspDQo+ID4gwqBjcmVhdGUgbW9kZSAx MDA2NDQgaHcvdGltZXIvcng4OTAwLmMNCj4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBody90 aW1lci9yeDg5MDBfcmVncy5oDQo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvcng4 OTAwLXRlc3QuYw0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9kZWZhdWx0LWNvbmZpZ3MvYXJt LXNvZnRtbXUubWFrIGIvZGVmYXVsdC1jb25maWdzL2FybS0NCj4gPiBzb2Z0bW11Lm1haw0K PiA+IGluZGV4IDZkZTNlMTYuLmFkYjYwMGUgMTAwNjQ0DQo+ID4gLS0tIGEvZGVmYXVsdC1j b25maWdzL2FybS1zb2Z0bW11Lm1haw0KPiA+ICsrKyBiL2RlZmF1bHQtY29uZmlncy9hcm0t c29mdG1tdS5tYWsNCj4gPiBAQCAtMjksNiArMjksNyBAQCBDT05GSUdfU01DOTFDMTExPXkN Cj4gPiDCoENPTkZJR19BTExXSU5ORVJfRU1BQz15DQo+ID4gwqBDT05GSUdfSU1YX0ZFQz15 DQo+ID4gwqBDT05GSUdfRFMxMzM4PXkNCj4gPiArQ09ORklHX1JYODkwMD15DQo+ID4gwqBD T05GSUdfUEZMQVNIX0NGSTAxPXkNCj4gPiDCoENPTkZJR19QRkxBU0hfQ0ZJMDI9eQ0KPiA+ IMKgQ09ORklHX01JQ1JPRFJJVkU9eQ0KPiA+IGRpZmYgLS1naXQgYS9ody90aW1lci9NYWtl ZmlsZS5vYmpzIGIvaHcvdGltZXIvTWFrZWZpbGUub2Jqcw0KPiA+IGluZGV4IDdiYThjMjMu LmZhMDI4YWMgMTAwNjQ0DQo+ID4gLS0tIGEvaHcvdGltZXIvTWFrZWZpbGUub2Jqcw0KPiA+ ICsrKyBiL2h3L3RpbWVyL01ha2VmaWxlLm9ianMNCj4gPiBAQCAtMyw2ICszLDcgQEAgY29t bW9uLW9iai0kKENPTkZJR19BUk1fTVBUSU1FUikgKz0gYXJtX21wdGltZXIubw0KPiA+IMKg Y29tbW9uLW9iai0kKENPTkZJR19BOV9HVElNRVIpICs9IGE5Z3RpbWVyLm8NCj4gPiDCoGNv bW1vbi1vYmotJChDT05GSUdfQ0FERU5DRSkgKz0gY2FkZW5jZV90dGMubw0KPiA+IMKgY29t bW9uLW9iai0kKENPTkZJR19EUzEzMzgpICs9IGRzMTMzOC5vDQo+ID4gK2NvbW1vbi1vYmot JChDT05GSUdfUlg4OTAwKSArPSByeDg5MDAubw0KPiA+IMKgY29tbW9uLW9iai0kKENPTkZJ R19IUEVUKSArPSBocGV0Lm8NCj4gPiDCoGNvbW1vbi1vYmotJChDT05GSUdfSTgyNTQpICs9 IGk4MjU0X2NvbW1vbi5vIGk4MjU0Lm8NCj4gPiDCoGNvbW1vbi1vYmotJChDT05GSUdfTTQ4 VDU5KSArPSBtNDh0NTkubw0KPiA+IEBAIC0xNyw2ICsxOCw3IEBAIGNvbW1vbi1vYmotJChD T05GSUdfSU1YKSArPSBpbXhfZXBpdC5vDQo+ID4gwqBjb21tb24tb2JqLSQoQ09ORklHX0lN WCkgKz0gaW14X2dwdC5vDQo+ID4gwqBjb21tb24tb2JqLSQoQ09ORklHX0xNMzIpICs9IGxt MzJfdGltZXIubw0KPiA+IMKgY29tbW9uLW9iai0kKENPTkZJR19NSUxLWU1JU1QpICs9IG1p bGt5bWlzdC1zeXNjdGwubw0KPiA+ICtjb21tb24tb2JqLSQoQ09ORklHX1JYODkwMCkgKz0g cng4OTAwLm8NCj4gPiDCoA0KPiA+IMKgb2JqLSQoQ09ORklHX0VYWU5PUzQpICs9IGV4eW5v czQyMTBfbWN0Lm8NCj4gPiDCoG9iai0kKENPTkZJR19FWFlOT1M0KSArPSBleHlub3M0MjEw X3B3bS5vDQo+ID4gZGlmZiAtLWdpdCBhL2h3L3RpbWVyL3J4ODkwMC5jIGIvaHcvdGltZXIv cng4OTAwLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAu LjIwOGEzMWINCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvaHcvdGltZXIvcng4OTAw LmMNCj4gPiBAQCAtMCwwICsxLDg5MSBAQA0KPiA+ICsvKg0KPiA+ICsgKiBFcHNvbiBSWDg5 MDBTQS9DRSBSZWFsdGltZSBDbG9jayBNb2R1bGUNCj4gPiArICoNCj4gPiArICogQ29weXJp Z2h0IChjKSAyMDE2IElCTSBDb3Jwb3JhdGlvbg0KPiA+ICsgKiBBdXRob3JzOg0KPiA+ICsg KsKgwqBBbGFzdGFpciBEJ1NpbHZhIDxhbGFzdGFpckBkLXNpbHZhLm9yZz4NCj4gPiArICoN Cj4gPiArICogVGhpcyBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdmVyc2lvbiAy IG9yIGxhdGVyLsKgwqBTZWUNCj4gPiArICogdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgdG9w LWxldmVsIGRpcmVjdG9yeS4NCj4gPiArICoNCj4gPiArICogRGF0YXNoZWV0IGF2YWlsYWJs ZSBhdDoNCj4gPiArICrCoMKgaHR0cHM6Ly9zdXBwb3J0LmVwc29uLmJpei90ZC9hcGkvZG9j X2NoZWNrLnBocD9kbD1hcHBfUlg4OTAwQ0UNCj4gPiAmbGFuZz1lbg0KPiA+ICsgKg0KPiA+ ICsgKiBOb3QgaW1wbGVtZW50ZWQ6DQo+ID4gKyAqwqDCoEltcGxlbWVudCBUaW1lciBDb3Vu dGVycw0KPiA+ICsgKsKgwqBJbXBsZW1lbnQgaTJjIHRpbWVvdXQNCj4gPiArICovDQo+ID4g Kw0KPiA+ICsjaW5jbHVkZSAicWVtdS9vc2RlcC5oIg0KPiA+ICsjaW5jbHVkZSAicWVtdS1j b21tb24uaCINCj4gPiArI2luY2x1ZGUgImh3L2kyYy9pMmMuaCINCj4gPiArI2luY2x1ZGUg Imh3L3RpbWVyL3J4ODkwMF9yZWdzLmgiDQo+ID4gKyNpbmNsdWRlICJody9wdGltZXIuaCIN Cj4gPiArI2luY2x1ZGUgInFlbXUvbWFpbi1sb29wLmgiDQo+ID4gKyNpbmNsdWRlICJxZW11 L2JjZC5oIg0KPiA+ICsjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCINCj4gPiArI2lu Y2x1ZGUgInFlbXUvbG9nLmgiDQo+ID4gKyNpbmNsdWRlICJxYXBpL2Vycm9yLmgiDQo+ID4g KyNpbmNsdWRlICJxYXBpL3Zpc2l0b3IuaCINCj4gPiArDQo+ID4gKyAjaW5jbHVkZSA8c3lz L3RpbWUuaD4NCj4gPiArDQo+ID4gKyAjaW5jbHVkZSA8ZXhlY2luZm8uaD4NCj4gPiArDQo+ ID4gKyNkZWZpbmUgVFlQRV9SWDg5MDAgInJ4ODkwMCINCj4gPiArI2RlZmluZSBSWDg5MDAo b2JqKSBPQkpFQ1RfQ0hFQ0soUlg4OTAwU3RhdGUsIChvYmopLCBUWVBFX1JYODkwMCkNCj4g PiArDQo+ID4gK3N0YXRpYyBib29sIGxvZzsNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0 IFJYODkwMFN0YXRlIHsNCj4gPiArwqDCoMKgwqBJMkNTbGF2ZSBwYXJlbnRfb2JqOw0KPiA+ ICsNCj4gPiArwqDCoMKgwqBwdGltZXJfc3RhdGUgKnNlY190aW1lcjsgLyogdHJpZ2dlcmVk IG9uY2UgcGVyIHNlY29uZCAqLw0KPiA+ICvCoMKgwqDCoHB0aW1lcl9zdGF0ZSAqZm91dF90 aW1lcjsNCj4gPiArwqDCoMKgwqBwdGltZXJfc3RhdGUgKmNvdW50ZG93bl90aW1lcjsNCj4g PiArwqDCoMKgwqBib29sIGZvdXQ7DQo+ID4gK8KgwqDCoMKgaW50NjRfdCBvZmZzZXQ7DQo+ ID4gK8KgwqDCoMKgdWludDhfdCB3ZWVrZGF5OyAvKiBTYXZlZCBmb3IgZGVmZXJyZWQgb2Zm c2V0IGNhbGN1bGF0aW9uLCAwLTYgDQo+ID4gKi8NCj4gPiArwqDCoMKgwqB1aW50OF90IHdk YXlfb2Zmc2V0Ow0KPiA+ICvCoMKgwqDCoHVpbnQ4X3QgbnZyYW1bUlg4OTAwX05WUkFNX1NJ WkVdOw0KPiA+ICvCoMKgwqDCoGludDMyX3QgcHRyOyAvKiBXcmFwcGVkIHRvIHN0YXkgd2l0 aGluIFJYODkwMF9OVlJBTV9TSVpFICovDQo+ID4gK8KgwqDCoMKgYm9vbCBhZGRyX2J5dGU7 DQo+ID4gK8KgwqDCoMKgdWludDhfdCBsYXN0X2ludGVycnVwdF9zZWNvbmRzOw0KPiA+ICvC oMKgwqDCoHVpbnQ4X3QgbGFzdF91cGRhdGVfaW50ZXJydXB0X21pbnV0ZXM7DQo+ID4gK8Kg wqDCoMKgcWVtdV9pcnEgaW50ZXJydXB0X3BpbjsNCj4gPiArwqDCoMKgwqBxZW11X2lycSBm b3V0X3BpbjsNCj4gPiArfSBSWDg5MDBTdGF0ZTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25z dCBWTVN0YXRlRGVzY3JpcHRpb24gdm1zdGF0ZV9yeDg5MDAgPSB7DQo+ID4gK8KgwqDCoMKg Lm5hbWUgPSAicng4OTAwIiwNCj4gPiArwqDCoMKgwqAudmVyc2lvbl9pZCA9IDIsDQo+ID4g K8KgwqDCoMKgLm1pbmltdW1fdmVyc2lvbl9pZCA9IDEsDQo+ID4gK8KgwqDCoMKgLmZpZWxk cyA9IChWTVN0YXRlRmllbGRbXSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9J MkNfU0xBVkUocGFyZW50X29iaiwgUlg4OTAwU3RhdGUpLA0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgVk1TVEFURV9QVElNRVIoc2VjX3RpbWVyLCBSWDg5MDBTdGF0ZSksDQo+ID4gK8KgwqDC oMKgwqDCoMKgwqBWTVNUQVRFX1BUSU1FUihmb3V0X3RpbWVyLCBSWDg5MDBTdGF0ZSksDQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqBWTVNUQVRFX1BUSU1FUihjb3VudGRvd25fdGltZXIsIFJY ODkwMFN0YXRlKSwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoFZNU1RBVEVfQk9PTChmb3V0LCBS WDg5MDBTdGF0ZSksDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBWTVNUQVRFX0lOVDY0KG9mZnNl dCwgUlg4OTAwU3RhdGUpLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9VSU5UOF9W KHdlZWtkYXksIFJYODkwMFN0YXRlLCAyKSwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoFZNU1RB VEVfVUlOVDhfVih3ZGF5X29mZnNldCwgUlg4OTAwU3RhdGUsIDIpLA0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgVk1TVEFURV9VSU5UOF9BUlJBWShudnJhbSwgUlg4OTAwU3RhdGUsDQo+ID4g Ulg4OTAwX05WUkFNX1NJWkUpLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9JTlQz MihwdHIsIFJYODkwMFN0YXRlKSwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoFZNU1RBVEVfQk9P TChhZGRyX2J5dGUsIFJYODkwMFN0YXRlKSwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoFZNU1RB VEVfVUlOVDhfVihsYXN0X2ludGVycnVwdF9zZWNvbmRzLCBSWDg5MDBTdGF0ZSwgMiksDQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqBWTVNUQVRFX1VJTlQ4X1YobGFzdF91cGRhdGVfaW50ZXJy dXB0X21pbnV0ZXMsDQo+ID4gUlg4OTAwU3RhdGUsIDIpLA0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgVk1TVEFURV9FTkRfT0ZfTElTVCgpDQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgcng4OTAwX3Jlc2V0KERldmljZVN0YXRlICpkZXYpOw0K PiA+ICtzdGF0aWMgdm9pZCBkaXNhYmxlX2NvdW50ZG93bl90aW1lcihSWDg5MDBTdGF0ZSAq cyk7DQo+ID4gK3N0YXRpYyB2b2lkIGVuYWJsZV9jb3VudGRvd25fdGltZXIoUlg4OTAwU3Rh dGUgKnMpOw0KPiA+ICtzdGF0aWMgdm9pZCBkaXNhYmxlX3RpbWVyKFJYODkwMFN0YXRlICpz KTsNCj4gPiArc3RhdGljIHZvaWQgZW5hYmxlX3RpbWVyKFJYODkwMFN0YXRlICpzKTsNCj4g PiArDQo+ID4gKyNpZmRlZiBSWDg5MDBfVFJBQ0UNCj4gPiArI2RlZmluZSBSWDg5MDBfVFJB Q0VfQlVGX1NJWkUgMjU2DQo+ID4gKy8qKg0KPiA+ICsgKiBFbWl0IGEgdHJhY2UgbWVzc2Fn ZQ0KPiA+ICsgKiBAcGFyYW0gZmlsZSB0aGUgc291cmNlIGZpbGVuYW1lDQo+ID4gKyAqIEBw YXJhbSBsaW5lIHRoZSBsaW5lIG51bWJlciB0aGUgbWVzc2FnZSB3YXMgZW1pdHRlZCBmcm9t DQo+ID4gKyAqIEBwYXJhbSBkZXYgdGhlIFJYODkwMCBkZXZpY2UNCj4gPiArICogQHBhcmFt IGZtdCBhIHByaW50ZiBzdHlsZSBmb3JtYXQNCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lk IHRyYWNlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jLA0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgSTJDU2xhdmUgKmRldiwgY29uc3QgY2hhciAqZm10LCAu Li4pDQo+ID4gK3sNCj4gPiArwqDCoMKgwqB2YV9saXN0IGFwOw0KPiA+ICvCoMKgwqDCoGNo YXIgYnVmW1JYODkwMF9UUkFDRV9CVUZfU0laRV07DQo+ID4gK8KgwqDCoMKgY2hhciB0aW1l c3RhbXBbMzJdOw0KPiA+ICvCoMKgwqDCoGludCBsZW47DQo+ID4gK8KgwqDCoMKgc3RydWN0 IHRpbWV2YWwgbm93Ow0KPiA+ICvCoMKgwqDCoHN0cnVjdCB0bSAqbm93MjsNCj4gPiArDQo+ ID4gK8KgwqDCoMKgZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOw0KPiA+ICvCoMKgwqDCoG5v dzIgPSBsb2NhbHRpbWUoJm5vdy50dl9zZWMpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBzdHJm dGltZSh0aW1lc3RhbXAsIHNpemVvZih0aW1lc3RhbXApLCAiJUYgJVQiLCBub3cyKTsNCj4g PiArDQo+ID4gK8KgwqDCoMKgbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlxu XHQlcy4lMDNsZCAlczolczolZDoNCj4gPiBSWDg5MDAgJXMgJXNAMHgleDogJXMiLA0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aW1lc3RhbXAsIG5vdy50dl91c2VjIC8gMTAw MCwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmlsZSwgZnVuYywgbGluZSwgZGV2 LT5xZGV2LmlkLCBkZXYtPnFkZXYucGFyZW50X2J1cy0NCj4gPiA+bmFtZSwNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2LT5hZGRyZXNzLCBmbXQpOw0KPiA+ICvCoMKgwqDC oGlmIChsZW4gPj0gUlg4OTAwX1RSQUNFX0JVRl9TSVpFKSB7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqBlcnJvcl9yZXBvcnQoIiVzOiVkOiBUcmFjZSBidWZmZXIgb3ZlcmZsb3ciLCBmaWxl LCBsaW5lKTsNCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoHZhX3N0YXJ0 KGFwLCBmbXQpOw0KPiA+ICvCoMKgwqDCoGVycm9yX3ZyZXBvcnQoYnVmLCBhcCk7DQo+ID4g K8KgwqDCoMKgdmFfZW5kKGFwKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IEVtaXQgYSB0cmFjZSBtZXNzYWdlDQo+ID4gKyAqIEBwYXJhbSBkZXYgdGhlIFJYODkwMCBk ZXZpY2UNCj4gPiArICogQHBhcmFtIGZtdCBhIHByaW50ZiBmb3JtYXQNCj4gPiArICovDQo+ ID4gKyNkZWZpbmUgVFJBQ0UoZGV2LCBmbXQsIC4uLikgXA0KPiA+ICvCoMKgwqDCoGRvIHsg XA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKGxvZykgeyBcDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHRyYWNlKF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sICZkZXYs IGZtdCwgIyMNCj4gPiBfX1ZBX0FSR1NfXyk7IFwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0g XA0KPiA+ICvCoMKgwqDCoH0gd2hpbGUgKDApDQo+ID4gKyNlbHNlDQo+ID4gKyNkZWZpbmUg VFJBQ0UoZGV2LCBmbXQsIC4uLikNCj4gPiArI2VuZGlmDQo+IA0KPiANCj4gQWx0aG91Z2gg dGhpcyBpcyB2ZXJ5IHByYXRpY2FsIGFuZCBuaWNlbHkgd3JpdHRlbiwgSSBkb24ndMKgDQo+ IHRoaW5rIHlvdSBjYW4ga2VlcCB0aGVzZSBUUkFDRSBjYWxscyBpbiB0aGUgY29kZS4gWW91 IHNob3VsZMKgDQo+IHVzZSB0aGUgcWVtdSB0cmFjZSBzdWJzeXN0ZW0gZm9yIGl0Lg0KPiAN Cg0KT2suIFdvdWxkIGl0IGJlIHdvcnRoIGV4cGFuZGluZyB0aGlzIHRvIGluY2x1ZGUgdGhl IGZpbGUgJiBsaW5lLCBvciBkbw0KeW91IGV4cGVjdCByZXNpc3RhbmNlPw0KDQo+IA0KPiA+ IA0KPiA+ICtzdGF0aWMgdm9pZCBjYXB0dXJlX2N1cnJlbnRfdGltZShSWDg5MDBTdGF0ZSAq cykNCj4gPiArew0KPiA+ICvCoMKgwqDCoC8qIENhcHR1cmUgdGhlIGN1cnJlbnQgdGltZSBp bnRvIHRoZSBzZWNvbmRhcnkgcmVnaXN0ZXJzDQo+ID4gK8KgwqDCoMKgwqAqIHdoaWNoIHdp bGwgYmUgYWN0dWFsbHkgcmVhZCBieSB0aGUgZGF0YSB0cmFuc2ZlciBvcGVyYXRpb24uDQo+ ID4gK8KgwqDCoMKgwqAqLw0KPiA+ICvCoMKgwqDCoHN0cnVjdCB0bSBub3c7DQo+ID4gK8Kg wqDCoMKgcWVtdV9nZXRfdGltZWRhdGUoJm5vdywgcy0+b2Zmc2V0KTsNCj4gPiArwqDCoMKg wqBzLT5udnJhbVtTRUNPTkRTXSA9IHRvX2JjZChub3cudG1fc2VjKTsNCj4gPiArwqDCoMKg wqBzLT5udnJhbVtNSU5VVEVTXSA9IHRvX2JjZChub3cudG1fbWluKTsNCj4gPiArwqDCoMKg wqBzLT5udnJhbVtIT1VSU10gPSB0b19iY2Qobm93LnRtX2hvdXIpOw0KPiA+ICsNCj4gPiAr wqDCoMKgwqBzLT5udnJhbVtXRUVLREFZXSA9IDB4MDEgPDwgKChub3cudG1fd2RheSArIHMt PndkYXlfb2Zmc2V0KSAlDQo+ID4gNyk7DQo+ID4gK8KgwqDCoMKgcy0+bnZyYW1bREFZXSA9 IHRvX2JjZChub3cudG1fbWRheSk7DQo+ID4gK8KgwqDCoMKgcy0+bnZyYW1bTU9OVEhdID0g dG9fYmNkKG5vdy50bV9tb24gKyAxKTsNCj4gPiArwqDCoMKgwqBzLT5udnJhbVtZRUFSXSA9 IHRvX2JjZChub3cudG1feWVhciAlIDEwMCk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoHMtPm52 cmFtW0VYVF9TRUNPTkRTXSA9IHMtPm52cmFtW1NFQ09ORFNdOw0KPiA+ICvCoMKgwqDCoHMt Pm52cmFtW0VYVF9NSU5VVEVTXSA9IHMtPm52cmFtW01JTlVURVNdOw0KPiA+ICvCoMKgwqDC oHMtPm52cmFtW0VYVF9IT1VSU10gPSBzLT5udnJhbVtIT1VSU107DQo+ID4gK8KgwqDCoMKg cy0+bnZyYW1bRVhUX1dFRUtEQVldID0gcy0+bnZyYW1bV0VFS0RBWV07DQo+ID4gK8KgwqDC oMKgcy0+bnZyYW1bRVhUX0RBWV0gPSBzLT5udnJhbVtEQVldOw0KPiA+ICvCoMKgwqDCoHMt Pm52cmFtW0VYVF9NT05USF0gPSBzLT5udnJhbVtNT05USF07DQo+ID4gK8KgwqDCoMKgcy0+ bnZyYW1bRVhUX1lFQVJdID0gcy0+bnZyYW1bWUVBUl07DQo+ID4gKw0KPiA+ICvCoMKgwqDC oFRSQUNFKHMtPnBhcmVudF9vYmosICJVcGRhdGUgY3VycmVudCB0aW1lIHRvICUwMmQ6JTAy ZDolMDJkICVkDQo+ID4gJWQvJWQvJWQgIg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAiKDB4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCkiLA0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBub3cudG1faG91ciwgbm93LnRtX21pbiwgbm93LnRtX3NlYywNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKG5vdy50bV93ZGF5ICsgcy0+d2RheV9vZmZz ZXQpICUgNywNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbm93LnRtX21kYXksIG5v dy50bV9tb24sIG5vdy50bV95ZWFyICsgMTkwMCwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcy0+bnZyYW1bSE9VUlNdLCBzLT5udnJhbVtNSU5VVEVTXSwgcy0+bnZyYW1bU0VD T05EU10sDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtW1dFRUtEQVld LA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzLT5udnJhbVtEQVldLCBzLT5udnJh bVtNT05USF0sIHMtPm52cmFtW1lFQVJdKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIEluY3JlbWVudCB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIgcG9pbnRlciwgZGVhbGlu ZyB3aXRoIHdyYXBwaW5nDQo+ID4gKyAqIEBwYXJhbSBzIHRoZSBSVEMgdG8gb3BlcmF0ZSBv bg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgaW5jX3JlZ3B0cihSWDg5MDBTdGF0ZSAq cykNCj4gPiArew0KPiA+ICvCoMKgwqDCoC8qIFRoZSByZWdpc3RlciBwb2ludGVyIHdyYXBz IGFyb3VuZCBhZnRlciAweDFGDQo+ID4gK8KgwqDCoMKgwqAqLw0KPiA+ICvCoMKgwqDCoHMt PnB0ciA9IChzLT5wdHIgKyAxKSAmIChSWDg5MDBfTlZSQU1fU0laRSAtIDEpOw0KPiA+ICvC oMKgwqDCoFRSQUNFKHMtPnBhcmVudF9vYmosICJPcGVyYXRpbmcgb24gcmVnaXN0ZXIgMHgl MDJ4Iiwgcy0+cHRyKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKHMtPnB0ciA9PSAweDAw KSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBUUkFDRShzLT5wYXJlbnRfb2JqLCAiUmVnaXN0 ZXIgcG9pbnRlciBoYXMgb3ZlcmZsb3dlZCwNCj4gPiB3cmFwcGluZyB0byAwIik7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqBjYXB0dXJlX2N1cnJlbnRfdGltZShzKTsNCj4gPiArwqDCoMKg wqB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBSZWNlaXZlIGFuIEkyQyBF dmVudA0KPiA+ICsgKiBAcGFyYW0gaTJjIHRoZSBpMmMgZGV2aWNlIGluc3RhbmNlDQo+ID4g KyAqIEBwYXJhbSBldmVudCB0aGUgZXZlbnQgdG8gaGFuZGxlDQo+ID4gKyAqLw0KPiA+ICtz dGF0aWMgdm9pZCByeDg5MDBfZXZlbnQoSTJDU2xhdmUgKmkyYywgZW51bSBpMmNfZXZlbnQg ZXZlbnQpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBSWDg5MDBTdGF0ZSAqcyA9IFJYODkwMChp MmMpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBzd2l0Y2ggKGV2ZW50KSB7DQo+ID4gK8KgwqDC oMKgY2FzZSBJMkNfU1RBUlRfUkVDVjoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoC8qIEluIGgv dywgdGltZSBjYXB0dXJlIGhhcHBlbnMgb24gYW55IFNUQVJUIGNvbmRpdGlvbiwNCj4gPiBu b3QganVzdCBhDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCogU1RBUlRfUkVDVi4gRm9yIHRo ZSBlbXVsYXRpb24sIGl0IGRvZXNuJ3QgYWN0dWFsbHkNCj4gPiBtYXR0ZXIsDQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoCogc2luY2UgYSBTVEFSVF9SRUNWIGhhcyB0byBvY2N1ciBiZWZv cmUgdGhlIGRhdGEgY2FuIGJlDQo+ID4gcmVhZC4NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg Ki8NCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhcHR1cmVfY3VycmVudF90aW1lKHMpOw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gK8KgwqDCoMKgY2FzZSBJMkNfU1RBUlRf U0VORDoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHMtPmFkZHJfYnl0ZSA9IHRydWU7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiArwqDCoMKgwqBjYXNlIEkyQ19GSU5JU0g6 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBpZiAocy0+d2Vla2RheSA8IDcpIHsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogV2UgZGVmZXIgdGhlIHdlZWtkYXkgY2FsY3VsYXRp b24gYXMgaXQgaXMgaGFuZGVkIHRvDQo+ID4gdXMgYmVmb3JlDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgKiB0aGUgZGF0ZSBoYXMgYmVlbiB1cGRhdGVkLiBJZiB3ZSBjYWxj dWxhdGUgdGhlDQo+ID4gd2Vla2RheSBvZmZzZXQNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAqIHdoZW4gaXQgaXMgcGFzc2VkIHRvIHVzLCB3ZSB3aWxsIGluY29ycmVjdGx5 DQo+ID4gZGV0ZXJtaW5lIGl0DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKiBi YXNlZCBvbiB0aGUgY3VycmVudCBlbXVsYXRlZCBkYXRlLCByYXRoZXIgdGhhbiB0aGUNCj4g PiBkYXRlIHRoYXQNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqIGhhcyBiZWVu IHdyaXR0ZW4uDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKi8NCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHRtIG5vdzsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcWVtdV9nZXRfdGltZWRhdGUoJm5vdywgcy0+b2Zmc2V0KTsNCj4gPiAr DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPndkYXlfb2Zmc2V0ID0gKHMtPndl ZWtkYXkgLSBub3cudG1fd2RheSArIDcpICUgNzsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoFRSQUNFKHMtPnBhcmVudF9vYmosICJTZXQgd2Vla2RheSB0byAlZCAo MHglMDJ4KSwNCj4gPiB3ZGF5X29mZnNldD0lZCIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzLT53ZWVrZGF5LCBCSVQocy0+d2Vla2RheSksIHMt PndkYXlfb2Zmc2V0KTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMt PndlZWtkYXkgPSA3Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgYnJlYWs7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGRlZmF1bHQ6DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqBicmVhazsNCj4gPiArwqDCoMKgwqB9DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgKiBQZXJmb3JtIGFuIGkyYyByZWNlaXZlIGFjdGlvbg0KPiA+ICsgKiBA cGFyYW0gaTJjIHRoZSBpMmMgZGV2aWNlIGluc3RhbmNlDQo+ID4gKyAqIEByZXR1cm4gdGhl IHZhbHVlIG9mIHRoZSBjdXJyZW50IHJlZ2lzdGVyDQo+ID4gKyAqIEBwb3N0IHRoZSBpbnRl cm5hbCByZWdpc3RlciBwb2ludGVyIGlzIGluY3JlbWVudGVkDQo+ID4gKyAqLw0KPiA+ICtz dGF0aWMgaW50IHJ4ODkwMF9yZWN2KEkyQ1NsYXZlICppMmMpDQo+ID4gK3sNCj4gPiArwqDC oMKgwqBSWDg5MDBTdGF0ZSAqcyA9IFJYODkwMChpMmMpOw0KPiA+ICvCoMKgwqDCoHVpbnQ4 X3QgcmVzID0gcy0+bnZyYW1bcy0+cHRyXTsNCj4gPiArwqDCoMKgwqBUUkFDRShzLT5wYXJl bnRfb2JqLCAiUmVhZCByZWdpc3RlciAweCV4ID0gMHgleCIsIHMtPnB0ciwNCj4gPiByZXMp Ow0KPiA+ICvCoMKgwqDCoGluY19yZWdwdHIocyk7DQo+ID4gK8KgwqDCoMKgcmV0dXJuIHJl czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIFZhbGlkYXRlIHRoZSBleHRl bnNpb24gcmVnaXN0ZXIgYW5kIHBlcmZvcm0gYWN0aW9ucyBiYXNlZCBvbg0KPiA+IHRoZSBi aXRzDQo+ID4gKyAqIEBwYXJhbSBzIHRoZSBSVEMgdG8gb3BlcmF0ZSBvbg0KPiA+ICsgKiBA cGFyYW0gZGF0YSB0aGUgbmV3IGRhdGEgZm9yIHRoZSBleHRlbnNpb24gcmVnaXN0ZXINCj4g PiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHVwZGF0ZV9leHRlbnNpb25fcmVnaXN0ZXIoUlg4 OTAwU3RhdGUgKnMsIHVpbnQ4X3QNCj4gPiBkYXRhKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKg aWYgKGRhdGEgJiBFWFRfTUFTS19URVNUKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBlcnJv cl9yZXBvcnQoIldBUk5JTkc6IFJYODkwMCAtICINCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIlRlc3QgYml0IGlzIGVuYWJsZWQgYnV0IGlzIGZvcmJpZGRlbiBieSB0aGUNCj4g PiBtYW51ZmFjdHVyZXIiKTsNCj4gDQo+IG1heSBiZSB1c2UgaW5zdGVhZCA6DQo+IA0KPiDC oMKgwqDCoMKgwqDCoHFlbXVfbG9nX21hc2soTE9HX0dVRVNUX0VSUk9SLA0KPiANCg0KT0sN Cg0KPiA+IA0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKChkYXRh IF4gcy0+bnZyYW1bRVhURU5TSU9OX1JFR0lTVEVSXSkgJg0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAoRVhUX01BU0tfRlNFTDAgfCBFWFRfTUFTS19GU0VMMSkpIHsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgZnNlbCA9IChkYXRhICYgKEVYVF9NQVNLX0ZTRUww IHwgRVhUX01BU0tfRlNFTDEpKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoD4+IEVYVF9SRUdfRlNFTDA7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqAvKiBGU0VMeCBo YXMgY2hhbmdlZCAqLw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgc3dpdGNoIChmc2VsKSB7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqBjYXNlIDB4MDE6DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoFRSQUNFKHMtPnBhcmVudF9vYmosICJTZXR0aW5nIGZvdXQgdG8gMTAyNEh6Iik7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB0aW1lcl9zZXRfbGltaXQocy0+Zm91 dF90aW1lciwgMzIsIDEpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgMHgwMjoNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgVFJBQ0Uocy0+cGFyZW50X29iaiwgIlNldHRpbmcgZm91dCB0byAxSHoiKTsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHRpbWVyX3NldF9saW1pdChzLT5mb3V0 X3RpbWVyLCAzMjc2OCwgMSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFr Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZGVmYXVsdDoNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgVFJBQ0Uocy0+cGFyZW50X29iaiwgIlNldHRpbmcgZm91dCB0byAzMjc2OEh6 Iik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB0aW1lcl9zZXRfbGltaXQocy0+ Zm91dF90aW1lciwgMSwgMSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFr Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4g K8KgwqDCoMKgaWYgKChkYXRhIF4gcy0+bnZyYW1bRVhURU5TSU9OX1JFR0lTVEVSXSkgJg0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoRVhUX01BU0tfVFNFTDAgfCBFWFRfTUFT S19UU0VMMSkpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgdHNlbCA9IChkYXRh ICYgKEVYVF9NQVNLX1RTRUwwIHwgRVhUX01BU0tfVFNFTDEpKQ0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoD4+IEVYVF9SRUdfVFNFTDA7DQo+ID4gK8KgwqDCoMKg wqDCoMKgwqAvKiBUU0VMeCBoYXMgY2hhbmdlZCAqLw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg c3dpdGNoICh0c2VsKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBjYXNlIDB4MDA6DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFRSQUNFKHMtPnBhcmVudF9vYmosICJTZXR0aW5n IGNvdW50ZG93biB0aW1lciB0byA2NA0KPiA+IEh6Iik7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHB0aW1lcl9zZXRfbGltaXQocy0+Y291bnRkb3duX3RpbWVyLCA0MDk2IC8g NjQsIDEpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoGNhc2UgMHgwMToNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg VFJBQ0Uocy0+cGFyZW50X29iaiwgIlNldHRpbmcgY291bnRkb3duIHRpbWVyIHRvIDENCj4g PiBIeiIpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdGltZXJfc2V0X2xpbWl0 KHMtPmNvdW50ZG93bl90aW1lciwgNDA5NiwgMSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGJyZWFrOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgY2FzZSAweDAyOg0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBUUkFDRShzLT5wYXJlbnRfb2JqLA0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIlNldHRpbmcgY291bnRkb3du IHRpbWVyIHRvIHBlciBtaW51dGUNCj4gPiB1cGRhdGVzIik7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHB0aW1lcl9zZXRfbGltaXQocy0+Y291bnRkb3duX3RpbWVyLCA0MDY5 ICogNjAsIDEpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoGNhc2UgMHgwMzoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgVFJBQ0Uocy0+cGFyZW50X29iaiwgIlNldHRpbmcgY291bnRkb3duIHRpbWVyIHRvDQo+ ID4gNDA5Nkh6Iik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB0aW1lcl9zZXRf bGltaXQocy0+Y291bnRkb3duX3RpbWVyLCAxLCAxKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgYnJlYWs7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKg fQ0KPiA+ICsNCj4gPiArwqDCoMKgwqBpZiAoZGF0YSAmIEVYVF9NQVNLX1RFKSB7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqBlbmFibGVfY291bnRkb3duX3RpbWVyKHMpOw0KPiA+ICvCoMKg wqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgcy0+bnZyYW1bRVhURU5TSU9OX1JFR0lTVEVS XSA9IGRhdGE7DQo+ID4gK8KgwqDCoMKgcy0+bnZyYW1bRVhUX0VYVEVOU0lPTl9SRUdJU1RF Ul0gPSBkYXRhOw0KPiA+ICsNCj4gPiArfQ0KPiA+ICsvKioNCj4gPiArICogVmFsaWRhdGUg dGhlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIHBlcmZvcm0gYWN0aW9ucyBiYXNlZCBvbiB0aGUN Cj4gPiBiaXRzDQo+ID4gKyAqIEBwYXJhbSBzIHRoZSBSVEMgdG8gb3BlcmF0ZSBvbg0KPiA+ ICsgKiBAcGFyYW0gZGF0YSB0aGUgbmV3IHZhbHVlIGZvciB0aGUgY29udHJvbCByZWdpc3Rl cg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHVwZGF0ZV9jb250cm9sX3Jl Z2lzdGVyKFJYODkwMFN0YXRlICpzLCB1aW50OF90IGRhdGEpDQo+ID4gK3sNCj4gPiArwqDC oMKgwqB1aW50OF90IGRpZmZtYXNrID0gfnMtPm52cmFtW0NPTlRST0xfUkVHSVNURVJdICYg ZGF0YTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKGRpZmZtYXNrICYgQ1RSTF9NQVNLX1dQ MCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZGF0YSAmPSB+Q1RSTF9NQVNLX1dQMDsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgiV0FSTklORzogUlg4OTAwIC0gIg0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiQXR0ZW1wdCB0byB3cml0ZSB0byB3cml0 ZSBwcm90ZWN0ZWQgYml0ICVkIGluIGNvbnRyb2wNCj4gPiByZWdpc3RlciIsDQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoENUUkxfUkVHX1dQMCk7DQo+IA0KPiANCj4gbWF5IGJl IHVzZSBpbnN0ZWFkIDoNCj4gDQo+IMKgwqDCoMKgwqDCoMKgcWVtdV9sb2dfbWFzayhMT0df R1VFU1RfRVJST1IsDQo+IA0KPiA+IA0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8Kg wqDCoMKgaWYgKGRpZmZtYXNrICYgQ1RSTF9NQVNLX1dQMSkgew0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgZGF0YSAmPSB+Q1RSTF9NQVNLX1dQMTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGVy cm9yX3JlcG9ydCgiV0FSTklORzogUlg4OTAwIC0gIg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAiQXR0ZW1wdCB0byB3cml0ZSB0byB3cml0ZSBwcm90ZWN0ZWQgYml0ICVkIGlu IGNvbnRyb2wNCj4gPiByZWdpc3RlciIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oENUUkxfUkVHX1dQMSk7DQo+IA0KPiBkaXR0byBmb3IgYWxsIGluIGZhY3QuDQo+IA0KPiA+ IA0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKGRhdGEgJiBDVFJM X01BU0tfUkVTRVQpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGRhdGEgJj0gfkNUUkxfTUFT S19SRVNFVDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHJ4ODkwMF9yZXNldChERVZJQ0Uocykp Ow0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKGRpZmZtYXNrICYg Q1RSTF9NQVNLX1VJRSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgLyogVXBkYXRlIGludGVy cnVwdHMgd2VyZSBvZmYgYW5kIGFyZSBub3cgb24gKi8NCj4gPiArwqDCoMKgwqDCoMKgwqDC oHN0cnVjdCB0bSBub3c7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgVFJBQ0Uocy0+ cGFyZW50X29iaiwgIkVuYWJsaW5nIHVwZGF0ZSB0aW1lciIpOw0KPiA+ICsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoHFlbXVfZ2V0X3RpbWVkYXRlKCZub3csIHMtPm9mZnNldCk7DQo+ID4g Kw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+bGFzdF91cGRhdGVfaW50ZXJydXB0X21pbnV0 ZXMgPSBub3cudG1fbWluOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+bGFzdF9pbnRlcnJ1 cHRfc2Vjb25kcyA9IG5vdy50bV9zZWM7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBlbmFibGVf dGltZXIocyk7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqBpZiAoZGlm Zm1hc2sgJiBDVFJMX01BU0tfQUlFKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqAvKiBBbGFy bSBpbnRlcnJ1cHRzIHdlcmUgb2ZmIGFuZCBhcmUgbm93IG9uICovDQo+ID4gK8KgwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgdG0gbm93Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoFRS QUNFKHMtPnBhcmVudF9vYmosICJFbmFibGluZyBhbGFybSIpOw0KPiA+ICsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoHFlbXVfZ2V0X3RpbWVkYXRlKCZub3csIHMtPm9mZnNldCk7DQo+ID4g Kw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+bGFzdF9pbnRlcnJ1cHRfc2Vjb25kcyA9IG5v dy50bV9zZWM7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBlbmFibGVfdGltZXIocyk7DQo+ID4g K8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqBpZiAoIShkYXRhICYgKENUUkxfTUFT S19VSUUgfCBDVFJMX01BU0tfQUlFKSkpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGRpc2Fi bGVfdGltZXIocyk7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqBpZiAo ZGF0YSAmIENUUkxfTUFTS19USUUpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGVuYWJsZV9j b3VudGRvd25fdGltZXIocyk7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKg wqBzLT5udnJhbVtDT05UUk9MX1JFR0lTVEVSXSA9IGRhdGE7DQo+ID4gK8KgwqDCoMKgcy0+ bnZyYW1bRVhUX0NPTlRST0xfUkVHSVNURVJdID0gZGF0YTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIFZhbGlkYXRlIHRoZSBmbGFnIHJlZ2lzdGVyDQo+ID4gKyAqIEBw YXJhbSBzIHRoZSBSVEMgdG8gb3BlcmF0ZSBvbg0KPiA+ICsgKiBAcGFyYW0gZGF0YSB0aGUg bmV3IHZhbHVlIGZvciB0aGUgZmxhZyByZWdpc3Rlcg0KPiA+ICsgKi8NCj4gPiArc3RhdGlj IHZvaWQgdmFsaWRhdGVfZmxhZ19yZWdpc3RlcihSWDg5MDBTdGF0ZSAqcywgdWludDhfdCAq ZGF0YSkNCj4gPiArew0KPiA+ICvCoMKgwqDCoHVpbnQ4X3QgZGlmZm1hc2sgPSB+cy0+bnZy YW1bRkxBR19SRUdJU1RFUl0gJiAqZGF0YTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKGRp ZmZtYXNrICYgRkxBR19NQVNLX1ZERVQpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoCpkYXRh ICY9IH5GTEFHX01BU0tfVkRFVDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9y dCgiV0FSTklORzogUlg4OTAwIC0gIg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAi T25seSAwIGNhbiBiZSB3cml0dGVuIHRvIFZERVQgYml0ICVkIGluIHRoZSBmbGFnDQo+ID4g cmVnaXN0ZXIiLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBGTEFHX1JFR19WREVU KTsNCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmIChkaWZmbWFzayAm IEZMQUdfTUFTS19WTEYpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoCpkYXRhICY9IH5GTEFH X01BU0tfVkxGOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZXJyb3JfcmVwb3J0KCJXQVJOSU5H OiBSWDg5MDAgLSAiDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJPbmx5IDAgY2Fu IGJlIHdyaXR0ZW4gdG8gVkxGIGJpdCAlZCBpbiB0aGUgZmxhZw0KPiA+IHJlZ2lzdGVyIiwN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRkxBR19SRUdfVkxGKTsNCj4gPiArwqDC oMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmIChkaWZmbWFzayAmIEZMQUdfTUFTS19V TlVTRURfMikgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgKmRhdGEgJj0gfkZMQUdfTUFTS19V TlVTRURfMjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgiV0FSTklORzog Ulg4OTAwIC0gIg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiT25seSAwIGNhbiBi ZSB3cml0dGVuIHRvIHVudXNlZCBiaXQgJWQgaW4gdGhlIGZsYWcNCj4gPiByZWdpc3RlciIs DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEZMQUdfUkVHX1VOVVNFRF8yKTsNCj4g PiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmIChkaWZmbWFzayAmIEZMQUdf TUFTS19VTlVTRURfNikgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgKmRhdGEgJj0gfkZMQUdf TUFTS19VTlVTRURfNjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgiV0FS TklORzogUlg4OTAwIC0gIg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiT25seSAw IGNhbiBiZSB3cml0dGVuIHRvIHVudXNlZCBiaXQgJWQgaW4gdGhlIGZsYWcNCj4gPiByZWdp c3RlciIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEZMQUdfUkVHX1VOVVNFRF82 KTsNCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmIChkaWZmbWFzayAm IEZMQUdfTUFTS19VTlVTRURfNykgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgKmRhdGEgJj0g fkZMQUdfTUFTS19VTlVTRURfNzsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9y dCgiV0FSTklORzogUlg4OTAwIC0gIg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAi T25seSAwIGNhbiBiZSB3cml0dGVuIHRvIHVudXNlZCBiaXQgJWQgaW4gdGhlIGZsYWcNCj4g PiByZWdpc3RlciIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEZMQUdfUkVHX1VO VVNFRF83KTsNCj4gPiArwqDCoMKgwqB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgKiBUaWNrIHRoZSBwZXIgc2Vjb25kIHRpbWVyIChjYW4gYmUgY2FsbGVkIG1vcmUgZnJl cXVlbnRseSBhcyBpdA0KPiA+IGVhcmx5IGV4aXRzDQo+ID4gKyAqIGlmIHRoZSB3YWxsIGNs b2NrIGhhcyBub3QgcHJvZ3Jlc3NlZCkNCj4gPiArICogQHBhcmFtIG9wYXF1ZSB0aGUgUlRD IHRvIHRpY2sNCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHJ4ODkwMF90aW1lcl90aWNr KHZvaWQgKm9wYXF1ZSkNCj4gPiArew0KPiA+ICvCoMKgwqDCoFJYODkwMFN0YXRlICpzID0g KFJYODkwMFN0YXRlICopb3BhcXVlOw0KPiA+ICvCoMKgwqDCoHN0cnVjdCB0bSBub3c7DQo+ ID4gK8KgwqDCoMKgYm9vbCBmaXJlX2ludGVycnVwdCA9IGZhbHNlOw0KPiA+ICsNCj4gPiAr wqDCoMKgwqBxZW11X2dldF90aW1lZGF0ZSgmbm93LCBzLT5vZmZzZXQpOw0KPiA+ICsNCj4g PiArwqDCoMKgwqBpZiAobm93LnRtX3NlYyA9PSBzLT5sYXN0X2ludGVycnVwdF9zZWNvbmRz KSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ ICsNCj4gPiArwqDCoMKgwqBzLT5sYXN0X2ludGVycnVwdF9zZWNvbmRzID0gbm93LnRtX3Nl YzsNCj4gPiArDQo+ID4gK8KgwqDCoMKgVFJBQ0Uocy0+cGFyZW50X29iaiwgIlRpY2siKTsN Cj4gPiArDQo+ID4gK8KgwqDCoMKgLyogVXBkYXRlIHRpbWVyIGludGVycnVwdCAqLw0KPiA+ ICvCoMKgwqDCoGlmIChzLT5udnJhbVtDT05UUk9MX1JFR0lTVEVSXSAmIENUUkxfTUFTS19V SUUpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGlmICgocy0+bnZyYW1bRVhURU5TSU9OX1JF R0lTVEVSXSAmIEVYVF9NQVNLX1VTRUwpICYmDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbm93LnRtX21pbiAhPSBzLT5sYXN0X3VwZGF0ZV9pbnRlcnJ1cHRfbWlu dXRlcykgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzLT5sYXN0X3VwZGF0ZV9p bnRlcnJ1cHRfbWludXRlcyA9IG5vdy50bV9taW47DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHMtPm52cmFtW0ZMQUdfUkVHSVNURVJdIHw9IEZMQUdfTUFTS19VRjsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmlyZV9pbnRlcnJ1cHQgPSB0cnVlOw0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgfSBlbHNlIGlmICghKHMtPm52cmFtW0VYVEVOU0lPTl9SRUdJU1RF Ul0gJg0KPiA+IEVYVF9NQVNLX1VTRUwpKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC8qIHBlciBzZWNvbmQgdXBkYXRlIGludGVycnVwdCAqLw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzLT5udnJhbVtGTEFHX1JFR0lTVEVSXSB8PSBGTEFHX01BU0tfVUY7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZpcmVfaW50ZXJydXB0ID0gdHJ1ZTsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvC oMKgwqDCoC8qIEFsYXJtIGludGVycnVwdCAqLw0KPiA+ICvCoMKgwqDCoGlmICgocy0+bnZy YW1bQ09OVFJPTF9SRUdJU1RFUl0gJiBDVFJMX01BU0tfQUlFKSAmJiBub3cudG1fc2VjDQo+ ID4gPT0gMCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKHMtPm52cmFtW0FMQVJNX01J TlVURV0gPT0gdG9fYmNkKG5vdy50bV9taW4pICYmDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcy0+bnZyYW1bQUxBUk1fSE9VUl0gPT0gdG9fYmNkKG5vdy50bV9o b3VyKSAmJg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPm52cmFt W0FMQVJNX1dFRUtfREFZXSA9PQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAoKHMtPm52cmFtW0VYVEVOU0lPTl9SRUdJU1RFUl0gJg0K PiA+IEVYVF9NQVNLX1dBREEpID8NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRvX2JjZChub3cudG1fbWRh eSkgOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMSA8PCAoKG5vdy50bV93ZGF5ICsgcy0NCj4gPiA+ d2RheV9vZmZzZXQpICUgNykpKSB7DQo+IA0KPiANCj4gdGhhdCdzIGEgbmljZSBpZiBjb25k aXRpb24gOikgTWF5IGJlIHdlIGNvdWxkIHVzZSBhIHRlbXAgdmFyaWFibGUgZm9yDQo+IHRo ZSBsYXN0IG9uZS4NCg0KT2ssIGl0IHdhcyBtb3JlIHJlYWRhYmxlIHdpdGggbG9uZ2VyIGxp bmVzIDopDQoNCj4gDQo+ID4gDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFRSQUNF KHMtPnBhcmVudF9vYmosICJUcmlnZ2VyaW5nIGFsYXJtIik7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHMtPm52cmFtW0ZMQUdfUkVHSVNURVJdIHw9IEZMQUdfTUFTS19BRjsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmlyZV9pbnRlcnJ1cHQgPSB0cnVlOw0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8Kg wqDCoMKgaWYgKGZpcmVfaW50ZXJydXB0KSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBUUkFD RShzLT5wYXJlbnRfb2JqLCAiUHVsc2luZyBpbnRlcnJ1cHQiKTsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoHFlbXVfaXJxX3B1bHNlKHMtPmludGVycnVwdF9waW4pOw0KPiA+ICvCoMKgwqDC oH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIERpc2FibGUgdGhlIHBlciBz ZWNvbmQgdGltZXINCj4gPiArICogQHBhcmFtIHMgdGhlIFJUQyB0byBvcGVyYXRlIG9uDQo+ ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCBkaXNhYmxlX3RpbWVyKFJYODkwMFN0YXRlICpz KQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgVFJBQ0Uocy0+cGFyZW50X29iaiwgIkRpc2FibGlu ZyB0aW1lciIpOw0KPiA+ICvCoMKgwqDCoHB0aW1lcl9zdG9wKHMtPnNlY190aW1lcik7DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBFbmFibGUgdGhlIHBlciBzZWNvbmQg dGltZXINCj4gPiArICogQHBhcmFtIHMgdGhlIFJUQyB0byBvcGVyYXRlIG9uDQo+ID4gKyAq Lw0KPiA+ICtzdGF0aWMgdm9pZCBlbmFibGVfdGltZXIoUlg4OTAwU3RhdGUgKnMpDQo+ID4g K3sNCj4gPiArwqDCoMKgwqBUUkFDRShzLT5wYXJlbnRfb2JqLCAiRW5hYmxpbmcgdGltZXIi KTsNCj4gPiArwqDCoMKgwqBwdGltZXJfcnVuKHMtPnNlY190aW1lciwgMCk7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBIYW5kbGUgRk9VVF9FTkFCTEUgKEZPRSkgbGlu ZQ0KPiA+ICsgKiBFbmFibGVzL2Rpc2FibGVzIHRoZSBGT1VUIGxpbmUNCj4gPiArICogQHBh cmFtIG9wYXF1ZSB0aGUgZGV2aWNlIGluc3RhbmNlDQo+ID4gKyAqIEBwYXJhbSBuIHRoZSBJ UlEgbnVtYmVyDQo+ID4gKyAqIEBwYXJhbSBsZXZlbCB0cnVlIGlmIHRoZSBsaW5lIGhhcyBi ZWVuIHJhaXNlZA0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgcng4OTAwX2ZvdXRfZW5h YmxlX2hhbmRsZXIodm9pZCAqb3BhcXVlLCBpbnQgbiwgaW50DQo+ID4gbGV2ZWwpDQo+ID4g K3sNCj4gPiArwqDCoMKgwqBSWDg5MDBTdGF0ZSAqcyA9IFJYODkwMChvcGFxdWUpOw0KPiA+ ICsNCj4gPiArwqDCoMKgwqBpZiAobGV2ZWwpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoFRS QUNFKHMtPnBhcmVudF9vYmosICJFbmFibGluZyBmb3V0Iik7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqBwdGltZXJfcnVuKHMtPmZvdXRfdGltZXIsIDApOw0KPiA+ICvCoMKgwqDCoH0gZWxz ZSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqAvKiBkaXNhYmxlIGZvdXQgKi8NCj4gPiArwqDC oMKgwqDCoMKgwqDCoFRSQUNFKHMtPnBhcmVudF9vYmosICJEaXNhYmxpbmcgZm91dCIpOw0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgcHRpbWVyX3N0b3Aocy0+Zm91dF90aW1lcik7DQo+ID4g K8KgwqDCoMKgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogVGljayB0aGUg Rk9VVCB0aW1lcg0KPiA+ICsgKiBAcGFyYW0gb3BhcXVlIHRoZSBkZXZpY2UgaW5zdGFuY2UN Cj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHJ4ODkwMF9mb3V0X3RpY2sodm9pZCAqb3Bh cXVlKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgUlg4OTAwU3RhdGUgKnMgPSAoUlg4OTAwU3Rh dGUgKilvcGFxdWU7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoFRSQUNFKHMtPnBhcmVudF9vYmos ICJmb3V0IHRvZ2dsZSIpOw0KPiA+ICvCoMKgwqDCoHMtPmZvdXQgPSAhcy0+Zm91dDsNCj4g PiArDQo+ID4gK8KgwqDCoMKgaWYgKHMtPmZvdXQpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oHFlbXVfaXJxX3JhaXNlKHMtPmZvdXRfcGluKTsNCj4gPiArwqDCoMKgwqB9IGVsc2Ugew0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgcWVtdV9pcnFfbG93ZXIocy0+Zm91dF9waW4pOw0KPiA+ ICvCoMKgwqDCoH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBE aXNhYmxlIHRoZSBjb3VudGRvd24gdGltZXINCj4gPiArICogQHBhcmFtIHMgdGhlIFJUQyB0 byBvcGVyYXRlIG9uDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCBkaXNhYmxlX2NvdW50 ZG93bl90aW1lcihSWDg5MDBTdGF0ZSAqcykNCj4gPiArew0KPiA+ICvCoMKgwqDCoFRSQUNF KHMtPnBhcmVudF9vYmosICJEaXNhYmxpbmcgY291bnRkb3duIHRpbWVyIik7DQo+ID4gK8Kg wqDCoMKgcHRpbWVyX3N0b3Aocy0+Y291bnRkb3duX3RpbWVyKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIEVuYWJsZSB0aGUgcGVyIHNlY29uZCB0aW1lcg0KPiA+ICsg KiBAcGFyYW0gcyB0aGUgUlRDIHRvIG9wZXJhdGUgb24NCj4gPiArICovDQo+ID4gK3N0YXRp YyB2b2lkIGVuYWJsZV9jb3VudGRvd25fdGltZXIoUlg4OTAwU3RhdGUgKnMpDQo+ID4gK3sN Cj4gPiArwqDCoMKgwqBUUkFDRShzLT5wYXJlbnRfb2JqLCAiRW5hYmxpbmcgY291bnRkb3du IHRpbWVyIik7DQo+ID4gK8KgwqDCoMKgcHRpbWVyX3J1bihzLT5jb3VudGRvd25fdGltZXIs IDApOw0KPiA+ICt9DQo+IA0KPiBUaGVzZSBoZWxwZXJzIGRvbid0IGFkZCBtdWNoIEkgdGhp bmsuDQoNClRoZXkgYXJlIGNhbGxlZCBpbiBtdWx0aXBsZSBwbGFjZXMgYW5kIGFkZCB0cmFj aW5nLg0KDQo+ID4gDQo+ID4gKy8qKg0KPiA+ICsgKiBUaWNrIHRoZSBjb3VudGRvd24gdGlt ZXINCj4gPiArICogQHBhcmFtIG9wYXF1ZSB0aGUgZGV2aWNlIGluc3RhbmNlDQo+ID4gKyAq Lw0KPiA+ICtzdGF0aWMgdm9pZCByeDg5MDBfY291bnRkb3duX3RpY2sodm9pZCAqb3BhcXVl KQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgUlg4OTAwU3RhdGUgKnMgPSAoUlg4OTAwU3RhdGUg KilvcGFxdWU7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoHVpbnQxNl90IGNvdW50ID0gcy0+bnZy YW1bVElNRVJfQ09VTlRFUl8wXSArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgo cy0+bnZyYW1bVElNRVJfQ09VTlRFUl8xXSAmIDB4MEYpIDw8IDgpOw0KPiA+ICvCoMKgwqDC oFRSQUNFKHMtPnBhcmVudF9vYmosICJjb3VudGRvd24gdGljaywgY291bnQ9JWQiLCBjb3Vu dCk7DQo+ID4gK8KgwqDCoMKgY291bnQtLTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgcy0+bnZy YW1bVElNRVJfQ09VTlRFUl8wXSA9ICh1aW50OF90KShjb3VudCAmIDB4MDBmZik7DQo+ID4g K8KgwqDCoMKgcy0+bnZyYW1bVElNRVJfQ09VTlRFUl8xXSA9ICh1aW50OF90KSgoY291bnQg JiAweDBmMDApID4+IDgpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBpZiAoY291bnQgPT0gMCkg ew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgVFJBQ0Uocy0+cGFyZW50X29iaiwgIkNvdW50ZG93 biBoYXMgZWxhcHNlZCwgcHVsc2luZw0KPiA+IGludGVycnVwdCIpOw0KPiA+ICsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoGRpc2FibGVfY291bnRkb3duX3RpbWVyKHMpOw0KPiA+ICsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtW0ZMQUdfUkVHSVNURVJdIHw9IEZMQUdfTUFT S19URjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHFlbXVfaXJxX3B1bHNlKHMtPmludGVycnVw dF9waW4pOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiBSZWNlaXZlIGEgYnl0ZSBvZiBkYXRhIGZyb20gaTJjDQo+ID4gKyAqIEBw YXJhbSBpMmMgdGhlIGkyYyBkZXZpY2UgdGhhdCBpcyByZWNlaXZpbmcgZGF0YQ0KPiA+ICsg KiBAcGFyYW0gZGF0YSB0aGUgZGF0YSB0aGF0IHdhcyByZWNlaXZlZA0KPiA+ICsgKi8NCj4g PiArc3RhdGljIGludCByeDg5MDBfc2VuZChJMkNTbGF2ZSAqaTJjLCB1aW50OF90IGRhdGEp DQo+ID4gK3sNCj4gPiArwqDCoMKgwqBSWDg5MDBTdGF0ZSAqcyA9IFJYODkwMChpMmMpOw0K PiA+ICvCoMKgwqDCoHN0cnVjdCB0bSBub3c7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoFRSQUNF KHMtPnBhcmVudF9vYmosICJSZWNlaXZlZCBJMkMgZGF0YSAweCUwMngiLCBkYXRhKTsNCj4g PiArDQo+ID4gK8KgwqDCoMKgaWYgKHMtPmFkZHJfYnl0ZSkgew0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgcy0+cHRyID0gZGF0YSAmIChSWDg5MDBfTlZSQU1fU0laRSAtIDEpOw0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgVFJBQ0Uocy0+cGFyZW50X29iaiwgIk9wZXJhdGluZyBvbiByZWdp c3RlciAweCUwMngiLCBzLQ0KPiA+ID5wdHIpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+ YWRkcl9ieXRlID0gZmFsc2U7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4g PiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoFRSQUNFKHMtPnBhcmVudF9vYmos ICJTZXQgZGF0YSAweCUwMng9MHglMDJ4Iiwgcy0+cHRyLCBkYXRhKTsNCj4gPiArDQo+ID4g K8KgwqDCoMKgcWVtdV9nZXRfdGltZWRhdGUoJm5vdywgcy0+b2Zmc2V0KTsNCj4gPiArwqDC oMKgwqBzd2l0Y2ggKHMtPnB0cikgew0KPiA+ICvCoMKgwqDCoGNhc2UgU0VDT05EUzoNCj4g PiArwqDCoMKgwqBjYXNlIEVYVF9TRUNPTkRTOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgbm93 LnRtX3NlYyA9IGZyb21fYmNkKGRhdGEgJiAweDdmKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oHMtPm9mZnNldCA9IHFlbXVfdGltZWRhdGVfZGlmZigmbm93KTsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoGJyZWFrOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBjYXNlIE1JTlVURVM6DQo+ID4g K8KgwqDCoMKgY2FzZSBFWFRfTUlOVVRFUzoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoG5vdy50 bV9taW4gPSBmcm9tX2JjZChkYXRhICYgMHg3Zik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBz LT5vZmZzZXQgPSBxZW11X3RpbWVkYXRlX2RpZmYoJm5vdyk7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqBicmVhazsNCj4gPiArDQo+ID4gK8KgwqDCoMKgY2FzZSBIT1VSUzoNCj4gPiArwqDC oMKgwqBjYXNlIEVYVF9IT1VSUzoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoG5vdy50bV9ob3Vy ID0gZnJvbV9iY2QoZGF0YSAmIDB4M2YpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+b2Zm c2V0ID0gcWVtdV90aW1lZGF0ZV9kaWZmKCZub3cpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg YnJlYWs7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGNhc2UgV0VFS0RBWToNCj4gPiArwqDCoMKg wqBjYXNlIEVYVF9XRUVLREFZOiB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBpbnQgdXNlcl93 ZGF5ID0gY3R6MzIoZGF0YSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqAvKiBUaGUgZGF5IGZp ZWxkIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4gYSB2YWx1ZSBpbg0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqAqIHRoZSByYW5nZSAwLTYuIE90aGVyd2lzZSBiZWhhdmlvciBpcyB1bmRlZmlu ZWQuDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCovDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBz d2l0Y2ggKGRhdGEpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgMHgwMToNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoGNhc2UgMHgwMjoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2Ug MHgwNDoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgMHgwODoNCj4gPiArwqDCoMKgwqDC oMKgwqDCoGNhc2UgMHgxMDoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgMHgyMDoNCj4g PiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgMHg0MDoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYnJlYWs7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBkZWZhdWx0Og0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBlcnJvcl9yZXBvcnQoIldBUk5JTkc6IFJYODkwMCAtIHdl ZWtkYXkgZGF0YSAnJXgnIGlzDQo+ID4gb3V0IG9mIHJhbmdlLCINCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCIgdW5kZWZpbmVkIGJlaGF2aW9yIHdp bGwgcmVzdWx0IiwgZGF0YSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFr Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+d2Vl a2RheSA9IHVzZXJfd2RheTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ICvC oMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgY2FzZSBEQVk6DQo+ID4gK8KgwqDCoMKg Y2FzZSBFWFRfREFZOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgbm93LnRtX21kYXkgPSBmcm9t X2JjZChkYXRhICYgMHgzZik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBzLT5vZmZzZXQgPSBx ZW11X3RpbWVkYXRlX2RpZmYoJm5vdyk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsN Cj4gPiArDQo+ID4gK8KgwqDCoMKgY2FzZSBNT05USDoNCj4gPiArwqDCoMKgwqBjYXNlIEVY VF9NT05USDoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoG5vdy50bV9tb24gPSBmcm9tX2JjZChk YXRhICYgMHgxZikgLSAxOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+b2Zmc2V0ID0gcWVt dV90aW1lZGF0ZV9kaWZmKCZub3cpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ ID4gKw0KPiA+ICvCoMKgwqDCoGNhc2UgWUVBUjoNCj4gPiArwqDCoMKgwqBjYXNlIEVYVF9Z RUFSOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgbm93LnRtX3llYXIgPSBmcm9tX2JjZChkYXRh KSArIDEwMDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHMtPm9mZnNldCA9IHFlbXVfdGltZWRh dGVfZGlmZigmbm93KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ICsNCj4g PiArwqDCoMKgwqBjYXNlIEVYVEVOU0lPTl9SRUdJU1RFUjoNCj4gPiArwqDCoMKgwqBjYXNl IEVYVF9FWFRFTlNJT05fUkVHSVNURVI6DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB1cGRhdGVf ZXh0ZW5zaW9uX3JlZ2lzdGVyKHMsIGRhdGEpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJl YWs7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGNhc2UgRkxBR19SRUdJU1RFUjoNCj4gPiArwqDC oMKgwqBjYXNlIEVYVF9GTEFHX1JFR0lTVEVSOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgdmFs aWRhdGVfZmxhZ19yZWdpc3RlcihzLCAmZGF0YSk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgcy0+bnZyYW1bRkxBR19SRUdJU1RFUl0gPSBkYXRhOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgcy0+bnZyYW1bRVhUX0ZMQUdfUkVHSVNURVJdID0gZGF0YTsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoGJyZWFrOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBjYXNlIENPTlRST0xfUkVH SVNURVI6DQo+ID4gK8KgwqDCoMKgY2FzZSBFWFRfQ09OVFJPTF9SRUdJU1RFUjoNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoHVwZGF0ZV9jb250cm9sX3JlZ2lzdGVyKHMsIGRhdGEpOw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGRlZmF1bHQ6 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBzLT5udnJhbVtzLT5wdHJdID0gZGF0YTsNCj4gPiAr wqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGluY19yZWdwdHIocyk7DQo+ID4gK8Kg wqDCoMKgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBHZXQg dGhlIGRldmljZSB0ZW1wZXJhdHVyZSBpbiBDZWxjaXVzIGFzIGEgcHJvcGVydHkNCj4gPiAr ICogQHBhcmFtIG9iaiB0aGUgZGV2aWNlDQo+ID4gKyAqIEBwYXJhbSB2DQo+ID4gKyAqIEBw YXJhbSBuYW1lIHRoZSBwcm9wZXJ0eSBuYW1lDQo+ID4gKyAqIEBwYXJhbSBvcGFxdWUNCj4g PiArICogQHBhcmFtIGVycnAgYW4gZXJyb3Igb2JqZWN0IHRvIHBvcHVsYXRlIG9uIGZhaWx1 cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHJ4ODkwMF9nZXRfdGVtcGVyYXR1cmUo T2JqZWN0ICpvYmosIFZpc2l0b3IgKnYsIGNvbnN0DQo+ID4gY2hhciAqbmFtZSwNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHZvaWQgKm9wYXF1ZSwgRXJyb3IgKiplcnJwKQ0KPiA+ICt7DQo+ ID4gK8KgwqDCoMKgUlg4OTAwU3RhdGUgKnMgPSBSWDg5MDAob2JqKTsNCj4gPiArwqDCoMKg wqBkb3VibGUgdmFsdWUgPSAocy0+bnZyYW1bVEVNUEVSQVRVUkVdICogMi4wZiAtIDE4Ny4x ZikgLw0KPiA+IDMuMjE4ZjsNCj4gPiArDQo+ID4gK8KgwqDCoMKgVFJBQ0Uocy0+cGFyZW50 X29iaiwgIlJlYWQgdGVtcGVyYXR1cmUgcHJvcGVydHksIDB4JXggPSAlZsKwQyIsDQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtW1RFTVBFUkFUVVJFXSwgdmFsdWUp Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqB2aXNpdF90eXBlX251bWJlcih2LCBuYW1lLCAmdmFs dWUsIGVycnApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogU2V0IHRoZSBk ZXZpY2UgdGVtcGVyYXR1cmUgaW4gQ2VsY2l1cyBhcyBhIHByb3BlcnR5DQo+ID4gKyAqIEBw YXJhbSBvYmogdGhlIGRldmljZQ0KPiA+ICsgKiBAcGFyYW0gdg0KPiA+ICsgKiBAcGFyYW0g bmFtZSB0aGUgcHJvcGVydHkgbmFtZQ0KPiA+ICsgKiBAcGFyYW0gb3BhcXVlDQo+ID4gKyAq IEBwYXJhbSBlcnJwIGFuIGVycm9yIG9iamVjdCB0byBwb3B1bGF0ZSBvbiBmYWlsdXJlDQo+ ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCByeDg5MDBfc2V0X3RlbXBlcmF0dXJlKE9iamVj dCAqb2JqLCBWaXNpdG9yICp2LCBjb25zdA0KPiA+IGNoYXIgKm5hbWUsDQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB2b2lkICpvcGFxdWUsIEVycm9yICoqZXJycCkNCj4gPiArew0KPiA+ICvC oMKgwqDCoFJYODkwMFN0YXRlICpzID0gUlg4OTAwKG9iaik7DQo+ID4gK8KgwqDCoMKgRXJy b3IgKmxvY2FsX2VyciA9IE5VTEw7DQo+ID4gK8KgwqDCoMKgZG91YmxlIHRlbXA7IC8qIGRl Z3JlZXMgQ2VsY2l1cyAqLw0KPiA+ICvCoMKgwqDCoHZpc2l0X3R5cGVfbnVtYmVyKHYsIG5h bWUsICZ0ZW1wLCAmbG9jYWxfZXJyKTsNCj4gPiArwqDCoMKgwqBpZiAobG9jYWxfZXJyKSB7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBlcnJvcl9wcm9wYWdhdGUoZXJycCwgbG9jYWxfZXJy KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiArwqDCoMKgwqB9DQo+ID4g K8KgwqDCoMKgaWYgKHRlbXAgPj0gMTAwIHx8IHRlbXAgPCAtNTgpIHsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoGVycm9yX3NldGcoZXJycCwgInZhbHVlICVmwrBDIGlzIG91dCBvZiByYW5n ZSIsIHRlbXApOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+ICvCoMKgwqDC oH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgcy0+bnZyYW1bVEVNUEVSQVRVUkVdID0gKHVpbnQ4 X3QpICgodGVtcCAqIDMuMjE4ZiArIDE4Ny4xOWYpIC8NCj4gPiAyKTsNCj4gPiArDQo+ID4g K8KgwqDCoMKgVFJBQ0Uocy0+cGFyZW50X29iaiwgIlNldCB0ZW1wZXJhdHVyZSBwcm9wZXJ0 eSwgMHgleCA9ICVmwrBDIiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+bnZy YW1bVEVNUEVSQVRVUkVdLCB0ZW1wKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiBJbml0aWFsaXplIHRoZSBkZXZpY2UNCj4gPiArICogQHBhcmFtIGkyYyB0 aGUgaTJjIGRldmljZSBpbnN0YW5jZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCByeDg5 MDBfaW5pdChJMkNTbGF2ZSAqaTJjKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgVFJBQ0UoKmky YywgIkluaXRpYWxpemVkIik7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoHJldHVybiAwOw0KPiA+ ICt9DQo+IA0KPiB5b3UgY2FuIHJlbW92ZSB0aGlzIHJvdXRpbmUuDQo+IA0KDQpJIGRvbid0 IHRoaW5rIEkgY2FuLCBjb3JlLmM6aTJjX3NsYXZlX3FkZXZfaW5pdCgpIGNhbGxzIGl0IHdp dGhvdXQgYQ0KZ3VhcmQuDQoNCj4gPiANCj4gPiArLyoqDQo+ID4gKyAqIENvbmZpZ3VyZSBk ZXZpY2UgcHJvcGVydGllcw0KPiA+ICsgKiBAcGFyYW0gb2JqIHRoZSBkZXZpY2UNCj4gPiAr ICovDQo+ID4gK3N0YXRpYyB2b2lkIHJ4ODkwMF9pbml0Zm4oT2JqZWN0ICpvYmopDQo+ID4g K3sNCj4gPiArwqDCoMKgwqBvYmplY3RfcHJvcGVydHlfYWRkKG9iaiwgInRlbXBlcmF0dXJl IiwgIm51bWJlciIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJ4ODkwMF9nZXRfdGVtcGVyYXR1cmUsDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ4ODkwMF9zZXRfdGVtcGVy YXR1cmUsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICogUmVzZXQgdGhlIGRldmljZQ0KPiA+ICsgKiBAcGFyYW0gZGV2IHRoZSBSWDg5MDAg ZGV2aWNlIHRvIHJlc2V0DQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCByeDg5MDBfcmVz ZXQoRGV2aWNlU3RhdGUgKmRldikNCj4gPiArew0KPiA+ICvCoMKgwqDCoFJYODkwMFN0YXRl ICpzID0gUlg4OTAwKGRldik7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoFRSQUNFKHMtPnBhcmVu dF9vYmosICJSZXNldCIpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqAvKiBUaGUgY2xvY2sgaXMg cnVubmluZyBhbmQgc3luY2hyb25pemVkIHdpdGggdGhlIGhvc3QgKi8NCj4gPiArwqDCoMKg wqBzLT5vZmZzZXQgPSAwOw0KPiA+ICvCoMKgwqDCoHMtPndlZWtkYXkgPSA3OyAvKiBTZXQg dG8gYW4gaW52YWxpZCB2YWx1ZSAqLw0KPiA+ICsNCj4gPiArwqDCoMKgwqAvKiBUZW1wZXJh dHVyZSBmb3JtdWxhdGlvbiBmcm9tIHRoZSBkYXRhc2hlZXQNCj4gPiArwqDCoMKgwqDCoCog KCBURU1QWyA3OjAgXSAqIDIgLSAxODcuMTkpIC8gMy4yMTgNCj4gPiArwqDCoMKgwqDCoCoN Cj4gPiArwqDCoMKgwqDCoCogU2V0IHRoZSBpbml0aWFsIHN0YXRlIHRvIDI1IGRlZ3JlZXMg Q2VsY2l1cw0KPiA+ICvCoMKgwqDCoMKgKi8NCj4gPiArwqDCoMKgwqBzLT5udnJhbVtURU1Q RVJBVFVSRV0gPSAxMzU7IC8qICgyNSAqIDMuMjE4ICsgMTg3LjE5KSAvIDIgKi8NCj4gPiAr DQo+ID4gK8KgwqDCoMKgcy0+bnZyYW1bRVhURU5TSU9OX1JFR0lTVEVSXSA9IEVYVF9NQVNL X1RTRUwxOw0KPiA+ICvCoMKgwqDCoHMtPm52cmFtW0NPTlRST0xfUkVHSVNURVJdID0gQ1RS TF9NQVNLX0NTRUwwOw0KPiA+ICvCoMKgwqDCoHMtPm52cmFtW0ZMQUdfUkVHSVNURVJdID0g RkxBR19NQVNLX1ZMRiB8IEZMQUdfTUFTS19WREVUOw0KPiANCj4gSnVzdCBhc2tpbmcgOiB3 aHkgbm90IGZ1bGx5IG1lbXNldCgwKSB0aGUgbnZyYW3CoMKgYW5kIHRoZW4gc2V0wqANCj4g dGhlIHZhbHVlcyA/DQoNCkkgYWxzbyB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgYSBzb2Z0LXJl c2V0LCB3aGljaCBkb2VzIG5vdCBjbGVhciB0aGUNCm52cmFtLg0KDQpBY3R1YWxseSwgSSBz aG91bGQgbW92ZSB0aGUgdGVtcGVyYXR1cmUgb3V0IG9mIHRoZXJlLi4uDQoNCg0KQ2hlZXJz LA0KDQotLSANCkFsYXN0YWlyIEQnU2lsdmENCk9wZW4gU291cmNlIERldmVsb3Blcg0KTGlu dXggVGVjaG5vbG9neSBDZW50cmUsIElCTSBBdXN0cmFsaWENCm1vYjogMDQyMyA3NjIgODE5 DQoNCg==